diff --git a/SSL/src/Catalogs/Валюты/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/Валюты/Forms/ФормаСписка/Form.form index 439cf7847..9d017b905 100644 --- a/SSL/src/Catalogs/Валюты/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/Валюты/Forms/ФормаСписка/Form.form @@ -660,6 +660,18 @@ true + + Список.Кратность + + + Список.Курс + + + Список.Наименование + + + Список.Ссылка +
true
ВЫБРАТЬ diff --git a/SSL/src/Catalogs/Валюты/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/Валюты/Forms/ФормаСписка/Module.bsl index f27fe1bcd..c52816c52 100644 --- a/SSL/src/Catalogs/Валюты/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/Валюты/Forms/ФормаСписка/Module.bsl @@ -20,11 +20,6 @@ Список.УстановитьОграниченияИспользованияВПорядке(ИзменяемыеПоля); Список.УстановитьОграниченияИспользованияВОтборе(ИзменяемыеПоля); - Если Не Пользователи.РолиДоступны("ДобавлениеИзменениеКурсовВалют") Тогда - Элементы.ФормаПодборИзКлассификатора.Видимость = Ложь; - Элементы.ФормаЗагрузитьКурсыВалют.Видимость = Ложь; - КонецЕсли; - ДоступноИзменениеВалют = ПравоДоступа("Изменение", Метаданные.РегистрыСведений.КурсыВалют); ДоступнаЗагрузкаКурсов = Метаданные.Обработки.Найти("ЗагрузкаКурсовВалют") <> Неопределено И ДоступноИзменениеВалют; diff --git a/SSL/src/Catalogs/Валюты/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/Валюты/Forms/ФормаЭлемента/Module.bsl index 5ab4327a1..5e3c669b3 100644 --- a/SSL/src/Catalogs/Валюты/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/Валюты/Forms/ФормаЭлемента/Module.bsl @@ -60,6 +60,22 @@ УстановитьДоступностьЭлементов(ЭтотОбъект); КонецПроцедуры +&НаКлиенте +Процедура ПараметрыПрописиВалютыНажатие(Элемент) + + ОписаниеОповещения = Новый ОписаниеОповещения("ПриИзмененииПараметровПрописиВалюты", ЭтотОбъект); + Если ЕстьФормаПрописей Тогда + ПараметрыОткрытия = Новый Структура; + ПараметрыОткрытия.Вставить("ТолькоПросмотр", ТолькоПросмотр); + ПараметрыОткрытия.Вставить("ПараметрыПрописи", Объект.ПараметрыПрописи); + ИмяФормыРедактированияПрописей = "Обработка.ЗагрузкаКурсовВалют.Форма.ПараметрыПрописиВалюты"; + ОткрытьФорму(ИмяФормыРедактированияПрописей, ПараметрыОткрытия, ЭтотОбъект, , , , ОписаниеОповещения); + Иначе + ПоказатьВводСтроки(ОписаниеОповещения, Объект.ПараметрыПрописи, НСтр("ru = 'Параметры прописи валюты'")); + КонецЕсли; + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -116,20 +132,4 @@ Модифицированность = Истина; КонецПроцедуры -&НаКлиенте -Процедура ПараметрыПрописиВалютыНажатие(Элемент) - - ОписаниеОповещения = Новый ОписаниеОповещения("ПриИзмененииПараметровПрописиВалюты", ЭтотОбъект); - Если ЕстьФормаПрописей Тогда - ПараметрыОткрытия = Новый Структура; - ПараметрыОткрытия.Вставить("ТолькоПросмотр", ТолькоПросмотр); - ПараметрыОткрытия.Вставить("ПараметрыПрописи", Объект.ПараметрыПрописи); - ИмяФормыРедактированияПрописей = "Обработка.ЗагрузкаКурсовВалют.Форма.ПараметрыПрописиВалюты"; - ОткрытьФорму(ИмяФормыРедактированияПрописей, ПараметрыОткрытия, ЭтотОбъект, , , , ОписаниеОповещения); - Иначе - ПоказатьВводСтроки(ОписаниеОповещения, Объект.ПараметрыПрописи, НСтр("ru = 'Параметры прописи валюты'")); - КонецЕсли; - -КонецПроцедуры - #КонецОбласти diff --git a/SSL/src/Catalogs/Валюты/ObjectModule.bsl b/SSL/src/Catalogs/Валюты/ObjectModule.bsl index 9cc9f46a7..44ff96953 100644 --- a/SSL/src/Catalogs/Валюты/ObjectModule.bsl +++ b/SSL/src/Catalogs/Валюты/ObjectModule.bsl @@ -111,7 +111,10 @@ КонецЕсли; Если ЭтоНовый() Тогда - ДополнительныеСвойства.Вставить("ОбновитьКурсы"); + Если СпособУстановкиКурса = Перечисления.СпособыУстановкиКурсаВалюты.НаценкаНаКурсДругойВалюты + Или СпособУстановкиКурса = Перечисления.СпособыУстановкиКурсаВалюты.РасчетПоФормуле Тогда + ДополнительныеСвойства.Вставить("ОбновитьКурсы"); + КонецЕсли; ДополнительныеСвойства.Вставить("ЭтоНовый"); Иначе ПредыдущиеЗначения = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Ссылка, "Код,СпособУстановкиКурса,ОсновнаяВалюта,Наценка,ФормулаРасчетаКурса"); diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Forms/РазмещениеВРазделах/Module.bsl b/SSL/src/Catalogs/ВариантыОтчетов/Forms/РазмещениеВРазделах/Module.bsl index 270675b65..0a63a80c9 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/Forms/РазмещениеВРазделах/Module.bsl +++ b/SSL/src/Catalogs/ВариантыОтчетов/Forms/РазмещениеВРазделах/Module.bsl @@ -22,7 +22,10 @@ Если СообщенияОбОшибках <> Неопределено Тогда Отказ = Истина; ОчиститьСообщения(); - СтандартныеПодсистемыКлиент.ВывестиПредупреждение(ЭтотОбъект, СообщенияОбОшибках); + СтандартныеПодсистемыКлиент.ПоказатьВопросПользователю(Неопределено, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1 + |Подробности: + |%2'"), СообщенияОбОшибках.Текст, СообщенияОбОшибках.Подробно), РежимДиалогаВопрос.ОК); КонецЕсли; КонецПроцедуры @@ -233,7 +236,6 @@ Если КоличествоОшибок > 0 Тогда СообщенияОбОшибках = Новый Структура("Текст, Подробно"); ТекущаяПричина = 0; - ПрефиксЗаписи = Символы.ПС + " "; СообщенияОбОшибках.Подробно = ""; Для Каждого СтрокаТаблицы Из ОтфильтрованныеВарианты Цикл Если ТекущаяПричина <> СтрокаТаблицы.Причина Тогда diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Forms/СбросПользовательскихНастроек/Module.bsl b/SSL/src/Catalogs/ВариантыОтчетов/Forms/СбросПользовательскихНастроек/Module.bsl index 3a2a6663c..75414bdd4 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/Forms/СбросПользовательскихНастроек/Module.bsl +++ b/SSL/src/Catalogs/ВариантыОтчетов/Forms/СбросПользовательскихНастроек/Module.bsl @@ -65,7 +65,7 @@ // Вызов сервера &НаСервереБезКонтекста -Функция СброситьНастройкиПользователейСервер(Знач ИзменяемыеВарианты) +Процедура СброситьНастройкиПользователейСервер(Знач ИзменяемыеВарианты) НачатьТранзакцию(); Попытка Блокировка = Новый БлокировкаДанных; @@ -82,7 +82,7 @@ ОтменитьТранзакцию(); ВызватьИсключение; КонецПопытки; -КонецФункции +КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// // Сервер diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаСписка/Module.bsl index 3ed4c4269..a3c9188db 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаСписка/Module.bsl @@ -396,16 +396,18 @@ КонецЕсли; Если ПараметрыРазмещения.Действие = "Перемещение" Тогда - Шаблон = НСтр("ru = 'Перемещено вариантов отчетов: %1 из %2.'"); + Шаблон = НСтр("ru = 'Перемещено вариантов отчетов: %1 из %2. + |Подробности: + |%3'"); Иначе - Шаблон = НСтр("ru = 'Размещено вариантов отчетов: %1 из %2.'"); + Шаблон = НСтр("ru = 'Размещено вариантов отчетов: %1 из %2. + |Подробности: + |%3'"); КонецЕсли; - ПараметрыПредупреждения = Новый Структура; - ПараметрыПредупреждения.Вставить("Текст", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - Шаблон, РезультатВыполнения.Размещено, ПараметрыРазмещения.Варианты.Всего)); - ПараметрыПредупреждения.Вставить("Подробно", ТекстОшибок); - СтандартныеПодсистемыКлиент.ВывестиПредупреждение(ЭтотОбъект, ПараметрыПредупреждения); + СтандартныеПодсистемыКлиент.ПоказатьВопросПользователю(Неопределено, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, РезультатВыполнения.Размещено, + ПараметрыРазмещения.Варианты.Всего, ТекстОшибок), РежимДиалогаВопрос.ОК); КонецЕсли; КонецПроцедуры diff --git a/SSL/src/Catalogs/ВерсииФайлов/ObjectModule.bsl b/SSL/src/Catalogs/ВерсииФайлов/ObjectModule.bsl index 60639e7d6..af52f1ab5 100644 --- a/SSL/src/Catalogs/ВерсииФайлов/ObjectModule.bsl +++ b/SSL/src/Catalogs/ВерсииФайлов/ObjectModule.bsl @@ -4,7 +4,7 @@ Процедура ПередЗаписью(Отказ) - Если ОбменДанными.Загрузка Тогда + Если ОбменДанными.Загрузка Тогда Возврат; КонецЕсли; @@ -101,12 +101,22 @@ КонецЕсли; Исключение - // Обработка исключения не требуется. + + ЗаписьЖурналаРегистрации(НСтр("ru = 'Файлы.Ошибка удаления файла.'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка,, + Файл, ОписаниеОшибки()); + КонецПопытки; КонецЕсли; КонецЕсли; // Проверку ОбменДанными.Загрузка следует выполнять начиная с этой строки. + // Сначала требуется физически удалить файл, а потом уже сведения о нем в информационной базе. + // Иначе данные о расположении файла будут недоступны. + Если ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; КонецПроцедуры diff --git a/SSL/src/Catalogs/ВидыПроверок/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/Catalogs/ВидыПроверок/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss deleted file mode 100644 index 61e6fb4bb..000000000 --- a/SSL/src/Catalogs/ВидыПроверок/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss +++ /dev/null @@ -1,17 +0,0 @@ - - - - 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 deleted file mode 100644 index 0d36ea7c8..000000000 --- a/SSL/src/Catalogs/ВидыПроверок/Forms/ФормаСписка/Form.form +++ /dev/null @@ -1,295 +0,0 @@ - - - - СписокКомпоновщикНастроекПользовательскиеНастройки - 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/ВидыПроверок/ManagerModule.bsl b/SSL/src/Catalogs/ВидыПроверок/ManagerModule.bsl index 19ac3bbf8..b59bb06c4 100644 --- a/SSL/src/Catalogs/ВидыПроверок/ManagerModule.bsl +++ b/SSL/src/Catalogs/ВидыПроверок/ManagerModule.bsl @@ -39,22 +39,4 @@ #КонецОбласти -#КонецЕсли - -#Область ОбработчикиСобытий - -Процедура ОбработкаПолученияПолейПредставления(Поля, СтандартнаяОбработка) - - СтандартнаяОбработка = Ложь; - Поля.Добавить("ПредставлениеСсылки"); - -КонецПроцедуры - -Процедура ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка) - - СтандартнаяОбработка = Ложь; - Представление = Данные.ПредставлениеСсылки; - -КонецПроцедуры - -#КонецОбласти \ No newline at end of file +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/ВидыПроверок/ВидыПроверок.mdo b/SSL/src/Catalogs/ВидыПроверок/ВидыПроверок.mdo index 024b20927..64b4ae2a7 100644 --- a/SSL/src/Catalogs/ВидыПроверок/ВидыПроверок.mdo +++ b/SSL/src/Catalogs/ВидыПроверок/ВидыПроверок.mdo @@ -144,7 +144,6 @@ InDialog BothWays Catalog.ВидыПроверок.Form.ФормаЭлемента - Catalog.ВидыПроверок.Form.ФормаСписка Свойство1 @@ -300,26 +299,6 @@ Use Use - - ПредставлениеСсылки - - ru - Представление ссылки - - - String - - - - ru - Поле, хранящее представление ссылки на вид проверки. - - - - - Use - Use - @@ -399,13 +378,4 @@ PersonalComputer MobileDevice - - ФормаСписка - - ru - Форма списка - - PersonalComputer - MobileDevice - diff --git a/SSL/src/Catalogs/ВнешниеКомпоненты/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ВнешниеКомпоненты/Forms/ФормаЭлемента/Module.bsl index 859a60da1..08fd82684 100644 --- a/SSL/src/Catalogs/ВнешниеКомпоненты/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ВнешниеКомпоненты/Forms/ФормаЭлемента/Module.bsl @@ -279,8 +279,6 @@ ВызватьИсключение НСтр("ru = 'Не достаточно прав для совершения операции.'"); КонецЕсли; - Зарегистрирована = Ложь; - ОбъектСправочника = РеквизитФормыВЗначение("Объект"); Информация = ВнешниеКомпонентыСлужебный.ИнформацияОКомпоненте(ПараметрыЗагрузки.АдресХранилищаФайла); @@ -329,7 +327,7 @@ // Серверная логика обновления компоненты с сайта. &НаСервере -Функция ЗавершитьОбновлениеКомпонентыССайтаНаСервере(Результат) +Процедура ЗавершитьОбновлениеКомпонентыССайтаНаСервере(Результат) // Обновление формы по новому значению объекта в ИБ. ЭтотОбъект.Прочитать(); @@ -337,7 +335,7 @@ Модифицированность = Ложь; УстановитьВидимостьДоступность(); -КонецФункции +КонецПроцедуры ///////////////////////////////////////////////////////// // Представление данных на форме. @@ -385,7 +383,7 @@ // Для внутреннего использования. &НаКлиенте -Функция ЗакрытьСПараметромЗакрытия() +Процедура ЗакрытьСПараметромЗакрытия() ПараметрЗакрытия = Неопределено; @@ -400,7 +398,7 @@ Закрыть(ПараметрЗакрытия); -КонецФункции +КонецПроцедуры // Для внутреннего использования. &НаКлиенте diff --git a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Module.bsl index 50ae5696c..62d507c1f 100644 --- a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Module.bsl @@ -78,14 +78,14 @@ ХранимыеПараметры.Вставить("РасширенныйПодбор", Параметры.РасширенныйПодбор); Элементы.ВыбранныеПользователиИГруппы.Видимость = ХранимыеПараметры.РасширенныйПодбор; Элементы.ВидПользователей.Видимость = Не ХранимыеПараметры.РасширенныйПодбор; - ХранимыеПараметры.Вставить( - "ИспользоватьГруппы", ПолучитьФункциональнуюОпцию("ИспользоватьГруппыПользователей")); + ХранимыеПараметры.Вставить("ИспользоватьГруппы", + ПолучитьФункциональнуюОпцию("ИспользоватьГруппыПользователей")); Если НЕ ПравоДоступа("Добавление", Метаданные.Справочники.ВнешниеПользователи) Тогда Элементы.СоздатьВнешнегоПользователя.Видимость = Ложь; КонецЕсли; - Если Не Пользователи.РолиДоступны("ДобавлениеИзменениеВнешнихПользователей") Тогда + Если Не ПравоДоступа("Редактирование", Метаданные.Справочники.ГруппыВнешнихПользователей) Тогда Элементы.ВнешниеПользователиСписокКонтекстноеМенюНазначитьГруппы.Видимость = Ложь; Элементы.НазначитьГруппы.Видимость = Ложь; КонецЕсли; @@ -139,7 +139,9 @@ Элементы.ВыбратьГруппуВнешнихПользователей.Видимость = Ложь; КонецЕсли; - ХранимыеПараметры.Вставить("ГруппаВсеПользователи", Справочники.ГруппыВнешнихПользователей.ВсеВнешниеПользователи); + ХранимыеПараметры.Вставить("ГруппаВсеПользователи", + Справочники.ГруппыВнешнихПользователей.ВсеВнешниеПользователи); + ХранимыеПараметры.Вставить("ТекущаяСтрока", Параметры.ТекущаяСтрока); НастроитьФормуПоИспользованиюГруппПользователей(); ХранимыеПараметры.Удалить("ТекущаяСтрока"); @@ -1110,15 +1112,10 @@ ПоказатьОповещениеПользователя( НСтр("ru = 'Перемещение пользователей'"), , СообщениеПользователю.Сообщение, БиблиотекаКартинок.Информация32); Иначе - - ПараметрыПредупреждения = Новый Структура("Текст", СообщениеПользователю.Сообщение); - Если СообщениеПользователю.Пользователи <> Неопределено Тогда - Подробно = НСтр("ru = 'Следующие пользователи не были включены в выбранную группу:'"); - Подробно = Подробно + Символы.ПС + СообщениеПользователю.Пользователи; - ПараметрыПредупреждения.Вставить("Подробно", Подробно); - КонецЕсли; - СтандартныеПодсистемыКлиент.ВывестиПредупреждение(ЭтотОбъект, ПараметрыПредупреждения); - + СтандартныеПодсистемыКлиент.ПоказатьВопросПользователю(Неопределено, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1 + |Следующие пользователи не были включены в выбранную группу: + |%2'"), СообщениеПользователю.Сообщение, СообщениеПользователю.Пользователи), РежимДиалогаВопрос.ОК); КонецЕсли; КонецПроцедуры diff --git a/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Module.bsl index 722b1f47d..5219a3079 100644 --- a/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Module.bsl @@ -459,7 +459,7 @@ ДействияВФорме.СоставГруппы = "Редактирование"; ДействияВФорме.СвойстваЭлемента = "Редактирование"; - ИначеЕсли Пользователи.РолиДоступны("ДобавлениеИзменениеВнешнихПользователей") Тогда + ИначеЕсли ПравоДоступа("Редактирование", Метаданные.Справочники.ГруппыВнешнихПользователей) Тогда // Менеджер внешних пользователей. ДействияВФорме.Роли = ""; ДействияВФорме.СоставГруппы = "Редактирование"; diff --git a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаСписка/Form.form index 772c652a1..e5a842381 100644 --- a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаСписка/Form.form @@ -246,7 +246,7 @@ true - Список.Наименование + Список.Description true @@ -637,6 +637,10 @@ true + + OnGetDataAtServer + СписокПриПолученииДанныхНаСервере + 60 0001-01-01T00:00:00 @@ -735,13 +739,7 @@ ГруппыДоступа.Предопределенный, ГруппыДоступа.Родитель, ГруппыДоступа.ЭтоГруппа, - ВЫБОР - КОГДА ТИПЗНАЧЕНИЯ(ГруппыДоступа.Пользователь) = ТИП(Справочник.Пользователи) - ТОГДА ГруппыДоступа.Наименование + ": " + ВЫРАЗИТЬ(ГруппыДоступа.Пользователь КАК Справочник.Пользователи).Наименование - КОГДА ТИПЗНАЧЕНИЯ(ГруппыДоступа.Пользователь) = ТИП(Справочник.ВнешниеПользователи) - ТОГДА ГруппыДоступа.Наименование + ": " + &ОшибкаОбъектНеНайден - ИНАЧЕ ГруппыДоступа.Наименование - КОНЕЦ КАК Наименование, + ГруппыДоступа.Наименование, ГруппыДоступа.Профиль, ГруппыДоступа.Пользователь, ГруппыДоступа.Комментарий, diff --git a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаСписка/Module.bsl index 6c7ca2695..d760211bd 100644 --- a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаСписка/Module.bsl @@ -19,10 +19,14 @@ УпрощенныйИнтерфейсНастройкиПравДоступа = УправлениеДоступомСлужебный.УпрощенныйИнтерфейсНастройкиПравДоступа(); Если УпрощенныйИнтерфейсНастройкиПравДоступа Тогда - Элементы.ФормаСоздать.Видимость = Ложь; - Элементы.ФормаСкопировать.Видимость = Ложь; - Элементы.СписокКонтекстноеМенюСоздать.Видимость = Ложь; - Элементы.СписокКонтекстноеМенюСкопировать.Видимость = Ложь; + Если Элементы.Найти("ФормаСоздать") <> Неопределено Тогда + Элементы.ФормаСоздать.Видимость = Ложь; + Элементы.СписокКонтекстноеМенюСоздать.Видимость = Ложь; + КонецЕсли; + Если Элементы.Найти("ФормаСкопировать") <> Неопределено Тогда + Элементы.ФормаСкопировать.Видимость = Ложь; + Элементы.СписокКонтекстноеМенюСкопировать.Видимость = Ложь; + КонецЕсли; КонецЕсли; Список.Параметры.УстановитьЗначениеПараметра("Профиль", Параметры.Профиль); @@ -33,21 +37,16 @@ Заголовок = НСтр("ru = 'Группы доступа'"); - Элементы.ФормаСоздатьГруппу.Видимость = Ложь; - Элементы.СписокКонтекстноеМенюСоздатьГруппу.Видимость = Ложь; + Если Элементы.Найти("ФормаСоздатьГруппу") <> Неопределено Тогда + Элементы.ФормаСоздатьГруппу.Видимость = Ложь; + Элементы.СписокКонтекстноеМенюСоздатьГруппу.Видимость = Ложь; + КонецЕсли; КонецЕсли; Если НЕ ПравоДоступа("Чтение", Метаданные.Справочники.ПрофилиГруппДоступа) Тогда Элементы.Профиль.Видимость = Ложь; КонецЕсли; - Если ПравоДоступа("Просмотр", Метаданные.Справочники.ВнешниеПользователи) Тогда - Список.ТекстЗапроса = СтрЗаменить( - Список.ТекстЗапроса, - "&ОшибкаОбъектНеНайден", - "ЕстьNULL(ВЫРАЗИТЬ(ГруппыДоступа.Пользователь КАК Справочник.ВнешниеПользователи).Наименование, &ОшибкаОбъектНеНайден)"); - КонецЕсли; - СписокНедоступныхГрупп = Новый СписокЗначений; Если НЕ Пользователи.ЭтоПолноправныйПользователь() Тогда @@ -59,10 +58,6 @@ РежимВыбора = Параметры.РежимВыбора; - Список.Параметры.УстановитьЗначениеПараметра( - "ОшибкаОбъектНеНайден", - НСтр("ru = '<Объект не найден>'")); - Если Параметры.РежимВыбора Тогда РежимОткрытияОкна = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца; @@ -171,6 +166,27 @@ КонецПроцедуры +&НаСервереБезКонтекста +Процедура СписокПриПолученииДанныхНаСервере(ИмяЭлемента, Настройки, Строки) + + Для Каждого Строка Из Строки Цикл + Если ТипЗнч(Строка.Ключ) <> Тип("СправочникСсылка.ГруппыДоступа") Тогда + Продолжить; + КонецЕсли; + Данные = Строка.Значение.Данные; + + Если Данные.ЭтоГруппа + Или Не ЗначениеЗаполнено(Данные.Пользователь) Тогда + Продолжить; + КонецЕсли; + + Данные.Наименование = + УправлениеДоступомСлужебныйКлиентСервер.ПредставлениеГруппыДоступа(Данные); + + КонецЦикла; + +КонецПроцедуры + &НаКлиенте Процедура СписокПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле) diff --git a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Form.form index cc328ff83..393072fc3 100644 --- a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Form.form @@ -1594,52 +1594,6 @@ Normal - - ОтветственныйЗаПерсональнуюГруппу - 316 - true - true - - true - - - Объект.Ответственный - - - ru - Пользователь, которой может изменять использование персональной группы доступа. - - - ОтветственныйЗаПерсональнуюГруппуExtendedTooltip - 401 - Label - true - true - - Left - - - - ОтветственныйЗаПерсональнуюГруппуКонтекстноеМеню - 317 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - true - true - Normal - - ФормаКоманднаяПанель -1 diff --git a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Module.bsl index c6ee399e7..d9b097341 100644 --- a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Module.bsl @@ -713,7 +713,9 @@ &НаКлиенте Процедура ВидыДоступаВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) - Если НЕ ТолькоПросмотр Тогда + Если Не ТолькоПросмотр + И Не Элементы.Доступ.ТолькоПросмотр Тогда + Элементы.ВидыДоступа.ИзменитьСтроку(); КонецЕсли; @@ -917,7 +919,7 @@ // Продолжение обработчика события ПослеЗаписи. &НаКлиенте -Процедура ПослеЗаписиЗавершение(ПараметрыЗаписи) +Процедура ПослеЗаписиЗавершение(ПараметрыЗаписи) Экспорт Если ПараметрыЗаписи.Свойство("ЗаписатьИЗакрыть") Тогда ПодключитьОбработчикОжидания("ЗакрытьФорму", 0.1, Истина); @@ -942,13 +944,11 @@ &НаСервере Процедура ЗапретитьИзменениеВсегоКромеСоставаУчастников() - Элементы.Наименование.ТолькоПросмотр = Истина; - Элементы.Родитель.Видимость = Ложь; - Элементы.Профиль.ТолькоПросмотр = Истина; - Элементы.СвойстваПерсональнойГруппы.Видимость = Ложь; - Элементы.Ответственный.Видимость = Ложь; - Элементы.ОтветственныйЗаПерсональнуюГруппу.Видимость = Ложь; - Элементы.Комментарий.ТолькоПросмотр = Истина; + Элементы.Наименование.ТолькоПросмотр = Истина; + Элементы.Родитель.Видимость = Ложь; + Элементы.Профиль.ТолькоПросмотр = Истина; + Элементы.СвойстваПерсональнойГруппы.Видимость = Ложь; + Элементы.Комментарий.ТолькоПросмотр = Истина; КонецПроцедуры @@ -966,12 +966,8 @@ Если ЗначениеЗаполнено(ТекущийОбъект.Пользователь) Тогда // Подготовка к режиму персональной группы доступа. АвтоЗаголовок = Ложь; - Заголовок - = ТекущийОбъект.Наименование - + ": " - + ТекущийОбъект.Пользователь - + " " - + НСтр("ru = '(Группа доступа)'"); + Заголовок = УправлениеДоступомСлужебныйКлиентСервер.ПредставлениеГруппыДоступа(ТекущийОбъект) + + " " + НСтр("ru = '(Группа доступа)'"); Отбор = Новый Структура("Пользователь", ТекущийОбъект.Пользователь); НайденныеСтроки = ТекущийОбъект.Пользователи.НайтиСтроки(Отбор); @@ -987,7 +983,6 @@ Элементы.Профиль.ТолькоПросмотр = ПользовательЗаполнен; Элементы.СвойстваПерсональнойГруппы.Видимость = ПользовательЗаполнен; Элементы.ПользователиГруппы.Видимость = НЕ ПользовательЗаполнен; - Элементы.ОтветственныйЗаПерсональнуюГруппу.Видимость = ПользовательЗаполнен; Элементы.ПользователиИДоступ.ОтображениеСтраниц = ?(ПользовательЗаполнен, @@ -1003,13 +998,12 @@ = УправлениеДоступомСлужебный.УпрощенныйИнтерфейсНастройкиПравДоступа(); // Подготовка к режиму редактирования пользователей ответственным за участников. - Если НЕ Пользователи.ЭтоПолноправныйПользователь() Тогда + Если Не Пользователи.ЭтоПолноправныйПользователь() Тогда Элементы.Наименование.ТолькоПросмотр = Истина; Элементы.Родитель.ТолькоПросмотр = Истина; Элементы.Профиль.ТолькоПросмотр = Истина; Элементы.Доступ.ТолькоПросмотр = Истина; Элементы.Ответственный.ТолькоПросмотр = Истина; - Элементы.ОтветственныйЗаПерсональнуюГруппу.ТолькоПросмотр = Истина; Элементы.Комментарий.ТолькоПросмотр = Истина; КонецЕсли; КонецЕсли; diff --git a/SSL/src/Catalogs/ГруппыДоступа/ManagerModule.bsl b/SSL/src/Catalogs/ГруппыДоступа/ManagerModule.bsl index b8a948e76..dff706972 100644 --- a/SSL/src/Catalogs/ГруппыДоступа/ManagerModule.bsl +++ b/SSL/src/Catalogs/ГруппыДоступа/ManagerModule.bsl @@ -41,6 +41,35 @@ #КонецОбласти +#КонецЕсли + +#Область ОбработчикиСобытий + +Процедура ОбработкаПолученияПолейПредставления(Поля, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + + Поля.Добавить("Наименование"); + Поля.Добавить("Пользователь"); + +КонецПроцедуры + +Процедура ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка) + + Если Не ЗначениеЗаполнено(Данные.Пользователь) Тогда + Возврат; + КонецЕсли; + + СтандартнаяОбработка = Ложь; + + Представление = УправлениеДоступомСлужебныйКлиентСервер.ПредставлениеГруппыДоступа(Данные); + +КонецПроцедуры + +#КонецОбласти + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + #Область СлужебныеПроцедурыИФункции // Устанавливает пометку удаления группам доступа, если установлена @@ -186,15 +215,23 @@ КонецЕсли; Если ГруппаДоступа.Модифицированность() Тогда - Если Не ОбновлениеИнформационнойБазы.ВыполняетсяОбновлениеИнформационнойБазы() Тогда + + Если Не ОбновлениеИнформационнойБазы.ВыполняетсяОбновлениеИнформационнойБазы() + И Не ОбновлениеИнформационнойБазы.ЭтоВызовИзОбработчикаОбновления() Тогда + ЗаблокироватьДанныеДляРедактирования(ГруппаДоступа.Ссылка, ГруппаДоступа.ВерсияДанных); КонецЕсли; + ГруппаДоступа.ДополнительныеСвойства.Вставить("НеОбновлятьРолиПользователей"); ОбновлениеИнформационнойБазы.ЗаписатьОбъект(ГруппаДоступа); ГруппаДоступаОбновлена = Истина; - Если Не ОбновлениеИнформационнойБазы.ВыполняетсяОбновлениеИнформационнойБазы() Тогда + + Если Не ОбновлениеИнформационнойБазы.ВыполняетсяОбновлениеИнформационнойБазы() + И Не ОбновлениеИнформационнойБазы.ЭтоВызовИзОбработчикаОбновления() Тогда + РазблокироватьДанныеДляРедактирования(ГруппаДоступа.Ссылка); КонецЕсли; + КонецЕсли; КонецЦикла; diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Module.bsl index dce8b8923..a89273fbf 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Module.bsl @@ -650,16 +650,7 @@ ОбновлениеИзФайлаПоказатьКонфликты(ПараметрыРегистрации); Иначе ОбработчикРезультата = Новый ОписаниеОповещения("ОбновлениеИзФайлаЗавершение", ЭтотОбъект, ПараметрыРегистрации); - Если ПараметрыРегистрации.ЭтоОтчет Тогда - ЗаголовокОшибки = НСтр("ru = 'Отчет не подключен'"); - Иначе - ЗаголовокОшибки = НСтр("ru = 'Обработка не подключена'"); - КонецЕсли; - ПараметрыПредупреждения = Новый Структура; - ПараметрыПредупреждения.Вставить("Текст", ПараметрыРегистрации.ТекстОшибки); - ПараметрыПредупреждения.Вставить("Подробно", ПараметрыРегистрации.КраткоеПредставлениеОшибки); - ПараметрыПредупреждения.Вставить("Заголовок", ЗаголовокОшибки); - СтандартныеПодсистемыКлиент.ВывестиПредупреждение(ЭтотОбъект, ПараметрыПредупреждения, ОбработчикРезультата); + СтандартныеПодсистемыКлиент.ПоказатьВопросПользователю(ОбработчикРезультата, ПараметрыРегистрации.ТекстОшибки, РежимДиалогаВопрос.ОК); КонецЕсли; КонецЕсли; КонецПроцедуры @@ -1005,12 +996,9 @@ &НаКлиенте Процедура ПослеЗавершенияВыполненияСервернойКомандыВФоне(Задание, ВыполняемаяКоманда) Экспорт Если Задание.Статус = "Ошибка" Тогда - Результат = Новый Структура; - ВводныйТекст = НСтр("ru = 'Не удалось выполнить команду.'"); - Предупреждение = Новый Структура; - Предупреждение.Вставить("Текст", ВводныйТекст + Символы.ПС + Задание.КраткоеПредставлениеОшибки); - Предупреждение.Вставить("Подробно", Задание.ПодробноеПредставлениеОшибки); - СтандартныеПодсистемыКлиент.ВывестиПредупреждение(ЭтотОбъект, Предупреждение); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось выполнить команду по причине: + |%1.'"), Задание.КраткоеПредставлениеОшибки); Иначе Результат = ПолучитьИзВременногоХранилища(Задание.АдресРезультата); ОповеститьФормы = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Результат, "ОповеститьФормы"); diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/ObjectModule.bsl b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/ObjectModule.bsl index ecdda08c3..bd154b753 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/ObjectModule.bsl +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/ObjectModule.bsl @@ -324,7 +324,7 @@ Функция ПравоНастройкиРасписания() // Проверяет наличие права настройки расписания дополнительных отчетов и обработок. - Возврат Пользователи.РолиДоступны("ДобавлениеИзменениеДополнительныхОтчетовИОбработок"); + Возврат ПравоДоступа("Изменение", Метаданные.Справочники.ДополнительныеОтчетыИОбработки); КонецФункции Функция ПредставлениеЗадания(Команда) diff --git a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ManagerModule.bsl b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ManagerModule.bsl index d5d357713..0582161d8 100644 --- a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ManagerModule.bsl +++ b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ManagerModule.bsl @@ -145,7 +145,7 @@ СтандартныеПодсистемыСервер.ПроверитьДинамическоеОбновлениеВерсииПрограммы(); Блокировка = Новый БлокировкаДанных; - ЭлементБлокировки = Блокировка.Добавить("Справочник.ИдентификаторыОбъектовМетаданных"); + Блокировка.Добавить("Справочник.ИдентификаторыОбъектовМетаданных"); НачатьТранзакцию(); Попытка @@ -672,11 +672,8 @@ СписокДопустимыхТипов); КонецЕсли; - Если ЗначениеЗаполнено(ИдентификаторБиблиотеки) Тогда - Библиотека = ВРег(ИдентификаторБиблиотеки) <> ВРег(Метаданные.Имя); - Иначе + Если Не ЗначениеЗаполнено(ИдентификаторБиблиотеки) Тогда ИдентификаторБиблиотеки = Метаданные.Имя; - Библиотека = Ложь; КонецЕсли; ПорядокБиблиотеки = Итог.ПорядокБиблиотек[ИдентификаторБиблиотеки]; @@ -1087,7 +1084,7 @@ Если Параметры.РежимВыбора Тогда СтандартныеПодсистемыСервер.УстановитьКлючНазначенияФормы(Форма, "ВыборПодбор"); - РежимОткрытияОкна = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца; + Форма.РежимОткрытияОкна = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца; Иначе Элементы.Список.РежимВыбора = Ложь; КонецЕсли; @@ -1160,7 +1157,6 @@ ИменаРасширений(ИсточникРасширенийКонфигурации.СеансОтключенные)); СвойстваОбъектовМетаданных = СвойстваОбъектовМетаданных(ОбъектыРасширений); - СправочникМенеджер = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ИмяСправочника(ОбъектыРасширений)); // Найден - состояние, когда для объекта метаданных найден идентификатор. СвойстваОбъектовМетаданных.Колонки.Добавить("Найден", Новый ОписаниеТипов("Булево")); @@ -1680,12 +1676,6 @@ ОбъектыРасширений = ЭтоОбъектРасширений(Свойства.Ссылка); - Если ТипЗнч(Свойства.КлючОбъектаМетаданных) = Тип("ХранилищеЗначения") Тогда - КлючОбъектаМетаданных = Свойства.КлючОбъектаМетаданных.Получить(); - Иначе - КлючОбъектаМетаданных = Свойства.КлючОбъектаМетаданных; - КонецЕсли; - Если НЕ Свойства.ПометкаУдаления ИЛИ ЗначениеЗаполнено(Свойства.Родитель) ИЛИ Лев(Свойства.Наименование, 1) <> "?" @@ -2723,7 +2713,7 @@ Запрос.Текст = "ВЫБРАТЬ | Идентификаторы.Ссылка КАК Ссылка, - | Идентификаторы.КлючОбъектаМетаданных + | Идентификаторы.КлючОбъектаМетаданных КАК ХранилищеКлюча |ИЗ | Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы"; @@ -2732,7 +2722,10 @@ ИдентификаторыИзКлючей = Новый Соответствие; Пока Выборка.Следующий() Цикл - КлючОбъектаМетаданных = Выборка.КлючОбъектаМетаданных; + Если ТипЗнч(Выборка.ХранилищеКлюча) <> Тип("ХранилищеЗначения") Тогда + Продолжить; + КонецЕсли; + КлючОбъектаМетаданных = Выборка.ХранилищеКлюча.Получить(); Если КлючОбъектаМетаданных = Неопределено Или КлючОбъектаМетаданных = Тип("Неопределено") Тогда diff --git a/SSL/src/Catalogs/Календари/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/Календари/Forms/ФормаСписка/Form.form index 9a80d5b16..3879af5a1 100644 --- a/SSL/src/Catalogs/Календари/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/Календари/Forms/ФормаСписка/Form.form @@ -441,6 +441,10 @@ true + + OnGetDataAtServer + СписокПриПолученииДанныхНаСервере + 60 0001-01-01T00:00:00 @@ -486,6 +490,18 @@ Список.Ref + + Список.ВозможнаяПричина + + + Список.ДатаЗаполненности + + + Список.ДатаЗаполненностиПроизводственногоКалендаря + + + Список.ДатаНеобходимойЗаполненности + Список.Ссылка @@ -495,30 +511,6 @@
true
ВЫБРАТЬ - КалендарныеГрафики.Календарь КАК ГрафикРаботы, - МАКСИМУМ(КалендарныеГрафики.ДатаГрафика) КАК ДатаЗаполненности -ПОМЕСТИТЬ ВТДатыЗаполненностиГрафиков -ИЗ - РегистрСведений.КалендарныеГрафики КАК КалендарныеГрафики - -СГРУППИРОВАТЬ ПО - КалендарныеГрафики.Календарь -; - -//////////////////////////////////////////////////////////////////////////////// -ВЫБРАТЬ - ДанныеПроизводственныхКалендарей.ПроизводственныйКалендарь КАК ПроизводственныйКалендарь, - МАКСИМУМ(ДанныеПроизводственныхКалендарей.Дата) КАК ДатаЗаполненности -ПОМЕСТИТЬ ВТДатыЗаполненностиКалендарей -ИЗ - РегистрСведений.ДанныеПроизводственногоКалендаря КАК ДанныеПроизводственныхКалендарей - -СГРУППИРОВАТЬ ПО - ДанныеПроизводственныхКалендарей.ПроизводственныйКалендарь -; - -//////////////////////////////////////////////////////////////////////////////// -ВЫБРАТЬ СправочникГрафикиРаботы.Ссылка КАК Ссылка, СправочникГрафикиРаботы.ВерсияДанных КАК ВерсияДанных, СправочникГрафикиРаботы.ПометкаУдаления КАК ПометкаУдаления, @@ -536,43 +528,13 @@ СправочникГрафикиРаботы.УдалитьВидКалендаря КАК УдалитьВидКалендаря, СправочникГрафикиРаботы.ГоризонтПланирования КАК ГоризонтПланирования, СправочникГрафикиРаботы.ВладелецГрафика КАК ВладелецГрафика, - ДОБАВИТЬКДАТЕ(&ТекущаяДата, МЕСЯЦ, СправочникГрафикиРаботы.ГоризонтПланирования) КАК ДатаНеобходимойЗаполненности, - ДанныеГрафиков.ДатаЗаполненности КАК ДатаЗаполненности, - ДанныеПроизводственныхКалендарей.ДатаЗаполненности КАК ДатаЗаполненностиПроизводственногоКалендаря, - ВЫБОР - КОГДА ДанныеГрафиков.ДатаЗаполненности < ДОБАВИТЬКДАТЕ(&ТекущаяДата, МЕСЯЦ, СправочникГрафикиРаботы.ГоризонтПланирования) - ТОГДА ИСТИНА - ИНАЧЕ ЛОЖЬ - КОНЕЦ КАК ТребуетЗаполнения, - ВЫБОР - КОГДА ДанныеГрафиков.ДатаЗаполненности < ДОБАВИТЬКДАТЕ(&ТекущаяДата, МЕСЯЦ, СправочникГрафикиРаботы.ГоризонтПланирования) - ТОГДА ВЫБОР - КОГДА СправочникГрафикиРаботы.ПроизводственныйКалендарь <> ЗНАЧЕНИЕ(Справочник.ПроизводственныеКалендари.ПустаяСсылка) - ТОГДА ВЫБОР - КОГДА ДанныеПроизводственныхКалендарей.ДатаЗаполненности = ДАТАВРЕМЯ(1, 1, 1) - ТОГДА ВЫРАЗИТЬ(&КалендарьНеЗаполнен КАК СТРОКА(100)) - ИНАЧЕ ВЫБОР - КОГДА ДанныеПроизводственныхКалендарей.ДатаЗаполненности < ДОБАВИТЬКДАТЕ(&ТекущаяДата, МЕСЯЦ, СправочникГрафикиРаботы.ГоризонтПланирования) - ТОГДА ВЫРАЗИТЬ(&КалендарьНеЗаполненНаГод КАК СТРОКА(100)) - КОНЕЦ - КОНЕЦ - ИНАЧЕ ВЫБОР - КОГДА СправочникГрафикиРаботы.ДатаОкончания = ДАТАВРЕМЯ(1, 1, 1) - ТОГДА ВЫРАЗИТЬ(&ГрафикНеЗаполнен КАК СТРОКА(100)) - ИНАЧЕ ВЫБОР - КОГДА СправочникГрафикиРаботы.ДатаОкончания < ДОБАВИТЬКДАТЕ(&ТекущаяДата, МЕСЯЦ, СправочникГрафикиРаботы.ГоризонтПланирования) - ТОГДА ВЫРАЗИТЬ(&ПериодГрафикаОграничен КАК СТРОКА(100)) - КОНЕЦ - КОНЕЦ - КОНЕЦ - ИНАЧЕ "" - КОНЕЦ КАК ВозможнаяПричина + ДАТАВРЕМЯ(1, 1, 1) КАК ДатаНеобходимойЗаполненности, + ДАТАВРЕМЯ(1, 1, 1) КАК ДатаЗаполненности, + ДАТАВРЕМЯ(1, 1, 1) КАК ДатаЗаполненностиПроизводственногоКалендаря, + ЛОЖЬ КАК ТребуетЗаполнения, + "" КАК ВозможнаяПричина ИЗ - Справочник.Календари КАК СправочникГрафикиРаботы - ЛЕВОЕ СОЕДИНЕНИЕ ВТДатыЗаполненностиГрафиков КАК ДанныеГрафиков - ПО СправочникГрафикиРаботы.Ссылка = ДанныеГрафиков.ГрафикРаботы - ЛЕВОЕ СОЕДИНЕНИЕ ВТДатыЗаполненностиКалендарей КАК ДанныеПроизводственныхКалендарей - ПО СправочникГрафикиРаботы.ПроизводственныйКалендарь = ДанныеПроизводственныхКалендарей.ПроизводственныйКалендарь + Справочник.Календари КАК СправочникГрафикиРаботы
Catalog.Календари true true diff --git a/SSL/src/Catalogs/Календари/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/Календари/Forms/ФормаСписка/Module.bsl index a483b32de..4ee43cca9 100644 --- a/SSL/src/Catalogs/Календари/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/Календари/Forms/ФормаСписка/Module.bsl @@ -14,8 +14,6 @@ УстановитьПараметрыСписка(); - ЗаполнитьУсловноеОформлениеСписка(); - МожноРедактировать = ПравоДоступа("Редактирование", Метаданные.Справочники.Календари); ЕстьГрупповоеИзменениеРеквизитов = ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов"); Элементы.СписокИзменитьВыделенные.Видимость = ЕстьГрупповоеИзменениеРеквизитов И МожноРедактировать; @@ -36,35 +34,117 @@ #КонецОбласти +#Область ОбработчикиСобытийЭлементовФормы + +&НаСервереБезКонтекста +Процедура СписокПриПолученииДанныхНаСервере(ИмяЭлемента, Настройки, Строки) + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("Календари", Строки.ПолучитьКлючи()); + Запрос.УстановитьПараметр("ТекущаяДата", ТекущаяДатаСеанса()); + Запрос.УстановитьПараметр("КалендарьНеЗаполнен", НСтр("ru = 'Производственный календарь не заполнен'")); + Запрос.УстановитьПараметр("КалендарьНеЗаполненНаГод", НСтр("ru = 'Производственный календарь не заполнен на очередной календарный год'")); + Запрос.УстановитьПараметр("ГрафикНеЗаполнен", НСтр("ru = 'График не был заполнен на очередной календарный год'")); + Запрос.УстановитьПараметр("ПериодГрафикаОграничен", НСтр("ru = 'Период заполнения графика ограничен (см. поле «Дата окончания»)'")); + Запрос.Текст = + "ВЫБРАТЬ + | КалендарныеГрафики.Календарь КАК ГрафикРаботы, + | МАКСИМУМ(КалендарныеГрафики.ДатаГрафика) КАК ДатаЗаполненности + |ПОМЕСТИТЬ ВТДатыЗаполненностиГрафиков + |ИЗ + | РегистрСведений.КалендарныеГрафики КАК КалендарныеГрафики + |ГДЕ + | КалендарныеГрафики.Календарь В(&Календари) + | + |СГРУППИРОВАТЬ ПО + | КалендарныеГрафики.Календарь + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ДанныеПроизводственныхКалендарей.ПроизводственныйКалендарь КАК ПроизводственныйКалендарь, + | МАКСИМУМ(ДанныеПроизводственныхКалендарей.Дата) КАК ДатаЗаполненности + |ПОМЕСТИТЬ ВТДатыЗаполненностиКалендарей + |ИЗ + | РегистрСведений.ДанныеПроизводственногоКалендаря КАК ДанныеПроизводственныхКалендарей + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Календари КАК Календари + | ПО (Календари.ПроизводственныйКалендарь = ДанныеПроизводственныхКалендарей.ПроизводственныйКалендарь) + | И (Календари.Ссылка В (&Календари)) + | + |СГРУППИРОВАТЬ ПО + | ДанныеПроизводственныхКалендарей.ПроизводственныйКалендарь + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | СправочникГрафикиРаботы.Ссылка КАК Ссылка, + | ДОБАВИТЬКДАТЕ(&ТекущаяДата, МЕСЯЦ, СправочникГрафикиРаботы.ГоризонтПланирования) КАК ДатаНеобходимойЗаполненности, + | ДанныеГрафиков.ДатаЗаполненности КАК ДатаЗаполненности, + | ДанныеПроизводственныхКалендарей.ДатаЗаполненности КАК ДатаЗаполненностиПроизводственногоКалендаря, + | ВЫБОР + | КОГДА ДанныеГрафиков.ДатаЗаполненности < ДОБАВИТЬКДАТЕ(&ТекущаяДата, МЕСЯЦ, СправочникГрафикиРаботы.ГоризонтПланирования) + | ТОГДА ИСТИНА + | ИНАЧЕ ЛОЖЬ + | КОНЕЦ КАК ТребуетЗаполнения, + | ВЫБОР + | КОГДА ДанныеГрафиков.ДатаЗаполненности < ДОБАВИТЬКДАТЕ(&ТекущаяДата, МЕСЯЦ, СправочникГрафикиРаботы.ГоризонтПланирования) + | ТОГДА ВЫБОР + | КОГДА СправочникГрафикиРаботы.ПроизводственныйКалендарь <> ЗНАЧЕНИЕ(Справочник.ПроизводственныеКалендари.ПустаяСсылка) + | ТОГДА ВЫБОР + | КОГДА ДанныеПроизводственныхКалендарей.ДатаЗаполненности = ДАТАВРЕМЯ(1, 1, 1) + | ТОГДА ВЫРАЗИТЬ(&КалендарьНеЗаполнен КАК СТРОКА(100)) + | ИНАЧЕ ВЫБОР + | КОГДА ДанныеПроизводственныхКалендарей.ДатаЗаполненности < ДОБАВИТЬКДАТЕ(&ТекущаяДата, МЕСЯЦ, СправочникГрафикиРаботы.ГоризонтПланирования) + | ТОГДА ВЫРАЗИТЬ(&КалендарьНеЗаполненНаГод КАК СТРОКА(100)) + | КОНЕЦ + | КОНЕЦ + | ИНАЧЕ ВЫБОР + | КОГДА СправочникГрафикиРаботы.ДатаОкончания = ДАТАВРЕМЯ(1, 1, 1) + | ТОГДА ВЫРАЗИТЬ(&ГрафикНеЗаполнен КАК СТРОКА(100)) + | ИНАЧЕ ВЫБОР + | КОГДА СправочникГрафикиРаботы.ДатаОкончания < ДОБАВИТЬКДАТЕ(&ТекущаяДата, МЕСЯЦ, СправочникГрафикиРаботы.ГоризонтПланирования) + | ТОГДА ВЫРАЗИТЬ(&ПериодГрафикаОграничен КАК СТРОКА(100)) + | КОНЕЦ + | КОНЕЦ + | КОНЕЦ + | ИНАЧЕ """" + | КОНЕЦ КАК ВозможнаяПричина + |ИЗ + | Справочник.Календари КАК СправочникГрафикиРаботы + | ЛЕВОЕ СОЕДИНЕНИЕ ВТДатыЗаполненностиГрафиков КАК ДанныеГрафиков + | ПО СправочникГрафикиРаботы.Ссылка = ДанныеГрафиков.ГрафикРаботы + | ЛЕВОЕ СОЕДИНЕНИЕ ВТДатыЗаполненностиКалендарей КАК ДанныеПроизводственныхКалендарей + | ПО СправочникГрафикиРаботы.ПроизводственныйКалендарь = ДанныеПроизводственныхКалендарей.ПроизводственныйКалендарь + |ГДЕ + | СправочникГрафикиРаботы.Ссылка В(&Календари)"; + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + СтрокаСписка = Строки[Выборка.Ссылка]; + СтрокаСписка.Данные["ДатаНеобходимойЗаполненности"] = Выборка.ДатаНеобходимойЗаполненности; + СтрокаСписка.Данные["ДатаЗаполненности"] = Выборка.ДатаЗаполненности; + СтрокаСписка.Данные["ДатаЗаполненностиПроизводственногоКалендаря"] = Выборка.ДатаЗаполненностиПроизводственногоКалендаря; + СтрокаСписка.Данные["ТребуетЗаполнения"] = Выборка.ТребуетЗаполнения; + Если Выборка.ТребуетЗаполнения Тогда + Для Каждого КлючИЗначение Из СтрокаСписка.Оформление Цикл + КлючИЗначение.Значение.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ПросроченныеДанныеЦвет); + КонецЦикла; + КонецЕсли; + СтрокаСписка.Оформление["ВозможнаяПричина"].УстановитьЗначениеПараметра("Текст", Выборка.ВозможнаяПричина); + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти + #Область СлужебныеПроцедурыИФункции &НаСервере Процедура УстановитьПараметрыСписка() - Список.Параметры.УстановитьЗначениеПараметра("ТекущаяДата", ТекущаяДатаСеанса()); - - Список.Параметры.УстановитьЗначениеПараметра("КалендарьНеЗаполнен", НСтр("ru = 'Производственный календарь не заполнен'")); - Список.Параметры.УстановитьЗначениеПараметра("КалендарьНеЗаполненНаГод", НСтр("ru = 'Производственный календарь не заполнен на очередной календарный год'")); - Список.Параметры.УстановитьЗначениеПараметра("ГрафикНеЗаполнен", НСтр("ru = 'График не был заполнен на очередной календарный год'")); - Список.Параметры.УстановитьЗначениеПараметра("ПериодГрафикаОграничен", НСтр("ru = 'Период заполнения графика ограничен (см. поле «Дата окончания»)'")); - ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( Список, "ВладелецГрафика", , ВидСравненияКомпоновкиДанных.НеЗаполнено, , , РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный); КонецПроцедуры -&НаСервере -Процедура ЗаполнитьУсловноеОформлениеСписка() - - НовыйЭлемент = Список.УсловноеОформление.Элементы.Добавить(); - - ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора(НовыйЭлемент.Отбор, "ТребуетЗаполнения", Истина); - - Оформление = НовыйЭлемент.Оформление.Элементы.Найти("ЦветТекста"); - Оформление.Значение = ЦветаСтиля.ПросроченныеДанныеЦвет; - Оформление.Использование = Истина; - -КонецПроцедуры - #КонецОбласти diff --git a/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Module.bsl index 7f4e4dd20..bbeebffc6 100644 --- a/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Module.bsl @@ -20,6 +20,8 @@ Возврат; КонецЕсли; + ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан("Справочник.Календари", ЭтотОбъект); + // Если производственный календарь в системе единственный, заполняем его по умолчанию. ПроизводственныеКалендари = Справочники.ПроизводственныеКалендари.СписокПроизводственныхКалендарей(); Если ПроизводственныеКалендари.Количество() = 1 Тогда @@ -567,7 +569,7 @@ СтрокаШаблона.ПредставлениеРасписания = ПредставлениеРасписанияДня(Форма, СтрокаШаблона.НомерСтроки); КонецЦикла; - РасписаниеПредпраздничногоДня = ПредставлениеРасписанияДня(Форма, 0); + Форма.РасписаниеПредпраздничногоДня = ПредставлениеРасписанияДня(Форма, 0); КонецПроцедуры @@ -674,7 +676,7 @@ ИнформационныйТекст = НСтр("ru = 'График работы заполнен до %1'"); Форма.ЗаполненностьИнформационныйТекст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ИнформационныйТекст, Формат(Форма.ДатаЗаполненности, "ДЛФ=D")); Иначе - #Если Клиент Тогда + #Если ВебКлиент Или ТонкийКлиент Тогда ТекущаяДата = ОбщегоНазначенияКлиент.ДатаСеанса(); #Иначе ТекущаяДата = ТекущаяДатаСеанса(); diff --git a/SSL/src/Catalogs/Календари/ManagerModule.bsl b/SSL/src/Catalogs/Календари/ManagerModule.bsl index 87728fbae..6f5305633 100644 --- a/SSL/src/Catalogs/Календари/ManagerModule.bsl +++ b/SSL/src/Catalogs/Календари/ManagerModule.bsl @@ -463,28 +463,29 @@ ДатаДня = ДатаНачала; Пока ДатаДня <= ДатаОкончания Цикл - ПраздничныйДень = Ложь; - Если Не ЗаполнятьПоПроизводственномуКалендарю Тогда - НомерДня = ДеньНедели(ДатаДня); - Иначе + НерабочийДень = Ложь; + НомерДня = ДеньНедели(ДатаДня); + Если ЗаполнятьПоПроизводственномуКалендарю И УчитыватьПраздники Тогда ДанныеДня = ДанныеПроизводственногоКалендаря.НайтиСтроки(Новый Структура("Дата", ДатаДня))[0]; Если ДанныеДня.ВидДня = Перечисления.ВидыДнейПроизводственногоКалендаря.Суббота Тогда НомерДня = 6; ИначеЕсли ДанныеДня.ВидДня = Перечисления.ВидыДнейПроизводственногоКалендаря.Воскресенье Тогда НомерДня = 7; Иначе - НомерДня = ДеньНедели(?(ЗначениеЗаполнено(ДанныеДня.ДатаПереноса), ДанныеДня.ДатаПереноса, ДанныеДня.Дата)); + Если ДанныеДня.ВидДня = Перечисления.ВидыДнейПроизводственногоКалендаря.Праздник Тогда + ПраздничныйДень = Истина; + ИначеЕсли ДанныеДня.ВидДня = Перечисления.ВидыДнейПроизводственногоКалендаря.Нерабочий Тогда + НерабочийДень = Истина; + КонецЕсли; КонецЕсли; - ПраздничныйДень = УчитыватьПраздники И ДанныеДня.ВидДня = Перечисления.ВидыДнейПроизводственногоКалендаря.Праздник; - НерабочийДень = УчитыватьПраздники И ДанныеДня.ВидДня = Перечисления.ВидыДнейПроизводственногоКалендаря.Нерабочий; КонецЕсли; - - СтрокаДня = ШаблонЗаполнения[НомерДня - 1]; - Если СтрокаДня.ДеньВключенВГрафик И Не ПраздничныйДень И Не НерабочийДень Тогда - ДниВключенныеВГрафик.Вставить(ДатаДня, Истина); + Если Не ПраздничныйДень И Не НерабочийДень Тогда + СтрокаДня = ШаблонЗаполнения[НомерДня - 1]; + Если СтрокаДня.ДеньВключенВГрафик Тогда + ДниВключенныеВГрафик.Вставить(ДатаДня, Истина); + КонецЕсли; КонецЕсли; - ДатаДня = ДатаДня + ДлинаСуток; КонецЦикла; diff --git a/SSL/src/Catalogs/Календари/ObjectModule.bsl b/SSL/src/Catalogs/Календари/ObjectModule.bsl index b6534a051..39c4431df 100644 --- a/SSL/src/Catalogs/Календари/ObjectModule.bsl +++ b/SSL/src/Catalogs/Календари/ObjectModule.bsl @@ -12,6 +12,8 @@ Возврат; КонецЕсли; + ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан("Справочник.Календари"); + Если Не УчитыватьПраздники Тогда // Если график работы не учитывает праздники, то нужно удалить интервалы предпраздничного дня. РасписаниеПредпраздничногоДня = РасписаниеРаботы.НайтиСтроки(Новый Структура("НомерДня", 0)); diff --git a/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Module.bsl index 62e380232..b75f32e1f 100644 --- a/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Module.bsl @@ -839,15 +839,16 @@ Элементы.ВыбиратьИерархически.Видимость = ХранимыеПараметры.ИспользоватьГруппы; - Если Не Пользователи.РолиДоступны("ДобавлениеИзменениеПользователей") + Если Не ПравоДоступа("Редактирование", Метаданные.Справочники.ГруппыПользователей) Или ХранимыеПараметры.РасширенныйПодбор Или ОбщегоНазначения.ЭтоАвтономноеРабочееМесто() Тогда Элементы.НазначитьГруппы.Видимость = Ложь; Элементы.ПользователиСписокКонтекстноеМенюНазначитьГруппы.Видимость = Ложь; Иначе - Элементы.НазначитьГруппы.Видимость = ХранимыеПараметры.ИспользоватьГруппы; - Элементы.ПользователиСписокКонтекстноеМенюНазначитьГруппы.Видимость = ХранимыеПараметры.ИспользоватьГруппы; + Элементы.НазначитьГруппы.Видимость = ХранимыеПараметры.ИспользоватьГруппы; + Элементы.ПользователиСписокКонтекстноеМенюНазначитьГруппы.Видимость = + ХранимыеПараметры.ИспользоватьГруппы; КонецЕсли; Элементы.СоздатьГруппуПользователей.Видимость = diff --git a/SSL/src/Catalogs/ПравилаПроверкиУчета/Forms/ФормаГруппы/Form.form b/SSL/src/Catalogs/ПравилаПроверкиУчета/Forms/ФормаГруппы/Form.form new file mode 100644 index 000000000..733ffd075 --- /dev/null +++ b/SSL/src/Catalogs/ПравилаПроверкиУчета/Forms/ФормаГруппы/Form.form @@ -0,0 +1,245 @@ + + + + Наименование + 1 + true + true + + true + + + Объект.Description + + + НаименованиеРасширеннаяПодсказка + 3 + Label + true + true + + Left + + + + НаименованиеКонтекстноеМеню + 2 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + Родитель + 12 + + <key>ru</key> + <value>Вышестоящая группа (папка)</value> + + true + true + + true + + + Объект.Parent + + 2 + + РодительРасширеннаяПодсказка + 14 + Label + true + true + + Left + + + + РодительКонтекстноеМеню + 13 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + ГруппаДляРазработчика + 10 + + Идентификатор + 7 + true + true + + + Объект.Идентификатор + + + ИдентификаторРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + + ИдентификаторКонтекстноеМеню + 8 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Для разработчика</value> + + + ГруппаДляРазработчикаРасширеннаяПодсказка + 11 + Label + true + true + + Left + + + UsualGroup + + Vertical + Collapsible + true + Button + NormalSeparation + true + true + Equal + auto + Auto + Auto + + + + Комментарий + 15 + true + true + + true + + + Объект.Комментарий + + + КомментарийРасширеннаяПодсказка + 17 + Label + true + true + + Left + + + + КомментарийКонтекстноеМеню + 16 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + ФормаКоманднаяПанель + -1 + Left + true + + LockOwner + true + true + true + Vertical + true + true + true + auto + true + + Объект + 1 + + CatalogObject.ПравилаПроверкиУчета + + + true + + + true + +
true
+ true +
+ + + + + + Folders + +
diff --git a/SSL/src/Catalogs/ПравилаПроверкиУчета/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ПравилаПроверкиУчета/Forms/ФормаСписка/Form.form index 13611ae4f..2bbaacfdd 100644 --- a/SSL/src/Catalogs/ПравилаПроверкиУчета/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/ПравилаПроверкиУчета/Forms/ФормаСписка/Form.form @@ -64,6 +64,33 @@ UserCmds Auto + + ФормаВосстановитьПоНачальномуЗаполнению + 145 + true + true + + true + + + ФормаВосстановитьПоНачальномуЗаполнениюРасширеннаяПодсказка + 146 + Label + true + true + + Left + + + Form.Command.ВосстановитьПоНачальномуЗаполнению + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + true true @@ -792,6 +819,28 @@ DontUse Auto + + ВосстановитьПоНачальномуЗаполнению + + <key>ru</key> + <value>Восстановить по начальному заполнению</value> + + 2 + + ru + Восстанавливает элементы справочника проверок ведения учета до состояния поставки. Функциональность аналогична соответствующему обработчику обновления. + + + true + + + + ВосстановитьПоНачальномуЗаполнению + + + DontUse + Auto + diff --git a/SSL/src/Catalogs/ПравилаПроверкиУчета/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ПравилаПроверкиУчета/Forms/ФормаСписка/Module.bsl index 259742e05..f342f0204 100644 --- a/SSL/src/Catalogs/ПравилаПроверкиУчета/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ПравилаПроверкиУчета/Forms/ФормаСписка/Module.bsl @@ -48,6 +48,9 @@ Элементы.ПредставлениеОбщегоРасписания.Доступность = РасписаниеДоступно(); + ФормаГруппаДействий = Элементы.КоманднаяПанель.ПодчиненныеЭлементы.ФормаГруппаДействий; + ФормаГруппаДействий.ПодчиненныеЭлементы.ФормаВосстановитьПоНачальномуЗаполнению.Видимость = МодульПользователи.ЭтоПолноправныйПользователь(); + // СтандартныеПодсистемы.ПодключаемыеКоманды ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект); // Конец СтандартныеПодсистемы.ПодключаемыеКоманды @@ -169,18 +172,14 @@ КонецПроцедуры -&НаСервере -Функция ПодготовкаМассиваПроверок(МассивПроверок) - - ОтфильтрованныйМассив = Новый Массив; - Для Каждого Проверка Из МассивПроверок Цикл - Если Не Проверка.ЭтоГруппа Тогда - ОтфильтрованныйМассив.Добавить(Проверка); - КонецЕсли; - КонецЦикла; - Возврат ОтфильтрованныйМассив; - -КонецФункции +&НаКлиенте +Процедура ВосстановитьПоНачальномуЗаполнению(Команда) + ВосстановитьПоНачальномуЗаполнениюНаСервере(); +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаСервере Функция ВыполнитьПроверкиНаСервере(МассивПроверок) @@ -225,9 +224,28 @@ КонецФункции -#КонецОбласти +&НаСервере +Процедура ВосстановитьПоНачальномуЗаполнениюНаСервере() + + КонтрольВеденияУчетаСлужебный.ОбновитьПараметрыСистемныхПроверок(); + Если КонтрольВеденияУчетаСлужебный.ЕстьИзмененияПараметровСистемныхПроверок() Тогда + КонтрольВеденияУчетаСлужебный.ОбновитьВспомогательныеДанныеПоИзменениямКонфигурации(); + КонецЕсли; + +КонецПроцедуры -#Область СлужебныеПроцедурыИФункции +&НаСервере +Функция ПодготовкаМассиваПроверок(МассивПроверок) + + ОтфильтрованныйМассив = Новый Массив; + Для Каждого Проверка Из МассивПроверок Цикл + Если Не Проверка.ЭтоГруппа Тогда + ОтфильтрованныйМассив.Добавить(Проверка); + КонецЕсли; + КонецЦикла; + Возврат ОтфильтрованныйМассив; + +КонецФункции &НаСервере Функция СформироватьСтрокуСРасписанием() @@ -335,6 +353,7 @@ Процедура Подключаемый_ОбновитьКоманды() ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Элементы.Список); КонецПроцедуры + // Конец СтандартныеПодсистемы.ПодключаемыеКоманды #КонецОбласти diff --git a/SSL/src/Catalogs/ПравилаПроверкиУчета/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ПравилаПроверкиУчета/Forms/ФормаЭлемента/Module.bsl index 18e44c590..67c27ad8e 100644 --- a/SSL/src/Catalogs/ПравилаПроверкиУчета/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ПравилаПроверкиУчета/Forms/ФормаЭлемента/Module.bsl @@ -178,14 +178,17 @@ МассивПараметров = Новый Массив; ПараметрыЗадания = Новый Структура; - ПараметрыЗадания.Вставить("Идентификатор", Объект.Идентификатор); - ПараметрыЗадания.Вставить("Наименование", Объект.Наименование); - ПараметрыЗадания.Вставить("ИдентификаторРегламентногоЗадания", Объект.ИдентификаторРегламентногоЗадания); - ПараметрыЗадания.Вставить("ДатаНачалаПроверки", Объект.ДатаНачалаПроверки); - ПараметрыЗадания.Вставить("ЛимитПроблем", Объект.ЛимитПроблем); - ПараметрыЗадания.Вставить("СпособВыполнения", Объект.СпособВыполнения); - ПараметрыЗадания.Вставить("ПроверкаБылаОстановлена", Ложь); - ПараметрыЗадания.Вставить("РучнойЗапуск", Истина); + ПараметрыЗадания.Вставить("Идентификатор", Объект.Идентификатор); + ПараметрыЗадания.Вставить("Наименование", Объект.Наименование); + ПараметрыЗадания.Вставить("ИдентификаторРегламентногоЗадания", Объект.ИдентификаторРегламентногоЗадания); + ПараметрыЗадания.Вставить("ДатаНачалаПроверки", Объект.ДатаНачалаПроверки); + ПараметрыЗадания.Вставить("ЛимитПроблем", Объект.ЛимитПроблем); + ПараметрыЗадания.Вставить("СпособВыполнения", Объект.СпособВыполнения); + ПараметрыЗадания.Вставить("ВажностьПроблемы", Объект.ВажностьПроблемы); + ПараметрыЗадания.Вставить("КонтекстПроверокВеденияУчета", Объект.КонтекстПроверокВеденияУчета); + ПараметрыЗадания.Вставить("УточнениеКонтекстаПроверокВеденияУчета", Объект.УточнениеКонтекстаПроверокВеденияУчета); + ПараметрыЗадания.Вставить("ПроверкаБылаОстановлена", Ложь); + ПараметрыЗадания.Вставить("РучнойЗапуск", Истина); МассивПараметров.Добавить(ПараметрыЗадания); @@ -221,7 +224,7 @@ Если ОтдельноеРегламентноеЗадание = Неопределено Тогда Элементы.ПредставлениеИндивидуальногоРасписания.Заголовок = - Новый ФорматированнаяСтрока(НСтр("ru='Настроить индивидуальное расписание?'"), , , , ПоместитьВоВременноеХранилище("ДобавитьЗадание", УникальныйИдентификатор)); + Новый ФорматированнаяСтрока(НСтр("ru='Настроить расписание'"), , , , ПоместитьВоВременноеХранилище("ДобавитьЗадание", УникальныйИдентификатор)); Иначе Элементы.ПредставлениеИндивидуальногоРасписания.Заголовок = Новый ФорматированнаяСтрока(ОтдельноеРасписаниеПредставление, , , , ПоместитьВоВременноеХранилище(ОтдельноеРегламентноеЗадание.Расписание, УникальныйИдентификатор)); @@ -301,8 +304,6 @@ Возврат; КонецЕсли; - КлючЗадания = Строка(Новый УникальныйИдентификатор); - ПараметрыЗадания = Новый Структура; ПараметрыЗадания.Вставить("Расписание", Расписание); ПараметрыЗадания.Вставить("Использование", Истина); @@ -331,7 +332,7 @@ Функция МетаданныеТекущейПроверки(Идентификатор) СтруктураПроверки = Новый Структура; - Проверки = КонтрольВеденияУчетаПовтИсп.ПроверкиВеденияУчета().Проверки; + Проверки = КонтрольВеденияУчетаСлужебныйПовтИсп.ПроверкиВеденияУчета().Проверки; СтрокаПроверки = Проверки.Найти(Идентификатор, "Идентификатор"); Если СтрокаПроверки = Неопределено Тогда diff --git a/SSL/src/Catalogs/ПравилаПроверкиУчета/ObjectModule.bsl b/SSL/src/Catalogs/ПравилаПроверкиУчета/ObjectModule.bsl index b2e7b98f2..a4d2ead19 100644 --- a/SSL/src/Catalogs/ПравилаПроверкиУчета/ObjectModule.bsl +++ b/SSL/src/Catalogs/ПравилаПроверкиУчета/ObjectModule.bsl @@ -4,14 +4,14 @@ Процедура ПередЗаписью(Отказ) - Если Не ЭтоГруппа И Использование = Ссылка.Использование Тогда - Использование = Не ПометкаУдаления; - КонецЕсли; - Если ОбменДанными.Загрузка Тогда Возврат; КонецЕсли; + Если Не ЭтоГруппа И Использование = Ссылка.Использование Тогда + Использование = Не ПометкаУдаления; + КонецЕсли; + ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(ЭтотОбъект); ПроверкаВеденияУчетаИзменена = ОбъектБылИзменен(); @@ -64,7 +64,7 @@ КонецЦикла; -КонецФункции; +КонецФункции #КонецОбласти diff --git a/SSL/src/Catalogs/ПравилаПроверкиУчета/ПравилаПроверкиУчета.mdo b/SSL/src/Catalogs/ПравилаПроверкиУчета/ПравилаПроверкиУчета.mdo index ed876b3ee..7ae56ae76 100644 --- a/SSL/src/Catalogs/ПравилаПроверкиУчета/ПравилаПроверкиУчета.mdo +++ b/SSL/src/Catalogs/ПравилаПроверкиУчета/ПравилаПроверкиУчета.mdo @@ -74,7 +74,7 @@ ru - Группа к которой относится правило проверки + Группа, к которой относится правило проверки. true @@ -130,7 +130,6 @@ Правило проверки учета true - true 2 true 150 @@ -140,6 +139,7 @@ InDialog BothWays Catalog.ПравилаПроверкиУчета.Form.ФормаЭлемента + Catalog.ПравилаПроверкиУчета.Form.ФормаГруппы Catalog.ПравилаПроверкиУчета.Form.ФормаСписка ВажностьПроблемы @@ -206,7 +206,7 @@ Use Use - + Причины ru @@ -226,7 +226,7 @@ Use Use - + Рекомендация ru @@ -286,7 +286,7 @@ Use - + ДополнительныеПараметры ru @@ -305,7 +305,7 @@ Use Use - + ДатаНачалаПроверки ru @@ -325,7 +325,7 @@ Use Use - + ЛимитПроблем ru @@ -349,7 +349,7 @@ Use Use - + РасписаниеВыполненияПроверки ru @@ -368,7 +368,7 @@ Use Use - + Комментарий ru @@ -384,8 +384,9 @@ - + Use + ForFolderAndItem Use @@ -405,16 +406,17 @@ Use + ForFolderAndItem Use - УточнениеКонтекстаПроверкиСостоянияСистемы + УточнениеКонтекстаПроверокВеденияУчета ru - Уточнение контекста проверки состояния системы + Уточнение контекста проверок ведения учета - DefinedType.УточнениеКонтекстаПроверкиСостоянияСистемы + DefinedType.УточнениеКонтекстаПроверокВеденияУчета ru @@ -426,7 +428,7 @@ Use Use - + ПроверкаВеденияУчетаИзменена ru @@ -446,7 +448,7 @@ ForFolderAndItem Use - + ФормаЭлемента ru @@ -460,7 +462,7 @@ PersonalComputer MobileDevice - + ФормаСписка ru @@ -469,4 +471,13 @@ PersonalComputer MobileDevice + + ФормаГруппы + + ru + Форма группы + + PersonalComputer + MobileDevice + diff --git a/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/ObjectModule.bsl b/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/ObjectModule.bsl index c4c772ce6..209e687ae 100644 --- a/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/ObjectModule.bsl +++ b/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/ObjectModule.bsl @@ -3,6 +3,16 @@ #Область ОбработчикиСобытий +Процедура ПриЗаписи(Отказ) + + Если ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + + ОбновитьПовторноИспользуемыеЗначения(); + +КонецПроцедуры + Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты) Если ЭтоПрограммаОблачногоСервиса Тогда diff --git a/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаСписка/Form.form index 7abdfced0..b2200f61d 100644 --- a/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаСписка/Form.form @@ -287,6 +287,40 @@ true
+ + Ссылка + 36 + true + true + + + Список.Ref + + + СсылкаРасширеннаяПодсказка + 38 + Label + true + true + + Left + + + + СсылкаКонтекстноеМеню + 37 + true + + LabelField + Enter + true + Left + true + + true + true + + None СписокКоманднаяПанель @@ -449,6 +483,15 @@ true + + Список.Code + + + Список.Ref + + + Список.БазовыйКалендарь +
true
Catalog.ПроизводственныеКалендари diff --git a/SSL/src/Catalogs/ПроизводственныеКалендари/ManagerModule.bsl b/SSL/src/Catalogs/ПроизводственныеКалендари/ManagerModule.bsl index b955c7054..53652b78a 100644 --- a/SSL/src/Catalogs/ПроизводственныеКалендари/ManagerModule.bsl +++ b/SSL/src/Catalogs/ПроизводственныеКалендари/ManagerModule.bsl @@ -59,6 +59,43 @@ #КонецОбласти +#Область СлужебныйПрограммныйИнтерфейс + +// Функция выявляет последний день, за который заполнены данные +// указанного производственного календаря. +// +// Параметры: +// ПроизводственныйКалендарь - СправочникСсылка.ПроизводственныеКалендари - календарь. +// +// Возвращаемое значение: +// Дата - дата, по которую заполнен производственный календарь, Неопределено, если календарь не заполнен. +// +Функция ДатаОкончанияЗаполненияПроизводственногоКалендаря(ПроизводственныйКалендарь) Экспорт + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("ПроизводственныйКалендарь", ПроизводственныйКалендарь); + Запрос.Текст = + "ВЫБРАТЬ + | МАКСИМУМ(ДанныеПроизводственногоКалендаря.Дата) КАК Дата + |ИЗ + | РегистрСведений.ДанныеПроизводственногоКалендаря КАК ДанныеПроизводственногоКалендаря + |ГДЕ + | ДанныеПроизводственногоКалендаря.ПроизводственныйКалендарь = &ПроизводственныйКалендарь + | + |ИМЕЮЩИЕ + | МАКСИМУМ(ДанныеПроизводственногоКалендаря.Дата) ЕСТЬ НЕ NULL "; + + Выборка = Запрос.Выполнить().Выбрать(); + Если Выборка.Следующий() Тогда + Возврат Выборка.Дата; + КонецЕсли; + + Возврат Неопределено; + +КонецФункции + +#КонецОбласти + #Область СлужебныеПроцедурыИФункции // Функция читает данные производственного календаря из регистра. @@ -160,11 +197,7 @@ КонецЕсли; // Преобразовываем в таблицу. - ДанныеПроизводственногоКалендаря = Новый ТаблицаЗначений; - ДанныеПроизводственногоКалендаря.Колонки.Добавить("Дата", Новый ОписаниеТипов("Дата")); - ДанныеПроизводственногоКалендаря.Колонки.Добавить("ВидДня", Новый ОписаниеТипов("ПеречислениеСсылка.ВидыДнейПроизводственногоКалендаря")); - ДанныеПроизводственногоКалендаря.Колонки.Добавить("ДатаПереноса", Новый ОписаниеТипов("Дата")); - + ДанныеПроизводственногоКалендаря = НовыеДанныеПроизводственныхКалендарей(); Для Каждого КлючИЗначение Из ВидыДней Цикл НоваяСтрока = ДанныеПроизводственногоКалендаря.Добавить(); НоваяСтрока.Дата = КлючИЗначение.Ключ; @@ -173,6 +206,8 @@ Если ДатаПереноса <> Неопределено Тогда НоваяСтрока.ДатаПереноса = ДатаПереноса; КонецЕсли; + НоваяСтрока.Год = НомерГода; + НоваяСтрока.КодПроизводственногоКалендаря = КодКалендаря; КонецЦикла; ДанныеПроизводственногоКалендаря.Сортировать("Дата"); @@ -214,12 +249,7 @@ КонецЕсли; Для Каждого НомерГода Из НомераГодов Цикл ДанныеКалендаря = РезультатЗаполненияПроизводственногоКалендаряПоУмолчанию(Выборка.КодКалендаря, НомерГода, Выборка.КодБазовогоКалендаря); - Для Каждого СтрокаДанных Из ДанныеКалендаря Цикл - НоваяСтрока = ТаблицаДанных.Добавить(); - ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаДанных); - НоваяСтрока.КодПроизводственногоКалендаря = Выборка.КодКалендаря; - НоваяСтрока.Год = НомерГода; - КонецЦикла; + ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(ДанныеКалендаря, ТаблицаДанных); КонецЦикла; КонецЦикла; @@ -328,37 +358,43 @@ Процедура ОбновитьПроизводственныеКалендари(ТаблицаКалендарей) Экспорт Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | ВЫРАЗИТЬ(КлассификаторТаблица.Code КАК СТРОКА(2)) КАК Код, - | ВЫРАЗИТЬ(КлассификаторТаблица.Base КАК СТРОКА(2)) КАК КодБазового, - | ВЫРАЗИТЬ(КлассификаторТаблица.Description КАК СТРОКА(100)) КАК Наименование - |ПОМЕСТИТЬ КлассификаторТаблица - |ИЗ - | &КлассификаторТаблица КАК КлассификаторТаблица - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | КлассификаторТаблица.Код КАК Код, - | КлассификаторТаблица.КодБазового КАК КодБазового, - | КлассификаторТаблица.Наименование КАК Наименование, - | ПроизводственныеКалендари.Ссылка КАК Ссылка, - | ЕСТЬNULL(ПроизводственныеКалендари.Код, """") КАК ПроизводственныйКалендарьКод, - | ЕСТЬNULL(ПроизводственныеКалендари.Наименование, """") КАК ПроизводственныйКалендарьНаименование - |ИЗ - | КлассификаторТаблица КАК КлассификаторТаблица - | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПроизводственныеКалендари КАК ПроизводственныеКалендари - | ПО КлассификаторТаблица.Код = ПроизводственныеКалендари.Код - | - |УПОРЯДОЧИТЬ ПО - | КодБазового"; - Запрос.УстановитьПараметр("КлассификаторТаблица", ТаблицаКалендарей); - Выборка = Запрос.Выполнить().Выбрать(); + Запрос.Текст = + "ВЫБРАТЬ + | ВЫРАЗИТЬ(КлассификаторТаблица.Code КАК СТРОКА(2)) КАК Код, + | ВЫРАЗИТЬ(КлассификаторТаблица.Base КАК СТРОКА(2)) КАК КодБазового, + | ВЫРАЗИТЬ(КлассификаторТаблица.Description КАК СТРОКА(100)) КАК Наименование + |ПОМЕСТИТЬ КлассификаторТаблица + |ИЗ + | &КлассификаторТаблица КАК КлассификаторТаблица + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | КлассификаторТаблица.Код КАК Код, + | КлассификаторТаблица.КодБазового КАК КодБазового, + | КлассификаторТаблица.Наименование КАК Наименование, + | ПроизводственныеКалендари.Ссылка КАК Ссылка, + | ЕСТЬNULL(ПроизводственныеКалендари.Код, """") КАК ПроизводственныйКалендарьКод, + | ЕСТЬNULL(ПроизводственныеКалендари.Наименование, """") КАК ПроизводственныйКалендарьНаименование, + | ЕСТЬNULL(ПроизводственныеКалендари.БазовыйКалендарь.Код, """") КАК ПроизводственныйКалендарьКодБазового + |ИЗ + | КлассификаторТаблица КАК КлассификаторТаблица + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПроизводственныеКалендари КАК ПроизводственныеКалендари + | ПО КлассификаторТаблица.Код = ПроизводственныеКалендари.Код + | + |УПОРЯДОЧИТЬ ПО + | КодБазового"; + РезультатЗапроса = Запрос.Выполнить(); + Если РезультатЗапроса.Пустой() Тогда + Возврат; + КонецЕсли; + + Выборка = РезультатЗапроса.Выбрать(); Пока Выборка.Следующий() Цикл Если СокрЛП(Выборка.Код) = СокрЛП(Выборка.ПроизводственныйКалендарьКод) - И СокрЛП(Выборка.Наименование) = СокрЛП(Выборка.ПроизводственныйКалендарьНаименование) Тогда + И СокрЛП(Выборка.Наименование) = СокрЛП(Выборка.ПроизводственныйКалендарьНаименование) + И СокрЛП(Выборка.КодБазового) = СокрЛП(Выборка.ПроизводственныйКалендарьКодБазового) Тогда Продолжить; КонецЕсли; Если ЗначениеЗаполнено(Выборка.Ссылка) Тогда @@ -375,6 +411,10 @@ Если ЗначениеЗаполнено(Выборка.КодБазового) Тогда СправочникОбъект.БазовыйКалендарь = НайтиПоКоду(Выборка.КодБазового); КонецЕсли; + Если ОбновлениеИнформационнойБазы.ЭтоВызовИзОбработчикаОбновления() Тогда + ОбновлениеИнформационнойБазы.ЗаписатьОбъект(СправочникОбъект); + Продолжить; + КонецЕсли; СправочникОбъект.Записать(); КонецЦикла; @@ -384,6 +424,22 @@ // Функция ОбновитьДанныеПроизводственныхКалендарей(Знач ТаблицаДанных) Экспорт + ТаблицаИзменений = ТаблицаИзмененийПроизводственныхКалендарей(); + + ОбновитьОсновныеДанныеПроизводственныхКалендарей(ТаблицаДанных, ТаблицаИзменений); + + ОбновитьДанныеЗависимыхПроизводственныхКалендарей(ТаблицаИзменений); + + Возврат ТаблицаИзменений; + +КонецФункции + +Процедура ОбновитьОсновныеДанныеПроизводственныхКалендарей(ТаблицаДанных, ИзмененияКалендарей) + + Если ТаблицаДанных.Количество() = 0 Тогда + Возврат; + КонецЕсли; + Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ @@ -427,24 +483,94 @@ КлючиРегистра.Добавить("Год"); КлючиРегистра.Добавить("Дата"); - ТаблицаИзменений = ТаблицаИзмененийПроизводственныхКалендарей(); - Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл НаборЗаписей.Очистить(); ЗаполнитьЗначенияСвойств(НаборЗаписей.Добавить(), Выборка); - ЗаполнитьЗначенияСвойств(ТаблицаИзменений.Добавить(), Выборка); + ЗаполнитьЗначенияСвойств(ИзмененияКалендарей.Добавить(), Выборка); Для Каждого Ключ Из КлючиРегистра Цикл НаборЗаписей.Отбор[Ключ].Установить(Выборка[Ключ]); КонецЦикла; НаборЗаписей.Записать(Истина); КонецЦикла; - ТаблицаИзменений.Свернуть("КодПроизводственногоКалендаря, Год"); + ИзмененияКалендарей.Свернуть("КодПроизводственногоКалендаря, Год"); - Возврат ТаблицаИзменений; +КонецПроцедуры + +Процедура ОбновитьДанныеЗависимыхПроизводственныхКалендарей(ИзмененияКалендарей) Экспорт -КонецФункции + Если ИзмененияКалендарей.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("ИзмененияКалендарей", ИзмененияКалендарей); + Запрос.Текст = + "ВЫБРАТЬ + | ИзмененияКалендарей.КодПроизводственногоКалендаря КАК КодПроизводственногоКалендаря, + | ИзмененияКалендарей.Год КАК Год + |ПОМЕСТИТЬ ВТИзмененияКалендарей + |ИЗ + | &ИзмененияКалендарей КАК ИзмененияКалендарей + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ЗависимыеКалендари.Ссылка КАК ПроизводственныйКалендарь, + | ЗависимыеКалендари.Код КАК Код, + | ИзмененияБазовыхКалендарей.Год КАК Год, + | ЗависимыеКалендари.БазовыйКалендарь.Код КАК КодБазовогоКалендаря + |ИЗ + | Справочник.ПроизводственныеКалендари КАК ЗависимыеКалендари + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТИзмененияКалендарей КАК ИзмененияБазовыхКалендарей + | ПО ЗависимыеКалендари.БазовыйКалендарь.Код = ИзмененияБазовыхКалендарей.КодПроизводственногоКалендаря + | И (ЗависимыеКалендари.БазовыйКалендарь <> ЗНАЧЕНИЕ(Справочник.ПроизводственныеКалендари.ПустаяСсылка)) + | ЛЕВОЕ СОЕДИНЕНИЕ ВТИзмененияКалендарей КАК ИзмененияЗависимыхКалендарей + | ПО (ИзмененияЗависимыхКалендарей.КодПроизводственногоКалендаря = ЗависимыеКалендари.Код) + | И (ИзмененияЗависимыхКалендарей.Год = ИзмененияБазовыхКалендарей.Год) + |ГДЕ + | ИзмененияЗависимыхКалендарей.Год ЕСТЬ NULL"; + РезультатЗапроса = Запрос.Выполнить(); + Если РезультатЗапроса.Пустой() Тогда + Возврат; + КонецЕсли; + + КодыЗависимых = РезультатЗапроса.Выгрузить().ВыгрузитьКолонку("Код"); + ДанныеИзМакета = ДанныеПроизводственныхКалендарейИзМакета(КодыЗависимых, Ложь); + + ОтборСтрок = Новый Структура( + "КодПроизводственногоКалендаря, + |Год"); + + Выборка = РезультатЗапроса.Выбрать(); + Пока Выборка.Следующий() Цикл + ОтборСтрок.КодПроизводственногоКалендаря = Выборка.Код; + ОтборСтрок.Год = Выборка.Год; + НайденныеСтроки = ДанныеИзМакета.НайтиСтроки(ОтборСтрок); + Если НайденныеСтроки.Количество() > 0 Тогда + // Если есть данные в макете, считаем, что перезаполнять не нужно. + Продолжить; + КонецЕсли; + ДанныеКалендаря = РезультатЗаполненияПроизводственногоКалендаряПоУмолчанию(Выборка.Код, Выборка.Год, Выборка.КодБазовогоКалендаря); + ДанныеКалендаря.Колонки.Добавить("ПроизводственныйКалендарь"); + ДанныеКалендаря.ЗаполнитьЗначения(Выборка.ПроизводственныйКалендарь, "ПроизводственныйКалендарь"); + НаборЗаписей = РегистрыСведений.ДанныеПроизводственногоКалендаря.СоздатьНаборЗаписей(); + НаборЗаписей.Загрузить(ДанныеКалендаря); + НаборЗаписей.Отбор.ПроизводственныйКалендарь.Установить(Выборка.ПроизводственныйКалендарь); + НаборЗаписей.Отбор.Год.Установить(Выборка.Год); + Если ОбновлениеИнформационнойБазы.ЭтоВызовИзОбработчикаОбновления() Тогда + ОбновлениеИнформационнойБазы.ЗаписатьНаборЗаписей(НаборЗаписей); + Иначе + НаборЗаписей.Записать(Истина); + КонецЕсли; + // Добавляем в таблицу изменений. + НоваяСтрока = ИзмененияКалендарей.Добавить(); + НоваяСтрока.КодПроизводственногоКалендаря = Выборка.Код; + НоваяСтрока.Год = Выборка.Год; + КонецЦикла; + +КонецПроцедуры // Создает таблицу значений для описания изменений данных производственных календарей. // @@ -556,37 +682,6 @@ КонецФункции -// Функция выявляет последний день, за который заполнены данные -// указанного производственного календаря. -// -// Параметры: -// - ПроизводственныйКалендарь - тип СправочникСсылка.ПроизводственныеКалендари. -// -Функция ДатаОкончанияЗаполненияПроизводственногоКалендаря(ПроизводственныйКалендарь) Экспорт - - ТекстЗапроса = - "ВЫБРАТЬ - | МАКСИМУМ(ДанныеПроизводственногоКалендаря.Дата) КАК Дата - |ИЗ - | РегистрСведений.ДанныеПроизводственногоКалендаря КАК ДанныеПроизводственногоКалендаря - |ГДЕ - | ДанныеПроизводственногоКалендаря.ПроизводственныйКалендарь = &ПроизводственныйКалендарь - | - |ИМЕЮЩИЕ - | МАКСИМУМ(ДанныеПроизводственногоКалендаря.Дата) ЕСТЬ НЕ NULL "; - - Запрос = Новый Запрос(ТекстЗапроса); - Запрос.УстановитьПараметр("ПроизводственныйКалендарь", ПроизводственныйКалендарь); - - Выборка = Запрос.Выполнить().Выбрать(); - Если Выборка.Следующий() Тогда - Возврат Выборка.Дата; - КонецЕсли; - - Возврат Неопределено; - -КонецФункции - // Заполняет массив дат праздничных дней по производственному календарю // для конкретного календарного года. // diff --git a/SSL/src/Catalogs/ПрофилиГруппДоступа/ManagerModule.bsl b/SSL/src/Catalogs/ПрофилиГруппДоступа/ManagerModule.bsl index 0c7c7cff2..62058fa69 100644 --- a/SSL/src/Catalogs/ПрофилиГруппДоступа/ManagerModule.bsl +++ b/SSL/src/Catalogs/ПрофилиГруппДоступа/ManagerModule.bsl @@ -919,22 +919,22 @@ |ИЗ | Справочник.ПрофилиГруппДоступа КАК ПрофилиГруппДоступа |ГДЕ - | НЕ(НЕ ИСТИНА В - | (ВЫБРАТЬ ПЕРВЫЕ 1 - | ИСТИНА - | ИЗ - | Справочник.ПрофилиГруппДоступа.ВидыДоступа КАК ВидыДоступа - | ГДЕ - | ВидыДоступа.Ссылка = ПрофилиГруппДоступа.Ссылка - | И ТИПЗНАЧЕНИЯ(ВидыДоступа.ВидДоступа) = ТИП(ПланВидовХарактеристик.УдалитьВидыДоступа)) - | И НЕ ИСТИНА В - | (ВЫБРАТЬ ПЕРВЫЕ 1 - | ИСТИНА - | ИЗ - | Справочник.ПрофилиГруппДоступа.ЗначенияДоступа КАК ЗначенияДоступа - | ГДЕ - | ЗначенияДоступа.Ссылка = ПрофилиГруппДоступа.Ссылка - | И ТИПЗНАЧЕНИЯ(ЗначенияДоступа.ВидДоступа) = ТИП(ПланВидовХарактеристик.УдалитьВидыДоступа))) + | (ИСТИНА В + | (ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА + | ИЗ + | Справочник.ПрофилиГруппДоступа.ВидыДоступа КАК ВидыДоступа + | ГДЕ + | ВидыДоступа.Ссылка = ПрофилиГруппДоступа.Ссылка + | И ТИПЗНАЧЕНИЯ(ВидыДоступа.ВидДоступа) = ТИП(ПланВидовХарактеристик.УдалитьВидыДоступа)) + | ИЛИ ИСТИНА В + | (ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА + | ИЗ + | Справочник.ПрофилиГруппДоступа.ЗначенияДоступа КАК ЗначенияДоступа + | ГДЕ + | ЗначенияДоступа.Ссылка = ПрофилиГруппДоступа.Ссылка + | И ТИПЗНАЧЕНИЯ(ЗначенияДоступа.ВидДоступа) = ТИП(ПланВидовХарактеристик.УдалитьВидыДоступа))) | |ОБЪЕДИНИТЬ ВСЕ | @@ -943,22 +943,22 @@ |ИЗ | Справочник.ГруппыДоступа КАК ГруппыДоступа |ГДЕ - | НЕ(НЕ ИСТИНА В - | (ВЫБРАТЬ ПЕРВЫЕ 1 - | ИСТИНА - | ИЗ - | Справочник.ГруппыДоступа.ВидыДоступа КАК ВидыДоступа - | ГДЕ - | ВидыДоступа.Ссылка = ГруппыДоступа.Ссылка - | И ТИПЗНАЧЕНИЯ(ВидыДоступа.ВидДоступа) = ТИП(ПланВидовХарактеристик.УдалитьВидыДоступа)) - | И НЕ ИСТИНА В - | (ВЫБРАТЬ ПЕРВЫЕ 1 - | ИСТИНА - | ИЗ - | Справочник.ГруппыДоступа.ЗначенияДоступа КАК ЗначенияДоступа - | ГДЕ - | ЗначенияДоступа.Ссылка = ГруппыДоступа.Ссылка - | И ТИПЗНАЧЕНИЯ(ЗначенияДоступа.ВидДоступа) = ТИП(ПланВидовХарактеристик.УдалитьВидыДоступа)))"; + | (ИСТИНА В + | (ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА + | ИЗ + | Справочник.ГруппыДоступа.ВидыДоступа КАК ВидыДоступа + | ГДЕ + | ВидыДоступа.Ссылка = ГруппыДоступа.Ссылка + | И ТИПЗНАЧЕНИЯ(ВидыДоступа.ВидДоступа) = ТИП(ПланВидовХарактеристик.УдалитьВидыДоступа)) + | ИЛИ ИСТИНА В + | (ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА + | ИЗ + | Справочник.ГруппыДоступа.ЗначенияДоступа КАК ЗначенияДоступа + | ГДЕ + | ЗначенияДоступа.Ссылка = ГруппыДоступа.Ссылка + | И ТИПЗНАЧЕНИЯ(ЗначенияДоступа.ВидДоступа) = ТИП(ПланВидовХарактеристик.УдалитьВидыДоступа)))"; Выборка = Запрос.Выполнить().Выбрать(); @@ -1430,9 +1430,13 @@ КонецЕсли; Если ПрофильИзменен Тогда - Если Не ОбновлениеИнформационнойБазы.ВыполняетсяОбновлениеИнформационнойБазы() Тогда + + Если Не ОбновлениеИнформационнойБазы.ВыполняетсяОбновлениеИнформационнойБазы() + И Не ОбновлениеИнформационнойБазы.ЭтоВызовИзОбработчикаОбновления() Тогда + ЗаблокироватьДанныеДляРедактирования(ПрофильОбъект.Ссылка, ПрофильОбъект.ВерсияДанных); КонецЕсли; + ПрофильОбъект.Наименование = СвойстваПрофиля.Наименование; ПрофильОбъект.Роли.Очистить(); @@ -1479,9 +1483,12 @@ ОбновлениеИнформационнойБазы.ЗаписатьОбъект(ПрофильОбъект); - Если Не ОбновлениеИнформационнойБазы.ВыполняетсяОбновлениеИнформационнойБазы() Тогда + Если Не ОбновлениеИнформационнойБазы.ВыполняетсяОбновлениеИнформационнойБазы() + И Не ОбновлениеИнформационнойБазы.ЭтоВызовИзОбработчикаОбновления() Тогда + РазблокироватьДанныеДляРедактирования(ПрофильОбъект.Ссылка); КонецЕсли; + КонецЕсли; Возврат ПрофильИзменен; diff --git a/SSL/src/Catalogs/ПрофилиГруппДоступа/ObjectModule.bsl b/SSL/src/Catalogs/ПрофилиГруппДоступа/ObjectModule.bsl index 49d1325bb..941cb15c2 100644 --- a/SSL/src/Catalogs/ПрофилиГруппДоступа/ObjectModule.bsl +++ b/SSL/src/Catalogs/ПрофилиГруппДоступа/ObjectModule.bsl @@ -25,24 +25,32 @@ СтарыеЗначения = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Ссылка, "Ссылка, ПометкаУдаления, Роли, Назначение, ВидыДоступа, ЗначенияДоступа"); - Если Ссылка <> Справочники.ПрофилиГруппДоступа.Администратор Тогда - // Проверка ролей. - НомерСтроки = Роли.Количество() - 1; - РолиАдминистратора = Новый Массив; - РолиАдминистратора.Добавить("Роль.ПолныеПрава"); - РолиАдминистратора.Добавить("Роль.АдминистраторСистемы"); - ИдентификаторыРолей = ОбщегоНазначения.ИдентификаторыОбъектовМетаданных(РолиАдминистратора); - Пока НомерСтроки >= 0 Цикл - Если ВРег(Роли[НомерСтроки].Роль) = ВРег(ИдентификаторыРолей["Роль.ПолныеПрава"]) - ИЛИ ВРег(Роли[НомерСтроки].Роль) = ВРег(ИдентификаторыРолей["Роль.АдминистраторСистемы"]) Тогда - - Роли.Удалить(НомерСтроки); - КонецЕсли; - НомерСтроки = НомерСтроки - 1; - КонецЦикла; - КонецЕсли; + // Проверка ролей. + РолиАдминистратора = Новый Массив; + РолиАдминистратора.Добавить("Роль.ПолныеПрава"); + РолиАдминистратора.Добавить("Роль.АдминистраторСистемы"); + ИдентификаторыРолей = ОбщегоНазначения.ИдентификаторыОбъектовМетаданных(РолиАдминистратора); + ОбработанныеРоли = Новый Соответствие; + Индекс = Роли.Количество(); + Пока Индекс > 0 Цикл + Индекс = Индекс - 1; + Роль = Роли[Индекс].Роль; + Если ОбработанныеРоли.Получить(Роль) <> Неопределено Тогда + Роли.Удалить(Индекс); + Продолжить; + КонецЕсли; + ОбработанныеРоли.Вставить(Роль, Истина); + Если Ссылка = Справочники.ПрофилиГруппДоступа.Администратор Тогда + Продолжить; + КонецЕсли; + Если Роль = ИдентификаторыРолей["Роль.ПолныеПрава"] + Или Роль = ИдентификаторыРолей["Роль.АдминистраторСистемы"] Тогда + + Роли.Удалить(Индекс); + КонецЕсли; + КонецЦикла; - Если НЕ ДополнительныеСвойства.Свойство("НеОбновлятьРеквизитПоставляемыйПрофильИзменен") Тогда + Если Не ДополнительныеСвойства.Свойство("НеОбновлятьРеквизитПоставляемыйПрофильИзменен") Тогда ПоставляемыйПрофильИзменен = Справочники.ПрофилиГруппДоступа.ПоставляемыйПрофильИзменен(ЭтотОбъект); КонецЕсли; diff --git a/SSL/src/Catalogs/ПрофилиКлючевыхОпераций/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ПрофилиКлючевыхОпераций/Forms/ФормаЭлемента/Module.bsl index 0e2a73626..aa511a38f 100644 --- a/SSL/src/Catalogs/ПрофилиКлючевыхОпераций/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ПрофилиКлючевыхОпераций/Forms/ФормаЭлемента/Module.bsl @@ -47,6 +47,7 @@ ДвоичныеДанные = Новый ДвоичныеДанные(ВыбранныеФайлы[0]); АдресХранилища = ПоместитьВоВременноеХранилище(ДвоичныеДанные, ЭтотОбъект.УникальныйИдентификатор); ЗагрузитьПрофильКлючевыхОперацийНаСервере(АдресХранилища); + Модифицированность = Истина; КонецЕсли; КонецПроцедуры @@ -108,14 +109,15 @@ КлючевыеОперации = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML); Колонки = СтрРазделить(КлючевыеОперации["Columns"], ",",Ложь); - - Если ТипЗнч(КлючевыеОперации["Item"]) = Тип("ОбъектXDTO") Тогда - ЗагрузитьОбъектXDTO(КлючевыеОперации["Item"], Колонки); - Иначе - Для Каждого ТекЭлемент Из КлючевыеОперации["Item"] Цикл - ЗагрузитьОбъектXDTO(ТекЭлемент, Колонки); - КонецЦикла; - КонецЕсли; + Если КлючевыеОперации.Свойства().Получить("Item") <> Неопределено Тогда + Если ТипЗнч(КлючевыеОперации["Item"]) = Тип("ОбъектXDTO") Тогда + ЗагрузитьОбъектXDTO(КлючевыеОперации["Item"], Колонки); + Иначе + Для Каждого ТекЭлемент Из КлючевыеОперации["Item"] Цикл + ЗагрузитьОбъектXDTO(ТекЭлемент, Колонки); + КонецЦикла; + КонецЕсли; + КонецЕсли; ЧтениеXML.Закрыть(); УдалитьФайлы(ИмяВременногоФайла); diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПолучателиРассылки/Form.form b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПолучателиРассылки/Form.form index 9b445e722..7eac01918 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПолучателиРассылки/Form.form +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПолучателиРассылки/Form.form @@ -285,6 +285,84 @@ UserCmds Auto + + ПолучателиГруппаПометки + 106 + + ПолучателиУстановитьПометки + 108 + true + true + + true + + + ПолучателиУстановитьПометкиРасширеннаяПодсказка + 109 + Label + true + true + + Left + + + Form.Command.УстановитьПометки + Normal + Auto + true + true + UserCmds + Auto + + + ПолучателиСнятьПометки + 110 + true + true + + true + + + ПолучателиСнятьПометкиРасширеннаяПодсказка + 111 + Label + true + true + + Left + + + Form.Command.СнятьПометки + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Получатели группа пометки</value> + + + ПолучателиГруппаПометкиРасширеннаяПодсказка + 107 + Label + true + true + + Left + + + + Compact + + ПолучателиДобавить 97 @@ -745,10 +823,10 @@ - ИОМД + ИдентификаторОбъектаМетаданных <key>ru</key> - <value>ИОМД</value> + <value>Идентификатор объекта метаданных</value> 4 @@ -845,6 +923,56 @@ DontUse Auto + + УстановитьПометки + + <key>ru</key> + <value>Установить пометки</value> + + 4 + + ru + Установить пометки + + + true + + + StdPicture.CheckAll + + + + УстановитьПометки + + + DontUse + Auto + + + СнятьПометки + + <key>ru</key> + <value>Снять пометки</value> + + 5 + + ru + Снять пометки + + + true + + + StdPicture.UncheckAll + + + + СнятьПометки + + + DontUse + Auto + ТипПолучателейРассылки diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПолучателиРассылки/Module.bsl b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПолучателиРассылки/Module.bsl index d58e0a53b..aca4bb1cb 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПолучателиРассылки/Module.bsl +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПолучателиРассылки/Module.bsl @@ -117,6 +117,24 @@ МодульЗагрузкаДанныхИзФайлаКлиент.ПоказатьФормуЗаполненияСсылок(ПараметрыПоиска, Обработчик); КонецПроцедуры +&НаКлиенте +Процедура УстановитьПометки(Команда) + + Для каждого Получатель Из Получатели Цикл + Получатель.Исключен = Истина; + КонецЦикла; + +КонецПроцедуры + +&НаКлиенте +Процедура СнятьПометки(Команда) + + Для каждого Получатель Из Получатели Цикл + Получатель.Исключен = Ложь; + КонецЦикла; + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -231,7 +249,7 @@ ПараметрыПолучателей = Новый Структура(НаборПараметров); ЗаполнитьЗначенияСвойств(ПараметрыПолучателей, ЭтотОбъект); ПараметрыПолучателей.Личная = Ложь; - ПараметрыПолучателей.ТипПолучателейРассылки = ИОМД; + ПараметрыПолучателей.ТипПолучателейРассылки = ИдентификаторОбъектаМетаданных; ПараметрыПолучателей.Получатели = Получатели; РезультатВыполнения = РассылкаОтчетовВызовСервера.СформироватьСписокПолучателейРассылки(ПараметрыПолучателей); @@ -294,7 +312,7 @@ Найденные = ТаблицаТиповПолучателей.НайтиСтроки(Новый Структура("ТипПолучателей", ТипПолучателейРассылки)); Если Найденные.Количество() = 1 Тогда СтрокаПолучатель = Найденные[0]; - ИОМД = СтрокаПолучатель.ИОМД; + ИдентификаторОбъектаМетаданных = СтрокаПолучатель.ИдентификаторОбъектаМетаданных; ПутьФормыВыбора = СтрокаПолучатель.ПутьФормыВыбора; ГруппаКонтактнойИнформацииТипаПолучателей = СтрокаПолучатель.ГруппаКИ; // ГруппаКИ используется для поля "ВидПочтовогоАдресаПолучателей" в "СвязиПараметровВыбора.Отбор". diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаСписка/Module.bsl index 8eddcaa22..b26876ca2 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаСписка/Module.bsl @@ -12,7 +12,7 @@ Элементы.Список.Отображение = ОтображениеТаблицы[Параметры.Отображение]; КонецЕсли; - ТекстОшибкиПриОткрытии = РассылкаОтчетовПовтИсп.ТекстОшибкиПроверкиПраваДобавления(); + ТекстОшибкиПриОткрытии = РассылкаОтчетов.ТекстОшибкиПроверкиПраваДобавления(); Если ЗначениеЗаполнено(ТекстОшибкиПриОткрытии) Тогда ВызватьИсключение ТекстОшибкиПриОткрытии; КонецЕсли; @@ -50,7 +50,7 @@ ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ФОРМАВЫБРАТЬ", "Видимость", Ложь); КонецЕсли; - Если Не Пользователи.РолиДоступны("ДобавлениеИзменениеРассылокОтчетов") Тогда + Если Не ПравоДоступа("Изменение", Метаданные.Справочники.РассылкиОтчетов) Тогда // Режим показа только личных рассылок - скрываются группы и лишние колонки. Элементы.Список.Отображение = ОтображениеТаблицы.Список; ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(Список, "ЭтоГруппа", Ложь, , , Истина, @@ -168,8 +168,8 @@ ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(Список, "Автор", ПараметрыОтбора["Автор"],,, Не ПараметрыОтбора["Автор"].Пустая()); - ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(Список, "СОшибками", ПараметрыОтбора["СОшибками"] = "Невыполненные",,, - ПараметрыОтбора["СОшибками"] <> "Все"); + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(Список, "СОшибками", ПараметрыОтбора["СОшибками"] = "Невыполненные",,, + ПараметрыОтбора["СОшибками"] <> "Все" И ЗначениеЗаполнено(ПараметрыОтбора["СОшибками"])); ОбщегоНазначенияКлиентСервер.УстановитьПараметрДинамическогоСписка(Список, "ОтчетОтбор", ПараметрыОтбора["Отчет"], ЗначениеЗаполнено(ПараметрыОтбора["Отчет"]) И Не ПараметрыОтбора["Отчет"].Пустая()); diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Form.form index 44b084839..14ca73040 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Form.form @@ -4264,6 +4264,10 @@ Left true + + TextEditEnd + ДругойСпособДоставкиОкончаниеВводаТекста + 13 true true @@ -4273,7 +4277,7 @@ false false true - true + OnActivate true true @@ -9061,10 +9065,10 @@ true - ИОМД + ИдентификаторОбъектаМетаданных <key>ru</key> - <value>ИОМД</value> + <value>Идентификатор объекта метаданных</value> 1 diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Module.bsl index 7d45613e9..f0ebad9c7 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Module.bsl @@ -32,7 +32,7 @@ Возврат; КонецЕсли; - ТекстОшибкиПриОткрытии = РассылкаОтчетовПовтИсп.ТекстОшибкиПроверкиПраваДобавления(); + ТекстОшибкиПриОткрытии = РассылкаОтчетов.ТекстОшибкиПроверкиПраваДобавления(); Если ЗначениеЗаполнено(ТекстОшибкиПриОткрытии) Тогда Возврат; КонецЕсли; @@ -163,7 +163,7 @@ Элементы.Автор.Доступность = Пользователи.ЭтоПолноправныйПользователь(); // Список форматов с пометками для форматов по умолчанию. - СписокФорматовПоУмолчанию = РассылкаОтчетовПовтИсп.СписокФорматов(); + СписокФорматовПоУмолчанию = РассылкаОтчетов.СписокФорматов(); // Представление списка форматов по умолчанию. СписокФорматовПоУмолчаниюПредставление = ""; @@ -482,7 +482,7 @@ Если ЗначениеЗаполнено(ТипПолучателейРассылки) Тогда Найденные = ТаблицаТиповПолучателей.НайтиСтроки(Новый Структура("ТипПолучателей", ТипПолучателейРассылки)); Если Найденные.Количество() = 1 Тогда - ТекущийОбъект.ТипПолучателейРассылки = Найденные[0].ИОМД; + ТекущийОбъект.ТипПолучателейРассылки = Найденные[0].ИдентификаторОбъектаМетаданных; Иначе ТекущийОбъект.ТипПолучателейРассылки = Справочники.ИдентификаторыОбъектовМетаданных.ПустаяСсылка(); КонецЕсли; @@ -665,7 +665,7 @@ Найденные = ТаблицаТиповПолучателей.НайтиСтроки(Новый Структура("ТипПолучателей", ТипПолучателейРассылки)); Если Найденные.Количество() = 1 Тогда СтрокаПолучатель = Найденные[0]; - Объект.ТипПолучателейРассылки = СтрокаПолучатель.ИОМД; + Объект.ТипПолучателейРассылки = СтрокаПолучатель.ИдентификаторОбъектаМетаданных; Объект.ВидПочтовогоАдресаПолучателей = СтрокаПолучатель.ОсновнойВидКИ; КонецЕсли; КонецПроцедуры @@ -765,6 +765,11 @@ ВидимостьДоступностьКорректность(ЭтотОбъект, "ДругойСпособДоставки"); КонецПроцедуры +&НаКлиенте +Процедура ДругойСпособДоставкиОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, СтандартнаяОбработка) + СтандартнаяОбработка = НЕ ПустаяСтрока(Текст); +КонецПроцедуры + &НаКлиенте Процедура ПубликоватьПриИзменении(Элемент) ВычислитьФлажкиДополнительныхСпособовДоставки(); @@ -896,35 +901,23 @@ Если СтруктураВыбора.СОшибками.Количество > 0 Тогда Если СтруктураВыбора.Выбрано.Количество = 1 Тогда - ТекстСообщения = НСтр("ru = 'Не удалось добавить отчет из-за ошибок'"); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось добавить отчет по причине: + |%1'"), СтруктураВыбора.СОшибками.Текст); ИначеЕсли СтруктураВыбора.Успешно.Количество = 0 Тогда - ТекстСообщения = НСтр("ru = 'Не удалось добавить отчеты из-за ошибок'"); - ИначеЕсли СтруктураВыбора.Выбрано.Количество >= 6 Тогда ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Добавлено отчетов: %1 из %2, - |Не добавлено из-за ошибок: %3'"), - Формат(СтруктураВыбора.Успешно.Количество, "ЧН=0; ЧГ="), - Формат(СтруктураВыбора.Выбрано.Количество, "ЧН=0; ЧГ="), - Формат(СтруктураВыбора.СОшибками.Количество, "ЧН=0; ЧГ=")); + НСтр("ru = 'Не удалось добавить отчеты по причине: + |%1'"), СтруктураВыбора.СОшибками.Текст); Иначе - Разделитель = ", "; - ПредставлениеОтчетовУспешно = СтрЗаменить(Разделитель + СтруктураВыбора.Успешно.ПредставлениеОтчетов , Разделитель, Символы.ПС + " - "); - ПредставлениеОтчетовСОшибками = СтрЗаменить(Разделитель + СтруктураВыбора.СОшибками.ПредставлениеОтчетов, Разделитель, Символы.ПС + " - "); ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Успешно добавлены отчеты: - |%1 - | - |Следующие отчеты не удалось добавить из-за ошибок: - |%2'"), - ПредставлениеОтчетовУспешно, - ПредставлениеОтчетовСОшибками); + НСтр("ru = 'Добавлено отчетов: %1 из %2 + |Подробности: + |%3'"), + Формат(СтруктураВыбора.Успешно.Количество, "ЧН=0; ЧГ="), + Формат(СтруктураВыбора.Выбрано.Количество, "ЧН=0; ЧГ="), + СтруктураВыбора.СОшибками.Текст); КонецЕсли; - - ПараметрыПредупреждения = Новый Структура("Заголовок, Текст, Подробно"); - ПараметрыПредупреждения.Заголовок = НСтр("ru = 'Ошибки добавления отчетов в рассылку'"); - ПараметрыПредупреждения.Текст = ТекстСообщения; - ПараметрыПредупреждения.Подробно = СтруктураВыбора.СОшибками.Текст; - СтандартныеПодсистемыКлиент.ВывестиПредупреждение(ЭтотОбъект, ПараметрыПредупреждения); + СтандартныеПодсистемыКлиент.ПоказатьВопросПользователю(Неопределено, ТекстСообщения, РежимДиалогаВопрос.ОК); Иначе @@ -1015,7 +1008,6 @@ КонецЕсли; ИдентификаторКД = Элементы.ПользовательскиеНастройки.ТекущаяСтрока; ТолькоПросмотрЗначения = Ложь; - ОтчетыКлиент.ПриАктивизацииСтрокиНастройки(Отчет, КомпоновщикНастроекКД, ИдентификаторКД, ТолькоПросмотрЗначения); РассылкаОтчетовКлиентПереопределяемый.ПриАктивизацииСтрокиНастройки(Отчет, КомпоновщикНастроекКД, ИдентификаторКД, ТолькоПросмотрЗначения); Если Элементы.ПользовательскиеНастройкиЗначение.ТолькоПросмотр <> ТолькоПросмотрЗначения Тогда Элементы.ПользовательскиеНастройкиЗначение.ТолькоПросмотр = ТолькоПросмотрЗначения; @@ -1037,7 +1029,6 @@ Возврат; КонецЕсли; ИдентификаторКД = Элементы.ПользовательскиеНастройки.ТекущаяСтрока; - ОтчетыКлиент.ПриОчисткеНастройки(Отчет, КомпоновщикНастроекКД, ИдентификаторКД, СтандартнаяОбработка); РассылкаОтчетовКлиентПереопределяемый.ПриОчисткеНастройки(Отчет, КомпоновщикНастроекКД, ИдентификаторКД, СтандартнаяОбработка); КонецПроцедуры @@ -1335,13 +1326,13 @@ Возврат; КонецЕсли; - НайденныеИОМД = ТаблицаТиповПолучателей.НайтиСтроки(Новый Структура("ТипПолучателей", ТипПолучателейРассылки)); - Если НайденныеИОМД.Количество() <> 1 Тогда + НайденныеИдентификаторыОбъектовМетаданных = ТаблицаТиповПолучателей.НайтиСтроки(Новый Структура("ТипПолучателей", ТипПолучателейРассылки)); + Если НайденныеИдентификаторыОбъектовМетаданных.Количество() <> 1 Тогда ПоказатьПредупреждение(, НСтр("ru = 'Тип получателей не найден'")); Возврат; КонецЕсли; - МассивТипов = НайденныеИОМД[0].ОсновнойТип.Типы(); + МассивТипов = НайденныеИдентификаторыОбъектовМетаданных[0].ОсновнойТип.Типы(); Если МассивТипов.Количество() <> 1 Тогда ПоказатьПредупреждение(, НСтр("ru = 'Тип получателей не найден'")); Возврат; @@ -1835,7 +1826,6 @@ КонецЕсли; ИдентификаторКД = Элементы.ПользовательскиеНастройки.ТекущаяСтрока; Обработчик = Новый ОписаниеОповещения("ЗавершениеВыбораПользовательскойНастройки", ЭтотОбъект); - ОтчетыКлиент.ПриНачалеВыбораНастройки(Отчет, КомпоновщикНастроекКД, ИдентификаторКД, СтандартнаяОбработка, Обработчик); РассылкаОтчетовКлиентПереопределяемый.ПриНачалеВыбораНастройки(Отчет, КомпоновщикНастроекКД, ИдентификаторКД, СтандартнаяОбработка, Обработчик); КонецПроцедуры @@ -1984,7 +1974,9 @@ ПараметрыДоставки.Вставить("ДобавлятьСсылки", ""); РезультатВыполнения = ПроверитьСпособДоставки(Объект.Ссылка, ПараметрыДоставки); - СтандартныеПодсистемыКлиент.ВывестиПредупреждение(ЭтотОбъект, РезультатВыполнения); + СтандартныеПодсистемыКлиент.ПоказатьВопросПользователю(Неопределено, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1 + |%2'"), РезультатВыполнения.Текст, РезультатВыполнения.Подробно), РежимДиалогаВопрос.ОК); КонецПроцедуры @@ -2697,7 +2689,7 @@ ТипыКонтактнойИнформации = Новый Массив; ТипыКонтактнойИнформации.Добавить(Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты); Попытка - ПочтовыеАдреса = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияОбъектов(Получатели, ТипыКонтактнойИнформации); + ПочтовыеАдреса = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияОбъектов(Получатели, ТипыКонтактнойИнформации,, ТекущаяДатаСеанса()); Исключение Возврат СписокЗначений; КонецПопытки; @@ -2964,8 +2956,7 @@ УдалитьФайлы(Вложение.Значение); КонецЦикла; - РезультатВыполнения = Новый Структура("Текст, Подробно"); - + РезультатВыполнения = Новый Структура("Текст, Подробно", "", ""); Если Выполнена Тогда РезультатВыполнения.Текст = НСтр("ru = 'Тест способа доставки успешно пройден.'"); Иначе @@ -3054,9 +3045,9 @@ // Структура кэша. Кэш = Новый Структура; - Кэш.Вставить("ПустоеЗначениеОтчета", РассылкаОтчетовПовтИсп.ПустоеЗначениеОтчета()); + Кэш.Вставить("ПустоеЗначениеОтчета", РассылкаОтчетов.ПустоеЗначениеОтчета()); Кэш.Вставить("ГруппаЛичныхРассылок", Справочники.РассылкиОтчетов.ЛичныеРассылки); - Кэш.Вставить("ЗаголовокСистемы", РассылкаОтчетовПовтИсп.ИмяЭтойИнформационнойБазы()); + Кэш.Вставить("ЗаголовокСистемы", РассылкаОтчетов.ИмяЭтойИнформационнойБазы()); Кэш.Вставить("Соответствия", Новый ФиксированнаяСтруктура("ДниНедели, Месяцы", ДниНедели, Месяцы)); Кэш.Вставить("Шаблоны", Шаблоны); Кэш.Вставить("ИсключаемыеОтчеты", РассылкаОтчетовПовтИсп.ИсключаемыеОтчеты()); @@ -3130,7 +3121,7 @@ // Заполнение списка выбора типов получателей. Для Каждого СтрокаПолучатель Из ТаблицаТиповПолучателей Цикл Элементы.ТипПолучателейРассылки.СписокВыбора.Добавить(СтрокаПолучатель.ТипПолучателей, СтрокаПолучатель.Представление); - Если СтрокаПолучатель.ИОМД = Объект.ТипПолучателейРассылки Тогда + Если СтрокаПолучатель.ИдентификаторОбъектаМетаданных = Объект.ТипПолучателейРассылки Тогда ТипПолучателейРассылки = СтрокаПолучатель.ТипПолучателей; Если Объект.ВидПочтовогоАдресаПолучателей.Пустая() И ЗначениеЗаполнено(СтрокаПолучатель.ОсновнойВидКИ) Тогда Объект.ВидПочтовогоАдресаПолучателей = СтрокаПолучатель.ОсновнойВидКИ; diff --git a/SSL/src/Catalogs/РассылкиОтчетов/ObjectModule.bsl b/SSL/src/Catalogs/РассылкиОтчетов/ObjectModule.bsl index 76e3cb1be..61f2084f8 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/ObjectModule.bsl +++ b/SSL/src/Catalogs/РассылкиОтчетов/ObjectModule.bsl @@ -14,15 +14,21 @@ // Создание регламентного задания - пустышки (для хранения его идентификатора в данных). УстановитьПривилегированныйРежим(Истина); Задание = РегламентныеЗадания.НайтиПоУникальномуИдентификатору(РегламентноеЗадание); + Если Задание = Неопределено Тогда + // Из-за выполнения индивидуального регламентного задания непосредственно в необходимой области модели сервиса. + // Создание регламентного задания осуществляется платформенным способом, + // а не через программный интерфейс общего модуля РегламентныеЗадания. + Задание = РегламентныеЗадания.СоздатьРегламентноеЗадание(Метаданные.РегламентныеЗадания.РассылкаОтчетов); Задание.ИмяПользователя = РассылкаОтчетов.ИмяПользователяИБ(Автор); Задание.Использование = Ложь; Задание.Наименование = ПредставлениеЗаданияПоРассылке(Наименование); Задание.Записать(); - РегламентноеЗадание = Задание.УникальныйИдентификатор; + РегламентноеЗадание = Задание.УникальныйИдентификатор; КонецЕсли; + УстановитьПривилегированныйРежим(Ложь); // Соответствие флага подготовленности рассылки и задания пометке удаления рассылки. diff --git a/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаВыбора/Form.form b/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаВыбора/Form.form index 7b70199ee..71243e0d2 100644 --- a/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаВыбора/Form.form +++ b/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаВыбора/Form.form @@ -363,35 +363,35 @@
true
ВЫБРАТЬ - СправочникРолиИсполнителей.Ссылка, - СправочникРолиИсполнителей.ПометкаУдаления, - СправочникРолиИсполнителей.Предопределенный, - СправочникРолиИсполнителей.Код, - СправочникРолиИсполнителей.Наименование, - СправочникРолиИсполнителей.ИспользуетсяБезОбъектовАдресации, - СправочникРолиИсполнителей.ИспользуетсяСОбъектамиАдресации, - СправочникРолиИсполнителей.ТипыОсновногоОбъектаАдресации, - СправочникРолиИсполнителей.ТипыДополнительногоОбъектаАдресации, - СправочникРолиИсполнителей.Комментарий, + СправочникРолиИсполнителейПереопределяемый.Ссылка, + СправочникРолиИсполнителейПереопределяемый.ПометкаУдаления, + СправочникРолиИсполнителейПереопределяемый.Предопределенный, + СправочникРолиИсполнителейПереопределяемый.Код, + СправочникРолиИсполнителейПереопределяемый.Наименование, + СправочникРолиИсполнителейПереопределяемый.ИспользуетсяБезОбъектовАдресации, + СправочникРолиИсполнителейПереопределяемый.ИспользуетсяСОбъектамиАдресации, + СправочникРолиИсполнителейПереопределяемый.ТипыОсновногоОбъектаАдресации, + СправочникРолиИсполнителейПереопределяемый.ТипыДополнительногоОбъектаАдресации, + СправочникРолиИсполнителейПереопределяемый.Комментарий, ВЫБОР - КОГДА СправочникРолиИсполнителей.ИспользуетсяСОбъектамиАдресации + КОГДА СправочникРолиИсполнителейПереопределяемый.ИспользуетсяСОбъектамиАдресации ТОГДА ИСТИНА - КОГДА СправочникРолиИсполнителей.Ссылка В + КОГДА СправочникРолиИсполнителейПереопределяемый.Ссылка В (ВЫБРАТЬ ПЕРВЫЕ 1 РегистрСведений.ИсполнителиЗадач.РольИсполнителя.Ссылка ИЗ РегистрСведений.ИсполнителиЗадач ГДЕ - РегистрСведений.ИсполнителиЗадач.РольИсполнителя = СправочникРолиИсполнителей.Ссылка) + РегистрСведений.ИсполнителиЗадач.РольИсполнителя = СправочникРолиИсполнителейПереопределяемый.Ссылка) ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ КОНЕЦ КАК ЕстьИсполнители, - СправочникРолиИсполнителей.ВнешняяРоль, - СправочникРолиИсполнителей.КраткоеПредставление + СправочникРолиИсполнителейПереопределяемый.ВнешняяРоль, + СправочникРолиИсполнителейПереопределяемый.КраткоеПредставление ИЗ - Справочник.РолиИсполнителей.Назначение КАК РолиИсполнителейНазначение - ЛЕВОЕ СОЕДИНЕНИЕ Справочник.РолиИсполнителей КАК СправочникРолиИсполнителей - ПО РолиИсполнителейНазначение.Ссылка = СправочникРолиИсполнителей.Ссылка + Справочник.РолиИсполнителей.Назначение КАК РолиИсполнителейНазначениеПереопределяемый + ЛЕВОЕ СОЕДИНЕНИЕ Справочник.РолиИсполнителей КАК СправочникРолиИсполнителейПереопределяемый + ПО РолиИсполнителейНазначениеПереопределяемый.Ссылка = СправочникРолиИсполнителейПереопределяемый.Ссылка Catalog.РолиИсполнителей true true diff --git a/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаВыбора/Module.bsl b/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаВыбора/Module.bsl index cfc4ce69d..ed20ecc75 100644 --- a/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаВыбора/Module.bsl +++ b/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаВыбора/Module.bsl @@ -10,32 +10,64 @@ КонецЕсли; ТолькоПростыеРоли = Ложь; + Если Параметры.Свойство("ТолькоПростыеРоли", ТолькоПростыеРоли) И ТолькоПростыеРоли = Истина Тогда ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( Список, "ВнешняяРоль", Истина, , , Истина); - КонецЕсли; - - ОтборГде = " ГДЕ РолиИсполнителейНазначение.ТипПользователей = ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка)"; + КонецЕсли; + ЭтоВнешнийПользователь = ПользователиКлиентСервер.ЭтоСеансВнешнегоПользователя(); + Если ЭтоВнешнийПользователь Тогда + Если Элементы.КоманднаяПанель.ПодчиненныеЭлементы.Найти("ФормаИзменить") <> Неопределено Тогда Элементы.КоманднаяПанель.ПодчиненныеЭлементы.ФормаИзменить.Видимость = Ложь; КонецЕсли; - ТекущийВнешнийПользователь = ПользователиКлиентСервер.ТекущийВнешнийПользователь(); - Имя = ТекущийВнешнийПользователь.ОбъектАвторизации.Метаданные().Имя; - ОтборГде = " ГДЕ РолиИсполнителейНазначение.ТипПользователей = ЗНАЧЕНИЕ(Справочник." + Имя + ".ПустаяСсылка)"; + СтрокаОтбораВТекстеЗапроса = ОпределитьОтборДляВнешнегоПользователя(); + + Иначе + + СтрокаОтбораВТекстеЗапроса = " ГДЕ РолиИсполнителейНазначениеПереопределяемый.ТипПользователей = ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка)"; + КонецЕсли; - Список.ТекстЗапроса = Список.ТекстЗапроса + ОтборГде; + + СвойстваСписка = ОбщегоНазначения.СтруктураСвойствДинамическогоСписка(); + СвойстваСписка.ОсновнаяТаблица = "Справочник.РолиИсполнителей"; + СвойстваСписка.ДинамическоеСчитываниеДанных = Истина; + СвойстваСписка.ТекстЗапроса = Список.ТекстЗапроса + СтрокаОтбораВТекстеЗапроса; + ОбщегоНазначения.УстановитьСвойстваДинамическогоСписка(Элементы.Список, СвойстваСписка); КонецПроцедуры +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы + &НаКлиенте Процедура СписокПередНачаломИзменения(Элемент, Отказ) + Если ЭтоВнешнийПользователь Тогда - Отказ =Истина; + Отказ = Истина; КонецЕсли; + КонецПроцедуры +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Функция ОпределитьОтборДляВнешнегоПользователя() + + ТекущийВнешнийПользователь = ПользователиКлиентСервер.ТекущийВнешнийПользователь(); + + СтрокаОтбораВТекстеЗапроса = СтрЗаменить(" ГДЕ РолиИсполнителейНазначениеПереопределяемый.ТипПользователей = ЗНАЧЕНИЕ(Справочник.%Имя%.ПустаяСсылка)", + "%Имя%", ТекущийВнешнийПользователь.ОбъектАвторизации.Метаданные().Имя); + + Возврат СтрокаОтбораВТекстеЗапроса; + +КонецФункции + &НаСервере Процедура УстановитьУсловноеОформление() @@ -59,5 +91,4 @@ КонецПроцедуры - -#КонецОбласти +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаСписка/Form.form index 9f6c003d7..d6b77f8f6 100644 --- a/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаСписка/Form.form @@ -566,37 +566,37 @@
true
ВЫБРАТЬ - СправочникРолиИсполнителей.Ссылка, - СправочникРолиИсполнителей.ПометкаУдаления, - СправочникРолиИсполнителей.Предопределенный, - СправочникРолиИсполнителей.Код, - СправочникРолиИсполнителей.Наименование, - СправочникРолиИсполнителей.ИспользуетсяБезОбъектовАдресации, - СправочникРолиИсполнителей.ИспользуетсяСОбъектамиАдресации, - СправочникРолиИсполнителей.ТипыОсновногоОбъектаАдресации, - СправочникРолиИсполнителей.ТипыДополнительногоОбъектаАдресации, - СправочникРолиИсполнителей.Комментарий, + СправочникРолиИсполнителейПереопределяемый.Ссылка, + СправочникРолиИсполнителейПереопределяемый.ПометкаУдаления, + СправочникРолиИсполнителейПереопределяемый.Предопределенный, + СправочникРолиИсполнителейПереопределяемый.Код, + СправочникРолиИсполнителейПереопределяемый.Наименование, + СправочникРолиИсполнителейПереопределяемый.ИспользуетсяБезОбъектовАдресации, + СправочникРолиИсполнителейПереопределяемый.ИспользуетсяСОбъектамиАдресации, + СправочникРолиИсполнителейПереопределяемый.ТипыОсновногоОбъектаАдресации, + СправочникРолиИсполнителейПереопределяемый.ТипыДополнительногоОбъектаАдресации, + СправочникРолиИсполнителейПереопределяемый.Комментарий, ВЫБОР - КОГДА СправочникРолиИсполнителей.ИспользуетсяСОбъектамиАдресации + КОГДА СправочникРолиИсполнителейПереопределяемый.ИспользуетсяСОбъектамиАдресации ТОГДА ИСТИНА - КОГДА СправочникРолиИсполнителей.Ссылка В + КОГДА СправочникРолиИсполнителейПереопределяемый.Ссылка В (ВЫБРАТЬ ПЕРВЫЕ 1 РегистрСведений.ИсполнителиЗадач.РольИсполнителя.Ссылка ИЗ РегистрСведений.ИсполнителиЗадач ГДЕ - РегистрСведений.ИсполнителиЗадач.РольИсполнителя = СправочникРолиИсполнителей.Ссылка) + РегистрСведений.ИсполнителиЗадач.РольИсполнителя = СправочникРолиИсполнителейПереопределяемый.Ссылка) ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ КОНЕЦ КАК ЕстьИсполнители, - СправочникРолиИсполнителей.ВнешняяРоль, - СправочникРолиИсполнителей.КраткоеПредставление + СправочникРолиИсполнителейПереопределяемый.ВнешняяРоль, + СправочникРолиИсполнителейПереопределяемый.КраткоеПредставление ИЗ - Справочник.РолиИсполнителей.Назначение КАК РолиИсполнителейНазначение - ЛЕВОЕ СОЕДИНЕНИЕ Справочник.РолиИсполнителей КАК СправочникРолиИсполнителей - ПО РолиИсполнителейНазначение.Ссылка = СправочникРолиИсполнителей.Ссылка + Справочник.РолиИсполнителей.Назначение КАК РолиИсполнителейНазначениеПереопределяемый + ЛЕВОЕ СОЕДИНЕНИЕ Справочник.РолиИсполнителей КАК СправочникРолиИсполнителейПереопределяемый + ПО РолиИсполнителейНазначениеПереопределяемый.Ссылка = СправочникРолиИсполнителейПереопределяемый.Ссылка ГДЕ - РолиИсполнителейНазначение.ТипПользователей = Значение(Справочник.Пользователи.ПустаяСсылка) + РолиИсполнителейНазначениеПереопределяемый.ТипПользователей = Значение(Справочник.Пользователи.ПустаяСсылка) Catalog.РолиИсполнителей true true diff --git a/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаСписка/Module.bsl index 210d29241..846ca09d9 100644 --- a/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаСписка/Module.bsl @@ -8,7 +8,7 @@ Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; КонецЕсли; - + НастроитьОтображениеСпискаРолей(); КонецПроцедуры @@ -28,6 +28,7 @@ Процедура НастроитьОтображениеСпискаРолей() Если ПолучитьФункциональнуюОпцию("ИспользоватьВнешнихПользователей") Тогда + ТекстЗапроса = "ВЫБРАТЬ | СправочникРолиИсполнителей.Ссылка, | СправочникРолиИсполнителей.ПометкаУдаления, @@ -56,7 +57,9 @@ | СправочникРолиИсполнителей.КраткоеПредставление |ИЗ | Справочник.РолиИсполнителей КАК СправочникРолиИсполнителей"; + Иначе + ТекстЗапроса = "ВЫБРАТЬ | СправочникРолиИсполнителей.Ссылка, | СправочникРолиИсполнителей.ПометкаУдаления, @@ -89,9 +92,14 @@ | ПО РолиИсполнителейНазначение.Ссылка = СправочникРолиИсполнителей.Ссылка |ГДЕ | РолиИсполнителейНазначение.ТипПользователей = ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка)"; - КонецЕсли; - - Список.ТекстЗапроса = ТекстЗапроса; + КонецЕсли; + + СвойстваСписка = ОбщегоНазначения.СтруктураСвойствДинамическогоСписка(); + СвойстваСписка.ОсновнаяТаблица = "Справочник.РолиИсполнителей"; + СвойстваСписка.ДинамическоеСчитываниеДанных = Истина; + СвойстваСписка.ТекстЗапроса = ТекстЗапроса; + ОбщегоНазначения.УстановитьСвойстваДинамическогоСписка(Элементы.Список, СвойстваСписка); + КонецПроцедуры &НаСервере diff --git a/SSL/src/Catalogs/РолиИсполнителей/ManagerModule.bsl b/SSL/src/Catalogs/РолиИсполнителей/ManagerModule.bsl index eef2d383f..214accdc3 100644 --- a/SSL/src/Catalogs/РолиИсполнителей/ManagerModule.bsl +++ b/SSL/src/Catalogs/РолиИсполнителей/ManagerModule.bsl @@ -36,6 +36,7 @@ Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; + Если ПользователиКлиентСервер.ЭтоСеансВнешнегоПользователя() Тогда ТекущийПользователь = ПользователиКлиентСервер.ТекущийВнешнийПользователь(); ОбъектАвторизации = Справочники[ТекущийПользователь.ОбъектАвторизации.Метаданные().Имя].ПустаяСсылка(); @@ -43,7 +44,7 @@ ОбъектАвторизации = Справочники.Пользователи.ПустаяСсылка(); КонецЕсли; - Запрос = Новый Запрос("ВЫБРАТЬ РАЗРЕШЕННЫЕ + Запрос = Новый Запрос("ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 50 | РолиИсполнителейНазначение.Ссылка КАК Ссылка |ИЗ | Справочник.РолиИсполнителей.Назначение КАК РолиИсполнителейНазначение diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПодборСертификатовДляШифрования/Form.form b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПодборСертификатовДляШифрования/Form.form index bcc75f545..ed8c018c0 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПодборСертификатовДляШифрования/Form.form +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПодборСертификатовДляШифрования/Form.form @@ -1193,31 +1193,31 @@
true
ВЫБРАТЬ - Сертификаты.Ссылка КАК Ссылка, - Сертификаты.ПометкаУдаления КАК ПометкаУдаления, - Сертификаты.Наименование КАК Наименование, - Сертификаты.КомуВыдан КАК КомуВыдан, - Сертификаты.Фирма КАК Фирма, - Сертификаты.Фамилия КАК Фамилия, - Сертификаты.Имя КАК Имя, - Сертификаты.Отчество КАК Отчество, - Сертификаты.Должность КАК Должность, - Сертификаты.КемВыдан КАК КемВыдан, - Сертификаты.ДействителенДо КАК ДействителенДо, - Сертификаты.Подписание КАК Подписание, - Сертификаты.Шифрование КАК Шифрование, - Сертификаты.Отпечаток КАК Отпечаток, - Сертификаты.ДанныеСертификата КАК ДанныеСертификата, - Сертификаты.Программа КАК Программа, - Сертификаты.Отозван КАК Отозван, - Сертификаты.УсиленнаяЗащитаЗакрытогоКлюча КАК УсиленнаяЗащитаЗакрытогоКлюча, - Сертификаты.Организация КАК Организация, - Сертификаты.Пользователь КАК Пользователь, - Сертификаты.ПользовательОповещенОСрокеДействия КАК ПользовательОповещенОСрокеДействия, - Сертификаты.Предопределенный КАК Предопределенный, - Сертификаты.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных + СертификатыПереопределяемый.Ссылка КАК Ссылка, + СертификатыПереопределяемый.ПометкаУдаления КАК ПометкаУдаления, + СертификатыПереопределяемый.Наименование КАК Наименование, + СертификатыПереопределяемый.КомуВыдан КАК КомуВыдан, + СертификатыПереопределяемый.Фирма КАК Фирма, + СертификатыПереопределяемый.Фамилия КАК Фамилия, + СертификатыПереопределяемый.Имя КАК Имя, + СертификатыПереопределяемый.Отчество КАК Отчество, + СертификатыПереопределяемый.Должность КАК Должность, + СертификатыПереопределяемый.КемВыдан КАК КемВыдан, + СертификатыПереопределяемый.ДействителенДо КАК ДействителенДо, + СертификатыПереопределяемый.Подписание КАК Подписание, + СертификатыПереопределяемый.Шифрование КАК Шифрование, + СертификатыПереопределяемый.Отпечаток КАК Отпечаток, + СертификатыПереопределяемый.ДанныеСертификата КАК ДанныеСертификата, + СертификатыПереопределяемый.Программа КАК Программа, + СертификатыПереопределяемый.Отозван КАК Отозван, + СертификатыПереопределяемый.УсиленнаяЗащитаЗакрытогоКлюча КАК УсиленнаяЗащитаЗакрытогоКлюча, + СертификатыПереопределяемый.Организация КАК Организация, + СертификатыПереопределяемый.Пользователь КАК Пользователь, + СертификатыПереопределяемый.ПользовательОповещенОСрокеДействия КАК ПользовательОповещенОСрокеДействия, + СертификатыПереопределяемый.Предопределенный КАК Предопределенный, + СертификатыПереопределяемый.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных ИЗ - Справочник.СертификатыКлючейЭлектроннойПодписиИШифрования КАК Сертификаты + Справочник.СертификатыКлючейЭлектроннойПодписиИШифрования КАК СертификатыПереопределяемый ГДЕ &ДополнительноеУсловие {ГДЕ @@ -1225,10 +1225,10 @@ (ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ - РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователейПереопределяемый ГДЕ - СоставыГруппПользователей.Пользователь = Сертификаты.Пользователь - И СоставыГруппПользователей.ГруппаПользователей В (&ГруппаПользователей)))} + СоставыГруппПользователейПереопределяемый.Пользователь = СертификатыПереопределяемый.Пользователь + И СоставыГруппПользователейПереопределяемый.ГруппаПользователей В (&ГруппаПользователей)))} Catalog.СертификатыКлючейЭлектроннойПодписиИШифрования true true diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПодборСертификатовДляШифрования/Module.bsl b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПодборСертификатовДляШифрования/Module.bsl index 5b89c969f..39b12558a 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПодборСертификатовДляШифрования/Module.bsl +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПодборСертификатовДляШифрования/Module.bsl @@ -17,12 +17,18 @@ ОбработкаЗаявлениеНаВыпускНовогоКвалифицированногоСертификата = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени( "Обработка.ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата"); + + ТекстЗапроса = Список.ТекстЗапроса; ОбработкаЗаявлениеНаВыпускНовогоКвалифицированногоСертификата.ДополнитьЗапросСпискаСертификатов( - Список.ТекстЗапроса); + ТекстЗапроса); Иначе - Список.ТекстЗапроса = СтрЗаменить(Список.ТекстЗапроса, "&ДополнительноеУсловие", "ИСТИНА"); + ТекстЗапроса = СтрЗаменить(Список.ТекстЗапроса, "&ДополнительноеУсловие", "ИСТИНА"); КонецЕсли; + СвойстваСписка = ОбщегоНазначения.СтруктураСвойствДинамическогоСписка(); + СвойстваСписка.ТекстЗапроса = ТекстЗапроса; + ОбщегоНазначения.УстановитьСвойстваДинамическогоСписка(Элементы.Список, СвойстваСписка); + ГруппаПользователейПриИзмененииНаСервере(); КонецПроцедуры diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ФормаВыбора/Form.form b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ФормаВыбора/Form.form index 6c05293c4..8f53603c3 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ФормаВыбора/Form.form +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ФормаВыбора/Form.form @@ -503,31 +503,31 @@
true
ВЫБРАТЬ - Сертификаты.Ссылка КАК Ссылка, - Сертификаты.ПометкаУдаления КАК ПометкаУдаления, - Сертификаты.Наименование КАК Наименование, - Сертификаты.КомуВыдан КАК КомуВыдан, - Сертификаты.Фирма КАК Фирма, - Сертификаты.Фамилия КАК Фамилия, - Сертификаты.Имя КАК Имя, - Сертификаты.Отчество КАК Отчество, - Сертификаты.Должность КАК Должность, - Сертификаты.КемВыдан КАК КемВыдан, - Сертификаты.ДействителенДо КАК ДействителенДо, - Сертификаты.Подписание КАК Подписание, - Сертификаты.Шифрование КАК Шифрование, - Сертификаты.Отпечаток КАК Отпечаток, - Сертификаты.ДанныеСертификата КАК ДанныеСертификата, - Сертификаты.Программа КАК Программа, - Сертификаты.Отозван КАК Отозван, - Сертификаты.УсиленнаяЗащитаЗакрытогоКлюча КАК УсиленнаяЗащитаЗакрытогоКлюча, - Сертификаты.Организация КАК Организация, - Сертификаты.Пользователь КАК Пользователь, - Сертификаты.ПользовательОповещенОСрокеДействия КАК ПользовательОповещенОСрокеДействия, - Сертификаты.Предопределенный КАК Предопределенный, - Сертификаты.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных + СертификатыПереопределяемый.Ссылка КАК Ссылка, + СертификатыПереопределяемый.ПометкаУдаления КАК ПометкаУдаления, + СертификатыПереопределяемый.Наименование КАК Наименование, + СертификатыПереопределяемый.КомуВыдан КАК КомуВыдан, + СертификатыПереопределяемый.Фирма КАК Фирма, + СертификатыПереопределяемый.Фамилия КАК Фамилия, + СертификатыПереопределяемый.Имя КАК Имя, + СертификатыПереопределяемый.Отчество КАК Отчество, + СертификатыПереопределяемый.Должность КАК Должность, + СертификатыПереопределяемый.КемВыдан КАК КемВыдан, + СертификатыПереопределяемый.ДействителенДо КАК ДействителенДо, + СертификатыПереопределяемый.Подписание КАК Подписание, + СертификатыПереопределяемый.Шифрование КАК Шифрование, + СертификатыПереопределяемый.Отпечаток КАК Отпечаток, + СертификатыПереопределяемый.ДанныеСертификата КАК ДанныеСертификата, + СертификатыПереопределяемый.Программа КАК Программа, + СертификатыПереопределяемый.Отозван КАК Отозван, + СертификатыПереопределяемый.УсиленнаяЗащитаЗакрытогоКлюча КАК УсиленнаяЗащитаЗакрытогоКлюча, + СертификатыПереопределяемый.Организация КАК Организация, + СертификатыПереопределяемый.Пользователь КАК Пользователь, + СертификатыПереопределяемый.ПользовательОповещенОСрокеДействия КАК ПользовательОповещенОСрокеДействия, + СертификатыПереопределяемый.Предопределенный КАК Предопределенный, + СертификатыПереопределяемый.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных ИЗ - Справочник.СертификатыКлючейЭлектроннойПодписиИШифрования КАК Сертификаты + Справочник.СертификатыКлючейЭлектроннойПодписиИШифрования КАК СертификатыПереопределяемый ГДЕ &ДополнительноеУсловие Catalog.СертификатыКлючейЭлектроннойПодписиИШифрования diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ФормаВыбора/Module.bsl b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ФормаВыбора/Module.bsl index 9f94d6b5b..861f43979 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ФормаВыбора/Module.bsl +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ФормаВыбора/Module.bsl @@ -25,12 +25,18 @@ ОбработкаЗаявлениеНаВыпускНовогоКвалифицированногоСертификата = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени( "Обработка.ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата"); + + ТекстЗапроса = Список.ТекстЗапроса; ОбработкаЗаявлениеНаВыпускНовогоКвалифицированногоСертификата.ДополнитьЗапросСпискаСертификатов( - Список.ТекстЗапроса); + ТекстЗапроса); Иначе - Список.ТекстЗапроса = СтрЗаменить(Список.ТекстЗапроса, "&ДополнительноеУсловие", "ИСТИНА"); + ТекстЗапроса = СтрЗаменить(Список.ТекстЗапроса, "&ДополнительноеУсловие", "ИСТИНА"); КонецЕсли; + СвойстваСписка = ОбщегоНазначения.СтруктураСвойствДинамическогоСписка(); + СвойстваСписка.ТекстЗапроса = ТекстЗапроса; + ОбщегоНазначения.УстановитьСвойстваДинамическогоСписка(Элементы.Список, СвойстваСписка); + КонецПроцедуры &НаКлиенте diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ШифрованиеДанных/Module.bsl b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ШифрованиеДанных/Module.bsl index bdad2e95e..d781a97a0 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ШифрованиеДанных/Module.bsl +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ШифрованиеДанных/Module.bsl @@ -296,14 +296,14 @@ Запрос.Текст = "ВЫБРАТЬ | Сертификаты.Ссылка КАК Ссылка, - | Сертификаты.Отпечаток, + | Сертификаты.Отпечаток КАК Отпечаток, | Сертификаты.Наименование КАК Представление, - | Сертификаты.ДанныеСертификата + | Сертификаты.ДанныеСертификата КАК ДанныеСертификата |ИЗ | Справочник.СертификатыКлючейЭлектроннойПодписиИШифрования КАК Сертификаты |ГДЕ - | НЕ(НЕ Сертификаты.Ссылка В (&Ссылки) - | И НЕ Сертификаты.Отпечаток В (&Отпечатки))"; + | (Сертификаты.Ссылка В (&Ссылки) + | ИЛИ Сертификаты.Отпечаток В (&Отпечатки))"; Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл Строки = ТаблицаСертификатов.НайтиСтроки(Новый Структура("Ссылка", Выборка.Ссылка)); diff --git a/SSL/src/Catalogs/СообщенияСистемы/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/СообщенияСистемы/Forms/ФормаСписка/Module.bsl index 687ca0c9e..c515317d2 100644 --- a/SSL/src/Catalogs/СообщенияСистемы/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/СообщенияСистемы/Forms/ФормаСписка/Module.bsl @@ -10,8 +10,8 @@ Возврат; КонецЕсли; - ЭтоСеансСУстановленнымиЗначениямиРазделителей = РаботаВМоделиСервисаПовтИсп.РазделениеВключено() - И РаботаВМоделиСервисаПовтИсп.ДоступноИспользованиеРазделенныхДанных(); + ЭтоСеансСУстановленнымиЗначениямиРазделителей = РаботаВМоделиСервиса.РазделениеВключено() + И РаботаВМоделиСервиса.ДоступноИспользованиеРазделенныхДанных(); // Начальная настройка группировки. ГруппировкаДанных = Список.КомпоновщикНастроек.Настройки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных")); diff --git a/SSL/src/Catalogs/СтраныМира/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/СтраныМира/Forms/ФормаСписка/Module.bsl index c5ad57cc3..a18ff5f99 100644 --- a/SSL/src/Catalogs/СтраныМира/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/СтраныМира/Forms/ФормаСписка/Module.bsl @@ -9,7 +9,7 @@ КонецЕсли; // Инициализируем внутренние флаги. - МожноДобавлятьВСправочник = Справочники.СтраныМира.ЕстьПравоДобавления(); + МожноДобавлятьВСправочник = УправлениеКонтактнойИнформациейСлужебный.ЕстьПравоДобавления(); Если Параметры.РазрешитьДанныеКлассификатора=Неопределено Тогда РазрешитьДанныеКлассификатора = Истина; diff --git a/SSL/src/Catalogs/СтраныМира/ManagerModule.bsl b/SSL/src/Catalogs/СтраныМира/ManagerModule.bsl index 735b4edee..572d0bcef 100644 --- a/SSL/src/Catalogs/СтраныМира/ManagerModule.bsl +++ b/SSL/src/Catalogs/СтраныМира/ManagerModule.bsl @@ -44,24 +44,12 @@ Возврат; КонецЕсли; - ОбработкаПолученияДанныхВыбораЗаполнение(ДанныеВыбора, Параметры, СтандартнаяОбработка); + УправлениеКонтактнойИнформациейСлужебныйВызовСервера.ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка) КонецПроцедуры #КонецОбласти -#Область СлужебныеПроцедурыИФункцииКлиент - -Процедура ОбработкаПолученияДанныхВыбораЗаполнение(ДанныеВыбора, Параметры, СтандартнаяОбработка) - -#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда - ОбработкаПолученияДанныхВыбораЗаполнениеСервер(ДанныеВыбора, Параметры, СтандартнаяОбработка) -#КонецЕсли - -КонецПроцедуры - -#КонецОбласти - #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныйПрограммныйИнтерфейс @@ -126,225 +114,10 @@ Возврат УправлениеКонтактнойИнформацией.ДанныеКлассификатораСтранМираПоНаименованию(Наименование); КонецФункции -// Возвращает флаг возможности добавления и изменения элементов. -// -Функция ЕстьПравоДобавления() Экспорт - Возврат ПравоДоступа("Добавление", Метаданные.Справочники.СтраныМира); -КонецФункции - #КонецОбласти #Область СлужебныеПроцедурыИФункции -// Возвращает поля поиска в порядке предпочтения для справочника стран мира. -// -// Возвращаемое значение: -// Массив - содержит структуры с полями: -// * Имя - Строка - имя реквизита поиска. -// * ШаблонПредставления - Строка - шаблон для формирования значения представления по именам реквизитов, -// например: "%1.Наименование (%1.Код)". Здесь "Наименование" и "Код" - имена -// реквизитов, -// "%1" - заполнитель для передачи псевдонима таблицы. -// -Функция ПоляПоиска() - Результат = Новый Массив; - СписокПолей = ПустаяСсылка().Метаданные().ВводПоСтроке; - ГраницаПолей = СписокПолей.Количество() - 1; - ВсеИменаСтрокой = ""; - - ПредставлениеРазделителя = ", "; - РазделительПредставлений = " + """ + ПредставлениеРазделителя + """ + "; - - Для Индекс=0 По ГраницаПолей Цикл - ИмяПоля = СписокПолей[Индекс].Имя; - ВсеИменаСтрокой = ВсеИменаСтрокой + "," + ИмяПоля; - - ШаблонПредставления = "%1." + ИмяПоля; - - ОстальныеПоля = ""; - Для Позиция=0 По ГраницаПолей Цикл - Если Позиция<>Индекс Тогда - ОстальныеПоля = ОстальныеПоля + РазделительПредставлений + СписокПолей[Позиция].Имя; - КонецЕсли; - КонецЦикла; - Если Не ПустаяСтрока(ОстальныеПоля) Тогда - ШаблонПредставления = ШаблонПредставления - + " + "" ("" + " - + "%1." + Сред(ОстальныеПоля, СтрДлина(РазделительПредставлений) + 1) - + " + "")"""; - КонецЕсли; - - Результат.Добавить( - Новый Структура("Имя, ШаблонПредставления", ИмяПоля, ШаблонПредставления)); - КонецЦикла; - - Возврат Новый Структура("СписокПолей, ИменаПолейСтрокой", Результат, Сред(ВсеИменаСтрокой, 2)); -КонецФункции - -// Экранирует символы для использования в функции запроса ПОДОБНО. -// -Функция ЭкранироватьСимволыПодобия(Знач Текст, Знач СпецСимвол = "\") - Результат = Текст; - СимволыПодобия = "%_[]^" + СпецСимвол; - - Для Позиция=1 По СтрДлина(СимволыПодобия) Цикл - ТекущийСимвол = Сред(СимволыПодобия, Позиция, 1); - Результат = СтрЗаменить(Результат, ТекущийСимвол, СпецСимвол + ТекущийСимвол); - КонецЦикла; - - Возврат Результат; -КонецФункции - -Процедура ОбработкаПолученияДанныхВыбораЗаполнениеСервер(ДанныеВыбора, Параметры, СтандартнаяОбработка) - - Если Не ЕстьПравоДобавления() Тогда - // Нет прав на добавление страны мира, поведение по умолчанию. - Возврат; - КонецЕсли; - - // Будем имитировать поведение платформы - поиск по всем доступным полям поиска с формированием подобного списка. - - // Подразумеваем, что поля справочника и классификатора совпадают, за исключением отсутствующего в классификаторе поля - // "Ссылка". - Запрос = Новый Запрос; - Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; - - ПрефиксПараметраОтбора = "ПараметрыОтбора"; - - // Общий отбор по параметрам - ШаблонОтбора = "ИСТИНА"; - Для Каждого КлючЗначение Из Параметры.Отбор Цикл - ЗначениеПоля = КлючЗначение.Значение; - ИмяПоля = КлючЗначение.Ключ; - ИмяПараметра = ПрефиксПараметраОтбора + ИмяПоля; - - Если ТипЗнч(ЗначениеПоля)=Тип("Массив") Тогда - ШаблонОтбора = ШаблонОтбора + " И %1." + ИмяПоля + " В (&" + ИмяПараметра + ")"; - Иначе - ШаблонОтбора = ШаблонОтбора + " И %1." + ИмяПоля + " = &" + ИмяПараметра; - КонецЕсли; - - Запрос.УстановитьПараметр(ИмяПараметра, КлючЗначение.Значение); - КонецЦикла; - - // Дополнительные отборы - Если Параметры.Свойство("ВыборГруппИЭлементов") Тогда - Если Параметры.ВыборГруппИЭлементов = ИспользованиеГруппИЭлементов.Группы Тогда - ШаблонОтбора = ШаблонОтбора + " И %1.ЭтоГруппа"; - - ИначеЕсли Параметры.ВыборГруппИЭлементов = ИспользованиеГруппИЭлементов.Элементы Тогда - ШаблонОтбора = ШаблонОтбора + " И (НЕ %1.ЭтоГруппа)"; - - КонецЕсли; - КонецЕсли; - - // Источники данных - Если (Параметры.Свойство("ТолькоДанныеКлассификатора") И Параметры.ТолькоДанныеКлассификатора) Тогда - // Запрос только по классификатору. - ШаблонЗапроса = " - |ВЫБРАТЬ ПЕРВЫЕ 50 - | NULL КАК Ссылка, - | Классификатор.Код КАК Код, - | Классификатор.Наименование КАК Наименование, - | ЛОЖЬ КАК ПометкаУдаления, - | %2 КАК Представление - |ИЗ - | Классификатор КАК Классификатор - |ГДЕ - | Классификатор.%1 ПОДОБНО &СтрокаПоиска - | И ( - | " + СтрЗаменить(ШаблонОтбора, "%1", "Классификатор") + " - | ) - |УПОРЯДОЧИТЬ ПО - | Классификатор.%1 - |"; - Иначе - // Запрос и по справочнику и по классификатору. - ШаблонЗапроса = " - |ВЫБРАТЬ ПЕРВЫЕ 50 - | СтраныМира.Ссылка КАК Ссылка, - | ЕСТЬNULL(СтраныМира.Код, Классификатор.Код) КАК Код, - | ЕСТЬNULL(СтраныМира.Наименование, Классификатор.Наименование) КАК Наименование, - | ЕСТЬNULL(СтраныМира.ПометкаУдаления, ЛОЖЬ) КАК ПометкаУдаления, - | - | ВЫБОР КОГДА СтраныМира.Ссылка ЕСТЬ NULL ТОГДА - | %2 - | ИНАЧЕ - | %3 - | КОНЕЦ КАК Представление - | - |ИЗ - | Справочник.СтраныМира КАК СтраныМира - |ПОЛНОЕ СОЕДИНЕНИЕ - | Классификатор - |ПО - | Классификатор.Код = СтраныМира.Код - | И Классификатор.Наименование = СтраныМира.Наименование - |ГДЕ - | (СтраныМира.%1 ПОДОБНО &СтрокаПоиска ИЛИ Классификатор.%1 ПОДОБНО &СтрокаПоиска) - | И (" + СтрЗаменить(ШаблонОтбора, "%1", "Классификатор") + ") - | И (" + СтрЗаменить(ШаблонОтбора, "%1", "СтраныМира") + ") - | - |УПОРЯДОЧИТЬ ПО - | ЕСТЬNULL(СтраныМира.%1, Классификатор.%1) - |"; - КонецЕсли; - - ИменаПолей = ПоляПоиска(); - - // Код + Наименование - ключевые поля соответствия справочника классификатору. Их обрабатываем всегда. - ИменаПолейСтрокой = "," + СтрЗаменить(ИменаПолей.ИменаПолейСтрокой, " ", ""); - ИменаПолейСтрокой = СтрЗаменить(ИменаПолейСтрокой, ",Код", ""); - ИменаПолейСтрокой = СтрЗаменить(ИменаПолейСтрокой, ",Наименование", ""); - - Запрос.Текст = " - |ВЫБРАТЬ - | Код, Наименование " + ИменаПолейСтрокой + " - |ПОМЕСТИТЬ - | Классификатор - |ИЗ - | &Классификатор КАК Классификатор - |ИНДЕКСИРОВАТЬ ПО - | Код, Наименование - | " + ИменаПолейСтрокой + " - |"; - Запрос.УстановитьПараметр("Классификатор", УправлениеКонтактнойИнформацией.ТаблицаКлассификатора()); - Запрос.Выполнить(); - Запрос.УстановитьПараметр("СтрокаПоиска", ЭкранироватьСимволыПодобия(Параметры.СтрокаПоиска) + "%"); - - Для Каждого ДанныеПоля Из ИменаПолей.СписокПолей Цикл - ТекстЗапроса = СтрЗаменить(ШаблонЗапроса, "%1", ДанныеПоля.Имя); - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "%2", СтрЗаменить(ДанныеПоля.ШаблонПредставления, "%1", "Классификатор")); - Запрос.Текст = СтрЗаменить(ТекстЗапроса, "%3", СтрЗаменить(ДанныеПоля.ШаблонПредставления, "%1", "СтраныМира")); - - Результат = Запрос.Выполнить(); - Если Не Результат.Пустой() Тогда - ДанныеВыбора = Новый СписокЗначений; - СтандартнаяОбработка = Ложь; - - Выборка = Результат.Выбрать(); - Пока Выборка.Следующий() Цикл - Если ЗначениеЗаполнено(Выборка.Ссылка) Тогда - // Данные справочника - ЭлементВыбора = Выборка.Ссылка; - Иначе - // Данные классификатора - РезультатВыбора = Новый Структура("Код, Наименование", - Выборка.Код, Выборка.Наименование); - - ЭлементВыбора = Новый Структура("Значение, ПометкаУдаления, Предупреждение", - РезультатВыбора, Выборка.ПометкаУдаления, Неопределено); - КонецЕсли; - - ДанныеВыбора.Добавить(ЭлементВыбора, Выборка.Представление); - КонецЦикла; - - Прервать; - КонецЕсли; - КонецЦикла; - -КонецПроцедуры - #Область ОбновлениеИнформационнойБазы // Регистрирует к обработке страны мира. diff --git a/SSL/src/Catalogs/СтраныМира/СтраныМира.mdo b/SSL/src/Catalogs/СтраныМира/СтраныМира.mdo index 4c9cf3c0c..3eb779b66 100644 --- a/SSL/src/Catalogs/СтраныМира/СтраныМира.mdo +++ b/SSL/src/Catalogs/СтраныМира/СтраныМира.mdo @@ -147,7 +147,6 @@ Catalog.СтраныМира.Form.ФормаЭлемента Catalog.СтраныМира.Form.ФормаСписка Catalog.СтраныМира.Form.ФормаСписка - DontUse НаименованиеПолное diff --git a/SSL/src/Catalogs/УчетныеЗаписиСинхронизацииФайлов/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/УчетныеЗаписиСинхронизацииФайлов/Forms/ФормаЭлемента/Module.bsl index 758f759bb..7608f42fc 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиСинхронизацииФайлов/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/УчетныеЗаписиСинхронизацииФайлов/Forms/ФормаЭлемента/Module.bsl @@ -52,8 +52,9 @@ Процедура ПриЧтенииНаСервере(ТекущийОбъект) УстановитьПривилегированныйРежим(Истина); - Логин = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(ТекущийОбъект.Ссылка,"Логин"); - Пароль = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(ТекущийОбъект.Ссылка); + Мандат = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(ТекущийОбъект.Ссылка, "Логин, Пароль"); + Логин = Мандат.Логин; + Пароль = Мандат.Пароль; УстановитьПривилегированныйРежим(Ложь); КонецПроцедуры @@ -137,7 +138,6 @@ &НаКлиенте Процедура ПроверитьВозможностьСинхронизацииСОблачнымСервисом() - СообщениеОбОшибке = ""; СтруктураРезультата = Неопределено; ВыполнитьПроверкуПодключения(Объект.Ссылка, СтруктураРезультата); diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ПомощникНастройкиУчетнойЗаписи/Form.form b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ПомощникНастройкиУчетнойЗаписи/Form.form index 7c56fc70c..b55f2c71c 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ПомощникНастройкиУчетнойЗаписи/Form.form +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ПомощникНастройкиУчетнойЗаписи/Form.form @@ -829,7 +829,7 @@
- АвторизацияПриОтправкеПисем + ЛогинИПарольПриОтправкеПисем 78 ИмяПользователяДляОтправкиПисем @@ -930,44 +930,6 @@ Normal
- - ИспользоватьБезопасныйВходНаСерверИсходящейПочты - 86 - - <key>ru</key> - <value>Безопасная проверка пароля</value> - - true - true - - true - - - ИспользоватьБезопасныйВходНаСерверИсходящейПочты - - Right - - ИспользоватьБезопасныйВходНаСерверИсходящейПочтыРасширеннаяПодсказка - 88 - Label - true - true - - Left - - - - ИспользоватьБезопасныйВходНаСерверИсходящейПочтыКонтекстноеМеню - 87 - true - - CheckBoxField - Enter - true - Left - true - - true true @@ -975,10 +937,10 @@ <key>ru</key> - <value>Авторизация при отправке писем</value> + <value>Логин и пароль при отправке писем</value> - АвторизацияПриОтправкеПисемРасширеннаяПодсказка + ЛогинИПарольПриОтправкеПисемРасширеннаяПодсказка 79 Label true @@ -1126,24 +1088,23 @@ - ИспользоватьЗащищенноеСоединениеДляИсходящейПочты - 97 - - <key>ru</key> - <value>Использовать безопасное соединение (SSL)</value> - + ШифрованиеПриОтправкеПочты + 262 true true true - ИспользоватьЗащищенноеСоединениеДляИсходящейПочты + ШифрованиеПриОтправкеПочты - Right + + OnChange + ШифрованиеПриОтправкеПочтыПриИзменении + - ИспользоватьЗащищенноеСоединениеДляИсходящейПочтыРасширеннаяПодсказка - 99 + ШифрованиеПриОтправкеПочтыРасширеннаяПодсказка + 264 Label true true @@ -1152,16 +1113,36 @@ - ИспользоватьЗащищенноеСоединениеДляИсходящейПочтыКонтекстноеМеню - 98 + ШифрованиеПриОтправкеПочтыКонтекстноеМеню + 263 true - CheckBoxField + RadioButtonField Enter true Left true - + + + + ru + Авто + + + Авто + + + + + ru + Всегда (SSL) + + + SSL + + + Vertical + ДлительностьОжиданияИсходящейПочты @@ -1280,44 +1261,6 @@ Группа1 187 - - ТребуетсяВходНаСерверПередОтправкой - 75 - - <key>ru</key> - <value>Требуется авторизация на сервере входящей почты перед отправкой</value> - - true - true - - true - - - ТребуетсяВходНаСерверПередОтправкой - - Right - - ТребуетсяВходНаСерверПередОтправкойРасширеннаяПодсказка - 77 - Label - true - true - - Left - - - - ТребуетсяВходНаСерверПередОтправкойКонтекстноеМеню - 76 - true - - CheckBoxField - Enter - true - Left - true - - true true @@ -1512,53 +1455,15 @@ Normal - - ИспользоватьБезопасныйВходНаСерверВходящейПочты - 106 - - <key>ru</key> - <value>Безопасная проверка пароля</value> - - true - true - - true - - - ИспользоватьБезопасныйВходНаСерверВходящейПочты - - Right - - ИспользоватьБезопасныйВходНаСерверВходящейПочтыРасширеннаяПодсказка - 108 - Label - true - true - - Left - - - - ИспользоватьБезопасныйВходНаСерверВходящейПочтыКонтекстноеМеню - 107 - true - - CheckBoxField - Enter - true - Left - true - - НастройкиСервераВходящейПочты 109 - СерверВходящейПочты - 111 + Протокол + 116 <key>ru</key> - <value>Сервер</value> + <value>Протокол</value> true true @@ -1566,12 +1471,15 @@ true - СерверВходящейПочты + Протокол - Left + + OnChange + ПротоколПриИзменении + - СерверВходящейПочтыРасширеннаяПодсказка - 113 + ПротоколРасширеннаяПодсказка + 118 Label true true @@ -1580,8 +1488,8 @@ - СерверВходящейПочтыКонтекстноеМеню - 112 + ПротоколКонтекстноеМеню + 117 true InputField @@ -1591,15 +1499,25 @@ Left true - 22 + 8 true true false true + true true true true - true + + + IMAP + + + + + POP + + Normal @@ -1607,11 +1525,11 @@ ПротоколИПортСервераВходящейПочты 114 - Протокол - 116 + СерверВходящейПочты + 111 <key>ru</key> - <value>Протокол</value> + <value>Сервер</value> true true @@ -1619,15 +1537,12 @@ true - Протокол + СерверВходящейПочты - - OnChange - ПротоколПриИзменении - + Left - ПротоколРасширеннаяПодсказка - 118 + СерверВходящейПочтыРасширеннаяПодсказка + 113 Label true true @@ -1636,8 +1551,8 @@ - ПротоколКонтекстноеМеню - 117 + СерверВходящейПочтыКонтекстноеМеню + 112 true InputField @@ -1647,24 +1562,15 @@ Left true - 8 + 22 true true + false true - true true true true - - - IMAP - - - - - POP - - + true Normal @@ -1747,44 +1653,6 @@ ТипСоединенияИДлительностьОжидания 122 - - ИспользоватьЗащищенноеСоединениеДляВходящейПочты - 124 - - <key>ru</key> - <value>Защищенное соединение (SSL)</value> - - true - true - - true - - - ИспользоватьЗащищенноеСоединениеДляВходящейПочты - - Right - - ИспользоватьЗащищенноеСоединениеДляВходящейПочтыРасширеннаяПодсказка - 126 - Label - true - true - - Left - - - - ИспользоватьЗащищенноеСоединениеДляВходящейПочтыКонтекстноеМеню - 125 - true - - CheckBoxField - Enter - true - Left - true - - true true @@ -1814,6 +1682,63 @@ Auto + + ШифрованиеПриПолученииПочты + 265 + true + true + + true + + + ШифрованиеПриПолученииПочты + + + OnChange + ШифрованиеПриПолученииПочтыПриИзменении + + + ШифрованиеПриПолученииПочтыРасширеннаяПодсказка + 267 + Label + true + true + + Left + + + + ШифрованиеПриПолученииПочтыКонтекстноеМеню + 266 + true + + RadioButtonField + Enter + true + Left + true + + + + ru + Авто + + + Авто + + + + + ru + Всегда (SSL) + + + SSL + + + Vertical + + true true @@ -2868,7 +2793,7 @@ vasyapupkin@example.com завершена. КнопкаОтмена - 18 + 268 true true @@ -2876,7 +2801,7 @@ vasyapupkin@example.com завершена. КнопкаОтменаРасширеннаяПодсказка - 19 + 269 Label true true @@ -2884,7 +2809,7 @@ vasyapupkin@example.com завершена. Left - Form.StandardCommand.Cancel + Form.Command.Отмена Normal Auto true @@ -3679,6 +3604,59 @@ vasyapupkin@example.com завершена. true + + ТребуетсяАвторизацияПриОтправкеПисем + + <key>ru</key> + <value>Требуется авторизация</value> + + 40 + + Boolean + + + true + + + true + + + + ШифрованиеПриОтправкеПочты + + <key>ru</key> + <value>Шифрование</value> + + 41 + + String + + + + true + + + true + + + + ШифрованиеПриПолученииПочты + + <key>ru</key> + <value>Шифрование</value> + + 42 + + String + + + + true + + + true + + Назад @@ -3733,6 +3711,28 @@ vasyapupkin@example.com завершена.</value> <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> + <formCommands> + <name>Отмена</name> + <title> + <key>ru</key> + <value>Отмена</value> + + 4 + + ru + Отмена + + + true + + + + Отмена + + + DontUse + Auto + КонтекстныйРежим diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ПомощникНастройкиУчетнойЗаписи/Module.bsl b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ПомощникНастройкиУчетнойЗаписи/Module.bsl index 85d68a964..53265cda7 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ПомощникНастройкиУчетнойЗаписи/Module.bsl +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ПомощникНастройкиУчетнойЗаписи/Module.bsl @@ -85,6 +85,8 @@ Элементы.ДляКогоУчетнаяЗапись.Видимость = ЭтоПолноправныйПользователь; ВидУчетнойЗаписи = ?(ЭтоПолноправныйПользователь, "Общая", "Персональная"); + ТребуетсяАвторизацияПриОтправкеПисем = Истина; + КонецПроцедуры &НаКлиенте @@ -148,6 +150,16 @@ УстановитьВидимостьЭлементов(); КонецПроцедуры +&НаКлиенте +Процедура ШифрованиеПриОтправкеПочтыПриИзменении(Элемент) + ИспользоватьЗащищенноеСоединениеДляИсходящейПочты = ШифрованиеПриОтправкеПочты = "SSL"; +КонецПроцедуры + +&НаКлиенте +Процедура ШифрованиеПриПолученииПочтыПриИзменении(Элемент) + ИспользоватьЗащищенноеСоединениеДляВходящейПочты = ШифрованиеПриПолученииПочты = "SSL"; +КонецПроцедуры + #КонецОбласти #Область ОбработчикиКомандФормы @@ -193,6 +205,11 @@ НастроитьЭлементыТекущейСтраницы() КонецПроцедуры +&НаКлиенте +Процедура Отмена(Команда) + Закрыть(Ложь); +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -467,6 +484,9 @@ КонецЕсли; НастройкиЗаполнены = Истина; + + ШифрованиеПриОтправкеПочты = ?(ИспользоватьЗащищенноеСоединениеДляИсходящейПочты, "SSL", "Авто"); + ШифрованиеПриПолученииПочты = ?(ИспользоватьЗащищенноеСоединениеДляВходящейПочты, "SSL", "Авто"); КонецПроцедуры &НаКлиентеНаСервереБезКонтекста @@ -483,15 +503,15 @@ Настройки.Вставить("ПарольДляОтправкиПисем", Пароль); Настройки.Вставить("ПарольДляПолученияПисем", Пароль); - Настройки.Вставить("Протокол", "POP"); - Настройки.Вставить("СерверВходящейПочты", "pop." + ИмяСервераВУчетнойЗаписи); - Настройки.Вставить("ПортСервераВходящейПочты", 995); + Настройки.Вставить("Протокол", "IMAP"); + Настройки.Вставить("СерверВходящейПочты", "imap." + ИмяСервераВУчетнойЗаписи); + Настройки.Вставить("ПортСервераВходящейПочты", 993); Настройки.Вставить("ИспользоватьЗащищенноеСоединениеДляВходящейПочты", Истина); Настройки.Вставить("ИспользоватьБезопасныйВходНаСерверВходящейПочты", Ложь); Настройки.Вставить("СерверИсходящейПочты", "smtp." + ИмяСервераВУчетнойЗаписи); - Настройки.Вставить("ПортСервераИсходящейПочты", 465); - Настройки.Вставить("ИспользоватьЗащищенноеСоединениеДляИсходящейПочты", Истина); + Настройки.Вставить("ПортСервераИсходящейПочты", 587); + Настройки.Вставить("ИспользоватьЗащищенноеСоединениеДляИсходящейПочты", Ложь); Настройки.Вставить("ИспользоватьБезопасныйВходНаСерверИсходящейПочты", Ложь); Настройки.Вставить("ДлительностьОжиданияСервера", 30); diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаСписка/Form.form index 585d8f365..5928daaea 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаСписка/Form.form @@ -44,7 +44,7 @@ true - Items.Список.CurrentData.Ref + Items.Список.CurrentData.Ссылка ФормаСправочникУчетныеЗаписиЭлектроннойПочтыПроверитьУчетнуюЗаписьРасширеннаяПодсказка @@ -121,7 +121,7 @@ true - Список.Description + Список.Наименование true @@ -276,7 +276,7 @@ true - Список.Ref + Список.Ссылка СсылкаРасширеннаяПодсказка @@ -429,25 +429,101 @@ ГруппаПользовательскихНастроек - - ПоказыватьПерсональныеУчетныеЗаписиПользователей - 40 + + Отборы + 49 + + ПоказыватьПерсональныеУчетныеЗаписиПользователей + 40 + + <key>ru</key> + <value>Показывать персональные</value> + + true + true + + true + + + ПоказыватьПерсональныеУчетныеЗаписиПользователей + + Right + + OnChange + ПоказыватьПерсональныеУчетныеЗаписиПользователейПриИзменении + + + ПоказыватьПерсональныеУчетныеЗаписиПользователейРасширеннаяПодсказка + 42 + Label + true + true + + Left + + + + ПоказыватьПерсональныеУчетныеЗаписиПользователейКонтекстноеМеню + 41 + true + + CheckBoxField + Enter + true + Left + true + + + + ПоказыватьНедействительные + 46 + true + true + + true + + + ПоказыватьНедействительные + + Right + + OnChange + ПоказыватьНедействительныеПриИзменении + + + ПоказыватьНедействительныеРасширеннаяПодсказка + 48 + Label + true + true + + Left + + + + ПоказыватьНедействительныеКонтекстноеМеню + 47 + true + + CheckBoxField + Enter + true + Left + true + + true true true - - ПоказыватьПерсональныеУчетныеЗаписиПользователей - - Right - - OnChange - ПоказыватьПерсональныеУчетныеЗаписиПользователейПриИзменении - + + <key>ru</key> + <value>Отборы</value> + - ПоказыватьПерсональныеУчетныеЗаписиПользователейРасширеннаяПодсказка - 42 + ОтборыРасширеннаяПодсказка + 50 Label true true @@ -455,17 +531,14 @@ Left - - ПоказыватьПерсональныеУчетныеЗаписиПользователейКонтекстноеМеню - 41 - true - - CheckBoxField - Enter - true - Left - true - + UsualGroup + + Auto + true + true + Auto + Auto + Форма_КоманднаяПанель @@ -501,11 +574,54 @@ Список.Ref + + Список.Ссылка +
true
+ ВЫБРАТЬ + СправочникУчетныеЗаписиЭлектроннойПочты.Ссылка КАК Ссылка, + СправочникУчетныеЗаписиЭлектроннойПочты.ПометкаУдаления КАК ПометкаУдаления, + СправочникУчетныеЗаписиЭлектроннойПочты.Наименование КАК Наименование, + СправочникУчетныеЗаписиЭлектроннойПочты.SMTPАутентификация КАК SMTPАутентификация, + СправочникУчетныеЗаписиЭлектроннойПочты.АдресЭлектроннойПочты КАК АдресЭлектроннойПочты, + СправочникУчетныеЗаписиЭлектроннойПочты.ВремяОжидания КАК ВремяОжидания, + СправочникУчетныеЗаписиЭлектроннойПочты.ИмяПользователя КАК ИмяПользователя, + СправочникУчетныеЗаписиЭлектроннойПочты.ИспользоватьБезопасныйВходНаСерверВходящейПочты КАК ИспользоватьБезопасныйВходНаСерверВходящейПочты, + СправочникУчетныеЗаписиЭлектроннойПочты.ИспользоватьБезопасныйВходНаСерверИсходящейПочты КАК ИспользоватьБезопасныйВходНаСерверИсходящейПочты, + СправочникУчетныеЗаписиЭлектроннойПочты.ИспользоватьДляОтправки КАК ИспользоватьДляОтправки, + СправочникУчетныеЗаписиЭлектроннойПочты.ИспользоватьДляПолучения КАК ИспользоватьДляПолучения, + СправочникУчетныеЗаписиЭлектроннойПочты.ИспользоватьЗащищенноеСоединениеДляВходящейПочты КАК ИспользоватьЗащищенноеСоединениеДляВходящейПочты, + СправочникУчетныеЗаписиЭлектроннойПочты.ИспользоватьЗащищенноеСоединениеДляИсходящейПочты КАК ИспользоватьЗащищенноеСоединениеДляИсходящейПочты, + СправочникУчетныеЗаписиЭлектроннойПочты.ОставлятьКопииСообщенийНаСервере КАК ОставлятьКопииСообщенийНаСервере, + СправочникУчетныеЗаписиЭлектроннойПочты.ПериодХраненияСообщенийНаСервере КАК ПериодХраненияСообщенийНаСервере, + СправочникУчетныеЗаписиЭлектроннойПочты.Пользователь КАК Пользователь, + СправочникУчетныеЗаписиЭлектроннойПочты.ПользовательSMTP КАК ПользовательSMTP, + СправочникУчетныеЗаписиЭлектроннойПочты.ПортСервераВходящейПочты КАК ПортСервераВходящейПочты, + СправочникУчетныеЗаписиЭлектроннойПочты.ПортСервераИсходящейПочты КАК ПортСервераИсходящейПочты, + СправочникУчетныеЗаписиЭлектроннойПочты.ПротоколВходящейПочты КАК ПротоколВходящейПочты, + СправочникУчетныеЗаписиЭлектроннойПочты.СерверВходящейПочты КАК СерверВходящейПочты, + СправочникУчетныеЗаписиЭлектроннойПочты.СерверИсходящейПочты КАК СерверИсходящейПочты, + СправочникУчетныеЗаписиЭлектроннойПочты.СпособPOP3Аутентификации КАК СпособPOP3Аутентификации, + СправочникУчетныеЗаписиЭлектроннойПочты.СпособSMTPАутентификации КАК СпособSMTPАутентификации, + СправочникУчетныеЗаписиЭлектроннойПочты.ТребуетсяВходНаСерверПередОтправкой КАК ТребуетсяВходНаСерверПередОтправкой, + СправочникУчетныеЗаписиЭлектроннойПочты.УдалитьВПредставлениеВключатьИмяПользователя КАК УдалитьВПредставлениеВключатьИмяПользователя, + СправочникУчетныеЗаписиЭлектроннойПочты.УдалитьОтветственныйЗаОбработкуПисем КАК УдалитьОтветственныйЗаОбработкуПисем, + СправочникУчетныеЗаписиЭлектроннойПочты.УдалитьПароль КАК УдалитьПароль, + СправочникУчетныеЗаписиЭлектроннойПочты.УдалитьПарольSMTP КАК УдалитьПарольSMTP, + СправочникУчетныеЗаписиЭлектроннойПочты.ОтправлятьСкрытыеКопииПисемНаЭтотАдрес КАК ОтправлятьСкрытыеКопииПисемНаЭтотАдрес, + СправочникУчетныеЗаписиЭлектроннойПочты.ВладелецУчетнойЗаписи КАК ВладелецУчетнойЗаписи, + СправочникУчетныеЗаписиЭлектроннойПочты.Предопределенный КАК Предопределенный, + СправочникУчетныеЗаписиЭлектроннойПочты.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных, + ЕСТЬNULL(Пользователи.Недействителен, ЛОЖЬ) КАК ВладелецНедействителен +ИЗ + Справочник.УчетныеЗаписиЭлектроннойПочты КАК СправочникУчетныеЗаписиЭлектроннойПочты + ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Пользователи КАК Пользователи + ПО СправочникУчетныеЗаписиЭлектроннойПочты.ВладелецУчетнойЗаписи = Пользователи.Ссылка Catalog.УчетныеЗаписиЭлектроннойПочты true true + true true true @@ -527,6 +643,23 @@ true + + ПоказыватьНедействительные + + <key>ru</key> + <value>Показывать недействительные</value> + + 3 + + Boolean + + + true + + + true + + diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаСписка/Module.bsl index 2b90d1323..b0153b0e9 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаСписка/Module.bsl @@ -3,9 +3,18 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + УстановитьУсловноеОформление(); + + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + Элементы.ПоказыватьПерсональныеУчетныеЗаписиПользователей.Видимость = Пользователи.ЭтоПолноправныйПользователь(); ПереключитьВидимостьПерсональныхУчетныхЗаписей(Список, ПоказыватьПерсональныеУчетныеЗаписиПользователей); + ПереключитьВидимостьНедействительныхУчетныхЗаписей(Список, ПоказыватьНедействительные); Элементы.ВладелецУчетнойЗаписи.Видимость = ПоказыватьПерсональныеУчетныеЗаписиПользователей; + Элементы.ПоказыватьНедействительные.Доступность = ПоказыватьПерсональныеУчетныеЗаписиПользователей; КонецПроцедуры #КонецОбласти @@ -16,6 +25,12 @@ Процедура ПоказыватьПерсональныеУчетныеЗаписиПользователейПриИзменении(Элемент) ПереключитьВидимостьПерсональныхУчетныхЗаписей(Список, ПоказыватьПерсональныеУчетныеЗаписиПользователей); Элементы.ВладелецУчетнойЗаписи.Видимость = ПоказыватьПерсональныеУчетныеЗаписиПользователей; + Элементы.ПоказыватьНедействительные.Доступность = ПоказыватьПерсональныеУчетныеЗаписиПользователей; +КонецПроцедуры + +&НаКлиенте +Процедура ПоказыватьНедействительныеПриИзменении(Элемент) + ПереключитьВидимостьНедействительныхУчетныхЗаписей(Список, ПоказыватьНедействительные); КонецПроцедуры #КонецОбласти @@ -31,5 +46,27 @@ Список, "ВладелецУчетнойЗаписи", СписокПользователей, ВидСравненияКомпоновкиДанных.ВСписке, , Не ПоказыватьПерсональныеУчетныеЗаписиПользователей); КонецПроцедуры - + +&НаКлиентеНаСервереБезКонтекста +Процедура ПереключитьВидимостьНедействительныхУчетныхЗаписей(Список, ПоказыватьНедействительные) + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( + Список, "ВладелецНедействителен", Ложь, ВидСравненияКомпоновкиДанных.Равно, , + Не ПоказыватьНедействительные); +КонецПроцедуры + +&НаСервере +Процедура УстановитьУсловноеОформление() + + Список.УсловноеОформление.Элементы.Очистить(); + Элемент = Список.УсловноеОформление.Элементы.Добавить(); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ВладелецНедействителен"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Истина; + + Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет); + +КонецПроцедуры + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Form.form index 3a2f6f93b..90888fe41 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Form.form @@ -293,26 +293,119 @@ ОтправкаПисем 100 - АвторизацияПриОтправкеПисем - 192 - - ИмяПользователяДляОтправкиПисем - 149 - - <key>ru</key> - <value>Имя пользователя</value> - + НастройкиПодключенияПриОтправкеПисем + 202 + + НастройкиСервераИсходящейПочты + 158 + + СерверИсходящейПочты + 174 + + <key>ru</key> + <value>Сервер</value> + + true + true + + true + + + Объект.СерверИсходящейПочты + + + OnChange + СерверИсходящейПочтыПриИзменении + + + СерверИсходящейПочтыРасширеннаяПодсказка + 176 + Label + true + true + + Left + + + + СерверИсходящейПочтыКонтекстноеМеню + 175 + true + + InputField + Enter + true + Left + true + + 22 + true + true + false + true + true + true + true + Normal + + + + ПортСервераИсходящейПочты + 177 + + <key>ru</key> + <value>Порт</value> + + true + true + + true + + + Объект.ПортСервераИсходящейПочты + + + ПортСервераИсходящейПочтыРасширеннаяПодсказка + 179 + Label + true + true + + Left + + + + ПортСервераИсходящейПочтыКонтекстноеМеню + 178 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + true true true - - Объект.ПользовательSMTP - + + <key>ru</key> + <value>Настройки сервера входящей почты</value> + - ИмяПользователяДляОтправкиПисемРасширеннаяПодсказка - 151 + НастройкиСервераИсходящейПочтыРасширеннаяПодсказка + 159 Label true true @@ -320,50 +413,33 @@ Left - - ИмяПользователяДляОтправкиПисемКонтекстноеМеню - 150 - true - - InputField - Enter - true - Left - true - - 25 - true - true - false - true - true - true - true - Normal + UsualGroup + + Auto + true + true + Auto + Auto - ПарольДляОтправкиПисем - 152 - - <key>ru</key> - <value>Пароль</value> - + ШифрованиеПриОтправкеПочты + 255 true true true - ПарольSMTP + ШифрованиеПриОтправкеПочты OnChange - ПарольДляОтправкиПисемПриИзменении + ШифрованиеПриОтправкеПочтыПриИзменении - ПарольДляОтправкиПисемРасширеннаяПодсказка - 154 + ШифрованиеПриОтправкеПочтыРасширеннаяПодсказка + 257 Label true true @@ -372,66 +448,37 @@ - ПарольДляОтправкиПисемКонтекстноеМеню - 153 + ШифрованиеПриОтправкеПочтыКонтекстноеМеню + 256 true - InputField + RadioButtonField Enter true Left true - - 25 - true - true - false - true - true - true - true - true - Normal + + + + ru + Авто + + + Авто + + + + + ru + Всегда (SSL) + + + SSL + + + Vertical - - ИспользоватьБезопасныйВходНаСерверИсходящейПочты - 155 - - <key>ru</key> - <value>Безопасная проверка пароля</value> - - true - true - - true - - - Объект.ИспользоватьБезопасныйВходНаСерверИсходящейПочты - - Right - - ИспользоватьБезопасныйВходНаСерверИсходящейПочтыРасширеннаяПодсказка - 157 - Label - true - true - - Left - - - - ИспользоватьБезопасныйВходНаСерверИсходящейПочтыКонтекстноеМеню - 156 - true - - CheckBoxField - Enter - true - Left - true - - true true @@ -439,11 +486,11 @@ <key>ru</key> - <value>Авторизация при отправке писем</value> + <value>Настройки подключения при отправке писем</value> - АвторизацияПриОтправкеПисемРасширеннаяПодсказка - 193 + НастройкиПодключенияПриОтправкеПисемРасширеннаяПодсказка + 203 Label true true @@ -463,158 +510,27 @@ - НастройкиСервераИсходящейПочты - 158 + ГруппаТребуетсяАвторизация + 258 - СерверИсходящейПочты - 174 - - <key>ru</key> - <value>Сервер</value> - + ТребуетсяАвторизацияПриОтправкеПисем + 230 true true true - Объект.СерверИсходящейПочты - - - OnChange - СерверИсходящейПочтыПриИзменении - - - СерверИсходящейПочтыРасширеннаяПодсказка - 176 - Label - true - true - - Left - - - - СерверИсходящейПочтыКонтекстноеМеню - 175 - true - - InputField - Enter - true - Left - true - - 22 - true - true - false - true - true - true - true - Normal - - - - ПортСервераИсходящейПочты - 177 - - <key>ru</key> - <value>Порт</value> - - true - true - - true - - - Объект.ПортСервераИсходящейПочты - - - ПортСервераИсходящейПочтыРасширеннаяПодсказка - 179 - Label - true - true - - Left - - - - ПортСервераИсходящейПочтыКонтекстноеМеню - 178 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Настройки сервера входящей почты</value> - - - НастройкиСервераИсходящейПочтыРасширеннаяПодсказка - 159 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - - ТипСоединенияИДлительностьОжиданияПриОтправке - 202 - - ИспользоватьЗащищенноеСоединениеДляИсходящейПочты - 180 - - <key>ru</key> - <value>Использовать безопасное соединение (SSL)</value> - - true - true - - true - - - Объект.ИспользоватьЗащищенноеСоединениеДляИсходящейПочты + ТребуетсяАвторизацияПриОтправкеПисем Right OnChange - ИспользоватьЗащищенноеСоединениеДляИсходящейПочтыПриИзменении + ТребуетсяАвторизацияПриОтправкеПисемПриИзменении - ИспользоватьЗащищенноеСоединениеДляИсходящейПочтыРасширеннаяПодсказка - 182 + ТребуетсяАвторизацияПриОтправкеПисемРасширеннаяПодсказка + 232 Label true true @@ -623,8 +539,8 @@ - ИспользоватьЗащищенноеСоединениеДляИсходящейПочтыКонтекстноеМеню - 181 + ТребуетсяАвторизацияПриОтправкеПисемКонтекстноеМеню + 231 true CheckBoxField @@ -634,6 +550,427 @@ true + + АвторизацияПриОтправкеПисем + 192 + + Декорация1 + 248 + true + true + + true + + + Декорация1РасширеннаяПодсказка + 250 + Label + true + true + + Left + + + + Декорация1КонтекстноеМеню + 249 + true + + 1 + true + 1 + true + false + false + + + + СпособАвторизацииСОтступом + 251 + + АвторизацияSMTP + 244 + + СпособАвторизацииПриОтправкеПочты + 238 + true + true + + true + + + СпособАвторизацииПриОтправкеПочты + + None + + OnChange + СпособАвторизацииПриОтправкеПочтыПриИзменении + + + СпособАвторизацииПриОтправкеПочтыРасширеннаяПодсказка + 240 + Label + true + true + + Left + + + + СпособАвторизацииПриОтправкеПочтыКонтекстноеМеню + 239 + true + + RadioButtonField + Enter + true + Left + true + + + + ru + На сервере исходящей почты (SMTP) + + + SMTP + + + Vertical + + + + ЛогинПарольПриОтправкеПисемСОтступом + 253 + + ОтступАвторизацияПриОтправкеПисем + 235 + + <key>ru</key> + <value>Отступ авторизация при отправке писем</value> + + true + true + + true + + + ОтступАвторизацияПриОтправкеПисемРасширеннаяПодсказка + 237 + Label + true + true + + Left + + + + ОтступАвторизацияПриОтправкеПисемКонтекстноеМеню + 236 + true + + 1 + true + 1 + true + false + false + + + + ЛогинИПарольПриОтправкеПисем + 233 + + ИмяПользователяДляОтправкиПисем + 149 + + <key>ru</key> + <value>Имя пользователя</value> + + true + true + + true + + + Объект.ПользовательSMTP + + + ИмяПользователяДляОтправкиПисемРасширеннаяПодсказка + 151 + Label + true + true + + Left + + + + ИмяПользователяДляОтправкиПисемКонтекстноеМеню + 150 + true + + InputField + Enter + true + Left + true + + 25 + true + true + false + true + true + true + true + Normal + + + + ПарольДляОтправкиПисем + 152 + + <key>ru</key> + <value>Пароль</value> + + true + true + + true + + + ПарольSMTP + + + OnChange + ПарольДляОтправкиПисемПриИзменении + + + ПарольДляОтправкиПисемРасширеннаяПодсказка + 154 + Label + true + true + + Left + + + + ПарольДляОтправкиПисемКонтекстноеМеню + 153 + true + + InputField + Enter + true + Left + true + + 25 + true + true + false + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Логин и пароль при отправке писем</value> + + + ЛогинИПарольПриОтправкеПисемРасширеннаяПодсказка + 234 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Логин пароль при отправке писем с отступом</value> + + + ЛогинПарольПриОтправкеПисемСОтступомРасширеннаяПодсказка + 254 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Авторизация SMTP</value> + + + АвторизацияSMTPРасширеннаяПодсказка + 245 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + СпособАвторизацииПриОтправкеПочты1 + 241 + true + true + + true + + + СпособАвторизацииПриОтправкеПочты + + None + + OnChange + СпособАвторизацииПриОтправкеПочтыПриИзменении + + + СпособАвторизацииПриОтправкеПочты1РасширеннаяПодсказка + 243 + Label + true + true + + Left + + + + СпособАвторизацииПриОтправкеПочты1КонтекстноеМеню + 242 + true + + RadioButtonField + Enter + true + Left + true + + + + ru + На сервере входящей почты (POP) + + + POP + + + Vertical + + + true + true + + true + + + <key>ru</key> + <value>Способ авторизации с отступом</value> + + + СпособАвторизацииСОтступомРасширеннаяПодсказка + 252 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Авторизация при отправке писем</value> + + + АвторизацияПриОтправкеПисемРасширеннаяПодсказка + 193 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + true true @@ -641,11 +978,11 @@ <key>ru</key> - <value>Тип соединения и длительность ожидания при отправке</value> + <value>Требуется авторизация</value> - ТипСоединенияИДлительностьОжиданияПриОтправкеРасширеннаяПодсказка - 203 + ГруппаТребуетсяАвторизацияРасширеннаяПодсказка + 259 Label true true @@ -657,6 +994,7 @@ Vertical Auto + NormalSeparation true true Auto @@ -673,7 +1011,6 @@ ru Требуется авторизация на сервере входящей почты перед отправкой - true true true @@ -903,53 +1240,15 @@ Normal - - ИспользоватьБезопасныйВходНаСерверВходящейПочты - 143 - - <key>ru</key> - <value>Безопасная проверка пароля</value> - - true - true - - true - - - Объект.ИспользоватьБезопасныйВходНаСерверВходящейПочты - - Right - - ИспользоватьБезопасныйВходНаСерверВходящейПочтыРасширеннаяПодсказка - 145 - Label - true - true - - Left - - - - ИспользоватьБезопасныйВходНаСерверВходящейПочтыКонтекстноеМеню - 144 - true - - CheckBoxField - Enter - true - Left - true - - НастройкиСервераВходящейПочты 125 - СерверВходящейПочты - 113 + Протокол + 108 <key>ru</key> - <value>Сервер</value> + <value>Протокол</value> true true @@ -957,16 +1256,15 @@ true - Объект.СерверВходящейПочты + Объект.ПротоколВходящейПочты - Left OnChange - СерверВходящейПочтыПриИзменении + ПротоколПриИзменении - СерверВходящейПочтыРасширеннаяПодсказка - 115 + ПротоколРасширеннаяПодсказка + 110 Label true true @@ -975,36 +1273,49 @@ - СерверВходящейПочтыКонтекстноеМеню - 114 + ПротоколКонтекстноеМеню + 109 true InputField + true Enter true Left true - 22 + 8 true true false true + true + true true true - true + + + IMAP + + + + + POP + + Normal + 4 ПротоколИПортСервераВходящейПочты 111 - Протокол - 108 + СерверВходящейПочты + 113 <key>ru</key> - <value>Протокол</value> + <value>Сервер</value> true true @@ -1012,15 +1323,16 @@ true - Объект.ПротоколВходящейПочты + Объект.СерверВходящейПочты + Left OnChange - ПротоколПриИзменении + СерверВходящейПочтыПриИзменении - ПротоколРасширеннаяПодсказка - 110 + СерверВходящейПочтыРасширеннаяПодсказка + 115 Label true true @@ -1029,37 +1341,25 @@ - ПротоколКонтекстноеМеню - 109 + СерверВходящейПочтыКонтекстноеМеню + 114 true InputField - true Enter true Left true - 8 + 22 true true + false true - true - true true true - - - IMAP - - - - - POP - - + true Normal - 4 @@ -1140,28 +1440,23 @@ ТипСоединенияИДлительностьОжидания 187 - ИспользоватьЗащищенноеСоединениеДляВходящейПочты - 119 - - <key>ru</key> - <value>Использовать безопасное соединение (SSL)</value> - + ШифрованиеПриПолученииПочты + 260 true true true - Объект.ИспользоватьЗащищенноеСоединениеДляВходящейПочты + ШифрованиеПриПолученииПочты - Right OnChange - ИспользоватьЗащищенноеСоединениеДляВходящейПочтыПриИзменении + ШифрованиеПриПолученииПочтыПриИзменении - ИспользоватьЗащищенноеСоединениеДляВходящейПочтыРасширеннаяПодсказка - 121 + ШифрованиеПриПолученииПочтыРасширеннаяПодсказка + 262 Label true true @@ -1170,16 +1465,36 @@ - ИспользоватьЗащищенноеСоединениеДляВходящейПочтыКонтекстноеМеню - 120 + ШифрованиеПриПолученииПочтыКонтекстноеМеню + 261 true - CheckBoxField + RadioButtonField Enter true Left true - + + + + ru + Авто + + + Авто + + + + + ru + Всегда (SSL) + + + SSL + + + Vertical + true true @@ -2147,6 +2462,95 @@ true + + ТребуетсяАвторизацияПриОтправкеПисем + + <key>ru</key> + <value>Требуется авторизация</value> + + 11 + + Boolean + + + true + + + true + + + + СпособАвторизацииПриОтправкеПочты + + <key>ru</key> + <value>Способ авторизации при отправке почты</value> + + 12 + + String + + + + true + + + true + + + + ШифрованиеПриОтправкеПочты + + <key>ru</key> + <value>Шифрование</value> + + 13 + + String + + + + true + + + true + + + + ШифрованиеПриПолученииПочты + + <key>ru</key> + <value>Шифрование</value> + + 14 + + String + + + + true + + + true + + + + РеквизитыТребующиеВводаПароляДляИзменения + + <key>ru</key> + <value>Реквизиты требующие ввода пароля для изменения</value> + + 15 + + String + + + + true + + + true + + ЗаписатьИЗакрыть diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Help/ru.html index cf4d99369..1d907d928 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Help/ru.html @@ -11,23 +11,32 @@ <div>Укажите <strong>Имя отправителя писем</strong> - имя владельца учетной записи, которое будет указываться в корреспонденции, при этом оно может отличаться от имени пользователя в программе, например, <a href="Catalog.Пользователи.Form.ФормаЭлемента/Help">пользователь</a> "Администратор", а имя его "Иван Иванович".</div> </li><li> <div>Укажите, как <strong>Использовать учетную запись</strong>:</div> -</li><li> +<ul><li> <div>Включите флажок <strong>Для отправки писем</strong>;</div> </li><li> -<div>Включите флажок <strong>Для получения писем</strong>.</div></li></ul><h3>Отправка писем (настройка сервера исходящей почты)</h3> -<ul><li>Укажите <strong>Имя пользователя</strong> учетной записи в формате <a href="mailto:User@Server.net">User@Server.net</a>, он может отличаться от основного, в таком случае он будет предназначен только для отправки писем.</li></ul><ul><li>При необходимости введите <strong>Пароль</strong> учетной записи (если он не введен, программа запрашивает его при отправке писем). </li></ul><ul><li>При необходимости включите флажок <strong>Безопасная проверка пароля</strong>. -</li><li>В поле <strong>Сервер</strong> укажите адрес SMTP-сервера, например, "smtp.Server.net". -</li><li>Укажите <strong>Порт</strong> компьютера для отправки почтовых сообщений, например, "465". -</li><li>Включите флажок <strong>Использовать безопасное соединение</strong> (SSL). -</li><li>При необходимости включите флажок <strong>Требуется вход на сервер перед отправкой</strong>.</li></ul><h3>Получение писем (настройка сервера входящей почты) </h3> +<div>Включите флажок <strong>Для получения писем</strong>.</div></li></ul></li><li> +<div>Укажите, <strong>Для кого учетная запись</strong>:</div> +<ul><li> +<div><strong>Для всех</strong>;</div> +</li><li> +<div><strong>Только для</strong> (укажите имя <a name="СтандартныеПодсистемы.Пользователи"></a><a href="Catalog.Пользователи.Form.ФормаЭлемента/Help">пользователя</a>, выбрав его из <a href="Catalog.Пользователи/Help">списка</a>).</div></li></ul></li></ul><h3>Отправка писем (настройка сервера исходящей почты)</h3> +<ul><li>В поле <strong>Сервер</strong> укажите адрес SMTP-сервера, например, "smtp.Server.net". +<ul><li>Укажите <strong>Порт</strong> компьютера для отправки почтовых сообщений, например, "465". +</li><li>С помощью переключателя укажите, когда будет производиться <strong>Шифрование</strong>: +<ul><li><strong>Авто</strong>; +</li><li><strong>Всегда (SSL)</strong>.</li></ul></li></ul></li><li>При необходимости включите флажок <strong>Требуется авторизация</strong>, с помощью переключателя выберите, на каком сервере: +<ul><li>на сервере исходящей почты (SMTP): +<ul><li>Укажите <strong>Имя пользователя</strong> учетной записи в формате <a href="mailto:User@Server.net">User@Server.net</a>, он может отличаться от основного, в таком случае он будет предназначен только для отправки писем. +</li><li>При необходимости введите <strong>Пароль</strong> учетной записи (если он не введен, программа запрашивает его при отправке писем). </li></ul></li><li>на сервере входящей почты (POP).</li></ul></li><li>При необходимости включите флажок <strong>Отправлять скрытые копии писем на этот адрес</strong>. </li></ul><h3>Получение писем (настройка сервера входящей почты) </h3> <ul><li>Укажите <strong>Имя пользователя</strong> учетной записи в формате <a href="mailto:User@Server.net">User@Server.net</a>, он может отличаться от основного, в таком случае он будет предназначен только для получения писем. -</li><li>При необходимости введите <strong>Пароль</strong> учетной записи (если он не введен, программа запрашивает его для получения писем). </li></ul><ul><li>При необходимости включите флажок <strong>Безопасная проверка пароля</strong>. +</li><li>При необходимости введите <strong>Пароль</strong> учетной записи (если он не введен, программа запрашивает его для получения писем). </li></ul><ul><li>Выберите <strong>Протокол</strong> сервера входящей почты: <strong>POP</strong> или <strong>IMAP</strong>. </li><li>В поле <strong>Сервер</strong> укажите адрес POP3 сервера, например, "imap.Server.net".  -</li><li>Выберите <strong>Протокол</strong> сервера входящей почты: POP или IMAP. </li><li>Укажите <strong>Порт</strong> компьютера для получения входящей почты, например, 993. -</li><li>Включите флажок <strong>Использовать безопасное соединение (SSL)</strong>. -</li><li>Включите флажок <strong>Оставлять копии писем на сервере</strong>, для того чтобы программа не удалила письма в папке "Входящие" почтового ящика электронной почты. По умолчанию флажок отключен, в этом случае все письма после получения будут удалены с почтового сервера. -</li><li>Определите срок хранения писем на почтовом сервере с помощью поля <strong>Удалять письма с сервера через</strong> - например, через "10 дней".</li></ul><h3>Прочие настройки</h3> +</li><li>Выберите, когда производить <strong>Шифрование</strong>: +<ul><li><strong>Авто</strong>; +</li><li><strong>Всегда (SSL)</strong>.</li></ul></li><li>Если выбран протокол сервера входящей почты <strong>POP</strong>, можно изменить настройки хранения электронной почты на сервере: +<ul><li>Включите флажок <strong>Оставлять копии писем на сервере</strong>, для того чтобы программа не удалила письма в папке "Входящие" почтового ящика электронной почты. По умолчанию флажок отключен, в этом случае все письма после получения будут удалены с почтового сервера. После этого стаовится доступным флажок: +<ul><li>Определите срок хранения писем на почтовом сервере с помощью флажка <strong>Удалять письма с сервера через</strong> - например, через "10 дней".</li></ul></li></ul></li></ul><h3>Прочие настройки</h3> <ul><li>Укажите <strong>Длительность ожидания сервера</strong> - например, "30 сек".</li></ul><h3>Проверка настроек</h3> <ul><li> <p>Нажмите <strong>Проверить настройки</strong> для проверки введенных параметров учетной записи.</p> diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Module.bsl index 394fa45a7..96a033d2a 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Module.bsl @@ -57,6 +57,15 @@ Элементы.ГруппаДляКогоУчетнаяЗапись.Доступность = Пользователи.ЭтоПолноправныйПользователь(); ВладелецУчетнойЗаписи = Объект.ВладелецУчетнойЗаписи; + ТребуетсяАвторизацияПриОтправкеПисем = ЗначениеЗаполнено(Объект.ПользовательSMTP); + Элементы.АвторизацияПриОтправкеПисем.Доступность = ТребуетсяАвторизацияПриОтправкеПисем; + + ШифрованиеПриОтправкеПочты = ?(Объект.ИспользоватьЗащищенноеСоединениеДляИсходящейПочты, "SSL", "Авто"); + ШифрованиеПриПолученииПочты = ?(Объект.ИспользоватьЗащищенноеСоединениеДляВходящейПочты, "SSL", "Авто"); + + СпособАвторизацииПриОтправкеПочты = ?(Объект.ТребуетсяВходНаСерверПередОтправкой, "POP", "SMTP"); + + РеквизитыТребующиеВводаПароляДляИзменения = Справочники.УчетныеЗаписиЭлектроннойПочты.РеквизитыТребующиеВводаПароляДляИзменения(); КонецПроцедуры &НаСервере @@ -136,8 +145,11 @@ Объект.ВладелецУчетнойЗаписи = Неопределено; КонецЕсли; - ТребуетсяПроверкаПароля = Объект.ВладелецУчетнойЗаписи <> ВладелецУчетнойЗаписи - Или ЗначениеЗаполнено(Объект.ВладелецУчетнойЗаписи); + ЗначенияРеквизитовПередЗаписью = Новый Структура(РеквизитыТребующиеВводаПароляДляИзменения); + ЗаполнитьЗначенияСвойств(ЗначенияРеквизитовПередЗаписью, Объект); + + ТребуетсяПроверкаПароля = ТребуетсяПроверкаПароля(Объект.Ссылка, ЗначенияРеквизитовПередЗаписью); + Если Не ПараметрыЗаписи.Свойство("ПарольВведен") И ТребуетсяПроверкаПароля Тогда Отказ = Истина; ЗапроситьПароль(ПараметрыЗаписи); @@ -203,16 +215,6 @@ Объект.АдресЭлектроннойПочты = СокрЛП(Объект.АдресЭлектроннойПочты); КонецПроцедуры -&НаКлиенте -Процедура ИспользоватьЗащищенноеСоединениеДляИсходящейПочтыПриИзменении(Элемент) - УстановитьПортИсходящейПочты(); -КонецПроцедуры - -&НаКлиенте -Процедура ИспользоватьЗащищенноеСоединениеДляВходящейПочтыПриИзменении(Элемент) - УстановитьПортВходящейПочты(); -КонецПроцедуры - &НаКлиенте Процедура ОставлятьКопииПисемНаСервереПриИзменении(Элемент) УстановитьДоступностьЭлементов(); @@ -233,11 +235,6 @@ ПарольSMTPИзменен = Истина; КонецПроцедуры -&НаКлиенте -Процедура ТребуетсяВходНаСерверПередОтправкойПриИзменении(Элемент) - Элементы.ПолучениеПисем.Доступность = ДоступноПолучениеПисем Или Объект.ТребуетсяВходНаСерверПередОтправкой; -КонецПроцедуры - &НаКлиенте Процедура ДляКогоУчетнаяЗаписьПриИзменении(Элемент) Элементы.ПользовательУчетнойЗаписи.Доступность = ВидУчетнойЗаписи = "Персональная"; @@ -249,6 +246,34 @@ ОповеститьОбИзмененииВладельцаУчетнойЗаписи(); КонецПроцедуры +&НаКлиенте +Процедура ТребуетсяВходНаСерверПередОтправкойПриИзменении(Элемент) + Элементы.ПолучениеПисем.Доступность = ДоступноПолучениеПисем Или Объект.ТребуетсяВходНаСерверПередОтправкой; +КонецПроцедуры + +&НаКлиенте +Процедура ТребуетсяАвторизацияПриОтправкеПисемПриИзменении(Элемент) + Элементы.АвторизацияПриОтправкеПисем.Доступность = ТребуетсяАвторизацияПриОтправкеПисем; +КонецПроцедуры + +&НаКлиенте +Процедура ШифрованиеПриОтправкеПочтыПриИзменении(Элемент) + Объект.ИспользоватьЗащищенноеСоединениеДляИсходящейПочты = ШифрованиеПриОтправкеПочты = "SSL"; + УстановитьПортИсходящейПочты(); +КонецПроцедуры + +&НаКлиенте +Процедура ШифрованиеПриПолученииПочтыПриИзменении(Элемент) + Объект.ИспользоватьЗащищенноеСоединениеДляВходящейПочты = ШифрованиеПриПолученииПочты = "SSL"; + УстановитьПортВходящейПочты(); +КонецПроцедуры + +&НаКлиенте +Процедура СпособАвторизацииПриОтправкеПочтыПриИзменении(Элемент) + Объект.ТребуетсяВходНаСерверПередОтправкой = ?(СпособАвторизацииПриОтправкеПочты = "POP", Истина, Ложь); + Элементы.ЛогинИПарольПриОтправкеПисем.Доступность = Не Объект.ТребуетсяВходНаСерверПередОтправкой; +КонецПроцедуры + #КонецОбласти #Область ОбработчикиКомандФормы @@ -395,4 +420,9 @@ КонецЕсли; КонецПроцедуры +&НаСервереБезКонтекста +Функция ТребуетсяПроверкаПароля(Ссылка, ЗначенияРеквизитов) + Возврат Справочники.УчетныеЗаписиЭлектроннойПочты.ТребуетсяПроверкаПароля(Ссылка, ЗначенияРеквизитов); +КонецФункции + #КонецОбласти diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Help/ru.html b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Help/ru.html index 886e78949..06df93af5 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Help/ru.html +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Help/ru.html @@ -10,11 +10,13 @@ </li><li>Настройка системной учетной записи производится по соответствующей команде в разделе <strong>Администрирование - Органайзер</strong>. Также можно <img src="StdPicture.Change"></img><strong>Изменить</strong> ее в списке.</li></ul><h3>Ввод учетной записи электронной почты</h3> <ul><li>При попытке сохранения программа проверяет введенные учетные записи электронной почты (пытается отослать пробное сообщение). Учетные записи, не прошедшие проверку, не сохраняются. </li><li>Нажмите <strong>Создать</strong>, введите необходимые поля: -<ul><li>Укажите <strong>Адрес электронной почты</strong> учетной записи в формате <a href="mailto:name@server.net">name@server.net</a>; -</li><li>Введите <strong>Пароль</strong> учетной записи. Для системных учетных записей рекомендуется запомнить пароль, для того чтобы программа могла рассылать сообщения от такой учетной записи без участия пользователя. Тем не менее, решение о хранении паролей в информационной базе принимается в каждом случае индивидуально; +<ul><li>Укажите <strong>Адрес почты</strong> учетной записи в формате <a href="mailto:name@server.net">name@server.net</a>; +</li><li>Введите <strong>Пароль</strong> учетной записи; </li><li>Установите с помощью флажков, как <strong>Использовать учетную запись</strong>: <ul><li><strong>Для отправки почты</strong>; -</li><li><strong>Для получения почты</strong>;</li></ul></li><li>Укажите <strong>Имя отправителя</strong> (Ваше имя или название организации); +</li><li><strong>Для получения почты</strong>;</li></ul></li><li>Укажите, <strong>Для кого учетная запись</strong>: +<ul><li><strong>Для всех</strong>; +</li><li><strong>Только для меня</strong>.</li></ul></li><li>Укажите <strong>Имя отправителя</strong> (Ваше имя или название организации); </li><li>С помощью переключателя определите способ создания учетной записи: <ul><li><strong>Определить параметры подключения автоматически</strong> (рекомендуется); <ul><li>Нажмите <strong>Создать</strong>. Программа предпримет попытку автоматической настройки и проверки учетной записи. Следуйте указаниям программы. При этом если при автоматической настройке произошел сбой, можно попытаться настроить параметры вручную (см. ниже). </li></ul></li><li><strong>Настроить параметры подключения вручную</strong>;</li></ul></li><li> diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/ManagerModule.bsl b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/ManagerModule.bsl index e7666a3ef..7512b3747 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/ManagerModule.bsl +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/ManagerModule.bsl @@ -45,6 +45,80 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда +#Область СлужебныйПрограммныйИнтерфейс + +// Регистрирует на плане обмена ОбновлениеИнформационнойБазы объекты, +// которые необходимо обновить на новую версию. +// +Процедура ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию(Параметры) Экспорт + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Взаимодействия") Тогда + МодульВзаимодействия = ОбщегоНазначения.ОбщийМодуль("Взаимодействия"); + МодульВзаимодействия.ЗарегистрироватьУчетныеЗаписиЭлектроннойПочтыКОбработкеДляПереходаНаНовуюВерсию(Параметры); + КонецЕсли; + +КонецПроцедуры + +Процедура ОбработатьДанныеДляПереходаНаНовуюВерсию(Параметры) Экспорт + + УчетныеЗаписи = Новый Массив; + Выборка = ОбновлениеИнформационнойБазы.ВыбратьСсылкиДляОбработки(Параметры.Очередь, "Справочник.УчетныеЗаписиЭлектроннойПочты"); + Пока Выборка.Следующий() Цикл + УчетныеЗаписи.Добавить(Выборка.Ссылка); + КонецЦикла; + + ТекстЗапроса = + "ВЫБРАТЬ + | УчетныеЗаписиЭлектроннойПочты.Ссылка КАК Ссылка + |ИЗ + | Справочник.УчетныеЗаписиЭлектроннойПочты КАК УчетныеЗаписиЭлектроннойПочты + |ГДЕ + | УчетныеЗаписиЭлектроннойПочты.Ссылка В(&УчетныеЗаписи)"; + + Запрос = Новый Запрос(ТекстЗапроса); + Запрос.УстановитьПараметр("УчетныеЗаписи", УчетныеЗаписи); + + Блокировка = Новый БлокировкаДанных; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Взаимодействия") Тогда + МодульВзаимодействия = ОбщегоНазначения.ОбщийМодуль("Взаимодействия"); + МодульВзаимодействия.ПередУстановкойБлокировкиВОбработчикеОбновленияУчетныхЗаписейЭлектроннойПочты(Блокировка); + КонецЕсли; + Блокировка.Добавить("Справочник.УчетныеЗаписиЭлектроннойПочты"); + + НачатьТранзакцию(); + Попытка + Блокировка.Заблокировать(); + + ВладельцыУчетныхЗаписей = Новый Соответствие; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Взаимодействия") Тогда + МодульВзаимодействия = ОбщегоНазначения.ОбщийМодуль("Взаимодействия"); + ВладельцыУчетныхЗаписей = МодульВзаимодействия.ВладельцыУчетныхЗаписейЭлектроннойПочты(УчетныеЗаписи); + КонецЕсли; + + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + УчетнаяЗапись = Выборка.Ссылка.ПолучитьОбъект(); + УчетнаяЗапись.ДополнительныеСвойства.Вставить("НеПроверятьИзменениеНастроек"); + Если ВладельцыУчетныхЗаписей[Выборка.Ссылка] <> Неопределено Тогда + УчетнаяЗапись.ВладелецУчетнойЗаписи = ВладельцыУчетныхЗаписей[Выборка.Ссылка]; + КонецЕсли; + ОбновлениеИнформационнойБазы.ЗаписатьДанные(УчетнаяЗапись); + КонецЦикла; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Обновление персональных учетных записей'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ВызватьИсключение; + КонецПопытки; + + Параметры.ОбработкаЗавершена = ОбновлениеИнформационнойБазы.ОбработкаДанныхЗавершена(Параметры.Очередь, "Справочник.УчетныеЗаписиЭлектроннойПочты"); + +КонецПроцедуры + +#КонецОбласти + #Область СлужебныеПроцедурыИФункции Функция РазрешенияУчетныхЗаписей(УчетнаяЗапись = Неопределено) Экспорт @@ -515,6 +589,15 @@ Результат.Колонки.Добавить("ПортСервераВходящейПочты"); Результат.Колонки.Добавить("ИспользоватьЗащищенноеСоединениеДляВходящейПочты"); + // icloud.com + Если ИмяСервераВУчетнойЗаписи = "icloud.com" Тогда + ВариантНастройки = Результат.Добавить(); + ВариантНастройки.СерверИсходящейПочты = "imap.mail.me.com"; + ВариантНастройки.ПортСервераИсходящейПочты = 993; + ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляИсходящейПочты = Истина; + Возврат Результат; + КонецЕсли; + // Стандартные настройки, подходящие для ящиков gmail, yandex и mail.ru // имя сервера с префиксом "imap.", защищенное соединение. ВариантНастройки = Результат.Добавить(); @@ -629,6 +712,14 @@ Результат.Колонки.Добавить("ПортСервераИсходящейПочты"); Результат.Колонки.Добавить("ИспользоватьЗащищенноеСоединениеДляИсходящейПочты"); + Если ИмяСервераВУчетнойЗаписи = "icloud.com" Тогда + ВариантНастройки = Результат.Добавить(); + ВариантНастройки.СерверИсходящейПочты = "smtp.mail.me.com"; + ВариантНастройки.ПортСервераИсходящейПочты = 587; + ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляИсходящейПочты = Ложь; + Возврат Результат; + КонецЕсли; + // Стандартные настройки, подходящие для ящиков gmail, yandex и mail.ru // имя сервера с префиксом "smtp.", защищенное соединение, порт 465. ВариантНастройки = Результат.Добавить(); @@ -688,6 +779,34 @@ КонецФункции +Функция РеквизитыТребующиеВводаПароляДляИзменения() Экспорт + + Возврат "ИспользоватьДляОтправки,ИспользоватьДляПолучения,СерверВходящейПочты,СерверИсходящейПочты,ВладелецУчетнойЗаписи,ИспользоватьЗащищенноеСоединениеДляВходящейПочты,ИспользоватьЗащищенноеСоединениеДляИсходящейПочты,ИспользоватьБезопасныйВходНаСерверВходящейПочты,ИспользоватьБезопасныйВходНаСерверИсходящейПочты,Пользователь,ПользовательSMTP"; + +КонецФункции + +Функция ТребуетсяПроверкаПароля(Ссылка, ЗначенияРеквизитовПередЗаписью) Экспорт + + Если Ссылка.Пустая() Тогда + Возврат Ложь; + КонецЕсли; + + СписокРеквизитов = РеквизитыТребующиеВводаПароляДляИзменения(); + ЗаписанныеЗначенияРеквизитов = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Ссылка, СписокРеквизитов); + + Результат = ЗначениеЗаполнено(ЗаписанныеЗначенияРеквизитов.ВладелецУчетнойЗаписи); + Если Результат Тогда + ДоИзменения = Новый Структура(СписокРеквизитов); + ЗаполнитьЗначенияСвойств(ДоИзменения, ЗаписанныеЗначенияРеквизитов); + ПослеИзменения = Новый Структура(СписокРеквизитов); + ЗаполнитьЗначенияСвойств(ПослеИзменения, ЗначенияРеквизитовПередЗаписью); + Результат = ОбщегоНазначения.ЗначениеВСтрокуXML(ДоИзменения) <> ОбщегоНазначения.ЗначениеВСтрокуXML(ПослеИзменения); + КонецЕсли; + + Возврат Результат; + +КонецФункции + #КонецОбласти #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/ObjectModule.bsl b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/ObjectModule.bsl index 916c99ed3..9a66b05b6 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/ObjectModule.bsl +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/ObjectModule.bsl @@ -53,24 +53,20 @@ Возврат; КонецЕсли; + Если Пользователь <> СокрЛП(Пользователь) Тогда + Пользователь = СокрЛП(Пользователь); + КонецЕсли; + + Если ПользовательSMTP <> СокрЛП(ПользовательSMTP) Тогда + ПользовательSMTP = СокрЛП(ПользовательSMTP); + КонецЕсли; + Если Не ДополнительныеСвойства.Свойство("НеПроверятьИзменениеНастроек") И Не Ссылка.Пустая() Тогда - - СписокРеквизитов = "ИспользоватьДляОтправки,ИспользоватьДляПолучения,СерверВходящейПочты,СерверИсходящейПочты,ВладелецУчетнойЗаписи,ИспользоватьЗащищенноеСоединениеДляВходящейПочты,ИспользоватьЗащищенноеСоединениеДляИсходящейПочты,ИспользоватьБезопасныйВходНаСерверВходящейПочты,ИспользоватьБезопасныйВходНаСерверИсходящейПочты,Пользователь,ПользовательSMTP"; - ЗначенияРеквизитов = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Ссылка, СписокРеквизитов); - - ТребуетсяПроверкаПароля = ЗначениеЗаполнено(ЗначенияРеквизитов.ВладелецУчетнойЗаписи); + ТребуетсяПроверкаПароля = Справочники.УчетныеЗаписиЭлектроннойПочты.ТребуетсяПроверкаПароля(Ссылка, ЭтотОбъект); Если ТребуетсяПроверкаПароля Тогда - ДоИзменения = Новый Структура(СписокРеквизитов); - ЗаполнитьЗначенияСвойств(ДоИзменения, ЗначенияРеквизитов); - ПослеИзменения = Новый Структура(СписокРеквизитов); - ЗаполнитьЗначенияСвойств(ПослеИзменения, ЭтотОбъект); - ТребуетсяПроверкаПароля = ОбщегоНазначения.ЗначениеВСтрокуXML(ДоИзменения) <> ОбщегоНазначения.ЗначениеВСтрокуXML(ПослеИзменения); - КонецЕсли; - - Если ТребуетсяПроверкаПароля Тогда - ТекстСообщенияОбОшибке = НСтр("ru = 'Не подтвержден пароль для изменения настроек учетной записи.'"); ПроверкаПароля = Неопределено; Если Не ДополнительныеСвойства.Свойство("Пароль", ПроверкаПароля) Или Не ПарольВведенВерно(ПроверкаПароля) Тогда + ТекстСообщенияОбОшибке = НСтр("ru = 'Не подтвержден пароль для изменения настроек учетной записи.'"); ВызватьИсключение ТекстСообщенияОбОшибке; КонецЕсли; КонецЕсли; diff --git a/SSL/src/Catalogs/Файлы/Forms/Файлы/Module.bsl b/SSL/src/Catalogs/Файлы/Forms/Файлы/Module.bsl index 6401ee0fa..55aa0f823 100644 --- a/SSL/src/Catalogs/Файлы/Forms/Файлы/Module.bsl +++ b/SSL/src/Catalogs/Файлы/Forms/Файлы/Module.bsl @@ -665,6 +665,8 @@ &НаКлиенте Процедура Отправить(Команда) + ПриОтправкеФайловПочтой(ПараметрыОтправки, Элементы.Список.ВыделенныеСтроки, Элементы.Папки.ТекущиеДанные.Ссылка , УникальныйИдентификатор); + РаботаСФайламиСлужебныйКлиент.ОтправитьФайлыПоПочте( Элементы.Список.ВыделенныеСтроки, УникальныйИдентификатор, ПараметрыОтправки, Истина); @@ -1433,6 +1435,11 @@ ОбщегоНазначения.ХранилищеОбщихНастроекСохранить(ТипСправочникаСФайлами, "Предпросмотр", Предпросмотр); КонецПроцедуры +&НаСервереБезКонтекста +Процедура ПриОтправкеФайловПочтой(ПараметрыОтправки, Знач ФайлыДляОтправки, ВладелецФайлов, УникальныйИдентификатор) + РаботаСФайламиПереопределяемый.ПриОтправкеФайловПочтой(ПараметрыОтправки, ФайлыДляОтправки, ВладелецФайлов, УникальныйИдентификатор); +КонецПроцедуры + &НаКлиенте Процедура УстановитьВидимостьПредпросмотра(ИспользоватьПредпросмотр) diff --git a/SSL/src/Catalogs/Файлы/ManagerModule.bsl b/SSL/src/Catalogs/Файлы/ManagerModule.bsl index d19ff5510..c827dc12f 100644 --- a/SSL/src/Catalogs/Файлы/ManagerModule.bsl +++ b/SSL/src/Catalogs/Файлы/ManagerModule.bsl @@ -63,7 +63,6 @@ // которые необходимо обновить на новую версию. Процедура ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию(Параметры) Экспорт - УстановитьПривилегированныйРежим(Истина); ОтработаныВсеФайлы = Ложь; Ссылка = ""; @@ -83,14 +82,13 @@ | |УПОРЯДОЧИТЬ ПО | Ссылка"; - Запрос.УстановитьПараметр("Ссылка", Ссылка); + Запрос.УстановитьПараметр("Ссылка", Ссылка); МассивСсылок = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); ОбновлениеИнформационнойБазы.ОтметитьКОбработке(Параметры, МассивСсылок); КоличествоСсылок = МассивСсылок.Количество(); - Если КоличествоСсылок < 1000 Тогда ОтработаныВсеФайлы = Истина; КонецЕсли; @@ -116,6 +114,17 @@ НачатьТранзакцию(); Попытка + + БлокировкаДанных = Новый БлокировкаДанных; + ЭлементБлокировкиДанных = БлокировкаДанных.Добавить("Справочник.Файлы"); + ЭлементБлокировкиДанных.УстановитьЗначение("Ссылка", Выборка.Ссылка); + + ЭлементБлокировкиДанных = БлокировкаДанных.Добавить("Справочник.ВерсииФайлов"); + ЭлементБлокировкиДанных.УстановитьЗначение("Ссылка", Выборка.Ссылка.ТекущаяВерсия); + ЭлементБлокировкиДанных.Режим = РежимБлокировкиДанных.Разделяемый; + + БлокировкаДанных.Заблокировать(); + ОбновляемыйФайл = Выборка.Ссылка.ПолучитьОбъект(); ОбновляемыйФайл.ДатаМодификацииУниверсальная = ОбновляемыйФайл.ТекущаяВерсия.ДатаМодификацииУниверсальная; ОбновляемыйФайл.ТипХраненияФайла = ОбновляемыйФайл.ТекущаяВерсия.ТипХраненияФайла; diff --git a/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаСписка/Module.bsl index 7c719934d..d8641c746 100644 --- a/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаСписка/Module.bsl @@ -27,7 +27,6 @@ Функция ВыполнитьКопированиеЭлемента(ЭлементКопирования) НачатьТранзакцию(); - Попытка ШаблонАнкетыОбъект = Справочники.ШаблоныАнкет.СоздатьЭлемент(); @@ -78,7 +77,7 @@ | Ссылка ИЕРАРХИЯ, | Код"; - Запрос.УстановитьПараметр("ШаблонАнкеты",ЭлементКопирования); + Запрос.УстановитьПараметр("ШаблонАнкеты", ЭлементКопирования); Результат = Запрос.Выполнить(); Если Результат.Пустой() Тогда @@ -87,9 +86,7 @@ КонецЕсли; Выборка = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией); - - ДобавитьЭлементыСправочникаВопросыШаблонаАнкеты(ШаблонАнкетыОбъект.Ссылка,Выборка); - + ДобавитьЭлементыСправочникаВопросыШаблонаАнкеты(ШаблонАнкетыОбъект.Ссылка, Выборка); ЗафиксироватьТранзакцию(); Исключение @@ -104,7 +101,7 @@ КонецФункции &НаСервере -Процедура ДобавитьЭлементыСправочникаВопросыШаблонаАнкеты(Ссылка,Выборка,Родитель = Неопределено) +Процедура ДобавитьЭлементыСправочникаВопросыШаблонаАнкеты(Ссылка, Выборка, Родитель = Неопределено) ВопросыСУсловием = Новый Соответствие; diff --git a/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаЭлемента/Module.bsl index be5ad4d95..f521956ee 100644 --- a/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаЭлемента/Module.bsl @@ -363,7 +363,6 @@ КонецЕсли; Если ТекущиеДанные.ТипСтроки = "Корень" Тогда - Отказ = Истина; Возврат; ИначеЕсли ТекущиеДанные.ТипСтроки = "Раздел" ИЛИ (ТекущиеДанные.ТипСтроки = "Вопрос" И ТекущиеДанные.ТипВопроса <> ПредопределенноеЗначение("Перечисление.ТипыВопросовШаблонаАнкеты.Табличный") diff --git a/SSL/src/Catalogs/ШаблоныСообщений/Forms/СформироватьСообщение/Form.form b/SSL/src/Catalogs/ШаблоныСообщений/Forms/СформироватьСообщение/Form.form index 9795bf0ab..cda65c9b4 100644 --- a/SSL/src/Catalogs/ШаблоныСообщений/Forms/СформироватьСообщение/Form.form +++ b/SSL/src/Catalogs/ШаблоныСообщений/Forms/СформироватьСообщение/Form.form @@ -57,7 +57,6 @@ <segments>Шаблоны</segments> </dataPath> <titleLocation>None</titleLocation> - <excludedCommands>Copy</excludedCommands> <excludedCommands>Delete</excludedCommands> <excludedCommands>EndEdit</excludedCommands> <excludedCommands>MoveDown</excludedCommands> @@ -118,6 +117,10 @@ <event>BeforeAddRow</event> <name>ШаблоныПередНачаломДобавления</name> </handlers> + <handlers> + <event>BeforeDeleteRow</event> + <name>ШаблоныПередУдалением</name> + </handlers> <handlers> <event>OnActivateRow</event> <name>ШаблоныПриАктивизацииСтроки</name> @@ -212,10 +215,10 @@ <id>40</id> <autoFill>true</autoFill> </contextMenu> + <changeRowSet>true</changeRowSet> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> <autoMaxRowsCount>true</autoMaxRowsCount> - <selectionMode>MultiRow</selectionMode> <rowSelectionMode>Row</rowSelectionMode> <headerHeight>1</headerHeight> <footerHeight>1</footerHeight> @@ -226,7 +229,6 @@ <horizontalLinesBWA>false</horizontalLinesBWA> <verticalLinesBWA>false</verticalLinesBWA> <useAlternationRowColorBWA>false</useAlternationRowColorBWA> - <autoInsertNewRow>true</autoInsertNewRow> <searchOnInput>Auto</searchOnInput> <initialListView>Auto</initialListView> <horizontalStretch>true</horizontalStretch> @@ -515,6 +517,32 @@ <representationInContextMenu>Auto</representationInContextMenu> <locationInCommandBar>InAdditionalSubmenu</locationInCommandBar> </items> + <items xsi:type="form:Button"> + <name>ФормаСкопировать</name> + <id>78</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <extendedTooltip> + <name>ФормаСкопироватьРасширеннаяПодсказка</name> + <id>79</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <commandName>Form.Item.Шаблоны.StandardCommand.Copy</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>74</id> @@ -811,10 +839,10 @@ </edit> </attributes> <attributes> - <name>ПустойСписокШаблонов</name> + <name>ПоказыватьФормуВыбораШаблонов</name> <title> <key>ru</key> - <value>Пустой список шаблонов</value> + <value>Показывать форму выбора шаблонов</value> 7 @@ -895,6 +923,55 @@ true + + ПараметрыСообщения + + <key>ru</key> + <value>Параметры сообщения</value> + + 12 + + + true + + + true + + + + ВладелецШаблона + + <key>ru</key> + <value>Владелец шаблона</value> + + 13 + + DefinedType.ВладелецШаблонаСообщения + + + true + + + true + + + + ПодготовитьШаблон + + <key>ru</key> + <value>Подготовить шаблон</value> + + 14 + + Boolean + + + true + + + true + + СформироватьИОтправить @@ -988,6 +1065,20 @@ <types>Boolean</types> </valueType> </parameters> + <parameters> + <name>ПараметрыСообщения</name> + <valueType/> + </parameters> + <parameters> + <name>ВладелецШаблона</name> + <valueType/> + </parameters> + <parameters> + <name>ПодготовитьШаблон</name> + <valueType> + <types>Boolean</types> + </valueType> + </parameters> <commandInterface> <navigationPanel/> <commandBar/> diff --git a/SSL/src/Catalogs/ШаблоныСообщений/Forms/СформироватьСообщение/Module.bsl b/SSL/src/Catalogs/ШаблоныСообщений/Forms/СформироватьСообщение/Module.bsl index 93a6d6208..fc2e747c8 100644 --- a/SSL/src/Catalogs/ШаблоныСообщений/Forms/СформироватьСообщение/Module.bsl +++ b/SSL/src/Catalogs/ШаблоныСообщений/Forms/СформироватьСообщение/Module.bsl @@ -3,11 +3,14 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - Предмет = Параметры.Предмет; - ВидСообщения = Параметры.ВидСообщения; - РежимВыбора = Параметры.РежимВыбора; + Предмет = Параметры.Предмет; + ВидСообщения = Параметры.ВидСообщения; + РежимВыбора = Параметры.РежимВыбора; + ВладелецШаблона = Параметры.ВладелецШаблона; + ПараметрыСообщения = Параметры.ПараметрыСообщения; + ПодготовитьШаблон = Параметры.ПодготовитьШаблон; - Если ЗначениеЗаполнено(Предмет) Тогда + Если ЗначениеЗаполнено(Предмет) И ТипЗнч(Предмет) <> Тип("Строка") Тогда ПолноеИмяТипаОснования = Предмет.Метаданные().ПолноеИмя(); КонецЕсли; @@ -23,28 +26,22 @@ Если НЕ ПравоДоступа("Изменение", Метаданные.Справочники.ШаблоныСообщений) Тогда ЕстьПравоИзменения = Ложь; Элементы.ФормаИзменить.Видимость = Ложь; - Элементы.ФормаСоздать.Видимость = Ложь; + Элементы.ФормаСоздать.Видимость = Ложь; Иначе ЕстьПравоИзменения = Истина; КонецЕсли; Если РежимВыбора Тогда Элементы.ФормаСформироватьИОтправить.Видимость = Ложь; + Элементы.ФормаСформировать.Заголовок = НСтр("ru='Выбрать'"); + ИначеЕсли ПодготовитьШаблон Тогда + Элементы.ФормаСформироватьИОтправить.Видимость = Ложь; КонецЕсли; ЗаполнитьСписокДоступныхШаблонов(); КонецПроцедуры -&НаКлиенте -Процедура ПриОткрытии(Отказ) - Если ПустойСписокШаблонов Тогда - ПараметрыОтправки = КонструкторПараметровОтправки(); - ПараметрыОтправки.ДополнительныеПараметры.ПреобразовыватьHTMLДляФорматированногоДокумента = Ложь; - СформироватьСообщениеДляОтправки(ПараметрыОтправки); - КонецЕсли; -КонецПроцедуры - &НаКлиенте Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) Если ИмяСобытия = "Запись_ШаблоныСообщений" Тогда @@ -60,6 +57,17 @@ КонецЕсли; КонецПроцедуры +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + Если НЕ ПоказыватьФормуВыбораШаблонов Тогда + ПараметрыОтправки = КонструкторПараметровОтправки(); + ПараметрыОтправки.ДополнительныеПараметры.ПреобразовыватьHTMLДляФорматированногоДокумента = Ложь; + СформироватьСообщениеДляОтправки(ПараметрыОтправки); + КонецЕсли; + +КонецПроцедуры + #КонецОбласти #Область ОбработчикиСобытийЭлементовТаблицыФормыШаблоны @@ -67,7 +75,16 @@ &НаКлиенте Процедура ШаблоныПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр) Отказ = Истина; - СоздатьНовыйШаблон(); + Если Копирование И НЕ Группа Тогда + СоздатьНовыйШаблон(Элемент.ТекущиеДанные.Ссылка); + Иначе + СоздатьНовыйШаблон(); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ШаблоныПередУдалением(Элемент, Отказ) + Отказ = Истина; КонецПроцедуры &НаКлиенте @@ -157,6 +174,11 @@ Возврат; КонецЕсли; + Если РежимВыбора Тогда + Закрыть(ТекущиеДанные.Ссылка); + Возврат; + КонецЕсли; + ПараметрыОтправки = КонструкторПараметровОтправки(ТекущиеДанные.Ссылка); ПараметрыОтправки.ДополнительныеПараметры.ПреобразовыватьHTMLДляФорматированногоДокумента = Истина; @@ -177,10 +199,18 @@ АдресРезультата = СформироватьСообщениеНаСервере(АдресВременногоХранилища, ПараметрыОтправки, ВидСообщения); Результат = ПолучитьИзВременногоХранилища(АдресРезультата); + + Результат.Вставить("Предмет", Предмет); + Результат.Вставить("Шаблон", ПараметрыОтправки.Шаблон); + Если ПараметрыОтправки.ДополнительныеПараметры.Свойство("ПараметрыСообщения") + И ТипЗнч(ПараметрыОтправки.ДополнительныеПараметры.ПараметрыСообщения) = Тип("Структура") Тогда + ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(Результат, ПараметрыСообщения, Ложь); + КонецЕсли; + Если ПараметрыОтправки.ДополнительныеПараметры.ОтправитьСразу Тогда ПослеФормированияИОтправкиСообщения(Результат, ПараметрыОтправки); Иначе - Если РежимВыбора Тогда + Если ПодготовитьШаблон Тогда Закрыть(Результат); Иначе Закрыть(); @@ -231,7 +261,7 @@ &НаКлиенте Процедура ОтравитьСообщениеПроверкаУчетнойЗаписиВыполнена(УчетнаяЗаписьНастроена, ПараметрыОтправки) Экспорт - Если УчетнаяЗаписьНастроена Тогда + Если УчетнаяЗаписьНастроена = Истина Тогда СформироватьСообщениеДляОтправки(ПараметрыОтправки); КонецЕсли; @@ -263,6 +293,7 @@ КонецЕсли; ДополнительныеПараметры.ИсточникКонтактнойИнформации = Предмет; + ДополнительныеПараметры.Вставить("Предмет", Предмет); Текст = ?(Сообщение.Свойство("Текст"), Сообщение.Текст, ""); Получатель = ?(Сообщение.Свойство("Получатель"), Сообщение.Получатель.ВыгрузитьЗначения(), Новый СписокЗначений); МодульОтправкаSMSКлиент.ОтправитьSMS(Получатель, Текст, ДополнительныеПараметры); @@ -288,15 +319,9 @@ &НаКлиенте Функция КонструкторПараметровОтправки(Шаблон = Неопределено) - ПараметрыОтправки = Новый Структура(); - ПараметрыОтправки.Вставить("Шаблон", Шаблон); - ПараметрыОтправки.Вставить("Предмет", Предмет); - ПараметрыОтправки.Вставить("УникальныйИдентификатор", УникальныйИдентификатор); - ПараметрыОтправки.Вставить("ДополнительныеПараметры", Новый Структура); - ПараметрыОтправки.ДополнительныеПараметры.Вставить("ПреобразовыватьHTMLДляФорматированногоДокумента", Ложь); - ПараметрыОтправки.ДополнительныеПараметры.Вставить("ВидСообщения", ВидСообщения); - ПараметрыОтправки.ДополнительныеПараметры.Вставить("ПроизвольныеПараметры", Новый Соответствие); - ПараметрыОтправки.ДополнительныеПараметры.Вставить("ОтправитьСразу", Ложь); + ПараметрыОтправки = ШаблоныСообщенийКлиентСервер.КонструкторПараметровОтправки(Шаблон, Предмет, УникальныйИдентификатор); + ПараметрыОтправки.ДополнительныеПараметры.ВидСообщения = ВидСообщения; + ПараметрыОтправки.ДополнительныеПараметры.ПараметрыСообщения = ПараметрыСообщения; Возврат ПараметрыОтправки; @@ -312,11 +337,17 @@ КонецПроцедуры &НаКлиенте -Процедура СоздатьНовыйШаблон() +Процедура СоздатьНовыйШаблон(ЗначениеКопирования = Неопределено) + + ПараметрыФормы = Новый Структура(); + ПараметрыФормы.Вставить("ВидСообщения" , ВидСообщения); + ПараметрыФормы.Вставить("ПолноеИмяТипаОснования", ПолноеИмяТипаОснования); + ПараметрыФормы.Вставить("ТолькоДляАвтора", Истина); + ПараметрыФормы.Вставить("ВладелецШаблона", ВладелецШаблона); + ПараметрыФормы.Вставить("ЗначениеКопирования", ЗначениеКопирования); - ПараметрыФормы = Новый Структура("ВидСообщения, ПолноеИмяТипаОснования, ТолькоДляАвтора", ВидСообщения, ПолноеИмяТипаОснования, Истина); Оповещение = Новый ОписаниеОповещения("ОбновитьОкно", ЭтотОбъект); - ОткрытьФорму("Справочник.ШаблоныСообщений.ФормаОбъекта", ПараметрыФормы, ЭтотОбъект,,,, ) + ОткрытьФорму("Справочник.ШаблоныСообщений.ФормаОбъекта", ПараметрыФормы, ЭтотОбъект); КонецПроцедуры @@ -330,7 +361,7 @@ Шаблоны.Очистить(); ТипШаблона = ?(ПредназначенДляSMS, "SMS", "Письмо"); - Запрос = ШаблоныСообщенийСлужебный.ПодготовитьЗапросДляПолученияСпискаШаблонов(ТипШаблона, Предмет); + Запрос = ШаблоныСообщенийСлужебный.ПодготовитьЗапросДляПолученияСпискаШаблонов(ТипШаблона, Предмет, ВладелецШаблона); РезультатЗапроса = Запрос.Выполнить().Выбрать(); @@ -358,13 +389,15 @@ КонецЦикла; Если Шаблоны.Количество() = 0 Тогда - ПустойСписокШаблонов = Истина; - Возврат; + НастройкиШаблоновСообщений = ШаблоныСообщенийСлужебныйПовтИсп.ПриОпределенииНастроек(); + ПоказыватьФормуВыбораШаблонов = НастройкиШаблоновСообщений.ВсегдаПоказыватьФормуВыбораШаблонов; + Иначе + ПоказыватьФормуВыбораШаблонов = Истина; КонецЕсли; Шаблоны.Сортировать("Представление"); - Если НЕ РежимВыбора Тогда + Если НЕ РежимВыбора И НЕ ПодготовитьШаблон Тогда ПерваяСтрока = Шаблоны.Вставить(0); ПерваяСтрока.Имя = "<БезШаблона>"; ПерваяСтрока.Представление = НСтр("ru = '<Без шаблона>'"); @@ -372,8 +405,14 @@ Если Шаблоны.Количество() = 0 Тогда Элементы.ФормаСоздать.ТолькоВоВсехДействиях = Ложь; + Элементы.ФормаСоздать.Отображение = ОтображениеКнопки.КартинкаИТекст; + Элементы.ФормаСформировать.Доступность = Ложь; + Элементы.ФормаСформироватьИОтправить.Доступность = Ложь; + Иначе + Элементы.ФормаСформировать.Доступность = Истина; + Элементы.ФормаСформироватьИОтправить.Доступность = Истина; КонецЕсли; - + КонецПроцедуры &НаКлиенте diff --git a/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаСписка/Form.form index ea36da912..c9b11f0dc 100644 --- a/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаСписка/Form.form @@ -530,6 +530,40 @@ <autoMaxHeight>true</autoMaxHeight> </extInfo> </items> + <items xsi:type="form:FormField"> + <name>ВладелецШаблона</name> + <id>53</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible/> + <dataPath xsi:type="form:DataPath"> + <segments>Список.ВладелецШаблона</segments> + </dataPath> + <extendedTooltip> + <name>ВладелецШаблонаРасширеннаяПодсказка</name> + <id>55</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <contextMenu> + <name>ВладелецШаблонаКонтекстноеМеню</name> + <id>54</id> + <autoFill>true</autoFill> + </contextMenu> + <type>LabelField</type> + <editMode>Enter</editMode> + <showInHeader>true</showInHeader> + <headerHorizontalAlign>Left</headerHorizontalAlign> + <showInFooter>true</showInFooter> + <extInfo xsi:type="form:LabelFieldExtInfo"> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + </extInfo> + </items> <commandBarLocation>None</commandBarLocation> <autoCommandBar> <name>СписокКоманднаяПанель</name> @@ -712,15 +746,16 @@ ТОГДА &Общий ИНАЧЕ СправочникШаблоныСообщений.Назначение КОНЕЦ КАК Назначение, + СправочникШаблоныСообщений.ВладелецШаблона Как ВладелецШаблона, 0 ЕстьФайлы ИЗ Справочник.ШаблоныСообщений КАК СправочникШаблоныСообщений ГДЕ (&Назначение = "" - ИЛИ СправочникШаблоныСообщений.Назначение = &Назначение) + ИЛИ СправочникШаблоныСообщений.Назначение = &Назначение) И (СправочникШаблоныСообщений.ВладелецШаблона = Неопределено - ИЛИ &ПоказыватьКонтекстныеШаблоны) - </queryText> + ИЛИ СправочникШаблоныСообщений.ВладелецШаблона = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + ИЛИ &ПоказыватьКонтекстныеШаблоны)</queryText> <mainTable>Catalog.ШаблоныСообщений</mainTable> <dynamicDataRead>true</dynamicDataRead> <autoFillAvailableFields>true</autoFillAvailableFields> diff --git a/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаСписка/Module.bsl index 3a5fb3ae0..242d79119 100644 --- a/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаСписка/Module.bsl @@ -151,7 +151,7 @@ Элементы.НазначениеФильтр.СписокВыбора.Добавить("", НСтр("ru = 'Все'")); ОбщийПредставление = НСтр("ru = 'Общий'"); - Список.Параметры.УстановитьЗначениеПараметра("Общий", ОбщийПредставление); + Список.Параметры.УстановитьЗначениеПараметра("Общий", ОбщийПредставление); Элементы.НазначениеФильтр.СписокВыбора.Добавить("Общий", ОбщийПредставление); Запрос = Новый Запрос; @@ -162,6 +162,7 @@ | Справочник.ШаблоныСообщений КАК ШаблоныСообщений |ГДЕ | ШаблоныСообщений.Назначение <> """" И ШаблоныСообщений.Назначение <> ""Служебный"" + | И ШаблоныСообщений.Назначение <> &Общий | |СГРУППИРОВАТЬ ПО | ШаблоныСообщений.Назначение @@ -169,6 +170,7 @@ |УПОРЯДОЧИТЬ ПО | Назначение"; + Запрос.УстановитьПараметр("Общий", ОбщийПредставление); РезультатЗапроса = Запрос.Выполнить().Выбрать(); Пока РезультатЗапроса.Следующий() Цикл diff --git a/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаЭлемента/Form.form index 5b755e5ed..164f192f2 100644 --- a/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаЭлемента/Form.form @@ -177,6 +177,40 @@ <textSize>Normal</textSize> </extInfo> </items> + <items xsi:type="form:FormField"> + <name>ВладелецШаблона</name> + <id>358</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible/> + <dataPath xsi:type="form:DataPath"> + <segments>Объект.ВладелецШаблона</segments> + </dataPath> + <extendedTooltip> + <name>ВладелецШаблонаРасширеннаяПодсказка</name> + <id>360</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <contextMenu> + <name>ВладелецШаблонаКонтекстноеМеню</name> + <id>359</id> + <autoFill>true</autoFill> + </contextMenu> + <type>LabelField</type> + <editMode>Enter</editMode> + <showInHeader>true</showInHeader> + <headerHorizontalAlign>Left</headerHorizontalAlign> + <showInFooter>true</showInFooter> + <extInfo xsi:type="form:LabelFieldExtInfo"> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + </extInfo> + </items> <items xsi:type="form:FormGroup"> <name>Страницы</name> <id>40</id> @@ -3728,6 +3762,21 @@ <common>true</common> </edit> </attributes> + <attributes> + <name>ПараметрыСообщения</name> + <title> + <key>ru</key> + <value>Параметры сообщения</value> + + 13 + + + true + + + true + + ПроверитьШаблон @@ -3967,6 +4016,10 @@ <stringQualifiers/> </valueType> </parameters> + <parameters> + <name>ПараметрыСообщения</name> + <valueType/> + </parameters> <commandInterface> <navigationPanel> <cmiFragmentRecord> diff --git a/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаЭлемента/Module.bsl index 6067f99ae..55f4ede45 100644 --- a/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаЭлемента/Module.bsl @@ -9,6 +9,10 @@ Возврат; КонецЕсли; + Если Параметры.Свойство("ПараметрыСообщения") Тогда + ПараметрыСообщения = Параметры.ПараметрыСообщения; + КонецЕсли; + Элементы.ПолноеИмяТипаПараметраВводаНаОсновании.СписокВыбора.Добавить("Общий", НСтр("ru='Общий'")); НастройкиШаблоновСообщений = ШаблоныСообщенийСлужебныйПовтИсп.ПриОпределенииНастроек(); Для каждого ПредметШаблона Из НастройкиШаблоновСообщений.ПредметыШаблонов Цикл @@ -36,7 +40,7 @@ КонецЕсли; - ОтображениеЭлементовФормы(); + ОтображениеЭлементовФормы(НастройкиШаблоновСообщений.ФорматПисьма); ИнициализироватьФорматыСохранения(); СформироватьСписокРеквизитовИПечатныхФорм(); @@ -51,11 +55,10 @@ КонецЕсли; Если Параметры.Свойство("ВладелецШаблона") Тогда - Элементы.ГруппаНазначение.Видимость = Ложь; - Элементы.ГруппаДоступ.Видимость = Ложь; + Элементы.ГруппаНазначение.Видимость = Ложь; + Элементы.ГруппаДоступ.Видимость = Ложь; Элементы.ФормаГруппаСообщениеФормируется.Видимость = Ложь; - Элементы.Наименование.Видимость = Ложь; - Элементы.Назначение.Видимость = Ложь; + Элементы.Назначение.Видимость = Ложь; КонецЕсли; КонецПроцедуры @@ -85,13 +88,7 @@ КонецЕсли; КонецЕсли; - Для каждого ПараметрШаблонаТекущийОбъект Из ТекущийОбъект.Параметры Цикл - Отбор = Новый Структура("ИмяПараметра", ПараметрШаблонаТекущийОбъект.ИмяПараметра); - НайденныеСтроки = Объект.Параметры.НайтиСтроки(Отбор); - Если НайденныеСтроки.Количество() > 0 Тогда - НайденныеСтроки[0].ОписаниеТипа = ПараметрШаблонаТекущийОбъект.ТипПараметра.Получить(); - КонецЕсли; - КонецЦикла; + ЗаполнитьПроизвольныеПараметрыИзОбъекта(ТекущийОбъект); Если ПустаяСтрока(Объект.ПолноеИмяТипаПараметраВводаНаОсновании) Тогда Объект.Назначение = НСтр("ru='Общий'"); @@ -104,7 +101,9 @@ &НаКлиенте Процедура ПередЗаписью(Отказ, ПараметрыЗаписи) - ПоместитьНовыеФайлыВоВременноеХранилище(Вложения, УникальныйИдентификатор, Отказ); + Если НЕ ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент() Тогда + ПоместитьФайлыИзЛокальнойФСВоВременноеХранилище(Вложения, УникальныйИдентификатор, Отказ); + КонецЕсли; Если НЕ Объект.ПредназначенДляВводаНаОсновании Тогда Объект.ПолноеИмяТипаПараметраВводаНаОсновании = ""; @@ -232,15 +231,9 @@ &НаСервере Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи) - Для каждого ПараметрШаблонаТекущийОбъект Из ТекущийОбъект.Параметры Цикл - Отбор = Новый Структура("ИмяПараметра", ПараметрШаблонаТекущийОбъект.ИмяПараметра); - НайденныеСтроки = Объект.Параметры.НайтиСтроки(Отбор); - Если НайденныеСтроки.Количество() > 0 Тогда - НайденныеСтроки[0].ОписаниеТипа = ПараметрШаблонаТекущийОбъект.ТипПараметра.Получить(); - КонецЕсли; - КонецЦикла; - + ЗаполнитьПроизвольныеПараметрыИзОбъекта(ТекущийОбъект); ОтображениеЭлементовФормы(); + КонецПроцедуры &НаКлиенте @@ -643,7 +636,7 @@ Если ТекущиеДанные.Ссылка = ПредопределенноеЗначение("Справочник.ШаблоныСообщенийПрисоединенныеФайлы.ПустаяСсылка") Тогда ДополнительныеПараметры = Новый Структура("ТекущийИндексВКоллекции", Идентификатор); ОбработчикОповещенияОЗакрытии = Новый ОписаниеОповещения("СкопироватьВложениеЗавершение", ЭтотОбъект, ДополнительныеПараметры); - ТекстВопроса = НСтр("ru = 'Файл возможно скопировать только после его записи. Записать?'"); + ТекстВопроса = НСтр("ru = 'Файл возможно скопировать только после записи шаблона сообщения. Записать?'"); ПоказатьВопрос(ОбработчикОповещенияОЗакрытии, ТекстВопроса, РежимДиалогаВопрос.ДаНет); Иначе СкопироватьФайлВложения(Идентификатор); @@ -785,13 +778,27 @@ ВидСообщения = Параметры.ВидСообщения; - Если ЗначениеЗаполнено(Параметры.ПолноеИмяТипаОснования) Тогда + Если ЗначениеЗаполнено(Параметры.ПолноеИмяТипаОснования) + И ШаблоныСообщенийСлужебный.ОбъектЯвляетсяПредметомШаблона(Параметры.ПолноеИмяТипаОснования) Тогда // Контекстный вызов Объект.ПолноеИмяТипаПараметраВводаНаОсновании = Параметры.ПолноеИмяТипаОснования; Элементы.ГруппаНазначение.Видимость = Ложь; Объект.ПредназначенДляВводаНаОсновании = Истина; + ИмяВНазначение = Параметры.ПолноеИмяТипаОснования; + НазначениеШаблона = НастройкиШаблоновСообщений.ПредметыШаблонов.Найти(ИмяВНазначение, "Представление"); + Если НазначениеШаблона = Неопределено Тогда + НазначениеШаблона = НастройкиШаблоновСообщений.ПредметыШаблонов.Найти(ИмяВНазначение, "Имя"); + КонецЕсли; + Если НазначениеШаблона <> Неопределено Тогда + Объект.ПолноеИмяТипаПараметраВводаНаОсновании = НазначениеШаблона.Имя; + Объект.Назначение = НазначениеШаблона.Представление; + Иначе + Объект.ПолноеИмяТипаПараметраВводаНаОсновании = ИмяВНазначение; + Объект.Назначение = ИмяВНазначение; + КонецЕсли; + ИначеЕсли Параметры.ПараметрыВыбора.Количество() > 0 Тогда ИмяВНазначение = ?(Параметры.ПараметрыВыбора.Свойство("Назначение"), Параметры.ПараметрыВыбора.Назначение, ""); @@ -883,7 +890,7 @@ КонецПроцедуры &НаСервере -Процедура ОтображениеЭлементовФормы() +Процедура ОтображениеЭлементовФормы(ФорматаПисьма = "") Если Объект.ПредназначенДляSMS Тогда СуффиксЗаголовка = НСтр("ru = 'Шаблон сообщения SMS'"); @@ -904,12 +911,17 @@ Элементы.РеквизитыМенюДобавитьПараметрПочта.Видимость = Истина; Элементы.РеквизитыКонтекстноеМенюДобавитьПараметрВТекстСообщенияДляSMS.Видимость = Ложь; Элементы.РеквизитыМенюДобавитьПараметрВТекстСообщенияSMS.Видимость = Ложь; - Если Объект.ТипТекстаПисьма = Перечисления.СпособыРедактированияЭлектронныхПисем.HTML Тогда - УстановитьЭлектронноеПисьмоHTML(); - Иначе - УстановитьЭлектронноеПисьмоОбычныйТекст(); + + Если НЕ ФорматаПисьмаПредопределен(ФорматаПисьма) Тогда + Если Объект.ТипТекстаПисьма = Перечисления.СпособыРедактированияЭлектронныхПисем.HTML Тогда + УстановитьЭлектронноеПисьмоHTML(); + Иначе + УстановитьЭлектронноеПисьмоОбычныйТекст(); + КонецЕсли; КонецЕсли; + КонецЕсли; + Если ЗначениеЗаполнено(Объект.Ссылка) Тогда Заголовок = Объект.Наименование + " (" + СуффиксЗаголовка + ")"; Иначе @@ -935,7 +947,7 @@ Элементы.ГруппаДоступ.Видимость = НЕ ПараметрыДоступа("Изменение", Метаданные.Справочники.ШаблоныСообщений, "Ссылка").ОграничениеУсловием; - + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки") Тогда МодульДополнительныеОтчетыИОбработки = ОбщегоНазначения.ОбщийМодуль("ДополнительныеОтчетыИОбработки"); Элементы.ФормаГруппаСообщениеФормируется.Видимость = МодульДополнительныеОтчетыИОбработки.ИспользуютсяДополнительныеОтчетыИОбработки(); @@ -949,6 +961,27 @@ КонецПроцедуры +&НаСервере +Функция ФорматаПисьмаПредопределен(Знач ФорматаПисьма) + + Если ЗначениеЗаполнено(ФорматаПисьма) Тогда + Если ФорматаПисьма = "ТолькоHTML" Тогда + Объект.ТипТекстаПисьма = Перечисления.СпособыРедактированияЭлектронныхПисем.HTML; + УстановитьЭлектронноеПисьмоHTML(); + Элементы.ФормаЭлектронноеПисьмоHTML.Видимость = Ложь; + Возврат Истина; + ИначеЕсли ФорматаПисьма = "ТолькоОбычныйТекст" Тогда + Объект.ТипТекстаПисьма = Перечисления.СпособыРедактированияЭлектронныхПисем.ОбычныйТекст; + УстановитьЭлектронноеПисьмоОбычныйТекст(); + Элементы.ФормаЭлектронноеПисьмоHTML.Видимость = Ложь; + Возврат Истина; + КонецЕсли; + КонецЕсли; + + Возврат Ложь; + +КонецФункции + &НаСервере Процедура УстановитьHTMLДляФорматированногоДокумента(ТекстШаблонаПисьмаHTML, СсылкаНаТекущийОбъект, СписокФайлов = Неопределено) @@ -987,6 +1020,7 @@ ПараметрыШаблона = ШаблоныСообщенийСлужебный.ПараметрыШаблона(Объект); СведенияОШаблоне = ШаблоныСообщенийСлужебный.СведенияОШаблоне(ПараметрыШаблона); + ПараметрыШаблона.ПараметрыСообщения = ПараметрыСообщения; Реквизиты.ПолучитьЭлементы().Очистить(); СписокРеквизитов = РеквизитФормыВЗначение("Реквизиты"); @@ -995,7 +1029,6 @@ ЗначениеВРеквизитФормы(СписокРеквизитов, "Реквизиты"); СформироватьСписокПечатныхФорм(СведенияОШаблоне); - КонецПроцедуры @@ -1192,23 +1225,23 @@ &НаКлиенте Процедура ДобавитьВложениеВыполнить(Идентификатор = Неопределено) - #Если Не ВебКлиент Тогда + Если НЕ ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент() Тогда - Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); + Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); Диалог.МножественныйВыбор = Истина; - ДополнительныеПараметры = Новый Структура("Идентификатор", Идентификатор); - ОписаниеОповещение = Новый ОписаниеОповещения("ДиалогВыбораФайловПослеВыбора", ЭтотОбъект, ДополнительныеПараметры); + ДополнительныеПараметры = Новый Структура("Идентификатор", Идентификатор); + ОписаниеОповещение = Новый ОписаниеОповещения("ДиалогВыбораФайловПослеВыбора", ЭтотОбъект, ДополнительныеПараметры); Диалог.Показать(ОписаниеОповещение); - #Иначе - - Адрес = ""; + Иначе + + Адрес = ""; ВыбранныйФайл = ""; - ДополнительныеПараметры = Новый Структура("Идентификатор", Идентификатор); + ДополнительныеПараметры = Новый Структура("Идентификатор", Идентификатор); ОбработчикОповещенияОЗакрытии = Новый ОписаниеОповещения("ПомещениеФайлаПриОкончании", ЭтотОбъект, ДополнительныеПараметры); НачатьПомещениеФайла(ОбработчикОповещенияОЗакрытии, Адрес, ВыбранныйФайл, Истина, УникальныйИдентификатор); - #КонецЕсли + КонецЕсли КонецПроцедуры @@ -1332,25 +1365,25 @@ КонецФункции -&НаКлиентеНаСервереБезКонтекста -Процедура ПоместитьНовыеФайлыВоВременноеХранилище(Вложения, УникальныйИдентификатор, Отказ) - - Перем Данные, ЗагружаемыйФайл, СтрокаТаблицыВложений; +&НаКлиенте +Процедура ПоместитьФайлыИзЛокальнойФСВоВременноеХранилище(Вложения, УникальныйИдентификатор, Отказ) Для Каждого СтрокаТаблицыВложений Из Вложения Цикл Если СтрокаТаблицыВложений.Статус = "ВнешнийНовый" Тогда Попытка - ЗагружаемыйФайл = Новый Файл(СтрокаТаблицыВложений.Имя); - Если ЗагружаемыйФайл.Существует() Тогда - Данные = Новый ДвоичныеДанные(СтрокаТаблицыВложений.Имя); + + ЗагружаемыйФайл = Новый Файл(СтрокаТаблицыВложений.Имя); + Если НЕ СтрНачинаетсяС(СтрокаТаблицыВложений.Имя, "e1cib") Тогда + Данные = Новый ДвоичныеДанные(СтрокаТаблицыВложений.Имя); СтрокаТаблицыВложений.Имя = ПоместитьВоВременноеХранилище(Данные, УникальныйИдентификатор); КонецЕсли; + Исключение - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(КраткоеПредставлениеОшибки(ИнформацияОбОшибке()),,"Вложения",, Отказ); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(КраткоеПредставлениеОшибки(ИнформацияОбОшибке()),, "Вложения",, Отказ); КонецПопытки; КонецЕсли; КонецЦикла; - + КонецПроцедуры &НаКлиенте @@ -1401,8 +1434,9 @@ Процедура СкопироватьВложениеЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт Если РезультатВопроса = КодВозвратаДиалога.Да Тогда - Записать(); - СкопироватьФайлВложения(ДополнительныеПараметры.ТекущийИндексВКоллекции); + Если Записать() Тогда + СкопироватьФайлВложения(ДополнительныеПараметры.ТекущийИндексВКоллекции); + КонецЕсли; КонецЕсли; КонецПроцедуры @@ -1652,6 +1686,21 @@ КонецФункции +&НаСервере +Процедура ЗаполнитьПроизвольныеПараметрыИзОбъекта(Знач ТекущийОбъект) + + Перем НайденныеСтроки, Отбор, ПараметрШаблонаТекущийОбъект; + + Для каждого ПараметрШаблонаТекущийОбъект Из ТекущийОбъект.Параметры Цикл + Отбор = Новый Структура("ИмяПараметра", ПараметрШаблонаТекущийОбъект.ИмяПараметра); + НайденныеСтроки = Объект.Параметры.НайтиСтроки(Отбор); + Если НайденныеСтроки.Количество() > 0 Тогда + НайденныеСтроки[0].ОписаниеТипа = ПараметрШаблонаТекущийОбъект.ТипПараметра.Получить(); + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + // Внешняя обработка &НаСервере diff --git a/SSL/src/Catalogs/ШаблоныСообщений/ObjectModule.bsl b/SSL/src/Catalogs/ШаблоныСообщений/ObjectModule.bsl index e9d66a333..aad86b9d5 100644 --- a/SSL/src/Catalogs/ШаблоныСообщений/ObjectModule.bsl +++ b/SSL/src/Catalogs/ШаблоныСообщений/ObjectModule.bsl @@ -11,7 +11,7 @@ ИначеЕсли ТипЗнч(ДанныеЗаполнения) = Тип("Структура") Тогда ЗаполнитьНаОснованииСтруктуры(ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка); КонецЕсли; - + КонецЕсли; КонецПроцедуры @@ -29,12 +29,18 @@ ЭтотОбъект.ПредназначенДляЭлектронныхПисем = Истина; ЭтотОбъект.ПредназначенДляSMS = Ложь; ЭтотОбъект.ПолноеИмяТипаПараметраВводаНаОсновании = НСтр("ru='Общий'"); + ЭтотОбъект.ТипТекстаПисьма = Перечисления.СпособыРедактированияЭлектронныхПисем.ОбычныйТекст; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСПочтовымиСообщениями") Тогда + МодульРаботаСПочтовымиСообщениямиСлужебный = ОбщегоНазначения.ОбщийМодуль("РаботаСПочтовымиСообщениямиСлужебный"); + ТипыТекстовЭлектронныхПисемHTML = МодульРаботаСПочтовымиСообщениямиСлужебный.ТипТекстовЭлектронныхПисем("HTML"); + ТипыТекстовЭлектронныхПисемHTMLСКартинками = МодульРаботаСПочтовымиСообщениямиСлужебный.ТипТекстовЭлектронныхПисем("HTMLСКартинками"); + + Если ДанныеЗаполнения.ТипТекста = ТипыТекстовЭлектронныхПисемHTML + ИЛИ ДанныеЗаполнения.ТипТекста = ТипыТекстовЭлектронныхПисемHTMLСКартинками Тогда + ЭтотОбъект.ТипТекстаПисьма = Перечисления.СпособыРедактированияЭлектронныхПисем.HTML; + КонецЕсли; - Если ДанныеЗаполнения.ТипТекста = Перечисления.ТипыТекстовЭлектронныхПисем.HTML - ИЛИ ДанныеЗаполнения.ТипТекста = Перечисления.ТипыТекстовЭлектронныхПисем.HTMLСКартинками Тогда - ЭтотОбъект.ТипТекстаПисьма = Перечисления.СпособыРедактированияЭлектронныхПисем.HTML; - Иначе - ЭтотОбъект.ТипТекстаПисьма = Перечисления.СпособыРедактированияЭлектронныхПисем.ОбычныйТекст; КонецЕсли; КонецПроцедуры @@ -70,10 +76,10 @@ ЭтотОбъект.ТемаПисьма = ПараметрыШаблона.Тема; Если ПараметрыШаблона.ФорматПисьма = Перечисления.СпособыРедактированияЭлектронныхПисем.HTML Тогда - ЭтотОбъект.ТекстШаблонаПисьмаHTML = ПараметрыШаблона.Текст; + ЭтотОбъект.ТекстШаблонаПисьмаHTML = СтрЗаменить(ПараметрыШаблона.Текст, Символы.ПС, "<BR>"); ЭтотОбъект.ТипТекстаПисьма = Перечисления.СпособыРедактированияЭлектронныхПисем.HTML; Иначе - ЭтотОбъект.ТекстШаблонаПисьма = ПараметрыШаблона.Текст; + ЭтотОбъект.ТекстШаблонаПисьма = СтрЗаменить(ПараметрыШаблона.Текст, "<BR>", Символы.ПС); ЭтотОбъект.ТипТекстаПисьма = Перечисления.СпособыРедактированияЭлектронныхПисем.ОбычныйТекст; КонецЕсли; diff --git a/SSL/src/Catalogs/ШаблоныСообщений/ШаблоныСообщений.mdo b/SSL/src/Catalogs/ШаблоныСообщений/ШаблоныСообщений.mdo index 6786399a0..7ce0c7cb6 100644 --- a/SSL/src/Catalogs/ШаблоныСообщений/ШаблоныСообщений.mdo +++ b/SSL/src/Catalogs/ШаблоныСообщений/ШаблоныСообщений.mdo @@ -152,7 +152,7 @@ <value>Владелец шаблона</value> </synonym> <type> - <types>AnyRef</types> + <types>DefinedType.ВладелецШаблонаСообщения</types> </type> <toolTip> <key>ru</key> diff --git a/SSL/src/Catalogs/ШаблоныСообщенийПрисоединенныеФайлы/ШаблоныСообщенийПрисоединенныеФайлы.mdo b/SSL/src/Catalogs/ШаблоныСообщенийПрисоединенныеФайлы/ШаблоныСообщенийПрисоединенныеФайлы.mdo index 95ebbc6e2..ffd3b00ad 100644 --- a/SSL/src/Catalogs/ШаблоныСообщенийПрисоединенныеФайлы/ШаблоныСообщенийПрисоединенныеФайлы.mdo +++ b/SSL/src/Catalogs/ШаблоныСообщенийПрисоединенныеФайлы/ШаблоныСообщенийПрисоединенныеФайлы.mdo @@ -403,6 +403,7 @@ <value>Редактирует</value> </synonym> <type> + <types>CatalogRef.УчетныеЗаписиСинхронизацииФайлов</types> <types>CatalogRef.Пользователи</types> </type> <toolTip> @@ -411,7 +412,6 @@ </toolTip> <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> - <quickChoice>DontUse</quickChoice> <createOnInput>Use</createOnInput> <fillValue xsi:type="core:ReferenceValue"> <value>Catalog.Пользователи.EmptyRef</value> diff --git a/SSL/src/Catalogs/ЭлектронноеПисьмоВходящееПрисоединенныеФайлы/ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.mdo b/SSL/src/Catalogs/ЭлектронноеПисьмоВходящееПрисоединенныеФайлы/ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.mdo index 696078bf6..8a02c34a0 100644 --- a/SSL/src/Catalogs/ЭлектронноеПисьмоВходящееПрисоединенныеФайлы/ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.mdo +++ b/SSL/src/Catalogs/ЭлектронноеПисьмоВходящееПрисоединенныеФайлы/ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.mdo @@ -522,7 +522,7 @@ <name>ИДФайлаЭлектронногоПисьма</name> <synonym> <key>ru</key> - <value>ИДФайла электронного письма</value> + <value>Идентификатор файла электронного письма</value> </synonym> <type> <types>String</types> diff --git a/SSL/src/Catalogs/ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы/ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.mdo b/SSL/src/Catalogs/ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы/ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.mdo index 081b0a87e..5c181973c 100644 --- a/SSL/src/Catalogs/ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы/ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.mdo +++ b/SSL/src/Catalogs/ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы/ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.mdo @@ -521,7 +521,7 @@ <name>ИДФайлаЭлектронногоПисьма</name> <synonym> <key>ru</key> - <value>ИДФайла электронного письма</value> + <value>Идентификатор файла электронного письма</value> </synonym> <type> <types>String</types> diff --git a/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/Forms/ФормаЭлемента/Form.form b/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/Forms/ФормаЭлемента/Form.form index 593a9d1e5..88db1146c 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/Forms/ФормаЭлемента/Form.form @@ -531,6 +531,81 @@ <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> + <items xsi:type="form:FormGroup"> + <name>ГруппаВидОтображенияБулевоОтображать</name> + <id>162</id> + <items xsi:type="form:FormField"> + <name>ВидОтображенияБулево</name> + <id>164</id> + <title> + <key>ru</key> + <value>Вид</value> + + true + true + + true + + + Объект.ВидФлажка + + + ВидОтображенияБулевоРасширеннаяПодсказка + 166 + Label + true + true + + Left + + + + ВидОтображенияБулевоКонтекстноеМеню + 165 + true + + InputField + Enter + true + Left + true + + 12 + true + true + false + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Вид переключателя отображать</value> + + + ГруппаВидОтображенияБулевоОтображатьРасширеннаяПодсказка + 163 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + true true diff --git a/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/Forms/ФормаЭлемента/Module.bsl b/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/Forms/ФормаЭлемента/Module.bsl index 979d09db9..b17e30b98 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/Forms/ФормаЭлемента/Module.bsl @@ -23,6 +23,7 @@ Если Объект.Ссылка.Пустая() Тогда Объект.ВидПереключателя = Перечисления.ВидыПереключателяВАнкетах.Переключатель; + Объект.ВидФлажка = Перечисления.ВидыФлажкаВАнкетах.ПолеВвода; КонецЕсли; // СтандартныеПодсистемы.ПодключаемыеКоманды @@ -291,6 +292,10 @@ Элементы.ГруппаВидПереключателя.ТекущаяСтраница = Элементы.ГруппаВидПереключателяОтображать; + ИначеЕсли Объект.ТипОтвета = ПредопределенноеЗначение("Перечисление.ТипыОтветовНаВопрос.Булево") Тогда + + Элементы.ГруппаВидПереключателя.ТекущаяСтраница = Элементы.ГруппаВидОтображенияБулевоОтображать; + Иначе Элементы.ГруппаВидПереключателя.ТекущаяСтраница = Элементы.ГруппаВидПереключателяНеОтображать; diff --git a/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/ManagerModule.bsl b/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/ManagerModule.bsl index ca894754e..c982f3524 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/ManagerModule.bsl +++ b/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/ManagerModule.bsl @@ -41,9 +41,8 @@ |ИЗ | ПланВидовХарактеристик.ВопросыДляАнкетирования КАК ВопросыДляАнкетирования |ГДЕ - | ВопросыДляАнкетирования.ВидПереключателя = &ПустаяСсылка"; - Запрос.Параметры.Вставить("ПустаяСсылка", Перечисления.ВидыПереключателяВАнкетах.ПустаяСсылка()); - + | (ВопросыДляАнкетирования.ВидПереключателя = ЗНАЧЕНИЕ(Перечисление.ВидыПереключателяВАнкетах.ПустаяСсылка) + | ИЛИ ВопросыДляАнкетирования.ВидФлажка = ЗНАЧЕНИЕ(Перечисление.ВидыФлажкаВАнкетах.ПустаяСсылка))"; Результат = Запрос.Выполнить().Выгрузить(); МассивСсылок = Результат.ВыгрузитьКолонку("Ссылка"); @@ -57,20 +56,14 @@ Выборка = ОбновлениеИнформационнойБазы.ВыбратьСсылкиДляОбработки(Параметры.Очередь, "ПланВидовХарактеристик.ВопросыДляАнкетирования"); - ПроблемныхОбъектов = 0; - ОбъектовОбработано = 0; - Пока Выборка.Следующий() Цикл Попытка - ЗаполнитьРеквизитВидПереключателя(Выборка); - ОбъектовОбработано = ОбъектовОбработано + 1; + ЗаполнитьНовыеРеквизиты(Выборка.Ссылка); Исключение // Если не удалось обработать объект, повторяем попытку снова. - ПроблемныхОбъектов = ПроблемныхОбъектов + 1; - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Не удалось обработать вопрос для анкетирования: %1 по причине: |%2'"), @@ -82,17 +75,6 @@ КонецЦикла; Параметры.ОбработкаЗавершена = ОбновлениеИнформационнойБазы.ОбработкаДанныхЗавершена(Параметры.Очередь, "ПланВидовХарактеристик.ВопросыДляАнкетирования"); - Если ОбъектовОбработано = 0 И ПроблемныхОбъектов <> 0 Тогда - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Процедуре ЗаполнитьРеквизитВидПереключателя не удалось обработать некоторые вопросы для анкетирования (пропущены): %1'"), - ПроблемныхОбъектов); - ВызватьИсключение ТекстСообщения; - Иначе - ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Информация, - Метаданные.ПланыВидовХарактеристик.ВопросыДляАнкетирования,, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Процедура ЗаполнитьРеквизитВидПереключателя обработала очередную порцию вопросов для анкетирования : %1'"), - ОбъектовОбработано)); - КонецЕсли; КонецПроцедуры @@ -100,9 +82,9 @@ #Область СлужебныеПроцедурыИФункции -// Заполняет значение нового реквизита ВидПереключателя у переданного объекта. +// Заполняет значения новых реквизитов ВидПереключателя и ВидФлажка у переданного объекта. // -Процедура ЗаполнитьРеквизитВидПереключателя(Выборка) +Процедура ЗаполнитьНовыеРеквизиты(ВопросДляАнкетирования) НачатьТранзакцию(); Попытка @@ -110,23 +92,29 @@ // Блокируем объект от изменения другими сеансами. Блокировка = Новый БлокировкаДанных; ЭлементБлокировки = Блокировка.Добавить("ПланВидовХарактеристик.ВопросыДляАнкетирования"); - ЭлементБлокировки.УстановитьЗначение("Ссылка", Выборка.Ссылка); + ЭлементБлокировки.УстановитьЗначение("Ссылка", ВопросДляАнкетирования); Блокировка.Заблокировать(); - Объект = Выборка.Ссылка.ПолучитьОбъект(); + Объект = ВопросДляАнкетирования.ПолучитьОбъект(); // Если объект ранее был удален или обработан другими сеансами, пропускаем его. Если Объект = Неопределено Тогда ОтменитьТранзакцию(); Возврат; КонецЕсли; - Если Объект.ВидПереключателя <> Перечисления.ВидыПереключателяВАнкетах.ПустаяСсылка() Тогда + Если Объект.ВидПереключателя <> Перечисления.ВидыПереключателяВАнкетах.ПустаяСсылка() И Объект.ВидФлажка <> Перечисления.ВидыФлажкаВАнкетах.ПустаяСсылка() Тогда ОтменитьТранзакцию(); Возврат; КонецЕсли; // Обработка объекта. - Объект.ВидПереключателя = Перечисления.ВидыПереключателяВАнкетах.Переключатель; + Если Объект.ВидПереключателя = Перечисления.ВидыПереключателяВАнкетах.ПустаяСсылка() Тогда + Объект.ВидПереключателя = Перечисления.ВидыПереключателяВАнкетах.Переключатель; + КонецЕсли; + + Если Объект.ВидФлажка = Перечисления.ВидыФлажкаВАнкетах.ПустаяСсылка() Тогда + Объект.ВидФлажка = Перечисления.ВидыФлажкаВАнкетах.Флажок; + КонецЕсли; // Запись обработанного объекта. ОбновлениеИнформационнойБазы.ЗаписатьДанные(Объект); diff --git a/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/ВопросыДляАнкетирования.mdo b/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/ВопросыДляАнкетирования.mdo index 843f5a6d3..cfa92c673 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/ВопросыДляАнкетирования.mdo +++ b/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/ВопросыДляАнкетирования.mdo @@ -397,6 +397,27 @@ Use Use + + ВидФлажка + + ru + Вид флажка + + + EnumRef.ВидыФлажкаВАнкетах + + + ru + Внешний вид флажка для выбора одного из двух значений - Да или Нет + + + + + Enum.ВидыПереключателяВАнкетах.EnumValue.Переключатель + + Use + Use + ФормаЭлемента diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаВыбора/Form.form b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаВыбора/Form.form index e9cae7af1..b525f1461 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаВыбора/Form.form +++ b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаВыбора/Form.form @@ -627,44 +627,44 @@
true
ВЫБРАТЬ - Свойства.Ссылка, - Свойства.ВерсияДанных, - Свойства.ПометкаУдаления, - Свойства.Предопределенный, - Свойства.Заголовок, + СвойстваПереопределяемый.Ссылка, + СвойстваПереопределяемый.ВерсияДанных, + СвойстваПереопределяемый.ПометкаУдаления, + СвойстваПереопределяемый.Предопределенный, + СвойстваПереопределяемый.Заголовок, ВЫБОР - КОГДА Свойства.НаборСвойств = ЗНАЧЕНИЕ(Справочник.НаборыДополнительныхРеквизитовИСведений.ПустаяСсылка) + КОГДА СвойстваПереопределяемый.НаборСвойств = ЗНАЧЕНИЕ(Справочник.НаборыДополнительныхРеквизитовИСведений.ПустаяСсылка) ТОГДА &ПредставлениеГруппировкиОбщихСвойств - КОГДА Свойства.НаборСвойств.Родитель = ЗНАЧЕНИЕ(Справочник.НаборыДополнительныхРеквизитовИСведений.ПустаяСсылка) - ТОГДА Свойства.НаборСвойств - ИНАЧЕ Свойства.НаборСвойств.Родитель.Наименование + " (" + Свойства.НаборСвойств.Наименование + ")" + КОГДА СвойстваПереопределяемый.НаборСвойств.Родитель = ЗНАЧЕНИЕ(Справочник.НаборыДополнительныхРеквизитовИСведений.ПустаяСсылка) + ТОГДА СвойстваПереопределяемый.НаборСвойств + ИНАЧЕ СвойстваПереопределяемый.НаборСвойств.Родитель.Наименование + " (" + СвойстваПереопределяемый.НаборСвойств.Наименование + ")" КОНЕЦ КАК НаборСвойствГруппировка, - Свойства.НаборСвойств, - Свойства.ДополнительныеЗначенияИспользуются, - Свойства.ВладелецДополнительныхЗначений, - Свойства.Наименование, - Свойства.ТипЗначения, - Свойства.ЭтоДополнительноеСведение, - Свойства.МногострочноеПолеВвода, - Свойства.ЗаполнятьОбязательно, - Свойства.ЗаголовокФормыЗначения, - Свойства.ЗаголовокФормыВыбораЗначения, - Свойства.ФорматСвойства, - Свойства.Комментарий, - Свойства.Подсказка, + СвойстваПереопределяемый.НаборСвойств, + СвойстваПереопределяемый.ДополнительныеЗначенияИспользуются, + СвойстваПереопределяемый.ВладелецДополнительныхЗначений, + СвойстваПереопределяемый.Наименование, + СвойстваПереопределяемый.ТипЗначения, + СвойстваПереопределяемый.ЭтоДополнительноеСведение, + СвойстваПереопределяемый.МногострочноеПолеВвода, + СвойстваПереопределяемый.ЗаполнятьОбязательно, + СвойстваПереопределяемый.ЗаголовокФормыЗначения, + СвойстваПереопределяемый.ЗаголовокФормыВыбораЗначения, + СвойстваПереопределяемый.ФорматСвойства, + СвойстваПереопределяемый.Комментарий, + СвойстваПереопределяемый.Подсказка, ВЫБОР - КОГДА Свойства.ЭтоДополнительноеСведение + КОГДА СвойстваПереопределяемый.ЭтоДополнительноеСведение ТОГДА 2 ИНАЧЕ 1 КОНЕЦ + ВЫБОР - КОГДА Свойства.Предопределенный + КОГДА СвойстваПереопределяемый.Предопределенный ТОГДА 6 - КОГДА Свойства.ПометкаУдаления + КОГДА СвойстваПереопределяемый.ПометкаУдаления ТОГДА 3 ИНАЧЕ 0 КОНЕЦ КАК НомерКартинки ИЗ - ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК Свойства + ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК СвойстваПереопределяемый ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения true true @@ -726,6 +726,23 @@ + + НаборСвойствОтбор + + <key>ru</key> + <value>Набор свойств отбор</value> + + 5 + + CatalogRef.НаборыДополнительныхРеквизитовИСведений + + + true + + + true + + ВыборВладельцаДополнительныхЗначений diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаВыбора/Module.bsl b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаВыбора/Module.bsl index 9a46a945f..35fd82bdc 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаВыбора/Module.bsl +++ b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаВыбора/Module.bsl @@ -81,6 +81,8 @@ ЭлементГруппировкиДанных = ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных")); ЭлементГруппировкиДанных.Поле = Новый ПолеКомпоновкиДанных("НаборСвойствГруппировка"); ЭлементГруппировкиДанных.Использование = Истина; + + Параметры.Отбор.Свойство("НаборСвойств", НаборСвойствОтбор); КонецПроцедуры &НаСервере @@ -90,8 +92,13 @@ УсловиеЗапроса = " |ГДЕ - | Свойства.НаборСвойств В (&Наборы)"; - Список.ТекстЗапроса = Список.ТекстЗапроса + УсловиеЗапроса; + | СвойстваПереопределяемый.НаборСвойств В (&Наборы)"; + + СвойстваСписка = ОбщегоНазначения.СтруктураСвойствДинамическогоСписка(); + СвойстваСписка.ТекстЗапроса = Список.ТекстЗапроса + УсловиеЗапроса; + ОбщегоНазначения.УстановитьСвойстваДинамическогоСписка(Элементы.Список, + СвойстваСписка); + ОбщегоНазначенияКлиентСервер.УстановитьПараметрДинамическогоСписка( Список, "Наборы", Параметры.ОтображаемыеНаборыСвойств, Истина); КонецЕсли; @@ -127,6 +134,19 @@ ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("ЭтоДополнительноеСведение", ЭтоДополнительноеСведение); + Если Элемент.ТекущиеДанные = Неопределено Тогда + НаборСвойств = НаборСвойствОтбор; + ИначеЕсли Элемент.ТекущиеДанные.Свойство("ГруппировкаСтроки") Тогда + НаборСвойств = Элемент.ТекущиеДанные.ГруппировкаСтроки.Ключ; + ИначеЕсли Элемент.ТекущиеДанные.Свойство("РодительскаяГруппировкаСтроки") Тогда + НаборСвойств = Элемент.ТекущиеДанные.РодительскаяГруппировкаСтроки.Ключ; + Иначе + НаборСвойств = НаборСвойствОтбор; + КонецЕсли; + + ПараметрыФормы.Вставить("НаборСвойств", НаборСвойств); + ПараметрыФормы.Вставить("ТекущийНаборСвойств", НаборСвойств); + Если Копирование Тогда ПараметрыФормы.Вставить("ЗначениеКопирования", Элемент.ТекущаяСтрока); Иначе @@ -135,6 +155,7 @@ КонецЕсли; ОткрытьФорму("ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.ФормаОбъекта", ПараметрыФормы); + ОткрытьФорму("ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.ФормаОбъекта", ПараметрыФормы); КонецПроцедуры diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Help/ru.html index 9bd2e9f44..70330b01f 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Help/ru.html @@ -96,7 +96,8 @@
  • Например, дату основания фирмы иногда невозможно указать точно. В этом случае можно предоставить возможность выбора типа данных (Дата или Строка) во время ввода. Если точная дата известна, то можно будет выбрать тип Дата и ввести, если неизвестна, то можно будет ввести дату в виде строки типа "Начало 19 в.".
  • При этом для всех частей составного типа данных можно произвести их обычные настройки, например, настроить формат даты и определить параметры строки.
  • При вводе значений дополнительных реквизитов (сведений) составного типа данных сначала предлагается выбрать тип данных.
  • Булево - обычно это значения типа Истина и Ложь, Да или Нет. -
    • Для дополнительных реквизитов в Конструкторе форматной строки можно установить другой формат этих значений. Можно написать Представления значения булево Ложь и булево Истина. В этом случае при вводе вместо обычного Да или Нет для выбора будут предложены значения, введенные при настройке дополнительного реквизита.
  • Дополнительное значение - этот тип данных часто используется, при этом ввод информации сводится к выбору значений из списка. Предлагается программой по умолчанию. Применяется как обычный список значений, так и сгруппированный. С помощью дополнительных реквизитов (сведений) типа Дополнительное значение можно описывать различные свойства объектов программы. +
    • Для дополнительных реквизитов в Конструкторе форматной строки можно установить другой формат этих значений. Можно написать Представления значения булево Ложь и булево Истина. В этом случае при вводе вместо обычного Да или Нет для выбора будут предложены значения, введенные при настройке дополнительного реквизита. +
      • Внимание! В списках и отчетах отбор для таких дополнительных реквизитов с условием Равно и Не равно не поддерживается.
  • Дополнительное значение - этот тип данных часто используется, при этом ввод информации сводится к выбору значений из списка. Предлагается программой по умолчанию. Применяется как обычный список значений, так и сгруппированный. С помощью дополнительных реквизитов (сведений) типа Дополнительное значение можно описывать различные свойства объектов программы.
  • Дополнительное значение (иерархия) - такая структура списков также широко используется, ее называют иерархией элементов. Элементы в таком списке имеют одинаковые свойства, но могут иметь подчиненные элементы. При этом иерархия может быть довольно сложной.
  • Пользователь - в программе предусмотрена возможность использования значений списка Пользователи (и других списков) в качестве дополнительного реквизита (сведения).
  • Особенности ввода дополнительных сведений типа Дополнительное значение или Дополнительное значение (иерархия)

    • Кроме обычных полей доступны: diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Module.bsl b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Module.bsl index 566e5db07..a83b4d573 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Module.bsl @@ -1425,6 +1425,9 @@ Объект.ЗаполнятьОбязательно = Ложь; Элементы.ГруппаСвойстваИЗависимости.Видимость = Ложь; Иначе + РеквизитБулево = (Объект.ТипЗначения = Новый ОписаниеТипов("Булево")); + Элементы.ЗаполнятьОбязательно.Видимость = Не РеквизитБулево; + Элементы.ЗадатьУсловиеЗаполнения.Видимость = Не РеквизитБулево; Элементы.ГруппаСвойстваИЗависимости.Видимость = Истина; Если МожноНастраиватьВидимостьДоступность Тогда @@ -1581,9 +1584,15 @@ Значения, "Владелец", ВладелецЗначений, , , Истина); Если Объект.ТипЗначения.СодержитТип(Тип("СправочникСсылка.ЗначенияСвойствОбъектов")) Тогда - Значения.ОсновнаяТаблица = "Справочник.ЗначенияСвойствОбъектов"; + СвойстваСписка = ОбщегоНазначения.СтруктураСвойствДинамическогоСписка(); + СвойстваСписка.ОсновнаяТаблица = "Справочник.ЗначенияСвойствОбъектов"; + ОбщегоНазначения.УстановитьСвойстваДинамическогоСписка(Элементы.Значения, + СвойстваСписка); Иначе - Значения.ОсновнаяТаблица = "Справочник.ЗначенияСвойствОбъектовИерархия"; + СвойстваСписка = ОбщегоНазначения.СтруктураСвойствДинамическогоСписка(); + СвойстваСписка.ОсновнаяТаблица = "Справочник.ЗначенияСвойствОбъектовИерархия"; + ОбщегоНазначения.УстановитьСвойстваДинамическогоСписка(Элементы.Значения, + СвойстваСписка); КонецЕсли; // Отображение уточнений. @@ -1669,7 +1678,7 @@ КонецЕсли; СтрокаНаборы = ПользователиСлужебныйКлиентСервер.ПредметЦелогоЧисла(СписокНаборов.Количество(), - "Л = ru_RU", НСтр("ru = 'набор,набора,наборов,,,,,,0'")); + "", НСтр("ru = 'набор,набора,наборов,,,,,,0'")); ТекстКомментария = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонУточнения, Формат(СписокНаборов.Количество(), "ЧГ="), СтрокаНаборы); Иначе diff --git a/SSL/src/CommonAttributes/ОбластьДанныхОсновныеДанные/ОбластьДанныхОсновныеДанные.mdo b/SSL/src/CommonAttributes/ОбластьДанныхОсновныеДанные/ОбластьДанныхОсновныеДанные.mdo index 78fe81ad4..c3c007e1d 100644 --- a/SSL/src/CommonAttributes/ОбластьДанныхОсновныеДанные/ОбластьДанныхОсновныеДанные.mdo +++ b/SSL/src/CommonAttributes/ОбластьДанныхОсновныеДанные/ОбластьДанныхОсновныеДанные.mdo @@ -15,7 +15,9 @@ Use - + + 0 + Constant.МаксимальнаяДлительностьВыполненияИсполняющегоФоновогоЗадания DontUse @@ -197,7 +199,7 @@ DontUse - Constant.ЛогинДоступаКСервисуMorpher + Constant.УдалитьЛогинДоступаКСервисуMorpher DontUse @@ -348,10 +350,6 @@ ScheduledJob.ОбновлениеАгрегатов DontUse - - DocumentJournal.Взаимодействия - DontUse - ScheduledJob.ОбновлениеВнешнихКомпонентССайта DontUse @@ -692,6 +690,10 @@ Constant.ДетализироватьОбновлениеИБВЖурналеРегистрации DontUse + + ScheduledJob.СборИОтправкаОтчетовОбОшибках + DontUse + Constant.ИспользоватьСинхронизациюДанных DontUse diff --git a/SSL/src/CommonCommands/ДобавитьПользователейСервиса/CommandModule.bsl b/SSL/src/CommonCommands/ДобавитьПользователейСервиса/CommandModule.bsl index 8957c4354..6b338c492 100644 --- a/SSL/src/CommonCommands/ДобавитьПользователейСервиса/CommandModule.bsl +++ b/SSL/src/CommonCommands/ДобавитьПользователейСервиса/CommandModule.bsl @@ -4,8 +4,7 @@ &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) - СтруктураПользователя = ОткрытьФорму("ОбщаяФорма.ПользователиСервиса", , - ПараметрыВыполненияКоманды.Источник); + ОткрытьФорму("ОбщаяФорма.ПользователиСервиса",, ПараметрыВыполненияКоманды.Источник); КонецПроцедуры diff --git a/SSL/src/CommonCommands/ОтправитьSMS/CommandModule.bsl b/SSL/src/CommonCommands/ОтправитьSMS/CommandModule.bsl index 555bb3552..6ccf738af 100644 --- a/SSL/src/CommonCommands/ОтправитьSMS/CommandModule.bsl +++ b/SSL/src/CommonCommands/ОтправитьSMS/CommandModule.bsl @@ -2,10 +2,14 @@ &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) - ПараметрыФормы = Новый Структура("ВидСообщения, Предмет"); - ПараметрыФормы.ВидСообщения = "СообщениеSMS"; - ПараметрыФормы.Предмет = ПараметрКоманды; - ОткрытьФорму("Справочник.ШаблоныСообщений.Форма.СформироватьСообщение", ПараметрыФормы, ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно, ПараметрыВыполненияКоманды.НавигационнаяСсылка); + + ДополнительныеПараметры = Новый Структура("ИмяФормыИсточникаСообщения", ""); + Если ТипЗнч(ПараметрыВыполненияКоманды.Источник) = Тип("УправляемаяФорма") Тогда + ДополнительныеПараметры.ИмяФормыИсточникаСообщения = ПараметрыВыполненияКоманды.Источник.ИмяФормы; + КонецЕсли; + + ШаблоныСообщенийКлиент.СформироватьСообщение(ПараметрКоманды, "СообщениеSMS",,, ДополнительныеПараметры); + КонецПроцедуры #КонецОбласти diff --git a/SSL/src/CommonCommands/ОтправитьПисьмо/CommandModule.bsl b/SSL/src/CommonCommands/ОтправитьПисьмо/CommandModule.bsl index 26ea66b19..c55f00b1f 100644 --- a/SSL/src/CommonCommands/ОтправитьПисьмо/CommandModule.bsl +++ b/SSL/src/CommonCommands/ОтправитьПисьмо/CommandModule.bsl @@ -2,10 +2,13 @@ &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) - ПараметрыФормы = Новый Структура("ВидСообщения, Предмет"); - ПараметрыФормы.ВидСообщения = "Письмо"; - ПараметрыФормы.Предмет = ПараметрКоманды; - ОткрытьФорму("Справочник.ШаблоныСообщений.Форма.СформироватьСообщение", ПараметрыФормы, ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно, ПараметрыВыполненияКоманды.НавигационнаяСсылка); + + ДополнительныеПараметры = Новый Структура("ИмяФормыИсточникаСообщения", ""); + Если ТипЗнч(ПараметрыВыполненияКоманды.Источник) = Тип("УправляемаяФорма") Тогда + ДополнительныеПараметры.ИмяФормыИсточникаСообщения = ПараметрыВыполненияКоманды.Источник.ИмяФормы; + КонецЕсли; + + ШаблоныСообщенийКлиент.СформироватьСообщение(ПараметрКоманды, "Письмо",,, ДополнительныеПараметры); КонецПроцедуры #КонецОбласти diff --git a/SSL/src/CommonCommands/СтруктураПодчиненности/СтруктураПодчиненности.mdo b/SSL/src/CommonCommands/СтруктураПодчиненности/СтруктураПодчиненности.mdo index e3740669e..0911b8d02 100644 --- a/SSL/src/CommonCommands/СтруктураПодчиненности/СтруктураПодчиненности.mdo +++ b/SSL/src/CommonCommands/СтруктураПодчиненности/СтруктураПодчиненности.mdo @@ -9,6 +9,6 @@ Auto ru - Открыть отчет "Связанные документы", который отображает связи текущего объекта с другими объектами информационной базы. + Перейти к иерархическому списку связанных документов diff --git a/SSL/src/CommonForms/БлокировкаРаботыСВнешнимиРесурсами/Module.bsl b/SSL/src/CommonForms/БлокировкаРаботыСВнешнимиРесурсами/Module.bsl index 25f4f0943..0dd28ff5d 100644 --- a/SSL/src/CommonForms/БлокировкаРаботыСВнешнимиРесурсами/Module.bsl +++ b/SSL/src/CommonForms/БлокировкаРаботыСВнешнимиРесурсами/Module.bsl @@ -120,12 +120,14 @@ &НаКлиенте Процедура ИнформационнаяБазаПеремещена(Команда) ИнформационнаяБазаПеремещенаНаСервере(); + СтандартныеПодсистемыКлиент.УстановитьРасширенныйЗаголовокПриложения(); Закрыть(); КонецПроцедуры &НаКлиенте Процедура ЭтоКопияИнформационнойБазы(Команда) ЭтоКопияИнформационнойБазыНаСервере(); + СтандартныеПодсистемыКлиент.УстановитьРасширенныйЗаголовокПриложения(); Закрыть(); КонецПроцедуры @@ -185,6 +187,7 @@ ИдентификаторИнформационнойБазы = Новый УникальныйИдентификатор(); Константы.ИдентификаторИнформационнойБазы.Установить(Строка(ИдентификаторИнформационнойБазы)); + ОбновитьПовторноИспользуемыеЗначения(); КонецПроцедуры &НаСервере diff --git a/SSL/src/CommonForms/ВыборДаты/Module.bsl b/SSL/src/CommonForms/ВыборДаты/Module.bsl index 602db1235..f4262b091 100644 --- a/SSL/src/CommonForms/ВыборДаты/Module.bsl +++ b/SSL/src/CommonForms/ВыборДаты/Module.bsl @@ -14,8 +14,6 @@ Возврат; КонецЕсли; - ДействиеВыбрано = Ложь; - НачальноеЗначение = Параметры.НачальноеЗначение; Если Не ЗначениеЗаполнено(НачальноеЗначение) Тогда diff --git a/SSL/src/CommonForms/ВыборИсполнителяБизнесПроцесса/Module.bsl b/SSL/src/CommonForms/ВыборИсполнителяБизнесПроцесса/Module.bsl index 4809cc644..2028ed369 100644 --- a/SSL/src/CommonForms/ВыборИсполнителяБизнесПроцесса/Module.bsl +++ b/SSL/src/CommonForms/ВыборИсполнителяБизнесПроцесса/Module.bsl @@ -84,7 +84,7 @@ #Область СлужебныеПроцедурыИФункции &НаКлиенте -Функция ВыборРоли(ТекущиеДанные) +Процедура ВыборРоли(ТекущиеДанные) Если ТекущиеДанные.ИспользуетсяСОбъектамиАдресации Тогда ПараметрыФормы = Новый Структура; @@ -98,7 +98,7 @@ ОповеститьОВыборе(ВыбранноеЗначение); КонецЕсли; -КонецФункции +КонецПроцедуры &НаСервере Процедура УстановитьУсловноеОформление() diff --git a/SSL/src/CommonForms/ВыборКонтакта/Module.bsl b/SSL/src/CommonForms/ВыборКонтакта/Module.bsl index 0d15b2f16..1acb9fbb7 100644 --- a/SSL/src/CommonForms/ВыборКонтакта/Module.bsl +++ b/SSL/src/CommonForms/ВыборКонтакта/Module.bsl @@ -57,7 +57,7 @@ ОписаниеКонтакта = Новый Структура; - МассивОписанийКонтакта = ВзаимодействияКлиентСервер.МассивОписанияВозможныхКонтактов(); + МассивОписанийКонтакта = ВзаимодействияКлиентСервер.ОписанияКонтактов(); Для Каждого ЭлементМассива Из МассивОписанийКонтакта Цикл Если ТипЗнч(ТекущиеДанные.Ссылка) = ЭлементМассива.Тип Тогда ОписаниеКонтакта = ЭлементМассива; @@ -224,7 +224,7 @@ ОписаниеКонтакта = Новый Структура; - МассивОписанийКонтакта = ВзаимодействияКлиентСервер.МассивОписанияВозможныхКонтактов(); + МассивОписанийКонтакта = ВзаимодействияКлиентСервер.ОписанияКонтактов(); Для Каждого ЭлементМассива Из МассивОписанийКонтакта Цикл Если ТипЗнч(КонтактДляВыбора) = ЭлементМассива.Тип Тогда ОписаниеКонтакта = ЭлементМассива; diff --git a/SSL/src/CommonForms/ВыборОбъектовМетаданных/Module.bsl b/SSL/src/CommonForms/ВыборОбъектовМетаданных/Module.bsl index 3e8c49b08..390491b81 100644 --- a/SSL/src/CommonForms/ВыборОбъектовМетаданных/Module.bsl +++ b/SSL/src/CommonForms/ВыборОбъектовМетаданных/Module.bsl @@ -289,7 +289,7 @@ СтруктураПараметров = Новый Структура; СтруктураПараметров.Вставить("Имя", ""); СтруктураПараметров.Вставить("ПолноеИмя", ""); - СтруктураПараметров.Вставить("Синоним", Ложь); + СтруктураПараметров.Вставить("Синоним", ""); СтруктураПараметров.Вставить("Пометка", 0); СтруктураПараметров.Вставить("Картинка", 0); СтруктураПараметров.Вставить("КартинкаОбъекта", Неопределено); diff --git a/SSL/src/CommonForms/ВыборУзловПлановОбмена/Module.bsl b/SSL/src/CommonForms/ВыборУзловПлановОбмена/Module.bsl index 90e5cfc30..e92b5f04e 100644 --- a/SSL/src/CommonForms/ВыборУзловПлановОбмена/Module.bsl +++ b/SSL/src/CommonForms/ВыборУзловПлановОбмена/Module.bsl @@ -115,7 +115,6 @@ Возврат; КонецЕсли; ПланОбмена = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ОбъектМетаданных.ПолноеИмя()).ПустаяСсылка(); - ПланОбменаПредставление = ОбъектМетаданных.Синоним; // Заполнение узлов используемых планов обмена. Если Параметры.ВыбиратьВсеУзлы Тогда diff --git a/SSL/src/CommonForms/ГруппыПользователей/Module.bsl b/SSL/src/CommonForms/ГруппыПользователей/Module.bsl index 4a8ef4d9e..ee0db5500 100644 --- a/SSL/src/CommonForms/ГруппыПользователей/Module.bsl +++ b/SSL/src/CommonForms/ГруппыПользователей/Module.bsl @@ -473,7 +473,7 @@ Иначе Предмет = Формат(КоличествоНеПеремещенныхПользователей, "ЧДЦ=0") + " " + ПользователиСлужебныйКлиентСервер.ПредметЦелогоЧисла(КоличествоНеПеремещенныхПользователей, - "Л = ru_RU", НСтр("ru = 'пользователю,пользователям,пользователям,,,,,,0'")); + "", НСтр("ru = 'пользователю,пользователям,пользователям,,,,,,0'")); СообщениеПользователю = НСтр("ru = 'Не всех пользователей удалось включить в выбранные группы, |т.к. у них различается тип или у групп установлен признак ""Все пользователи заданного типа"".'"); @@ -501,7 +501,7 @@ ИначеЕсли КоличествоПользователей > 1 Тогда СтрокаОбъект = Формат(КоличествоПользователей, "ЧДЦ=0") + " " + ПользователиСлужебныйКлиентСервер.ПредметЦелогоЧисла(КоличествоПользователей, - "Л = ru_RU", НСтр("ru = 'пользователя,пользователей,пользователей,,,,,,0'")); + "", НСтр("ru = 'пользователя,пользователей,пользователей,,,,,,0'")); УведомлениеПользователя.Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Изменен состав групп у %1'"), СтрокаОбъект); diff --git a/SSL/src/CommonForms/ДлительнаяОперация/Module.bsl b/SSL/src/CommonForms/ДлительнаяОперация/Module.bsl index e078c35eb..a5c28fa16 100644 --- a/SSL/src/CommonForms/ДлительнаяОперация/Module.bsl +++ b/SSL/src/CommonForms/ДлительнаяОперация/Module.bsl @@ -124,12 +124,7 @@ Закрыть(РезультатВыполнения(Задание)); Если ВозвращатьРезультатВОбработкуВыбора() Тогда - // Принимающий код не получает информацию об ошибках, а она выводится прямо здесь. - ПараметрыПредупреждения = Новый Структура; - ПараметрыПредупреждения.Вставить("Текст", Задание.КраткоеПредставлениеОшибки); - ПараметрыПредупреждения.Вставить("Подробно", Задание.ПодробноеПредставлениеОшибки); - ПараметрыПредупреждения.Вставить("Заголовок", НСтр("ru = 'Не удалось выполнить запрошенное действие'")); - СтандартныеПодсистемыКлиент.ВывестиПредупреждение(ВладелецФормы, ПараметрыПредупреждения); + ВызватьИсключение Задание.КраткоеПредставлениеОшибки; КонецЕсли; Возврат; diff --git a/SSL/src/CommonForms/ДополнительныеОтчетыИОбработки/Module.bsl b/SSL/src/CommonForms/ДополнительныеОтчетыИОбработки/Module.bsl index adf228a11..998c3b49c 100644 --- a/SSL/src/CommonForms/ДополнительныеОтчетыИОбработки/Module.bsl +++ b/SSL/src/CommonForms/ДополнительныеОтчетыИОбработки/Module.bsl @@ -248,22 +248,13 @@ СтандартныеПодсистемыКлиент.ОповеститьФормыОбИзменении(ОповеститьФормы); КонецЕсли; Иначе - Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаОткрытьОбработку; - Обработчик = Новый ОписаниеОповещения("ПослеПоказаТекстаОшибкиФоновогоЗадания", ЭтотОбъект); Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Команда ""%1"" не выполнена:'"), ВыполняемаяКоманда.Представление); - Предупреждение = Новый Структура; - Предупреждение.Вставить("Текст", Текст + Символы.ПС + Задание.КраткоеПредставлениеОшибки); - Предупреждение.Вставить("Подробно", Задание.ПодробноеПредставлениеОшибки); - СтандартныеПодсистемыКлиент.ВывестиПредупреждение(ЭтотОбъект, Предупреждение, Обработчик); - КонецЕсли; -КонецПроцедуры - -&НаКлиенте -Процедура ПослеПоказаТекстаОшибкиФоновогоЗадания(ПустойПараметр, ДополнительныеПараметры) Экспорт - Если Открыта() Тогда - Закрыть(); + Если Открыта() Тогда + Закрыть(); + КонецЕсли; + ВызватьИсключение Текст + Символы.ПС + Задание.КраткоеПредставлениеОшибки; КонецЕсли; КонецПроцедуры diff --git a/SSL/src/CommonForms/МастерАнкетыПоРазделам/Form.form b/SSL/src/CommonForms/МастерАнкетыПоРазделам/Form.form index 9abe07cb1..1e1d5bccd 100644 --- a/SSL/src/CommonForms/МастерАнкетыПоРазделам/Form.form +++ b/SSL/src/CommonForms/МастерАнкетыПоРазделам/Form.form @@ -357,20 +357,19 @@ 57 true - InputField + LabelField Auto + true true Left true - + Show + Always + 30 + true true false - true - true - true - true - Normal true @@ -1469,6 +1468,23 @@ true + + ВидФлажка + + <key>ru</key> + <value>Вид флажка</value> + + 27 + + EnumRef.ВидыФлажкаВАнкетах + + + true + + + true + + ТаблицаВопросовРаздела.СоставТабличногоВопроса @@ -1999,6 +2015,23 @@ true + + ВидФлажка + + <key>ru</key> + <value>Вид флажка</value> + + 8 + + EnumRef.ВидыФлажкаВАнкетах + + + true + + + true + + ДеревоРазделов diff --git a/SSL/src/CommonForms/НастройкаДоступаКСервисуMorpher/Form.form b/SSL/src/CommonForms/НастройкаДоступаКСервисуMorpher/Form.form index 9391c61cc..1d160d5e8 100644 --- a/SSL/src/CommonForms/НастройкаДоступаКСервисуMorpher/Form.form +++ b/SSL/src/CommonForms/НастройкаДоступаКСервисуMorpher/Form.form @@ -63,23 +63,23 @@ - ЛогинДоступаКСервисуMorpher - 4 - - <key>ru</key> - <value>Логин</value> - + Токен + 17 true true true - ЛогинДоступаКСервисуMorpher + Токен + + OnChange + ТокенПриИзменении + - ЛогинДоступаКСервисуMorpherРасширеннаяПодсказка - 6 + ТокенРасширеннаяПодсказка + 19 Label true true @@ -88,8 +88,8 @@ - ЛогинДоступаКСервисуMorpherКонтекстноеМеню - 5 + ТокенКонтекстноеМеню + 18 true InputField @@ -98,57 +98,8 @@ Left true - 23 true true - true - true - true - true - true - Normal - - - - ПарольДоступаКСервисуMorpher - 7 - - <key>ru</key> - <value>Пароль</value> - - true - true - - true - - - ПарольДоступаКСервисуMorpher - - - ПарольДоступаКСервисуMorpherРасширеннаяПодсказка - 9 - Label - true - true - - Left - - - - ПарольДоступаКСервисуMorpherКонтекстноеМеню - 8 - true - - InputField - Enter - true - Left - true - - 23 - true - true - true true true true @@ -160,6 +111,12 @@ ИнфоНадписьДоступКСервису 14 + + <key>ru</key> + <value>Анонимное использование сервиса имеет <link http://www.morpher.ru/ws3/#limitations>ограничения</>. +Получить токен можно в <link http://www.morpher.ru/My/Token.aspx>личном кабинете</> после регистрации. +</value> + true true @@ -180,6 +137,7 @@ 15 true + true Label true true @@ -284,15 +242,17 @@ - ПарольДоступаКСервисуMorpher + Токен <key>ru</key> - <value>Пароль доступа к сервису morpher</value> + <value>Токен</value> - 3 + 1 String - + + 40 + true @@ -302,15 +262,14 @@ - ЛогинДоступаКСервисуMorpher + ТокенИзменен <key>ru</key> - <value>Логин доступа к сервису morpher</value> + <value>Токен изменен</value> - 4 + 5 - String - + Boolean true diff --git a/SSL/src/CommonForms/НастройкаДоступаКСервисуMorpher/Help/ru.html b/SSL/src/CommonForms/НастройкаДоступаКСервисуMorpher/Help/ru.html index 481591834..ed8587f9f 100644 --- a/SSL/src/CommonForms/НастройкаДоступаКСервисуMorpher/Help/ru.html +++ b/SSL/src/CommonForms/НастройкаДоступаКСервисуMorpher/Help/ru.html @@ -1,10 +1,10 @@

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

      -

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

      +

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

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

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

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

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

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

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

    См. также:

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

    \ No newline at end of file diff --git a/SSL/src/CommonForms/НастройкаДоступаКСервисуMorpher/Module.bsl b/SSL/src/CommonForms/НастройкаДоступаКСервисуMorpher/Module.bsl index e28d29621..0ae73e2c4 100644 --- a/SSL/src/CommonForms/НастройкаДоступаКСервисуMorpher/Module.bsl +++ b/SSL/src/CommonForms/НастройкаДоступаКСервисуMorpher/Module.bsl @@ -9,22 +9,17 @@ КонецЕсли; УстановитьПривилегированныйРежим(Истина); - ЛогинДоступаКСервисуMorpher = Константы.ЛогинДоступаКСервисуMorpher.Получить(); - Пароль = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(ОбщегоНазначения.ИдентификаторОбъектаМетаданных("РегистрСведений.СклоненияПредставленийОбъектов"), "ПарольДоступаКСервисуMorpher"); + ВладелецТокена = ОбщегоНазначения.ИдентификаторОбъектаМетаданных("РегистрСведений.СклоненияПредставленийОбъектов"); + Токен = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(ВладелецТокена, "ТокенДоступаКСервисуMorpher"); УстановитьПривилегированныйРежим(Ложь); - ВидДоступаКСервисуMorher = ?(ЗначениеЗаполнено(ЛогинДоступаКСервисуMorpher), 1, 0); + ВидДоступаКСервисуMorher = 0; + Если ЗначениеЗаполнено(Токен) Тогда + ВидДоступаКСервисуMorher = 1; + Токен = ЭтотОбъект.УникальныйИдентификатор; + КонецЕсли; УстановитьДоступностьЭлементов(); - ПарольДоступаКСервисуMorpher = ?(ЗначениеЗаполнено(Пароль), ЭтотОбъект.УникальныйИдентификатор, ""); - - ЧастиСтроки = Новый Массив; - ЧастиСтроки.Добавить(НСтр("ru = 'Анонимное использование сервиса имеет ограничения.'")); - ЧастиСтроки.Добавить(" "); - ЧастиСтроки.Добавить(Новый ФорматированнаяСтрока("Подробнее", , , , "http://www.morpher.ru/WebService.aspx#limitations")); - - Элементы.ИнфоНадписьДоступКСервису.Заголовок = Новый ФорматированнаяСтрока(ЧастиСтроки); - КонецПроцедуры #КонецОбласти @@ -37,12 +32,17 @@ УстановитьДоступностьЭлементов(); Если ВидДоступаКСервисуMorher = 0 Тогда - ЛогинДоступаКСервисуMorpher = ""; - ПарольДоступаКСервисуMorpher = ""; + Токен = Неопределено; + ТокенИзменен = Истина; КонецЕсли; КонецПроцедуры +&НаКлиенте +Процедура ТокенПриИзменении(Элемент) + ТокенИзменен = Истина; +КонецПроцедуры + #КонецОбласти #Область ОбработчикиКомандФормы @@ -50,6 +50,13 @@ &НаКлиенте Процедура ОК(Команда) + Отказ = Ложь; + ПроверитьТокен(Отказ); + + Если Отказ Тогда + Возврат; + КонецЕсли; + СохранитьИзмененияНаСервере(); Закрыть(); @@ -62,36 +69,56 @@ &НаСервере Процедура СохранитьИзмененияНаСервере() + Если Не ТокенИзменен Тогда + Возврат; + КонецЕсли; + УстановитьПривилегированныйРежим(Истина); + ВладелецТокена = ОбщегоНазначения.ИдентификаторОбъектаМетаданных("РегистрСведений.СклоненияПредставленийОбъектов"); + ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(ВладелецТокена, Токен, "ТокенДоступаКСервисуMorpher"); + УстановитьПривилегированныйРежим(Ложь); - // Установка логина. - Константы.ЛогинДоступаКСервисуMorpher.Установить(ЛогинДоступаКСервисуMorpher); - // Установка пароля. - ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(ОбщегоНазначения.ИдентификаторОбъектаМетаданных("РегистрСведений.СклоненияПредставленийОбъектов"), ПарольДоступаКСервисуMorpher, "ПарольДоступаКСервисуMorpher"); - ПарольДоступаКСервисуMorpher = ?(ЗначениеЗаполнено(ПарольДоступаКСервисуMorpher), ЭтотОбъект.УникальныйИдентификатор, ""); - ПарольДоступаКСервисуMorpherИзменен = Ложь; + Если ЗначениеЗаполнено(Токен) Тогда + Токен = ЭтотОбъект.УникальныйИдентификатор; + КонецЕсли; - СклонениеПредставленийОбъектов.УстановитьДоступностьСервисаСклонения(Истина); + ТокенИзменен = Ложь; КонецПроцедуры &НаСервере Процедура УстановитьДоступностьЭлементов() - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы( - Элементы, - "ЛогинДоступаКСервисуMorpher", - "Доступность", - ВидДоступаКСервисуMorher = 1); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы( Элементы, - "ПарольДоступаКСервисуMorpher", + "Токен", "Доступность", ВидДоступаКСервисуMorher = 1); + + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы( + Элементы, + "Токен", + "АвтоОтметкаНезаполненного", + ВидДоступаКСервисуMorher = 1); + + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы( + Элементы, + "Токен", + "ОтметкаНезаполненного", + Не ЗначениеЗаполнено(Токен)); КонецПроцедуры +&НаКлиенте +Процедура ПроверитьТокен(Отказ) + + Если ВидДоступаКСервисуMorher = 1 И Не ЗначениеЗаполнено(Токен) Тогда + ТекстСообщения = НСтр("ru = 'Токен доступа не заполнен.'"); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, , , "Токен", Отказ); + КонецЕсли; + +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/CommonForms/НастройкаДоступаКСервисуMorpher/НастройкаДоступаКСервисуMorpher.mdo b/SSL/src/CommonForms/НастройкаДоступаКСервисуMorpher/НастройкаДоступаКСервисуMorpher.mdo index 507d860fa..c01b0d485 100644 --- a/SSL/src/CommonForms/НастройкаДоступаКСервисуMorpher/НастройкаДоступаКСервисуMorpher.mdo +++ b/SSL/src/CommonForms/НастройкаДоступаКСервисуMorpher/НастройкаДоступаКСервисуMorpher.mdo @@ -3,7 +3,7 @@ НастройкаДоступаКСервисуMorpher ru - Настройка доступа к сервису morpher + Настройка доступа к сервису «Морфер» diff --git a/SSL/src/CommonForms/НастройкаОбменаСообщениями/Module.bsl b/SSL/src/CommonForms/НастройкаОбменаСообщениями/Module.bsl index 286e45ac0..bd2ada028 100644 --- a/SSL/src/CommonForms/НастройкаОбменаСообщениями/Module.bsl +++ b/SSL/src/CommonForms/НастройкаОбменаСообщениями/Module.bsl @@ -8,8 +8,8 @@ Возврат; КонецЕсли; - Если РаботаВМоделиСервисаПовтИсп.РазделениеВключено() - И РаботаВМоделиСервисаПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + Если РаботаВМоделиСервиса.РазделениеВключено() + И РаботаВМоделиСервиса.ДоступноИспользованиеРазделенныхДанных() Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю( НСтр("ru = 'Настройка подсистемы в разделенном режиме не поддерживается.'"),,,, Отказ); diff --git a/SSL/src/CommonForms/ОтправкаСообщения/Module.bsl b/SSL/src/CommonForms/ОтправкаСообщения/Module.bsl index d336a9c60..d9276eb8d 100644 --- a/SSL/src/CommonForms/ОтправкаСообщения/Module.bsl +++ b/SSL/src/CommonForms/ОтправкаСообщения/Module.bsl @@ -1,21 +1,12 @@ +#Область ОписаниеПеременных + +&НаКлиенте +Перем ИсторияПолучателей; + +#КонецОбласти + #Область ОбработчикиСобытийФормы -// Заполняет поля формы по переданным в форму параметрам. -// -// В форму могут передаваться следующие параметры: -// УчетнаяЗапись* - СправочникСсылка.УчетныеЗаписиЭлектроннойПочты, список - -// ссылка на учетную запись, которая будет использоваться -// при отправке сообщения, либо список из учетных записей (для выбора). -// Вложения - соответствие - вложения в письмо, где -// ключ - имя файла -// значение - двоичные данные файла. -// Тема - строка - тема письма. -// Тело - строка - тело письма. -// Кому - соответствие/строка - адресаты письма -// если тип соответствие, то -// ключ - строка - Имя адресата -// значение - строка - электронный адрес в формате addr@server. -// &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -23,6 +14,8 @@ Возврат; КонецЕсли; + РезультатУспехЦвет = ЦветаСтиля.РезультатУспехЦвет; + ВложенияДляПисьма = Новый Структура; Если ТипЗнч(Параметры.Вложения) = Тип("СписокЗначений") Или ТипЗнч(Параметры.Вложения) = Тип("Массив") Тогда @@ -35,9 +28,6 @@ ТелоПисьма.УстановитьHTML(ТекстВHTML(Параметры.Текст), ВложенияДляПисьма); АдресОтвета = Параметры.АдресОтвета; - // Обработка сложных параметров формы (составного типа). - // УчетнаяЗапись, Кому. - Если НЕ ЗначениеЗаполнено(Параметры.Отправитель) Тогда // Учетная запись не передана - выбираем первую доступную. ДоступныеУчетныеЗаписи = РаботаСПочтовымиСообщениями.ДоступныеУчетныеЗаписи(Истина); @@ -114,8 +104,6 @@ КонецЕсли; Если ТипЗнч(Параметры.Получатель) = Тип("Массив") Тогда - РезультатУспехЦвет = ЦветаСтиля.РезультатУспехЦвет; - Если ТипЗнч(Параметры.Получатель) = Тип("Строка") Тогда ЗаполнитьТаблицуПолучателейИзСтроки(Параметры.Получатель); ИначеЕсли ТипЗнч(Параметры.Получатель) = Тип("СписокЗначений") Тогда @@ -201,11 +189,13 @@ &НаКлиенте Процедура ПриЗакрытии(ЗавершениеРаботы) - АдресаВложений = Новый Массив; - Для Каждого Вложение Из Вложения Цикл - АдресаВложений.Добавить(Вложение.АдресВоВременномХранилище); - КонецЦикла; - ОчиститьВложения(АдресаВложений); + Если Не ЗавершениеРаботы Тогда + АдресаВложений = Новый Массив; + Для Каждого Вложение Из Вложения Цикл + АдресаВложений.Добавить(Вложение.АдресВоВременномХранилище); + КонецЦикла; + ОчиститьВложения(АдресаВложений); + КонецЕсли; КонецПроцедуры #КонецОбласти @@ -262,36 +252,12 @@ Процедура ПочтовыйАдресПолучателейПредставлениеАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка) Если ПолучателиСообщения.Количество() = 0 Тогда - Возврат; + ДанныеВыбора = ПохожиеПолучателиИзИстории(Текст); + Иначе + ДанныеВыбора = ПохожиеПолучателиИзСпискаПереданных(Текст); КонецЕсли; - СтандартнаяОбработка = Ложь; - - ДанныеВыбора = Новый СписокЗначений; - - СписокАдресов = Новый Массив; - Для каждого СтрокаТаблицы Из ПочтовыеАдресаПолучателей Цикл - Адрес = ПочтовыйАдресИзПредставления(СтрокаТаблицы.Представление); - Если ЗначениеЗаполнено(Адрес) Тогда - СписокАдресов.Добавить(ВРег(Адрес)); - КонецЕсли; - КонецЦикла; - ПредставлениеВыбор = Новый ФорматированнаяСтрока(Текст, Новый Шрифт(,, Истина), РезультатУспехЦвет); - ДлинаТекста = СтрДлина(Текст); - Для Каждого Почта Из ПолучателиСообщения Цикл - Адрес = ПочтовыйАдресИзПредставления(Почта.Значение); - Если СписокАдресов.Найти(ВРег(Адрес)) = Неопределено Тогда - Позиция = СтрНайти(Почта.Значение, Текст); - Если Позиция > 0 Тогда - Представление= Новый ФорматированнаяСтрока(Лев(Почта.Представление, Позиция - 1), ПредставлениеВыбор, Сред(Почта.Представление, Позиция + ДлинаТекста)); - ДанныеВыбора.Добавить(Почта.Значение, Представление); - КонецЕсли; - КонецЕсли; - КонецЦикла; - - Если ДанныеВыбора.Количество() = 0 Тогда - СтандартнаяОбработка = Истина; - КонецЕсли; + СтандартнаяОбработка = ДанныеВыбора.Количество() = 0; КонецПроцедуры @@ -491,7 +457,7 @@ Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ШаблоныСообщений") Тогда МодульШаблоныСообщенийКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ШаблоныСообщенийКлиент"); Оповещение = Новый ОписаниеОповещения("ЗаполнитьПоШаблонуПослеВыбораШаблона", ЭтотОбъект); - МодульШаблоныСообщенийКлиент.ВыбратьШаблон(Оповещение); + МодульШаблоныСообщенийКлиент.ПодготовитьСообщениеПоШаблону("Общий", "Письмо", Оповещение); КонецЕсли КонецПроцедуры @@ -509,6 +475,7 @@ Возврат Ложь; КонецЕсли; РаботаСПочтовымиСообщениями.ОтправитьПочтовоеСообщение(УчетнаяЗапись, ПараметрыПисьма); + ДобавитьПолучателейВИсторию(ПараметрыПисьма.Кому); Возврат Истина; КонецФункции @@ -1014,4 +981,93 @@ КонецЦикла; КонецПроцедуры +&НаСервереБезКонтекста +Процедура ДобавитьПолучателейВИсторию(ПолучателиПисьма) + + ИсторияПолучателей = ИсторияПолучателей(); + Для Каждого Получатель Из ПолучателиПисьма Цикл + ИсторияПолучателей.Вставить(Получатель.Адрес, Получатель.Представление); + КонецЦикла; + + ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("РедактированиеНовогоПисьма", "ИсторияПолучателей", ИсторияПолучателей); + +КонецПроцедуры + +&НаСервереБезКонтекста +Функция ИсторияПолучателей() + + Возврат ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("РедактированиеНовогоПисьма", "ИсторияПолучателей", Новый Соответствие); + +КонецФункции + +&НаКлиенте +Функция ПредставлениеАдреса(Адрес, ПредставлениеПолучателя) + Результат = Адрес; + Если Не ПустаяСтрока(ПредставлениеПолучателя) Тогда + Результат = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("%1 <%2>", ПредставлениеПолучателя, Адрес); + КонецЕсли; + Возврат Результат; +КонецФункции + +&НаКлиенте +Функция ПохожиеПолучателиИзИстории(Строка) + + Результат = Новый СписокЗначений; + Если СтрДлина(Строка) = 0 Тогда + Возврат Результат; + КонецЕсли; + + Если ИсторияПолучателей = Неопределено Тогда + ИсторияПолучателей = ИсторияПолучателей(); + КонецЕсли; + + Для Каждого Получатель Из ИсторияПолучателей Цикл + ПредставлениеАдреса = ПредставлениеАдреса(Получатель.Ключ, Получатель.Значение); + Позиция = СтрНайти(НРег(ПредставлениеАдреса), НРег(Строка)); + Если Позиция > 0 Тогда + ПодстрокаДоВхождения = Лев(ПредставлениеАдреса, Позиция - 1); + ПодстрокаВхождения = Сред(ПредставлениеАдреса, Позиция, СтрДлина(Строка)); + ПодстрокаПослеВхождения = Сред(ПредставлениеАдреса, Позиция + СтрДлина(Строка)); + СтрокаСПодсветкой = Новый ФорматированнаяСтрока( + ПодстрокаДоВхождения, + Новый ФорматированнаяСтрока(ПодстрокаВхождения, Новый Шрифт( , , Истина), РезультатУспехЦвет), + ПодстрокаПослеВхождения); + Результат.Добавить(ПредставлениеАдреса, СтрокаСПодсветкой); + КонецЕсли; + КонецЦикла; + + Возврат Результат; + +КонецФункции + +&НаКлиенте +Функция ПохожиеПолучателиИзСпискаПереданных(Знач Текст) + + Результат = Новый СписокЗначений; + + СписокАдресов = Новый Массив; + Для каждого СтрокаТаблицы Из ПочтовыеАдресаПолучателей Цикл + Адрес = ПочтовыйАдресИзПредставления(СтрокаТаблицы.Представление); + Если ЗначениеЗаполнено(Адрес) Тогда + СписокАдресов.Добавить(ВРег(Адрес)); + КонецЕсли; + КонецЦикла; + + ПредставлениеВыбор = Новый ФорматированнаяСтрока(Текст, Новый Шрифт(,, Истина), РезультатУспехЦвет); + ДлинаТекста = СтрДлина(Текст); + Для Каждого Почта Из ПолучателиСообщения Цикл + Адрес = ПочтовыйАдресИзПредставления(Почта.Значение); + Если СписокАдресов.Найти(ВРег(Адрес)) = Неопределено Тогда + Позиция = СтрНайти(Почта.Значение, Текст); + Если Позиция > 0 Тогда + Представление= Новый ФорматированнаяСтрока(Лев(Почта.Представление, Позиция - 1), ПредставлениеВыбор, Сред(Почта.Представление, Позиция + ДлинаТекста)); + Результат.Добавить(Почта.Значение, Представление); + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Возврат Результат; + +КонецФункции + #КонецОбласти diff --git a/SSL/src/CommonForms/ПанельОтчетов/Module.bsl b/SSL/src/CommonForms/ПанельОтчетов/Module.bsl index 973664e2f..d4927afcc 100644 --- a/SSL/src/CommonForms/ПанельОтчетов/Module.bsl +++ b/SSL/src/CommonForms/ПанельОтчетов/Module.bsl @@ -1001,8 +1001,8 @@ "ВЫБРАТЬ | Подсистемы.Ссылка КАК Подсистема, | Подсистемы.РазделСсылка КАК РазделСсылка, - | Подсистемы.Представление, - | Подсистемы.Приоритет + | Подсистемы.Представление КАК Представление, + | Подсистемы.Приоритет КАК Приоритет |ПОМЕСТИТЬ втПодсистемы |ИЗ | &ТаблицаПодсистем КАК Подсистемы @@ -1010,26 +1010,26 @@ | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ РАЗРЕШЕННЫЕ - | ВариантыОтчетов.Ссылка, - | ПредопределенныеРазмещение.Подсистема, - | ПредопределенныеРазмещение.Важный, - | ПредопределенныеРазмещение.СмТакже, + | ВариантыОтчетов.Ссылка КАК Ссылка, + | ПредопределенныеРазмещение.Подсистема КАК Подсистема, + | ПредопределенныеРазмещение.Важный КАК Важный, + | ПредопределенныеРазмещение.СмТакже КАК СмТакже, | ВЫБОР | КОГДА ПОДСТРОКА(ВариантыОтчетов.Описание, 1, 1) = """" | ТОГДА ВЫРАЗИТЬ(ПредопределенныеРазмещение.Ссылка.Описание КАК СТРОКА(1000)) | ИНАЧЕ ВЫРАЗИТЬ(ВариантыОтчетов.Описание КАК СТРОКА(1000)) | КОНЕЦ КАК Описание, - | ВариантыОтчетов.Наименование, - | ВариантыОтчетов.Отчет, - | ВариантыОтчетов.ТипОтчета, - | ВариантыОтчетов.КлючВарианта, - | ВариантыОтчетов.Автор, + | ВариантыОтчетов.Наименование КАК Наименование, + | ВариантыОтчетов.Отчет КАК Отчет, + | ВариантыОтчетов.ТипОтчета КАК ТипОтчета, + | ВариантыОтчетов.КлючВарианта КАК КлючВарианта, + | ВариантыОтчетов.Автор КАК Автор, | ВЫБОР | КОГДА ВариантыОтчетов.ВидимостьПоУмолчаниюПереопределена | ТОГДА ВариантыОтчетов.ВидимостьПоУмолчанию | ИНАЧЕ ПредопределенныеРазмещение.Ссылка.ВидимостьПоУмолчанию | КОНЕЦ КАК ВидимостьПоУмолчанию, - | ВариантыОтчетов.Родитель, + | ВариантыОтчетов.Родитель КАК Родитель, | ВариантыОтчетов.ПредопределенныйВариант.КлючЗамеров КАК КлючЗамеров |ПОМЕСТИТЬ втПредопределенные |ИЗ @@ -1080,23 +1080,23 @@ | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ РАЗРЕШЕННЫЕ - | ВариантыРазмещение.Ссылка, - | ВариантыРазмещение.Подсистема, - | ВариантыРазмещение.Использование, - | ВариантыРазмещение.Важный, - | ВариантыРазмещение.СмТакже, + | ВариантыРазмещение.Ссылка КАК Ссылка, + | ВариантыРазмещение.Подсистема КАК Подсистема, + | ВариантыРазмещение.Использование КАК Использование, + | ВариантыРазмещение.Важный КАК Важный, + | ВариантыРазмещение.СмТакже КАК СмТакже, | ВЫБОР | КОГДА ПОДСТРОКА(ВариантыРазмещение.Ссылка.Описание, 1, 1) = """" | И НЕ ВариантыРазмещение.Ссылка.Пользовательский | ТОГДА ВЫРАЗИТЬ(ВариантыРазмещение.Ссылка.ПредопределенныйВариант.Описание КАК СТРОКА(1000)) | ИНАЧЕ ВЫРАЗИТЬ(ВариантыРазмещение.Ссылка.Описание КАК СТРОКА(1000)) | КОНЕЦ КАК Описание, - | ВариантыРазмещение.Ссылка.ТолькоДляАвтора, - | ВариантыРазмещение.Ссылка.Наименование, - | ВариантыРазмещение.Ссылка.Отчет, - | ВариантыРазмещение.Ссылка.ТипОтчета, - | ВариантыРазмещение.Ссылка.КлючВарианта, - | ВариантыРазмещение.Ссылка.Автор, + | ВариантыРазмещение.Ссылка.ТолькоДляАвтора КАК ТолькоДляАвтора, + | ВариантыРазмещение.Ссылка.Наименование КАК Наименование, + | ВариантыРазмещение.Ссылка.Отчет КАК Отчет, + | ВариантыРазмещение.Ссылка.ТипОтчета КАК ТипОтчета, + | ВариантыРазмещение.Ссылка.КлючВарианта КАК КлючВарианта, + | ВариантыРазмещение.Ссылка.Автор КАК Автор, | ВЫБОР | КОГДА ВариантыРазмещение.Ссылка.Родитель = ЗНАЧЕНИЕ(Справочник.ВариантыОтчетов.ПустаяСсылка) | ТОГДА ЗНАЧЕНИЕ(Справочник.ВариантыОтчетов.ПустаяСсылка) @@ -1104,7 +1104,7 @@ | ТОГДА ВариантыРазмещение.Ссылка.Родитель | ИНАЧЕ ВариантыРазмещение.Ссылка.Родитель.Родитель | КОНЕЦ КАК Родитель, - | ВариантыРазмещение.Ссылка.ВидимостьПоУмолчанию, + | ВариантыРазмещение.Ссылка.ВидимостьПоУмолчанию КАК ВидимостьПоУмолчанию, | ВариантыРазмещение.Ссылка.ПредопределенныйВариант.КлючЗамеров КАК КлючЗамеров |ПОМЕСТИТЬ втВарианты |ИЗ @@ -1117,10 +1117,10 @@ | И ВариантыРазмещение.Подсистема В(&МассивПодсистем) | И ВариантыРазмещение.Ссылка.Отчет В(&ОтчетыПользователя) | И НЕ ВариантыРазмещение.Ссылка.ПредопределенныйВариант В (&ОтключенныеВариантыПрограммы) - | И НЕ(ВариантыРазмещение.Ссылка.Пользовательский - | И ВариантыРазмещение.Ссылка.ИнтерактивнаяПометкаУдаления) - | И НЕ(НЕ ВариантыРазмещение.Ссылка.Пользовательский - | И ВариантыРазмещение.Ссылка.ПометкаУдаления) + | И (НЕ ВариантыРазмещение.Ссылка.Пользовательский + | ИЛИ НЕ ВариантыРазмещение.Ссылка.ИнтерактивнаяПометкаУдаления) + | И (ВариантыРазмещение.Ссылка.Пользовательский + | ИЛИ НЕ ВариантыРазмещение.Ссылка.ПометкаУдаления) |; | |//////////////////////////////////////////////////////////////////////////////// @@ -1150,14 +1150,13 @@ | ПО втПредопределенные.Ссылка = втВарианты.Ссылка | И втПредопределенные.Подсистема = втВарианты.Подсистема |ГДЕ - | НЕ(НЕ втВарианты.Использование = ИСТИНА - | И НЕ втВарианты.Использование ЕСТЬ NULL) + | ЕСТЬNULL(втВарианты.Использование, ИСТИНА) |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ РАЗРЕШЕННЫЕ - | втВсеВарианты.Ссылка, - | втВсеВарианты.Подсистема, + | втВсеВарианты.Ссылка КАК Ссылка, + | втВсеВарианты.Подсистема КАК Подсистема, | втПодсистемы.Представление КАК ПодсистемаПредставление, | втПодсистемы.Приоритет КАК ПодсистемаПриоритет, | втПодсистемы.РазделСсылка КАК РазделСсылка, @@ -1167,8 +1166,8 @@ | ТОГДА ИСТИНА | ИНАЧЕ ЛОЖЬ | КОНЕЦ КАК БезГруппы, - | втВсеВарианты.Важный, - | втВсеВарианты.СмТакже, + | втВсеВарианты.Важный КАК Важный, + | втВсеВарианты.СмТакже КАК СмТакже, | ВЫБОР | КОГДА втВсеВарианты.ТипОтчета = &ТипДополнительный | ТОГДА ИСТИНА @@ -1185,14 +1184,14 @@ | ИНАЧЕ ПОДСТРОКА(ВЫРАЗИТЬ(втВсеВарианты.Отчет КАК СТРОКА(150)), 14, 137) | КОНЕЦ КАК ИмяОтчета, | втВсеВарианты.Наименование КАК Наименование, - | втВсеВарианты.Описание, - | втВсеВарианты.Автор, - | втВсеВарианты.Отчет, - | втВсеВарианты.ТипОтчета, - | втВсеВарианты.КлючВарианта, - | втВсеВарианты.Родитель, + | втВсеВарианты.Описание КАК Описание, + | втВсеВарианты.Автор КАК Автор, + | втВсеВарианты.Отчет КАК Отчет, + | втВсеВарианты.ТипОтчета КАК ТипОтчета, + | втВсеВарианты.КлючВарианта КАК КлючВарианта, + | втВсеВарианты.Родитель КАК Родитель, | втВсеВарианты.ВерхнийУровень КАК ВерхнийУровень, - | втВсеВарианты.КлючЗамеров + | втВсеВарианты.КлючЗамеров КАК КлючЗамеров |ИЗ | втВсеВарианты КАК втВсеВарианты | ЛЕВОЕ СОЕДИНЕНИЕ втПодсистемы КАК втПодсистемы @@ -1612,7 +1611,6 @@ ДеревоРаспределения.Колонки.Добавить("ВерхнийУровень", Новый ОписаниеТипов("Булево")); МаксимальныйУровеньВложенности = 0; - ТекущаяПодсистема = Неопределено; Для Каждого Подсистема Из ПараметрыЗаполнения.ПодсистемыРаздела Цикл diff --git a/SSL/src/CommonForms/ПараметрыПроксиСервера/Module.bsl b/SSL/src/CommonForms/ПараметрыПроксиСервера/Module.bsl index bdb511826..d7ff82c65 100644 --- a/SSL/src/CommonForms/ПараметрыПроксиСервера/Module.bsl +++ b/SSL/src/CommonForms/ПараметрыПроксиСервера/Module.bsl @@ -336,14 +336,23 @@ Результат.Вставить("Пользователь", ""); Результат.Вставить("Пароль" , ""); + Результат.Вставить("ИспользоватьАутентификациюОС", Ложь); + Результат.Вставить("НеИспользоватьПроксиДляЛокальныхАдресов", Ложь); Результат.Вставить("НеИспользоватьПроксиДляАдресов", Новый Массив); + Возврат Результат; КонецФункции &НаКлиентеНаСервереБезКонтекста Функция СистемныеНастройкиПроксиСервера() + +#Если ВебКлиент Тогда + + Возврат ПустыеНастройкиПроксиСервера(); + +#Иначе Прокси = Новый ИнтернетПрокси(Истина); @@ -360,7 +369,7 @@ Результат.Вставить("Пользователь", Прокси.Пользователь("")); Результат.Вставить("Пароль" , Прокси.Пароль("")); - Результат.Вставить("ИспользоватьАутентификациюОС" , Прокси.ИспользоватьАутентификациюОС("")); + Результат.Вставить("ИспользоватьАутентификациюОС", Прокси.ИспользоватьАутентификациюОС("")); Результат.Вставить("НеИспользоватьПроксиДляЛокальныхАдресов", Прокси.НеИспользоватьПроксиДляЛокальныхАдресов); @@ -373,6 +382,8 @@ Возврат Результат; +#КонецЕсли + КонецФункции &НаСервереБезКонтекста diff --git a/SSL/src/CommonForms/ПечатьДокументов/Form.form b/SSL/src/CommonForms/ПечатьДокументов/Form.form index 688d3d334..85da20bdf 100644 --- a/SSL/src/CommonForms/ПечатьДокументов/Form.form +++ b/SSL/src/CommonForms/ПечатьДокументов/Form.form @@ -422,8 +422,8 @@
    Form.Command.Печать + Normal Auto - true true true UserCmds diff --git a/SSL/src/CommonForms/ПечатьДокументов/Module.bsl b/SSL/src/CommonForms/ПечатьДокументов/Module.bsl index bb93d79b1..15fef2a19 100644 --- a/SSL/src/CommonForms/ПечатьДокументов/Module.bsl +++ b/SSL/src/CommonForms/ПечатьДокументов/Module.bsl @@ -11,7 +11,7 @@ Возврат; КонецЕсли; - Если Не Пользователи.РолиДоступны("ИзменениеМакетовПечатныхФорм") Тогда + Если Не ПравоДоступа("Изменение", Метаданные.РегистрыСведений.ПользовательскиеМакетыПечати) Тогда Элементы.КнопкаПерейтиКУправлениюМакетами.Видимость = Ложь; КонецЕсли; @@ -85,7 +85,13 @@ СохранитьПечатнуюФормуВФайл(); Возврат; КонецЕсли; - ПодключитьОбработчикОжидания("УстановитьТекущуюСтраницу", 0.1, Истина); + +#Если ВебКлиент Тогда + Интервал = 1; +#Иначе + Интервал = 0.1; +#КонецЕсли + ПодключитьОбработчикОжидания("УстановитьТекущуюСтраницу", Интервал, Истина); КонецПроцедуры &НаКлиенте @@ -614,7 +620,7 @@ ДобавитьКоличествоЭкземпляровВПредставленияхПечатныхФорм(); КонецЕсли; - ДоступноИзменениеМакетов = Пользователи.РолиДоступны("ИзменениеМакетовПечатныхФорм") И ЕстьРедактируемыеМакеты(); + ДоступноИзменениеМакетов = ПравоДоступа("Изменение", Метаданные.РегистрыСведений.ПользовательскиеМакетыПечати) И ЕстьРедактируемыеМакеты(); Элементы.КнопкаИзменитьМакет.Видимость = ДоступноИзменениеМакетов И ЕстьДанныеДляПечати; КонецПроцедуры @@ -890,9 +896,13 @@ Если Область = Неопределено Тогда Продолжить; КонецЕсли; - ТабличныйДокумент = ПечатнаяФорма.ПолучитьОбласть(Область.Верх, , Область.Низ); - ЗаполнитьЗначенияСвойств(ТабличныйДокумент, ПечатнаяФорма, - УправлениеПечатью.КопируемыеСвойстваТабличногоДокумента()); + Если ОбъектыПечати.Количество() = 1 Тогда + ТабличныйДокумент = ПечатнаяФорма; + Иначе + ТабличныйДокумент = ПечатнаяФорма.ПолучитьОбласть(Область.Верх, , Область.Низ); + ЗаполнитьЗначенияСвойств(ТабличныйДокумент, ПечатнаяФорма, + УправлениеПечатью.КопируемыеСвойстваТабличногоДокумента()); + КонецЕсли; Результат.Вставить(ОбъектПечати.Значение, ТабличныйДокумент); КонецЦикла; Возврат Результат; diff --git a/SSL/src/CommonForms/ПраваДоступаУпрощенно/Module.bsl b/SSL/src/CommonForms/ПраваДоступаУпрощенно/Module.bsl index a451a33ea..b12f164ca 100644 --- a/SSL/src/CommonForms/ПраваДоступаУпрощенно/Module.bsl +++ b/SSL/src/CommonForms/ПраваДоступаУпрощенно/Module.bsl @@ -118,10 +118,10 @@ ТекущаяСтрокаЗначенияДоступаПриОшибке = Элементы.ЗначенияДоступа.ТекущаяСтрока; Элементы.Профили.ТекущаяСтрока = СвойстваПрофиля.ПолучитьИдентификатор(); - ПриИзмененииТекущегоПрофиля(ЭтотОбъект); + ПриИзмененииТекущегоПрофиля(ЭтотОбъект, Ложь); Элементы.ВидыДоступа.ТекущаяСтрока = ТекущаяСтрокаВидаДоступа; - УправлениеДоступомСлужебныйКлиентСервер.ПриИзмененииТекущегоВидаДоступа(ЭтотОбъект); + УправлениеДоступомСлужебныйКлиентСервер.ПриИзмененииТекущегоВидаДоступа(ЭтотОбъект, Ложь); ОбщегоНазначенияКлиентСервер.СообщитьОшибкиПользователю(Ошибки, Отказ); Иначе @@ -869,17 +869,18 @@ КонецПроцедуры &НаКлиентеНаСервереБезКонтекста -Процедура ПриИзмененииТекущегоПрофиля(Знач Форма) +Процедура ПриИзмененииТекущегоПрофиля(Знач Форма, Знач ОбработкаНаКлиенте = Истина) Элементы = Форма.Элементы; Профили = Форма.Профили; ВидыДоступа = Форма.ВидыДоступа; - #Если Клиент Тогда + Если ОбработкаНаКлиенте Тогда ТекущиеДанные = Элементы.Профили.ТекущиеДанные; - #Иначе - ТекущиеДанные = Профили.НайтиПоИдентификатору(?(Элементы.Профили.ТекущаяСтрока = Неопределено, -1, Элементы.Профили.ТекущаяСтрока)); - #КонецЕсли + Иначе + ТекущиеДанные = Профили.НайтиПоИдентификатору( + ?(Элементы.Профили.ТекущаяСтрока = Неопределено, -1, Элементы.Профили.ТекущаяСтрока)); + КонецЕсли; ДоступностьТекущихОграниченийБыло = Форма.ДоступностьТекущихОграничений; РедактированиеТекущихОграниченийБыло = Форма.РедактированиеТекущихОграничений; @@ -919,18 +920,18 @@ ТекущиеВидыДоступа = ВидыДоступа.НайтиСтроки(Новый Структура("ГруппаДоступа", Форма.ТекущаяГруппаДоступа)); Если ТекущиеВидыДоступа.Количество() = 0 Тогда Элементы.ЗначенияДоступа.ОтборСтрок = Новый ФиксированнаяСтруктура("ГруппаДоступа, ВидДоступа", Форма.ТекущаяГруппаДоступа, ""); - УправлениеДоступомСлужебныйКлиентСервер.ПриИзмененииТекущегоВидаДоступа(Форма); + УправлениеДоступомСлужебныйКлиентСервер.ПриИзмененииТекущегоВидаДоступа(Форма, ОбработкаНаКлиенте); Иначе Элементы.ВидыДоступа.ТекущаяСтрока = ТекущиеВидыДоступа[0].ПолучитьИдентификатор(); КонецЕсли; КонецЕсли; Если ТребуетсяОбновитьОтображениеТекущихОграничений Тогда - #Если Клиент Тогда - Форма.ПодключитьОбработчикОжидания("ОбновитьОтображениеТекущихОграниченийОбработчикОжидания", 0.1, Истина); - #Иначе - ОбновитьОтображениеТекущихОграничений(Форма); - #КонецЕсли + Если ОбработкаНаКлиенте Тогда + Форма.ПодключитьОбработчикОжидания("ОбновитьОтображениеТекущихОграниченийОбработчикОжидания", 0.1, Истина); + Иначе + ОбновитьОтображениеТекущихОграничений(Форма); + КонецЕсли; КонецЕсли; КонецПроцедуры diff --git a/SSL/src/CommonForms/Расширения/Module.bsl b/SSL/src/CommonForms/Расширения/Module.bsl index 5f7c060a3..e89523e7b 100644 --- a/SSL/src/CommonForms/Расширения/Module.bsl +++ b/SSL/src/CommonForms/Расширения/Module.bsl @@ -779,7 +779,6 @@ ВызватьИсключение; КонецПопытки; - ТекстОшибки = ""; Попытка ОбновитьПараметрыРаботыРасширений(ПроверяемыеРасширения, НеподключенныеРасширения); РасширенияИзменены = Истина; diff --git a/SSL/src/CommonForms/РедактированиеДополнительныхСведений/Module.bsl b/SSL/src/CommonForms/РедактированиеДополнительныхСведений/Module.bsl index 35630e730..650e9bd80 100644 --- a/SSL/src/CommonForms/РедактированиеДополнительныхСведений/Module.bsl +++ b/SSL/src/CommonForms/РедактированиеДополнительныхСведений/Module.bsl @@ -10,12 +10,12 @@ Возврат; КонецЕсли; - Если Не Пользователи.РолиДоступны("ИзменениеДополнительныхСведений") Тогда + Если Не ПравоДоступа("Изменение", Метаданные.РегистрыСведений.ДополнительныеСведения) Тогда Элементы.ФормаЗаписать.Видимость = Ложь; Элементы.ФормаЗаписатьИЗакрыть.Видимость = Ложь; КонецЕсли; - Если Не Пользователи.РолиДоступны("ДобавлениеИзменениеДополнительныхРеквизитовИСведений") Тогда + Если Не ПравоДоступа("Изменение", Метаданные.Справочники.НаборыДополнительныхРеквизитовИСведений) Тогда Элементы.ИзменитьСоставДополнительныхСведений.Видимость = Ложь; КонецЕсли; @@ -187,18 +187,20 @@ ЗначенияСвойств, ДоступныеНаборыСвойств, Истина); МодульУправлениеДоступомСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступомСлужебный"); + ПроверятьПрава = Не Пользователи.ЭтоПолноправныйПользователь() И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом"); + Если ПроверятьПрава Тогда + ПроверяемыеСвойства = Таблица.ВыгрузитьКолонку("Свойство"); + РазрешенныеСвойства = МодульУправлениеДоступомСлужебный.РазрешенныеЗначенияДляДинамическогоСписка( + ПроверяемаяТаблица, + ЗначениеДоступа, + ПроверяемыеСвойства); + КонецЕсли; + Для Каждого Строка Из Таблица Цикл - ПроверяемыеСвойства = Новый Массив; - ПроверяемыеСвойства.Добавить(Строка.Свойство); - ДоступноДляИзменения = Истина; - Если Не Пользователи.ЭтоПолноправныйПользователь() И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + Если ПроверятьПрава Тогда // Проверка на чтение свойства. - РазрешенныеСвойства = МодульУправлениеДоступомСлужебный.РазрешенныеЗначенияДляДинамическогоСписка( - ПроверяемаяТаблица, - ЗначениеДоступа, - ПроверяемыеСвойства); - Если РазрешенныеСвойства.Количество() = 0 Тогда + Если РазрешенныеСвойства.Найти(Строка.Свойство) = Неопределено Тогда Продолжить; КонецЕсли; @@ -208,16 +210,17 @@ Набор = РегистрыСведений.ДополнительныеСведения.СоздатьНаборЗаписей(); Набор.Отбор.Объект.Установить(Параметры.Ссылка); Набор.Отбор.Свойство.Установить(Строка.Свойство); - Набор.Прочитать(); - Набор.Очистить(); Запись = Набор.Добавить(); Запись.Свойство = Строка.Свойство; - Запись.Объект = Параметры.Ссылка; - Набор.Записать(); + Запись.Объект = Параметры.Ссылка; + Набор.ОбменДанными.Загрузка = Истина; + Набор.Записать(Истина); ОтменитьТранзакцию(); Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); ОтменитьТранзакцию(); ДоступноДляИзменения = Ложь; КонецПопытки; diff --git a/SSL/src/CommonForms/СинхронизацияДанных/Module.bsl b/SSL/src/CommonForms/СинхронизацияДанных/Module.bsl index c055454e3..f005f94c7 100644 --- a/SSL/src/CommonForms/СинхронизацияДанных/Module.bsl +++ b/SSL/src/CommonForms/СинхронизацияДанных/Module.bsl @@ -15,7 +15,7 @@ Элементы.СписокСостоянияУзловИзменитьУзелИнформационнойБазы.Видимость = Ложь; КонецЕсли; - Если Не Пользователи.РолиДоступны("АдминистраторСистемы") Тогда + Если Не ПравоДоступа("Администрирование", Метаданные) Тогда Элементы.СоставОтправляемыхДанных.Видимость = Ложь; Элементы.СписокСостоянияУзловСоставОтправляемыхДанных.Видимость = Ложь; Элементы.СписокСостоянияУзловКонтекстноеМенюСоставОтправляемыхДанных.Видимость = Ложь; @@ -561,7 +561,7 @@ "ЗаголовокУзлаПланаОбмена", ВариантНастройки); - ЕстьПравоНаПросмотрЖурналаРегистрации = Пользователи.РолиДоступны("ПросмотрЖурналаРегистрации"); + ЕстьПравоНаПросмотрЖурналаРегистрации = ПравоДоступа("ЖурналРегистрации", Метаданные); Если ЕстьПравоНаПросмотрЖурналаРегистрации Тогда diff --git a/SSL/src/CommonForms/Склонения/Form.form b/SSL/src/CommonForms/Склонения/Form.form index ff0066cc9..52de4395b 100644 --- a/SSL/src/CommonForms/Склонения/Form.form +++ b/SSL/src/CommonForms/Склонения/Form.form @@ -382,7 +382,7 @@ 35 <key>ru</key> - <value>Склонение было выполнено без использования сервиса morpher.ru. + <value>Склонение было выполнено без использования сервиса «Морфер». Включить использование сервиса можно в настройках программы.</value> true @@ -477,7 +477,7 @@ 49 <key>ru</key> - <value>Сервис склонения morpher.ru недоступен. </value> + <value>Сервис склонения «Морфер» недоступен.</value> true true @@ -818,12 +818,7 @@ Пол 9 - - Number - - 1 - - + true diff --git a/SSL/src/CommonForms/СозданиеНачальногоОбразаСФайлами/Module.bsl b/SSL/src/CommonForms/СозданиеНачальногоОбразаСФайлами/Module.bsl index e8ac1c324..e4b192b1e 100644 --- a/SSL/src/CommonForms/СозданиеНачальногоОбразаСФайлами/Module.bsl +++ b/SSL/src/CommonForms/СозданиеНачальногоОбразаСФайлами/Module.bsl @@ -102,6 +102,7 @@ Процедура ПутьКАрхивуСФайламиТомовНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) ОбработчикСохраненияФайла( + Элемент, "ПутьКАрхивуСФайламиТомовWindows", СтандартнаяОбработка, "files.zip", @@ -113,6 +114,7 @@ Процедура ПолноеИмяФайловойБазыНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) ОбработчикСохраненияФайла( + Элемент, "ПолноеИмяФайловойБазыWindows", СтандартнаяОбработка, "1Cv8.1CD", @@ -132,16 +134,24 @@ ПолноеИмяФайловойБазыWindows = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(СтруктураПути.ПолноеИмя); ПолноеИмяФайловойБазыWindows = ПолноеИмяФайловойБазыWindows + "1Cv8.1CD"; КонецЕсли; + МассивКаталогов = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ПутьКФайлу, "\", Истина); ПолныйПуть = ""; - Если Не ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент() Тогда - Для Каждого Каталог Из МассивКаталогов Цикл - ПолныйПуть = ПолныйПуть + Каталог + "\"; - Файл = Новый Файл(ПолныйПуть); - Если НЕ Файл.Существует() Тогда - СоздатьКаталог(ПолныйПуть); - КонецЕсли; - КонецЦикла; + + Если Не ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент() + И МассивКаталогов.Количество() > 0 Тогда + Файл = Новый Файл(МассивКаталогов[0]); + + ТекущийМассив = Новый Массив; + ТекущийМассив.Добавить(МассивКаталогов[0]); + + ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("ПолныйПуть", Файл.ПолноеИмя); + ДополнительныеПараметры.Вставить("МассивКаталогов", + ОбщегоНазначенияКлиентСервер.РазностьМассивов(МассивКаталогов, ТекущийМассив)); + + Оповещение = Новый ОписаниеОповещения("ПроверкаСуществованияПолноеИмяФайловойБазыЗавершение", ЭтотОбъект, ДополнительныеПараметры); + Файл.НачатьПроверкуСуществования(Оповещение); КонецЕсли; КонецЕсли; @@ -215,7 +225,49 @@ #Область СлужебныеПроцедурыИФункции &НаКлиенте -Процедура ОбработчикСохраненияФайла(ИмяСвойства, +Процедура ПроверкаСуществованияПолноеИмяФайловойБазыЗавершение(Существует, ДополнительныеПараметры) Экспорт + + Если Не Существует Тогда + Оповещение = Новый ОписаниеОповещения("СозданиеКаталогаЗавершение", ЭтотОбъект, ДополнительныеПараметры); + НачатьСозданиеКаталога(Оповещение, ДополнительныеПараметры.ПолныйПуть); + Возврат; + КонецЕсли; + + ПродолжитьПроверкуСуществованияПолноеИмяФайловойБазы(ДополнительныеПараметры.ПолныйПуть, + ДополнительныеПараметры.МассивКаталогов); + +КонецПроцедуры + +&НаКлиенте +Процедура ПродолжитьПроверкуСуществованияПолноеИмяФайловойБазы(ПолныйПуть, МассивКаталогов) + Если МассивКаталогов.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + Файл = Новый Файл(ПолныйПуть + "\" + МассивКаталогов[0]); + + ТекущийМассив = Новый Массив; + ТекущийМассив.Добавить(МассивКаталогов[0]); + + ПараметрыОповещения = Новый Структура; + ПараметрыОповещения.Вставить("ПолныйПуть", Файл.ПолноеИмя); + ПараметрыОповещения.Вставить("МассивКаталогов", + ОбщегоНазначенияКлиентСервер.РазностьМассивов(МассивКаталогов, ТекущийМассив)); + + Оповещение = Новый ОписаниеОповещения("ПроверкаСуществованияПолноеИмяФайловойБазыЗавершение", ЭтотОбъект, ПараметрыОповещения); + Файл.НачатьПроверкуСуществования(Оповещение); +КонецПроцедуры + +&НаКлиенте +Процедура СозданиеКаталогаЗавершение(ИмяКаталога, ДополнительныеПараметры) Экспорт + + ПродолжитьПроверкуСуществованияПолноеИмяФайловойБазы(ИмяКаталога, ДополнительныеПараметры.МассивКаталогов); + +КонецПроцедуры + +&НаКлиенте +Процедура ОбработчикСохраненияФайла(Элемент, + ИмяСвойства, СтандартнаяОбработка, ИмяФайла, Фильтр = "") @@ -223,9 +275,10 @@ СтандартнаяОбработка = Ложь; ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("Элемент", Элемент); ДополнительныеПараметры.Вставить("ИмяСвойства", ИмяСвойства); - ДополнительныеПараметры.Вставить("ИмяФайла", ИмяФайла); - ДополнительныеПараметры.Вставить("Фильтр", Фильтр); + ДополнительныеПараметры.Вставить("ИмяФайла", ИмяФайла); + ДополнительныеПараметры.Вставить("Фильтр", Фильтр); ОповещениеПодключенияРасширенияРаботыСФайлами = Новый ОписаниеОповещения( "ОбработчикСохраненияФайлаПослеПодключенияРасширенияРаботыСФайлами", @@ -268,6 +321,9 @@ И ВыбранныеФайлы.Количество() = 1 Тогда ЭтотОбъект[ДополнительныеПараметры.ИмяСвойства] = ВыбранныеФайлы[0]; + Если ДополнительныеПараметры.Элемент = Элементы.ПолноеИмяФайловойБазы Тогда + ПолноеИмяФайловойБазыПриИзменении(ДополнительныеПараметры.Элемент); + КонецЕсли; КонецЕсли; КонецПроцедуры @@ -275,6 +331,21 @@ &НаСервереБезКонтекста Функция ПодготовитьДанныеДляСозданияНачальногоОбраза(ПараметрыЗадания, ВидБазы) + // Запись параметров подключения узла в константу. + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда + + Отказ = Ложь; + + ПомощникСозданияОбменаДанными = Обработки["ПомощникСозданияОбменаДанными"].Создать(); + ПомощникСозданияОбменаДанными.Инициализация(ПараметрыЗадания.Узел); + ПомощникСозданияОбменаДанными.ВыполнитьВыгрузкуПараметровМастераВКонстанту(Отказ); + + Если Отказ Тогда + Возврат Неопределено; + КонецЕсли; + + КонецЕсли; + Если ВидБазы = 0 Тогда // Файловый начальный образ. // Функция обработки, проверки и подготовки параметров. diff --git a/SSL/src/CommonForms/СозданиеРезервнойКопии/Module.bsl b/SSL/src/CommonForms/СозданиеРезервнойКопии/Module.bsl index 5f08f0f82..112faa45d 100644 --- a/SSL/src/CommonForms/СозданиеРезервнойКопии/Module.bsl +++ b/SSL/src/CommonForms/СозданиеРезервнойКопии/Module.bsl @@ -33,9 +33,9 @@ Результат = СоздатьКопиюОбластиНаСервере(); - Если Результат.ЗаданиеВыполнено Тогда + Если Результат.Статус = "Выполнено" Тогда ОбработатьРезультатВыполненияЗадания(); - Иначе + ИначеЕсли Результат.Статус = "Выполняется" Тогда ДлительныеОперацииКлиент.ИнициализироватьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания); ПодключитьОбработчикОжидания("Подключаемый_ПроверитьВыполнениеЗадания", 1, Истина); ФормаДлительнойОперации = ДлительныеОперацииКлиент.ОткрытьФормуДлительнойОперации(ЭтотОбъект, ИдентификаторЗадания); @@ -106,7 +106,7 @@ СнятьМонопольныйРежим(); - Событие = РезервноеКопированиеОбластейДанныхПовтИсп.НаименованиеФоновогоРезервногоКопирования(); + Событие = РезервноеКопированиеОбластейДанных.НаименованиеФоновогоРезервногоКопирования(); ЗаписьЖурналаРегистрации(Событие, УровеньЖурналаРегистрации.Ошибка, , , ПредставлениеОшибки); КонецПроцедуры @@ -123,12 +123,18 @@ ПараметрыЗадания.Принудительно = Истина; ПараметрыЗадания.ПоТребованию = Истина; + ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(ЭтотОбъект.УникальныйИдентификатор); + ПараметрыВыполнения.НаименованиеФоновогоЗадания = РезервноеКопированиеОбластейДанных.НаименованиеФоновогоРезервногоКопирования(); + ПараметрыВыполнения.ЗапуститьВФоне = Истина; + Попытка - Результат = ДлительныеОперации.ЗапуститьВыполнениеВФоне( - УникальныйИдентификатор, + + + + Результат = ДлительныеОперации.ВыполнитьВФоне( РезервноеКопированиеОбластейДанных.ИмяМетодаФоновогоРезервногоКопирования(), - ПараметрыЗадания, - РезервноеКопированиеОбластейДанныхПовтИсп.НаименованиеФоновогоРезервногоКопирования()); + ПараметрыЗадания, + ПараметрыВыполнения); Исключение ПредставлениеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); @@ -136,7 +142,7 @@ ВызватьИсключение; КонецПопытки; - АдресХранилища = Результат.АдресХранилища; + АдресХранилища = Результат.АдресРезультата; ИдентификаторЗадания = Результат.ИдентификаторЗадания; Возврат Результат; diff --git a/SSL/src/CommonForms/СравнениеТабличныхДокументов/Attributes/ТабличныйДокументЛевый/ExtInfo/SpreadsheetData.mxlx b/SSL/src/CommonForms/СравнениеТабличныхДокументов/Attributes/ТабличныйДокументЛевый/ExtInfo/SpreadsheetData.mxlx new file mode 100644 index 000000000..70a095c0a --- /dev/null +++ b/SSL/src/CommonForms/СравнениеТабличныхДокументов/Attributes/ТабличныйДокументЛевый/ExtInfo/SpreadsheetData.mxlx @@ -0,0 +1,7 @@ + + + + 0 + + 0 + \ No newline at end of file diff --git a/SSL/src/CommonForms/СравнениеТабличныхДокументов/Attributes/ТабличныйДокументПравый/ExtInfo/SpreadsheetData.mxlx b/SSL/src/CommonForms/СравнениеТабличныхДокументов/Attributes/ТабличныйДокументПравый/ExtInfo/SpreadsheetData.mxlx new file mode 100644 index 000000000..70a095c0a --- /dev/null +++ b/SSL/src/CommonForms/СравнениеТабличныхДокументов/Attributes/ТабличныйДокументПравый/ExtInfo/SpreadsheetData.mxlx @@ -0,0 +1,7 @@ + + + + 0 + + 0 + \ No newline at end of file diff --git a/SSL/src/CommonForms/СравнениеТабличныхДокументов/Module.bsl b/SSL/src/CommonForms/СравнениеТабличныхДокументов/Module.bsl index a89262a36..081f360f1 100644 --- a/SSL/src/CommonForms/СравнениеТабличныхДокументов/Module.bsl +++ b/SSL/src/CommonForms/СравнениеТабличныхДокументов/Module.bsl @@ -580,12 +580,12 @@ КонецПроцедуры &НаСервере -Функция ПрочитатьТабличныйДокументИзХранилища(ДокументВХранилище, Документ) +Процедура ПрочитатьТабличныйДокументИзХранилища(ДокументВХранилище, Документ) ВременныйФайл = ПолучитьИмяВременногоФайла("mxl"); ДвоичныеДанные = ПолучитьИзВременногоХранилища(ДокументВХранилище); ДвоичныеДанные.Записать(ВременныйФайл); Документ.Прочитать(ВременныйФайл); УдалитьФайлы(ВременныйФайл); -КонецФункции +КонецПроцедуры #КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonForms/СтруктураПодчиненности/Form.form b/SSL/src/CommonForms/СтруктураПодчиненности/Form.form index c7d07b9f0..c1de2e418 100644 --- a/SSL/src/CommonForms/СтруктураПодчиненности/Form.form +++ b/SSL/src/CommonForms/СтруктураПодчиненности/Form.form @@ -469,6 +469,21 @@ + + Настройки + + <key>ru</key> + <value>Настройки</value> + + 6 + + + true + + + true + + Обновить diff --git a/SSL/src/CommonForms/СтруктураПодчиненности/Module.bsl b/SSL/src/CommonForms/СтруктураПодчиненности/Module.bsl index 592bb68a5..61db0b18e 100644 --- a/SSL/src/CommonForms/СтруктураПодчиненности/Module.bsl +++ b/SSL/src/CommonForms/СтруктураПодчиненности/Module.bsl @@ -8,10 +8,10 @@ Возврат; КонецЕсли; + ОпределитьНастройки(); + Параметры.Свойство("ОбъектОтбора", ОбъектСсылка); - ИсходныйОбъект = ОбъектСсылка; - Если ЗначениеЗаполнено(ОбъектСсылка) Тогда ОбновитьДеревоСтруктурыПодчиненности(); КонецЕсли; @@ -275,16 +275,15 @@ Выборка = ПолучитьВыборкуПоРеквизитамОбъекта(ОбъектСсылка); Если Выборка.Следующий() Тогда - ПереопределяемоеПредставление = СтруктураПодчиненностиПереопределяемый.ПредставлениеОбъектаДляВыводаВОтчет(Выборка); - + ПереопределяемоеПредставление = ПредставлениеОбъектаДляВывода(Выборка); Если ПереопределяемоеПредставление <> Неопределено Тогда СтруктураРеквизитов = ОбщегоНазначения.СтрокаТаблицыЗначенийВСтруктуру(Выборка.Владелец().Выгрузить()[0]); СтруктураРеквизитов.Представление = ПереопределяемоеПредставление; - ВывестиПредставлениеИКартинку(СтруктураРеквизитов,Макет,Истина); + ВывестиПредставлениеИКартинку(СтруктураРеквизитов, Макет, Истина); Иначе СтруктураРеквизитов = ОбщегоНазначения.СтрокаТаблицыЗначенийВСтруктуру(Выборка.Владелец().Выгрузить()[0]); - СтруктураРеквизитов.Представление = ПредставлениеОбъектаДляВыводаВОтчет(СтруктураРеквизитов); - ВывестиПредставлениеИКартинку(СтруктураРеквизитов,Макет,Истина); + СтруктураРеквизитов.Представление = ПредставлениеОбъектаДляВыводаВОтчет(Выборка); + ВывестиПредставлениеИКартинку(СтруктураРеквизитов, Макет, Истина); КонецЕсли; КонецЕсли; @@ -455,8 +454,8 @@ |"; Если ОбщегоНазначения.ЭтоДокумент(МетаданныеОбъекта) Тогда - ИмяРеквизитаСумма = ИмяРеквизитаДокумента(МетаданныеОбъекта.Имя, "СуммаДокумента"); - ИмяРеквизитаВалюта = ИмяРеквизитаДокумента(МетаданныеОбъекта.Имя, "Валюта"); + ИмяРеквизитаСумма = ИмяРеквизитаДокумента(МетаданныеОбъекта, "СуммаДокумента"); + ИмяРеквизитаВалюта = ИмяРеквизитаДокумента(МетаданныеОбъекта, "Валюта"); ИмяРеквизитаПроведен = "Проведен"; Иначе ИмяРеквизитаСумма = Неопределено; @@ -468,8 +467,7 @@ ЗаменитьТекстЗапроса(ТекстЗапроса, МетаданныеОбъекта, "#Сумма", ИмяРеквизитаСумма, "СуммаДокумента"); ЗаменитьТекстЗапроса(ТекстЗапроса, МетаданныеОбъекта, "#Валюта", ИмяРеквизитаВалюта, "Валюта"); - МассивДопРеквизитов = СтруктураПодчиненностиПереопределяемый.МассивРеквизитовОбъектаДляФормированияПредставления(МетаданныеОбъекта.Имя); - + МассивДопРеквизитов = РеквизитыДляПредставления(МетаданныеОбъекта.ПолноеИмя(), МетаданныеОбъекта.Имя); ДополнитьТекстЗапросаПоРеквизитамОбъекта(ТекстЗапроса, МассивДопРеквизитов); Запрос = Новый Запрос(ТекстЗапроса); @@ -592,8 +590,8 @@ Если Выборка.Следующий() Тогда СтрокаДерева = ДобавитьСтрокуВДерево(СтрокиДерева, Выборка); - Если НЕ ДобавляемыйОбъектИмеетсяСредиРодителей(ДеревоРодитель,ЭлементСписка.Значение) Тогда - ВывестиРодительскиеОбъекты(ЭлементСписка.Значение,СтрокаДерева); + Если НЕ ДобавляемыйОбъектИмеетсяСредиРодителей(ДеревоРодитель, ЭлементСписка.Значение) Тогда + ВывестиРодительскиеОбъекты(ЭлементСписка.Значение, СтрокаДерева); КонецЕсли; КонецЕсли; @@ -612,7 +610,7 @@ // Булево - Истина если найден, Ложь в обратном случае. // &НаСервере -Функция ДобавляемыйОбъектИмеетсяСредиРодителей(СтрокаРодитель,ИскомыйОбъект) +Функция ДобавляемыйОбъектИмеетсяСредиРодителей(СтрокаРодитель, ИскомыйОбъект) Если ИскомыйОбъект = ОбъектСсылка Тогда Возврат Истина; @@ -656,7 +654,7 @@ Если ЯвляетсяДокументом Тогда - ИмяРеквизитаСуммаДокумента = ИмяРеквизитаДокумента(МетаданныеОбъекта.Имя, "СуммаДокумента"); + ИмяРеквизитаСуммаДокумента = ИмяРеквизитаДокумента(МетаданныеОбъекта, "СуммаДокумента"); Если МетаданныеОбъекта.Реквизиты.Найти(ИмяРеквизитаСуммаДокумента) <> Неопределено Тогда РеквизитыДокумента.Вставить("СуммаДокумента", ИмяРеквизитаСуммаДокумента); @@ -672,7 +670,7 @@ Если ЯвляетсяДокументом Тогда - ИмяРеквизитаВалюта = ИмяРеквизитаДокумента(МетаданныеОбъекта.Имя, "Валюта"); + ИмяРеквизитаВалюта = ИмяРеквизитаДокумента(МетаданныеОбъекта, "Валюта"); Если МетаданныеОбъекта.Реквизиты.Найти(ИмяРеквизитаВалюта) <> Неопределено Тогда РеквизитыДокумента.Вставить("Валюта", ИмяРеквизитаВалюта); @@ -795,7 +793,7 @@ Запрос.УстановитьПараметр(ИмяОбъекта, КлючИЗначение.Значение); - МассивДопРеквизитов = СтруктураПодчиненностиПереопределяемый.МассивРеквизитовОбъектаДляФормированияПредставления(ИмяОбъекта); + МассивДопРеквизитов = РеквизитыДляПредставления(КлючИЗначение.Ключ, ИмяОбъекта); ДополнитьТекстЗапросаПоРеквизитамОбъекта(ТекстПоТипуОбъекта, МассивДопРеквизитов); ТекстЗапроса = ТекстЗапроса + ?(ТекстЗапроса = "", " ВЫБРАТЬ ", " ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ") + ТекстПоТипуОбъекта; @@ -808,8 +806,8 @@ Пока Выборка.Следующий() Цикл НоваяСтрока = ДобавитьСтрокуВДерево(СтрокиДерева, Выборка); - Если НЕ ДобавляемыйОбъектИмеетсяСредиРодителей(ДеревоРодитель,Выборка.Ссылка) Тогда - ВывестиПодчиненныеОбъекты(Выборка.Ссылка,НоваяСтрока) + Если НЕ ДобавляемыйОбъектИмеетсяСредиРодителей(ДеревоРодитель, Выборка.Ссылка) Тогда + ВывестиПодчиненныеОбъекты(Выборка.Ссылка, НоваяСтрока) КонецЕсли; КонецЦикла; @@ -822,7 +820,7 @@ НоваяСтрока = СтрокиДерева.Добавить(); ЗаполнитьЗначенияСвойств(НоваяСтрока, Выборка, "Ссылка, Представление, СуммаДокумента, Валюта, Проведен, ПометкаУдаления"); - ПереопределенноеПредставление = СтруктураПодчиненностиПереопределяемый.ПредставлениеОбъектаДляВыводаВОтчет(Выборка); + ПереопределенноеПредставление = ПредставлениеОбъектаДляВывода(Выборка); Если ПереопределенноеПредставление <> Неопределено Тогда НоваяСтрока.Представление = ПереопределенноеПредставление; Иначе @@ -850,16 +848,62 @@ КонецПроцедуры &НаСервере -Функция ИмяРеквизитаДокумента(ИмяОбъекта, Реквизит) +Функция ИмяРеквизитаДокумента(Знач МетаданныеОбъекта, Знач ИмяРеквизита) - ИмяРеквизитаДокумента = СтруктураПодчиненностиПереопределяемый.ИмяРеквизитаДокумента(ИмяОбъекта, Реквизит); + ИменаРеквизитов = Настройки.Реквизиты[МетаданныеОбъекта.ПолноеИмя()]; + Если ИменаРеквизитов <> Неопределено Тогда + Результат = ИменаРеквизитов[ИмяРеквизита]; + Возврат ?(Результат <> Неопределено, Результат, ИмяРеквизита); + КонецЕсли; - Если Реквизит = "СуммаДокумента" Тогда - Возврат ?(ИмяРеквизитаДокумента = Неопределено,"СуммаДокумента",ИмяРеквизитаДокумента); - ИначеЕсли Реквизит = "Валюта" Тогда - Возврат ?(ИмяРеквизитаДокумента = Неопределено,"Валюта",ИмяРеквизитаДокумента); + // Для обратной совместимости. + ИмяРеквизитаДокумента = СтруктураПодчиненностиПереопределяемый.ИмяРеквизитаДокумента(МетаданныеОбъекта.Имя, ИмяРеквизита); + Если ИмяРеквизита = "СуммаДокумента" Тогда + Возврат ?(ИмяРеквизитаДокумента = Неопределено, "СуммаДокумента", ИмяРеквизитаДокумента); + ИначеЕсли ИмяРеквизита = "Валюта" Тогда + Возврат ?(ИмяРеквизитаДокумента = Неопределено, "Валюта", ИмяРеквизитаДокумента); КонецЕсли; КонецФункции +&НаСервере +Процедура ОпределитьНастройки() + + НастройкиПодсистемы = Новый Структура; + НастройкиПодсистемы.Вставить("Реквизиты", Новый Соответствие); + НастройкиПодсистемы.Вставить("РеквизитыДляПредставления", Новый Соответствие); + СтруктураПодчиненностиПереопределяемый.ПриОпределенииНастроек(НастройкиПодсистемы); + + Настройки = НастройкиПодсистемы; + +КонецПроцедуры + +&НаСервере +Функция РеквизитыДляПредставления(Знач ПолноеИмяОбъектаМетаданных, Знач ИмяОбъектаМетаданных) + + Результат = Настройки.РеквизитыДляПредставления[ПолноеИмяОбъектаМетаданных]; + Если Результат <> Неопределено Тогда + Возврат Результат; + КонецЕсли; + + // Для обратной совместимости. + Возврат СтруктураПодчиненностиПереопределяемый.МассивРеквизитовОбъектаДляФормированияПредставления(ИмяОбъектаМетаданных); + +КонецФункции + +&НаСервере +Функция ПредставлениеОбъектаДляВывода(Данные) + + Результат = ""; + СтандартнаяОбработка = Истина; + СтруктураПодчиненностиПереопределяемый.ПриПолученииПредставления(ТипЗнч(Данные.Ссылка), Данные, Результат, СтандартнаяОбработка); + Если Не СтандартнаяОбработка Тогда + Возврат Результат; + КонецЕсли; + + // Для обратной совместимости. + Возврат СтруктураПодчиненностиПереопределяемый.ПредставлениеОбъектаДляВыводаВОтчет(Данные); + +КонецФункции + #КонецОбласти diff --git a/SSL/src/CommonForms/УточнениеКонтактов/Form.form b/SSL/src/CommonForms/УточнениеКонтактов/Form.form index 695ee2fbf..9749f71ac 100644 --- a/SSL/src/CommonForms/УточнениеКонтактов/Form.form +++ b/SSL/src/CommonForms/УточнениеКонтактов/Form.form @@ -782,8 +782,7 @@ 5 - String - + Boolean true diff --git a/SSL/src/CommonForms/УточнениеКонтактов/Module.bsl b/SSL/src/CommonForms/УточнениеКонтактов/Module.bsl index d3e17697d..2d7cebbe9 100644 --- a/SSL/src/CommonForms/УточнениеКонтактов/Module.bsl +++ b/SSL/src/CommonForms/УточнениеКонтактов/Module.bsl @@ -10,8 +10,6 @@ Возврат; КонецЕсли; - соотвАдреса = Новый Соответствие; - Предмет = Параметры.Предмет; Письмо = Параметры.Письмо; НеИзменятьПредставлениеПриИзмененииКонтакта = (ТипЗнч(Письмо) = Тип("ДокументСсылка.ЭлектронноеПисьмоВходящее")); @@ -379,7 +377,7 @@ &НаСервере Процедура ЗаполнитьТаблицыТекущихEmailКонтактов() - МассивОписанияТиповКонтактов = ВзаимодействияКлиентСервер.МассивОписанияВозможныхКонтактов(); + МассивОписанияТиповКонтактов = ВзаимодействияКлиентСервер.ОписанияКонтактов(); ТекстЗапроса = "ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ | Контакты.Контакт @@ -627,22 +625,6 @@ КонтактОбъект.Записать(); - ВыполнятьЗамену = Истина; - - НайденныеСтроки = ТаблицаКонтактов.НайтиСтроки(Новый Структура("Адрес" ,Выборка.Адрес)); - Для каждого НайденнаяСтрока Из НайденныеСтроки Цикл - Если НайденнаяСтрока.Изменять Тогда - Если НайденнаяСтрока.СписокНайденныхКонтактов.Количество() > 1 Тогда - ВыполнятьЗамену = Ложь; - ИначеЕсли НайденнаяСтрока.СписокНайденныхКонтактов.Количество() = 1 - И НайденнаяСтрока.СписокНайденныхКонтактов.Получить(0) <> КонтактОбъект.Ссылка Тогда - - ВыполнятьЗамену = Ложь; - - КонецЕсли; - КонецЕсли; - КонецЦикла; - Запрос = Новый Запрос; Запрос.Текст = " |ВЫБРАТЬ diff --git a/SSL/src/CommonForms/ФайлыВТоме/Form.form b/SSL/src/CommonForms/ФайлыВТоме/Form.form index 8d2ac6e83..7c06b35be 100644 --- a/SSL/src/CommonForms/ФайлыВТоме/Form.form +++ b/SSL/src/CommonForms/ФайлыВТоме/Form.form @@ -550,14 +550,14 @@
    true
    ВЫБРАТЬ - ХранилищеФайлов.Ссылка КАК Ссылка, + ХранилищеФайловПереопределяемый.Ссылка КАК Ссылка, 1 КАК ИндексКартинки, ВЫРАЗИТЬ("" КАК СТРОКА) КАК ПутьКФайлу, ВЫРАЗИТЬ(0 КАК ЧИСЛО(10, 0)) КАК Размер, ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка) КАК Автор, ЛОЖЬ КАК ЭтоПрисоединенныеФайлы ИЗ - Справочник.ТомаХраненияФайлов КАК ХранилищеФайлов + Справочник.ТомаХраненияФайлов КАК ХранилищеФайловПереопределяемый Catalog.ТомаХраненияФайлов true true diff --git a/SSL/src/CommonForms/ФормаНастроекОтчета/Module.bsl b/SSL/src/CommonForms/ФормаНастроекОтчета/Module.bsl index 39cc7cac1..04333ea39 100644 --- a/SSL/src/CommonForms/ФормаНастроекОтчета/Module.bsl +++ b/SSL/src/CommonForms/ФормаНастроекОтчета/Module.bsl @@ -899,10 +899,6 @@ &НаКлиенте Процедура СортировкаПередУдалением(Элемент, Отказ) - Если РасширенныйРежим = 0 Тогда - Отказ = Истина; - Возврат; - КонецЕсли; ТаблицыПолейПередУдалением(Элемент.Имя, Отказ); КонецПроцедуры @@ -3066,22 +3062,24 @@ &НаКлиентеНаСервереБезКонтекста Процедура УстановитьЗначение(СтрокаТаблицы, УзелКД, ЭлементКД, НовоеЗначение) - Если СтрокаТаблицы.ЭтоПараметр Тогда - Если ТипЗнч(УзелКД) = Тип("ДоступныйПараметрКомпоновкиДанных") Тогда - ДоступныйЭлементСКД = УзелКД; + Если УзелКД <> Неопределено Тогда // Поле доступно по функциональным опциям + Если СтрокаТаблицы.ЭтоПараметр Тогда + Если ТипЗнч(УзелКД) = Тип("ДоступныйПараметрКомпоновкиДанных") Тогда + ДоступныйЭлементСКД = УзелКД; + Иначе + ДоступныйЭлементСКД = УзелКД.ДоступныеПараметры.НайтиПараметр(ЭлементКД.Параметр); + КонецЕсли; + ФорматРедактирования = ДоступныйЭлементСКД.ФорматРедактирования; + ЭлементКД.Значение = НовоеЗначение; Иначе - ДоступныйЭлементСКД = УзелКД.ДоступныеПараметры.НайтиПараметр(ЭлементКД.Параметр); + Если ТипЗнч(УзелКД) = Тип("ДоступноеПолеОтбораКомпоновкиДанных") Тогда + ДоступныйЭлементСКД = УзелКД; + Иначе + ДоступныйЭлементСКД = УзелКД.ДоступныеПоляОтбора.НайтиПоле(ЭлементКД.ЛевоеЗначение); + КонецЕсли; + ФорматРедактирования = ДоступныйЭлементСКД.ФорматРедактирования; + ЭлементКД.ПравоеЗначение = НовоеЗначение; КонецЕсли; - ФорматРедактирования = ДоступныйЭлементСКД.ФорматРедактирования; - ЭлементКД.Значение = НовоеЗначение; - Иначе - Если ТипЗнч(УзелКД) = Тип("ДоступноеПолеОтбораКомпоновкиДанных") Тогда - ДоступныйЭлементСКД = УзелКД; - Иначе - ДоступныйЭлементСКД = УзелКД.ДоступныеПоляОтбора.НайтиПоле(ЭлементКД.ЛевоеЗначение); - КонецЕсли; - ФорматРедактирования = ДоступныйЭлементСКД.ФорматРедактирования; - ЭлементКД.ПравоеЗначение = НовоеЗначение; КонецЕсли; Если Не ПустаяСтрока(ФорматРедактирования) Тогда СтрокаТаблицы.Значение = Формат(НовоеЗначение, ФорматРедактирования); diff --git a/SSL/src/CommonForms/ФормаПоиска/Form.form b/SSL/src/CommonForms/ФормаПоиска/Form.form index caab19115..865377dde 100644 --- a/SSL/src/CommonForms/ФормаПоиска/Form.form +++ b/SSL/src/CommonForms/ФормаПоиска/Form.form @@ -1,7 +1,115 @@ - ГруппаПоиска + СостояниеПоиска + 75 + + СостояниеПоискаПредупреждение + 77 + + <key>ru</key> + <value>Состояние поиска предупреждение</value> + + true + true + + true + + + СостояниеПоискаПредупреждениеРасширеннаяПодсказка + 79 + Label + true + true + + Left + + + + СостояниеПоискаПредупреждениеКонтекстноеМеню + 78 + true + + true + true + + + CommonPicture.Предупреждение + + + + + СостояниеПоискаПредставление + 80 + true + true + + true + + + СостояниеПоискаПредставление + + None + + СостояниеПоискаПредставлениеРасширеннаяПодсказка + 82 + Label + true + true + + Left + + + + СостояниеПоискаПредставлениеКонтекстноеМеню + 81 + true + + LabelField + Center + Enter + true + Left + true + + true + + + true + true + + true + + + <key>ru</key> + <value>Состояние поиска</value> + + true + + СостояниеПоискаРасширеннаяПодсказка + 76 + Label + true + true + + Left + + + UsualGroup + + Center + Auto + true + true + + Style.ЦветФонаПредупреждения + + Auto + Auto + + + + Шапка 42 СтрокаПоиска @@ -144,10 +252,10 @@ <key>ru</key> - <value>Поиска</value> + <value>Шапка</value> - ГруппаПоискаExtendedTooltip + ШапкаРасширеннаяПодсказка 52 Label true @@ -166,7 +274,7 @@ - ГруппаОбластьПоиска + ОбластьПоиска 73 ОбластиПоискаПредставление @@ -222,7 +330,7 @@ Область поиска - ГруппаОбластьПоискаРасширеннаяПодсказка + ОбластьПоискаРасширеннаяПодсказка 74 Label true @@ -579,6 +687,24 @@ true + + СостояниеПоискаПредставление + + <key>ru</key> + <value>Состояние поиска представление</value> + + 17 + + String + + + + true + + + true + + ВыполнитьПоиск diff --git a/SSL/src/CommonForms/ФормаПоиска/Help/ru.html b/SSL/src/CommonForms/ФормаПоиска/Help/ru.html index 2fb0886bb..00a6dc4a9 100644 --- a/SSL/src/CommonForms/ФормаПоиска/Help/ru.html +++ b/SSL/src/CommonForms/ФормаПоиска/Help/ru.html @@ -18,6 +18,6 @@ </li><li> <div>Возможно, выбрана не та <strong>Область поиска</strong>. Попробуйте ее убрать или изменить с помощью соответствующей ссылки.</div> </li><li> -<div>Возможно, <a href="DataProcessor.ПанельАдминистрированияБСП.Form.УправлениеПолнотекстовымПоискомИИзвлечениемТекстов/Help">индекс полнотекстового поиска</a> давно не обновлялся. Проконтролируйте его состояние, при необходимости нажмите <strong>Обновить индекс</strong>.</div></li></ul></li><li> +<div>Возможно, <a href="DataProcessor.ПолнотекстовыйПоискВДанных.Form.УправлениеПолнотекстовымПоискомИИзвлечениемТекстов/Help">индекс полнотекстового поиска</a> давно не обновлялся. Проконтролируйте его состояние, при необходимости нажмите <strong>Обновить индекс</strong>.</div></li></ul></li><li> <div>После исправления ошибки повторите поиск еще раз.</div></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/CommonForms/ФормаПоиска/Module.bsl b/SSL/src/CommonForms/ФормаПоиска/Module.bsl index 342935e62..91c209f18 100644 --- a/SSL/src/CommonForms/ФормаПоиска/Module.bsl +++ b/SSL/src/CommonForms/ФормаПоиска/Module.bsl @@ -13,6 +13,14 @@ КонецЕсли; КонтейнерСостояний = Новый Структура; + КонтейнерСостояний.Вставить("СостояниеПоиска", ПолнотекстовыйПоискСервер.СостояниеПолнотекстовогоПоиска()); + // Возможные значения: + // "ПоискРазрешен" + // "ВыполняетсяОбновлениеИндекса" + // "ВыполняетсяСлияниеИндекса" + // "ТребуетсяОбновлениеИндекса" + // "ОшибкаНастройкиПоиска" + // "ПоискЗапрещен". КонтейнерСостояний.Вставить("ИскатьВРазделах", Ложь); КонтейнерСостояний.Вставить("ОбластиПоиска", Новый СписокЗначений); // Идентификаторы объектов метаданных. КонтейнерСостояний.Вставить("ТекущаяПозиция", 0); @@ -39,6 +47,8 @@ ОбновитьДоступностьКнопокНавигации(Элементы.Следующие, Элементы.Предыдущие, КонтейнерСостояний); ИнформацияОНайденномПредставление = ПредставлениеИнформацииОНайденном(КонтейнерСостояний); HTMLСтраницаПредставление = ПредставлениеHTMLСтраницы(СтрокаПоиска, КонтейнерСостояний); + СостояниеПоискаПредставление = ПредставлениеСостоянияПоиска(КонтейнерСостояний); + ОбновитьВидимостьСостояниеПоиска(КонтейнерСостояний); КонецПроцедуры @@ -176,10 +186,7 @@ ПриВыполненииПоискаНаСервере(КонтейнерСостояний, СтрокаПоиска, НаправлениеПоиска); - ОбновитьИсториюПоиска(Элементы.СтрокаПоиска, КонтейнерСостояний); - ОбновитьДоступностьКнопокНавигации(Элементы.Следующие, Элементы.Предыдущие, КонтейнерСостояний); - ИнформацияОНайденномПредставление = ПредставлениеИнформацииОНайденном(КонтейнерСостояний); - HTMLСтраницаПредставление = ПредставлениеHTMLСтраницы(СтрокаПоиска, КонтейнерСостояний); + ПодключитьОбработчикОжидания("ПослеВыполненияПоиска", 0.1, Истина); КонецПроцедуры @@ -188,17 +195,31 @@ СохранитьСтрокуПоискаВИстории(СтрокаПоиска, КонтейнерСостояний.ИсторияПоиска); - ПараметрыПоиска = Обработки.ПолнотекстовыйПоискВДанных.ПараметрыПоиска(); + ПараметрыПоиска = ПолнотекстовыйПоискСервер.ПараметрыПоиска(); ЗаполнитьЗначенияСвойств(ПараметрыПоиска, КонтейнерСостояний, "ТекущаяПозиция, ИскатьВРазделах, ОбластиПоиска"); ПараметрыПоиска.СтрокаПоиска = СтрокаПоиска; ПараметрыПоиска.НаправлениеПоиска = НаправлениеПоиска; - РезультатПоиска = Обработки.ПолнотекстовыйПоискВДанных.ВыполнитьПолнотекстовыйПоиск(ПараметрыПоиска); + РезультатПоиска = ПолнотекстовыйПоискСервер.ВыполнитьПолнотекстовыйПоиск(ПараметрыПоиска); ЗаполнитьЗначенияСвойств(КонтейнерСостояний, РезультатПоиска, "ТекущаяПозиция, Количество, ПолноеКоличество, КодОшибки, ОписаниеОшибки, РезультатыПоиска"); + КонтейнерСостояний.СостояниеПоиска = ПолнотекстовыйПоискСервер.СостояниеПолнотекстовогоПоиска(); + +КонецПроцедуры + +&НаКлиенте +Процедура ПослеВыполненияПоиска() + + ОбновитьИсториюПоиска(Элементы.СтрокаПоиска, КонтейнерСостояний); + ОбновитьДоступностьКнопокНавигации(Элементы.Следующие, Элементы.Предыдущие, КонтейнерСостояний); + ИнформацияОНайденномПредставление = ПредставлениеИнформацииОНайденном(КонтейнерСостояний); + HTMLСтраницаПредставление = ПредставлениеHTMLСтраницы(СтрокаПоиска, КонтейнерСостояний); + СостояниеПоискаПредставление = ПредставлениеСостоянияПоиска(КонтейнерСостояний); + ОбновитьВидимостьСостояниеПоиска(КонтейнерСостояний); + КонецПроцедуры &НаКлиенте @@ -231,7 +252,9 @@ ИскатьВРазделах = КонтейнерСостояний.ИскатьВРазделах; ОбластиПоиска = КонтейнерСостояний.ОбластиПоиска; - Если Не ИскатьВРазделах Или ОбластиПоиска.Количество() = 0 Тогда + УказаныОбластиПоиска = ОбластиПоиска.Количество() > 0; + + Если Не ИскатьВРазделах Или Не УказаныОбластиПоиска Тогда Возврат НСтр("ru = 'Везде'"); КонецЕсли; @@ -266,14 +289,15 @@ &НаКлиентеНаСервереБезКонтекста Процедура ОбновитьДоступностьКнопокНавигации(ЭлементКнопкиСледующие, ЭлементКнопкиПредыдущие, КонтейнерСостояний) - Если КонтейнерСостояний.Количество = 0 Тогда + Количество = КонтейнерСостояний.Количество; + + Если Количество = 0 Тогда ЭлементКнопкиСледующие.Доступность = Ложь; ЭлементКнопкиПредыдущие.Доступность = Ложь; Иначе ПолноеКоличество = КонтейнерСостояний.ПолноеКоличество; ТекущаяПозиция = КонтейнерСостояний.ТекущаяПозиция; - Количество = КонтейнерСостояний.Количество; ЭлементКнопкиСледующие.Доступность = (ПолноеКоличество - ТекущаяПозиция) > Количество; ЭлементКнопкиПредыдущие.Доступность = (ТекущаяПозиция > 0); @@ -285,10 +309,11 @@ &НаКлиентеНаСервереБезКонтекста Функция ПредставлениеИнформацииОНайденном(КонтейнерСостояний) - Если КонтейнерСостояний.Количество <> 0 Тогда + Количество = КонтейнерСостояний.Количество; + + Если Количество <> 0 Тогда ТекущаяПозиция = КонтейнерСостояний.ТекущаяПозиция; - Количество = КонтейнерСостояний.Количество; ПолноеКоличество = КонтейнерСостояний.ПолноеКоличество; Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( @@ -492,8 +517,8 @@ | <li> | <b>Воспользуйтесь нечетким поиском.</b><br> | Используйте решетку (#).<br> - | Например, Сентинель#2 найдет все документы, содержащие такие слова, которые отличаются от слова - | Сентинель на одну или две буквы. + | Например, Ромашка#2 найдет все документы, содержащие такие слова, которые отличаются от слова + | Ромашка на одну или две буквы. | </li> |</ul> |<div class ""presentation""><a href=""v8help://1cv8/QueryLanguageFullTextSearchInData"">Полное описание формата поисковых выражений</a></div>'"); @@ -522,8 +547,7 @@ ИначеЕсли КодОшибки = "СлишкомМногоРезультатов" Тогда - Если (Не ИскатьВРазделах) - Или (ИскатьВРазделах И Не УказаныОбластиПоиска) Тогда + Если Не ИскатьВРазделах Или Не УказаныОбластиПоиска Тогда РекомендацияОбластиПоискаHTML = НСтр("ru = '<li><b>Уточните область поиска.</b><br> @@ -539,6 +563,39 @@ КонецФункции +&НаКлиентеНаСервереБезКонтекста +Функция ПредставлениеСостоянияПоиска(КонтейнерСостояний) + + СостояниеПоиска = КонтейнерСостояний.СостояниеПоиска; + + Если СостояниеПоиска = "ПоискРазрешен" Тогда + Представление = ""; + ИначеЕсли СостояниеПоиска = "ВыполняетсяОбновлениеИндекса" + Или СостояниеПоиска = "ВыполняетсяСлияниеИндекса" + Или СостояниеПоиска = "ТребуетсяОбновлениеИндекса" Тогда + + Представление = НСтр("ru = 'Результаты поиска могут быть неточными, повторите поиск позднее.'"); + ИначеЕсли СостояниеПоиска = "ОшибкаНастройкиПоиска" Тогда + + // Для не администратора + Представление = НСтр("ru = 'Полнотекстовый поиск не настроен, обратитесь к администратору.'"); + + ИначеЕсли СостояниеПоиска = "ПоискЗапрещен" Тогда + Представление = НСтр("ru = 'Полнотекстовый поиск отключен.'"); + КонецЕсли; + + Возврат Представление; + +КонецФункции + +&НаСервере +Процедура ОбновитьВидимостьСостояниеПоиска(КонтейнерСостояний) + + СостояниеПоиска = КонтейнерСостояний.СостояниеПоиска; + Элементы.СостояниеПоиска.Видимость = (СостояниеПоиска <> "ПоискРазрешен"); + +КонецПроцедуры + #КонецОбласти #Область БизнесЛогика diff --git a/SSL/src/CommonModules/АдминистрированиеКластераCOMКлиентСервер/Module.bsl b/SSL/src/CommonModules/АдминистрированиеКластераCOMКлиентСервер/Module.bsl index 1c7e792ca..2b00b1d4b 100644 --- a/SSL/src/CommonModules/АдминистрированиеКластераCOMКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/АдминистрированиеКластераCOMКлиентСервер/Module.bsl @@ -112,8 +112,6 @@ ПараметрыАдминистрированияИБ.ИмяАдминистратораИнформационнойБазы, ПараметрыАдминистрированияИБ.ПарольАдминистратораИнформационнойБазы); - СеансыЗапрещены = ИнформационнаяБаза.SessionsDenied; - ЗаполнитьСвойстваОбъектаОбъектнойМоделиCOMАдминистратораПоОписанию( ИнформационнаяБаза, УстанавливаемаяБлокировка, @@ -162,7 +160,7 @@ СоединениеСРабочимПроцессом = СоединениеСРабочимПроцессом(COMСоединитель, СоединениеСАгентомСервера, Кластер); - ИнформационнаяБаза = ПолучитьИБ( + ПолучитьИБ( СоединениеСРабочимПроцессом, Кластер, ПараметрыАдминистрированияИБ.ИмяВКластере, @@ -992,7 +990,7 @@ ПараметрыАдминистрированияКластера.ИмяАдминистратораКластера, ПараметрыАдминистрированияКластера.ПарольАдминистратораКластера); - ПрофильБезопасности = ПолучитьПрофильБезопасности( + ПолучитьПрофильБезопасности( СоединениеСАгентомСервера, Кластер, ИмяПрофиля); @@ -1013,21 +1011,19 @@ // Функция COMСоединитель() - #Если Клиент Тогда - Возврат Новый COMОбъект(СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиента().ИмяCOMСоединителя); - #Иначе - - Если БезопасныйРежим() <> Ложь Тогда - ВызватьИсключение НСтр("ru = 'Внимание! Администрирование кластера невозможно в безопасном режиме'"); - КонецЕсли; - - Если ОбщегоНазначения.РазделениеВключено() Тогда - ВызватьИсключение НСтр("ru = 'Внимание! В модели сервиса недопустимо выполнение прикладной информационной базой функций администрирования кластера'"); - КонецЕсли; - - Возврат Новый COMОбъект(ОбщегоНазначенияКлиентСервер.ИмяCOMСоединителя()); - - #КонецЕсли +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + Если БезопасныйРежим() <> Ложь Тогда + ВызватьИсключение НСтр("ru = 'Внимание! Администрирование кластера невозможно в безопасном режиме'"); + КонецЕсли; + + Если ОбщегоНазначения.РазделениеВключено() Тогда + ВызватьИсключение НСтр("ru = 'Внимание! В модели сервиса недопустимо выполнение прикладной информационной базой функций администрирования кластера'"); + КонецЕсли; + + Возврат Новый COMОбъект(ОбщегоНазначенияКлиентСервер.ИмяCOMСоединителя()); +#Иначе + Возврат Новый COMОбъект(СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиента().ИмяCOMСоединителя); +#КонецЕсли КонецФункции diff --git a/SSL/src/CommonModules/АдминистрированиеКластераRASКлиентСервер/Module.bsl b/SSL/src/CommonModules/АдминистрированиеКластераRASКлиентСервер/Module.bsl index 10e427fb2..eea8ea584 100644 --- a/SSL/src/CommonModules/АдминистрированиеКластераRASКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/АдминистрированиеКластераRASКлиентСервер/Module.bsl @@ -85,7 +85,7 @@ Если ПроверятьПараметрыАдминистрированияКластера Или ПроверятьПараметрыАдминистрированияИнформационнойБазы Тогда ИдентификаторКластера = ИдентификаторКластера(ПараметрыАдминистрированияКластера); - РабочиеПроцессы = СвойстваРабочихПроцессов(ИдентификаторКластера, ПараметрыАдминистрированияКластера); + СвойстваРабочихПроцессов(ИдентификаторКластера, ПараметрыАдминистрированияКластера); КонецЕсли; @@ -94,7 +94,7 @@ Словарь = Новый Структура(); Словарь.Вставить("БлокировкаСеансов", "sessions-deny"); - СвойстваИБ = СвойстваИнформационнойБазы(ПараметрыАдминистрированияКластера, ПараметрыАдминистрированияИБ, Словарь); + СвойстваИнформационнойБазы(ПараметрыАдминистрированияКластера, ПараметрыАдминистрированияИБ, Словарь); КонецЕсли; @@ -1459,7 +1459,7 @@ Параметры.Вставить("access", "full"); КонецЕсли; - ПотокВывода = ВыполнитьКоманду(Шаблон, ПараметрыАдминистрированияКластера, Параметры); + ВыполнитьКоманду(Шаблон, ПараметрыАдминистрированияКластера, Параметры); КонецПроцедуры @@ -1488,7 +1488,7 @@ Параметры.Вставить("name", ИмяПрофиля); Параметры.Вставить(КлючСписка, КлючЭлемента); - ПотокВывода = ВыполнитьКоманду(Шаблон, ПараметрыАдминистрированияКластера, Параметры); + ВыполнитьКоманду(Шаблон, ПараметрыАдминистрированияКластера, Параметры); КонецПроцедуры @@ -1516,7 +1516,7 @@ ЗаполнитьПараметрыПоСловарю(Словарь, СвойстваЭлемента, Параметры, Шаблон); - ПотокВывода = ВыполнитьКоманду(Шаблон, ПараметрыАдминистрированияКластера, Параметры); + ВыполнитьКоманду(Шаблон, ПараметрыАдминистрированияКластера, Параметры); КонецПроцедуры @@ -1575,7 +1575,7 @@ Функция ПривестиЗначение(Знач Значение, Знач ИмяПараметра = "") Если ТипЗнч(Значение) = Тип("Дата") Тогда - Возврат XMLСтрока(Значение); + Возврат Формат(Значение, "ДФ=гггг-ММ-ддTЧЧ:мм:сс"); КонецЕсли; Если ТипЗнч(Значение) = Тип("Булево") Тогда @@ -1642,8 +1642,6 @@ Возврат ЭлементВывода; КонецПопытки; - Возврат ЭлементВывода; - КонецФункции // Запускает консольный клиент сервера администрирования для выполнения команды. @@ -1672,8 +1670,6 @@ #КонецЕсли - СистемнаяИнформация = Новый СистемнаяИнформация(); - // Подставим в командную строку путь до утилиты rac и адрес сервера ras. Клиент = ПутьККлиентуСервераАдминистрирования(); ФайлКлиента = Новый Файл(Клиент); diff --git a/SSL/src/CommonModules/АдресныйКлассификаторКлиент/Module.bsl b/SSL/src/CommonModules/АдресныйКлассификаторКлиент/Module.bsl index 167fd24a4..121ea2d2b 100644 --- a/SSL/src/CommonModules/АдресныйКлассификаторКлиент/Module.bsl +++ b/SSL/src/CommonModules/АдресныйКлассификаторКлиент/Module.bsl @@ -156,14 +156,12 @@ Диалог.Заголовок = Заголовок; КонецЕсли; - ВладелецЗначения = Форма; ТекущееЗначение = Форма; ИмяРеквизита = ПутьКДанным; ЧастиПути = СтрЗаменить(ПутьКДанным, ".", Символы.ПС); Для Позиция = 1 По СтрЧислоСтрок(ЧастиПути) Цикл ИмяРеквизита = СтрПолучитьСтроку(ЧастиПути, Позиция); - ВладелецЗначения = ТекущееЗначение; ТекущееЗначение = ТекущееЗначение[ИмяРеквизита]; КонецЦикла; diff --git a/SSL/src/CommonModules/АдресныйКлассификаторПовтИсп/Module.bsl b/SSL/src/CommonModules/АдресныйКлассификаторПовтИсп/Module.bsl index 9de1d5bae..5090ede34 100644 --- a/SSL/src/CommonModules/АдресныйКлассификаторПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/АдресныйКлассификаторПовтИсп/Module.bsl @@ -1,27 +1,5 @@ #Область СлужебныеПроцедурыИФункции -// Набор уровней для запросов в режиме совместимости с КЛАДР. -// -// Возвращаемое значение: -// ФиксированныйМассив - набор числовых уровней. -// -Функция УровниКлассификатораКЛАДР() Экспорт - - Возврат АдресныйКлассификаторКлиентСервер.УровниКлассификатораКЛАДР(); - -КонецФункции - -// Набор уровней для запросов ФИАС. -// -// Возвращаемое значение: -// ФиксированныйМассив - набор числовых уровней. -// -Функция УровниКлассификатораФИАС() Экспорт - - Возврат АдресныйКлассификаторКлиентСервер.УровниКлассификатораФИАС(); - -КонецФункции - // WSПрокси для вызова веб-сервиса 1С. // // Возвращаемое значение: diff --git a/SSL/src/CommonModules/АдресныйКлассификаторСлужебный/Module.bsl b/SSL/src/CommonModules/АдресныйКлассификаторСлужебный/Module.bsl index db6e69bb5..96f346b38 100644 --- a/SSL/src/CommonModules/АдресныйКлассификаторСлужебный/Module.bsl +++ b/SSL/src/CommonModules/АдресныйКлассификаторСлужебный/Module.bsl @@ -140,11 +140,9 @@ Вариант = ДополнительныеПараметры.ФорматАдреса; Если Вариант = "КЛАДР" Тогда - Уровни = АдресныйКлассификаторПовтИсп.УровниКлассификатораКЛАДР(); - + Уровни = АдресныйКлассификаторКлиентСервер.УровниКлассификатораКЛАДР(); ИначеЕсли Вариант = "ФИАС" Тогда - Уровни = АдресныйКлассификаторПовтИсп.УровниКлассификатораФИАС(); - + Уровни = АдресныйКлассификаторКлиентСервер.УровниКлассификатораФИАС(); Иначе Возврат Результат; @@ -284,7 +282,7 @@ Результат = Новый Структура("Данные, Заголовок", ТаблицаДанныхДляИнтерактивногоВыбора() ); СтруктураОписанияОшибкиПоставщика(Результат); - Уровни = АдресныйКлассификаторПовтИсп.УровниКлассификатораФИАС(); + Уровни = АдресныйКлассификаторКлиентСервер.УровниКлассификатораФИАС(); Источник = ИсточникДанныхАдресногоКлассификатора(); Если ПустаяСтрока(Источник) Тогда @@ -357,10 +355,10 @@ Вариант = ДополнительныеПараметры.ФорматАдреса; Если Вариант = "КЛАДР" Тогда - ОграничениеУровней = АдресныйКлассификаторПовтИсп.УровниКлассификатораКЛАДР(); + ОграничениеУровней = АдресныйКлассификаторКлиентСервер.УровниКлассификатораКЛАДР(); ИначеЕсли Вариант = "ФИАС" Тогда - ОграничениеУровней = АдресныйКлассификаторПовтИсп.УровниКлассификатораФИАС(); + ОграничениеУровней = АдресныйКлассификаторКлиентСервер.УровниКлассификатораФИАС(); Иначе Возврат Результат; @@ -406,10 +404,10 @@ Функция СписокДомов(ИдентификаторАдресногоОбъекта, Знач СтрокаПоиска) Экспорт ВариантыДомов = Новый ТаблицаЗначений; - КолонкаДомЧислом = ВариантыДомов.Колонки.Добавить("ДомЧислом", ОбщегоНазначения.ОписаниеТипаЧисло(5)); - КолонкаДом = ВариантыДомов.Колонки.Добавить("Дом", ОбщегоНазначения.ОписаниеТипаСтрока(20)); - КолонкаКорпус = ВариантыДомов.Колонки.Добавить("Корпус", ОбщегоНазначения.ОписаниеТипаСтрока(20)); - КолонкаСтроение = ВариантыДомов.Колонки.Добавить("Строение", ОбщегоНазначения.ОписаниеТипаСтрока(20)); + ВариантыДомов.Колонки.Добавить("ДомЧислом", ОбщегоНазначения.ОписаниеТипаЧисло(5)); + ВариантыДомов.Колонки.Добавить("Дом", ОбщегоНазначения.ОписаниеТипаСтрока(20)); + ВариантыДомов.Колонки.Добавить("Корпус", ОбщегоНазначения.ОписаниеТипаСтрока(20)); + ВариантыДомов.Колонки.Добавить("Строение", ОбщегоНазначения.ОписаниеТипаСтрока(20)); ВариантыДомов.Колонки.Добавить("Значение"); ВариантыДомов.Колонки.Добавить("Представление"); @@ -617,9 +615,9 @@ Для Каждого ПроверяемыйАдрес Из Адреса Цикл Если ПроверяемыйАдрес.ФорматАдреса = "ФИАС" Тогда - Уровни = АдресныйКлассификаторПовтИсп.УровниКлассификатораФИАС(); + Уровни = АдресныйКлассификаторКлиентСервер.УровниКлассификатораФИАС(); Иначе - Уровни = АдресныйКлассификаторПовтИсп.УровниКлассификатораКЛАДР(); + Уровни = АдресныйКлассификаторКлиентСервер.УровниКлассификатораКЛАДР(); КонецЕсли; // Невозможно проверить адрес из-за некорректных сведений. Проверьте правильность заполнения адреса. @@ -788,11 +786,8 @@ Описание = Запись.Строения.Получить(); Если Не ПустаяСтрока(Описание) Тогда - ИдентификаторДополнительно = УникальныйИдентификаторИзСтроки64(Лев(Описание, 24)); Описание = Сред(Описание, 25); Если Не ПустаяСтрока(Описание) Тогда - ЕстьЗаписиДомов = Истина; - Если ЗданияИПомещения.Количество() > 0 И ОписаниеЗданийФИАССодержитДанные(Описание, ЗданияИПомещения) Тогда Результат.Индекс = Запись.ПочтовыйИндекс; КонецЕсли; @@ -815,7 +810,7 @@ АдресаДляПроверки = Новый Массив; РезультатВебСервис = Новый Структура("Данные", Новый Массив); СтруктураОписанияОшибкиПоставщика(РезультатВебСервис); - Уровни = АдресныйКлассификаторПовтИсп.УровниКлассификатораФИАС(); + Уровни = АдресныйКлассификаторКлиентСервер.УровниКлассификатораФИАС(); АдресаДляПроверки.Добавить(Новый Структура("Адрес, Уровни", Адрес, Уровни)); Попытка ЗаполнитьРезультатПроверкиАдресаПоКлассификаторуСервис1С(РезультатВебСервис, АдресаДляПроверки); @@ -1630,7 +1625,7 @@ КонецПроцедуры -// См. ОбщегоНазначенияПереопределяемый.ПараметрыРаботыКлиента. +// См. ОбщегоНазначенияПереопределяемый.ПриДобавленииПараметровРаботыКлиента. Процедура ПриДобавленииПараметровРаботыКлиента(Параметры) Экспорт Параметры.Вставить("АдресныйКлассификаторУстарел", УстаревшийКлассификаторСодержитСведения()); @@ -3339,7 +3334,6 @@ КонецЕсли; Если ПустаяСтрока(Адрес.Улица) Тогда - сУлица = "0"; ТекстДляВыбрать = ТекстДляВыбрать + "НЕОПРЕДЕЛЕНО КАК КодКЛАДРУлица, "; Иначе ТекстСоединения = ТекстСоединения + Символы.ПС + " ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъектыУлица @@ -3354,7 +3348,6 @@ | И АдресныеОбъектыУлица.КодДополнительногоЭлемента = 0 | И АдресныеОбъектыУлица.КодПодчиненногоЭлемента = 0"; - сУлица = "АдресныеОбъектыУлица.КодНаселенногоПункта"; ТекстДляВыбрать = ТекстДляВыбрать + "АдресныеОбъектыУлица.КодКЛАДР КАК КодКЛАДРУлица, "; ИмяОбъектаДляДополнительныхСведений = "АдресныеОбъектыУлица"; КонецЕсли; @@ -3455,7 +3448,7 @@ АдресаДляПроверки = Новый Массив; РезультатВебСервис = Новый Структура("Данные", Новый Массив); СтруктураОписанияОшибкиПоставщика(РезультатВебСервис); - Уровни = АдресныйКлассификаторПовтИсп.УровниКлассификатораФИАС(); + Уровни = АдресныйКлассификаторКлиентСервер.УровниКлассификатораФИАС(); АдресаДляПроверки.Добавить(Новый Структура("Адрес, Уровни", АдресРФ , Уровни)); Попытка ЗаполнитьРезультатПроверкиАдресаПоКлассификаторуСервис1С(РезультатВебСервис, АдресаДляПроверки); @@ -3497,12 +3490,12 @@ Возврат Результат; КонецФункции -Функция УстановитьКодКЛАДР(КодыКЛАДР, ИмяПоля, Значение, КодКЛАДР) +Процедура УстановитьКодКЛАДР(КодыКЛАДР, ИмяПоля, Значение, КодКЛАДР) КодыКЛАДР[ИмяПоля] = Значение; Если ЗначениеЗаполнено(Значение) Тогда КодКладр = Значение; КонецЕсли; -КонецФункции +КонецПроцедуры // Заполнение результата проверки адресного объекта по данным сервиса. // @@ -3511,7 +3504,6 @@ Сервис = АдресныйКлассификаторПовтИсп.СервисКлассификатора1С(); СписокДляПроверки = Сервис.ФабрикаXDTO.Создать(Сервис.ФабрикаXDTO.Тип(ПространствоИмен(), "AddressList")); - ТипАдреса = Сервис.ФабрикаXDTO.Тип(ПространствоИменАдресаРФ(), "АдресРФ"); ТипЭлементаСписка = СписокДляПроверки.Свойства().Получить("Item").Тип; Для Каждого ЭлементПроверки Из АдресаДляПроверки Цикл @@ -3787,7 +3779,6 @@ Для Каждого Строка Из Список Цикл Если Строка.Presentation = Представление Тогда Возврат Новый УникальныйИдентификатор(Строка.ID); - Продолжить; КонецЕсли; КонецЦикла; @@ -3813,12 +3804,10 @@ Сервис = АдресныйКлассификаторПовтИсп.СервисКлассификатора1С(); СписокДляПроверки = Сервис.ФабрикаXDTO.Создать(Сервис.ФабрикаXDTO.Тип(ПространствоИмен(), "AddressList")); - ТипАдресаРФ = Сервис.ФабрикаXDTO.Тип(ПространствоИменАдресаРФ(), "АдресРФ"); - ТипАдреса = Сервис.ФабрикаXDTO.Тип(ПространствоИменАдресаРФ(), "Адрес"); ТипЭлементаСписка = СписокДляПроверки.Свойства().Получить("Item").Тип; ПроверяемыйАдрес = СписокДляПроверки.Item.Добавить(Сервис.ФабрикаXDTO.Создать(ТипЭлементаСписка)); - ПроверяемыйАдрес.Levels = АдресныйКлассификаторПовтИсп.УровниКлассификатораФИАС(); + ПроверяемыйАдрес.Levels = АдресныйКлассификаторКлиентСервер.УровниКлассификатораФИАС(); Если ЭтоКонтактнаяИнформацияВXML(АдресДляПроверки) Тогда АдресXDTO = ОбщегоНазначения.ОбъектXDTOИзСтрокиXML(АдресДляПроверки, Сервис.ФабрикаXDTO); ПроверяемыйАдрес.Address = АдресXDTO.Состав.Состав; @@ -3847,7 +3836,7 @@ КонецПроцедуры -Функция ЗаполнитьКодыПоИдентификаторуДома(ИдентификаторАдресногоОбъекта, СведенияОДоме, Коды) +Процедура ЗаполнитьКодыПоИдентификаторуДома(ИдентификаторАдресногоОбъекта, СведенияОДоме, Коды) Источник = ИсточникДанныхАдресногоКлассификатора(); Если ПустаяСтрока(Источник) Тогда @@ -3902,7 +3891,7 @@ КонецЕсли; КонецЕсли; -КонецФункции +КонецПроцедуры // Локальная проверка одного адреса. // @@ -4002,12 +3991,10 @@ ТаблицаСокращенийЗданий = НаборРезультатов[2].Выгрузить(); ТаблицаСокращенийЗданий.Индексы.Добавить("ТипАдрЭл"); - ПочтовыйИндекс = 0; Дополнительный = Новый Структура("Наименование, Сокращение"); Подчиненный = Новый Структура("Наименование, Сокращение"); ЗданияИПомещения = Новый Соответствие; - ТипЧисло = Новый ОписаниеТипов("Число"); Для Каждого ДополнительныйЭлемент Из Адрес.ПолучитьСписок("ДопАдрЭл") Цикл ТипАдресногоЭлемента = СокрЛП(ДополнительныйЭлемент.ТипАдрЭл); @@ -4020,21 +4007,24 @@ КонецЕсли; Продолжить; ИначеЕсли ТипАдресногоЭлемента = ТипАдрЭлПочтовыйИндекс Тогда - ПочтовыйИндекс = ТипЧисло.ПривестиЗначение(ДополнительныйЭлемент.Значение); Продолжить; КонецЕсли; // Дополнительный или подчиненный? Вариант = АдресныйКлассификаторКлиентСервер.НаименованиеИСокращение(ДополнительныйЭлемент.Значение); + // У ФИАС некоторые сокращения ошибочно содержат в конце точку. Для поиска вариантов эту точку необходимо убрать. СокращениеВарианта = ?( СтрЗаканчиваетсяНа(Вариант.Сокращение, "."), Лев(Вариант.Сокращение, СтрДлина(Вариант.Сокращение) - 1), Вариант.Сокращение); + // У ФИАС необходимо учитывать кв-л + ДополнитьТаблицуСокращений(ТаблицаСокращенийДополнительных); - СтрокиВариантов = ТаблицаСокращенийДополнительных.НайтиСтроки(Новый Структура("Сокращение, Значение", СокращениеВарианта, ТипАдресногоЭлемента)); + СтрокиВариантов = ТаблицаСокращенийДополнительных.НайтиСтроки(Новый Структура("Сокращение, Значение, Идентификатор", СокращениеВарианта, ТипАдресногоЭлемента, 90)); Если СтрокиВариантов.Количество() > 0 Тогда Код = СтрокиВариантов[0].Идентификатор; - Если Код = 90 Тогда - Дополнительный = Вариант; - ИначеЕсли Код = 91 Тогда + Дополнительный = Вариант; + Иначе + СтрокиВариантов = ТаблицаСокращенийДополнительных.НайтиСтроки(Новый Структура("Сокращение, Значение, Идентификатор", СокращениеВарианта, ТипАдресногоЭлемента, 91)); + Если СтрокиВариантов.Количество() > 0 Тогда Подчиненный = Вариант; КонецЕсли; КонецЕсли; @@ -4509,6 +4499,15 @@ Возврат Результат; КонецФункции +Процедура ДополнитьТаблицуСокращений(ТаблицаСокращенийДополнительных) + + НоваяСтрока = ТаблицаСокращенийДополнительных.Вставить(0); + НоваяСтрока.Идентификатор = 90; + НоваяСтрока.Значение = "10200000"; + НоваяСтрока.Сокращение = "кв-л"; + +КонецПроцедуры + Функция ИсторияАдресногоОбъекта(Наименование, Сокращение, Запись) Результат = Новый СписокЗначений; @@ -4977,8 +4976,6 @@ Иначе ТекстВыбратьИдентификаторы = "АдресныеОбъектыУлица.Идентификатор КАК Идентификатор"; КонецЕсли; - Иначе - сУлица = "0"; КонецЕсли; Если ВсеИдентификаторыАдреса Тогда @@ -5096,7 +5093,6 @@ ВидВладения = ТипЧисло.ПривестиЗначение(СтрПолучитьСтроку(СтрокиОписания, Позиция + 1)); НомерВладения = СокрЛП(СтрПолучитьСтроку(СтрокиОписания, Позиция + 2)); НомерКорпуса = СокрЛП(СтрПолучитьСтроку(СтрокиОписания, Позиция + 3)); - ВидСтроения = ТипЧисло.ПривестиЗначение(СтрПолучитьСтроку(СтрокиОписания, Позиция + 4)); НомерСтроения = СокрЛП(СтрПолучитьСтроку(СтрокиОписания, Позиция + 5)); Если СтрНайти(НомерСтроения, "+") > 0 Тогда НомерСтроения = СокрЛП(Лев(НомерСтроения, СтрНайти(НомерСтроения, "+") - 1)); // отрезаем идентификатор @@ -5252,7 +5248,7 @@ ЧтениеXML = Новый ЧтениеXML; ЧтениеXML.УстановитьСтроку(Строка); - Тип = ФабрикаXDTO.Тип(ПространствоИменДляАдресаРФ(), "АдресРФ"); + // ожидается пространство имен "http://www.v8.1c.ru/ssl/contactinfo_ru". Результат = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML); Возврат Результат @@ -5264,12 +5260,6 @@ Возврат "http://www.v8.1c.ru/ssl/AddressSystem"; КонецФункции -// Пространство имен для операций XDTO с адресом. -// -Функция ПространствоИменДляАдресаРФ() - Возврат "http://www.v8.1c.ru/ssl/contactinfo_ru"; -КонецФункции - // Преобразует XML. Обратная совместимость. // Функция ПередЧтениемXDTOКонтактнаяИнформация(ТекстXML) @@ -5704,9 +5694,6 @@ КодРайона = "0"; КодГорода = "0"; КодВнутригородскогоРайона = "0"; - КодНаселенногоПункта = "0"; - КодУлицы = "0"; - КодДополнительнойТерритории = "0"; ТекстСоединения = ""; ТекстЗапросаВыборки = ""; СписокПолей = Новый Структура(); @@ -5748,7 +5735,6 @@ | И НаселенныйПункт.КодРайона = " + КодРайона + " | И НаселенныйПункт.КодГорода = " + КодГорода + " | И НаселенныйПункт.КодВнутригородскогоРайона = " + КодВнутригородскогоРайона; - КодНаселенногоПункта = "НаселенныйПункт.КодНаселенногоПункта"; КонецЕсли; КонецЦикла; @@ -6004,8 +5990,6 @@ КодГорода = "0"; КодВнутригородскогоРайона = "0"; КодНаселенногоПункта = "0"; - КодУлицы = "0"; - КодДополнительнойТерритории = "0"; ТекстСоединения = ""; ТекстЗапросаВыборки = ""; СписокПолей = Новый Соответствие(); @@ -6057,7 +6041,6 @@ | И Улицы.КодГорода = " + КодГорода + " | И Улицы.КодВнутригородскогоРайона = " + КодВнутригородскогоРайона + " | И Улицы.КодНаселенногоПункта = " + КодНаселенногоПункта; - КодУлицы = "Улицы.КодУлицы"; КонецЕсли; КонецЦикла; @@ -6349,7 +6332,7 @@ Результат = Новый Массив; Если Метаданные.РегистрыСведений.Найти("УдалитьАдресныйКлассификатор") <> Неопределено - И Пользователи.РолиДоступны("ДобавлениеИзменениеАдресныхСведений") Тогда + И ПравоДоступа("Изменение", Метаданные.РегистрыСведений.АдресныеОбъекты) Тогда УстановитьПривилегированныйРежим(Истина); @@ -6386,7 +6369,7 @@ Функция УстаревшийКлассификаторСодержитСведения() Если Метаданные.РегистрыСведений.Найти("УдалитьАдресныйКлассификатор") <> Неопределено - И Пользователи.РолиДоступны("ДобавлениеИзменениеАдресныхСведений") Тогда + И ПравоДоступа("Изменение", Метаданные.РегистрыСведений.АдресныеОбъекты) Тогда УстановитьПривилегированныйРежим(Истина); @@ -6456,7 +6439,6 @@ АдресныеОбъекты = РегистрыСведений.АдресныеОбъекты.СоздатьНаборЗаписей(); ИсторияАдресныхОбъектов = РегистрыСведений.ИсторияАдресныхОбъектов.СоздатьНаборЗаписей(); ДомаЗданияСтроения = РегистрыСведений.ДомаЗданияСтроения.СоздатьНаборЗаписей(); - СлужебныеАдресныеСведения = РегистрыСведений.СлужебныеАдресныеСведения.СоздатьНаборЗаписей(); ТаблицыДанных = Новый Структура; ТаблицыДанных.Вставить("КлассификаторСубъектовРФ", РегистрыСведений.АдресныеОбъекты.КлассификаторСубъектовРФ()); @@ -6643,10 +6625,7 @@ ТипЧисло = Новый ОписаниеТипов("Число"); ТаблицаАдресныхОбъектов = ТаблицыДанных.АдресныеОбъекты; - ИсторияАдресныхОбъектов = ТаблицыДанных.ИсторияАдресныхОбъектов; ТаблицаДополнительных = ТаблицыДанных.ДополнительныеСведения; - ТаблицаКлассификатора = ТаблицыДанных.КлассификаторСубъектовРФ; - ТипыЧастейЗдания = ТаблицыДанных.ТипыЧастейЗдания; // Выбираем уровни 6 - только дома. Запрос = Новый Запрос(" @@ -6848,7 +6827,6 @@ ДополнительныйИдентификаторСтрокой = УникальныйИдентификаторВСтроку64(ДополнительныйИдентификатор); ДомаЗданияСтроения = ТаблицыДанных.ДомаЗданияСтроения; - ТипыЧастейЗдания = ТаблицыДанных.ТипыЧастейЗдания; // Разбиваем описание на части. ВариантыОписаний = ВРег(СтрЗаменить( СокрЛП(СтрЗаменить(Описание, ",", Символы.ПС)), " ", "")); @@ -6907,7 +6885,6 @@ Если Символ = "Н" Тогда // Нечетный - Диапазон = Сред(Описание, 2); Фильтр = Новый Структура("Тип, Значение", "INTVSTAT", "Нечетный"); ИначеЕсли Символ = "Ч" Тогда // Четный @@ -7554,17 +7531,10 @@ ПутьДляСохранения = ВременныйКаталог + ВРег(ФайлРегиона.ИмяФайла); ПараметрыПолучения.Вставить("ПутьДляСохранения", ПутьДляСохранения); - ПараметрыПолучения.Вставить("Таймаут", 180); ЗагруженныйФайл = МодульПолучениеФайловИзИнтернета.СкачатьФайлНаСервере(ОписаниеРегиона.Адрес, ПараметрыПолучения); Если Не ЗагруженныйФайл.Статус Тогда - УдалитьВременныйФайл(ВременныйКаталог); - ВызватьИсключение ЗагруженныйФайл.СообщениеОбОшибке + Символы.ПС - + НСтр("ru = 'Возможные причины: - |• Некорректно введен или не введен логин и пароль; - |• Нет подключения к Интернету; - |• На веб-узле возникли неполадки; - |• Брандмауэр или другое промежуточное ПО (антивирусы и т.п.) блокируют попытки программы подключиться к Интернету; - |• Подключение к Интернету выполняется через прокси-сервер, но его параметры не заданы в программе.'"); + УдалитьВременныйФайл(ЗагруженныйФайл.Путь); + ВызватьИсключение ЗагруженныйФайл.СообщениеОбОшибке; КонецЕсли; КодыСубъектовДляЗагрузки.Добавить(КодСубъекта); @@ -7689,12 +7659,10 @@ МодульПолучениеФайловИзИнтернета = ОбщегоНазначения.ОбщийМодуль("ПолучениеФайловИзИнтернета"); АдресОписания = АдресИнтернетаВключаяПорт(АдресФайлаОписанияДоступныхВерсий()); - ПараметрыПолучения = Новый Структура("Таймаут", 180); - РезультатПолученияФайла = МодульПолучениеФайловИзИнтернета.СкачатьФайлНаСервере(АдресОписания.Адрес, ПараметрыПолучения); + РезультатПолученияФайла = МодульПолучениеФайловИзИнтернета.СкачатьФайлНаСервере(АдресОписания.Адрес); Если Не РезультатПолученияФайла.Статус Тогда Возврат Результат; КонецЕсли; - РезультатПолученияФайла = МодульПолучениеФайловИзИнтернета.СкачатьФайлНаСервере(АдресОписания.Адрес, ПараметрыПолучения); // Получен zip, внутри которого xml. КаталогДляРаспаковки = ПолучитьИмяВременногоФайла(); @@ -7712,7 +7680,6 @@ ДатаПоследнейВерсии = '00000000'; ПоследняяПубликация = Неопределено; - ДатаБДФИАС = Неопределено; Для Каждого Публикация Из ДоступныеДанные.ПолучитьСписок("Publication") Цикл Если Публикация.UpdateDate > ДатаПоследнейВерсии Тогда @@ -7913,8 +7880,6 @@ Процедура ЗагрузитьДомаЗданияСтроенияПорциями(КодСубъектаРФ, ФайлЗагрузки) - Перем ВременнаяТаблица, Запись, Индекс, Индексы, КлючевыеКолонки, Набор, НайденныеСтроки, НоваяСтрока, ОписаниеЗданийXDTO, Отбор, Сжатие, Строка, Таблица, ТекущаяЗапись, ТипXMLСтрока, Фильтр; - ВременнаяТаблица = Новый ТаблицаЗначений; ВременнаяТаблица.Колонки.Добавить("КодСубъектаРФ", Новый ОписаниеТипов("Число")); ВременнаяТаблица.Колонки.Добавить("АдресныйОбъект", Новый ОписаниеТипов("УникальныйИдентификатор")); @@ -7925,7 +7890,6 @@ Индексы = Новый Соответствие; Сжатие = Новый СжатиеДанных(9); - ТипXMLСтрока = ФабрикаXDTO.Тип("http://www.w3.org/2001/XMLSchema", "string"); Набор = РегистрыСведений.ДомаЗданияСтроения.СоздатьНаборЗаписей(); Набор.Отбор.КодСубъектаРФ.Установить(КодСубъектаРФ); @@ -7990,7 +7954,6 @@ Процедура ЗагрузитьДомаЗданияСтроенияОднимНабором(КодСубъектаРФ, ФайлЗагрузки) Сжатие = Новый СжатиеДанных(9); - ТипXMLСтрока = ФабрикаXDTO.Тип("http://www.w3.org/2001/XMLSchema", "string"); Набор = РегистрыСведений.ДомаЗданияСтроения.СоздатьНаборЗаписей(); Набор.Отбор.КодСубъектаРФ.Установить(КодСубъектаРФ); @@ -8067,8 +8030,6 @@ Процедура ЗагрузитьИсториюАдресныхОбъектовПорциями(КодСубъектаРФ, ФайлЗагрузки) - Перем ВременнаяТаблица, Запись, Набор, НайденныеСтроки, НоваяСтрока, Отбор, Строка, ТекущаяЗапись, Уровень, Уровни; - ВременнаяТаблица = Новый ТаблицаЗначений; ВременнаяТаблица.Колонки.Добавить("Уровень", ОбщегоНазначения.ОписаниеТипаЧисло(2)); ВременнаяТаблица.Колонки.Добавить("КодСубъектаРФ", ОбщегоНазначения.ОписаниеТипаЧисло(2)); diff --git a/SSL/src/CommonModules/Анкетирование/Module.bsl b/SSL/src/CommonModules/Анкетирование/Module.bsl index 1c27fe29b..d8e5e0c09 100644 --- a/SSL/src/CommonModules/Анкетирование/Module.bsl +++ b/SSL/src/CommonModules/Анкетирование/Module.bsl @@ -70,11 +70,11 @@ Обработчик.БлокируемыеОбъекты = "Справочник.ВопросыШаблонаАнкеты"; Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "2.3.5.6"; + Обработчик.Версия = "2.4.4.69"; Обработчик.Идентификатор = Новый УникальныйИдентификатор("a1581723-c1f5-4b90-b716-a180a4d5a4ad"); Обработчик.Процедура = "ПланыВидовХарактеристик.ВопросыДляАнкетирования.ОбработатьДанныеДляПереходаНаНовуюВерсию"; - Обработчик.Комментарий = НСтр("ru = 'Заполнение значения нового реквизита ""Вид переключателя"" в списке ""Вопросы для анкетирования"". - |До завершения обработки ""Вид переключателя"" в данном списке будет отображаться некорректно.'"); + Обработчик.Комментарий = НСтр("ru = 'Заполнение значений нового реквизита ""Вид"" в вопросах для анкетирования. + |До завершения обработки вид вопросов для анкетирования будет отображаться некорректно.'"); Обработчик.РежимВыполнения = "Отложенно"; Обработчик.ОчередьОтложеннойОбработки = 1; Обработчик.ПроцедураЗаполненияДанныхОбновления = "ПланыВидовХарактеристик.ВопросыДляАнкетирования.ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию"; @@ -667,7 +667,6 @@ ИмяТаблицы = ИмяВопроса + "_Таблица"; ИмяКолонкиБезНомера = ИмяТаблицы + "_Колонка_"; ОписаниеТиповПВХ = Метаданные.ПланыВидовХарактеристик.ВопросыДляАнкетирования.Тип; - СчетчикКолонок = 0; РеквизитТаблица = Новый РеквизитФормы(ИмяТаблицы ,Новый ОписаниеТипов("ТаблицаЗначений"),,СтрокаДерева.Формулировка); ДобавляемыеРеквизиты.Добавить(РеквизитТаблица); @@ -904,9 +903,23 @@ ЭлементГруппаВопроса.РастягиватьПоГоризонтали = Истина; ЭлементГруппаВопроса.РастягиватьПоВертикали = Ложь; + Если СтрокаТаблицы.ТипОтвета = Перечисления.ТипыОтветовНаВопрос.Булево Тогда + ЭлементГруппаВопросаБулево = Форма.Элементы.Добавить(ИмяВопроса + "_Группа_Булево" ,Тип("ГруппаФормы"),ЭлементГруппаВопроса); + ЭлементГруппаВопросаБулево.Вид = ВидГруппыФормы.ОбычнаяГруппа; + ЭлементГруппаВопросаБулево.ОтображатьЗаголовок = Ложь; + ЭлементГруппаВопросаБулево.Отображение = ОтображениеОбычнойГруппы.Нет; + ЭлементГруппаВопросаБулево.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Горизонтальная; + ЭлементГруппаВопросаБулево.РастягиватьПоГоризонтали = Истина; + ЭлементГруппаВопросаБулево.РастягиватьПоВертикали = Ложь; + КонецЕсли; + Форма[ИмяВопроса + "_Формулировка"] = ПолныйКодНаименование(СтрокаТаблицы); - Элемент = Форма.Элементы.Добавить(ИмяВопроса + "_Формулировка",Тип("ДекорацияФормы"),ЭлементГруппаВопроса); + Если СтрокаТаблицы.ТипОтвета = Перечисления.ТипыОтветовНаВопрос.Булево Тогда + Элемент = Форма.Элементы.Добавить(ИмяВопроса + "_Формулировка",Тип("ДекорацияФормы"),ЭлементГруппаВопросаБулево); + Иначе + Элемент = Форма.Элементы.Добавить(ИмяВопроса + "_Формулировка",Тип("ДекорацияФормы"),ЭлементГруппаВопроса); + КонецЕсли; Элемент.Вид = ВидДекорацииФормы.Надпись; Элемент.ВертикальноеПоложение = ВертикальноеПоложениеЭлемента.Верх; Элемент.Заголовок = Форма[ИмяВопроса + "_Формулировка"]; @@ -961,8 +974,13 @@ ИначеЕсли СтрокаТаблицы.ТипОтвета = Перечисления.ТипыОтветовНаВопрос.Булево Тогда - Элемент = Форма.Элементы.Добавить(ИмяВопроса,Тип("ПолеФормы"),ЭлементГруппаВопросКомментарий); - Элемент.Вид = ВидПоляФормы.ПолеВвода; + Элемент = Форма.Элементы.Добавить(ИмяВопроса,Тип("ПолеФормы"),ЭлементГруппаВопросаБулево); + Если СтрокаТаблицы.ВидФлажка = Перечисления.ВидыФлажкаВАнкетах.Флажок Тогда + Элемент.Вид = ВидПоляФормы.ПолеФлажка; + Иначе + Элемент.Вид = ВидПоляФормы.ПолеВвода; + КонецЕсли; + Элемент.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет; Элемент.ПутьКДанным = ИмяВопроса; @@ -1293,11 +1311,25 @@ Продолжить; КонецЕсли; - Элемент = Форма.Элементы.Добавить(ИмяВопроса + "_ЭлементарныйВопрос_" + Формат(СтрокаКомплексногоВопроса.НомерСтроки, "ЧГ="),Тип("ДекорацияФормы"),ЭлементГруппа); + Если РеквизитыЭлементарногоВопроса.ТипОтвета = Перечисления.ТипыОтветовНаВопрос.Булево Тогда + ЭлементГруппаВопросаБулево = Форма.Элементы.Добавить(ИмяВопроса + "_ЭлементарныйВопрос_" + Формат(СтрокаКомплексногоВопроса.НомерСтроки, "ЧГ=") + "_ГруппаБулево",Тип("ГруппаФормы"),ЭлементГруппа); + ЭлементГруппаВопросаБулево.Вид = ВидГруппыФормы.ОбычнаяГруппа; + ЭлементГруппаВопросаБулево.ОтображатьЗаголовок = Ложь; + ЭлементГруппаВопросаБулево.Отображение = ОтображениеОбычнойГруппы.Нет; + ЭлементГруппаВопросаБулево.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Горизонтальная; + ЭлементГруппаВопросаБулево.РастягиватьПоГоризонтали = Истина; + ЭлементГруппаВопросаБулево.РастягиватьПоВертикали = Ложь; + КонецЕсли; + + Если РеквизитыЭлементарногоВопроса.ТипОтвета = Перечисления.ТипыОтветовНаВопрос.Булево Тогда + Элемент = Форма.Элементы.Добавить(ИмяВопроса + "_ЭлементарныйВопрос_" + Формат(СтрокаКомплексногоВопроса.НомерСтроки, "ЧГ="),Тип("ДекорацияФормы"),ЭлементГруппаВопросаБулево); + Иначе + Элемент = Форма.Элементы.Добавить(ИмяВопроса + "_ЭлементарныйВопрос_" + Формат(СтрокаКомплексногоВопроса.НомерСтроки, "ЧГ="),Тип("ДекорацияФормы"),ЭлементГруппа); + КонецЕсли; Элемент.Вид = ВидДекорацииФормы.Надпись; Элемент.Заголовок = СтрокаКомплексногоВопроса.ЭлементарныйВопрос; Элемент.АвтоМаксимальнаяШирина = Ложь; - Элемент.РастягиватьПоГоризонтали = Истина; + Элемент.РастягиватьПоГоризонтали = (РеквизитыЭлементарногоВопроса.ТипОтвета <> Перечисления.ТипыОтветовНаВопрос.Булево); Элемент.Шрифт = Новый Шрифт(Элемент.Шрифт, , 8); Если РеквизитыЭлементарногоВопроса.ТипОтвета = Перечисления.ТипыОтветовНаВопрос.Строка Тогда @@ -1323,8 +1355,13 @@ ИначеЕсли РеквизитыЭлементарногоВопроса.ТипОтвета = Перечисления.ТипыОтветовНаВопрос.Булево Тогда - Элемент = Форма.Элементы.Добавить(ИмяВопроса + "_Ответ_" + Формат(СтрокаКомплексногоВопроса.НомерСтроки, "ЧГ="),Тип("ПолеФормы"),ЭлементГруппа); - Элемент.Вид = ВидПоляФормы.ПолеВвода; + Элемент = Форма.Элементы.Добавить(ИмяВопроса + "_Ответ_" + Формат(СтрокаКомплексногоВопроса.НомерСтроки, "ЧГ="),Тип("ПолеФормы"),ЭлементГруппаВопросаБулево); + Если РеквизитыЭлементарногоВопроса.ВидФлажка = Перечисления.ВидыФлажкаВАнкетах.Флажок Тогда + Элемент.Вид = ВидПоляФормы.ПолеФлажка; + Иначе + Элемент.Вид = ВидПоляФормы.ПолеВвода; + КонецЕсли; + Элемент.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет; Элемент.ПутьКДанным = ИмяВопроса + "_Ответ_" + Формат(СтрокаКомплексногоВопроса.НомерСтроки, "ЧГ="); @@ -1651,6 +1688,7 @@ | ВопросыДляАнкетирования.ТипЗначения КАК Тип, | ВопросыДляАнкетирования.ТипОтвета КАК ТипОтвета, | ВопросыДляАнкетирования.ВидПереключателя КАК ВидПереключателя, + | ВопросыДляАнкетирования.ВидФлажка КАК ВидФлажка, | ВопросыДляАнкетирования.МинимальноеЗначение КАК МинимальноеЗначение, | ВопросыДляАнкетирования.МаксимальноеЗначение КАК МаксимальноеЗначение |ИЗ @@ -1721,6 +1759,7 @@ | ЕСТЬNULL(ВопросыДляАнкетирования.МинимальноеЗначение, 0) КАК МинимальноеЗначение, | ЕСТЬNULL(ВопросыДляАнкетирования.МаксимальноеЗначение, 0) КАК МаксимальноеЗначение, | ЕСТЬNULL(ВопросыДляАнкетирования.ВидПереключателя, ЗНАЧЕНИЕ(Перечисление.ВидыПереключателяВАнкетах.ПустаяСсылка)) КАК ВидПереключателя, + | ЕСТЬNULL(ВопросыДляАнкетирования.ВидФлажка, ЗНАЧЕНИЕ(Перечисление.ВидыФлажкаВАнкетах.ПустаяСсылка)) КАК ВидФлажка, | ЕСТЬNULL(ВопросыДляАнкетирования.ТипОтвета, ЗНАЧЕНИЕ(Перечисление.ТипыОтветовНаВопрос.ПустаяСсылка)) КАК ТипОтвета, | ЕСТЬNULL(ВопросыШаблонаАнкеты.Формулировка, """") КАК Формулировка, | ЕСТЬNULL(ВопросыДляАнкетирования.Точность, 0) КАК Точность @@ -2075,8 +2114,8 @@ Если ЗначениеЗаполнено(Респондент) Тогда Запрос = Новый Запрос; - Запрос.Текст = " - |ВЫБРАТЬ + Запрос.Текст = + "ВЫБРАТЬ | НазначениеОпросов.Ссылка КАК Ссылка, | НазначениеОпросов.СвободныйОпрос КАК СвободныйОпрос, | НазначениеОпросов.ДатаОкончания КАК ДатаОкончания, @@ -2088,10 +2127,10 @@ | НазначениеОпросов.Проведен | И НЕ НазначениеОпросов.ПометкаУдаления | И НазначениеОпросов.ТипРеспондентов = &ТипРеспондентов - | И НЕ(НЕ НазначениеОпросов.ДатаНачала = &ПустаяДата - | И НЕ НАЧАЛОПЕРИОДА(НазначениеОпросов.ДатаНачала, ДЕНЬ) < &ТекущаяДата) - | И НЕ(НЕ НазначениеОпросов.ДатаОкончания = &ПустаяДата - | И НЕ КОНЕЦПЕРИОДА(НазначениеОпросов.ДатаОкончания, ДЕНЬ) > &ТекущаяДата) + | И (НазначениеОпросов.ДатаНачала = &ПустаяДата + | ИЛИ НАЧАЛОПЕРИОДА(НазначениеОпросов.ДатаНачала, ДЕНЬ) < &ТекущаяДата) + | И (НазначениеОпросов.ДатаОкончания = &ПустаяДата + | ИЛИ КОНЕЦПЕРИОДА(НазначениеОпросов.ДатаОкончания, ДЕНЬ) > &ТекущаяДата) |; | |//////////////////////////////////////////////////////////////////////////////// diff --git a/SSL/src/CommonModules/БизнесПроцессыИЗадачиКлиент/Module.bsl b/SSL/src/CommonModules/БизнесПроцессыИЗадачиКлиент/Module.bsl index 6e382aee5..39b1718bd 100644 --- a/SSL/src/CommonModules/БизнесПроцессыИЗадачиКлиент/Module.bsl +++ b/SSL/src/CommonModules/БизнесПроцессыИЗадачиКлиент/Module.bsl @@ -632,7 +632,7 @@ ЗадачиПеренаправлены = БизнесПроцессыИЗадачиВызовСервера.ПеренаправитьЗадачи( МассивЗадач, Результат, Ложь, МассивПеренаправленныхЗадач); - Оповестить("Запись_ЗадачаИсполнителя", Новый Структура("Перенаправлена", Истина), МассивЗадач); + Оповестить("Запись_ЗадачаИсполнителя", Новый Структура("Перенаправлена", ЗадачиПеренаправлены), МассивЗадач); КонецПроцедуры diff --git a/SSL/src/CommonModules/БизнесПроцессыИЗадачиСервер/Module.bsl b/SSL/src/CommonModules/БизнесПроцессыИЗадачиСервер/Module.bsl index 580500fa9..75086f8a7 100644 --- a/SSL/src/CommonModules/БизнесПроцессыИЗадачиСервер/Module.bsl +++ b/SSL/src/CommonModules/БизнесПроцессыИЗадачиСервер/Module.bsl @@ -312,7 +312,7 @@ Пока Выборка.Следующий() Цикл ЗадачаОбъект = Выборка.Ссылка.ПолучитьОбъект(); ЗадачаОбъект.УстановитьПометкуУдаления(ПометкаУдаления); - КонецЦикла; + КонецЦикла; ЗафиксироватьТранзакцию(); Исключение @@ -1088,14 +1088,7 @@ |ИЗ | РегистрСведений.ИсполнителиЗадач КАК ИсполнителиЗадач |ГДЕ - | ИСТИНА В - | (ВЫБРАТЬ ПЕРВЫЕ 1 - | ИСТИНА - | ИЗ - | РегистрСведений.ИсполнителиЗадач КАК ГруппыИсполнителей - | ГДЕ - | ГруппыИсполнителей.ГруппаИсполнителейЗадач = ИсполнителиЗадач.ГруппаИсполнителейЗадач - | И ГруппыИсполнителей.Исполнитель В (&Исполнители))"; + | ИсполнителиЗадач.Исполнитель В(&Исполнители)"; Иначе Запрос.Текст = @@ -1610,7 +1603,7 @@ КонецПроцедуры -Функция СоздатьЗадачуПоНастройкеРолей(ЗадачаСсылка, Ответственные) +Процедура СоздатьЗадачуПоНастройкеРолей(ЗадачаСсылка, Ответственные) Для Каждого Ответственный Из Ответственные Цикл ЗадачаОбъект = Задачи.ЗадачаИсполнителя.СоздатьЗадачу(); @@ -1625,7 +1618,7 @@ ЗадачаОбъект.Записать(); КонецЦикла; -КонецФункции +КонецПроцедуры Функция ВыбратьНовыеЗадачиПоИсполнителям(Знач ДатаВремяОт, Знач ДатаВремяПо) @@ -1639,7 +1632,7 @@ | ЗадачаИсполнителя.Автор КАК Автор, | ЗадачаИсполнителя.Описание КАК Описание, | ВЫБОР - | КОГДА ЗадачаИсполнителя.Исполнитель <> Неопределено + | КОГДА ЗадачаИсполнителя.Исполнитель <> НЕОПРЕДЕЛЕНО | ТОГДА ЗадачаИсполнителя.Исполнитель | ИНАЧЕ ИсполнителиЗадач.Исполнитель | КОНЕЦ КАК Исполнитель, @@ -1653,21 +1646,22 @@ | И ЗадачаИсполнителя.ОсновнойОбъектАдресации = ИсполнителиЗадач.ОсновнойОбъектАдресации | И ЗадачаИсполнителя.ДополнительныйОбъектАдресации = ИсполнителиЗадач.ДополнительныйОбъектАдресации |ГДЕ - | ЗадачаИсполнителя.ПометкаУдаления = ЛОЖЬ - | И ЗадачаИсполнителя.Дата > &ДатаВремяОт - | И ЗадачаИсполнителя.Дата <= &ДатаВремяПо - | И НЕ (ЗадачаИсполнителя.Исполнитель = ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка) - | И ИсполнителиЗадач.Исполнитель В (NULL, ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка))) - | И ЗадачаИсполнителя.Выполнена = ЛОЖЬ + | ЗадачаИсполнителя.Выполнена = ЛОЖЬ + | И ЗадачаИсполнителя.Дата МЕЖДУ &ДатаВремяОт И &ДатаВремяПо + | И ЗадачаИсполнителя.ПометкаУдаления = ЛОЖЬ + | И (ЗадачаИсполнителя.Исполнитель <> ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка) + | ИЛИ ИсполнителиЗадач.Исполнитель ЕСТЬ НЕ NULL + | И ИсполнителиЗадач.Исполнитель <> ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка)) | |УПОРЯДОЧИТЬ ПО | Исполнитель, | СрокИсполнения УБЫВ |ИТОГИ ПО | Исполнитель"); - Запрос.Параметры.Вставить("ДатаВремяОт", ДатаВремяОт); + Запрос.Параметры.Вставить("ДатаВремяОт", ДатаВремяОт + 1); Запрос.Параметры.Вставить("ДатаВремяПо", ДатаВремяПо); Результат = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам); + Возврат Результат; КонецФункции @@ -2121,7 +2115,7 @@ Для Каждого ВложенныйБизнесПроцесс Из ВложенныеБизнесПроцессы Цикл БизнесПроцессОбъект = ВложенныйБизнесПроцесс.ПолучитьОбъект(); БизнесПроцессОбъект.УстановитьПометкуУдаления(НовоеЗначениеПометкиУдаления); - КонецЦикла; + КонецЦикла; // Помечаем подчиненные бизнес-процессы. ПодчиненныеБизнесПроцессы = БизнесПроцессыГлавнойЗадачи(ЗадачаСсылка, Истина); @@ -2444,9 +2438,14 @@ Функция ЭлектроннаяПочтаВнешнегоПользователя(Получатель) Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда + МодульУправлениеКонтактнойИнформациейСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформациейСлужебный"); + МодульУправлениеКонтактнойИнформацией = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформацией"); + ТипКонтактнойИнформации = МодульУправлениеКонтактнойИнформацией.ТипКонтактнойИнформацииПоНаименованию("АдресЭлектроннойПочты"); + Возврат МодульУправлениеКонтактнойИнформациейСлужебный.ПервоеЗначениеКонтактнойИнформацииОбъектаПоТипу( - Получатель.ОбъектАвторизации, Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты); + Получатель.ОбъектАвторизации, ТипКонтактнойИнформации, ТекущаяДатаСеанса()); + КонецЕсли; Возврат ""; diff --git a/SSL/src/CommonModules/ВариантыОтчетов/Module.bsl b/SSL/src/CommonModules/ВариантыОтчетов/Module.bsl index c674b3d8e..8c3875011 100644 --- a/SSL/src/CommonModules/ВариантыОтчетов/Module.bsl +++ b/SSL/src/CommonModules/ВариантыОтчетов/Module.bsl @@ -65,7 +65,7 @@ // Функция ОтчетыТекущегоПользователя() Экспорт - ДоступныеОтчеты = ВариантыОтчетовПовтИсп.ДоступныеОтчеты(); + ДоступныеОтчеты = Новый Массив(ВариантыОтчетовПовтИсп.ДоступныеОтчеты()); // Дополнительные отчеты, доступные текущему пользователю. Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки") Тогда @@ -1371,7 +1371,6 @@ КлючОтчета = "Отчет" + "." + ОтчетМетаданные.Имя; ВсеВариантыОтчета = КлючиВариантовОтчета(КлючОтчета, ПользовательИнформационнойБазы); - ВариантыОтчета = Новый СписокЗначений; Для Каждого ВариантОтчета Из ВсеВариантыОтчета Цикл @@ -2049,8 +2048,6 @@ ПодсистемыОтчетов = РазмещениеОтчетовВПодсистемах(); КэшФлажкаХранилища = Неопределено; - КэшФлажкаОсновнойФормы = Неопределено; - КэшФлажкаФормыНастроек = Неопределено; Для Каждого ОтчетМетаданные Из Метаданные.Отчеты Цикл Если Не ОтчетПодключенКХранилищу(ОтчетМетаданные, КэшФлажкаХранилища) Тогда Продолжить; @@ -2294,16 +2291,7 @@ Обработчик.Приоритет = 80; Обработчик.Процедура = "ВариантыОтчетов.ЗаполнитьСсылкиПредопределенных"; - // 2.3. Удалить устаревшие отложенные разделенные обязательные (на *) обработчики обновления. - Обработчик = Обработчики.Добавить(); - Обработчик.ВыполнятьВГруппеОбязательных = Истина; - Обработчик.ОбщиеДанные = Ложь; - Обработчик.РежимВыполнения = "Оперативно"; - Обработчик.Версия = "2.4.1.1"; - Обработчик.Процедура = "ВариантыОтчетов.УдалитьУстаревшиеОбработчики"; - Обработчик.Приоритет = 85; - - // 2.4. Обновить разделенные данные в локальном режиме. + // 2.3. Обновить разделенные данные в локальном режиме. Обработчик = Обработчики.Добавить(); Обработчик.ВыполнятьВГруппеОбязательных = Истина; Обработчик.ОбщиеДанные = Ложь; @@ -2376,7 +2364,7 @@ КонецПроцедуры -// См. ОбщегоНазначенияПереопределяемый.ПараметрыРаботыКлиентаПриЗапуске. +// См. ОбщегоНазначенияПереопределяемый.ПриДобавленииПараметровРаботыКлиентаПриЗапуске. Процедура ПриДобавленииПараметровРаботыКлиентаПриЗапуске(Параметры) Экспорт Параметры.Вставить("ВариантыОтчетов", Новый ФиксированнаяСтруктура(ПараметрыКлиента())); КонецПроцедуры @@ -2479,6 +2467,8 @@ КомандыОтчетов.Индексы.Добавить("Обработана"); СтандартнаяОбработка = Источники.Строки.Количество() > 0; + НастройкиФормы.Вставить("Источники", Источники); + ИнтеграцияПодсистемБСП.ПередДобавлениемКомандОтчетов(КомандыОтчетов, НастройкиФормы, СтандартнаяОбработка); ВариантыОтчетовПереопределяемый.ПередДобавлениемКомандОтчетов(КомандыОтчетов, НастройкиФормы, СтандартнаяОбработка); КомандыОтчетов.ЗаполнитьЗначения(Истина, "Обработана"); @@ -2501,8 +2491,29 @@ ПриДобавленииКомандОтчетов(КомандыОтчетов, ПодключенныйОбъект, НастройкиФормы); КонецЦикла; + ИменаКлючевыхПараметровКоманды = "Идентификатор,Представление,ФункциональныеОпции,Менеджер,ИмяФормы,КлючВарианта, + |ИмяПараметраФормы,ПараметрыФормы,Обработчик,ДополнительныеПараметры,ВидимостьВФормах"; + + ДобавленныеКоманды = Новый Соответствие; + Для Каждого КомандаОтчетов Из КомандыОтчетов Цикл + КлючевыеПараметры = Новый Структура(ИменаКлючевыхПараметровКоманды); + ЗаполнитьЗначенияСвойств(КлючевыеПараметры, КомандаОтчетов); + УникальныйИдентификатор = ОбщегоНазначения.КонтрольнаяСуммаСтрокой(КлючевыеПараметры); + + НайденнаяКоманда = ДобавленныеКоманды[УникальныйИдентификатор]; + Если НайденнаяКоманда <> Неопределено И ЗначениеЗаполнено(НайденнаяКоманда.ТипПараметра) Тогда + Если ЗначениеЗаполнено(КомандаОтчетов.ТипПараметра) Тогда + НайденнаяКоманда.ТипПараметра = Новый ОписаниеТипов(НайденнаяКоманда.ТипПараметра, КомандаОтчетов.ТипПараметра.Типы()); + Иначе + НайденнаяКоманда.ТипПараметра = Неопределено; + КонецЕсли; + Продолжить; + КонецЕсли; + Команда = Команды.Добавить(); + ДобавленныеКоманды.Вставить(УникальныйИдентификатор, Команда); + ЗаполнитьЗначенияСвойств(Команда, КомандаОтчетов); Команда.Вид = "Отчеты"; Если Команда.Порядок = 0 Тогда @@ -2893,7 +2904,11 @@ // По составу ролей определяет полные права к данным подсистемы. Функция ПолныеПраваНаВарианты() Экспорт - Возврат Пользователи.РолиДоступны("ДобавлениеИзменениеВариантовОтчетов"); + + ПараметрыДоступа = ПараметрыДоступа("Изменение", Метаданные.Справочники.ВариантыОтчетов, + Метаданные.Справочники.ВариантыОтчетов.СтандартныеРеквизиты.Ссылка.Имя); + Возврат ПараметрыДоступа.Доступность И Не ПараметрыДоступа.ОграничениеУсловием; + КонецФункции // Проверяет свободно ли наименование варианта отчета. @@ -3477,14 +3492,6 @@ КонецЕсли; КонецПроцедуры -// [2.4.1.1] Удаление устаревших отложенных разделенных обработчиков обновления. -Процедура УдалитьУстаревшиеОбработчики(Параметры = Неопределено) Экспорт - - ОбновлениеИнформационнойБазы.УдалитьОтложенныйОбработчикИзОчереди("ВариантыОтчетов.ОтложенноеИнкрементальноеОбновлениеОбщихДанных"); - ОбновлениеИнформационнойБазы.УдалитьОтложенныйОбработчикИзОчереди("ВариантыОтчетов.ОтложенноеОбновлениеОбщихДанныхКонфигурацииИнкрементальное"); - -КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// // Обновление информационной базы / Начальное заполнение и актуализация справочников. @@ -3661,6 +3668,7 @@ КэшОтчетов = Новый Соответствие; СтарыеСведения = Новый Структура("ХешНастроек, НаименованияПолей, НаименованияПараметровИОтборов, КлючевыеСлова"); + СписокОшибок = Новый Массив; Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл @@ -3704,7 +3712,17 @@ Если Кэш.Полное Тогда // Переиндексировать принудительно, без проверки хеш-суммы. ВариантОбъект.ДополнительныеСвойства.Вставить("ИндексироватьСхему", Истина); КонецЕсли; - СхемаПроиндексирована = ПроиндексироватьСодержимоеСхемы(ВариантОбъект); + + Попытка + СхемаПроиндексирована = ПроиндексироватьСодержимоеСхемы(ВариантОбъект); + Исключение + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не удалось перестроить индекс поиска для варианта ""%1"" отчета ""%2"". Возможно, отчет неисправен.'"), + ВариантОбъект.КлючВарианта, ВариантОбъект.Отчет); + ЗаписатьВЖурнал(УровеньЖурналаРегистрации.Ошибка, ТекстОшибки + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ВариантОбъект.Ссылка); + СписокОшибок.Добавить(ТекстОшибки); + Продолжить; + КонецПопытки; + Если СхемаПроиндексирована И ИзменилисьНастройкиПоиска(ВариантОбъект, СтарыеСведения) Тогда Если Кэш.ОбщиеДанные Тогда ЗаписатьПредопределенный(ВариантОбъект); @@ -4032,8 +4050,8 @@ |ИЗ | Справочник.ВариантыОтчетов КАК ВариантыОтчетов |ГДЕ - | НЕ(НЕ ВариантыОтчетов.ТипОтчета = &ТипОтчета - | И НЕ ТИПЗНАЧЕНИЯ(ВариантыОтчетов.Отчет) = &ТипРеквизитаОтчет) + | (ВариантыОтчетов.ТипОтчета = &ТипОтчета + | ИЛИ ТИПЗНАЧЕНИЯ(ВариантыОтчетов.Отчет) = &ТипРеквизитаОтчет) | И ВариантыОтчетов.Пользовательский = ЛОЖЬ |; | @@ -4154,7 +4172,7 @@ КонецЦикла; // Обновление родителей пользовательских вариантов. - ТекстЗапроса = // ОБЪЕДИНИТЬ ВСЕ используется вместо ИЛИ (требование стандартов). + ТекстЗапроса = "ВЫБРАТЬ | ОсновныеВариантыОтчетов.Отчет, | ОсновныеВариантыОтчетов.Вариант @@ -4175,22 +4193,8 @@ | И ВариантыОтчетов.Родитель.Родитель <> втОсновные.Вариант | И ВариантыОтчетов.Ссылка <> втОсновные.Вариант |ГДЕ - | ВариантыОтчетов.Пользовательский - | - |ОБЪЕДИНИТЬ ВСЕ - | - |ВЫБРАТЬ - | ВариантыОтчетов.Ссылка, - | втОсновные.Вариант - |ИЗ - | Справочник.ВариантыОтчетов КАК ВариантыОтчетов - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ втОсновные КАК втОсновные - | ПО ВариантыОтчетов.Отчет = втОсновные.Отчет - | И ВариантыОтчетов.Родитель <> втОсновные.Вариант - | И ВариантыОтчетов.Родитель.Родитель <> втОсновные.Вариант - | И ВариантыОтчетов.Ссылка <> втОсновные.Вариант - |ГДЕ - | НЕ ВариантыОтчетов.ПометкаУдаления"; + | ВариантыОтчетов.Пользовательский + | ИЛИ НЕ ВариантыОтчетов.ПометкаУдаления"; Запрос = Новый Запрос; Запрос.УстановитьПараметр("ОсновныеВариантыОтчетов", Кэш.ОсновныеВарианты); @@ -4273,39 +4277,15 @@ ЗаписатьВЖурналЗапускПроцедуры(ПредставлениеПроцедуры); Запрос = Новый Запрос; - ТекстЗапроса = // ОБЪЕДИНИТЬ ВСЕ используется вместо ИЛИ (требование стандартов). + ТекстЗапроса = "ВЫБРАТЬ - | ВариантыОтчетов.Ссылка + | ВариантыОтчетов.Ссылка КАК Ссылка |ИЗ | Справочник.ВариантыОтчетов КАК ВариантыОтчетов |ГДЕ - | ВариантыОтчетов.ПометкаУдаления = ЛОЖЬ - | И ВариантыОтчетов.Отчет = НЕОПРЕДЕЛЕНО + | НЕ ВариантыОтчетов.ПометкаУдаления | И ВариантыОтчетов.ТипОтчета = &ТипОтчета - | - |ОБЪЕДИНИТЬ ВСЕ - | - |ВЫБРАТЬ - | ВариантыОтчетов.Ссылка - |ИЗ - | Справочник.ВариантыОтчетов КАК ВариантыОтчетов - |ГДЕ - | ВариантыОтчетов.ПометкаУдаления = ЛОЖЬ - | И ВариантыОтчетов.Отчет ЕСТЬ NULL - | И ВариантыОтчетов.ТипОтчета = &ТипОтчета - | - |ОБЪЕДИНИТЬ ВСЕ - | - |ВЫБРАТЬ - | ВариантыОтчетов.Ссылка - |ИЗ - | Справочник.ВариантыОтчетов КАК ВариантыОтчетов - |ГДЕ - | ВариантыОтчетов.ПометкаУдаления = ЛОЖЬ - | И ВариантыОтчетов.Отчет <> НЕОПРЕДЕЛЕНО - | И ВариантыОтчетов.Отчет ЕСТЬ НЕ NULL - | И ВариантыОтчетов.Отчет.ПометкаУдаления = ИСТИНА - | И ВариантыОтчетов.ТипОтчета = &ТипОтчета"; + | И ЕСТЬNULL(ВариантыОтчетов.Отчет.ПометкаУдаления, ИСТИНА)"; Если Кэш.Режим = "ОбщиеДанныеКонфигурации" Тогда ТекстЗапроса = СтрЗаменить(ТекстЗапроса, ".ВариантыОтчетов", ".ПредопределенныеВариантыОтчетов"); @@ -5076,7 +5056,6 @@ // Вызывается из события ПриЗаписи вариантов. Часть проверок выполняется до вызова. Функция УменьшитьКоличествоБыстрыхНастроек(ВариантОбъект, ОтчетОбъект) - Перем НастройкиКД, ЭтоПредопределенный; Если ВариантОбъект = Неопределено Тогда Возврат Ложь; // Варианта нет в базе. Заполнение не требуется. @@ -5219,8 +5198,6 @@ // ** Значение - Массив Из СправочникСсылка.ИдентификаторыОбъектовМетаданных - Подсистемы. // Функция НайтиСсылки(ПараметрыПоиска) Экспорт - ПараметрыПоиска.Вставить("ОтчетыПользователя", ОтчетыТекущегоПользователя()); - ПараметрыПоиска.Вставить("ОтключенныеВариантыПрограммы", ВариантыОтчетовПовтИсп.ОтключенныеВариантыПрограммы()); Если ПараметрыПоиска.Свойство("СтрокаПоиска") И ЗначениеЗаполнено(ПараметрыПоиска.СтрокаПоиска) Тогда ЕстьСтрокаПоиска = Истина; @@ -5278,13 +5255,11 @@ ТекущийПользователь = Пользователи.АвторизованныйПользователь(); Если ЕстьОтборПоОтчетам Тогда - ОтборПоОтчетам = Новый Массив; - Для Каждого ОтчетСсылка Из ПараметрыПоиска.Отчеты Цикл - Если ПараметрыПоиска.ОтчетыПользователя.Найти(ОтчетСсылка) <> Неопределено Тогда - ОтборПоОтчетам.Добавить(ОтчетСсылка); - КонецЕсли; - КонецЦикла; + ОтборПоОтчетам = ПараметрыПоиска.Отчеты; + ПараметрыПоиска.Вставить("ОтключенныеВариантыПрограммы", ОтключенныеВариантыОтчетов(ОтборПоОтчетам)); Иначе + ПараметрыПоиска.Вставить("ОтключенныеВариантыПрограммы", ВариантыОтчетовПовтИсп.ОтключенныеВариантыПрограммы()); + ПараметрыПоиска.Вставить("ОтчетыПользователя", ОтчетыТекущегоПользователя()); ОтборПоОтчетам = ПараметрыПоиска.ОтчетыПользователя; КонецЕсли; @@ -5702,22 +5677,22 @@ ТекстЗапроса = "ВЫБРАТЬ РАЗРЕШЕННЫЕ | ВариантыОтчетов.Ссылка КАК Ссылка, - | ВариантыОтчетов.КлючВарианта, - | ВариантыОтчетов.Родитель, - | ВариантыОтчетов.Наименование, - | ВариантыОтчетов.Описание, - | ВариантыОтчетов.ТолькоДляАвтора, - | ВариантыОтчетов.Автор + | ВариантыОтчетов.КлючВарианта КАК КлючВарианта, + | ВариантыОтчетов.Родитель КАК Родитель, + | ВариантыОтчетов.Наименование КАК Наименование, + | ВариантыОтчетов.Описание КАК Описание, + | ВариантыОтчетов.ТолькоДляАвтора КАК ТолькоДляАвтора, + | ВариантыОтчетов.Автор КАК Автор |ИЗ | Справочник.ВариантыОтчетов КАК ВариантыОтчетов |ГДЕ | ВариантыОтчетов.ТипОтчета В(&ТипыОтчетов) | И ВариантыОтчетов.Отчет В(&ОтчетыПользователя) | И НЕ ВариантыОтчетов.ПредопределенныйВариант В (&ОтключенныеВариантыПрограммы) - | И НЕ(ВариантыОтчетов.Пользовательский - | И ВариантыОтчетов.ИнтерактивнаяПометкаУдаления) - | И НЕ(НЕ ВариантыОтчетов.Пользовательский - | И ВариантыОтчетов.ПометкаУдаления) + | И (НЕ ВариантыОтчетов.Пользовательский + | ИЛИ НЕ ВариантыОтчетов.ИнтерактивнаяПометкаУдаления) + | И (ВариантыОтчетов.Пользовательский + | ИЛИ НЕ ВариантыОтчетов.ПометкаУдаления) | И &ПоказыватьЛичныеВариантыОтчетовДругихАвторов"; Если ЕстьОтборПоТипамОтчетов Тогда @@ -5786,7 +5761,6 @@ Вариант.Вставить("Подсистемы", Новый Массив); Вариант.Вставить("ПредставлениеАвтора", Новый Структура(ШаблонОбластиПоиска)); - РазделительХранения = ВариантыОтчетовКлиентСервер.РазделительХранения(); РазделительПредставления = ВариантыОтчетовКлиентСервер.РазделительПредставления(); Количество = ТаблицаЗначений.Количество(); @@ -5947,12 +5921,80 @@ Возврат Результат; КонецФункции +Функция ОтключенныеВариантыОтчетов(Знач ОтчетыПользователя = Неопределено) Экспорт + + Если ОтчетыПользователя = Неопределено Тогда + ОтчетыПользователя = ВариантыОтчетовПовтИсп.ДоступныеОтчеты(); + КонецЕсли; + + // Получить варианты, недоступные по функциональным опциям. + + ТаблицаОпций = ВариантыОтчетовПовтИсп.Параметры().ТаблицаФункциональныхОпций; + ТаблицаВариантов = ТаблицаОпций.СкопироватьКолонки("ПредопределенныйВариант, ИмяФункциональнойОпции"); + ТаблицаВариантов.Колонки.Добавить("ЗначениеОпции", Новый ОписаниеТипов("Число")); + + Для Каждого ОтчетСсылка Из ОтчетыПользователя Цикл + Найденные = ТаблицаОпций.НайтиСтроки(Новый Структура("Отчет", ОтчетСсылка)); + Для Каждого СтрокаТаблицы Из Найденные Цикл + СтрокаВариант = ТаблицаВариантов.Добавить(); + ЗаполнитьЗначенияСвойств(СтрокаВариант, СтрокаТаблицы); + Значение = ПолучитьФункциональнуюОпцию(СтрокаТаблицы.ИмяФункциональнойОпции); + Если Значение = Истина Тогда + СтрокаВариант.ЗначениеОпции = 1; + КонецЕсли; + КонецЦикла; + КонецЦикла; + + ТаблицаВариантов.Свернуть("ПредопределенныйВариант", "ЗначениеОпции"); + ТаблицаОтключенных = ТаблицаВариантов.Скопировать(Новый Структура("ЗначениеОпции", 0)); + ТаблицаОтключенных.Свернуть("ПредопределенныйВариант"); + ОтключенныеВарианты = ТаблицаОтключенных.ВыгрузитьКолонку("ПредопределенныйВариант"); + + // Добавить варианты, отключенные разработчиком. + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("ОтчетыПользователя", ОтчетыПользователя); + Запрос.УстановитьПараметр("ВерсияРасширений", ПараметрыСеанса.ВерсияРасширений); + Запрос.УстановитьПараметр("МассивОтключенных", ОтключенныеВарианты); + + Запрос.Текст = + "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | ВариантыКонфигурации.Ссылка + |ИЗ + | Справочник.ПредопределенныеВариантыОтчетов КАК ВариантыКонфигурации + |ГДЕ + | (ВариантыКонфигурации.Включен = ЛОЖЬ + | ИЛИ ВариантыКонфигурации.ПометкаУдаления = ИСТИНА) + | И ВариантыКонфигурации.Отчет В(&ОтчетыПользователя) + | И НЕ ВариантыКонфигурации.Ссылка В (&МассивОтключенных) + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | ВариантыРасширений.Ссылка + |ИЗ + | Справочник.ПредопределенныеВариантыОтчетовРасширений КАК ВариантыРасширений + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПредопределенныеВариантыОтчетовВерсийРасширений КАК Версии + | ПО ВариантыРасширений.Ссылка = Версии.Вариант + | И ВариантыРасширений.Отчет = Версии.Отчет + | И (Версии.ВерсияРасширений = &ВерсияРасширений) + |ГДЕ + | (ВариантыРасширений.Включен = ЛОЖЬ + | ИЛИ Версии.Вариант ЕСТЬ NULL) + | И ВариантыРасширений.Отчет В(&ОтчетыПользователя) + | И НЕ ВариантыРасширений.Ссылка В (&МассивОтключенных)"; + + ОтключенныеРазработчиком = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку(0); + ОбщегоНазначенияКлиентСервер.ДополнитьМассив(ОтключенныеВарианты, ОтключенныеРазработчиком); + + Возврат Новый ФиксированныйМассив(ОтключенныеВарианты); + +КонецФункции + // Находит слово и отмечает место, где оно найдено. Возвращает Истина если слово найдено. Функция ОтметитьСлово(СтруктураГде, Слово, ИспользоватьРазделитель = Ложь) Экспорт Если СтрНачинаетсяС(СтруктураГде.Значение, "#") Тогда СтруктураГде.Значение = Сред(СтруктураГде.Значение, 2); КонецЕсли; - Результат = ""; ОстатокВРег = ВРег(СтруктураГде.Значение); Позиция = СтрНайти(ОстатокВРег, Слово); Если Позиция = 0 Тогда @@ -6095,7 +6137,11 @@ Команда.Менеджер = СведенияОбОбъекте.ПолноеИмя; КонецЕсли; Если Не ЗначениеЗаполнено(Команда.ТипПараметра) Тогда - Команда.ТипПараметра = СведенияОбОбъекте.ТипСсылкиДанных; + Если ТипЗнч(СведенияОбОбъекте.ТипСсылкиДанных) = Тип("Тип") Тогда + Команда.ТипПараметра = Новый ОписаниеТипов(ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(СведенияОбОбъекте.ТипСсылкиДанных)); + Иначе // Тип("ОписаниеТипов") или Неопределено. + Команда.ТипПараметра = СведенияОбОбъекте.ТипСсылкиДанных; + КонецЕсли; КонецЕсли; Команда.Обработана = Истина; КонецЦикла; diff --git a/SSL/src/CommonModules/ВариантыОтчетовПереопределяемый/Module.bsl b/SSL/src/CommonModules/ВариантыОтчетовПереопределяемый/Module.bsl index 457622ab8..9b352bbfb 100644 --- a/SSL/src/CommonModules/ВариантыОтчетовПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ВариантыОтчетовПереопределяемый/Module.bsl @@ -244,45 +244,6 @@ -КонецПроцедуры - -#Область УстаревшиеПроцедурыИФункции - -// Устарела. Следует использовать ВариантыОтчетовПереопределяемый.ПриОпределенииНастроек. -// Задает настройки, применяемые как умолчания для объектов подсистемы. -// -// Параметры: -// Настройки - Структура - Коллекция настроек подсистемы. Реквизиты: -// * ВыводитьОтчетыВместоВариантов - Булево - Умолчание для вывода гиперссылок в панели отчетов: -// Истина - Варианты отчетов по умолчанию скрыты, а отчеты включены и видимы. -// Ложь - Варианты отчетов по умолчанию видимы, а отчеты отключены. -// Значение по умолчанию: Ложь. -// * ВыводитьОписания - Булево - Умолчание для вывода описаний в панели отчетов: -// Истина - Значение по умолчанию. Выводить описания в виде подписей под гиперссылками вариантов -// Ложь - Выводить описания в виде всплывающих подсказок -// Значение по умолчанию: Истина. -// * Поиск - Структура - Настройки поиска вариантов отчетов. -// ** ПодсказкаВвода - Строка - Текст подсказки выводится в поле поиска когда поиск не задан. -// В качестве примера рекомендуется указывать часто используемые термины прикладной конфигурации. -// * ДругиеОтчеты - Структура - Настройки формы "Другие отчеты": -// ** ЗакрыватьПослеВыбора - Булево - Закрывать ли форму после выбора гиперссылки отчета. -// Истина - Закрывать "Другие отчеты" после выбора. -// Ложь - Не закрывать. -// Значение по умолчанию: Истина. -// ** ПоказыватьФлажок - Булево - Показывать ли флажок ЗакрыватьПослеВыбора. -// Истина - Показывать флажок "Закрывать это окно после перехода к другому отчету". -// Ложь - Не показывать флажок. -// Значение по умолчанию: Ложь. -// -// Пример: -// Настройки.Поиск.ПодсказкаВвода = НСтр("ru = 'Например, себестоимость'"); -// Настройки.ДругиеОтчеты.ЗакрыватьПослеВыбора = Ложь; -// Настройки.ДругиеОтчеты.ПоказыватьФлажок = Истина; -// -Процедура ОпределитьГлобальныеНастройки(Настройки) Экспорт - КонецПроцедуры #КонецОбласти - -#КонецОбласти diff --git a/SSL/src/CommonModules/ВариантыОтчетовПовтИсп/Module.bsl b/SSL/src/CommonModules/ВариантыОтчетовПовтИсп/Module.bsl index 17e8e3655..79cbb134a 100644 --- a/SSL/src/CommonModules/ВариантыОтчетовПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ВариантыОтчетовПовтИсп/Module.bsl @@ -32,7 +32,7 @@ Результат.Добавить(ИдентификаторОтчета.Значение); КонецЦикла; - Возврат Результат; + Возврат Новый ФиксированныйМассив(Результат); КонецФункции // Формирует список вариантов отчетов конфигурации, недоступных текущему пользователю по функциональным опциям. @@ -45,69 +45,7 @@ // СправочникСсылка.ПредопределенныеВариантыОтчетовРасширений. // Функция ОтключенныеВариантыПрограммы() Экспорт - // Получить варианты, недоступные по функциональным опциям. - - ТаблицаОпций = ВариантыОтчетовПовтИсп.Параметры().ТаблицаФункциональныхОпций; - - ТаблицаВариантов = ТаблицаОпций.СкопироватьКолонки("ПредопределенныйВариант, ИмяФункциональнойОпции"); - ТаблицаВариантов.Колонки.Добавить("ЗначениеОпции", Новый ОписаниеТипов("Число")); - - ОтчетыПользователя = ВариантыОтчетовПовтИсп.ДоступныеОтчеты(); - Для Каждого ОтчетСсылка Из ОтчетыПользователя Цикл - Найденные = ТаблицаОпций.НайтиСтроки(Новый Структура("Отчет", ОтчетСсылка)); - Для Каждого СтрокаТаблицы Из Найденные Цикл - СтрокаВариант = ТаблицаВариантов.Добавить(); - ЗаполнитьЗначенияСвойств(СтрокаВариант, СтрокаТаблицы); - Значение = ПолучитьФункциональнуюОпцию(СтрокаТаблицы.ИмяФункциональнойОпции); - Если Значение = Истина Тогда - СтрокаВариант.ЗначениеОпции = 1; - КонецЕсли; - КонецЦикла; - КонецЦикла; - - ТаблицаВариантов.Свернуть("ПредопределенныйВариант", "ЗначениеОпции"); - ТаблицаОтключенных = ТаблицаВариантов.Скопировать(Новый Структура("ЗначениеОпции", 0)); - ТаблицаОтключенных.Свернуть("ПредопределенныйВариант"); - ОтключенныеВарианты = ТаблицаОтключенных.ВыгрузитьКолонку("ПредопределенныйВариант"); - - // Добавить варианты, отключенные разработчиком. - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("ОтчетыПользователя", ОтчетыПользователя); - Запрос.УстановитьПараметр("ВерсияРасширений", ПараметрыСеанса.ВерсияРасширений); - Запрос.УстановитьПараметр("МассивОтключенных", ОтключенныеВарианты); - Запрос.Текст = - "ВЫБРАТЬ РАЗРЕШЕННЫЕ - | ВариантыКонфигурации.Ссылка - |ИЗ - | Справочник.ПредопределенныеВариантыОтчетов КАК ВариантыКонфигурации - |ГДЕ - | НЕ(НЕ ВариантыКонфигурации.Включен = ЛОЖЬ - | И НЕ ВариантыКонфигурации.ПометкаУдаления = ИСТИНА) - | И ВариантыКонфигурации.Отчет В(&ОтчетыПользователя) - | И НЕ ВариантыКонфигурации.Ссылка В (&МассивОтключенных) - | - |ОБЪЕДИНИТЬ ВСЕ - | - |ВЫБРАТЬ - | ВариантыРасширений.Ссылка - |ИЗ - | Справочник.ПредопределенныеВариантыОтчетовРасширений КАК ВариантыРасширений - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПредопределенныеВариантыОтчетовВерсийРасширений КАК Версии - | ПО ВариантыРасширений.Ссылка = Версии.Вариант - | И ВариантыРасширений.Отчет = Версии.Отчет - | И (Версии.ВерсияРасширений = &ВерсияРасширений) - |ГДЕ - | НЕ(НЕ ВариантыРасширений.Включен = ЛОЖЬ - | И НЕ Версии.Вариант ЕСТЬ NULL ) - | И ВариантыРасширений.Отчет В(&ОтчетыПользователя) - | И НЕ ВариантыРасширений.Ссылка В (&МассивОтключенных)"; - - Выборка = Запрос.Выполнить().Выбрать(); - Пока Выборка.Следующий() Цикл - ОтключенныеВарианты.Добавить(Выборка.Ссылка); - КонецЦикла; - - Возврат ОтключенныеВарианты; + Возврат ВариантыОтчетов.ОтключенныеВариантыОтчетов(); КонецФункции #КонецОбласти @@ -299,7 +237,7 @@ Настройки.Вставить("Оперативное", Истина); Настройки.Вставить("Отложенное", Истина); Настройки.Вставить("Полное", Истина); - Обновление = ВариантыОтчетов.Обновить(Настройки); + ВариантыОтчетов.Обновить(Настройки); ПараметрыРасширений = СтандартныеПодсистемыСервер.ПараметрРаботыРасширения(ПолноеИмяПодсистемы); КонецЕсли; Если ПараметрыРасширений <> Неопределено Тогда diff --git a/SSL/src/CommonModules/ВерсионированиеОбъектов/Module.bsl b/SSL/src/CommonModules/ВерсионированиеОбъектов/Module.bsl index d10852ce8..17f6f4e74 100644 --- a/SSL/src/CommonModules/ВерсионированиеОбъектов/Module.bsl +++ b/SSL/src/CommonModules/ВерсионированиеОбъектов/Module.bsl @@ -96,7 +96,7 @@ Процедура ПриСозданииНаСервере(Форма) Экспорт ПолноеИмяМетаданных = Неопределено; - Если Пользователи.РолиДоступны("ЧтениеВерсийОбъектов") И ПолучитьФункциональнуюОпцию("ИспользоватьВерсионированиеОбъектов") Тогда + Если ЕстьПравоЧтенияДанныхВерсийОбъектов() И ПолучитьФункциональнуюОпцию("ИспользоватьВерсионированиеОбъектов") Тогда ИмяФормыМассив = СтрРазделить(Форма.ИмяФормы, ".", Ложь); ПолноеИмяМетаданных = ИмяФормыМассив[0] + "." + ИмяФормыМассив[1]; КонецЕсли; @@ -526,11 +526,11 @@ КонецПроцедуры Функция ЕстьПравоЧтенияИнформацииОВерсияхОбъектов() Экспорт - Возврат Пользователи.РолиДоступны("ЧтениеИнформацииОВерсияхОбъектов"); + Возврат ПравоДоступа("Просмотр", Метаданные.РегистрыСведений.ВерсииОбъектов); КонецФункции Функция ЕстьПравоЧтенияДанныхВерсийОбъектов() Экспорт - Возврат Пользователи.РолиДоступны("ЧтениеВерсийОбъектов"); + Возврат ПравоДоступа("Просмотр", Метаданные.ОбщиеКоманды.ИсторияИзменений); КонецФункции // Заполняет параметры динамического списка, отображающего проблемные версии объектов, @@ -545,50 +545,53 @@ Процедура ИнициализацияДинамическогоСпискаПроблемныхВерсий(Список, ВидПроблемы = "Коллизии") Экспорт Если ВидПроблемы = "НепринятыеПоДате" Тогда - ТекстЗапроса = "ВЫБРАТЬ РАЗРЕШЕННЫЕ - | НепринятаяВерсия.ДатаВерсии КАК Дата, - | НепринятаяВерсия.Объект КАК Ссылка, - | НепринятаяВерсия.Комментарий КАК ПричинаЗапрета, - | ВЫБОР - | КОГДА НепринятаяВерсия.ТипВерсииОбъекта = ЗНАЧЕНИЕ(Перечисление.ТипыВерсийОбъекта.НепринятыйПоДатеЗапретаОбъектСуществуетВБазе) - | ТОГДА ЛОЖЬ - | ИНАЧЕ ИСТИНА - | КОНЕЦ КАК НовыйОбъект, - | ЕСТЬNULL(НепринятаяВерсия.НомерВерсии, 0) КАК НомерДругойВерсии, - | НепринятаяВерсия.АвторВерсии КАК АвторДругойВерсии, - | ЕСТЬNULL(ТекущаяВерсия.НомерВерсии, 0) КАК НомерЭтойВерсии, - | ТИПЗНАЧЕНИЯ(НепринятаяВерсия.Объект) КАК ТипСтрокой, - | НепринятаяВерсия.ВерсияПроигнорирована - |ИЗ - | РегистрСведений.ВерсииОбъектов КАК НепринятаяВерсия - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ВерсииОбъектов КАК ТекущаяВерсия - | ПО НепринятаяВерсия.Объект = ТекущаяВерсия.Объект - | И (НепринятаяВерсия.НомерВерсии = ТекущаяВерсия.НомерВерсии + 1) - |ГДЕ - | НЕ(НепринятаяВерсия.ТипВерсииОбъекта <> ЗНАЧЕНИЕ(Перечисление.ТипыВерсийОбъекта.НепринятыйПоДатеЗапретаОбъектСуществуетВБазе) - | И НепринятаяВерсия.ТипВерсииОбъекта <> ЗНАЧЕНИЕ(Перечисление.ТипыВерсийОбъекта.НепринятыйПоДатеЗапретаОбъектНеСуществуетВБазе))"; + ТекстЗапроса = + "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | НепринятаяВерсия.ДатаВерсии КАК Дата, + | НепринятаяВерсия.Объект КАК Ссылка, + | НепринятаяВерсия.Комментарий КАК ПричинаЗапрета, + | ВЫБОР + | КОГДА НепринятаяВерсия.ТипВерсииОбъекта = ЗНАЧЕНИЕ(Перечисление.ТипыВерсийОбъекта.НепринятыйПоДатеЗапретаОбъектСуществуетВБазе) + | ТОГДА ЛОЖЬ + | ИНАЧЕ ИСТИНА + | КОНЕЦ КАК НовыйОбъект, + | ЕСТЬNULL(НепринятаяВерсия.НомерВерсии, 0) КАК НомерДругойВерсии, + | НепринятаяВерсия.АвторВерсии КАК АвторДругойВерсии, + | ЕСТЬNULL(ТекущаяВерсия.НомерВерсии, 0) КАК НомерЭтойВерсии, + | ТИПЗНАЧЕНИЯ(НепринятаяВерсия.Объект) КАК ТипСтрокой, + | НепринятаяВерсия.ВерсияПроигнорирована КАК ВерсияПроигнорирована + |ИЗ + | РегистрСведений.ВерсииОбъектов КАК НепринятаяВерсия + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ВерсииОбъектов КАК ТекущаяВерсия + | ПО НепринятаяВерсия.Объект = ТекущаяВерсия.Объект + | И (НепринятаяВерсия.НомерВерсии = ТекущаяВерсия.НомерВерсии + 1) + |ГДЕ + | НепринятаяВерсия.ТипВерсииОбъекта В (ЗНАЧЕНИЕ(Перечисление.ТипыВерсийОбъекта.НепринятыйПоДатеЗапретаОбъектСуществуетВБазе), + | ЗНАЧЕНИЕ(Перечисление.ТипыВерсийОбъекта.НепринятыйПоДатеЗапретаОбъектНеСуществуетВБазе))"; + ИначеЕсли ВидПроблемы = "Коллизии" Тогда - ТекстЗапроса = "ВЫБРАТЬ РАЗРЕШЕННЫЕ - | ВерсииДругойПрограммы.ДатаВерсии КАК Дата, - | ВерсииДругойПрограммы.Объект КАК Ссылка, - | ТИПЗНАЧЕНИЯ(ВерсииДругойПрограммы.Объект) КАК ТипСтрокой, - | ВерсииЭтойПрограммы.НомерВерсии КАК НомерЭтойВерсии, - | ВерсииДругойПрограммы.НомерВерсии КАК НомерДругойВерсии, - | ВерсииДругойПрограммы.АвторВерсии КАК АвторДругойВерсии, - | ВЫБОР - | КОГДА ВерсииДругойПрограммы.ТипВерсииОбъекта = ЗНАЧЕНИЕ(Перечисление.ТипыВерсийОбъекта.ПринятыеДанныеПоКоллизии) - | ТОГДА ИСТИНА - | ИНАЧЕ ЛОЖЬ - | КОНЕЦ КАК ДругаяВерсияПринята, - | ВерсииДругойПрограммы.ВерсияПроигнорирована КАК ВерсияПроигнорирована - |ИЗ - | РегистрСведений.ВерсииОбъектов КАК ВерсииДругойПрограммы - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ВерсииОбъектов КАК ВерсииЭтойПрограммы - | ПО ВерсииДругойПрограммы.Объект = ВерсииЭтойПрограммы.Объект - | И (ВерсииДругойПрограммы.НомерВерсии = ВерсииЭтойПрограммы.НомерВерсии + 1) - |ГДЕ - | НЕ(ВерсииДругойПрограммы.ТипВерсииОбъекта <> ЗНАЧЕНИЕ(Перечисление.ТипыВерсийОбъекта.ПринятыеДанныеПоКоллизии) - | И ВерсииДругойПрограммы.ТипВерсииОбъекта <> ЗНАЧЕНИЕ(Перечисление.ТипыВерсийОбъекта.НеПринятыеДанныеПоКоллизии))"; + ТекстЗапроса = + "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | ВерсииДругойПрограммы.ДатаВерсии КАК Дата, + | ВерсииДругойПрограммы.Объект КАК Ссылка, + | ТИПЗНАЧЕНИЯ(ВерсииДругойПрограммы.Объект) КАК ТипСтрокой, + | ВерсииЭтойПрограммы.НомерВерсии КАК НомерЭтойВерсии, + | ВерсииДругойПрограммы.НомерВерсии КАК НомерДругойВерсии, + | ВерсииДругойПрограммы.АвторВерсии КАК АвторДругойВерсии, + | ВЫБОР + | КОГДА ВерсииДругойПрограммы.ТипВерсииОбъекта = ЗНАЧЕНИЕ(Перечисление.ТипыВерсийОбъекта.ПринятыеДанныеПоКоллизии) + | ТОГДА ИСТИНА + | ИНАЧЕ ЛОЖЬ + | КОНЕЦ КАК ДругаяВерсияПринята, + | ВерсииДругойПрограммы.ВерсияПроигнорирована КАК ВерсияПроигнорирована + |ИЗ + | РегистрСведений.ВерсииОбъектов КАК ВерсииДругойПрограммы + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ВерсииОбъектов КАК ВерсииЭтойПрограммы + | ПО ВерсииДругойПрограммы.Объект = ВерсииЭтойПрограммы.Объект + | И (ВерсииДругойПрограммы.НомерВерсии = ВерсииЭтойПрограммы.НомерВерсии + 1) + |ГДЕ + | ВерсииДругойПрограммы.ТипВерсииОбъекта В (ЗНАЧЕНИЕ(Перечисление.ТипыВерсийОбъекта.ПринятыеДанныеПоКоллизии), + | ЗНАЧЕНИЕ(Перечисление.ТипыВерсийОбъекта.НеПринятыеДанныеПоКоллизии))"; КонецЕсли; Список.ТекстЗапроса = ТекстЗапроса; @@ -974,13 +977,11 @@ Если НомерВерсии <> 0 Тогда ПредыдущаяЗапись = ЗаписьОВерсииОбъекта(СсылкаНаОбъект, НомерВерсии)[0]; - ДатаВерсии = ПредыдущаяЗапись.ДатаВерсии; НомерВерсии = ПредыдущаяЗапись.НомерВерсии; - + КонецЕсли; Иначе - ДатаВерсии = Запись.ДатаВерсии; НомерВерсии = Запись.НомерВерсии; КонецЕсли; @@ -1123,7 +1124,7 @@ МенеджерЗаписи.Объект = Объект.Ссылка; МенеджерЗаписи.НомерВерсии = НомерПредыдущейВерсии(Объект.Ссылка, СведенияОВерсииОбъекта.НомерВерсии); МенеджерЗаписи.Прочитать(); - Если МенеджерЗаписи.Выбран() Тогда + Если МенеджерЗаписи.Выбран() И Не МенеджерЗаписи.ЕстьДанныеВерсии Тогда МенеджерЗаписи.ВерсияОбъекта = Новый ХранилищеЗначения(ДанныеДляХранения(Объект.Ссылка), Новый СжатиеДанных(9)); МенеджерЗаписи.Записать(); КонецЕсли; @@ -1478,7 +1479,7 @@ // Функция СведенияОВерсииОбъекта(Знач Ссылка, Знач НомерВерсии) Экспорт СообщениеНеУдалосьПолучитьВерсию = НСтр("ru = 'Не удалось получить предыдущую версию объекта.'"); - Если Не Пользователи.РолиДоступны("ЧтениеВерсийОбъектов") Тогда + Если Не ЕстьПравоЧтенияДанныхВерсийОбъектов() Тогда ВызватьИсключение СообщениеНеУдалосьПолучитьВерсию; КонецЕсли; @@ -2015,10 +2016,7 @@ // 4 - описание поля строки табличной части. УровеньЧтения = 0; - ИмяОбъекта = Неопределено; МетаданныеОбъекта = Ссылка.Метаданные(); - ТабличныеЧастиМТД = МетаданныеОбъекта.ТабличныеЧасти; - ТипЗначения = ""; ТипЗначенияПоляТЧ = ""; // Основной цикл разбора по XML. @@ -2026,7 +2024,7 @@ Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда УровеньЧтения = УровеньЧтения + 1; Если УровеньЧтения = 1 Тогда // Указатель на первом элементе XML - корень XML. - ИмяОбъекта = ЧтениеXML.Имя; + // В ЧтениеXML.Имя имя объекта, но оно нам не нужно. ИначеЕсли УровеньЧтения = 2 Тогда // Указатель на втором уровне - это реквизит или имя табличной части. ИмяРеквизита = ЧтениеXML.Имя; @@ -2103,7 +2101,6 @@ КонецЕсли; ИначеЕсли ЧтениеXML.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда УровеньЧтения = УровеньЧтения - 1; - ТипЗначения = ""; ИначеЕсли ЧтениеXML.ТипУзла = ТипУзлаXML.Текст Тогда Если (УровеньЧтения = 2) Тогда // значение реквизита Попытка @@ -2570,14 +2567,18 @@ ОбластьСекции = Секция.Область(Регион); - ОбластьСекции.Текст = Текст; - ОбластьСекции.Шрифт = Новый Шрифт(, Размер, Жирный, , , ); - ОбластьСекции.ГоризонтальноеПоложение = ГоризонтальноеПоложение.Лево; + Если ТипЗнч(ОбластьСекции) = Тип("ОбластьЯчеекТабличногоДокумента") Тогда - ОбластьСекции.ГраницаСверху = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.НетЛинии); - ОбластьСекции.ГраницаСнизу = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.НетЛинии); - ОбластьСекции.ГраницаСлева = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.НетЛинии); - ОбластьСекции.ГраницаСправа = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.НетЛинии); + ОбластьСекции.Текст = Текст; + ОбластьСекции.Шрифт = Новый Шрифт(, Размер, Жирный, , , ); + ОбластьСекции.ГоризонтальноеПоложение = ГоризонтальноеПоложение.Лево; + + ОбластьСекции.ГраницаСверху = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.НетЛинии); + ОбластьСекции.ГраницаСнизу = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.НетЛинии); + ОбластьСекции.ГраницаСлева = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.НетЛинии); + ОбластьСекции.ГраницаСправа = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.НетЛинии); + + КонецЕсли; Возврат ТаблицаОтчета.Вывести(Секция); @@ -2588,16 +2589,20 @@ // Процедура УстановитьСвойстваТекста(ОбластьСекции, Текст, Знач Размер = 9, Знач Жирный = Ложь, Знач ПоказыватьГраницы = Ложь) - ОбластьСекции.Текст = Текст; - ОбластьСекции.Шрифт = Новый Шрифт(, Размер, Жирный, , , ); + Если ТипЗнч(ОбластьСекции) = Тип("ОбластьЯчеекТабличногоДокумента") Тогда - Если ПоказыватьГраницы Тогда - ОбластьСекции.ГраницаСверху = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Сплошная); - ОбластьСекции.ГраницаСнизу = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Сплошная); - ОбластьСекции.ГраницаСлева = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Сплошная); - ОбластьСекции.ГраницаСправа = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Сплошная); - ОбластьСекции.ГоризонтальноеПоложение = ГоризонтальноеПоложение.Центр; - КонецЕсли; + ОбластьСекции.Текст = Текст; + ОбластьСекции.Шрифт = Новый Шрифт(, Размер, Жирный, , , ); + + Если ПоказыватьГраницы Тогда + ОбластьСекции.ГраницаСверху = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Сплошная); + ОбластьСекции.ГраницаСнизу = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Сплошная); + ОбластьСекции.ГраницаСлева = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Сплошная); + ОбластьСекции.ГраницаСправа = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Сплошная); + ОбластьСекции.ГоризонтальноеПоложение = ГоризонтальноеПоложение.Центр; + КонецЕсли; + + КонецЕсли КонецПроцедуры @@ -2972,6 +2977,10 @@ Функция ПерейтиНаВерсиюСервер(Ссылка, НомерВерсии, ТекстСообщенияОбОшибке, ОтменаПроведения = Ложь) Экспорт + Если Не Пользователи.ЭтоПолноправныйПользователь() Тогда + ВызватьИсключение НСтр("ru = 'Недостаточно прав для выполнения операции.'"); + КонецЕсли; + ПользовательскоеПредставлениеНомера = НомерВерсииВИерархии(Ссылка, НомерВерсии); Информация = СведенияОВерсииОбъекта(Ссылка, НомерВерсии); diff --git a/SSL/src/CommonModules/Взаимодействия/Module.bsl b/SSL/src/CommonModules/Взаимодействия/Module.bsl index bb2a25a14..051469e53 100644 --- a/SSL/src/CommonModules/Взаимодействия/Module.bsl +++ b/SSL/src/CommonModules/Взаимодействия/Module.bsl @@ -251,11 +251,98 @@ Функция ИспользуетсяПочтовыйКлиент() Экспорт Возврат ПолучитьФункциональнуюОпцию("ИспользоватьПочтовыйКлиент"); КонецФункции - + Функция ОтправлятьПисьмаВФорматеHTML() Экспорт Возврат ПолучитьФункциональнуюОпцию("ОтправлятьПисьмаВФорматеHTML"); КонецФункции +// Возвращает список контактов предмету по заданному типу контактной информации. +// +Функция ПолучитьКонтактыПоПредмету(Предмет, ТипыКонтактнойИнформации) Экспорт + + ПолучателиПисьма = Новый Массив; + Если ВзаимодействияКлиентСервер.ЯвляетсяПредметом(Предмет) + ИЛИ ВзаимодействияКлиентСервер.ЯвляетсяВзаимодействием(Предмет) Тогда + + МенеджерОбъекта = ОбщегоНазначения.МенеджерОбъектаПоСсылке(Предмет); + Контакты = МенеджерОбъекта.ПолучитьКонтакты(Предмет); + + Если Контакты <> Неопределено Тогда + Для каждого СтрокаТаблицы Из Контакты Цикл + + Получатель = Новый Структура("Контакт, Представление, Адрес"); + Получатель.Контакт = ?(ТипЗнч(СтрокаТаблицы) = Тип("Структура"), СтрокаТаблицы.Контакт, СтрокаТаблицы); + + ДозаполнитьПоляКонтактов(Получатель.Контакт, Получатель.Представление, + Получатель.Адрес, ТипыКонтактнойИнформации); + + ПолучателиПисьма.Добавить(Получатель); + + КонецЦикла; + КонецЕсли; + + КонецЕсли; + + Возврат ПолучателиПисьма; + +КонецФункции + +Процедура ЗарегистрироватьУчетныеЗаписиЭлектроннойПочтыКОбработкеДляПереходаНаНовуюВерсию(Параметры) Экспорт + + ТекстЗапроса = + "ВЫБРАТЬ + | УчетныеЗаписиЭлектроннойПочты.Ссылка + |ИЗ + | РегистрСведений.НастройкиУчетныхЗаписейЭлектроннойПочты КАК НастройкиУчетныхЗаписейЭлектроннойПочты + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.УчетныеЗаписиЭлектроннойПочты КАК УчетныеЗаписиЭлектроннойПочты + | ПО НастройкиУчетныхЗаписейЭлектроннойПочты.УчетнаяЗаписьЭлектроннойПочты = УчетныеЗаписиЭлектроннойПочты.Ссылка + |ГДЕ + | НастройкиУчетныхЗаписейЭлектроннойПочты.УдалитьПерсональнаяУчетнаяЗапись + | И УчетныеЗаписиЭлектроннойПочты.ВладелецУчетнойЗаписи = ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка)"; + + Запрос = Новый Запрос(ТекстЗапроса); + + Результат = Запрос.Выполнить().Выгрузить(); + МассивСсылок = Результат.ВыгрузитьКолонку("Ссылка"); + + ОбновлениеИнформационнойБазы.ОтметитьКОбработке(Параметры, МассивСсылок); + +КонецПроцедуры + +Функция ВладельцыУчетныхЗаписейЭлектроннойПочты(УчетныеЗаписи) Экспорт + + Результат = Новый Соответствие; + + ТекстЗапроса = + "ВЫБРАТЬ + | УчетныеЗаписиЭлектроннойПочты.Ссылка КАК Ссылка, + | НастройкиУчетныхЗаписейЭлектроннойПочты.ОтветственныйЗаОбработкуПисем КАК ВладелецУчетнойЗаписи + |ИЗ + | РегистрСведений.НастройкиУчетныхЗаписейЭлектроннойПочты КАК НастройкиУчетныхЗаписейЭлектроннойПочты + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.УчетныеЗаписиЭлектроннойПочты КАК УчетныеЗаписиЭлектроннойПочты + | ПО НастройкиУчетныхЗаписейЭлектроннойПочты.УчетнаяЗаписьЭлектроннойПочты = УчетныеЗаписиЭлектроннойПочты.Ссылка + |ГДЕ + | УчетныеЗаписиЭлектроннойПочты.Ссылка В(&УчетныеЗаписи)"; + + Запрос = Новый Запрос(ТекстЗапроса); + Запрос.УстановитьПараметр("УчетныеЗаписи", УчетныеЗаписи); + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + Результат.Вставить(Выборка.Ссылка, Выборка.ВладелецУчетнойЗаписи); + КонецЦикла; + + Возврат Результат; + +КонецФункции + +Функция ПриПолученииЧитаемыхОбъектовОбработчикаОбновленияУчетныхЗаписейЭлектроннойПочты(ЧитаемыеОбъекты) Экспорт + ЧитаемыеОбъекты.Добавить("РегистрСведений.НастройкиУчетныхЗаписейЭлектроннойПочты"); +КонецФункции + +Функция ПередУстановкойБлокировкиВОбработчикеОбновленияУчетныхЗаписейЭлектроннойПочты(Блокировка) Экспорт + Блокировка.Добавить("РегистрСведений.НастройкиУчетныхЗаписейЭлектроннойПочты"); +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Обработчики событий подсистем конфигурации. @@ -346,7 +433,7 @@ КонецПроцедуры -// См. ОбщегоНазначенияПереопределяемый.ПараметрыРаботыКлиента. +// См. ОбщегоНазначенияПереопределяемый.ПриДобавленииПараметровРаботыКлиента. Процедура ПриДобавленииПараметровРаботыКлиента(Параметры) Экспорт ИспользоватьПочтовыйКлиент = ПолучитьФункциональнуюОпцию("ИспользоватьПочтовыйКлиент"); @@ -440,7 +527,7 @@ МодульТекущиеДелаСервер = ОбщегоНазначения.ОбщийМодуль("ТекущиеДелаСервер"); Если (Не Пользователи.ЭтоПолноправныйПользователь() - И Не Пользователи.РолиДоступны("ДобавлениеИзменениеВзаимодействий")) + И Не ПравоДоступа("Чтение", Метаданные.ЖурналыДокументов.Взаимодействия)) Или МодульТекущиеДелаСервер.ДелоОтключено("ВзаимодействияПочта") Тогда Возврат; КонецЕсли; @@ -573,12 +660,6 @@ Обработчик.БлокируемыеОбъекты = "Документ.ЭлектронноеПисьмоВходящее"; Обработчик.ПриоритетыВыполнения = ОбновлениеИнформационнойБазы.ПриоритетыВыполненияОбработчика(); Приоритет = Обработчик.ПриоритетыВыполнения.Добавить(); - Приоритет.Процедура = "Документы.ЭлектронноеПисьмоИсходящее.ЗаполнитьВзаимодействияОснованияУПодчиненныхПисем"; - Приоритет.Порядок = "Любой"; - Приоритет = Обработчик.ПриоритетыВыполнения.Добавить(); - Приоритет.Процедура = "Документы.ЭлектронноеПисьмоИсходящее.ЗаполнитьСписокКонтактовИсходящихЭлектронныхПисем"; - Приоритет.Порядок = "До"; - Приоритет = Обработчик.ПриоритетыВыполнения.Добавить(); Приоритет.Процедура = "Документы.ЭлектронноеПисьмоИсходящее.ОбработатьДанныеДляПереходаНаНовуюВерсию"; Приоритет.Порядок = "Любой"; Обработчик.Комментарий = НСтр("ru = 'Выполняет дозаполнение реквизита ВзаимодействиеОснование для входящих писем, у которых письмо основание в ИБ есть, но оно не указано.'"); @@ -588,8 +669,8 @@ Обработчик.Идентификатор = Новый УникальныйИдентификатор("35e85660-7125-4079-b5df-5a71dbb43a48"); Обработчик.Процедура = "Документы.ЭлектронноеПисьмоИсходящее.ОбработатьДанныеДляПереходаНаНовуюВерсию"; Обработчик.Комментарий = - НСтр("ru = 'Перенос данных из реквизита одного ИдентификаторСообщенияОтправкаIMAP в другой для предотвращения потери данных. - |при переходе на последующие релизы. + НСтр("ru = 'Технологический перенос данных идентификаторов сообщения IMAP (реквизит ИдентификаторСообщенияОтправкаIMAP) для предотвращения потери данных + |при переходе на последующие релизы программы. |Выполняет дозаполнение реквизита ВзаимодействиеОснование для исходящих писем, у которых письмо основание в ИБ есть, но оно не указано'"); Обработчик.РежимВыполнения = "Отложенно"; Обработчик.ОчередьОтложеннойОбработки = 3; @@ -600,27 +681,9 @@ Обработчик.БлокируемыеОбъекты = "Документ.ЭлектронноеПисьмоИсходящее"; Обработчик.ПриоритетыВыполнения = ОбновлениеИнформационнойБазы.ПриоритетыВыполненияОбработчика(); Приоритет = Обработчик.ПриоритетыВыполнения.Добавить(); - Приоритет.Процедура = "Документы.ЭлектронноеПисьмоИсходящее.ЗаполнитьСписокКонтактовИсходящихЭлектронныхПисем"; - Приоритет.Порядок = "Любой"; - Приоритет = Обработчик.ПриоритетыВыполнения.Добавить(); Приоритет.Процедура = "Документы.ЭлектронноеПисьмоВходящее.ЗаполнитьВзаимодействияОснованияУПодчиненныхПисем"; Приоритет.Порядок = "Любой"; - Приоритет = Обработчик.ПриоритетыВыполнения.Добавить(); - Приоритет.Процедура = "Документы.ЭлектронноеПисьмоИсходящее.ЗаполнитьВзаимодействияОснованияУПодчиненныхПисем"; - Приоритет.Порядок = "Любой"; - Обработчик.ПроцедураПроверки = "ОбновлениеИнформационнойБазы.ОбработкаДанныхЗавершена"; - - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "2.4.1.1"; - Обработчик.Процедура = "Взаимодействия.ОбновитьПерсональныеУчетныеЗаписи"; - Обработчик.РежимВыполнения = "Отложенно"; - Обработчик.Идентификатор = Новый УникальныйИдентификатор("d57f7a36-46ca-4a52-baab-db960e3d376d"); - Обработчик.Комментарий = НСтр("ru = 'Обновляет сведения о персональных учетных записях электронной почты. - |До завершения обработки список персональных учетных записей электронной почты может быть неполным.'"); - Обработчик.ОчередьОтложеннойОбработки = 1; - Обработчик.ПроцедураЗаполненияДанныхОбновления = "Взаимодействия.ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию"; - Обработчик.ЧитаемыеОбъекты = "РегистрСведений.НастройкиУчетныхЗаписейЭлектроннойПочты, Справочник.УчетныеЗаписиЭлектроннойПочты"; - Обработчик.ИзменяемыеОбъекты = "Справочник.УчетныеЗаписиЭлектроннойПочты"; + Обработчик.ПроцедураПроверки = "ОбновлениеИнформационнойБазы.ДанныеОбновленыНаНовуюВерсиюПрограммы"; КонецПроцедуры @@ -637,64 +700,6 @@ #Область СлужебныеПроцедурыИФункции -// Регистрирует на плане обмена ОбновлениеИнформационнойБазы объекты, -// которые необходимо обновить на новую версию. -// -Процедура ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию(Параметры) Экспорт - - ТекстЗапроса = - "ВЫБРАТЬ - | УчетныеЗаписиЭлектроннойПочты.Ссылка - |ИЗ - | РегистрСведений.НастройкиУчетныхЗаписейЭлектроннойПочты КАК НастройкиУчетныхЗаписейЭлектроннойПочты - | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.УчетныеЗаписиЭлектроннойПочты КАК УчетныеЗаписиЭлектроннойПочты - | ПО НастройкиУчетныхЗаписейЭлектроннойПочты.УчетнаяЗаписьЭлектроннойПочты = УчетныеЗаписиЭлектроннойПочты.Ссылка - |ГДЕ - | НастройкиУчетныхЗаписейЭлектроннойПочты.УдалитьПерсональнаяУчетнаяЗапись - | И УчетныеЗаписиЭлектроннойПочты.ВладелецУчетнойЗаписи = ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка)"; - - Запрос = Новый Запрос(ТекстЗапроса); - - Результат = Запрос.Выполнить().Выгрузить(); - МассивСсылок = Результат.ВыгрузитьКолонку("Ссылка"); - - ОбновлениеИнформационнойБазы.ОтметитьКОбработке(Параметры, МассивСсылок); - -КонецПроцедуры - -// Заполняет владельца в учетных записях электронной почты. -Процедура ОбновитьПерсональныеУчетныеЗаписи(Параметры) Экспорт - УчетныеЗаписи = Новый Массив; - Выборка = ОбновлениеИнформационнойБазы.ВыбратьСсылкиДляОбработки(Параметры.Очередь, "Справочник.УчетныеЗаписиЭлектроннойПочты"); - Пока Выборка.Следующий() Цикл - УчетныеЗаписи.Добавить(Выборка.Ссылка); - КонецЦикла; - - ТекстЗапроса = - "ВЫБРАТЬ - | УчетныеЗаписиЭлектроннойПочты.Ссылка КАК Ссылка, - | НастройкиУчетныхЗаписейЭлектроннойПочты.ОтветственныйЗаОбработкуПисем КАК ВладелецУчетнойЗаписи - |ИЗ - | РегистрСведений.НастройкиУчетныхЗаписейЭлектроннойПочты КАК НастройкиУчетныхЗаписейЭлектроннойПочты - | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.УчетныеЗаписиЭлектроннойПочты КАК УчетныеЗаписиЭлектроннойПочты - | ПО НастройкиУчетныхЗаписейЭлектроннойПочты.УчетнаяЗаписьЭлектроннойПочты = УчетныеЗаписиЭлектроннойПочты.Ссылка - |ГДЕ - | УчетныеЗаписиЭлектроннойПочты.Ссылка В(&УчетныеЗаписи)"; - - Запрос = Новый Запрос(ТекстЗапроса); - Запрос.УстановитьПараметр("УчетныеЗаписи", УчетныеЗаписи); - Выборка = Запрос.Выполнить().Выбрать(); - - Пока Выборка.Следующий() Цикл - УчетнаяЗапись = Выборка.Ссылка.ПолучитьОбъект(); - УчетнаяЗапись.ДополнительныеСвойства.Вставить("НеПроверятьИзменениеНастроек"); - УчетнаяЗапись.ВладелецУчетнойЗаписи = Выборка.ВладелецУчетнойЗаписи; - ОбновлениеИнформационнойБазы.ЗаписатьДанные(УчетнаяЗапись); - КонецЦикла; - - Параметры.ОбработкаЗавершена = ОбновлениеИнформационнойБазы.ОбработкаДанныхЗавершена(Параметры.Очередь, "Справочник.УчетныеЗаписиЭлектроннойПочты"); -КонецПроцедуры - // Возвращает поля для получения наименования владельца, если такой имеется. // // Параметры: @@ -705,7 +710,7 @@ // Функция ИмяПоляДляНаименованияВладельца(ИмяТаблицы) Экспорт - МассивОписанияКонтактов = ВзаимодействияКлиентСервер.МассивОписанияВозможныхКонтактов(); + МассивОписанияКонтактов = ВзаимодействияКлиентСервер.ОписанияКонтактов(); Для каждого ЭлементОписанияМассива Из МассивОписанияКонтактов Цикл Если ЭлементОписанияМассива.Имя = ИмяТаблицы И ЭлементОписанияМассива.ЕстьВладелец Тогда @@ -826,7 +831,7 @@ Иначе - МассивОписанийКонтактов = ВзаимодействияКлиентСервер.МассивОписанияВозможныхКонтактов(); + МассивОписанийКонтактов = ВзаимодействияКлиентСервер.ОписанияКонтактов(); ИмяМетаданныхКонтакта = Контакт.Метаданные().Имя; Для каждого ЭлементМассиваОписания Из МассивОписанийКонтактов Цикл @@ -960,7 +965,7 @@ // Функция МассивМетаданныхКонтакты() - МассивОписанияКонтактов = ВзаимодействияКлиентСервер.МассивОписанияВозможныхКонтактов(); + МассивОписанияКонтактов = ВзаимодействияКлиентСервер.ОписанияКонтактов(); МассивМетаданных = Новый Массив; Для каждого ЭлементМассиваОписания Из МассивОписанияКонтактов Цикл @@ -977,25 +982,32 @@ // Возвращает таблицу всех контактов, связанных с предметом взаимодействия. // Параметры: -// Предмет - предмет взаимодействия, -// ВключатьEmail - вернуть e-mail адреса даже если контакт не определен. +// Предмет - предмет взаимодействия, +// ВключатьEmail - вернуть e-mail адреса даже если контакт не определен. // // Возвращаемое значение: // ТаблицаЗначений - таблица значений содержащая информацию о контактах. // -Функция ПолучитьВсеКонтактыПоПредметуИлиЦепочке(Предмет, ВключатьEmail) +Функция КонтактыПоПредметуИлиЦепочке(Предмет, ВключатьEmail) Если Не ЗначениеЗаполнено(Предмет) Тогда Возврат Неопределено; КонецЕсли; - Если ВзаимодействияКлиентСервер.ЯвляетсяВзаимодействием(Предмет) Тогда - ТекстЗапроса = ТекстЗапросаПоискКонтактовПоЦепочкеВзаимодействий(Истина); - Иначе - ТекстЗапроса = ТекстЗапросаПоискКонтактовПоЦепочкеВзаимодействий(Истина); - ИмяМетаданных = Предмет.Метаданные().ПолноеИмя(); - ТекстЗапроса = ТекстЗапроса - + ВзаимодействияПереопределяемый.ТекстЗапросаПоискКонтактовПоПредмету(Ложь, ИмяМетаданных, Истина); + ТекстЗапроса = ТекстЗапросаПоискКонтактовПоЦепочкеВзаимодействий(Истина); + Если Не ВзаимодействияКлиентСервер.ЯвляетсяВзаимодействием(Предмет) Тогда + ИмяТаблицыКонтактов = Предмет.Метаданные().ПолноеИмя(); + + ТекстЗапросаДляПоиска = ""; + ВзаимодействияПереопределяемый.ПриПоискеКонтактов(ИмяТаблицыКонтактов, ТекстЗапросаДляПоиска); + + Если ПустаяСтрока(ТекстЗапросаДляПоиска) Тогда + // Для обратной совместимости. + ТекстЗапросаДляПоиска = ВзаимодействияПереопределяемый.ТекстЗапросаПоискКонтактовПоПредмету(Ложь, + ИмяТаблицыКонтактов, Истина); + КонецЕсли; + + ТекстЗапроса = ТекстЗапроса + ТекстЗапросаДляПоиска; КонецЕсли; ТекстЗапроса = ТекстЗапроса + ТекстЗапросаНаПолучениеИнформацииОКонтактах(ВключатьEmail); @@ -1085,7 +1097,7 @@ // Возвращаемое значение: // ТаблицаЗначений - таблица значений, которая содержит информацию о контактах. // -Функция ПолучитьВсеКонтактыПоEmail(Адрес) +Функция КонтактыПоEmail(Адрес) Если ПустаяСтрока(Адрес) Тогда Возврат Неопределено; @@ -1192,7 +1204,7 @@ // Функция ТекстЗапросаНаПолучениеИнформацииОКонтактах(ВключатьEmail) - МассивОписанияТиповКонтактов = ВзаимодействияКлиентСервер.МассивОписанияВозможныхКонтактов(); + МассивОписанияТиповКонтактов = ВзаимодействияКлиентСервер.ОписанияКонтактов(); ТекстЗапроса ="; | @@ -1253,9 +1265,9 @@ // Возвращаемое значение: // Строка - текст запроса. // -Функция СформироватьТекстЗапросаДляПоискаПоEmail(ПоискПоСписку,ИтогиПоEmail = Ложь) +Функция СформироватьТекстЗапросаДляПоискаПоEmail(ПоискПоСписку, ИтогиПоEmail = Ложь) - МассивОписанияТиповКонтактов = ВзаимодействияКлиентСервер.МассивОписанияВозможныхКонтактов(); + МассивОписанияТиповКонтактов = ВзаимодействияКлиентСервер.ОписанияКонтактов(); ТекстЗапроса = "ВЫБРАТЬ РАЗРЕШЕННЫЕ @@ -1327,7 +1339,7 @@ // Функция ПолучитьВсеКонтактыПоТелефону(Телефон,Форма) Экспорт - МассивОписанияТиповКонтактов = ВзаимодействияКлиентСервер.МассивОписанияВозможныхКонтактов(); + МассивОписанияТиповКонтактов = ВзаимодействияКлиентСервер.ОписанияКонтактов(); ТекстЗапроса = "ВЫБРАТЬ @@ -1400,7 +1412,7 @@ // Функция ВсеКонтактыПоНачалуНаименования(Наименование) Экспорт - МассивОписанияТиповКонтактов = ВзаимодействияКлиентСервер.МассивОписанияВозможныхКонтактов(); + МассивОписанияТиповКонтактов = ВзаимодействияКлиентСервер.ОписанияКонтактов(); ТекстЗапроса = "ВЫБРАТЬ @@ -1463,7 +1475,7 @@ // Функция ВсеКонтактыПоНачалуНаименованияСАдресамиЭлектроннойПочты(Наименование,Форма) Экспорт - МассивОписанияТиповКонтактов = ВзаимодействияКлиентСервер.МассивОписанияВозможныхКонтактов(); + МассивОписанияТиповКонтактов = ВзаимодействияКлиентСервер.ОписанияКонтактов(); ТекстЗапроса = " ВЫБРАТЬ @@ -1534,7 +1546,7 @@ // Функция ШаблонУсловияНаСсылкиКонтактовДляЗапроса() - МассивОписанияТиповКонтактов = ВзаимодействияКлиентСервер.МассивОписанияВозможныхКонтактов(); + МассивОписанияТиповКонтактов = ВзаимодействияКлиентСервер.ОписанияКонтактов(); ТекстКВозврату = "КонтактыВзаимодействия.%ИмяПоля% ССЫЛКА Справочник.Пользователи"; @@ -1563,12 +1575,12 @@ // Возвращаемое значение: // Булево - Истина, если найден хотя бы один контакт. // -Функция НайтиПоEmail(СтрокаПоиска,ПоДомену,Форма) Экспорт +Функция НайтиПоEmail(СтрокаПоиска, ПоДомену, Форма) Экспорт Если ПоДомену Тогда - ТаблицаКонтакты = ПолучитьКонтактыПоДоменномуАдресу(СтрокаПоиска); + ТаблицаКонтакты = КонтактыПоДоменномуАдресу(СтрокаПоиска); Иначе - ТаблицаКонтакты = ПолучитьВсеКонтактыПоEmail(СтрокаПоиска); + ТаблицаКонтакты = КонтактыПоEmail(СтрокаПоиска); КонецЕсли; Если ТаблицаКонтакты = Неопределено ИЛИ ТаблицаКонтакты.Количество() = 0 Тогда @@ -1589,7 +1601,7 @@ // Возвращаемое значение: // ТаблицаЗначений - таблица, содержащая информацию о найденных контактах. // -Функция ПолучитьКонтактыПоДоменномуАдресу(ИмяДомена) +Функция КонтактыПоДоменномуАдресу(ИмяДомена) Если ПустаяСтрока(ИмяДомена) Тогда Возврат Неопределено; @@ -1598,7 +1610,7 @@ ПерваяТаблица = Истина; ТекстЗапроса = ""; - МассивОписанияКонтактов = ВзаимодействияКлиентСервер.МассивОписанияВозможныхКонтактов(); + МассивОписанияКонтактов = ВзаимодействияКлиентСервер.ОписанияКонтактов(); Для каждого ЭлементМассиваОписания Из МассивОписанияКонтактов Цикл Если ЭлементМассиваОписания.ИскатьПоДомену Тогда @@ -1725,7 +1737,7 @@ // Функция ПолучитьТекстЗапросаПоискКонтактовПоСтроке() - МассивОписанияТиповКонтактов = ВзаимодействияКлиентСервер.МассивОписанияВозможныхКонтактов(); + МассивОписанияТиповКонтактов = ВзаимодействияКлиентСервер.ОписанияКонтактов(); ТекстЗапроса = "ВЫБРАТЬ РАЗЛИЧНЫЕ РАЗРЕШЕННЫЕ @@ -1777,7 +1789,7 @@ // Функция ПолучитьТекстЗапросаПоискКонтактовПоСтрокеСEmail() - МассивОписанияТиповКонтактов = ВзаимодействияКлиентСервер.МассивОписанияВозможныхКонтактов(); + МассивОписанияТиповКонтактов = ВзаимодействияКлиентСервер.ОписанияКонтактов(); ТекстЗапроса = "ВЫБРАТЬ РАЗЛИЧНЫЕ РАЗРЕШЕННЫЕ @@ -1844,7 +1856,7 @@ Возврат; КонецЕсли; - ТаблицаКонтакты = ПолучитьВсеКонтактыПоПредметуИлиЦепочке(Предмет, ВключатьEmail); + ТаблицаКонтакты = КонтактыПоПредметуИлиЦепочке(Предмет, ВключатьEmail); Если (ТаблицаКонтакты = Неопределено) ИЛИ (ТаблицаКонтакты.Количество() = 0) Тогда ЭлементыФормы.СтраницаВсеКонтактыПоПредмету.Видимость = Ложь; Возврат; @@ -1970,7 +1982,7 @@ // Функция СоздатьСписокЗначенийИнтерактивноСоздаваемыхКонтактов() Экспорт - МассивОписанияВозможныхТиповКонтактов = ВзаимодействияКлиентСервер.МассивОписанияВозможныхКонтактов(); + МассивОписанияВозможныхТиповКонтактов = ВзаимодействияКлиентСервер.ОписанияКонтактов(); СписокКонтактовКоторыеМожноСоздать = Новый СписокЗначений; Для каждого ЭлементМассива Из МассивОписанияВозможныхТиповКонтактов Цикл @@ -2244,7 +2256,7 @@ Возврат Неопределено; КонецЕсли; - МассивОписанияТиповКонтактов = ВзаимодействияКлиентСервер.МассивОписанияВозможныхКонтактов(); + МассивОписанияТиповКонтактов = ВзаимодействияКлиентСервер.ОписанияКонтактов(); ТекстЗапроса = " |ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ @@ -2626,13 +2638,51 @@ ИначеЕсли ПротоколПочты = "Все" Тогда ИдентификаторПисьма = РаботаСПочтовымиСообщениями.ОтправитьПочтовоеСообщение(Объект.УчетнаяЗапись, ПараметрыПисьма ,Соединение, ""); ПараметрыПисьма.Вставить("ПротоколПочты","IMAP"); - РаботаСПочтовымиСообщениями.ОтправитьПочтовоеСообщение(Объект.УчетнаяЗапись, ПараметрыПисьма ,Соединение, "IMAP"); + Объект.ИдентификаторСообщенияОтправкаIMAP = РаботаСПочтовымиСообщениями.ОтправитьПочтовоеСообщение(Объект.УчетнаяЗапись, ПараметрыПисьма ,Соединение, "IMAP"); КонецЕсли; Возврат ИдентификаторПисьма; КонецФункции +Функция ДанныеПрисоединенныхФайловПисьмаОбъект(ПисьмоОбъект) + + Результат = Новый Структура; + Результат.Вставить("ВладелецФайлов", ПисьмоОбъект.Ссылка); + Результат.Вставить("ИмяСправочникаПрисоединенныхФайлов", + УправлениеЭлектроннойПочтой.ИмяОбъектаМетаданныхПрисоединенныхФайловПисьма(ПисьмоОбъект.Ссылка)); + + ВзаимодействияПереопределяемый.ПриПолученииПрисоединенныхФайлов(ПисьмоОбъект.Ссылка, Результат); + + // Для обратной совместимости. + ДанныеПрисоединенныхФайловПисьма = ВзаимодействияПереопределяемый.ДанныеОбъектаМетаданныхПрисоединенныхФайловПисьма(ПисьмоОбъект); + Если ДанныеПрисоединенныхФайловПисьма <> Неопределено Тогда + Результат.ИмяСправочникаПрисоединенныхФайлов = ДанныеПрисоединенныхФайловПисьма.ИмяСправочникаПрисоединенныеФайлы; + Результат.ВладелецФайлов = ДанныеПрисоединенныхФайловПисьма.Владелец; + КонецЕсли; + Возврат Результат; + +КонецФункции + +Функция ДанныеПрисоединенныхФайловПисьма(ПисьмоСсылка) Экспорт + + Результат = Новый Структура; + Результат.Вставить("ВладелецФайлов", ПисьмоСсылка); + Результат.Вставить("ИмяСправочникаПрисоединенныхФайлов", + УправлениеЭлектроннойПочтой.ИмяОбъектаМетаданныхПрисоединенныхФайловПисьма(ПисьмоСсылка)); + + ВзаимодействияПереопределяемый.ПриПолученииПрисоединенныхФайлов(ПисьмоСсылка, Результат); + + // Для обратной совместимости. + ДанныеПрисоединенныхФайловПисьма = ВзаимодействияПереопределяемый.ДанныеОбъектаМетаданныхПрисоединенныхФайловПисьма(ПисьмоСсылка); + Если ДанныеПрисоединенныхФайловПисьма <> Неопределено Тогда + Результат.ИмяСправочникаПрисоединенныхФайлов = ДанныеПрисоединенныхФайловПисьма.ИмяСправочникаПрисоединенныеФайлы; + Результат.ВладелецФайлов = ДанныеПрисоединенныхФайловПисьма.Владелец; + КонецЕсли; + Возврат Результат; + +КонецФункции + Функция ПараметрыПисьмаДляОтправки(Объект) Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда @@ -2647,12 +2697,12 @@ ПараметрыПисьма = Новый Структура; - ДобавитьВПараметрАдресатов(Объект,ПараметрыПисьма,"Кому", "ПолучателиПисьма"); - ДобавитьВПараметрАдресатов(Объект,ПараметрыПисьма,"Копии", "ПолучателиКопий"); - ДобавитьВПараметрАдресатов(Объект,ПараметрыПисьма,"СлепыеКопии", "ПолучателиСкрытыхКопий"); + ДобавитьВПараметрАдресатов(Объект, ПараметрыПисьма,"Кому", "ПолучателиПисьма"); + ДобавитьВПараметрАдресатов(Объект, ПараметрыПисьма,"Копии", "ПолучателиКопий"); + ДобавитьВПараметрАдресатов(Объект, ПараметрыПисьма,"СлепыеКопии", "ПолучателиСкрытыхКопий"); ПараметрыПисьма.Вставить("Тема", Объект.Тема); ПараметрыПисьма.Вставить("Тело", ?(Объект.ТипТекста = Перечисления.ТипыТекстовЭлектронныхПисем.ПростойТекст, - Объект.Текст,Объект.ТекстHTML)); + Объект.Текст, Объект.ТекстHTML)); ПараметрыПисьма.Вставить("Кодировка", Объект.Кодировка); ПараметрыПисьма.Вставить("Важность", УправлениеЭлектроннойПочтой.ПолучитьВажность(Объект.Важность)); ПараметрыПисьма.Вставить("ТипТекста", Объект.ТипТекста); @@ -2663,14 +2713,9 @@ СоотвВложения = Новый Соответствие; - ДанныеПрисоединенныхФайловПисьма = ВзаимодействияПереопределяемый.ДанныеОбъектаМетаданныхПрисоединенныхФайловПисьма(Объект); - Если ДанныеПрисоединенныхФайловПисьма = Неопределено Тогда - ИмяОбъектаМетаданных = УправлениеЭлектроннойПочтой.ПолучитьИмяОбъектаМетаданныхПрисоединенныхФайловПисьма(Объект.Ссылка); - ВладелецФайлов = Объект.Ссылка; - Иначе - ИмяОбъектаМетаданных = ДанныеПрисоединенныхФайловПисьма.ИмяСправочникаПрисоединенныеФайлы; - ВладелецФайлов = ДанныеПрисоединенныхФайловПисьма.Владелец; - КонецЕсли; + ДанныеПрисоединенныхФайловПисьма = ДанныеПрисоединенныхФайловПисьмаОбъект(Объект); + ИмяОбъектаМетаданных = ДанныеПрисоединенныхФайловПисьма.ИмяСправочникаПрисоединенныхФайлов; + ВладелецФайлов = ДанныеПрисоединенныхФайловПисьма.ВладелецФайлов; Запрос = Новый Запрос; Запрос.Текст = @@ -2702,6 +2747,8 @@ ВыборкаВложения = РезультатЗапроса[0].Выбрать(); ТаблицаПисьмаВложения = РезультатЗапроса[1].Выгрузить(); + КоличествоВложений = ТаблицаПисьмаВложения.Количество() + ВыборкаВложения.Количество(); + НомерОтображаемогоВложения = 1; Пока ВыборкаВложения.Следующий() Цикл @@ -2730,6 +2777,14 @@ КонецЦикла; КонецЦикла; + + Пока НомерОтображаемогоВложения <= КоличествоВложений Цикл + + ДобавитьВложениеПисьмоЕслиНеобходимо(ТаблицаПисьмаВложения, СоотвВложения, НомерОтображаемогоВложения); + НомерОтображаемогоВложения = НомерОтображаемогоВложения + 1; + + КонецЦикла; + ПараметрыПисьма.Вставить("Вложения", СоотвВложения); ПараметрыПисьма.Вставить("ОбрабатыватьТексты", Ложь); @@ -3627,7 +3682,7 @@ | Взаимодействия.Ссылка КАК ПисьмоОснование |ИЗ | &ВТДокументыДляОбработки КАК СсылкиДляОбработки - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПолноеИмяДокумента КАК ТаблицаДокумента + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ЭлектронноеПисьмоИсходящее КАК ТаблицаДокумента | ПО ТаблицаДокумента.Ссылка = СсылкиДляОбработки.Ссылка | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ЖурналДокументов.Взаимодействия КАК Взаимодействия | ПО Взаимодействия.ИдентификаторСообщения = ТаблицаДокумента.ИдентификаторОснования @@ -3696,20 +3751,24 @@ Продолжить; КонецПопытки; - + Попытка ПисьмоОбъект = ВыборкаПисьма.Письмо.ПолучитьОбъект(); Если ПисьмоОбъект = Неопределено Тогда + СоответствиеОбработанныхДокументов.Вставить(ВыборкаПисьма.Письмо); + Иначе + ПисьмоОбъект.ВзаимодействиеОснование = ВыборкаПисьма.ПисьмоОснование; ОбновлениеИнформационнойБазы.ЗаписатьОбъект(ПисьмоОбъект, Истина); СоответствиеОбработанныхДокументов.Вставить(ВыборкаПисьма.Письмо); ОбновлениеИнформационнойБазы.ОтметитьВыполнениеОбработки(ВыборкаПисьма.Письмо,, Параметры.Очередь); + КонецЕсли; ЗафиксироватьТранзакцию(); @@ -3938,7 +3997,7 @@ ОписаниеТипаДинамическийСписок = Новый ОписаниеТипов("ДинамическийСписок"); ДобавляемыеРеквизиты = Новый Массив; - МассивОписанийВозможныхКонтактов = ВзаимодействияКлиентСервер.МассивОписанияВозможныхКонтактов(); + МассивОписанийВозможныхКонтактов = ВзаимодействияКлиентСервер.ОписанияКонтактов(); // Создадим динамические списки. Для каждого ЭлементМассиваОписания Из МассивОписанийВозможныхКонтактов Цикл @@ -4363,13 +4422,27 @@ ТаблицаФайлов = ПолучитьВложенияПисьмаСНеПустымИД(Письмо); КонецЕсли; + ТекстКОбработке = ТекстHTML; + + Если СтрЧислоВхождений(ТекстКОбработке,"<html") = 0 Тогда + ТекстКОбработке = "<html>" + ТекстКОбработке + "</html>" + КонецЕсли; + + НомерПопытки = 1; + ТекстПисьма = СодержимоеТегаHTML(ТекстКОбработке, "html", Истина, НомерПопытки); + Пока СтрНайти(ТекстПисьма, "<body") = 0 + И Не ПустаяСтрока(ТекстПисьма) Цикл + НомерПопытки = НомерПопытки + 1; + ТекстПисьма = СодержимоеТегаHTML(ТекстКОбработке, "html", Истина, НомерПопытки); + КонецЦикла; + Если ТаблицаФайлов.Количество() Тогда - ДокументHTML = ЗаменитьИдентификаторыКартинокНаПутьКФайлам(ТекстHTML, ТаблицаФайлов, КодировкаПисьма, ОбработатьКартинки); + ДокументHTML = ЗаменитьИдентификаторыКартинокНаПутьКФайлам(ТекстПисьма, ТаблицаФайлов, КодировкаПисьма, ОбработатьКартинки); Иначе - ДокументHTML = ПолучитьОбъектДокументHTMLИзТекстаHTML(ТекстHTML, КодировкаПисьма); + ДокументHTML = ПолучитьОбъектДокументHTMLИзТекстаHTML(ТекстПисьма, КодировкаПисьма); КонецЕсли; @@ -4445,10 +4518,16 @@ Начало = "<" + ИмяТега; Окончание = "</" + ИмяТега + ">"; - Содержимое = Сред( - Текст, - СтрНайти(Текст, Начало, НаправлениеПоиска.СНачала, 1, НомерПоПорядку), - СтрНайти(Текст, Окончание, НаправлениеПоиска.СНачала, 1, НомерПоПорядку) + СтрДлина(Окончание) - СтрНайти(Текст, Начало, НаправлениеПоиска.СНачала, 1, НомерПоПорядку)); + НайденнаяПозицияНачало = СтрНайти(Текст, Начало, НаправлениеПоиска.СНачала, 1, НомерПоПорядку); + НайденнаяПозицияОкончание = СтрНайти(Текст, Окончание, НаправлениеПоиска.СНачала, 1, НомерПоПорядку); + Если НайденнаяПозицияНачало = 0 + Или НайденнаяПозицияОкончание = 0 Тогда + Возврат ""; + КонецЕсли; + + Содержимое = Сред(Текст, + НайденнаяПозицияНачало, + НайденнаяПозицияОкончание - НайденнаяПозицияНачало); Если ВключатьОткрывающийЗакрывающийТег Тогда @@ -4593,15 +4672,9 @@ // Функция ПолучитьВложенияПисьмаСНеПустымИД(Письмо) Экспорт - ДанныеПрисоединенныхФайловПисьма = ВзаимодействияПереопределяемый.ДанныеОбъектаМетаданныхПрисоединенныхФайловПисьма(Письмо); - - Если ДанныеПрисоединенныхФайловПисьма = Неопределено Тогда - ИмяОбъектаМетаданных = УправлениеЭлектроннойПочтой.ПолучитьИмяОбъектаМетаданныхПрисоединенныхФайловПисьма(Письмо); - ВладелецФайлов = Письмо; - Иначе - ИмяОбъектаМетаданных = ДанныеПрисоединенныхФайловПисьма.ИмяСправочникаПрисоединенныеФайлы; - ВладелецФайлов = ДанныеПрисоединенныхФайловПисьма.Владелец; - КонецЕсли; + ДанныеПрисоединенныхФайловПисьма = ДанныеПрисоединенныхФайловПисьма(Письмо); + ИмяОбъектаМетаданных = ДанныеПрисоединенныхФайловПисьма.ИмяСправочникаПрисоединенныхФайлов; + ВладелецФайлов = ДанныеПрисоединенныхФайловПисьма.ВладелецФайлов; Запрос = Новый Запрос; Запрос.Текст = " @@ -4800,7 +4873,7 @@ Тема = ?(ПустаяСтрока(Выборка.Тема), НСтр("ru = '<Без Темы>'"), Выборка.Тема); - ДобавитьСтрокуВТаблицу(ЭлементТаблица, "Subject: ", Выборка.Тема); + ДобавитьСтрокуВТаблицу(ЭлементТаблица, "Subject: ", Тема); Возврат ЭлементТаблица; @@ -5014,10 +5087,23 @@ КонецЕсли; Если Кодировка = Неопределено Тогда + ЧтениеHTML.УстановитьСтроку(ТекстHTML); + Иначе - ЧтениеHTML.УстановитьСтроку(ТекстHTML, Кодировка); + + Попытка + + ЧтениеHTML.УстановитьСтроку(ТекстHTML, Кодировка); + + Исключение + + ЧтениеHTML.УстановитьСтроку(ТекстHTML); + + КонецПопытки; + КонецЕсли; + Возврат Построитель.Прочитать(ЧтениеHTML); КонецФункции @@ -5062,11 +5148,15 @@ // Функция ПолучитьТекстHTMLИзОбъектаДокументHTML(ДокументHTML) Экспорт - ЗаписьDOM = Новый ЗаписьDOM; - ЗаписьHTML = Новый ЗаписьHTML; - ЗаписьHTML.УстановитьСтроку(); - ЗаписьDOM.Записать(ДокументHTML,ЗаписьHTML); - Возврат ЗаписьHTML.Закрыть(); + Попытка + ЗаписьDOM = Новый ЗаписьDOM; + ЗаписьHTML = Новый ЗаписьHTML; + ЗаписьHTML.УстановитьСтроку(); + ЗаписьDOM.Записать(ДокументHTML,ЗаписьHTML); + Возврат ЗаписьHTML.Закрыть(); + Исключение + Возврат ""; + КонецПопытки; КонецФункции @@ -7471,7 +7561,7 @@ НаборЗаписей.Отбор.Взаимодействие.Установить(ДокументОбъект.Ссылка); Таблица = Новый ТаблицаЗначений; - ОписаниеТиповКонтактов = Новый ОписаниеТипов(ВзаимодействияКлиентСервер.МассивВозможныхТиповКонтактов()); + ОписаниеТиповКонтактов = Новый ОписаниеТипов(ВзаимодействияКлиентСервер.ТипыКонтактов()); Таблица.Колонки.Добавить("Контакт", ОписаниеТиповКонтактов); Таблица.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(100, ДопустимаяДлина.Переменная))); diff --git a/SSL/src/CommonModules/ВзаимодействияВызовСервера/Module.bsl b/SSL/src/CommonModules/ВзаимодействияВызовСервера/Module.bsl index 6d75f7f07..af4375080 100644 --- a/SSL/src/CommonModules/ВзаимодействияВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/ВзаимодействияВызовСервера/Module.bsl @@ -83,7 +83,7 @@ КонецЕсли; КонецЕсли; - МассивОписанияТиповКонтактов = ВзаимодействияКлиентСервер.МассивОписанияВозможныхКонтактов(); + МассивОписанияТиповКонтактов = ВзаимодействияКлиентСервер.ОписанияКонтактов(); ЭлементМассиваОписания = Неопределено; Для Каждого ЭлементМассива Из МассивОписанияТиповКонтактов Цикл @@ -268,7 +268,7 @@ СтандартнаяОбработка = Ложь; Запрос = Новый Запрос; - Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ + Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 50 РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ | ДокументВзаимодействий.Ссылка КАК Ссылка |ИЗ | Документ." + ИмяДокумента + " КАК ДокументВзаимодействий diff --git a/SSL/src/CommonModules/ВзаимодействияКлиент/Module.bsl b/SSL/src/CommonModules/ВзаимодействияКлиент/Module.bsl index eff0a517b..451372221 100644 --- a/SSL/src/CommonModules/ВзаимодействияКлиент/Module.bsl +++ b/SSL/src/CommonModules/ВзаимодействияКлиент/Module.bsl @@ -67,28 +67,24 @@ // ПосылатьОповещение - Булево - признак необходимости отправки оповещения из этой процедуры. // Процедура ВзаимодействиеПредметПослеЗаписи(Форма,Объект,ПараметрыЗаписи,ИмяОбъектаОтправителяСообщения = "",ПосылатьОповещение = Истина) Экспорт + + Если ЗначениеЗаполнено(Форма.ВзаимодействиеОснование) Тогда + ПараметрыЗаписи.Вставить("Основание",Форма.ВзаимодействиеОснование); + Иначе + ПараметрыЗаписи.Вставить("Основание",Неопределено); + КонецЕсли; - Если Форма.НеобходимоОповещение Тогда - - Если ЗначениеЗаполнено(Форма.ВзаимодействиеОснование) Тогда - ПараметрыЗаписи.Вставить("Основание",Форма.ВзаимодействиеОснование); - Иначе - ПараметрыЗаписи.Вставить("Основание",Неопределено); - КонецЕсли; + Если ВзаимодействияКлиентСервер.ЯвляетсяВзаимодействием(Объект.Ссылка) Тогда + ПараметрыЗаписи.Вставить("Предмет",Форма.Предмет); + ПараметрыЗаписи.Вставить("ТипОповещения","ЗаписьВзаимодействия"); + ИначеЕсли ВзаимодействияКлиентСервер.ЯвляетсяПредметом(Объект.Ссылка) Тогда + ПараметрыЗаписи.Вставить("Предмет",Объект.Ссылка); + ПараметрыЗаписи.Вставить("ТипОповещения","ЗаписьПредмета"); + КонецЕсли; - Если ВзаимодействияКлиентСервер.ЯвляетсяВзаимодействием(Объект.Ссылка) Тогда - ПараметрыЗаписи.Вставить("Предмет",Форма.Предмет); - ПараметрыЗаписи.Вставить("ТипОповещения","ЗаписьВзаимодействия"); - ИначеЕсли ВзаимодействияКлиентСервер.ЯвляетсяПредметом(Объект.Ссылка) Тогда - ПараметрыЗаписи.Вставить("Предмет",Объект.Ссылка); - ПараметрыЗаписи.Вставить("ТипОповещения","ЗаписьПредмета"); - КонецЕсли; - - Если ПосылатьОповещение Тогда - Оповестить("Запись_" + ИмяОбъектаОтправителяСообщения,ПараметрыЗаписи,Объект.Ссылка); - Форма.НеобходимоОповещение = Ложь; - КонецЕсли; - + Если ПосылатьОповещение Тогда + Оповестить("Запись_" + ИмяОбъектаОтправителяСообщения,ПараметрыЗаписи,Объект.Ссылка); + Форма.НеобходимоОповещение = Ложь; КонецЕсли; КонецПроцедуры @@ -300,13 +296,28 @@ // Процедура ВыборТипаКонтактаПриЗавершении(РезультатВыбора, ДополнительныеПараметры) Экспорт - Если РезультатВыбора <> Неопределено Тогда - ПараметрФормы = Новый Структура( - "Основание",ДополнительныеПараметры); - Если НЕ ВзаимодействияКлиентПереопределяемый.СоздатьКонтактНестандартнаяФорма(РезультатВыбора.Значение,ПараметрФормы) Тогда - ОткрытьФорму("Справочник." + РезультатВыбора.Значение + ".ФормаОбъекта", ПараметрФормы); - КонецЕсли; + Если РезультатВыбора = Неопределено Тогда + Возврат; КонецЕсли; + + ПараметрФормы = Новый Структура("Основание", ДополнительныеПараметры); + Контакты = ВзаимодействияКлиентСервер.ОписанияКонтактов(); + ИмяФормыНовогоКонтакта = ""; + Для каждого Контакт Из Контакты Цикл + Если Контакт.Имя = РезультатВыбора.Значение Тогда + ИмяФормыНовогоКонтакта = Контакт.ИмяФормыНовогоКонтакта; + КонецЕсли; + КонецЦикла; + + Если ПустаяСтрока(ИмяФормыНовогоКонтакта) Тогда + // Для обратной совместимости. + Если ВзаимодействияКлиентПереопределяемый.СоздатьКонтактНестандартнаяФорма(РезультатВыбора.Значение, ПараметрФормы) Тогда + Возврат; + КонецЕсли; + ИмяФормыНовогоКонтакта = "Справочник." + РезультатВыбора.Значение + ".ФормаОбъекта"; + КонецЕсли; + + ОткрытьФорму(ИмяФормыНовогоКонтакта, ПараметрФормы); КонецПроцедуры @@ -552,7 +563,7 @@ ИмяТаблицыБезПрефикса = Прав(Элемент.Имя,СтрДлина(Элемент.Имя)-8); ЗначениеОтбора = ?(Элемент.ТекущиеДанные = Неопределено, Неопределено, Элемент.ТекущиеДанные.Ссылка); - МассивОписанияКонтактов = ВзаимодействияКлиентСервер.МассивОписанияВозможныхКонтактов(); + МассивОписанияКонтактов = ВзаимодействияКлиентСервер.ОписанияКонтактов(); Для каждого ЭлементМассиваОписания Из МассивОписанияКонтактов Цикл Если ЭлементМассиваОписания.ИмяВладельца = ИмяТаблицыБезПрефикса Тогда КоллекцияОтборов = Форма["Список_" + ЭлементМассиваОписания.Имя].КомпоновщикНастроек.ФиксированныеНастройки.Отбор; diff --git a/SSL/src/CommonModules/ВзаимодействияКлиентПереопределяемый/Module.bsl b/SSL/src/CommonModules/ВзаимодействияКлиентПереопределяемый/Module.bsl index 7434f4518..6f2b71fda 100644 --- a/SSL/src/CommonModules/ВзаимодействияКлиентПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ВзаимодействияКлиентПереопределяемый/Module.bsl @@ -1,5 +1,10 @@ #Область ПрограммныйИнтерфейс +#Область УстаревшиеПроцедурыИФункции + +// Устарела. Следует использовать ВзаимодействияКлиентСерверПереопределяемый.ПриОпределенииВозможныхКонтактов. +// См. свойство ИмяФормыНовогоКонтакта параметра ТипыКонтактов. +// // Вызывается при создании нового контакта. // Используется, если для одного или нескольких видов контактов требуется, // чтобы вместо основной формы при их создании открывалась другая форма. @@ -27,3 +32,5 @@ КонецФункции #КонецОбласти + +#КонецОбласти diff --git a/SSL/src/CommonModules/ВзаимодействияКлиентСервер/Module.bsl b/SSL/src/CommonModules/ВзаимодействияКлиентСервер/Module.bsl index aa8768b8e..34e5b1e77 100644 --- a/SSL/src/CommonModules/ВзаимодействияКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ВзаимодействияКлиентСервер/Module.bsl @@ -1,3 +1,103 @@ +#Область ПрограммныйИнтерфейс + +// Возвращает новое описание контакта взаимодействий. +// Для использования в ВзаимодействияКлиентСерверПереопределяемый.ПриОпределенииВозможныхКонтактов. +// +// Возвращаемое значение: +// Структура - свойства контакта взаимодействий: +// * Тип - Тип - тип ссылки контакта. +// * Имя - Строка - имя типа контакта , как оно определено в метаданных. +// * Представление - Строка - представление типа контакта для отображения пользователю. +// * Иерархический - Булево - признак того, является ли справочник иерархическим. +// * ЕстьВладелец - Булево - признак того, что у контакта есть владелец. +// * ИмяВладельца - Строка - имя владельца контакта, как оно определено в метаданных. +// * ИскатьПоДомену - Булево - признак того, что контакты данного типа будет подбираться +// по совпадению домена, а не по полному адресу электронной почты. +// * Связь - Строка - описывает возможную связь данного контакта с другим контактом, в +// случае когда текущий контакт является реквизитом другого контакта. +// Описывается следующей строкой "ИмяТаблицы.ИмяРеквизита". +// * ИмяРеквизитаПредставлениеКонтакта - Строка - имя реквизита контакта, из которого будет получено +// представление контакта. Если не указано, то используется +// стандартный реквизит Наименование. +// * ВозможностьИнтерактивногоСоздания - Булево - признак возможности интерактивного создания контакта из +// документов - взаимодействий. +// * ИмяФормыНовогоКонтакта - Строка - полное имя формы для создания нового контакта, +// например, "Справочник.Партнеры.Форма.ПомощникНового". +// Если не заполнено, то открывается форма элемента по умолчанию. +Функция НовоеОписаниеКонтакта() Экспорт + + Результат = Новый Структура; + Результат.Вставить("Тип", ""); + Результат.Вставить("Имя", ""); + Результат.Вставить("Представление", ""); + Результат.Вставить("Иерархический", Ложь); + Результат.Вставить("ЕстьВладелец", Ложь); + Результат.Вставить("ИмяВладельца", ""); + Результат.Вставить("ИскатьПоДомену", Истина); + Результат.Вставить("Связь", ""); + Результат.Вставить("ИмяРеквизитаПредставлениеКонтакта", "Наименование"); + Результат.Вставить("ВозможностьИнтерактивногоСоздания", Истина); + Результат.Вставить("ИмяФормыНовогоКонтакта", ""); + Возврат Результат; + +КонецФункции + +#Область УстаревшиеПроцедурыИФункции + +// Устарела. Следует использовать ВзаимодействияКлиентСервер.НовоеОписаниеКонтакта. +// Добавляет элемент в массив структур контакта. +// +// Параметры: +// МассивОписания - Массив - массив, в который будут добавлена структура описания контакта. +// Тип - Тип - тип ссылки контакта. +// ВозможностьИнтерактивногоСоздания - Булево - признак возможности интерактивного создания контакта из документов - +// взаимодействий. +// Имя - Строка - имя типа контакта , как оно определено в метаданных. +// Представление - Строка - представление типа контакта для отображения пользователю. +// Иерархический - Булево - признак того, является ли справочник иерархическим. +// ЕстьВладелец - Булево - признак того, что у контакта есть владелец. +// ИмяВладельца - Строка - имя владельца контакта, как оно определено в метаданных. +// ИскатьПоДомену - Булево - признак того, что по данному типу контакта будет осуществляться +// поиск по домену. +// Связь - Строка - описывает возможную связь данного контакта с другим контактом, в +// случае когда текущий контакт является реквизитом другого контакта. +// Описывается следующей строкой "ИмяТаблицы.ИмяРеквизита". +// ИмяРеквизитаПредставлениеКонтакта - Строка - имя реквизита контакта, из которого будет получено представление контакта. +// +Процедура ДобавитьЭлементМассиваОписанияВозможныхТиповКонтактов( + МассивОписания, + Тип, + ВозможностьИнтерактивногоСоздания, + Имя, + Представление, + Иерархический, + ЕстьВладелец, + ИмяВладельца, + ИскатьПоДомену, + Связь, + ИмяРеквизитаПредставлениеКонтакта = "Наименование") Экспорт + + СтруктураОписания = Новый Структура; + СтруктураОписания.Вставить("Тип", Тип); + СтруктураОписания.Вставить("ВозможностьИнтерактивногоСоздания", ВозможностьИнтерактивногоСоздания); + СтруктураОписания.Вставить("Имя", Имя); + СтруктураОписания.Вставить("Представление", Представление); + СтруктураОписания.Вставить("Иерархический", Иерархический); + СтруктураОписания.Вставить("ЕстьВладелец", ЕстьВладелец); + СтруктураОписания.Вставить("ИмяВладельца", ИмяВладельца); + СтруктураОписания.Вставить("ИскатьПоДомену", ИскатьПоДомену); + СтруктураОписания.Вставить("Связь", Связь); + СтруктураОписания.Вставить("ИмяРеквизитаПредставлениеКонтакта", ИмяРеквизитаПредставлениеКонтакта); + + + МассивОписания.Добавить(СтруктураОписания); + +КонецПроцедуры + +#КонецОбласти + +#КонецОбласти + #Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// @@ -13,8 +113,7 @@ // Функция ЯвляетсяКонтактом(ОбъектСсылка) Экспорт - ОписаниеТиповВозможныхКонтактов = Новый ОписаниеТипов(МассивВозможныхТиповКонтактов()); - + ОписаниеТиповВозможныхКонтактов = Новый ОписаниеТипов(ТипыКонтактов()); Возврат ОписаниеТиповВозможныхКонтактов.СодержитТип(ТипЗнч(ОбъектСсылка)); КонецФункции @@ -36,11 +135,11 @@ КонецЕсли; Возврат ТипОбъекта = Тип("ДокументСсылка.Встреча") - ИЛИ ТипОбъекта = Тип("ДокументСсылка.ЗапланированноеВзаимодействие") - ИЛИ ТипОбъекта = Тип("ДокументСсылка.ТелефонныйЗвонок") - ИЛИ ТипОбъекта = Тип("ДокументСсылка.ЭлектронноеПисьмоВходящее") - ИЛИ ТипОбъекта = Тип("ДокументСсылка.ЭлектронноеПисьмоИсходящее") - ИЛИ ТипОбъекта = Тип("ДокументСсылка.СообщениеSMS"); + ИЛИ ТипОбъекта = Тип("ДокументСсылка.ЗапланированноеВзаимодействие") + ИЛИ ТипОбъекта = Тип("ДокументСсылка.ТелефонныйЗвонок") + ИЛИ ТипОбъекта = Тип("ДокументСсылка.ЭлектронноеПисьмоВходящее") + ИЛИ ТипОбъекта = Тип("ДокументСсылка.ЭлектронноеПисьмоИсходящее") + ИЛИ ТипОбъекта = Тип("ДокументСсылка.СообщениеSMS"); КонецФункции @@ -89,19 +188,13 @@ // Функция ЯвляетсяПредметом(ОбъектСсылка) Экспорт - МассивТиповПредметов = ВзаимодействияКлиентСерверСлужебныйПовтИсп.МассивТиповПредметов(); - - Для каждого ЭлементМассива Из МассивТиповПредметов Цикл - - Если ТипЗнч(ОбъектСсылка) = Тип(ЭлементМассива) Тогда - + ПредметыВзаимодействий = ВзаимодействияКлиентСерверСлужебныйПовтИсп.ПредметыВзаимодействий(); + Для каждого Предмет Из ПредметыВзаимодействий Цикл + Если ТипЗнч(ОбъектСсылка) = Тип(Предмет) Тогда Возврат Истина; - КонецЕсли; - КонецЦикла; - - Возврат Ложь; + Возврат Ложь; КонецФункции @@ -292,77 +385,23 @@ // Возвращаемое значение: // Массив - содержит возможные типы контактов. // -Функция МассивВозможныхТиповКонтактов() Экспорт +Функция ТипыКонтактов() Экспорт - МассивОписанияВозможныхКонтактов = МассивОписанияВозможныхКонтактов(); - - МассивВозможныхТиповКонтактов = Новый Массив; - - Для каждого ЭлементМассиваОписания Из МассивОписанияВозможныхКонтактов Цикл - - МассивВозможныхТиповКонтактов.Добавить(ЭлементМассиваОписания.Тип); - + ОписанияКонтактов = ОписанияКонтактов(); + Результат = Новый Массив; + Для каждого ЭлементМассиваОписания Из ОписанияКонтактов Цикл + Результат.Добавить(ЭлементМассиваОписания.Тип); КонецЦикла; - - Возврат МассивВозможныхТиповКонтактов; + Возврат Результат; КонецФункции -Функция МассивОписанияВозможныхКонтактов() Экспорт +Функция ОписанияКонтактов() Экспорт - Возврат ВзаимодействияКлиентСерверСлужебныйПовтИсп.МассивОписанияВозможныхКонтактов(); + Возврат ВзаимодействияКлиентСерверСлужебныйПовтИсп.КонтактыВзаимодействий(); КонецФункции -// Добавляет элемент в массив структур контакта. -// -// Параметры: -// МассивОписания - Массив - массив, в который будут добавлена структура описания контакта. -// Тип - Тип - тип ссылки контакта. -// ВозможностьИнтерактивногоСоздания - Булево - признак возможности интерактивного создания контакта из документов - -// взаимодействий. -// Имя - Строка - имя типа контакта , как оно определено в метаданных. -// Представление - Строка - представление типа контакта для отображения пользователю. -// Иерархический - Булево - признак того, является ли справочник иерархическим. -// ЕстьВладелец - Булево - признак того, что у контакта есть владелец. -// ИмяВладельца - Строка - имя владельца контакта, как оно определено в метаданных. -// ИскатьПоДомену - Булево - признак того, что по данному типу контакта будет осуществляться -// поиск по домену. -// Связь - Строка - описывает возможную связь данного контакта с другим контактом, в -// случае когда текущий контакт является реквизитом другого контакта. -// Описывается следующей строкой "ИмяТаблицы.ИмяРеквизита". -// ИмяРеквизитаПредставлениеКонтакта - Строка - имя реквизита контакта, из которого будет получено представление контакта. -// -Процедура ДобавитьЭлементМассиваОписанияВозможныхТиповКонтактов( - МассивОписания, - Тип, - ВозможностьИнтерактивногоСоздания, - Имя, - Представление, - Иерархический, - ЕстьВладелец, - ИмяВладельца, - ИскатьПоДомену, - Связь, - ИмяРеквизитаПредставлениеКонтакта = "Наименование") Экспорт - - СтруктураОписания = Новый Структура; - СтруктураОписания.Вставить("Тип", Тип); - СтруктураОписания.Вставить("ВозможностьИнтерактивногоСоздания", ВозможностьИнтерактивногоСоздания); - СтруктураОписания.Вставить("Имя", Имя); - СтруктураОписания.Вставить("Представление", Представление); - СтруктураОписания.Вставить("Иерархический", Иерархический); - СтруктураОписания.Вставить("ЕстьВладелец", ЕстьВладелец); - СтруктураОписания.Вставить("ИмяВладельца", ИмяВладельца); - СтруктураОписания.Вставить("ИскатьПоДомену", ИскатьПоДомену); - СтруктураОписания.Вставить("Связь", Связь); - СтруктураОписания.Вставить("ИмяРеквизитаПредставлениеКонтакта", ИмяРеквизитаПредставлениеКонтакта); - - - МассивОписания.Добавить(СтруктураОписания); - -КонецПроцедуры - // Проверяет заполнение контактов в документе взаимодействий и обновляет форму документа взаимодействий// // Параметры: // Объект - ДокументОбъект - документ взаимодействий, для которой выполняется проверка. @@ -409,7 +448,7 @@ // ИмяОтбора - Строка - имя изменяемого отбора. // ОтборПоПредмету - Булево - признак того, что форма списка параметрическая и на нее наложен отбор по предмету. // -Процедура БыстрыйОтборСписокПриИзменении(Форма, ИмяОтбора, ОтборПоПредмету = Истина) Экспорт +Процедура БыстрыйОтборСписокПриИзменении(Форма, ИмяОтбора, ДатаДляОтбора = Неопределено, ОтборПоПредмету = Истина) Экспорт Отбор = ОтборДинамическогоСписка(Форма.Список); @@ -425,11 +464,6 @@ // Установить отборы для режима. Если Форма[ИмяОтбора] = "КРассмотрению" Тогда - #Если Сервер Или ВнешнееСоединение Тогда - ДатаДляОтбора = ТекущаяДатаСеанса(); - #Иначе - ДатаДляОтбора = ОбщегоНазначенияКлиент.ДатаСеанса(); - #КонецЕсли ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора(Отбор, "Рассмотрено", Ложь,,, Истина); ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора( Отбор, "РассмотретьПосле", ДатаДляОтбора, ВидСравненияКомпоновкиДанных.МеньшеИлиРавно,, Истина); diff --git a/SSL/src/CommonModules/ВзаимодействияКлиентСерверПереопределяемый/Module.bsl b/SSL/src/CommonModules/ВзаимодействияКлиентСерверПереопределяемый/Module.bsl index ebc533954..4d334e20b 100644 --- a/SSL/src/CommonModules/ВзаимодействияКлиентСерверПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ВзаимодействияКлиентСерверПереопределяемый/Module.bsl @@ -1,10 +1,11 @@ #Область ПрограммныйИнтерфейс -// При необходимости дополняет массив строковых представлений типов предметов взаимодействий. -// Используется, если в конфигурации определен хотя бы один предмет взаимодействий. Например, заказы, вакансии и т.п. +// Задает типы предметов взаимодействий, например: заказы, вакансии и т.п. +// Используется, если в конфигурации определен хотя бы один предмет взаимодействий. // // Параметры: -// ТипыПредметов - Массив - массив, в который добавляются строковые представления типов предметов взаимодействий. +// ТипыПредметов - Массив - предметы взаимодействий (Строка), +// например, "ДокументСсылка.ЗаказПокупателя" и т.п. // Процедура ПриОпределенииВозможныхПредметов(ТипыПредметов) Экспорт @@ -12,28 +13,31 @@ КонецПроцедуры -// Дополняет описания возможных типов контактов. +// Задает описания возможных типов контактов взаимодействий, например: партнеры, контактные лица и т.п. // Используется, если в конфигурации определен хотя бы один тип контактов взаимодействий, -// помимо справочника Пользователи. Например, партнеры, контактные лица и т.п. +// помимо справочника Пользователи. // // Параметры: -// ТипыКонтактов - Массив - массив структур, в котором описываются возможные типы контактов. -// Каждая структура содержит описание одного типа контактов и содержит следующие поля: -// *Тип - Тип - тип ссылки контакта. -// *ВозможностьИнтерактивногоСоздания - Булево - признак возможности интерактивного создания контакта из -// документов - взаимодействий. -// *Имя - Строка - имя типа контакта , как оно определено в метаданных. -// *Представление - Строка - представление типа контакта для отображения пользователю. -// *Иерархический - Булево - признак того, является ли справочник иерархическим. -// *ЕстьВладелец - Булево - признак того, что у контакта есть владелец. -// *ИмяВладельца - Строка - имя владельца контакта, как оно определено в метаданных. -// *ИскатьПоДомену - Булево - признак того, что по данному типу контакта будет осуществляться -// поиск по домену. -// *Связь - Строка - описывает возможную связь данного контакта с другим контактом, в -// случае когда текущий контакт является реквизитом другого контакта. -// Описывается следующей строкой "ИмяТаблицы.ИмяРеквизита". -// *ИмяРеквизитаПредставлениеКонтакта - Строка - имя реквизита контакта, из которого будет получено -// представление контакта. +// ТипыКонтактов - Массив - содержит описания типов контактов взаимодействий (Структура) и их свойства: +// * Тип - Тип - тип ссылки контакта. +// * Имя - Строка - имя типа контакта , как оно определено в метаданных. +// * Представление - Строка - представление типа контакта для отображения пользователю. +// * Иерархический - Булево - признак того, является ли справочник иерархическим. +// * ЕстьВладелец - Булево - признак того, что у контакта есть владелец. +// * ИмяВладельца - Строка - имя владельца контакта, как оно определено в метаданных. +// * ИскатьПоДомену - Булево - признак того, что контакты данного типа будет подбираться +// по совпадению домена, а не по полному адресу электронной почты. +// * Связь - Строка - описывает возможную связь данного контакта с другим контактом, в +// случае когда текущий контакт является реквизитом другого контакта. +// Описывается следующей строкой "ИмяТаблицы.ИмяРеквизита". +// * ИмяРеквизитаПредставлениеКонтакта - Строка - имя реквизита контакта, из которого будет получено +// представление контакта. Если не указано, то используется +// стандартный реквизит Наименование. +// * ВозможностьИнтерактивногоСоздания - Булево - признак возможности интерактивного создания контакта из +// документов - взаимодействий. +// * ИмяФормыНовогоКонтакта - Строка - полное имя формы для создания нового контакта. +// Например, "Справочник.Партнеры.Форма.ПомощникНового". +// Если не заполнено, то открывается форма элемента по умолчанию. // Процедура ПриОпределенииВозможныхКонтактов(ТипыКонтактов) Экспорт diff --git a/SSL/src/CommonModules/ВзаимодействияКлиентСерверСлужебныйПовтИсп/Module.bsl b/SSL/src/CommonModules/ВзаимодействияКлиентСерверСлужебныйПовтИсп/Module.bsl index 17e091b6c..d44db8ba4 100644 --- a/SSL/src/CommonModules/ВзаимодействияКлиентСерверСлужебныйПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ВзаимодействияКлиентСерверСлужебныйПовтИсп/Module.bsl @@ -1,35 +1,27 @@ #Область СлужебныеПроцедурыИФункции -// Возвращает описания возможных типов контактов. -// Используется, если в конфигурации определен хотя бы один тип контактов взаимодействий, -// помимо справочника Пользователи. -// -// Возвращаемое значение: -// Массив - массив структур, в котором описываются возможные типы контактов. -// Каждая структура содержит описание одного типа контактов. -// Описание полей структуры см. в комментарии к функции. -// ДобавитьЭлементМассиваОписанияВозможныхТиповКонтактов общего модуля. -// ВзаимодействияКлиентСервер. -// -Функция МассивОписанияВозможныхКонтактов() Экспорт +Функция КонтактыВзаимодействий() Экспорт - МассивВозможныеКонтакты = Новый Массив(); - ВзаимодействияКлиентСервер.ДобавитьЭлементМассиваОписанияВозможныхТиповКонтактов(МассивВозможныеКонтакты, - Тип("СправочникСсылка.Пользователи"),Ложь,"Пользователи","Пользователи",Ложь,Ложь,"",Ложь,""); - - ВзаимодействияКлиентСерверПереопределяемый.ПриОпределенииВозможныхКонтактов(МассивВозможныеКонтакты); + Результат = Новый Массив(); - Возврат МассивВозможныеКонтакты; + Контакт = ВзаимодействияКлиентСервер.НовоеОписаниеКонтакта(); + Контакт.Тип = Тип("СправочникСсылка.Пользователи"); + Контакт.Имя = "Пользователи"; + Контакт.Представление = НСтр("ru = 'Пользователи'"); + Контакт.ВозможностьИнтерактивногоСоздания = Ложь; + Контакт.ИскатьПоДомену = Ложь; + Результат.Добавить(Контакт); + + ВзаимодействияКлиентСерверПереопределяемый.ПриОпределенииВозможныхКонтактов(Результат); + Возврат Новый ФиксированныйМассив(Результат); КонецФункции -Функция МассивТиповПредметов() Экспорт +Функция ПредметыВзаимодействий() Экспорт - МассивТиповПредметов = Новый Массив; - - ВзаимодействияКлиентСерверПереопределяемый.ПриОпределенииВозможныхПредметов(МассивТиповПредметов); - - Возврат МассивТиповПредметов; + Предметы = Новый Массив; + ВзаимодействияКлиентСерверПереопределяемый.ПриОпределенииВозможныхПредметов(Предметы); + Возврат Новый ФиксированныйМассив(Предметы); КонецФункции diff --git a/SSL/src/CommonModules/ВзаимодействияПереопределяемый/Module.bsl b/SSL/src/CommonModules/ВзаимодействияПереопределяемый/Module.bsl index f3484f475..3eff853e1 100644 --- a/SSL/src/CommonModules/ВзаимодействияПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ВзаимодействияПереопределяемый/Module.bsl @@ -1,49 +1,36 @@ #Область ПрограммныйИнтерфейс -// Возвращает текст запроса, отбирающего контакты (участников) предмета взаимодействия. +// Вызывается для получения контактов (участников) по указанному предмету взаимодействия. // Используется, если в конфигурации определен хотя бы один предмет взаимодействий. // // Параметры: -// ПомещатьВоВременнуюТаблицу - Булево - признак того, что результат выполнения запроса -// необходимо поместить во временную таблицу. -// ИмяТаблицы - Строка - имя таблицы предмета взаимодействий, в котором будет выполнен поиск. -// Объединить - Булево - если Истина, то в запрос необходимо добавить конструкцию ОБЪЕДЕНИТЬ. +// ИмяТаблицыКонтактов - Строка - имя таблицы предмета взаимодействий, в котором требуется выполнить поиск. +// Например, "Документы.ЗаказПокупателя". +// ТекстЗапросаДляПоиска - Строка - в этот параметр указать фрагмент запроса для поиска. При выполнении запроса +// в параметр запроса &Предмет подставляется ссылка на предмет взаимодействия. // -// Возвращаемое значение: -// Строка - текст запроса -Функция ТекстЗапросаПоискКонтактовПоПредмету( - ПомещатьВоВременнуюТаблицу, - ИмяТаблицы, - Объединить = Ложь) Экспорт +Процедура ПриПоискеКонтактов(Знач ИмяТаблицыКонтактов, ТекстЗапросаДляПоиска) Экспорт - Возврат ""; - -КонецФункции +КонецПроцедуры -// Возможность переопределить владельца присоединенных файлов для письма. -// Такая необходимость может возникнуть например при массовых рассылках. В этом случае имеет смысл +// Позволяет переопределить владельца присоединенных файлов для письма. +// Такая необходимость может возникнуть, например, при массовых рассылках, когда имеет смысл // хранить одни и те же присоединенные файлы в одном месте, а не тиражировать их на все письма рассылки. // // Параметры: -// Письмо - ДокументСсылка, ДокументОбъект - документ электронное письмо для которого необходимо получить вложения. +// Письмо - ДокументСсылка.ЭлектронноеПисьмоВходящее, ДокументСсылка.ЭлектронноеПисьмоИсходящее - электронное письмо, +// для которого необходимо получить вложения. +// ПрисоединенныеФайлы - Структура - задать сведения о файлах, присоединенных к письму: +// * ВладелецФайлов - ОпределяемыйТип.ПрисоединенныйФайл - владелец присоединенных файлов. +// * ИмяСправочникаПрисоединенныхФайлов - Строка - имя объекта метаданных присоединенных файлов. // -// Возвращаемое значение: -// Структура,Неопределено - Неопределено, если присоединенные файлы хранятся при письме. -// Структура, если присоединенные файлы хранятся в другом объекте. Формат структуры: -// - Владелец - владелец присоединенных файлов, -// - ИмяСправочникаПрисоединенныеФайлы - имя объекта метаданных присоединенных файлов. -// -Функция ДанныеОбъектаМетаданныхПрисоединенныхФайловПисьма(Письмо) Экспорт - - Возврат Неопределено; - -КонецФункции +Процедура ПриПолученииПрисоединенныхФайлов(Письмо, ПрисоединенныеФайлы) Экспорт -// Вызывается из модулей объектов подсистемы Взаимодействия для -// возможности настройки логики ограничения в прикладном решении. -// +КонецПроцедуры + +// Вызывается для настройки логики ограничения доступа к взаимодействиям. // Пример заполнения наборов значений доступа см. в комментарии // к процедуре УправлениеДоступом.ЗаполнитьНаборыЗначенийДоступа. // @@ -63,5 +50,46 @@ КонецПроцедуры +#Область УстаревшиеПроцедурыИФункции + +// Устарела. Следует использовать ВзаимодействияПереопределяемый.ПриПоискеКонтактов. +// Возвращает текст запроса, отбирающего контакты (участников) предмета взаимодействия. +// Используется, если в конфигурации определен хотя бы один предмет взаимодействий. +// +// Параметры: +// УдалитьПомещатьВоВременнуюТаблицу - Булево - всегда Ложь. +// ИмяТаблицы - Строка - имя таблицы предмета взаимодействий, в котором будет выполнен поиск. +// УдалитьОбъединить - Булево - всегда Истина. +// +// Возвращаемое значение: +// Строка - текст запроса. +// +Функция ТекстЗапросаПоискКонтактовПоПредмету(УдалитьПомещатьВоВременнуюТаблицу, ИмяТаблицы, УдалитьОбъединить = Ложь) Экспорт + + Возврат ""; + +КонецФункции + +// Устарела. Следует использовать ВзаимодействияПереопределяемый.ПриПолученииПрисоединенныхФайлов. +// Возможность переопределить владельца присоединенных файлов для письма. +// Такая необходимость может возникнуть например при массовых рассылках. В этом случае имеет смысл +// хранить одни и те же присоединенные файлы в одном месте, а не тиражировать их на все письма рассылки. +// +// Параметры: +// Письмо - ДокументСсылка, ДокументОбъект - документ электронное письмо, для которого необходимо получить вложения. +// +// Возвращаемое значение: +// Структура, Неопределено - Неопределено, если присоединенные файлы хранятся при письме. +// Структура, если присоединенные файлы хранятся в другом объекте: +// * Владелец - ОпределяемыйТип.ПрисоединенныйФайл - владелец присоединенных файлов. +// * ИмяСправочникаПрисоединенныеФайлы - Строка - имя объекта метаданных присоединенных файлов. +// +Функция ДанныеОбъектаМетаданныхПрисоединенныхФайловПисьма(Письмо) Экспорт + + Возврат Неопределено; + +КонецФункции + +#КонецОбласти #КонецОбласти diff --git a/SSL/src/CommonModules/ВнешниеКомпонентыКлиент/Module.bsl b/SSL/src/CommonModules/ВнешниеКомпонентыКлиент/Module.bsl index b138ae15f..d4157c7cc 100644 --- a/SSL/src/CommonModules/ВнешниеКомпонентыКлиент/Module.bsl +++ b/SSL/src/CommonModules/ВнешниеКомпонентыКлиент/Module.bsl @@ -20,9 +20,9 @@ Функция ПараметрыПодключения() Экспорт Параметры = Новый Структура; - Параметры.Вставить("Кэшировать" , Истина); + Параметры.Вставить("Кэшировать", Истина); Параметры.Вставить("ПредложитьУстановить", Истина); - Параметры.Вставить("ТекстПояснения" , ""); + Параметры.Вставить("ТекстПояснения", ""); Параметры.Вставить("ИдентификаторыСозданияОбъектов", Новый Массив); Возврат Параметры; @@ -89,11 +89,11 @@ КонецЕсли; Контекст = Новый Структура; - Контекст.Вставить("Оповещение" , Оповещение); - Контекст.Вставить("Идентификатор" , Идентификатор); - Контекст.Вставить("Кэшировать" , Параметры.Кэшировать); + Контекст.Вставить("Оповещение", Оповещение); + Контекст.Вставить("Идентификатор", Идентификатор); + Контекст.Вставить("Кэшировать", Параметры.Кэшировать); Контекст.Вставить("ПредложитьУстановить", Параметры.ПредложитьУстановить); - Контекст.Вставить("ТекстПояснения" , Параметры.ТекстПояснения); + Контекст.Вставить("ТекстПояснения", Параметры.ТекстПояснения); Контекст.Вставить("ИдентификаторыСозданияОбъектов", Параметры.ИдентификаторыСозданияОбъектов); ДлительнаяОперация = ВнешниеКомпонентыСлужебныйВызовСервера.НачатьПодготовкуКомпонентыКПодключению( @@ -229,7 +229,8 @@ КонецЕсли; Контекст = Новый Структура; - Контекст.Вставить("Оповещение" , Оповещение); + Контекст.Вставить("Оповещение", Оповещение); + Контекст.Вставить("Идентификатор", Идентификатор); Контекст.Вставить("ТекстПояснения", Параметры.ТекстПояснения); ДлительнаяОперация = ВнешниеКомпонентыСлужебныйВызовСервера.НачатьПодготовкуКомпонентыКПодключению( diff --git a/SSL/src/CommonModules/ВнешниеКомпонентыСлужебный/Module.bsl b/SSL/src/CommonModules/ВнешниеКомпонентыСлужебный/Module.bsl index fe511a490..d5793309b 100644 --- a/SSL/src/CommonModules/ВнешниеКомпонентыСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ВнешниеКомпонентыСлужебный/Module.bsl @@ -316,14 +316,14 @@ КонецПопытки; - ВременныйКаталог = СоздатьВременныйКаталог(); + ВременныйКаталог = ОбщегоНазначения.СоздатьВременныйКаталог("ExtComp"); Для каждого ЭлементАрхива Из ЧтениеАрхива.Элементы Цикл Если ЭлементАрхива.Зашифрован Тогда // Очищаем временные файлы и освобождаем память. - УдалитьВременныйКаталог(ВременныйКаталог); + ОбщегоНазначения.УдалитьВременныйКаталог(ВременныйКаталог); ЧтениеАрхива.Закрыть(); Поток.Закрыть(); @@ -364,7 +364,7 @@ КонецЦикла; // Очищаем временные файлы и освобождаем память. - УдалитьВременныйКаталог(ВременныйКаталог); + ОбщегоНазначения.УдалитьВременныйКаталог(ВременныйКаталог); ЧтениеАрхива.Закрыть(); Поток.Закрыть(); @@ -390,29 +390,6 @@ КонецФункции -Функция СоздатьВременныйКаталог() - - ВременныйКаталог = ПолучитьИмяВременногоФайла() - + ПолучитьРазделительПути() - + Строка(Новый УникальныйИдентификатор); - СоздатьКаталог(ВременныйКаталог); - - Возврат ВременныйКаталог; - -КонецФункции - -Процедура УдалитьВременныйКаталог(ВременныйКаталог) - - Попытка - УдалитьФайлы(ВременныйКаталог); - Исключение - ЗаписьЖурналаРегистрации(НСтр("ru = 'Регистрация внешней компоненты'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - КонецПопытки; - -КонецПроцедуры - Процедура РазобратьМанифестКомпоненты(ВременныйФайлXML, Реквизиты) ЧтениеXML = Новый ЧтениеXML; diff --git a/SSL/src/CommonModules/ВнешниеКомпонентыСлужебныйКлиент/Module.bsl b/SSL/src/CommonModules/ВнешниеКомпонентыСлужебныйКлиент/Module.bsl index 4e775c5db..4abf52b93 100644 --- a/SSL/src/CommonModules/ВнешниеКомпонентыСлужебныйКлиент/Module.bsl +++ b/SSL/src/CommonModules/ВнешниеКомпонентыСлужебныйКлиент/Module.bsl @@ -1,5 +1,274 @@ + +#Область СлужебныйПрограммныйИнтерфейс + +Функция ЭтоКомпонентаИзХранилища(Местоположение) Экспорт + + Возврат СтрНачинаетсяС(Местоположение, "e1cib/data/Справочник.ВнешниеКомпоненты.ХранилищеКомпоненты"); + +КонецФункции + +#КонецОбласти + #Область СлужебныеПроцедурыИФункции +#Область ПодключениеВнешнейКомпоненты + +// Вызывается после подготовки длительной операцией +// +Процедура ПодключитьКомпонентуПослеПодготовки(Результат, Контекст) Экспорт + + // Ответ: + // - Структура - Выполнено - результат в структуре. + // - Неопределено - Отменено пользователем. + Если Результат = Неопределено Тогда + + // Освобождаем выделенную память. + УдалитьИзВременногоХранилища(Контекст.АдресРезультатаПодготовкиКомпоненты); // Вызов сервера. + Возврат; + КонецЕсли; + + // В контексте АдресРезультата больше не нужен, теперь он актуализирован в Результат.АдресРезультата. + Контекст.Удалить("АдресРезультатаПодготовкиКомпоненты"); + + // Результат.Статус: + // - "Ошибка" - описание в ОписаниеОшибки. + // - "Выполнено" - результат в Результат.АдресРезультата. + Если Результат.Статус = "Выполнено" Тогда + + Информация = ВнешниеКомпонентыСлужебныйВызовСервера.РезультатПодготовкиКомпонентыКПодключению( + Результат.АдресРезультата); // Вызов сервера. + + Доступна = ПроверитьДоступностьКомпоненты(Информация); + + Если Доступна Тогда + + Контекст.Вставить("Местоположение", Информация.Местоположение); + ОбщегоНазначенияСлужебныйКлиент.ПодключитьКомпоненту(Контекст); + + Иначе + + Оповещение = Новый ОписаниеОповещения( + "ПодключитьКомпонентуЗавершениеНеДоступноВКлиенте", ЭтотОбъект, Контекст); + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ТекстПояснения", Контекст.ТекстПояснения); + ПараметрыФормы.Вставить("ПоддерживаемыеКлиенты", Информация); + + ОткрытьФорму("ОбщаяФорма.ДоступныеВидыКлиентовВнешнейКомпоненты", + ПараметрыФормы,,,,, Оповещение); + + КонецЕсли; + + Иначе + + // Освобождаем выделенную память. + УдалитьИзВременногоХранилища(Результат.АдресРезультата); // Вызов сервера. + + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось подключить внешнюю компоненту ""%1"" на клиенте + |из хранилища внешних компонент + |по причине: + |%2'"), + Контекст.Идентификатор, + Результат.КраткоеПредставлениеОшибки); + + ОбщегоНазначенияСлужебныйКлиент.ПодключитьКомпонентуОповеститьОбОшибке(ТекстОшибки, Контекст); + + КонецЕсли; + +КонецПроцедуры + +// +Процедура ПодключитьКомпонентуЗавершениеНеДоступноВКлиенте(Результат, Контекст) Экспорт + + ТекстОшибки = ""; + ОбщегоНазначенияСлужебныйКлиент.ПодключитьКомпонентуОповеститьОбОшибке(ТекстОшибки, Контекст); + +КонецПроцедуры + +// Параметры: +// Контекст - Структура - контекст процедуры: +// * Оповещение - ОписаниеОповещения - . +// * Идентификатор - Строка - . +// * ИдентификаторСозданияОбъекта - Строка, Неопределено - . +// +Процедура ПодключитьКомпонентуИзРеестраWindows(Контекст) Экспорт + + Если ОбщегоНазначенияКлиентСервер.ЭтоWindowsКлиент() + И Не ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент() Тогда + + Оповещение = Новый ОписаниеОповещения( + "ПодключитьКомпонентуИзРеестраWindowsПослеПопыткиПодключения", ЭтотОбъект, Контекст, + "ПодключитьКомпонентуИзРеестраWindowsПриОбработкеОшибки", ЭтотОбъект); + + НачатьПодключениеВнешнейКомпоненты(Оповещение, "AddIn." + Контекст.Идентификатор); + + Иначе + + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось подключить внешнюю компоненту ""%1"" на клиенте + |из реестра Windows + |по причине: + |Подключить компоненту из реестра Windows возможно только в тонком или толстом клиентах Windows.'"), + Контекст.Идентификатор); + + ОбщегоНазначенияСлужебныйКлиент.ПодключитьКомпонентуОповеститьОбОшибке(ТекстОшибки, Контекст); + + КонецЕсли; + +КонецПроцедуры + +// Продолжение процедуры ПодключитьКомпонентуИзРеестраWindows. +Процедура ПодключитьКомпонентуИзРеестраWindowsПослеПопыткиПодключения(Подключено, Контекст) Экспорт + + Если Подключено Тогда + + ИдентификаторСозданияОбъекта = Контекст.ИдентификаторСозданияОбъекта; + + Если ИдентификаторСозданияОбъекта = Неопределено Тогда + ИдентификаторСозданияОбъекта = Контекст.Идентификатор; + КонецЕсли; + + Попытка + ПодключаемыйМодуль = Новый("AddIn." + ИдентификаторСозданияОбъекта); + Если ПодключаемыйМодуль = Неопределено Тогда + ВызватьИсключение НСтр("ru = 'Оператор Новый вернул Неопределено'"); + КонецЕсли; + Исключение + ПодключаемыйМодуль = Неопределено; + ТекстОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + КонецПопытки; + + Если ПодключаемыйМодуль = Неопределено Тогда + + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось создать объект внешней компоненты ""%1"", подключенной на клиенте + |из реестра Windows, + |по причине: + |%2'"), + Контекст.Идентификатор, + ТекстОшибки); + + ОбщегоНазначенияСлужебныйКлиент.ПодключитьКомпонентуОповеститьОбОшибке(ТекстОшибки, Контекст); + + Иначе + ОбщегоНазначенияСлужебныйКлиент.ПодключитьКомпонентуОповеститьОПодключении(ПодключаемыйМодуль, Контекст); + КонецЕсли; + + Иначе + + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось подключить внешнюю компоненту ""%1"" на клиенте + |из реестра Windows + |по причине: + |Метод НачатьПодключениеВнешнейКомпоненты вернул Ложь.'"), + Контекст.Идентификатор); + + ОбщегоНазначенияСлужебныйКлиент.ПодключитьКомпонентуОповеститьОбОшибке(ТекстОшибки, Контекст); + + КонецЕсли; + +КонецПроцедуры + +// Продолжение процедуры ПодключитьКомпонентуИзРеестраWindows. +Процедура ПодключитьКомпонентуИзРеестраWindowsПриОбработкеОшибки(ИнформацияОбОшибке, СтандартнаяОбработка, Контекст) Экспорт + + СтандартнаяОбработка = Ложь; + + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось подключить внешнюю компоненту ""%1"" на клиенте + |из реестра Windows + |по причине: + |%2'"), + Контекст.Идентификатор, + КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); + + ОбщегоНазначенияСлужебныйКлиент.ПодключитьКомпонентуОповеститьОбОшибке(ТекстОшибки, Контекст); + +КонецПроцедуры + +#КонецОбласти + +#Область УстановкаВнешнейКомпоненты + +// Вызывается после подготовки длительной операцией +// +Процедура УстановитьКомпонентуПослеПодготовки(Результат, Контекст) Экспорт + + // Ответ: + // - Структура - Выполнено - результат в структуре. + // - Неопределено - Отменено пользователем. + Если Результат = Неопределено Тогда + + // Освобождаем выделенную память. + УдалитьИзВременногоХранилища(Контекст.АдресРезультатаПодготовкиКомпоненты); // Вызов сервера. + Возврат; + КонецЕсли; + + // В контексте АдресРезультата больше не нужен, теперь он актуализирован в Результат.АдресРезультата. + Контекст.Удалить("АдресРезультатаПодготовкиКомпоненты"); + + // Результат.Статус: + // - "Ошибка" - описание в ОписаниеОшибки. + // - "Выполнено" - результат в Результат.АдресРезультата. + Если Результат.Статус = "Выполнено" Тогда + + Информация = ПолучитьИзВременногоХранилища(Результат.АдресРезультата); // Вызов сервера. + + // Освобождаем выделенную память. + УдалитьИзВременногоХранилища(Результат.АдресРезультата); // Вызов сервера. + + Доступна = ПроверитьДоступностьКомпоненты(Информация); + + Если Доступна Тогда + + Контекст.Вставить("Местоположение", Информация.Местоположение); + ОбщегоНазначенияСлужебныйКлиент.УстановитьКомпоненту(Контекст); + + Иначе + + ОповещениеФормы = Новый ОписаниеОповещения( + "УстановитьКомпонентуПослеОтображенияДоступныхВидовКлиентов", ЭтотОбъект, Контекст); + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ТекстПояснения" , Контекст.ТекстПояснения); + ПараметрыФормы.Вставить("ПоддерживаемыеКлиенты", Информация); + + ОткрытьФорму("ОбщаяФорма.ДоступныеВидыКлиентовВнешнейКомпоненты", + ПараметрыФормы,,,,, ОповещениеФормы); + + КонецЕсли; + + Иначе + + // Освобождаем выделенную память. + УдалитьИзВременногоХранилища(Результат.АдресРезультата); // Вызов сервера. + + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось установить внешнюю компоненту ""%1"" на клиенте + |из хранилища внешних компонент + |по причине: + |%2'"), + Контекст.Идентификатор, + Результат.КраткоеПредставлениеОшибки); + + ОбщегоНазначенияСлужебныйКлиент.УстановитьКомпонентуОповеститьОбОшибке(ТекстОшибки, Контекст); + + КонецЕсли; + +КонецПроцедуры + +// +Процедура УстановитьКомпонентуПослеОтображенияДоступныхВидовКлиентов(Результат, Контекст) Экспорт + + ТекстОшибки = ""; + ОбщегоНазначенияСлужебныйКлиент.УстановитьКомпонентуОповеститьОбОшибке(ТекстОшибки, Контекст); + +КонецПроцедуры + +#КонецОбласти + + // Параметры: // Информация - Структура - См. функцию. // @@ -99,241 +368,6 @@ КонецФункции -#Область ПодключениеВнешнейКомпоненты - -// Вызывается после подготовки длительной операцией -// -Процедура ПодключитьКомпонентуПослеПодготовки(Результат, Контекст) Экспорт - - // Ответ: - // - Структура - Выполнено - результат в структуре. - // - Неопределено - Отменено пользователем. - Если Результат = Неопределено Тогда - - // Освобождаем выделенную память. - УдалитьИзВременногоХранилища(Контекст.АдресРезультатаПодготовкиКомпоненты); // Вызов сервера. - - Возврат; - КонецЕсли; - - // В контексте АдресРезультата больше не нужен, теперь он актуализирован в Результат.АдресРезультата. - Контекст.Удалить("АдресРезультатаПодготовкиКомпоненты"); - - // Результат.Статус: - // - "Ошибка" - описание в ОписаниеОшибки. - // - "Выполнено" - результат в Результат.АдресРезультата. - Если Результат.Статус = "Ошибка" Тогда - - // Освобождаем выделенную память. - УдалитьИзВременногоХранилища(Результат.АдресРезультата); // Вызов сервера. - - РезультатПодключения = Новый Структура; - РезультатПодключения.Вставить("Подключено" , Ложь); - РезультатПодключения.Вставить("ОписаниеОшибки", Результат.КраткоеПредставлениеОшибки); - - ВыполнитьОбработкуОповещения(Контекст.Оповещение, РезультатПодключения); - Возврат; - - КонецЕсли; - - Информация = ВнешниеКомпонентыСлужебныйВызовСервера.РезультатПодготовкиКомпонентыКПодключению( - Результат.АдресРезультата); // Вызов сервера. - - Доступна = ПроверитьДоступностьКомпоненты(Информация); - - Если Не Доступна Тогда - - ОповещениеФормы = Новый ОписаниеОповещения( - "ПодключитьКомпонентуЗавершениеНеДоступноВКлиенте", ЭтотОбъект, Контекст.Оповещение); - - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("ТекстПояснения" , Контекст.ТекстПояснения); - ПараметрыФормы.Вставить("ПоддерживаемыеКлиенты", Информация); - - ОткрытьФорму("ОбщаяФорма.ДоступныеВидыКлиентовВнешнейКомпоненты", - ПараметрыФормы,,,,, ОповещениеФормы); - - Возврат; - - КонецЕсли; - - Контекст.Вставить("Местоположение", Информация.Местоположение); - - ОбщегоНазначенияСлужебныйКлиент.ПодключитьКомпоненту(Контекст); - -КонецПроцедуры - -// -Процедура ПодключитьКомпонентуЗавершениеНеДоступноВКлиенте(Результат, Оповещение) Экспорт - - Результат = Новый Структура; - Результат.Вставить("Подключено" , Ложь); - Результат.Вставить("ОписаниеОшибки", ""); - - ВыполнитьОбработкуОповещения(Оповещение, Результат); - -КонецПроцедуры - -// Параметры: -// Контекст - Структура - контекст процедуры: -// * Оповещение - ОписаниеОповещения - . -// * Идентификатор - Строка - . -// * ИдентификаторСозданияОбъекта - Строка, Неопределено - . -// -Процедура ПодключитьКомпонентуИзРеестраWindows(Контекст) Экспорт - - Если ОбщегоНазначенияКлиентСервер.ЭтоWindowsКлиент() - И Не ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент() Тогда - - Оповещение = Новый ОписаниеОповещения( - "ПодключитьКомпонентуИзРеестраWindowsЗавершение", ЭтотОбъект, Контекст, - "ПодключитьКомпонентуЗавершениеПоОшибке", ЭтотОбъект); - - НачатьПодключениеВнешнейКомпоненты(Оповещение, "AddIn." + Контекст.Идентификатор); - Возврат; - - КонецЕсли; - - Результат = Новый Структура; - Результат.Вставить("Подключено" , Ложь); - Результат.Вставить("ОписаниеОшибки", НСтр("ru = 'Подключить компоненту из реестра Windows - |возможно только в тонком и толстом клиенте Windows'")); - - ВыполнитьОбработкуОповещения(Контекст.Оповещение, Результат); - -КонецПроцедуры - -// Продолжение процедуры ПодключитьКомпонентуИзРеестраWindows. -Процедура ПодключитьКомпонентуИзРеестраWindowsЗавершение(Подключено, Контекст) Экспорт - - Результат = Новый Структура; - Результат.Вставить("Подключено", Подключено); - - Если Не Подключено Тогда - - Результат.Вставить("ОписаниеОшибки", НСтр("ru = 'Ошибка при подключении внешней компоненты'")); - ВыполнитьОбработкуОповещения(Контекст.Оповещение, Результат); - Возврат; - - КонецЕсли; - - Попытка - - ИдентификаторСозданияОбъекта = Контекст.ИдентификаторСозданияОбъекта; - Если ИдентификаторСозданияОбъекта = Неопределено Тогда - ИдентификаторСозданияОбъекта = Контекст.Идентификатор; - КонецЕсли; - - ПодключаемыйМодуль = Новый("AddIn." + ИдентификаторСозданияОбъекта); - - Если ПодключаемыйМодуль = Неопределено Тогда - ВызватьИсключение НСтр("ru = 'Ошибка при создании экземпляра внешней компоненты'"); - КонецЕсли; - - Результат.Вставить("ПодключаемыйМодуль", ПодключаемыйМодуль); - - Исключение - Результат.Вставить("Подключено" , Ложь); - Результат.Вставить("ОписаниеОшибки", КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); - КонецПопытки; - - ВыполнитьОбработкуОповещения(Контекст.Оповещение, Результат); - -КонецПроцедуры - -// Продолжение процедуры ПодключитьКомпонентуИзРеестраWindows. -Процедура ПодключитьКомпонентуЗавершениеПоОшибке(ИнформацияОбОшибке, СтандартнаяОбработка, Контекст) Экспорт - - СтандартнаяОбработка = Ложь; - - Результат = Новый Структура; - Результат.Вставить("Подключено" , Ложь); - Результат.Вставить("ОписаниеОшибки", КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); - - ВыполнитьОбработкуОповещения(Контекст.Оповещение, Результат); - -КонецПроцедуры - -#КонецОбласти - -#Область УстановкаВнешнейКомпоненты - -// Вызывается после подготовки длительной операцией -// -Процедура УстановитьКомпонентуПослеПодготовки(Результат, Контекст) Экспорт - - // Ответ: - // - Структура - Выполнено - результат в структуре. - // - Неопределено - Отменено пользователем. - Если Результат = Неопределено Тогда - - // Освобождаем выделенную память. - УдалитьИзВременногоХранилища(Контекст.АдресРезультатаПодготовкиКомпоненты); // Вызов сервера. - - Возврат; - КонецЕсли; - - // В контексте АдресРезультата больше не нужен, теперь он актуализирован в Результат.АдресРезультата. - Контекст.Удалить("АдресРезультатаПодготовкиКомпоненты"); - - // Результат.Статус: - // - "Ошибка" - описание в ОписаниеОшибки. - // - "Выполнено" - результат в Результат.АдресРезультата. - Если Результат.Статус = "Ошибка" Тогда - - // Освобождаем выделенную память. - УдалитьИзВременногоХранилища(Результат.АдресРезультата); // Вызов сервера. - - РезультатУстановки = Новый Структура; - РезультатУстановки.Вставить("Установлено" , Ложь); - РезультатУстановки.Вставить("ОписаниеОшибки", Результат.КраткоеПредставлениеОшибки); - - ВыполнитьОбработкуОповещения(Контекст.Оповещение, РезультатУстановки); - Возврат; - - КонецЕсли; - - Информация = ПолучитьИзВременногоХранилища(Результат.АдресРезультата); // Вызов сервера. - - // Освобождаем выделенную память. - УдалитьИзВременногоХранилища(Результат.АдресРезультата); // Вызов сервера. - - Доступна = ПроверитьДоступностьКомпоненты(Информация); - - Если Не Доступна Тогда - - ОповещениеФормы = Новый ОписаниеОповещения( - "УстановитьКомпонентуЗавершениеНеДоступноВКлиенте", ЭтотОбъект, Контекст.Оповещение); - - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("ТекстПояснения" , Контекст.ТекстПояснения); - ПараметрыФормы.Вставить("ПоддерживаемыеКлиенты", Информация); - - ОткрытьФорму("ОбщаяФорма.ДоступныеВидыКлиентовВнешнейКомпоненты", - ПараметрыФормы,,,,, ОповещениеФормы); - - Возврат; - - КонецЕсли; - - Контекст.Вставить("Местоположение", Информация.Местоположение); - - ОбщегоНазначенияСлужебныйКлиент.УстановитьКомпоненту(Контекст); - -КонецПроцедуры - -// -Процедура УстановитьКомпонентуЗавершениеНеДоступноВКлиенте(Результат, Оповещение) Экспорт - - Результат = Новый Структура; - Результат.Вставить("Установлено" , Ложь); - Результат.Вставить("ОписаниеОшибки", ""); - - ВыполнитьОбработкуОповещения(Оповещение, Результат); - -КонецПроцедуры - -#КонецОбласти #Область ЗагрузкаВнешнейКомпоненты @@ -345,34 +379,38 @@ // Процедура ЗагрузитьКомпонентуИзФайла(Контекст) Экспорт - Если Не ВнешниеКомпонентыСлужебныйВызовСервера.ДоступнаЗагрузкаКомпонентыИзФайла() Тогда + Если ВнешниеКомпонентыСлужебныйВызовСервера.ДоступнаЗагрузкаКомпонентыИзФайла() Тогда + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ПоказатьДиалогЗагрузкиИзФайлаПриОткрытии", Истина); + ПараметрыФормы.Вставить("ВернутьРезультатЗагрузкиИзФайла" , Истина); + + Если Контекст.Идентификатор <> Неопределено Тогда + Ссылка = ВнешниеКомпонентыСлужебныйВызовСервера.СсылкаПоИдентификатору(Контекст.Идентификатор, Контекст.Версия); + Если Не Ссылка.Пустая() Тогда + ПараметрыФормы.Вставить("Ключ", Ссылка); + КонецЕсли; + КонецЕсли; + + Оповещение = Новый ОписаниеОповещения("ЗагрузитьКомпонентуИзФайлаПослеЗагрузки", ЭтотОбъект, Контекст); + + ОткрытьФорму("Справочник.ВнешниеКомпоненты.ФормаОбъекта", ПараметрыФормы,,,,, Оповещение); + + Иначе + + ТекстОшибки = + НСтр("ru = 'Не удалось загрузить внешнюю компоненту в хранилище внешних компонент + |по причине: + |Требуются права администратора'"); Результат = Новый Структура; Результат.Вставить("Загружено", Ложь); - Результат.Вставить("ОписаниеОшибки", НСтр("ru = 'Для загрузки компоненты требуются права администратора.'")); + Результат.Вставить("ОписаниеОшибки", ТекстОшибки); ВыполнитьОбработкуОповещения(Контекст.Оповещение, Результат); - Возврат; - КонецЕсли; - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("ПоказатьДиалогЗагрузкиИзФайлаПриОткрытии", Истина); - ПараметрыФормы.Вставить("ВернутьРезультатЗагрузкиИзФайла" , Истина); - - Если Контекст.Идентификатор <> Неопределено Тогда - Ссылка = ВнешниеКомпонентыСлужебныйВызовСервера.СсылкаПоИдентификатору(Контекст.Идентификатор, - Контекст.Версия); - Если Не Ссылка.Пустая() Тогда - ПараметрыФормы.Вставить("Ключ", Ссылка); - КонецЕсли; - КонецЕсли; - - Оповещение = Новый ОписаниеОповещения("ЗагрузитьКомпонентуИзФайлаПослеЗагрузки", ЭтотОбъект, Контекст); - - ОткрытьФорму("Справочник.ВнешниеКомпоненты.ФормаОбъекта", ПараметрыФормы,,,,, Оповещение); - КонецПроцедуры // Продолжение процедуры ЗагрузитьКомпонентуИзФайла. @@ -407,33 +445,35 @@ Контекст = Новый Структура; Контекст.Вставить("Ссылка", Ссылка); - Оповещение = Новый ОписаниеОповещения("СохранитьКомпонентуВФайлПослеУстановкиРасширения", ЭтотОбъект, Контекст); + Оповещение = Новый ОписаниеОповещения("СохранитьКомпонентуВФайлПослеПроверкиРасширенияРаботыСФайлами", + ЭтотОбъект, Контекст); ОбщегоНазначенияКлиент.ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(Оповещение); КонецПроцедуры // Продолжение процедуры СохранитьКомпонентуВФайл. -Процедура СохранитьКомпонентуВФайлПослеУстановкиРасширения(РасширениеПодключено, Контекст) Экспорт +Процедура СохранитьКомпонентуВФайлПослеПроверкиРасширенияРаботыСФайлами(РасширениеПодключено, Контекст) Экспорт Местоположение = ПолучитьНавигационнуюСсылку(Контекст.Ссылка, "ХранилищеКомпоненты"); ИмяФайла = ВнешниеКомпонентыСлужебныйВызовСервера.ИмяФайлаКомпоненты(Контекст.Ссылка); - Если Не РасширениеПодключено Тогда + Если РасширениеПодключено Тогда + + Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение); + Диалог.Заголовок = НСтр("ru = 'Выберите файл для сохранения внешней компоненты'"); + Диалог.Фильтр = НСтр("ru = 'Файлы внешних компонент (*.zip)|*.zip|Все файлы (*.*)|*.*'"); + Диалог.МножественныйВыбор = Ложь; + + ПолучаемыеФайлы = Новый Массив; + ПолучаемыеФайлы.Добавить(Новый ОписаниеПередаваемогоФайла(ИмяФайла, Местоположение)); + + Оповещение = Новый ОписаниеОповещения("СохранитьКомпонентуВФайлПослеПолученияФайлов", ЭтотОбъект, Контекст); + НачатьПолучениеФайлов(Оповещение, ПолучаемыеФайлы, Диалог); + + Иначе ПолучитьФайл(Местоположение, ИмяФайла); - Возврат; КонецЕсли; - Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение); - Диалог.Заголовок = НСтр("ru = 'Выберите файл для сохранения внешней компоненты'"); - Диалог.Фильтр = НСтр("ru = 'Файлы внешних компонент (*.zip)|*.zip|Все файлы (*.*)|*.*'"); - Диалог.МножественныйВыбор = Ложь; - - ПолучаемыеФайлы = Новый Массив; - ПолучаемыеФайлы.Добавить(Новый ОписаниеПередаваемогоФайла(ИмяФайла, Местоположение)); - - Оповещение = Новый ОписаниеОповещения("СохранитьКомпонентуВФайлПослеПолученияФайлов", ЭтотОбъект, Контекст); - НачатьПолучениеФайлов(Оповещение, ПолучаемыеФайлы, Диалог); - КонецПроцедуры // Продолжение процедуры СохранитьКомпонентуВФайл. diff --git a/SSL/src/CommonModules/ВызовОнлайнПоддержкиКлиент/Module.bsl b/SSL/src/CommonModules/ВызовОнлайнПоддержкиКлиент/Module.bsl index 6bc1623bb..406f84494 100644 --- a/SSL/src/CommonModules/ВызовОнлайнПоддержкиКлиент/Module.bsl +++ b/SSL/src/CommonModules/ВызовОнлайнПоддержкиКлиент/Module.bsl @@ -32,17 +32,18 @@ // Функция ПутьКИсполняемомуФайлуИзРеестраWindows() Экспорт - Значение = ""; - - Если НЕ ОбщегоНазначенияКлиентСервер.ЭтоWindowsКлиент() Тогда - Возврат Значение; + Если Не ОбщегоНазначенияКлиентСервер.ЭтоWindowsКлиент() Тогда + Возврат ""; КонецЕсли; #Если ВебКлиент Тогда - ЗначениеИзРеестра = ""; + Возврат ""; #Иначе + + Значение = ""; + RegProv = ПолучитьCOMОбъект("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv"); - RegProv.GetStringValue("2147483649","Software\Buhphone","ProgramPath",Значение); + RegProv.GetStringValue("2147483649","Software\Buhphone","ProgramPath", Значение); Если Значение = "" Или Значение = NULL Тогда ЗначениеИзРеестра = ""; @@ -51,6 +52,7 @@ КонецЕсли; Возврат ЗначениеИзРеестра; + #КонецЕсли КонецФункции @@ -178,46 +180,28 @@ УчетнаяЗапись = ВызовОнлайнПоддержкиВызовСервера.НастройкиУчетнойЗаписиПользователя(); ПараметрыЗапускаВызовОнлайнПоддержки = " /StartedFrom1CConf"; - Оповещение = Новый ОписаниеОповещения("ВызватьОнлайнПоддержкуПослеЗапускаПриложения", ЭтотОбъект); Если УчетнаяЗапись.ИспользоватьЛП Тогда Если УчетнаяЗапись.Логин <> "" И УчетнаяЗапись.Пароль <> "" Тогда ПараметрыЗапускаВызовОнлайнПоддержки = ПараметрыЗапускаВызовОнлайнПоддержки + " /login:" + УчетнаяЗапись.Логин + " /password:" + УчетнаяЗапись.Пароль; КонецЕсли; - Если ПутьИзХранилищаВерен Тогда - НачатьЗапускПриложения(Оповещение, ДополнительныеПараметры.ПутьИзХранилища + ПараметрыЗапускаВызовОнлайнПоддержки); - Возврат; - КонецЕсли; - - Если ДополнительныеПараметры.ПутьИзРеестраВерен Тогда - НачатьЗапускПриложения(Оповещение, ДополнительныеПараметры.ПутьИзРеестра + ПараметрыЗапускаВызовОнлайнПоддержки); - Возврат; - КонецЕсли; - - Иначе - - Если ПутьИзХранилищаВерен Тогда - НачатьЗапускПриложения(Оповещение, """" + ДополнительныеПараметры.ПутьИзХранилища + """" + ПараметрыЗапускаВызовОнлайнПоддержки); - Возврат; - КонецЕсли; - - Если ДополнительныеПараметры.ПутьИзРеестраВерен Тогда - НачатьЗапускПриложения(Оповещение, """" + ДополнительныеПараметры.ПутьИзРеестра + """" + ПараметрыЗапускаВызовОнлайнПоддержки); - Возврат; - КонецЕсли; - + КонецЕсли; + + Если ПутьИзХранилищаВерен Тогда + ОбщегоНазначенияКлиент.ЗапуститьПрограмму("""" + ДополнительныеПараметры.ПутьИзХранилища + """" + ПараметрыЗапускаВызовОнлайнПоддержки); + Возврат; + КонецЕсли; + + Если ДополнительныеПараметры.ПутьИзРеестраВерен Тогда + ОбщегоНазначенияКлиент.ЗапуститьПрограмму("""" + ДополнительныеПараметры.ПутьИзРеестра + """" + ПараметрыЗапускаВызовОнлайнПоддержки); + Возврат; КонецЕсли; ОткрытьФорму("ОбщаяФорма.ПоискИсполняемогоФайлаОнлайнПоддержки"); КонецПроцедуры -// Продолжение процедуры (см. выше). -Процедура ВызватьОнлайнПоддержкуПослеЗапускаПриложения(КодВозврата, ДополнительныеПараметры) Экспорт - // Обработка не требуется. -КонецПроцедуры - #КонецОбласти diff --git a/SSL/src/CommonModules/ВызовОнлайнПоддержкиПереопределяемый/Module.bsl b/SSL/src/CommonModules/ВызовОнлайнПоддержкиПереопределяемый/Module.bsl index c9d2c4c5e..2bc2d4cb2 100644 --- a/SSL/src/CommonModules/ВызовОнлайнПоддержкиПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ВызовОнлайнПоддержкиПереопределяемый/Module.bsl @@ -1,4 +1,4 @@ -#Область СлужебныеПроцедурыИФункции +#Область ПрограммныйИнтерфейс // Вызывается при изменении настроек кнопки запуска онлайн-поддержки. // Процедуру можно использовать для настройки видимости формы, diff --git a/SSL/src/CommonModules/ГрафикиРаботы/Module.bsl b/SSL/src/CommonModules/ГрафикиРаботы/Module.bsl index ac2d5982f..8b93347a2 100644 --- a/SSL/src/CommonModules/ГрафикиРаботы/Module.bsl +++ b/SSL/src/CommonModules/ГрафикиРаботы/Module.bsl @@ -39,7 +39,6 @@ |ГДЕ | КалендарныеГрафики.ДатаГрафика >= &ДатаОт | И КалендарныеГрафики.Календарь = &ГрафикРаботы - | И КалендарныеГрафики.ДеньВключенВГрафик | |СГРУППИРОВАТЬ ПО | КалендарныеГрафики.Год @@ -69,7 +68,6 @@ | КалендарныеГрафики.ДатаГрафика >= &ДатаОт | И КалендарныеГрафики.Год = ГОД(&ДатаОт) | И КалендарныеГрафики.Календарь = &ГрафикРаботы - | И КалендарныеГрафики.ДеньВключенВГрафик |; | |//////////////////////////////////////////////////////////////////////////////// @@ -380,6 +378,18 @@ КонецПроцедуры +// Добавляет в список блокируемых объектов справочник графиков работы, +// чтобы на время обновления производственных календарей, графики были недоступны для изменения пользователем. +// +// Параметры: +// - БлокируемыеОбъекты - массив, имена метаданных блокируемых объектов. +// +Процедура ЗаполнитьБлокируемыеОбъектыЗависимыеОтПроизводственныхКалендарей(БлокируемыеОбъекты) Экспорт + + БлокируемыеОбъекты.Добавить("Справочник.Календари"); + +КонецПроцедуры + // Создает временную таблицу ВТКалендарныеГрафики, содержащую данные графика ГрафикРаботы за годы, // приведенные в ВТРазличныеГодыГрафика. // @@ -429,18 +439,6 @@ КонецФункции -// Процедура выполняет обновление графиков работы по данным производственных календарей -// по всем областям данных. -// -Процедура ЗапланироватьОбновлениеГрафиковРаботы(Знач УсловияОбновления) Экспорт - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.КалендарныеГрафикиВМоделиСервиса") Тогда - МодульКалендарныеГрафикиСлужебныйВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("КалендарныеГрафикиСлужебныйВМоделиСервиса"); - МодульКалендарныеГрафикиСлужебныйВМоделиСервиса.ЗапланироватьОбновлениеГрафиковРаботы(УсловияОбновления); - КонецЕсли; - -КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// // Обработчики событий подсистем конфигурации. @@ -471,18 +469,6 @@ КонецПроцедуры -// См. КалендарныеГрафикиПереопределяемый.ПриОбновленииДанныхЗависимыхОтПроизводственныхКалендарей. -Процедура ПриОбновленииДанныхЗависимыхОтПроизводственныхКалендарей(ТаблицаИзменений) Экспорт - - Если ОбщегоНазначения.РазделениеВключено() Тогда - ЗапланироватьОбновлениеГрафиковРаботы(ТаблицаИзменений); - Возврат; - КонецЕсли; - - ОбновитьГрафикиРаботыПоДаннымПроизводственныхКалендарей(ТаблицаИзменений); - -КонецПроцедуры - #КонецОбласти #Область СлужебныеПроцедурыИФункции diff --git a/SSL/src/CommonModules/ДатыЗапретаИзменения/Module.bsl b/SSL/src/CommonModules/ДатыЗапретаИзменения/Module.bsl index 75f01350e..a7eaec845 100644 --- a/SSL/src/CommonModules/ДатыЗапретаИзменения/Module.bsl +++ b/SSL/src/CommonModules/ДатыЗапретаИзменения/Module.bsl @@ -36,8 +36,10 @@ // - Неопределено - если не требуется получать значение для проверки из базы данных, // а нужно проверить только данные самого объекта в ДанныеИлиПолноеИмя. // -// ОписаниеОшибки - Строка, Null - возвращаемый параметр: текстовое описание запрета изменения или загрузки. -// Если описание не требуется, то параметр указывать не нужно (Null). +// ОписаниеОшибки - Null - (значение по умолчанию) - сведения о запретах не требуются. +// - Строка - (возвращаемое значение) - вернуть текстовое описание найденных запретов. +// - Структура - (возвращаемое значение) - вернуть структурное описание найденных запретов, +// подробнее см. функцию ДатыЗапретаИзменения.НайденЗапретИзмененияДанных. // // УзелПроверкиЗапретаЗагрузки - Неопределено, ПланыОбменаСсылка - если Неопределено, то проверить запрет // изменения данных; иначе - загрузку данных из указанного узла плана обмена. @@ -123,9 +125,13 @@ // РегистрРасчетаНаборЗаписей - элемент данных или набор записей. // // УзелПроверкиЗапретаЗагрузки - ПланОбменаСсылка - узел, для которого требуется проверка. +// // Отказ - Булево - возвращаемый параметр: Истина, если загрузка запрещена. -// ОписаниеОшибки - Строка, Null - возвращаемый параметр: текстовое описание причины запрета загрузки. -// Если описание не требуется, то параметр указывать не нужно (Null). +// +// ОписаниеОшибки - Null - (значение по умолчанию) - сведения о запретах не требуются. +// - Строка - (возвращаемое значение) - вернуть текстовое описание найденных запретов. +// - Структура - (возвращаемое значение) - вернуть структурное описание найденных запретов, +// подробнее см. функцию ДатыЗапретаИзменения.НайденЗапретИзмененияДанных. // Процедура ПроверитьДатыЗапретаЗагрузкиДанных(Данные, УзелПроверкиЗапретаЗагрузки, Отказ, ОписаниеОшибки = Null) Экспорт @@ -143,7 +149,7 @@ ДополнительныеПараметры = Новый Структура; ДополнительныеПараметры.Вставить("ПроверкаЗапретаИзменения", Ложь); ДополнительныеПараметры.Вставить("УзелПроверкиЗапретаЗагрузки", УзелПроверкиЗапретаЗагрузки); - ДополнительныеПараметры.Вставить("ОписаниеОшибки", ""); + ДополнительныеПараметры.Вставить("ОписаниеОшибки", ОписаниеОшибки); ДополнительныеПараметры.Вставить("СообщитьОЗапрете", Ложь); ЭтоРегистр = ОбщегоНазначения.ЭтоРегистр(ОбъектМетаданных); @@ -168,7 +174,7 @@ // ПланВидовРасчетаОбъект, // БизнесПроцессОбъект, // ЗадачаОбъект, -// ПланОбменаОбъект +// ПланОбменаОбъект, // РегистрСведенийМенеджерЗаписи, // РегистрНакопленияМенеджерЗаписи, // РегистрБухгалтерииМенеджерЗаписи, @@ -256,8 +262,28 @@ // - Строка - подготовленное представление данных, // которое будет использовано в сообщении о запрете. // -// ОписаниеОшибки - Строка,Null - возвращаемый параметр: текстовое описание причины запрета загрузки. -// Если описание не требуется, то параметр указывать не нужно (Null). +// ОписаниеОшибки - Null - (значение по умолчанию) - сведения о запретах не требуются. +// - Строка - (возвращаемое значение) - вернуть текстовое описание найденных запретов. +// - Структура - (возвращаемое значение) - вернуть структурное описание найденных запретов: +// * ПредставлениеДанных - Строка - представление данных, используемое в заголовке ошибки. +// * ЗаголовокОшибки - Строка - строка подобная следующей: +// "Заказ 10 от 01.01.2017 невозможно изменить в запрещенном периоде.". +// * Запреты - ТаблицаЗначений - найденные запреты в виде таблицы с колонками: +// ** Дата - Дата - проверяемая дата. +// ** Раздел - Строка - имя раздела, по которому выполнялся поиск запретов, если +// пустая строка, значит выполнялся поиск даты, действующей для всех разделов. +// ** Объект - ЛюбаяСсылка - ссылка на объект, по которому выполнялся поиск даты запрета. +// - Неопределено - выполнялся поиск даты, действующей для всех объектов. +// ** ДатаЗапрета - Дата - найденная дата запрета. +// ** ОбщаяДата - Булево - если Истина, значит найденная дата запрета действует для +// всех разделов, а не только для раздела, по которому выполнялся поиск. +// ** ДляВсехОбъектов - Булево - если Истина, значит найденная дата запрета действует для +// всех объектов, а не только для объекта, по которому выполнялся поиск. +// ** Адресат - ОпределяемыйТип.АдресатЗапретаИзменения - пользователь или узел +// плана обмена, для которого задана найденная дата запрета. +// ** Описание - Строка - строка, подобная следующей: +// "Дате 01.01.2017 по объекту ""Склад программ"" раздела ""Складской учет"" соответствует +// запрет изменения данных для всех пользователей (установлена общая дата запрета)". // // УзелПроверкиЗапретаЗагрузки - Неопределено - выполнить проверку изменения данных. // - ПланыОбменаСсылка.<Имя плана обмена> - выполнить проверку @@ -288,8 +314,9 @@ Возврат Ложь; КонецЕсли; - СвойстваВстраивания = ДатыЗапретаИзмененияСлужебный.СвойстваРазделов(); - ПустойРаздел = ДатыЗапретаИзмененияСлужебныйПовтИсп.ПустойРаздел(); + СвойстваРазделов = ДействующиеДаты.СвойстваРазделов; + ПустойРаздел = ДатыЗапретаИзмененияСлужебный.ПустаяСсылка( + Тип("ПланВидовХарактеристикСсылка.РазделыДатЗапретаИзменения")); ЗаголовокОшибки = НСтр("ru = 'Ошибка в функции НайденЗапретИзмененияДанных общего модуля ДатыЗапретаИзменения.'") @@ -303,24 +330,24 @@ Строка.Раздел = ПустойРаздел; КонецЕсли; - СвойстваРаздела = ДействующиеДаты.СвойстваРазделов.Разделы.Получить(Строка.Раздел); + СвойстваРаздела = СвойстваРазделов.Разделы.Получить(Строка.Раздел); Если СвойстваРаздела = Неопределено Тогда ВызватьИсключение ЗаголовокОшибки + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'В параметре ДанныеДляПроверки указан несуществующий раздел ""%1"".'"), Строка.Раздел); КонецЕсли; - Если СвойстваВстраивания.БезРазделовИОбъектов Тогда + Если СвойстваРазделов.БезРазделовИОбъектов Тогда Строка.Раздел = ПустойРаздел; Строка.Объект = ПустойРаздел; Иначе - Если ЗначениеЗаполнено(СвойстваВстраивания.ЕдинственныйРаздел) Тогда - Строка.Раздел = СвойстваВстраивания.ЕдинственныйРаздел; + Если ЗначениеЗаполнено(СвойстваРазделов.ЕдинственныйРаздел) Тогда + Строка.Раздел = СвойстваРазделов.ЕдинственныйРаздел; Иначе Строка.Раздел = СвойстваРаздела.Ссылка; КонецЕсли; - Если СвойстваВстраивания.ВсеРазделыБезОбъектов + Если СвойстваРазделов.ВсеРазделыБезОбъектов Или Не ЗначениеЗаполнено(Строка.Объект) Тогда Строка.Объект = Строка.Раздел; @@ -458,8 +485,8 @@ И ТипЗнч(ОписаниеОшибки) <> Тип("Null") И ЗапретыИзменения.Количество() > 0 Тогда - ОписаниеОшибки = СообщениеОЗапретах(ЗапретыИзменения, - ОписаниеДанных, СвойстваВстраивания, УзелПроверкиЗапретаЗагрузки <> Неопределено); + ОписаниеОшибки = СообщениеОЗапретах(ЗапретыИзменения, ОписаниеДанных, СвойстваРазделов, + УзелПроверкиЗапретаЗагрузки <> Неопределено, ТипЗнч(ОписаниеОшибки) = Тип("Структура")); КонецЕсли; Возврат ЗапретыИзменения.Количество() > 0; @@ -485,9 +512,18 @@ // Функция ШаблонДанныхДляПроверки() Экспорт - Образец = ДатыЗапретаИзмененияСлужебныйПовтИсп.ШаблонДанныхДляПроверки(); + ДанныеДляПроверки = Новый ТаблицаЗначений; - Возврат Образец.Скопировать(); + ДанныеДляПроверки.Колонки.Добавить( + "Дата", Новый ОписаниеТипов("Дата", , , Новый КвалификаторыДаты(ЧастиДаты.Дата))); + + ДанныеДляПроверки.Колонки.Добавить( + "Раздел", Новый ОписаниеТипов("Строка,ПланВидовХарактеристикСсылка.РазделыДатЗапретаИзменения")); + + ДанныеДляПроверки.Колонки.Добавить( + "Объект", Метаданные.ПланыВидовХарактеристик.РазделыДатЗапретаИзменения.Тип); + + Возврат ДанныеДляПроверки; КонецФункции @@ -667,7 +703,7 @@ Если ДатаЗапрета = Неопределено Тогда ДатаЗапрета = Дата; Адресат = Группа; - ИначеЕсли ДатаЗапрета < Дата Тогда + ИначеЕсли Дата <> Неопределено И ДатаЗапрета < Дата Тогда ДатаЗапрета = Дата; Адресат = Группа; КонецЕсли; @@ -697,11 +733,28 @@ // Для функции НайденЗапретИзмененияДанных. Функция СообщениеОЗапретах(Запреты, ОписаниеДанных, - СвойстваВстраивания, - ПоискЗапретовЗагрузки) + СвойстваРазделов, + ПоискЗапретовЗагрузки, + СтруктурноеОписание) НоваяВерсия = ОписаниеДанных.НоваяВерсия; Текст = ПредставлениеДанных(ОписаниеДанных.Данные); + + Если СтруктурноеОписание Тогда + ОписаниеОшибки = Новый Структура; + ОписаниеОшибки.Вставить("ПредставлениеДанных", Текст); + ОписаниеОшибки.Вставить("Запреты", Новый ТаблицаЗначений); + Колонки = ОписаниеОшибки.Запреты.Колонки; + Колонки.Добавить("Дата", Новый ОписаниеТипов("Дата",,,,,Новый КвалификаторыДаты(ЧастиДаты.Дата))); + Колонки.Добавить("Раздел", Новый ОписаниеТипов("Строка",,,,Новый КвалификаторыСтроки(100, ДопустимаяДлина.Переменная))); + Колонки.Добавить("Объект", Метаданные.ПланыВидовХарактеристик.РазделыДатЗапретаИзменения.Тип); + Колонки.Добавить("ДатаЗапрета", Новый ОписаниеТипов("Дата",,,,,Новый КвалификаторыДаты(ЧастиДаты.Дата))); + Колонки.Добавить("ОбщаяДата", Новый ОписаниеТипов("Булево")); + Колонки.Добавить("ДляВсехОбъектов", Новый ОписаниеТипов("Булево")); + Колонки.Добавить("Адресат", Метаданные.ОпределяемыеТипы.АдресатЗапретаИзменения.Тип); + Колонки.Добавить("Описание", Новый ОписаниеТипов("Строка",,,,Новый КвалификаторыСтроки(1000,ДопустимаяДлина.Переменная))); + КонецЕсли; + Если ЗначениеЗаполнено(Текст) Тогда Если ПоискЗапретовЗагрузки Тогда Если НоваяВерсия Тогда @@ -719,15 +772,24 @@ Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, Текст) + Символы.ПС + Символы.ПС; КонецЕсли; + ПустойРаздел = ДатыЗапретаИзмененияСлужебный.ПустаяСсылка( + Тип("ПланВидовХарактеристикСсылка.РазделыДатЗапретаИзменения")); + + Если СтруктурноеОписание Тогда + ОписаниеОшибки.Вставить("ЗаголовокОшибки", СокрЛП(Текст)); + КонецЕсли; + ТекстОшибки = Текст; + Для Каждого Запрет Из Запреты Цикл + Текст = ""; Проверка = Запрет.Данные; Если Запрет.Раздел = Запрет.Объект Тогда - Если Запрет.Раздел = ДатыЗапретаИзмененияСлужебныйПовтИсп.ПустойРаздел() Тогда + Если Запрет.Раздел = ПустойРаздел Тогда Текст = Текст + НСтр("ru = 'Дате %1'"); Иначе Текст = Текст + НСтр("ru = 'Дате %1 по разделу ""%2""'"); КонецЕсли; - ИначеЕсли ЗначениеЗаполнено(СвойстваВстраивания.ЕдинственныйРаздел) Тогда + ИначеЕсли ЗначениеЗаполнено(СвойстваРазделов.ЕдинственныйРаздел) Тогда Текст = Текст + НСтр("ru = 'Дате %1 по объекту ""%3""'"); Иначе Текст = Текст + НСтр("ru = 'Дате %1 по объекту ""%3"" раздела ""%2""'"); @@ -757,11 +819,11 @@ Текст = Текст + НСтр("ru = 'для всех информационных баз ""%6""'"); КонецЕсли; Текст = Текст + " " + НСтр("ru = 'по %5'"); - Если НЕ СвойстваВстраивания.БезРазделовИОбъектов Тогда + Если Не СвойстваРазделов.БезРазделовИОбъектов Тогда Если ЗначениеЗаполнено(Запрет.Раздел) Тогда Если Запрет.Объект = Запрет.Раздел Тогда Текст = Текст + " " + НСтр("ru = '(запрет установлен на раздел ""%2"")'"); - ИначеЕсли ЗначениеЗаполнено(СвойстваВстраивания.ЕдинственныйРаздел) Тогда + ИначеЕсли ЗначениеЗаполнено(СвойстваРазделов.ЕдинственныйРаздел) Тогда Текст = Текст + " " + НСтр("ru = '(запрет установлен на объект ""%3"")'"); Иначе Текст = Текст + " " + НСтр("ru = '(запрет установлен на объект ""%3"" раздела ""%2"")'"); @@ -776,12 +838,31 @@ Текст = СтрЗаменить(Текст, "%4", Запрет.Адресат); Текст = СтрЗаменить(Текст, "%5", Формат(Запрет.Дата, "ДЛФ=Д")); Текст = СтрЗаменить(Текст, "%6", Запрет.Адресат.Метаданные().Представление()); - Текст = Текст + Символы.ПС; - Текст = Текст + Символы.ПС; + ТекстОшибки = ТекстОшибки + Текст + Символы.ПС + Символы.ПС; + + Если СтруктурноеОписание Тогда + СтрокаОписанияОшибки = ОписаниеОшибки.Запреты.Добавить(); + СтрокаОписанияОшибки.Дата = Проверка.Дата; + СтрокаОписанияОшибки.Раздел = СвойстваРазделов.Разделы.Получить(Проверка.Раздел).Имя; + СтрокаОписанияОшибки.Объект = ?(Проверка.Объект = Проверка.Раздел, Неопределено, Проверка.Объект); + СтрокаОписанияОшибки.ДатаЗапрета = Запрет.Дата; + СтрокаОписанияОшибки.ОбщаяДата = ?(ЗначениеЗаполнено(Запрет.Раздел), Ложь, Истина); + Если Запрет.Раздел = Запрет.Объект Тогда + СтрокаОписанияОшибки.ДляВсехОбъектов = Истина; + Иначе + СтрокаОписанияОшибки.ДляВсехОбъектов = Ложь; + КонецЕсли; + СтрокаОписанияОшибки.Адресат = Запрет.Адресат; + СтрокаОписанияОшибки.Описание = Текст; + КонецЕсли; КонецЦикла; - Возврат СокрП(Текст); + Если Не СтруктурноеОписание Тогда + ОписаниеОшибки = СокрП(ТекстОшибки); + КонецЕсли; + + Возврат ОписаниеОшибки; КонецФункции diff --git a/SSL/src/CommonModules/ДатыЗапретаИзмененияСлужебный/Module.bsl b/SSL/src/CommonModules/ДатыЗапретаИзмененияСлужебный/Module.bsl index fdfb459b5..0c06f5a4f 100644 --- a/SSL/src/CommonModules/ДатыЗапретаИзмененияСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ДатыЗапретаИзмененияСлужебный/Module.bsl @@ -330,9 +330,10 @@ // * УзелПроверкиЗапретаЗагрузки - Неопределено - (начальное значение) выполнить проверку изменения данных. // - ПланыОбменаСсылка.<Имя плана обмена> - выполнить проверку // загрузки данных для указанного узла. -// * ОписаниеОшибки - Строка - (возвращаемое значение) - описание запрета загрузки. -// - Null - в этом случае текст сообщения об ошибке не будет подготовлен, -// что ускоряет выполнение проверки, когда запрет найден. +// * ОписаниеОшибки - Null - (значение по умолчанию) - сведения о запретах не требуются. +// - Строка - (возвращаемое значение) - вернуть текстовое описание найденных запретов. +// - Структура - (возвращаемое значение) - вернуть структурное описание найденных запретов, +// подробнее см. функцию ДатыЗапретаИзменения.НайденЗапретИзмененияДанных. // * СообщитьОЗапрете - Булево - начальное значение Истина. Если указать Ложь, тогда // непустое ОписаниеОшибки не будет отправлено пользователю и // записано в журнал регистрации. @@ -465,7 +466,9 @@ Возврат Истина; КонецЕсли; - Если ОбновлениеИнформационнойБазы.ВыполняетсяОбновлениеИнформационнойБазы() Тогда + Если ОбновлениеИнформационнойБазы.ВыполняетсяОбновлениеИнформационнойБазы() + Или ОбновлениеИнформационнойБазы.ЭтоВызовИзОбработчикаОбновления() Тогда + Возврат Истина; КонецЕсли; @@ -742,10 +745,13 @@ Если НаборЗаписей.Количество() <> 0 Тогда Возврат; КонецЕсли; + + ПустойРаздел = ПустаяСсылка(Тип("ПланВидовХарактеристикСсылка.РазделыДатЗапретаИзменения")); + Запись = НаборЗаписей.Добавить(); Запись.Пользователь = Перечисления.ВидыНазначенияДатЗапрета.ДляВсехПользователей; - Запись.Раздел = ДатыЗапретаИзмененияСлужебныйПовтИсп.ПустойРаздел(); - Запись.Объект = ДатыЗапретаИзмененияСлужебныйПовтИсп.ПустойРаздел(); + Запись.Раздел = ПустойРаздел; + Запись.Объект = ПустойРаздел; Запись.ДатаЗапрета = '19791231'; Запись.Комментарий = "(" + НСтр("ru = 'По умолчанию'") + ")"; @@ -870,7 +876,7 @@ Процедура УстановитьОтносительныеДатыЗапрета() Экспорт Блокировка = Новый БлокировкаДанных; - ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ДатыЗапретаИзменения"); + Блокировка.Добавить("РегистрСведений.ДатыЗапретаИзменения"); НачатьТранзакцию(); Попытка Блокировка.Заблокировать(); @@ -914,7 +920,6 @@ КонецЕсли; СвойстваРазделов = СвойстваРазделов(); - ПустойРаздел = ПланыВидовХарактеристик.РазделыДатЗапретаИзменения.ПустаяСсылка(); ИменаПредопределенных = Метаданные.ПланыВидовХарактеристик.РазделыДатЗапретаИзменения.ПолучитьИменаПредопределенных(); @@ -930,12 +935,6 @@ |ГДЕ | Разделы.ИмяПредопределенныхДанных <> """""; - ЗаголовокОшибки = - НСтр("ru = 'Ошибка в процедуре ПреобразоватьРазделыДатЗапретаИзменения - |общего модуля ДатыЗапретаИзмененияСлужебный.'") - + Символы.ПС - + Символы.ПС; - НачатьТранзакцию(); Попытка Блокировка.Заблокировать(); @@ -1399,9 +1398,9 @@ Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ - | Константы.ВерсияДатЗапретаИзменения, - | Константы.ИспользоватьДатыЗапретаЗагрузки, - | Константы.ИспользоватьДатыЗапретаИзменения + | Константы.ВерсияДатЗапретаИзменения КАК ВерсияДатЗапретаИзменения, + | Константы.ИспользоватьДатыЗапретаЗагрузки КАК ИспользоватьДатыЗапретаЗагрузки, + | Константы.ИспользоватьДатыЗапретаИзменения КАК ИспользоватьДатыЗапретаИзменения |ИЗ | Константы КАК Константы |; @@ -1409,7 +1408,7 @@ |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ РАЗЛИЧНЫЕ | СоставыГруппПользователей.Пользователь КАК Пользователь, - | СоставыГруппПользователей.ГруппаПользователей + | СоставыГруппПользователей.ГруппаПользователей КАК ГруппаПользователей |ИЗ | РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ДатыЗапретаИзменения КАК ДатыЗапретаИзменения @@ -1423,17 +1422,17 @@ |ВЫБРАТЬ | ДатыЗапретаИзменения.Раздел КАК Раздел, | ДатыЗапретаИзменения.Объект КАК Объект, - | ДатыЗапретаИзменения.Пользователь, - | ДатыЗапретаИзменения.ОписаниеДатыЗапрета, - | ДатыЗапретаИзменения.ДатаЗапрета + | ДатыЗапретаИзменения.Пользователь КАК Пользователь, + | ДатыЗапретаИзменения.ОписаниеДатыЗапрета КАК ОписаниеДатыЗапрета, + | ДатыЗапретаИзменения.ДатаЗапрета КАК ДатаЗапрета |ИЗ | РегистрСведений.ДатыЗапретаИзменения КАК ДатыЗапретаИзменения |ГДЕ - | НЕ(ДатыЗапретаИзменения.Пользователь <> ЗНАЧЕНИЕ(Перечисление.ВидыНазначенияДатЗапрета.ДляВсехПользователей) - | И ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) <> ТИП(Справочник.Пользователи) - | И ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) <> ТИП(Справочник.ГруппыПользователей) - | И ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) <> ТИП(Справочник.ВнешниеПользователи) - | И ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) <> ТИП(Справочник.ГруппыВнешнихПользователей)) + | (ДатыЗапретаИзменения.Пользователь = ЗНАЧЕНИЕ(Перечисление.ВидыНазначенияДатЗапрета.ДляВсехПользователей) + | ИЛИ ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) = ТИП(Справочник.Пользователи) + | ИЛИ ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) = ТИП(Справочник.ГруппыПользователей) + | ИЛИ ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) = ТИП(Справочник.ВнешниеПользователи) + | ИЛИ ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) = ТИП(Справочник.ГруппыВнешнихПользователей)) |ИТОГИ ПО | Раздел, | Объект @@ -1443,9 +1442,9 @@ |ВЫБРАТЬ | ДатыЗапретаИзменения.Раздел КАК Раздел, | ДатыЗапретаИзменения.Объект КАК Объект, - | ДатыЗапретаИзменения.Пользователь, - | ДатыЗапретаИзменения.ОписаниеДатыЗапрета, - | ДатыЗапретаИзменения.ДатаЗапрета + | ДатыЗапретаИзменения.Пользователь КАК Пользователь, + | ДатыЗапретаИзменения.ОписаниеДатыЗапрета КАК ОписаниеДатыЗапрета, + | ДатыЗапретаИзменения.ДатаЗапрета КАК ДатаЗапрета |ИЗ | РегистрСведений.ДатыЗапретаИзменения КАК ДатыЗапретаИзменения |ГДЕ @@ -1504,7 +1503,6 @@ Свойства.Вставить("ДатыЗапретаЗагрузкиВнедрены", ТипыАдресатовУзлов.Количество() > 0); - ТипыАдресатов = Метаданные.ОпределяемыеТипы.АдресатЗапретаИзменения.Тип.Типы(); ПустыеСсылкиУзлов = Новый Массив; Для Каждого ТипАдресатовУзлов Из ТипыАдресатовУзлов Цикл diff --git a/SSL/src/CommonModules/ДатыЗапретаИзмененияСлужебныйПовтИсп/Module.bsl b/SSL/src/CommonModules/ДатыЗапретаИзмененияСлужебныйПовтИсп/Module.bsl index 51a2cb395..08c11fcd9 100644 --- a/SSL/src/CommonModules/ДатыЗапретаИзмененияСлужебныйПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ДатыЗапретаИзмененияСлужебныйПовтИсп/Module.bsl @@ -1,24 +1,6 @@ #Область СлужебныеПроцедурыИФункции -// См. ДатыЗапретаИзменения.ШаблонДанныхДляПроверки. -Функция ШаблонДанныхДляПроверки() Экспорт - - ДанныеДляПроверки = Новый ТаблицаЗначений; - - ДанныеДляПроверки.Колонки.Добавить( - "Дата", Новый ОписаниеТипов("Дата", , , Новый КвалификаторыДаты(ЧастиДаты.Дата))); - - ДанныеДляПроверки.Колонки.Добавить( - "Раздел", Новый ОписаниеТипов("Строка,ПланВидовХарактеристикСсылка.РазделыДатЗапретаИзменения")); - - ДанныеДляПроверки.Колонки.Добавить( - "Объект", Метаданные.ПланыВидовХарактеристик.РазделыДатЗапретаИзменения.Тип); - - Возврат ДанныеДляПроверки; - -КонецФункции - -// Возвращает сведения о последней проверки версии действующих дат запрета изменения. +// Возвращает сведения о последней проверке версии действующих дат запрета изменения. // // Возвращаемое значение: // Структура - со свойствами: @@ -30,12 +12,4 @@ КонецФункции -// Возвращает пустой раздел дат запрета. -Функция ПустойРаздел() Экспорт - - Возврат ДатыЗапретаИзмененияСлужебный.ПустаяСсылка( - Тип("ПланВидовХарактеристикСсылка.РазделыДатЗапретаИзменения")); - -КонецФункции - #КонецОбласти diff --git a/SSL/src/CommonModules/ДлительныеОперации/Module.bsl b/SSL/src/CommonModules/ДлительныеОперации/Module.bsl index 459c2fdfc..e26cfb285 100644 --- a/SSL/src/CommonModules/ДлительныеОперации/Module.bsl +++ b/SSL/src/CommonModules/ДлительныеОперации/Module.bsl @@ -2,6 +2,7 @@ // Запустить выполнение процедуры в фоновом задании, если это возможно. // При выполнении любого из следующих условий запуск выполняется не в фоне, а сразу в основном потоке: +// * если вызов выполняется в файловой базе во внешнем соединении (в этом режиме фоновые задания не поддерживаются); // * если приложение запущено в режиме отладки (параметр /C РежимОтладки) - для упрощения отладки конфигурации; // * если в файловой ИБ имеются активные фоновые задания - для снижения времени ожидания пользователя; // * если выполняется процедура модуля внешней обработки или внешнего отчета. @@ -50,6 +51,13 @@ ВызватьИсключение НСтр("ru = 'Параметры ""ВсегдаНеВФоне"" и ""ВсегдаВФоне"" |не могут одновременно принимать значение Истина в ДлительныеОперации.ВыполнитьВФоне.'"); КонецЕсли; +#Если ВнешнееСоединение Тогда + ИнформационнаяБазаФайловая = ОбщегоНазначения.ИнформационнаяБазаФайловая(); + Если ПараметрыВыполнения.БезРасширений И ИнформационнаяБазаФайловая Тогда + ВызватьИсключение НСтр("ru = 'Фоновое задание не может быть запущено с параметром ""БезРасширений"" + |в файловой информационной базе в ДлительныеОперации.ВыполнитьВФоне.'"); + КонецЕсли; +#КонецЕсли АдресРезультата = ?(ПараметрыВыполнения.АдресРезультата <> Неопределено, ПараметрыВыполнения.АдресРезультата, @@ -77,11 +85,20 @@ ПараметрыЭкспортнойПроцедуры.Добавить(Результат.АдресДополнительногоРезультата); КонецЕсли; - // Выполнить в основном потоке. - Если Не ПараметрыВыполнения.БезРасширений - И (ОбщегоНазначенияКлиентСервер.РежимОтладки() Или ПараметрыВыполнения.ЗапуститьНеВФоне +#Если ВнешнееСоединение Тогда + ВыполнитьБезФоновогоЗадания = ИнформационнаяБазаФайловая + Или ОбщегоНазначенияКлиентСервер.РежимОтладки() Или ПараметрыВыполнения.ЗапуститьНеВФоне Или (ЕстьФоновыеЗаданияВФайловойИБ() И Не ПараметрыВыполнения.ЗапуститьВФоне) - Или Не ВозможноВыполнитьВФоне(ИмяПроцедуры)) Тогда + Или Не ВозможноВыполнитьВФоне(ИмяПроцедуры); +#Иначе + ВыполнитьБезФоновогоЗадания = Не ПараметрыВыполнения.БезРасширений + И (ОбщегоНазначенияКлиентСервер.РежимОтладки() Или ПараметрыВыполнения.ЗапуститьНеВФоне + Или (ЕстьФоновыеЗаданияВФайловойИБ() И Не ПараметрыВыполнения.ЗапуститьВФоне) + Или Не ВозможноВыполнитьВФоне(ИмяПроцедуры)); +#КонецЕсли + + // Выполнить в основном потоке. + Если ВыполнитьБезФоновогоЗадания Тогда Попытка ВыполнитьПроцедуру(ИмяПроцедуры, ПараметрыЭкспортнойПроцедуры); Результат.Статус = "Выполнено"; @@ -97,8 +114,7 @@ // Выполнить в фоне. Попытка - Задание = ЗапуститьФоновоеЗаданиеСКонтекстомКлиента(ИмяПроцедуры, - ПараметрыВыполнения, ПараметрыЭкспортнойПроцедуры); + Задание = ЗапуститьФоновоеЗаданиеСКонтекстомКлиента(ИмяПроцедуры, ПараметрыВыполнения, ПараметрыЭкспортнойПроцедуры); Исключение Результат.Статус = "Ошибка"; Если Задание <> Неопределено И Задание.ИнформацияОбОшибке <> Неопределено Тогда @@ -175,7 +191,7 @@ Результат = Новый Структура; Результат.Вставить("ИдентификаторФормы", ИдентификаторФормы); Результат.Вставить("ДополнительныйРезультат", Ложь); - Результат.Вставить("ОжидатьЗавершение", ?(ПолучитьСкоростьКлиентскогоСоединения() = СкоростьКлиентскогоСоединения.Низкая, 4, 2)); + Результат.Вставить("ОжидатьЗавершение", ?(ПолучитьСкоростьКлиентскогоСоединения() = СкоростьКлиентскогоСоединения.Низкая, 4, 0.8)); Результат.Вставить("НаименованиеФоновогоЗадания", ""); Результат.Вставить("КлючФоновогоЗадания", ""); Результат.Вставить("АдресРезультата", Неопределено); @@ -236,92 +252,6 @@ КонецФункции -// Запускает выполнение процедуры в фоновом задании. -// Является менее функциональным аналогом ВыполнитьВФоне, предусмотрена для обратной совместимости. -// -// Параметры: -// ИдентификаторФормы - УникальныйИдентификатор - идентификатор формы, -// из которой выполняется запуск длительной операции. -// ИмяЭкспортнойПроцедуры - Строка - имя экспортной процедуры, -// которую необходимо выполнить в фоне. -// Параметры - Структура - все необходимые параметры для -// выполнения процедуры ИмяЭкспортнойПроцедуры. -// НаименованиеЗадания - Строка - наименование фонового задания. -// Если не задано, то будет равно ИмяЭкспортнойПроцедуры. -// ИспользоватьДополнительноеВременноеХранилище - Булево - признак использования -// дополнительного временного хранилища для передачи данных -// в родительский сеанс из фонового задания. По умолчанию - Ложь. -// -// Возвращаемое значение: -// Структура - параметры выполнения задания: -// * АдресХранилища - Строка - адрес временного хранилища, в которое будет -// помещен результат работы задания; -// * АдресХранилищаДополнительный - Строка - адрес дополнительного временного хранилища, -// в которое будет помещен результат работы задания (доступно только если -// установлен параметр ИспользоватьДополнительноеВременноеХранилище); -// * ИдентификаторЗадания - УникальныйИдентификатор - уникальный идентификатор запущенного фонового задания; -// * ЗаданиеВыполнено - Булево - Истина если задание было успешно выполнено за время вызова функции. -// -Функция ЗапуститьВыполнениеВФоне(Знач ИдентификаторФормы, Знач ИмяЭкспортнойПроцедуры, Знач Параметры, - Знач НаименованиеЗадания = "", ИспользоватьДополнительноеВременноеХранилище = Ложь) Экспорт - - АдресХранилища = ПоместитьВоВременноеХранилище(Неопределено, ИдентификаторФормы); - - Результат = Новый Структура; - Результат.Вставить("АдресХранилища", АдресХранилища); - Результат.Вставить("ЗаданиеВыполнено", Ложь); - Результат.Вставить("ИдентификаторЗадания", Неопределено); - - Если Не ЗначениеЗаполнено(НаименованиеЗадания) Тогда - НаименованиеЗадания = ИмяЭкспортнойПроцедуры; - КонецЕсли; - - ПараметрыЭкспортнойПроцедуры = Новый Массив; - ПараметрыЭкспортнойПроцедуры.Добавить(Параметры); - ПараметрыЭкспортнойПроцедуры.Добавить(АдресХранилища); - - Если ИспользоватьДополнительноеВременноеХранилище Тогда - АдресХранилищаДополнительный = ПоместитьВоВременноеХранилище(Неопределено, ИдентификаторФормы); - ПараметрыЭкспортнойПроцедуры.Добавить(АдресХранилищаДополнительный); - КонецЕсли; - - ЗапущеноЗаданий = 0; - Если ОбщегоНазначения.ИнформационнаяБазаФайловая() - И Не ОбновлениеИнформационнойБазы.НеобходимоОбновлениеИнформационнойБазы() Тогда - Отбор = Новый Структура; - Отбор.Вставить("Состояние", СостояниеФоновогоЗадания.Активно); - ЗапущеноЗаданий = ФоновыеЗадания.ПолучитьФоновыеЗадания(Отбор).Количество(); - КонецЕсли; - - Если ОбщегоНазначенияКлиентСервер.РежимОтладки() - Или ЗапущеноЗаданий > 0 Тогда - ОбщегоНазначения.ВыполнитьМетодКонфигурации(ИмяЭкспортнойПроцедуры, ПараметрыЭкспортнойПроцедуры); - Результат.ЗаданиеВыполнено = Истина; - Иначе - ВремяОжидания = ?(ПолучитьСкоростьКлиентскогоСоединения() = СкоростьКлиентскогоСоединения.Низкая, 4, 2); - ПараметрыВыполнения = ПараметрыВыполненияВФоне(Неопределено); - ПараметрыВыполнения.НаименованиеФоновогоЗадания = НаименованиеЗадания; - Задание = ЗапуститьФоновоеЗаданиеСКонтекстомКлиента(ИмяЭкспортнойПроцедуры, - ПараметрыВыполнения, ПараметрыЭкспортнойПроцедуры); - Попытка - Задание.ОжидатьЗавершения(ВремяОжидания); - Исключение - // Специальная обработка не требуется, возможно исключение вызвано истечением времени ожидания. - КонецПопытки; - - Статус = ОперацияВыполнена(Задание.УникальныйИдентификатор); - Результат.ЗаданиеВыполнено = Статус.Статус = "Выполнено"; - Результат.ИдентификаторЗадания = Задание.УникальныйИдентификатор; - КонецЕсли; - - Если ИспользоватьДополнительноеВременноеХранилище Тогда - Результат.Вставить("АдресХранилищаДополнительный", АдресХранилищаДополнительный); - КонецЕсли; - - Возврат Результат; - -КонецФункции - // Отменяет выполнение фонового задания по переданному идентификатору. // // Параметры: @@ -445,6 +375,98 @@ КонецФункции +#Область УстаревшиеПроцедурыИФункции + +// Устарела. Следует использовать ВыполнитьВФоне. +// +// Запускает выполнение процедуры в фоновом задании. +// Является менее функциональным аналогом ВыполнитьВФоне, предусмотрена для обратной совместимости. +// +// Параметры: +// ИдентификаторФормы - УникальныйИдентификатор - идентификатор формы, +// из которой выполняется запуск длительной операции. +// ИмяЭкспортнойПроцедуры - Строка - имя экспортной процедуры, +// которую необходимо выполнить в фоне. +// Параметры - Структура - все необходимые параметры для +// выполнения процедуры ИмяЭкспортнойПроцедуры. +// НаименованиеЗадания - Строка - наименование фонового задания. +// Если не задано, то будет равно ИмяЭкспортнойПроцедуры. +// ИспользоватьДополнительноеВременноеХранилище - Булево - признак использования +// дополнительного временного хранилища для передачи данных +// в родительский сеанс из фонового задания. По умолчанию - Ложь. +// +// Возвращаемое значение: +// Структура - параметры выполнения задания: +// * АдресХранилища - Строка - адрес временного хранилища, в которое будет +// помещен результат работы задания; +// * АдресХранилищаДополнительный - Строка - адрес дополнительного временного хранилища, +// в которое будет помещен результат работы задания (доступно только если +// установлен параметр ИспользоватьДополнительноеВременноеХранилище); +// * ИдентификаторЗадания - УникальныйИдентификатор - уникальный идентификатор запущенного фонового задания; +// * ЗаданиеВыполнено - Булево - Истина если задание было успешно выполнено за время вызова функции. +// +Функция ЗапуститьВыполнениеВФоне(Знач ИдентификаторФормы, Знач ИмяЭкспортнойПроцедуры, Знач Параметры, + Знач НаименованиеЗадания = "", ИспользоватьДополнительноеВременноеХранилище = Ложь) Экспорт + + АдресХранилища = ПоместитьВоВременноеХранилище(Неопределено, ИдентификаторФормы); + + Результат = Новый Структура; + Результат.Вставить("АдресХранилища", АдресХранилища); + Результат.Вставить("ЗаданиеВыполнено", Ложь); + Результат.Вставить("ИдентификаторЗадания", Неопределено); + + Если Не ЗначениеЗаполнено(НаименованиеЗадания) Тогда + НаименованиеЗадания = ИмяЭкспортнойПроцедуры; + КонецЕсли; + + ПараметрыЭкспортнойПроцедуры = Новый Массив; + ПараметрыЭкспортнойПроцедуры.Добавить(Параметры); + ПараметрыЭкспортнойПроцедуры.Добавить(АдресХранилища); + + Если ИспользоватьДополнительноеВременноеХранилище Тогда + АдресХранилищаДополнительный = ПоместитьВоВременноеХранилище(Неопределено, ИдентификаторФормы); + ПараметрыЭкспортнойПроцедуры.Добавить(АдресХранилищаДополнительный); + КонецЕсли; + + ЗапущеноЗаданий = 0; + Если ОбщегоНазначения.ИнформационнаяБазаФайловая() + И Не ОбновлениеИнформационнойБазы.НеобходимоОбновлениеИнформационнойБазы() Тогда + Отбор = Новый Структура; + Отбор.Вставить("Состояние", СостояниеФоновогоЗадания.Активно); + ЗапущеноЗаданий = ФоновыеЗадания.ПолучитьФоновыеЗадания(Отбор).Количество(); + КонецЕсли; + + Если ОбщегоНазначенияКлиентСервер.РежимОтладки() + Или ЗапущеноЗаданий > 0 Тогда + ОбщегоНазначения.ВыполнитьМетодКонфигурации(ИмяЭкспортнойПроцедуры, ПараметрыЭкспортнойПроцедуры); + Результат.ЗаданиеВыполнено = Истина; + Иначе + ВремяОжидания = ?(ПолучитьСкоростьКлиентскогоСоединения() = СкоростьКлиентскогоСоединения.Низкая, 4, 2); + ПараметрыВыполнения = ПараметрыВыполненияВФоне(Неопределено); + ПараметрыВыполнения.НаименованиеФоновогоЗадания = НаименованиеЗадания; + Задание = ЗапуститьФоновоеЗаданиеСКонтекстомКлиента(ИмяЭкспортнойПроцедуры, + ПараметрыВыполнения, ПараметрыЭкспортнойПроцедуры); + Попытка + Задание.ОжидатьЗавершения(ВремяОжидания); + Исключение + // Специальная обработка не требуется, возможно исключение вызвано истечением времени ожидания. + КонецПопытки; + + Статус = ОперацияВыполнена(Задание.УникальныйИдентификатор); + Результат.ЗаданиеВыполнено = Статус.Статус = "Выполнено"; + Результат.ИдентификаторЗадания = Задание.УникальныйИдентификатор; + КонецЕсли; + + Если ИспользоватьДополнительноеВременноеХранилище Тогда + Результат.Вставить("АдресХранилищаДополнительный", АдресХранилищаДополнительный); + КонецЕсли; + + Возврат Результат; + +КонецФункции + +#КонецОбласти + #КонецОбласти #Область СлужебныйПрограммныйИнтерфейс @@ -688,7 +710,8 @@ // Функция ПрочитатьПрогрессИСообщения(Знач ИдентификаторЗадания, Знач Режим = "ПрогрессИСообщения") - Результат = Новый Структура("Сообщения, Прогресс", Новый Массив, Неопределено); + Сообщения = Новый ФиксированныйМассив(Новый Массив); + Результат = Новый Структура("Сообщения, Прогресс", Сообщения, Неопределено); Задание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(ИдентификаторЗадания); Если Задание = Неопределено Тогда diff --git a/SSL/src/CommonModules/ДлительныеОперацииГлобальный/Module.bsl b/SSL/src/CommonModules/ДлительныеОперацииГлобальный/Module.bsl index 80013f1c8..acc7d6c34 100644 --- a/SSL/src/CommonModules/ДлительныеОперацииГлобальный/Module.bsl +++ b/SSL/src/CommonModules/ДлительныеОперацииГлобальный/Module.bsl @@ -81,7 +81,6 @@ Интервал = 120; Для каждого Операция Из АктивныеДлительныеОперации Цикл Интервал = Макс(Мин(Интервал, Операция.Значение.Контроль - ТекущаяДата), 1); - ЕстьАктивныеОперации = Истина; КонецЦикла; ПодключитьОбработчикОжидания("КонтрольДлительныхОпераций", Интервал, Истина); diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработки/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработки/Module.bsl index 12bf52064..23ca1da07 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработки/Module.bsl +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработки/Module.bsl @@ -547,7 +547,7 @@ СтрокаТаблицы.ПолноеИмя = ДополнительныеОтчетыИОбработкиКлиентСервер.ИдентификаторРабочегоСтола(); СтрокаТаблицы.Ссылка = Справочники.ИдентификаторыОбъектовМетаданных.ПустаяСсылка(); СтрокаТаблицы.Вид = "Подсистема"; - СтрокаТаблицы.Представление = НСтр("ru = 'Рабочий стол'"); + СтрокаТаблицы.Представление = НСтр("ru = 'Начальная страница'"); Иначе СтрокаТаблицы.ПолноеИмя = ОбъектМетаданных.ПолноеИмя(); СтрокаТаблицы.Ссылка = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ОбъектМетаданных); @@ -739,7 +739,7 @@ КонецЕсли; Запрос.УстановитьПараметр("Вид", ВидОбработок); - Если Пользователи.РолиДоступны("ДобавлениеИзменениеДополнительныхОтчетовИОбработок") Тогда + Если ПравоДоступа("Изменение", Метаданные.Справочники.ДополнительныеОтчетыИОбработки) Тогда ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "Публикация = &Публикация", "Публикация <> &Публикация"); Запрос.УстановитьПараметр("Публикация", Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.Отключена); Иначе @@ -949,7 +949,7 @@ Если Подсистема = Неопределено Или Не ПравоДоступа("Просмотр", Подсистема) Или Не ОбщегоНазначения.ОбъектМетаданныхДоступенПоФункциональнымОпциям(Подсистема) Тогда - Разделы = МодульТекущиеДелаСервер.РазделыДляОбъекта("Справочник.ДополнительныеОтчетыИОбработки2"); + Разделы = МодульТекущиеДелаСервер.РазделыДляОбъекта("Справочник.ДополнительныеОтчетыИОбработки"); Иначе Разделы = Новый Массив; Разделы.Добавить(Подсистема); @@ -2163,7 +2163,7 @@ Функция ПредставлениеРаздела(Раздел) Экспорт Если Раздел = ДополнительныеОтчетыИОбработкиКлиентСервер.ИдентификаторРабочегоСтола() Или Раздел = Справочники.ИдентификаторыОбъектовМетаданных.ПустаяСсылка() Тогда - Возврат НСтр("ru = 'Рабочий стол'"); + Возврат НСтр("ru = 'Начальная страница'"); Иначе Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Раздел ""%1""'"), @@ -2198,7 +2198,7 @@ Результат = Пользователи.ЭтоПолноправныйПользователь(, Истина); Иначе - Результат = Пользователи.РолиДоступны("ДобавлениеИзменениеДополнительныхОтчетовИОбработок"); + Результат = ПравоДоступа("Изменение", Метаданные.Справочники.ДополнительныеОтчетыИОбработки); КонецЕсли; КонецЕсли; @@ -2739,19 +2739,12 @@ //////////////////////////////////////////////////////////////////////////////// // Выгрузка отчетов и обработок конфигурации в файлы внешних отчетов и обработок. -Функция ВыгрузитьОтчетыИОбработкиВФайлы(ОтчетыИОбработки) - ОтчетыИОбработки.Колонки.Добавить("ДвоичныеДанные"); +Процедура ВыгрузитьОтчетыИОбработкиВФайлы(ОтчетыИОбработки) - // /DumpConfigFiles <каталог выгрузки> [-Module] [-Template] [-Help] [-AllWritable] - выгрузка свойств объектов - // метаданных конфигурации. - // <Каталог выгрузки> - каталог расположения файлов свойств; - // Module - признак необходимости выгрузки модулей; - // Template - признак необходимости выгрузки шаблонов; - // Help - признак необходимости выгрузки справочной информации; - // AllWritable - признак выгрузки свойств только доступных для записи объектов. + ОтчетыИОбработки.Колонки.Добавить("ДвоичныеДанные"); Кавычка = """"; Параметры = Новый Структура; - Параметры.Вставить("РабочийКаталог", СтандартныеПодсистемыСервер.СоздатьКаталогВременныхФайлов("ARADP")); + Параметры.Вставить("РабочийКаталог", ОбщегоНазначения.СоздатьВременныйКаталог("ARADP")); КлючЗапуска = " /DumpConfigToFiles " + Кавычка + Параметры.РабочийКаталог + Кавычка; Выгрузка = ПакетныйЗапускКонфигуратора(Параметры, КлючЗапуска); Если Не Выгрузка.Успех Тогда @@ -2821,14 +2814,6 @@ КонецЕсли; КонецЕсли; - // /LoadExternalDataProcessorOrReportFromFiles <ПутьКФайлуВыгрузки> <ПутьКОбработке> - // - создание внешних отчетов и обработок из XML. - // <ПутьКФайлуВыгрузки> - путь к файлу в формате XML, из которого требуется создать внешний отчет или обработку. - // <ПутьКОбработке> - путь к файлу внешней обработки (.epf) или отчета (.erf), в который будет записан результат - // загрузки из XML-файла. - // Дополнительно можно указать адрес строки подключения к информационной базе, например, с помощью параметра /IBName. - // При этом, если во внешней обработке есть внешние ссылки, они будут разрешаться относительно указанной - // информационной базы. Если информационная база не указана, внешние ссылки разрешаться не будут. ПолноеИмяФайла = Параметры.РабочийКаталог + СтрокаТаблицы.ИмяФайла; КлючЗапуска = " /LoadExternalDataProcessorOrReportFromFiles " + Кавычка + ПолноеИмяСхемыОбъекта + Кавычка + " " + Кавычка + ПолноеИмяФайла + Кавычка; СозданиеОбработки = ПакетныйЗапускКонфигуратора(Параметры, КлючЗапуска); @@ -2842,11 +2827,11 @@ КонецЦикла; Если Параметры.КаталогКопии1CD <> Неопределено Тогда - СтандартныеПодсистемыСервер.ОчиститьКаталогВременныхФайлов(Параметры.КаталогКопии1CD); + ОбщегоНазначения.УдалитьВременныйКаталог(Параметры.КаталогКопии1CD); КонецЕсли; - СтандартныеПодсистемыСервер.ОчиститьКаталогВременныхФайлов(Параметры.РабочийКаталог); + ОбщегоНазначения.УдалитьВременныйКаталог(Параметры.РабочийКаталог); -КонецФункции +КонецПроцедуры Функция ПакетныйЗапускКонфигуратора(Параметры, КлючЗапуска) Результат = Новый Структура("Успех, Кратко, Подробно", Ложь, "", ""); @@ -2897,25 +2882,24 @@ РезультатЗапуска = ОбщегоНазначенияКлиентСервер.ЗапуститьПрограмму(СтрокаКоманды, ПараметрыЗапускаКоманды); КодВозврата = РезультатЗапуска.КодВозврата; - Если КодВозврата = 0 Тогда Результат.Успех = Истина; - Иначе - Результат.Кратко = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не удалось выгрузить конфигурацию в XML (код ошибки ""%1"")'"), - КодВозврата); - Если ФайлСуществует(ИмяФайлаСообщений) Тогда - ЧтениеТекста = Новый ЧтениеТекста(ИмяФайлаСообщений, , , , Ложь); - Сообщения = СокрЛП(ЧтениеТекста.Прочитать()); - ЧтениеТекста.Закрыть(); - Если Сообщения <> "" Тогда - Результат.Подробно = СтрЗаменить(Символы.ПС + Сообщения, Символы.ПС, Символы.ПС + Символы.Таб); - КонецЕсли; - КонецЕсли; + Возврат Результат; КонецЕсли; - СтандартныеПодсистемыСервер.ОчиститьКаталогВременныхФайлов(ИмяФайлаСообщений); + Результат.Кратко = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось выгрузить конфигурацию в XML (код ошибки ""%1"")'"), + КодВозврата); + Если ФайлСуществует(ИмяФайлаСообщений) Тогда + ЧтениеТекста = Новый ЧтениеТекста(ИмяФайлаСообщений, , , , Ложь); + Сообщения = СокрЛП(ЧтениеТекста.Прочитать()); + ЧтениеТекста.Закрыть(); + Если Сообщения <> "" Тогда + Результат.Подробно = СтрЗаменить(Символы.ПС + Сообщения, Символы.ПС, Символы.ПС + Символы.Таб); + КонецЕсли; + КонецЕсли; Возврат Результат; + КонецФункции Функция ФайлСуществует(ПолноеИмяФайла) @@ -3068,7 +3052,7 @@ // Удаление неактуальных заданий. Для Каждого КлючИЗначение Из ПоискЗаданий Цикл Попытка - Задание = РегламентныеЗадания.НайтиПоУникальномуИдентификатору(КлючИЗначение.Значение); + Задание = РегламентныеЗаданияСервер.Задание(КлючИЗначение.Значение); Задание.Удалить(); Исключение ЗаписьЖурналаРегистрации( @@ -3494,7 +3478,7 @@ | И Таблица.ПометкаУдаления = ЛОЖЬ"; Запрос.УстановитьПараметр("ИОМы", ИОМы); Запрос.УстановитьПараметр("Вид", Перечисления.ВидыДополнительныхОтчетовИОбработок.ЗаполнениеОбъекта); - Если Пользователи.РолиДоступны("ДобавлениеИзменениеДополнительныхОтчетовИОбработок") Тогда + Если ПравоДоступа("Изменение", Метаданные.Справочники.ДополнительныеОтчетыИОбработки) Тогда Запрос.Текст = СтрЗаменить(Запрос.Текст, "И Таблица.Публикация = ЗНАЧЕНИЕ(Перечисление.ВариантыПубликацииДополнительныхОтчетовИОбработок.Используется)", ""); Иначе Запрос.Текст = СтрЗаменить(Запрос.Текст, "И Таблица.Публикация <> ЗНАЧЕНИЕ(Перечисление.ВариантыПубликацииДополнительныхОтчетовИОбработок.Отключена)", ""); diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежимеИнтерфейс/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежимеИнтерфейс/Module.bsl index f5e13e1d3..ada9a0a87 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежимеИнтерфейс/Module.bsl +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежимеИнтерфейс/Module.bsl @@ -680,6 +680,7 @@ #Область СлужебныеПроцедурыИФункции +// Устарела. Функция СоздатьТипСообщения(Знач ИспользуемыйПакет, Знач Тип) Если ИспользуемыйПакет = Неопределено Тогда @@ -690,6 +691,7 @@ КонецФункции +// Устарела. Функция ДобавитьЭтап(Сценарий, Знач ВидЭтапа, Знач ИмяМетода, Знач СохранениеРезультата = "") Этап = Сценарий.Добавить(); @@ -704,6 +706,7 @@ КонецФункции +// Устарела. Процедура ДобавитьПараметр(Этап, Знач ВидПараметра, Знач Значение = Неопределено) Параметр = Этап.Параметры.Добавить(); @@ -714,6 +717,7 @@ КонецПроцедуры +// Устарела. // Преобразовывает разрешения из формата 2.1.3 в формат 2.2.2. // Функция ПреобразоватьРазрешенияВерсии_2_1_3_ВРазрешенияВерсии_2_2_2(Знач ДополнительныйОтчетИлиОбработка, Знач Разрешения) Экспорт @@ -795,6 +799,7 @@ КонецФункции +// Устарела. Функция ИдентификаторCOMКлассаВРежимеОбратнойСовместимости(Знач ProgId) ПоддерживаемыеИдентификаторы = ИдентификаторыCOMКлассовВРежимеОбратнойСовместимости(); @@ -816,6 +821,7 @@ КонецФункции +// Устарела. Функция ИдентификаторыCOMКлассовВРежимеОбратнойСовместимости() Результат = Новый Соответствие(); diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежимеСлужебный/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежимеСлужебный/Module.bsl index 0942ad686..4549ce34f 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежимеСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежимеСлужебный/Module.bsl @@ -180,10 +180,9 @@ КонецФункции // Только для внутреннего использования. -Функция ВыполнитьСценарийБезопасногоРежима(Знач КлючСессии, Знач Сценарий, Знач ИсполняемыйОбъект, ПараметрыВыполнения, СохраняемыеПараметры = Неопределено, ОбъектыНазначения = Неопределено) Экспорт +Процедура ВыполнитьСценарийБезопасногоРежима(Знач КлючСессии, Знач Сценарий, Знач ИсполняемыйОбъект, ПараметрыВыполнения, СохраняемыеПараметры = Неопределено, ОбъектыНазначения = Неопределено) Экспорт Исключения = ДополнительныеОтчетыИОбработкиВБезопасномРежимеПовтИсп.ПолучитьРазрешенныеМетоды(); - ВременныеФайлыДляУдаления = Новый Массив; Если СохраняемыеПараметры = Неопределено Тогда СохраняемыеПараметры = Новый Структура(); @@ -266,15 +265,15 @@ КонецЕсли; Если Не ПустаяСтрока(ШагСценария.СохранениеРезультата) Тогда - Результат = Вычислить(ИсполняемыйФрагмент); + Результат = ОбщегоНазначения.ВычислитьВБезопасномРежиме(ИсполняемыйФрагмент); СохраняемыеПараметры.Вставить(ШагСценария.СохранениеРезультата, Результат); Иначе - Выполнить(ИсполняемыйФрагмент); + ОбщегоНазначения.ВыполнитьВБезопасномРежиме(ИсполняемыйФрагмент); КонецЕсли; КонецЦикла; -КонецФункции +КонецПроцедуры // Только для внутреннего использования. Функция СформироватьПредставлениеРазрешений(Знач Разрешения) Экспорт diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиКлиент/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиКлиент/Module.bsl index 735cefefe..45c635ca3 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиКлиент/Module.bsl +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиКлиент/Module.bsl @@ -267,7 +267,7 @@ // ДополнительныеОтчетыИОбработки.ПриПолученииКомандПечати. // Форма - УправляемаяФорма - форма, в которой выполняется команда печати. // -Функция ВыполнитьНазначаемуюКомандуПечати(ВыполняемаяКоманда, Форма) Экспорт +Процедура ВыполнитьНазначаемуюКомандуПечати(ВыполняемаяКоманда, Форма) Экспорт // Перенос дополнительных параметров, переданных этой подсистемой, в корень структуры. Для Каждого КлючИЗначение Из ВыполняемаяКоманда.ДополнительныеПараметры Цикл @@ -288,7 +288,7 @@ ВыполнитьОткрытиеПечатнойФормы(ВыполняемаяКоманда, Форма, ВыполняемаяКоманда.ОбъектыПечати); КонецЕсли; -КонецФункции +КонецПроцедуры // Обработчик команды, открывающей список команд дополнительных отчетов и обработок. // diff --git a/SSL/src/CommonModules/ЖурналРегистрации/Module.bsl b/SSL/src/CommonModules/ЖурналРегистрации/Module.bsl index b8d7bb1d7..f62a099a4 100644 --- a/SSL/src/CommonModules/ЖурналРегистрации/Module.bsl +++ b/SSL/src/CommonModules/ЖурналРегистрации/Module.bsl @@ -61,10 +61,8 @@ // Процедура ПрочитатьСобытияЖурналаРегистрации(ПараметрыОтчета, АдресХранилища) Экспорт - Журнал = ПараметрыОтчета.Журнал; ОтборЖурналаНаКлиенте = ПараметрыОтчета.ОтборЖурналаРегистрации; КоличествоСобытий = ПараметрыОтчета.КоличествоПоказываемыхСобытий; - УникальныйИдентификатор = ПараметрыОтчета.УникальныйИдентификатор; МенеджерВладельца = ПараметрыОтчета.МенеджерВладельца; ДобавлятьДополнительныеКолонки = ПараметрыОтчета.ДобавлятьДополнительныеКолонки; diff --git a/SSL/src/CommonModules/ЖурналРегистрацииКлиент/Module.bsl b/SSL/src/CommonModules/ЖурналРегистрацииКлиент/Module.bsl index e075b91ae..22c4ae3d3 100644 --- a/SSL/src/CommonModules/ЖурналРегистрацииКлиент/Module.bsl +++ b/SSL/src/CommonModules/ЖурналРегистрацииКлиент/Module.bsl @@ -207,7 +207,7 @@ // Параметры: // ТекущиеДанные - Строка таблицы значений. // ТекущийЭлемент - Текущий элемент строки таблицы значений. -// ОтборЖурналаРегистрации - Отбор - отбор журнала регистрации. +// ОтборЖурналаРегистрации - Структура - отбор журнала регистрации. // КолонкиИсключения - Список значений - колонки исключения. // // Возвращаемое значение: diff --git a/SSL/src/CommonModules/ЗагрузкаДанныхИзФайла/Module.bsl b/SSL/src/CommonModules/ЗагрузкаДанныхИзФайла/Module.bsl index aedbe547a..bf0fa4dd2 100644 --- a/SSL/src/CommonModules/ЗагрузкаДанныхИзФайла/Module.bsl +++ b/SSL/src/CommonModules/ЗагрузкаДанныхИзФайла/Module.bsl @@ -1,20 +1,21 @@ #Область ПрограммныйИнтерфейс -// Функция - Заполнить описание колонок. +// Возвращает описание колонок табличной части или таблицы значений. // // Параметры: -// Таблица - Строка, ТаблицаЗначений - Для типа строка, Полное имя табличной части, как в метаданных. -// Колонки - Строка - Список извлекаемых колонок, разделенный запятыми. +// Таблица - Строка, ТаблицаЗначений - Таблица с колонками. Для получения списка колонок табличной части, +// необходимо указать его полное имя строкой, как в метаданных, например "Документы.СчетНаОплату.ТабличныеЧасти.Товары". +// Колонки - Строка - Список извлекаемых колонок, разделенный запятыми. Например, "Номер, Товар, Количество". // // Возвращаемое значение: -// Массив - Структура с описание колонок для макета. +// Массив - Структура с описание колонок для макета. см. ЗагрузкаДанныхИзФайлаКлиентСервер.ОписаниеКолонкиМакета. // Функция СформироватьОписаниеКолонок(Таблица, Колонки = Неопределено) Экспорт ИзвлекатьНеВсеКолонки = Ложь; Если Колонки <> Неопределено Тогда СписокКолонокДляИзвлечения = СтрРазделить(Колонки, ",", Ложь); - ИзвлекатьВсеКолонки = Истина; + ИзвлекатьНеВсеКолонки = Истина; КонецЕсли; СписокКолонок = Новый Массив; diff --git a/SSL/src/CommonModules/ЗащитаПерсональныхДанных/Module.bsl b/SSL/src/CommonModules/ЗащитаПерсональныхДанных/Module.bsl index fad55a04b..99447556d 100644 --- a/SSL/src/CommonModules/ЗащитаПерсональныхДанных/Module.bsl +++ b/SSL/src/CommonModules/ЗащитаПерсональныхДанных/Module.bsl @@ -512,7 +512,8 @@ Функция ОписаниеДанныхОрганизации() Экспорт ДанныеОрганизации = Новый Структура( - "АдресОрганизации, + "НаименованиеОрганизации, + |АдресОрганизации, |ОтветственныйЗаОбработкуПерсональныхДанных"); Возврат ДанныеОрганизации; diff --git a/SSL/src/CommonModules/ЗащитаПерсональныхДанныхКлиент/Module.bsl b/SSL/src/CommonModules/ЗащитаПерсональныхДанныхКлиент/Module.bsl index 2a56249e5..4c8217c70 100644 --- a/SSL/src/CommonModules/ЗащитаПерсональныхДанныхКлиент/Module.bsl +++ b/SSL/src/CommonModules/ЗащитаПерсональныхДанныхКлиент/Module.bsl @@ -26,12 +26,13 @@ #Область СлужебныйПрограммныйИнтерфейс +// Клиентский обработчик печати +// Функция ПечатьСогласияНаОбработкуПерсональныхДанных(ПараметрыПечати) Экспорт ИмяМенеджераПечати = ПараметрыПечати.МенеджерПечати; ИмяМакета = ПараметрыПечати.Идентификатор; СоставДокументов = ПараметрыПечати.ОбъектыПечати; - ФормаИсточник = ПараметрыПечати.Форма; МакетИДанныеОбъекта = УправлениеПечатьюВызовСервера.МакетыИДанныеОбъектовДляПечати(ИмяМенеджераПечати, ИмяМакета, СоставДокументов); @@ -39,6 +40,8 @@ НапечататьСогласиеНаОбработкуПерсональныхДанныхСубъекта(Согласие, МакетИДанныеОбъекта, ИмяМакета); КонецЦикла; + Возврат Неопределено; + КонецФункции #КонецОбласти diff --git a/SSL/src/CommonModules/ЗащитаПерсональныхДанныхПовтИсп/Module.bsl b/SSL/src/CommonModules/ЗащитаПерсональныхДанныхПовтИсп/Module.bsl index 04a933cd8..46e420f0b 100644 --- a/SSL/src/CommonModules/ЗащитаПерсональныхДанныхПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ЗащитаПерсональныхДанныхПовтИсп/Module.bsl @@ -1,22 +1,5 @@ #Область СлужебныеПроцедурыИФункции -// Функция определяет перечень событий журнала регистрации -// в соответствии с требованиями 152-ФЗ. -// -Функция СписокКонтролируемыхСобытий152ФЗ() Экспорт - - СписокСобытий = Новый СписокЗначений; - СписокСобытий.Добавить("_$Access$_.Access", НСтр("ru = 'Доступ. Доступ'")); - СписокСобытий.Добавить("_$Access$_.AccessDenied", НСтр("ru = 'Доступ. Отказ в доступе'")); - СписокСобытий.Добавить("_$Session$_.Authentication", НСтр("ru = 'Сеанс. Аутентификация'")); - СписокСобытий.Добавить("_$Session$_.AuthenticationError", НСтр("ru = 'Сеанс. Ошибка аутентификации'")); - СписокСобытий.Добавить("_$Session$_.Start", НСтр("ru = 'Сеанс. Начало'")); - СписокСобытий.Добавить("_$Session$_.Finish", НСтр("ru = 'Сеанс. Завершение'")); - - Возврат СписокСобытий; - -КонецФункции - // Функция формирует структуру, необходимую для установки индекса картинки // в таблице событий журнала регистрации. // @@ -30,22 +13,7 @@ НомераКартинок.Вставить("_$Access$_.Access", 5); НомераКартинок.Вставить("_$Access$_.AccessDenied", 6); - Возврат НомераКартинок; - -КонецФункции - -// Функция определяет перечень контролируемых приложений системы -// в соответствии с требованиями 152-ФЗ. -// -Функция СписокКонтролируемыхПриложений152ФЗ() Экспорт - - СписокПриложений = Новый Массив; - СписокПриложений.Добавить("1CV8"); // И идентификатор приложения 1С:Предприятие в режиме запуска "Толстый клиент"; - СписокПриложений.Добавить("1CV8C"); // И идентификатор приложения 1С:Предприятие в режиме запуска "Тонкий клиент"; - СписокПриложений.Добавить("WebClient"); // И идентификатор приложения 1С:Предприятие в режиме запуска "Веб-клиент"; - СписокПриложений.Добавить("Designer"); // И идентификатор приложения Конфигуратор; - - Возврат СписокПриложений; + Возврат Новый ФиксированноеСоответствие(НомераКартинок); КонецФункции diff --git a/SSL/src/CommonModules/ИнтеграцияПодсистемБСП/Module.bsl b/SSL/src/CommonModules/ИнтеграцияПодсистемБСП/Module.bsl index 41e721847..290a4fb8d 100644 --- a/SSL/src/CommonModules/ИнтеграцияПодсистемБСП/Module.bsl +++ b/SSL/src/CommonModules/ИнтеграцияПодсистемБСП/Module.bsl @@ -420,7 +420,7 @@ КонецПроцедуры -// См. ОбщегоНазначенияПереопределяемый.ПараметрыРаботыКлиентаПриЗапуске. +// См. ОбщегоНазначенияПереопределяемый.ПриДобавленииПараметровРаботыКлиентаПриЗапуске. Процедура ПриДобавленииПараметровРаботыКлиентаПриЗапуске(Параметры) Экспорт ИнтеграцияСТехнологиейСервиса.ПриДобавленииПараметровРаботыКлиентаПриЗапуске(Параметры); @@ -494,7 +494,7 @@ КонецПроцедуры -// См. ОбщегоНазначенияПереопределяемый.ПараметрыРаботыКлиента. +// См. ОбщегоНазначенияПереопределяемый.ПриДобавленииПараметровРаботыКлиента. Процедура ПриДобавленииПараметровРаботыКлиента(Параметры) Экспорт ИнтеграцияСТехнологиейСервиса.ПриДобавленииПараметровРаботыКлиента(Параметры); @@ -632,8 +632,8 @@ КонецЕсли; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОтчетОДвиженияхДокумента") Тогда - МодульОтчетОДвиженияхДокумента = ОбщегоНазначения.ОбщийМодуль("Отчеты.ОтчетОДвиженияхДокумента"); - МодульОтчетОДвиженияхДокумента.ПриНастройкеВариантовОтчетов(Настройки); + МодульДвиженияДокумента = ОбщегоНазначения.ОбщийМодуль("Отчеты.ДвиженияДокумента"); + МодульДвиженияДокумента.ПриНастройкеВариантовОтчетов(Настройки); КонецЕсли; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОценкаПроизводительности") Тогда @@ -661,8 +661,8 @@ Процедура ПередДобавлениемКомандОтчетов(КомандыОтчетов, НастройкиФормы, СтандартнаяОбработка) Экспорт Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОтчетОДвиженияхДокумента") Тогда - МодульОтчетОДвиженияхДокумента = ОбщегоНазначения.ОбщийМодуль("Отчеты.ОтчетОДвиженияхДокумента"); - МодульОтчетОДвиженияхДокумента.ПередДобавлениемКомандОтчетов(КомандыОтчетов, НастройкиФормы, СтандартнаяОбработка); + МодульДвиженияДокумента = ОбщегоНазначения.ОбщийМодуль("Отчеты.ДвиженияДокумента"); + МодульДвиженияДокумента.ПередДобавлениемКомандОтчетов(КомандыОтчетов, НастройкиФормы, СтандартнаяОбработка); КонецЕсли; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтрольВеденияУчета") Тогда @@ -2165,6 +2165,12 @@ МодульКонтрольВеденияУчетаСлужебный.ПриЗаполненииСпискаТекущихДел(ТекущиеДела); КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЦентрМониторинга") Тогда + МодульЦентрМониторингаСлужебный = ОбщегоНазначения.ОбщийМодуль("ЦентрМониторингаСлужебный"); + МодульЦентрМониторингаСлужебный.ПриЗаполненииСпискаТекущихДел(ТекущиеДела); + КонецЕсли; + + КонецПроцедуры #КонецОбласти diff --git a/SSL/src/CommonModules/ИнтеграцияСТехнологиейСервиса/Module.bsl b/SSL/src/CommonModules/ИнтеграцияСТехнологиейСервиса/Module.bsl index fa89bbbcd..f1cb52ff2 100644 --- a/SSL/src/CommonModules/ИнтеграцияСТехнологиейСервиса/Module.bsl +++ b/SSL/src/CommonModules/ИнтеграцияСТехнологиейСервиса/Module.bsl @@ -260,7 +260,7 @@ КонецПроцедуры -// См. ОбщегоНазначенияПереопределяемый.ПараметрыРаботыКлиентаПриЗапуске. +// См. ОбщегоНазначенияПереопределяемый.ПриДобавленииПараметровРаботыКлиентаПриЗапуске. Процедура ПриДобавленииПараметровРаботыКлиентаПриЗапуске(Параметры) Экспорт Если ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.БазоваяФункциональность") Тогда @@ -270,7 +270,7 @@ КонецПроцедуры -// См. ОбщегоНазначенияПереопределяемый.ПараметрыРаботыКлиента. +// См. ОбщегоНазначенияПереопределяемый.ПриДобавленииПараметровРаботыКлиента. Процедура ПриДобавленииПараметровРаботыКлиента(Параметры) Экспорт Если ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.БазоваяФункциональность") Тогда diff --git a/SSL/src/CommonModules/ИнформацияПриЗапуске/Module.bsl b/SSL/src/CommonModules/ИнформацияПриЗапуске/Module.bsl index aee420a6a..db4226de9 100644 --- a/SSL/src/CommonModules/ИнформацияПриЗапуске/Module.bsl +++ b/SSL/src/CommonModules/ИнформацияПриЗапуске/Module.bsl @@ -87,7 +87,7 @@ КонецПроцедуры -// См. ОбщегоНазначенияПереопределяемый.ПараметрыРаботыКлиентаПриЗапуске. +// См. ОбщегоНазначенияПереопределяемый.ПриДобавленииПараметровРаботыКлиентаПриЗапуске. Процедура ПриДобавленииПараметровРаботыКлиентаПриЗапуске(Параметры) Экспорт Параметры.Вставить("ИнформацияПриЗапуске", Новый ФиксированнаяСтруктура(ГлобальныеНастройки())); КонецПроцедуры @@ -322,7 +322,7 @@ // Извлекает пакет файлов из макета обработки ИнформацияПриЗапуске. Функция ИзвлечьФайлыПакета(НосительМакетов, ИмяМакета) Экспорт - КаталогВременныхФайлов = СтандартныеПодсистемыСервер.СоздатьКаталогВременныхФайлов("extras"); + КаталогВременныхФайлов = ОбщегоНазначения.СоздатьВременныйКаталог("extras"); // Извлечение страницы АрхивПолноеИмя = КаталогВременныхФайлов + "tmp.zip"; @@ -396,7 +396,7 @@ КонецЦикла; // Удаление временных файлов (все файлы были помещены во временные хранилища). - СтандартныеПодсистемыСервер.ОчиститьКаталогВременныхФайлов(КаталогВременныхФайлов); + ОбщегоНазначения.УдалитьВременныйКаталог(КаталогВременныхФайлов); Результат = Новый Структура; Результат.Вставить("Картинки", Картинки); diff --git a/SSL/src/CommonModules/КалендарныеГрафики/Module.bsl b/SSL/src/CommonModules/КалендарныеГрафики/Module.bsl index 90784b98b..46ae4437e 100644 --- a/SSL/src/CommonModules/КалендарныеГрафики/Module.bsl +++ b/SSL/src/CommonModules/КалендарныеГрафики/Module.bsl @@ -521,14 +521,6 @@ МодульКалендарныеГрафики = ОбщегоНазначения.ОбщийМодуль("Обработки.ЗаполнениеКалендарныхГрафиков"); Возврат МодульКалендарныеГрафики.ОсновнойПроизводственныйКалендарь(); - ПроизводственныйКалендарь = Справочники.ПроизводственныеКалендари.НайтиПоКоду("РФ"); - - Если ПроизводственныйКалендарь.Пустая() Тогда - Возврат Неопределено; - КонецЕсли; - - Возврат ПроизводственныйКалендарь; - КонецФункции #Область УстаревшиеПроцедурыИФункции @@ -698,16 +690,16 @@ КалендарныеГрафикиПереопределяемый.ПриОбновленииПроизводственныхКалендарей(ТаблицаИзменений); - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ГрафикиРаботы") Тогда - МодульГрафикиРаботы = ОбщегоНазначения.ОбщийМодуль("ГрафикиРаботы"); - МодульГрафикиРаботы.ПриОбновленииДанныхЗависимыхОтПроизводственныхКалендарей(ТаблицаИзменений); - КонецЕсли; - Если ОбщегоНазначения.РазделениеВключено() Тогда ЗапланироватьОбновлениеДанныхЗависимыхОтПроизводственныхКалендарей(ТаблицаИзменений); Возврат; КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ГрафикиРаботы") Тогда + МодульГрафикиРаботы = ОбщегоНазначения.ОбщийМодуль("ГрафикиРаботы"); + МодульГрафикиРаботы.ОбновитьГрафикиРаботыПоДаннымПроизводственныхКалендарей(ТаблицаИзменений); + КонецЕсли; + КалендарныеГрафикиПереопределяемый.ПриОбновленииДанныхЗависимыхОтПроизводственныхКалендарей(ТаблицаИзменений); КонецПроцедуры @@ -745,20 +737,26 @@ Обработчик.ОбщиеДанные = Истина; Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "2.4.3.35"; + Обработчик.Версия = "2.4.4.111"; Обработчик.Процедура = "КалендарныеГрафики.ОбновитьПроизводственныеКалендари"; Обработчик.РежимВыполнения = "Оперативно"; Обработчик.ОбщиеДанные = Истина; Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "2.4.3.168"; + Обработчик.Версия = "2.4.4.112"; + Обработчик.Процедура = "КалендарныеГрафики.ОбновитьДанныеЗависимыхПроизводственныхКалендарей"; + Обработчик.РежимВыполнения = "Оперативно"; + Обработчик.ОбщиеДанные = Истина; + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "2.4.4.143"; Обработчик.Процедура = "КалендарныеГрафики.ОбновитьДанныеПроизводственныхКалендарей"; Обработчик.РежимВыполнения = "Оперативно"; Обработчик.ОбщиеДанные = Истина; Если Не ОбщегоНазначения.РазделениеВключено() Тогда Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "2.4.3.168"; + Обработчик.Версия = "2.4.4.143"; Обработчик.Процедура = "КалендарныеГрафики.ОбновитьДанныеЗависимыеОтПроизводственныхКалендарей"; Обработчик.ОчередьОтложеннойОбработки = 1; Обработчик.ПроцедураЗаполненияДанныхОбновления = "КалендарныеГрафики.ЗаполнитьДанныеОбновленияДанныхЗависимыхОтПроизводственныхКалендарей"; @@ -766,8 +764,10 @@ Обработчик.ЗапускатьИВПодчиненномУзлеРИБСФильтрами = Истина; Обработчик.ЧитаемыеОбъекты = "РегистрСведений.ДанныеПроизводственногоКалендаря"; Обработчик.ИзменяемыеОбъекты = "РегистрСведений.ДанныеПроизводственногоКалендаря"; + Обработчик.ПроцедураПроверки = "ОбновлениеИнформационнойБазы.ДанныеОбновленыНаНовуюВерсиюПрограммы"; Обработчик.Идентификатор = Новый УникальныйИдентификатор("b1082291-b482-418f-82ab-3c96e93072cc"); - Обработчик.Комментарий = НСтр("ru = 'Обновление данных, зависимых от производственных календарей.'"); + Обработчик.Комментарий = НСтр("ru = 'Обновление графиков работы и др. данных, зависимых от производственных календарей.'"); + ЗаполнитьБлокируемыеОбъектыЗависимыеОтПроизводственныхКалендарей(Обработчик); КонецЕсли; КонецПроцедуры @@ -863,23 +863,90 @@ // Обновляем данные производственных календарей. ТаблицаИзменений = Справочники.ПроизводственныеКалендари.ОбновитьДанныеПроизводственныхКалендарей(ТаблицаДанных); - Если Не ОбщегоНазначения.РазделениеВключено() Тогда - ПараметрыОбработчика = ОбновлениеИнформационнойБазыСлужебный.ПараметрыОтложенногоОбработчикаОбновления( - "КалендарныеГрафики.ОбновитьДанныеЗависимыеОтПроизводственныхКалендарей"); - Если ПараметрыОбработчика <> Неопределено И ПараметрыОбработчика.Свойство("ТаблицаИзменений") Тогда - ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(ТаблицаИзменений, ПараметрыОбработчика.ТаблицаИзменений); - КонецЕсли; - ПараметрыОбработчика = Новый Структура("ТаблицаИзменений"); - ПараметрыОбработчика.ТаблицаИзменений = ТаблицаИзменений; - ОбновлениеИнформационнойБазыСлужебный.ЗаписатьПараметрыОтложенногоОбработчикаОбновления( - "КалендарныеГрафики.ОбновитьДанныеЗависимыеОтПроизводственныхКалендарей", ПараметрыОбработчика); - Иначе - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ГрафикиРаботы") Тогда - МодульГрафикиРаботы = ОбщегоНазначения.ОбщийМодуль("ГрафикиРаботы"); - МодульГрафикиРаботы.ЗапланироватьОбновлениеГрафиковРаботы(ТаблицаИзменений); - КонецЕсли; + Если ОбщегоНазначения.РазделениеВключено() Тогда ЗапланироватьОбновлениеДанныхЗависимыхОтПроизводственныхКалендарей(ТаблицаИзменений); + Возврат; КонецЕсли; + + ПараметрыОбработчика = ОбновлениеИнформационнойБазыСлужебный.ПараметрыОтложенногоОбработчикаОбновления( + "КалендарныеГрафики.ОбновитьДанныеЗависимыеОтПроизводственныхКалендарей"); + Если ПараметрыОбработчика <> Неопределено И ПараметрыОбработчика.Свойство("ТаблицаИзменений") Тогда + ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(ТаблицаИзменений, ПараметрыОбработчика.ТаблицаИзменений); + КонецЕсли; + + ПараметрыОбработчика = Новый Структура("ТаблицаИзменений"); + ПараметрыОбработчика.ТаблицаИзменений = ТаблицаИзменений; + ОбновлениеИнформационнойБазыСлужебный.ЗаписатьПараметрыОтложенногоОбработчикаОбновления( + "КалендарныеГрафики.ОбновитьДанныеЗависимыеОтПроизводственныхКалендарей", ПараметрыОбработчика); + +КонецПроцедуры + +// Обновляет данные зависимых производственных календарей от базовых. +// +Процедура ОбновитьДанныеЗависимыхПроизводственныхКалендарей() Экспорт + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("Год", 2018); + Запрос.Текст = + "ВЫБРАТЬ + | ЗависимыеКалендари.Ссылка КАК Календарь, + | ЗависимыеКалендари.БазовыйКалендарь КАК БазовыйКалендарь + |ПОМЕСТИТЬ ВТЗависимыеКалендари + |ИЗ + | Справочник.ПроизводственныеКалендари КАК ЗависимыеКалендари + |ГДЕ + | ЗависимыеКалендари.БазовыйКалендарь <> ЗНАЧЕНИЕ(Справочник.ПроизводственныеКалендари.ПустаяСсылка) + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ РАЗЛИЧНЫЕ + | ДанныеКалендарей.ПроизводственныйКалендарь КАК ПроизводственныйКалендарь, + | ДанныеКалендарей.Год КАК Год + |ПОМЕСТИТЬ ВТГодыКалендарей + |ИЗ + | РегистрСведений.ДанныеПроизводственногоКалендаря КАК ДанныеКалендарей + |ГДЕ + | ДанныеКалендарей.Год >= &Год + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ РАЗЛИЧНЫЕ + | ЗависимыеКалендари.БазовыйКалендарь КАК БазовыйКалендарь, + | ЗависимыеКалендари.БазовыйКалендарь.Код КАК КодПроизводственногоКалендаря, + | ДанныеБазовыхКалендарей.Год КАК Год + |ИЗ + | ВТЗависимыеКалендари КАК ЗависимыеКалендари + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТГодыКалендарей КАК ДанныеБазовыхКалендарей + | ПО (ДанныеБазовыхКалендарей.ПроизводственныйКалендарь = ЗависимыеКалендари.БазовыйКалендарь) + | ЛЕВОЕ СОЕДИНЕНИЕ ВТГодыКалендарей КАК ДанныеЗависимогоКалендаря + | ПО (ДанныеЗависимогоКалендаря.ПроизводственныйКалендарь = ЗависимыеКалендари.Календарь) + | И (ДанныеЗависимогоКалендаря.Год = ДанныеБазовыхКалендарей.Год) + |ГДЕ + | ДанныеЗависимогоКалендаря.Год ЕСТЬ NULL"; + + РезультатЗапроса = Запрос.Выполнить(); + Если РезультатЗапроса.Пустой() Тогда + Возврат; + КонецЕсли; + + ТаблицаИзменений = РезультатЗапроса.Выгрузить(); + Справочники.ПроизводственныеКалендари.ОбновитьДанныеЗависимыхПроизводственныхКалендарей(ТаблицаИзменений); + + Если ОбщегоНазначения.РазделениеВключено() Тогда + ЗапланироватьОбновлениеДанныхЗависимыхОтПроизводственныхКалендарей(ТаблицаИзменений); + Возврат; + КонецЕсли; + + ПараметрыОбработчика = ОбновлениеИнформационнойБазыСлужебный.ПараметрыОтложенногоОбработчикаОбновления( + "КалендарныеГрафики.ОбновитьДанныеЗависимыеОтПроизводственныхКалендарей"); + Если ПараметрыОбработчика <> Неопределено И ПараметрыОбработчика.Свойство("ТаблицаИзменений") Тогда + ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(ТаблицаИзменений, ПараметрыОбработчика.ТаблицаИзменений); + КонецЕсли; + + ПараметрыОбработчика = Новый Структура("ТаблицаИзменений"); + ПараметрыОбработчика.ТаблицаИзменений = ТаблицаИзменений; + ОбновлениеИнформационнойБазыСлужебный.ЗаписатьПараметрыОтложенногоОбработчикаОбновления( + "КалендарныеГрафики.ОбновитьДанныеЗависимыеОтПроизводственныхКалендарей", ПараметрыОбработчика); КонецПроцедуры @@ -910,6 +977,21 @@ КонецПроцедуры +Процедура ЗаполнитьБлокируемыеОбъектыЗависимыеОтПроизводственныхКалендарей(Обработчик) + + БлокируемыеОбъекты = Новый Массив; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ГрафикиРаботы") Тогда + МодульГрафикиРаботы = ОбщегоНазначения.ОбщийМодуль("ГрафикиРаботы"); + МодульГрафикиРаботы.ЗаполнитьБлокируемыеОбъектыЗависимыеОтПроизводственныхКалендарей(БлокируемыеОбъекты); + КонецЕсли; + + КалендарныеГрафикиПереопределяемый.ПриЗаполненииБлокируемыхОбъектовЗависимыхОтПроизводственныхКалендарей(БлокируемыеОбъекты); + + Обработчик.БлокируемыеОбъекты = СтрСоединить(БлокируемыеОбъекты, ","); + +КонецПроцедуры + // Процедура выполняет обновление данных, зависимых от производственных календарей, // по всем областям данных. // diff --git a/SSL/src/CommonModules/КалендарныеГрафикиПереопределяемый/Module.bsl b/SSL/src/CommonModules/КалендарныеГрафикиПереопределяемый/Module.bsl index 832ae0f5b..d4782ca11 100644 --- a/SSL/src/CommonModules/КалендарныеГрафикиПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/КалендарныеГрафикиПереопределяемый/Module.bsl @@ -24,4 +24,15 @@ КонецПроцедуры +// Вызывается при регистрации отложенного обработчика обновления данных, зависимых от производственных календарей. +// В БлокируемыеОбъекты следует добавить имена метаданных объектов, +// которые следует заблокировать от использования на период обновления производственных календарей. +// +// Параметры: +// БлокируемыеОбъекты - Массив - имена метаданных блокируемых объектов. +// +Процедура ПриЗаполненииБлокируемыхОбъектовЗависимыхОтПроизводственныхКалендарей(БлокируемыеОбъекты) Экспорт + +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/CommonModules/КалендарныеГрафикиСлужебныйВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/КалендарныеГрафикиСлужебныйВМоделиСервиса/Module.bsl index 30178a59e..cc099e35d 100644 --- a/SSL/src/CommonModules/КалендарныеГрафикиСлужебныйВМоделиСервиса/Module.bsl +++ b/SSL/src/CommonModules/КалендарныеГрафикиСлужебныйВМоделиСервиса/Module.bsl @@ -72,33 +72,15 @@ // Вызывается при изменении производственных календарей. // -Процедура ЗапланироватьОбновлениеГрафиковРаботы(Знач УсловияОбновления) Экспорт +Процедура ЗапланироватьОбновлениеДанныхЗависимыхОтПроизводственныхКалендарей(Знач УсловияОбновления) Экспорт ПараметрыМетода = Новый Массив; ПараметрыМетода.Добавить(УсловияОбновления); ПараметрыМетода.Добавить(Новый УникальныйИдентификатор); ПараметрыЗадания = Новый Структура; - ПараметрыЗадания.Вставить("ИмяМетода" , "КалендарныеГрафикиСлужебныйВМоделиСервиса.ОбновитьГрафикиРаботы"); - ПараметрыЗадания.Вставить("Параметры" , ПараметрыМетода); - ПараметрыЗадания.Вставить("КоличествоПовторовПриАварийномЗавершении", 3); - ПараметрыЗадания.Вставить("ОбластьДанных", -1); - - УстановитьПривилегированныйРежим(Истина); - ОчередьЗаданий.ДобавитьЗадание(ПараметрыЗадания); - -КонецПроцедуры - -// Вызывается при изменении производственных календарей. -// -Процедура ЗапланироватьОбновлениеДанныхЗависимыхОтПроизводственныхКалендарей(Знач УсловияОбновления) Экспорт - - ПараметрыМетода = Новый Массив; - ПараметрыМетода.Добавить(УсловияОбновления); - - ПараметрыЗадания = Новый Структура; - ПараметрыЗадания.Вставить("ИмяМетода" , "КалендарныеГрафикиПереопределяемый.ПриОбновленииДанныхЗависимыхОтПроизводственныхКалендарей"); - ПараметрыЗадания.Вставить("Параметры" , ПараметрыМетода); + ПараметрыЗадания.Вставить("ИмяМетода", "КалендарныеГрафикиСлужебныйВМоделиСервиса.ОбновитьДанныеЗависимыеОтПроизводственныхКалендарей"); + ПараметрыЗадания.Вставить("Параметры", ПараметрыМетода); ПараметрыЗадания.Вставить("КоличествоПовторовПриАварийномЗавершении", 3); ПараметрыЗадания.Вставить("ОбластьДанных", -1); @@ -120,8 +102,7 @@ // См. ОчередьЗаданийПереопределяемый.ПриОпределенииПсевдонимовОбработчиков. Процедура ПриОпределенииПсевдонимовОбработчиков(СоответствиеИменПсевдонимам) Экспорт - СоответствиеИменПсевдонимам.Вставить("КалендарныеГрафикиСлужебныйВМоделиСервиса.ОбновитьГрафикиРаботы"); - СоответствиеИменПсевдонимам.Вставить("КалендарныеГрафикиПереопределяемый.ПриОбновленииДанныхЗависимыхОтПроизводственныхКалендарей"); + СоответствиеИменПсевдонимам.Вставить("КалендарныеГрафикиСлужебныйВМоделиСервиса.ОбновитьДанныеЗависимыеОтПроизводственныхКалендарей"); КонецПроцедуры @@ -149,41 +130,34 @@ КонецПроцедуры -// Процедура для вызова из очереди заданий, помещается туда в ЗапланироватьОбновлениеГрафиковРаботы. +// Процедура для вызова из очереди заданий, помещается туда в ЗапланироватьОбновлениеДанныхЗависимыхОтПроизводственныхКалендарей. // // Параметры: // УсловияОбновления - ТаблицаЗначений с условиями обновления графиков. // ИдентификаторФайла - УникальныйИдентификатор файла обрабатываемых поставляемых данных. // -Процедура ОбновитьГрафикиРаботы(Знач УсловияОбновления, Знач ИдентификаторФайла) Экспорт +Процедура ОбновитьДанныеЗависимыеОтПроизводственныхКалендарей(Знач УсловияОбновления, Знач ИдентификаторФайла) Экспорт - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ГрафикиРаботы") Тогда + // Получение областей данных для обработки. + ОбластиДляОбновления = ПоставляемыеДанные.ОбластиТребующиеОбработки( + ИдентификаторФайла, "ДанныеПроизводственныхКалендарей"); - МодульГрафикиРаботы = ОбщегоНазначения.ОбщийМодуль("ГрафикиРаботы"); - - // Получение областей данных для обработки. - ОбластиДляОбновления = ПоставляемыеДанные.ОбластиТребующиеОбработки( - ИдентификаторФайла, "ДанныеПроизводственныхКалендарей"); - - // Обновление графиков работы по областям данных. - РаспространитьДанныеПроизводственныхКалендарейПоГрафикамРаботы(УсловияОбновления, ОбластиДляОбновления, - ИдентификаторФайла, "ДанныеПроизводственныхКалендарей", МодульГрафикиРаботы); - - КонецЕсли; + // Обновление графиков работы по областям данных. + РаспространитьДанныеПроизводственныхКалендарейПоЗависимымДанным(УсловияОбновления, ОбластиДляОбновления, + ИдентификаторФайла, "ДанныеПроизводственныхКалендарей"); КонецПроцедуры -// Заполняет данные графика работы по данным производственного календаря по всем ОД. +// Заполняет данные, зависимые от производственных календарей, по данным производственного календаря по всем ОД. // // Параметры: -// ДатаКурсов - Дата или Неопределено. Курсы добавляются за указанную дату либо за все время. // УсловияОбновления - ТаблицаЗначений с условиями обновления графиков. // ОбластиДляОбновления - Массив со списком кодов областей. // ИдентификаторФайла - УникальныйИдентификатор файла обрабатываемых курсов. // КодОбработчика - Строка, код обработчика. // -Процедура РаспространитьДанныеПроизводственныхКалендарейПоГрафикамРаботы(Знач УсловияОбновления, - Знач ОбластиДляОбновления, Знач ИдентификаторФайла, Знач КодОбработчика, Знач МодульГрафикиРаботы) +Процедура РаспространитьДанныеПроизводственныхКалендарейПоЗависимымДанным(Знач УсловияОбновления, + Знач ОбластиДляОбновления, Знач ИдентификаторФайла, Знач КодОбработчика) УсловияОбновления.Свернуть("КодПроизводственногоКалендаря, Год"); @@ -197,7 +171,12 @@ Попытка - МодульГрафикиРаботы.ОбновитьГрафикиРаботыПоДаннымПроизводственныхКалендарей(УсловияОбновления); + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ГрафикиРаботы") Тогда + МодульГрафикиРаботы = ОбщегоНазначения.ОбщийМодуль("ГрафикиРаботы"); + МодульГрафикиРаботы.ОбновитьГрафикиРаботыПоДаннымПроизводственныхКалендарей(УсловияОбновления); + КонецЕсли; + КалендарныеГрафикиПереопределяемый.ПриОбновленииДанныхЗависимыхОтПроизводственныхКалендарей(УсловияОбновления); + ПоставляемыеДанные.ОбластьОбработана(ИдентификаторФайла, КодОбработчика, ОбластьДанных); ЗафиксироватьТранзакцию(); diff --git a/SSL/src/CommonModules/КонтрольВеденияУчета/Module.bsl b/SSL/src/CommonModules/КонтрольВеденияУчета/Module.bsl index 26f8ca09d..4bf715580 100644 --- a/SSL/src/CommonModules/КонтрольВеденияУчета/Module.bsl +++ b/SSL/src/CommonModules/КонтрольВеденияУчета/Module.bsl @@ -3,33 +3,81 @@ //////////////////////////////////////////////////////////////////////////////// // Процедуры и функции по выполнению проверок ведению учета и получению их результатов. -// Выполняет проверку системы согласно переданных параметров. +// Выполняет указанную проверку ведения учета с заданными параметрами. // // Параметры: -// Проверка - СправочникСсылка.ПравилаПроверкиУчета - Ссылка на правило проверки, -// которая будет выполняться. +// Проверка - СправочникСсылка.ПравилаПроверкиУчета, Строка - правило проверки, +// которая будет выполняться либо строковый идентификатор указанного правила. +// ПараметрыВыполненияПроверки - Структура, Массив - произвольные дополнительные параметры проверки, +// которые уточняют, что и как именно проверять. +// См. КонтрольВеденияУчета.ПараметрыВыполненияПроверки. +// - Структура - один параметр проверки: +// * Свойство1 - ЛюбаяСсылка, Булево, Число, Строка, Дата - первое значение параметра. +// * Свойство2 - ЛюбаяСсылка, Булево, Число, Строка, Дата - второе значение параметра. +// * Свойство3 - ЛюбаяСсылка, Булево, Число, Строка, Дата - третье значение параметра. +// ... +// - Массив - несколько параметров проверки (элементы массива типа Структура, как описано выше). // // Пример: -// Проверка = КонтрольВеденияУчета.ПроверкаПоИдентификатору("ПроверитьСсылочнуюЦелостность"); -// КонтрольВеденияУчета.ВыполнитьПроверку(Проверка); +// 1. Проверка = КонтрольВеденияУчета.ПроверкаПоИдентификатору("ПроверитьСсылочнуюЦелостность"); +// КонтрольВеденияУчета.ВыполнитьПроверку(Проверка); +// 2. ПараметрыВыполненияПроверки = Новый Массив; +// Параметр1 = КонтрольВеденияУчета.ПараметрыВыполненияПроверки("ЗакрытиеМесяца", Организация1, ЗакрываемыйМесяц); +// ПараметрыВыполненияПроверки.Добавить(Параметр1); +// Параметр2 = КонтрольВеденияУчета.ПараметрыВыполненияПроверки("ЗакрытиеМесяца", Организация2, ЗакрываемыйМесяц); +// ПараметрыВыполненияПроверки.Добавить(Параметр2); +// ВыполнитьПроверку("ПроверитьПроведениеДокументов", ПараметрыВыполненияПроверки); // -Процедура ВыполнитьПроверку(Проверка) Экспорт +Процедура ВыполнитьПроверку(Знач Проверка, Знач ПараметрыВыполненияПроверки = Неопределено) Экспорт - ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("КонтрольВеденияУчета.ВыполнитьПроверку", "Проверка", - Проверка, Тип("СправочникСсылка.ПравилаПроверкиУчета")); - - Если Проверка.ЭтоГруппа Тогда - Возврат; + Если ТипЗнч(Проверка) = Тип("Строка") Тогда + ВыполняемаяПроверка = ПроверкаПоИдентификатору(Проверка); + Если ВыполняемаяПроверка.Пустая() Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Проверка ведения учета с идентификатором ""%1"" не существует (см. КонтрольВеденияУчетаПереопределяемый.ПриОпределенииПроверок)'"), + Проверка); + КонецЕсли; + Иначе + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("КонтрольВеденияУчета.ВыполнитьПроверку", "Проверка", + Проверка, Тип("СправочникСсылка.ПравилаПроверкиУчета")); + ВыполняемаяПроверка = Проверка; КонецЕсли; - КонтрольВеденияУчетаСлужебный.ВыполнитьПроверку(Проверка); + Если ПараметрыВыполненияПроверки <> Неопределено Тогда + + Если ТипЗнч(ПараметрыВыполненияПроверки) = Тип("Структура") Тогда + ПараметрыВыполнения = Новый Массив; + ПараметрыВыполнения.Добавить(ПараметрыВыполненияПроверки); + ПараметрыВыполненияПроверки = ПараметрыВыполнения; + КонецЕсли; + + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("КонтрольВеденияУчета.ВыполнитьПроверку", "ПараметрыВыполненияПроверки", + ПараметрыВыполненияПроверки, Тип("Массив")); + + Для Каждого ПараметрПроверки Из ПараметрыВыполненияПроверки Цикл + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("КонтрольВеденияУчета.ВыполнитьПроверку", "ПараметрыВыполненияПроверки.Элемент", + ПараметрПроверки, Тип("Структура")); + Для Каждого ТекущийПараметр Из ПараметрПроверки Цикл + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("КонтрольВеденияУчета.ВыполнитьПроверку", + ТекущийПараметр.Ключ, ТекущийПараметр.Значение, КонтрольВеденияУчетаСлужебный.ОжидаемыеТипыСвойствВидовПроверок()); + КонецЦикла; + КонецЦикла; + КонецЕсли; + + КонтрольВеденияУчетаСлужебный.ВыполнитьПроверку(ВыполняемаяПроверка, ПараметрыВыполненияПроверки); КонецПроцедуры -// Выполняет проверки по заданному контексту. +// Выполняет проверки по заданному контексту - общему признаку, связывающему воедино пакет проверок. +// Если указанный признак установлен у группы проверок, то выполняются все проверки этой группы. +// В этом случае наличие (или отсутствие) указанного признака у самой проверки значения не имеет. +// Проверки с флагом Использование, установленным в значение Ложь, пропускаются. // // Параметры: -// КонтекстПроверокВеденияУчета - ОпределяемыйТип.КонтекстПроверокВеденияУчета - Контекст выполняемых проверок. +// КонтекстПроверокВеденияУчета - ОпределяемыйТип.КонтекстПроверокВеденияУчета - Контекст выполняемых проверок. +// +// Пример: +// КонтрольВеденияУчета.ВыполнитьПроверкиВКонтексте(Перечисления.ХозяйственныеОперации.ЗакрытиеМесяца); // Процедура ВыполнитьПроверкиВКонтексте(КонтекстПроверокВеденияУчета) Экспорт @@ -37,20 +85,10 @@ "КонтекстПроверокВеденияУчета", КонтекстПроверокВеденияУчета, Метаданные.ОпределяемыеТипы.КонтекстПроверокВеденияУчета.Тип); - Запрос = Новый Запрос( - "ВЫБРАТЬ - | ПравилаПроверкиУчета.Ссылка КАК Проверка - |ИЗ - | Справочник.ПравилаПроверкиУчета КАК ПравилаПроверкиУчета - |ГДЕ - | ПравилаПроверкиУчета.КонтекстПроверокВеденияУчета = &КонтекстПроверокВеденияУчета - | И ПравилаПроверкиУчета.Использование"); + ПроверкиПоКонтексту = КонтрольВеденияУчетаСлужебный.ПроверкиПоКонтексту(КонтекстПроверокВеденияУчета); - Запрос.УстановитьПараметр("КонтекстПроверокВеденияУчета", КонтекстПроверокВеденияУчета); - Результат = Запрос.Выполнить().Выгрузить(); - - Для Каждого СтрокаРезультата Из Результат Цикл - ВыполнитьПроверку(СтрокаРезультата.Проверка); + Для Каждого Проверка Из ПроверкиПоКонтексту Цикл + ВыполнитьПроверку(Проверка); КонецЦикла; КонецПроцедуры @@ -58,9 +96,9 @@ // Возвращает сводку по количеству выявленных проблем указанного вида проверки. // // Параметры: -// ВидПроверок - Строка, Массив, СправочникСсылка.ВидыПроверок - строковый идентификатор -// вида проверки (Свойство1), массив идентификаторов (Свойство1...СвойствоN) -// либо ссылка на вид проверки. +// ВидПроверок - СправочникСсылка.ВидыПроверок - ссылка на вид проверки. +// - Строка - строковый идентификатор вида проверки Свойство1. +// - Массив - строковые идентификаторы вида проверки Свойство1...СвойствоN. // ПоискПоТочномуСоответствию - Булево - Регулирует возможности точности. Если Истина, то поиск ведется // по переданным свойствам на равенство, остальные свойства должны быть равны // Неопределено (табличная часть дополнительных свойств должна быть пуста). @@ -73,16 +111,16 @@ // * ЕстьОшибки - Булево - признак того, имеются ли ошибки среди найденных проблем (с важностью "Ошибка"). // // Пример: -// 1) Результат = СводнаяИнформацияПоВидамПроверки("СистемныеПроверки"); +// 1) Результат = СводнаяИнформацияПоВидамПроверок("СистемныеПроверки"); // 2) ВидПроверок = Новый Массив; // ВидПроверок.Добавить("ЗакрытиеМесяца"); // ВидПроверок.Добавить(Организация); // ВидПроверок.Добавить(МесяцЗакрытия); -// Результат = СводнаяИнформацияПоВидамПроверки(ВидПроверок); +// Результат = СводнаяИнформацияПоВидамПроверок(ВидПроверок); // -Функция СводнаяИнформацияПоВидамПроверки(ВидПроверок, ПоискПоТочномуСоответствию = Истина) Экспорт +Функция СводнаяИнформацияПоВидамПроверок(ВидПроверок, ПоискПоТочномуСоответствию = Истина) Экспорт - ИмяПроцедуры = "КонтрольВеденияУчета.СводнаяИнформацияПоВидамПроверки"; + ИмяПроцедуры = "КонтрольВеденияУчета.СводнаяИнформацияПоВидамПроверок"; ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяПроцедуры, "ВидПроверок", ВидПроверок, КонтрольВеденияУчетаСлужебный.ОписаниеТипаВидПроверки()); ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяПроцедуры, "ПоискПоТочномуСоответствию", ПоискПоТочномуСоответствию, Тип("Булево")); @@ -127,9 +165,9 @@ // Возвращает подробные сведения о выявленных проблемах указанного вида проверки. // // Параметры: -// ВидПроверок - Строка, Массив, СправочникСсылка.ВидыПроверок - строковый идентификатор -// вида проверки (Свойство1), массив идентификаторов (Свойство1...СвойствоN) -// либо ссылка на вид проверки. +// ВидПроверок - СправочникСсылка.ВидыПроверок - ссылка на вид проверки. +// - Строка - строковый идентификатор вида проверки Свойство1. +// - Массив - строковые идентификаторы вида проверки Свойство1...СвойствоN. // ПоискПоТочномуСоответствию - Булево - Регулирует возможности точности. Если Истина, то поиск ведется // по переданным свойствам на равенство, остальные свойства должны быть равны // Неопределено (табличная часть дополнительных свойств должна быть пуста). @@ -150,16 +188,16 @@ // * Выявлено - Дата - Серверное время идентификации проблемы. // // Пример: -// 1) Результат = ПодробнаяИнформацияПоВидамПроверки("СистемныеПроверки"); +// 1) Результат = ПодробнаяИнформацияПоВидамПроверок("СистемныеПроверки"); // 2) ВидПроверок = Новый Массив; // ВидПроверок.Добавить("ЗакрытиеМесяца"); // ВидПроверок.Добавить(Организация); // ВидПроверок.Добавить(МесяцЗакрытия); -// Результат = ПодробнаяИнформацияПоВидамПроверки(ВидПроверок); +// Результат = ПодробнаяИнформацияПоВидамПроверок(ВидПроверок); // -Функция ПодробнаяИнформацияПоВидамПроверки(ВидПроверок, ПоискПоТочномуСоответствию = Истина) Экспорт +Функция ПодробнаяИнформацияПоВидамПроверок(ВидПроверок, ПоискПоТочномуСоответствию = Истина) Экспорт - ИмяПроцедуры = "КонтрольВеденияУчета.ПодробнаяИнформацияПоВидамПроверки"; + ИмяПроцедуры = "КонтрольВеденияУчета.ПодробнаяИнформацияПоВидамПроверок"; ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяПроцедуры, "ВидПроверок", ВидПроверок, КонтрольВеденияУчетаСлужебный.ОписаниеТипаВидПроверки()); ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяПроцедуры, "ПоискПоТочномуСоответствию", ПоискПоТочномуСоответствию, Тип("Булево")); @@ -199,27 +237,26 @@ КонецФункции -// Ищет проверку по переданному идентификатору. +// Возвращает проверку по переданному идентификатору. // // Параметры: -// Идентификатор - Строка - Строковый идентификатор проверки. +// Идентификатор - Строка - Строковый идентификатор проверки. Например, "ПроверитьСсылочнуюЦелостность". // // Возвращаемое значение: -// СправочникСсылка.ПравилаПроверкиУчета - Найденная проверка, -// либо пустая ссылка. если найти не удалось. +// СправочникСсылка.ПравилаПроверкиУчета - ссылка на проверку или пустая ссылка, +// если проверка с таким идентификатором не существует. // Функция ПроверкаПоИдентификатору(Идентификатор) Экспорт ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("КонтрольВеденияУчета.ПроверкаПоИдентификатору", "Идентификатор", Идентификатор, Тип("Строка")); - Возврат КонтрольВеденияУчетаСлужебный.ПроверкаПоИдентификатору(Идентификатор); КонецФункции -// Вычисляет количество проблем у переданного объекта. +// Возвращает количество проблем, выявленных у переданного объекта. // // Параметры: -// СсылкаНаОбъект - ЛюбаяСсылка - Ссылка на объект для которого нужно вычислить количество проблем. +// СсылкаНаОбъект - ЛюбаяСсылка - Ссылка на объект, для которого нужно вычислить количество проблем. // // Возвращаемое значение: // Число - Количество найденных проблем по переданной ссылке на объект. @@ -262,10 +299,10 @@ КонецФункции -// Вычисляет количество проблем у переданного объекта. +// Вычисляет количество проблем, выявленных переданным правилом проверки. // // Параметры: -// ПравилоПроверки - СправочникСсылка.ПравилаПроверкиУчета - Ссылка на правило для которого +// ПравилоПроверки - СправочникСсылка.ПравилаПроверкиУчета - Ссылка на правило, для которого // нужно вычислить количество проблем. // // Возвращаемое значение: @@ -276,22 +313,17 @@ ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("КонтрольВеденияУчета.КоличествоПроблемПоПравилуПроверки", "ПравилоПроверки", ПравилоПроверки, Тип("СправочникСсылка.ПравилаПроверкиУчета")); - ТекущийПользовательПолноправный = Пользователи.ЭтоПолноправныйПользователь(); - Запрос = Новый Запрос( - "ВЫБРАТЬ РАЗРЕШЕННЫЕ - | КОЛИЧЕСТВО(*) КАК Количество - |ИЗ - | РегистрСведений.РезультатыПроверкиУчета КАК РезультатыПроверкиУчета - |ГДЕ - | РезультатыПроверкиУчета.ПравилоПроверки = &ПравилоПроверки - | И НЕ РезультатыПроверкиУчета.ИгнорироватьПроблему"); + "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | КОЛИЧЕСТВО(*) КАК Количество + |ИЗ + | РегистрСведений.РезультатыПроверкиУчета КАК РезультатыПроверкиУчета + |ГДЕ + | РезультатыПроверкиУчета.ПравилоПроверки = &ПравилоПроверки + | И НЕ РезультатыПроверкиУчета.ИгнорироватьПроблему"); Запрос.УстановитьПараметр("ПравилоПроверки", ПравилоПроверки); - Если Не ТекущийПользовательПолноправный Тогда - УстановитьПривилегированныйРежим(Истина); - КонецЕсли; - + УстановитьПривилегированныйРежим(Истина); Результат = Запрос.Выполнить().Выбрать(); Если Результат.Следующий() Тогда КоличествоПроблем = Результат.Количество; @@ -299,18 +331,46 @@ КоличествоПроблем = 0; КонецЕсли; - Если Не ТекущийПользовательПолноправный Тогда - УстановитьПривилегированныйРежим(Ложь); - КонецЕсли; - - Запрос = Неопределено; - Возврат КоличествоПроблем; КонецФункции +// Формирует параметры выполнения проверки для передачи в процедуры и функции ВыполнитьПроверку, ОписаниеПроблемы, +// ВидПроверки и другие. +// Параметры содержат уточнение, для чего именно требуется выполнить проверку, +// например, проверить закрытие месяца для конкретной организации по конкретному периоду. +// Порядок следования параметров учитывается. +// +// Параметры: +// Параметр1 - ЛюбаяСсылка, Булево, Число, Строка, Дата - первый параметр проверки. +// Параметр2 - ЛюбаяСсылка, Булево, Число, Строка, Дата - второй параметр проверки. +// Параметр3 - ЛюбаяСсылка, Булево, Число, Строка, Дата - третий параметр проверки. +// Параметр4 - ЛюбаяСсылка, Булево, Число, Строка, Дата - четвертый параметр проверки. +// Параметр5 - ЛюбаяСсылка, Булево, Число, Строка, Дата - пятый параметр проверки. +// ДругиеПараметры - Массив - другие параметры проверки (элементы типов ЛюбаяСсылка, Булево, Число, Строка, Дата). +// +// Возвращаемое значение: +// Структура - параметры проверки в виде: +// * Наименование - Строка - представление вида проверки. +// * Свойство1 - ЛюбаяСсылка, Булево, Число, Строка, Дата - первый параметр проверки. +// * Свойство2 - ЛюбаяСсылка, Булево, Число, Строка, Дата - второй параметр проверки. +// * Свойство3 - ЛюбаяСсылка, Булево, Число, Строка, Дата - третий параметр проверки. +// ... +// * СвойствоN - ЛюбаяСсылка, Булево, Число, Строка, Дата - последний параметр вида проверки. +// +// Пример: +// 1. Параметры = ПараметрыВыполненияПроверки("СистемныеПроверки"); +// 2. Параметры = ПараметрыВыполненияПроверки("ЗакрытиеМесяца", ОрганизацияСсылка, ЗакрываемыйМесяц); +// +Функция ПараметрыВыполненияПроверки(Знач Параметр1, Знач Параметр2 = Неопределено, Знач Параметр3 = Неопределено, + Знач Параметр4 = Неопределено, Знач Параметр5 = Неопределено, Знач ДругиеПараметры = Неопределено) Экспорт + + Возврат КонтрольВеденияУчетаСлужебный.ПараметрыВыполненияПроверки(Параметр1, Параметр2, Параметр3, Параметр4, Параметр5, ДругиеПараметры); + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции для разработки проверок ведения учета. +// Процедуры и функции для добавления проверок ведения учета. // Формирует описание проблемы в виде структуры. // @@ -324,7 +384,7 @@ // "Информация", "Предупреждение", "Ошибка" и "ПолезныйСовет". // // Возвращаемое значение: -// Структура - Сформированное описание проблемы. +// Структура - описание проблемы: // * ПроблемныйОбъект - ЛюбаяСсылка - Ссылка на объект "Источник" проблем. // * Проверка - СправочникСсылка.ПравилаПроверкиУчета - Ссылка на выполненную проверку. // Взято из переданной структуры ПараметрыПроверки. @@ -345,9 +405,11 @@ Функция ОписаниеПроблемы(ПроблемныйОбъект, ПараметрыПроверки) Экспорт ИмяПроцедуры = "КонтрольВеденияУчета.ОписаниеПроблемы"; - ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяПроцедуры, "ПроблемныйОбъект", ПроблемныйОбъект, ОбщегоНазначения.ОписаниеТипаВсеСсылки()); - ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяПроцедуры, "ПараметрыПроверки", ПараметрыПроверки, Тип("Структура"), КонтрольВеденияУчетаСлужебный.ОжидаемыеТипыСвойствПараметровПроверки()); - + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяПроцедуры, "ПроблемныйОбъект", ПроблемныйОбъект, + ОбщегоНазначения.ОписаниеТипаВсеСсылки()); + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяПроцедуры, "ПараметрыПроверки", ПараметрыПроверки, Тип("Структура"), + КонтрольВеденияУчетаСлужебный.ОжидаемыеТипыСвойствПараметровПроверки()); + Возврат КонтрольВеденияУчетаСлужебный.ОписаниеПроблемы(ПроблемныйОбъект, ПараметрыПроверки); КонецФункции @@ -355,35 +417,37 @@ // Записывает результат выполнения проверки. // // Параметры: -// Проблема - Структура - Сформированная алгоритмом проверки структура проблемы. -// * ПроблемныйОбъект - ЛюбаяСсылка - Ссылка на объект "Источник" проблем. -// * ПравилоПроверки - СправочникСсылка.ПравилаПроверкиУчета - Ссылка на выполненную проверку. -// * ВидПроверки - СправочникСсылка.ВидыПроверок - Ссылка на вид проверки, к которому +// Проблема - Структура - описание проблемы. +// * ПроблемныйОбъект - ЛюбаяСсылка - ссылка на объект "Источник" проблем. +// * ПравилоПроверки - СправочникСсылка.ПравилаПроверкиУчета - ссылка на выполненную проверку. +// * ВидПроверки - СправочникСсылка.ВидыПроверок - ссылка на вид проверки, к которому // относится выполненная проверка. -// * КлючУникальности - УникальныйИдентификатор - Ключ уникальности проблемы. -// * УточнениеПроблемы - Строка - Строка-уточнение найденной проблемы. -// * ВажностьПроблемы - ПеречислениеСсылка.ВажностьПроблемыУчета - Важность проблемы учета +// * КлючУникальности - УникальныйИдентификатор - ключ уникальности проблемы. +// * УточнениеПроблемы - Строка - строка-уточнение найденной проблемы. +// * ВажностьПроблемы - ПеречислениеСсылка.ВажностьПроблемыУчета - важность проблемы учета // "Информация", "Предупреждение", "Ошибка" и "ПолезныйСовет". -// * Ответственный - СправочникСсылка.Пользователи - Заполнен если есть возможность +// * Ответственный - СправочникСсылка.Пользователи - заполнен если есть возможность // идентифицировать ответственного в проблемном объекте. -// * ИгнорироватьПроблему - Булево - Флаг игнорирования проблемы. Если имеет значение "Истина", +// * ИгнорироватьПроблему - Булево - флаг игнорирования проблемы. Если имеет значение "Истина", // запись о проблеме игнорируется подсистемой. -// * ДополнительнаяИнформация - ХранилищеЗначений - Служебное свойство с дополнительными +// * ДополнительнаяИнформация - ХранилищеЗначений - служебное свойство с дополнительными // сведениями, связанными с выявленной проблемой. -// * Выявлено - Дата - Серверное время идентификации проблемы. +// * Выявлено - Дата - серверное время идентификации проблемы. // -// ПараметрыПроверки - Структура - Сформированная алгоритмом проверки структура проблемы. Необязательный параметр. -// * ЛимитПроблем - Число - Количество проверяемых объектов. +// ПараметрыПроверки - Структура - описание дополнительных параметров проверки. Необязательный параметр. +// * ЛимитПроблем - Число - количество проверяемых объектов. // По умолчанию 1000. Если указано 0, то следует проверить все объекты. -// * ИтерацияПроверки - Число - Очередная итерация проверки. Используется совместно с параметром +// * ИтерацияПроверки - Число - очередная итерация проверки. Используется совместно с параметром // ЛимитПроблем для определения предельного количества итераций. // Процедура ЗаписатьПроблему(Проблема, ПараметрыПроверки = Неопределено) Экспорт ИмяПроцедуры = "КонтрольВеденияУчета.ЗаписатьПроблему"; - ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяПроцедуры, "Проблема", Проблема, Тип("Структура"), КонтрольВеденияУчетаСлужебный.ОжидаемыеТипыСвойствОписанияПроблемы()); + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяПроцедуры, "Проблема", Проблема, Тип("Структура"), + КонтрольВеденияУчетаСлужебный.ОжидаемыеТипыСвойствОписанияПроблемы()); Если ПараметрыПроверки <> Неопределено Тогда - ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяПроцедуры, "ПараметрыПроверки", ПараметрыПроверки, Тип("Структура"), КонтрольВеденияУчетаСлужебный.ОжидаемыеТипыСвойствПараметровПроверки()); + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяПроцедуры, "ПараметрыПроверки", ПараметрыПроверки, Тип("Структура"), + КонтрольВеденияУчетаСлужебный.ОжидаемыеТипыСвойствПараметровПроверки()); КонецЕсли; КонтрольВеденияУчетаСлужебный.ЗаписатьПроблему(Проблема, ПараметрыПроверки); @@ -393,116 +457,111 @@ //////////////////////////////////////////////////////////////////////////////// // Процедуры и функции для встраивания подсистемы в формы объектов конфигурации. -// Доопределяет переданный динамический список дополнительной колонкой. У доопределяемого списка -// должна быть определена основная таблица. Вызывается из события "ПриСозданииНаСервере" -// целевой формы списка. +// В форме списка выводит колонку с картинкой, сигнализирующей о наличии проблем с объектами в строках. +// Вызывается из события ПриСозданииНаСервере формы списка. +// У динамических списков должна быть определена основная таблица. // // Параметры: -// УправляемаяФорма - УправляемаяФорма - Управляемая форма, содержащая доопределяемый список. -// ИменаСписков - Строка - Имена доопределяемых списков через запятую. -// ДополнительныеСвойства - Структура, Неопределено - Содержит дополнительные свойства, в случае -// необходимости их использования. +// Форма - УправляемаяФорма - форма списка. +// ИменаСписков - Строка - Имена динамических списков через запятую. +// ДополнительныеСвойства - Структура, Неопределено - дополнительные свойства. // -Процедура ПриСозданииНаСервереФормыСписка(УправляемаяФорма, ИменаСписков, ДополнительныеСвойства = Неопределено) Экспорт +Процедура ПриСозданииНаСервереФормыСписка(Форма, ИменаСписков, ДополнительныеСвойства = Неопределено) Экспорт ИмяПроцедуры = "КонтрольВеденияУчета.ПриСозданииНаСервереФормыСписка"; - ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяПроцедуры, "УправляемаяФорма", УправляемаяФорма, Тип("УправляемаяФорма")); + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяПроцедуры, "Форма", Форма, Тип("УправляемаяФорма")); ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяПроцедуры, "ИменаСписков", ИменаСписков, Тип("Строка")); Если ДополнительныеСвойства <> Неопределено Тогда ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяПроцедуры, "ДополнительныеСвойства", ДополнительныеСвойства, Тип("Структура")); КонецЕсли; - Если Не ПодсистемаДоступна() Тогда - Возврат; - КонецЕсли; - ГлобальныеНастройки = КонтрольВеденияУчетаСлужебный.ГлобальныеНастройки(); СписокИмен = СтрРазделить(ИменаСписков, ","); - Элементы = УправляемаяФорма.Элементы; + Элементы = Форма.Элементы; Для Каждого ИмяСписка Из СписокИмен Цикл ТаблицаФормы = Элементы.Найти(СокрЛП(ИмяСписка)); - Если ТаблицаФормы <> Неопределено Тогда - - ТекущийСписок = УправляемаяФорма[ТаблицаФормы.ПутьКДанным]; - ОсновнаяТаблица = ТекущийСписок.ОсновнаяТаблица; - - Если ЗначениеЗаполнено(ОсновнаяТаблица) Тогда - - ТекстЗапроса = ""; - Если ТекущийСписок.ПроизвольныйЗапрос Тогда - ТекстЗапроса = ТекущийСписок.ТекстЗапроса; - Иначе - ИсполняемаяСхема = ТаблицаФормы.ПолучитьИсполняемуюСхемуКомпоновкиДанных(); - НаборДанныхДинамическогоСписка = ИсполняемаяСхема.НаборыДанных.Найти("НаборДанныхДинамическогоСписка"); - Если НаборДанныхДинамическогоСписка <> Неопределено Тогда - ТекущийСписок.ПроизвольныйЗапрос = Истина; - ТекстЗапроса = НаборДанныхДинамическогоСписка.Запрос; - КонецЕсли; - КонецЕсли; - - Если ЗначениеЗаполнено(ТекстЗапроса) Тогда - - НачалоЗапроса = Лев(ТекстЗапроса, 7); - Если НачалоЗапроса = "ВЫБРАТЬ" Тогда - - АлиасИндикатор = "ИндикаторОшибки_" + ОбщегоНазначения.КонтрольнаяСуммаСтрокой(УправляемаяФорма.ИмяФормы + ПолучитьРазделительПути() + ИмяСписка); - РазделенноеИмя = СтрРазделить(ОсновнаяТаблица, "."); - - ДополнительныеСвойстваКомпоновщика = ТекущийСписок.КомпоновщикНастроек.Настройки.ДополнительныеСвойства; - ДополнительныеСвойстваКомпоновщика.Вставить("КолонкаИндикатора", АлиасИндикатор); - ДополнительныеСвойстваКомпоновщика.Вставить("ВидОбъектаМетаданных", РазделенноеИмя.Получить(0)); - ДополнительныеСвойстваКомпоновщика.Вставить("ИмяОбъектаМетаданных", РазделенноеИмя.Получить(1)); - ДополнительныеСвойстваКомпоновщика.Вставить("ИмяСписка", ИмяСписка); - - ТекущийСписок.ТекстЗапроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("ВЫБРАТЬ 0 КАК %1, %2", - АлиасИндикатор, Прав(ТекстЗапроса, СтрДлина(ТекстЗапроса) - 7)); - - ПараметрыКолонкиИндикации = Новый Структура; - - КонтрольВеденияУчетаСлужебный.ПриОпределенииПараметровКолонкиИндикации(ПараметрыКолонкиИндикации, ОсновнаяТаблица); - КонтрольВеденияУчетаПереопределяемый.ПриОпределенииПараметровКолонкиИндикации(ПараметрыКолонкиИндикации, ОсновнаяТаблица); - - КолонкаИндикаторОшибки = Элементы.Добавить(АлиасИндикатор, Тип("ПолеФормы"), ТаблицаФормы); - КолонкаИндикаторОшибки.Вид = ВидПоляФормы.ПолеКартинки; - КолонкаИндикаторОшибки.ПутьКДанным = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("%1.%2", ИмяСписка, АлиасИндикатор); - КолонкаИндикаторОшибки.ПоложениеЗаголовка = ПараметрыКолонкиИндикации.ПоложениеЗаголовка; - КолонкаИндикаторОшибки.КартинкаШапки = ГлобальныеНастройки.КартинкаИндикатораПроблем; - КолонкаИндикаторОшибки.КартинкаЗначений = ГлобальныеНастройки.КартинкаИндикатораПроблем; - - КолонкиСписка = ТаблицаФормы.ПодчиненныеЭлементы; - Если КолонкиСписка.Количество() > 0 Тогда - Если ПараметрыКолонкиИндикации.ВыводитьПоследней Тогда - Элементы.Переместить(КолонкаИндикаторОшибки, ТаблицаФормы); - Иначе - Элементы.Переместить(КолонкаИндикаторОшибки, ТаблицаФормы, КолонкиСписка.Получить(0)); - КонецЕсли; - КонецЕсли; - - ТаблицаФормы.УстановитьДействие("Выбор", "Подключаемый_Выбор"); - - КонецЕсли; - - КонецЕсли - - КонецЕсли; - + Если ТаблицаФормы = Неопределено Тогда + Продолжить; КонецЕсли; + + ТекущийСписок = Форма[ТаблицаФормы.ПутьКДанным]; + ОсновнаяТаблица = ТекущийСписок.ОсновнаяТаблица; + Если Не ЗначениеЗаполнено(ОсновнаяТаблица) Тогда + Продолжить; + КонецЕсли; + + ТекстЗапроса = ""; + Если ТекущийСписок.ПроизвольныйЗапрос Тогда + ТекстЗапроса = ТекущийСписок.ТекстЗапроса; + Иначе + ИсполняемаяСхема = ТаблицаФормы.ПолучитьИсполняемуюСхемуКомпоновкиДанных(); + НаборДанныхДинамическогоСписка = ИсполняемаяСхема.НаборыДанных.Найти("НаборДанныхДинамическогоСписка"); + Если НаборДанныхДинамическогоСписка <> Неопределено Тогда + ТекущийСписок.ПроизвольныйЗапрос = Истина; + ТекстЗапроса = НаборДанныхДинамическогоСписка.Запрос; + КонецЕсли; + КонецЕсли; + + Если Не ЗначениеЗаполнено(ТекстЗапроса) Тогда + Продолжить; + КонецЕсли; + + НачалоЗапроса = Лев(ТекстЗапроса, 7); + Если НачалоЗапроса <> "ВЫБРАТЬ" Тогда + Продолжить; + КонецЕсли; + + ИмяКолонки = "ИндикаторОшибки_" + ОбщегоНазначения.КонтрольнаяСуммаСтрокой(Форма.ИмяФормы + ПолучитьРазделительПути() + ИмяСписка); + РазделенноеИмя = СтрРазделить(ОсновнаяТаблица, "."); + + ДополнительныеСвойстваКомпоновщика = ТекущийСписок.КомпоновщикНастроек.Настройки.ДополнительныеСвойства; + ДополнительныеСвойстваКомпоновщика.Вставить("КолонкаИндикатора", ИмяКолонки); + ДополнительныеСвойстваКомпоновщика.Вставить("ВидОбъектаМетаданных", РазделенноеИмя.Получить(0)); + ДополнительныеСвойстваКомпоновщика.Вставить("ИмяОбъектаМетаданных", РазделенноеИмя.Получить(1)); + ДополнительныеСвойстваКомпоновщика.Вставить("ИмяСписка", ИмяСписка); + + СтруктураСвойствДинамическогоСписка = ОбщегоНазначения.СтруктураСвойствДинамическогоСписка(); + СтруктураСвойствДинамическогоСписка.ТекстЗапроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("ВЫБРАТЬ 0 КАК %1, %2", + ИмяКолонки, Прав(ТекстЗапроса, СтрДлина(ТекстЗапроса) - 7)); + ОбщегоНазначения.УстановитьСвойстваДинамическогоСписка(ТаблицаФормы, СтруктураСвойствДинамическогоСписка); + + ПараметрыКолонкиИндикации = Новый Структура; + + КонтрольВеденияУчетаСлужебный.ПриОпределенииПараметровКолонкиИндикации(ПараметрыКолонкиИндикации, ОсновнаяТаблица); + КонтрольВеденияУчетаПереопределяемый.ПриОпределенииПараметровКолонкиИндикации(ПараметрыКолонкиИндикации, ОсновнаяТаблица); + + КолонкаИндикаторОшибки = Элементы.Добавить(ИмяКолонки, Тип("ПолеФормы"), ТаблицаФормы); + КолонкаИндикаторОшибки.Вид = ВидПоляФормы.ПолеКартинки; + КолонкаИндикаторОшибки.ПутьКДанным = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("%1.%2", ИмяСписка, ИмяКолонки); + КолонкаИндикаторОшибки.ПоложениеЗаголовка = ПараметрыКолонкиИндикации.ПоложениеЗаголовка; + КолонкаИндикаторОшибки.КартинкаШапки = ГлобальныеНастройки.КартинкаИндикатораПроблем; + КолонкаИндикаторОшибки.КартинкаЗначений = ГлобальныеНастройки.КартинкаИндикатораПроблем; + КолонкаИндикаторОшибки.Заголовок = НСтр("ru = 'Индикатор ошибки'"); + + КолонкиСписка = ТаблицаФормы.ПодчиненныеЭлементы; + Если КолонкиСписка.Количество() > 0 Тогда + Если ПараметрыКолонкиИндикации.ВыводитьПоследней Тогда + Элементы.Переместить(КолонкаИндикаторОшибки, ТаблицаФормы); + Иначе + Элементы.Переместить(КолонкаИндикаторОшибки, ТаблицаФормы, КолонкиСписка.Получить(0)); + КонецЕсли; + КонецЕсли; + + ТаблицаФормы.УстановитьДействие("Выбор", "Подключаемый_Выбор"); КонецЦикла; КонецПроцедуры -// Производит индикацию проблемных объектов в таблице формы списка, путем добавления в соответствующую -// колонку картинки, сигнализирующую о наличии проблем. Вызывается из события "ПриСозданииНаСервере" -// целевой формы списка. +// В форме списка выводит колонку с картинкой, сигнализирующей о наличии проблем с объектами в строках. +// Вызывается из события ПриПолученииДанныхНаСервере формы списка. // // Параметры: // Настройки - НастройкиКомпоновкиДанных - Содержит копию полных настроек динамического списка. // Строки - СтрокиДинамическогоСписка - Коллекция содержит данные и оформление всех строк, // получаемых в списке, кроме строк группировок. -// ИмяКлючевогоПоля - Строка - "Ссылка" или заданное наперед имя ключевого поля, которое -// носит колонка, содержащая проблемный объект. +// ИмяКлючевогоПоля - Строка - "Ссылка" или заданное имя колонки, содержащую ссылку объекта. // ДополнительныеСвойства - Структура, Неопределено - Содержит дополнительные свойства в случае // необходимости их использования. // @@ -516,15 +575,12 @@ ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяПроцедуры, "ДополнительныеСвойства", ДополнительныеСвойства, Тип("Структура")); КонецЕсли; - Если Не ПодсистемаДоступна() Тогда - Возврат; - КонецЕсли; - ДополнительныеСвойстваКомпоновщика = Настройки.ДополнительныеСвойства; Если ДополнительныеСвойстваКомпоновщика.Свойство("КолонкаИндикатора") Тогда КолонкаИндикатора = Настройки.ДополнительныеСвойства.КолонкаИндикатора; + Если ИмяКлючевогоПоля = "Ссылка" Тогда КлючиСтрок = Строки.ПолучитьКлючи(); Иначе @@ -538,41 +594,55 @@ ПроблемныеОбъекты = КонтрольВеденияУчетаСлужебный.ПроблемныеОбъекты(КлючиСтрок); Для Каждого КлючСтроки Из КлючиСтрок Цикл + СтрокаСписка = Строки[КлючСтроки]; - СтрокаСписка.Данные[КолонкаИндикатора] = ПроблемныеОбъекты.Найти(КлючСтроки) = Неопределено; + Если Не СтрокаСписка.Данные.Свойство(КолонкаИндикатора) Тогда + Продолжить; + КонецЕсли; + + ТекстЯчейки = СтрокаСписка.Оформление.Получить(КолонкаИндикатора).НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Текст")); + + Если ПроблемныеОбъекты.Найти(КлючСтроки) = Неопределено Тогда + СтрокаСписка.Данные[КолонкаИндикатора] = 1; + Если ТекстЯчейки <> Неопределено Тогда + ТекстЯчейки.Значение = 0; + КонецЕсли; + Иначе + СтрокаСписка.Данные[КолонкаИндикатора] = 0; + Если ТекстЯчейки <> Неопределено Тогда + ТекстЯчейки.Значение = 1; + КонецЕсли; + КонецЕсли; + КонецЦикла; КонецЕсли; КонецПроцедуры -// Производит индикацию проблемного объекта в его форме, путем добавления в специальной группы с -// соответствующими картинкой и надписью, сигнализирующие о наличии проблем. Вызывается из события -// "ПриЧтенииНаСервере" целевой формы объекта. +// В форме объекта выводит группу с картинкой и надписью, сигнализирующими о наличии проблем с этим объектом. +// Вызывается из события ПриЧтенииНаСервере формы объекта. // // Параметры: -// УправляемаяФорма - УправляемаяФорма - Управляемая форма проблемного объекта. -// ТекущийОбъект - ДокументОбъект.ИмяДокумента, СправочникОбъект.ИмяСправочника, +// Форма - УправляемаяФорма - Форма объекта. +// ТекущийОбъект - ДокументОбъект.ИмяДокумента, СправочникОбъект.ИмяСправочника, // ПланОбменаОбъект.ИмяПланаОбмена, ПланВидовХарактеристикОбъект.ИмяПланаВидаХарактеристик, // ПланСчетовОбъект.ИмяПланаСчетов, ПланВидовРасчетаОбъект.ИмяПланаВидовРасчета, // ЗадачаОбъект.ИмяЗадачи - Объект, который будет прочитан. // -Процедура ПриЧтенииНаСервере(УправляемаяФорма, ТекущийОбъект) Экспорт +Процедура ПриЧтенииНаСервере(Форма, ТекущийОбъект) Экспорт ИмяПроцедуры = "КонтрольВеденияУчета.ПриЧтенииНаСервере"; - ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяПроцедуры, "УправляемаяФорма", УправляемаяФорма, Тип("УправляемаяФорма")); - ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяПроцедуры, "ТекущийОбъект", ТекущийОбъект, КонтрольВеденияУчетаПовтИсп.ОписаниеТипаВсеОбъекты()); - - Если Не ПодсистемаДоступна() Тогда - Возврат; - КонецЕсли; + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяПроцедуры, "Форма", Форма, Тип("УправляемаяФорма")); + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяПроцедуры, "ТекущийОбъект", ТекущийОбъект, + КонтрольВеденияУчетаСлужебныйПовтИсп.ОписаниеТипаВсеОбъекты()); ГлобальныеНастройки = КонтрольВеденияУчетаСлужебный.ГлобальныеНастройки(); СсылкаНаОбъект = ТекущийОбъект.Ссылка; - ЭлементыУправляемойФормы = УправляемаяФорма.Элементы; + ЭлементыУправляемойФормы = Форма.Элементы; КоличествоПроблемПоОбъекту = КоличествоПроблемПоОбъекту(СсылкаНаОбъект); КлючУникальностиИмен = ОбщегоНазначения.КонтрольнаяСуммаСтрокой(СсылкаНаОбъект.Метаданные().ПолноеИмя() - + ПолучитьРазделительПути() + УправляемаяФорма.ИмяФормы); + + ПолучитьРазделительПути() + Форма.ИмяФормы); ДекорацияГруппа = ЭлементыУправляемойФормы.Найти("ГруппаИндикатораОшибки_" + КлючУникальностиИмен); @@ -581,37 +651,31 @@ Если ДекорацияГруппа <> Неопределено Тогда ЭлементыУправляемойФормы.Удалить(ДекорацияГруппа); КонецЕсли; + Возврат; + КонецЕсли; + + ПараметрыГруппыИндикации = Новый Структура; + КонтрольВеденияУчетаСлужебный.ПриОпределенииПараметровГруппыИндикации(ПараметрыГруппыИндикации, ТипЗнч(СсылкаНаОбъект)); + КонтрольВеденияУчетаПереопределяемый.ПриОпределенииПараметровГруппыИндикации(ПараметрыГруппыИндикации, ТипЗнч(СсылкаНаОбъект)); + + Если ДекорацияГруппа <> Неопределено Тогда + + ДекорацияНадпись = ЭлементыУправляемойФормы.Найти("ДекорацияНадпись_" + КлючУникальностиИмен); + Если ДекорацияНадпись <> Неопределено Тогда + ДекорацияНадпись.Заголовок = КонтрольВеденияУчетаСлужебный.СформироватьОбщуюСтрокуИндикатор(Форма, СсылкаНаОбъект, КоличествоПроблемПоОбъекту, + ГлобальныеНастройки.ПояснениеИндикатораПроблем, ГлобальныеНастройки.ГиперссылкаИндикатораПроблем); + КонецЕсли; Иначе - ПараметрыГруппыИндикации = Новый Структура; + ГруппаИндикатораОшибки = КонтрольВеденияУчетаСлужебный.РазместитьГруппуИндикатораОшибки(Форма, КлючУникальностиИмен, + ПараметрыГруппыИндикации.ИмяРодителяГруппы, ПараметрыГруппыИндикации.ВыводитьСнизу); - КонтрольВеденияУчетаСлужебный.ПриОпределенииПараметровГруппыИндикации(ПараметрыГруппыИндикации, ТипЗнч(СсылкаНаОбъект)); - КонтрольВеденияУчетаПереопределяемый.ПриОпределенииПараметровГруппыИндикации(ПараметрыГруппыИндикации, ТипЗнч(СсылкаНаОбъект)); + ОбщаяСтрокаИндикатор = КонтрольВеденияУчетаСлужебный.СформироватьОбщуюСтрокуИндикатор(Форма, СсылкаНаОбъект, КоличествоПроблемПоОбъекту, + ГлобальныеНастройки.ПояснениеИндикатораПроблем, ГлобальныеНастройки.ГиперссылкаИндикатораПроблем); - Если ДекорацияГруппа <> Неопределено Тогда - - ДекорацияНадпись = ЭлементыУправляемойФормы.Найти("ДекорацияНадпись_" + КлючУникальностиИмен); - - Если ДекорацияНадпись <> Неопределено Тогда - - ДекорацияНадпись.Заголовок = КонтрольВеденияУчетаСлужебный.СформироватьОбщуюСтрокуИндикатор(УправляемаяФорма, СсылкаНаОбъект, КоличествоПроблемПоОбъекту, - ГлобальныеНастройки.ПояснениеИндикатораПроблем, ГлобальныеНастройки.ГиперссылкаИндикатораПроблем); - - КонецЕсли; - - Иначе - - ГруппаИндикатораОшибки = КонтрольВеденияУчетаСлужебный.РазместитьГруппуИндикатораОшибки(УправляемаяФорма, КлючУникальностиИмен, - ПараметрыГруппыИндикации.ИмяРодителяГруппы, ПараметрыГруппыИндикации.ВыводитьСнизу); - - ОбщаяСтрокаИндикатор = КонтрольВеденияУчетаСлужебный.СформироватьОбщуюСтрокуИндикатор(УправляемаяФорма, СсылкаНаОбъект, КоличествоПроблемПоОбъекту, - ГлобальныеНастройки.ПояснениеИндикатораПроблем, ГлобальныеНастройки.ГиперссылкаИндикатораПроблем); - - КонтрольВеденияУчетаСлужебный.ЗаполнитьГруппуИндикатораОшибки(УправляемаяФорма, ГруппаИндикатораОшибки, КлючУникальностиИмен, - ОбщаяСтрокаИндикатор, ГлобальныеНастройки.КартинкаИндикатораПроблем); - - КонецЕсли; + КонтрольВеденияУчетаСлужебный.ЗаполнитьГруппуИндикатораОшибки(Форма, ГруппаИндикатораОшибки, КлючУникальностиИмен, + ОбщаяСтрокаИндикатор, ГлобальныеНастройки.КартинкаИндикатораПроблем); КонецЕсли; @@ -620,19 +684,7 @@ //////////////////////////////////////////////////////////////////////////////// // Прочие процедуры и функции. -// Проверяет доступность подсистемы по правам. Используется при формировании -// индикации проблемных объектов. -// -// Возвращаемое значение: -// Булево - Признак доступности подсистемы согласно настройкам прав. -// -Функция ПодсистемаДоступна() Экспорт - - Возврат ПравоДоступа("Просмотр", Метаданные.Подсистемы.СтандартныеПодсистемы.Подсистемы.КонтрольВеденияУчета); - -КонецФункции - -// Производит поиск вида проверки по переданным свойствам. +// Возвращает виды проверки по переданным параметрам. // // Параметры: // ВидПроверок - Строка, Массив - строковый идентификатор вида проверки (Свойство1) @@ -648,9 +700,9 @@ // в случае если поиск не дал результата. в случае поиска по точному соответствию массив // содержит единственный элемент. // -Функция ПолучитьВидыПроверок(ВидПроверок, ПоискПоТочномуСоответствию = Истина) Экспорт +Функция ВидыПроверок(ВидПроверок, ПоискПоТочномуСоответствию = Истина) Экспорт - ИмяПроцедуры = "КонтрольВеденияУчета.ПолучитьВидыПроверок"; + ИмяПроцедуры = "КонтрольВеденияУчета.ВидыПроверок"; ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяПроцедуры, "ВидПроверок", ВидПроверок, КонтрольВеденияУчетаСлужебный.ОписаниеТипаВидПроверки()); ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяПроцедуры, "ПоискПоТочномуСоответствию", ПоискПоТочномуСоответствию, Тип("Булево")); @@ -658,4 +710,181 @@ КонецФункции -#КонецОбласти \ No newline at end of file +// Возвращает существующий или создает новый элемент справочника ВидыПроверок +// для регистрации или отбора результатов ведения учета. +// +// Параметры: +// ПараметрыВыполненияПроверки - Структура - см. КонтрольВеденияУчета.ПараметрыВыполненияПроверки. +// ТолькоПоиск - Булево - если Истина и вид проверки с заданными параметрами не существует, +// возвращается пустая ссылка; если Ложь, то создается элемент и возвращается ссылка на него. +// +// Возвращаемое значение: +// СправочникСсылка.ВидыПроверок - найденный существующий или созданный элемент справочника. +// В случае если осуществлялся только поиск (параметр ТолькоПоиск = Истина) +// и элемент не был найден, возвращается пустая ссылка на справочник СправочникСсылка.ВидыПроверок. +// +Функция ВидПроверки(Знач ПараметрыВыполненияПроверки, ТолькоПоиск = Ложь) Экспорт + + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("КонтрольВеденияУчета.ВидПроверки", + "ПараметрыВыполненияПроверки", ПараметрыВыполненияПроверки, Тип("Структура")); + Для Каждого ТекущееПоле Из ПараметрыВыполненияПроверки Цикл + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("КонтрольВеденияУчета.ВидПроверки", + "ПараметрыВыполненияПроверки." + ТекущееПоле.Ключ, ТекущееПоле.Значение, КонтрольВеденияУчетаСлужебный.ОжидаемыеТипыСвойствВидовПроверок()); + КонецЦикла; + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("КонтрольВеденияУчета.ВидПроверки", "ТолькоПоиск", ТолькоПоиск, Тип("Булево")); + + Возврат КонтрольВеденияУчетаСлужебный.ВидПроверки(ПараметрыВыполненияПроверки, ТолькоПоиск); + +КонецФункции + +#Область УстаревшиеПроцедурыИФункции + +// Устарела. Следует использовать функцию ПодробнаяИнформацияПоВидамПроверок. +// Возвращает подробные сведения о выявленных проблемах указанного вида проверки. +// +// Параметры: +// ВидПроверок - СправочникСсылка.ВидыПроверок - ссылка на вид проверки. +// - Строка - строковый идентификатор вида проверки Свойство1. +// - Массив - строковые идентификаторы вида проверки Свойство1...СвойствоN. +// ПоискПоТочномуСоответствию - Булево - Регулирует возможности точности. Если Истина, то поиск ведется +// по переданным свойствам на равенство, остальные свойства должны быть равны +// Неопределено (табличная часть дополнительных свойств должна быть пуста). +// Если Ложь, то значения остальных свойств могут быть произвольными, главное +// чтобы соответствующие свойства были равны свойствам структуры. По умолчанию Истина. +// +// Возвращаемое значение: +// ТаблицаЗначений - таблица проблем: +// * ПроблемныйОбъект - ЛюбаяСсылка - Ссылка на объект "Источник" проблем. +// * ПравилоПроверки - СправочникСсылка.ПравилаПроверкиУчета - Ссылка на выполненную проверку. +// * УточнениеПроблемы - Строка - Строка-уточнение найденной проблемы. +// * ВажностьПроблемы - ПеречислениеСсылка.ВажностьПроблемыУчета - Важность проблемы учета +// "Информация", "Предупреждение", "Ошибка" и "ПолезныйСовет". +// * Ответственный - СправочникСсылка.Пользователи - Заполнен если есть возможность +// идентифицировать ответственного в проблемном объекте. +// * ДополнительнаяИнформация - ХранилищеЗначений - Служебное свойство с дополнительными +// сведениями, связанными с выявленной проблемой +// * Выявлено - Дата - Серверное время идентификации проблемы. +// +// Пример: +// 1) Результат = ПодробнаяИнформацияПоВидамПроверок("СистемныеПроверки"); +// 2) ВидПроверок = Новый Массив; +// ВидПроверок.Добавить("ЗакрытиеМесяца"); +// ВидПроверок.Добавить(Организация); +// ВидПроверок.Добавить(МесяцЗакрытия); +// Результат = ПодробнаяИнформацияПоВидамПроверок(ВидПроверок); +// +Функция ПодробнаяИнформацияПоВидамПроверки(ВидПроверок, ПоискПоТочномуСоответствию = Истина) Экспорт + + ИмяПроцедуры = "КонтрольВеденияУчета.ПодробнаяИнформацияПоВидамПроверок"; + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяПроцедуры, "ВидПроверок", ВидПроверок, КонтрольВеденияУчетаСлужебный.ОписаниеТипаВидПроверки()); + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяПроцедуры, "ПоискПоТочномуСоответствию", ПоискПоТочномуСоответствию, Тип("Булево")); + + ПодробнаяИнформация = Новый ТаблицаЗначений; + МассивВидовПроверок = Новый Массив; + + Если ТипЗнч(ВидПроверок) = Тип("СправочникСсылка.ВидыПроверок") Тогда + МассивВидовПроверок.Добавить(ВидПроверок); + Иначе + МассивВидовПроверок = КонтрольВеденияУчетаСлужебный.ПолучитьВидыПроверок(ВидПроверок, ПоискПоТочномуСоответствию); + КонецЕсли; + + Если МассивВидовПроверок.Количество() = 0 Тогда + Возврат ПодробнаяИнформация; + КонецЕсли; + + Запрос = Новый Запрос( + "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | РезультатыПроверкиУчета.ПроблемныйОбъект КАК ПроблемныйОбъект, + | РезультатыПроверкиУчета.ВажностьПроблемы КАК ВажностьПроблемы, + | РезультатыПроверкиУчета.ПравилоПроверки КАК ПравилоПроверки, + | РезультатыПроверкиУчета.ВидПроверки КАК ВидПроверки + |ИЗ + | РегистрСведений.РезультатыПроверкиУчета КАК РезультатыПроверкиУчета + |ГДЕ + | НЕ РезультатыПроверкиУчета.ИгнорироватьПроблему + | И РезультатыПроверкиУчета.ВидПроверки В (&МассивВидовПроверок)"); + + Запрос.УстановитьПараметр("МассивВидовПроверок", МассивВидовПроверок); + Результат = Запрос.Выполнить(); + + Если Не Результат.Пустой() Тогда + ПодробнаяИнформация = Результат.Выгрузить(); + КонецЕсли; + + Возврат ПодробнаяИнформация; + +КонецФункции + +// Устарела. Следует использовать функцию СводнаяИнформацияПоВидамПроверок. +// Возвращает сводку по количеству выявленных проблем указанного вида проверки. +// +// Параметры: +// ВидПроверок - СправочникСсылка.ВидыПроверок - ссылка на вид проверки. +// - Строка - строковый идентификатор вида проверки Свойство1. +// - Массив - строковые идентификаторы вида проверки Свойство1...СвойствоN. +// ПоискПоТочномуСоответствию - Булево - Регулирует возможности точности. Если Истина, то поиск ведется +// по переданным свойствам на равенство, остальные свойства должны быть равны +// Неопределено (табличная часть дополнительных свойств должна быть пуста). +// Если Ложь, то значения остальных свойств могут быть произвольными, главное +// чтобы соответствующие свойства были равны свойствам структуры. По умолчанию Истина. +// +// Возвращаемое значение: +// Структура - сводка: +// * Количество - Число - общее количество найденных проблем. +// * ЕстьОшибки - Булево - признак того, имеются ли ошибки среди найденных проблем (с важностью "Ошибка"). +// +// Пример: +// 1) Результат = СводнаяИнформацияПоВидамПроверок("СистемныеПроверки"); +// 2) ВидПроверок = Новый Массив; +// ВидПроверок.Добавить("ЗакрытиеМесяца"); +// ВидПроверок.Добавить(Организация); +// ВидПроверок.Добавить(МесяцЗакрытия); +// Результат = СводнаяИнформацияПоВидамПроверок(ВидПроверок); +// +Функция СводнаяИнформацияПоВидамПроверки(ВидПроверок, ПоискПоТочномуСоответствию = Истина) Экспорт + + ИмяПроцедуры = "КонтрольВеденияУчета.СводнаяИнформацияПоВидамПроверок"; + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяПроцедуры, "ВидПроверок", ВидПроверок, КонтрольВеденияУчетаСлужебный.ОписаниеТипаВидПроверки()); + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяПроцедуры, "ПоискПоТочномуСоответствию", ПоискПоТочномуСоответствию, Тип("Булево")); + + СводнаяИнформация = Новый Структура; + СводнаяИнформация.Вставить("Количество", 0); + СводнаяИнформация.Вставить("ЕстьОшибки", Ложь); + + МассивВидовПроверок = Новый Массив; + Если ТипЗнч(ВидПроверок) = Тип("СправочникСсылка.ВидыПроверок") Тогда + МассивВидовПроверок.Добавить(ВидПроверок); + Иначе + МассивВидовПроверок = КонтрольВеденияУчетаСлужебный.ПолучитьВидыПроверок(ВидПроверок, ПоискПоТочномуСоответствию); + Если МассивВидовПроверок.Количество() = 0 Тогда + Возврат СводнаяИнформация; + КонецЕсли; + КонецЕсли; + + Запрос = Новый Запрос( + "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | КОЛИЧЕСТВО(*) КАК Количество, + | ЕСТЬNULL(МАКСИМУМ(ВЫБОР + | КОГДА РезультатыПроверкиУчета.ВажностьПроблемы = ЗНАЧЕНИЕ(Перечисление.ВажностьПроблемыУчета.Ошибка) + | ТОГДА ИСТИНА + | ИНАЧЕ ЛОЖЬ + | КОНЕЦ), ЛОЖЬ) КАК ЕстьОшибки + |ИЗ + | РегистрСведений.РезультатыПроверкиУчета КАК РезультатыПроверкиУчета + |ГДЕ + | НЕ РезультатыПроверкиУчета.ИгнорироватьПроблему + | И РезультатыПроверкиУчета.ВидПроверки В (&МассивВидовПроверок)"); + + Запрос.УстановитьПараметр("МассивВидовПроверок", МассивВидовПроверок); + Результат = Запрос.Выполнить().Выбрать(); + Результат.Следующий(); + + ЗаполнитьЗначенияСвойств(СводнаяИнформация, Результат); + + Возврат СводнаяИнформация; + +КонецФункции + +#КонецОбласти + +#КонецОбласти diff --git a/SSL/src/CommonModules/КонтрольВеденияУчетаКлиент/Module.bsl b/SSL/src/CommonModules/КонтрольВеденияУчетаКлиент/Module.bsl index 248b6e828..7e335dbd3 100644 --- a/SSL/src/CommonModules/КонтрольВеденияУчетаКлиент/Module.bsl +++ b/SSL/src/CommonModules/КонтрольВеденияУчетаКлиент/Module.bsl @@ -3,10 +3,10 @@ // Открывает отчет по всем проблемам переданного вида проблем. // -// Параметры: -// ВидПроверок - Строка, Массив, СправочникСсылка.ВидыПроверок - Переданные данные -// обрабатываются согласно функции КонтрольВеденияУчета.СводнаяИнформацияПоВидамПроверки -// после чего открывается отчет с отбором по найденному виду проблем. +// Параметры: +// ВидПроверок - СправочникСсылка.ВидыПроверок - ссылка на вид проверки. +// - Строка - строковый идентификатор вида проверки Свойство1. +// - Массив - строковые идентификаторы вида проверки Свойство1...СвойствоN. // // Пример: // ОткрытьОтчетПоПроблемам("СистемныеПроверки"); @@ -16,10 +16,7 @@ // Проверка валидности переданного параметра ВидПроверок осуществляется // в процедуре ПриСозданииНаСервере модуля отчета РезультатыПроверкиУчета. - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("ВидПроверки", ВидПроверок); - - ОткрытьФорму("Отчет.РезультатыПроверкиУчета.Форма", ПараметрыФормы); + КонтрольВеденияУчетаСлужебныйКлиент.ОткрытьОтчетПоПроблемам(ВидПроверок); КонецПроцедуры @@ -107,25 +104,3 @@ КонецПроцедуры #КонецОбласти - -#Область СлужебныйПрограммныйИнтерфейс - -// Открывает форму отчета с отбором по проблемам, препятствующим нормальному обновлению -// информационной базы. -// -// Параметры: -// Форма - УправляемаяФорма - Управляемая форма проблемного объекта. -// СтандартнаяОбработка - Булево - В данный параметр передается признак выполнения -// стандартной (системной) обработки события. -// -// Пример: -// МодульКонтрольВеденияУчетаКлиент.ОткрытьОтчетПоПроблемамИзОбработкиОбновления(ЭтотОбъект, СтандартнаяОбработка); -// -Процедура ОткрытьОтчетПоПроблемамИзОбработкиОбновления(Форма, СтандартнаяОбработка) Экспорт - - СтандартнаяОбработка = Ложь; - ОткрытьОтчетПоПроблемам("СистемныеПроверки"); - -КонецПроцедуры - -#КонецОбласти diff --git a/SSL/src/CommonModules/КонтрольВеденияУчетаПереопределяемый/Module.bsl b/SSL/src/CommonModules/КонтрольВеденияУчетаПереопределяемый/Module.bsl index a1bac7f2c..5a3ab02ca 100644 --- a/SSL/src/CommonModules/КонтрольВеденияУчетаПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/КонтрольВеденияУчетаПереопределяемый/Module.bsl @@ -22,54 +22,75 @@ КонецПроцедуры -// Предназначен для подключения собственных правил проверки ведения учета. +// Предназначена для подключения собственных правил проверки ведения учета. // // Параметры: // ГруппыПроверок - ТаблицаЗначений - Таблица, в которую добавляются группы проверок: -// * Наименование - Строка - Наименование группы проверок, например: "Системные проверки". -// * Идентификатор - Строка - Строковый идентификатор группы, например: "СистемныеПроверки". +// * Наименование - Строка - Наименование группы проверок. +// * ИдентификаторГруппы - Строка - Строковый идентификатор группы проверок, например: +// "СистемныеПроверки", "ЗакрытиеМесяца", "ПроверкиНДС" и т.п. +// Обязателен для заполнения. +// * Идентификатор - Строка - Строковый идентификатор группы проверок. Обязателен для заполнения. +// Для уникальности формат идентификатора следует выбирать следующим: +// "<Название программного продукта>.<Идентификатор проверки>". +// Например: "СтандартныеПодсистемы.СистемныеПроверки". +// * КонтекстПроверокВеденияУчета - ОпределяемыйТип.КонтекстПроверокВеденияУчета - значение, дополнительно +// уточняющее принадлежность группы проверок ведения учета к определенной категории. +// * Комментарий - Строка - комментарий к группе проверок. // // Проверки - ТаблицаЗначений - Таблица, в которую добавляются проверки: -// * Наименование - Строка - Наименование элемента проверки. Обязательно для заполнения. -// * Причины - Строка - Возможные причины, которые привели к возникновению проблемы. -// Выводятся в отчете о проблемах. Необязательно для заполнения. -// * Рекомендация - Строка - Рекомендация по решению возникшей проблемы. -// Выводятся в отчете о проблемах. Необязательно для заполнения. -// * Идентификатор - Строка - Строковый идентификатор проверки. Обязателен для заполнения. -// * ИдентификаторРодителя - Строка - Строковый идентификатор группы проверок, например: "СистемныеПроверки". -// Обязательно для заполнения. -// * ДатаНачалаПроверки - Дата - Пороговая дата, обозначающая границу проверяемых -// объектов (только для объектов с датой). Объекты, дата которых меньше -// указанной, не следует проверять. По умолчанию не заполнено (т.е. проверять все). -// * ЛимитПроблем - Число - Максимальное количество проверяемых объектов. -// По умолчанию 0 - следует проверить все объекты. -// * ОбработчикПроверки - Строка - Имя экспортной процедуры-обработчика проверки в серверном общем модуле. -// Предназначен для поиска и регистрации проблем ведения учета. -// Параметры обработчика проверки: -// * Проверка - СправочникСсылка.ПравилаПроверкиУчета - исполняемая проверка. -// * ПараметрыПроверки - Структура - Параметры проверки, которую необходимо выполнить. -// Подробнее см. в документации. -// * ОбработчикПереходаКИсправлению - Строка - Имя экспортной процедуры-обработчика исправления проблемы -// в клиентском общем модуле или полное имя формы, которая будет открыта для -// исправления проблемы. Параметры обработчика исправления проблемы или формы: -// * ИдентификаторПроверки - Строка - идентификатор проверки, -// которая выявила проблему. -// * ВидПроверки - СправочникСсылка.ВидыПроверок - вид проверки -// с дополнительной информацией о проблеме. -// * ДополнительныеПараметры - ХранилищеЗначений - Дополнительная информация по проверке. +// * ИдентификаторГруппы - Строка - Строковый идентификатор группы проверок, например: +// "СистемныеПроверки", "ЗакрытиеМесяца", "ПроверкиНДС" и т.п. +// Обязателен для заполнения. +// * Наименование - Строка - Наименование проверки, выводимое пользователю. +// * Причины - Строка - Описание возможных причин, которые приводят к возникновению +// проблемы. +// * Рекомендация - Строка - Рекомендация по решению возникшей проблемы. +// * Идентификатор - Строка - Строковый идентификатор элемента. Обязателен для заполнения. +// Формат идентификатора должен быть следующим: +// <Название программного продукта>.<Идентификатор проверки>. Например: +// СтандартныеПодсистемы.СистемныеПроверки. +// * ДатаНачалаПроверки - Дата - Пороговая дата, обозначающая границу проверяемых +// объектов (только для объектов с датой). Объекты, дата которых меньше +// указанной, не следует проверять. По умолчанию не заполнено (т.е. +// проверять все). +// * ЛимитПроблем - Число - Количество проверяемых объектов. По умолчанию 1000. +// Если указан 0, то следует проверять все объекты. +// * ОбработчикПроверки - Строка - Имя экспортной процедуры-обработчика серверного общего +// модуля в виде ИмяМодуля.ИмяПроцедуры. +// * ОбработчикПереходаКИсправлению - Строка - Имя экспортной процедуры-обработчика клиентского общего +// модуля для перехода к исправлению проблемы в виде ИмяМодуля.ИмяПроцедуры. +// * БезОбработчикаПроверки - Булево - признак служебной проверки, которая не имеет процедуры-обработчика. +// * ЗапрещеноИзменениеВажности - Булево - Если Истина, то администратор не сможет перенастраивать +// важность данной проверки. +// * КонтекстПроверокВеденияУчета - ОпределяемыйТип.КонтекстПроверокВеденияУчета - значение, дополнительно +// уточняющее принадлежность проверки ведения учета к определенной группе +// или категории. +// * УточнениеКонтекстаПроверокВеденияУчета - ОпределяемыйТип.УточнениеКонтекстаПроверокВеденияУчета - второе значение, +// дополнительно уточняющее принадлежность проверки ведения учета +// к определенной группе или категории. +// * ДополнительныеПараметры - ХранилищеЗначений - Дополнительная информация о проверке для программного +// использования. +// * Комментарий - Строка - комментарий к проверке. // // Пример: -// Проверка = Проверки.Добавить(); -// Проверка.ИдентификаторРодителя = "СистемныеПроверки"; -// Проверка.Наименование = НСтр("ru='Демо: Проверка заполнения комментария в документах ""Демо: Поступление товаров""'"); -// Проверка.Причины = НСтр("ru='Не введен комментарий в документе.'"); -// Проверка.Рекомендация = НСтр("ru='Ввести комментарий в документе.'"); -// Проверка.Идентификатор = "ПроверитьКомментарийВПоступленииТоваров"; -// Проверка.ОбработчикПроверки = "_ДемоСтандартныеПодсистемы.ПроверитьКомментарийВПоступленииТоваров"; -// Проверка.ДатаНачалаПроверки = Дата('20140101000000'); -// Проверка.ЛимитПроблем = 3; +// 1) Добавление проверки +// Проверка = Проверки.Добавить(); +// Проверка.ИдентификаторГруппы = "СистемныеПроверки"; +// Проверка.Наименование = НСтр("ru='Демо: Проверка заполнения комментария в документах ""Демо: Поступление товаров""'"); +// Проверка.Причины = НСтр("ru='Не введен комментарий в документе.'"); +// Проверка.Рекомендация = НСтр("ru='Ввести комментарий в документе.'"); +// Проверка.Идентификатор = "ПроверитьКомментарийВПоступленииТоваров"; +// Проверка.ОбработчикПроверки = "_ДемоСтандартныеПодсистемы.ПроверитьКомментарийВПоступленииТоваров"; +// Проверка.ДатаНачалаПроверки = Дата('20140101000000'); +// Проверка.ЛимитПроблем = 3; +// 2) Добавление группы проверок +// ГруппаПроверок = ГруппыПроверок.Добавить(); +// ГруппаПроверок.Наименование = НСтр("ru='Системные проверки'"); +// ГруппаПроверок.Идентификатор = "СтандартныеПодсистемы.СистемныеПроверки"; +// ГруппаПроверок.КонтекстПроверокВеденияУчета = "СистемныеПроверки"; // -Процедура ПриОпределенииПрикладныхПроверок(ГруппыПроверок, Проверки) Экспорт +Процедура ПриОпределенииПроверок(ГруппыПроверок, Проверки) Экспорт @@ -128,7 +149,7 @@ // * КлючУникальности - УникальныйИдентификатор - Ключ уникальности проблемы. // * УточнениеПроблемы - Строка - Строка-уточнение найденной проблемы. // * ВажностьПроблемы - ПеречислениеСсылка.ВажностьПроблемыУчета - Важность проблемы учета -// "Информация", "Предупреждение", "Ошибка" и "ПолезныйСовет". +// Информация, Предупреждение, Ошибка, ПолезныйСовет и ВажнаяИнформация. // * Ответственный - СправочникСсылка.Пользователи - Заполнен если есть возможность // идентифицировать ответственного в проблемном объекте. // * ИгнорироватьПроблему - Булево - Флаг игнорирования проблемы. Если имеет значение "Истина", @@ -148,64 +169,63 @@ КонецПроцедуры -// Позволяет переопределить логику поведения выполнения проверки до отработки логики подсистемы. -// -// Параметры: -// Проверка - СправочникСсылка.ПравилаПроверкиУчета - Ссылка на правило проверки, -// которая будет выполняться. -// ПараметрыПроверки - Структура - Сформированная алгоритмом проверки структура проблемы. -// * Идентификатор - Строка - Строковый идентификатор проверки. -// * Представление - Строка - Пользовательское представление проверки. -// * ИдентификаторРегламентногоЗадания - Строка - Строковый идентификатор регламентного задания, -// соответствующего проверке. -// * ДатаНачалаПроверки - Дата - Пороговая дата, обозначающая границу проверяемых -// объектов (только для объектов с датой). Объекты, дата которых -// меньше указанной, не следует проверять. По умолчанию не -// заполнено (т.е. проверять все). -// * ЛимитПроблем - Число - Количество проверяемых объектов. -// По умолчанию 1000. Если указано 0, то следует проверить все объекты. -// * ИтерацияПроверки - Число - Очередная итерация проверки. Используется совместно с параметром -// ЛимитПроблем для определения предельного количества итераций. -// * Проверка - СправочникСсылка.ПравилаПроверкиУчета - Ссылка на -// выполненную проверку. -// * ВидПроверки - СправочникСсылка.ВидыПроверок - Ссылка на вид проверки, к -// которому относится выполненная проверка. -// * ВажностьПроблемы - ПеречислениеСсылка.ВажностьПроблемыУчета - Важность проблемы учета -// "Информация", "Предупреждение", "Ошибка" и "ПолезныйСовет". -// -Процедура ПриВыполненииПроверки(Проверка, ПараметрыПроверки) Экспорт - -КонецПроцедуры +#Область УстаревшиеПроцедурыИФункции -// Позволяет переопределить логику поведения выполнения проверки после отработки логики подсистемы. +// Устарела: Следует использовать функцию ПриОпределенииПроверок. +// Предназначена для подключения собственных правил проверки ведения учета. // // Параметры: -// Проверка - СправочникСсылка.ПравилаПроверкиУчета - Ссылка на правило проверки, которая выполнялась. -// ПараметрыПроверки - Структура - Сформированная алгоритмом проверки структура проблемы. -// * Идентификатор - Строка - Строковый идентификатор проверки. -// * Представление - Строка - Пользовательское представление проверки. -// * ИдентификаторРегламентногоЗадания - Строка - Строковый идентификатор регламентного задания, -// соответствующего проверке. -// * ДатаНачалаПроверки - Дата - Пороговая дата, обозначающая границу проверяемых -// объектов (только для объектов с датой). Объекты, дата которых -// меньше указанной, не следует проверять. По умолчанию не -// заполнено (т.е. проверять все). -// * ЛимитПроблем - Число - Количество проверяемых объектов. -// По умолчанию 1000. Если указано 0, то следует проверить все объекты. -// * ИтерацияПроверки - Число - Очередная итерация проверки. Используется совместно с параметром -// ЛимитПроблем для определения предельного количества итераций. -// * Проверка - СправочникСсылка.ПравилаПроверкиУчета - Ссылка на -// выполненную проверку. -// * ВидПроверки - СправочникСсылка.ВидыПроверок - Ссылка на вид проверки, к -// которому относится выполненная проверка. -// * ВажностьПроблемы - ПеречислениеСсылка.ВажностьПроблемыУчета - Важность проблемы учета -// "Информация", "Предупреждение", "Ошибка" и "ПолезныйСовет". +// ГруппыПроверок - ТаблицаЗначений - Таблица, в которую добавляются группы проверок: +// * Наименование - Строка - Наименование группы проверок, например: "Системные проверки". +// * Идентификатор - Строка - Строковый идентификатор группы, например: "СистемныеПроверки". // -Процедура ПослеВыполненияПроверки(Проверка, ПараметрыПроверки) Экспорт +// Проверки - ТаблицаЗначений - Таблица, в которую добавляются проверки: +// * Наименование - Строка - Наименование элемента проверки. Обязательно для заполнения. +// * Причины - Строка - Возможные причины, которые привели к возникновению проблемы. +// Выводятся в отчете о проблемах. Необязательно для заполнения. +// * Рекомендация - Строка - Рекомендация по решению возникшей проблемы. +// Выводятся в отчете о проблемах. Необязательно для заполнения. +// * Идентификатор - Строка - Строковый идентификатор проверки. Обязателен для заполнения. +// * ИдентификаторРодителя - Строка - Строковый идентификатор группы проверок, например: "СистемныеПроверки". +// Обязательно для заполнения. +// * ДатаНачалаПроверки - Дата - Пороговая дата, обозначающая границу проверяемых +// объектов (только для объектов с датой). Объекты, дата которых меньше +// указанной, не следует проверять. По умолчанию не заполнено (т.е. проверять все). +// * ЛимитПроблем - Число - Максимальное количество проверяемых объектов. +// По умолчанию 0 - следует проверить все объекты. +// * ОбработчикПроверки - Строка - Имя экспортной процедуры-обработчика проверки в серверном общем модуле. +// Предназначен для поиска и регистрации проблем ведения учета. +// Параметры обработчика проверки: +// * Проверка - СправочникСсылка.ПравилаПроверкиУчета - исполняемая проверка. +// * ПараметрыПроверки - Структура - Параметры проверки, которую необходимо выполнить. +// Подробнее см. в документации. +// * ОбработчикПереходаКИсправлению - Строка - Имя экспортной процедуры-обработчика исправления проблемы +// в клиентском общем модуле или полное имя формы, которая будет открыта для +// исправления проблемы. Параметры обработчика исправления проблемы или формы: +// * ИдентификаторПроверки - Строка - идентификатор проверки, +// которая выявила проблему. +// * ВидПроверки - СправочникСсылка.ВидыПроверок - вид проверки +// с дополнительной информацией о проблеме. +// * ДополнительныеПараметры - ХранилищеЗначений - Дополнительная информация по проверке. +// +// Пример: +// Проверка = Проверки.Добавить(); +// Проверка.ИдентификаторГруппы = "СистемныеПроверки"; +// Проверка.Наименование = НСтр("ru='Демо: Проверка заполнения комментария в документах ""Демо: Поступление товаров""'"); +// Проверка.Причины = НСтр("ru='Не введен комментарий в документе.'"); +// Проверка.Рекомендация = НСтр("ru='Ввести комментарий в документе.'"); +// Проверка.Идентификатор = "ПроверитьКомментарийВПоступленииТоваров"; +// Проверка.ОбработчикПроверки = "_ДемоСтандартныеПодсистемы.ПроверитьКомментарийВПоступленииТоваров"; +// Проверка.ДатаНачалаПроверки = Дата('20140101000000'); +// Проверка.ЛимитПроблем = 3; +// +Процедура ПриОпределенииПрикладныхПроверок(ГруппыПроверок, Проверки) Экспорт КонецПроцедуры #КонецОбласти +#КонецОбласти + diff --git a/SSL/src/CommonModules/КонтрольВеденияУчетаСлужебный/Module.bsl b/SSL/src/CommonModules/КонтрольВеденияУчетаСлужебный/Module.bsl index 5bd1fac15..97566efcb 100644 --- a/SSL/src/CommonModules/КонтрольВеденияУчетаСлужебный/Module.bsl +++ b/SSL/src/CommonModules/КонтрольВеденияУчетаСлужебный/Module.bsl @@ -1,6 +1,61 @@ #Область СлужебныйПрограммныйИнтерфейс +// См. ОбновлениеИнформационнойБазыБСП.ПриДобавленииОбработчиковОбновления. +Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт + + Если ЕстьИзмененияПараметровСистемныхПроверок() Тогда + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "*"; + Обработчик.РежимВыполнения = "Отложенно"; + Обработчик.Комментарий = НСтр("ru = 'Обновляются правила проверки учета в соответствие с изменениями в новой версии программы. + |До завершения обработки часть проверок ведения учета будет недоступна.'"); + Обработчик.Процедура = "КонтрольВеденияУчетаСлужебный.ОбновитьВспомогательныеДанныеПоИзменениямКонфигурации"; + КонецЕсли; + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "2.4.5.2"; + Обработчик.Идентификатор = Новый УникальныйИдентификатор("4a240e04-87df-4c10-9f7f-97969c61e84f"); + Обработчик.Процедура = "РегистрыСведений.РезультатыПроверкиУчета.ОбработатьДанныеДляПереходаНаНовуюВерсию"; + Обработчик.РежимВыполнения = "Отложенно"; + Обработчик.ПроцедураЗаполненияДанныхОбновления = "РегистрыСведений.РезультатыПроверкиУчета.ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию"; + Обработчик.ОчередьОтложеннойОбработки = 1; + Обработчик.ЧитаемыеОбъекты = "РегистрСведений.РезультатыПроверкиУчета"; + Обработчик.ИзменяемыеОбъекты = "РегистрСведений.РезультатыПроверкиУчета"; + Обработчик.БлокируемыеОбъекты = "РегистрСведений.РезультатыПроверкиУчета"; + Обработчик.ПриоритетыВыполнения = ОбновлениеИнформационнойБазы.ПриоритетыВыполненияОбработчика(); + Обработчик.ПроцедураПроверки = "ОбновлениеИнформационнойБазы.ДанныеОбновленыНаНовуюВерсиюПрограммы"; + Обработчик.Комментарий = НСтр("ru = 'Заполнение измерения ИгнорироватьПроблему регистра сведений РезультатыПроверкиУчета + |по значению одноименного ресурса предыдущей версии.'"); + +КонецПроцедуры + +Процедура ПриЗаполненииСпискаТекущихДел(ТекущиеДела) Экспорт + + Если Не ПравоДоступа("Просмотр", Метаданные.РегистрыСведений.РезультатыПроверкиУчета) Тогда + Возврат; + КонецЕсли; + + ВидПроверки = ВидПроверки(ПараметрыВыполненияПроверки("СистемныеПроверки")); + Проблемы = КонтрольВеденияУчета.СводнаяИнформацияПоВидамПроверок(ВидПроверки); + + МодульТекущиеДелаСервер = ОбщегоНазначения.ОбщийМодуль("ТекущиеДелаСервер"); + Разделы = МодульТекущиеДелаСервер.РазделыДляОбъекта("Отчет.РезультатыПроверкиУчета"); + + Для Каждого Раздел Из Разделы Цикл + Дело = ТекущиеДела.Добавить(); + Дело.Идентификатор = "КонтрольВеденияУчета" + СтрЗаменить(Раздел.ПолноеИмя(), ".", "_"); + Дело.ЕстьДела = Проблемы.Количество > 0; + Дело.Важное = Проблемы.ЕстьОшибки; + Дело.Владелец = Раздел; + Дело.Представление = НСтр("ru = 'Некорректные данные'"); + Дело.Количество = Проблемы.Количество; + Дело.ПараметрыФормы = Проблемы; + Дело.Форма = "Отчет.РезультатыПроверкиУчета.Форма"; + КонецЦикла; + +КонецПроцедуры + #Область СинхронизацияСправочникаВидовПроверок // см. КонтрольВеденияУчета.ПолучитьВидыПроверок. @@ -42,20 +97,6 @@ #Область СинхронизацияСправочникаПроверок -// См. ОбновлениеИнформационнойБазыБСП.ПриДобавленииОбработчиковОбновления. -Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт - - Если ЕстьИзмененияПараметровСистемныхПроверок() Тогда - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "*"; - Обработчик.РежимВыполнения = "Отложенно"; - Обработчик.Комментарий = НСтр("ru = 'Обновляются правила проверки учета в соответствие с изменениями в новой версии программы. - |До завершения обработки часть проверок ведения учета будет недоступна.'"); - Обработчик.Процедура = "КонтрольВеденияУчетаСлужебный.ОбновитьВспомогательныеДанныеПоИзменениямКонфигурации"; - КонецЕсли; - -КонецПроцедуры - // Обновляет вспомогательные данные, которые зависят от конфигурации частично. // // Обновляется при наличии изменений конфигурации, записанных в параметры @@ -64,7 +105,7 @@ Процедура ОбновитьВспомогательныеДанныеПоИзменениямКонфигурации(Параметры = Неопределено) Экспорт Блокировка = Новый БлокировкаДанных; - ЭлементБлокировки = Блокировка.Добавить("Справочник.ПравилаПроверкиУчета"); + Блокировка.Добавить("Справочник.ПравилаПроверкиУчета"); НачатьТранзакцию(); Попытка @@ -78,8 +119,8 @@ КонецПроцедуры -// Процедура Обновляет состав предопределенных профилей в -// параметрах ограничения доступа при изменении конфигурации. +// Процедура Обновляет состав системных проверок ведения учета +// при изменении конфигурации. // // Параметры: // ЕстьИзменения - Булево (возвращаемое значение) - если производилась запись, @@ -115,47 +156,38 @@ КонецПроцедуры +Функция ЕстьИзмененияПараметровСистемныхПроверок() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + ПоследниеИзменения = СтандартныеПодсистемыСервер.ИзмененияПараметраРаботыПрограммы("СтандартныеПодсистемы.КонтрольВеденияУчета.СистемныеПроверки"); + Возврат ПоследниеИзменения = Неопределено Или ПоследниеИзменения.Количество() > 0; + +КонецФункции + #КонецОбласти #Область ОписанияАлгоритмовПоставляемыхПроверок // Исполняет проверку ссылочной целостности. // -// Параметры: -// Проверка - СправочникСсылка.ПравилаПроверкиУчета - Ссылка на исполняемую проверку. -// ПараметрыПроверки - Структура - Параметры проверки которую необходимо выполнить: -// * Идентификатор - Строка - Строковый идентификатор проверки. -// * Представление - Строка - Пользовательское представление проверки. -// * ИдентификаторРегламентногоЗадания - Строка - Строковый идентификатор регламентного задания, -// соответствующего проверке. -// * ДатаНачалаПроверки - Дата - Пороговая дата, обозначающая границу проверяемых -// объектов (только для объектов с датой). Объекты, дата которых -// меньше указанной, не следует проверять. По умолчанию не -// заполнено (т.е. проверять все). -// * ЛимитПроблем - Число - Количество проверяемых объектов. -// По умолчанию 1000. Если указано 0, то следует проверить все объекты. -// * Проверка - СправочникСсылка.ПравилаПроверкиУчета - Ссылка на -// выполненную проверку. -// * ВидПроверки - СправочникСсылка.ВидыПроверок - Ссылка на вид проверки, к -// которому относится выполненная проверка. -// * ВажностьПроблемы - ПеречислениеСсылка.ВажностьПроблемыУчета - Важность проблемы учета -// "Информация", "Предупреждение", "Ошибка" и "ПолезныйСовет". -// Процедура ПроверитьСсылочнуюЦелостность(Проверка, ПараметрыПроверки) Экспорт Если ОбщегоНазначения.РазделениеВключено() Тогда Возврат; КонецЕсли; + КэшБитыхСсылок = Новый Соответствие; + Для Каждого ВидМетаданных Из СсылочныеВидыОбъектовМетаданных() Цикл Для Каждого ОбъектМетаданных Из ВидМетаданных Цикл - НайтиБитыеСсылки(ОбъектМетаданных, ПараметрыПроверки); + НайтиБитыеСсылки(ОбъектМетаданных, ПараметрыПроверки, КэшБитыхСсылок); КонецЦикла; КонецЦикла; Для Каждого ВидМетаданных Из РегистрыКакОбъектыМетаданных() Цикл Для Каждого ОбъектМетаданных Из ВидМетаданных Цикл - НайтиБитыеСсылкиВРегистрах(ОбъектМетаданных, ПараметрыПроверки); + НайтиБитыеСсылкиВРегистрах(ОбъектМетаданных, ПараметрыПроверки, КэшБитыхСсылок); КонецЦикла; КонецЦикла; @@ -163,26 +195,6 @@ // Исполняет проверку заполненности обязательных реквизитов. // -// Параметры: -// Проверка - СправочникСсылка.ПравилаПроверкиУчета - Ссылка на исполняемую проверку. -// ПараметрыПроверки - Структура - Параметры проверки которую необходимо выполнить: -// * Идентификатор - Строка - Строковый идентификатор проверки. -// * Представление - Строка - Пользовательское представление проверки. -// * ИдентификаторРегламентногоЗадания - Строка - Строковый идентификатор регламентного задания, -// соответствующего проверке. -// * ДатаНачалаПроверки - Дата - Пороговая дата, обозначающая границу проверяемых -// объектов (только для объектов с датой). Объекты, дата которых -// меньше указанной, не следует проверять. По умолчанию не -// заполнено (т.е. проверять все). -// * ЛимитПроблем - Число - Количество проверяемых объектов. -// По умолчанию 1000. Если указано 0, то следует проверить все объекты. -// * Проверка - СправочникСсылка.ПравилаПроверкиУчета - Ссылка на -// выполненную проверку. -// * ВидПроверки - СправочникСсылка.ВидыПроверок - Ссылка на вид проверки, к -// которому относится выполненная проверка. -// * ВажностьПроблемы - ПеречислениеСсылка.ВажностьПроблемыУчета - Важность проблемы учета -// "Информация", "Предупреждение", "Ошибка" и "ПолезныйСовет". -// Процедура ПроверитьНезаполненныеОбязательныеРеквизиты(Проверка, ПараметрыПроверки) Экспорт Для Каждого ВидМетаданных Из СсылочныеВидыОбъектовМетаданных() Цикл @@ -215,26 +227,6 @@ // Исполняет проверку наличия циклических ссылок. // -// Параметры: -// Проверка - СправочникСсылка.ПравилаПроверкиУчета - Ссылка на исполняемую проверку. -// ПараметрыПроверки - Структура - Параметры проверки которую необходимо выполнить: -// * Идентификатор - Строка - Строковый идентификатор проверки. -// * Представление - Строка - Пользовательское представление проверки. -// * ИдентификаторРегламентногоЗадания - Строка - Строковый идентификатор регламентного задания, -// соответствующего проверке. -// * ДатаНачалаПроверки - Дата - Пороговая дата, обозначающая границу проверяемых -// объектов (только для объектов с датой). Объекты, дата которых -// меньше указанной, не следует проверять. По умолчанию не -// заполнено (т.е. проверять все). -// * ЛимитПроблем - Число - Количество проверяемых объектов. -// По умолчанию 1000. Если указано 0, то следует проверить все объекты. -// * Проверка - СправочникСсылка.ПравилаПроверкиУчета - Ссылка на -// выполненную проверку. -// * ВидПроверки - СправочникСсылка.ВидыПроверок - Ссылка на вид проверки, к -// которому относится выполненная проверка. -// * ВажностьПроблемы - ПеречислениеСсылка.ВажностьПроблемыУчета - Важность проблемы учета -// "Информация", "Предупреждение", "Ошибка" и "ПолезныйСовет". -// Процедура ПроверитьЦиклическиеСсылки(Проверка, ПараметрыПроверки) Экспорт Для Каждого ВидМетаданных Из СсылочныеВидыОбъектовМетаданных() Цикл @@ -253,45 +245,19 @@ // Исполняет проверку наличия отсутствующих предопределенных элементов. // -// Параметры: -// Проверка - СправочникСсылка.ПравилаПроверкиУчета - Ссылка на исполняемую проверку. -// ПараметрыПроверки - Структура - Параметры проверки которую необходимо выполнить: -// * Идентификатор - Строка - Строковый идентификатор проверки. -// * Представление - Строка - Пользовательское представление проверки. -// * ИдентификаторРегламентногоЗадания - Строка - Строковый идентификатор регламентного задания, -// соответствующего проверке. -// * ДатаНачалаПроверки - Дата - Пороговая дата, обозначающая границу проверяемых -// объектов (только для объектов с датой). Объекты, дата которых -// меньше указанной, не следует проверять. По умолчанию не -// заполнено (т.е. проверять все). -// * ЛимитПроблем - Число - Количество проверяемых объектов. -// По умолчанию 1000. Если указано 0, то следует проверить все объекты. -// * Проверка - СправочникСсылка.ПравилаПроверкиУчета - Ссылка на -// выполненную проверку. -// * ВидПроверки - СправочникСсылка.ВидыПроверок - Ссылка на вид проверки, к -// которому относится выполненная проверка. -// * ВажностьПроблемы - ПеречислениеСсылка.ВажностьПроблемыУчета - Важность проблемы учета -// "Информация", "Предупреждение", "Ошибка" и "ПолезныйСовет". -// Процедура ПроверитьОтсутствующиеПредопределенныеЭлементы(Проверка, ПараметрыПроверки) Экспорт Если ОбщегоНазначения.РазделениеВключено() Тогда Возврат; КонецЕсли; - МассивВидовОбъектов = Новый Массив; - МассивВидовОбъектов.Добавить("Справочник"); - МассивВидовОбъектов.Добавить("ПланВидовХарактеристик"); - МассивВидовОбъектов.Добавить("ПланСчетов"); - МассивВидовОбъектов.Добавить("ПланВидовРасчета"); + ВидыОбъектовМетаданных = Новый Массив; + ВидыОбъектовМетаданных.Добавить(Метаданные.Справочники); + ВидыОбъектовМетаданных.Добавить(Метаданные.ПланыВидовХарактеристик); + ВидыОбъектовМетаданных.Добавить(Метаданные.ПланыСчетов); + ВидыОбъектовМетаданных.Добавить(Метаданные.ПланыВидовРасчета); - МассивВидовОбъектовМетаданных = Новый Массив; - МассивВидовОбъектовМетаданных.Добавить(Метаданные.Справочники); - МассивВидовОбъектовМетаданных.Добавить(Метаданные.ПланыВидовХарактеристик); - МассивВидовОбъектовМетаданных.Добавить(Метаданные.ПланыСчетов); - МассивВидовОбъектовМетаданных.Добавить(Метаданные.ПланыВидовРасчета); - - Для Каждого ВидМетаданных Из МассивВидовОбъектовМетаданных Цикл + Для Каждого ВидМетаданных Из ВидыОбъектовМетаданных Цикл Для Каждого ОбъектМетаданных Из ВидМетаданных Цикл Если ОбъектМетаданных.ОбновлениеПредопределенныхДанных = Метаданные.СвойстваОбъектов.ОбновлениеПредопределенныхДанных.НеОбновлятьАвтоматически Тогда Продолжить; @@ -304,81 +270,38 @@ // Исполняет проверку наличия дублирующихся предопределенных элементов. // -// Параметры: -// Проверка - СправочникСсылка.ПравилаПроверкиУчета - Ссылка на исполняемую проверку. -// ПараметрыПроверки - Структура - Параметры проверки которую необходимо выполнить: -// * Идентификатор - Строка - Строковый идентификатор проверки. -// * Представление - Строка - Пользовательское представление проверки. -// * ИдентификаторРегламентногоЗадания - Строка - Строковый идентификатор регламентного задания, -// соответствующего проверке. -// * ДатаНачалаПроверки - Дата - Пороговая дата, обозначающая границу проверяемых -// объектов (только для объектов с датой). Объекты, дата которых -// меньше указанной, не следует проверять. По умолчанию не -// заполнено (т.е. проверять все). -// * ЛимитПроблем - Число - Количество проверяемых объектов. -// По умолчанию 1000. Если указано 0, то следует проверить все объекты. -// * Проверка - СправочникСсылка.ПравилаПроверкиУчета - Ссылка на -// выполненную проверку. -// * ВидПроверки - СправочникСсылка.ВидыПроверок - Ссылка на вид проверки, к -// которому относится выполненная проверка. -// * ВажностьПроблемы - ПеречислениеСсылка.ВажностьПроблемыУчета - Важность проблемы учета -// "Информация", "Предупреждение", "Ошибка" и "ПолезныйСовет". -// Процедура ПроверитьДублированиеПредопределенныхЭлементов(Проверка, ПараметрыПроверки) Экспорт Если ОбщегоНазначения.РазделениеВключено() Тогда Возврат; КонецЕсли; - МассивВидовОбъектов = Новый Массив; - МассивВидовОбъектов.Добавить("Справочник"); - МассивВидовОбъектов.Добавить("ПланВидовХарактеристик"); - МассивВидовОбъектов.Добавить("ПланСчетов"); - МассивВидовОбъектов.Добавить("ПланВидовРасчета"); + ВидыОбъектовМетаданных = Новый Массив; + ВидыОбъектовМетаданных.Добавить(Метаданные.Справочники); + ВидыОбъектовМетаданных.Добавить(Метаданные.ПланыВидовХарактеристик); + ВидыОбъектовМетаданных.Добавить(Метаданные.ПланыСчетов); + ВидыОбъектовМетаданных.Добавить(Метаданные.ПланыВидовРасчета); - МассивВидовОбъектовМетаданных = Новый Массив; - МассивВидовОбъектовМетаданных.Добавить(Метаданные.Справочники); - МассивВидовОбъектовМетаданных.Добавить(Метаданные.ПланыВидовХарактеристик); - МассивВидовОбъектовМетаданных.Добавить(Метаданные.ПланыСчетов); - МассивВидовОбъектовМетаданных.Добавить(Метаданные.ПланыВидовРасчета); - - Для Каждого ВидМетаданных Из МассивВидовОбъектовМетаданных Цикл + Для Каждого ВидМетаданных Из ВидыОбъектовМетаданных Цикл + + Если ВидМетаданных.Количество() = 0 Тогда + Продолжить; + КонецЕсли; + НайтиДублиПредопределенныхЭлементов(ВидМетаданных, ПараметрыПроверки); + КонецЦикла; КонецПроцедуры // Исполняет проверку отсутствующих предопределенных узлов плана обмена. // -// Параметры: -// Проверка - СправочникСсылка.ПравилаПроверкиУчета - Ссылка на исполняемую проверку. -// ПараметрыПроверки - Структура - Параметры проверки которую необходимо выполнить: -// * Идентификатор - Строка - Строковый идентификатор проверки. -// * Представление - Строка - Пользовательское представление проверки. -// * ИдентификаторРегламентногоЗадания - Строка - Строковый идентификатор регламентного задания, -// соответствующего проверке. -// * ДатаНачалаПроверки - Дата - Пороговая дата, обозначающая границу проверяемых -// объектов (только для объектов с датой). Объекты, дата которых -// меньше указанной, не следует проверять. По умолчанию не -// заполнено (т.е. проверять все). -// * ЛимитПроблем - Число - Количество проверяемых объектов. -// По умолчанию 1000. Если указано 0, то следует проверить все объекты. -// * Проверка - СправочникСсылка.ПравилаПроверкиУчета - Ссылка на -// выполненную проверку. -// * ВидПроверки - СправочникСсылка.ВидыПроверок - Ссылка на вид проверки, к -// которому относится выполненная проверка. -// * ВажностьПроблемы - ПеречислениеСсылка.ВажностьПроблемыУчета - Важность проблемы учета -// "Информация", "Предупреждение", "Ошибка" и "ПолезныйСовет". -// Процедура ПроверитьНаличиеПредопределенныхУзловПлановОбмена(Проверка, ПараметрыПроверки) Экспорт Если ОбщегоНазначения.РазделениеВключено() Тогда Возврат; КонецЕсли; - МассивВидовОбъектов = Новый Массив; - МассивВидовОбъектов.Добавить("ПланОбмена"); - МетаданныеПланыОбмена = Метаданные.ПланыОбмена; Для Каждого МетаданныеПланОбмена Из МетаданныеПланыОбмена Цикл @@ -425,30 +348,14 @@ // Параметры // ИдентификаторРегламентногоЗадания - Строка - Поле для связки с текущим фоновым заданием. // -// Возвращаемое значение - Структура со свойствами:: -// * Идентификатор - Строка - Строковый идентификатор проверки. -// * Наименование - Строка - Пользовательское представление проверки. -// * ИдентификаторРегламентногоЗадания - Строка - Строковый идентификатор регламентного задания, -// соответствующего проверке. -// * ДатаНачалаПроверки - Дата - Пороговая дата, обозначающая границу проверяемых -// объектов (только для объектов с датой). Объекты, дата которых -// меньше указанной, не следует проверять. По умолчанию не -// заполнено (т.е. проверять все). -// * ЛимитПроблем - Число - Количество проверяемых объектов. -// По умолчанию 1000. Если указано 0, то следует проверить все объекты.. -// * СпособВыполнения - ПеречислениеСсылка.СпособВыполненияПроверки - Способ выполнения проверки -// "ПоОбщемуРасписанию", "ПоОтдельномуРасписанию" и "Вручную". +// Возвращаемое значение - Структура со свойствами, Неопределено: +// * Идентификатор - Строка - Строковый идентификатор проверки. // Функция ПараметрыПроверкиПоИдентификаторуРегламентногоЗадания(ИдентификаторРегламентногоЗадания) Экспорт Запрос = Новый Запрос( "ВЫБРАТЬ ПЕРВЫЕ 1 - | ПравилаПроверкиУчета.Идентификатор КАК Идентификатор, - | ПравилаПроверкиУчета.Наименование КАК Наименование, - | ПравилаПроверкиУчета.ИдентификаторРегламентногоЗадания КАК ИдентификаторРегламентногоЗадания, - | ПравилаПроверкиУчета.ДатаНачалаПроверки КАК ДатаНачалаПроверки, - | ПравилаПроверкиУчета.ЛимитПроблем КАК ЛимитПроблем, - | ПравилаПроверкиУчета.СпособВыполнения КАК СпособВыполнения + | ПравилаПроверкиУчета.Идентификатор КАК Идентификатор |ИЗ | Справочник.ПравилаПроверкиУчета КАК ПравилаПроверкиУчета |ГДЕ @@ -463,14 +370,7 @@ Иначе СтруктураВозврата = Новый Структура; - СтруктураВозврата.Вставить("Идентификатор", Результат.Идентификатор); - СтруктураВозврата.Вставить("Наименование", Результат.Наименование); - СтруктураВозврата.Вставить("ИдентификаторРегламентногоЗадания", Результат.ИдентификаторРегламентногоЗадания); - СтруктураВозврата.Вставить("ДатаНачалаПроверки", Результат.ДатаНачалаПроверки); - СтруктураВозврата.Вставить("ЛимитПроблем", Результат.ЛимитПроблем); - СтруктураВозврата.Вставить("СпособВыполнения", Результат.СпособВыполнения); - СтруктураВозврата.Вставить("ПроверкаБылаОстановлена", Ложь); - СтруктураВозврата.Вставить("РучнойЗапуск", Ложь); + СтруктураВозврата.Вставить("Идентификатор", Результат.Идентификатор); Возврат СтруктураВозврата; @@ -620,80 +520,51 @@ #Область ВыполнениеПроверок -// Выполняет проверку системы согласно переданных параметров. -// -// Параметры: -// ПараметрыПроверки - Структура, СправочникСсылка.ПравилаПроверкиУчета - Параметры проверки, -// либо ссылка на проверку, которую необходимо выполнить: -// * Идентификатор - Строка - Строковый идентификатор проверки. -// * Представление - Строка - Пользовательское представление проверки. -// * ИдентификаторРегламентногоЗадания - Строка - Строковый идентификатор регламентного задания, -// соответствующего проверке. -// * ДатаНачалаПроверки - Дата - Пороговая дата, обозначающая границу проверяемых -// объектов (только для объектов с датой). Объекты, дата которых -// меньше указанной, не следует проверять. По умолчанию не -// заполнено (т.е. проверять все). -// * ЛимитПроблем - Число - Количество проверяемых объектов. -// По умолчанию 1000. Если указано 0, то следует проверить все объекты. -// -Процедура ВыполнитьПроверку(Знач ПараметрыПроверки) Экспорт +// См. КонтрольВеденияУчета.ВыполнитьПроверку. +Процедура ВыполнитьПроверку(Проверка, ПараметрыВыполненияПроверки = Неопределено) Экспорт - Если ТипЗнч(ПараметрыПроверки) = Тип("Структура") Тогда - Проверка = ПроверкаПоИдентификатору(ПараметрыПроверки.Идентификатор); + Если ТипЗнч(Проверка) = Тип("Строка") Тогда + ВыполняемаяПроверка = КонтрольВеденияУчета.ПроверкаПоИдентификатору(Проверка); Иначе - Проверка = ПараметрыПроверки; - ПараметрыПроверки = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Проверка, - "ДатаНачалаПроверки, - |Идентификатор, - |ИдентификаторРегламентногоЗадания, - |ЛимитПроблем, - |Наименование"); - - Если Не ПараметрыПроверки.Свойство("ПроверкаБылаОстановлена") Тогда - ПараметрыПроверки.Вставить("ПроверкаБылаОстановлена", Ложь); - КонецЕсли; - Если Не ПараметрыПроверки.Свойство("РучнойЗапуск") Тогда - ПараметрыПроверки.Вставить("РучнойЗапуск", Истина); - КонецЕсли; - + ВыполняемаяПроверка = Проверка; КонецЕсли; - Если Не ОбновлениеИнформационнойБазы.ОбъектОбработан(Проверка).Обработан Тогда + Если Не ОбновлениеИнформационнойБазы.ОбъектОбработан(ВыполняемаяПроверка).Обработан Тогда Возврат; КонецЕсли; + ПараметрыПроверки = ПодготовитьПараметрыПроверки(ВыполняемаяПроверка, ПараметрыВыполненияПроверки); Если ПроверкаОтложена(ПараметрыПроверки.ИдентификаторРегламентногоЗадания) Тогда Возврат; КонецЕсли; - ПодготовитьДанныеПроверки(Проверка, ПараметрыПроверки); - - ПараметрыОбработчика = Новый Массив; - ПараметрыОбработчика.Добавить(Проверка); - ПараметрыОбработчика.Добавить(ПараметрыПроверки); - - ПроверкиВеденияУчета = КонтрольВеденияУчетаПовтИсп.ПроверкиВеденияУчета(); + ПроверкиВеденияУчета = КонтрольВеденияУчетаСлужебныйПовтИсп.ПроверкиВеденияУчета(); Проверки = ПроверкиВеденияУчета.Проверки; СтрокаПроверки = Проверки.Найти(ПараметрыПроверки.Идентификатор, "Идентификатор"); - - Если СтрокаПроверки <> Неопределено Тогда - - КонтрольВеденияУчетаПереопределяемый.ПриВыполненииПроверки(Проверка, ПараметрыПроверки); - - Если Не СтрокаПроверки.БезОбработчикаПроверки Тогда - ОбщегоНазначения.ВыполнитьМетодКонфигурации(СтрокаПроверки.ОбработчикПроверки, ПараметрыОбработчика); - КонецЕсли; - - КонтрольВеденияУчетаПереопределяемый.ПослеВыполненияПроверки(Проверка, ПараметрыПроверки); - + Если СтрокаПроверки = Неопределено Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Проверка ведения учета с идентификатором ""%1"" не существует (см. КонтрольВеденияУчетаПереопределяемый.ПриОпределенииПроверок)'"), + ПараметрыПроверки.Идентификатор); КонецЕсли; + + Если СтрокаПроверки.БезОбработчикаПроверки Тогда + Возврат; + КонецЕсли; + + ОчиститьРезультатыПредыдущихПроверок(ВыполняемаяПроверка, ПараметрыПроверки.ПараметрыВыполненияПроверки); + + ПараметрыОбработчика = Новый Массив; + ПараметрыОбработчика.Добавить(ВыполняемаяПроверка); + ПараметрыОбработчика.Добавить(ПараметрыПроверки); + ОбщегоНазначения.ВыполнитьМетодКонфигурации(СтрокаПроверки.ОбработчикПроверки, ПараметрыОбработчика); КонецПроцедуры // Обработчик регламентного задания "ПроверкаВеденияУчета". Предназначен для обработки // фонового запуска проверок системы. +// // Параметры: -// ИдентификаторРегламентногоЗадания - Строка, Неопределено - Строковый идентификатор регламентного задания. +// ИдентификаторРегламентногоЗадания - Строка, Неопределено - Строковый идентификатор регламентного задания. // Процедура ПроверитьВедениеУчета(ИдентификаторРегламентногоЗадания = Неопределено) Экспорт @@ -703,19 +574,14 @@ ПараметрыПроверки = ПараметрыПроверкиПоИдентификаторуРегламентногоЗадания(ИдентификаторРегламентногоЗадания); Если ПараметрыПроверки <> Неопределено Тогда - ВыполнитьПроверку(ПараметрыПроверки); + ВыполнитьПроверку(ПараметрыПроверки.Идентификатор); КонецЕсли; Иначе Запрос = Новый Запрос( "ВЫБРАТЬ - | ПравилаПроверкиУчета.Идентификатор КАК Идентификатор, - | ПравилаПроверкиУчета.Наименование КАК Наименование, - | ПравилаПроверкиУчета.ИдентификаторРегламентногоЗадания КАК ИдентификаторРегламентногоЗадания, - | ПравилаПроверкиУчета.ДатаНачалаПроверки КАК ДатаНачалаПроверки, - | ПравилаПроверкиУчета.ЛимитПроблем КАК ЛимитПроблем, - | ПравилаПроверкиУчета.СпособВыполнения КАК СпособВыполнения + | ПравилаПроверкиУчета.Идентификатор КАК Идентификатор |ИЗ | Справочник.ПравилаПроверкиУчета КАК ПравилаПроверкиУчета |ГДЕ @@ -724,19 +590,7 @@ Результат = Запрос.Выполнить().Выбрать(); Пока Результат.Следующий() Цикл - - ПараметрыПроверки = Новый Структура; - ПараметрыПроверки.Вставить("Идентификатор", Результат.Идентификатор); - ПараметрыПроверки.Вставить("Наименование", Результат.Наименование); - ПараметрыПроверки.Вставить("ИдентификаторРегламентногоЗадания", Результат.ИдентификаторРегламентногоЗадания); - ПараметрыПроверки.Вставить("ДатаНачалаПроверки", Результат.ДатаНачалаПроверки); - ПараметрыПроверки.Вставить("ЛимитПроблем", Результат.ЛимитПроблем); - ПараметрыПроверки.Вставить("СпособВыполнения", Результат.СпособВыполнения); - ПараметрыПроверки.Вставить("ПроверкаБылаОстановлена", Ложь); - ПараметрыПроверки.Вставить("РучнойЗапуск", Ложь); - - ВыполнитьПроверку(ПараметрыПроверки); - + ВыполнитьПроверку(Результат.Идентификатор); КонецЦикла; КонецЕсли; @@ -764,7 +618,7 @@ МассивПараметров = ПараметрыПроверки.МассивПараметров; Для Каждого ПараметрыПроверки Из МассивПараметров Цикл - ВыполнитьПроверку(ПараметрыПроверки); + ВыполнитьПроверку(ПараметрыПроверки.Идентификатор); КонецЦикла; КонецПроцедуры @@ -773,12 +627,13 @@ Функция ПроверкаПоИдентификатору(Идентификатор) Экспорт Запрос = Новый Запрос( - "ВЫБРАТЬ + "ВЫБРАТЬ ПЕРВЫЕ 1 | ПравилаПроверкиУчета.Ссылка КАК Проверка |ИЗ | Справочник.ПравилаПроверкиУчета КАК ПравилаПроверкиУчета |ГДЕ - | ПравилаПроверкиУчета.Идентификатор = &Идентификатор"); + | ПравилаПроверкиУчета.Идентификатор = &Идентификатор + | И НЕ ПравилаПроверкиУчета.ПометкаУдаления"); Запрос.УстановитьПараметр("Идентификатор", Идентификатор); Результат = Запрос.Выполнить().Выбрать(); @@ -791,33 +646,136 @@ КонецФункции -#КонецОбласти - -#Область РазмещениеВТекущихДелах - -Процедура ПриЗаполненииСпискаТекущихДел(ТекущиеДела) Экспорт +// См. КонтрольВеденияУчетаПереопределяемый.ВыполнитьПроверкиВКонтексте. +Функция ПроверкиПоКонтексту(КонтекстПроверокВеденияУчета) Экспорт - Если Не КонтрольВеденияУчета.ПодсистемаДоступна() Тогда - Возврат; + Запрос = Новый Запрос( + "ВЫБРАТЬ + | ""ВыборкаЭлементовБезРодителейСУчетомКонтекста"" КАК НазначениеЗапроса, + | ЗНАЧЕНИЕ(Справочник.ПравилаПроверкиУчета.ПустаяСсылка) КАК Родитель, + | ПравилаПроверкиУчета.Ссылка КАК Проверка + |ИЗ + | Справочник.ПравилаПроверкиУчета КАК ПравилаПроверкиУчета + |ГДЕ + | НЕ ПравилаПроверкиУчета.ЭтоГруппа + | И ПравилаПроверкиУчета.Использование + | И ПравилаПроверкиУчета.Родитель = ЗНАЧЕНИЕ(Справочник.ПравилаПроверкиУчета.ПустаяСсылка) + | И ПравилаПроверкиУчета.КонтекстПроверокВеденияУчета = &КонтекстПроверокВеденияУчета + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | ""ВыборкаГруппСУчетомКонтекста"", + | ПравилаПроверкиУчета.Родитель, + | ПравилаПроверкиУчета.Ссылка + |ИЗ + | Справочник.ПравилаПроверкиУчета КАК ПравилаПроверкиУчета + |ГДЕ + | ПравилаПроверкиУчета.ЭтоГруппа + | И ПравилаПроверкиУчета.КонтекстПроверокВеденияУчета = &КонтекстПроверокВеденияУчета + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | ""ВыборкаЭлементовСРодителямиБезУчетаКонтекста"", + | ПравилаПроверкиУчета.Родитель, + | ПравилаПроверкиУчета.Ссылка + |ИЗ + | Справочник.ПравилаПроверкиУчета КАК ПравилаПроверкиУчета + |ГДЕ + | НЕ ПравилаПроверкиУчета.ЭтоГруппа + | И ПравилаПроверкиУчета.Использование + | И ПравилаПроверкиУчета.Родитель <> ЗНАЧЕНИЕ(Справочник.ПравилаПроверкиУчета.ПустаяСсылка)"); + + Запрос.УстановитьПараметр("КонтекстПроверокВеденияУчета", КонтекстПроверокВеденияУчета); + Результат = Запрос.Выполнить().Выгрузить(); + + МассивПроверок = Новый Массив; + ЦелевыеРодители = Результат.Скопировать(Результат.НайтиСтроки(Новый Структура("НазначениеЗапроса", "ВыборкаГруппСУчетомКонтекста")), "Родитель, Проверка"); + + Для Каждого СтрокаРезультата Из Результат Цикл + + Если СтрокаРезультата.НазначениеЗапроса = "ВыборкаЭлементовБезРодителейСУчетомКонтекста" + Или (СтрокаРезультата.НазначениеЗапроса = "ВыборкаЭлементовСРодителямиБезУчетаКонтекста" + И ЦелевыеРодители.Найти(СтрокаРезультата.Родитель) <> Неопределено) Тогда + МассивПроверок.Добавить(СтрокаРезультата.Проверка); + КонецЕсли; + + КонецЦикла; + + Возврат ОбщегоНазначенияКлиентСервер.СвернутьМассив(МассивПроверок); + +КонецФункции + +// См. КонтрольВеденияУчета.ПараметрыВыполненияПроверки. +Функция ПараметрыВыполненияПроверки(Знач Свойство1, Знач Свойство2 = Неопределено, Знач Свойство3 = Неопределено, + Знач Свойство4 = Неопределено, Знач Свойство5 = Неопределено, Знач МассивСвойств = Неопределено) Экспорт + + КоличествоСвойств = КоличествоСвойств(); + НайденКрайнийЗначащийПараметр = Ложь; + + Для Индекс = 2 По КоличествоСвойств Цикл + ЗначениеПараметра = Вычислить("Свойство" + Формат(Индекс, "ЧГ=0")); + Если ЗначениеПараметра = Неопределено Тогда + Если Не НайденКрайнийЗначащийПараметр Тогда + НайденКрайнийЗначащийПараметр = Истина; + КонецЕсли; + Иначе + Если НайденКрайнийЗначащийПараметр Тогда + ВызватьИсключение НСтр("ru = 'Параметры выполнения проверки заданы не по порядку в КонтрольВеденияУчета.ПараметрыВыполненияПроверки.'"); + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Если МассивСвойств <> Неопределено И Свойство5 = Неопределено Тогда + ВызватьИсключение НСтр("ru = 'Параметры выполнения проверки заданы не по порядку в КонтрольВеденияУчета.ПараметрыВыполненияПроверки.'"); КонецЕсли; - Проблемы = КонтрольВеденияУчета.СводнаяИнформацияПоВидамПроверки("СистемныеПроверки"); + ВсеПараметры = Новый Массив; + ВсеПараметры.Добавить(Свойство1); + Для Индекс = 2 По КоличествоСвойств Цикл + + ИмяСвойства = "Свойство" + Формат(Индекс, "ЧГ=0"); + ЗначениеСвойства = Вычислить(ИмяСвойства); + + Если ЗначениеСвойства = Неопределено Тогда + Прервать; + КонецЕсли; + + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("КонтрольВеденияУчета.ПараметрыВыполненияПроверки", ИмяСвойства, ЗначениеСвойства, ОжидаемыеТипыСвойствВидовПроверок()); + ВсеПараметры.Добавить(ЗначениеСвойства); + + КонецЦикла; - Если Проблемы.Количество > 0 Тогда - - Дело = ТекущиеДела.Добавить(); - Дело.Идентификатор = "Администрирование"; - Дело.ЕстьДела = Истина; - Дело.Представление = НСтр("ru = 'Некорректные данные'"); - Дело.Важное = Проблемы.ЕстьОшибки; - Дело.Количество = Проблемы.Количество; - Дело.ПараметрыФормы = Проблемы; - Дело.Форма = "Отчет.РезультатыПроверкиУчета.Форма"; - Дело.Владелец = Метаданные.Подсистемы.Администрирование; - + Если МассивСвойств <> Неопределено Тогда + Для Каждого ЭлементМассива Из МассивСвойств Цикл + + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("КонтрольВеденияУчета.ПараметрыВыполненияПроверки", ИмяСвойства, ЗначениеСвойства, ОжидаемыеТипыСвойствВидовПроверок()); + ВсеПараметры.Добавить(ЭлементМассива); + + КонецЦикла; КонецЕсли; -КонецПроцедуры + ПредставлениеВидаПроверки = ""; + ПараметрыВыполненияПроверки = Новый Структура; + + Для Каждого ТекущийПараметр Из ВсеПараметры Цикл + + Если ОбщегоНазначения.ЭтоСсылка(ТипЗнч(ТекущийПараметр)) Тогда + ЗначениеПредставления = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ТекущийПараметр, Новый Структура("Представление", "ПредставлениеСсылки(Ссылка)")); + ПредставлениеВидаПроверки = ПредставлениеВидаПроверки + ?(ЗначениеЗаполнено(ПредставлениеВидаПроверки), ", ", "") + ЗначениеПредставления["Представление"]; + Иначе + ПредставлениеВидаПроверки = ПредставлениеВидаПроверки + ?(ЗначениеЗаполнено(ПредставлениеВидаПроверки), ", ", "") + Формат(ТекущийПараметр, "ДЛФ=Д; ЧГ=0"); + КонецЕсли; + ПараметрыВыполненияПроверки.Вставить("Свойство" + Формат(ВсеПараметры.Найти(ТекущийПараметр) + 1, "ЧГ=0"), ТекущийПараметр); + + КонецЦикла; + + ПараметрыВыполненияПроверки.Вставить("Наименование", ПредставлениеВидаПроверки); + + Возврат ПараметрыВыполненияПроверки; + +КонецФункции #КонецОбласти @@ -869,8 +827,6 @@ УстановитьПривилегированныйРежим(Ложь); КонецЕсли; - Запрос = Неопределено; - Возврат ПроблемныеОбъекты; КонецФункции @@ -878,19 +834,18 @@ // См. КонтрольВеденияУчета.ОписаниеПроблемы. Функция ОписаниеПроблемы(ПроблемныйОбъект, ПараметрыПроверки) Экспорт - СтруктураЗаписи = Новый Структура; - - СтруктураЗаписи.Вставить("ПроблемныйОбъект", ПроблемныйОбъект); - СтруктураЗаписи.Вставить("ПравилоПроверки", ПараметрыПроверки.Проверка); - СтруктураЗаписи.Вставить("ВидПроверки", ПараметрыПроверки.ВидПроверки); - СтруктураЗаписи.Вставить("ВажностьПроблемы", ПараметрыПроверки.ВажностьПроблемы); - СтруктураЗаписи.Вставить("УточнениеПроблемы", ""); - СтруктураЗаписи.Вставить("КлючУникальности", Новый УникальныйИдентификатор); - СтруктураЗаписи.Вставить("Выявлено", ТекущаяДатаСеанса()); - СтруктураЗаписи.Вставить("ДополнительнаяИнформация", Новый ХранилищеЗначения(Неопределено)); - СтруктураЗаписи.Вставить("Ответственный", Неопределено); - - Возврат СтруктураЗаписи; + Результат = Новый Структура; + Результат.Вставить("ПроблемныйОбъект", ПроблемныйОбъект); + Результат.Вставить("ПравилоПроверки", ПараметрыПроверки.Проверка); + Результат.Вставить("ВажностьПроблемы", ПараметрыПроверки.ВажностьПроблемы); + Результат.Вставить("УточнениеПроблемы", ""); + Результат.Вставить("КлючУникальности", Новый УникальныйИдентификатор); + Результат.Вставить("Выявлено", ТекущаяДатаСеанса()); + Результат.Вставить("ДополнительнаяИнформация", Новый ХранилищеЗначения(Неопределено)); + Результат.Вставить("Ответственный", Неопределено); + Результат.Вставить("ВидПроверки", ?(ПараметрыПроверки.ПараметрыВыполненияПроверки.Количество() = 1, + ВидПроверки(ПараметрыПроверки.ПараметрыВыполненияПроверки[0]), Неопределено)); + Возврат Результат; КонецФункции @@ -901,6 +856,12 @@ Возврат; КонецЕсли; + Если Не ЗначениеЗаполнено(ОшибкаПроверки.ВидПроверки) Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'При записи проблемы по проверке ""%1"" не указан вид проверки.'"), + ОшибкаПроверки.ПравилоПроверки); + КонецЕсли; + ПроблемныйОбъект = ОшибкаПроверки.ПроблемныйОбъект; КоллекцияРеквизитов = ОшибкаПроверки.ПроблемныйОбъект.Метаданные().Реквизиты; @@ -921,28 +882,6 @@ КонецПроцедуры -// Выполняет проверку является ли текущий объект метаданных разделенным. -// Проверка проводится лишь в случае если разделение возможно и включено. -// -// Параметры: -// ПолноеИмя - Строка - Полное имя объекта метаданных, который будет проверяться на -// возможную разделяемость. -// Возвращаемое значение: -// Булево - Является ли переданный объект метаданных разделяемым. -// -Функция ЭтоНеразделенныйОбъектМетаданных(ПолноеИмя) Экспорт - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса") Тогда - - МодульРаботаВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("РаботаВМоделиСервиса"); - Возврат Не МодульРаботаВМоделиСервиса.ЭтоРазделенныйОбъектМетаданных(ПолноеИмя); - - КонецЕсли; - - Возврат Ложь; - -КонецФункции - #КонецОбласти #КонецОбласти @@ -951,53 +890,26 @@ #Область СинхронизацияСправочникаВидовПроверокСлужебная -// Находит существующий, либо создает новый элемент справочника видов проверки. -// В процессе ставит управляемую блокировку (во избежание конфликтов при выполнении -// разными регламентными заданиями). -// -// Параметры: -// ПараметрыПроверки - Структура - Параметры проверки которую необходимо выполнить: -// * Идентификатор - Строка - Строковый идентификатор проверки. -// * Наименование - Строка - Наименование проверки. -// * ИдентификаторРегламентногоЗадания - Строка - Строковый идентификатор регламентного задания, -// соответствующего проверке. -// * ПараметрыСинхронизации - Структура, с элементами Любого типа. По свойствам этой -// структуры будет производиться поиск. -// * ДатаНачалаПроверки - Дата - Пороговая дата, обозначающая границу проверяемых -// объектов (только для объектов с датой). Объекты, дата которых -// меньше указанной, не следует проверять. По умолчанию не -// заполнено (т.е. проверять все). -// * ЛимитПроблем - Число - Количество проверяемых объектов. -// По умолчанию 1000. Если указано 0, то следует проверить все объекты. -// * ИтерацияПроверки - Число - Очередная итерация проверки. Используется совместно с параметром -// ЛимитПроблем для определения предельного количества итераций. -// * Проверка - СправочникСсылка.ПравилаПроверкиУчета - Ссылка на -// выполненную проверку. -// * ВидПроверки - СправочникСсылка.ВидыПроверок - Ссылка на вид проверки, к -// которому относится выполненная проверка. -// * ВажностьПроблемы - ПеречислениеСсылка.ВажностьПроблемыУчета - Важность проблемы учета -// "Информация", "Предупреждение", "Ошибка" и "ПолезныйСовет". -// КоличествоСвойств - Число - Количество свойств по которым нужно вести поиск. -// -// Возвращаемое значение - СправочникСсылка.ВидыПроверок - Найденный, либо созданный элемент справочника. -// -Функция СинхронизацияВидаПроверки(ПараметрыПроверки) - - БлокировкаВидаПроверок = БлокировкаВидовПроверок(ПараметрыПроверки); +// См. КонтрольВеденияУчета.ВидПроверки. +Функция ВидПроверки(ПараметрыВыполненияПроверки, ТолькоПоиск = Ложь) Экспорт НачатьТранзакцию(); Попытка - БлокировкаВидаПроверок.Заблокировать(); + Блокировка = БлокировкаВидовПроверок(ПараметрыВыполненияПроверки); + Блокировка.Заблокировать(); - ПараметрыСинхронизации = ПараметрыПроверки.ПараметрыСинхронизации; - Если ПараметрыСинхронизации.Количество() > КоличествоСвойств() Тогда - ВидПроверкиМассив = РасширенныйПоискВидаПроверки(ПараметрыСинхронизации, КоличествоСвойств()); + Если ПараметрыВыполненияПроверки.Количество() - 1 > КоличествоСвойств() Тогда + ВидПроверкиМассив = РасширенныйПоискВидаПроверки(ПараметрыВыполненияПроверки, КоличествоСвойств()); Иначе - ВидПроверкиМассив = ОбычныйПоискВидаПроверки(ПараметрыСинхронизации); + ВидПроверкиМассив = ОбычныйПоискВидаПроверки(ПараметрыВыполненияПроверки); КонецЕсли; Если ВидПроверкиМассив.Количество() = 0 Тогда - ВидПроверки = НовыйВидПроверки(ПараметрыПроверки); + Если ТолькоПоиск Тогда + ВидПроверки = Справочники.ВидыПроверок.ПустаяСсылка(); + Иначе + ВидПроверки = НовыйВидПроверки(ПараметрыВыполненияПроверки); + КонецЕсли; Иначе ВидПроверки = ВидПроверкиМассив.Получить(0); КонецЕсли; @@ -1005,98 +917,32 @@ ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); - - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не удалось записать вид проверки %1 по причине %2'"), - ПараметрыПроверки.Идентификатор, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - - ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка, - Метаданные.Справочники.ВидыПроверок, ПараметрыПроверки.Идентификатор, ТекстСообщения); + ВызватьИсключение; КонецПопытки; Возврат ВидПроверки; КонецФункции -// Инициализирует и упорядочивает параметры синхронизации для поиска соответствующего -// элемента справочника "ВидыПроверок". -// -// Параметры: -// ПараметрыПроверки - Структура - Параметры проверки которую необходимо выполнить: -// * Идентификатор - Строка - Строковый идентификатор проверки. -// * Наименование - Строка - Наименование проверки. -// * ИдентификаторРегламентногоЗадания - Строка - Строковый идентификатор регламентного задания, -// соответствующего проверке. -// * ПараметрыСинхронизации - Структура, с элементами Любого типа. По свойствам этой -// структуры будет производиться поиск. -// * ДатаНачалаПроверки - Дата - Пороговая дата, обозначающая границу проверяемых -// объектов (только для объектов с датой). Объекты, дата которых -// меньше указанной, не следует проверять. По умолчанию не -// заполнено (т.е. проверять все). -// * ЛимитПроблем - Число - Количество проверяемых объектов. -// По умолчанию 1000. Если указано 0, то следует проверить все объекты. -// * Проверка - СправочникСсылка.ПравилаПроверкиУчета - Ссылка на -// выполненную проверку. -// * ВидПроверки - СправочникСсылка.ВидыПроверок - Ссылка на вид проверки, к -// которому относится выполненная проверка. -// * ВажностьПроблемы - ПеречислениеСсылка.ВажностьПроблемыУчета - Важность проблемы учета -// "Информация", "Предупреждение", "Ошибка" и "ПолезныйСовет". -// КоличествоСвойств - Число - Количество свойств по которым нужно вести поиск. -// -// Возвращаемое значение - Структура, Неопределено - Дополненная структура параметров проверки, либо неопределено -// в случае отсутствия элементов "ПараметрыСинхронизации" и "Идентификатор" в параметрах -// проверки. -// -Функция ПараметрыСинхронизацииВидаПроверок(ПараметрыПроверки) - - Если Не ПараметрыПроверки.Свойство("ПараметрыСинхронизации") Или Не ПараметрыПроверки.Свойство("Идентификатор") Тогда - Возврат Неопределено; - Иначе - - ПараметрыСинхронизации = ПараметрыПроверки.ПараметрыСинхронизации; - - ТаблицаУпорядочивания = Новый ТаблицаЗначений; - ТаблицаУпорядочивания.Колонки.Добавить("Свойство"); - - Для Каждого ПараметрПоиска Из ПараметрыСинхронизации Цикл - ЗаполнитьЗначенияСвойств(ТаблицаУпорядочивания.Добавить(), Новый Структура("Свойство", ПараметрПоиска.Значение)); - КонецЦикла; - - ТаблицаУпорядочивания.Сортировать("Свойство"); - СтрокаИдентификатора = ТаблицаУпорядочивания.Вставить(0); - СтрокаИдентификатора.Свойство = ПараметрыПроверки.Идентификатор; - - ПараметрыСинхронизации.Очистить(); - - Для Каждого ТекущаяСтрока Из ТаблицаУпорядочивания Цикл - ПараметрыСинхронизации.Вставить("Свойство" + Формат(ТаблицаУпорядочивания.Индекс(ТекущаяСтрока) + 1, "ЧГ=0"), ТекущаяСтрока.Свойство); - КонецЦикла; - - Возврат ПараметрыПроверки; - - КонецЕсли; - -КонецФункции - // Производит поиск вида проверки по переданным параметрам. Под "расширенным" понимать простой // поиск плюс поиск по строкам табличной части "СвойстваОбъекта" справочника "ВидыПроверок". -// Данный поиск осуществляется если параметр "КоличествоСвойств" принимает значения от 5 до N, +// Данный поиск осуществляется если параметр "КоличествоСвойств" принимает значения от 5 до N, // где N-любое натуральное. // // Параметры: -// ПараметрыСинхронизации - Структура - Параметры по которым будет производиться поиск вида проверок: -// * Свойство1 - ЛюбаяСсылка - Первое свойство синхронизации. -// * Свойство2 - ЛюбаяСсылка - Второе свойство синхронизации. -// * Свойство3 - ЛюбаяСсылка - Третье свойство синхронизации. -// ... -// * СвойствоN - ЛюбаяСсылка - N-ое свойство синхронизации. +// ПоляСинхронизации - Структура - Параметры по которым будет производиться поиск вида проверок: +// * Свойство1 - ЛюбаяСсылка, Булево, Число, Строка, Дата - Первое свойство синхронизации. +// * Свойство2 - ЛюбаяСсылка, Булево, Число, Строка, Дата - Второе свойство синхронизации. +// * Свойство3 - ЛюбаяСсылка, Булево, Число, Строка, Дата - Третье свойство синхронизации. +// ... +// * СвойствоN - Булево, Число, Строка, Дата - N-ое свойство синхронизации. // // КоличествоСвойств - Число - Количество свойств по которым нужно вести поиск. // // Возвращаемое значение: СправочникСсылка.ВидыПроверок - Найденный элемент справочника, либо пустая ссылка // в случае если поиск не дал результата. // -Функция РасширенныйПоискВидаПроверки(ПараметрыСинхронизации, КоличествоСвойств) +Функция РасширенныйПоискВидаПроверки(ПоляСинхронизации, КоличествоСвойств) Запрос = Новый Запрос( "ВЫБРАТЬ @@ -1128,13 +974,13 @@ | ВидПроверки"); ТекстУсловий = " Истина "; - КоличествоПараметров = ПараметрыСинхронизации.Количество(); + КоличествоПараметров = ПоляСинхронизации.Количество() - 1; Запрос.УстановитьПараметр("ПороговоеКоличество", КоличествоПараметров - КоличествоСвойств); Для Индекс = 1 По КоличествоСвойств Цикл Свойство = "Свойство" + Формат(Индекс, "ЧГ=0"); - Значение = ПараметрыСинхронизации[Свойство]; + Значение = ПоляСинхронизации[Свойство]; ТекстУсловий = ТекстУсловий + " И " + Свойство + " = &" + Свойство; Запрос.УстановитьПараметр(Свойство, Значение); @@ -1157,7 +1003,7 @@ ИндексПоиска = ИндексПоиска + ?(ЗначениеЗаполнено(ИндексПоиска), ", ", "") + ИмяКолонки; КолонкиТаблицы.Добавить(ИмяКолонки); - СтруктураПоиска.Вставить(ИмяКолонки, ПараметрыСинхронизации[ИмяКолонки]); + СтруктураПоиска.Вставить(ИмяКолонки, ПоляСинхронизации[ИмяКолонки]); КонецЦикла; @@ -1190,17 +1036,29 @@ КонецФункции -Функция БлокировкаВидовПроверок(ПараметрыПроверки) +// Во избежание конфликтов при выполнении разными регламентными заданиями, производит блокировку +// справочника видов проверок по переданным полям синхронизации при работе с ним. +// +// Параметры: +// ПоляСинхронизации - Структура - структура с элементами любого ссылочного типа или любого простого типа +// (Булево, Строка, Число и Дата). Подробнее см. ОжидаемыеТипыСвойствВидовПроверок(). +// По переданным полям синхронизации будет осуществлена блокировка данных. +// * Свойство1 - ЛюбаяСсылка, Булево, Число, Строка, Дата - Первое свойство синхронизации. +// * Свойство2 - ЛюбаяСсылка, Булево, Число, Строка, Дата - Второе свойство синхронизации. +// * Свойство3 - ЛюбаяСсылка, Булево, Число, Строка, Дата - Третье свойство синхронизации. +// ... +// * СвойствоN - ЛюбаяСсылка, Булево, Число, Строка, Дата - N-ое свойство синхронизации. +// +// Возвращаемое значение - БлокировкаДанных - объект блокировки справочника видов проверки. +// +Функция БлокировкаВидовПроверок(ПоляСинхронизации) БлокировкаДанных = Новый БлокировкаДанных; ЭлементБлокировкиДанных = БлокировкаДанных.Добавить("Справочник.ВидыПроверок"); - ПараметрыСинхронизации = ПараметрыПроверки.ПараметрыСинхронизации; - - Если Не (ОбщегоНазначения.ИнформационнаяБазаФайловая() - Или ПараметрыСинхронизации.Количество() > КоличествоСвойств()) Тогда + Если ПоляСинхронизации.Количество() - 1 > КоличествоСвойств() Тогда Индекс = 1; - Для Каждого ПараметрПоиска Из ПараметрыСинхронизации Цикл + Для Каждого ПараметрПоиска Из ПоляСинхронизации Цикл ЭлементБлокировкиДанных.УстановитьЗначение("Свойство" + Формат(Индекс, "ЧГ=0"), ПараметрПоиска.Значение); Индекс = Индекс + 1; КонецЦикла; @@ -1210,19 +1068,19 @@ КонецФункции -// Производит поиск вида проверки по переданным параметрам. Под "обычным" поиском понимать +// Производит поиск вида проверки по переданным параметрам. Под "обычным" поиском понимать // поиск в справочнике "ВидыПроверок" только по реквизитам шапки с именами СвойствоN, где N от 1 // до возврата функции "КоличествоСвойств" текущего модуля. Данный поиск осуществляется если // указанный параметр принимает значения от 1 до "КоличествоСвойств". // // Параметры: -// ПараметрыСинхронизации - Структура - Параметры по которым будет производиться поиск вида проверок: -// * Свойство1 - ЛюбаяСсылка - Первое свойство синхронизации. -// * Свойство2 - ЛюбаяСсылка - Второе свойство синхронизации. -// * Свойство3 - ЛюбаяСсылка - Третье свойство синхронизации. -// ... -// * СвойствоN - ЛюбаяСсылка - N-ое свойство синхронизации. -// КоличествоСвойств - Число - Количество свойств по которым нужно вести поиск. +// ПоляСинхронизации - Структура - Параметры по которым будет производиться поиск вида проверок: +// * Свойство1 - ЛюбаяСсылка, Булево, Число, Строка, Дата - Первое свойство синхронизации. +// * Свойство2 - ЛюбаяСсылка, Булево, Число, Строка, Дата - Второе свойство синхронизации. +// * Свойство3 - ЛюбаяСсылка, Булево, Число, Строка, Дата - Третье свойство синхронизации. +// ... +// * СвойствоN - Булево, Число, Строка, Дата - N-ое свойство синхронизации. +// // ПоискПоТочномуСоответствию - Булево - Регулирует возможности точности. Если Истина, то поиск ведется // по переданным свойствам на равенство, остальные свойства должны быть равны // Неопределено (табличная часть дополнительных свойств должна быть пуста). @@ -1232,7 +1090,7 @@ // Возвращаемое значение: СправочникСсылка.ВидыПроверок - Найденный элемент справочника, либо пустая ссылка // в случае если поиск не дал результата. // -Функция ОбычныйПоискВидаПроверки(ПараметрыСинхронизации, ПоискПоТочномуСоответствию = Истина) +Функция ОбычныйПоискВидаПроверки(ПоляСинхронизации, ПоискПоТочномуСоответствию = Истина) Запрос = Новый Запрос( "ВЫБРАТЬ @@ -1249,7 +1107,7 @@ | КОЛИЧЕСТВО(ВидыПроверок.СвойстваОбъекта.Ссылка) = 0"); ТекстУсловий = " Истина "; - КоличествоПараметров = ПараметрыСинхронизации.Количество(); + КоличествоПараметров = ПоляСинхронизации.Количество() - 1; КоличествоСвойств = КоличествоСвойств(); Для Индекс = 1 По КоличествоСвойств Цикл @@ -1260,7 +1118,7 @@ ТекстУсловий = ТекстУсловий + " И " + Свойство + " = Неопределено"; КонецЕсли; Иначе - Значение = ПараметрыСинхронизации[Свойство]; + Значение = ПоляСинхронизации[Свойство]; ТекстУсловий = ТекстУсловий + " И " + Свойство + " = &" + Свойство; Запрос.УстановитьПараметр(Свойство, Значение); @@ -1275,55 +1133,53 @@ КонецФункции -Функция НовыйВидПроверки(ПараметрыПроверки) - - ПараметрыСинхронизации = ПараметрыПроверки.ПараметрыСинхронизации; +// Создает элемент справочника видов проверки по переданным параметрам. +// +// Параметры: +// ПоляСинхронизации - Структура - Параметры по которым будет производиться поиск вида проверок: +// * Свойство1 - ЛюбаяСсылка, Булево, Число, Строка, Дата - Первое свойство синхронизации. +// * Свойство2 - ЛюбаяСсылка, Булево, Число, Строка, Дата - Второе свойство синхронизации. +// * Свойство3 - ЛюбаяСсылка, Булево, Число, Строка, Дата - Третье свойство синхронизации. +// ... +// * СвойствоN - Булево, Число, Строка, Дата - N-ое свойство синхронизации. +// +// Возвращаемое значение: СправочникСсылка.ВидыПроверок - Ссылка на созданный элемент справочника. +// +Функция НовыйВидПроверки(ПоляСинхронизации) НовыйВидПроверки = Справочники.ВидыПроверок.СоздатьЭлемент(); - Если ЗначениеЗаполнено(ПараметрыПроверки.Наименование) Тогда - НовыйВидПроверки.Наименование = ПараметрыПроверки.Наименование; - Иначе - НовыйВидПроверки.Наименование = ПараметрыСинхронизации.Свойство1; - КонецЕсли; - - ПредставлениеСсылки = НовыйВидПроверки.Наименование; - + НовыйВидПроверки.Наименование = ПоляСинхронизации.Наименование; КоличествоСвойств = КоличествоСвойств(); - КоличествоПараметров = ПараметрыСинхронизации.Количество(); + КоличествоПараметров = ПоляСинхронизации.Количество() - 1; Если КоличествоСвойств > КоличествоПараметров Тогда Для Индекс = 1 По КоличествоПараметров Цикл ИмяСвойства = "Свойство" + Формат(Индекс, "ЧГ=0"); - НовыйВидПроверки[ИмяСвойства] = ПараметрыСинхронизации[ИмяСвойства]; - Если Индекс > 1 Тогда - ПредставлениеСсылки = ПредставлениеСсылки + ", " + Строка(ПараметрыСинхронизации[ИмяСвойства]); - КонецЕсли; + НовыйВидПроверки[ИмяСвойства] = ПоляСинхронизации[ИмяСвойства]; КонецЦикла; Иначе Для Индекс = 1 По КоличествоПараметров Цикл ИмяСвойства = "Свойство" + Формат(Индекс, "ЧГ=0"); Если Индекс <= КоличествоСвойств Тогда - НовыйВидПроверки[ИмяСвойства] = ПараметрыСинхронизации[ИмяСвойства]; - Если Индекс > 1 Тогда - ПредставлениеСсылки = ПредставлениеСсылки + ", " + Строка(ПараметрыСинхронизации[ИмяСвойства]); - КонецЕсли; + НовыйВидПроверки[ИмяСвойства] = ПоляСинхронизации[ИмяСвойства]; Иначе ЗаполнитьЗначенияСвойств(НовыйВидПроверки.СвойстваОбъекта.Добавить(), - Новый Структура("ИмяСвойства, ЗначениеСвойства", ИмяСвойства, ПараметрыСинхронизации[ИмяСвойства])); - Если Индекс > 1 Тогда - ПредставлениеСсылки = ПредставлениеСсылки + ", " + Строка(ПараметрыСинхронизации[ИмяСвойства]); - КонецЕсли; + Новый Структура("ИмяСвойства, ЗначениеСвойства", ИмяСвойства, ПоляСинхронизации[ИмяСвойства])); КонецЕсли; КонецЦикла; КонецЕсли; - НовыйВидПроверки.ПредставлениеСсылки = ПредставлениеСсылки; НовыйВидПроверки.Записать(); Возврат НовыйВидПроверки.Ссылка; КонецФункции +// Количество свойств в шапке справочника ВидыПроверок. +// +// Возвращаемое значение: +// Число - значение 5. +// Функция КоличествоСвойств() Возврат 5; @@ -1336,6 +1192,8 @@ Процедура ОбновлениеСправочникаПроверок(ГруппыПроверок, Проверки) + ПроверкаУникальностиЗаданныхЭлементов(ГруппыПроверок, Проверки); + ДобавитьГруппыПроверок(ГруппыПроверок); ДобавитьПроверки(Проверки); @@ -1363,6 +1221,16 @@ КонецЕсли; ЗаполнитьЗначенияСвойств(ГруппаПроверокОбъект, ГруппаПроверок); + + РодительГруппыПроверки = КонтрольВеденияУчета.ПроверкаПоИдентификатору(ГруппаПроверок.ИдентификаторГруппы); + ГруппаПроверокОбъект.Родитель = РодительГруппыПроверки; + + Если ЗначениеЗаполнено(РодительГруппыПроверки) Тогда + ГруппаПроверокОбъект.КонтекстПроверокВеденияУчета = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(РодительГруппыПроверки, "КонтекстПроверокВеденияУчета"); + Иначе + ГруппаПроверокОбъект.КонтекстПроверокВеденияУчета = ГруппаПроверок.КонтекстПроверокВеденияУчета; + КонецЕсли; + ОбновлениеИнформационнойБазы.ЗаписатьДанные(ГруппаПроверокОбъект); КонецЦикла; @@ -1399,7 +1267,6 @@ КонецЦикла; Запрос.МенеджерВременныхТаблиц.Закрыть(); - Запрос = Неопределено; КонецПроцедуры @@ -1429,7 +1296,15 @@ ЗаполнитьЗначенияСвойств(ПроверкаОбъект, Проверка); - ПроверкаОбъект.Родитель = КонтрольВеденияУчета.ПроверкаПоИдентификатору(Проверка.ИдентификаторРодителя); + РодительПроверки = КонтрольВеденияУчета.ПроверкаПоИдентификатору(Проверка.ИдентификаторГруппы); + ПроверкаОбъект.Родитель = РодительПроверки; + + Если ЗначениеЗаполнено(РодительПроверки) Тогда + ПроверкаОбъект.КонтекстПроверокВеденияУчета = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(РодительПроверки, "КонтекстПроверокВеденияУчета"); + Иначе + ПроверкаОбъект.КонтекстПроверокВеденияУчета = Проверка.КонтекстПроверокВеденияУчета; + КонецЕсли; + ПроверкаОбъект.Использование = Истина; Если ЗначениеЗаполнено(Проверка.ЛимитПроблем) Тогда @@ -1477,7 +1352,6 @@ КонецЦикла; Запрос.МенеджерВременныхТаблиц.Закрыть(); - Запрос = Неопределено; КонецПроцедуры @@ -1485,11 +1359,104 @@ УстановитьПривилегированныйРежим(Истина); - ПроверкиВеденияУчета = КонтрольВеденияУчетаПовтИсп.ПроверкиВеденияУчета(); + ПроверкиВеденияУчета = КонтрольВеденияУчетаСлужебныйПовтИсп.ПроверкиВеденияУчета(); ОбновлениеСправочникаПроверок(ПроверкиВеденияУчета.ГруппыПроверок, ПроверкиВеденияУчета.Проверки); КонецПроцедуры +Процедура ПроверкаУникальностиЗаданныхЭлементов(ГруппыПроверок, Проверки) + + Запрос = Новый Запрос( + "ВЫБРАТЬ + | Наименование КАК Наименование, + | Идентификатор КАК Идентификатор + |ПОМЕСТИТЬ ВТ_ГруппыПроверок + |ИЗ + | &ГруппыПроверок КАК ГруппыПроверок + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | Наименование КАК Наименование, + | Идентификатор КАК Идентификатор + |ПОМЕСТИТЬ ВТ_Проверки + |ИЗ + | &Проверки КАК Проверки + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ВТ_ГруппыПроверок.Наименование КАК Наименование, + | ВТ_ГруппыПроверок.Идентификатор КАК Идентификатор + |ПОМЕСТИТЬ ВТ_ОбщаяТаблица + |ИЗ + | ВТ_ГруппыПроверок КАК ВТ_ГруппыПроверок + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | ВТ_Проверки.Наименование, + | ВТ_Проверки.Идентификатор + |ИЗ + | ВТ_Проверки КАК ВТ_Проверки + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ВТ_ОбщаяТаблица.Идентификатор КАК Идентификатор + |ПОМЕСТИТЬ ВТ_ГруппировкаПоИдентификатору + |ИЗ + | ВТ_ОбщаяТаблица КАК ВТ_ОбщаяТаблица + | + |СГРУППИРОВАТЬ ПО + | ВТ_ОбщаяТаблица.Идентификатор + | + |ИМЕЮЩИЕ + | КОЛИЧЕСТВО(ВТ_ОбщаяТаблица.Идентификатор) > 1 + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ВТ_ОбщаяТаблица.Наименование КАК Наименование, + | ВТ_ОбщаяТаблица.Идентификатор КАК Идентификатор + |ИЗ + | ВТ_ГруппировкаПоИдентификатору КАК ВТ_ГруппировкаПоИдентификатору + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_ОбщаяТаблица КАК ВТ_ОбщаяТаблица + | ПО ВТ_ГруппировкаПоИдентификатору.Идентификатор = ВТ_ОбщаяТаблица.Идентификатор + | + |УПОРЯДОЧИТЬ ПО + | Идентификатор + |ИТОГИ ПО + | Идентификатор"); + + Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; + Запрос.УстановитьПараметр("ГруппыПроверок", ГруппыПроверок); + Запрос.УстановитьПараметр("Проверки", Проверки); + + ТекстИсключения = ""; + Результат = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); + + Пока Результат.Следующий() Цикл + + ТекстИсключения = ТекстИсключения + ?(ЗначениеЗаполнено(ТекстИсключения), Символы.ПС, "") + + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Дублирующийся идентификатор: ""%1""'"), Результат.Идентификатор); + + ДетальныйРезультат = Результат.Выбрать(); + Пока ДетальныйРезультат.Следующий() Цикл + ТекстИсключения = ТекстИсключения + Символы.ПС + "- " + ДетальныйРезультат.Наименование; + КонецЦикла; + + КонецЦикла; + + Запрос.МенеджерВременныхТаблиц.Закрыть(); + + Если ЗначениеЗаполнено(ТекстИсключения) Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'В процедуре КонтрольВеденияУчетаПереопределяемый.ПриОпределенииПроверок у следующих проверок совпадают идентификаторы: + |%1'"), ТекстИсключения); + КонецЕсли; + +КонецПроцедуры + // Функция формирует хэш таблицы проверок, для сравнения с предыдущим хешем, // хранящимся в информационной базе (РегистрСведений.ПараметрыРаботыПрограммы). // Хэш формируется следующим образом: Формируются таблицы проверок (будущие элементы справочника @@ -1504,7 +1471,7 @@ ДанныеСистемныхПроверок = Новый Соответствие; - ПроверкиВеденияУчета = КонтрольВеденияУчетаПовтИсп.ПроверкиВеденияУчета(); + ПроверкиВеденияУчета = КонтрольВеденияУчетаСлужебныйПовтИсп.ПроверкиВеденияУчета(); МассивХэша = Новый Массив; Для Каждого ЭлементПроверокУчета Из ПроверкиВеденияУчета Цикл @@ -1534,28 +1501,19 @@ КонецФункции -Функция ЕстьИзмененияПараметровСистемныхПроверок() - - УстановитьПривилегированныйРежим(Истина); - - ПоследниеИзменения = СтандартныеПодсистемыСервер.ИзмененияПараметраРаботыПрограммы("СтандартныеПодсистемы.КонтрольВеденияУчета.СистемныеПроверки"); - Возврат ПоследниеИзменения = Неопределено Или ПоследниеИзменения.Количество() > 0; - -КонецФункции - #КонецОбласти #Область КонтрольСсылочнойЦелостности -Процедура НайтиБитыеСсылки(ОбъектМетаданных, ПараметрыПроверки) +Процедура НайтиБитыеСсылки(ОбъектМетаданных, ПараметрыПроверки, КэшБитыхСсылок) ПолноеИмя = ОбъектМетаданных.ПолноеИмя(); Реквизиты = ОбъектМетаданных.Реквизиты; ТабличныеЧасти = ОбъектМетаданных.ТабличныеЧасти; - ТекстЗапроса = " - |ВЫБРАТЬ ПЕРВЫЕ 1000 - | ОбъектМетаданных.Ссылка КАК Ссылка + ТекстЗапроса = + "ВЫБРАТЬ ПЕРВЫЕ 1000 + | ОбъектМетаданных.Ссылка КАК ПроблемныйОбъект |ИЗ | &ОбъектМетаданных КАК ОбъектМетаданных |ГДЕ @@ -1563,15 +1521,14 @@ | |УПОРЯДОЧИТЬ ПО | ОбъектМетаданных.Ссылка"; + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ОбъектМетаданных", ПолноеИмя); Запрос = Новый Запрос(ТекстЗапроса); Запрос.УстановитьПараметр("Ссылка", ""); - Результат = Запрос.Выполнить().Выгрузить(); - + Результат = Запрос.Выполнить().Выгрузить(); ОграничениеПоДате = ПараметрыПроверки.ДатаНачалаПроверки; - КэшБитыхСсылок = Новый Массив; Пока Истина Цикл @@ -1581,7 +1538,7 @@ Для Каждого СтрокаРезультата Из Результат Цикл - СсылкаНаОбъект = СтрокаРезультата.Ссылка; + СсылкаНаОбъект = СтрокаРезультата.ПроблемныйОбъект; УточнениеПроблемы = ""; Если ЗначениеЗаполнено(ОграничениеПоДате) @@ -1598,7 +1555,7 @@ Продолжить; КонецЕсли; - Если КэшБитыхСсылок.Найти(ТекущаяСсылка) <> Неопределено Тогда + Если КэшБитыхСсылок.Получить(ТекущаяСсылка) <> Неопределено Тогда УточнениеПроблемы = УточнениеПроблемы + ?(ЗначениеЗаполнено(УточнениеПроблемы), Символы.ПС, "") + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='У объекта ""%1"" в реквизите ""%2"" указан несуществующий элемент: ""%3"".'"), СсылкаНаОбъект, Реквизит.Имя, ТекущаяСсылка); @@ -1613,7 +1570,7 @@ УточнениеПроблемы = УточнениеПроблемы + ?(ЗначениеЗаполнено(УточнениеПроблемы), Символы.ПС, "") + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='У объекта ""%1"" в реквизите ""%2"" указан несуществующий элемент: ""%3"".'"), СсылкаНаОбъект, Реквизит.Имя, ТекущаяСсылка); - КэшБитыхСсылок.Добавить(ТекущаяСсылка); + КэшБитыхСсылок.Вставить(ТекущаяСсылка, ""); КонецЕсли; @@ -1632,7 +1589,7 @@ Продолжить; КонецЕсли; - Если КэшБитыхСсылок.Найти(ТекущаяСсылка) <> Неопределено Тогда + Если КэшБитыхСсылок.Получить(ТекущаяСсылка) <> Неопределено Тогда УточнениеПроблемы = УточнениеПроблемы + ?(ЗначениеЗаполнено(УточнениеПроблемы), Символы.ПС, "") + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='У объекта ""%1"" в реквизите адресации ""%2"" указан несуществующий элемент: ""%3"".'"), СсылкаНаОбъект, РеквизитАдресации.Имя, ТекущаяСсылка); @@ -1647,7 +1604,7 @@ УточнениеПроблемы = УточнениеПроблемы + ?(ЗначениеЗаполнено(УточнениеПроблемы), Символы.ПС, "") + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='У объекта ""%1"" в реквизите адресации ""%2"" указан несуществующий элемент: ""%3"".'"), СсылкаНаОбъект, РеквизитАдресации.Имя, ТекущаяСсылка); - КэшБитыхСсылок.Добавить(ТекущаяСсылка); + КэшБитыхСсылок.Вставить(ТекущаяСсылка, ""); КонецЕсли; @@ -1675,7 +1632,7 @@ Продолжить; КонецЕсли; - Если КэшБитыхСсылок.Найти(ТекущаяСсылка) <> Неопределено Тогда + Если КэшБитыхСсылок.Получить(ТекущаяСсылка) <> Неопределено Тогда УточнениеПроблемы = УточнениеПроблемы + ?(ЗначениеЗаполнено(УточнениеПроблемы), Символы.ПС, "") + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='У объекта ""%1"" в реквизите ""%2"" табличной части ""%3"" (строка №%4) указан несуществующий элемент: ""%5"".'"), @@ -1692,7 +1649,7 @@ УточнениеПроблемы = УточнениеПроблемы + ?(ЗначениеЗаполнено(УточнениеПроблемы), Символы.ПС, "") + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='У объекта ""%1"" в реквизите ""%2"" табличной части ""%3"" (строка №%4) указан несуществующий элемент: ""%5"".'"), СсылкаНаОбъект, РеквизитТабличнойЧасти.Имя, ТабличнаяЧасть.Имя, ТекущийНомерСтроки, ТекущаяСсылка); - КэшБитыхСсылок.Добавить(ТекущаяСсылка); + КэшБитыхСсылок.Вставить(ТекущаяСсылка, ""); КонецЕсли; @@ -1713,45 +1670,46 @@ КонецЕсли; Проблема = ОписаниеПроблемы(СсылкаНаОбъект, ПараметрыПроверки); - Проблема.УточнениеПроблемы = НСтр("ru = 'Обнаружено нарушение ссылочной целостности:'") + Символы.ПС + УточнениеПроблемы; + Проблема.УточнениеПроблемы = НСтр("ru = 'Нарушена ссылочная целостность:'") + Символы.ПС + УточнениеПроблемы; + Если Реквизиты.Найти("Ответственный") <> Неопределено Тогда - Проблема.Вставить("Ответственный", ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СсылкаНаОбъект, "Ответственный")); + Проблема.Ответственный = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СсылкаНаОбъект, "Ответственный"); КонецЕсли; ЗаписатьПроблему(Проблема, ПараметрыПроверки); КонецЦикла; - Запрос.УстановитьПараметр("Ссылка", СтрокаРезультата.Ссылка); + Запрос.УстановитьПараметр("Ссылка", СтрокаРезультата.ПроблемныйОбъект); Результат = Запрос.Выполнить().Выгрузить(); + КонецЦикла; - Запрос = Неопределено; КонецПроцедуры #Область КонтрольСсылочнойЦелостностиВРегистрах -Процедура НайтиБитыеСсылкиВРегистрах(ОбъектМетаданных, ПараметрыПроверки) +Процедура НайтиБитыеСсылкиВРегистрах(ОбъектМетаданных, ПараметрыПроверки, КэшБитыхСсылок) Если ОбъектМетаданных.Измерения.Количество() = 0 Тогда Возврат; КонецЕсли; Если ОбщегоНазначения.ЭтоРегистрНакопления(ОбъектМетаданных) Тогда - НайтиБитыеСсылкиВРегистрахНакопления(ОбъектМетаданных, ПараметрыПроверки); + НайтиБитыеСсылкиВРегистрахНакопления(ОбъектМетаданных, ПараметрыПроверки, КэшБитыхСсылок); ИначеЕсли ОбщегоНазначения.ЭтоРегистрСведений(ОбъектМетаданных) Тогда - НайтиБитыеСсылкиВРегистрахСведений(ОбъектМетаданных, ПараметрыПроверки); + НайтиБитыеСсылкиВРегистрахСведений(ОбъектМетаданных, ПараметрыПроверки, КэшБитыхСсылок); ИначеЕсли ОбщегоНазначения.ЭтоРегистрБухгалтерии(ОбъектМетаданных) Тогда - НайтиБитыеСсылкиВРегистрахБухгалтерии(ОбъектМетаданных, ПараметрыПроверки); + НайтиБитыеСсылкиВРегистрахБухгалтерии(ОбъектМетаданных, ПараметрыПроверки, КэшБитыхСсылок); ИначеЕсли ОбщегоНазначения.ЭтоРегистрРасчета(ОбъектМетаданных) Тогда - НайтиБитыеСсылкиВРегистрахРасчета(ОбъектМетаданных, ПараметрыПроверки); + НайтиБитыеСсылкиВРегистрахРасчета(ОбъектМетаданных, ПараметрыПроверки, КэшБитыхСсылок); КонецЕсли; КонецПроцедуры #Область КонтрольСсылочнойЦелостностиВРегистрахНакопления -Процедура НайтиБитыеСсылкиВРегистрахНакопления(ОбъектМетаданных, ПараметрыПроверки) +Процедура НайтиБитыеСсылкиВРегистрахНакопления(ОбъектМетаданных, ПараметрыПроверки, КэшБитыхСсылок) ПолноеИмя = ОбъектМетаданных.ПолноеИмя(); Измерения = ОбъектМетаданных.Измерения; @@ -1805,9 +1763,9 @@ Запрос.УстановитьПараметр("НомерСтроки", 0); Запрос.УстановитьПараметр("ДатаНачалаПроверки", ПараметрыПроверки.ДатаНачалаПроверки); Запрос.УстановитьПараметр("Регистратор", ""); + Результат = Запрос.Выполнить().Выгрузить(); - КэшБитыхСсылок = Новый Массив; Пока Истина Цикл Если Результат.Количество() = 0 Тогда @@ -1825,7 +1783,7 @@ Продолжить; КонецЕсли; - Если КэшБитыхСсылок.Найти(ТекущаяСсылка) <> Неопределено Тогда + Если КэшБитыхСсылок.Получить(ТекущаяСсылка) <> Неопределено Тогда УточнениеПроблемы = УточнениеПроблемы + ?(ЗначениеЗаполнено(УточнениеПроблемы), Символы.ПС, "") + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='У регистра накопления ""%1"" в %2, записи №%3 по регистратору ""%4"" указан несуществующий элемент: ""%5"".'"), @@ -1842,7 +1800,7 @@ ОбъектМетаданных.Представление(), ПодчиненныйОбъект.ТипМетаданныхВТворительномПадеже, Формат(СтрокаРезультата.НомерСтроки, "ЧГ=0"), СтрокаРезультата["РегистраторРеквизитПредставление"], СтрокаРезультата[ПодчиненныйОбъект.ИмяМетаданных + ПодчиненныйОбъект.ТипМетаданныхВИменительномПадеже + "Представление"]); - КэшБитыхСсылок.Добавить(ТекущаяСсылка); + КэшБитыхСсылок.Вставить(ТекущаяСсылка, ""); КонецЕсли; @@ -1856,6 +1814,7 @@ СтруктураНабораЗаписей.Вставить("Регистратор", СтрокаРезультата["РегистраторРеквизитСсылка"]); Проблема = ОписаниеПроблемы(ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ОбъектМетаданных), ПараметрыПроверки); + Проблема.УточнениеПроблемы = НСтр("ru = 'Обнаружено нарушение ссылочной целостности:'") + Символы.ПС + УточнениеПроблемы; Проблема.ДополнительнаяИнформация = Новый ХранилищеЗначения(СтруктураНабораЗаписей); @@ -1870,7 +1829,6 @@ Результат = Запрос.Выполнить().Выгрузить(); КонецЦикла; - Запрос = Неопределено; КонецПроцедуры @@ -1878,7 +1836,7 @@ #Область КонтрольСсылочнойЦелостностиВРегистрахСведений -Процедура НайтиБитыеСсылкиВРегистрахСведений(ОбъектМетаданных, ПараметрыПроверки) +Процедура НайтиБитыеСсылкиВРегистрахСведений(ОбъектМетаданных, ПараметрыПроверки, КэшБитыхСсылок) Измерения = ОбъектМетаданных.Измерения; Ресурсы = ОбъектМетаданных.Ресурсы; @@ -1915,24 +1873,23 @@ КонецЦикла; Если ОбъектМетаданных.РежимЗаписи = Метаданные.СвойстваОбъектов.РежимЗаписиРегистра.ПодчинениеРегистратору Тогда - НайтиБитыеСсылкиВПодчиненныхРегистрахСведений(ОбъектМетаданных, ПоляВыборки, ИнформацияОМетаданных, ПараметрыПроверки); + НайтиБитыеСсылкиВПодчиненныхРегистрахСведений(ОбъектМетаданных, ПоляВыборки, ИнформацияОМетаданных, ПараметрыПроверки, КэшБитыхСсылок); Иначе Если ОбъектМетаданных.ПериодичностьРегистраСведений <> Метаданные.СвойстваОбъектов.ПериодичностьРегистраСведений.Непериодический Тогда - НайтиБитыеСсылкиВНеПодчиненныхПериодическихРегистрахСведений(ОбъектМетаданных, ПоляВыборки, ИнформацияОМетаданных, ПараметрыПроверки); + НайтиБитыеСсылкиВНеПодчиненныхПериодическихРегистрахСведений(ОбъектМетаданных, ПоляВыборки, ИнформацияОМетаданных, ПараметрыПроверки, КэшБитыхСсылок); Иначе - НайтиБитыеСсылкиВНеПодчиненныхНеПериодическихРегистрахСведений(ОбъектМетаданных, ПоляВыборки, ИнформацияОМетаданных, ПараметрыПроверки); + НайтиБитыеСсылкиВНеПодчиненныхНеПериодическихРегистрахСведений(ОбъектМетаданных, ПоляВыборки, ИнформацияОМетаданных, ПараметрыПроверки, КэшБитыхСсылок); КонецЕсли; КонецЕсли; КонецПроцедуры -Процедура НайтиБитыеСсылкиВПодчиненныхРегистрахСведений(ОбъектМетаданных, ПоляВыборки, ИнформацияОМетаданных, ПараметрыПроверки) +Процедура НайтиБитыеСсылкиВПодчиненныхРегистрахСведений(ОбъектМетаданных, ПоляВыборки, ИнформацияОМетаданных, ПараметрыПроверки, КэшБитыхСсылок) ПоляВыборки = ПоляВыборки + ", НомерСтроки Как НомерСтроки, Регистратор Как РегистраторРеквизитСсылка, ПредставлениеСсылки(Регистратор) Как РегистраторРеквизитПредставление"; ЗаполнитьЗначенияСвойств(ИнформацияОМетаданных.Добавить(), Новый Структура("ТипМетаданныхВИменительномПадеже, ТипМетаданныхВТворительномПадеже, ИмяМетаданных", "Реквизит", НСтр("ru = 'реквизите'"), "Регистратор")); - - + Запрос = Новый Запрос( "ВЫБРАТЬ ПЕРВЫЕ 1000 | &ПоляВыборки КАК ПоляВыборки @@ -1966,7 +1923,6 @@ Результат = Запрос.Выполнить().Выгрузить(); - КэшБитыхСсылок = Новый Массив; Пока Истина Цикл Если Результат.Количество() = 0 Тогда @@ -1984,7 +1940,7 @@ Продолжить; КонецЕсли; - Если КэшБитыхСсылок.Найти(ТекущаяСсылка) <> Неопределено Тогда + Если КэшБитыхСсылок.Получить(ТекущаяСсылка) <> Неопределено Тогда УточнениеПроблемы = УточнениеПроблемы + ?(ЗначениеЗаполнено(УточнениеПроблемы), Символы.ПС, "") + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='У регистра сведений ""%1"" в %2, записи №%3 по регистратору ""%4"" указан несуществующий элемент: ""%5"".'"), @@ -2001,7 +1957,7 @@ ОбъектМетаданных.Представление(), ПодчиненныйОбъект.ТипМетаданныхВТворительномПадеже, Формат(СтрокаРезультата.НомерСтроки, "ЧГ=0"), СтрокаРезультата["РегистраторРеквизитПредставление"], СтрокаРезультата[ПодчиненныйОбъект.ИмяМетаданных + ПодчиненныйОбъект.ТипМетаданныхВИменительномПадеже + "Представление"]); - КэшБитыхСсылок.Добавить(ТекущаяСсылка); + КэшБитыхСсылок.Вставить(ТекущаяСсылка, ""); КонецЕсли; @@ -2015,8 +1971,10 @@ СтруктураНабораЗаписей.Вставить("Регистратор", СтрокаРезультата["РегистраторРеквизитСсылка"]); Проблема = ОписаниеПроблемы(ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ОбъектМетаданных), ПараметрыПроверки); + Проблема.УточнениеПроблемы = НСтр("ru = 'Обнаружено нарушение ссылочной целостности:'") + Символы.ПС + УточнениеПроблемы; Проблема.ДополнительнаяИнформация = Новый ХранилищеЗначения(СтруктураНабораЗаписей); + ЗаписатьПроблему(Проблема, ПараметрыПроверки); КонецЦикла; @@ -2028,11 +1986,10 @@ Результат = Запрос.Выполнить().Выгрузить(); КонецЦикла; - Запрос = Неопределено; КонецПроцедуры -Процедура НайтиБитыеСсылкиВНеПодчиненныхПериодическихРегистрахСведений(ОбъектМетаданных, ПоляВыборки, ИнформацияОМетаданных, ПараметрыПроверки) +Процедура НайтиБитыеСсылкиВНеПодчиненныхПериодическихРегистрахСведений(ОбъектМетаданных, ПоляВыборки, ИнформацияОМетаданных, ПараметрыПроверки, КэшБитыхСсылок) Условие = "Период >= &Период"; ПоляУпорядочивания = "Период"; @@ -2053,17 +2010,16 @@ | ОбъектМетаданных.Период > &ДатаНачалаПроверки | И &Условие"; - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&Условие", "Истина И Истина И Истина Упорядочить По " + ПоляУпорядочивания); - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "КАК ПоляВыборки", ""); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&Условие", "Истина И Истина И Истина Упорядочить По " + ПоляУпорядочивания); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "КАК ПоляВыборки", ""); ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ОбъектМетаданных", ОбъектМетаданных.ПолноеИмя()); - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПоляВыборки", ПоляВыборки); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПоляВыборки", ПоляВыборки); Запрос = Новый Запрос(ТекстЗапроса); Запрос.УстановитьПараметр("ДатаНачалаПроверки", ПараметрыПроверки.ДатаНачалаПроверки); - Результат = Запрос.Выполнить().Выгрузить(); + Результат = Запрос.Выполнить().Выгрузить(); УсловиеАбсолюта = "Истина И Истина И Истина"; - КэшБитыхСсылок = Новый Массив; Пока Истина Цикл @@ -2088,7 +2044,7 @@ Продолжить; КонецЕсли; - Если КэшБитыхСсылок.Найти(ТекущаяСсылка) <> Неопределено Тогда + Если КэшБитыхСсылок.Получить(ТекущаяСсылка) <> Неопределено Тогда УточнениеПроблемы = УточнениеПроблемы + ?(ЗначениеЗаполнено(УточнениеПроблемы), Символы.ПС, "") + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='У регистра сведений ""%1"" в %2, по комбинации измерений ""%3"" указан несуществующий элемент: ""%4"".'"), @@ -2103,7 +2059,7 @@ + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='У регистра сведений ""%1"" в %2, по комбинации измерений ""%3"" указан несуществующий элемент: ""%4"".'"), ОбъектМетаданных.Представление(), ПодчиненныйОбъект.ТипМетаданныхВТворительномПадеже, ПоляУпорядочивания, СтрокаРезультата[ПодчиненныйОбъект.ИмяМетаданных + ПодчиненныйОбъект.ТипМетаданныхВИменительномПадеже + "Представление"]); - КэшБитыхСсылок.Добавить(ТекущаяСсылка); + КэшБитыхСсылок.Вставить(ТекущаяСсылка, ""); КонецЕсли; @@ -2117,15 +2073,17 @@ СтруктураНабораЗаписей.Вставить("Период", СтрокаРезультата["Период"]); Для Каждого Измерение Из Измерения Цикл ИзмерениеСсылка = СтрокаРезультата[Измерение.Имя + "ИзмерениеСсылка"]; - Если КэшБитыхСсылок.Найти(ИзмерениеСсылка) <> Неопределено Тогда + Если КэшБитыхСсылок.Получить(ИзмерениеСсылка) <> Неопределено Тогда Продолжить; КонецЕсли; СтруктураНабораЗаписей.Вставить(Измерение.Имя, ИзмерениеСсылка); КонецЦикла; Проблема = ОписаниеПроблемы(ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ОбъектМетаданных), ПараметрыПроверки); + Проблема.УточнениеПроблемы = НСтр("ru = 'Обнаружено нарушение ссылочной целостности:'") + Символы.ПС + УточнениеПроблемы; Проблема.ДополнительнаяИнформация = Новый ХранилищеЗначения(СтруктураНабораЗаписей); + ЗаписатьПроблему(Проблема, ПараметрыПроверки); КонецЦикла; @@ -2144,11 +2102,10 @@ Результат = Запрос.Выполнить().Выгрузить(); КонецЦикла; - Запрос = Неопределено; КонецПроцедуры -Процедура НайтиБитыеСсылкиВНеПодчиненныхНеПериодическихРегистрахСведений(ОбъектМетаданных, ПоляВыборки, ИнформацияОМетаданных, ПараметрыПроверки) +Процедура НайтиБитыеСсылкиВНеПодчиненныхНеПериодическихРегистрахСведений(ОбъектМетаданных, ПоляВыборки, ИнформацияОМетаданных, ПараметрыПроверки, КэшБитыхСсылок) Условие = ""; ПоляУпорядочивания = ""; @@ -2172,11 +2129,10 @@ ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ОбъектМетаданных", ОбъектМетаданных.ПолноеИмя()); ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПоляВыборки", ПоляВыборки); - Запрос = Новый Запрос(ТекстЗапроса); - Результат = Запрос.Выполнить().Выгрузить(); + Запрос = Новый Запрос(ТекстЗапроса); + Результат = Запрос.Выполнить().Выгрузить(); УсловиеАбсолюта = "ГДЕ" + Символы.ПС + Символы.Таб + "ИСТИНА"; - КэшБитыхСсылок = Новый Массив; Пока Истина Цикл @@ -2201,7 +2157,7 @@ Продолжить; КонецЕсли; - Если КэшБитыхСсылок.Найти(ТекущаяСсылка) <> Неопределено Тогда + Если КэшБитыхСсылок.Получить(ТекущаяСсылка) <> Неопределено Тогда УточнениеПроблемы = УточнениеПроблемы + ?(ЗначениеЗаполнено(УточнениеПроблемы), Символы.ПС, "") + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='У регистра сведений ""%1"" в %2, по комбинации измерений ""%3"" указан несуществующий элемент: ""%4"".'"), @@ -2216,7 +2172,7 @@ + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='У регистра сведений ""%1"" в %2, по комбинации измерений ""%3"" указан несуществующий элемент: ""%4"".'"), ОбъектМетаданных.Представление(), ПодчиненныйОбъект.ТипМетаданныхВТворительномПадеже, ПоляУпорядочивания, СтрокаРезультата[ПодчиненныйОбъект.ИмяМетаданных + ПодчиненныйОбъект.ТипМетаданныхВИменительномПадеже + "Представление"]); - КэшБитыхСсылок.Добавить(ТекущаяСсылка); + КэшБитыхСсылок.Вставить(ТекущаяСсылка, ""); КонецЕсли; @@ -2229,15 +2185,17 @@ СтруктураНабораЗаписей = Новый Структура; Для Каждого Измерение Из Измерения Цикл ИзмерениеСсылка = СтрокаРезультата[Измерение.Имя + "ИзмерениеСсылка"]; - Если КэшБитыхСсылок.Найти(ИзмерениеСсылка) <> Неопределено Тогда + Если КэшБитыхСсылок.Получить(ИзмерениеСсылка) <> Неопределено Тогда Продолжить; КонецЕсли; СтруктураНабораЗаписей.Вставить(Измерение.Имя, ИзмерениеСсылка); КонецЦикла; Проблема = ОписаниеПроблемы(ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ОбъектМетаданных), ПараметрыПроверки); + Проблема.УточнениеПроблемы = НСтр("ru = 'Обнаружено нарушение ссылочной целостности:'") + Символы.ПС + УточнениеПроблемы; Проблема.ДополнительнаяИнформация = Новый ХранилищеЗначения(СтруктураНабораЗаписей); + ЗаписатьПроблему(Проблема, ПараметрыПроверки); КонецЦикла; @@ -2255,7 +2213,6 @@ Результат = Запрос.Выполнить().Выгрузить(); КонецЦикла; - Запрос = Неопределено; КонецПроцедуры @@ -2263,9 +2220,8 @@ #Область КонтрольСсылочнойЦелостностиВРегистрахБухгалтерии -Процедура НайтиБитыеСсылкиВРегистрахБухгалтерии(ОбъектМетаданных, ПараметрыПроверки) +Процедура НайтиБитыеСсылкиВРегистрахБухгалтерии(ОбъектМетаданных, ПараметрыПроверки, КэшБитыхСсылок) - ПолноеИмя = ОбъектМетаданных.ПолноеИмя(); Измерения = ОбъектМетаданных.Измерения; Реквизиты = ОбъектМетаданных.Реквизиты; СтандартныеРеквизиты = ОбъектМетаданных.СтандартныеРеквизиты; @@ -2282,7 +2238,6 @@ ЗаполнитьЗначенияСвойств(ИнформацияОМетаданных.Добавить(), Новый Структура("ТипМетаданныхВИменительномПадеже, ТипМетаданныхВТворительномПадеже, ИмяМетаданных", "Реквизит", НСтр("ru = 'реквизите'"), "Регистратор")); - Для ИндексСубконто = 1 По МаксимальноеКоличествоСубконто Цикл Если КорреспонденцияОбъекта Тогда @@ -2432,7 +2387,6 @@ | ИНАЧЕ Регистратор > &Регистратор | КОНЕЦ"; - Запрос.Текст = СтрЗаменить(Запрос.Текст, "КАК ПоляВыборки", ""); Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ОбъектМетаданных", ОбъектМетаданных.ПолноеИмя() + ".ДвиженияССубконто(, , " + Условие + ", , )"); Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ПоляВыборки", ПоляВыборки); @@ -2443,7 +2397,6 @@ Результат = Запрос.Выполнить().Выгрузить(); - КэшБитыхСсылок = Новый Массив; Пока Истина Цикл Если Результат.Количество() = 0 Тогда @@ -2461,7 +2414,7 @@ Продолжить; КонецЕсли; - Если КэшБитыхСсылок.Найти(ТекущаяСсылка) <> Неопределено Тогда + Если КэшБитыхСсылок.Получить(ТекущаяСсылка) <> Неопределено Тогда УточнениеПроблемы = УточнениеПроблемы + ?(ЗначениеЗаполнено(УточнениеПроблемы), Символы.ПС, "") + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='У регистра бухгалтерии ""%1"" в %2, записи №%3 по регистратору ""%4"" указан несуществующий элемент: ""%5"".'"), @@ -2478,7 +2431,7 @@ ОбъектМетаданных.Представление(), ПодчиненныйОбъект.ТипМетаданныхВТворительномПадеже, Формат(СтрокаРезультата.НомерСтроки, "ЧГ=0"), СтрокаРезультата["РегистраторРеквизитПредставление"], СтрокаРезультата[ПодчиненныйОбъект.ИмяМетаданных + ПодчиненныйОбъект.ТипМетаданныхВИменительномПадеже + "Представление"]); - КэшБитыхСсылок.Добавить(ТекущаяСсылка); + КэшБитыхСсылок.Вставить(ТекущаяСсылка, ""); КонецЕсли; @@ -2492,8 +2445,10 @@ СтруктураНабораЗаписей.Вставить("Регистратор", СтрокаРезультата["РегистраторРеквизитСсылка"]); Проблема = ОписаниеПроблемы(ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ОбъектМетаданных), ПараметрыПроверки); + Проблема.УточнениеПроблемы = НСтр("ru = 'Обнаружено нарушение ссылочной целостности:'") + Символы.ПС + УточнениеПроблемы; Проблема.ДополнительнаяИнформация = Новый ХранилищеЗначения(СтруктураНабораЗаписей); + ЗаписатьПроблему(Проблема, ПараметрыПроверки); КонецЦикла; @@ -2505,7 +2460,6 @@ Результат = Запрос.Выполнить().Выгрузить(); КонецЦикла; - Запрос = Неопределено; КонецПроцедуры @@ -2513,7 +2467,7 @@ #Область КонтрольСсылочнойЦелостностиВРегистрахРасчета -Процедура НайтиБитыеСсылкиВРегистрахРасчета(ОбъектМетаданных, ПараметрыПроверки) +Процедура НайтиБитыеСсылкиВРегистрахРасчета(ОбъектМетаданных, ПараметрыПроверки, КэшБитыхСсылок) ПолноеИмя = ОбъектМетаданных.ПолноеИмя(); Измерения = ОбъектМетаданных.Измерения; @@ -2584,9 +2538,9 @@ Запрос.УстановитьПараметр("НомерСтроки", 0); Запрос.УстановитьПараметр("ДатаНачалаПроверки", ПараметрыПроверки.ДатаНачалаПроверки); Запрос.УстановитьПараметр("Регистратор", ""); + Результат = Запрос.Выполнить().Выгрузить(); - КэшБитыхСсылок = Новый Массив; Пока Истина Цикл Если Результат.Количество() = 0 Тогда @@ -2604,7 +2558,7 @@ Продолжить; КонецЕсли; - Если КэшБитыхСсылок.Найти(ТекущаяСсылка) <> Неопределено Тогда + Если КэшБитыхСсылок.Получить(ТекущаяСсылка) <> Неопределено Тогда УточнениеПроблемы = УточнениеПроблемы + ?(ЗначениеЗаполнено(УточнениеПроблемы), Символы.ПС, "") + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='У регистра расчета ""%1"" в %2, записи №%3 по регистратору ""%4"" указан несуществующий элемент: ""%5"".'"), @@ -2621,7 +2575,7 @@ ОбъектМетаданных.Представление(), ПодчиненныйОбъект.ТипМетаданныхВТворительномПадеже, Формат(СтрокаРезультата.НомерСтроки, "ЧГ=0"), СтрокаРезультата["РегистраторРеквизитПредставление"], СтрокаРезультата[ПодчиненныйОбъект.ИмяМетаданных + ПодчиненныйОбъект.ТипМетаданныхВИменительномПадеже + "Представление"]); - КэшБитыхСсылок.Добавить(ТекущаяСсылка); + КэшБитыхСсылок.Вставить(ТекущаяСсылка, ""); КонецЕсли; @@ -2635,8 +2589,10 @@ СтруктураНабораЗаписей.Вставить("Регистратор", СтрокаРезультата["РегистраторРеквизитСсылка"]); Проблема = ОписаниеПроблемы(ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ОбъектМетаданных), ПараметрыПроверки); + Проблема.УточнениеПроблемы = НСтр("ru = 'Обнаружено нарушение ссылочной целостности:'") + Символы.ПС + УточнениеПроблемы; Проблема.ДополнительнаяИнформация = Новый ХранилищеЗначения(СтруктураНабораЗаписей); + ЗаписатьПроблему(Проблема, ПараметрыПроверки); КонецЦикла; @@ -2648,7 +2604,6 @@ Результат = Запрос.Выполнить().Выгрузить(); КонецЦикла; - Запрос = Неопределено; КонецПроцедуры @@ -2662,13 +2617,12 @@ Процедура НайтиНезаполненныеОбязательныеРеквизиты(ОбъектМетаданных, ПараметрыПроверки) - ПолноеИмя = ОбъектМетаданных.ПолноеИмя(); - Реквизиты = ОбъектМетаданных.Реквизиты; - ТабличныеЧасти = ОбъектМетаданных.ТабличныеЧасти; + ПолноеИмя = ОбъектМетаданных.ПолноеИмя(); + Реквизиты = ОбъектМетаданных.Реквизиты; - ТекстЗапроса = " - |ВЫБРАТЬ ПЕРВЫЕ 1000 - | ОбъектМетаданных.Ссылка КАК Ссылка + ТекстЗапроса = + "ВЫБРАТЬ ПЕРВЫЕ 1000 + | ОбъектМетаданных.Ссылка КАК ПроблемныйОбъект |ИЗ | &ОбъектМетаданных КАК ОбъектМетаданных |ГДЕ @@ -2692,7 +2646,7 @@ Для Каждого СтрокаРезультата Из Результат Цикл - СсылкаНаОбъект = СтрокаРезультата.Ссылка; + СсылкаНаОбъект = СтрокаРезультата.ПроблемныйОбъект; Если ЗначениеЗаполнено(ОграничениеПоДате) И ОбщегоНазначения.ЭтоДокумент(ОбъектМетаданных) @@ -2729,11 +2683,10 @@ КонецЦикла; - Запрос.УстановитьПараметр("Ссылка", СтрокаРезультата.Ссылка); + Запрос.УстановитьПараметр("Ссылка", СтрокаРезультата.ПроблемныйОбъект); Результат = Запрос.Выполнить().Выгрузить(); КонецЦикла; - Запрос = Неопределено; КонецПроцедуры @@ -2779,6 +2732,7 @@ |УПОРЯДОЧИТЬ ПО | ОбъектМетаданных.Регистратор, | ОбъектМетаданных.НомерСтроки"; + Запрос = Новый Запрос; Запрос.УстановитьПараметр("НомерСтроки", 0); @@ -2825,11 +2779,13 @@ СтруктураНабораЗаписей.Вставить("Регистратор", СтрокаРезультата["РегистраторРеквизитСсылка"]); Проблема = ОписаниеПроблемы(ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ОбъектМетаданных), ПараметрыПроверки); - Проблема.УточнениеПроблемы = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'У записи с полями: + + Проблема.УточнениеПроблемы = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'У записи с полями: |%1, |обнаружены не заполненные данные обязательные к заполнению: %2'"), " • " + НСтр("ru = 'Регистратор:'") + " = """ + СтрокаРезультата.РегистраторПредставление, Символы.ПС + УточнениеПроблемы); Проблема.ДополнительнаяИнформация = Новый ХранилищеЗначения(СтруктураНабораЗаписей); + ЗаписатьПроблему(Проблема, ПараметрыПроверки); КонецЦикла; @@ -2839,7 +2795,6 @@ Результат = Запрос.Выполнить().Выгрузить(); КонецЦикла; - Запрос = Неопределено; КонецПроцедуры @@ -2949,10 +2904,12 @@ КонецЦикла; Проблема = ОписаниеПроблемы(ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ОбъектМетаданных), ПараметрыПроверки); + Проблема.УточнениеПроблемы = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'У записи с полями: |%1, |обнаружены не заполненные данные обязательные к заполнению: %2'"), ПредставлениеОтбораНабораЗаписей, Символы.ПС + УточнениеПроблемы); Проблема.ДополнительнаяИнформация = Новый ХранилищеЗначения(СтруктураНабораЗаписей); + ЗаписатьПроблему(Проблема, ПараметрыПроверки); КонецЦикла; @@ -2968,7 +2925,6 @@ Результат = Запрос.Выполнить().Выгрузить(); КонецЦикла; - Запрос = Неопределено; КонецПроцедуры @@ -3001,6 +2957,7 @@ Запрос = Новый Запрос(ТекстЗапроса); Запрос.УстановитьПараметр("ДатаНачалаПроверки", ПараметрыПроверки.ДатаНачалаПроверки); + Результат = Запрос.Выполнить().Выгрузить(); УсловиеАбсолюта = "Истина И Истина И Истина"; @@ -3052,7 +3009,8 @@ КонецЦикла; Проблема = ОписаниеПроблемы(ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ОбъектМетаданных), ПараметрыПроверки); - Проблема.УточнениеПроблемы = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'У записи с полями: + + Проблема.УточнениеПроблемы = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'У записи с полями: |%1, |обнаружены не заполненные данные обязательные к заполнению: %2'"), ПредставлениеОтбораНабораЗаписей, Символы.ПС + УточнениеПроблемы); Проблема.ДополнительнаяИнформация = Новый ХранилищеЗначения(СтруктураНабораЗаписей); @@ -3072,7 +3030,6 @@ Результат = Запрос.Выполнить().Выгрузить(); КонецЦикла; - Запрос = Неопределено; КонецПроцедуры @@ -3084,14 +3041,14 @@ Процедура НайтиЦиклическиеСсылки(ОбъектМетаданных, ПараметрыПроверки) - ПолноеИмя = ОбъектМетаданных.ПолноеИмя(); - Реквизиты = ОбъектМетаданных.Реквизиты; - ТабличныеЧасти = ОбъектМетаданных.ТабличныеЧасти; + ПолноеИмя = ОбъектМетаданных.ПолноеИмя(); + Реквизиты = ОбъектМетаданных.Реквизиты; - ТекстЗапроса = " - |ВЫБРАТЬ ПЕРВЫЕ 1000 - | ОбъектМетаданных.Ссылка КАК Ссылка, - | ОбъектМетаданных.Наименование КАК Наименование + ТекстЗапроса = + "ВЫБРАТЬ ПЕРВЫЕ 1000 + | ОбъектМетаданных.Ссылка КАК ПроблемныйОбъект, + | ПРЕДСТАВЛЕНИЕССЫЛКИ(ОбъектМетаданных.Ссылка) КАК Представление, + | ОбъектМетаданных.Родитель КАК Родитель |ИЗ | &ОбъектМетаданных КАК ОбъектМетаданных |ГДЕ @@ -3099,6 +3056,7 @@ | |УПОРЯДОЧИТЬ ПО | ОбъектМетаданных.Ссылка"; + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ОбъектМетаданных", ПолноеИмя); Запрос = Новый Запрос(ТекстЗапроса); @@ -3115,30 +3073,30 @@ Для Каждого СтрокаРезультата Из Результат Цикл - СсылкаНаОбъект = СтрокаРезультата.Ссылка; + СсылкаНаОбъект = СтрокаРезультата.ПроблемныйОбъект; Если МассивИсключений.Найти(СсылкаНаОбъект) <> Неопределено Тогда Продолжить; КонецЕсли; - СсылкаНаОбъектНаименование = СтрокаРезультата.Наименование; - МассивЦиклов = Новый Массив; + ПредставлениеОбъекта = СтрокаРезультата.Представление; НайденЦикл = Ложь; ЦиклВМассиве = Новый Массив; - ПроверитьЗацикливаниеУровней(СсылкаНаОбъект, СсылкаНаОбъект.Родитель, НайденЦикл, ЦиклВМассиве); + ПроверитьЗацикливаниеУровней(СсылкаНаОбъект, СтрокаРезультата.Родитель, НайденЦикл, ЦиклВМассиве); Если НайденЦикл Тогда Путь = ""; Для Каждого ЭлементЦикла Из ЦиклВМассиве Цикл - Путь = Путь + ?(ЗначениеЗаполнено(Путь), " -> ", "") + ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ЭлементЦикла, "Наименование"); + ЗначениеПредставления = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ЭлементЦикла, Новый Структура("Представление", "ПредставлениеСсылки(Ссылка)")); + Путь = Путь + ?(ЗначениеЗаполнено(Путь), " -> ", "") + ЗначениеПредставления["Представление"]; МассивИсключений.Добавить(ЭлементЦикла); КонецЦикла; Если ЗначениеЗаполнено(Путь) Тогда - УточнениеПроблемы = СсылкаНаОбъектНаименование + " -> " + Путь + " -> " + СсылкаНаОбъектНаименование; + УточнениеПроблемы = ПредставлениеОбъекта + " -> " + Путь + " -> " + ПредставлениеОбъекта; Иначе - УточнениеПроблемы = СсылкаНаОбъектНаименование + " -> " + СсылкаНаОбъектНаименование; + УточнениеПроблемы = ПредставлениеОбъекта + " -> " + ПредставлениеОбъекта; КонецЕсли; Проблема = ОписаниеПроблемы(СсылкаНаОбъект, ПараметрыПроверки); @@ -3154,11 +3112,10 @@ КонецЦикла; - Запрос.УстановитьПараметр("Ссылка", СтрокаРезультата.Ссылка); + Запрос.УстановитьПараметр("Ссылка", СтрокаРезультата.ПроблемныйОбъект); Результат = Запрос.Выполнить().Выгрузить(); КонецЦикла; - Запрос = Неопределено; КонецПроцедуры @@ -3202,13 +3159,13 @@ КонецЕсли; НайденныйЭлемент = ОбщегоНазначенияКлиентСервер.ПредопределенныйЭлемент(ПолноеИмя + "." + ПредопределенныйЭлемент); - Если НайденныйЭлемент = Неопределено Тогда - - Проблема = ОписаниеПроблемы(ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ОбъектМетаданных), ПараметрыПроверки); - Проблема.УточнениеПроблемы = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Предопределенный элемент ""%1"" отсутствует в информационной базе.'"), ПредопределенныйЭлемент); - ЗаписатьПроблему(Проблема, ПараметрыПроверки); - + Если НайденныйЭлемент <> Неопределено Тогда + Продолжить; КонецЕсли; + + Проблема = ОписаниеПроблемы(ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ОбъектМетаданных), ПараметрыПроверки); + Проблема.УточнениеПроблемы = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Предопределенный элемент ""%1"" отсутствует в информационной базе.'"), ПредопределенныйЭлемент); + ЗаписатьПроблему(Проблема, ПараметрыПроверки); КонецЦикла; @@ -3245,6 +3202,8 @@ | ВНУТРЕННЕЕ СОЕДИНЕНИЕ (Выбрать ""&ВременнаяТаблица"") КАК ВременнаяТаблица | ПО &УсловияСоединения"; + ПараметрыЗапроса = Новый Структура; + Для Каждого ОбъектМетаданных Из ВидМетаданных Цикл Если ОбъектМетаданных.ОбновлениеПредопределенныхДанных = Метаданные.СвойстваОбъектов.ОбновлениеПредопределенныхДанных.НеОбновлятьАвтоматически Тогда @@ -3260,8 +3219,12 @@ Пакеты = Пакеты + ?(ЗначениеЗаполнено(Пакеты), ";", "") + ЭлементШаблонаПакетов; + СуффиксПараметра = СтрЗаменить(ПолноеИмя, ".", "_"); ЭлементШаблонаВыборки = СтрЗаменить(ШаблонВыборки, "&ПоляВременнойТаблицы", - " ВременнаяТаблица.ПолноеИмя КАК ПолноеИмя, ВременнаяТаблица.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных"); + "&ПроблемныйОбъект" + СуффиксПараметра + " КАК ПроблемныйОбъект, ВременнаяТаблица.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных"); + + ПараметрыЗапроса.Вставить("ПроблемныйОбъект" + СуффиксПараметра, ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ПолноеИмя)); + ЭлементШаблонаВыборки = СтрЗаменить(ЭлементШаблонаВыборки, "&Таблица", ПолноеИмя); ЭлементШаблонаВыборки = СтрЗаменить(ЭлементШаблонаВыборки, "(Выбрать ""&ВременнаяТаблица"")", ИмяВременнойТаблицы); ЭлементШаблонаВыборки = СтрЗаменить(ЭлементШаблонаВыборки, "&УсловияСоединения", @@ -3271,28 +3234,33 @@ КонецЦикла; - Запрос = Новый Запрос(Пакеты + ";" + Выборки + " ИТОГИ ПО ПолноеИмя, ИмяПредопределенныхДанных"); + Запрос = Новый Запрос(Пакеты + ";" + Выборки + " ИТОГИ ПО ПроблемныйОбъект, ИмяПредопределенныхДанных"); Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; + Для Каждого ПараметрЗапроса Из ПараметрыЗапроса Цикл + Запрос.УстановитьПараметр(ПараметрЗапроса.Ключ, ПараметрЗапроса.Значение); + КонецЦикла; + ОбщийРезультат = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ОбщийРезультат.Следующий() Цикл - УточнениеПроблемы = ""; - ПолноеИмя = ОбщийРезультат.ПолноеИмя; - РезультатПоИмени = ОбщийРезультат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); + УточнениеПроблемы = ""; + РезультатПоИмениПредопределенного = ОбщийРезультат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); - Пока РезультатПоИмени.Следующий() Цикл + Пока РезультатПоИмениПредопределенного.Следующий() Цикл - Если СтрНачинаетсяС(ВРег(РезультатПоИмени.ИмяПредопределенныхДанных), "УДАЛИТЬ") Тогда + ИмяПредопределенныхДанных = РезультатПоИмениПредопределенного.ИмяПредопределенныхДанных; + + Если СтрНачинаетсяС(ВРег(ИмяПредопределенныхДанных), "УДАЛИТЬ") Тогда Продолжить; КонецЕсли; УточнениеПроблемы = УточнениеПроблемы + ?(ЗначениеЗаполнено(УточнениеПроблемы), Символы.ПС, "") - + НСтр("ru = 'Имя предопределенного элемента:'") + " """ + РезультатПоИмени.ИмяПредопределенныхДанных + """" + + НСтр("ru = 'Имя предопределенного элемента:'") + " """ + ИмяПредопределенныхДанных + """" + Символы.ПС + НСтр("ru = 'Ссылки на предопределенный элемент:'"); - ДетальныеЗаписи = РезультатПоИмени.Выбрать(); + ДетальныеЗаписи = РезультатПоИмениПредопределенного.Выбрать(); Пока ДетальныеЗаписи.Следующий() Цикл УточнениеПроблемы = УточнениеПроблемы + ?(ЗначениеЗаполнено(УточнениеПроблемы), Символы.ПС, "") + " • """ + ДетальныеЗаписи.СсылкаНаДублирующийсяЭлемент + """"; @@ -3304,14 +3272,13 @@ Продолжить; КонецЕсли; - Проблема = ОписаниеПроблемы(ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ПолноеИмя), ПараметрыПроверки); + Проблема = ОписаниеПроблемы(ОбщийРезультат.ПроблемныйОбъект, ПараметрыПроверки); Проблема.УточнениеПроблемы = УточнениеПроблемы; ЗаписатьПроблему(Проблема, ПараметрыПроверки); КонецЦикла; Запрос.МенеджерВременныхТаблиц.Закрыть(); - Запрос = Неопределено; КонецПроцедуры @@ -3319,7 +3286,7 @@ #Область ИсправлениеПроблемЦиклическиеСсылки -// Исправляет проблему циклических ссылок по принципу у кого больше терминальных элементов +// Исправляет проблему циклических ссылок по принципу, у кого больше терминальных элементов // в подчинении, тот и остается родителем. // // Параметры: @@ -3346,49 +3313,38 @@ Пока Результат.Следующий() Цикл - ПроблемныйОбъект = Результат.ПроблемныйОбъект; - Родитель = ПроблемныйОбъект.Родитель; + ПроблемныйОбъектСсылка = Результат.ПроблемныйОбъект; + Родитель = ПроблемныйОбъектСсылка.Родитель; НайденЦикл = Ложь; ЦиклВМассиве = Новый Массив; - ПроверитьЗацикливаниеУровней(ПроблемныйОбъект, Родитель, НайденЦикл, ЦиклВМассиве); - Если НайденЦикл Тогда - - КоличествоДетейПервого = 0; - КоличествоДетейВторого = 0; - - ПоследнийОбъектЦикла = ЦиклВМассиве.Получить(ЦиклВМассиве.Количество() - 1); - - ПолучитьКоличествоДетей(ПроблемныйОбъект, Родитель, КоличествоДетейПервого); - ПолучитьКоличествоДетей(ПоследнийОбъектЦикла, Родитель, КоличествоДетейВторого); - - Если КоличествоДетейПервого > КоличествоДетейВторого Тогда - ОбъектСсылки = ПроблемныйОбъект.ПолучитьОбъект(); - ИначеЕсли КоличествоДетейПервого < КоличествоДетейВторого Тогда - ОбъектСсылки = ПоследнийОбъектЦикла.ПолучитьОбъект(); - Иначе - - ГСЧ = Новый ГенераторСлучайныхЧисел; - - Массив = Новый Массив; - Массив.Добавить(ПроблемныйОбъект); - Массив.Добавить(ПоследнийОбъектЦикла); - - ОбъектСсылки = Массив.Получить(ГСЧ.СлучайноеЧисло(0, 1)).ПолучитьОбъект(); - - КонецЕсли; - - ОбъектСсылки.Родитель = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПроблемныйОбъект.Метаданные().ПолноеИмя()).ПустаяСсылка(); - ОбъектСсылки.ОбменДанными.Загрузка = Истина; - ОбъектСсылки.Записать(); - + ПроверитьЗацикливаниеУровней(ПроблемныйОбъектСсылка, Родитель, НайденЦикл, ЦиклВМассиве); + Если Не НайденЦикл Тогда + Продолжить; КонецЕсли; + + ПоследнийОбъектЦикла = ЦиклВМассиве.Получить(ЦиклВМассиве.Количество() - 1); + + КоличествоДетейПервого = КоличествоДочернихЭлементов(ПроблемныйОбъектСсылка, Родитель); + КоличествоДетейВторого = КоличествоДочернихЭлементов(ПоследнийОбъектЦикла, Родитель); + + Если КоличествоДетейПервого > КоличествоДетейВторого Тогда + ПроблемныйОбъект = ПроблемныйОбъектСсылка.ПолучитьОбъект(); + Иначе + ПроблемныйОбъект = ПоследнийОбъектЦикла.ПолучитьОбъект(); + КонецЕсли; + + ПроблемныйОбъект.Родитель = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПроблемныйОбъектСсылка.Метаданные().ПолноеИмя()).ПустаяСсылка(); + ПроблемныйОбъект.ОбменДанными.Загрузка = Истина; + ПроблемныйОбъект.Записать(); КонецЦикла; КонецПроцедуры -Процедура ПолучитьКоличествоДетей(СсылкаНаОбъект, ИсключениеВыборки, КоличествоДетей) +Функция КоличествоДочернихЭлементов(СсылкаНаОбъект, ИсключениеВыборки, Знач НачальноеЗначение = 0) + + КоличествоДетей = НачальноеЗначение; ТекстЗапроса = "ВЫБРАТЬ @@ -3410,11 +3366,12 @@ Выгрузка = Результат.Выгрузить(); КоличествоДетей = КоличествоДетей + Выгрузка.Количество(); Для Каждого ЭлементПотомства Из Выгрузка Цикл - ПолучитьКоличествоДетей(ЭлементПотомства.Ссылка, ИсключениеВыборки, КоличествоДетей); + КоличествоДетей = КоличествоДочернихЭлементов(ЭлементПотомства.Ссылка, ИсключениеВыборки, КоличествоДетей); КонецЦикла; КонецЕсли; + Возврат КоличествоДетей; -КонецПроцедуры +КонецФункции #КонецОбласти @@ -3472,6 +3429,19 @@ #Область ПроцедурыИФункцииОбщегоНазначенияСлужебная +Функция ЭтоНеразделенныйОбъектМетаданных(ПолноеИмя) + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса") Тогда + + МодульРаботаВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("РаботаВМоделиСервиса"); + Возврат Не МодульРаботаВМоделиСервиса.ЭтоРазделенныйОбъектМетаданных(ПолноеИмя); + + КонецЕсли; + + Возврат Ложь; + +КонецФункции + Функция УточнениеПроблемы(МассивСообщений) УточнениеПроблемы = ""; @@ -3497,53 +3467,102 @@ КонецФункции -// Подготавливает параметры проверки к дальнейшей записи в регистр сведений "РезультатыПроверкиУчета". -// А именно: Дополняет параметры выполняемой проверки видом проверки, ссылкой на проверку и важностью проблемы -// И затирает предыдущую информацию в упомянутом регистре. -// Параметры: -// ПроблемныйОбъект - ЛюбаяСсылка - Ссылка на объект "Источник" проблем. -// ПараметрыПроверки - Структура - Параметры проверки которую необходимо выполнить: -// * Идентификатор - Строка - Строковый идентификатор проверки. -// * Наименование - Строка - Наименование проверки. -// * ИдентификаторРегламентногоЗадания - Строка - Строковый идентификатор регламентного задания, -// соответствующего проверке. -// * ДатаНачалаПроверки - Дата - Пороговая дата, обозначающая границу проверяемых -// объектов (только для объектов с датой). Объекты, дата которых -// меньше указанной, не следует проверять. По умолчанию не -// заполнено (т.е. проверять все). -// * ЛимитПроблем - Число - Количество проверяемых объектов. -// По умолчанию 1000. Если указано 0, то следует проверить все объекты. -// * ИтерацияПроверки - Число - Очередная итерация проверки. Используется совместно с параметром -// ЛимитПроблем для определения предельного количества итераций. -// * Проверка - СправочникСсылка.ПравилаПроверкиУчета - Ссылка на -// выполненную проверку. -// * ВидПроверки - СправочникСсылка.ВидыПроверок - Ссылка на вид проверки, к -// которому относится выполненная проверка. -// * ВажностьПроблемы - ПеречислениеСсылка.ВажностьПроблемыУчета - Важность проблемы учета -// "Информация", "Предупреждение", "Ошибка" и "ПолезныйСовет". +// Подготавливает данные, необходимые для выполнения проверки ведения учета. // -Процедура ПодготовитьДанныеПроверки(Проверка, ПараметрыПроверки) +// Параметры: +// Проверка - СправочникСсылка.ПравилаПроверкиУчета - проверка, параметры которой +// необходимо подготовить. +// +// Возвращаемое значение: +// Структура - содержит параметры: +// * ДатаНачалаПроверки - Дата - левая граница временного интервала, с которого нужно +// проверять данные информационной базы. Актуальна только для +// проверок, которые работают с данными зависящими от времени. +// По умолчанию это пустая дата. +// * Идентификатор - Строка - строковый идентификатор проверки. +// * ИдентификаторРегламентногоЗадания - Строка - строковый идентификатор регламентного задания, +// осуществляющего указанную проверку. +// * ЛимитПроблем - Число - лимит проблем по указанной проверке. При его достижении +// итерации проверки ходят вхолостую. По умолчанию равен 1000. +// * Наименование - Строка - наименование проверки. +// * ВажностьПроблемы - ПеречислениеСсылка.ВажностьПроблемыУчета - Важность проблемы учета +// Информация, Предупреждение, Ошибка, ПолезныйСовет и ВажнаяИнформация. +// * ПроверкаБылаОстановлена - Булево - признак того была ли остановлена проверка. +// * РучнойЗапуск - Булево - признак того была ли проверка запущена вручную +// т.е не регламентным заданием. +// * Проверка - СправочникСсылка.ПравилаПроверкиУчета - ссылка на проверку. +// * ГлобальныеНастройки - Структура - структура со значениями: +// * КартинкаИндикатораПроблем - Картинка, которая будет выводиться в качестве +// индикатора ошибки в колонке динамического списка +// форм списков и на специальной панели форм объектов. +// * ПояснениеИндикатораПроблем - Строка - Поясняющая строка к ошибке. +// * ГиперссылкаИндикатораПроблем - Строка - Текст гиперссылки, при нажатии на которую, +// будет сформирован и открыт отчет с ошибками. +// * ИтерацияПроверки - Число - итерация проверки. +// +Функция ПодготовитьПараметрыПроверки(Знач Проверка, Знач ПараметрыВыполненияПроверки) - Параметры = Новый Структура; - ПараметрыСинхронизации = Новый Структура; + ПараметрыПроверки = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Проверка, "ДатаНачалаПроверки, Идентификатор, + |ИдентификаторРегламентногоЗадания, ЛимитПроблем, Наименование, ВажностьПроблемы, СпособВыполнения, + |КонтекстПроверокВеденияУчета, УточнениеКонтекстаПроверокВеденияУчета"); - Параметры.Вставить("ПараметрыСинхронизации", ПараметрыСинхронизации); - Параметры.Вставить("Идентификатор", "СистемныеПроверки"); - Параметры.Вставить("Наименование", НСтр("ru='Системные проверки'")); + Если Не ПараметрыПроверки.Свойство("ПроверкаБылаОстановлена") Тогда + ПараметрыПроверки.Вставить("ПроверкаБылаОстановлена", Ложь); + КонецЕсли; + Если Не ПараметрыПроверки.Свойство("РучнойЗапуск") Тогда + ПараметрыПроверки.Вставить("РучнойЗапуск", Истина); + КонецЕсли; - ПодготовленныеПараметры = ПараметрыСинхронизацииВидаПроверок(Параметры); - - ВидПроверки = СинхронизацияВидаПроверки(ПодготовленныеПараметры); ПараметрыПроверки.Вставить("Проверка", Проверка); - ПараметрыПроверки.Вставить("ВидПроверки", ВидПроверки); - ПараметрыПроверки.Вставить("ВажностьПроблемы", ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Проверка, "ВажностьПроблемы")); ПараметрыПроверки.Вставить("ГлобальныеНастройки", ГлобальныеНастройки()); ПараметрыПроверки.Вставить("ИтерацияПроверки", 1); - Набор = РегистрыСведений.РезультатыПроверкиУчета.СоздатьНаборЗаписей(); - Набор.Отбор.ВидПроверки.Установить(ВидПроверки); - Набор.Отбор.ПравилоПроверки.Установить(Проверка); - Набор.Записать(); + Если ПараметрыВыполненияПроверки = Неопределено Тогда + ГруппаПроверок = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Проверка, "Родитель"); + Если ГруппаПроверок <> Неопределено И Не ГруппаПроверок.Пустая() Тогда + ИдентификаторПроверки = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ГруппаПроверок, "Идентификатор"); + Иначе + ИдентификаторПроверки = ПараметрыПроверки.Идентификатор; + КонецЕсли; + ПараметрыВыполненияПроверки = Новый Массив; + ПараметрыВыполненияПроверки.Добавить(ПараметрыВыполненияПроверки(ИдентификаторПроверки)); + КонецЕсли; + ПараметрыПроверки.Вставить("ПараметрыВыполненияПроверки", ПараметрыВыполненияПроверки); + + Возврат ПараметрыПроверки; + +КонецФункции + +// Производит очистку результатов предыдущих итераций проверки, пропуская +// те проблемы, которые были проигнорированы пользователем (ИгнорироватьПроблему = Истина). +// +// Параметры: +// Проверка - СправочникСсылка.ПравилаПроверкиУчета - проверка, информацию по +// которой необходимо очистить. +// ПараметрыВыполненияПроверки - Массив - массив структур со значениями: +// * Свойство1 - ЛюбаяСсылка, Булево, Число, Строка, Дата - Первое свойство синхронизации. +// * Свойство2 - ЛюбаяСсылка, Булево, Число, Строка, Дата - Второе свойство синхронизации. +// * Свойство3 - ЛюбаяСсылка, Булево, Число, Строка, Дата - Третье свойство синхронизации. +// ... +// * СвойствоN - ЛюбаяСсылка, Булево, Число, Строка, Дата - N-ое свойство синхронизации. +// см. также КонтрольВеденияУчета.ПараметрыВыполненияПроверки. +// +Процедура ОчиститьРезультатыПредыдущихПроверок(Проверка, ПараметрыВыполненияПроверки) + + Для Каждого ТекущиеПараметры Из ПараметрыВыполненияПроверки Цикл + + ВидПроверки = ВидПроверки(ТекущиеПараметры, Истина); + Если Не ЗначениеЗаполнено(ВидПроверки) Тогда + Продолжить; + КонецЕсли; + + Набор = РегистрыСведений.РезультатыПроверкиУчета.СоздатьНаборЗаписей(); + Набор.Отбор.ПравилоПроверки.Установить(Проверка); + Набор.Отбор.ВидПроверки.Установить(ВидПроверки); + Набор.Отбор.ИгнорироватьПроблему.Установить(Ложь); + Набор.Записать(); + + КонецЦикла; КонецПроцедуры @@ -3637,11 +3656,11 @@ КонецФункции -// Возвращает массив типов, включающий в тип "Строка", "Массив" и "СправочникСсылка.ВидыПроверок" +// Возвращает типы Строка, Массив и СправочникСсылка.ВидыПроверок // для проверки параметров методов, работающих с видами проверок. // // Возвращаемое значение: -// Массив - Массив объектных типов. +// Массив - объектные типы. // Функция ОписаниеТипаВидПроверки() Экспорт @@ -3681,7 +3700,6 @@ ОжидаемыеТипыСвойств = Новый Структура; ОжидаемыеТипыСвойств.Вставить("ВажностьПроблемы", Тип("ПеречислениеСсылка.ВажностьПроблемыУчета")); - ОжидаемыеТипыСвойств.Вставить("ВидПроверки", Тип("СправочникСсылка.ВидыПроверок")); ОжидаемыеТипыСвойств.Вставить("ГлобальныеНастройки", Тип("Структура")); ОжидаемыеТипыСвойств.Вставить("ДатаНачалаПроверки", Тип("Дата")); ОжидаемыеТипыСвойств.Вставить("Идентификатор", Тип("Строка")); @@ -3695,6 +3713,23 @@ КонецФункции +// Возвращает описание типов полей вида проверки - см. реквизиты СвойствоN справочника ВидыПроверок. +// +// Возвращаемое значение: +// ОписаниеТипов - все ссылочные типы, а также типы Булево, Строка, Число и Дата. +// +Функция ОжидаемыеТипыСвойствВидовПроверок() Экспорт + + МассивТипов = Новый Массив; + МассивТипов.Добавить(Тип("Булево")); + МассивТипов.Добавить(Тип("Строка")); + МассивТипов.Добавить(Тип("Дата")); + МассивТипов.Добавить(Тип("Число")); + + Возврат Новый ОписаниеТипов(ОбщегоНазначения.ОписаниеТипаВсеСсылки(), МассивТипов); + +КонецФункции + // Возвращает структуру типов описания проблемы. // // Возвращаемое значение: diff --git a/SSL/src/CommonModules/КонтрольВеденияУчетаСлужебныйКлиент/Module.bsl b/SSL/src/CommonModules/КонтрольВеденияУчетаСлужебныйКлиент/Module.bsl index 03b4596e3..b4a2ff2b4 100644 --- a/SSL/src/CommonModules/КонтрольВеденияУчетаСлужебныйКлиент/Module.bsl +++ b/SSL/src/CommonModules/КонтрольВеденияУчетаСлужебныйКлиент/Module.bsl @@ -31,6 +31,34 @@ КонецПроцедуры +// Открывает форму отчета с отбором по проблемам, препятствующим нормальному обновлению +// информационной базы. +// +// Параметры: +// Форма - УправляемаяФорма - Управляемая форма проблемного объекта. +// СтандартнаяОбработка - Булево - В данный параметр передается признак выполнения +// стандартной (системной) обработки события. +// +// Пример: +// МодульКонтрольВеденияУчетаСлужебныйКлиент.ОткрытьОтчетПоПроблемамИзОбработкиОбновления(ЭтотОбъект, СтандартнаяОбработка); +// +Процедура ОткрытьОтчетПоПроблемамИзОбработкиОбновления(Форма, СтандартнаяОбработка) Экспорт + + СтандартнаяОбработка = Ложь; + ОткрытьОтчетПоПроблемам("СистемныеПроверки"); + +КонецПроцедуры + +// см. КонтрольВеденияУчетаКлиент.ОткрытьОтчетПоПроблемам. +Процедура ОткрытьОтчетПоПроблемам(ВидПроверок) Экспорт + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ВидПроверки", ВидПроверок); + + ОткрытьФорму("Отчет.РезультатыПроверкиУчета.Форма", ПараметрыФормы); + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции diff --git a/SSL/src/CommonModules/КонтрольВеденияУчетаПовтИсп/Module.bsl b/SSL/src/CommonModules/КонтрольВеденияУчетаСлужебныйПовтИсп/Module.bsl similarity index 52% rename from SSL/src/CommonModules/КонтрольВеденияУчетаПовтИсп/Module.bsl rename to SSL/src/CommonModules/КонтрольВеденияУчетаСлужебныйПовтИсп/Module.bsl index 0f73c8f26..41f8c17d2 100644 --- a/SSL/src/CommonModules/КонтрольВеденияУчетаПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/КонтрольВеденияУчетаСлужебныйПовтИсп/Module.bsl @@ -13,9 +13,13 @@ ГруппыПроверок = НоваяТаблицаГруппПроверок(); Проверки = НоваяТаблицаПроверок(); - СистемныеПроверкиВеденияУчета(ГруппыПроверок, Проверки); + ДобавитьСистемныеПроверкиВеденияУчета(ГруппыПроверок, Проверки); + + КонтрольВеденияУчетаПереопределяемый.ПриОпределенииПроверок(ГруппыПроверок, Проверки); КонтрольВеденияУчетаПереопределяемый.ПриОпределенииПрикладныхПроверок(ГруппыПроверок, Проверки); + ОбеспечитьОбратнуюСовместимость(Проверки); + Возврат Новый ФиксированнаяСтруктура("ГруппыПроверок, Проверки", ГруппыПроверок, Проверки); КонецФункции @@ -59,105 +63,109 @@ #Область СлужебныеПроцедурыИФункции -// См. КонтрольВеденияУчетаПереопределяемый.ПриОпределенииПрикладныхПроверок -Процедура СистемныеПроверкиВеденияУчета(ГруппыПроверок, Проверки) +// См. КонтрольВеденияУчетаПереопределяемый.ПриОпределенииПроверок +Процедура ДобавитьСистемныеПроверкиВеденияУчета(ГруппыПроверок, Проверки) ГруппаПроверок = ГруппыПроверок.Добавить(); - ГруппаПроверок.Наименование = НСтр("ru='Системные проверки'"); - ГруппаПроверок.Идентификатор = "СистемныеПроверки"; + ГруппаПроверок.Наименование = НСтр("ru='Системные проверки'"); + ГруппаПроверок.Идентификатор = "СистемныеПроверки"; + ГруппаПроверок.КонтекстПроверокВеденияУчета = "СистемныеПроверки"; Проверка = Проверки.Добавить(); - Проверка.ИдентификаторРодителя = "СистемныеПроверки"; + Проверка.ИдентификаторГруппы = ГруппаПроверок.Идентификатор; Проверка.Наименование = НСтр("ru='Проверка незаполненных обязательных реквизитов'"); Проверка.Причины = НСтр("ru='Некорректная синхронизация данных с другими программами или импорт данных.'"); Проверка.Рекомендация = НСтр("ru='Правильно настроить синхронизацию данных и заполнить обязательные реквизиты. |В случае обнаружения незаполненных обязательных полей у регистров, то в большинстве - |случаев, для устранения проблемы, требуется заполнение соответствующих полей в документе-регистраторе'"); - Проверка.Идентификатор = "ПроверкаНезаполненныхОбязательныхРеквизитов"; + |случаев, для устранения проблемы, требуется заполнение соответствующих полей в документе-регистраторе.'"); + Проверка.Идентификатор = "СтандартныеПодсистемы.ПроверкаНезаполненныхОбязательныхРеквизитов"; Проверка.ОбработчикПроверки = "КонтрольВеденияУчетаСлужебный.ПроверитьНезаполненныеОбязательныеРеквизиты"; Проверка.КонтекстПроверокВеденияУчета = "СистемныеПроверки"; Проверка = Проверки.Добавить(); - Проверка.ИдентификаторРодителя = "СистемныеПроверки"; + Проверка.ИдентификаторГруппы = ГруппаПроверок.Идентификатор; Проверка.Наименование = НСтр("ru='Проверка ссылочной целостности'"); Проверка.Причины = НСтр("ru='Некорректная синхронизация данных с другими программами или импорт данных.'"); Проверка.Рекомендация = НСтр("ru='• Завершить работу всех пользователей и установить блокировку входа в программу; |• Сделать резервную копию информационной базы; |• Запустить конфигуратор, меню Администрирование, Тестирования и исправление, включив два флажка для проверка логической и ссылочной целостности - | см подробнее на ИТС https://its.1c.ru/db/v839doc#bookmark:adm:TI000000142 - |• Снять блокировку входа в программу + | См. подробнее на ИТС: https://its.1c.ru/db/v83doc#bookmark:adm:TI000000142 + |• Снять блокировку входа в программу. + | |Если работа ведется в распределенной информационной базе (РИБ), то исправление следует запускать только в главном узле. - | Затем выполнить синхронизацию с подчиненными узлами. - |В случае обнаружения битых ссылок в регистрах, то в большинстве случаев, для устранения проблемы, - |требуется устранения соответствующих битых ссылок в документе-регистраторе'"); - Проверка.Идентификатор = "ПроверкаСсылочнойЦелостности"; + |Затем выполнить синхронизацию с подчиненными узлами. + |В случае обнаружения битых ссылок в регистрах, то в большинстве случаев, для устранения проблемы + |требуется устранить соответствующие битые ссылки в документах-регистраторах.'"); + Проверка.Идентификатор = "СтандартныеПодсистемы.ПроверкаСсылочнойЦелостности"; Проверка.ОбработчикПроверки = "КонтрольВеденияУчетаСлужебный.ПроверитьСсылочнуюЦелостность"; Проверка.КонтекстПроверокВеденияУчета = "СистемныеПроверки"; Проверка = Проверки.Добавить(); - Проверка.ИдентификаторРодителя = "СистемныеПроверки"; + Проверка.ИдентификаторГруппы = ГруппаПроверок.Идентификатор; Проверка.Наименование = НСтр("ru='Проверка циклических ссылок'"); Проверка.Причины = НСтр("ru='Некорректная синхронизация данных с другими программами или импорт данных.'"); Проверка.Рекомендация = НСтр("ru='• Завершить работу всех пользователей и установить блокировку входа в программу; |• Сделать резервную копию информационной базы; |• Запустить конфигуратор, меню Администрирование, Тестирования и исправление, включив два флажка для проверка логической и ссылочной целостности - | см подробнее на ИТС: https://its.1c.ru/db/v839doc#bookmark:adm:TI000000142 - |• Снять блокировку входа в программу + | См. подробнее на ИТС: https://its.1c.ru/db/v83doc#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 - |• Снять блокировку входа в программу + | См. подробнее на ИТС: https://its.1c.ru/db/v83doc#bookmark:adm:TI000000142 + |• Снять блокировку входа в программу. + | |Если работа ведется в распределенной информационной базе (РИБ), то исправление следует запускать только в главном узле. - | Затем выполнить синхронизацию с подчиненными узлами.'"); - Проверка.Идентификатор = "ПроверкаОтсутствияПредопределенныхУзловПлановОбмена"; + |Затем выполнить синхронизацию с подчиненными узлами.'"); + Проверка.Идентификатор = "СтандартныеПодсистемы.ПроверкаОтсутствияПредопределенныхУзловПлановОбмена"; Проверка.ОбработчикПроверки = "КонтрольВеденияУчетаСлужебный.ПроверитьНаличиеПредопределенныхУзловПлановОбмена"; Проверка.КонтекстПроверокВеденияУчета = "СистемныеПроверки"; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда Проверка = Проверки.Добавить(); - Проверка.ИдентификаторРодителя = "СистемныеПроверки"; + Проверка.ИдентификаторГруппы = ГруппаПроверок.Идентификатор; Проверка.Наименование = НСтр("ru='Поиск ссылок на несуществующие файлы в томах хранения'"); - Проверка.Причины = НСтр("ru='Файл был физически удален или перемещен на диске в следствие работы антивирусных программа, - | непреднамеренных действий администратора и.т.д.'"); - Проверка.Рекомендация = НСтр("ru='• Либо пометить файл в программе на удаление; - |• Либо восстановить файл на диске в томе из резервной копии.'"); - Проверка.Идентификатор = "ПроверкаСсылокНаНесуществующиеФайлыВТоме"; + Проверка.Причины = НСтр("ru='Файл был физически удален или перемещен на диске в следствие работы антивирусных программ, + |непреднамеренных действий администратора и.т.д.'"); + Проверка.Рекомендация = НСтр("ru='• Пометить файл в программе на удаление; + |• Или восстановить файл на диске в томе из резервной копии.'"); + Проверка.Идентификатор = "СтандартныеПодсистемы.ПроверкаСсылокНаНесуществующиеФайлыВТоме"; Проверка.ОбработчикПроверки = "РаботаСФайламиСлужебный.ПроверкаСсылокНаНесуществующиеФайлыВТоме"; Проверка.КонтекстПроверокВеденияУчета = "СистемныеПроверки"; @@ -169,70 +177,107 @@ // // Возвращаемое значение: // ТаблицаЗначений с колонками: -// * Наименование - Строка - Наименование группы проверок. -// * Идентификатор - Строка - Строковый идентификатор группы проверок. +// * Наименование - Строка - Наименование группы проверок. +// * ИдентификаторГруппы - Строка - Строковый идентификатор группы проверок, например: +// "СистемныеПроверки", "ЗакрытиеМесяца", "ПроверкиНДС" и т.п. +// Обязателен для заполнения. +// * Идентификатор - Строка - Строковый идентификатор группы проверок. Обязателен для заполнения. +// Формат идентификатора должен быть следующим: +// <Название программного продукта>.<Идентификатор проверки>. Например: +// СтандартныеПодсистемы.СистемныеПроверки. +// * КонтекстПроверокВеденияУчета - ОпределяемыйТип.КонтекстПроверокВеденияУчета - значение, дополнительно +// уточняющее принадлежность группы проверок ведения учета к определенной категории. +// * Комментарий - Строка - комментарий к группе проверок. // Функция НоваяТаблицаГруппПроверок() ГруппыПроверок = Новый ТаблицаЗначений; КолонкиГруппыПроверок = ГруппыПроверок.Колонки; - КолонкиГруппыПроверок.Добавить("Наименование", Новый ОписаниеТипов("Строка", , , , Новый КвалификаторыСтроки(256))); - КолонкиГруппыПроверок.Добавить("Идентификатор", Новый ОписаниеТипов("Строка", , , , Новый КвалификаторыСтроки(256))); + КолонкиГруппыПроверок.Добавить("Наименование", Новый ОписаниеТипов("Строка", , , , Новый КвалификаторыСтроки(256))); + КолонкиГруппыПроверок.Добавить("Идентификатор", Новый ОписаниеТипов("Строка", , , , Новый КвалификаторыСтроки(256))); + КолонкиГруппыПроверок.Добавить("ИдентификаторГруппы", Новый ОписаниеТипов("Строка", , , , Новый КвалификаторыСтроки(256))); + КолонкиГруппыПроверок.Добавить("КонтекстПроверокВеденияУчета", Метаданные.ОпределяемыеТипы.КонтекстПроверокВеденияУчета.Тип); + КолонкиГруппыПроверок.Добавить("Комментарий", Новый ОписаниеТипов("Строка", , , , Новый КвалификаторыСтроки(256))); Возврат ГруппыПроверок; КонецФункции -// Создает таблицу проверок +// Создает таблицу проверок. // // Возвращаемое значение: -// ТаблицаЗначений с колонками: -// * ИдентификаторРодителя - Строка - Строковый идентификатор группы проверок, например: "СистемныеПроверки". -// Возможны также варианты "ЗакрытиеМесяца", "ПроверкиНДС" и т.п. -// Обязателен для заполнения. -// * Наименование - Строка - Наименование элемента проверки. -// * Причины - Строка - Возможные причины которые привели к возникновению проблемы. -// * Рекомендация - Строка - Текстовая рекомендация по решению возникшей проблемы. -// * Идентификатор - Строка - Строковый идентификатор элемента. Обязателен для заполнения. -// * ДатаНачалаПроверки - Дата - Пороговая дата, обозначающая границу проверяемых -// объектов (только для объектов с датой). Объекты, дата которых меньше -// указанной, не следует проверять. По умолчанию не заполнено (т.е. -// проверять все). -// * ЛимитПроблем - Число - Количество проверяемых объектов. -// По умолчанию 1000. Если указано 0, то следует проверить все объекты. -// * ОбработчикПроверки - Строка - Имя процедуры-обработчика исправления проверки. Под процедурой-обработчиком -// понимать экспортную процедуру серверного общего модуля. -// * ОбработчикПереходаКИсправлению - Строка - Имя процедуры-обработчика исправления проблемы. Под процедурой-обработчиком -// понимать экспортную процедуру клиентского общего модуля. -// * БезОбработчикаПроверки - Булево - На случай служебной проверки, которая не имеет процедуры-обработчика. -// * ЗапрещеноИзменениеВажности - Булево - Для запрета изменения важности некоторых проверок -// интерактивно, в карточке проверки. -// * КонтекстПроверокВеденияУчета - ОпределяемыйТип.КонтекстПроверокВеденияУчета - Содержит контекст проверки. -// * УточнениеКонтекстаПроверкиСостоянияСистемы - ОпределяемыйТип.УточнениеКонтекстаПроверкиСостоянияСистемы - Содержит -// уточнение контекста проверки. -// * ДополнительныеПараметры - ХранилищеЗначений - Дополнительная информация по проверке. +// ТаблицаЗначений - с колонками: +// * ИдентификаторГруппы - Строка - Строковый идентификатор группы проверок, например: +// "СистемныеПроверки", "ЗакрытиеМесяца", "ПроверкиНДС" и т.п. +// Обязателен для заполнения. +// * Наименование - Строка - Наименование проверки, выводимое пользователю. +// * Причины - Строка - Описание возможных причин, которые приводят к возникновению +// проблемы. +// * Рекомендация - Строка - Рекомендация по решению возникшей проблемы. +// * Идентификатор - Строка - Строковый идентификатор элемента. Обязателен для заполнения. +// Формат идентификатора должен быть следующим: +// <Название программного продукта>.<Идентификатор проверки>. Например: +// СтандартныеПодсистемы.СистемныеПроверки. +// * ДатаНачалаПроверки - Дата - Пороговая дата, обозначающая границу проверяемых +// объектов (только для объектов с датой). Объекты, дата которых меньше +// указанной, не следует проверять. По умолчанию не заполнено (т.е. +// проверять все). +// * ЛимитПроблем - Число - Количество проверяемых объектов. По умолчанию 1000. +// Если указан 0, то следует проверять все объекты. +// * ОбработчикПроверки - Строка - Имя экспортной процедуры-обработчика серверного общего +// модуля в виде ИмяМодуля.ИмяПроцедуры. +// * ОбработчикПереходаКИсправлению - Строка - Имя экспортной процедуры-обработчика клиентского общего +// модуля для перехода к исправлению проблемы в виде ИмяМодуля.ИмяПроцедуры. +// * БезОбработчикаПроверки - Булево - признак служебной проверки, которая не имеет процедуры-обработчика. +// * ЗапрещеноИзменениеВажности - Булево - Если Истина, то администратор не сможет перенастраивать +// важность данной проверки. +// * КонтекстПроверокВеденияУчета - ОпределяемыйТип.КонтекстПроверокВеденияУчета - значение, дополнительно +// уточняющее принадлежность проверки ведения учета к определенной группе +// или категории. +// * УточнениеКонтекстаПроверокВеденияУчета - ОпределяемыйТип.УточнениеКонтекстаПроверокВеденияУчета - второе значение, +// дополнительно уточняющее принадлежность проверки ведения учета +// к определенной группе или категории. +// * ДополнительныеПараметры - ХранилищеЗначений - Дополнительная информация о проверке для программного +// использования. +// * Комментарий - Строка - комментарий к проверке. // Функция НоваяТаблицаПроверок() Проверки = Новый ТаблицаЗначений; КолонкиПроверок = Проверки.Колонки; - КолонкиПроверок.Добавить("ИдентификаторРодителя", Новый ОписаниеТипов("Строка", , , , Новый КвалификаторыСтроки(256))); - КолонкиПроверок.Добавить("Наименование", Новый ОписаниеТипов("Строка", , , , Новый КвалификаторыСтроки(256))); - КолонкиПроверок.Добавить("Причины", Новый ОписаниеТипов("Строка")); - КолонкиПроверок.Добавить("Рекомендация", Новый ОписаниеТипов("Строка")); - КолонкиПроверок.Добавить("Идентификатор", Новый ОписаниеТипов("Строка", , , , Новый КвалификаторыСтроки(256))); - КолонкиПроверок.Добавить("ДатаНачалаПроверки", Новый ОписаниеТипов("Дата", , , , , Новый КвалификаторыДаты(ЧастиДаты.ДатаВремя))); - КолонкиПроверок.Добавить("ЛимитПроблем", Новый ОписаниеТипов("Число", , , Новый КвалификаторыЧисла(8, 0, ДопустимыйЗнак.Неотрицательный))); - КолонкиПроверок.Добавить("ОбработчикПроверки", Новый ОписаниеТипов("Строка", , , , Новый КвалификаторыСтроки(128))); - КолонкиПроверок.Добавить("ОбработчикПереходаКИсправлению", Новый ОписаниеТипов("Строка", , , , Новый КвалификаторыСтроки(128))); - КолонкиПроверок.Добавить("БезОбработчикаПроверки", Новый ОписаниеТипов("Булево")); - КолонкиПроверок.Добавить("ЗапрещеноИзменениеВажности", Новый ОписаниеТипов("Булево")); - КолонкиПроверок.Добавить("КонтекстПроверокВеденияУчета", Метаданные.ОпределяемыеТипы.КонтекстПроверокВеденияУчета.Тип); - КолонкиПроверок.Добавить("УточнениеКонтекстаПроверкиСостоянияСистемы", Метаданные.ОпределяемыеТипы.УточнениеКонтекстаПроверкиСостоянияСистемы.Тип); - КолонкиПроверок.Добавить("ДополнительныеПараметры", Новый ОписаниеТипов("ХранилищеЗначения")); + КолонкиПроверок.Добавить("ИдентификаторГруппы", Новый ОписаниеТипов("Строка", , , , Новый КвалификаторыСтроки(256))); + КолонкиПроверок.Добавить("Наименование", Новый ОписаниеТипов("Строка", , , , Новый КвалификаторыСтроки(256))); + КолонкиПроверок.Добавить("Причины", Новый ОписаниеТипов("Строка")); + КолонкиПроверок.Добавить("Рекомендация", Новый ОписаниеТипов("Строка")); + КолонкиПроверок.Добавить("Идентификатор", Новый ОписаниеТипов("Строка", , , , Новый КвалификаторыСтроки(256))); + КолонкиПроверок.Добавить("ДатаНачалаПроверки", Новый ОписаниеТипов("Дата", , , , , Новый КвалификаторыДаты(ЧастиДаты.ДатаВремя))); + КолонкиПроверок.Добавить("ЛимитПроблем", Новый ОписаниеТипов("Число", , , Новый КвалификаторыЧисла(8, 0, ДопустимыйЗнак.Неотрицательный))); + КолонкиПроверок.Добавить("ОбработчикПроверки", Новый ОписаниеТипов("Строка", , , , Новый КвалификаторыСтроки(256))); + КолонкиПроверок.Добавить("ОбработчикПереходаКИсправлению", Новый ОписаниеТипов("Строка", , , , Новый КвалификаторыСтроки(256))); + КолонкиПроверок.Добавить("БезОбработчикаПроверки", Новый ОписаниеТипов("Булево")); + КолонкиПроверок.Добавить("ЗапрещеноИзменениеВажности", Новый ОписаниеТипов("Булево")); + КолонкиПроверок.Добавить("КонтекстПроверокВеденияУчета", Метаданные.ОпределяемыеТипы.КонтекстПроверокВеденияУчета.Тип); + КолонкиПроверок.Добавить("УточнениеКонтекстаПроверокВеденияУчета", Метаданные.ОпределяемыеТипы.УточнениеКонтекстаПроверокВеденияУчета.Тип); + КолонкиПроверок.Добавить("ДополнительныеПараметры", Новый ОписаниеТипов("ХранилищеЗначения")); + КолонкиПроверок.Добавить("ИдентификаторРодителя", Новый ОписаниеТипов("Строка", , , , Новый КвалификаторыСтроки(256))); + КолонкиПроверок.Добавить("Комментарий", Новый ОписаниеТипов("Строка", , , , Новый КвалификаторыСтроки(256))); Возврат Проверки; КонецФункции +Процедура ОбеспечитьОбратнуюСовместимость(Проверки) + + Для Каждого Проверка Из Проверки Цикл + + Если ЗначениеЗаполнено(Проверка.ИдентификаторГруппы) Тогда + Продолжить; + КонецЕсли; + + Проверка.ИдентификаторГруппы = Проверка.ИдентификаторРодителя; + + КонецЦикла; + +КонецПроцедуры + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/КонтрольВеденияУчетаПовтИсп/КонтрольВеденияУчетаПовтИсп.mdo b/SSL/src/CommonModules/КонтрольВеденияУчетаСлужебныйПовтИсп/КонтрольВеденияУчетаСлужебныйПовтИсп.mdo similarity index 69% rename from SSL/src/CommonModules/КонтрольВеденияУчетаПовтИсп/КонтрольВеденияУчетаПовтИсп.mdo rename to SSL/src/CommonModules/КонтрольВеденияУчетаСлужебныйПовтИсп/КонтрольВеденияУчетаСлужебныйПовтИсп.mdo index e4ce1382b..28163fc7c 100644 --- a/SSL/src/CommonModules/КонтрольВеденияУчетаПовтИсп/КонтрольВеденияУчетаПовтИсп.mdo +++ b/SSL/src/CommonModules/КонтрольВеденияУчетаСлужебныйПовтИсп/КонтрольВеденияУчетаСлужебныйПовтИсп.mdo @@ -1,9 +1,9 @@ <?xml version="1.0" encoding="UTF-8"?> <mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="87e6e315-01e0-41eb-8373-0a60635f2f7a"> - <name>КонтрольВеденияУчетаПовтИсп</name> + <name>КонтрольВеденияУчетаСлужебныйПовтИсп</name> <synonym> <key>ru</key> - <value>Контроль ведения учета повт исп</value> + <value>Контроль ведения учета служебный повт исп</value> </synonym> <server>true</server> <externalConnection>true</externalConnection> diff --git a/SSL/src/CommonModules/НапоминанияПользователя/Module.bsl b/SSL/src/CommonModules/НапоминанияПользователя/Module.bsl new file mode 100644 index 000000000..5fa1b6e92 --- /dev/null +++ b/SSL/src/CommonModules/НапоминанияПользователя/Module.bsl @@ -0,0 +1,78 @@ +#Область ПрограммныйИнтерфейс + +// Создает напоминание с произвольным временем или расписанием выполнения. +// +// Параметры: +// Текст - Строка - текст напоминания; +// ВремяСобытия - Дата - дата и время события, о котором надо напомнить. +// - РасписаниеРегламентногоЗадания - расписание периодического события. +// - Строка - имя реквизита Предмета, в котором содержится время наступления события. +// ИнтервалДоСобытия - Число - время в секундах, за которое необходимо напомнить относительно времени события; +// Предмет - ЛюбаяСсылка - предмет напоминания; +// Идентификатор - Строка - уточняет предмет напоминания, например, "ДеньРождения". +// +Процедура УстановитьНапоминание(Текст, ВремяСобытия, ИнтервалДоСобытия = 0, Предмет = Неопределено, Идентификатор = Неопределено) Экспорт + НапоминанияПользователяСлужебный.ПодключитьПроизвольноеНапоминание( + Текст, ВремяСобытия, ИнтервалДоСобытия, Предмет, Идентификатор); +КонецПроцедуры + +// Возвращает список напоминаний текущего пользователя. +// +// Параметры: +// Предмет - Ссылка, Массив - предмет или предметы напоминания. +// Идентификатор - Строка - уточняет предмет напоминания, например, "ДеньРождения". +// +// Возвращаемое значение +// Массив - коллекция напоминаний в виде структур с полями, соответствующими полям регистра сведений НапоминанияПользователя. +// +Функция НайтиНапоминания(Знач Предмет = Неопределено, Идентификатор = Неопределено) Экспорт + + СписокПредметов = Предмет; + Если ТипЗнч(Предмет) <> Тип("Массив") Тогда + СписокПредметов = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Предмет); + КонецЕсли; + + ТекстЗапроса = + "ВЫБРАТЬ + | * + |ИЗ + | РегистрСведений.НапоминанияПользователя КАК НапоминанияПользователя + |ГДЕ + | НапоминанияПользователя.Пользователь = &Пользователь + | И &ОтборПоПредмету + | И &ОтборПоИдентификатору"; + + ОтборПоПредмету = "ИСТИНА"; + Если ЗначениеЗаполнено(Предмет) Тогда + ОтборПоПредмету = "НапоминанияПользователя.Источник В(&Предмет)"; + КонецЕсли; + + ОтборПоИдентификатору = "ИСТИНА"; + Если ЗначениеЗаполнено(Идентификатор) Тогда + ОтборПоИдентификатору = "НапоминанияПользователя.Идентификатор = &Идентификатор"; + КонецЕсли; + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ОтборПоПредмету", ОтборПоПредмету); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ОтборПоИдентификатору", ОтборПоИдентификатору); + + Запрос = Новый Запрос(ТекстЗапроса); + Запрос.УстановитьПараметр("Пользователь", Пользователи.ТекущийПользователь()); + Запрос.УстановитьПараметр("Предмет", Предмет); + Запрос.УстановитьПараметр("Идентификатор", Идентификатор); + + ТаблицаНапоминаний = Запрос.Выполнить().Выгрузить(); + + Возврат ОбщегоНазначения.ТаблицаЗначенийВМассив(ТаблицаНапоминаний); + +КонецФункции + +// Удаляет напоминание пользователя. +// +// Параметры: +// Напоминание - Структура - элемент коллекции, возвращаемый функцией НайтиНапоминания(). +// +Процедура УдалитьНапоминание(Напоминание) Экспорт + НапоминанияПользователяСлужебный.ОтключитьНапоминание(Напоминание, Ложь); +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/ПрисоединенныеФайлыПереопределяемый/ПрисоединенныеФайлыПереопределяемый.mdo b/SSL/src/CommonModules/НапоминанияПользователя/НапоминанияПользователя.mdo similarity index 56% rename from SSL/src/CommonModules/ПрисоединенныеФайлыПереопределяемый/ПрисоединенныеФайлыПереопределяемый.mdo rename to SSL/src/CommonModules/НапоминанияПользователя/НапоминанияПользователя.mdo index 217e15778..52e2eba88 100644 --- a/SSL/src/CommonModules/ПрисоединенныеФайлыПереопределяемый/ПрисоединенныеФайлыПереопределяемый.mdo +++ b/SSL/src/CommonModules/НапоминанияПользователя/НапоминанияПользователя.mdo @@ -1,9 +1,9 @@ <?xml version="1.0" encoding="UTF-8"?> -<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="a5633248-8611-4e9b-b223-2f59e7b84a65"> - <name>ПрисоединенныеФайлыПереопределяемый</name> +<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="8fdfef8d-502e-4d27-a539-e833048fa1eb"> + <name>НапоминанияПользователя</name> <synonym> <key>ru</key> - <value>Присоединенные файлы переопределяемый</value> + <value>Напоминания пользователя</value> </synonym> <server>true</server> <externalConnection>true</externalConnection> diff --git a/SSL/src/CommonModules/НапоминанияПользователяВызовСервера/Module.bsl b/SSL/src/CommonModules/НапоминанияПользователяВызовСервера/Module.bsl index 37ddb8d8f..21c8671ac 100644 --- a/SSL/src/CommonModules/НапоминанияПользователяВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/НапоминанияПользователяВызовСервера/Module.bsl @@ -12,32 +12,7 @@ // Массив - таблица значений, сконвертированная в массив из структур, содержащих данные строк таблицы. Функция ПолучитьНапоминанияТекущегоПользователя() Экспорт - УстановитьПривилегированныйРежим(Истина); - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ РАЗРЕШЕННЫЕ - | Напоминания.Пользователь КАК Пользователь, - | Напоминания.ВремяСобытия КАК ВремяСобытия, - | Напоминания.Источник КАК Источник, - | Напоминания.СрокНапоминания КАК СрокНапоминания, - | Напоминания.Описание КАК Описание, - | 2 КАК ИндексКартинки - |ИЗ - | РегистрСведений.НапоминанияПользователя КАК Напоминания - |ГДЕ - | Напоминания.СрокНапоминания <= &ТекущаяДата - | И Напоминания.Пользователь = &Пользователь - | - |УПОРЯДОЧИТЬ ПО - | ВремяСобытия"; - - Запрос.УстановитьПараметр("ТекущаяДата", ТекущаяДатаСеанса() + 30*60);// +30 минут для кэша - Запрос.УстановитьПараметр("Пользователь", Пользователи.ТекущийПользователь()); - - Результат = НапоминанияПользователяСлужебный.ПолучитьМассивСтруктурИзТаблицы(Запрос.Выполнить().Выгрузить()); - - Возврат Результат; + Возврат НапоминанияПользователяСлужебный.СписокТекущихНапоминанийПользователя(); КонецФункции @@ -49,10 +24,10 @@ КонецФункции -Функция ПодключитьНапоминание(Текст, ВремяСобытия, ИнтервалДоСобытия = 0, Предмет = Неопределено) Экспорт +Функция ПодключитьНапоминание(Текст, ВремяСобытия, ИнтервалДоСобытия = 0, Предмет = Неопределено, Идентификатор = Неопределено) Экспорт Возврат НапоминанияПользователяСлужебный.ПодключитьПроизвольноеНапоминание( - Текст, ВремяСобытия, ИнтервалДоСобытия, Предмет); + Текст, ВремяСобытия, ИнтервалДоСобытия, Предмет, Идентификатор); КонецФункции diff --git a/SSL/src/CommonModules/НапоминанияПользователяГлобальный/Module.bsl b/SSL/src/CommonModules/НапоминанияПользователяГлобальный/Module.bsl index 88f9a8267..9f4e39d51 100644 --- a/SSL/src/CommonModules/НапоминанияПользователяГлобальный/Module.bsl +++ b/SSL/src/CommonModules/НапоминанияПользователяГлобальный/Module.bsl @@ -5,6 +5,11 @@ Процедура ПроверитьТекущиеНапоминания() Экспорт ПараметрыРаботыКлиента = СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиента(); + + Если Не ПараметрыРаботыКлиента.ДоступноИспользованиеРазделенныхДанных Тогда + Возврат; + КонецЕсли; + ИнтервалПроверкиНапоминаний = ПараметрыРаботыКлиента.НастройкиНапоминаний.ИнтервалПроверкиНапоминаний; // Открываем форму текущих оповещений. diff --git a/SSL/src/CommonModules/НапоминанияПользователяКлиент/Module.bsl b/SSL/src/CommonModules/НапоминанияПользователяКлиент/Module.bsl index 1b21150f4..3a75a77b8 100644 --- a/SSL/src/CommonModules/НапоминанияПользователяКлиент/Module.bsl +++ b/SSL/src/CommonModules/НапоминанияПользователяКлиент/Module.bsl @@ -50,13 +50,15 @@ // Текст - Строка - текст напоминания; // ВремяСобытия - Дата - дата и время события, о котором надо напомнить; // - РасписаниеРегламентногоЗадания - расписание периодического события. +// - Строка - имя реквизита Предмета, в котором содержится время наступления события. // ИнтервалДоСобытия - Число - время в секундах, за которое необходимо напомнить относительно времени события; // Предмет - ЛюбаяСсылка - предмет напоминания; +// Идентификатор - Строка - уточняет предмет напоминания, например, "ДеньРождения". // -Процедура Напомнить(Текст, ВремяСобытия = Неопределено, ИнтервалДоСобытия = 0, Предмет = Неопределено) Экспорт +Процедура Напомнить(Текст, ВремяСобытия, ИнтервалДоСобытия = 0, Предмет = Неопределено, Идентификатор = Неопределено) Экспорт Напоминание = НапоминанияПользователяВызовСервера.ПодключитьНапоминание( - Текст, ВремяСобытия, ИнтервалДоСобытия, Предмет); + Текст, ВремяСобытия, ИнтервалДоСобытия, Предмет, Идентификатор); ОбновитьЗаписьВКэшеОповещений(Напоминание); СброситьТаймерПроверкиТекущихОповещений(); @@ -81,7 +83,6 @@ КонецПроцедуры - #КонецОбласти #Область СлужебныйПрограммныйИнтерфейс diff --git a/SSL/src/CommonModules/НапоминанияПользователяКлиентПовтИсп/Module.bsl b/SSL/src/CommonModules/НапоминанияПользователяКлиентПовтИсп/Module.bsl index 796608640..5a628391d 100644 --- a/SSL/src/CommonModules/НапоминанияПользователяКлиентПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/НапоминанияПользователяКлиентПовтИсп/Module.bsl @@ -8,7 +8,9 @@ // Нет // // Возвращаемое значение -// Массив - таблица значений, сконвертированная в массив из структур, содержащих данные строк таблицы. +// Массив - таблица значений, сконвертированная в массив из структур, содержит список текущих напоминаний. +// ФиксированныйМассив не используется, так как кэшированный результат функции необходимо модифицировать +// на клиенте. Такой подход применяется для минимизации серверных вызовов. Функция ПолучитьНапоминанияТекущегоПользователя() Экспорт Возврат НапоминанияПользователяВызовСервера.ПолучитьНапоминанияТекущегоПользователя(); КонецФункции diff --git a/SSL/src/CommonModules/НапоминанияПользователяКлиентСервер/Module.bsl b/SSL/src/CommonModules/НапоминанияПользователяКлиентСервер/Module.bsl index 054c68423..33f87e704 100644 --- a/SSL/src/CommonModules/НапоминанияПользователяКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/НапоминанияПользователяКлиентСервер/Module.bsl @@ -1,3 +1,30 @@ +#Область ПрограммныйИнтерфейс + +// Возвращает ежегодное расписание для события на указанную дату. +// +// Параметры: +// ДатаСобытия - Дата - произвольная дата. +// +// Возвращаемое значение: +// РасписаниеРегламентногоЗадания - расписание. +// +Функция ЕжегодноеРасписание(ДатаСобытия) Экспорт + Месяцы = Новый Массив; + Месяцы.Добавить(Месяц(ДатаСобытия)); + ДеньВМесяце = День(ДатаСобытия); + + Расписание = Новый РасписаниеРегламентногоЗадания; + Расписание.ПериодПовтораДней = 1; + Расписание.ПериодНедель = 1; + Расписание.Месяцы = Месяцы; + Расписание.ДеньВМесяце = ДеньВМесяце; + Расписание.ВремяНачала = '000101010000' + (ДатаСобытия - НачалоДня(ДатаСобытия)); + + Возврат Расписание; +КонецФункции + +#КонецОбласти + #Область СлужебныеПроцедурыИФункции // Возвращает массив текстовых представлений стандартных интервалов времени. @@ -218,7 +245,7 @@ // ВсеРеквизиты - Булево - если истина, то возвращает также реквизиты, связанные с настройкой // времени напоминания. Функция ОписаниеНапоминания(ДанныеДляЗаполнения = Неопределено, ВсеРеквизиты = Ложь) Экспорт - Результат = Новый Структура("Пользователь,ВремяСобытия,Источник,СрокНапоминания,Описание"); + Результат = Новый Структура("Пользователь,ВремяСобытия,Источник,СрокНапоминания,Описание,Идентификатор"); Если ВсеРеквизиты Тогда Результат.Вставить("СпособУстановкиВремениНапоминания"); Результат.Вставить("ИнтервалВремениНапоминания", 0); diff --git a/SSL/src/CommonModules/НапоминанияПользователяСлужебный/Module.bsl b/SSL/src/CommonModules/НапоминанияПользователяСлужебный/Module.bsl index 0bc22e944..d082c3700 100644 --- a/SSL/src/CommonModules/НапоминанияПользователяСлужебный/Module.bsl +++ b/SSL/src/CommonModules/НапоминанияПользователяСлужебный/Module.bsl @@ -3,7 +3,7 @@ //////////////////////////////////////////////////////////////////////////////// // Обработчики событий подсистем конфигурации. -// См. ОбщегоНазначенияПереопределяемый.ПараметрыРаботыКлиентаПриЗапуске. +// См. ОбщегоНазначенияПереопределяемый.ПриДобавленииПараметровРаботыКлиентаПриЗапуске. Процедура ПриДобавленииПараметровРаботыКлиентаПриЗапуске(Параметры) Экспорт Параметры.Вставить("НастройкиНапоминаний", @@ -11,7 +11,7 @@ КонецПроцедуры -// См. ОбщегоНазначенияПереопределяемый.ПараметрыРаботыКлиента. +// См. ОбщегоНазначенияПереопределяемый.ПриДобавленииПараметровРаботыКлиента. Процедура ПриДобавленииПараметровРаботыКлиента(Параметры) Экспорт Параметры.Вставить("НастройкиНапоминаний", @@ -111,7 +111,7 @@ // Возвращаемое значение: // Дата - дата и время следующего события по расписанию. // -Функция ПолучитьБлижайшуюДатуСобытияПоРасписанию(Расписание, ПредыдущаяДата = '000101010000') Экспорт +Функция ПолучитьБлижайшуюДатуСобытияПоРасписанию(Расписание, ПредыдущаяДата = '000101010000', ИскатьТолькоБудущиеДаты = Истина) Экспорт Результат = Неопределено; ТекущаяДатаСеанса = ТекущаяДатаСеанса(); @@ -120,7 +120,9 @@ Если Не ЗначениеЗаполнено(ДатаОтсчета) Тогда ДатаОтсчета = ТекущаяДатаСеанса; КонецЕсли; - ДатаОтсчета = Макс(ДатаОтсчета, ТекущаяДатаСеанса); + Если ИскатьТолькоБудущиеДаты Тогда + ДатаОтсчета = Макс(ДатаОтсчета, ТекущаяДатаСеанса); + КонецЕсли; Календарь = ПолучитьКалендарьНаБудущее(365*4+1, ДатаОтсчета, Расписание.ДатаНачала, Расписание.ПериодПовтораДней, Расписание.ПериодНедель); @@ -329,6 +331,126 @@ КонецФункции +Функция ГрафикСобытия(Расписание, НачалоПериода, КонецПериода) + + Результат = Неопределено; + ТекущаяДатаСеанса = ТекущаяДатаСеанса(); + + ДатаОтсчета = НачалоПериода; + + Календарь = ПолучитьКалендарьНаБудущее((НачалоДня(КонецПериода) - НачалоДня(НачалоПериода)) / (60*60*24) + 1, + ДатаОтсчета, Расписание.ДатаНачала, Расписание.ПериодПовтораДней, Расписание.ПериодНедель); + + ДниНедели = Расписание.ДниНедели; + Если ДниНедели.Количество() = 0 Тогда + ДниНедели = Новый Массив; + Для День = 1 По 7 Цикл + ДниНедели.Добавить(День); + КонецЦикла; + КонецЕсли; + + Месяцы = Расписание.Месяцы; + Если Месяцы.Количество() = 0 Тогда + Месяцы = Новый Массив; + Для Месяц = 1 По 12 Цикл + Месяцы.Добавить(Месяц); + КонецЦикла; + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; + + Запрос.Текст = "ВЫБРАТЬ * ПОМЕСТИТЬ Календарь ИЗ &Календарь КАК Календарь"; + Запрос.УстановитьПараметр("Календарь", Календарь); + Запрос.Выполнить(); + + Запрос.УстановитьПараметр("ДатаНачала", Расписание.ДатаНачала); + Запрос.УстановитьПараметр("ДатаКонца", Расписание.ДатаКонца); + Запрос.УстановитьПараметр("ДниНедели", ДниНедели); + Запрос.УстановитьПараметр("Месяцы", Месяцы); + Запрос.УстановитьПараметр("ДеньВМесяце", Расписание.ДеньВМесяце); + Запрос.УстановитьПараметр("ДеньНеделиВМесяце", Расписание.ДеньНеделиВМесяце); + Запрос.УстановитьПараметр("ПериодПовтораДней", ?(Расписание.ПериодПовтораДней = 0,1,Расписание.ПериодПовтораДней)); + Запрос.УстановитьПараметр("ПериодНедель", ?(Расписание.ПериодНедель = 0,1,Расписание.ПериодНедель)); + + Запрос.Текст = + "ВЫБРАТЬ + | Календарь.Дата, + | Календарь.НомерМесяца, + | Календарь.НомерДняНеделиВМесяце, + | Календарь.НомерДняНеделиСКонцаМесяца, + | Календарь.НомерДняВМесяце, + | Календарь.НомерДняВМесяцеСКонцаМесяца, + | Календарь.НомерДняВНеделе, + | Календарь.НомерДняВПериоде, + | Календарь.НомерНеделиВПериоде + |ИЗ + | Календарь КАК Календарь + |ГДЕ + | ВЫБОР + | КОГДА &ДатаНачала = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0) + | ТОГДА ИСТИНА + | ИНАЧЕ Календарь.Дата >= &ДатаНачала + | КОНЕЦ + | И ВЫБОР + | КОГДА &ДатаКонца = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0) + | ТОГДА ИСТИНА + | ИНАЧЕ Календарь.Дата <= &ДатаКонца + | КОНЕЦ + | И Календарь.НомерДняВНеделе В(&ДниНедели) + | И Календарь.НомерМесяца В(&Месяцы) + | И ВЫБОР + | КОГДА &ДеньВМесяце = 0 + | ТОГДА ИСТИНА + | ИНАЧЕ ВЫБОР + | КОГДА &ДеньВМесяце > 0 + | ТОГДА Календарь.НомерДняВМесяце = &ДеньВМесяце + | ИНАЧЕ Календарь.НомерДняВМесяцеСКонцаМесяца = -&ДеньВМесяце + | КОНЕЦ + | КОНЕЦ + | И ВЫБОР + | КОГДА &ДеньНеделиВМесяце = 0 + | ТОГДА ИСТИНА + | ИНАЧЕ ВЫБОР + | КОГДА &ДеньНеделиВМесяце > 0 + | ТОГДА Календарь.НомерДняНеделиВМесяце = &ДеньНеделиВМесяце + | ИНАЧЕ Календарь.НомерДняНеделиСКонцаМесяца = -&ДеньНеделиВМесяце + | КОНЕЦ + | КОНЕЦ + | И Календарь.НомерДняВПериоде = &ПериодПовтораДней + | И Календарь.НомерНеделиВПериоде = &ПериодНедель"; + + Выборка = Запрос.Выполнить().Выбрать(); + + Результат = Новый Массив; + + Пока Выборка.Следующий() Цикл + БлижайшаяДата = Выборка.Дата; + ВремяОтсчета = '00010101'; + Если НачалоДня(БлижайшаяДата) = НачалоДня(ДатаОтсчета) Тогда + ВремяОтсчета = ВремяОтсчета + (ДатаОтсчета-НачалоДня(ДатаОтсчета)); + КонецЕсли; + + ДатаИВремя = Неопределено; + БлижайшееВремя = ПолучитьБлижайшееВремяИзРасписания(Расписание, ВремяОтсчета); + Если БлижайшееВремя <> Неопределено Тогда + ДатаИВремя = БлижайшаяДата + (БлижайшееВремя - '00010101'); + Иначе + Если Выборка.Следующий() Тогда + Время = ПолучитьБлижайшееВремяИзРасписания(Расписание); + ДатаИВремя = Выборка.Дата + (Время - '00010101'); + КонецЕсли; + КонецЕсли; + + Если ЗначениеЗаполнено(ДатаИВремя) И ДатаИВремя <= КонецПериода Тогда + Результат.Добавить(ДатаИВремя); + КонецЕсли; + КонецЦикла; + + Возврат Результат; + +КонецФункции + // Возвращает интервал времени в минутах, через который необходимо повторять проверку текущих напоминаний. Функция ПолучитьИнтервалПроверкиНапоминаний(Пользователь = Неопределено) Интервал = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( @@ -340,25 +462,6 @@ Возврат Макс(Интервал, 1); КонецФункции -// Конвертирует таблицу в массив структур. -// -// Параметры: -// ТаблицаЗначений - произвольная таблица значений, у которой есть имена колонок. -// -// Возвращаемое значение -// Массив - массив структур, содержащих значения строк таблицы. -Функция ПолучитьМассивСтруктурИзТаблицы(ТаблицаЗначений) Экспорт - Результат = Новый Массив; - Для Каждого Строка Из ТаблицаЗначений Цикл - СтруктураСтроки = Новый Структура; - Для Каждого Колонка Из ТаблицаЗначений.Колонки Цикл - СтруктураСтроки.Вставить(Колонка.Имя, Строка[Колонка.Имя]); - КонецЦикла; - Результат.Добавить(СтруктураСтроки); - КонецЦикла; - Возврат Результат; -КонецФункции - Функция ПолучитьИмяПользователяИБ(Пользователь) Если Не ЗначениеЗаполнено(Пользователь) Тогда Возврат Неопределено; @@ -472,7 +575,7 @@ КонецПроцедуры -// Создает напоминание пользователя. Если по объекту уже есть напоминание, то перезаписывает его. +// Создает напоминание пользователя. Если по объекту уже есть напоминание, то сдвигает время напоминания на секунды вперед. Процедура ПодключитьНапоминание(ПараметрыНапоминания, ОбновитьСрокНапоминания = Ложь) Экспорт НаборЗаписей = РегистрыСведений.НапоминанияПользователя.СоздатьНаборЗаписей(); @@ -512,15 +615,16 @@ ТекстЗапроса = "ВЫБРАТЬ - | НапоминанияПользователя.Пользователь, - | НапоминанияПользователя.ВремяСобытия, - | НапоминанияПользователя.Источник, - | НапоминанияПользователя.СрокНапоминания, - | НапоминанияПользователя.Описание, - | НапоминанияПользователя.СпособУстановкиВремениНапоминания, - | НапоминанияПользователя.Расписание, - | НапоминанияПользователя.ИнтервалВремениНапоминания, - | НапоминанияПользователя.ИмяРеквизитаИсточника + | НапоминанияПользователя.Пользователь КАК Пользователь, + | НапоминанияПользователя.ВремяСобытия КАК ВремяСобытия, + | НапоминанияПользователя.Источник КАК Источник, + | НапоминанияПользователя.СрокНапоминания КАК СрокНапоминания, + | НапоминанияПользователя.Описание КАК Описание, + | НапоминанияПользователя.СпособУстановкиВремениНапоминания КАК СпособУстановкиВремениНапоминания, + | НапоминанияПользователя.Расписание КАК Расписание, + | НапоминанияПользователя.ИнтервалВремениНапоминания КАК ИнтервалВремениНапоминания, + | НапоминанияПользователя.ИмяРеквизитаИсточника КАК ИмяРеквизитаИсточника, + | НапоминанияПользователя.Идентификатор КАК Идентификатор |ИЗ | РегистрСведений.НапоминанияПользователя КАК НапоминанияПользователя |ГДЕ @@ -570,7 +674,7 @@ КонецПроцедуры -Функция ПодключитьПроизвольноеНапоминание(Текст, ВремяСобытия = Неопределено, ИнтервалДоСобытия = 0, Предмет = Неопределено) Экспорт +Функция ПодключитьПроизвольноеНапоминание(Текст, ВремяСобытия, ИнтервалДоСобытия = 0, Предмет = Неопределено, Идентификатор = Неопределено) Экспорт ПараметрыНапоминания = Новый Структура; ПараметрыНапоминания.Вставить("Описание", Текст); Если ТипЗнч(ВремяСобытия) = Тип("РасписаниеРегламентногоЗадания") Тогда @@ -580,6 +684,7 @@ КонецЕсли; ПараметрыНапоминания.Вставить("ИнтервалВремениНапоминания", ИнтервалДоСобытия); ПараметрыНапоминания.Вставить("Источник", Предмет); + ПараметрыНапоминания.Вставить("Идентификатор", Идентификатор); Напоминание = СоздатьНапоминание(ПараметрыНапоминания); ПодключитьНапоминание(Напоминание); @@ -601,21 +706,6 @@ Возврат Напоминание; КонецФункции -Функция ЕжегодноеРасписание(ДатаСобытия) - Месяцы = Новый Массив; - Месяцы.Добавить(Месяц(ДатаСобытия)); - ДеньВМесяце = День(ДатаСобытия); - - Расписание = Новый РасписаниеРегламентногоЗадания; - Расписание.ПериодПовтораДней = 1; - Расписание.ПериодНедель = 1; - Расписание.Месяцы = Месяцы; - Расписание.ДеньВМесяце = ДеньВМесяце; - Расписание.ВремяНачала = '000101010000' + (ДатаСобытия - НачалоДня(ДатаСобытия)); - - Возврат Расписание; -КонецФункции - // Возвращает структуру нового напоминания для последующего подключения. Функция СоздатьНапоминание(ПараметрыНапоминания) @@ -653,7 +743,7 @@ Если Напоминание.ПовторятьЕжегодно Тогда Если ЗначениеЗаполнено(Напоминание.ВремяСобытия) Тогда - Напоминание.Расписание = ЕжегодноеРасписание(Напоминание.ВремяСобытия); + Напоминание.Расписание = НапоминанияПользователяКлиентСервер.ЕжегодноеРасписание(Напоминание.ВремяСобытия); КонецЕсли; КонецЕсли; @@ -668,4 +758,102 @@ КонецФункции +// Прекращает просроченные периодические напоминания. +Процедура АктуализироватьСписокНапоминаний() + + ТекстЗапроса = + "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | Напоминания.Пользователь КАК Пользователь, + | Напоминания.ВремяСобытия КАК ВремяСобытия, + | Напоминания.Источник КАК Источник, + | Напоминания.СрокНапоминания КАК СрокНапоминания, + | Напоминания.Описание КАК Описание, + | Напоминания.СпособУстановкиВремениНапоминания КАК СпособУстановкиВремениНапоминания, + | Напоминания.ИнтервалВремениНапоминания КАК ИнтервалВремениНапоминания, + | Напоминания.ИмяРеквизитаИсточника КАК ИмяРеквизитаИсточника, + | Напоминания.Расписание КАК Расписание, + | Напоминания.ПредставлениеИсточника КАК ПредставлениеИсточника, + | Напоминания.Идентификатор КАК Идентификатор + |ИЗ + | РегистрСведений.НапоминанияПользователя КАК Напоминания + |ГДЕ + | Напоминания.ВремяСобытия <= &ТекущаяДата + | И Напоминания.Пользователь = &Пользователь"; + + Запрос = Новый Запрос(ТекстЗапроса); + + Запрос.УстановитьПараметр("ТекущаяДата", ТекущаяДатаСеанса()); + Запрос.УстановитьПараметр("Пользователь", Пользователи.ТекущийПользователь()); + + УстановитьПривилегированныйРежим(Истина); + СписокНапоминаний = Запрос.Выполнить().Выгрузить(); + УстановитьПривилегированныйРежим(Ложь); + + Для Каждого Напоминание Из СписокНапоминаний Цикл + Расписание = Напоминание.Расписание.Получить(); + Если Расписание = Неопределено Тогда + Продолжить; + КонецЕсли; + + ГрафикСобытияНаГод = ГрафикСобытия(Расписание, Напоминание.ВремяСобытия, ДобавитьМесяц(Напоминание.ВремяСобытия, 12) - 1); + ПодошедшееВремяСобытия = ГрафикСобытия(Расписание, Напоминание.ВремяСобытия + 1, ТекущаяДатаСеанса()); + + // - подошло следующее время события по расписанию; + Если ПодошедшееВремяСобытия.Количество() > 0 + // - указано "Время завершения" в расписании регламентного задания и оно просрочено; + Или ЗначениеЗаполнено(Расписание.ВремяЗавершения) И ТекущаяДатаСеанса() > (Напоминание.ВремяСобытия + (Расписание.ВремяЗавершения - Расписание.ВремяНачала)) + // - напоминание ежегодное, но уже прошел месяц со времени события; + Или ГрафикСобытияНаГод.Количество() = 1 И ТекущаяДатаСеанса() > ДобавитьМесяц(Напоминание.ВремяСобытия, 1) + // - напоминание ежемесячное, но уже прошла неделя со времени события. + Или ГрафикСобытияНаГод.Количество() = 12 И ТекущаяДатаСеанса() > Напоминание.ВремяСобытия + 60*60*24*7 Тогда + ВремяБлижайшегоСобытия = Неопределено; + Если ПодошедшееВремяСобытия.Количество() > 0 Тогда + ОтключитьНапоминание(Напоминание, Ложь); + + ПараметрыНапоминания = ОбщегоНазначения.СтрокаТаблицыЗначенийВСтруктуру(Напоминание); + ПараметрыНапоминания.Расписание = Напоминание.Расписание.Получить(); + Напоминание = СоздатьНапоминание(ПараметрыНапоминания); + Напоминание.ВремяСобытия = ПодошедшееВремяСобытия[ПодошедшееВремяСобытия.ВГраница()]; + Напоминание.СрокНапоминания = Напоминание.ВремяСобытия - Напоминание.ИнтервалВремениНапоминания; + + ПодключитьНапоминание(Напоминание); + КонецЕсли; + ОтключитьНапоминание(Напоминание, Истина); + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +Функция СписокТекущихНапоминанийПользователя() Экспорт + + АктуализироватьСписокНапоминаний(); + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | Напоминания.Пользователь КАК Пользователь, + | Напоминания.ВремяСобытия КАК ВремяСобытия, + | Напоминания.Источник КАК Источник, + | Напоминания.СрокНапоминания КАК СрокНапоминания, + | Напоминания.Описание КАК Описание, + | 2 КАК ИндексКартинки + |ИЗ + | РегистрСведений.НапоминанияПользователя КАК Напоминания + |ГДЕ + | Напоминания.СрокНапоминания <= &ТекущаяДата + | И Напоминания.Пользователь = &Пользователь + | + |УПОРЯДОЧИТЬ ПО + | ВремяСобытия"; + + Запрос.УстановитьПараметр("ТекущаяДата", ТекущаяДатаСеанса() + 30*60);// +30 минут для кэша + Запрос.УстановитьПараметр("Пользователь", Пользователи.ТекущийПользователь()); + + УстановитьПривилегированныйРежим(Истина); + Результат = ОбщегоНазначения.ТаблицаЗначенийВМассив(Запрос.Выполнить().Выгрузить()); + + Возврат Результат; + +КонецФункции + #КонецОбласти diff --git a/SSL/src/CommonModules/ОбменДаннымиXDTOСервер/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиXDTOСервер/Module.bsl index b1bec11f3..0799ac108 100644 --- a/SSL/src/CommonModules/ОбменДаннымиXDTOСервер/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиXDTOСервер/Module.bsl @@ -281,7 +281,6 @@ Если Значение = Неопределено Тогда Продолжить; КонецЕсли; - Ключ = Поле.Ключ; Стр = Стр + Символы.ПС + Отступ + Символы.Таб + СтроковыеФункцииКлиентСервер.ДополнитьСтроку(Поле.Ключ, Выравнивание, " ", "Справа") + " = " + Строка(Значение); @@ -1609,10 +1608,6 @@ Пока КомпонентыОбмена.ФайлОбмена.ТипУзла = ТипУзлаXML.НачалоЭлемента Цикл Попытка - #Область ЧтениеЭлементаXDTO - ОтправкаНазад = Ложь; - ДанныеИБ = Неопределено; - // Получаем из файла ОбъектXDTO. ОбъектXDTO = ФабрикаXDTO.ПрочитатьXML( КомпонентыОбмена.ФайлОбмена, @@ -1640,9 +1635,7 @@ Для Каждого ИмяПКО Из ПравилоОбработки.ИспользуемыеПКО Цикл ИспользованиеПКО.Вставить(ИмяПКО, Истина); КонецЦикла; - #КонецОбласти - - #Область ПриОбработке + Если ЗначениеЗаполнено(ПравилоОбработки.ПриОбработке) Тогда ПриОбработкеПОД( КомпонентыОбмена, @@ -1650,10 +1643,6 @@ ДанныеXDTO, ИспользованиеПКО); КонецЕсли; - #КонецОбласти - - // Массив нужен для "свертки" ПКО по видам объектов метаданных. - ОбработанныеТипыОбъектовМетаданных = Новый Массив; // 1. Поиск правила конвертации. Для Каждого ТекущееПКО Из ИспользованиеПКО Цикл @@ -1662,8 +1651,6 @@ #Область ПроверкаСоответствияТаблицеДляЗагрузки Если ТаблицыДляЗагрузки <> Неопределено Тогда - ТипОбъектаСтрокой = ПравилоКонвертации.ТипПолученныхДанныхСтрокой; - ТипИсточникаСтрокой = ОбъектXDTO.Тип().Имя; ТипПриемникаСтрокой = ПравилоКонвертации.ТипПолученныхДанныхСтрокой; @@ -2049,12 +2036,10 @@ ЧтениеXML.Прочитать(); // Message КомпонентыОбмена.Вставить("ФайлОбмена", ЧтениеXML); Исключение - СтрокаСообщенияОбОшибке = НСтр("ru = 'Ошибка при загрузке данных: %1'"); СтрокаСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщенияОбОшибке, ОписаниеОшибки()); ЗаписатьВПротоколВыполнения(КомпонентыОбмена, СтрокаСообщенияОбОшибке); Прервать; - КонецПопытки; Если (ЧтениеXML.ТипУзла <> ТипУзлаXML.НачалоЭлемента @@ -2093,7 +2078,6 @@ КомпонентыОбмена.ВерсияФорматаОбмена = ФорматОбмена.Версия; КомпонентыОбмена.МенеджерОбмена = МенеджерОбменаВерсииФормата(КомпонентыОбмена.ВерсияФорматаОбмена, КомпонентыОбмена.УзелКорреспондента); - Если ЭтоОбменЧерезПланОбмена Тогда Если Не Header.Установлено("Confirmation") Тогда @@ -2146,7 +2130,8 @@ СтрокаСообщения = НСтр("ru = 'Не найден узел обмена для загрузки данных. План обмена: %1, Код: %2'"); СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, ИмяПланаОбмена, КодОтКого); - ВызватьИсключение СтрокаСообщения; + ЗаписатьВПротоколВыполнения(КомпонентыОбмена, СтрокаСообщения); + Прервать; КонецЕсли; @@ -2154,22 +2139,28 @@ МенеджерПланаОбмена = МенеджерПланаОбмена(КомпонентыОбмена.УзелКорреспондента); ФорматПланаОбмена = ОбменДаннымиСервер.ЗначениеНастройкиПланаОбмена(ИмяПланаОбмена, "ФорматОбмена"); Если ФорматПланаОбмена <> ФорматОбмена.БазовыйФормат Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Формат сообщения обмена <%1> не соответствует формату плана обмена <%2>.'"), ФорматОбмена.БазовыйФормат, ФорматПланаОбмена); + ЗаписатьВПротоколВыполнения(КомпонентыОбмена, СтрокаСообщения); + Прервать; КонецЕсли; // Проверяем версию формата сообщения обмена. Если ВерсииФорматаОбменаМассив(КомпонентыОбмена.УзелКорреспондента).Найти(ФорматОбмена.Версия) = Неопределено Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Версия формата сообщения обмена <%1> не поддерживается.'"), ФорматОбмена.Версия); + ЗаписатьВПротоколВыполнения(КомпонентыОбмена, СтрокаСообщения); + Прервать; КонецЕсли; Если КомпонентыОбмена.ИспользоватьКвитирование Тогда - Если ОбщегоНазначения.ЗначениеРеквизитаОбъекта(КомпонентыОбмена.УзелКорреспондента, "НомерПринятого") >= КомпонентыОбмена.НомерВходящегоСообщения Тогда + НомерПринятого = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(КомпонентыОбмена.УзелКорреспондента, "НомерПринятого"); + + Если НомерПринятого >= КомпонентыОбмена.НомерВходящегоСообщения Тогда // Номер сообщения меньше либо равен ранее принятому. КомпонентыОбмена.СостояниеОбменаДанными.РезультатВыполненияОбмена = @@ -3914,7 +3905,6 @@ Если НомерЭтапа = 2 И ТЧ.ИспользуетсяАлгоритмКонвертации И ЗначениеЗаполнено(ТЧ.ТЧКонфигурации) И ПолученныеДанные.ДополнительныеСвойства.Свойство(ТЧ.ТЧКонфигурации) Тогда - МассивСтруктурСДаннымиСтрок = ПолученныеДанные.ДополнительныеСвойства[ТЧ.ТЧКонфигурации]; КоличествоСтрокТЧКонфигурации = ПолученныеДанные[ТЧ.ТЧКонфигурации].Количество(); @@ -3947,7 +3937,6 @@ КонецЦикла; КонецЦикла; - КонецЕсли; КонецЦикла; @@ -4214,6 +4203,11 @@ Для Каждого КонвертацииТЧ Из ПравилоКонвертации.СвойстваТабличныхЧастей Цикл ИмяТЧ = КонвертацииТЧ.ТЧКонфигурации; + + Если Не ЗначениеЗаполнено(ИмяТЧ) Тогда + Продолжить; + КонецЕсли; + ДанныеИБ[ИмяТЧ].Очистить(); ДанныеИБ[ИмяТЧ].Загрузить(ПолученныеДанные[ИмяТЧ].Выгрузить()); КонецЦикла; @@ -4275,34 +4269,22 @@ Процедура СнятьПометкуУдаленияСПредопределенногоЭлемента(Объект, ТипОбъекта, КомпонентыОбмена) - Попытка - ПометкаУдаления = Объект.ПометкаУдаления; - Исключение - ПометкаУдаления = Ложь; - КонецПопытки; + ПометкаПредопределенный = Новый Структура("ПометкаУдаления, Предопределенный", Ложь, Ложь); + ЗаполнитьЗначенияСвойств(ПометкаПредопределенный, Объект); - Если ПометкаУдаления Тогда + Если ПометкаПредопределенный.ПометкаУдаления + И ПометкаПредопределенный.Предопределенный Тогда + + Объект.ПометкаУдаления = Ложь; - Попытка - Предопределенный = Объект.Предопределенный; - Исключение - Предопределенный = Ложь; - КонецПопытки; + // фиксируем событие в ЖР + ЗП = ЗаписьПротоколаОбмена(80); + ЗП.ТипОбъекта = ТипОбъекта; + ЗП.Объект = Строка(Объект); - Если Предопределенный Тогда - - Объект.ПометкаУдаления = Ложь; - - // фиксируем событие в ЖР - ЗП = ЗаписьПротоколаОбмена(80); - ЗП.ТипОбъекта = ТипОбъекта; - ЗП.Объект = Строка(Объект); - - КомпонентыОбмена.СостояниеОбменаДанными.РезультатВыполненияОбмена = - Перечисления.РезультатыВыполненияОбмена.ВыполненоСПредупреждениями; - ЗаписатьВПротоколВыполнения(КомпонентыОбмена, 80, ЗП, Ложь); - - КонецЕсли; + КомпонентыОбмена.СостояниеОбменаДанными.РезультатВыполненияОбмена = + Перечисления.РезультатыВыполненияОбмена.ВыполненоСПредупреждениями; + ЗаписатьВПротоколВыполнения(КомпонентыОбмена, 80, ЗП, Ложь); КонецЕсли; diff --git a/SSL/src/CommonModules/ОбменДаннымиВызовСервера/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиВызовСервера/Module.bsl index 6f82ca1f1..983cfa15f 100644 --- a/SSL/src/CommonModules/ОбменДаннымиВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиВызовСервера/Module.bsl @@ -581,10 +581,18 @@ Возврат Неопределено; КонецЕсли; + Отбор = Новый Структура; + Отбор.Вставить("УникальныйИдентификатор", Новый УникальныйИдентификатор(УникальныйНомерЗадания)); + УстановитьПривилегированныйРежим(Истина); - Задание = РегламентныеЗаданияСервер.ПолучитьРегламентноеЗадание(УникальныйНомерЗадания); + Задания = РегламентныеЗаданияСервер.НайтиЗадания(Отбор); + + Если Задания.Количество() = 0 Тогда + Возврат Неопределено; + КонецЕсли; - Возврат Задание; + Возврат Задания[0]; + КонецФункции // Возвращает структуру со значениями свойств объекта, полученных запросом из ИБ. diff --git a/SSL/src/CommonModules/ОбменДаннымиПереопределяемый/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиПереопределяемый/Module.bsl index e70f31146..f27178fd5 100644 --- a/SSL/src/CommonModules/ОбменДаннымиПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиПереопределяемый/Module.bsl @@ -227,17 +227,4 @@ КонецПроцедуры -#Область УстаревшиеПроцедурыИФункции - -// Устарела. Следует использовать ПриОпределенииПрефиксаИнформационнойБазыПоУмолчанию. -// -// Возвращаемое значение: -// Строка - префикс этой информационной базы. -// -Функция ПрефиксИнформационнойБазыПоУмолчанию() Экспорт - -КонецФункции - -#КонецОбласти - #КонецОбласти diff --git a/SSL/src/CommonModules/ОбменДаннымиПовтИсп/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиПовтИсп/Module.bsl index 7d9a10bb8..77909446f 100644 --- a/SSL/src/CommonModules/ОбменДаннымиПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиПовтИсп/Module.bsl @@ -35,74 +35,12 @@ КонецФункции -// См. ОбменДаннымиСервер.ЭтоАвтономноеРабочееМесто. -// -Функция ЭтоАвтономноеРабочееМесто() Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Если Константы.НастройкаПодчиненногоУзлаРИБЗавершена.Получить() Тогда - - Возврат Константы.ЭтоАвтономноеРабочееМесто.Получить(); - - Иначе - - ГлавныйУзелЭтойИнформационнойБазы = ОбменДаннымиСервер.ГлавныйУзел(); - Возврат ГлавныйУзелЭтойИнформационнойБазы <> Неопределено - И ЭтоУзелАвтономногоРабочегоМеста(ГлавныйУзелЭтойИнформационнойБазы); - - КонецЕсли; - -КонецФункции - // См. ОбменДаннымиСервер.ЭтоУзелАвтономногоРабочегоМеста. // Функция ЭтоУзелАвтономногоРабочегоМеста(Знач УзелИнформационнойБазы) Экспорт - Возврат АвтономнаяРаботаПоддерживается() - И УзелИнформационнойБазы.Метаданные().Имя = ПланОбменаАвтономнойРаботы(); - -КонецФункции - -// См. ОбменДаннымиСервер.УзелПланаОбменаПоКоду. -// -Функция НайтиУзелПланаОбменаПоКоду(ИмяПланаОбмена, КодУзла) Экспорт - - ТекстЗапроса = - "ВЫБРАТЬ - | ПланОбмена.Ссылка КАК Ссылка - |ИЗ - | ПланОбмена.[ИмяПланаОбмена] КАК ПланОбмена - |ГДЕ - | ПланОбмена.Код = &Код"; - - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ИмяПланаОбмена]", ИмяПланаОбмена); - - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("Код", КодУзла); - Запрос.Текст = ТекстЗапроса; - - РезультатЗапроса = Запрос.Выполнить(); - - Если РезультатЗапроса.Пустой() Тогда - - Возврат Неопределено; - - КонецЕсли; - - Выборка = РезультатЗапроса.Выбрать(); - Выборка.Следующий(); - - Возврат Выборка.Ссылка; -КонецФункции - -// См. ОбменДаннымиСервер.ВнешнееСоединениеСБазой. -// -Функция УстановитьВнешнееСоединениеСБазой(Параметры) Экспорт - - // Преобразуем настройки - параметры внешнего соединения в параметры транспорта. - НастройкиТранспорта = ОбменДаннымиСервер.НастройкиТранспортаПоПараметрамВнешнегоСоединения(Параметры); - Возврат ОбменДаннымиСервер.УстановитьВнешнееСоединениеСБазой(НастройкиТранспорта); + Возврат ОбменДаннымиПовтИсп.АвтономнаяРаботаПоддерживается() + И УзелИнформационнойБазы.Метаданные().Имя = ОбменДаннымиПовтИсп.ПланОбменаАвтономнойРаботы(); КонецФункции @@ -399,6 +337,18 @@ КонецФункции +// См. ОбменДаннымиСервер.УзелПланаОбменаПоКоду. +// +Функция УзелПланаОбменаПоКоду(ИмяПланаОбмена, КодУзла) Экспорт + СсылкаУзел = ПланыОбмена[ИмяПланаОбмена].НайтиПоКоду(КодУзла); + + Если Не ЗначениеЗаполнено(СсылкаУзел) Тогда + Возврат Неопределено; + КонецЕсли; + + Возврат СсылкаУзел; +КонецФункции + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -1182,19 +1132,6 @@ КонецФункции -// Определяет возможность передачи файлов между двумя базами через локальную сеть. -// -// Параметры: -// УзелИнформационнойБазы - ПланОбменаСсылка - узел плана обмена, для которого выполняется получение сообщения -// обмена. -// Пароль - Строка - Пароль для WS соединения. -// -Функция ОбменВыполняетсяВОднойЛокальнойСети(Знач УзелИнформационнойБазы, Знач ПараметрыАутентификации = Неопределено) Экспорт - - Возврат ОбменДаннымиСервер.ОбменВыполняетсяВОднойЛокальнойСети(УзелИнформационнойБазы, ПараметрыАутентификации); - -КонецФункции - // Возвращает признак доступности использования плана обмена. // Признак вычисляется по составу всех функциональных опций конфигурации. // Если план обмена не входит в состав ни одной функциональной опции, то возвращается Истина. @@ -1295,7 +1232,7 @@ Если ОбменДаннымиСервер.ЭтоРазделенныйПланОбменаБСП(ПланОбмена.Имя) И ПланОбмена.РаспределеннаяИнформационнаяБаза - И ПланОбменаИспользуетсяВМоделиСервиса(ПланОбмена.Имя) Тогда + И ОбменДаннымиПовтИсп.ПланОбменаИспользуетсяВМоделиСервиса(ПланОбмена.Имя) Тогда Результат.Добавить(ПланОбмена.Имя); @@ -1598,3 +1535,59 @@ КонецФункции #КонецОбласти + + +#Область УстаревшиеПроцедурыИФункции + +// Устарела. Следует использовать новую (см. ОбменДаннымиСервер.ЭтоАвтономноеРабочееМесто). +// +Функция ЭтоАвтономноеРабочееМесто() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Если Константы.НастройкаПодчиненногоУзлаРИБЗавершена.Получить() Тогда + + Возврат Константы.ЭтоАвтономноеРабочееМесто.Получить(); + + Иначе + + ГлавныйУзелЭтойИнформационнойБазы = ОбменДаннымиСервер.ГлавныйУзел(); + Возврат ГлавныйУзелЭтойИнформационнойБазы <> Неопределено + И ЭтоУзелАвтономногоРабочегоМеста(ГлавныйУзелЭтойИнформационнойБазы); + + КонецЕсли; + +КонецФункции + +// Устарела. Следует использовать новую (см. ОбменДаннымиПовтИсп.УзелПланаОбменаПоКоду). +// +Функция НайтиУзелПланаОбменаПоКоду(ИмяПланаОбмена, КодУзла) Экспорт + ТекстЗапроса = + "ВЫБРАТЬ + | ПланОбмена.Ссылка КАК Ссылка + |ИЗ + | ПланОбмена.[ИмяПланаОбмена] КАК ПланОбмена + |ГДЕ + | ПланОбмена.Код = &Код"; + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ИмяПланаОбмена]", ИмяПланаОбмена); + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("Код", КодУзла); + Запрос.Текст = ТекстЗапроса; + + РезультатЗапроса = Запрос.Выполнить(); + + Если РезультатЗапроса.Пустой() Тогда + + Возврат Неопределено; + + КонецЕсли; + + Выборка = РезультатЗапроса.Выбрать(); + Выборка.Следующий(); + + Возврат Выборка.Ссылка; +КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/ОбменДаннымиСервер/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиСервер/Module.bsl index f14c93d84..5c28d0e54 100644 --- a/SSL/src/CommonModules/ОбменДаннымиСервер/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиСервер/Module.bsl @@ -1037,7 +1037,9 @@ // Функция ВнешнееСоединениеСБазой(Параметры) Экспорт - Возврат ОбменДаннымиПовтИсп.УстановитьВнешнееСоединениеСБазой(Параметры) + // Преобразуем настройки - параметры внешнего соединения в параметры транспорта. + НастройкиТранспорта = НастройкиТранспортаПоПараметрамВнешнегоСоединения(Параметры); + Возврат УстановитьВнешнееСоединениеСБазой(НастройкиТранспорта); КонецФункции @@ -1058,7 +1060,7 @@ // Функция УзелПланаОбменаПоКоду(ИмяПланаОбмена, КодУзла) Экспорт - Возврат ОбменДаннымиПовтИсп.НайтиУзелПланаОбменаПоКоду(ИмяПланаОбмена, КодУзла); + Возврат ОбменДаннымиПовтИсп.УзелПланаОбменаПоКоду(ИмяПланаОбмена, КодУзла); КонецФункции @@ -1068,7 +1070,19 @@ // Функция ЭтоАвтономноеРабочееМесто() Экспорт - Возврат ОбменДаннымиПовтИсп.ЭтоАвтономноеРабочееМесто(); + УстановитьПривилегированныйРежим(Истина); + + Если Константы.НастройкаПодчиненногоУзлаРИБЗавершена.Получить() Тогда + + Возврат Константы.ЭтоАвтономноеРабочееМесто.Получить(); + + Иначе + + ГлавныйУзелЭтойИнформационнойБазы = ГлавныйУзел(); + Возврат ГлавныйУзелЭтойИнформационнойБазы <> Неопределено + И ОбменДаннымиПовтИсп.ЭтоУзелАвтономногоРабочегоМеста(ГлавныйУзелЭтойИнформационнойБазы); + + КонецЕсли; КонецФункции @@ -1634,7 +1648,7 @@ НачатьТранзакцию(); Попытка Блокировка = Новый БлокировкаДанных; - ЭлементБлокировки = Блокировка.Добавить("Константа.СведенияОбОбновленииИБ"); + ЭлементБлокировки = Блокировка.Добавить("Константа.ДанныеДляОтложенногоОбновления"); Блокировка.Заблокировать(); ЗначениеКонстанты = Константы.ДанныеДляОтложенногоОбновления.Получить().Получить(); @@ -1694,7 +1708,7 @@ Процедура РассчитатьПроцентВыгрузки(КоличествоВыгруженных, КоличествоОбъектовКВыгрузке) Экспорт // Сообщение о проценте выгрузки выдаем через каждые 10 объектов. - Если КоличествоВыгруженных = 0 ИЛИ КоличествоВыгруженных / 10 <> Цел(КоличествоВыгруженных / 10) Тогда + Если КоличествоВыгруженных = 0 ИЛИ КоличествоВыгруженных / 100 <> Цел(КоличествоВыгруженных / 100) Тогда Возврат; КонецЕсли; @@ -2332,16 +2346,24 @@ КонецФункции -Процедура ПроверитьВозможностьВыполненияОбменов() Экспорт +Процедура ПроверитьВозможностьВыполненияОбменов(ПриложениеВИнтернете = Ложь) Экспорт - Если Не Пользователи.РолиДоступны("ВыполнениеСинхронизацииДанных") Тогда + Если Не ПравоДоступа("Просмотр", Метаданные.ОбщиеКоманды.Синхронизировать) Тогда - ВызватьИсключение НСтр("ru = 'Недостаточно прав для синхронизации данных.'"); + Если ПриложениеВИнтернете Тогда + ВызватьИсключение НСтр("ru = 'Недостаточно прав для синхронизации данных с приложением в Интернете.'"); + Иначе + ВызватьИсключение НСтр("ru = 'Недостаточно прав для синхронизации данных.'"); + КонецЕсли; ИначеЕсли ОбновлениеИнформационнойБазы.НеобходимоОбновлениеИнформационнойБазы() И НЕ ОбменДаннымиВызовСервера.РежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском("ЗагрузкаРазрешена") Тогда - ВызватьИсключение НСтр("ru = 'Информационная база находится в состоянии обновления.'"); + Если ПриложениеВИнтернете Тогда + ВызватьИсключение НСтр("ru = 'Приложение в Интернете находится в состоянии обновления.'"); + Иначе + ВызватьИсключение НСтр("ru = 'Информационная база находится в состоянии обновления.'"); + КонецЕсли; КонецЕсли; @@ -2879,7 +2901,7 @@ КонецПроцедуры -// См. ОбщегоНазначенияПереопределяемый.ПараметрыРаботыКлиентаПриЗапуске. +// См. ОбщегоНазначенияПереопределяемый.ПриДобавленииПараметровРаботыКлиентаПриЗапуске. Процедура ПриДобавленииПараметровРаботыКлиентаПриЗапуске(Параметры) Экспорт УстановитьПривилегированныйРежим(Истина); @@ -2901,14 +2923,14 @@ УстановитьПривилегированныйРежим(Ложь); Если Не Параметры.Свойство("ОткрытьПомощникСозданияОбменаДаннымиДляНастройкиПодчиненногоУзла") - И Пользователи.РолиДоступны("ВыполнениеСинхронизацииДанных") Тогда + И ПравоДоступа("Просмотр", Метаданные.ОбщиеКоманды.Синхронизировать) Тогда Параметры.Вставить("ПроверитьНеобходимостьОбновленияКонфигурацииПодчиненногоУзла"); КонецЕсли; КонецПроцедуры -// См. ОбщегоНазначенияПереопределяемый.ПараметрыРаботыКлиента. +// См. ОбщегоНазначенияПереопределяемый.ПриДобавленииПараметровРаботыКлиента. Процедура ПриДобавленииПараметровРаботыКлиента(Параметры) Экспорт УстановитьПривилегированныйРежим(Истина); @@ -4211,10 +4233,13 @@ КонецПроцедуры -Процедура ВыполнитьВыгрузкуДляУзлаИнформационнойБазыВСервисПередачиФайлов(Знач ИмяПланаОбмена, - Знач КодУзлаИнформационнойБазы, - Знач ИдентификаторФайла, - ИспользоватьСжатие = Ложь) Экспорт +Процедура ВыполнитьВыгрузкуДляУзлаИнформационнойБазыВСервисПередачиФайлов(ПараметрыПроцедуры, АдресХранилища) Экспорт + + ИмяПланаОбмена = ПараметрыПроцедуры["ИмяПланаОбмена"]; + КодУзлаИнформационнойБазы = ПараметрыПроцедуры["КодУзлаИнформационнойБазы"]; + ИдентификаторФайла = ПараметрыПроцедуры["ИдентификаторФайла"]; + + ИспользоватьСжатие = ПараметрыПроцедуры.Свойство("ИспользоватьСжатие") И ПараметрыПроцедуры["ИспользоватьСжатие"]; УстановитьПривилегированныйРежим(Истина); @@ -4293,9 +4318,11 @@ КонецПроцедуры -Процедура ВыполнитьЗагрузкуДляУзлаИнформационнойБазыИзСервисаПередачиФайлов(Знач ИмяПланаОбмена, - Знач КодУзлаИнформационнойБазы, - Знач ИдентификаторФайла) Экспорт +Процедура ВыполнитьЗагрузкуДляУзлаИнформационнойБазыИзСервисаПередачиФайлов(ПараметрыПроцедуры, АдресХранилища) Экспорт + + ИмяПланаОбмена = ПараметрыПроцедуры["ИмяПланаОбмена"]; + КодУзлаИнформационнойБазы = ПараметрыПроцедуры["КодУзлаИнформационнойБазы"]; + ИдентификаторФайла = ПараметрыПроцедуры["ИдентификаторФайла"]; УстановитьПривилегированныйРежим(Истина); @@ -4693,7 +4720,9 @@ Отказ = Истина; Возврат; КонецЕсли; + ПсевдонимУзла = ПсевдонимПредопределенногоУзла(УзелИнформационнойБазы); + Если ЗначениеЗаполнено(ПсевдонимУзла) Тогда // Следует проверить есть ли в корреспонденте такой узел (возможно он уже перекодировался). УзелПсевдонимСуществует = Истина; @@ -4711,9 +4740,14 @@ СтруктураНастроекОбмена.ТекущийУзелПланаОбменаКод = ПсевдонимУзла; КонецЕсли; КонецЕсли; + Если СтруктураНастроекОбмена.ИспользоватьПередачуБольшогоОбъемаДанных Тогда - ФайлСообщенияОбмена = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(КаталогВременногоХранилищаФайлов(), УникальноеИмяФайлаСообщенияОбмена()); + ВременныйКаталог = ПолучитьИмяВременногоФайла(); + СоздатьКаталог(ВременныйКаталог); + + ФайлСообщенияОбмена = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла( + ВременныйКаталог, УникальноеИмяФайлаСообщенияОбмена()); Попытка ЗаписатьСообщениеСИзменениямиДляУзла(СтруктураНастроекОбмена, ФайлСообщенияОбмена); @@ -4722,8 +4756,9 @@ СтруктураНастроекОбмена.РезультатВыполненияОбмена = Перечисления.РезультатыВыполненияОбмена.Ошибка; Отказ = Истина; КонецПопытки; + // Отправка сообщения обмена только в случае успешной выгрузки данных. - Если РезультатВыполненияОбменаВыполнено(СтруктураНастроекОбмена.РезультатВыполненияОбмена) И НЕ Отказ Тогда + Если РезультатВыполненияОбменаВыполнено(СтруктураНастроекОбмена.РезультатВыполненияОбмена) И Не Отказ Тогда Попытка @@ -4731,7 +4766,7 @@ ФайлСообщенияОбмена, УзелИнформационнойБазы,, ПараметрыОбмена.ПараметрыАутентификации)); Попытка - УдалитьФайлы(ФайлСообщенияОбмена); + УдалитьФайлы(ВременныйКаталог); Исключение ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииОбменДанными(), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); @@ -4759,7 +4794,7 @@ КонецЕсли; Попытка - УдалитьФайлы(ФайлСообщенияОбмена); + УдалитьФайлы(ВременныйКаталог); Исключение ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииОбменДанными(), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); @@ -6034,6 +6069,18 @@ КонецФункции +Функция СобытиеЖурналаРегистрацииВыгрузкаДанныхВСервисПередачиФайлов() Экспорт + + Возврат НСтр("ru = 'Обмен данными.Сервис передачи файлов.Выгрузка данных'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + +КонецФункции + +Функция СобытиеЖурналаРегистрацииЗагрузкаДанныхИзСервисаПередачиФайлов() Экспорт + + Возврат НСтр("ru = 'Обмен данными.Сервис передачи файлов.Загрузка данных'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + +КонецФункции + #КонецОбласти #Область ТранспортСообщенийОбмена @@ -6171,107 +6218,92 @@ // Возвращаемое значение функции. ИмяФайлаРезультата = ""; - Прокси = WSПроксиДляУзлаИнформационнойБазы(УзелИнформационнойБазы,, ПараметрыАутентификации); + Прокси = WSПроксиДляУзлаИнформационнойБазы(УзелИнформационнойБазы, , ПараметрыАутентификации); - ОбменВыполняетсяВОднойСети = ОбменДаннымиПовтИсп.ОбменВыполняетсяВОднойЛокальнойСети(УзелИнформационнойБазы, ПараметрыАутентификации); + ИдентификаторСессии = Неопределено; + КоличествоЧастей = Неопределено; - Если ОбменВыполняетсяВОднойСети Тогда - - ИмяФайлаИзХранилища = Прокси.GetFileFromStorage(ИдентификаторФайла); - - ИмяФайлаРезультата = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(КаталогВременногоХранилищаФайлов(), ИмяФайлаИзХранилища); - - Иначе - - ИдентификаторСессии = Неопределено; - КоличествоЧастей = Неопределено; - - Прокси.PrepareGetFile(ИдентификаторФайла, РазмерЧасти, ИдентификаторСессии, КоличествоЧастей); - - ИменаФайлов = Новый Массив; - - КаталогСборки = ПолучитьИмяВременногоФайла(); - СоздатьКаталог(КаталогСборки); - - ШаблонИмениФайла = "data.zip.[n]"; - - // Протоколирование событий обмена. - СтруктураНастроекОбмена = Новый Структура("КлючСообщенияЖурналаРегистрации"); - СтруктураНастроекОбмена.КлючСообщенияЖурналаРегистрации = КлючСообщенияЖурналаРегистрации(УзелИнформационнойБазы, Перечисления.ДействияПриОбмене.ЗагрузкаДанных); - - Комментарий = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Начало получения сообщения обмена из Интернета (количество частей файла %1).'"), - Формат(КоличествоЧастей, "ЧН=0; ЧГ=0")); - ЗаписьЖурналаРегистрацииОбменаДанными(Комментарий, СтруктураНастроекОбмена); - // - - Для НомерЧасти = 1 По КоличествоЧастей Цикл - - ДанныеЧасти = Неопределено; - Попытка - Прокси.GetFilePart(ИдентификаторСессии, НомерЧасти, ДанныеЧасти); - Исключение - Прокси.ReleaseFile(ИдентификаторСессии); - ВызватьИсключение; - КонецПопытки; - - ИмяФайла = СтрЗаменить(ШаблонИмениФайла, "[n]", Формат(НомерЧасти, "ЧГ=0")); - ИмяФайлаЧасти = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(КаталогСборки, ИмяФайла); - - ДанныеЧасти.Записать(ИмяФайлаЧасти); - ИменаФайлов.Добавить(ИмяФайлаЧасти); - КонецЦикла; + Прокси.PrepareGetFile(ИдентификаторФайла, РазмерЧасти, ИдентификаторСессии, КоличествоЧастей); + + ИменаФайлов = Новый Массив; + + КаталогСборки = ПолучитьИмяВременногоФайла(); + СоздатьКаталог(КаталогСборки); + + ШаблонИмениФайла = "data.zip.[n]"; + + // Протоколирование событий обмена. + СтруктураНастроекОбмена = Новый Структура("КлючСообщенияЖурналаРегистрации"); + СтруктураНастроекОбмена.КлючСообщенияЖурналаРегистрации = КлючСообщенияЖурналаРегистрации(УзелИнформационнойБазы, Перечисления.ДействияПриОбмене.ЗагрузкаДанных); + + Комментарий = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Начало получения сообщения обмена из Интернета (количество частей файла %1).'"), + Формат(КоличествоЧастей, "ЧН=0; ЧГ=0")); + ЗаписьЖурналаРегистрацииОбменаДанными(Комментарий, СтруктураНастроекОбмена); + + Для НомерЧасти = 1 По КоличествоЧастей Цикл ДанныеЧасти = Неопределено; + Попытка + Прокси.GetFilePart(ИдентификаторСессии, НомерЧасти, ДанныеЧасти); + Исключение + Прокси.ReleaseFile(ИдентификаторСессии); + ВызватьИсключение; + КонецПопытки; - Прокси.ReleaseFile(ИдентификаторСессии); - - ИмяАрхива = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(КаталогСборки, "data.zip"); - - ОбъединитьФайлы(ИменаФайлов, ИмяАрхива); - - Разархиватор = Новый ЧтениеZipФайла(ИмяАрхива); - Если Разархиватор.Элементы.Количество() = 0 Тогда - Попытка - УдалитьФайлы(КаталогСборки); - Исключение - ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииУдалениеВременногоФайла(), - УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - КонецПопытки; - ВызватьИсключение(НСтр("ru = 'Файл архива не содержит данных.'")); - КонецЕсли; - - // Протоколирование событий обмена. - ФайлАрхива = Новый Файл(ИмяАрхива); - - Комментарий = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Окончание получения сообщения обмена из Интернета (размер сжатого сообщения обмена %1 Мб).'"), - Формат(Окр(ФайлАрхива.Размер() / 1024 / 1024, 3), "ЧН=0; ЧГ=0")); - ЗаписьЖурналаРегистрацииОбменаДанными(Комментарий, СтруктураНастроекОбмена); - // - - ИмяФайла = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(КаталогСборки, Разархиватор.Элементы[0].Имя); - - Разархиватор.Извлечь(Разархиватор.Элементы[0], КаталогСборки); - Разархиватор.Закрыть(); - - Файл = Новый Файл(ИмяФайла); - - ВременныйКаталог = ПолучитьИмяВременногоФайла(); - СоздатьКаталог(ВременныйКаталог); - - ИмяФайлаРезультата = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(ВременныйКаталог, Файл.Имя); - - ПереместитьФайл(ИмяФайла, ИмяФайлаРезультата); + ИмяФайла = СтрЗаменить(ШаблонИмениФайла, "[n]", Формат(НомерЧасти, "ЧГ=0")); + ИмяФайлаЧасти = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(КаталогСборки, ИмяФайла); + ДанныеЧасти.Записать(ИмяФайлаЧасти); + ИменаФайлов.Добавить(ИмяФайлаЧасти); + КонецЦикла; + ДанныеЧасти = Неопределено; + + Прокси.ReleaseFile(ИдентификаторСессии); + + ИмяАрхива = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(КаталогСборки, "data.zip"); + + ОбъединитьФайлы(ИменаФайлов, ИмяАрхива); + + Разархиватор = Новый ЧтениеZipФайла(ИмяАрхива); + Если Разархиватор.Элементы.Количество() = 0 Тогда Попытка УдалитьФайлы(КаталогСборки); Исключение ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииУдалениеВременногоФайла(), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; - + ВызватьИсключение(НСтр("ru = 'Файл архива не содержит данных.'")); КонецЕсли; + // Протоколирование событий обмена. + ФайлАрхива = Новый Файл(ИмяАрхива); + + Комментарий = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Окончание получения сообщения обмена из Интернета (размер сжатого сообщения обмена %1 Мб).'"), + Формат(Окр(ФайлАрхива.Размер() / 1024 / 1024, 3), "ЧН=0; ЧГ=0")); + ЗаписьЖурналаРегистрацииОбменаДанными(Комментарий, СтруктураНастроекОбмена); + + ИмяФайла = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(КаталогСборки, Разархиватор.Элементы[0].Имя); + + Разархиватор.Извлечь(Разархиватор.Элементы[0], КаталогСборки); + Разархиватор.Закрыть(); + + Файл = Новый Файл(ИмяФайла); + + ВременныйКаталог = ПолучитьИмяВременногоФайла(); + СоздатьКаталог(ВременныйКаталог); + + ИмяФайлаРезультата = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(ВременныйКаталог, Файл.Имя); + + ПереместитьФайл(ИмяФайла, ИмяФайлаРезультата); + + Попытка + УдалитьФайлы(КаталогСборки); + Исключение + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииУдалениеВременногоФайла(), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + Возврат ИмяФайлаРезультата; КонецФункции @@ -6292,55 +6324,41 @@ Прокси = WSПроксиДляУзлаИнформационнойБазы(УзелИнформационнойБазы,, ПараметрыАутентификации); - ОбменВыполняетсяВОднойСети = ОбменДаннымиПовтИсп.ОбменВыполняетсяВОднойЛокальнойСети(УзелИнформационнойБазы, ПараметрыАутентификации); + КаталогФайлов = ПолучитьИмяВременногоФайла(); + СоздатьКаталог(КаталогФайлов); - Если ОбменВыполняетсяВОднойСети Тогда - - ИмяФайлаВХранилище = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(КаталогВременногоХранилищаФайлов(), УникальноеИмяФайлаСообщенияОбмена()); - - ПереместитьФайл(ИмяФайла, ИмяФайлаВХранилище); - - Прокси.PutFileIntoStorage(ИмяФайлаВХранилище, ИдентификаторФайла); - + // Архивирование файла. + ИмяНеразделенногоФайла = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(КаталогФайлов, "data.zip"); + Архиватор = Новый ЗаписьZipФайла(ИмяНеразделенногоФайла,,,, УровеньСжатияZIP.Максимальный); + Архиватор.Добавить(ИмяФайла); + Архиватор.Записать(); + + // Разделение файла на части. + ИдентификаторСессии = Новый УникальныйИдентификатор; + + КоличествоЧастей = 1; + Если ЗначениеЗаполнено(РазмерЧасти) Тогда + ИменаФайлов = РазделитьФайл(ИмяНеразделенногоФайла, РазмерЧасти * 1024); + КоличествоЧастей = ИменаФайлов.Количество(); + Для НомерЧасти = 1 По КоличествоЧастей Цикл + ИмяФайлаЧасти = ИменаФайлов[НомерЧасти - 1]; + ДанныеФайла = Новый ДвоичныеДанные(ИмяФайлаЧасти); + Прокси.PutFilePart(ИдентификаторСессии, НомерЧасти, ДанныеФайла); + КонецЦикла; Иначе - - КаталогФайлов = ПолучитьИмяВременногоФайла(); - СоздатьКаталог(КаталогФайлов); - - // Архивирование файла - ИмяНеразделенногоФайла = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(КаталогФайлов, "data.zip"); - Архиватор = Новый ЗаписьZipФайла(ИмяНеразделенногоФайла,,,, УровеньСжатияZIP.Максимальный); - Архиватор.Добавить(ИмяФайла); - Архиватор.Записать(); - - // Разделение файла на части - ИдентификаторСессии = Новый УникальныйИдентификатор; - - КоличествоЧастей = 1; - Если ЗначениеЗаполнено(РазмерЧасти) Тогда - ИменаФайлов = РазделитьФайл(ИмяНеразделенногоФайла, РазмерЧасти * 1024); - КоличествоЧастей = ИменаФайлов.Количество(); - Для НомерЧасти = 1 По КоличествоЧастей Цикл - ИмяФайлаЧасти = ИменаФайлов[НомерЧасти - 1]; - ДанныеФайла = Новый ДвоичныеДанные(ИмяФайлаЧасти); - Прокси.PutFilePart(ИдентификаторСессии, НомерЧасти, ДанныеФайла); - КонецЦикла; - Иначе - ДанныеФайла = Новый ДвоичныеДанные(ИмяНеразделенногоФайла); - Прокси.PutFilePart(ИдентификаторСессии, 1, ДанныеФайла); - КонецЕсли; - - Попытка - УдалитьФайлы(КаталогФайлов); - Исключение - ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииУдалениеВременногоФайла(), - УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - КонецПопытки; - - Прокси.SaveFileFromParts(ИдентификаторСессии, КоличествоЧастей, ИдентификаторФайла); - + ДанныеФайла = Новый ДвоичныеДанные(ИмяНеразделенногоФайла); + Прокси.PutFilePart(ИдентификаторСессии, 1, ДанныеФайла); КонецЕсли; + Попытка + УдалитьФайлы(КаталогФайлов); + Исключение + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииУдалениеВременногоФайла(), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + Прокси.SaveFileFromParts(ИдентификаторСессии, КоличествоЧастей, ИдентификаторФайла); + Возврат ИдентификаторФайла; КонецФункции @@ -6406,44 +6424,6 @@ Возврат ИдентификаторФайла; КонецФункции -// Определяет возможность передачи файлов между двумя базами через локальную сеть. -// -// Параметры: -// УзелИнформационнойБазы - ПланОбменаСсылка - узел плана обмена, для которого выполняется получение сообщения обмена. -// ПараметрыАутентификации - Структура. Содержит параметры аутентификации на веб-сервисе (Пользователь, Пароль). -// -Функция ОбменВыполняетсяВОднойЛокальнойСети(Знач УзелИнформационнойБазы, Знач ПараметрыАутентификации = Неопределено) Экспорт - - Прокси = WSПроксиДляУзлаИнформационнойБазы(УзелИнформационнойБазы,, ПараметрыАутентификации); - - ИмяВременногоФайла = СтрЗаменить("test{GUID}.tmp", "GUID", Строка(Новый УникальныйИдентификатор)); - - ПолноеИмяВременногоФайла = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(КаталогВременногоХранилищаФайлов(), ИмяВременногоФайла); - ЗаписьТекста = Новый ЗаписьТекста(ПолноеИмяВременногоФайла); - ЗаписьТекста.Закрыть(); - - Попытка - Результат = Прокси.FileExists(ИмяВременногоФайла); - Исключение - Попытка - УдалитьФайлы(ПолноеИмяВременногоФайла); - Исключение - ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииУдалениеВременногоФайла(), - УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - КонецПопытки; - ВызватьИсключение; - КонецПопытки; - - Попытка - УдалитьФайлы(ПолноеИмяВременногоФайла); - Исключение - ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииУдалениеВременногоФайла(), - УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - КонецПопытки; - - Возврат Результат; -КонецФункции - // Получение имени файла по его идентификатору из хранилища. // Если файла с указанным идентификатором нет, то вызывается исключение. // Если файл найден, то возвращается его имя, при этом удаляется информация об этом файле из хранилища. @@ -8621,8 +8601,8 @@ ИмяПланаОбмена = УзелИнформационнойБазы.Метаданные().Имя; КодПредопределенногоУзла = КодПредопределенногоУзлаПланаОбмена(ИмяПланаОбмена); Если СокрЛП(КодПредопределенногоУзла) = РезультатАнализаДанныхКЗагрузке.To Тогда - УдалитьНаборЗаписейВРегистреСведений(Новый Структура("УзелИнформационнойБазы", УзелИнформационнойБазы), - "ПсевдонимыПредопределенныхУзлов"); + УдалитьНаборЗаписейВРегистреСведений(Новый Структура("Корреспондент", УзелИнформационнойБазы), + "ПсевдонимыПредопределенныхУзлов"); КонецЕсли; КонецЕсли; КонецЕсли; @@ -11695,12 +11675,24 @@ КонецПроцедуры +Процедура ЗарегистрироватьТолькоСправочникиДляНачальнойВыгрузкиВФоне(ПараметрыПроцедуры, АдресХранилища) Экспорт + + ЗарегистрироватьТолькоСправочникиДляНачальнойВыгрузки(ПараметрыПроцедуры["УзелИнформационнойБазы"]); + +КонецПроцедуры + Процедура ЗарегистрироватьВсеДанныеКромеСправочниковДляНачальнойВыгрузки(Знач УзелИнформационнойБазы) Экспорт ЗарегистрироватьДанныеДляНачальнойВыгрузки(УзелИнформационнойБазы, ВсеДанныеПланаОбменаКромеСправочников(УзелИнформационнойБазы)); КонецПроцедуры +Процедура ЗарегистрироватьВсеДанныеКромеСправочниковДляНачальнойВыгрузкиВФоне(ПараметрыПроцедуры, АдресХранилища) Экспорт + + ЗарегистрироватьВсеДанныеКромеСправочниковДляНачальнойВыгрузки(ПараметрыПроцедуры["УзелИнформационнойБазы"]); + +КонецПроцедуры + Процедура ЗарегистрироватьДанныеДляНачальнойВыгрузки(УзелИнформационнойБазы, Данные = Неопределено) Экспорт УстановитьПривилегированныйРежим(Истина); diff --git a/SSL/src/CommonModules/ОбменДаннымиСлужебный/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиСлужебный/Module.bsl index dd11c47cf..c0b821519 100644 --- a/SSL/src/CommonModules/ОбменДаннымиСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиСлужебный/Module.bsl @@ -154,7 +154,10 @@ КонецФункции -Процедура ПодготовитьДанныеДляВыгрузкиИзИнформационнойБазы(ПараметрыWEBСервиса, СообщениеОбОшибке) Экспорт +Процедура ПодготовитьДанныеДляВыгрузкиИзИнформационнойБазы(ПараметрыПроцедуры, АдресХранилища) Экспорт + + ПараметрыWEBСервиса = ПараметрыПроцедуры["ПараметрыWEBСервиса"]; + СообщениеОбОшибке = ПараметрыПроцедуры["СообщениеОбОшибке"]; УстановитьПривилегированныйРежим(Истина); @@ -234,7 +237,10 @@ КонецПроцедуры -Процедура ЗагрузитьДанныеXDTOВИнформационнуюБазу(ПараметрыWEBСервиса, СообщениеОбОшибке) Экспорт +Процедура ЗагрузитьДанныеXDTOВИнформационнуюБазу(ПараметрыПроцедуры, АдресХранилища) Экспорт + + ПараметрыWEBСервиса = ПараметрыПроцедуры["ПараметрыWEBСервиса"]; + СообщениеОбОшибке = ПараметрыПроцедуры["СообщениеОбОшибке"]; УстановитьПривилегированныйРежим(Истина); @@ -291,7 +297,7 @@ Процедура ПроверитьВозможностьВыполненияОбменов() Экспорт - Если Не Пользователи.РолиДоступны("ВыполнениеСинхронизацииДанных") Тогда + Если Не ПравоДоступа("Просмотр", Метаданные.ОбщиеКоманды.Синхронизировать) Тогда ВызватьИсключение НСтр("ru = 'Недостаточно прав для синхронизации данных.'"); diff --git a/SSL/src/CommonModules/ОбменДаннымиСобытия/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиСобытия/Module.bsl index 0cebabba0..02a1eef01 100644 --- a/SSL/src/CommonModules/ОбменДаннымиСобытия/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиСобытия/Module.bsl @@ -154,7 +154,7 @@ // Функция СократитьМассив(Массив, МассивВычитания) Экспорт - Возврат ОбщегоНазначенияКлиентСервер.СократитьМассив(Массив, МассивВычитания); + Возврат ОбщегоНазначенияКлиентСервер.РазностьМассивов(Массив, МассивВычитания); КонецФункции @@ -984,15 +984,15 @@ КонецЕсли; Исключение - ЗаписьЖурналаРегистрации(НСтр("ru = 'Обмен данными.Правила регистрации объектов'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось зарегистрировать изменения на узлах плана обмена %1 по причине: %2'"), + ИмяПланаОбмена, + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - ТекстСообщенияДляПользователя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка в правилах регистрации объекта: %1. Подробнее см. в журнале регистрации.'"), - ИмяПланаОбмена); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщенияДляПользователя); - - Отказ = Истина; + ЗаписьЖурналаРегистрации(НСтр("ru = 'Обмен данными.Правила регистрации объектов'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, Метаданные.ПланыОбмена[ИмяПланаОбмена], , ОписаниеОшибки); + + ВызватьИсключение ОписаниеОшибки; КонецПопытки; КонецПроцедуры diff --git a/SSL/src/CommonModules/ОбменСообщениямиВнутренний/Module.bsl b/SSL/src/CommonModules/ОбменСообщениямиВнутренний/Module.bsl index 533cab0d4..0f9493c46 100644 --- a/SSL/src/CommonModules/ОбменСообщениямиВнутренний/Module.bsl +++ b/SSL/src/CommonModules/ОбменСообщениямиВнутренний/Module.bsl @@ -260,14 +260,14 @@ Если Не ОбщегоНазначения.СсылкаСуществует(Ссылка) Тогда Продолжить; КонецЕсли; - Если РаботаВМоделиСервисаПовтИсп.ЭтоРазделеннаяКонфигурация() И РаботаВМоделиСервиса.ЭтоРазделенныйОбъектМетаданных(Ссылка.Метаданные(), РаботаВМоделиСервисаПовтИсп.РазделительВспомогательныхДанных()) Тогда - ОбластьДанных = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Данные.Ссылка, РаботаВМоделиСервисаПовтИсп.РазделительВспомогательныхДанных()); + Если РаботаВМоделиСервисаПовтИсп.ЭтоРазделеннаяКонфигурация() И РаботаВМоделиСервиса.ЭтоРазделенныйОбъектМетаданных(Ссылка.Метаданные(), РаботаВМоделиСервиса.РазделительВспомогательныхДанных()) Тогда + ОбластьДанных = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Данные.Ссылка, РаботаВМоделиСервиса.РазделительВспомогательныхДанных()); КонецЕсли; Иначе - Если РаботаВМоделиСервисаПовтИсп.ЭтоРазделеннаяКонфигурация() И РаботаВМоделиСервиса.ЭтоРазделенныйОбъектМетаданных(Данные.Метаданные(), РаботаВМоделиСервисаПовтИсп.РазделительВспомогательныхДанных()) Тогда - ОбластьДанных = Данные[РаботаВМоделиСервисаПовтИсп.РазделительВспомогательныхДанных()]; + Если РаботаВМоделиСервисаПовтИсп.ЭтоРазделеннаяКонфигурация() И РаботаВМоделиСервиса.ЭтоРазделенныйОбъектМетаданных(Данные.Метаданные(), РаботаВМоделиСервиса.РазделительВспомогательныхДанных()) Тогда + ОбластьДанных = Данные[РаботаВМоделиСервиса.РазделительВспомогательныхДанных()]; КонецЕсли; КонецЕсли; @@ -426,7 +426,7 @@ УстановитьПривилегированныйРежим(Истина); - Если РаботаВМоделиСервисаПовтИсп.РазделениеВключено() И РаботаВМоделиСервисаПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + Если РаботаВМоделиСервиса.РазделениеВключено() И РаботаВМоделиСервиса.ДоступноИспользованиеРазделенныхДанных() Тогда ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииЭтойПодсистемы(), УровеньЖурналаРегистрации.Информация,,, @@ -456,7 +456,7 @@ ПолноеИмяСправочника = СправочникСообщений.ПустаяСсылка().Метаданные().ПолноеИмя(); ЭтоНеразделенныйСправочник = Не РаботаВМоделиСервисаПовтИсп.ЭтоРазделеннаяКонфигурация() - ИЛИ Не РаботаВМоделиСервиса.ЭтоРазделенныйОбъектМетаданных(ПолноеИмяСправочника, РаботаВМоделиСервисаПовтИсп.РазделительВспомогательныхДанных()); + ИЛИ Не РаботаВМоделиСервиса.ЭтоРазделенныйОбъектМетаданных(ПолноеИмяСправочника, РаботаВМоделиСервиса.РазделительВспомогательныхДанных()); Если ЭтоНеразделенныйСправочник И Не ОбрабатыватьСообщенияВНеразделенныхДанных Тогда Продолжить; @@ -639,7 +639,7 @@ КонецЕсли; - Если ОбрабатыватьСообщенияВНеразделенныхДанных И РаботаВМоделиСервисаПовтИсп.РазделениеВключено() И РаботаВМоделиСервисаПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + Если ОбрабатыватьСообщенияВНеразделенныхДанных И РаботаВМоделиСервиса.РазделениеВключено() И РаботаВМоделиСервиса.ДоступноИспользованиеРазделенныхДанных() Тогда ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'После обработки сообщения канала %1 не было выключено разделение сеанса.'"), @@ -668,6 +668,13 @@ КонецПроцедуры +// Только для внутреннего использования. +Процедура ОбработатьОчередьСообщенийСистемыВФоне(ПараметрыПроцедуры, АдресХранилища) Экспорт + + ОбработатьОчередьСообщенийСистемы(ПараметрыПроцедуры["ЗагруженныеСообщения"]); + +КонецПроцедуры + // Только для внутреннего использования. Процедура УстановитьВедущуюКонечнуюТочкуНаСторонеОтправителя(Отказ, НастройкиПодключенияОтправителя, КонечнаяТочка) Экспорт @@ -989,9 +996,9 @@ КонецЕсли; ТребуетсяВосстановлениеРазделения = Ложь; - Если РаботаВМоделиСервисаПовтИсп.ЭтоРазделеннаяКонфигурация() И РаботаВМоделиСервиса.ЭтоРазделенныйОбъектМетаданных(Данные.Метаданные(), РаботаВМоделиСервисаПовтИсп.РазделительВспомогательныхДанных()) Тогда + Если РаботаВМоделиСервисаПовтИсп.ЭтоРазделеннаяКонфигурация() И РаботаВМоделиСервиса.ЭтоРазделенныйОбъектМетаданных(Данные.Метаданные(), РаботаВМоделиСервиса.РазделительВспомогательныхДанных()) Тогда - ОбластьДанных = Данные[РаботаВМоделиСервисаПовтИсп.РазделительВспомогательныхДанных()]; + ОбластьДанных = Данные[РаботаВМоделиСервиса.РазделительВспомогательныхДанных()]; Если МодульРаботаВМоделиСервиса.ОбластьДанныхЗаблокирована(ОбластьДанных) Тогда // Сообщение для заблокированной области не может быть принято. @@ -1125,7 +1132,7 @@ // Только для внутреннего использования. Функция НаименованиеЭтогоУзлаПоУмолчанию() Экспорт - Возврат ?(РаботаВМоделиСервисаПовтИсп.РазделениеВключено(), Метаданные.Синоним, ОбменДаннымиПовтИсп.ИмяЭтойИнформационнойБазы()); + Возврат ?(РаботаВМоделиСервиса.РазделениеВключено(), Метаданные.Синоним, ОбменДаннымиПовтИсп.ИмяЭтойИнформационнойБазы()); КонецФункции diff --git a/SSL/src/CommonModules/ОбменСообщениямиПовтИсп/Module.bsl b/SSL/src/CommonModules/ОбменСообщениямиПовтИсп/Module.bsl index ca4bb316e..be078351d 100644 --- a/SSL/src/CommonModules/ОбменСообщениямиПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ОбменСообщениямиПовтИсп/Module.bsl @@ -34,7 +34,7 @@ МассивСправочников.Добавить(Справочники.СообщенияСистемы); - Возврат МассивСправочников; + Возврат Новый ФиксированныйМассив(МассивСправочников); КонецФункции diff --git a/SSL/src/CommonModules/ОбновлениеИнформационнойБазы/Module.bsl b/SSL/src/CommonModules/ОбновлениеИнформационнойБазы/Module.bsl index f4646da88..d789b7cb0 100644 --- a/SSL/src/CommonModules/ОбновлениеИнформационнойБазы/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеИнформационнойБазы/Module.bsl @@ -184,7 +184,7 @@ // Процедура ПроверитьОбъектОбработан(Данные, Форма = Неопределено, ИмяОтложенногоОбработчика = "", ИмяПроцедурыПрограммногоИнтерфейса = "") Экспорт - Если Не ЗначениеЗаполнено(ПараметрыСеанса.ПараметрыОбработчикаОбновления.РежимВыполнения) Тогда + Если Не ЭтоВызовИзОбработчикаОбновления() Тогда Результат = ОбъектОбработан(Данные); Если Результат.Обработан Тогда Возврат; @@ -199,19 +199,21 @@ Возврат; КонецЕсли; + Если Не ЗначениеЗаполнено(ИмяОтложенногоОбработчика) Тогда + Возврат; + КонецЕсли; + Если ИмяОтложенногоОбработчика = ПараметрыСеанса.ПараметрыОбработчикаОбновления.ИмяОбработчика Тогда Возврат; КонецЕсли; ОчередьТребуемогоОбработчика = ОчередьОтложенногоОбработчикаОбновления(ИмяОтложенногоОбработчика); - ОчередьТекущегоОбработчика = ПараметрыСеанса.ПараметрыОбработчикаОбновления.ОчередьОтложеннойОбработки; - Если ОчередьТекущегоОбработчика > ОчередьТребуемогоОбработчика Тогда Возврат; КонецЕсли; - ТекстИсключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Недопустимо вызывать %1 |из обработчика обновления |%2 @@ -228,8 +230,7 @@ // // Параметры: // Данные - ЛюбаяСсылка, НаборЗаписей, Объект, ДанныеФормыСтруктура, Строка - ссылка на объект, сам объект, -// набор записей или полное имя объекта метаданных (для отчетов и обработок), -// блокировку которого необходимо проверить. +// набор записей или полное имя объекта метаданных, блокировку которого необходимо проверить. // // Возвращаемое значение: // Структура - с полями: @@ -237,6 +238,10 @@ // * ТекстИсключения - Строка - текст исключения, если объект еще не обработан, // содержит список незавершенных обработчиков. // +// Пример: +// Проверить, что обновлены все объекты требуемого типа: +// ВсеЗаказыОбработаны = ОбновлениеИнформационнойБазы.ОбъектОбработан("Документ.ЗаказПокупателя"); +// Функция ОбъектОбработан(Данные) Экспорт Результат = Новый Структура; @@ -674,12 +679,28 @@ Иначе Если ТипЗнч(Данные) = Тип("Массив") Тогда - - Для Каждого ЭлементМассива Из Данные Цикл - Набор.Отбор.Регистратор.Установить(ЭлементМассива); - ЗарегистрироватьИзменения(ОсновныеПараметры, Узел, Набор, "ПодчиненныйРегистр", ДополнительныеПараметры.ПолноеИмяРегистра); - КонецЦикла; - + Итератор = 0; + Попытка + Для Каждого ЭлементМассива Из Данные Цикл + Если Итератор = 0 Тогда + НачатьТранзакцию(); + КонецЕсли; + Набор.Отбор.Регистратор.Установить(ЭлементМассива); + ЗарегистрироватьИзменения(ОсновныеПараметры, Узел, Набор, "ПодчиненныйРегистр", ДополнительныеПараметры.ПолноеИмяРегистра); + Итератор = Итератор + 1; + Если Итератор = 1000 Тогда + Итератор = 0; + ЗафиксироватьТранзакцию(); + КонецЕсли; + КонецЦикла; + + Если Итератор <> 0 Тогда + ЗафиксироватьТранзакцию(); + КонецЕсли; + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки Иначе Набор.Отбор.Регистратор.Установить(Данные); @@ -706,9 +727,27 @@ КонецЦикла; Иначе Если ТипЗнч(Данные) = Тип("Массив") Тогда - Для Каждого ЭлементМассива Из Данные Цикл - ЗарегистрироватьИзменения(ОсновныеПараметры, Узел, ЭлементМассива, "Ссылка"); - КонецЦикла; + Итератор = 0; + Попытка + Для Каждого ЭлементМассива Из Данные Цикл + Если Итератор = 0 Тогда + НачатьТранзакцию(); + КонецЕсли; + ЗарегистрироватьИзменения(ОсновныеПараметры, Узел, ЭлементМассива, "Ссылка"); + Итератор = Итератор + 1; + Если Итератор = 1000 Тогда + Итератор = 0; + ЗафиксироватьТранзакцию(); + КонецЕсли; + КонецЦикла; + + Если Итератор <> 0 Тогда + ЗафиксироватьТранзакцию(); + КонецЕсли; + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки ИначеЕсли ОбщегоНазначения.ЭтоСсылка(ТипЗнч(Данные)) Тогда ЗарегистрироватьИзменения(ОсновныеПараметры, Узел, Данные, "Ссылка"); Иначе @@ -2427,6 +2466,29 @@ КонецФункции +// Возвращает Истина, если вызов функции выполняется из обработчика обновления. +// Для любого вида обработчика обновления - монопольного, оперативного и отложенного. +// +// Параметры: +// РежимВыполненияОбработчика - Строка - Отложенно, Оперативно, Монопольно или комбинация данных +// вариантов через запятую. Если указано, то проверяется только +// вызов из обработчиков обновления с данным режимом выполнения. +// +Функция ЭтоВызовИзОбработчикаОбновления(РежимВыполненияОбработчика = "") Экспорт + + РежимВыполнения = ПараметрыСеанса.ПараметрыОбработчикаОбновления.РежимВыполнения; + Если Не ЗначениеЗаполнено(РежимВыполнения) Тогда + Возврат Ложь; + КонецЕсли; + + Если Не ЗначениеЗаполнено(РежимВыполненияОбработчика) Тогда + Возврат Истина; + КонецЕсли; + + Возврат (СтрНайти(РежимВыполненияОбработчика, РежимВыполнения) > 0); + +КонецФункции + // Возвращает пустую таблицу обработчиков обновления и первоначального заполнения ИБ. // // Возвращаемое значение: @@ -2644,50 +2706,6 @@ КонецФункции -// Удаляет отложенный обработчик из очереди выполняемых обработчиков на новую версию. -// Следует использовать, например, при переводе отложенного обработчика -// на монопольный (оперативный) режим выполнения. -// Для этого необходимо добавить новый разделенный обработчик обновления с режимом выполнения -// "Оперативно" и признаком "ОбщиеДанные = Ложь", после чего разместить в нем вызов данного метода. -// -// Параметры: -// ИмяОбработчика - Строка - полное имя процедуры отложенного обработчика. -// -Процедура УдалитьОтложенныйОбработчикИзОчереди(ИмяОбработчика) Экспорт - - СведенияОбОбновлении = ОбновлениеИнформационнойБазыСлужебный.СведенияОбОбновленииИнформационнойБазы(); - - ОтобранныйОбработчик = СведенияОбОбновлении.ДеревоОбработчиков.Строки.НайтиСтроки(Новый Структура("ИмяОбработчика", ИмяОбработчика), Истина); - Если ОтобранныйОбработчик <> Неопределено И ОтобранныйОбработчик.Количество() > 0 Тогда - - Для Каждого СтрокаОбработчик Из ОтобранныйОбработчик Цикл - СтрокаОбработчик.Родитель.Строки.Удалить(СтрокаОбработчик); - КонецЦикла; - - КонецЕсли; - - Для Каждого ШагОбновления Из СведенияОбОбновлении.ПланОтложенногоОбновления Цикл - ОбработчикиШага = ШагОбновления.Обработчики; - Индекс = 0; - ОбработчикНайден = Ложь; - Для Каждого ОписаниеОбработчика Из ОбработчикиШага Цикл - Если ОписаниеОбработчика.ИмяОбработчика = ИмяОбработчика Тогда - ОбработчикНайден = Истина; - Прервать; - КонецЕсли; - Индекс = Индекс + 1; - КонецЦикла; - - Если ОбработчикНайден Тогда - ОбработчикиШага.Удалить(Индекс); - Прервать; - КонецЕсли; - КонецЦикла; - - ОбновлениеИнформационнойБазыСлужебный.ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновлении); - -КонецПроцедуры - // Возвращает таблицу с версиями подсистем конфигурации. // Для пакетной выгрузки-загрузки сведений о версиях подсистем. // @@ -2837,6 +2855,56 @@ КонецФункции +#Область УстаревшиеПроцедурыИФункции + +// Устарела: больше не требуется, т.к. данные действия выполняются автоматически механизмом обновления. +// +// Удаляет отложенный обработчик из очереди выполняемых обработчиков на новую версию. +// Следует использовать, например, при переводе отложенного обработчика +// на монопольный (оперативный) режим выполнения. +// Для этого необходимо добавить новый разделенный обработчик обновления с режимом выполнения +// "Оперативно" и признаком "ОбщиеДанные = Ложь", после чего разместить в нем вызов данного метода. +// +// Параметры: +// ИмяОбработчика - Строка - полное имя процедуры отложенного обработчика. +// +Процедура УдалитьОтложенныйОбработчикИзОчереди(ИмяОбработчика) Экспорт + + СведенияОбОбновлении = ОбновлениеИнформационнойБазыСлужебный.СведенияОбОбновленииИнформационнойБазы(); + + ОтобранныйОбработчик = СведенияОбОбновлении.ДеревоОбработчиков.Строки.НайтиСтроки(Новый Структура("ИмяОбработчика", ИмяОбработчика), Истина); + Если ОтобранныйОбработчик <> Неопределено И ОтобранныйОбработчик.Количество() > 0 Тогда + + Для Каждого СтрокаОбработчик Из ОтобранныйОбработчик Цикл + СтрокаОбработчик.Родитель.Строки.Удалить(СтрокаОбработчик); + КонецЦикла; + + КонецЕсли; + + Для Каждого ШагОбновления Из СведенияОбОбновлении.ПланОтложенногоОбновления Цикл + ОбработчикиШага = ШагОбновления.Обработчики; + Индекс = 0; + ОбработчикНайден = Ложь; + Для Каждого ОписаниеОбработчика Из ОбработчикиШага Цикл + Если ОписаниеОбработчика.ИмяОбработчика = ИмяОбработчика Тогда + ОбработчикНайден = Истина; + Прервать; + КонецЕсли; + Индекс = Индекс + 1; + КонецЦикла; + + Если ОбработчикНайден Тогда + ОбработчикиШага.Удалить(Индекс); + Прервать; + КонецЕсли; + КонецЦикла; + + ОбновлениеИнформационнойБазыСлужебный.ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновлении); + +КонецПроцедуры + +#КонецОбласти + #КонецОбласти #Область СлужебныеПроцедурыИФункции diff --git a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыБСП/Module.bsl b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыБСП/Module.bsl index 6b7ede37c..af1ef3943 100644 --- a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыБСП/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыБСП/Module.bsl @@ -32,7 +32,7 @@ Процедура ПриДобавленииПодсистемы(Описание) Экспорт Описание.Имя = "СтандартныеПодсистемы"; - Описание.Версия = "2.4.3.176"; + Описание.Версия = "2.4.4.151"; Описание.РежимВыполненияОтложенныхОбработчиков = "Параллельно"; Описание.ПараллельноеОтложенноеОбновлениеСВерсии = "2.3.3.0"; diff --git a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебный/Module.bsl b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебный/Module.bsl index a1f6a4ddd..60d389ce6 100644 --- a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебный/Module.bsl @@ -319,8 +319,8 @@ // Функция ВерсияИБ(Знач ИдентификаторБиблиотеки, Знач ПолучитьВерсиюОбщихДанных = Ложь) Экспорт - УстановитьПривилегированныйРежим(Истина); УстановитьОтключениеБезопасногоРежима(Истина); + УстановитьПривилегированныйРежим(Истина); СтандартнаяОбработка = Истина; Результат = ""; @@ -602,6 +602,7 @@ // Функция ВыполненаРегистрацияОтложенныхОбработчиковОбновления() Экспорт + УстановитьОтключениеБезопасногоРежима(Истина); УстановитьПривилегированныйРежим(Истина); Если ОбщегоНазначения.РазделениеВключено() @@ -649,7 +650,7 @@ Возврат Ложь; КонецЕсли; - Если Не Пользователи.РолиДоступны("ПросмотрОписанияИзмененийПрограммы") Тогда + Если Не ПравоДоступа("Просмотр", Метаданные.ОбщиеФормы.ОписаниеИзмененийПрограммы) Тогда Возврат Ложь; КонецЕсли; @@ -1275,7 +1276,7 @@ КонецПроцедуры -// См. ОбщегоНазначенияПереопределяемый.ПараметрыРаботыКлиентаПриЗапуске. +// См. ОбщегоНазначенияПереопределяемый.ПриДобавленииПараметровРаботыКлиентаПриЗапуске. Процедура ПриДобавленииПараметровРаботыКлиентаПриЗапуске(Параметры) Экспорт Параметры.Вставить("НачальноеЗаполнениеДанных", РежимОбновленияДанных() = "НачальноеЗаполнение"); @@ -2945,7 +2946,9 @@ ТранзакцияАктивнаНаНачалоВыполнения = ТранзакцияАктивна(); Попытка + УстановитьПараметрыОбработчикаОбновления(Обработчик); ОбщегоНазначения.ВыполнитьМетодКонфигурации(Обработчик.Процедура, ПараметрыОбработчика); + УстановитьПараметрыОбработчикаОбновления(Неопределено); Исключение Если ДополнительныеПараметры.ЗаписыватьВЖурнал Тогда @@ -3744,7 +3747,8 @@ // Версия проверяемого обработчика ниже или равна текущей версии библиотеки и он не будет добавлен заново // к выполнению. Необходимо его сохранить. Если НайденныйОбработчик = Неопределено Тогда - Возврат Истина; + // Удаленный обработчик игнорируем и не сохраняем. + Возврат Ложь; КонецЕсли; ЗаполнитьЗначенияСвойств(Обработчик, НайденныйОбработчик); @@ -3994,14 +3998,17 @@ ПараметрыОбновления = ?(ПараметрыОбновления = Неопределено, Новый Структура, ПараметрыОбновления); ПараметрыОбновления.Вставить("ПараллельныйРежим", ПараллельныйРежим); Если ПараллельныйРежим Тогда + Отбор = Новый Структура("ЗапускатьТолькоВГлавномУзле", Истина); + РезультатПоиска = ДеревоОбработчиков.НайтиСтроки(Отбор, Истина); ПараметрыОбновления.Вставить("ОчередьОбработчиков", ТекущийЦиклОбновления.ОчередьОбработчиков); ПараметрыОбновления.Вставить("ПланОбновления", ПланОбновления); ПараметрыОбновления.Вставить("ОбрабатываемыеДанные", СведенияОбОбновлении.ОбрабатываемыеДанные); + ПараметрыОбновления.Вставить("ЕстьОбработчикиГлавногоУзла", (РезультатПоиска.Количество() > 0)); КонецЕсли; - УстановитьПараметрыОтложенногоОбработчикаОбновления(ОбработчикОбновления, Истина, ПараллельныйРежим); + УстановитьПараметрыОбработчикаОбновления(ОбработчикОбновления, Истина, ПараллельныйРежим); ЗапуститьПроцедуруОбработкиДанных(ОбработчикОбновления, ПараметрыОбновления); - УстановитьПараметрыОтложенногоОбработчикаОбновления(Неопределено); + УстановитьПараметрыОбработчикаОбновления(Неопределено); Если ОбработчикОбновления.Статус = "Выполнено" Тогда КоллекцияОбработчиков.Удалить(Индекс); @@ -4239,9 +4246,19 @@ Если КоличествоЗапусковПроцедурыОбновления = Неопределено Тогда КоличествоЗапусковПроцедурыОбновления = 0; ИначеЕсли КоличествоЗапусковПроцедурыОбновления > 10000 Тогда // Защита от зацикливания. + Если ПараметрыОбновления.ПараллельныйРежим + И ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ() + И ПараметрыОбновления.ЕстьОбработчикиГлавногоУзла Тогда + ТекстОшибки = НСтр("ru = 'Превышено допустимое количество запусков процедуры обновления. + |Убедитесь, что дополнительные процедуры обработки данных в главном узле + |полностью завершились, выполните синхронизацию данных и повторно + |запустите выполнение процедур обработки данных в данном узле.'"); + Иначе + ТекстОшибки = НСтр("ru = 'Превышено допустимое количество запусков процедуры обновления. + |Выполнение прервано для предотвращения зацикливания механизма обработки данных.'"); + КонецЕсли; + ОбработчикОбновления.ЧислоПопыток = 3; - ТекстОшибки = НСтр("ru = 'Превышено допустимое количество запусков процедуры обновления. - |Выполнение прервано для предотвращения зацикливания механизма обработки данных.'"); ВызватьИсключение ТекстОшибки; КонецЕсли; @@ -4943,7 +4960,7 @@ КонецФункции -Процедура УстановитьПараметрыОтложенногоОбработчикаОбновления(ОбработчикОбновления, Отложенно = Ложь, Параллельно = Ложь) +Процедура УстановитьПараметрыОбработчикаОбновления(ОбработчикОбновления, Отложенно = Ложь, Параллельно = Ложь) Если ОбработчикОбновления = Неопределено Тогда ПараметрыСеанса.ПараметрыОбработчикаОбновления = Новый ФиксированнаяСтруктура(НовыеПараметрыОбработчикаОбновления()); diff --git a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса/Module.bsl index 5f9c43d9f..604e0c707 100644 --- a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса/Module.bsl @@ -14,8 +14,8 @@ Процедура СформироватьПланОбновленияОбластиДанных(ИдентификаторБиблиотеки, ВсеОбработчики, ОбязательныеРазделенныеОбработчики, ИсходнаяВерсияИБ, ВерсияМетаданныхИБ) Экспорт - Если РаботаВМоделиСервисаПовтИсп.РазделениеВключено() - И Не РаботаВМоделиСервисаПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + Если РаботаВМоделиСервиса.РазделениеВключено() + И Не РаботаВМоделиСервиса.ДоступноИспользованиеРазделенныхДанных() Тогда ОбработчикиОбновления = ВсеОбработчики.СкопироватьКолонки(); Для Каждого СтрокаОбработчика Из ВсеОбработчики Цикл @@ -224,9 +224,9 @@ Функция ЗаблокироватьВерсииОбластиДанных() Экспорт КлючЗаписи = Неопределено; - Если РаботаВМоделиСервисаПовтИсп.РазделениеВключено() Тогда + Если РаботаВМоделиСервиса.РазделениеВключено() Тогда - Если РаботаВМоделиСервисаПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + Если РаботаВМоделиСервиса.ДоступноИспользованиеРазделенныхДанных() Тогда УстановитьПривилегированныйРежим(Истина); КонецЕсли; @@ -287,8 +287,8 @@ // См. ОбновлениеИнформационнойБазыБСП.ПередОбновлениемИнформационнойБазы. Процедура ПередОбновлениемИнформационнойБазы() Экспорт - Если РаботаВМоделиСервисаПовтИсп.РазделениеВключено() - И РаботаВМоделиСервисаПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + Если РаботаВМоделиСервиса.РазделениеВключено() + И РаботаВМоделиСервиса.ДоступноИспользованиеРазделенныхДанных() Тогда ВерсияОбщихДанных = ОбновлениеИнформационнойБазыСлужебный.ВерсияИБ(Метаданные.Имя, Истина); Если ОбновлениеИнформационнойБазыСлужебный.НеобходимоВыполнитьОбновление(Метаданные.Версия, ВерсияОбщихДанных) Тогда @@ -433,9 +433,9 @@ Если СозданиеНачальногоОбраза Тогда - Если РаботаВМоделиСервисаПовтИсп.РазделениеВключено() Тогда + Если РаботаВМоделиСервиса.РазделениеВключено() Тогда - Если РаботаВМоделиСервисаПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + Если РаботаВМоделиСервиса.ДоступноИспользованиеРазделенныхДанных() Тогда Для Каждого СтрокаНабора Из ЭлементДанных Цикл @@ -512,7 +512,7 @@ Процедура ПослеОбновленияИнформационнойБазы(Знач ПредыдущаяВерсия, Знач ТекущаяВерсия, Знач ВыполненныеОбработчики, ВыводитьОписаниеОбновлений, МонопольныйРежим) Экспорт - Если РаботаВМоделиСервисаПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + Если РаботаВМоделиСервиса.ДоступноИспользованиеРазделенныхДанных() Тогда ПараметрыБлокировки = СоединенияИБ.ПолучитьБлокировкуСеансовОбластиДанных(); Если НЕ ПараметрыБлокировки.Установлена Тогда @@ -607,7 +607,7 @@ // сведений ВерсииПодсистемОбластейДанных. Процедура ПеренестиВерсииПодсистемВоВспомогательныеДанные() Экспорт - Если Не РаботаВМоделиСервисаПовтИсп.РазделениеВключено() Тогда + Если Не РаботаВМоделиСервиса.РазделениеВключено() Тогда Возврат; КонецЕсли; @@ -683,7 +683,7 @@ Функция КлючЗаписиВерсийПодсистем() ЗначенияКлюча = Новый Структура; - Если РаботаВМоделиСервисаПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + Если РаботаВМоделиСервиса.ДоступноИспользованиеРазделенныхДанных() Тогда ЗначенияКлюча.Вставить("ОбластьДанныхВспомогательныеДанные", РаботаВМоделиСервиса.ЗначениеРазделителяСеанса()); ЗначенияКлюча.Вставить("ИмяПодсистемы", ""); КлючЗаписи = РаботаВМоделиСервиса.СоздатьКлючЗаписиРегистраСведенийВспомогательныхДанных( @@ -707,7 +707,7 @@ УстановитьПривилегированныйРежим(Истина); - Если НЕ РаботаВМоделиСервисаПовтИсп.РазделениеВключено() Тогда + Если НЕ РаботаВМоделиСервиса.РазделениеВключено() Тогда Возврат; КонецЕсли; @@ -894,7 +894,7 @@ // Процедура ОбновлениеОбластейДанных() Экспорт - Если НЕ РаботаВМоделиСервисаПовтИсп.РазделениеВключено() Тогда + Если НЕ РаботаВМоделиСервиса.РазделениеВключено() Тогда Возврат; КонецЕсли; @@ -910,7 +910,7 @@ УстановитьПривилегированныйРежим(Истина); - Если РаботаВМоделиСервисаПовтИсп.РазделениеВключено() И РаботаВМоделиСервисаПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + Если РаботаВМоделиСервиса.РазделениеВключено() И РаботаВМоделиСервиса.ДоступноИспользованиеРазделенныхДанных() Тогда ВызватьИсключение НСтр("ru = 'Вызов функции ОбновлениеИнформационнойБазыСлужебныйПовтИсп.МинимальнаяВерсияОбластейДанных() |недоступен из сеансов с установленным значением разделителей модели сервиса.'"); КонецЕсли; diff --git a/SSL/src/CommonModules/ОбновлениеКонфигурации/Module.bsl b/SSL/src/CommonModules/ОбновлениеКонфигурации/Module.bsl index ca85b6b38..25c62bb92 100644 --- a/SSL/src/CommonModules/ОбновлениеКонфигурации/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеКонфигурации/Module.bsl @@ -148,14 +148,14 @@ КонецПроцедуры -// См. ОбщегоНазначенияПереопределяемый.ПараметрыРаботыКлиентаПриЗапуске. +// См. ОбщегоНазначенияПереопределяемый.ПриДобавленииПараметровРаботыКлиентаПриЗапуске. Процедура ПриДобавленииПараметровРаботыКлиентаПриЗапуске(Параметры) Экспорт ПриДобавленииПараметровРаботыКлиента(Параметры); КонецПроцедуры -// См. ОбщегоНазначенияПереопределяемый.ПараметрыРаботыКлиента. +// См. ОбщегоНазначенияПереопределяемый.ПриДобавленииПараметровРаботыКлиента. Процедура ПриДобавленииПараметровРаботыКлиента(Параметры) Экспорт Если Не ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() diff --git a/SSL/src/CommonModules/ОбновлениеКонфигурацииВызовСервера/Module.bsl b/SSL/src/CommonModules/ОбновлениеКонфигурацииВызовСервера/Module.bsl index 9509c5863..47fb9c7dd 100644 --- a/SSL/src/CommonModules/ОбновлениеКонфигурацииВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеКонфигурацииВызовСервера/Module.bsl @@ -34,7 +34,7 @@ КонецПроцедуры -Функция ТекстыМакетов(ИнтерактивныйРежим, СообщенияДляЖурналаРегистрации, ВыполнитьОтложенныеОбработчики) Экспорт +Функция ТекстыМакетов(ИнтерактивныйРежим, СообщенияДляЖурналаРегистрации, ВыполнитьОтложенныеОбработчики, ЭтоОтложенноеОбновление) Экспорт ВыполнитьПроверкуПравДоступа("Администрирование", Метаданные); @@ -42,6 +42,10 @@ ТекстыМакетов.Вставить("ДопФайлОбновленияКонфигурации"); ТекстыМакетов.Вставить(?(ИнтерактивныйРежим, "ЗаставкаОбновленияКонфигурации", "НеинтерактивноеОбновлениеКонфигурации")); + Если ЭтоОтложенноеОбновление Тогда + ТекстыМакетов.Вставить("СкриптСозданияЗадачиПланировщикаЗадач"); + КонецЕсли; + Для Каждого СвойстваМакета Из ТекстыМакетов Цикл ТекстыМакетов[СвойстваМакета.Ключ] = Обработки.УстановкаОбновлений.ПолучитьМакет(СвойстваМакета.Ключ).ПолучитьТекст(); КонецЦикла; diff --git a/SSL/src/CommonModules/ОбновлениеКонфигурацииКлиент/Module.bsl b/SSL/src/CommonModules/ОбновлениеКонфигурацииКлиент/Module.bsl index 35489eeac..ca74afd71 100644 --- a/SSL/src/CommonModules/ОбновлениеКонфигурацииКлиент/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеКонфигурацииКлиент/Module.bsl @@ -1,13 +1,19 @@ #Область ПрограммныйИнтерфейс -// Открывает форму установки обновлений. +// Открывает форму установки обновлений с указанными параметрами. // // Параметры: -// ПараметрыФормы - Структура - Параметры формы установки обновлений. +// ПараметрыУстановкиОбновлений - Структура - Дополнительные параметры установки обновлений: +// * ЗавершениеРаботыСистемы - Булево - Истина, если после установки обновления работа программы завершается. +// По умолчанию, Ложь. +// * ПолученоОбновлениеКонфигурации - Булево - Истина, если устанавливаемое обновление получено из приложения +// в Интернете. По умолчанию, Ложь - обычный режим установки обновления. +// * ВыполнитьОбновление - Булево - Истина, если необходимо пропустить выбор файла обновления и сразу перейти +// к установке обновления. По умолчанию, Ложь - предлагать выбор. // -Процедура ПоказатьПоискИУстановкуОбновлений(ПараметрыФормы = Неопределено) Экспорт +Процедура ПоказатьПоискИУстановкуОбновлений(ПараметрыУстановкиОбновлений = Неопределено) Экспорт - ОткрытьФорму("Обработка.УстановкаОбновлений.Форма.Форма", ПараметрыФормы); + ОткрытьФорму("Обработка.УстановкаОбновлений.Форма.Форма", ПараметрыУстановкиОбновлений); КонецПроцедуры @@ -15,6 +21,11 @@ // // Параметры: // ПараметрыРезервногоКопирования - Структура - Параметры формы резервного копирования. +// * СоздаватьРезервнуюКопию - Число - 0, Не создавать резервную копию ИБ. +// 1, Создавать временную резервную копию ИБ. +// 2, Создавать резервную копию ИБ +// * ИмяКаталогаРезервнойКопииИБ - Строка - Каталог сохранения резервной копии. +// * ВосстанавливатьИнформационнуюБазу - Булево - Выполнять откат при нештатной ситуации. // ОписаниеОповещения - ОписаниеОповещения - Описание оповещения о закрытии формы. // Процедура ПоказатьРезервноеКопирование(ПараметрыРезервногоКопирования, ОписаниеОповещения) Экспорт @@ -55,12 +66,12 @@ КонецФункции -// Проверяет возможность установи обновления. Если возможно, то запускает +// Проверяет возможность установки обновления. Если возможно, то запускает // скрипт обновления или планирует обновление на указанное время. // // Параметры: -// Форма - УправляемаяФорма - Форма из которой устанавливается обновление. -// Параметры - Структура - Структура со свойствами: +// Форма - УправляемаяФорма - Форма, из которой устанавливается обновление и которая должна быть закрыта в конце. +// Параметры - Структура - Параметры установки обновления: // * РежимОбновления - Число - Вариант установки обновления. Принимаемые значения: // 0 - сейчас, 1 - при завершении работы, 2 - планирование обновления. // * ДатаВремяОбновления - Дата - Дата планируемого обновления. @@ -73,12 +84,10 @@ // * ВосстанавливатьИнформационнуюБазу - Булево - Признак необходимости восстановления базы. // * ЗавершениеРаботыСистемы - Булево - Признак того, что установка обновления происходит при завершении работы. // * ФайлыОбновления - Массив - Содержит значения типа Структура. -// ПараметрыАдминистрирования - Структура - Содержит параметры администрирования информационной базы и кластера. +// ПараметрыАдминистрирования - Структура - См. СтандартныеПодсистемыСервер.ПараметрыАдминистрирования. // Процедура УстановитьОбновление(Форма, Параметры, ПараметрыАдминистрирования) Экспорт - // Также при проверке возможности установки обновления выполняется - // планировка обновления на указанное время (если выбран этот вариант). Если Не ВозможнаУстановкаОбновления(Параметры, ПараметрыАдминистрирования) Тогда Возврат; КонецЕсли; @@ -91,11 +100,15 @@ ИмяПараметра = "СтандартныеПодсистемы.ПредлагатьОбновлениеИнформационнойБазыПриЗавершенииСеанса"; ПараметрыПриложения.Вставить(ИмяПараметра, Истина); ПараметрыПриложения.Вставить("СтандартныеПодсистемы.ИменаФайловОбновления", ИменаФайловОбновления(Параметры)); + ИначеЕсли Параметры.РежимОбновления = 2 Тогда // Запланировать обновление + ЗапланироватьОбновлениеКонфигурации(Параметры, ПараметрыАдминистрирования); КонецЕсли; ОбновлениеКонфигурацииВызовСервера.СохранитьНастройкиОбновленияКонфигурации(Параметры); - Форма.Закрыть(); + Если Форма <> Неопределено Тогда + Форма.Закрыть(); + КонецЕсли; КонецПроцедуры @@ -124,8 +137,10 @@ // Процедура ЗаписатьФайлПротоколаОшибки(КаталогСкрипта) Экспорт +#Если Не ВебКлиент Тогда ФайлРегистрации = Новый ЗаписьТекста(КаталогСкрипта + "error.txt"); ФайлРегистрации.Закрыть(); +#КонецЕсли КонецПроцедуры @@ -221,11 +236,7 @@ ПоказатьПредупреждение(, НСтр("ru = 'Укажите допустимый адрес электронной почты.'")); Возврат Ложь; КонецЕсли; - Если Не ВозможноЗапланироватьОбновление() Тогда - Возврат Ложь; - КонецЕсли; - Если Не ЗапланироватьОбновлениеКонфигурации(Параметры, ПараметрыАдминистрирования) Тогда - ПоказатьПредупреждение(, НСтр("ru = 'Не удалось запланировать обновление конфигурации. Сведения об ошибке сохранены в журнал регистрации.'")); + Если Не ПоддерживаетсяПланировщикЗаданий() Тогда Возврат Ложь; КонецЕсли; КонецЕсли; @@ -234,22 +245,8 @@ КонецФункции -Функция ВозможноЗапланироватьОбновление() - - ВерсияWindowsВышеVista = ВерсияWindowsВышеVista(); - Попытка - ОбъектAPI = ?(ВерсияWindowsВышеVista, СлужбаПланировщика(), ОбъектWMI()); - Возврат ОбъектAPI <> Неопределено; - Исключение - ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(СобытиеЖурналаРегистрации(), "Ошибка", ОписаниеОшибки()); - Возврат Ложь; - КонецПопытки; - -КонецФункции - Процедура ЗапуститьСкриптОбновления(Параметры, ПараметрыАдминистрирования) - УдалитьЗадачуПланировщика(Параметры.КодЗадачиПланировщика); ИмяГлавногоФайлаСкрипта = СформироватьФайлыСкриптаОбновления(Истина, Параметры, ПараметрыАдминистрирования); ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(СобытиеЖурналаРегистрации(), "Информация", НСтр("ru = 'Выполняется процедура обновления конфигурации:'") + " " + ИмяГлавногоФайлаСкрипта); @@ -271,9 +268,9 @@ КонецПроцедуры -// Определяет что текущая версия windows больше Vista (Vista, Windows 7, Windows 8). -// -Функция ВерсияWindowsВышеVista() +Функция ПоддерживаетсяПланировщикЗаданий() + + // Планировщик заданий поддерживается начиная с версии 6.0 - Windows Vista. СистемнаяИнформация = Новый СистемнаяИнформация(); ВерсияОС = СистемнаяИнформация.ВерсияОС; @@ -285,12 +282,6 @@ КонецФункции -Функция СлужбаПланировщика() - СлужбаПланировщика = Новый COMObject("Schedule.Service"); - СлужбаПланировщика.Connect(); - Возврат СлужбаПланировщика; -КонецФункции - Функция ДатаОбновленияУказанаВерно(Параметры) ТекущаяДата = ОбщегоНазначенияКлиент.ДатаСеанса(); @@ -309,22 +300,24 @@ КонецФункции -Функция ЗапланироватьОбновлениеКонфигурации(Параметры, ПараметрыАдминистрирования) - Если Не УдалитьЗадачуПланировщика(Параметры.КодЗадачиПланировщика) Тогда - Возврат Ложь; - КонецЕсли; - ИмяГлавногоФайлаСкрипта = СформироватьФайлыСкриптаОбновления(Ложь, Параметры, ПараметрыАдминистрирования); +Процедура ЗапланироватьОбновлениеКонфигурации(Параметры, ПараметрыАдминистрирования) - ИмяЗапускаемогоСкрипта = СтандартныеПодсистемыКлиент.ПапкаСистемныхПриложений() + "wscript.exe"; - ПутьЗапускаемогоСкрипта = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("%1 //nologo ""%2"" /p1:""%3"" /p2:""%4""", - ИмяЗапускаемогоСкрипта, ИмяГлавногоФайлаСкрипта, - СтрокаUnicode(ПараметрыАдминистрирования.ПарольАдминистратораИнформационнойБазы), - СтрокаUnicode(ПараметрыАдминистрирования.ПарольАдминистратораКластера)); + СформироватьФайлыСкриптаОбновления(Ложь, Параметры, ПараметрыАдминистрирования); - Параметры.КодЗадачиПланировщика = СоздатьЗадачуПланировщика(ПутьЗапускаемогоСкрипта, Параметры.ДатаВремяОбновления); - ОбновлениеКонфигурацииВызовСервера.ЗаписатьСтатусОбновления(ИмяПользователя(), Параметры.КодЗадачиПланировщика <> 0, Ложь, Ложь); - Возврат Параметры.КодЗадачиПланировщика <> 0; -КонецФункции + ШаблонКоманды = "wscript.exe //nologo %1"; + + СтрокаКоманды = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ШаблонКоманды, + Параметры.ИмяСкриптаСозданияЗадачиПланировщикаЗадач); + + ПараметрыЗапускаПрограммы = ОбщегоНазначенияКлиентСервер.ПараметрыЗапускаПрограммы(); + ПараметрыЗапускаПрограммы.ВыполнитьСНаивысшимиПравами = Истина; + + ОбщегоНазначенияКлиентСервер.ЗапуститьПрограмму(СтрокаКоманды, ПараметрыЗапускаПрограммы); + + ОбновлениеКонфигурацииВызовСервера.ЗаписатьСтатусОбновления(ИмяПользователя(), Истина, Ложь, Ложь); + +КонецПроцедуры Функция СформироватьФайлыСкриптаОбновления(Знач ИнтерактивныйРежим, Параметры, ПараметрыАдминистрирования) @@ -360,7 +353,6 @@ // Вызов КаталогВременныхФайлов вместо ПолучитьИмяВременногоФайла, так как каталог не должен удаляться // автоматически при завершении клиентского приложения. // В него сохраняются исполняемые файлы, лог выполнения и резервная копия, при определенной настройке. - КаталогВременныхФайловОбновления = КаталогВременныхФайлов() + "1Cv8Update." + Формат(ОбщегоНазначенияКлиент.ДатаСеанса(), "ДФ=ггММддЧЧммсс") + "\"; Если Параметры.СоздаватьРезервнуюКопию = 1 Тогда @@ -374,10 +366,17 @@ СоздаватьРезервнуюКопию = ЭтоФайловаяБаза И (Параметры.СоздаватьРезервнуюКопию = 1 Или Параметры.СоздаватьРезервнуюКопию = 2); ВыполнитьОтложенныеОбработчики = Ложь; + ЭтоОтложенноеОбновление = (Параметры.РежимОбновления = 2); ТекстыМакетов = ОбновлениеКонфигурацииВызовСервера.ТекстыМакетов(ИнтерактивныйРежим, - ПараметрыПриложения["СтандартныеПодсистемы.СообщенияДляЖурналаРегистрации"], ВыполнитьОтложенныеОбработчики); + ПараметрыПриложения["СтандартныеПодсистемы.СообщенияДляЖурналаРегистрации"], ВыполнитьОтложенныеОбработчики, ЭтоОтложенноеОбновление); ИмяПользователя = ПараметрыАдминистрирования.ИмяАдминистратораИнформационнойБазы; + Если ЭтоОтложенноеОбновление Тогда + ГенераторСлучайныхЧисел = Новый ГенераторСлучайныхЧисел; + КодЗадачи = Формат(ГенераторСлучайныхЧисел.СлучайноеЧисло(1000, 9999), "ЧГ=0"); + ИмяЗадачи = ИмяЗадачиScheduleService(КодЗадачи); + КонецЕсли; + ОбластьПараметров = ТекстыМакетов.ОбластьПараметров; ВставитьПараметрСкрипта("ИмяИсполняемогоФайлаКонфигуратора" , ИмяИсполняемогоФайлаКонфигуратора , Истина, ОбластьПараметров); ВставитьПараметрСкрипта("ИмяИсполняемогоФайлаКлиента" , ИмяИсполняемогоФайлаКлиента , Истина, ОбластьПараметров); @@ -396,23 +395,102 @@ ВставитьПараметрСкрипта("ЗапускСеансаПослеОбновления" , Не Параметры.ЗавершениеРаботыСистемы , Ложь , ОбластьПараметров); ВставитьПараметрСкрипта("ВыполнятьСжатиеТаблицИБ" , ЭтоФайловаяБаза , Ложь , ОбластьПараметров); ВставитьПараметрСкрипта("ВыполнитьОтложенныеОбработчики" , ВыполнитьОтложенныеОбработчики , Ложь , ОбластьПараметров); + ВставитьПараметрСкрипта("ИмяЗадачиПланировщикаЗадач" , ИмяЗадачи , Истина, ОбластьПараметров); ОбластьПараметров = СтрЗаменить(ОбластьПараметров, "[ИменаФайловОбновления]", ИменаФайловОбновления(Параметры)); ТекстыМакетов.МакетФайлаОбновленияКонфигурации = ОбластьПараметров + ТекстыМакетов.МакетФайлаОбновленияКонфигурации; ТекстыМакетов.Удалить("ОбластьПараметров"); - Возврат СоздатьФайлыСкрипта(КаталогВременныхФайловОбновления, ТекстыМакетов, ИнтерактивныйРежим); + // + + СоздатьКаталог(КаталогВременныхФайловОбновления); + + ФайлСкрипта = Новый ТекстовыйДокумент; + ФайлСкрипта.Вывод = ИспользованиеВывода.Разрешить; + ФайлСкрипта.УстановитьТекст(ТекстыМакетов.МакетФайлаОбновленияКонфигурации); + + ИмяФайлаСкрипта = КаталогВременныхФайловОбновления + "main.js"; + ФайлСкрипта.Записать(ИмяФайлаСкрипта, КодировкаФайловПрограммыОбновления()); + + // Вспомогательный файл: helpers.js. + ФайлСкрипта = Новый ТекстовыйДокумент; + ФайлСкрипта.Вывод = ИспользованиеВывода.Разрешить; + ФайлСкрипта.УстановитьТекст(ТекстыМакетов.ДопФайлОбновленияКонфигурации); + ФайлСкрипта.Записать(КаталогВременныхФайловОбновления + "helpers.js", КодировкаФайловПрограммыОбновления()); + + Если ИнтерактивныйРежим Тогда + // Вспомогательный файл: splash.png. + БиблиотекаКартинок.ЗаставкаВнешнейОперации.Записать(КаталогВременныхФайловОбновления + "splash.png"); + // Вспомогательный файл: splash.ico. + БиблиотекаКартинок.ЗначокЗаставкиВнешнейОперации.Записать(КаталогВременныхФайловОбновления + "splash.ico"); + // Вспомогательный файл: progress.gif. + БиблиотекаКартинок.ДлительнаяОперация48.Записать(КаталогВременныхФайловОбновления + "progress.gif"); + // Главный файл заставки: splash.hta. + ИмяГлавногоФайлаСкрипта = КаталогВременныхФайловОбновления + "splash.hta"; + ФайлСкрипта = Новый ТекстовыйДокумент; + ФайлСкрипта.Вывод = ИспользованиеВывода.Разрешить; + ФайлСкрипта.УстановитьТекст(ТекстыМакетов.ЗаставкаОбновленияКонфигурации); + ФайлСкрипта.Записать(ИмяГлавногоФайлаСкрипта, КодировкаФайловПрограммыОбновления()); + Иначе + ИмяГлавногоФайлаСкрипта = КаталогВременныхФайловОбновления + "updater.js"; + ФайлСкрипта = Новый ТекстовыйДокумент; + ФайлСкрипта.Вывод = ИспользованиеВывода.Разрешить; + ФайлСкрипта.УстановитьТекст(ТекстыМакетов.НеинтерактивноеОбновлениеКонфигурации); + ФайлСкрипта.Записать(ИмяГлавногоФайлаСкрипта, КодировкаФайловПрограммыОбновления()); + КонецЕсли; + + Если ЭтоОтложенноеОбновление Тогда + + ДатаЗапуска = Формат(Параметры.ДатаВремяОбновления, "ДФ=yyyy-MM-ddTHH:mm:ss"); + + ПутьСкрипта = СтандартныеПодсистемыКлиент.ПапкаСистемныхПриложений() + "wscript.exe"; + ПараметрыСкрипта = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("//nologo ""%1"" /p1:""%2"" /p2:""%3""", + ИмяГлавногоФайлаСкрипта, + СтрокаUnicode(ПараметрыАдминистрирования.ПарольАдминистратораИнформационнойБазы), + СтрокаUnicode(ПараметрыАдминистрирования.ПарольАдминистратораКластера)); + + ОписаниеЗадачи = НСтр("ru = 'Обновление конфигурации 1С:Предприятие'"); + + СкриптСозданияЗадачиПланировщикаЗадач = ТекстыМакетов.СкриптСозданияЗадачиПланировщикаЗадач; + + ВставитьПараметрСкрипта("ДатаЗапуска" , ДатаЗапуска, Истина, СкриптСозданияЗадачиПланировщикаЗадач); + ВставитьПараметрСкрипта("ПутьСкрипта" , ПутьСкрипта, Истина, СкриптСозданияЗадачиПланировщикаЗадач); + ВставитьПараметрСкрипта("ПараметрыСкрипта" , ПараметрыСкрипта, Истина, СкриптСозданияЗадачиПланировщикаЗадач); + ВставитьПараметрСкрипта("ИмяЗадачи" , ИмяЗадачи, Истина, СкриптСозданияЗадачиПланировщикаЗадач); + ВставитьПараметрСкрипта("ОписаниеЗадачи" , ОписаниеЗадачи, Истина, СкриптСозданияЗадачиПланировщикаЗадач); + + ИмяСкриптаСозданияЗадачиПланировщикаЗадач = КаталогВременныхФайловОбновления + "addsheduletask.js"; + ФайлСкрипта = Новый ТекстовыйДокумент; + ФайлСкрипта.Вывод = ИспользованиеВывода.Разрешить; + ФайлСкрипта.УстановитьТекст(СкриптСозданияЗадачиПланировщикаЗадач); + ФайлСкрипта.Записать(ИмяСкриптаСозданияЗадачиПланировщикаЗадач, КодировкаФайловПрограммыОбновления()); + + Параметры.КодЗадачиПланировщика = КодЗадачи; + + Параметры.Вставить("ИмяСкриптаСозданияЗадачиПланировщикаЗадач", ИмяСкриптаСозданияЗадачиПланировщикаЗадач); + + КонецЕсли; + + ФайлЛога = Новый ТекстовыйДокумент; + ФайлЛога.Вывод = ИспользованиеВывода.Разрешить; + ФайлЛога.УстановитьТекст(СтандартныеПодсистемыКлиент.ИнформацияДляПоддержки()); + ФайлЛога.Записать(КаталогВременныхФайловОбновления + "templog.txt", КодировкаТекста.Системная); + + Возврат ИмяГлавногоФайлаСкрипта; + #КонецЕсли КонецФункции Процедура ВставитьПараметрСкрипта(Знач ИмяПараметра, Знач ЗначениеПараметра, Форматировать, ОбластьПараметров) + Если Форматировать = Истина Тогда ЗначениеПараметра = Форматировать(ЗначениеПараметра); ИначеЕсли Форматировать = Ложь Тогда ЗначениеПараметра = ?(ЗначениеПараметра, "true", "false"); КонецЕсли; ОбластьПараметров = СтрЗаменить(ОбластьПараметров, "[" + ИмяПараметра + "]", ЗначениеПараметра); + КонецПроцедуры Функция ИменаФайловОбновления(Параметры) @@ -448,53 +526,6 @@ Возврат "'" + Текст + "'"; КонецФункции -Функция СоздатьФайлыСкрипта(КаталогВременныхФайловОбновления, ТекстыМакетов, ИнтерактивныйРежим) - - СоздатьКаталог(КаталогВременныхФайловОбновления); - - ФайлСкрипта = Новый ТекстовыйДокумент; - ФайлСкрипта.Вывод = ИспользованиеВывода.Разрешить; - ФайлСкрипта.УстановитьТекст(ТекстыМакетов.МакетФайлаОбновленияКонфигурации); - - ИмяФайлаСкрипта = КаталогВременныхФайловОбновления + "main.js"; - ФайлСкрипта.Записать(ИмяФайлаСкрипта, КодировкаТекста.UTF16); - - // Вспомогательный файл: helpers.js. - ФайлСкрипта = Новый ТекстовыйДокумент; - ФайлСкрипта.Вывод = ИспользованиеВывода.Разрешить; - ФайлСкрипта.УстановитьТекст(ТекстыМакетов.ДопФайлОбновленияКонфигурации); - ФайлСкрипта.Записать(КаталогВременныхФайловОбновления + "helpers.js", КодировкаТекста.UTF16); - - Если ИнтерактивныйРежим Тогда - // Вспомогательный файл: splash.png. - БиблиотекаКартинок.ЗаставкаВнешнейОперации.Записать(КаталогВременныхФайловОбновления + "splash.png"); - // Вспомогательный файл: splash.ico. - БиблиотекаКартинок.ЗначокЗаставкиВнешнейОперации.Записать(КаталогВременныхФайловОбновления + "splash.ico"); - // Вспомогательный файл: progress.gif. - БиблиотекаКартинок.ДлительнаяОперация48.Записать(КаталогВременныхФайловОбновления + "progress.gif"); - // Главный файл заставки: splash.hta. - ИмяГлавногоФайлаСкрипта = КаталогВременныхФайловОбновления + "splash.hta"; - ФайлСкрипта = Новый ТекстовыйДокумент; - ФайлСкрипта.Вывод = ИспользованиеВывода.Разрешить; - ФайлСкрипта.УстановитьТекст(ТекстыМакетов.ЗаставкаОбновленияКонфигурации); - ФайлСкрипта.Записать(ИмяГлавногоФайлаСкрипта, КодировкаТекста.UTF16); - Иначе - ИмяГлавногоФайлаСкрипта = КаталогВременныхФайловОбновления + "updater.js"; - ФайлСкрипта = Новый ТекстовыйДокумент; - ФайлСкрипта.Вывод = ИспользованиеВывода.Разрешить; - ФайлСкрипта.УстановитьТекст(ТекстыМакетов.НеинтерактивноеОбновлениеКонфигурации); - ФайлСкрипта.Записать(ИмяГлавногоФайлаСкрипта, КодировкаТекста.UTF16); - КонецЕсли; - - ФайлЛога = Новый ТекстовыйДокумент; - ФайлЛога.Вывод = ИспользованиеВывода.Разрешить; - ФайлЛога.УстановитьТекст(СтандартныеПодсистемыКлиент.ИнформацияДляПоддержки()); - ФайлЛога.Записать(КаталогВременныхФайловОбновления + "templog.txt", КодировкаТекста.Системная); - - Возврат ИмяГлавногоФайлаСкрипта; - -КонецФункции - Функция ПолучитьПараметрыАутентификацииАдминистратораОбновления(ПараметрыАдминистрирования) Результат = Новый Структура("СтрокаПодключения, СтрокаСоединенияИнформационнойБазы"); @@ -510,203 +541,12 @@ КонецФункции -Функция УдалитьЗадачуПланировщика(КодЗадачи) - - Если КодЗадачи = 0 Тогда - Возврат Истина; - КонецЕсли; - - Если Не СуществуетЗадачаПланировщика(КодЗадачи) Тогда - Возврат Истина; - КонецЕсли; - - Если ВерсияWindowsВышеVista() Тогда - Возврат УдалитьЗадачуПланировщикаScheduleService(КодЗадачи); - Иначе - Возврат УдалитьЗадачуПланировщикаScheduledJob(КодЗадачи); - КонецЕсли; - -КонецФункции - -Функция УдалитьЗадачуПланировщикаScheduledJob(КодЗадачи) - - Попытка - - Сервис = ОбъектWMI(); - Задача = ПолучитьЗадачуПланировщикаScheduledJob(КодЗадачи); - КодОшибки = Задача.Delete(); - - Исключение - - ТекстСообщения = НСтр("ru = 'Ошибка при удалении задачи планировщика: %1'"); - ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(СобытиеЖурналаРегистрации(), "Ошибка", - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, ОписаниеОшибки())); - Возврат Ложь; - КонецПопытки; - - Результат = КодОшибки = 0; - Если Не Результат Тогда // Коды ошибок: http://msdn2.microsoft.com/en-us/library/aa389957(VS.85).aspx. - ТекстСообщения = НСтр("ru = 'Ошибка при удалении задачи планировщика: %1'"); - ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(СобытиеЖурналаРегистрации(), "Ошибка", - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, КодОшибки)); - Возврат Результат; - КонецЕсли; - ТекстСообщения = НСтр("ru = 'Задача планировщика успешно удалена (код задачи: %1).'"); - ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(СобытиеЖурналаРегистрации(), "Информация", - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, КодЗадачи)); - КодЗадачи = 0; - - Возврат Результат; - -КонецФункции - -Функция УдалитьЗадачуПланировщикаScheduleService(КодЗадачи) - - ИмяЗадачи = ИмяЗадачиScheduleService(КодЗадачи); - - Попытка - - СлужбаПланировщика = СлужбаПланировщика(); - Корень = СлужбаПланировщика.GetFolder("\"); - Результат = Корень.DeleteTask(ИмяЗадачи, 0); - - Исключение - - ТекстСообщения = НСтр("ru = 'Ошибка при удалении задачи планировщика: %1'"); - ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(СобытиеЖурналаРегистрации(), "Ошибка", - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, ОписаниеОшибки())); - Возврат Ложь; - - КонецПопытки; - - Возврат Истина; - -КонецФункции - -Функция ОбъектWMI() - // WMI: http://www.microsoft.com/technet/scriptcenter/resources/wmifaq.mspx. - Локатор = Новый COMObject("WbemScripting.SWbemLocator"); - Возврат Локатор.ConnectServer(".", "\root\cimv2"); -КонецФункции - -Функция СоздатьЗадачуПланировщика(Знач ИмяФайлаПрограммы, Знач ДатаВремя) - - Если ВерсияWindowsВышеVista() Тогда - Возврат СоздатьЗадачуПланировщикаScheduleService(ИмяФайлаПрограммы, ДатаВремя); - Иначе - Возврат СоздатьЗадачуПланировщикаScheduledJob(ИмяФайлаПрограммы, ДатаВремя); - КонецЕсли; - -КонецФункции - -// Создать задачу планировщика ОС Windows. -// -// Параметры: -// ИмяФайлаПрограммы - Строка - путь к запускаемому приложению или файлу. -// ДатаВремя - Дата - Дата и время запуска. Значение даты может быть -// в интервале [текущая дата, текущая дата + 30 дней). -// -// Возвращаемое значение: -// Число - код созданной задачи планировщика или "Неопределено" при ошибке. -// -Функция СоздатьЗадачуПланировщикаScheduledJob(Знач ИмяФайлаПрограммы, Знач ДатаВремя) - - Попытка - - Планировщик = ОбъектWMI().Get("Win32_ScheduledJob"); - КодЗадачи = 0; - КодОшибки = Планировщик.Create(ИмяФайлаПрограммы, // Command - ПреобразоватьВремяВФорматCIM(ДатаВремя), // StartTime - Ложь, // RunRepeatedly - , // DaysOfWeek - Pow(2, День(ДатаВремя) - 1), // DaysOfMonth - Ложь, // InteractWithDesktop - КодЗадачи); // out JobId - - Исключение - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Ошибка при создании задачи планировщика: %1'"), ОписаниеОшибки()); - ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(СобытиеЖурналаРегистрации(), "Ошибка", ТекстСообщения); - Возврат 0; - КонецПопытки; - - Если КодОшибки <> 0 Тогда // Коды ошибок: http://msdn2.microsoft.com/en-us/library/aa389389(VS.85).aspx. - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Ошибка при создании задачи планировщика: %1'"), КодОшибки); - ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(СобытиеЖурналаРегистрации(), "Ошибка", ТекстСообщения); - Возврат 0; - КонецЕсли; - - ТекстСообщения = НСтр("ru = 'Задача планировщика успешно запланирована (команда: %1; дата: %2; код задачи: %3).'"); - ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(СобытиеЖурналаРегистрации(), - "Информация", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, ИмяФайлаПрограммы, ДатаВремя, КодЗадачи)); - - Возврат КодЗадачи; - -КонецФункции - -Функция СоздатьЗадачуПланировщикаScheduleService(Знач ИмяФайлаПрограммы, Знач ДатаВремя) - - ГенераторСлучайныхЧисел = Новый ГенераторСлучайныхЧисел; - КодЗадачи = Формат(ГенераторСлучайныхЧисел.СлучайноеЧисло(1000, 9999), "ЧГ=0"); - ИмяЗадачи = ИмяЗадачиScheduleService(КодЗадачи); - ДатаЗапуска = Формат(ДатаВремя, "ДФ=yyyy-MM-ddTHH:mm:ss"); - - РазделительИмениИПараметров = СтрНайти(ИмяФайлаПрограммы, ".exe") + 3; - ИмяПрограммы = Лев(ИмяФайлаПрограммы, РазделительИмениИПараметров); - ПараметрыЗапуска = Сред(ИмяФайлаПрограммы, РазделительИмениИПараметров + 2); - - Попытка - - СлужбаПланировщика = СлужбаПланировщика(); - ОписаниеЗадачи = СлужбаПланировщика.NewTask(0); - ОписаниеЗадачи.RegistrationInfo.Description = НСтр("ru = 'Обновление конфигурации 1С:Предприятие'"); - - ОписаниеЗадачи.Principal.RunLevel = 1; - - ОписаниеЗадачи.Settings.Enabled = Истина; - ОписаниеЗадачи.Settings.Hidden = Ложь; - - Триггер = ОписаниеЗадачи.Triggers.Create(1); - Триггер.StartBoundary = ДатаЗапуска; - Триггер.Enabled = Истина; - - Действие = ОписаниеЗадачи.Actions.Create(0); - Действие.Path = ИмяПрограммы; - Действие.Arguments = ПараметрыЗапуска; - - Корень = СлужбаПланировщика.GetFolder("\"); - Задача = Корень.RegisterTaskDefinition(ИмяЗадачи, ОписаниеЗадачи, 6, "SYSTEM", Неопределено, 4); - - Исключение - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Ошибка при создании задачи планировщика: %1'"), ОписаниеОшибки()); - ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(СобытиеЖурналаРегистрации(), "Ошибка", ТекстСообщения); - Возврат 0; - КонецПопытки; - - Возврат КодЗадачи; - -КонецФункции - Функция ИмяЗадачиScheduleService(Знач КодЗадачи) Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Обновление конфигурации (%1)'"), Формат(КодЗадачи, "ЧГ=0")); КонецФункции -Функция ПреобразоватьВремяВФорматCIM(ДатаВремя) - Локатор = Новый COMObject("WbemScripting.SWbemLocator"); - Сервис = Локатор.ConnectServer(".", "\root\cimv2"); - ComputerSystems = Сервис.ExecQuery("Select * from Win32_ComputerSystem"); - Для Каждого ComputerSystem Из ComputerSystems Цикл - Разница = ComputerSystem.CurrentTimeZone; - Час = Формат(ДатаВремя,"ДФ=ЧЧ"); - Минута = Формат(ДатаВремя,"ДФ=мм"); - Разница = ?(Разница > 0, "+" + Формат(Разница, "ЧГ=0"), Формат(Разница, "ЧГ=0")); - Возврат "********" + Час + Минута + "00.000000" + Разница; - КонецЦикла; - - Возврат Неопределено; -КонецФункции - Функция СтрокаUnicode(Строка) Результат = ""; @@ -723,51 +563,6 @@ КонецФункции -Функция СуществуетЗадачаПланировщика(Знач КодЗадачи) Экспорт - - Если КодЗадачи = 0 Тогда - Возврат Ложь; - КонецЕсли; - - Если ВерсияWindowsВышеVista() Тогда - ЗадачаПланировщика = ПолучитьЗадачуПланировщикаScheduleService(КодЗадачи); - Иначе - ЗадачаПланировщика = ПолучитьЗадачуПланировщикаScheduledJob(КодЗадачи); - КонецЕсли; - - Возврат ЗадачаПланировщика <> Неопределено; - -КонецФункции - -Функция ПолучитьЗадачуПланировщикаScheduledJob(Знач КодЗадачи) - - Попытка - Возврат ОбъектWMI().Get("Win32_ScheduledJob.JobID=" + КодЗадачи); - Исключение - Возврат Неопределено; - КонецПопытки; - -КонецФункции - -Функция ПолучитьЗадачуПланировщикаScheduleService(Знач КодЗадачи) - - НайденнаяЗадача = Неопределено; - ИмяЗадачи = ИмяЗадачиScheduleService(КодЗадачи); - - СлужбаПланировщика = СлужбаПланировщика(); - Корень = СлужбаПланировщика.GetFolder("\"); - СписокЗадач = Корень.GetTasks(0); - - Для Каждого Задача Из СписокЗадач Цикл - Если Задача.Name = ИмяЗадачи Тогда - НайденнаяЗадача = Задача; - КонецЕсли; - КонецЦикла; - - Возврат НайденнаяЗадача; - -КонецФункции - // Возвращает имя события для записи журнала регистрации. Функция СобытиеЖурналаРегистрации() Экспорт Возврат НСтр("ru = 'Обновление конфигурации'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); @@ -893,4 +688,15 @@ КонецПроцедуры +#Если Не ВебКлиент Тогда + +Функция КодировкаФайловПрограммыОбновления() + + // wscript.exe может работать только с файлами в кодировке UTF-16 LE. + Возврат КодировкаТекста.UTF16; + +КонецФункции + +#КонецЕсли + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ОбсужденияСлужебныйКлиент/Module.bsl b/SSL/src/CommonModules/ОбсужденияСлужебныйКлиент/Module.bsl new file mode 100644 index 000000000..49ba4f2d1 --- /dev/null +++ b/SSL/src/CommonModules/ОбсужденияСлужебныйКлиент/Module.bsl @@ -0,0 +1,21 @@ +#Область СлужебныйПрограммныйИнтерфейс + +Функция ОбсужденияПодключены() Экспорт + + Возврат СистемаВзаимодействия.ИнформационнаяБазаЗарегистрирована(); + +КонецФункции + +Процедура ПоказатьПодключение() Экспорт + + ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку("e1cib/app/Обработка.ПодключениеОбсуждений") + +КонецПроцедуры + +Процедура ПоказатьОтключение() Экспорт + + ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку("e1cib/command/Обработка.ПодключениеОбсуждений.Команда.ОтключениеОбсуждений"); + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/УправлениеПечатьюКлиентПовтИсп/УправлениеПечатьюКлиентПовтИсп.mdo b/SSL/src/CommonModules/ОбсужденияСлужебныйКлиент/ОбсужденияСлужебныйКлиент.mdo similarity index 51% rename from SSL/src/CommonModules/УправлениеПечатьюКлиентПовтИсп/УправлениеПечатьюКлиентПовтИсп.mdo rename to SSL/src/CommonModules/ОбсужденияСлужебныйКлиент/ОбсужденияСлужебныйКлиент.mdo index 7ab3c1629..0cdecf6b0 100644 --- a/SSL/src/CommonModules/УправлениеПечатьюКлиентПовтИсп/УправлениеПечатьюКлиентПовтИсп.mdo +++ b/SSL/src/CommonModules/ОбсужденияСлужебныйКлиент/ОбсужденияСлужебныйКлиент.mdo @@ -1,11 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> -<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="c7f817ee-9f6a-454c-95a0-b279fd08055e"> - <name>УправлениеПечатьюКлиентПовтИсп</name> +<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="59b34b58-6ac9-467e-963b-0cccbf098797"> + <name>ОбсужденияСлужебныйКлиент</name> <synonym> <key>ru</key> - <value>Управление печатью клиент повт исп</value> + <value>Обсуждения служебный клиент</value> </synonym> <clientManagedApplication>true</clientManagedApplication> <clientOrdinaryApplication>true</clientOrdinaryApplication> - <returnValuesReuse>DuringSession</returnValuesReuse> </mdclass:CommonModule> diff --git a/SSL/src/CommonModules/ОбщегоНазначения/Module.bsl b/SSL/src/CommonModules/ОбщегоНазначения/Module.bsl index 22190bf01..ce5dc1b6a 100644 --- a/SSL/src/CommonModules/ОбщегоНазначения/Module.bsl +++ b/SSL/src/CommonModules/ОбщегоНазначения/Module.bsl @@ -932,47 +932,22 @@ КонецЦикла; ДинамическийСписок = Форма[Список.ПутьКДанным]; - РежимОтладки = ОбщегоНазначенияКлиентСервер.РежимОтладки(); - - Если РежимОтладки Тогда - Язык = ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка(); - РасположениеСписка = СтрШаблон("%1.%2", Форма.ИмяФормы, Список.ПутьКДанным); - КонецЕсли; - ТекстЗапроса = СтруктураПараметров.ТекстЗапроса; Если Не ПустаяСтрока(ТекстЗапроса) Тогда ДинамическийСписок.ТекстЗапроса = ТекстЗапроса; - - Если РежимОтладки Тогда - ИмяСобытия = НСтр("ru = 'Установка свойств динамического списка.Текст запроса'", Язык); - ЗаписьЖурналаРегистрации(ИмяСобытия, УровеньЖурналаРегистрации.Информация,, РасположениеСписка, ТекстЗапроса); - КонецЕсли; КонецЕсли; ОсновнаяТаблица = СтруктураПараметров.ОсновнаяТаблица; Если Не ПустаяСтрока(ОсновнаяТаблица) Тогда ДинамическийСписок.ОсновнаяТаблица = ОсновнаяТаблица; - - Если РежимОтладки Тогда - ИмяСобытия = НСтр("ru = 'Установка свойств динамического списка.Основная таблица'", Язык); - ЗаписьЖурналаРегистрации(ИмяСобытия, УровеньЖурналаРегистрации.Информация,, РасположениеСписка, ОсновнаяТаблица); - КонецЕсли; КонецЕсли; ДинамическоеСчитываниеДанных = СтруктураПараметров.ДинамическоеСчитываниеДанных; Если ТипЗнч(ДинамическоеСчитываниеДанных) = Тип("Булево") Тогда ДинамическийСписок.ДинамическоеСчитываниеДанных = ДинамическоеСчитываниеДанных; - - Если РежимОтладки Тогда - ИмяСобытия = НСтр("ru = 'Установка свойств динамического списка.Динамическое считывание данных'", Язык); - ЗаписьЖурналаРегистрации(ИмяСобытия, - УровеньЖурналаРегистрации.Информация,, - РасположениеСписка, - ДинамическоеСчитываниеДанных); - КонецЕсли; КонецЕсли; КонецПроцедуры @@ -1332,7 +1307,7 @@ КонецЕсли; // Вычитаем исключаемые поля - СравниваемыеКолонки = ОбщегоНазначенияКлиентСервер.СократитьМассив(СравниваемыеКолонки, СтрРазделить(ИсключаяКолонки, ",")); + СравниваемыеКолонки = ОбщегоНазначенияКлиентСервер.РазностьМассивов(СравниваемыеКолонки, СтрРазделить(ИсключаяКолонки, ",")); КонецЕсли; Если УчитыватьПоследовательностьСтрок Тогда @@ -1642,8 +1617,6 @@ Если ТипЗнч(Данные) = Тип("Массив") Тогда Массив = Новый Массив; - Индекс = Данные.Количество() - 1; - Для каждого Значение Из Данные Цикл Если ТипЗнч(Значение) = Тип("Структура") @@ -1819,6 +1792,62 @@ КонецФункции +// Создает временный каталог. После окончания работы с временным каталогом его необходимо удалить +// с помощью ОбщегоЗначения.УдалитьВременныйКаталог. +// +// Параметры: +// Расширение - Строка - Расширение каталога, которое идентифицирует назначение временного каталога +// и подсистему, которая его создала. +// Рекомендуется указывать на английском языке. +// +// Возвращаемое значение: +// Строка - Полный путь к каталогу с разделителем пути. +// +Функция СоздатьВременныйКаталог(Знач Расширение = "") Экспорт + + ПутьККаталогу = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ПолучитьИмяВременногоФайла(Расширение)); + СоздатьКаталог(ПутьККаталогу); + Возврат ПутьККаталогу; + +КонецФункции + +// Удаляет временный каталог вместе с его содержимым, если возможно. +// Если временный каталог не может быть удален (например, он занят каким-то процессом), +// то в журнал регистрации записывается соответствующее предупреждение, а процедура завершается. +// +// Для совместного использования с ОбщегоЗначения.СоздатьВременныйКаталог, +// после окончания работы с временным каталогом. +// +// Параметры: +// ПутьККаталогу - Строка - Полный путь к временному каталогу. +// +Процедура УдалитьВременныйКаталог(Знач ПутьККаталогу) Экспорт + + ФайлИнфо = Новый Файл(ПолучитьИмяВременногоФайла()); + + Если Не СтрНачинаетсяС(ПутьККаталогу, ФайлИнфо.Путь) Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Неверное значение параметра ПутьККаталогу в ОбщегоНазначения.УдалитьВременныйКаталог: + |Каталог не является временным ""%1""'"), ПутьККаталогу); + КонецЕсли; + + Попытка + УдалитьФайлы(ПутьККаталогу); + Исключение + ЗаписьЖурналаРегистрации( + НСтр("ru = 'Стандартные подсистемы'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Предупреждение, + , + , + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось удалить временный каталог ""%1"" по причине: + |%2'"), + ПутьККаталогу, + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()))); + КонецПопытки; + +КонецПроцедуры + // Переводит параметры сеанса в состояние "Не установлено". // // Параметры: @@ -2103,14 +2132,30 @@ Таймаут = ПараметрыПодключения.Таймаут; Если ДелатьКонтрольныйВызов И Таймаут <> Неопределено И Таймаут > 20 Тогда - ПараметрыПодключения.Таймаут = 3; + ПараметрыПодключения.Таймаут = 7; WSПроксиPing = РегистрыСведений.КэшПрограммныхИнтерфейсов.ВнутренняяWSПрокси(ПараметрыПодключения); Попытка WSПроксиPing.Ping(); Исключение + + АдресТочкиПодключения = WSПроксиPing.ТочкаПодключения.Местоположение; + РезультатДиагностики = ОбщегоНазначенияКлиентСервер.ДиагностикаСоединения(АдресТочкиПодключения); + + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось проверить доступность web-сервиса + |%1 + |по причине: + |%2 + | + |Результат диагностики: + |%3'"), + ПараметрыПодключения.АдресWSDL, + КраткоеПредставлениеОшибки(ИнформацияОбОшибке()), + РезультатДиагностики.ОписаниеОшибки); + ЗаписьЖурналаРегистрации(НСтр("ru = 'WSПрокси'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - ВызватьИсключение; + УровеньЖурналаРегистрации.Ошибка,,, ТекстОшибки); + ВызватьИсключение ТекстОшибки; КонецПопытки; ПараметрыПодключения.Таймаут = Таймаут; КонецЕсли; @@ -2143,16 +2188,21 @@ // Определяет доступность объекта метаданных по функциональным опциям. // // Параметры: -// ОбъектМетаданных - ОбъектМетаданных - проверяемый объект метаданных. +// ОбъектМетаданных - ОбъектМетаданных, Строка - проверяемый объект метаданных. // // Возвращаемое значение: // Булево - Истина, если объект доступен. // -Функция ОбъектМетаданныхДоступенПоФункциональнымОпциям(ОбъектМетаданных) Экспорт +Функция ОбъектМетаданныхДоступенПоФункциональнымОпциям(Знач ОбъектМетаданных) Экспорт Если ОбъектМетаданных = Неопределено Тогда Возврат Ложь; КонецЕсли; - Возврат ОбщегоНазначенияПовтИсп.ДоступностьОбъектовПоОпциям()[ОбъектМетаданных.ПолноеИмя()] <> Ложь; + Если ТипЗнч(ОбъектМетаданных) <> Тип("Строка") Тогда + ПолноеИмя = ОбъектМетаданных.ПолноеИмя(); + Иначе + ПолноеИмя = ОбъектМетаданных; + КонецЕсли; + Возврат ОбщегоНазначенияПовтИсп.ДоступностьОбъектовПоОпциям().Получить(ПолноеИмя) <> Ложь; КонецФункции // См. ОбщегоНазначенияПереопределяемый.ПриОпределенииОбщихПараметровБазовойФункциональности. @@ -2218,8 +2268,8 @@ Функция ЭтоАвтономноеРабочееМесто() Экспорт Если ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда - МодульОбменДаннымиПовтИсп = ОбщийМодуль("ОбменДаннымиПовтИсп"); - Возврат МодульОбменДаннымиПовтИсп.ЭтоАвтономноеРабочееМесто(); + МодульОбменДаннымиСервер = ОбщийМодуль("ОбменДаннымиСервер"); + Возврат МодульОбменДаннымиСервер.ЭтоАвтономноеРабочееМесто(); КонецЕсли; Возврат Ложь; @@ -2402,7 +2452,7 @@ ИначеЕсли ВеличинаИнтервалаВДнях >= 1 Тогда ОписаниеИнтервала = Формат(ВеличинаИнтервалаВДнях, "ЧДЦ=0") + " " + ПользователиСлужебныйКлиентСервер.ПредметЦелогоЧисла(ВеличинаИнтервалаВДнях, - "Л = ru_RU", НСтр("ru = 'день,дня,дней,,,,,,0'")); + "", НСтр("ru = 'день,дня,дней,,,,,,0'")); Иначе ОписаниеИнтервала = НСтр("ru = 'менее одного дня'"); КонецЕсли; @@ -2822,7 +2872,7 @@ // Возвращает менеджер объекта по ссылке на объект. // Ограничение: не обрабатываются точки маршрутов бизнес-процессов. -// См. так же МенеджерОбъектаПоПолномуИмени. +// См. также ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени. // // Параметры: // Ссылка - ЛюбаяСсылка - объект, менеджер которого требуется получить. @@ -2831,7 +2881,7 @@ // СправочникМенеджер, ДокументМенеджер, ОбработкаМенеджер, РегистрСведенийМенеджер - менеджер объекта. // // Пример: -// МенеджерСправочника = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(СсылкаНаОрганизацию); +// МенеджерСправочника = ОбщегоНазначения.МенеджерОбъектаПоСсылке(СсылкаНаОрганизацию); // ПустаяСсылка = МенеджерСправочника.ПустаяСсылка(); // Функция МенеджерОбъектаПоСсылке(Ссылка) Экспорт @@ -4310,7 +4360,6 @@ БезопасноеХранилищеДанных = РегистрыСведений.БезопасноеХранилищеДанных.СоздатьМенеджерЗаписи(); КонецЕсли; - Отбор = Новый Структура("Владелец", Владелец); БезопасноеХранилищеДанных.Владелец = Владелец; БезопасноеХранилищеДанных.Прочитать(); Если Данные <> Неопределено Тогда @@ -4346,28 +4395,27 @@ // Параметры: // Владелец - ПланОбменаСсылка, СправочникСсылка, Строка - ссылка на объект информационной базы, // представляющий объект-владелец сохраняемого пароля или строка до 128 символов. -// // Ключи - Строка - Содержит список имен сохраненных данных, указанных через запятую. // ОбщиеДанные - Булево - Истина, если требуется в модели сервиса получить данные из общих данных в разделенном режиме. // // Возвращаемое значение: -// Произвольный, Структура - Данные из безопасного хранилища. Если указан один ключ, +// Произвольный, Структура, Неопределенно - Данные из безопасного хранилища. Если указан один ключ, // то возвращается его значение, иначе структура. // Если данные отсутствуют - Неопределенно. // // Пример: -//Процедура ПриЧтенииНаСервере(ТекущийОбъект) -// -// Если ТекущийПользовательМожетИзменятьПароль Тогда -// УстановитьПривилегированныйРежим(Истина); -// Логин = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(ТекущийОбъект.Ссылка, "Логин"); -// Пароль = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(ТекущийОбъект.Ссылка); -// УстановитьПривилегированныйРежим(Ложь); -// Иначе -// Элементы.ГруппаЛогинИПароль.Видимость = Ложь; -// КонецЕсли; -// -//КонецПроцедуры +// Процедура ПриЧтенииНаСервере(ТекущийОбъект) +// +// Если ТекущийПользовательМожетИзменятьПароль Тогда +// УстановитьПривилегированныйРежим(Истина); +// Логин = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(ТекущийОбъект.Ссылка, "Логин"); +// Пароль = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(ТекущийОбъект.Ссылка); +// УстановитьПривилегированныйРежим(Ложь); +// Иначе +// Элементы.ГруппаЛогинИПароль.Видимость = Ложь; +// КонецЕсли; +// +// КонецПроцедуры // Функция ПрочитатьДанныеИзБезопасногоХранилища(Владелец, Ключи = "Пароль", ОбщиеДанные = Неопределено) Экспорт @@ -4408,21 +4456,20 @@ // Параметры: // Владелец - ПланОбменаСсылка, СправочникСсылка, Строка - ссылка на объект информационной базы, // представляющий объект-владелец сохраняемого пароля или строка до 128 символов. -// // Ключи - Строка - Содержит список имен удаляемых данных, указанных через запятую. // Неопределенно - удаляет все данные. // // Пример: -//Процедура ПередУдалением(Отказ) -// -// // Проверка значения свойства ОбменДанными.Загрузка отсутствует, так как удалять данные -// // из безопасного хранилища нужно даже при удалении объекта при обмене данными. -// -// УстановитьПривилегированныйРежим(Истина); -// ОбщегоНазначения.УдалитьДанныеИзБезопасногоХранилища(Ссылка); -// УстановитьПривилегированныйРежим(Ложь); -// -//КонецПроцедуры +// Процедура ПередУдалением(Отказ) +// +// // Проверка значения свойства ОбменДанными.Загрузка отсутствует, так как удалять данные +// // из безопасного хранилища нужно даже при удалении объекта при обмене данными. +// +// УстановитьПривилегированныйРежим(Истина); +// ОбщегоНазначения.УдалитьДанныеИзБезопасногоХранилища(Ссылка); +// УстановитьПривилегированныйРежим(Ложь); +// +// КонецПроцедуры // Процедура УдалитьДанныеИзБезопасногоХранилища(Владелец, Ключи = Неопределено) Экспорт @@ -4778,22 +4825,22 @@ КонецПроцедуры // Выполняет произвольный алгоритм на встроенном языке 1С:Предприятия, предварительно устанавливая -// безопасный режим выполнения кода и безопасный режим разделения данных для всех разделителей, -// присутствующих в составе конфигурации. В результате при выполнении алгоритма: -// - игнорируются попытки установки привилегированного режима, -// - запрещаются все внешние (по отношению к платформе 1С:Предприятие) действия (COM, -// загрузка внешних компонент, запуск внешних приложений и команд операционной системы, -// доступ к файловой системе и Интернет-ресурсам), -// - запрещается отключение использования разделителей сеанса, -// - запрещается изменение значений разделителей сеанса (если разделение данным разделителем не -// является условно выключенным), -// - запрещается изменение объектов, которые управляют состоянием условного разделения. +// безопасный режим выполнения кода и безопасный режим разделения данных для всех разделителей, +// присутствующих в составе конфигурации. // // Параметры: -// Алгоритм - Строка - содержащая произвольный алгоритм на встроенном языке 1С:Предприятия. -// Параметры - Произвольный - в качестве значения данного параметра может быть передано значение, -// которое требуется для выполнения алгоритма (при этом в тексте алгоритма обращение к данному -// значению должно осуществляться как к имени переменной Параметры). +// Алгоритм - Строка - алгоритм на встроенном языке 1С:Предприятия. +// Параметры - Произвольный - контекст, который требуется для выполнения алгоритмы. +// В тексте алгоритма обращение к контексту должно происходить по имени "Параметры". +// Например, выражение "Параметры.Значение1 = Параметры.Значение2" обращается к значениям +// "Значение1" и "Значение2" переданные в Параметры, как свойства. +// +// Пример: +// +// Параметры = Новый Структура; +// Параметры.Вставить("Значение1", 1); +// Параметры.Вставить("Значение2", 10); +// ОбщегоНазначения.ВыполнитьВБезопасномРежиме("Параметры.Значение1 = Параметры.Значение2", Параметры); // Процедура ВыполнитьВБезопасномРежиме(Знач Алгоритм, Знач Параметры = Неопределено) Экспорт @@ -4817,26 +4864,29 @@ КонецПроцедуры // Вычисляет переданное выражение, предварительно устанавливая безопасный режим выполнения кода -// и безопасный режим разделения данных для всех разделителей, присутствующих в составе конфигурации. -// В результате при вычислении выражения: -// - игнорируются попытки установки привилегированного режима, -// - запрещаются все внешние (по отношению к платформе 1С:Предприятие) действия (COM, -// загрузка внешних компонент, запуск внешних приложений и команд операционной системы, -// доступ к файловой системе и Интернет-ресурсам), -// - запрещается отключение использования разделителей сеанса, -// - запрещается изменение значений разделителей сеанса (если разделение данным разделителем не -// является условно выключенным), -// - запрещается изменение объектов, которые управляют состоянием условного разделения. +// и безопасный режим разделения данных для всех разделителей, присутствующих в составе конфигурации. // // Параметры: -// Выражение - Строка - выражение, которое требуется вычислить. Например, "МойМодуль.МояФункция(Параметры)". -// Параметры - Произвольный - в качестве значения данного параметра может быть передано значение, -// которое требуется для вычисления выражения (при этом в тексте выражения обращение к данному -// значению должно осуществляться как к имени переменной Параметры). +// Выражение - Строка - выражение на встроенном языке 1С:Предприятия. +// Параметры - Произвольный - контекст, который требуется для вычисления выражения. +// В тексте выражения обращение к контексту должно происходить по имени "Параметры". +// Например, выражение "Параметры.Значение1 = Параметры.Значение2" обращается к значениям +// "Значение1" и "Значение2" переданные в Параметры, как свойства. // // Возвращаемое значение: // Произвольный - результат вычисления выражения. // +// Пример: +// +// // Пример 1 +// Параметры = Новый Структура; +// Параметры.Вставить("Значение1", 1); +// Параметры.Вставить("Значение2", 10); +// Результат = ОбщегоНазначения.ВычислитьВБезопасномРежиме("Параметры.Значение1 = Параметры.Значение2", Параметры); +// +// // Пример 2 +// Результат = ОбщегоНазначения.ВычислитьВБезопасномРежиме("СтандартныеПодсистемыСервер.ВерсияБиблиотеки()"); +// Функция ВычислитьВБезопасномРежиме(Знач Выражение, Знач Параметры = Неопределено) Экспорт УстановитьБезопасныйРежим(Истина); @@ -4889,39 +4939,63 @@ Если Не МакетСуществует(ПолноеИмяМакета) Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Попытка подключить внешнюю компоненту на сервере не из макета %1'"), ПолноеИмяМакета); + НСтр("ru = 'Не удалось подключить внешнюю компоненту ""%1"" на сервере + |из %2 + |по причине: + |Подключение на сервере не из макета запрещено'"), + Идентификатор, + ПолноеИмяМакета); КонецЕсли; Местоположение = ПолноеИмяМакета; - - // Генерация уникального имени - СимволическоеИмя = "С" + СтрЗаменить(Строка(Новый УникальныйИдентификатор), "-", ""); + СимволическоеИмя = Идентификатор + "SymbolicName"; Если ПодключитьВнешнююКомпоненту(Местоположение, СимволическоеИмя) Тогда Попытка ПодключаемыйМодуль = Новый("AddIn." + СимволическоеИмя + "." + Идентификатор); + Если ПодключаемыйМодуль = Неопределено Тогда + ВызватьИсключение НСтр("ru = 'Оператор Новый вернул Неопределено'"); + КонецЕсли; Исключение + ПодключаемыйМодуль = Неопределено; + ТекстОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + КонецПопытки; + + Если ПодключаемыйМодуль = Неопределено Тогда + + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось создать объект внешней компоненты ""%1"", подключенной на сервере + |из макета ""%2"", + |по причине: + |%3'"), + Идентификатор, + Местоположение, + ТекстОшибки); ЗаписьЖурналаРегистрации( - НСтр("ru = 'Создание экземпляра внешней компоненты на сервере'", + НСтр("ru = 'Подключение внешней компоненты на сервере'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка,,, - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ТекстОшибки); - ПодключаемыйМодуль = Неопределено; - - КонецПопытки; + КонецЕсли; Иначе - ТекстОшибки = НСтр("ru = 'При подключении внешней компоненты %1 на сервере произошла ошибка.'"); + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось подключить внешнюю компоненту ""%1"" на сервере + |из макета ""%2"" + |по причине: + |Метод ПодключитьВнешнююКомпоненту вернул Ложь.'"), + Идентификатор, + Местоположение); ЗаписьЖурналаРегистрации( НСтр("ru = 'Подключение внешней компоненты на сервере'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка,,, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибки, Идентификатор)); + ТекстОшибки); КонецЕсли; @@ -6098,8 +6172,6 @@ НаборЗаписейОригинала = Менеджер.СоздатьНаборЗаписей(); КонецЕсли; - ВидОшибки = ""; - Если ВнутренняяТранзакция Тогда НачатьТранзакцию(); КонецЕсли; @@ -6153,7 +6225,7 @@ Попытка Блокировка.Заблокировать(); Исключение - ВидОшибки = "БлокировкаДляРегистра"; + // Вид ошибки "БлокировкаДляРегистра". ВызватьИсключение; КонецПопытки; КонецЕсли; @@ -6169,12 +6241,10 @@ ЗаписьДубля = НаборЗаписейДубля[0]; // Куда пишем? - ЗаписьОригиналаЭтоНовый = Ложь; Если ТребуетсяДваНабора Тогда // Пишем в набор с другими измерениями. НаборЗаписейОригинала.Прочитать(); Если НаборЗаписейОригинала.Количество() = 0 Тогда - ЗаписьОригиналаЭтоНовый = Истина; ЗаписьОригинала = НаборЗаписейОригинала.Добавить(); ЗаполнитьЗначенияСвойств(ЗаписьОригинала, ЗаписьДубля); ЗаполнитьЗначенияСвойств(ЗаписьОригинала, ЗначенияИзмеренийОригинала); @@ -6192,14 +6262,12 @@ ЗначениеРеквизитаВОригинале = ЗаписьОригинала[КлючЗначение.Ключ]; Если ЗначениеРеквизитаВОригинале = Дубль Тогда ЗаписьОригинала[КлючЗначение.Ключ] = Оригинал; - Модифицированность = Истина; КонецЕсли; КонецЦикла; Для Каждого КлючЗначение Из Информация.Реквизиты Цикл ЗначениеРеквизитаВОригинале = ЗаписьОригинала[КлючЗначение.Ключ]; Если ЗначениеРеквизитаВОригинале = Дубль Тогда ЗаписьОригинала[КлючЗначение.Ключ] = Оригинал; - Модифицированность = Истина; КонецЕсли; КонецЦикла; @@ -6213,7 +6281,7 @@ Попытка ЗаписатьОбъект(НаборЗаписейДубля, ПараметрыВыполнения); Исключение - ВидОшибки = "УдалитьНаборДубля"; + // Вид ошибки "УдалитьНаборДубля". ВызватьИсключение; КонецПопытки; КонецЕсли; @@ -6223,7 +6291,7 @@ Попытка ЗаписатьОбъект(НаборЗаписейОригинала, ПараметрыВыполнения); Исключение - ВидОшибки = "ЗаписатьНаборОригинала"; + // Вид ошибки "ЗаписатьНаборОригинала". ВызватьИсключение; КонецПопытки; КонецЕсли; @@ -6393,8 +6461,6 @@ Удаляемые = Новый Массив; - ВидОшибки = ""; - ЛокальнаяТранзакция = Не ТранзакцияАктивна(); Если ЛокальнаяТранзакция Тогда НачатьТранзакцию(); @@ -6477,8 +6543,6 @@ Процедура ДобавитьРезультатыЗаменыИзмененныхОбъектов(Результат, ТаблицаПовторногоПоиска) - ТипКлючЗаписи = ОписаниеТипаКлючиЗаписей(); - Фильтр = Новый Структура("ТипОшибки, Ссылка, ОбъектОшибки", ""); Для Каждого Строка Из ТаблицаПовторногоПоиска Цикл Тест = Новый Структура("ВспомогательныеДанные", Ложь); @@ -6530,31 +6594,31 @@ ИначеЕсли МетаПериод = Периодичность.Год Тогда ДанныеИзмерения.Тип = Новый ОписаниеТипов("Дата"); ДанныеИзмерения.Представление = НСтр("ru='Период'"); - ДанныеИзмерения.Формат = "Л=ru_RU; ДФ='yyyy ""г.""'; ДП='Дата не задана'"; + ДанныеИзмерения.Формат = "ДФ='yyyy ""г.""'; ДП='Дата не задана'"; ОписаниеИзмерений.Вставить("Период", ДанныеИзмерения); ИначеЕсли МетаПериод = Периодичность.День Тогда ДанныеИзмерения.Тип = Новый ОписаниеТипов("Дата"); ДанныеИзмерения.Представление = НСтр("ru='Период'"); - ДанныеИзмерения.Формат = "Л=ru_RU; ДЛФ=D; ДП='Дата не задана'"; + ДанныеИзмерения.Формат = "ДЛФ=D; ДП='Дата не задана'"; ОписаниеИзмерений.Вставить("Период", ДанныеИзмерения); ИначеЕсли МетаПериод = Периодичность.Квартал Тогда ДанныеИзмерения.Тип = Новый ОписаниеТипов("Дата"); ДанныеИзмерения.Представление = НСтр("ru='Период'"); - ДанныеИзмерения.Формат = "Л=ru_RU; ДФ='к ""квартал ""yyyy ""г.""'; ДП='Дата не задана'"; + ДанныеИзмерения.Формат = "ДФ='к ""квартал ""yyyy ""г.""'; ДП='Дата не задана'"; ОписаниеИзмерений.Вставить("Период", ДанныеИзмерения); ИначеЕсли МетаПериод = Периодичность.Месяц Тогда ДанныеИзмерения.Тип = Новый ОписаниеТипов("Дата"); ДанныеИзмерения.Представление = НСтр("ru='Период'"); - ДанныеИзмерения.Формат = "Л=ru_RU; ДФ='ММММ yyyy ""г.""'; ДП='Дата не задана'"; + ДанныеИзмерения.Формат = "ДФ='ММММ yyyy ""г.""'; ДП='Дата не задана'"; ОписаниеИзмерений.Вставить("Период", ДанныеИзмерения); ИначеЕсли МетаПериод = Периодичность.Секунда Тогда ДанныеИзмерения.Тип = Новый ОписаниеТипов("Дата"); ДанныеИзмерения.Представление = НСтр("ru='Период'"); - ДанныеИзмерения.Формат = "Л=ru_RU; ДЛФ=DT; ДП='Дата не задана'"; + ДанныеИзмерения.Формат = "ДЛФ=DT; ДП='Дата не задана'"; ОписаниеИзмерений.Вставить("Период", ДанныеИзмерения); КонецЕсли; @@ -7043,8 +7107,6 @@ УстановитьПривилегированныйРежим(Ложь); - БылиОшибки = Результат.ЕстьОшибки; - // 2. Замена везде до первой ошибки. Результат.ЕстьОшибки = Ложь; diff --git a/SSL/src/CommonModules/ОбщегоНазначенияКлиент/Module.bsl b/SSL/src/CommonModules/ОбщегоНазначенияКлиент/Module.bsl index 392f923d2..89f53cbd0 100644 --- a/SSL/src/CommonModules/ОбщегоНазначенияКлиент/Module.bsl +++ b/SSL/src/CommonModules/ОбщегоНазначенияКлиент/Module.bsl @@ -686,6 +686,8 @@ КонецПроцедуры +#Область ВнешниеКомпоненты + //////////////////////////////////////////////////////////////////////////////// // Процедуры и функции для подключения и установки внешних компонент из макетов конфигурации. @@ -861,6 +863,10 @@ КонецПроцедуры +#КонецОбласти + +#Область ЗапускВнешнихПриложений + //////////////////////////////////////////////////////////////////////////////// // Процедуры и функции для работы с внешними приложениями. @@ -967,6 +973,7 @@ Попытка #Если ТолстыйКлиентОбычноеПриложение Тогда + // Особенность платформы: ПерейтиПоНавигационнойСсылке не доступен в толстом клиенте обычного приложения. ЗапуститьПриложение(НавигационнаяСсылка); #Иначе ПерейтиПоНавигационнойСсылке(НавигационнаяСсылка); @@ -1064,6 +1071,37 @@ КонецПроцедуры +#КонецОбласти + +#Область ВременныеФайлы + +//////////////////////////////////////////////////////////////////////////////// +// Процедуры и функции для работы с временными файлами. + +// Получение имени временного каталога. +// +// Параметры: +// Оповещение - ОписаниеОповещения - оповещение о результате получения. +// * ИмяКаталога - Строка - путь к созданному каталогу. +// * ДополнительныеПараметры - Структура - значение, которое было указано при создании объекта ОписаниеОповещения. +// Расширение - Строка - суффикс в имени каталога, который поможет идентифицировать каталог при анализе. +// +Процедура СоздатьВременныйКаталог(Знач Оповещение, Расширение = "") Экспорт + + Контекст = Новый Структура; + Контекст.Вставить("Оповещение", Оповещение); + Контекст.Вставить("Расширение", Расширение); + + Оповещение = Новый ОписаниеОповещения("СоздатьВременныйКаталогПослеПроверкиРасширенияРаботыСФайлами", + ОбщегоНазначенияСлужебныйКлиент, Контекст); + + ТекстПредложения = НСтр("ru = 'Для создания временного каталога необходимо установить расширение работы с файлами.'"); + ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(Оповещение, ТекстПредложения, Ложь); + +КонецПроцедуры + +#КонецОбласти + #Область УстаревшиеПроцедурыИФункции // Устарела. Следует использовать: @@ -1080,6 +1118,7 @@ Процедура ПерейтиПоСсылке(Ссылка) Экспорт #Если ТолстыйКлиентОбычноеПриложение Тогда + // Особенность платформы: ПерейтиПоНавигационнойСсылке не доступен в толстом клиенте обычного приложения. ЗапуститьПриложение(Ссылка); #Иначе ПерейтиПоНавигационнойСсылке(Ссылка); diff --git a/SSL/src/CommonModules/ОбщегоНазначенияКлиентПереопределяемый/Module.bsl b/SSL/src/CommonModules/ОбщегоНазначенияКлиентПереопределяемый/Module.bsl index f5e0f2559..b211ae371 100644 --- a/SSL/src/CommonModules/ОбщегоНазначенияКлиентПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ОбщегоНазначенияКлиентПереопределяемый/Module.bsl @@ -133,7 +133,7 @@ // // Пример: // Для того чтобы в начале заголовка программы вывести название текущего проекта, следует определить параметр -// ТекущийПроект в процедуре ОбщегоНазначенияПереопределяемый.ПараметрыРаботыКлиента и вписать следующий код: +// ТекущийПроект в процедуре ОбщегоНазначенияПереопределяемый.ПриДобавленииПараметровРаботыКлиента и вписать код: // // Если ПриЗапуске Тогда // Возврат; diff --git a/SSL/src/CommonModules/ОбщегоНазначенияКлиентПовтИсп/Module.bsl b/SSL/src/CommonModules/ОбщегоНазначенияКлиентПовтИсп/Module.bsl index a93aba7b9..758262b24 100644 --- a/SSL/src/CommonModules/ОбщегоНазначенияКлиентПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ОбщегоНазначенияКлиентПовтИсп/Module.bsl @@ -28,7 +28,7 @@ КонецФункции -// См. ОбщегоНазначенияКлиентСервер.ЭтоВебКлиентПодMacOS(). +// См. ОбщегоНазначенияКлиентСервер.ЭтоВебКлиентПодMacOS. Функция ЭтоВебКлиентПодMacOS() Экспорт #Если Не ВебКлиент Тогда @@ -44,7 +44,7 @@ КонецФункции -// См. ОбщегоНазначенияКлиент.ТипПлатформыКлиента(). +// См. ОбщегоНазначенияКлиент.ТипПлатформыКлиента. Функция ТипПлатформыКлиента() Экспорт СистемнаяИнфо = Новый СистемнаяИнформация; Возврат СистемнаяИнфо.ТипПлатформы; diff --git a/SSL/src/CommonModules/ОбщегоНазначенияКлиентСервер/Module.bsl b/SSL/src/CommonModules/ОбщегоНазначенияКлиентСервер/Module.bsl index 69a0dbd69..aee2e322d 100644 --- a/SSL/src/CommonModules/ОбщегоНазначенияКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ОбщегоНазначенияКлиентСервер/Module.bsl @@ -348,7 +348,7 @@ КонецПроцедуры -// Дополняет соответствие значениями из другой структуры. +// Дополняет соответствие значениями из другого соответствия. // // Параметры: // Приемник - Соответствие - коллекция, в которую будут добавляться новые значения. @@ -559,10 +559,10 @@ // Пример: // //А = [1, 3, 5, 7]; // //В = [3, 7, 9]; -// Результат = СократитьМассив(А, В); +// Результат = РазностьМассивов(А, В); // //Результат = [1, 5]; // -Функция СократитьМассив(Массив, МассивВычитания) Экспорт +Функция РазностьМассивов(Массив, МассивВычитания) Экспорт Результат = Новый Массив; @@ -649,6 +649,12 @@ Перем Приемник; ТипИсточника = ТипЗнч(Источник); + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + Если ТипИсточника = Тип("ТаблицаЗначений") Тогда + Возврат Источник.Скопировать(); + КонецЕсли; +#КонецЕсли Если ТипИсточника = Тип("Структура") Тогда Приемник = СкопироватьСтруктуру(Источник); ИначеЕсли ТипИсточника = Тип("Соответствие") Тогда @@ -657,10 +663,6 @@ Приемник = СкопироватьМассив(Источник); ИначеЕсли ТипИсточника = Тип("СписокЗначений") Тогда Приемник = СкопироватьСписокЗначений(Источник); -#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда - ИначеЕсли ТипИсточника = Тип("ТаблицаЗначений") Тогда - Приемник = Источник.Скопировать(); -#КонецЕсли Иначе Приемник = Источник; КонецЕсли; @@ -1391,7 +1393,7 @@ Схема = НРег(Лев(СтрокаURI, Позиция - 1)); СтрокаURI = Сред(СтрокаURI, Позиция + 3); КонецЕсли; - + // Строка соединения и путь на сервере. СтрокаСоединения = СтрокаURI; ПутьНаСервере = ""; @@ -1400,7 +1402,7 @@ ПутьНаСервере = Сред(СтрокаСоединения, Позиция + 1); СтрокаСоединения = Лев(СтрокаСоединения, Позиция - 1); КонецЕсли; - + // Информация пользователя и имя сервера. СтрокаАвторизации = ""; ИмяСервера = СтрокаСоединения; @@ -2423,13 +2425,10 @@ Возврат ПредопределенноеЗначение(ПолноеИмяПредопределенного); КонецЕсли; - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Предопределенное значение ""%1"" не найдено.'"), ПолноеИмяПредопределенного); - // Разбор полного имени предопределенного. - ЧастиПолногоИмени = СтрРазделить(ПолноеИмяПредопределенного, "."); + ЧастиПолногоИмени = СтрРазделить(ПолноеИмяПредопределенного, "."); Если ЧастиПолногоИмени.Количество() <> 3 Тогда - ВызватьИсключение ТекстОшибки; + ВызватьИсключение ТекстОшибкиПредопределенноеЗначениеНеНайдено(ПолноеИмяПредопределенного); КонецЕсли; ПолноеИмяОбъектаМетаданных = ВРег(ЧастиПолногоИмени[0] + "." + ЧастиПолногоИмени[1]); @@ -2445,23 +2444,23 @@ // Если ошибка в имени метаданных. Если ПредопределенныеЗначения = Неопределено Тогда - ВызватьИсключение ТекстОшибки; + ВызватьИсключение ТекстОшибкиПредопределенноеЗначениеНеНайдено(ПолноеИмяПредопределенного); КонецЕсли; // Получение результата из кэша. - ПредопределенноеЗначение = ПредопределенныеЗначения.Получить(ИмяПредопределенного); + Результат = ПредопределенныеЗначения.Получить(ИмяПредопределенного); // Если предопределенного нет в метаданных. - Если ПредопределенноеЗначение = Неопределено Тогда - ВызватьИсключение ТекстОшибки; + Если Результат = Неопределено Тогда + ВызватьИсключение ТекстОшибкиПредопределенноеЗначениеНеНайдено(ПолноеИмяПредопределенного); КонецЕсли; // Если предопределенный есть в метаданных, но не создан в ИБ. - Если Null = ПредопределенноеЗначение Тогда + Если Результат = Null Тогда Возврат Неопределено; КонецЕсли; - Возврат ПредопределенноеЗначение; + Возврат Результат; КонецФункции @@ -2672,9 +2671,7 @@ // Функция КлиентПодключенЧерезВебСервер() Экспорт -#Если Клиент Или ВнешнееСоединение Тогда - СтрокаСоединенияИнформационнойБазы = СтрокаСоединенияИнформационнойБазы(); -#Иначе +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Тогда УстановитьПривилегированныйРежим(Истина); СтрокаСоединенияИнформационнойБазы = СтандартныеПодсистемыСервер.ПараметрыКлиентаНаСервере().Получить("СтрокаСоединенияИнформационнойБазы"); @@ -2682,6 +2679,8 @@ Если СтрокаСоединенияИнформационнойБазы = Неопределено Тогда Возврат Ложь; // Нет клиентского приложения. КонецЕсли; +#Иначе + СтрокаСоединенияИнформационнойБазы = СтрокаСоединенияИнформационнойБазы(); #КонецЕсли Возврат СтрНайти(ВРег(СтрокаСоединенияИнформационнойБазы), "WS=") = 1; @@ -2695,12 +2694,7 @@ // Функция ЭтоWindowsКлиент() Экспорт -#Если Клиент Или ВнешнееСоединение Тогда - СистемнаяИнформация = Новый СистемнаяИнформация; - - ЭтоWindowsКлиент = СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86 - ИЛИ СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86_64; -#Иначе +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Тогда УстановитьПривилегированныйРежим(Истина); ЭтоWindowsКлиент = СтандартныеПодсистемыСервер.ПараметрыКлиентаНаСервере().Получить("ЭтоWindowsКлиент"); @@ -2708,6 +2702,11 @@ Если ЭтоWindowsКлиент = Неопределено Тогда Возврат Ложь; // Нет клиентского приложения. КонецЕсли; +#Иначе + СистемнаяИнформация = Новый СистемнаяИнформация; + + ЭтоWindowsКлиент = СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86 + ИЛИ СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86_64; #КонецЕсли Возврат ЭтоWindowsКлиент; @@ -2721,12 +2720,7 @@ // Функция ЭтоOSXКлиент() Экспорт -#Если Клиент Или ВнешнееСоединение Тогда - СистемнаяИнформация = Новый СистемнаяИнформация; - - ЭтоOSXКлиент = СистемнаяИнформация.ТипПлатформы = ТипПлатформы.MacOS_x86 - ИЛИ СистемнаяИнформация.ТипПлатформы = ТипПлатформы.MacOS_x86_64; -#Иначе +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Тогда УстановитьПривилегированныйРежим(Истина); ЭтоOSXКлиент = СтандартныеПодсистемыСервер.ПараметрыКлиентаНаСервере().Получить("ЭтоOSXКлиент"); @@ -2734,6 +2728,11 @@ Если ЭтоOSXКлиент = Неопределено Тогда Возврат Ложь; // Нет клиентского приложения. КонецЕсли; +#Иначе + СистемнаяИнформация = Новый СистемнаяИнформация; + + ЭтоOSXКлиент = СистемнаяИнформация.ТипПлатформы = ТипПлатформы.MacOS_x86 + ИЛИ СистемнаяИнформация.ТипПлатформы = ТипПлатформы.MacOS_x86_64; #КонецЕсли Возврат ЭтоOSXКлиент; @@ -2747,12 +2746,7 @@ // Функция ЭтоLinuxКлиент() Экспорт -#Если Клиент Или ВнешнееСоединение Тогда - СистемнаяИнформация = Новый СистемнаяИнформация; - - ЭтоLinuxКлиент = СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Linux_x86 - ИЛИ СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Linux_x86_64; -#Иначе +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Тогда УстановитьПривилегированныйРежим(Истина); ЭтоLinuxКлиент = СтандартныеПодсистемыСервер.ПараметрыКлиентаНаСервере().Получить("ЭтоLinuxКлиент"); @@ -2760,6 +2754,11 @@ Если ЭтоLinuxКлиент = Неопределено Тогда Возврат Ложь; // Нет клиентского приложения. КонецЕсли; +#Иначе + СистемнаяИнформация = Новый СистемнаяИнформация; + + ЭтоLinuxКлиент = СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Linux_x86 + ИЛИ СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Linux_x86_64; #КонецЕсли Возврат ЭтоLinuxКлиент; @@ -2775,9 +2774,7 @@ #Если ВебКлиент Тогда Возврат Истина; -#ИначеЕсли Клиент Или ВнешнееСоединение Тогда - Возврат Ложь; -#Иначе +#ИначеЕсли Сервер Или ТолстыйКлиентОбычноеПриложение Тогда УстановитьПривилегированныйРежим(Истина); ЭтоВебКлиент = СтандартныеПодсистемыСервер.ПараметрыКлиентаНаСервере().Получить("ЭтоВебКлиент"); @@ -2787,6 +2784,8 @@ КонецЕсли; Возврат ЭтоВебКлиент; +#Иначе + Возврат Ложь; #КонецЕсли КонецФункции @@ -2800,9 +2799,7 @@ #Если ВебКлиент Тогда Возврат ОбщегоНазначенияКлиентПовтИсп.ЭтоВебКлиентПодMacOS(); -#ИначеЕсли Клиент Или ВнешнееСоединение Тогда - Возврат Ложь; -#Иначе +#ИначеЕсли Сервер Или ТолстыйКлиентОбычноеПриложение Тогда УстановитьПривилегированныйРежим(Истина); ЭтоВебКлиентПодMacOS = СтандартныеПодсистемыСервер.ПараметрыКлиентаНаСервере().Получить("ЭтоВебКлиентПодMacOS"); @@ -2812,6 +2809,8 @@ КонецЕсли; Возврат ЭтоВебКлиентПодMacOS; +#Иначе + Возврат Ложь; #КонецЕсли КонецФункции @@ -2950,7 +2949,7 @@ // Параметры: // РаспределяемаяСумма - Число - сумма, которую надо распределить, если сумма равна 0 - то возвращается Неопределено; // Если передана отрицательная - расчет по модулю и после инверсия знаков результата. -// Коэффициенты - Массив - коэффициенты распределения, должны быть не отрицательными; +// Коэффициенты - Массив - коэффициенты распределения, должны быть положительны или отрицательными одновременно // Точность - Число - точность округления при распределении. Необязателен. // // Возвращаемое значение: @@ -2970,12 +2969,14 @@ // Функция РаспределитьСуммуПропорциональноКоэффициентам(Знач РаспределяемаяСумма, Знач Коэффициенты, Знач Точность = 2) Экспорт + КоэффициентыАбсолютные = Новый Массив(Новый ФиксированныйМассив(Коэффициенты)); // cpy + // Старое поведение при неуказанной сумме - для обратной совместимости. Если Не ЗначениеЗаполнено(РаспределяемаяСумма) Тогда Возврат Неопределено; КонецЕсли; - Если Коэффициенты.Количество() = 0 Тогда + Если КоэффициентыАбсолютные.Количество() = 0 Тогда // Недопустимо значение параметра Коэффициенты // Ожидалось: хотя бы один коэффициент будет задан. Возврат Неопределено; @@ -2983,15 +2984,21 @@ ИндексМаксимальногоКоэффициента = 0; МаксимальныйКоэффициент = 0; - СуммаКоэффициентов = 0; + СуммаКоэффициентов = 0; + КоэффициентыОтрицательны = (КоэффициентыАбсолютные[0] < 0); - Для Индекс = 0 По Коэффициенты.Количество() - 1 Цикл - Коэффициент = Коэффициенты[Индекс]; + Для Индекс = 0 По КоэффициентыАбсолютные.Количество() - 1 Цикл + Коэффициент = КоэффициентыАбсолютные[Индекс]; + + Если КоэффициентыОтрицательны И Коэффициент > 0 Тогда + // Недопустимо значение параметра Коэффициенты + // Ожидалось: все коэффициенты положительны или все отрицательны одновременно. + Возврат Неопределено; + КонецЕсли; Если Коэффициент < 0 Тогда - // Недопустимо значение параметра Коэффициенты - // Ожидалось: все значения коэффициентов будут неотрицательны. - Возврат Неопределено; + Коэффициент = -Коэффициент; // Abs(Коэффициент) + КоэффициентыАбсолютные[Индекс] = Коэффициент; // move КонецЕсли; Если МаксимальныйКоэффициент < Коэффициент Тогда @@ -3004,11 +3011,11 @@ Если СуммаКоэффициентов = 0 Тогда // Недопустимо значение параметра Коэффициенты - // Ожидалось: хотя бы один коэффициент будет больше нуля. + // Ожидалось: хотя бы один коэффициент будет отличен от нуля. Возврат Неопределено; КонецЕсли; - Результат = Новый Массив(Коэффициенты.Количество()); + Результат = Новый Массив(КоэффициентыАбсолютные.Количество()); ВыполнятьИнверсию = (РаспределяемаяСумма < 0); Если ВыполнятьИнверсию Тогда @@ -3017,8 +3024,8 @@ РаспределеннаяСумма = 0; - Для Индекс = 0 По Коэффициенты.Количество() - 1 Цикл - Результат[Индекс] = Окр(РаспределяемаяСумма * Коэффициенты[Индекс] / СуммаКоэффициентов, Точность, 1); + Для Индекс = 0 По КоэффициентыАбсолютные.Количество() - 1 Цикл + Результат[Индекс] = Окр(РаспределяемаяСумма * КоэффициентыАбсолютные[Индекс] / СуммаКоэффициентов, Точность, 1); РаспределеннаяСумма = РаспределеннаяСумма + Результат[Индекс]; КонецЦикла; @@ -3037,13 +3044,11 @@ ЗначениеПогрешности = 1 / Pow(10, Точность); КоличествоЭлементовПогрешности = -СуммарнаяПогрешность / ЗначениеПогрешности; - КоэффициентыРешето = Новый Массив(Новый ФиксированныйМассив(Коэффициенты)); - Для Сч = 1 По КоличествоЭлементовПогрешности Цикл - МаксимальныйКоэффициент = МаксимальноеЗначениеВМассиве(КоэффициентыРешето); - Индекс = КоэффициентыРешето.Найти(МаксимальныйКоэффициент); + МаксимальныйКоэффициент = МаксимальноеЗначениеВМассиве(КоэффициентыАбсолютные); + Индекс = КоэффициентыАбсолютные.Найти(МаксимальныйКоэффициент); Результат[Индекс] = Результат[Индекс] - ЗначениеПогрешности; - КоэффициентыРешето[Индекс] = 0; + КоэффициентыАбсолютные[Индекс] = 0; КонецЦикла; Иначе @@ -3051,7 +3056,7 @@ КонецЕсли; Если ВыполнятьИнверсию Тогда - Для Индекс = 0 По Коэффициенты.Количество() - 1 Цикл + Для Индекс = 0 По КоэффициентыАбсолютные.Количество() - 1 Цикл Результат[Индекс] = -Результат[Индекс]; КонецЦикла; КонецЕсли; @@ -3074,9 +3079,12 @@ // ПолучитьПотокОшибок - Булево - Истина - ошибки, направленные в поток stderr, // если не указан ДождатьсяЗавершения - игнорируется. // ВыполнитьСНаивысшимиПравами - Булево - Истина - требуется запустить программу на исполнение -// с повышением привилегий системы (подтверждение UAC). +// с повышением привилегий системы: +// - подтверждение UAC для Windows; +// - интерактивным запросом c GUI sudo и перенаправлением +// $DISPLAY и $XAUTHORITY текущего пользователя для Linux; // Не совместим с параметром ДождатьсяЗавершения. -// В Linux и MacOS игнорируется. +// В MacOS игнорируется. // Функция ПараметрыЗапускаПрограммы() Экспорт @@ -3123,9 +3131,11 @@ #Иначе Если СодержитНебезопасныеДействия(СтрокаКоманды) Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Недопустимая строка команды: - |%1 - |Строка команды не должна содержать символы: ""$"", ""`"", ""|"", "";"", ""&"".'"), + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Недопустимая строка команды + |%1 + |по причине: + |Строка команды не должна содержать символы: ""$"", ""`"", ""|"", "";"", ""&"".'"), СтрокаКоманды); КонецЕсли; @@ -3140,18 +3150,18 @@ ВыполнитьСНаивысшимиПравами = ПараметрыЗапускаПрограммы.ВыполнитьСНаивысшимиПравами; Если ВыполнитьСНаивысшимиПравами Тогда -#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда - ВызватьИсключение НСтр("ru = 'Недопустимое значение параметра ПараметрыЗапускаПрограммы.ВыполнитьСНаивысшимиПравами. - |Повешение привилегий системы не доступно на сервере.'"); +#Если ВнешнееСоединение Тогда + ВызватьИсключение + НСтр("ru = 'Недопустимое значение параметра ПараметрыЗапускаПрограммы.ВыполнитьСНаивысшимиПравами. + |Повешение привилегий системы не доступно из внешнего соединения.'"); +#КонецЕсли + +#Если Сервер Тогда + ВызватьИсключение + НСтр("ru = 'Недопустимое значение параметра ПараметрыЗапускаПрограммы.ВыполнитьСНаивысшимиПравами. + |Повешение привилегий системы не доступно на сервере.'"); #КонецЕсли - Если ДождатьсяЗавершения Тогда - ВызватьИсключение НСтр("ru = 'Недопустимо одновременно устанавливать параметры - | - ПараметрыЗапускаПрограммы.ДождатьсяЗавершения и - | - ПараметрыЗапускаПрограммы.ВыполнитьСНаивысшимиПравами: - |Операционная система не позволяет отслеживать от имени пользователя процессы, - |запущенные администратором.'"); - КонецЕсли; КонецЕсли; Если ДождатьсяЗавершения Тогда @@ -3168,18 +3178,19 @@ КонецЕсли; - Если Не ПустаяСтрока(ТекущийКаталог) Тогда - СтрокаКоманды = "cd """ + ТекущийКаталог + """ && " + СтрокаКоманды; - КонецЕсли; - КодВозврата = Неопределено; СистемнаяИнформация = Новый СистемнаяИнформация(); Если (СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86) Или (СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86_64) Тогда - // Для Windows выполняем запуск через cmd.exe (для перенаправления stdout и stderr). - СтрокаКоманды = "cmd /c """ + СтрокаКоманды + """"; + // Из-за запуска через shell перенаправление каталога требуется сделать командой. + Если Не ПустаяСтрока(ТекущийКаталог) Тогда + СтрокаКоманды = "cd """ + ТекущийКаталог + """ && " + СтрокаКоманды; + КонецЕсли; + + // Выполняется запуск через cmd.exe (для перенаправления stdout и stderr). + СтрокаКоманды = "cmd /S /C "" " + СтрокаКоманды + " """; #Если Сервер Тогда Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда @@ -3194,6 +3205,15 @@ #Иначе Если ВыполнитьСНаивысшимиПравами Тогда + Если ДождатьсяЗавершения Тогда + ВызватьИсключение + НСтр("ru = 'Недопустимо одновременно устанавливать параметры + | - ПараметрыЗапускаПрограммы.ДождатьсяЗавершения и + | - ПараметрыЗапускаПрограммы.ВыполнитьСНаивысшимиПравами: + |Операционная система не позволяет отслеживать от имени пользователя процессы, + |запущенные администратором.'"); + КонецЕсли; + // После начала исполнения файла команды отследить статус процесса будет невозможно, // Потому удалять batch файл следует последней строкой команды в самом batch файле. // Асинхронно удалять нельзя, иначе может наступить коллизия, @@ -3218,10 +3238,38 @@ КонецЕсли; #КонецЕсли + ИначеЕсли (СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Linux_x86) + Или (СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Linux_x86_64) Тогда + + Если ВыполнитьСНаивысшимиПравами Тогда + + ШаблонКоманды = "pkexec env DISPLAY=[DISPLAY] XAUTHORITY=[XAUTHORITY] [СтрокаКоманды]"; + + ПараметрыШаблона = Новый Структура; + ПараметрыШаблона.Вставить("СтрокаКоманды", СтрокаКоманды); + + ПараметрыЗапускаПодпрограммы = ПараметрыЗапускаПрограммы(); + ПараметрыЗапускаПодпрограммы.ДождатьсяЗавершения = Истина; + ПараметрыЗапускаПодпрограммы.ПолучитьПотокВывода = Истина;; + + Результат = ЗапуститьПрограмму("echo $DISPLAY", ПараметрыЗапускаПодпрограммы); + ПараметрыШаблона.Вставить("DISPLAY", Результат.ПотокВывода); + + Результат = ЗапуститьПрограмму("echo $XAUTHORITY", ПараметрыЗапускаПодпрограммы); + ПараметрыШаблона.Вставить("XAUTHORITY", Результат.ПотокВывода); + + СтрокаКоманды = СтроковыеФункцииКлиентСервер.ВставитьПараметрыВСтроку(ШаблонКоманды, ПараметрыШаблона); + ДождатьсяЗавершения = Истина; + + КонецЕсли; + + ЗапуститьПриложение(СтрокаКоманды, ТекущийКаталог, ДождатьсяЗавершения, КодВозврата); + Иначе - // Для ОС Linux и MacOS просто запускаем команду. + + // Для MacOS просто запускаем команду. // Параметр ПараметрыЗапускаПрограммы.ВыполнитьСНаивысшимиПравами игнорируется. - ЗапуститьПриложение(СтрокаКоманды,, ДождатьсяЗавершения, КодВозврата); + ЗапуститьПриложение(СтрокаКоманды, ТекущийКаталог, ДождатьсяЗавершения, КодВозврата); КонецЕсли; @@ -3276,6 +3324,188 @@ КонецФункции +// Запускает диагностику сетевого ресурса. +// Не доступно в веб-клиенте. +// В модели сервиса функциональность ограничена получением описания ошибки. +// +// Параметры: +// URL - Строка - адрес URL ресурса, диагностику которого надо выполнить. +// +// Возвращаемое значение: +// Структура - Результат работы программы. +// ОписаниеОшибки - Строка - краткое описание ошибки. +// ЖурналДиагностики - Строка - подробный журнал диагностики с техническими подробностями. +// +// Пример: +// // Диагностика веб-сервиса адресного классификатора. +// Результат = ОбщегоНазначенияКлиентСервер.ДиагностикаСоединения("https://api.orgaddress.1c.ru/orgaddress/v1?wsdl"); +// +// ОписаниеОшибки = Результат.ОписаниеОшибки; +// ЖурналДиагностики = Результат.ЖурналДиагностики; +// +Функция ДиагностикаСоединения(URL) Экспорт + +#Если ВебКлиент Тогда + ВызватьИсключение НСтр("ru = 'Выполнение диагностики соединения недоступно в веб-клиенте.'"); +#Иначе + + Описание = Новый Массив; + Журнал = Новый Массив; + + Журнал.Добавить( + НСтр("ru = 'Журнал диагностики: + |Выполнена проверка возможности установить соединение. + |Описание диагностируемой ошибки см. в следующем сообщении журнала.'")); + Журнал.Добавить(); + + Описание.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'При обращении по URL: %1'"), + URL)); + Описание.Добавить(ПредставлениеМестаДиагностики()); + + СоединениеЧерезПрокси = Ложь; + + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПолучениеФайловИзИнтернета") Тогда + МодульПолучениеФайловИзИнтернетаКлиентСервер = + ОбщегоНазначения.ОбщийМодуль("ПолучениеФайловИзИнтернетаКлиентСервер"); + СостояниеНастроекПрокси = МодульПолучениеФайловИзИнтернетаКлиентСервер.СостояниеНастроекПрокси(); + + СоединениеЧерезПрокси = СостояниеНастроекПрокси.СоединениеЧерезПрокси; + + Журнал.Добавить(СостояниеНастроекПрокси.Представление); + КонецЕсли; + #Иначе + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПолучениеФайловИзИнтернета") Тогда + МодульПолучениеФайловИзИнтернетаКлиентСервер = + ОбщегоНазначенияКлиент.ОбщийМодуль("ПолучениеФайловИзИнтернетаКлиентСервер"); + СостояниеНастроекПрокси = МодульПолучениеФайловИзИнтернетаКлиентСервер.СостояниеНастроекПрокси(); + + СоединениеЧерезПрокси = СостояниеНастроекПрокси.СоединениеЧерезПрокси; + + Журнал.Добавить(СостояниеНастроекПрокси.Представление); + КонецЕсли; + #КонецЕсли + + Если СоединениеЧерезПрокси Тогда + + Описание.Добавить( + НСтр("ru = 'Диагностика соединения не выполнена, т.к. настроен прокси-сервер. Обратитесь к администратору.'")); + + Иначе + + СтруктураСсылки = СтруктураURI(URL); + АдресСервераРесурса = СтруктураСсылки.Хост; + АдресСервераКонтрольнойПроверки = "1c.eu"; + + РезультатДоступностиРесурса = ПроверитьДоступностьСервера(АдресСервераРесурса); + + Журнал.Добавить(); + Журнал.Добавить("1) " + РезультатДоступностиРесурса.ЖурналДиагностики); + + Если РезультатДоступностиРесурса.Доступен Тогда + + Описание.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Выполнено обращение к несуществующему ресурсу на сервере %1 + |или возникли неполадки на удаленном сервере.'"), + АдресСервераРесурса)); + + Иначе + + РезультатКонтрольнойПроверки = ПроверитьДоступностьСервера(АдресСервераКонтрольнойПроверки); + Журнал.Добавить("2) " + РезультатКонтрольнойПроверки.ЖурналДиагностики); + + Если Не РезультатКонтрольнойПроверки.Доступен Тогда + + Описание.Добавить( + НСтр("ru = 'Отсутствует доступ в сеть интернет по причине: + |- компьютер не подключен к интернету; + |- неполадки у интернет-провайдера; + |- подключение к интернету блокирует межсетевой экран, + | антивирусная программа или другое программное обеспечение.'")); + + ЖурналТрассировки = ЖурналТрассировкиМаршрутаСервера(АдресСервераКонтрольнойПроверки); + + Иначе + + Описание.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Сервер %1 не доступен по причине: + |- неполадки у интернет-провайдера; + |- подключение к серверу блокирует межсетевой экран, + | антивирусная программа или другое программное обеспечение; + |- сервер отключен или на техническом обслуживании.'"), + АдресСервераРесурса)); + + ЖурналТрассировки = ЖурналТрассировкиМаршрутаСервера(АдресСервераРесурса); + + КонецЕсли; + + Журнал.Добавить("3) " + ЖурналТрассировки); + КонецЕсли; + + КонецЕсли; + + ОписаниеОшибки = СтрСоединить(Описание, Символы.ПС); + + Журнал.Вставить(0); + Журнал.Вставить(0, ОписаниеОшибки); + + ЖурналДиагностики = СтрСоединить(Журнал, Символы.ПС); + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + + Если ОбщегоНазначения.РазделениеВключено() Тогда + // В модели сервиса результат диагностики не возвращаем. В журнал не пишем. + // Демаскировать внутреннюю архитектуру запрещено. + + Результат = Новый Структура; + Результат.Вставить("ОписаниеОшибки", ОписаниеОшибки); + Результат.Вставить("ЖурналДиагностики", ""); + + Возврат Результат; + КонецЕсли; + + ЗаписьЖурналаРегистрации( + НСтр("ru = 'Диагностика соединения'", КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка,,, ЖурналДиагностики); + +#Иначе + ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации( + НСтр("ru = 'Диагностика соединения'", КодОсновногоЯзыка()), + "Ошибка", ЖурналДиагностики,, Истина); +#КонецЕсли + + Результат = Новый Структура; + Результат.Вставить("ОписаниеОшибки", ОписаниеОшибки); + Результат.Вставить("ЖурналДиагностики", ЖурналДиагностики); + + Возврат Результат; + +#КонецЕсли + +КонецФункции + +#Область УстаревшиеПроцедурыИФункции + +// Устарела. Следует использовать ОбщегоНазначенияКлиентСервер.РазностьМассивов +// Вычисляет разность массивов. Разностью массивов А и В является массив, содержащий +// все элементы массива А не существующие в массиве В. +// +// Параметры: +// Массив - Массив - массив элементов, из которого необходимо выполнить вычитание; +// МассивВычитания - Массив - массив элементов, который будет вычитаться. +// +// Возвращаемое значение: +// Массив - дополнение массива В до А. +// +Функция СократитьМассив(Массив, МассивВычитания) Экспорт + + Возврат РазностьМассивов(Массив, МассивВычитания); + +КонецФункции + +#КонецОбласти + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -3359,8 +3589,6 @@ Знач ТекущийИндекс, Знач ПропускаемыйСимвол) - Результат = ТекущийИндекс; - // Убираем лишние пробелы если они есть. Пока ТекущийИндекс < СтрДлина(Строка) Цикл Если Сред(Строка, ТекущийИндекс, 1) <> ПропускаемыйСимвол Тогда @@ -3481,7 +3709,10 @@ КонецФункции -Функция СодержитНебезопасныеДействия(СтрокаКоманды) +Функция СодержитНебезопасныеДействия(Знач СтрокаКоманды) + + СтрокаКоманды = СтрЗаменить(СтрокаКоманды, "$DISPLAY", ""); + СтрокаКоманды = СтрЗаменить(СтрокаКоманды, "$XAUTHORITY", ""); Возврат СтрНайти(СтрокаКоманды, "$") <> 0 Или СтрНайти(СтрокаКоманды, "`") <> 0 @@ -3491,6 +3722,15 @@ КонецФункции +Функция ТекстОшибкиПредопределенноеЗначениеНеНайдено(ПолноеИмяПредопределенного) + + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Предопределенное значение ""%1"" не найдено.'"), ПолноеИмяПредопределенного); + +КонецФункции + +#Если Не ВебКлиент Тогда + // Возвращает кодировку стандартных поток вывода и ошибок, используемую в текущей ОС. // // Возвращаемое значение: @@ -3533,4 +3773,120 @@ КонецПроцедуры +Функция ПредставлениеМестаДиагностики() + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + Если ОбщегоНазначения.РазделениеВключено() Тогда + Возврат НСтр("ru = 'Подключение проводится на сервере 1С:Предприятия в интернете.'"); + Иначе + Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда + Если КлиентПодключенЧерезВебСервер() Тогда + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Подключение проводится из файловой базы на веб-сервере <%1>.'"), ИмяКомпьютера()); + Иначе + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Подключение проводится из файловой базы на компьютере <%1>.'"), ИмяКомпьютера()); + КонецЕсли; + Иначе + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Подключение проводится на сервере 1С:Предприятие <%1>.'"), ИмяКомпьютера()); + КонецЕсли; + КонецЕсли; +#Иначе + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Подключение проводится на компьютере (клиенте) <%1>.'"), ИмяКомпьютера()); +#КонецЕсли + +КонецФункции + +Функция ПроверитьДоступностьСервера(АдресСервера) + + ПараметрыЗапускаПрограммы = ПараметрыЗапускаПрограммы(); + ПараметрыЗапускаПрограммы.ДождатьсяЗавершения = Истина; + ПараметрыЗапускаПрограммы.ПолучитьПотокВывода = Истина; + ПараметрыЗапускаПрограммы.ПолучитьПотокОшибок = Истина; + + СистемнаяИнформация = Новый СистемнаяИнформация(); + ЭтоWindows = (СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86) + Или (СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86_64); + + Если ЭтоWindows Тогда + ШаблонКоманды = "ping %1 -n 2"; + Иначе + ШаблонКоманды = "ping -c 2 %1"; + КонецЕсли; + + СтрокаКоманды = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонКоманды, АдресСервера); + + Результат = ЗапуститьПрограмму(СтрокаКоманды, ПараметрыЗапускаПрограммы); + + // Разные операционные системы могут выводить ошибки в разные потоки: + // - для Windows все всегда в потоке вывода; + // - для Debian или RHEL ошибки падают в поток ошибок. + ЖурналДоступности = Результат.ПотокВывода + Результат.ПотокОшибок; + + Если ЭтоWindows Тогда + ФактНедоступности = (СтрНайти(ЖурналДоступности, "Заданный узел недоступен") > 0) + Или (СтрНайти(ЖурналДоступности, "Destination host unreachable") > 0); + + БезПотерь = (СтрНайти(ЖурналДоступности, "(0% потерь)") > 0) + Или (СтрНайти(ЖурналДоступности, "(0% loss)") > 0); + Иначе + ФактНедоступности = (СтрНайти(ЖурналДоступности, "Destination Host Unreachable") > 0); + БезПотерь = (СтрНайти(ЖурналДоступности, "0% packet loss") > 0) + КонецЕсли; + + Доступен = Не ФактНедоступности И БезПотерь; + СостояниеДоступности = ?(Доступен, НСтр("ru = 'доступен'"), НСтр("ru = 'не доступен'")); + + Журнал = Новый Массив; + Журнал.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Удаленный сервер %1 %2:'"), + АдресСервера, + СостояниеДоступности)); + + Журнал.Добавить("> " + СтрокаКоманды); + Журнал.Добавить(ЖурналДоступности); + + Возврат Новый Структура("Доступен, ЖурналДиагностики", Доступен, СтрСоединить(Журнал, Символы.ПС)); + +КонецФункции + +Функция ЖурналТрассировкиМаршрутаСервера(АдресСервера) + + ПараметрыЗапускаПрограммы = ПараметрыЗапускаПрограммы(); + ПараметрыЗапускаПрограммы.ДождатьсяЗавершения = Истина; + ПараметрыЗапускаПрограммы.ПолучитьПотокВывода = Истина; + ПараметрыЗапускаПрограммы.ПолучитьПотокОшибок = Истина; + + СистемнаяИнформация = Новый СистемнаяИнформация(); + ЭтоWindows = (СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86) + Или (СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86_64); + + Если ЭтоWindows Тогда + ШаблонКоманды = "tracert -w 500 %1"; + Иначе + ШаблонКоманды = "traceroute -w 500 %1"; + // Если вдруг пакет не установлен - в потоке вывода будет ошибка. + // Ну и ладно - мы результат все равно не разбираем, администратор поймет что ему надо доставить. + КонецЕсли; + + СтрокаКоманды = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонКоманды, АдресСервера); + + Результат = ЗапуститьПрограмму(СтрокаКоманды, ПараметрыЗапускаПрограммы); + + Журнал = Новый Массив; + Журнал.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Трассировка маршрута к удаленному серверу %1:'"), АдресСервера)); + + Журнал.Добавить("> " + СтрокаКоманды); + Журнал.Добавить(Результат.ПотокВывода); + Журнал.Добавить(Результат.ПотокОшибок); + + Возврат СтрСоединить(Журнал, Символы.ПС); + +КонецФункции + +#КонецЕсли + #КонецОбласти diff --git a/SSL/src/CommonModules/ОбщегоНазначенияПовтИсп/Module.bsl b/SSL/src/CommonModules/ОбщегоНазначенияПовтИсп/Module.bsl index dc1364556..038faf5cb 100644 --- a/SSL/src/CommonModules/ОбщегоНазначенияПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ОбщегоНазначенияПовтИсп/Module.bsl @@ -312,6 +312,50 @@ #Область СлужебныйПрограммныйИнтерфейс +// Возвращает Истина, если программа работает в режиме автономного рабочего места. +Функция ЭтоАвтономноеРабочееМесто() Экспорт + + Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда + Возврат Ложь; + КонецЕсли; + + МодульОбменДаннымиСервер = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиСервер"); + + Возврат МодульОбменДаннымиСервер.ЭтоАвтономноеРабочееМесто(); + +КонецФункции + +// Доступность объектов метаданных по функциональным опциям. +Функция ДоступностьОбъектовПоОпциям() Экспорт + + Параметры = Новый Структура(ОбщегоНазначенияПовтИсп.ОпцииИнтерфейса()); + + ДоступностьОбъектов = Новый Соответствие; + Для Каждого ФункциональнаяОпция Из Метаданные.ФункциональныеОпции Цикл + Значение = -1; + Для Каждого Элемент Из ФункциональнаяОпция.Состав Цикл + Если Элемент.Объект = Неопределено Тогда + Продолжить; + КонецЕсли; + Если Значение = -1 Тогда + Значение = ПолучитьФункциональнуюОпцию(ФункциональнаяОпция.Имя, Параметры); + КонецЕсли; + ПолноеИмя = Элемент.Объект.ПолноеИмя(); + Если Значение = Истина Тогда + ДоступностьОбъектов.Вставить(ПолноеИмя, Истина); + Иначе + Если ДоступностьОбъектов[ПолноеИмя] = Неопределено Тогда + ДоступностьОбъектов.Вставить(ПолноеИмя, Ложь); + КонецЕсли; + КонецЕсли; + КонецЦикла; + КонецЦикла; + Возврат Новый ФиксированноеСоответствие(ДоступностьОбъектов); + +КонецФункции + +#Область УстаревшиеПроцедурыИФункции + // Устарела. Необходимо использовать РаботаВМоделиСервиса.РазделенныеОбъектыМетаданных. // Возвращает список полных имен всех объектов метаданных, использующихся в общем реквизите-разделителе, // имя которого передано в качестве значения параметра Разделитель, и значения свойств объекта метаданных, @@ -343,69 +387,19 @@ КонецФункции -// Возвращает Истина, если программа работает в режиме автономного рабочего места. -Функция ЭтоАвтономноеРабочееМесто() Экспорт - - Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда - Возврат Ложь; - КонецЕсли; - - МодульОбменДаннымиСервер = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиСервер"); - - Возврат МодульОбменДаннымиСервер.ЭтоАвтономноеРабочееМесто(); - -КонецФункции +#КонецОбласти #КонецОбласти #Область СлужебныеПроцедурыИФункции -// Параметры, применяемых к элементам командного интерфейса, связанных с параметрическими функциональными опциями. -Функция ОпцииИнтерфейса() Экспорт +// Параметры, применяемых к элементам командного интерфейса, связанным с параметрическими функциональными опциями. +Функция ОпцииИнтерфейса() Экспорт ОпцииИнтерфейса = Новый Структура; - Попытка - ОбщегоНазначенияПереопределяемый.ПриОпределенииПараметровФункциональныхОпцийИнтерфейса(ОпцииИнтерфейса); - Исключение - ИнформацияОбОшибке = ИнформацияОбОшибке(); - ИмяСобытия = НСтр("ru = 'Настройка интерфейса'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'При получении опций интерфейса произошла ошибка: - |%1'"), - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); - ЗаписьЖурналаРегистрации(ИмяСобытия, УровеньЖурналаРегистрации.Ошибка,,, ТекстОшибки); - КонецПопытки; + ОбщегоНазначенияПереопределяемый.ПриОпределенииПараметровФункциональныхОпцийИнтерфейса(ОпцииИнтерфейса); + Возврат Новый ФиксированнаяСтруктура(ОпцииИнтерфейса); - Возврат ОпцииИнтерфейса; -КонецФункции - -// Доступность объектов метаданных по функциональным опциям. -Функция ДоступностьОбъектовПоОпциям() Экспорт - Параметры = ОбщегоНазначенияПовтИсп.ОпцииИнтерфейса(); - Если ТипЗнч(Параметры) = Тип("ФиксированнаяСтруктура") Тогда - Параметры = Новый Структура(Параметры); - КонецЕсли; - - ДоступностьОбъектов = Новый Соответствие; - Для Каждого ФункциональнаяОпция Из Метаданные.ФункциональныеОпции Цикл - Значение = -1; - Для Каждого Элемент Из ФункциональнаяОпция.Состав Цикл - Если Элемент.Объект = Неопределено Тогда - Продолжить; - КонецЕсли; - Если Значение = -1 Тогда - Значение = ПолучитьФункциональнуюОпцию(ФункциональнаяОпция.Имя, Параметры); - КонецЕсли; - ПолноеИмя = Элемент.Объект.ПолноеИмя(); - Если Значение = Истина Тогда - ДоступностьОбъектов.Вставить(ПолноеИмя, Истина); - Иначе - Если ДоступностьОбъектов[ПолноеИмя] = Неопределено Тогда - ДоступностьОбъектов.Вставить(ПолноеИмя, Ложь); - КонецЕсли; - КонецЕсли; - КонецЦикла; - КонецЦикла; - Возврат ДоступностьОбъектов; КонецФункции #КонецОбласти diff --git a/SSL/src/CommonModules/ОбщегоНазначенияСлужебныйКлиент/Module.bsl b/SSL/src/CommonModules/ОбщегоНазначенияСлужебныйКлиент/Module.bsl index 016cb8216..7046cbda1 100644 --- a/SSL/src/CommonModules/ОбщегоНазначенияСлужебныйКлиент/Module.bsl +++ b/SSL/src/CommonModules/ОбщегоНазначенияСлужебныйКлиент/Module.bsl @@ -5,82 +5,6 @@ #Область СлужебныйПрограммныйИнтерфейс -// Параметры: -// Контекст - Структура - контекст процедуры: -// * Оповещение - ОписаниеОповещения - . -// * Идентификатор - Строка - . -// * Местоположение - Строка - . -// * Кэшировать - Булево - . -// * ПредложитьУстановить - Булево - . -// * ТекстПояснения - Строка - . -// -Процедура ПодключитьКомпоненту(Контекст) Экспорт - - Если Не МестоположениеКомпонентыКорректно(Контекст.Местоположение) Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru='Некорректное значение параметра Местоположение (%1) - |в ОбщегоНазначенияСлужебныйКлиент.ПодключитьКомпоненту'"), Контекст.Местоположение); - КонецЕсли; - - Если Контекст.Кэшировать Тогда - - // Получение из кэша экземпляра внешней компоненты. - - ПодключаемыйМодуль = Неопределено; - КэшированныеКомпоненты = ПараметрыПриложения["СтандартныеПодсистемы.ВнешниеКомпоненты.КэшированныеКомпоненты"]; - - Если ТипЗнч(КэшированныеКомпоненты) = Тип("ФиксированноеСоответствие") Тогда - ПодключаемыйМодуль = КэшированныеКомпоненты.Получить(Контекст.Местоположение); - КонецЕсли; - - Если ПодключаемыйМодуль <> Неопределено Тогда - - Результат = Новый Структура; - Результат.Вставить("Подключено", Истина); - Результат.Вставить("ПодключаемыйМодуль", ПодключаемыйМодуль); - ВыполнитьОбработкуОповещения(Контекст.Оповещение, Результат); - Возврат; - - КонецЕсли; - - КонецЕсли; - - СимволическоеИмя = "С" + СтрЗаменить(Строка(Новый УникальныйИдентификатор), "-", ""); //генерация уникального имени - Контекст.Вставить("СимволическоеИмя", СимволическоеИмя); - - Оповещение = Новый ОписаниеОповещения( - "ПодключитьКомпонентуЗавершение", ЭтотОбъект, Контекст, - "ПодключитьКомпонентуЗавершениеПоОшибке", ЭтотОбъект); - - НачатьПодключениеВнешнейКомпоненты(Оповещение, Контекст.Местоположение, СимволическоеИмя); - -КонецПроцедуры - -// Параметры: -// Контекст - Структура - контекст процедуры: -// * Оповещение - ОписаниеОповещения - . -// * Местоположение - Строка - . -// * ТекстПояснения - Строка - . -// -Процедура УстановитьКомпоненту(Контекст) Экспорт - - Если Не МестоположениеКомпонентыКорректно(Контекст.Местоположение) Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru='Некорректное значение параметра Местоположение (%1) - |в ОбщегоНазначенияСлужебныйКлиент.УстановитьКомпоненту'"), Контекст.Местоположение); - КонецЕсли; - - Оповещение = Новый ОписаниеОповещения( - "УстановитьКомпонентуПослеОтветаНаВопросОбУстановке", ЭтотОбъект, Контекст); - - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("ТекстПояснения", Контекст.ТекстПояснения); - - ОткрытьФорму("ОбщаяФорма.ВопросОбУстановкеВнешнейКомпоненты", - ПараметрыФормы,,,,, Оповещение); - -КонецПроцедуры - // Проверяет, является ли переданная строка внутренней навигационной ссылкой. // // Параметры: @@ -93,209 +17,451 @@ КонецФункции +// Параметры: +// Контекст - Структура - контекст процедуры: +// * Оповещение - ОписаниеОповещения - . +// * Идентификатор - Строка - . +// * Местоположение - Строка - . +// * Кэшировать - Булево - . +// * ПредложитьУстановить - Булево - . +// * ТекстПояснения - Строка - . +// * ИдентификаторыСозданияОбъектов - - . +// +Процедура ПодключитьКомпоненту(Контекст) Экспорт + + Если ПустаяСтрока(Контекст.Идентификатор) Тогда + КомпонентаСодержитЕдинственныйКлассОбъектов = (Контекст.ИдентификаторыСозданияОбъектов.Количество() = 0); + + Если КомпонентаСодержитЕдинственныйКлассОбъектов Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось подключить внешнюю компоненту на клиенте + |%1 + |по причине: + |Не допустимо одновременно не указывать и Идентификатор и ИдентификаторыСозданияОбъектов'"), + Контекст.Местоположение); + Иначе + // В случае, когда в компоненте есть несколько классов объектов + // Идентификатор используется только для отображения компоненты в текстах ошибок. + // Следует собрать идентификатор для отображения. + Контекст.Идентификатор = СтрСоединить(Контекст.ИдентификаторыСозданияОбъектов, ", "); + КонецЕсли; + КонецЕсли; + + Если Не МестоположениеКомпонентыКорректно(Контекст.Местоположение) Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось подключить внешнюю компоненту ""%1"" на клиенте + |%2 + |по причине: + |Не допустимо подключить компоненты из указанного местоположения.'"), + Контекст.Идентификатор, + Контекст.Местоположение); + КонецЕсли; + + Если Контекст.Кэшировать Тогда + + ПодключаемыйМодуль = ПолучитьОбъектКомпонентыИзКэша(Контекст.Местоположение); + Если ПодключаемыйМодуль <> Неопределено Тогда + ПодключитьКомпонентуОповеститьОПодключении(ПодключаемыйМодуль, Контекст); + Возврат; + КонецЕсли; + + КонецЕсли; + + // Проверка факта подключения внешней компоненты в этом сеансе ранее. + СимволическоеИмя = ПолучитьСимволическоеИмяКомпонентыИзКэша(Контекст.Местоположение); + + Если СимволическоеИмя = Неопределено Тогда + + // Генерация уникального имени. + СимволическоеИмя = "С" + СтрЗаменить(Строка(Новый УникальныйИдентификатор), "-", ""); + + Контекст.Вставить("СимволическоеИмя", СимволическоеИмя); + + Оповещение = Новый ОписаниеОповещения( + "ПодключитьКомпонентуПослеПопыткиПодключения", ЭтотОбъект, Контекст, + "ПодключитьКомпонентуПриОбработкеОшибки", ЭтотОбъект); + + НачатьПодключениеВнешнейКомпоненты(Оповещение, Контекст.Местоположение, СимволическоеИмя); + + Иначе + + // Если в кэше уже есть символическое имя - значит к этому сеансу ранее компонента уже подключалась. + Подключено = Истина; + Контекст.Вставить("СимволическоеИмя", СимволическоеИмя); + ПодключитьКомпонентуПослеПопыткиПодключения(Подключено, Контекст); + + КонецЕсли; + +КонецПроцедуры + +// Продолжение процедуры ПодключитьКомпоненту. +Процедура ПодключитьКомпонентуОповеститьОПодключении(ПодключаемыйМодуль, Контекст) Экспорт + + Оповещение = Контекст.Оповещение; + + Результат = РезультатПодключенияКомпоненты(); + Результат.Подключено = Истина; + Результат.ПодключаемыйМодуль = ПодключаемыйМодуль; + ВыполнитьОбработкуОповещения(Контекст.Оповещение, Результат); + +КонецПроцедуры + +// Продолжение процедуры ПодключитьКомпоненту. +Процедура ПодключитьКомпонентуОповеститьОбОшибке(ОписаниеОшибки, Контекст) Экспорт + + Оповещение = Контекст.Оповещение; + + Результат = РезультатПодключенияКомпоненты(); + Результат.ОписаниеОшибки = ОписаниеОшибки; + ВыполнитьОбработкуОповещения(Оповещение, Результат); + +КонецПроцедуры + +// Параметры: +// Контекст - Структура - контекст процедуры: +// * Оповещение - ОписаниеОповещения - . +// * Местоположение - Строка - . +// * ТекстПояснения - Строка - . +// +Процедура УстановитьКомпоненту(Контекст) Экспорт + + Если Не МестоположениеКомпонентыКорректно(Контекст.Местоположение) Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось установить внешнюю компоненту ""%1"" на клиенте + |%2 + |по причине: + |Не допустимо устанавливать компоненты из указанного местоположения.'"), + Контекст.Идентификатор, + Контекст.Местоположение); + КонецЕсли; + + // Проверка факта подключения внешней компоненты в этом сеансе ранее. + СимволическоеИмя = ПолучитьСимволическоеИмяКомпонентыИзКэша(Контекст.Местоположение); + + Если СимволическоеИмя = Неопределено Тогда + + Оповещение = Новый ОписаниеОповещения( + "УстановитьКомпонентуПослеОтветаНаВопросОбУстановке", ЭтотОбъект, Контекст); + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ТекстПояснения", Контекст.ТекстПояснения); + + ОткрытьФорму("ОбщаяФорма.ВопросОбУстановкеВнешнейКомпоненты", + ПараметрыФормы,,,,, Оповещение); + + Иначе + + // Если в кэше уже есть символическое имя - значит к этому сеансу ранее компонента уже подключалась, + // значит внешняя компонента уже установлена. + Результат = РезультатУстановкиКомпоненты(); + Результат.Вставить("Установлено", Истина); + ВыполнитьОбработкуОповещения(Контекст.Оповещение, Результат); + + КонецЕсли; + +КонецПроцедуры + +// Продолжение процедуры УстановитьКомпоненту. +Процедура УстановитьКомпонентуОповеститьОбОшибке(ОписаниеОшибки, Контекст) Экспорт + + Оповещение = Контекст.Оповещение; + + Результат = РезультатУстановкиКомпоненты(); + Результат.ОписаниеОшибки = ОписаниеОшибки; + ВыполнитьОбработкуОповещения(Оповещение, Результат); + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции -Процедура ПоказатьВопросОбУстановкеРасширенияРаботыСФайламиПриУстановкеРасширения(Подключено, ДополнительныеПараметры) Экспорт - - // Если расширение и так уже подключено, незачем про него спрашивать. - Если Подключено Тогда - ВыполнитьОбработкуОповещения(ДополнительныеПараметры.ОписаниеОповещенияЗавершение, "ПодключениеНеТребуется"); - Возврат; - КонецЕсли; - - // В веб клиенте под MacOS расширение не доступно. - СистемнаяИнформация = Новый СистемнаяИнформация; - ЭтоMacКлиент = (СистемнаяИнформация.ТипПлатформы = ТипПлатформы.MacOS_x86 - Или СистемнаяИнформация.ТипПлатформы = ТипПлатформы.MacOS_x86_64); - Если ЭтоMacКлиент Тогда - ВыполнитьОбработкуОповещения(ДополнительныеПараметры.ОписаниеОповещенияЗавершение); - Возврат; - КонецЕсли; - - ИмяПараметра = "СтандартныеПодсистемы.ПредлагатьУстановкуРасширенияРаботыСФайлами"; - ПервоеОбращениеЗаСеанс = ПараметрыПриложения[ИмяПараметра] = Неопределено; - Если ПараметрыПриложения[ИмяПараметра] = Неопределено Тогда - ПараметрыПриложения.Вставить(ИмяПараметра, ОбщегоНазначенияКлиент.ПредлагатьУстановкуРасширенияРаботыСФайлами()); - КонецЕсли; - ПредлагатьУстановкуРасширенияРаботыСФайлами = ПараметрыПриложения[ИмяПараметра] Или ПервоеОбращениеЗаСеанс; - - Если ДополнительныеПараметры.ВозможноПродолжениеБезУстановки И Не ПредлагатьУстановкуРасширенияРаботыСФайлами Тогда - ВыполнитьОбработкуОповещения(ДополнительныеПараметры.ОписаниеОповещенияЗавершение); - Возврат; - КонецЕсли; - - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("ТекстПредложения", ДополнительныеПараметры.ТекстПредложения); - ПараметрыФормы.Вставить("ВозможноПродолжениеБезУстановки", ДополнительныеПараметры.ВозможноПродолжениеБезУстановки); - ОткрытьФорму("ОбщаяФорма.ВопросОбУстановкеРасширенияРаботыСФайлами", ПараметрыФормы,,,,,ДополнительныеПараметры.ОписаниеОповещенияЗавершение); - -КонецПроцедуры +#Область ВнешниеКомпоненты -Процедура ПоказатьВопросОбУстановкеРасширенияРаботыСФайламиЗавершение(Действие, ОповещениеОЗакрытии) Экспорт - - РасширениеПодключено = (Действие = "РасширениеПодключено" Или Действие = "ПодключениеНеТребуется"); -#Если ВебКлиент Тогда - Если Действие = "БольшеНеПредлагать" - Или Действие = "РасширениеПодключено" Тогда - СистемнаяИнформация = Новый СистемнаяИнформация(); - ИдентификаторКлиента = СистемнаяИнформация.ИдентификаторКлиента; - ПараметрыПриложения["СтандартныеПодсистемы.ПредлагатьУстановкуРасширенияРаботыСФайлами"] = Ложь; - ОбщегоНазначенияВызовСервера.ХранилищеОбщихНастроекСохранить( - "НастройкиПрограммы/ПредлагатьУстановкуРасширенияРаботыСФайлами", ИдентификаторКлиента, Ложь); - КонецЕсли; -#КонецЕсли - - ВыполнитьОбработкуОповещения(ОповещениеОЗакрытии, РасширениеПодключено); - -КонецПроцедуры +#Область ПодключениеВнешнейКомпоненты -Процедура ПроверитьРасширениеРаботыСФайламиПодключеноЗавершение(РасширениеПодключено, ДополнительныеПараметры) Экспорт +// Продолжение процедуры ПодключитьКомпоненту. +Процедура ПодключитьКомпонентуПослеПопыткиПодключения(Подключено, Контекст) Экспорт - Если РасширениеПодключено Тогда - ВыполнитьОбработкуОповещения(ДополнительныеПараметры.ОписаниеОповещенияОЗакрытии); - Возврат; - КонецЕсли; - - ТекстСообщения = ДополнительныеПараметры.ТекстПредупреждения; - Если ПустаяСтрока(ТекстСообщения) Тогда - ТекстСообщения = НСтр("ru = 'Действие недоступно, так как не установлено расширение для веб-клиента 1С:Предприятие.'") - КонецЕсли; - ПоказатьПредупреждение(, ТекстСообщения); - -КонецПроцедуры - -Процедура КомментарийЗавершениеВвода(Знач ВведенныйТекст, Знач ДополнительныеПараметры) Экспорт - - Если ВведенныйТекст = Неопределено Тогда - Возврат; - КонецЕсли; - - РеквизитФормы = ДополнительныеПараметры.ФормаВладелец; - - ПутьКРеквизитуФормы = СтрРазделить(ДополнительныеПараметры.ИмяРеквизита, "."); - // Если реквизит вида "Объект.Комментарий" и т.п. - Если ПутьКРеквизитуФормы.Количество() > 1 Тогда - Для Индекс = 0 По ПутьКРеквизитуФормы.Количество() - 2 Цикл - РеквизитФормы = РеквизитФормы[ПутьКРеквизитуФормы[Индекс]]; - КонецЦикла; - КонецЕсли; - - РеквизитФормы[ПутьКРеквизитуФормы[ПутьКРеквизитуФормы.Количество() - 1]] = ВведенныйТекст; - ДополнительныеПараметры.ФормаВладелец.Модифицированность = Истина; - -КонецПроцедуры - -Процедура ЗарегистрироватьCOMСоединительЗавершение(Ответ, Параметры) Экспорт - - Если Ответ = КодВозвратаДиалога.Да Тогда - ПараметрыПриложения.Вставить("СтандартныеПодсистемы.ПропуститьПредупреждениеПередЗавершениемРаботыСистемы", Истина); - ЗавершитьРаботуСистемы(Истина, Истина); - КонецЕсли; - -КонецПроцедуры - -Процедура ПодтвердитьЗакрытиеФормы() Экспорт - - ИмяПараметра = "СтандартныеПодсистемы.ПараметрыПодтвержденияЗакрытияФормы"; - Если ПараметрыПриложения[ИмяПараметра] = Неопределено Тогда - ПараметрыПриложения.Вставить(ИмяПараметра, Неопределено); - КонецЕсли; - - Параметры = ПараметрыПриложения["СтандартныеПодсистемы.ПараметрыПодтвержденияЗакрытияФормы"]; - Если Параметры = Неопределено Тогда - Возврат; - КонецЕсли; - ПараметрыПриложения["СтандартныеПодсистемы.ПараметрыПодтвержденияЗакрытияФормы"] = Неопределено; - - Оповещение = Новый ОписаниеОповещения("ПодтвердитьЗакрытиеФормыЗавершение", ЭтотОбъект, Параметры); - Если ПустаяСтрока(Параметры.ТекстПредупреждения) Тогда - ТекстВопроса = НСтр("ru = 'Данные были изменены. Сохранить изменения?'"); - Иначе - ТекстВопроса = Параметры.ТекстПредупреждения; - КонецЕсли; - - ПоказатьВопрос(Оповещение, ТекстВопроса, РежимДиалогаВопрос.ДаНетОтмена, , - КодВозвратаДиалога.Нет); - -КонецПроцедуры - -Процедура ПодтвердитьЗакрытиеФормыЗавершение(Ответ, Параметры) Экспорт - - Если Ответ = КодВозвратаДиалога.Да Тогда - ВыполнитьОбработкуОповещения(Параметры.ОповещениеСохранитьИЗакрыть); - ИначеЕсли Ответ = КодВозвратаДиалога.Нет Тогда - Форма = Параметры.ОповещениеСохранитьИЗакрыть.Модуль; - Форма.Модифицированность = Ложь; - Форма.Закрыть(); - Иначе - Форма = Параметры.ОповещениеСохранитьИЗакрыть.Модуль; - Форма.Модифицированность = Истина; - КонецЕсли; - -КонецПроцедуры - -Процедура ПодтвердитьЗакрытиеПроизвольнойФормы() Экспорт - - ИмяПараметра = "СтандартныеПодсистемы.ПараметрыПодтвержденияЗакрытияФормы"; - Если ПараметрыПриложения[ИмяПараметра] = Неопределено Тогда - ПараметрыПриложения.Вставить(ИмяПараметра, Неопределено); - КонецЕсли; - - Параметры = ПараметрыПриложения["СтандартныеПодсистемы.ПараметрыПодтвержденияЗакрытияФормы"]; - Если Параметры = Неопределено Тогда - Возврат; - КонецЕсли; - ПараметрыПриложения["СтандартныеПодсистемы.ПараметрыПодтвержденияЗакрытияФормы"] = Неопределено; - РежимВопроса = РежимДиалогаВопрос.ДаНет; - - Оповещение = Новый ОписаниеОповещения("ПодтвердитьЗакрытиеПроизвольнойФормыЗавершение", ЭтотОбъект, Параметры); - - ПоказатьВопрос(Оповещение, Параметры.ТекстПредупреждения, РежимВопроса); - -КонецПроцедуры - -Процедура ПодтвердитьЗакрытиеПроизвольнойФормыЗавершение(Ответ, Параметры) Экспорт - - Форма = Параметры.Форма; - Если Ответ = КодВозвратаДиалога.Да - Или Ответ = КодВозвратаДиалога.ОК Тогда - Форма[Параметры.ИмяРеквизитаЗакрытьФормуБезПодтверждения] = Истина; - Если Параметры.ОписаниеОповещенияЗакрыть <> Неопределено Тогда - ВыполнитьОбработкуОповещения(Параметры.ОписаниеОповещенияЗакрыть); + Если Подключено Тогда + + // Сохранение факта подключения внешней компоненты к этому сеансу. + ЗаписатьСимволическоеИмяКомпонентыВКэш(Контекст.Местоположение, Контекст.СимволическоеИмя); + + ПодключаемыйМодуль = Неопределено; + + Попытка + ПодключаемыйМодуль = НовыйОбъектКомпоненты(Контекст); + Исключение + // Текст ошибки уже скомпонован в НовыйОбъектКомпоненты, требуется только оповестить. + ТекстОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + ПодключитьКомпонентуОповеститьОбОшибке(ТекстОшибки, Контекст); + Возврат; + КонецПопытки; + + Если Контекст.Кэшировать Тогда + ЗаписатьОбъектКомпонентыВКэш(Контекст.Местоположение, ПодключаемыйМодуль) КонецЕсли; - Форма.Закрыть(); - Иначе - Форма[Параметры.ИмяРеквизитаЗакрытьФормуБезПодтверждения] = Ложь; + + ПодключитьКомпонентуОповеститьОПодключении(ПодключаемыйМодуль, Контекст); + + Иначе + + Если Контекст.ПредложитьУстановить Тогда + ПодключитьКомпонентуНачатьУстановку(Контекст); + Иначе + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось подключить внешнюю компоненту ""%1"" на клиенте + |%2 + |по причине: + |Метод НачатьПодключениеВнешнейКомпоненты вернул Ложь.'"), + Контекст.Идентификатор, + ПредставлениеМестоположенияКомпоненты(Контекст.Местоположение)); + + ПодключитьКомпонентуОповеститьОбОшибке(ТекстОшибки, Контекст); + КонецЕсли; + КонецЕсли; КонецПроцедуры -Функция ИмяОбъектаМетаданных(Тип) Экспорт +// Продолжение процедуры ПодключитьКомпоненту. +Процедура ПодключитьКомпонентуНачатьУстановку(Контекст) - ИмяПараметра = "СтандартныеПодсистемы.ИменаОбъектовМетаданных"; - Если ПараметрыПриложения[ИмяПараметра] = Неопределено Тогда - ПараметрыПриложения.Вставить(ИмяПараметра, Новый Соответствие); - КонецЕсли; - ИменаОбъектовМетаданных = ПараметрыПриложения[ИмяПараметра]; + Оповещение = Новый ОписаниеОповещения( + "ПодключитьКомпонентуПослеУстановки", ЭтотОбъект, Контекст); - Результат = ИменаОбъектовМетаданных[Тип]; - Если Результат = Неопределено Тогда - Результат = СтандартныеПодсистемыВызовСервера.ИмяОбъектаМетаданных(Тип); - ИменаОбъектовМетаданных.Вставить(Тип, Результат); + КонтекстУстановки = Новый Структура; + КонтекстУстановки.Вставить("Оповещение", Оповещение); + КонтекстУстановки.Вставить("Местоположение", Контекст.Местоположение); + КонтекстУстановки.Вставить("ТекстПояснения", Контекст.ТекстПояснения); + + УстановитьКомпоненту(КонтекстУстановки); + +КонецПроцедуры + +// Продолжение процедуры ПодключитьКомпоненту. +Процедура ПодключитьКомпонентуПослеУстановки(Результат, Контекст) Экспорт + + Если Результат.Установлено Тогда + // Одна попытка установки уже прошла, если компонента не подключится в этот раз, + // то и предлагать ее установить еще раз не следует. + Контекст.ПредложитьУстановить = Ложь; + ПодключитьКомпоненту(Контекст); + Иначе + // Расшифровка ОписаниеОшибки не нужна, текст уже сформирован при установке. + // При отказе от установки пользователем ОписаниеОшибки - пустая строка. + ПодключитьКомпонентуОповеститьОбОшибке(Результат.ОписаниеОшибки, Контекст); КонецЕсли; +КонецПроцедуры + +// Продолжение процедуры ПодключитьКомпоненту. +Процедура ПодключитьКомпонентуПриОбработкеОшибки(ИнформацияОбОшибке, СтандартнаяОбработка, Контекст) Экспорт + + СтандартнаяОбработка = Ложь; + + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось подключить внешнюю компоненту ""%1"" на клиенте + |%2 + |по причине: + |%3'"), + Контекст.Идентификатор, + ПредставлениеМестоположенияКомпоненты(Контекст.Местоположение), + КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); + + ПодключитьКомпонентуОповеститьОбОшибке(ТекстОшибки, Контекст); + +КонецПроцедуры + +// Создает экземпляр внешней компоненты (или несколько) +Функция НовыйОбъектКомпоненты(Контекст) + + КомпонентаСодержитЕдинственныйКлассОбъектов = (Контекст.ИдентификаторыСозданияОбъектов.Количество() = 0); + + Если КомпонентаСодержитЕдинственныйКлассОбъектов Тогда + + Попытка + ПодключаемыйМодуль = Новый("AddIn." + Контекст.СимволическоеИмя + "." + Контекст.Идентификатор); + Если ПодключаемыйМодуль = Неопределено Тогда + ВызватьИсключение НСтр("ru = 'Оператор Новый вернул Неопределено'"); + КонецЕсли; + Исключение + ПодключаемыйМодуль = Неопределено; + ТекстОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + КонецПопытки; + + Если ПодключаемыйМодуль = Неопределено Тогда + + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось создать объект внешней компоненты ""%1"", подключенной на клиенте + |%2, + |по причине: + |%3'"), + Контекст.Идентификатор, + ПредставлениеМестоположенияКомпоненты(Контекст.Местоположение), + ТекстОшибки); + + КонецЕсли; + + Иначе + + ПодключаемыеМодули = Новый Соответствие; + Для каждого ИдентификаторОбъекта Из Контекст.ИдентификаторыСозданияОбъектов Цикл + + Попытка + ПодключаемыйМодуль = Новый("AddIn." + Контекст.СимволическоеИмя + "." + ИдентификаторОбъекта); + Если ПодключаемыйМодуль = Неопределено Тогда + ВызватьИсключение НСтр("ru = 'Оператор Новый вернул Неопределено'"); + КонецЕсли; + Исключение + ПодключаемыйМодуль = Неопределено; + ТекстОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + КонецПопытки; + + Если ПодключаемыйМодуль = Неопределено Тогда + + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось создать объект ""%1"" внешней компоненты ""%2"", подключенной на клиенте + |%3, + |по причине: + |%4'"), + ИдентификаторОбъекта, + Контекст.Идентификатор, + ПредставлениеМестоположенияКомпоненты(Контекст.Местоположение), + ТекстОшибки); + + КонецЕсли; + + ПодключаемыеМодули.Вставить(ИдентификаторОбъекта, ПодключаемыйМодуль); + + КонецЦикла; + + ПодключаемыйМодуль = Новый ФиксированноеСоответствие(ПодключаемыеМодули); + + КонецЕсли; + + Возврат ПодключаемыйМодуль; + +КонецФункции + +// Продолжение процедуры ПодключитьКомпоненту. +Функция РезультатПодключенияКомпоненты() + + Результат = Новый Структура; + Результат.Вставить("Подключено", Ложь); + Результат.Вставить("ОписаниеОшибки", ""); + Результат.Вставить("ПодключаемыйМодуль", Неопределено); + Возврат Результат; КонецФункции -Функция МестоположениеКомпонентыКорректно(Местоположение) +// Продолжение процедуры ПодключитьКомпоненту. +Функция ПредставлениеМестоположенияКомпоненты(Местоположение) Если СтрНачинаетсяС(Местоположение, "e1cib/") Тогда - Возврат Истина; + Возврат НСтр("ru = 'из хранилища внешних компонент'"); + Иначе + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'из макета ""%1""'"), + Местоположение); КонецЕсли; +КонецФункции + +#КонецОбласти + +#Область УстановкаВнешнейКомпоненты + +// Продолжение процедуры УстановитьКомпоненту. +Процедура УстановитьКомпонентуПослеОтветаНаВопросОбУстановке(Ответ, Контекст) Экспорт + + // Результат: + // - КодВозвратаДиалога.Да - Установить. + // - КодВозвратаДиалога.Отмена - Отклонить. + // - Неопределено - Закрыто окно. + Если Ответ = КодВозвратаДиалога.Да Тогда + УстановитьКомпонентуНачатьУстановку(Контекст); + Иначе + Результат = РезультатУстановкиКомпоненты(); + ВыполнитьОбработкуОповещения(Контекст.Оповещение, Результат); + КонецЕсли; + +КонецПроцедуры + +// Продолжение процедуры УстановитьКомпоненту. +Процедура УстановитьКомпонентуНачатьУстановку(Контекст) + + Оповещение = Новый ОписаниеОповещения( + "УстановитьКомпонентуПослеПопыткиУстановки", ЭтотОбъект, Контекст, + "УстановитьКомпонентуПриОбработкеОшибки", ЭтотОбъект); + + НачатьУстановкуВнешнейКомпоненты(Оповещение, Контекст.Местоположение); + +КонецПроцедуры + +// Продолжение процедуры УстановитьКомпоненту. +Процедура УстановитьКомпонентуПослеПопыткиУстановки(Контекст) Экспорт + + Результат = РезультатУстановкиКомпоненты(); + Результат.Вставить("Установлено", Истина); + + ВыполнитьОбработкуОповещения(Контекст.Оповещение, Результат); + +КонецПроцедуры + +// Продолжение процедуры УстановитьКомпоненту. +Процедура УстановитьКомпонентуПриОбработкеОшибки(ИнформацияОбОшибке, СтандартнаяОбработка, Контекст) Экспорт + + СтандартнаяОбработка = Ложь; + + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось установить внешнюю компоненту ""%1"" на клиенте + |%2 + |по причине: + |%3'"), + Контекст.Идентификатор, + ПредставлениеМестоположенияКомпоненты(Контекст.Местоположение), + КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); + + Результат = РезультатУстановкиКомпоненты(); + Результат.ОписаниеОшибки = ТекстОшибки; + + ВыполнитьОбработкуОповещения(Контекст.Оповещение, Результат); + +КонецПроцедуры + +// Продолжение процедуры УстановитьКомпоненту. +Функция РезультатУстановкиКомпоненты() + + Результат = Новый Структура; + Результат.Вставить("Установлено", Ложь); + Результат.Вставить("ОписаниеОшибки", ""); + + Возврат Результат; + +КонецФункции + +#КонецОбласти + +// Проверяет корректность местоположения компоненты. +Функция МестоположениеКомпонентыКорректно(Местоположение) + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ВнешниеКомпоненты") Тогда + МодульВнешниеКомпонентыСлужебныйКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ВнешниеКомпонентыСлужебныйКлиент"); + Если МодульВнешниеКомпонентыСлужебныйКлиент.ЭтоКомпонентаИзХранилища(Местоположение) Тогда + Возврат Истина; + КонецЕсли; + КонецЕсли; + + Возврат ЭтоМакет(Местоположение); + +КонецФункции + +// Проверяет, что местоположение указывает на макет. +Функция ЭтоМакет(Местоположение) + ШагиПути = СтрРазделить(Местоположение, "."); Если ШагиПути.Количество() < 2 Тогда Возврат Ложь; @@ -314,195 +480,75 @@ КонецФункции -#Область ПодключениеВнешнейКомпоненты +// Получает из кэша символическое имя внешней компоненты, если она была ранее подключена. +Функция ПолучитьСимволическоеИмяКомпонентыИзКэша(КлючОбъекта) + + СимволическоеИмя = Неопределено; + КэшированныеСимволическоеИмена = ПараметрыПриложения["СтандартныеПодсистемы.ВнешниеКомпоненты.СимволическиеИмена"]; + + Если ТипЗнч(КэшированныеСимволическоеИмена) = Тип("ФиксированноеСоответствие") Тогда + СимволическоеИмя = КэшированныеСимволическоеИмена.Получить(КлючОбъекта); + КонецЕсли; + + Возврат СимволическоеИмя; + +КонецФункции -// Продолжение процедуры ПодключитьКомпоненту. -Процедура ПодключитьКомпонентуЗавершение(Подключено, Контекст) Экспорт +// Записывает в кэш символическое имя внешней компоненты. +Процедура ЗаписатьСимволическоеИмяКомпонентыВКэш(КлючОбъекта, СимволическоеИмя) + + Соответствие = Новый Соответствие; + КэшированныеСимволическоеИмена = ПараметрыПриложения["СтандартныеПодсистемы.ВнешниеКомпоненты.СимволическиеИмена"]; + + Если ТипЗнч(КэшированныеСимволическоеИмена) = Тип("ФиксированноеСоответствие") Тогда + + Если КэшированныеСимволическоеИмена.Получить(КлючОбъекта) <> Неопределено Тогда // Уже есть в кэше. + Возврат; + КонецЕсли; + + Для каждого Элемент Из КэшированныеСимволическоеИмена Цикл + Соответствие.Вставить(Элемент.Ключ, Элемент.Значение); + КонецЦикла; + + КонецЕсли; + + Соответствие.Вставить(КлючОбъекта, СимволическоеИмя); + + ПараметрыПриложения.Вставить("СтандартныеПодсистемы.ВнешниеКомпоненты.СимволическиеИмена", + Новый ФиксированноеСоответствие(Соответствие)); + +КонецПроцедуры + +// Получает из кэша объект - экземпляр внешней компоненты +Функция ПолучитьОбъектКомпонентыИзКэша(КлючОбъекта) ПодключаемыйМодуль = Неопределено; + КэшированныеОбъекты = ПараметрыПриложения["СтандартныеПодсистемы.ВнешниеКомпоненты.Объекты"]; - Результат = Новый Структура; - Результат.Вставить("Подключено", Подключено); - - Если Не Подключено Тогда - - Если Контекст.ПредложитьУстановить Тогда - - ПодключитьКомпонентуНачатьУстановку(Контекст); - Возврат; - - КонецЕсли; - - Результат.Вставить("ОписаниеОшибки", НСтр("ru = 'Ошибка при подключении внешней компоненты'")); - ВыполнитьОбработкуОповещения(Контекст.Оповещение, Результат); - Возврат; - + Если ТипЗнч(КэшированныеОбъекты) = Тип("ФиксированноеСоответствие") Тогда + ПодключаемыйМодуль = КэшированныеОбъекты.Получить(КлючОбъекта); КонецЕсли; - Попытка - - Если Контекст.ИдентификаторыСозданияОбъектов.Количество() = 0 Тогда - - ПодключаемыйМодуль = Новый("AddIn." + Контекст.СимволическоеИмя + "." + Контекст.Идентификатор); - - Если ПодключаемыйМодуль = Неопределено Тогда - ВызватьИсключение НСтр("ru = 'Ошибка при создании экземпляра внешней компоненты'"); - КонецЕсли; - - Иначе - - ПодключаемыеМодули = Новый Соответствие; - Для каждого Идентификатор Из Контекст.ИдентификаторыСозданияОбъектов Цикл - - ПодключаемыйМодуль = Новый("AddIn." + Контекст.СимволическоеИмя + "." + Идентификатор); - - Если ПодключаемыйМодуль = Неопределено Тогда - ВызватьИсключение НСтр("ru = 'Ошибка при создании экземпляра внешней компоненты'"); - КонецЕсли; - - ПодключаемыеМодули.Вставить(Идентификатор, ПодключаемыйМодуль); - - КонецЦикла; - - ПодключаемыйМодуль = Новый ФиксированноеСоответствие(ПодключаемыеМодули); - - КонецЕсли; - - Исключение - Результат.Вставить("Подключено" , Ложь); - Результат.Вставить("ОписаниеОшибки", КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); - КонецПопытки; + Возврат ПодключаемыйМодуль; - Если Контекст.Кэшировать Тогда - - // Помещение в кэш экземпляра внешней компоненты. - - Соответствие = Новый Соответствие; - КэшированныеКомпоненты = ПараметрыПриложения["СтандартныеПодсистемы.ВнешниеКомпоненты.КэшированныеКомпоненты"]; - Если ТипЗнч(КэшированныеКомпоненты) = Тип("ФиксированноеСоответствие") Тогда - Для Каждого Элемент Из КэшированныеКомпоненты Цикл - Соответствие.Вставить(Элемент.Ключ, Элемент.Значение); - КонецЦикла; - КонецЕсли; - - Соответствие.Вставить(Контекст.Местоположение, ПодключаемыйМодуль); - - ПараметрыПриложения.Вставить("СтандартныеПодсистемы.ВнешниеКомпоненты.КэшированныеКомпоненты", - Новый ФиксированноеСоответствие(Соответствие)); - +КонецФункции + +// Записывает в кэш экземпляр внешней компоненты +Процедура ЗаписатьОбъектКомпонентыВКэш(КлючОбъекта, ПодключаемыйМодуль) + + Соответствие = Новый Соответствие; + КэшированныеОбъекты = ПараметрыПриложения["СтандартныеПодсистемы.ВнешниеКомпоненты.Объекты"]; + + Если ТипЗнч(КэшированныеОбъекты) = Тип("ФиксированноеСоответствие") Тогда + Для каждого Элемент Из КэшированныеОбъекты Цикл + Соответствие.Вставить(Элемент.Ключ, Элемент.Значение); + КонецЦикла; КонецЕсли; - Результат.Вставить("ПодключаемыйМодуль", ПодключаемыйМодуль); - ВыполнитьОбработкуОповещения(Контекст.Оповещение, Результат); + Соответствие.Вставить(КлючОбъекта, ПодключаемыйМодуль); -КонецПроцедуры - -// Продолжение процедуры ПодключитьКомпоненту. -Процедура ПодключитьКомпонентуНачатьУстановку(Контекст) - - Оповещение = Новый ОписаниеОповещения( - "ПодключитьКомпонентуПослеУстановки", ЭтотОбъект, Контекст); - - КонтекстУстановки = Новый Структура; - КонтекстУстановки.Вставить("Оповещение" , Оповещение); - КонтекстУстановки.Вставить("Местоположение", Контекст.Местоположение); - КонтекстУстановки.Вставить("ТекстПояснения", Контекст.ТекстПояснения); - - УстановитьКомпоненту(КонтекстУстановки); - -КонецПроцедуры - -// Продолжение процедуры ПодключитьКомпоненту. -Процедура ПодключитьКомпонентуПослеУстановки(Результат, Контекст) Экспорт - - Если Не Результат.Установлено Тогда - - РезультатПодключения = Новый Структура; - РезультатПодключения.Вставить("Подключено" , Ложь); - РезультатПодключения.Вставить("ОписаниеОшибки", Результат.ОписаниеОшибки); - - ВыполнитьОбработкуОповещения(Контекст.Оповещение, РезультатПодключения); - Возврат; - - КонецЕсли; - - Контекст.ПредложитьУстановить = Ложь; // Одна попытка установки уже прошла. - ПодключитьКомпоненту(Контекст); - -КонецПроцедуры - -// Продолжение процедуры ПодключитьКомпоненту. -Процедура ПодключитьКомпонентуЗавершениеПоОшибке(ИнформацияОбОшибке, СтандартнаяОбработка, Контекст) Экспорт - - СтандартнаяОбработка = Ложь; - - Результат = Новый Структура; - Результат.Вставить("Подключено" , Ложь); - Результат.Вставить("ОписаниеОшибки", КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); - - ВыполнитьОбработкуОповещения(Контекст.Оповещение, Результат); - -КонецПроцедуры - -#КонецОбласти - -#Область УстановкаВнешнейКомпоненты - -// Продолжение процедуры УстановитьКомпоненту. -Процедура УстановитьКомпонентуПослеОтветаНаВопросОбУстановке(Ответ, Контекст) Экспорт - - // Результат: - // - КодВозвратаДиалога.Да - Установить. - // - КодВозвратаДиалога.Отмена - Отклонить. - // - Неопределено - Закрыто окно. - Если Ответ = КодВозвратаДиалога.Да Тогда - УстановитьКомпонентуНачатьУстановку(Контекст); - Иначе - Результат = Новый Структура; - Результат.Вставить("Установлено" , Ложь); - Результат.Вставить("ОписаниеОшибки", ""); - ВыполнитьОбработкуОповещения(Контекст.Оповещение, Результат); - КонецЕсли; - -КонецПроцедуры - -// Продолжение процедуры УстановитьКомпоненту. -Процедура УстановитьКомпонентуНачатьУстановку(Контекст) - - Если Не МестоположениеКомпонентыКорректно(Контекст.Местоположение) Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru='Некорректное значение параметра Местоположение (%1) - |в ОбщегоНазначенияСлужебныйКлиент.УстановитьКомпонентуНачатьУстановку'"), Контекст.Местоположение); - КонецЕсли; - - Оповещение = Новый ОписаниеОповещения( - "УстановитьКомпонентуЗавершение", ЭтотОбъект, Контекст, - "УстановитьКомпонентуЗавершениеПоОшибке", ЭтотОбъект); - - НачатьУстановкуВнешнейКомпоненты(Оповещение, Контекст.Местоположение); - -КонецПроцедуры - -// Продолжение процедуры УстановитьКомпоненту. -Процедура УстановитьКомпонентуЗавершение(Контекст) Экспорт - - Результат = Новый Структура; - Результат.Вставить("Установлено", Истина); - - ВыполнитьОбработкуОповещения(Контекст.Оповещение, Результат); - -КонецПроцедуры - -// Продолжение процедуры УстановитьКомпоненту. -Процедура УстановитьКомпонентуЗавершениеПоОшибке(ИнформацияОбОшибке, СтандартнаяОбработка, Контекст) Экспорт - - СтандартнаяОбработка = Ложь; - - Результат = Новый Структура; - Результат.Вставить("Установлено" , Ложь); - Результат.Вставить("ОписаниеОшибки", КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); - - ВыполнитьОбработкуОповещения(Контекст.Оповещение, Результат); + ПараметрыПриложения.Вставить("СтандартныеПодсистемы.ВнешниеКомпоненты.Объекты", + Новый ФиксированноеСоответствие(Соответствие)); КонецПроцедуры @@ -966,4 +1012,248 @@ #КонецОбласти +#Область СоздатьВременныйКаталог + +// Продолжение процедуры ОбщегоНазначенияКлиент.СоздатьВременныйКаталог. +Процедура СоздатьВременныйКаталогПослеПроверкиРасширенияРаботыСФайлами(РасширениеПодключено, Контекст) Экспорт + + Если РасширениеПодключено Тогда + + Оповещение = Новый ОписаниеОповещения("СоздатьВременныйКаталогПослеПолученияВременногоКаталога", + ЭтотОбъект, Контекст); + + НачатьПолучениеКаталогаВременныхФайлов(Оповещение); + + Иначе + ОписаниеОшибки = + НСтр("ru = 'Расширение для работы с файлами не установлено, создание временного каталога невозможно.'"); + СоздатьВременныйКаталогОповеститьОбОшибке(ОписаниеОшибки, Контекст); + КонецЕсли; + +КонецПроцедуры + +// Продолжение процедуры ОбщегоНазначенияКлиент.СоздатьВременныйКаталог. +Процедура СоздатьВременныйКаталогПослеПолученияВременногоКаталога(ИмяКаталогаВременныхФайлов, Контекст) Экспорт + + Оповещение = Контекст.Оповещение; + Расширение = Контекст.Расширение; + + ИмяКаталога = "v8_" + Строка(Новый УникальныйИдентификатор); + + Если Не ПустаяСтрока(Расширение) Тогда + ИмяКаталога = ИмяКаталога + "." + Расширение; + КонецЕсли; + + НачатьСозданиеКаталога(Оповещение, ИмяКаталогаВременныхФайлов + ИмяКаталога); + +КонецПроцедуры + +// Продолжение процедуры ОбщегоНазначенияКлиент.СоздатьВременныйКаталог. +Процедура СоздатьВременныйКаталогОповеститьОбОшибке(ОписаниеОшибки, Контекст) + + ПоказатьПредупреждение(, ОписаниеОшибки); + ИмяКаталога = ""; + ВыполнитьОбработкуОповещения(Контекст.Оповещение, ИмяКаталога); + +КонецПроцедуры + +#КонецОбласти + +#Область Прочее + +Процедура ПоказатьВопросОбУстановкеРасширенияРаботыСФайламиПриУстановкеРасширения(Подключено, ДополнительныеПараметры) Экспорт + + // Если расширение и так уже подключено, незачем про него спрашивать. + Если Подключено Тогда + ВыполнитьОбработкуОповещения(ДополнительныеПараметры.ОписаниеОповещенияЗавершение, "ПодключениеНеТребуется"); + Возврат; + КонецЕсли; + + // В веб клиенте под MacOS расширение не доступно. + СистемнаяИнформация = Новый СистемнаяИнформация; + ЭтоMacКлиент = (СистемнаяИнформация.ТипПлатформы = ТипПлатформы.MacOS_x86 + Или СистемнаяИнформация.ТипПлатформы = ТипПлатформы.MacOS_x86_64); + Если ЭтоMacКлиент Тогда + ВыполнитьОбработкуОповещения(ДополнительныеПараметры.ОписаниеОповещенияЗавершение); + Возврат; + КонецЕсли; + + ИмяПараметра = "СтандартныеПодсистемы.ПредлагатьУстановкуРасширенияРаботыСФайлами"; + ПервоеОбращениеЗаСеанс = ПараметрыПриложения[ИмяПараметра] = Неопределено; + Если ПараметрыПриложения[ИмяПараметра] = Неопределено Тогда + ПараметрыПриложения.Вставить(ИмяПараметра, ОбщегоНазначенияКлиент.ПредлагатьУстановкуРасширенияРаботыСФайлами()); + КонецЕсли; + ПредлагатьУстановкуРасширенияРаботыСФайлами = ПараметрыПриложения[ИмяПараметра] Или ПервоеОбращениеЗаСеанс; + + Если ДополнительныеПараметры.ВозможноПродолжениеБезУстановки И Не ПредлагатьУстановкуРасширенияРаботыСФайлами Тогда + ВыполнитьОбработкуОповещения(ДополнительныеПараметры.ОписаниеОповещенияЗавершение); + Возврат; + КонецЕсли; + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ТекстПредложения", ДополнительныеПараметры.ТекстПредложения); + ПараметрыФормы.Вставить("ВозможноПродолжениеБезУстановки", ДополнительныеПараметры.ВозможноПродолжениеБезУстановки); + ОткрытьФорму("ОбщаяФорма.ВопросОбУстановкеРасширенияРаботыСФайлами", ПараметрыФормы,,,,,ДополнительныеПараметры.ОписаниеОповещенияЗавершение); + +КонецПроцедуры + +Процедура ПоказатьВопросОбУстановкеРасширенияРаботыСФайламиЗавершение(Действие, ОповещениеОЗакрытии) Экспорт + + РасширениеПодключено = (Действие = "РасширениеПодключено" Или Действие = "ПодключениеНеТребуется"); +#Если ВебКлиент Тогда + Если Действие = "БольшеНеПредлагать" + Или Действие = "РасширениеПодключено" Тогда + СистемнаяИнформация = Новый СистемнаяИнформация(); + ИдентификаторКлиента = СистемнаяИнформация.ИдентификаторКлиента; + ПараметрыПриложения["СтандартныеПодсистемы.ПредлагатьУстановкуРасширенияРаботыСФайлами"] = Ложь; + ОбщегоНазначенияВызовСервера.ХранилищеОбщихНастроекСохранить( + "НастройкиПрограммы/ПредлагатьУстановкуРасширенияРаботыСФайлами", ИдентификаторКлиента, Ложь); + КонецЕсли; +#КонецЕсли + + ВыполнитьОбработкуОповещения(ОповещениеОЗакрытии, РасширениеПодключено); + +КонецПроцедуры + +Процедура ПроверитьРасширениеРаботыСФайламиПодключеноЗавершение(РасширениеПодключено, ДополнительныеПараметры) Экспорт + + Если РасширениеПодключено Тогда + ВыполнитьОбработкуОповещения(ДополнительныеПараметры.ОписаниеОповещенияОЗакрытии); + Возврат; + КонецЕсли; + + ТекстСообщения = ДополнительныеПараметры.ТекстПредупреждения; + Если ПустаяСтрока(ТекстСообщения) Тогда + ТекстСообщения = НСтр("ru = 'Действие недоступно, так как не установлено расширение для веб-клиента 1С:Предприятие.'") + КонецЕсли; + ПоказатьПредупреждение(, ТекстСообщения); + +КонецПроцедуры + +Процедура КомментарийЗавершениеВвода(Знач ВведенныйТекст, Знач ДополнительныеПараметры) Экспорт + + Если ВведенныйТекст = Неопределено Тогда + Возврат; + КонецЕсли; + + РеквизитФормы = ДополнительныеПараметры.ФормаВладелец; + + ПутьКРеквизитуФормы = СтрРазделить(ДополнительныеПараметры.ИмяРеквизита, "."); + // Если реквизит вида "Объект.Комментарий" и т.п. + Если ПутьКРеквизитуФормы.Количество() > 1 Тогда + Для Индекс = 0 По ПутьКРеквизитуФормы.Количество() - 2 Цикл + РеквизитФормы = РеквизитФормы[ПутьКРеквизитуФормы[Индекс]]; + КонецЦикла; + КонецЕсли; + + РеквизитФормы[ПутьКРеквизитуФормы[ПутьКРеквизитуФормы.Количество() - 1]] = ВведенныйТекст; + ДополнительныеПараметры.ФормаВладелец.Модифицированность = Истина; + +КонецПроцедуры + +Процедура ЗарегистрироватьCOMСоединительЗавершение(Ответ, Параметры) Экспорт + + Если Ответ = КодВозвратаДиалога.Да Тогда + ПараметрыПриложения.Вставить("СтандартныеПодсистемы.ПропуститьПредупреждениеПередЗавершениемРаботыСистемы", Истина); + ЗавершитьРаботуСистемы(Истина, Истина); + КонецЕсли; + +КонецПроцедуры + +Процедура ПодтвердитьЗакрытиеФормы() Экспорт + + ИмяПараметра = "СтандартныеПодсистемы.ПараметрыПодтвержденияЗакрытияФормы"; + Если ПараметрыПриложения[ИмяПараметра] = Неопределено Тогда + ПараметрыПриложения.Вставить(ИмяПараметра, Неопределено); + КонецЕсли; + + Параметры = ПараметрыПриложения["СтандартныеПодсистемы.ПараметрыПодтвержденияЗакрытияФормы"]; + Если Параметры = Неопределено Тогда + Возврат; + КонецЕсли; + ПараметрыПриложения["СтандартныеПодсистемы.ПараметрыПодтвержденияЗакрытияФормы"] = Неопределено; + + Оповещение = Новый ОписаниеОповещения("ПодтвердитьЗакрытиеФормыЗавершение", ЭтотОбъект, Параметры); + Если ПустаяСтрока(Параметры.ТекстПредупреждения) Тогда + ТекстВопроса = НСтр("ru = 'Данные были изменены. Сохранить изменения?'"); + Иначе + ТекстВопроса = Параметры.ТекстПредупреждения; + КонецЕсли; + + ПоказатьВопрос(Оповещение, ТекстВопроса, РежимДиалогаВопрос.ДаНетОтмена, , + КодВозвратаДиалога.Нет); + +КонецПроцедуры + +Процедура ПодтвердитьЗакрытиеФормыЗавершение(Ответ, Параметры) Экспорт + + Если Ответ = КодВозвратаДиалога.Да Тогда + ВыполнитьОбработкуОповещения(Параметры.ОповещениеСохранитьИЗакрыть); + ИначеЕсли Ответ = КодВозвратаДиалога.Нет Тогда + Форма = Параметры.ОповещениеСохранитьИЗакрыть.Модуль; + Форма.Модифицированность = Ложь; + Форма.Закрыть(); + Иначе + Форма = Параметры.ОповещениеСохранитьИЗакрыть.Модуль; + Форма.Модифицированность = Истина; + КонецЕсли; + +КонецПроцедуры + +Процедура ПодтвердитьЗакрытиеПроизвольнойФормы() Экспорт + + ИмяПараметра = "СтандартныеПодсистемы.ПараметрыПодтвержденияЗакрытияФормы"; + Если ПараметрыПриложения[ИмяПараметра] = Неопределено Тогда + ПараметрыПриложения.Вставить(ИмяПараметра, Неопределено); + КонецЕсли; + + Параметры = ПараметрыПриложения["СтандартныеПодсистемы.ПараметрыПодтвержденияЗакрытияФормы"]; + Если Параметры = Неопределено Тогда + Возврат; + КонецЕсли; + ПараметрыПриложения["СтандартныеПодсистемы.ПараметрыПодтвержденияЗакрытияФормы"] = Неопределено; + РежимВопроса = РежимДиалогаВопрос.ДаНет; + + Оповещение = Новый ОписаниеОповещения("ПодтвердитьЗакрытиеПроизвольнойФормыЗавершение", ЭтотОбъект, Параметры); + + ПоказатьВопрос(Оповещение, Параметры.ТекстПредупреждения, РежимВопроса); + +КонецПроцедуры + +Процедура ПодтвердитьЗакрытиеПроизвольнойФормыЗавершение(Ответ, Параметры) Экспорт + + Форма = Параметры.Форма; + Если Ответ = КодВозвратаДиалога.Да + Или Ответ = КодВозвратаДиалога.ОК Тогда + Форма[Параметры.ИмяРеквизитаЗакрытьФормуБезПодтверждения] = Истина; + Если Параметры.ОписаниеОповещенияЗакрыть <> Неопределено Тогда + ВыполнитьОбработкуОповещения(Параметры.ОписаниеОповещенияЗакрыть); + КонецЕсли; + Форма.Закрыть(); + Иначе + Форма[Параметры.ИмяРеквизитаЗакрытьФормуБезПодтверждения] = Ложь; + КонецЕсли; + +КонецПроцедуры + +Функция ИмяОбъектаМетаданных(Тип) Экспорт + + ИмяПараметра = "СтандартныеПодсистемы.ИменаОбъектовМетаданных"; + Если ПараметрыПриложения[ИмяПараметра] = Неопределено Тогда + ПараметрыПриложения.Вставить(ИмяПараметра, Новый Соответствие); + КонецЕсли; + ИменаОбъектовМетаданных = ПараметрыПриложения[ИмяПараметра]; + + Результат = ИменаОбъектовМетаданных[Тип]; + Если Результат = Неопределено Тогда + Результат = СтандартныеПодсистемыВызовСервера.ИмяОбъектаМетаданных(Тип); + ИменаОбъектовМетаданных.Вставить(Тип, Результат); + КонецЕсли; + + Возврат Результат; + +КонецФункции + +#КонецОбласти + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ОтправкаSMS/Module.bsl b/SSL/src/CommonModules/ОтправкаSMS/Module.bsl index c21426acc..5272ffd3c 100644 --- a/SSL/src/CommonModules/ОтправкаSMS/Module.bsl +++ b/SSL/src/CommonModules/ОтправкаSMS/Module.bsl @@ -145,7 +145,7 @@ // Булево - Истина, если отправка SMS настроена, и у текущего пользователя достаточно прав для отправки SMS. // Функция ДоступнаОтправкаSMS() Экспорт - Возврат Пользователи.РолиДоступны("ОтправкаSMS") И НастройкаОтправкиSMSВыполнена() Или Пользователи.ЭтоПолноправныйПользователь(); + Возврат ПравоДоступа("Просмотр", Метаданные.ОбщиеФормы.ОтправкаSMS) И НастройкаОтправкиSMSВыполнена() Или Пользователи.ЭтоПолноправныйПользователь(); КонецФункции #КонецОбласти @@ -170,7 +170,7 @@ //////////////////////////////////////////////////////////////////////////////// // Обработчики событий подсистем конфигурации. -// См. ОбщегоНазначенияПереопределяемый.ПараметрыРаботыКлиента. +// См. ОбщегоНазначенияПереопределяемый.ПриДобавленииПараметровРаботыКлиента. Процедура ПриДобавленииПараметровРаботыКлиента(Параметры) Экспорт Параметры.Вставить("ДоступнаОтправкаSMS", ДоступнаОтправкаSMS()); КонецПроцедуры @@ -203,7 +203,7 @@ КонецФункции Процедура ПроверитьПрава() Экспорт - Если Не Пользователи.РолиДоступны("ОтправкаSMS") Тогда + Если Не ПравоДоступа("Просмотр", Метаданные.ОбщиеФормы.ОтправкаSMS) Тогда ВызватьИсключение НСтр("ru = 'Недостаточно прав для выполнения операции.'"); КонецЕсли; КонецПроцедуры @@ -225,4 +225,26 @@ Возврат Результат; КонецФункции +Функция ПодготовитьHTTPЗапрос(АдресРесурса, ПараметрыЗапроса) Экспорт + + Заголовки = Новый Соответствие; + Заголовки.Вставить("Content-Type", "application/x-www-form-urlencoded"); + + Если ТипЗнч(ПараметрыЗапроса) = Тип("Строка") Тогда + СтрокаПараметров = ПараметрыЗапроса; + Иначе + СписокПараметров = Новый Массив; + Для Каждого Параметр Из ПараметрыЗапроса Цикл + СписокПараметров.Добавить(Параметр.Ключ + "=" + КодироватьСтроку(Параметр.Значение, СпособКодированияСтроки.КодировкаURL)); + КонецЦикла; + СтрокаПараметров = СтрСоединить(СписокПараметров, "&"); + КонецЕсли; + + HTTPЗапрос = Новый HTTPЗапрос(АдресРесурса, Заголовки); + HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаПараметров); + + Возврат HTTPЗапрос; + +КонецФункции + #КонецОбласти diff --git a/SSL/src/CommonModules/ОтправкаSMSКлиент/Module.bsl b/SSL/src/CommonModules/ОтправкаSMSКлиент/Module.bsl index 5e1c5f14a..6ed23b121 100644 --- a/SSL/src/CommonModules/ОтправкаSMSКлиент/Module.bsl +++ b/SSL/src/CommonModules/ОтправкаSMSКлиент/Module.bsl @@ -81,7 +81,8 @@ Адресаты.Добавить(Телефон); КонецЦикла; МодульВзаимодействияКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ВзаимодействияКлиент"); - МодульВзаимодействияКлиент.ОткрытьФормуОтправкиSMS(Адресаты, ПараметрыОтправки.Текст,, ПараметрыОтправки.ДополнительныеПараметры.ПеревестиВТранслит); + Предмет = ?(ПараметрыОтправки.ДополнительныеПараметры.Свойство("Предмет"), ПараметрыОтправки.ДополнительныеПараметры.Предмет, Неопределено); + МодульВзаимодействияКлиент.ОткрытьФормуОтправкиSMS(Адресаты, ПараметрыОтправки.Текст, Предмет, ПараметрыОтправки.ДополнительныеПараметры.ПеревестиВТранслит); Иначе ОткрытьФорму("ОбщаяФорма.ОтправкаSMS", ПараметрыОтправки); КонецЕсли; diff --git a/SSL/src/CommonModules/ОтправкаSMSПовтИсп/Module.bsl b/SSL/src/CommonModules/ОтправкаSMSПовтИсп/Module.bsl index 36e4cd4a8..8bd634d7c 100644 --- a/SSL/src/CommonModules/ОтправкаSMSПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ОтправкаSMSПовтИсп/Module.bsl @@ -37,7 +37,7 @@ Результат.ИмяОтправителя = НастройкиПровайдера.ИмяОтправителя; Результат.Провайдер =Константы.ПровайдерSMS.Получить(); КонецЕсли; - Возврат Результат; + Возврат Новый ФиксированнаяСтруктура(Результат); КонецФункции #КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ОтправкаSMSЧерезGSMINFORM/Module.bsl b/SSL/src/CommonModules/ОтправкаSMSЧерезGSMINFORM/Module.bsl index f90bbc8af..2ac3f8117 100644 --- a/SSL/src/CommonModules/ОтправкаSMSЧерезGSMINFORM/Module.bsl +++ b/SSL/src/CommonModules/ОтправкаSMSЧерезGSMINFORM/Module.bsl @@ -38,18 +38,16 @@ ПараметрыЗапроса.Вставить("sender", ИмяОтправителя); // отправка запроса - ИмяФайлаОтвета = ВыполнитьЗапрос(ПараметрыЗапроса); - - Если ПустаяСтрока(ИмяФайлаОтвета) Тогда + Ответ = ВыполнитьЗапрос(ПараметрыЗапроса); + Если Ответ = Неопределено Тогда Результат.ОписаниеОшибки = Результат.ОписаниеОшибки + НСтр("ru = 'Соединение не установлено'"); Возврат Результат; КонецЕсли; ЧтениеJSON = Новый ЧтениеJSON; - ЧтениеJSON.ОткрытьФайл(ИмяФайлаОтвета); + ЧтениеJSON.УстановитьСтроку(Ответ); ОтветСервера = ПрочитатьJSON(ЧтениеJSON); ЧтениеJSON.Закрыть(); - УдалитьФайлы(ИмяФайлаОтвета); Если ОтветСервера["error_no"] = 0 Тогда Для Каждого Элемент Из ОтветСервера["items"] Цикл @@ -97,16 +95,15 @@ ПараметрыЗапроса.Вставить("cmd", "status"); // отправка запроса - ИмяФайлаОтвета = ВыполнитьЗапрос(ПараметрыЗапроса); - Если ПустаяСтрока(ИмяФайлаОтвета) Тогда + Ответ = ВыполнитьЗапрос(ПараметрыЗапроса); + Если Ответ = Неопределено Тогда Возврат "Ошибка"; КонецЕсли; ЧтениеJSON = Новый ЧтениеJSON; - ЧтениеJSON.ОткрытьФайл(ИмяФайлаОтвета); + ЧтениеJSON.УстановитьСтроку(Ответ); ОтветСервера = ПрочитатьJSON(ЧтениеJSON); ЧтениеJSON.Закрыть(); - УдалитьФайлы(ИмяФайлаОтвета); ОписаниеОшибки = ""; КодОшибки = Неопределено; @@ -194,59 +191,25 @@ Функция ВыполнитьЗапрос(ПараметрыЗапроса) - Результат = ""; + HTTPЗапрос = ОтправкаSMS.ПодготовитьHTTPЗапрос("/api/", ПараметрыЗапроса); + HTTPОтвет = Неопределено; - ИмяФайлаЗапроса = СформироватьФайлДляPOSTЗапроса(ПараметрыЗапроса); - ИмяФайлаОтвета = ПолучитьИмяВременногоФайла("txt"); - - // формирование заголовка - Заголовок = Новый Соответствие; - Заголовок.Вставить("Content-Type", "application/x-www-form-urlencoded"); - Заголовок.Вставить("Content-Length", XMLСтрока(РазмерФайла(ИмяФайлаЗапроса))); - - // Отправка запроса и получение ответа. Попытка Соединение = Новый HTTPСоединение("gsm-inform.ru", , , , ПолучениеФайловИзИнтернетаКлиентСервер.ПолучитьПрокси("http"), 60); - Соединение.ОтправитьДляОбработки(ИмяФайлаЗапроса, "/api/", ИмяФайлаОтвета, Заголовок); - Результат = ИмяФайлаОтвета; + HTTPОтвет = Соединение.ОтправитьДляОбработки(HTTPЗапрос); Исключение - ЗаписьЖурналаРегистрации( - НСтр("ru = 'Отправка SMS'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка, - , - , - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Отправка SMS'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; - УдалитьФайлы(ИмяФайлаЗапроса); + Если HTTPОтвет <> Неопределено Тогда + Возврат HTTPОтвет.ПолучитьТелоКакСтроку(); + КонецЕсли; - Возврат Результат; + Возврат Неопределено; КонецФункции -Функция СформироватьФайлДляPOSTЗапроса(ПараметрыЗапроса) - СтрокаЗапроса = ""; - Для Каждого Параметр Из ПараметрыЗапроса Цикл - Если Не ПустаяСтрока(СтрокаЗапроса) Тогда - СтрокаЗапроса = СтрокаЗапроса + "&"; - КонецЕсли; - СтрокаЗапроса = СтрокаЗапроса + Параметр.Ключ + "=" + КодироватьСтроку(Параметр.Значение, СпособКодированияСтроки.КодировкаURL); - КонецЦикла; - - ИмяФайлаЗапроса = ПолучитьИмяВременногоФайла("txt"); - - ФайлЗапроса = Новый ЗаписьТекста(ИмяФайлаЗапроса, КодировкаТекста.ANSI); - ФайлЗапроса.Записать(СтрокаЗапроса); - ФайлЗапроса.Закрыть(); - - Возврат ИмяФайлаЗапроса; -КонецФункции - -Функция РазмерФайла(ИмяФайла) - Файл = Новый Файл(ИмяФайла); - Возврат Файл.Размер(); -КонецФункции - Функция МассивПолучателейСтрокой(Массив) Получатели = Новый Массив; ОбщегоНазначенияКлиентСервер.ДополнитьМассив(Получатели, Массив, Истина); diff --git a/SSL/src/CommonModules/ОтправкаSMSЧерезSMS4B/Module.bsl b/SSL/src/CommonModules/ОтправкаSMSЧерезSMS4B/Module.bsl index ec1a0c739..7d43294e4 100644 --- a/SSL/src/CommonModules/ОтправкаSMSЧерезSMS4B/Module.bsl +++ b/SSL/src/CommonModules/ОтправкаSMSЧерезSMS4B/Module.bsl @@ -163,23 +163,24 @@ Функция ВыполнитьЗапрос(ИмяМетода, ПараметрыЗапроса) - Результат = ""; + HTTPЗапрос = ОтправкаSMS.ПодготовитьHTTPЗапрос("/ws/s1c.asmx/" + ИмяМетода, ПараметрыЗапроса); + HTTPОтвет = Неопределено; - ИмяФайлаЗапроса = СформироватьФайлДляPOSTЗапроса(ПараметрыЗапроса); - ИмяФайлаОтвета = ПолучитьИмяВременногоФайла("xml"); - - // формирование заголовка - Заголовок = Новый Соответствие; - Заголовок.Вставить("Content-Type", "application/x-www-form-urlencoded"); - Заголовок.Вставить("Content-Length", XMLСтрока(РазмерФайла(ИмяФайлаЗапроса))); - - // Отправка запроса и получение ответа. Попытка - Соединение = Новый HTTPСоединение("sms4b.ru", , , , ПолучениеФайловИзИнтернетаКлиентСервер.ПолучитьПрокси("https"), 60, Новый ЗащищенноеСоединениеOpenSSL); - Соединение.ОтправитьДляОбработки(ИмяФайлаЗапроса, "/ws/s1c.asmx/" + ИмяМетода, ИмяФайлаОтвета, Заголовок); - + Соединение = Новый HTTPСоединение("sms4b.ru", , , , ПолучениеФайловИзИнтернетаКлиентСервер.ПолучитьПрокси("https"), + 60, Новый ЗащищенноеСоединениеOpenSSL(, Новый СертификатыУдостоверяющихЦентровОС)); + + HTTPОтвет = Соединение.ОтправитьДляОбработки(HTTPЗапрос); + Исключение + ЗаписьЖурналаРегистрации(НСтр("ru = 'Отправка SMS'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + Результат = ""; + Если HTTPОтвет <> Неопределено Тогда + ТекстОтвета = HTTPОтвет.ПолучитьТелоКакСтроку(); ЧтениеXML = Новый ЧтениеXML; - ЧтениеXML.ОткрытьФайл(ИмяФайлаОтвета); + ЧтениеXML.УстановитьСтроку(ТекстОтвета); ЧтениеXML.Прочитать(); Если ЧтениеXML.Имя = "string" Тогда Если ЧтениеXML.Прочитать() Тогда @@ -187,46 +188,12 @@ КонецЕсли; КонецЕсли; ЧтениеXML.Закрыть(); - Исключение - ЗаписьЖурналаРегистрации( - НСтр("ru = 'Отправка SMS'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка, - , - , - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - Результат = ""; - КонецПопытки; - - УдалитьФайлы(ИмяФайлаЗапроса); - УдалитьФайлы(ИмяФайлаОтвета); + КонецЕсли; Возврат Результат; КонецФункции -Функция СформироватьФайлДляPOSTЗапроса(ПараметрыЗапроса) - СтрокаЗапроса = ""; - Для Каждого Параметр Из ПараметрыЗапроса Цикл - Если Не ПустаяСтрока(СтрокаЗапроса) Тогда - СтрокаЗапроса = СтрокаЗапроса + "&"; - КонецЕсли; - СтрокаЗапроса = СтрокаЗапроса + Параметр.Ключ + "=" + КодироватьСтроку(Параметр.Значение, СпособКодированияСтроки.КодировкаURL); - КонецЦикла; - - ИмяФайлаЗапроса = ПолучитьИмяВременногоФайла("txt"); - - ФайлЗапроса = Новый ЗаписьТекста(ИмяФайлаЗапроса, КодировкаТекста.ANSI); - ФайлЗапроса.Записать(СтрокаЗапроса); - ФайлЗапроса.Закрыть(); - - Возврат ИмяФайлаЗапроса; -КонецФункции - -Функция РазмерФайла(ИмяФайла) - Файл = Новый Файл(ИмяФайла); - Возврат Файл.Размер(); -КонецФункции - Функция ФорматироватьНомер(Номер) Результат = ""; ДопустимыеСимволы = "1234567890"; diff --git a/SSL/src/CommonModules/ОтправкаSMSЧерезSMSRU/Module.bsl b/SSL/src/CommonModules/ОтправкаSMSЧерезSMSRU/Module.bsl index 4b3d0fbab..1700f9736 100644 --- a/SSL/src/CommonModules/ОтправкаSMSЧерезSMSRU/Module.bsl +++ b/SSL/src/CommonModules/ОтправкаSMSЧерезSMSRU/Module.bsl @@ -36,22 +36,27 @@ ПараметрыЗапроса.Вставить("from", ИмяОтправителя); // отправка запроса - ИмяФайлаОтвета = ВыполнитьЗапрос("sms/send", ПараметрыЗапроса); - Если ПустаяСтрока(ИмяФайлаОтвета) Тогда + ТекстОтвета = ВыполнитьЗапрос("sms/send", ПараметрыЗапроса); + Если Не ЗначениеЗаполнено(ТекстОтвета) Тогда Результат.ОписаниеОшибки = Результат.ОписаниеОшибки + НСтр("ru = 'Соединение не установлено'"); Возврат Результат; КонецЕсли; - ЧтениеТекста = Новый ЧтениеТекста(ИмяФайлаОтвета); - ОтветСервера = ЧтениеТекста.ПрочитатьСтроку(); + ИдентификаторыСообщений = СтрРазделить(ТекстОтвета, Символы.ПС); + + ОтветСервера = ИдентификаторыСообщений[0]; + ИдентификаторыСообщений.Удалить(0); + Если ОтветСервера = "100" Тогда - Для Каждого НомерПолучателя Из СтрРазделить(СтрокаПолучателей, ",", Ложь) Цикл - ИдентификаторСообщения = ЧтениеТекста.ПрочитатьСтроку(); - Если ИдентификаторСообщения = Неопределено Тогда - Результат.ОписаниеОшибки = НСтр("ru = 'Ответ сервера не распознан'"); - Прервать; - КонецЕсли; - + НомераПолучателей = СтрРазделить(СтрокаПолучателей, ",", Ложь); + Если ИдентификаторыСообщений.Количество() < НомераПолучателей.Количество() Тогда + Результат.ОписаниеОшибки = НСтр("ru = 'Ответ сервера не распознан'"); + Возврат Результат; + КонецЕсли; + + Для Индекс = 0 По НомераПолучателей.ВГраница() Цикл + НомерПолучателя = НомераПолучателей[Индекс]; + ИдентификаторСообщения = ИдентификаторыСообщений[Индекс]; Если Не ПустаяСтрока(НомерПолучателя) Тогда ОтправленноеСообщение = Новый Структура("НомерПолучателя,ИдентификаторСообщения", НомерПолучателя,ИдентификаторСообщения); @@ -63,8 +68,6 @@ ЗаписьЖурналаРегистрации(НСтр("ru = 'Отправка SMS'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , Результат.ОписаниеОшибки); КонецЕсли; - ЧтениеТекста.Закрыть(); - УдалитьФайлы(ИмяФайлаОтвета); Возврат Результат; @@ -90,16 +93,11 @@ ПараметрыЗапроса.Вставить("id", ИдентификаторСообщения); // отправка запроса - ИмяФайлаОтвета = ВыполнитьЗапрос("sms/status", ПараметрыЗапроса); - Если ПустаяСтрока(ИмяФайлаОтвета) Тогда + КодСостояния = ВыполнитьЗапрос("sms/status", ПараметрыЗапроса); + Если Не ЗначениеЗаполнено(КодСостояния) Тогда Возврат "Ошибка"; КонецЕсли; - ЧтениеТекста = Новый ЧтениеТекста(ИмяФайлаОтвета); - КодСостояния = ЧтениеТекста.ПрочитатьСтроку(); - ЧтениеТекста.Закрыть(); - УдалитьФайлы(ИмяФайлаОтвета); - Результат = СтатусДоставкиSMS(КодСостояния); Если Результат = "Ошибка" Тогда ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр( @@ -175,59 +173,27 @@ Функция ВыполнитьЗапрос(ИмяМетода, ПараметрыЗапроса) - Результат = ""; + HTTPЗапрос = ОтправкаSMS.ПодготовитьHTTPЗапрос("/" + ИмяМетода, ПараметрыЗапроса); + HTTPОтвет = Неопределено; - ИмяФайлаЗапроса = СформироватьФайлДляPOSTЗапроса(ПараметрыЗапроса); - ИмяФайлаОтвета = ПолучитьИмяВременногоФайла("txt"); - - // формирование заголовка - Заголовок = Новый Соответствие; - Заголовок.Вставить("Content-Type", "application/x-www-form-urlencoded"); - Заголовок.Вставить("Content-Length", XMLСтрока(РазмерФайла(ИмяФайлаЗапроса))); - - // Отправка запроса и получение ответа. Попытка - Соединение = Новый HTTPСоединение("sms.ru", , , , ПолучениеФайловИзИнтернетаКлиентСервер.ПолучитьПрокси("http"), 60, Новый ЗащищенноеСоединениеOpenSSL); - Соединение.ОтправитьДляОбработки(ИмяФайлаЗапроса, "/" + ИмяМетода, ИмяФайлаОтвета, Заголовок); - Результат = ИмяФайлаОтвета; + Соединение = Новый HTTPСоединение("sms.ru", , , , ПолучениеФайловИзИнтернетаКлиентСервер.ПолучитьПрокси("http"), + 60, Новый ЗащищенноеСоединениеOpenSSL(, Новый СертификатыУдостоверяющихЦентровОС)); + + HTTPОтвет = Соединение.ОтправитьДляОбработки(HTTPЗапрос); Исключение - ЗаписьЖурналаРегистрации( - НСтр("ru = 'Отправка SMS'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка, - , - , - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Отправка SMS'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; - УдалитьФайлы(ИмяФайлаЗапроса); + Если HTTPОтвет <> Неопределено Тогда + Возврат HTTPОтвет.ПолучитьТелоКакСтроку(); + КонецЕсли; - Возврат Результат; + Возврат Неопределено; КонецФункции -Функция СформироватьФайлДляPOSTЗапроса(ПараметрыЗапроса) - СтрокаЗапроса = ""; - Для Каждого Параметр Из ПараметрыЗапроса Цикл - Если Не ПустаяСтрока(СтрокаЗапроса) Тогда - СтрокаЗапроса = СтрокаЗапроса + "&"; - КонецЕсли; - СтрокаЗапроса = СтрокаЗапроса + Параметр.Ключ + "=" + КодироватьСтроку(Параметр.Значение, СпособКодированияСтроки.КодировкаURL); - КонецЦикла; - - ИмяФайлаЗапроса = ПолучитьИмяВременногоФайла("txt"); - - ФайлЗапроса = Новый ЗаписьТекста(ИмяФайлаЗапроса, КодировкаТекста.ANSI); - ФайлЗапроса.Записать(СтрокаЗапроса); - ФайлЗапроса.Закрыть(); - - Возврат ИмяФайлаЗапроса; -КонецФункции - -Функция РазмерФайла(ИмяФайла) - Файл = Новый Файл(ИмяФайла); - Возврат Файл.Размер(); -КонецФункции - Функция МассивПолучателейСтрокой(Массив) Получатели = Новый Массив; ОбщегоНазначенияКлиентСервер.ДополнитьМассив(Получатели, Массив, Истина); diff --git a/SSL/src/CommonModules/ОтправкаSMSЧерезSMSЦЕНТР/Module.bsl b/SSL/src/CommonModules/ОтправкаSMSЧерезSMSЦЕНТР/Module.bsl index d3ef510a3..df3739805 100644 --- a/SSL/src/CommonModules/ОтправкаSMSЧерезSMSЦЕНТР/Module.bsl +++ b/SSL/src/CommonModules/ОтправкаSMSЧерезSMSЦЕНТР/Module.bsl @@ -43,14 +43,14 @@ ПараметрыЗапроса.Вставить("charset", "utf-8"); // отправка запроса - ИмяФайлаОтвета = ВыполнитьЗапрос("send.php", ПараметрыЗапроса); - Если ПустаяСтрока(ИмяФайлаОтвета) Тогда + ТекстОтвета = ВыполнитьЗапрос("send.php", ПараметрыЗапроса); + Если Не ЗначениеЗаполнено(ТекстОтвета) Тогда Результат.ОписаниеОшибки = Результат.ОписаниеОшибки + НСтр("ru = 'Соединение не установлено'"); Возврат Результат; КонецЕсли; ЧтениеJSON = Новый ЧтениеJSON; - ЧтениеJSON.ОткрытьФайл(ИмяФайлаОтвета); + ЧтениеJSON.УстановитьСтроку(ТекстОтвета); ОтветСервера = ПрочитатьJSON(ЧтениеJSON); ЧтениеJSON.Закрыть(); @@ -73,7 +73,6 @@ Результат.ОтправленныеСообщения.Добавить(ОтправленноеСообщение); КонецЦикла; КонецЕсли; - УдалитьФайлы(ИмяФайлаОтвета); Возврат Результат; @@ -107,16 +106,15 @@ ПараметрыЗапроса.Вставить("fmt", 3); // отправка запроса - ИмяФайлаОтвета = ВыполнитьЗапрос("status.php", ПараметрыЗапроса); - Если ПустаяСтрока(ИмяФайлаОтвета) Тогда + ТекстОтвета = ВыполнитьЗапрос("status.php", ПараметрыЗапроса); + Если Не ЗначениеЗаполнено(ТекстОтвета) Тогда Возврат "Ошибка"; КонецЕсли; ЧтениеJSON = Новый ЧтениеJSON; - ЧтениеJSON.ОткрытьФайл(ИмяФайлаОтвета); + ЧтениеJSON.УстановитьСтроку(ТекстОтвета); ОтветСервера = ПрочитатьJSON(ЧтениеJSON); ЧтениеJSON.Закрыть(); - УдалитьФайлы(ИмяФайлаОтвета); Если ОтветСервера.Свойство("error") Тогда ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр( @@ -185,59 +183,25 @@ Функция ВыполнитьЗапрос(ИмяМетода, ПараметрыЗапроса) - Результат = ""; + HTTPЗапрос = ОтправкаSMS.ПодготовитьHTTPЗапрос("/sys/" + ИмяМетода, ПараметрыЗапроса); + HTTPОтвет = Неопределено; - ИмяФайлаЗапроса = СформироватьФайлДляPOSTЗапроса(ПараметрыЗапроса); - ИмяФайлаОтвета = ПолучитьИмяВременногоФайла("txt"); - - // формирование заголовка - Заголовок = Новый Соответствие; - Заголовок.Вставить("Content-Type", "application/x-www-form-urlencoded"); - Заголовок.Вставить("Content-Length", XMLСтрока(РазмерФайла(ИмяФайлаЗапроса))); - - // Отправка запроса и получение ответа. Попытка Соединение = Новый HTTPСоединение("smsc.ru", , , , ПолучениеФайловИзИнтернетаКлиентСервер.ПолучитьПрокси("http"), 60); - Соединение.ОтправитьДляОбработки(ИмяФайлаЗапроса, "/sys/" + ИмяМетода, ИмяФайлаОтвета, Заголовок); - Результат = ИмяФайлаОтвета; + HTTPОтвет = Соединение.ОтправитьДляОбработки(HTTPЗапрос); Исключение - ЗаписьЖурналаРегистрации( - НСтр("ru = 'Отправка SMS'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка, - , - , - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Отправка SMS'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; - УдалитьФайлы(ИмяФайлаЗапроса); + Если HTTPОтвет <> Неопределено Тогда + Возврат HTTPОтвет.ПолучитьТелоКакСтроку(); + КонецЕсли; - Возврат Результат; + Возврат Неопределено; КонецФункции -Функция СформироватьФайлДляPOSTЗапроса(ПараметрыЗапроса) - СтрокаЗапроса = ""; - Для Каждого Параметр Из ПараметрыЗапроса Цикл - Если Не ПустаяСтрока(СтрокаЗапроса) Тогда - СтрокаЗапроса = СтрокаЗапроса + "&"; - КонецЕсли; - СтрокаЗапроса = СтрокаЗапроса + Параметр.Ключ + "=" + КодироватьСтроку(Параметр.Значение, СпособКодированияСтроки.КодировкаURL); - КонецЦикла; - - ИмяФайлаЗапроса = ПолучитьИмяВременногоФайла("txt"); - - ФайлЗапроса = Новый ЗаписьТекста(ИмяФайлаЗапроса, КодировкаТекста.ANSI); - ФайлЗапроса.Записать(СтрокаЗапроса); - ФайлЗапроса.Закрыть(); - - Возврат ИмяФайлаЗапроса; -КонецФункции - -Функция РазмерФайла(ИмяФайла) - Файл = Новый Файл(ИмяФайла); - Возврат Файл.Размер(); -КонецФункции - Функция МассивПолучателейСтрокой(Массив) Получатели = Новый Массив; ОбщегоНазначенияКлиентСервер.ДополнитьМассив(Получатели, Массив, Истина); diff --git a/SSL/src/CommonModules/ОтправкаSMSЧерезБилайн/Module.bsl b/SSL/src/CommonModules/ОтправкаSMSЧерезБилайн/Module.bsl index 6e9a95a05..a3df7134b 100644 --- a/SSL/src/CommonModules/ОтправкаSMSЧерезБилайн/Module.bsl +++ b/SSL/src/CommonModules/ОтправкаSMSЧерезБилайн/Module.bsl @@ -28,25 +28,25 @@ КонецЕсли; // Подготовка параметров запроса. - ПараметрыЗапроса = Новый Структура; - ПараметрыЗапроса.Вставить("user", Логин); - ПараметрыЗапроса.Вставить("pass", Пароль); - ПараметрыЗапроса.Вставить("gzip", "none"); - ПараметрыЗапроса.Вставить("action", "post_sms"); + ПараметрыЗапроса = Новый Соответствие; + ПараметрыЗапроса.Вставить("user", Логин); + ПараметрыЗапроса.Вставить("pass", Пароль); + ПараметрыЗапроса.Вставить("gzip", "none"); + ПараметрыЗапроса.Вставить("action", "post_sms"); ПараметрыЗапроса.Вставить("message", Текст); - ПараметрыЗапроса.Вставить("target", СтрокаПолучателей); - ПараметрыЗапроса.Вставить("sender", ИмяОтправителя); + ПараметрыЗапроса.Вставить("target", СтрокаПолучателей); + ПараметрыЗапроса.Вставить("sender", ИмяОтправителя); - // отправка запроса - ИмяФайлаОтвета = ВыполнитьЗапрос(ПараметрыЗапроса); - Если ПустаяСтрока(ИмяФайлаОтвета) Тогда + // Отправка запроса. + Ответ = ВыполнитьЗапрос(ПараметрыЗапроса); + Если Ответ = Неопределено Тогда Результат.ОписаниеОшибки = Результат.ОписаниеОшибки + НСтр("ru = 'Соединение не установлено'"); Возврат Результат; КонецЕсли; // Обработка результата запроса (получение идентификаторов сообщений). СтруктураОтвета = Новый ЧтениеXML; - СтруктураОтвета.ОткрытьФайл(ИмяФайлаОтвета); + СтруктураОтвета.УстановитьСтроку(Ответ); ОписаниеОшибки = ""; Пока СтруктураОтвета.Прочитать() Цикл Если СтруктураОтвета.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда @@ -72,10 +72,8 @@ КонецЕсли; КонецЦикла; СтруктураОтвета.Закрыть(); - УдалитьФайлы(ИмяФайлаОтвета); Результат.ОписаниеОшибки = СокрП(ОписаниеОшибки); - Возврат Результат; КонецФункции @@ -93,16 +91,16 @@ Пароль = НастройкиОтправкиSMS.Пароль; // Подготовка параметров запроса. - ПараметрыЗапроса = Новый Структура; - ПараметрыЗапроса.Вставить("user", Логин); - ПараметрыЗапроса.Вставить("pass", Пароль); - ПараметрыЗапроса.Вставить("gzip", "none"); - ПараметрыЗапроса.Вставить("action", "status"); - ПараметрыЗапроса.Вставить("sms_id", ИдентификаторСообщения); + ПараметрыЗапроса = Новый Соответствие; + ПараметрыЗапроса.Вставить("user", Логин); + ПараметрыЗапроса.Вставить("pass", Пароль); + ПараметрыЗапроса.Вставить("gzip", "none"); + ПараметрыЗапроса.Вставить("action", "status"); + ПараметрыЗапроса.Вставить("sms_id", ИдентификаторСообщения); - // отправка запроса - ИмяФайлаОтвета = ВыполнитьЗапрос(ПараметрыЗапроса); - Если ПустаяСтрока(ИмяФайлаОтвета) Тогда + // Отправка запроса. + Ответ = ВыполнитьЗапрос(ПараметрыЗапроса); + Если Ответ = Неопределено Тогда Возврат "Ошибка"; КонецЕсли; @@ -110,7 +108,7 @@ SMSSTS_CODE = ""; ТекущийSMS_ID = ""; СтруктураОтвета = Новый ЧтениеXML; - СтруктураОтвета.ОткрытьФайл(ИмяФайлаОтвета); + СтруктураОтвета.УстановитьСтроку(Ответ); Пока СтруктураОтвета.Прочитать() Цикл Если СтруктураОтвета.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда Если СтруктураОтвета.Имя = "MESSAGE" Тогда @@ -126,7 +124,6 @@ КонецЕсли; КонецЦикла; СтруктураОтвета.Закрыть(); - УдалитьФайлы(ИмяФайлаОтвета); Возврат СтатусДоставкиSMS(SMSSTS_CODE); @@ -147,59 +144,25 @@ Функция ВыполнитьЗапрос(ПараметрыЗапроса) - Результат = ""; + HTTPЗапрос = ОтправкаSMS.ПодготовитьHTTPЗапрос("/sendsms/", ПараметрыЗапроса); + HTTPОтвет = Неопределено; - ИмяФайлаЗапроса = СформироватьФайлДляPOSTЗапроса(ПараметрыЗапроса); - ИмяФайлаОтвета = ПолучитьИмяВременногоФайла("xml"); - - // формирование заголовка - Заголовок = Новый Соответствие; - Заголовок.Вставить("Content-Type", "application/x-www-form-urlencoded"); - Заголовок.Вставить("Content-Length", XMLСтрока(РазмерФайла(ИмяФайлаЗапроса))); - - // Отправка запроса и получение ответа. Попытка Соединение = Новый HTTPСоединение("beeline.amega-inform.ru", , , , ПолучениеФайловИзИнтернетаКлиентСервер.ПолучитьПрокси("http"), 60); - Соединение.ОтправитьДляОбработки(ИмяФайлаЗапроса, "/sendsms/", ИмяФайлаОтвета, Заголовок); - Результат = ИмяФайлаОтвета; + HTTPОтвет = Соединение.ОтправитьДляОбработки(HTTPЗапрос); Исключение - ЗаписьЖурналаРегистрации( - НСтр("ru = 'Отправка SMS'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка, - , - , - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Отправка SMS'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; - УдалитьФайлы(ИмяФайлаЗапроса); + Если HTTPОтвет <> Неопределено Тогда + Возврат HTTPОтвет.ПолучитьТелоКакСтроку(); + КонецЕсли; - Возврат Результат; + Возврат Неопределено; КонецФункции -Функция СформироватьФайлДляPOSTЗапроса(ПараметрыЗапроса) - СтрокаЗапроса = ""; - Для Каждого Параметр Из ПараметрыЗапроса Цикл - Если Не ПустаяСтрока(СтрокаЗапроса) Тогда - СтрокаЗапроса = СтрокаЗапроса + "&"; - КонецЕсли; - СтрокаЗапроса = СтрокаЗапроса + Параметр.Ключ + "=" + КодироватьСтроку(Параметр.Значение, СпособКодированияСтроки.КодировкаURL); - КонецЦикла; - - ИмяФайлаЗапроса = ПолучитьИмяВременногоФайла("txt"); - - ФайлЗапроса = Новый ЗаписьТекста(ИмяФайлаЗапроса, КодировкаТекста.ANSI); - ФайлЗапроса.Записать(СтрокаЗапроса); - ФайлЗапроса.Закрыть(); - - Возврат ИмяФайлаЗапроса; -КонецФункции - -Функция РазмерФайла(ИмяФайла) - Файл = Новый Файл(ИмяФайла); - Возврат Файл.Размер(); -КонецФункции - Функция МассивПолучателейСтрокой(Массив) Результат = ""; Для Каждого Элемент Из Массив Цикл diff --git a/SSL/src/CommonModules/ОтправкаSMSЧерезМТС/Module.bsl b/SSL/src/CommonModules/ОтправкаSMSЧерезМТС/Module.bsl index 94929460f..b2a842444 100644 --- a/SSL/src/CommonModules/ОтправкаSMSЧерезМТС/Module.bsl +++ b/SSL/src/CommonModules/ОтправкаSMSЧерезМТС/Module.bsl @@ -27,7 +27,13 @@ КонецЕсли; КонецЦикла; - ВебСервис = ПодключитьВебСервис(); + Попытка + ВебСервис = ПодключитьВебСервис(); + Исключение + ОбработатьИсключение(ИнформацияОбОшибке(), Результат.ОписаниеОшибки); + Возврат Результат; + КонецПопытки; + ТипArrayOfString = ВебСервис.ФабрикаXDTO.Пакеты.Получить("http://mcommunicator.ru/M2M").Получить("ArrayOfString"); ArrayOfString = ВебСервис.ФабрикаXDTO.Создать(ТипArrayOfString); @@ -41,17 +47,8 @@ ArrayOfSendMessageIDs = ВебСервис.SendMessages(ArrayOfString, Лев(Текст, 1000), ИмяОтправителя, Логин, Пароль); ОтветПолучен = Истина; Исключение - ИнформацияОбОшибке = ИнформацияОбОшибке(); - КодОшибки = КодОшибкиИзОписания(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); - ТекстОшибки = ОписаниеОшибкиПоКоду(КодОшибки); - - ЗаписьЖурналаРегистрации( - НСтр("ru = 'Отправка SMS'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка, - , - , - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); - Результат.ОписаниеОшибки = НСтр("ru = 'Не удалось отправить SMS'") + ": " + ТекстОшибки; + ОбработатьИсключение(ИнформацияОбОшибке(), Результат.ОписаниеОшибки, Истина, ВебСервис); + Возврат Результат; КонецПопытки; Если ОтветПолучен Тогда @@ -84,16 +81,7 @@ Попытка ArrayOfDeliveryInfo = ВебСервис.GetMessageStatus(ИдентификаторСообщения, Логин, Пароль); Исключение - ИнформацияОбОшибке = ИнформацияОбОшибке(); - КодОшибки = КодОшибкиИзОписания(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); - ТекстОшибки = ОписаниеОшибкиПоКоду(КодОшибки); - - ЗаписьЖурналаРегистрации( - НСтр("ru = 'Отправка SMS'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка, - , - , - ТекстОшибки + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); + ОбработатьИсключение(ИнформацияОбОшибке(),, Истина, ВебСервис); Возврат Результат; КонецПопытки; @@ -219,4 +207,38 @@ ОписаниеУслуги.АдресВИнтернете = "http://www.mtscommunicator.ru/service/"; КонецПроцедуры +Процедура ОбработатьИсключение(ИнформацияОбОшибке, ТекстОшибки = Неопределено, ВыполнятьДиагностику = Ложь, ВебСервис = Неопределено) + + ЗаписьЖурналаРегистрации( + НСтр("ru = 'Отправка SMS'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, + , + , + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); + + КодОшибки = КодОшибкиИзОписания(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); + + Если КодОшибки = Неопределено Тогда + + Если ВыполнятьДиагностику Тогда + АдресТочкиПодключения = ВебСервис.ТочкаПодключения.Местоположение; + РезультатДиагностики = ОбщегоНазначенияКлиентСервер.ДиагностикаСоединения(АдресТочкиПодключения); + + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '%1 + | + |Результат диагностики: + |%2'"), + КраткоеПредставлениеОшибки(ИнформацияОбОшибке), + РезультатДиагностики.ОписаниеОшибки); + Иначе + ТекстОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке); + КонецЕсли; + + Иначе + ТекстОшибки = ОписаниеОшибкиПоКоду(КодОшибки); + КонецЕсли; + +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/CommonModules/ОтправкаSMSЧерезСМСУслуги/Module.bsl b/SSL/src/CommonModules/ОтправкаSMSЧерезСМСУслуги/Module.bsl index e35f5f06c..50f444248 100644 --- a/SSL/src/CommonModules/ОтправкаSMSЧерезСМСУслуги/Module.bsl +++ b/SSL/src/CommonModules/ОтправкаSMSЧерезСМСУслуги/Module.bsl @@ -43,18 +43,17 @@ ПараметрыЗапроса.Вставить("source", ИмяОтправителя); // отправка запроса - ИмяФайлаОтвета = ВыполнитьЗапрос("send.php", ПараметрыЗапроса); - Если ПустаяСтрока(ИмяФайлаОтвета) Тогда + ТекстОтвета = ВыполнитьЗапрос("send.php", ПараметрыЗапроса); + Если Не ЗначениеЗаполнено(ТекстОтвета) Тогда Результат.ОписаниеОшибки = Результат.ОписаниеОшибки + НСтр("ru = 'Соединение не установлено'"); Возврат Результат; КонецЕсли; ЧтениеXML = Новый ЧтениеXML; - ЧтениеXML.ОткрытьФайл(ИмяФайлаОтвета); + ЧтениеXML.УстановитьСтроку(ТекстОтвета); ОтветСервера = Новый Структура("code,descr,smsid"); ЗаполнитьЗначенияСвойств(ОтветСервера, ФабрикаXDTO.ПрочитатьXML(ЧтениеXML)); ЧтениеXML.Закрыть(); - УдалитьФайлы(ИмяФайлаОтвета); КодРезультата = ОтветСервера.code; Если КодРезультата = "1" Тогда @@ -102,18 +101,17 @@ ПараметрыЗапроса.Вставить("smsid", ИдентификаторСообщения); // отправка запроса - ИмяФайлаОтвета = ВыполнитьЗапрос("report.php", ПараметрыЗапроса); - Если ПустаяСтрока(ИмяФайлаОтвета) Тогда + ТекстОтвета = ВыполнитьЗапрос("report.php", ПараметрыЗапроса); + Если Не ЗначениеЗаполнено(ТекстОтвета) Тогда Возврат "Ошибка"; КонецЕсли; ЧтениеXML = Новый ЧтениеXML; - ЧтениеXML.ОткрытьФайл(ИмяФайлаОтвета); + ЧтениеXML.УстановитьСтроку(ТекстОтвета); ОтветСервера = Новый Структура("code,descr,detail"); ЗаполнитьЗначенияСвойств(ОтветСервера, ФабрикаXDTO.ПрочитатьXML(ЧтениеXML)); ЧтениеXML.Закрыть(); - УдалитьФайлы(ИмяФайлаОтвета); - + КодРезультата = ОтветСервера.code; Если КодРезультата = "1" Тогда Для Каждого Статус Из ОтветСервера.detail.Свойства() Цикл @@ -157,42 +155,29 @@ Функция ВыполнитьЗапрос(ИмяМетода, ПараметрыЗапроса) - Результат = ""; + HTTPЗапрос = ОтправкаSMS.ПодготовитьHTTPЗапрос("/API/XML/" + ИмяМетода, СформироватьТелоHTTPЗапроса(ПараметрыЗапроса)); + HTTPОтвет = Неопределено; - ИмяФайлаЗапроса = СформироватьФайлДляPOSTЗапроса(ПараметрыЗапроса); - ИмяФайлаОтвета = ПолучитьИмяВременногоФайла("xml"); - - // формирование заголовка - Заголовок = Новый Соответствие; - Заголовок.Вставить("Content-Type", "application/x-www-form-urlencoded"); - Заголовок.Вставить("Content-Length", XMLСтрока(РазмерФайла(ИмяФайлаЗапроса))); - - // Отправка запроса и получение ответа. Попытка Соединение = Новый HTTPСоединение("lcab.sms-uslugi.ru", , , , ПолучениеФайловИзИнтернетаКлиентСервер.ПолучитьПрокси("http"), 60); - Соединение.ОтправитьДляОбработки(ИмяФайлаЗапроса, "/API/XML/" + ИмяМетода, ИмяФайлаОтвета, Заголовок); - Результат = ИмяФайлаОтвета; + HTTPОтвет = Соединение.ОтправитьДляОбработки(HTTPЗапрос); Исключение - ЗаписьЖурналаРегистрации( - НСтр("ru = 'Отправка SMS'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка, - , - , - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Отправка SMS'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; - УдалитьФайлы(ИмяФайлаЗапроса); + Если HTTPОтвет <> Неопределено Тогда + Возврат HTTPОтвет.ПолучитьТелоКакСтроку(); + КонецЕсли; - Возврат Результат; + Возврат Неопределено; КонецФункции -Функция СформироватьФайлДляPOSTЗапроса(ПараметрыЗапроса) - - ИмяФайлаЗапроса = ПолучитьИмяВременногоФайла("txt"); +Функция СформироватьТелоHTTPЗапроса(ПараметрыЗапроса) ЗаписьXML = Новый ЗаписьXML; - ЗаписьXML.ОткрытьФайл(ИмяФайлаЗапроса, "utf-8"); + ЗаписьXML.УстановитьСтроку(); ЗаписьXML.ЗаписатьОбъявлениеXML(); ЗаписьXML.ЗаписатьНачалоЭлемента("data"); Для Каждого Параметр Из ПараметрыЗапроса Цикл @@ -209,14 +194,8 @@ КонецЕсли; КонецЦикла; ЗаписьXML.ЗаписатьКонецЭлемента(); - ЗаписьXML.Закрыть(); + Возврат ЗаписьXML.Закрыть(); - Возврат ИмяФайлаЗапроса; -КонецФункции - -Функция РазмерФайла(ИмяФайла) - Файл = Новый Файл(ИмяФайла); - Возврат Файл.Размер(); КонецФункции Функция ФорматироватьНомерДляОтправки(Номер) diff --git a/SSL/src/CommonModules/ОтчетОДвиженияхДокументаСлужебныйКлиент/Module.bsl b/SSL/src/CommonModules/ОтчетОДвиженияхДокументаСлужебныйКлиент/Module.bsl index 586b57ba0..2fd56bb57 100644 --- a/SSL/src/CommonModules/ОтчетОДвиженияхДокументаСлужебныйКлиент/Module.bsl +++ b/SSL/src/CommonModules/ОтчетОДвиженияхДокументаСлужебныйКлиент/Module.bsl @@ -12,7 +12,7 @@ // Процедура ОбработкаВыбораТабличногоДокумента(ФормаОтчета, Элемент, Область, СтандартнаяОбработка) Экспорт - Если ФормаОтчета.НастройкиОтчета.ПолноеИмя = "Отчет.ОтчетОДвиженияхДокумента" Тогда + Если ФормаОтчета.НастройкиОтчета.ПолноеИмя = "Отчет.ДвиженияДокумента" Тогда Если ТипЗнч(Область.Расшифровка) = Тип("Структура") Тогда ОткрытьФормуРегистраИзОтчетаОДвижениях(ФормаОтчета, Область.Расшифровка, СтандартнаяОбработка); diff --git a/SSL/src/CommonModules/ОтчетыКлиент/Module.bsl b/SSL/src/CommonModules/ОтчетыКлиент/Module.bsl index 81f0bae8d..47f676326 100644 --- a/SSL/src/CommonModules/ОтчетыКлиент/Module.bsl +++ b/SSL/src/CommonModules/ОтчетыКлиент/Module.bsl @@ -18,28 +18,6 @@ #КонецОбласти -#Область СлужебныйПрограммныйИнтерфейс - -//////////////////////////////////////////////////////////////////////////////// -// Обработчики событий подсистем конфигурации. - -// См. РассылкаОтчетовКлиентПереопределяемый.ПриАктивизацииСтрокиНастройки. -Процедура ПриАктивизацииСтрокиНастройки(Отчет, КомпоновщикНастроекКД, ИдентификаторКД, ТолькоПросмотрЗначения) Экспорт - -КонецПроцедуры - -// См. РассылкаОтчетовКлиентПереопределяемый.ПриНачалеВыбораНастройки. -Процедура ПриНачалеВыбораНастройки(Отчет, КомпоновщикНастроекКД, ИдентификаторКД, СтандартнаяОбработка, ОбработчикРезультата) Экспорт - -КонецПроцедуры - -// См. РассылкаОтчетовКлиентПереопределяемый.ПриОчисткеНастройки. -Процедура ПриОчисткеНастройки(Отчет, КомпоновщикНастроекКД, ИдентификаторКД, СтандартнаяОбработка) Экспорт - -КонецПроцедуры - -#КонецОбласти - #Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// @@ -425,7 +403,6 @@ Форма = Контекст.Форма; ЭлементКД = Форма.НайтиПользовательскуюНастройкуЭлемента(Контекст.Идентификатор); - ДополнительныеНастройки = Форма.НайтиДополнительныеНастройкиЭлемента(Контекст.Идентификатор); Если ТипЗнч(ЭлементКД) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда ЭлементКД.ПравоеЗначение = Ссылка; diff --git a/SSL/src/CommonModules/ОтчетыКлиентСервер/Module.bsl b/SSL/src/CommonModules/ОтчетыКлиентСервер/Module.bsl index 1243d31cd..91ce1c88b 100644 --- a/SSL/src/CommonModules/ОтчетыКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ОтчетыКлиентСервер/Module.bsl @@ -18,16 +18,13 @@ // а также в простом режиме, если в пользовательские настройки выведены флажки использования группировок. // // * РазрешеноИзменятьВарианты - Булево - Если Ложь, то блокируются кнопки изменения вариантов этого отчета. -// Если у текущего пользователя нет прав "СохранениеДанныхПользователя" и "Добавление" справочника ВариантыОтчетов, -// то принудительно устанавливается в Ложь. +// Если у текущего пользователя нет прав "СохранениеДанныхПользователя" и "Добавление" +// справочника ВариантыОтчетов, то принудительно устанавливается в Ложь. // -// * РазрешеноВыбиратьИНастраиватьВариантыБезСохранения - Булево - Имеет смысл для тех отчетов, -// у которых есть необходимость выбора и настройки предопределенных вариантов. Если Истина, -// то блокируется кнопка сохранения варианта этого отчета, но остается возможность выбора и -// настройки предопределенных вариантов. Актуально для контекстных отчетов при необходимости -// предоставлять выбор вариантов. Следует понимать, что при установленном флажке изменить вариант -// возможность есть, но сохранить изменения не получится - при закрытии формы отчета или смене -// варианта настройки будут утеряны. +// * РазрешеноВыбиратьИНастраиватьВариантыБезСохранения - Булево - Если Истина, +// то есть возможность выбора и настройки предопределенных вариантов отчета, но без возможности сохранения +// выполненных настроек. Например, может быть задано для контекстных отчетов (открываемых с параметрами), +// у которых есть несколько вариантов. // // * ПараметрыРасположенияЭлементовУправления - Структура, Неопределено - варианты: // - Неопределено - Параметры элементов управления общей формы отчетов "по умолчанию". @@ -1560,8 +1557,6 @@ Функция ПараметрыКопирования(ТипЭлемента, Коллекция) Результат = Новый Структура; Результат.Вставить("НужноУказыватьТипЭлемента", Ложь); - Результат.Вставить("КопируетсяДеревоФормы", Ложь); - Результат.Вставить("КопируетсяДеревоЗначений", Ложь); Результат.Вставить("ИсключаяСвойства", Неопределено); Результат.Вставить("ЕстьНастройки", Ложь); Результат.Вставить("ЕстьЭлементы", Ложь); @@ -1579,18 +1574,7 @@ Результат.Вставить("ЕстьЗначенияВложенныхПараметров", Ложь); Результат.Вставить("ЕстьПоляИОформление", Ложь); - Если ТипЭлемента = Тип("ДанныеФормыЭлементДерева") Тогда - - Результат.КопируетсяДеревоФормы = Истина; - -#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда - ИначеЕсли ТипЭлемента = Тип("СтрокаДереваЗначений") Тогда - - Результат.КопируетсяДеревоЗначений = Истина; - -#КонецЕсли - - ИначеЕсли ТипЭлемента = Тип("ГруппаВыбранныхПолейКомпоновкиДанных") + Если ТипЭлемента = Тип("ГруппаВыбранныхПолейКомпоновкиДанных") Или ТипЭлемента = Тип("ГруппаЭлементовОтбораКомпоновкиДанных") Тогда Результат.НужноУказыватьТипЭлемента = Истина; @@ -1673,11 +1657,16 @@ Результат.ЕстьСтруктура = Истина; Результат.ЕстьУсловноеОформление = Истина; - Иначе + ИначеЕсли ТипЭлемента <> Тип("ДанныеФормыЭлементДерева") Тогда + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + Если ТипЭлемента = Тип("СтрокаДереваЗначений") Тогда + Возврат Результат; + КонецЕсли; +#КонецЕсли ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Копирование элементов ""%1"" не поддерживается'"), - ТипЭлемента); + НСтр("ru = 'Копирование элементов ""%1"" не поддерживается'"), ТипЭлемента); КонецЕсли; @@ -1697,241 +1686,241 @@ ЗаполнитьЗначенияСвойств(ЧтоЗаполнить, ЧемЗаполнить, , ПараметрыКопирования.ИсключаяСвойства); КонецЕсли; - Если ПараметрыКопирования.КопируетсяДеревоФормы - Или ПараметрыКопирования.КопируетсяДеревоЗначений Тогда + ЭтоДанныеФормыЭлементДерева = ТипЗнч(ЧемЗаполнить) = Тип("ДанныеФормыЭлементДерева"); +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + ЭтоДеревоЗначений = ТипЗнч(ЧемЗаполнить) = Тип("СтрокаДереваЗначений"); +#Иначе + ЭтоДеревоЗначений = Ложь; +#КонецЕсли + Если ЭтоДанныеФормыЭлементДерева Или ЭтоДеревоЗначений Тогда Соответствие.Вставить(ЧемЗаполнить, ЧтоЗаполнить); - КоллекцияВложенных = ?(ПараметрыКопирования.КопируетсяДеревоФормы, - ЧемЗаполнить.ПолучитьЭлементы(), - ЧемЗаполнить.Строки); + КоллекцияВложенных = ?(ЭтоДанныеФормыЭлементДерева, ЧемЗаполнить.ПолучитьЭлементы(), ЧемЗаполнить.Строки); Если КоллекцияВложенных.Количество() > 0 Тогда - НоваяКоллекцияВложенных = ?(ПараметрыКопирования.КопируетсяДеревоФормы, - ЧтоЗаполнить.ПолучитьЭлементы(), - ЧтоЗаполнить.Строки); + НоваяКоллекцияВложенных = ?(ЭтоДанныеФормыЭлементДерева, ЧтоЗаполнить.ПолучитьЭлементы(), ЧтоЗаполнить.Строки); Для Каждого ПодчиненнаяСтрока Из КоллекцияВложенных Цикл СкопироватьРекурсивно(Узел, ПодчиненнаяСтрока, НоваяКоллекцияВложенных, Неопределено, Соответствие); КонецЦикла; КонецЕсли; - Иначе + Возврат ЧтоЗаполнить; + КонецЕсли; - СтарыйИдентификатор = Узел.ПолучитьИдентификаторПоОбъекту(ЧемЗаполнить); - НовыйИдентификатор = Узел.ПолучитьИдентификаторПоОбъекту(ЧтоЗаполнить); - Соответствие.Вставить(СтарыйИдентификатор, НовыйИдентификатор); - - Если ПараметрыКопирования.ЕстьНастройки Тогда - ЧтоЗаполнить.УстановитьИдентификатор(ЧемЗаполнить.ИдентификаторОбъекта); - ЧтоЗаполнить = ЧтоЗаполнить.Настройки; - ЧемЗаполнить = ЧемЗаполнить.Настройки; - КонецЕсли; - - Если ПараметрыКопирования.ЕстьЭлементы Тогда - // Элементы (КоллекцияВыбранныхПолейКомпоновкиДанных, - // КоллекцияЭлементовОтбораКомпоновкиДанных). - КоллекцияВложенных = ЧемЗаполнить.Элементы; - Если КоллекцияВложенных.Количество() > 0 Тогда - НоваяКоллекцияВложенных = ЧтоЗаполнить.Элементы; - Для Каждого ПодчиненнаяСтрока Из КоллекцияВложенных Цикл - СкопироватьРекурсивно(Узел, ПодчиненнаяСтрока, НоваяКоллекцияВложенных, Неопределено, Соответствие); - КонецЦикла; - КонецЕсли; - КонецЕсли; - - Если ПараметрыКопирования.ЕстьВыбор Тогда - // Выбор (ВыбранныеПоляКомпоновкиДанных). - ЗаполнитьЗначенияСвойств(ЧтоЗаполнить.Выбор, ЧемЗаполнить.Выбор, , "ДоступныеПоляВыбора, Элементы"); - // Выбор.Элементы (КоллекцияВыбранныхПолейКомпоновкиДанных). - КоллекцияВложенных = ЧемЗаполнить.Выбор.Элементы; - Если КоллекцияВложенных.Количество() > 0 Тогда - НоваяКоллекцияВложенных = ЧтоЗаполнить.Выбор.Элементы; - Для Каждого ПодчиненнаяСтрока Из КоллекцияВложенных Цикл - СкопироватьРекурсивно(Узел, ПодчиненнаяСтрока, НоваяКоллекцияВложенных, Неопределено, Соответствие); - КонецЦикла; - КонецЕсли; - КонецЕсли; - - Если ПараметрыКопирования.ЕстьОтбор Тогда - // Отбор (ОтборКомпоновкиДанных). - ЗаполнитьЗначенияСвойств(ЧтоЗаполнить.Отбор, ЧемЗаполнить.Отбор, , "ДоступныеПоляОтбора, Элементы"); - // Отбор.Элементы (КоллекцияЭлементовОтбораКомпоновкиДанных). - КоллекцияВложенных = ЧемЗаполнить.Отбор.Элементы; - Если КоллекцияВложенных.Количество() > 0 Тогда - НоваяКоллекцияВложенных = ЧтоЗаполнить.Отбор.Элементы; - Для Каждого ПодчиненнаяСтрока Из КоллекцияВложенных Цикл - СкопироватьРекурсивно(Узел, ПодчиненнаяСтрока, НоваяКоллекцияВложенных, Неопределено, Новый Соответствие); - КонецЦикла; - КонецЕсли; - КонецЕсли; - - Если ПараметрыКопирования.ЕстьПараметрыВывода Тогда - // ПараметрыВывода (ЗначенияПараметровВыводаКомпоновкиДанных, - // ЗначенияПараметровВыводаГруппировкиКомпоновкиДанных, - // ЗначенияПараметровВыводаГруппировкиТаблицыКомпоновкиДанных, - // ЗначенияПараметровВыводаГруппировкиДиаграммыКомпоновкиДанных, - // ЗначенияПараметровВыводаТаблицыКомпоновкиДанных, - // ЗначенияПараметровВыводаДиаграммыКомпоновкиДанных). - // ПараметрыВывода.Элементы (КоллекцияЗначенийПараметровКомпоновкиДанных). - КоллекцияВложенных = ЧемЗаполнить.ПараметрыВывода.Элементы; - Если КоллекцияВложенных.Количество() > 0 Тогда - УзелВложенных = ЧтоЗаполнить.ПараметрыВывода; - Для Каждого ПодчиненнаяСтрока Из КоллекцияВложенных Цикл - ЗначениеПараметраКД = УзелВложенных.НайтиЗначениеПараметра(ПодчиненнаяСтрока.Параметр); - Если ЗначениеПараметраКД <> Неопределено Тогда - ЗаполнитьЗначенияСвойств(ЗначениеПараметраКД, ПодчиненнаяСтрока); - КонецЕсли; - КонецЦикла; - КонецЕсли; - КонецЕсли; - - Если ПараметрыКопирования.ЕстьПараметрыДанных Тогда - // ПараметрыДанных (ЗначенияПараметровДанныхКомпоновкиДанных). - // ПараметрыДанных.Элементы (КоллекцияЗначенийПараметровКомпоновкиДанных). - КоллекцияВложенных = ЧемЗаполнить.ПараметрыДанных.Элементы; - Если КоллекцияВложенных.Количество() > 0 Тогда - УзелВложенных = ЧтоЗаполнить.ПараметрыДанных; - Для Каждого ПодчиненнаяСтрока Из КоллекцияВложенных Цикл - ЗначениеПараметраКД = УзелВложенных.НайтиЗначениеПараметра(ПодчиненнаяСтрока.Параметр); - Если ЗначениеПараметраКД <> Неопределено Тогда - ЗаполнитьЗначенияСвойств(ЗначениеПараметраКД, ПодчиненнаяСтрока); - КонецЕсли; - КонецЦикла; - КонецЕсли; - КонецЕсли; - - Если ПараметрыКопирования.ЕстьПользовательскиеПоля Тогда - // ПользовательскиеПоля (ПользовательскиеПоляКомпоновкиДанных). - // ПользовательскиеПоля.Элементы (КоллекцияПользовательскихПолейКомпоновкиДанных). - КоллекцияВложенных = ЧемЗаполнить.ПользовательскиеПоля.Элементы; - Если КоллекцияВложенных.Количество() > 0 Тогда - НоваяКоллекцияВложенных = ЧтоЗаполнить.ПользовательскиеПоля.Элементы; - Для Каждого ПодчиненнаяСтрока Из КоллекцияВложенных Цикл - СкопироватьРекурсивно(Узел, ПодчиненнаяСтрока, НоваяКоллекцияВложенных, Неопределено, Соответствие); - КонецЦикла; - КонецЕсли; - КонецЕсли; - - Если ПараметрыКопирования.ЕстьПоляГруппировки Тогда - // ПоляГруппировки (ПоляГруппировкиКомпоновкиДанных). - // ПоляГруппировки.Элементы (КоллекцияПолейГруппировкиКомпоновкиДанных). - КоллекцияВложенных = ЧемЗаполнить.ПоляГруппировки.Элементы; - Если КоллекцияВложенных.Количество() > 0 Тогда - НоваяКоллекцияВложенных = ЧтоЗаполнить.ПоляГруппировки.Элементы; - Для Каждого ПодчиненнаяСтрока Из КоллекцияВложенных Цикл - СкопироватьРекурсивно(Узел, ПодчиненнаяСтрока, НоваяКоллекцияВложенных, Неопределено, Новый Соответствие); - КонецЦикла; - КонецЕсли; - КонецЕсли; - - Если ПараметрыКопирования.ЕстьПорядок Тогда - // Порядок (ПорядокКомпоновкиДанных). - ЗаполнитьЗначенияСвойств(ЧтоЗаполнить.Порядок, ЧемЗаполнить.Порядок, , "ДоступныеПоляПорядка, Элементы"); - // Порядок.Элементы (КоллекцияЭлементовПорядкаКомпоновкиДанных). - КоллекцияВложенных = ЧемЗаполнить.Порядок.Элементы; - Если КоллекцияВложенных.Количество() > 0 Тогда - НоваяКоллекцияВложенных = ЧтоЗаполнить.Порядок.Элементы; - Для Каждого ПодчиненнаяСтрока Из КоллекцияВложенных Цикл - СкопироватьРекурсивно(Узел, ПодчиненнаяСтрока, НоваяКоллекцияВложенных, Неопределено, Соответствие); - КонецЦикла; - КонецЕсли; - КонецЕсли; - - Если ПараметрыКопирования.ЕстьСтруктура Тогда - // Структура (КоллекцияЭлементовСтруктурыНастроекКомпоновкиДанных, - // КоллекцияЭлементовСтруктурыДиаграммыКомпоновкиДанных, - // КоллекцияЭлементовСтруктурыТаблицыКомпоновкиДанных). - ЗаполнитьЗначенияСвойств(ЧтоЗаполнить.Структура, ЧемЗаполнить.Структура); - КоллекцияВложенных = ЧемЗаполнить.Структура; - Если КоллекцияВложенных.Количество() > 0 Тогда - НоваяКоллекцияВложенных = ЧтоЗаполнить.Структура; - Для Каждого ПодчиненнаяСтрока Из КоллекцияВложенных Цикл - СкопироватьРекурсивно(Узел, ПодчиненнаяСтрока, НоваяКоллекцияВложенных, Неопределено, Соответствие); - КонецЦикла; - КонецЕсли; - КонецЕсли; - - Если ПараметрыКопирования.ЕстьУсловноеОформление Тогда - // УсловноеОформление (УсловноеОформлениеКомпоновкиДанных). - ЗаполнитьЗначенияСвойств(ЧтоЗаполнить.УсловноеОформление, ЧемЗаполнить.УсловноеОформление, , "ДоступныеПоляОтбора, ДоступныеПоляПолей, Элементы"); - // УсловноеОформление.Элементы (КоллекцияЭлементовУсловногоОформленияКомпоновкиДанных). - КоллекцияВложенных = ЧемЗаполнить.УсловноеОформление.Элементы; - Если КоллекцияВложенных.Количество() > 0 Тогда - НоваяКоллекцияВложенных = ЧтоЗаполнить.УсловноеОформление.Элементы; - Для Каждого ПодчиненнаяСтрока Из КоллекцияВложенных Цикл - СкопироватьРекурсивно(Узел, ПодчиненнаяСтрока, НоваяКоллекцияВложенных, Неопределено, Соответствие); - КонецЦикла; - КонецЕсли; - КонецЕсли; - - Если ПараметрыКопирования.ЕстьКолонкиИСтроки Тогда - // Колонки (КоллекцияЭлементовСтруктурыТаблицыКомпоновкиДанных). - КоллекцияВложенных = ЧемЗаполнить.Колонки; - НоваяКоллекцияВложенных = ЧтоЗаполнить.Колонки; - СтарыйИдентификатор = Узел.ПолучитьИдентификаторПоОбъекту(КоллекцияВложенных); - НовыйИдентификатор = Узел.ПолучитьИдентификаторПоОбъекту(НоваяКоллекцияВложенных); - Соответствие.Вставить(СтарыйИдентификатор, НовыйИдентификатор); - Для Каждого ПодчиненнаяСтрока Из КоллекцияВложенных Цикл - СкопироватьРекурсивно(Узел, ПодчиненнаяСтрока, НоваяКоллекцияВложенных, Неопределено, Соответствие); - КонецЦикла; - // Строки (КоллекцияЭлементовСтруктурыТаблицыКомпоновкиДанных). - КоллекцияВложенных = ЧемЗаполнить.Строки; - НоваяКоллекцияВложенных = ЧтоЗаполнить.Строки; - СтарыйИдентификатор = Узел.ПолучитьИдентификаторПоОбъекту(КоллекцияВложенных); - НовыйИдентификатор = Узел.ПолучитьИдентификаторПоОбъекту(НоваяКоллекцияВложенных); - Соответствие.Вставить(СтарыйИдентификатор, НовыйИдентификатор); + СтарыйИдентификатор = Узел.ПолучитьИдентификаторПоОбъекту(ЧемЗаполнить); + НовыйИдентификатор = Узел.ПолучитьИдентификаторПоОбъекту(ЧтоЗаполнить); + Соответствие.Вставить(СтарыйИдентификатор, НовыйИдентификатор); + + Если ПараметрыКопирования.ЕстьНастройки Тогда + ЧтоЗаполнить.УстановитьИдентификатор(ЧемЗаполнить.ИдентификаторОбъекта); + ЧтоЗаполнить = ЧтоЗаполнить.Настройки; + ЧемЗаполнить = ЧемЗаполнить.Настройки; + КонецЕсли; + + Если ПараметрыКопирования.ЕстьЭлементы Тогда + // Элементы (КоллекцияВыбранныхПолейКомпоновкиДанных, + // КоллекцияЭлементовОтбораКомпоновкиДанных). + КоллекцияВложенных = ЧемЗаполнить.Элементы; + Если КоллекцияВложенных.Количество() > 0 Тогда + НоваяКоллекцияВложенных = ЧтоЗаполнить.Элементы; Для Каждого ПодчиненнаяСтрока Из КоллекцияВложенных Цикл СкопироватьРекурсивно(Узел, ПодчиненнаяСтрока, НоваяКоллекцияВложенных, Неопределено, Соответствие); КонецЦикла; КонецЕсли; - - Если ПараметрыКопирования.ЕстьСерииИТочки Тогда - // Серии (КоллекцияЭлементовСтруктурыДиаграммыКомпоновкиДанных). - КоллекцияВложенных = ЧемЗаполнить.Серии; - НоваяКоллекцияВложенных = ЧтоЗаполнить.Серии; - СтарыйИдентификатор = Узел.ПолучитьИдентификаторПоОбъекту(КоллекцияВложенных); - НовыйИдентификатор = Узел.ПолучитьИдентификаторПоОбъекту(НоваяКоллекцияВложенных); - Соответствие.Вставить(СтарыйИдентификатор, НовыйИдентификатор); - Для Каждого ПодчиненнаяСтрока Из КоллекцияВложенных Цикл - СкопироватьРекурсивно(Узел, ПодчиненнаяСтрока, НоваяКоллекцияВложенных, Неопределено, Соответствие); - КонецЦикла; - // Точки (КоллекцияЭлементовСтруктурыДиаграммыКомпоновкиДанных). - КоллекцияВложенных = ЧемЗаполнить.Точки; - НоваяКоллекцияВложенных = ЧтоЗаполнить.Точки; - СтарыйИдентификатор = Узел.ПолучитьИдентификаторПоОбъекту(КоллекцияВложенных); - НовыйИдентификатор = Узел.ПолучитьИдентификаторПоОбъекту(НоваяКоллекцияВложенных); - Соответствие.Вставить(СтарыйИдентификатор, НовыйИдентификатор); + КонецЕсли; + + Если ПараметрыКопирования.ЕстьВыбор Тогда + // Выбор (ВыбранныеПоляКомпоновкиДанных). + ЗаполнитьЗначенияСвойств(ЧтоЗаполнить.Выбор, ЧемЗаполнить.Выбор, , "ДоступныеПоляВыбора, Элементы"); + // Выбор.Элементы (КоллекцияВыбранныхПолейКомпоновкиДанных). + КоллекцияВложенных = ЧемЗаполнить.Выбор.Элементы; + Если КоллекцияВложенных.Количество() > 0 Тогда + НоваяКоллекцияВложенных = ЧтоЗаполнить.Выбор.Элементы; Для Каждого ПодчиненнаяСтрока Из КоллекцияВложенных Цикл СкопироватьРекурсивно(Узел, ПодчиненнаяСтрока, НоваяКоллекцияВложенных, Неопределено, Соответствие); КонецЦикла; КонецЕсли; - - Если ПараметрыКопирования.ЕстьЗначенияВложенныхПараметров Тогда - // ЗначенияВложенныхПараметров (КоллекцияЗначенийПараметровКомпоновкиДанных). - Для Каждого ПодчиненнаяСтрока Из ЧемЗаполнить.ЗначенияВложенныхПараметров Цикл - СкопироватьРекурсивно(Узел, ПодчиненнаяСтрока, ЧтоЗаполнить.ЗначенияВложенныхПараметров, Неопределено, Соответствие); + КонецЕсли; + + Если ПараметрыКопирования.ЕстьОтбор Тогда + // Отбор (ОтборКомпоновкиДанных). + ЗаполнитьЗначенияСвойств(ЧтоЗаполнить.Отбор, ЧемЗаполнить.Отбор, , "ДоступныеПоляОтбора, Элементы"); + // Отбор.Элементы (КоллекцияЭлементовОтбораКомпоновкиДанных). + КоллекцияВложенных = ЧемЗаполнить.Отбор.Элементы; + Если КоллекцияВложенных.Количество() > 0 Тогда + НоваяКоллекцияВложенных = ЧтоЗаполнить.Отбор.Элементы; + Для Каждого ПодчиненнаяСтрока Из КоллекцияВложенных Цикл + СкопироватьРекурсивно(Узел, ПодчиненнаяСтрока, НоваяКоллекцияВложенных, Неопределено, Новый Соответствие); КонецЦикла; КонецЕсли; - - Если ПараметрыКопирования.ЕстьПоляИОформление Тогда - Для Каждого ОформляемоеПоле Из ЧемЗаполнить.Поля.Элементы Цикл - ЗаполнитьЗначенияСвойств(ЧтоЗаполнить.Поля.Элементы.Добавить(), ОформляемоеПоле); - КонецЦикла; - Для Каждого Источник Из ЧемЗаполнить.Оформление.Элементы Цикл - Приемник = ЧтоЗаполнить.Оформление.НайтиЗначениеПараметра(Источник.Параметр); - Если Приемник <> Неопределено Тогда - ЗаполнитьЗначенияСвойств(Приемник, Источник, , "Родитель"); - Для Каждого ВложенныйИсточник Из Источник.ЗначенияВложенныхПараметров Цикл - ВложенныйПриемник = ЧтоЗаполнить.Оформление.НайтиЗначениеПараметра(Источник.Параметр); - Если ВложенныйПриемник <> Неопределено Тогда - ЗаполнитьЗначенияСвойств(ВложенныйПриемник, ВложенныйИсточник, , "Родитель"); - КонецЕсли; - КонецЦикла; + КонецЕсли; + + Если ПараметрыКопирования.ЕстьПараметрыВывода Тогда + // ПараметрыВывода (ЗначенияПараметровВыводаКомпоновкиДанных, + // ЗначенияПараметровВыводаГруппировкиКомпоновкиДанных, + // ЗначенияПараметровВыводаГруппировкиТаблицыКомпоновкиДанных, + // ЗначенияПараметровВыводаГруппировкиДиаграммыКомпоновкиДанных, + // ЗначенияПараметровВыводаТаблицыКомпоновкиДанных, + // ЗначенияПараметровВыводаДиаграммыКомпоновкиДанных). + // ПараметрыВывода.Элементы (КоллекцияЗначенийПараметровКомпоновкиДанных). + КоллекцияВложенных = ЧемЗаполнить.ПараметрыВывода.Элементы; + Если КоллекцияВложенных.Количество() > 0 Тогда + УзелВложенных = ЧтоЗаполнить.ПараметрыВывода; + Для Каждого ПодчиненнаяСтрока Из КоллекцияВложенных Цикл + ЗначениеПараметраКД = УзелВложенных.НайтиЗначениеПараметра(ПодчиненнаяСтрока.Параметр); + Если ЗначениеПараметраКД <> Неопределено Тогда + ЗаполнитьЗначенияСвойств(ЗначениеПараметраКД, ПодчиненнаяСтрока); КонецЕсли; КонецЦикла; КонецЕсли; - КонецЕсли; + Если ПараметрыКопирования.ЕстьПараметрыДанных Тогда + // ПараметрыДанных (ЗначенияПараметровДанныхКомпоновкиДанных). + // ПараметрыДанных.Элементы (КоллекцияЗначенийПараметровКомпоновкиДанных). + КоллекцияВложенных = ЧемЗаполнить.ПараметрыДанных.Элементы; + Если КоллекцияВложенных.Количество() > 0 Тогда + УзелВложенных = ЧтоЗаполнить.ПараметрыДанных; + Для Каждого ПодчиненнаяСтрока Из КоллекцияВложенных Цикл + ЗначениеПараметраКД = УзелВложенных.НайтиЗначениеПараметра(ПодчиненнаяСтрока.Параметр); + Если ЗначениеПараметраКД <> Неопределено Тогда + ЗаполнитьЗначенияСвойств(ЗначениеПараметраКД, ПодчиненнаяСтрока); + КонецЕсли; + КонецЦикла; + КонецЕсли; + КонецЕсли; + + Если ПараметрыКопирования.ЕстьПользовательскиеПоля Тогда + // ПользовательскиеПоля (ПользовательскиеПоляКомпоновкиДанных). + // ПользовательскиеПоля.Элементы (КоллекцияПользовательскихПолейКомпоновкиДанных). + КоллекцияВложенных = ЧемЗаполнить.ПользовательскиеПоля.Элементы; + Если КоллекцияВложенных.Количество() > 0 Тогда + НоваяКоллекцияВложенных = ЧтоЗаполнить.ПользовательскиеПоля.Элементы; + Для Каждого ПодчиненнаяСтрока Из КоллекцияВложенных Цикл + СкопироватьРекурсивно(Узел, ПодчиненнаяСтрока, НоваяКоллекцияВложенных, Неопределено, Соответствие); + КонецЦикла; + КонецЕсли; + КонецЕсли; + + Если ПараметрыКопирования.ЕстьПоляГруппировки Тогда + // ПоляГруппировки (ПоляГруппировкиКомпоновкиДанных). + // ПоляГруппировки.Элементы (КоллекцияПолейГруппировкиКомпоновкиДанных). + КоллекцияВложенных = ЧемЗаполнить.ПоляГруппировки.Элементы; + Если КоллекцияВложенных.Количество() > 0 Тогда + НоваяКоллекцияВложенных = ЧтоЗаполнить.ПоляГруппировки.Элементы; + Для Каждого ПодчиненнаяСтрока Из КоллекцияВложенных Цикл + СкопироватьРекурсивно(Узел, ПодчиненнаяСтрока, НоваяКоллекцияВложенных, Неопределено, Новый Соответствие); + КонецЦикла; + КонецЕсли; + КонецЕсли; + + Если ПараметрыКопирования.ЕстьПорядок Тогда + // Порядок (ПорядокКомпоновкиДанных). + ЗаполнитьЗначенияСвойств(ЧтоЗаполнить.Порядок, ЧемЗаполнить.Порядок, , "ДоступныеПоляПорядка, Элементы"); + // Порядок.Элементы (КоллекцияЭлементовПорядкаКомпоновкиДанных). + КоллекцияВложенных = ЧемЗаполнить.Порядок.Элементы; + Если КоллекцияВложенных.Количество() > 0 Тогда + НоваяКоллекцияВложенных = ЧтоЗаполнить.Порядок.Элементы; + Для Каждого ПодчиненнаяСтрока Из КоллекцияВложенных Цикл + СкопироватьРекурсивно(Узел, ПодчиненнаяСтрока, НоваяКоллекцияВложенных, Неопределено, Соответствие); + КонецЦикла; + КонецЕсли; + КонецЕсли; + + Если ПараметрыКопирования.ЕстьСтруктура Тогда + // Структура (КоллекцияЭлементовСтруктурыНастроекКомпоновкиДанных, + // КоллекцияЭлементовСтруктурыДиаграммыКомпоновкиДанных, + // КоллекцияЭлементовСтруктурыТаблицыКомпоновкиДанных). + ЗаполнитьЗначенияСвойств(ЧтоЗаполнить.Структура, ЧемЗаполнить.Структура); + КоллекцияВложенных = ЧемЗаполнить.Структура; + Если КоллекцияВложенных.Количество() > 0 Тогда + НоваяКоллекцияВложенных = ЧтоЗаполнить.Структура; + Для Каждого ПодчиненнаяСтрока Из КоллекцияВложенных Цикл + СкопироватьРекурсивно(Узел, ПодчиненнаяСтрока, НоваяКоллекцияВложенных, Неопределено, Соответствие); + КонецЦикла; + КонецЕсли; + КонецЕсли; + + Если ПараметрыКопирования.ЕстьУсловноеОформление Тогда + // УсловноеОформление (УсловноеОформлениеКомпоновкиДанных). + ЗаполнитьЗначенияСвойств(ЧтоЗаполнить.УсловноеОформление, ЧемЗаполнить.УсловноеОформление, , "ДоступныеПоляОтбора, ДоступныеПоляПолей, Элементы"); + // УсловноеОформление.Элементы (КоллекцияЭлементовУсловногоОформленияКомпоновкиДанных). + КоллекцияВложенных = ЧемЗаполнить.УсловноеОформление.Элементы; + Если КоллекцияВложенных.Количество() > 0 Тогда + НоваяКоллекцияВложенных = ЧтоЗаполнить.УсловноеОформление.Элементы; + Для Каждого ПодчиненнаяСтрока Из КоллекцияВложенных Цикл + СкопироватьРекурсивно(Узел, ПодчиненнаяСтрока, НоваяКоллекцияВложенных, Неопределено, Соответствие); + КонецЦикла; + КонецЕсли; + КонецЕсли; + + Если ПараметрыКопирования.ЕстьКолонкиИСтроки Тогда + // Колонки (КоллекцияЭлементовСтруктурыТаблицыКомпоновкиДанных). + КоллекцияВложенных = ЧемЗаполнить.Колонки; + НоваяКоллекцияВложенных = ЧтоЗаполнить.Колонки; + СтарыйИдентификатор = Узел.ПолучитьИдентификаторПоОбъекту(КоллекцияВложенных); + НовыйИдентификатор = Узел.ПолучитьИдентификаторПоОбъекту(НоваяКоллекцияВложенных); + Соответствие.Вставить(СтарыйИдентификатор, НовыйИдентификатор); + Для Каждого ПодчиненнаяСтрока Из КоллекцияВложенных Цикл + СкопироватьРекурсивно(Узел, ПодчиненнаяСтрока, НоваяКоллекцияВложенных, Неопределено, Соответствие); + КонецЦикла; + // Строки (КоллекцияЭлементовСтруктурыТаблицыКомпоновкиДанных). + КоллекцияВложенных = ЧемЗаполнить.Строки; + НоваяКоллекцияВложенных = ЧтоЗаполнить.Строки; + СтарыйИдентификатор = Узел.ПолучитьИдентификаторПоОбъекту(КоллекцияВложенных); + НовыйИдентификатор = Узел.ПолучитьИдентификаторПоОбъекту(НоваяКоллекцияВложенных); + Соответствие.Вставить(СтарыйИдентификатор, НовыйИдентификатор); + Для Каждого ПодчиненнаяСтрока Из КоллекцияВложенных Цикл + СкопироватьРекурсивно(Узел, ПодчиненнаяСтрока, НоваяКоллекцияВложенных, Неопределено, Соответствие); + КонецЦикла; + КонецЕсли; + + Если ПараметрыКопирования.ЕстьСерииИТочки Тогда + // Серии (КоллекцияЭлементовСтруктурыДиаграммыКомпоновкиДанных). + КоллекцияВложенных = ЧемЗаполнить.Серии; + НоваяКоллекцияВложенных = ЧтоЗаполнить.Серии; + СтарыйИдентификатор = Узел.ПолучитьИдентификаторПоОбъекту(КоллекцияВложенных); + НовыйИдентификатор = Узел.ПолучитьИдентификаторПоОбъекту(НоваяКоллекцияВложенных); + Соответствие.Вставить(СтарыйИдентификатор, НовыйИдентификатор); + Для Каждого ПодчиненнаяСтрока Из КоллекцияВложенных Цикл + СкопироватьРекурсивно(Узел, ПодчиненнаяСтрока, НоваяКоллекцияВложенных, Неопределено, Соответствие); + КонецЦикла; + // Точки (КоллекцияЭлементовСтруктурыДиаграммыКомпоновкиДанных). + КоллекцияВложенных = ЧемЗаполнить.Точки; + НоваяКоллекцияВложенных = ЧтоЗаполнить.Точки; + СтарыйИдентификатор = Узел.ПолучитьИдентификаторПоОбъекту(КоллекцияВложенных); + НовыйИдентификатор = Узел.ПолучитьИдентификаторПоОбъекту(НоваяКоллекцияВложенных); + Соответствие.Вставить(СтарыйИдентификатор, НовыйИдентификатор); + Для Каждого ПодчиненнаяСтрока Из КоллекцияВложенных Цикл + СкопироватьРекурсивно(Узел, ПодчиненнаяСтрока, НоваяКоллекцияВложенных, Неопределено, Соответствие); + КонецЦикла; + КонецЕсли; + + Если ПараметрыКопирования.ЕстьЗначенияВложенныхПараметров Тогда + // ЗначенияВложенныхПараметров (КоллекцияЗначенийПараметровКомпоновкиДанных). + Для Каждого ПодчиненнаяСтрока Из ЧемЗаполнить.ЗначенияВложенныхПараметров Цикл + СкопироватьРекурсивно(Узел, ПодчиненнаяСтрока, ЧтоЗаполнить.ЗначенияВложенныхПараметров, Неопределено, Соответствие); + КонецЦикла; + КонецЕсли; + + Если ПараметрыКопирования.ЕстьПоляИОформление Тогда + Для Каждого ОформляемоеПоле Из ЧемЗаполнить.Поля.Элементы Цикл + ЗаполнитьЗначенияСвойств(ЧтоЗаполнить.Поля.Элементы.Добавить(), ОформляемоеПоле); + КонецЦикла; + Для Каждого Источник Из ЧемЗаполнить.Оформление.Элементы Цикл + Приемник = ЧтоЗаполнить.Оформление.НайтиЗначениеПараметра(Источник.Параметр); + Если Приемник <> Неопределено Тогда + ЗаполнитьЗначенияСвойств(Приемник, Источник, , "Родитель"); + Для Каждого ВложенныйИсточник Из Источник.ЗначенияВложенныхПараметров Цикл + ВложенныйПриемник = ЧтоЗаполнить.Оформление.НайтиЗначениеПараметра(Источник.Параметр); + Если ВложенныйПриемник <> Неопределено Тогда + ЗаполнитьЗначенияСвойств(ВложенныйПриемник, ВложенныйИсточник, , "Родитель"); + КонецЕсли; + КонецЦикла; + КонецЕсли; + КонецЦикла; + КонецЕсли; + Возврат ЧтоЗаполнить; КонецФункции @@ -2089,15 +2078,15 @@ КонецЕсли; Продолжить; КонецЕсли; - #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда - МетаданныеНастройки = Метаданные.НайтиПоТипу(Тип); - Если МетаданныеНастройки <> Неопределено И Не ОбщегоНазначения.ОбъектМетаданныхДоступенПоФункциональнымОпциям(МетаданныеНастройки) Тогда - Если ПривестиКФорме Тогда - ВычитаемыеТипы.Добавить(Тип); - КонецЕсли; - Продолжить; +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + МетаданныеНастройки = Метаданные.НайтиПоТипу(Тип); + Если МетаданныеНастройки <> Неопределено И Не ОбщегоНазначения.ОбъектМетаданныхДоступенПоФункциональнымОпциям(МетаданныеНастройки) Тогда + Если ПривестиКФорме Тогда + ВычитаемыеТипы.Добавить(Тип); КонецЕсли; - #КонецЕсли + Продолжить; + КонецЕсли; +#КонецЕсли Результат.КоличествоТипов = Результат.КоличествоТипов + 1; diff --git a/SSL/src/CommonModules/ОтчетыПереопределяемый/Module.bsl b/SSL/src/CommonModules/ОтчетыПереопределяемый/Module.bsl index 22f94dfef..b3e6ca36d 100644 --- a/SSL/src/CommonModules/ОтчетыПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ОтчетыПереопределяемый/Module.bsl @@ -71,6 +71,8 @@ // Процедура ПередЗагрузкойВариантаНаСервере(Форма, НовыеНастройкиКД) Экспорт + + КонецПроцедуры #КонецОбласти diff --git a/SSL/src/CommonModules/ОтчетыСервер/Module.bsl b/SSL/src/CommonModules/ОтчетыСервер/Module.bsl index ccb3ed1ee..26b7fb007 100644 --- a/SSL/src/CommonModules/ОтчетыСервер/Module.bsl +++ b/SSL/src/CommonModules/ОтчетыСервер/Module.bsl @@ -6,8 +6,10 @@ // // Параметры: // ОтчетОбъект - ОтчетОбъект, ВнешнийОтчетОбъект - отчет, для которого необходимо подключить схему. -// Контекст - Произвольный - передается "как есть" из одноименного параметра события +// Контекст - УправляемаяФорма - форма отчета или форма настройки отчета. +// Передается "как есть" из одноименного параметра события // ПередЗагрузкойНастроекВКомпоновщик. +// - Структура - параметры отчета. См. ВариантыОтчетов.ПодключитьОтчетИЗагрузитьНастройки. // СхемаКД - СхемаКомпоновкиДанных - схема, которую необходимо подключить. // КлючСхемы - Строка - идентификатор новой схемы, который будет записан в дополнительные свойства // пользовательских настроек. @@ -222,8 +224,13 @@ КонецЕсли; КонецЦикла; - // Получает следующий элемент результата компоновки. - ЭлементРезультатаКД = ПроцессорКД.Следующий(); + Попытка + // Получает следующий элемент результата компоновки. + ЭлементРезультатаКД = ПроцессорКД.Следующий(); + Исключение + Возврат Ложь; + КонецПопытки; + КонецЦикла; // Указание объекту о том, что вывод результата завершен. @@ -679,8 +686,8 @@ КонецФункции Процедура ЗарегистрироватьНастройкиВарианта(НастройкиКД, Информация) + ДеревоВарианта = Информация.ДеревоВарианта; - НастройкиВарианта = Информация.НастройкиВарианта; Найденные = ДеревоВарианта.Строки.НайтиСтроки(Новый Структура("ЕстьСтруктура", Истина), Истина); Для Каждого СтрокаДерева Из Найденные Цикл @@ -861,17 +868,23 @@ НастройкаВарианта.ВыводитьФлажок = Ложь; КонецЕсли; - Если НастройкаВарианта.Тип = "ЭлементОтбора" - Или НастройкаВарианта.Тип = "ЗначениеПараметраНастроек" Тогда - ЗарегистрироватьПоле(Информация, УзелКД, ЭлементКД, НастройкаВарианта); - ЗарегистрироватьТипыИСвязи(Информация, НастройкаВарианта); - КонецЕсли; - СвойстваНастройки = Неопределено; Если ТипЗнч(НастройкаВарианта.Идентификатор) = Тип("Строка") И Не ПустаяСтрока(НастройкаВарианта.Идентификатор) Тогда СвойстваНастройки = Информация.Поиск.ПользовательскиеНастройки.Получить(НастройкаВарианта.Идентификатор); КонецЕсли; + + Если СвойстваНастройки = Неопределено + И (НастройкаВарианта.Тип = "ЭлементОтбора" Или НастройкаВарианта.Тип = "ЗначениеПараметраНастроек") Тогда + Родитель.Строки.Удалить(НастройкаВарианта); // В целях оптимизации. + Продолжить; + КонецЕсли; + Если СвойстваНастройки <> Неопределено Тогда + Если НастройкаВарианта.Тип = "ЭлементОтбора" + Или НастройкаВарианта.Тип = "ЗначениеПараметраНастроек" Тогда + ЗарегистрироватьПоле(Информация, УзелКД, ЭлементКД, НастройкаВарианта); + ЗарегистрироватьТипыИСвязи(Информация, НастройкаВарианта); + КонецЕсли; НастройкаВарианта.ПользовательскаяНастройка = СвойстваНастройки; ЗарегистрироватьПользовательскуюНастройку(Информация, СвойстваНастройки, Неопределено, НастройкаВарианта); Если Информация.ТолькоПользовательские Тогда @@ -903,7 +916,9 @@ НастройкаВарианта.Значение = ЭлементКД.Расположение; ЗарегистрироватьЭлементыНастроек(Информация, УзелКД, ЭлементКД.Элементы, Владелец, НастройкаВарианта); ИначеЕсли НастройкаВарианта.Тип = "ЗначениеПараметраНастроек" Тогда - ЗарегистрироватьЭлементыНастроек(Информация, УзелКД, ЭлементКД.ЗначенияВложенныхПараметров, Владелец, НастройкаВарианта); + Если СвойстваНастройки <> Неопределено Тогда // В целях оптимизации. + ЗарегистрироватьЭлементыНастроек(Информация, УзелКД, ЭлементКД.ЗначенияВложенныхПараметров, Владелец, НастройкаВарианта); + КонецЕсли; КонецЕсли; Если СвойстваНастройки <> Неопределено Тогда @@ -1987,7 +2002,6 @@ ГруппаКолонокИмя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонИмениЭлемента, "ГруппаКолонок"); КолонкаИспользованиеИмя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонИмениЭлемента, "Колонка_Использование"); КолонкаЗначениеИмя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонИмениЭлемента, "Колонка_Значение"); - КоманднаяПанельИмя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонИмениЭлемента, "КоманднаяПанель"); КнопкаПодборИмя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонИмениЭлемента, "Подбор"); КнопкаВставитьИмя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонИмениЭлемента, "ВставитьИзБуфера"); @@ -2614,7 +2628,6 @@ КонецЕсли; КонецЕсли; - НачалоНомерГода = Год(НачалоПериода); КонецНомерГода = Год(КонецПериода); ТекущийНомерГода = Год(Сегодня); @@ -2835,9 +2848,12 @@ Если Результат.БыстрыйВыбор Тогда Результат.ЗначенияДляВыбора = ЗначенияДляВыбора(ПараметрыНастройки, Тип); + Если Результат.ЗначенияДляВыбора.Количество() = 0 Тогда + Результат.БыстрыйВыбор = Ложь; + КонецЕсли; КонецЕсли; - Если ПараметрыНастройки.ВыборГруппИЭлементов = ГруппыИЭлементы.Группы Тогда + Если ПараметрыНастройки.ВыборГруппИЭлементов = ИспользованиеГруппИЭлементов.Группы Тогда Если Вид = "СПРАВОЧНИК" Или Вид = "ПЛАНВИДОВХАРАКТЕРИСТИК" Тогда Результат.ПутьКФорме = ПолноеИмя + ".ФормаВыбораГруппы"; Иначе @@ -2874,7 +2890,16 @@ СписокВыбора = Менеджер.ПолучитьДанныеВыбора(ПараметрыПолученияДанныхВыбора); Для Каждого ЭлементСписка Из СписокВыбора Цикл - ЗаполнитьЗначенияСвойств(ЗначенияДляВыбора.Добавить(), ЭлементСписка); + ЗначениеДляВыбора = ЗначенияДляВыбора.Добавить(); + ЗаполнитьЗначенияСвойств(ЗначениеДляВыбора, ЭлементСписка); + + // Для перечислений значения возвращаются в виде структуры со свойством Значение. + ЗначениеПеречисления = Неопределено; + Если ТипЗнч(ЗначениеДляВыбора.Значение) = Тип("Структура") + И ЗначениеДляВыбора.Значение.Свойство("Значение", ЗначениеПеречисления) Тогда + ЗначениеДляВыбора.Значение = ЗначениеПеречисления; + КонецЕсли; + КонецЦикла; КонецЦикла; Возврат ЗначенияДляВыбора; diff --git a/SSL/src/CommonModules/ОценкаПроизводительности/Module.bsl b/SSL/src/CommonModules/ОценкаПроизводительности/Module.bsl index 4a71152b5..cde09e66e 100644 --- a/SSL/src/CommonModules/ОценкаПроизводительности/Module.bsl +++ b/SSL/src/CommonModules/ОценкаПроизводительности/Module.bsl @@ -331,17 +331,25 @@ Возврат; КонецЕсли; - // Если не указано имя шага, но есть вложенные шаги, то имя по умолчанию "ПоследнийШаг". - ВложенныеЗамеры = ОписаниеЗамера["ВложенныеЗамеры"]; + // Переменные из описания замера. + ВремяНачалаЗамера = ОписаниеЗамера["ВремяНачала"]; + ИмяКлючевойОперации = ОписаниеЗамера["КлючеваяОперация"]; + ВложенныеЗамеры = ОписаниеЗамера["ВложенныеЗамеры"]; + + // Расчетные переменные ЕстьВложенныеЗамеры = ВложенныеЗамеры.Количество(); - Если ЕстьВложенныеЗамеры Тогда - КоличествоДанныхШага = ?(КоличествоДанных = 0, 1, КоличествоДанных); + ТекущееВремя = ТекущаяУниверсальнаяДатаВМиллисекундах(); + Длительность = ТекущееВремя - ВремяНачалаЗамера; + УдельноеВремяОбщее = 0; + + // Если не указано имя шага, но есть вложенные шаги, то имя по умолчанию "ПоследнийШаг". + КоличествоДанныхШага = ?(КоличествоДанных = 0, 1, КоличествоДанных); + Если ЕстьВложенныеЗамеры Тогда ЗафиксироватьЗамерДлительнойОперации(ОписаниеЗамера, КоличествоДанныхШага, ?(ПустаяСтрока(ИмяШага), "ПоследнийШаг", ИмяШага), Комментарий); КонецЕсли; + + МассивЗамеровДляЗаписи = Новый Массив; - ТекущееВремя = ТекущаяУниверсальнаяДатаВМиллисекундах(); - УдельноеВремяОбщее = 0; - ИмяКлючевойОперации = ОписаниеЗамера["КлючеваяОперация"]; Для Каждого Замер Из ВложенныеЗамеры Цикл ДанныеЗамера = Замер.Значение; ВесВложенногоЗамера = ДанныеЗамера["ВесЗамера"]; @@ -360,38 +368,47 @@ ПараметрыЗамера.Вставить("Технологический", Ложь); ПараметрыЗамера.Вставить("Длительная", Истина); - ЗафиксироватьДлительностьКлючевойОперации(ПараметрыЗамера); + МассивЗамеровДляЗаписи.Добавить(ПараметрыЗамера); КонецЦикла; - ВремяНачалаЗамера = ОписаниеЗамера["ВремяНачала"]; + // Фиксация удельного времени ключевой операции. + ПараметрыЗамера = Новый Структура; + ПараметрыЗамера.Вставить("КлючеваяОперация", ИмяКлючевойОперации + ".Удельный"); + ПараметрыЗамера.Вставить("ДатаНачалаКлючевойОперации", ВремяНачалаЗамера); + ПараметрыЗамера.Вставить("ДатаОкончанияКлючевойОперации", ТекущееВремя); + ПараметрыЗамера.Вставить("Комментарий", Комментарий); + ПараметрыЗамера.Вставить("Технологический", Ложь); + ПараметрыЗамера.Вставить("Длительная", Истина); + Если ЕстьВложенныеЗамеры Тогда - - ПараметрыЗамера = Новый Структура; - ПараметрыЗамера.Вставить("КлючеваяОперация", ИмяКлючевойОперации + ".Удельный"); ПараметрыЗамера.Вставить("Длительность", УдельноеВремяОбщее/1000); - ПараметрыЗамера.Вставить("ДатаНачалаКлючевойОперации", ВремяНачалаЗамера); - ПараметрыЗамера.Вставить("ДатаОкончанияКлючевойОперации", ТекущееВремя); - ПараметрыЗамера.Вставить("ВесЗамера", ОписаниеЗамера["ВесЗамера"]); - ПараметрыЗамера.Вставить("Комментарий", Комментарий); - ПараметрыЗамера.Вставить("Технологический", Ложь); - ПараметрыЗамера.Вставить("Длительная", Истина); - - ЗафиксироватьДлительностьКлючевойОперации(ПараметрыЗамера); + ПараметрыЗамера.Вставить("ВесЗамера", ОписаниеЗамера["ВесЗамера"]); + Иначе + // Если вложенных замеров не было, то фиксируется удельный замер. + ПараметрыЗамера.Вставить("Длительность", Длительность/1000/КоличествоДанныхШага); + ПараметрыЗамера.Вставить("ВесЗамера", КоличествоДанныхШага); КонецЕсли; + МассивЗамеровДляЗаписи.Добавить(ПараметрыЗамера); // Фиксация длительной ключевой операции. ПараметрыЗамера = Новый Структура; ПараметрыЗамера.Вставить("КлючеваяОперация", ИмяКлючевойОперации); - ПараметрыЗамера.Вставить("Длительность", (ТекущееВремя - ВремяНачалаЗамера)/1000); + ПараметрыЗамера.Вставить("Длительность", (Длительность)/1000); ПараметрыЗамера.Вставить("ДатаНачалаКлючевойОперации", ВремяНачалаЗамера); ПараметрыЗамера.Вставить("ДатаОкончанияКлючевойОперации", ТекущееВремя); - ПараметрыЗамера.Вставить("ВесЗамера", ОписаниеЗамера["ВесЗамера"]); + Если ЕстьВложенныеЗамеры Тогда + ПараметрыЗамера.Вставить("ВесЗамера", ОписаниеЗамера["ВесЗамера"]); + Иначе + ПараметрыЗамера.Вставить("ВесЗамера", КоличествоДанныхШага); + КонецЕсли; ПараметрыЗамера.Вставить("Комментарий", Комментарий); ПараметрыЗамера.Вставить("Технологический", Ложь); ПараметрыЗамера.Вставить("Длительная", Ложь); - ЗафиксироватьДлительностьКлючевойОперации(ПараметрыЗамера); - + МассивЗамеровДляЗаписи.Добавить(ПараметрыЗамера); + + ЗаписатьЗамерыВремени(МассивЗамеровДляЗаписи); + КонецПроцедуры #КонецОбласти @@ -637,6 +654,109 @@ КонецПроцедуры +// Записывает переданный массив замеров. +// Элементы массива - тип структура. +// Запись осуществляется набором записей. +// КлючеваяОперация - имя ключевой операции. +// Длительность - длительность в миллисекундах. +// ДатаНачалаКлючевойОперации - момент начала ключевой операции в миллисекундах. +// ДатаОкончанияКлючевойОперации - момент окончания ключевой операции в миллисекундах. +// Комментарий - произвольная строка, комментарий замера. +// ВесЗамера - количество обработанных данных. +// Длительная - признак, что длительность замера рассчитана на единицу веса. +// +Процедура ЗаписатьЗамерыВремени(МассивЗамеров) + + Если МонопольныйРежим() Тогда + Возврат; + КонецЕсли; + + Если ОценкаПроизводительностиСлужебный.ПодсистемаСуществует("СтандартныеПодсистемы.БазоваяФункциональность") Тогда + МодульОбщегоНазначенияКлиентСервер = ОценкаПроизводительностиСлужебный.ОбщийМодуль("ОбщегоНазначенияКлиентСервер"); + КодОсновногоЯзыка = МодульОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка(); + Иначе + КодОсновногоЯзыка = Метаданные.ОсновнойЯзык.КодЯзыка; + КонецЕсли; + + Если БезопасныйРежим() <> Ложь Тогда + ЗаписьЖурналаРегистрации(НСтр("ru = 'Работа подсистемы оценка производительности в безопасном режиме не поддерживается'", КодОсновногоЯзыка), + УровеньЖурналаРегистрации.Информация); + Возврат; + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + + НаборЗаписей = РегистрыСведений.ЗамерыВремени.СоздатьНаборЗаписей(); + НомерСеанса = НомерСеансаИнформационнойБазы(); + ДатаЗаписи = Дата(1,1,1) + ТекущаяУниверсальнаяДатаВМиллисекундах()/1000; + ДатаЗаписиНачалоЧаса = НачалоЧаса(ДатаЗаписи); + Пользователь = ПользователиИнформационнойБазы.ТекущийПользователь(); + ДатаЗаписиЛокальная = ТекущаяДатаСеанса(); + + Для Каждого Замер Из МассивЗамеров Цикл + + Если Не ЗначениеЗаполнено(Замер.ДатаНачалаКлючевойОперации) Тогда + ЗаписьЖурналаРегистрации(НСтр("ru = 'Невозможно зафиксировать замер с пустой датой начала'", КодОсновногоЯзыка), + УровеньЖурналаРегистрации.Информация,,,Строка(Замер.КлючеваяОперация)); + Возврат; + КонецЕсли; + + Если ТипЗнч(Замер.КлючеваяОперация) = Тип("Строка") Тогда + КлючеваяОперацияСсылка = ОценкаПроизводительностиПовтИсп.ПолучитьКлючевуюОперациюПоИмени(Замер.КлючеваяОперация, , Замер.Длительная); + Иначе + КлючеваяОперацияСсылка = Замер.КлючеваяОперация; + КонецЕсли; + + Если Не ЗначениеЗаполнено(Замер.Комментарий) Тогда + Комментарий = ПараметрыСеанса.КомментарийЗамераВремени; + Иначе + ЧтениеJSON = Новый ЧтениеJSON(); + ЧтениеJSON.УстановитьСтроку(ПараметрыСеанса.КомментарийЗамераВремени); + КомментарийПоУмолчанию = ПрочитатьJSON(ЧтениеJSON, Истина); + КомментарийПоУмолчанию.Вставить("ДопИнф", Замер.Комментарий); + + ЗаписьJSON = Новый ЗаписьJSON; + ЗаписьJSON.УстановитьСтроку(Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Нет)); + ЗаписатьJSON(ЗаписьJSON, КомментарийПоУмолчанию); + Комментарий = ЗаписьJSON.Закрыть(); + КонецЕсли; + + Запись = НаборЗаписей.Добавить(); + + Запись.КлючеваяОперация = КлючеваяОперацияСсылка; + + // Получаем дату в UTC + Запись.ДатаНачалаЗамера = Замер.ДатаНачалаКлючевойОперации; + Запись.НомерСеанса = НомерСеанса; + + Запись.ВремяВыполнения = ?(Замер.Длительность = 0, 0.001, Замер.Длительность); // Длительность меньше разрешения таймера + Запись.ВесЗамера = Замер.ВесЗамера; + + Запись.ДатаЗаписи = ДатаЗаписи; + Запись.ДатаЗаписиНачалоЧаса = ДатаЗаписиНачалоЧаса; + Если ЗначениеЗаполнено(Замер.ДатаОкончанияКлючевойОперации) Тогда + // Получаем дату в UTC + Запись.ДатаОкончания = Замер.ДатаОкончанияКлючевойОперации; + КонецЕсли; + Запись.Пользователь = Пользователь; + Запись.ДатаЗаписиЛокальная = ДатаЗаписиЛокальная; + Запись.Комментарий = Комментарий; + + КонецЦикла; + + Если НаборЗаписей.Количество() > 0 Тогда + Попытка + НаборЗаписей.Записать(Ложь); + Исключение + ЗаписьЖурналаРегистрации(НСтр("ru = 'Не удалось сохранить замеры производительности'", КодОсновногоЯзыка), + УровеньЖурналаРегистрации.Ошибка,,,ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + КонецЕсли; + + УстановитьПривилегированныйРежим(Ложь); + +КонецПроцедуры + // Процедура обработки регламентного задания по выгрузке данных // // Параметры: diff --git a/SSL/src/CommonModules/ОценкаПроизводительностиКлиентСервер/Module.bsl b/SSL/src/CommonModules/ОценкаПроизводительностиКлиентСервер/Module.bsl index 3cff62e50..89c0a9032 100644 --- a/SSL/src/CommonModules/ОценкаПроизводительностиКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ОценкаПроизводительностиКлиентСервер/Module.bsl @@ -12,10 +12,145 @@ // * ИмяКлючевойОперации - Строка - имя ключевой операции. // * ЦелевоеВремя - Число - целевое время ключевой операции. // -#Если Сервер Тогда +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда Процедура СоздатьКлючевыеОперации(КлючевыеОперации) Экспорт ОценкаПроизводительности.СоздатьКлючевыеОперации(КлючевыеОперации); КонецПроцедуры + +// Устарела. Будет удалена в следующей редакции библиотеки. +// Необходимо использовать +// ОценкаПроизводительности.ЗакончитьЗамерВремени +// +// Процедура завершает замер времени ключевой операции на сервере +// и записывает результат на сервере в <РегистрСведений.ЗамерыВремени> +// Вызывается только с сервера. +// +// Параметры: +// КлючеваяОперация - СправочникСсылка.КлючевыеОперации, Строка - ключевая операция или +// имя ключевой операции. +// ВремяНачала - Число, Дата - время начала замера. Если число, то значение, возвращаемое функцией +// ТекущаяУниверсальнаяДатаВМиллисекундах, деленное на 1000. Если дата, то значение +// возвращаемое функцией ТекущаяУниверсальнаяДата. +// Комментарий - Строка - произвольная информация замера. +// +Процедура ЗакончитьЗамерВремени(КлючеваяОперация, ВремяНачала, Комментарий = Неопределено) Экспорт + ОценкаПроизводительности.ЗакончитьЗамерВремени(КлючеваяОперация, ВремяНачала * 1000, 1, Комментарий); +КонецПроцедуры + +// Устарела. Будет удалена в следующей редакции библиотеки. +// Необходимо использовать +// ОценкаПроизводительности.ЗакончитьЗамерВремениТехнологическийНаСервере +// Процедура завершает замер времени технологической ключевой операции на сервере +// и записывает результат на сервере в <РегистрСведений.ЗамерыВремениТехнологические> +// Вызывается только с сервера. +// +// Параметры: +// КлючеваяОперация - СправочникСсылка.КлючевыеОперации, Строка - ключевая операция или +// имя ключевой операции. +// ВремяНачала - Число, Дата - время начала замера. Если число, то значение, возвращаемое функцией +// ТекущаяУниверсальнаяДатаВМиллисекундах, деленное на 1000. Если дата, то значение +// возвращаемое функцией ТекущаяУниверсальнаяДата. +// Комментарий - Строка - произвольная информация замера. +// +Процедура ЗакончитьЗамерВремениТехнологический(КлючеваяОперация, ВремяНачала, Комментарий = Неопределено) Экспорт + ОценкаПроизводительности.ЗакончитьЗамерВремениТехнологический(КлючеваяОперация, ВремяНачала * 1000, Комментарий); +КонецПроцедуры + +#Иначе + +// Устарела. Будет удалена в следующей редакции библиотеки. +// Необходимо использовать ОценкаПроизводительностиКлиент.НачатьЗамерВремени. +// +// Активизирует замер времени выполнения ключевой операции. Для завершения замера необходимо +// явно вызвать в общем модуле <ОценкаПроизводительностиГлобальный> +// процедуру <Процедура ЗакончитьРучнойЗамерВремени(УИДЗамера)>, необходимо передать точно такой же +// УИДЗамера, как и в данной функции. +// Результат замера будет записан в <РегистрСведений.ЗамерыВремени>. +// +// Параметры: +// КлючеваяОперация - СправочникСсылка.КлючевыеОперации, Строка - ключевая операция или +// имя ключевой операции. +// УИДЗамера - УникальныйИдентификатор - уникальный идентификатор замера. +// Комментарий - Строка - произвольная информация замера. +// +// Возвращаемое значение: +// УникальныйИдентификатор - уникальный идентификатор замера. +// +Функция НачатьРучнойЗамерВремени(КлючеваяОперация, УИДЗамера = Неопределено, Комментарий = Неопределено) Экспорт + Если УИДЗамера = Неопределено Тогда + УИДЗамера = Новый УникальныйИдентификатор(); + КонецЕсли; + + Параметры = Новый Структура; + Параметры.Вставить("КлючеваяОперация", КлючеваяОперация); + Параметры.Вставить("УИДЗамера", УИДЗамера); + Параметры.Вставить("Комментарий", Комментарий); + Параметры.Вставить("АвтоЗавершение", Ложь); + + НачатьЗамерВремениСлужебный(Параметры); + + Возврат УИДЗамера; +КонецФункции + +// Устарела. Будет удалена в следующей редакции библиотеки. +// Необходимо использовать +// ОценкаПроизводительностиКлиент.ЗавершитьЗамерВремени +// +// Процедура завершает ручной замер времени ключевой операции +// Вызывается только на клиенте. +// +// Параметры: +// УИДЗамера - УникальныйИдентификатор - уникальный идентификатор замера. +// +Процедура ЗакончитьРучнойЗамерВремени(УИДЗамера) Экспорт + ОценкаПроизводительностиКлиент.ЗавершитьЗамерВремени(УИДЗамера); +КонецПроцедуры + +// Устарела. Будет удалена в следующей редакции библиотеки. +// Необходимо использовать +// ОценкаПроизводительностиКлиент.НачатьЗамерВремениТехнологическийНаКлиенте +// Активизирует замер времени выполнения технологической ключевой операции с явным завершением времени +// длительности ключевой операции. Вызывается только с клиента. +// Для завершения замера необходимо вызвать в общем модуле <ОценкаПроизводительностиГлобальный> +// процедуру <Процедура ЗакончитьРучнойЗамерВремени(УИДЗамера)>, необходимо передать точно такой же +// УИДЗамера, как и в данную процедуру. +// Результат замера будет записан в <РегистрСведений.ЗамерыВремениТехнологические>. +// +// Параметры: +// КлючеваяОперация - СправочникСсылка.КлючевыеОперации, Строка - ключевая операция или +// имя ключевой операции. +// УИДЗамера - УникальныйИдентификатор - уникальный идентификатор замера. +// Комментарий - Строка - произвольная информация замера. +// +// Возвращаемое значение: +// УникальныйИдентификатор - уникальный идентификатор замера. +// +Функция НачатьРучнойЗамерВремениТехнологический(КлючеваяОперация, УИДЗамера = Неопределено, Комментарий = Неопределено) Экспорт + Если УИДЗамера = Неопределено Тогда + УИДЗамера = Новый УникальныйИдентификатор(); + КонецЕсли; + + Параметры = Новый Структура; + Параметры.Вставить("КлючеваяОперация", КлючеваяОперация); + Параметры.Вставить("УИДЗамера", УИДЗамера); + Параметры.Вставить("Комментарий", Комментарий); + Параметры.Вставить("АвтоЗавершения", Ложь); + Параметры.Вставить("Технологический", Истина); + + НачатьЗамерВремениСлужебный(Параметры); +КонецФункции +// Устарела. Будет удалена в следующей редакции библиотеки. +// Необходимо использовать +// ОценкаПроизводительностиКлиент.ЗавершитьЗамерВремениНаКлиенте +// Процедура завершает ручной технологический замер времени ключевой операции +// Вызывается только на клиенте. +// +// Параметры: +// УИДЗамера - УникальныйИдентификатор - уникальный идентификатор замера. +// +Процедура ЗакончитьРучнойЗамерВремениТехнологический(УИДЗамера) Экспорт + ОценкаПроизводительностиКлиент.ЗавершитьЗамерВремени(УИДЗамера); +КонецПроцедуры #КонецЕсли // Устарела. Будет удалена в следующей редакции библиотеки. @@ -93,80 +228,6 @@ КонецФункции -#Если Сервер Тогда -// Устарела. Будет удалена в следующей редакции библиотеки. -// Необходимо использовать -// ОценкаПроизводительности.ЗакончитьЗамерВремени -// -// Процедура завершает замер времени ключевой операции на сервере -// и записывает результат на сервере в <РегистрСведений.ЗамерыВремени> -// Вызывается только с сервера. -// -// Параметры: -// КлючеваяОперация - СправочникСсылка.КлючевыеОперации, Строка - ключевая операция или -// имя ключевой операции. -// ВремяНачала - Число, Дата - время начала замера. Если число, то значение, возвращаемое функцией -// ТекущаяУниверсальнаяДатаВМиллисекундах, деленное на 1000. Если дата, то значение -// возвращаемое функцией ТекущаяУниверсальнаяДата. -// Комментарий - Строка - произвольная информация замера. -// -Процедура ЗакончитьЗамерВремени(КлючеваяОперация, ВремяНачала, Комментарий = Неопределено) Экспорт - ОценкаПроизводительности.ЗакончитьЗамерВремени(КлючеваяОперация, ВремяНачала * 1000, 1, Комментарий); -КонецПроцедуры -#КонецЕсли - -#Если Клиент Тогда -// Устарела. Будет удалена в следующей редакции библиотеки. -// Необходимо использовать ОценкаПроизводительностиКлиент.НачатьЗамерВремени. -// -// Активизирует замер времени выполнения ключевой операции. Для завершения замера необходимо -// явно вызвать в общем модуле <ОценкаПроизводительностиГлобальный> -// процедуру <Процедура ЗакончитьРучнойЗамерВремени(УИДЗамера)>, необходимо передать точно такой же -// УИДЗамера, как и в данной функции. -// Результат замера будет записан в <РегистрСведений.ЗамерыВремени>. -// -// Параметры: -// КлючеваяОперация - СправочникСсылка.КлючевыеОперации, Строка - ключевая операция или -// имя ключевой операции. -// УИДЗамера - УникальныйИдентификатор - уникальный идентификатор замера. -// Комментарий - Строка - произвольная информация замера. -// -// Возвращаемое значение: -// УникальныйИдентификатор - уникальный идентификатор замера. -// -Функция НачатьРучнойЗамерВремени(КлючеваяОперация, УИДЗамера = Неопределено, Комментарий = Неопределено) Экспорт - Если УИДЗамера = Неопределено Тогда - УИДЗамера = Новый УникальныйИдентификатор(); - КонецЕсли; - - Параметры = Новый Структура; - Параметры.Вставить("КлючеваяОперация", КлючеваяОперация); - Параметры.Вставить("УИДЗамера", УИДЗамера); - Параметры.Вставить("Комментарий", Комментарий); - Параметры.Вставить("АвтоЗавершение", Ложь); - - НачатьЗамерВремениСлужебный(Параметры); - - Возврат УИДЗамера; -КонецФункции -#КонецЕсли - -#Если Клиент Тогда -// Устарела. Будет удалена в следующей редакции библиотеки. -// Необходимо использовать -// ОценкаПроизводительностиКлиент.ЗавершитьЗамерВремени -// -// Процедура завершает ручной замер времени ключевой операции -// Вызывается только на клиенте. -// -// Параметры: -// УИДЗамера - УникальныйИдентификатор - уникальный идентификатор замера. -// -Процедура ЗакончитьРучнойЗамерВремени(УИДЗамера) Экспорт - ОценкаПроизводительностиКлиент.ЗавершитьЗамерВремени(УИДЗамера); -КонецПроцедуры -#КонецЕсли - // Устарела. Будет удалена в следующей редакции библиотеки. // НеобходимоИспользовать // на сервере - ОценкаПроизводительности.НачатьЗамерВремениНаСервере @@ -201,78 +262,6 @@ Возврат ВремяНачала; КонецФункции -#Если Сервер Тогда -// Устарела. Будет удалена в следующей редакции библиотеки. -// Необходимо использовать -// ОценкаПроизводительности.ЗакончитьЗамерВремениТехнологическийНаСервере -// Процедура завершает замер времени технологической ключевой операции на сервере -// и записывает результат на сервере в <РегистрСведений.ЗамерыВремениТехнологические> -// Вызывается только с сервера. -// -// Параметры: -// КлючеваяОперация - СправочникСсылка.КлючевыеОперации, Строка - ключевая операция или -// имя ключевой операции. -// ВремяНачала - Число, Дата - время начала замера. Если число, то значение, возвращаемое функцией -// ТекущаяУниверсальнаяДатаВМиллисекундах, деленное на 1000. Если дата, то значение -// возвращаемое функцией ТекущаяУниверсальнаяДата. -// Комментарий - Строка - произвольная информация замера. -// -Процедура ЗакончитьЗамерВремениТехнологический(КлючеваяОперация, ВремяНачала, Комментарий = Неопределено) Экспорт - ОценкаПроизводительности.ЗакончитьЗамерВремениТехнологический(КлючеваяОперация, ВремяНачала * 1000, Комментарий); -КонецПроцедуры -#КонецЕсли - -// Устарела. Будет удалена в следующей редакции библиотеки. -// Необходимо использовать -// ОценкаПроизводительностиКлиент.НачатьЗамерВремениТехнологическийНаКлиенте -// Активизирует замер времени выполнения технологической ключевой операции с явным завершением времени -// длительности ключевой операции. Вызывается только с клиента. -// Для завершения замера необходимо вызвать в общем модуле <ОценкаПроизводительностиГлобальный> -// процедуру <Процедура ЗакончитьРучнойЗамерВремени(УИДЗамера)>, необходимо передать точно такой же -// УИДЗамера, как и в данную процедуру. -// Результат замера будет записан в <РегистрСведений.ЗамерыВремениТехнологические>. -// -// Параметры: -// КлючеваяОперация - СправочникСсылка.КлючевыеОперации, Строка - ключевая операция или -// имя ключевой операции. -// УИДЗамера - УникальныйИдентификатор - уникальный идентификатор замера. -// Комментарий - Строка - произвольная информация замера. -// -// Возвращаемое значение: -// УникальныйИдентификатор - уникальный идентификатор замера. -// -#Если Клиент Тогда -Функция НачатьРучнойЗамерВремениТехнологический(КлючеваяОперация, УИДЗамера = Неопределено, Комментарий = Неопределено) Экспорт - Если УИДЗамера = Неопределено Тогда - УИДЗамера = Новый УникальныйИдентификатор(); - КонецЕсли; - - Параметры = Новый Структура; - Параметры.Вставить("КлючеваяОперация", КлючеваяОперация); - Параметры.Вставить("УИДЗамера", УИДЗамера); - Параметры.Вставить("Комментарий", Комментарий); - Параметры.Вставить("АвтоЗавершения", Ложь); - Параметры.Вставить("Технологический", Истина); - - НачатьЗамерВремениСлужебный(Параметры); -КонецФункции -#КонецЕсли - -#Если Клиент Тогда -// Устарела. Будет удалена в следующей редакции библиотеки. -// Необходимо использовать -// ОценкаПроизводительностиКлиент.ЗавершитьЗамерВремениНаКлиенте -// Процедура завершает ручной технологический замер времени ключевой операции -// Вызывается только на клиенте. -// -// Параметры: -// УИДЗамера - УникальныйИдентификатор - уникальный идентификатор замера. -// -Процедура ЗакончитьРучнойЗамерВремениТехнологический(УИДЗамера) Экспорт - ОценкаПроизводительностиКлиент.ЗавершитьЗамерВремени(УИДЗамера); -КонецПроцедуры -#КонецЕсли - #КонецОбласти #КонецОбласти @@ -312,14 +301,13 @@ ВремяНачала = 0; Если ОценкаПроизводительностиВызовСервераПовтИсп.ВыполнятьЗамерыПроизводительности() Тогда - #Если Клиент И ТолстыйКлиентУправляемоеПриложение И Сервер Тогда + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда Если Не ЗначениеЗаполнено(КлючеваяОперация) Тогда // Считаем, что вызов пришел с сервера. Возвращаем начало замера Возврат ОценкаПроизводительности.НачатьЗамерВремени()/1000; КонецЕсли; - #КонецЕсли - - #Если Клиент Тогда + + #Иначе Если Не ЗначениеЗаполнено(КлючеваяОперация) Тогда ВызватьИсключение НСтр("ru = 'Не указана ключевая операция.'"); diff --git a/SSL/src/CommonModules/ОценкаПроизводительностиСлужебный/Module.bsl b/SSL/src/CommonModules/ОценкаПроизводительностиСлужебный/Module.bsl index 11359ff8d..8466ad6b8 100644 --- a/SSL/src/CommonModules/ОценкаПроизводительностиСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ОценкаПроизводительностиСлужебный/Module.bsl @@ -107,7 +107,7 @@ КонецПроцедуры -// См. ОбщегоНазначенияПереопределяемый.ПараметрыРаботыКлиентаПриЗапуске. +// См. ОбщегоНазначенияПереопределяемый.ПриДобавленииПараметровРаботыКлиентаПриЗапуске. Процедура ПриДобавленииПараметровРаботыКлиентаПриЗапуске(Параметры) Экспорт ПараметрыРаботыКлиента = Новый Структура("ПериодЗаписи, ВыполнятьЗамерыПроизводительности"); @@ -471,7 +471,7 @@ Функция ПодсистемаСуществует(ПолноеИмяПодсистемы) Экспорт Если ЕстьБазоваяФункциональность() Тогда - МодульОбщегоНазначения = Вычислить("ОбщегоНазначения"); + МодульОбщегоНазначения = ВычислитьВБезопасномРежиме("ОбщегоНазначения"); Возврат МодульОбщегоНазначения.ПодсистемаСуществует(ПолноеИмяПодсистемы); Иначе ИменаПодсистем = ОценкаПроизводительностиПовтИсп.ИменаПодсистем(); @@ -544,7 +544,7 @@ Функция ОбщийМодуль(Имя) Экспорт Если ЕстьБазоваяФункциональность() Тогда - МодульОбщегоНазначения = Вычислить("ОбщегоНазначения"); + МодульОбщегоНазначения = ВычислитьВБезопасномРежиме("ОбщегоНазначения"); Модуль = МодульОбщегоНазначения.ОбщийМодуль(Имя); Иначе Если Метаданные.ОбщиеМодули.Найти(Имя) <> Неопределено Тогда diff --git a/SSL/src/CommonModules/ОчередьЗаданий/Module.bsl b/SSL/src/CommonModules/ОчередьЗаданий/Module.bsl index 3b9865c7a..be74af59c 100644 --- a/SSL/src/CommonModules/ОчередьЗаданий/Module.bsl +++ b/SSL/src/CommonModules/ОчередьЗаданий/Module.bsl @@ -130,7 +130,7 @@ // Подготовка запроса Запрос = Новый Запрос; - РазделительЗаданийОбластейДанных = РаботаВМоделиСервисаПовтИсп.РазделительВспомогательныхДанных(); + РазделительЗаданийОбластейДанных = РаботаВМоделиСервиса.РазделительВспомогательныхДанных(); СправочникиЗаданий = ОчередьЗаданийСлужебныйПовтИсп.ПолучитьСправочникиЗаданий(); ТекстЗапроса = ""; @@ -196,7 +196,7 @@ Продолжить; КонецЕсли; - Если РаботаВМоделиСервисаПовтИсп.ЭтоРазделеннаяКонфигурация() И РаботаВМоделиСервиса.ЭтоРазделенныйОбъектМетаданных(ИмяСправочника, РаботаВМоделиСервисаПовтИсп.РазделительВспомогательныхДанных()) Тогда + Если РаботаВМоделиСервисаПовтИсп.ЭтоРазделеннаяКонфигурация() И РаботаВМоделиСервиса.ЭтоРазделенныйОбъектМетаданных(ИмяСправочника, РаботаВМоделиСервиса.РазделительВспомогательныхДанных()) Тогда ТекстЗапроса = ТекстЗапроса + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( "ВЫБРАТЬ @@ -385,7 +385,7 @@ Для каждого ОписаниеПараметра Из ОчередьЗаданийСлужебныйПовтИсп.ПараметрыЗаданийОчереди() Цикл Если ПараметрыЗадания.Свойство(ОписаниеПараметра.Имя) Тогда Если ОписаниеПараметра.РазделениеДанных Тогда - Если Не РаботаВМоделиСервисаПовтИсп.ЭтоРазделеннаяКонфигурация() ИЛИ Не РаботаВМоделиСервиса.ЭтоРазделенныйОбъектМетаданных(Задание.Метаданные(), РаботаВМоделиСервисаПовтИсп.РазделительВспомогательныхДанных()) Тогда + Если Не РаботаВМоделиСервисаПовтИсп.ЭтоРазделеннаяКонфигурация() ИЛИ Не РаботаВМоделиСервиса.ЭтоРазделенныйОбъектМетаданных(Задание.Метаданные(), РаботаВМоделиСервиса.РазделительВспомогательныхДанных()) Тогда Продолжить; КонецЕсли; КонецЕсли; @@ -449,8 +449,8 @@ Задание = ОписаниеЗаданияПоИдентификатору(Идентификатор); // Проверка попытки изменения задания другой области. - Если РаботаВМоделиСервисаПовтИсп.РазделениеВключено() - И РаботаВМоделиСервисаПовтИсп.ДоступноИспользованиеРазделенныхДанных() + Если РаботаВМоделиСервиса.РазделениеВключено() + И РаботаВМоделиСервиса.ДоступноИспользованиеРазделенныхДанных() И Задание.ОбластьДанных <> РаботаВМоделиСервиса.ЗначениеРазделителяСеанса() Тогда ВызватьИсключение(ПолучитьТекстИсключенияПолученияДанныхДругойОбласти()); @@ -459,7 +459,7 @@ // Проверка попытки изменения параметров заданий с заданным шаблоном. Если РаботаВМоделиСервисаПовтИсп.ЭтоРазделеннаяКонфигурация() И РаботаВМоделиСервиса.ЭтоРазделенныйОбъектМетаданных( Идентификатор.Метаданные().ПолноеИмя(), - РаботаВМоделиСервисаПовтИсп.РазделительВспомогательныхДанных()) Тогда + РаботаВМоделиСервиса.РазделительВспомогательныхДанных()) Тогда Если ЗначениеЗаполнено(Задание.Шаблон) Тогда ОписанияПараметров = ОчередьЗаданийСлужебныйПовтИсп.ПараметрыЗаданийОчереди(); Для каждого КлючИЗначение Из ПараметрыЗадания Цикл @@ -603,7 +603,7 @@ Если РаботаВМоделиСервисаПовтИсп.ЭтоРазделеннаяКонфигурация() И РаботаВМоделиСервиса.ЭтоРазделенныйОбъектМетаданных( Задание.Метаданные().ПолноеИмя(), - РаботаВМоделиСервисаПовтИсп.РазделительВспомогательныхДанных()) Тогда + РаботаВМоделиСервиса.РазделительВспомогательныхДанных()) Тогда Если ЗначениеЗаполнено(Задание.Шаблон) Тогда ШаблонСообщения = НСтр("ru = 'Задание очереди с идентификатором %1 создано на основе шаблона. |Удаление заданий с установленным шаблоном запрещено.'"); @@ -682,8 +682,6 @@ ИнтеграцияПодсистемБСП.ПриПолученииСпискаШаблонов(Шаблоны); ОчередьЗаданийПереопределяемый.ПриПолученииСпискаШаблонов(Шаблоны); - // Для совместимости с предыдущими версиями. - ОчередьЗаданийПереопределяемый.ЗаполнитьСписокРазделенныхРегламентныхЗаданий(Шаблоны); Возврат Шаблоны; @@ -784,8 +782,8 @@ КонецЦикла; // Область данных - Если РаботаВМоделиСервисаПовтИсп.РазделениеВключено() - И РаботаВМоделиСервисаПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + Если РаботаВМоделиСервиса.РазделениеВключено() + И РаботаВМоделиСервиса.ДоступноИспользованиеРазделенныхДанных() Тогда Если Параметры.Свойство("ОбластьДанных") Тогда Если Параметры.ОбластьДанных <> РаботаВМоделиСервиса.ЗначениеРазделителяСеанса() Тогда diff --git a/SSL/src/CommonModules/ОчередьЗаданийПереопределяемый/Module.bsl b/SSL/src/CommonModules/ОчередьЗаданийПереопределяемый/Module.bsl index 191edbfec..15bb7c109 100644 --- a/SSL/src/CommonModules/ОчередьЗаданийПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ОчередьЗаданийПереопределяемый/Module.bsl @@ -57,20 +57,4 @@ КонецПроцедуры -#Область УстаревшиеПроцедурыИФункции - -// Устарела. Рекомендуется использовать ПриПолученииСпискаШаблонов(). -// -Процедура ЗаполнитьСписокРазделенныхРегламентныхЗаданий(СписокРазделенныхРегламентныхЗаданий) Экспорт - -КонецПроцедуры - -// Устарела. Рекомендуется использовать ПриОпределенииПсевдонимовОбработчиков(). -// -Процедура ПолучитьРазрешенныеМетодыОчередиЗаданий(Знач РазрешенныеМетоды) Экспорт - -КонецПроцедуры - -#КонецОбласти - #КонецОбласти diff --git a/SSL/src/CommonModules/ОчередьЗаданийСлужебный/Module.bsl b/SSL/src/CommonModules/ОчередьЗаданийСлужебный/Module.bsl index bebbd2cd5..fbf55fdd9 100644 --- a/SSL/src/CommonModules/ОчередьЗаданийСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ОчередьЗаданийСлужебный/Module.bsl @@ -116,7 +116,7 @@ // Процедура ПланированиеОбработкиЗаданий() Экспорт - Если НЕ РаботаВМоделиСервисаПовтИсп.РазделениеВключено() Тогда + Если НЕ РаботаВМоделиСервиса.РазделениеВключено() Тогда Возврат; КонецЕсли; @@ -139,7 +139,7 @@ КонецЕсли; - Если РаботаВМоделиСервисаПовтИсп.ЭтоРазделеннаяКонфигурация() И РаботаВМоделиСервиса.ЭтоРазделенныйОбъектМетаданных(СправочникЗаданий.СоздатьЭлемент().Метаданные().ПолноеИмя(), РаботаВМоделиСервисаПовтИсп.РазделительВспомогательныхДанных()) Тогда + Если РаботаВМоделиСервисаПовтИсп.ЭтоРазделеннаяКонфигурация() И РаботаВМоделиСервиса.ЭтоРазделенныйОбъектМетаданных(СправочникЗаданий.СоздатьЭлемент().Метаданные().ПолноеИмя(), РаботаВМоделиСервиса.РазделительВспомогательныхДанных()) Тогда ТекстЗапроса = ТекстЗапроса + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( "ВЫБРАТЬ @@ -278,7 +278,7 @@ КонецЕсли; - Если РаботаВМоделиСервисаПовтИсп.ЭтоРазделеннаяКонфигурация() И РаботаВМоделиСервиса.ЭтоРазделенныйОбъектМетаданных(СправочникЗаданий.СоздатьЭлемент().Метаданные().ПолноеИмя(), РаботаВМоделиСервисаПовтИсп.РазделительВспомогательныхДанных()) Тогда + Если РаботаВМоделиСервисаПовтИсп.ЭтоРазделеннаяКонфигурация() И РаботаВМоделиСервиса.ЭтоРазделенныйОбъектМетаданных(СправочникЗаданий.СоздатьЭлемент().Метаданные().ПолноеИмя(), РаботаВМоделиСервиса.РазделительВспомогательныхДанных()) Тогда Если ПустаяСтрока(ТекстЗапросаБлокировки) Тогда @@ -1032,7 +1032,7 @@ // Процедура ВыполнитьМетодКонфигурации(ИмяМетода, Параметры = Неопределено) - Если РаботаВМоделиСервисаПовтИсп.РазделениеВключено() И РаботаВМоделиСервисаПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + Если РаботаВМоделиСервиса.РазделениеВключено() И РаботаВМоделиСервиса.ДоступноИспользованиеРазделенныхДанных() Тогда РазделительУстановлен = Истина; ЗначениеРазделителя = РаботаВМоделиСервиса.ЗначениеРазделителяСеанса(); Иначе @@ -1161,7 +1161,7 @@ Результат.Задание = Задание.Ссылка; Если РаботаВМоделиСервиса.ЭтоРазделенныйОбъектМетаданных(Задание.Метаданные().ПолноеИмя(), - РаботаВМоделиСервисаПовтИсп.РазделительВспомогательныхДанных()) + РаботаВМоделиСервиса.РазделительВспомогательныхДанных()) И ЗначениеЗаполнено(Задание.Шаблон) Тогда Результат.ИмяМетодаЗадания = Задание.Шаблон.ИмяМетода; @@ -1320,7 +1320,7 @@ ЗаписьЖурналаРегистрации(ИмяСобытия, УровеньЖурналаРегистрации.Информация, , Строка(ЗаписьЗадания.УникальныйИдентификатор()), Комментарий + ИмяМетода + ";" + ?(РаботаВМоделиСервисаПовтИсп.ЭтоРазделеннаяКонфигурация() И РаботаВМоделиСервиса.ЭтоРазделенныйОбъектМетаданных(ЗаписьЗадания.Метаданные().ПолноеИмя(), - РаботаВМоделиСервисаПовтИсп.РазделительВспомогательныхДанных()), + РаботаВМоделиСервиса.РазделительВспомогательныхДанных()), Формат(ЗаписьЗадания.ОбластьДанныхВспомогательныеДанные, "ЧН=0; ЧГ="), "-1")); КонецПроцедуры @@ -1406,7 +1406,7 @@ Задание = Выборка.Идентификатор.ПолучитьОбъект(); - Если РаботаВМоделиСервисаПовтИсп.ЭтоРазделеннаяКонфигурация() И РаботаВМоделиСервиса.ЭтоРазделенныйОбъектМетаданных(Задание.Метаданные().ПолноеИмя(), РаботаВМоделиСервисаПовтИсп.РазделительВспомогательныхДанных()) Тогда + Если РаботаВМоделиСервисаПовтИсп.ЭтоРазделеннаяКонфигурация() И РаботаВМоделиСервиса.ЭтоРазделенныйОбъектМетаданных(Задание.Метаданные().ПолноеИмя(), РаботаВМоделиСервиса.РазделительВспомогательныхДанных()) Тогда Если ЗначениеЗаполнено(Задание.Шаблон) И Выборка.Шаблон = Неопределено Тогда @@ -1498,7 +1498,7 @@ Если РаботаВМоделиСервисаПовтИсп.ЭтоРазделеннаяКонфигурация() И РаботаВМоделиСервиса.ЭтоРазделенныйОбъектМетаданных( Задание.Метаданные().ПолноеИмя(), - РаботаВМоделиСервисаПовтИсп.РазделительВспомогательныхДанных()) Тогда + РаботаВМоделиСервиса.РазделительВспомогательныхДанных()) Тогда Если ЗначениеЗаполнено(Задание.Шаблон) Тогда // Задание по шаблону без расписания. ШаблонСообщения = НСтр("ru = 'Для шаблон заданий очереди %1 не найдено расписание'"); @@ -1720,7 +1720,7 @@ Для Каждого Строка Из ТаблицаИспользованияРегламентныхЗаданийВМоделиСервиса Цикл - Если РаботаВМоделиСервисаПовтИсп.РазделениеВключено() Тогда + Если РаботаВМоделиСервиса.РазделениеВключено() Тогда // Включаем регламентные задания, предназначенные для использования в модели сервиса. // Отключаем регламентные задания, предназначенные для использования в локальном режиме. diff --git a/SSL/src/CommonModules/ОчередьЗаданийСлужебныйПовтИсп/Module.bsl b/SSL/src/CommonModules/ОчередьЗаданийСлужебныйПовтИсп/Module.bsl index f24bfe0ef..2d7a0fe8e 100644 --- a/SSL/src/CommonModules/ОчередьЗаданийСлужебныйПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ОчередьЗаданийСлужебныйПовтИсп/Module.bsl @@ -12,13 +12,6 @@ Результат = Новый Соответствие; - // Для совместимости с предыдущими версиями. - РазрешенныеМетоды = Новый Массив; - ОчередьЗаданийПереопределяемый.ПолучитьРазрешенныеМетодыОчередиЗаданий(РазрешенныеМетоды); - Для каждого ИмяМетода Из РазрешенныеМетоды Цикл - Результат.Вставить(ВРег(ИмяМетода), ИмяМетода); - КонецЦикла; - МетодыКонфигурации = Новый Соответствие; ИнтеграцияПодсистемБСП.ПриОпределенииПсевдонимовОбработчиков(МетодыКонфигурации); @@ -250,7 +243,7 @@ Если ОписаниеПараметра.РазделениеДанных Тогда - Если Не РаботаВМоделиСервисаПовтИсп.ЭтоРазделеннаяКонфигурация() ИЛИ Не РаботаВМоделиСервиса.ЭтоРазделенныйОбъектМетаданных(СправочникЗаданий, РаботаВМоделиСервисаПовтИсп.РазделительВспомогательныхДанных()) Тогда + Если Не РаботаВМоделиСервисаПовтИсп.ЭтоРазделеннаяКонфигурация() ИЛИ Не РаботаВМоделиСервиса.ЭтоРазделенныйОбъектМетаданных(СправочникЗаданий, РаботаВМоделиСервиса.РазделительВспомогательныхДанных()) Тогда ОписаниеПоляВыборки = ОписаниеПараметра.ЗначениеДляНеразделенныхЗаданий + " КАК " + ОписаниеПараметра.Имя; @@ -281,7 +274,7 @@ МодульОчередьЗаданийСлужебныйРазделениеДанных.ПриЗаполненииСправочниковЗаданий(МассивСправочников); КонецЕсли; - Возврат МассивСправочников; + Возврат Новый ФиксированныйМассив(МассивСправочников); КонецФункции diff --git a/SSL/src/CommonModules/ОчередьЗаданийСлужебныйРазделениеДанных/Module.bsl b/SSL/src/CommonModules/ОчередьЗаданийСлужебныйРазделениеДанных/Module.bsl index 640d4d468..0ff121861 100644 --- a/SSL/src/CommonModules/ОчередьЗаданийСлужебныйРазделениеДанных/Module.bsl +++ b/SSL/src/CommonModules/ОчередьЗаданийСлужебныйРазделениеДанных/Module.bsl @@ -98,7 +98,7 @@ /// Обновляет задания очереди созданные на основе шаблонов. Процедура ОбновитьЗаданияОчередиПоШаблонам(Параметры = Неопределено) Экспорт - Если НЕ РаботаВМоделиСервисаПовтИсп.РазделениеВключено() Тогда + Если НЕ РаботаВМоделиСервиса.РазделениеВключено() Тогда Возврат; КонецЕсли; @@ -220,7 +220,7 @@ // Обработчик обновления, переносит задания из РС ОчередьЗаданий в справочник ОчередьЗаданийОбластейДанных. Процедура ПеренестиЗаданияВОчередиВоВспомогательныеДанные() Экспорт - Если Не РаботаВМоделиСервисаПовтИсп.РазделениеВключено() Тогда + Если Не РаботаВМоделиСервиса.РазделениеВключено() Тогда Возврат; КонецЕсли; @@ -290,7 +290,7 @@ // Создает в текущей области данных задания по шаблонам. Процедура СоздатьЗаданияОчередиПоШаблонамВТекущейОбласти() Экспорт - Если НЕ РаботаВМоделиСервисаПовтИсп.РазделениеВключено() Тогда + Если НЕ РаботаВМоделиСервиса.РазделениеВключено() Тогда Возврат; КонецЕсли; @@ -436,7 +436,7 @@ // Функция ОбновитьШаблоныЗаданийОчереди(Параметры) - Если НЕ РаботаВМоделиСервисаПовтИсп.РазделениеВключено() Тогда + Если НЕ РаботаВМоделиСервиса.РазделениеВключено() Тогда Возврат Новый Структура("Добавленные, Удаленные", Новый Массив, Новый Массив); КонецЕсли; diff --git a/SSL/src/CommonModules/ПодключаемыеКоманды/Module.bsl b/SSL/src/CommonModules/ПодключаемыеКоманды/Module.bsl index d8b8b1f87..2648d76bd 100644 --- a/SSL/src/CommonModules/ПодключаемыеКоманды/Module.bsl +++ b/SSL/src/CommonModules/ПодключаемыеКоманды/Module.bsl @@ -55,7 +55,7 @@ КонецЕсли; // Для форм внешних отчетов и обработок невозможно получить метаданные имея только имя формы, // поэтому определение источников команд выполняется до вызова ПовтИсп. - Если ИсточникиЧерезЗапятую = "" И ЭтоВнешняяФорма(ИмяФормы) Тогда + Если ИсточникиЧерезЗапятую = "" И ТребуетсяУказаниеИсточниковКоманд(ИмяФормы) Тогда Если ЕстьПараметрыОбъекта Тогда ОбъектМетаданных = Метаданные.НайтиПоТипу(ТипЗнч(Параметры.Ключ)); Если ОбъектМетаданных <> Неопределено Тогда @@ -64,7 +64,7 @@ КонецЕсли; Если ИсточникиЧерезЗапятую = "" Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'В формах внешних отчетов и обработок + НСтр("ru = 'В формах отчетов, обработок и в общих формах |при вызове процедуры ""%1"" |требуется явно указывать параметр ""%2""'"), "ПодключаемыеКоманды.ПриСозданииНаСервере", @@ -89,9 +89,9 @@ // // Возвращаемое значение: // Структура - Параметры размещения подключаемых команд. -// * Источники - ОписаниеТипов, Массив из ОбъектМетаданных - Источники команд. -// Используется для второстепенных списков, -// а также в формах объектов, не являющихся поставщиками команд (обработки, общие формы). +// * Источники - ОписаниеТипов, Массив - Источники команд. +// Используется для второстепенных списков, а также в формах объектов, не являющихся поставщиками +// команд (обработки, общие формы). В массиве ожидаются элементы типа "ОбъектМетаданных". // * КоманднаяПанель - ГруппаФормы - Командная панель или группа команд, в которой выводятся подменю. // Используется как родитель для создания подменю в случае их отсутствия. // Если не указан то в первую очередь ищется группа "ПодключаемыеКоманды". @@ -140,12 +140,10 @@ ПараметрыЭкспортнойПроцедуры.Добавить(ПараметрыВызова.ПараметрКоманды); ПараметрыЭкспортнойПроцедуры.Добавить(Контекст); - Остаток = ""; - Вид = СтрЛев(ОписаниеКоманды.Обработчик, ".", Остаток); - Если НРег(Вид) = НРег("ОбщийМодуль") Тогда - Обработчик = Остаток; - Иначе - Обработчик = ОписаниеКоманды.Обработчик; + Обработчик = ОписаниеКоманды.Обработчик; + ПрефиксОбщегоМодуля = НРег("ОбщийМодуль."); + Если СтрНачинаетсяС(НРег(Обработчик), ПрефиксОбщегоМодуля) Тогда + Обработчик = Сред(Обработчик, СтрДлина(ПрефиксОбщегоМодуля) + 1); КонецЕсли; ОбщегоНазначения.ВыполнитьМетодКонфигурации(Обработчик, ПараметрыЭкспортнойПроцедуры); @@ -342,7 +340,7 @@ Источник.ПолноеИмя = ПолноеИмя; Источник.Менеджер = Менеджер; Источник.СсылкаМетаданных = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ПолноеИмя); - Источник.Вид = ВРег(СтрЛев(ПолноеИмя, ".")); + Источник.Вид = ВРег(СтрРазделить(ПолноеИмя, ".")[0]); Источник.ЭтоЖурналДокументов = (Источник.Вид = "ЖУРНАЛДОКУМЕНТОВ"); Если Источник.ЭтоЖурналДокументов Тогда @@ -491,7 +489,7 @@ МетаданныеФормы = Метаданные.НайтиПоПолномуИмени(ИмяФормы); МетаданныеРодителя = ?(МетаданныеФормы = Неопределено, Неопределено, МетаданныеФормы.Родитель()); - ВидВРег = ВРег(СтрЛев(ИмяФормы, ".")); + ВидВРег = ВРег(СтрРазделить(ИмяФормы, ".")[0]); ТипыИсточников = Новый Массив; Если ИсточникиЧерезЗапятую = "" Тогда Источник = ЗарегистрироватьИсточник(МетаданныеРодителя, Источники, ПодключенныеОбъекты, НастройкиПрограммногоИнтерфейса); @@ -634,7 +632,7 @@ Вид = Виды.Добавить(); Вид.Имя = "КоманднаяПанель"; Вид.ИмяПодменю = ""; - Вид.Порядок = 90; + Вид.Порядок = 90; ИнтеграцияПодсистемБСП.ПриОпределенииВидовПодключаемыхКоманд(Виды); @@ -832,7 +830,7 @@ Подменю = СведенияОПодменю.Подменю; Если Не ЭтоКоманднаяПанель Тогда - Если СведенияОПодменю.ВыведеноКоманд = 1 Тогда + Если СведенияОПодменю.ВыведеноКоманд = 1 И КомандаФормы <> Неопределено Тогда // Превращение подменю в кнопку когда выведена 1 команда с коротким заголовком. Если Не ЗначениеЗаполнено(КомандаФормы.Картинка) И Подменю.Вид = ВидГруппыФормы.Подменю Тогда КомандаФормы.Картинка = Подменю.Картинка; @@ -881,7 +879,7 @@ КонецПроцедуры Функция ЗарегистрироватьПодменю(Элементы, СведенияОВсехПодменю, ИмяПодменю, ШаблонНового = Неопределено, КоманднаяПанель = Неопределено, ПодменюПоУмолчанию = Неопределено) - + ВыведеноКоманд = 0; Группы = Новый Структура; Если ЗначениеЗаполнено(ИмяПодменю) Тогда Подменю = Элементы.Найти(ИмяПодменю); @@ -898,6 +896,7 @@ КонецЕсли; Иначе ГруппаПоУмолчанию = Подменю; + ВыведеноКоманд = КоличествоКомандВГруппе(ГруппаПоУмолчанию); Для Каждого Группа Из Подменю.ПодчиненныеЭлементы Цикл Если ТипЗнч(Группа) <> Тип("ГруппаФормы") Тогда Продолжить; @@ -916,16 +915,19 @@ Если Не Группы.Свойство("Важное") Тогда ГруппаВажное = Элементы.Добавить(ИмяПодменю + "Важное", Тип("ГруппаФормы"), Подменю); ГруппаВажное.Вид = ВидГруппыФормы.ГруппаКнопок; + ГруппаВажное.Заголовок = Подменю.Заголовок + " (" + НСтр("ru = 'Важное'") + ")"; Группы.Вставить("Важное", ГруппаВажное); КонецЕсли; Если Не Группы.Свойство("Обычное") Тогда ГруппаПоУмолчанию = Элементы.Добавить(ИмяПодменю + "Обычное", Тип("ГруппаФормы"), Подменю); ГруппаПоУмолчанию.Вид = ВидГруппыФормы.ГруппаКнопок; + ГруппаПоУмолчанию.Заголовок = Подменю.Заголовок + " (" + НСтр("ru = 'Обычное'") + ")"; Группы.Вставить("Обычное", ГруппаПоУмолчанию); КонецЕсли; Если Не Группы.Свойство("СмТакже") Тогда ГруппаСмТакже = Элементы.Добавить(ИмяПодменю + "СмТакже", Тип("ГруппаФормы"), Подменю); ГруппаСмТакже.Вид = ВидГруппыФормы.ГруппаКнопок; + ГруппаСмТакже.Заголовок = Подменю.Заголовок + " (" + НСтр("ru = 'См. также'") + ")"; Группы.Вставить("СмТакже", ГруппаСмТакже); КонецЕсли; @@ -941,7 +943,19 @@ Результат.Подменю = Подменю; Результат.ГруппаПоУмолчанию = ГруппаПоУмолчанию; Результат.Группы = Группы; - + Результат.ВыведеноКоманд = ВыведеноКоманд; + Возврат Результат; +КонецФункции + +Функция КоличествоКомандВГруппе(Группа) + Результат = 0; + Для Каждого Элемент Из Группа.ПодчиненныеЭлементы Цикл + Если ТипЗнч(Элемент) = Тип("ГруппаФормы") Тогда + Результат = Результат + КоличествоКомандВГруппе(Элемент); + ИначеЕсли ТипЗнч(Элемент) = Тип("КнопкаФормы") Тогда + Результат = Результат + 1; + КонецЕсли; + КонецЦикла; Возврат Результат; КонецФункции @@ -1216,19 +1230,6 @@ Возврат "СтандартныеПодсистемы.ПодключаемыеКоманды"; КонецФункции -// Возвращает левую часть строки до разделителя. Правая часть строки возвращается в параметре Остаток. -Функция СтрЛев(Знач Строка, Знач Разделитель, Остаток = Неопределено) - Позиция = СтрНайти(Строка, Разделитель); - Если Позиция = 0 Тогда - СтрокаДоРазделителя = Строка; - Остаток = ""; - Иначе - СтрокаДоРазделителя = Лев(Строка, Позиция - 1); - Остаток = Сред(Строка, Позиция + СтрДлина(Разделитель)); - КонецЕсли; - Возврат СтрокаДоРазделителя; -КонецФункции - Функция ОбъединитьТипы(Тип1, Тип2) Тип1ЭтоОписаниеТипов = ТипЗнч(Тип1) = Тип("ОписаниеТипов"); Тип2ЭтоОписаниеТипов = ТипЗнч(Тип2) = Тип("ОписаниеТипов"); @@ -1261,10 +1262,13 @@ Возврат Результат; КонецФункции -Функция ЭтоВнешняяФорма(ПолноеИмяОбъектаМетаданных) - ВидОбъектаМетаданныхНРег = НРег(СтрЛев(ПолноеИмяОбъектаМетаданных, ".")); - Возврат ВидОбъектаМетаданныхНРег = НРег("ВнешняяОбработка") - Или ВидОбъектаМетаданныхНРег = НРег("ВнешнийОтчет"); +Функция ТребуетсяУказаниеИсточниковКоманд(ПолноеИмяОбъектаМетаданных) + ВидОбъектаМетаданных = НРег(СтрРазделить(ПолноеИмяОбъектаМетаданных, ".")[0]); + Возврат ВидОбъектаМетаданных = НРег("ВнешняяОбработка") + Или ВидОбъектаМетаданных = НРег("ВнешнийОтчет") + Или ВидОбъектаМетаданных = НРег("Обработка") + Или ВидОбъектаМетаданных = НРег("Отчет") + Или ВидОбъектаМетаданных = НРег("ОбщаяФорма"); КонецФункции #КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ПодключаемыеКомандыКлиент/Module.bsl b/SSL/src/CommonModules/ПодключаемыеКомандыКлиент/Module.bsl index fd386d00c..1a3f80e72 100644 --- a/SSL/src/CommonModules/ПодключаемыеКомандыКлиент/Module.bsl +++ b/SSL/src/CommonModules/ПодключаемыеКомандыКлиент/Module.bsl @@ -20,7 +20,7 @@ Контекст.Вставить("ТребуетсяОпределитьСсылки", Истина); Контекст.Вставить("ТребуетсяЗапись", Контекст.ЭтоФормаОбъекта И ОписаниеКоманды.РежимЗаписи <> "НеЗаписывать"); Контекст.Вставить("ТребуетсяПроведение", ОписаниеКоманды.РежимЗаписи = "Проводить"); - Контекст.Вставить("ТребуетсяРаботаСФайлами", ОписаниеКоманды.ТребуетсяРаботаСФайлами И Не ПодключитьРасширениеРаботыСФайлами()); + Контекст.Вставить("ТребуетсяРаботаСФайлами", ОписаниеКоманды.ТребуетсяРаботаСФайлами); ПродолжитьВыполнениеКоманды(Контекст); КонецПроцедуры @@ -132,10 +132,7 @@ Результат = Новый Структура; Контекст.Форма.Подключаемый_ВыполнитьКомандуНаСервере(СерверныйКонтекст, Результат); Если ЗначениеЗаполнено(Результат.Текст) Тогда - ПараметрыПредупреждения = Новый Структура("Текст, Подробно"); - ПараметрыПредупреждения.Текст = Результат.Текст; - ПараметрыПредупреждения.Подробно = Результат.Подробно; - СтандартныеПодсистемыКлиент.ВывестиПредупреждение(Контекст.Форма, ПараметрыПредупреждения); + ПоказатьПредупреждение(, Результат.Текст); Иначе ОбновитьФорму(Контекст); КонецЕсли; @@ -194,7 +191,7 @@ КонецЦикла; Контекст.Вставить("НепроведенныеДокументы", НепроведенныеДокументы); - Контекст.МассивСсылок = ОбщегоНазначенияКлиентСервер.СократитьМассив(Контекст.МассивСсылок, НепроведенныеДокументы); + Контекст.МассивСсылок = ОбщегоНазначенияКлиентСервер.РазностьМассивов(Контекст.МассивСсылок, НепроведенныеДокументы); // Оповещаем открытые формы о том, что были проведены документы. ТипыПроведенныхДокументов = Новый Соответствие; @@ -244,7 +241,7 @@ // Ветка процедуры, возникающая после установки расширения работы с файлами. Процедура ПродолжитьВыполнениеКомандыПослеУстановкиРасширенияРаботыСФайлами(РасширениеРаботыСФайламиПодключено, Контекст) Экспорт - Если Не ПодключитьРасширениеРаботыСФайлами() Тогда + Если Не РасширениеРаботыСФайламиПодключено Тогда Возврат; КонецЕсли; ПродолжитьВыполнениеКоманды(Контекст); diff --git a/SSL/src/CommonModules/ПодключаемыеКомандыКлиентСервер/Module.bsl b/SSL/src/CommonModules/ПодключаемыеКомандыКлиентСервер/Module.bsl index def17252d..a750896c9 100644 --- a/SSL/src/CommonModules/ПодключаемыеКомандыКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ПодключаемыеКомандыКлиентСервер/Module.bsl @@ -42,21 +42,17 @@ ПроверятьОписаниеТипов = Ложь; Если ТипЗнч(Источник) = Тип("ТаблицаФормы") Тогда - #Если Клиент Тогда - ВыделенныеСтроки = Источник.ВыделенныеСтроки; - Для Каждого ВыделеннаяСтрока Из ВыделенныеСтроки Цикл - Если ТипЗнч(ВыделеннаяСтрока) = Тип("СтрокаГруппировкиДинамическогоСписка") Тогда - Продолжить; - КонецЕсли; - ТекущаяСтрока = Источник.ДанныеСтроки(ВыделеннаяСтрока); - Если ТекущаяСтрока <> Неопределено Тогда - ВыбранныеОбъекты.Добавить(ТекущаяСтрока); - КонецЕсли; - КонецЦикла; - ПроверятьОписаниеТипов = Истина; - #Иначе - Возврат; - #КонецЕсли + ВыделенныеСтроки = Источник.ВыделенныеСтроки; + Для Каждого ВыделеннаяСтрока Из ВыделенныеСтроки Цикл + Если ТипЗнч(ВыделеннаяСтрока) = Тип("СтрокаГруппировкиДинамическогоСписка") Тогда + Продолжить; + КонецЕсли; + ТекущаяСтрока = Источник.ДанныеСтроки(ВыделеннаяСтрока); + Если ТекущаяСтрока <> Неопределено Тогда + ВыбранныеОбъекты.Добавить(ТекущаяСтрока); + КонецЕсли; + КонецЦикла; + ПроверятьОписаниеТипов = Истина; Иначе ВыбранныеОбъекты.Добавить(Источник); КонецЕсли; diff --git a/SSL/src/CommonModules/ПодключаемыеКомандыПовтИсп/Module.bsl b/SSL/src/CommonModules/ПодключаемыеКомандыПовтИсп/Module.bsl index 4f842e880..a0576e556 100644 --- a/SSL/src/CommonModules/ПодключаемыеКомандыПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ПодключаемыеКомандыПовтИсп/Module.bsl @@ -1,7 +1,7 @@ #Область СлужебныеПроцедурыИФункции Функция КэшФормы(Знач ИмяФормы, Знач ИсточникиЧерезЗапятую, Знач ЭтоФормаОбъекта) Экспорт - Возврат ПодключаемыеКоманды.КэшФормы(ИмяФормы, ИсточникиЧерезЗапятую, ЭтоФормаОбъекта); + Возврат Новый ФиксированнаяСтруктура(ПодключаемыеКоманды.КэшФормы(ИмяФормы, ИсточникиЧерезЗапятую, ЭтоФормаОбъекта)); КонецФункции Функция Параметры() Экспорт @@ -14,7 +14,7 @@ ПодключаемыеКоманды.ОперативноеОбновлениеОбщихДанныхКонфигурации(); Параметры = СтандартныеПодсистемыСервер.ПараметрРаботыПрограммы("СтандартныеПодсистемы.ПодключаемыеКоманды"); Если Параметры = Неопределено Тогда - Возврат Новый Структура("ПодключенныеОбъекты", Новый Соответствие); + Возврат Новый ФиксированнаяСтруктура("ПодключенныеОбъекты", Новый Соответствие); КонецЕсли; КонецЕсли; @@ -24,7 +24,7 @@ ПодключаемыеКоманды.ПриЗаполненииВсехПараметровРаботыРасширений(); ПараметрыРасширений = СтандартныеПодсистемыСервер.ПараметрРаботыРасширения(ПодключаемыеКоманды.ПолноеИмяПодсистемы()); Если ПараметрыРасширений = Неопределено Тогда - Возврат Параметры; + Возврат Новый ФиксированнаяСтруктура(Параметры); КонецЕсли; КонецЕсли; ДополнитьСоответствиеСМассивами(Параметры.ПодключенныеОбъекты, ПараметрыРасширений.ПодключенныеОбъекты); @@ -33,7 +33,7 @@ УстановитьПривилегированныйРежим(Ложь); УстановитьОтключениеБезопасногоРежима(Ложь); - Возврат Параметры; + Возврат Новый ФиксированнаяСтруктура(Параметры); КонецФункции Процедура ДополнитьСоответствиеСМассивами(СоответствиеПриемник, СоответствиеИсточник) diff --git a/SSL/src/CommonModules/ПолнотекстовыйПоискКлиент/Module.bsl b/SSL/src/CommonModules/ПолнотекстовыйПоискКлиент/Module.bsl new file mode 100644 index 000000000..905569ec6 --- /dev/null +++ b/SSL/src/CommonModules/ПолнотекстовыйПоискКлиент/Module.bsl @@ -0,0 +1,11 @@ +#Область ПрограммныйИнтерфейс + +// Открывает форму управления полнотекстовым поиском и извлечения текстов. +// +Процедура ПоказатьУправлениеПолнотекстовымПоискомИИзвлечениемТекстов() Экспорт + + ОткрытьФорму("Обработка.ПолнотекстовыйПоискВДанных.Форма.УправлениеПолнотекстовымПоискомИИзвлечениемТекстов"); + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/ПолнотекстовыйПоискКлиент/ПолнотекстовыйПоискКлиент.mdo b/SSL/src/CommonModules/ПолнотекстовыйПоискКлиент/ПолнотекстовыйПоискКлиент.mdo new file mode 100644 index 000000000..efca691b8 --- /dev/null +++ b/SSL/src/CommonModules/ПолнотекстовыйПоискКлиент/ПолнотекстовыйПоискКлиент.mdo @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="3174d57f-c6a8-44dc-adc1-47e9a54c844d"> + <name>ПолнотекстовыйПоискКлиент</name> + <synonym> + <key>ru</key> + <value>Полнотекстовый поиск клиент</value> + </synonym> + <clientManagedApplication>true</clientManagedApplication> + <clientOrdinaryApplication>true</clientOrdinaryApplication> +</mdclass:CommonModule> diff --git a/SSL/src/CommonModules/ПолнотекстовыйПоискСервер/Module.bsl b/SSL/src/CommonModules/ПолнотекстовыйПоискСервер/Module.bsl index ab6932c87..87b8a2a96 100644 --- a/SSL/src/CommonModules/ПолнотекстовыйПоискСервер/Module.bsl +++ b/SSL/src/CommonModules/ПолнотекстовыйПоискСервер/Module.bsl @@ -36,18 +36,6 @@ #Область СлужебныйПрограммныйИнтерфейс -// Устанавливает значение константы ИспользоватьПолнотекстовыйПоиск. -// Используется для синхронизации значения -// функциональной опции "ИспользоватьПолнотекстовыйПоиск" -// с "ПолнотекстовыйПоиск.ПолучитьРежимПолнотекстовогоПоиска()". -// -Процедура ИнициализироватьФункциональнуюОпциюПолнотекстовыйПоиск() Экспорт - - ЗначениеКонстанты = ОперацииРазрешены(); - Константы.ИспользоватьПолнотекстовыйПоиск.Установить(ЗначениеКонстанты); - -КонецПроцедуры - // Возвращает разрешены ли операции полнотекстового поиска: обновление индексов, очистка индексов, поиск. Функция ОперацииРазрешены() Экспорт @@ -61,8 +49,7 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Обработчики событий подсистем конфигурации. +#Область ОбработчикиСобытийПодсистемКонфигурации // См. ТекущиеДелаПереопределяемый.ПриОпределенииОбработчиковТекущихДел. Процедура ПриЗаполненииСпискаТекущихДел(ТекущиеДела) Экспорт @@ -97,7 +84,7 @@ Дело.Идентификатор = ИдентификаторПолнотекстовыйПоиск; Дело.ЕстьДела = (ДнейСПоследнегоОбновления >= 1 И Не ПолнотекстовыйПоиск.ИндексАктуален()); Дело.Представление = НСтр("ru = 'Индекс полнотекстового поиска устарел'"); - Дело.Форма = "Обработка.ПанельАдминистрированияБСП.Форма.УправлениеПолнотекстовымПоискомИИзвлечениемТекстов"; + Дело.Форма = "Обработка.ПолнотекстовыйПоискВДанных.Форма.УправлениеПолнотекстовымПоискомИИзвлечениемТекстов"; Дело.Подсказка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Последнее обновление %1 назад'"), Интервал); Дело.Владелец = Раздел; @@ -131,20 +118,30 @@ #КонецОбласти +// Устанавливает значение константы ИспользоватьПолнотекстовыйПоиск. +// Используется для синхронизации значения +// функциональной опции "ИспользоватьПолнотекстовыйПоиск" +// с "ПолнотекстовыйПоиск.ПолучитьРежимПолнотекстовогоПоиска()". +// +Процедура ИнициализироватьФункциональнуюОпциюПолнотекстовыйПоиск() Экспорт + + ЗначениеКонстанты = ОперацииРазрешены(); + Константы.ИспользоватьПолнотекстовыйПоиск.Установить(ЗначениеКонстанты); + +КонецПроцедуры + +#КонецОбласти + #Область СлужебныеПроцедурыИФункции -// Обработчик регламентного задания. +#Область ОбработчикиРегламентныхЗаданий + +// Обработчик регламентного задания ОбновлениеИндексаППД. Процедура ОбновлениеИндексаППДПоРасписанию() Экспорт ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(Метаданные.РегламентныеЗадания.ОбновлениеИндексаППД); - РегламентноеЗадание = Метаданные.РегламентныеЗадания.СлияниеИндексаППД; - - Отбор = Новый Структура; - Отбор.Вставить("ИмяМетода", РегламентноеЗадание.ИмяМетода); - Отбор.Вставить("Состояние", СостояниеФоновогоЗадания.Активно); - ФоновыеЗаданияСлияниеИндексаППД = ФоновыеЗадания.ПолучитьФоновыеЗадания(Отбор); - Если ФоновыеЗаданияСлияниеИндексаППД.Количество() > 0 Тогда + Если ВыполняетсяФоновоеЗаданиеСлияниеИндекса() Тогда Возврат; КонецЕсли; @@ -152,18 +149,12 @@ КонецПроцедуры -// Обработчик регламентного задания. +// Обработчик регламентного задания СлияниеИндексаППД. Процедура СлияниеИндексаППДПоРасписанию() Экспорт ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(Метаданные.РегламентныеЗадания.СлияниеИндексаППД); - РегламентноеЗадание = Метаданные.РегламентныеЗадания.ОбновлениеИндексаППД; - - Отбор = Новый Структура; - Отбор.Вставить("ИмяМетода", РегламентноеЗадание.ИмяМетода); - Отбор.Вставить("Состояние", СостояниеФоновогоЗадания.Активно); - ФоновыеЗаданияОбновлениеИндексаППД = ФоновыеЗадания.ПолучитьФоновыеЗадания(Отбор); - Если ФоновыеЗаданияОбновлениеИндексаППД.Количество() > 0 Тогда + Если ВыполняетсяФоновоеЗаданиеОбновлениеИндекса() Тогда Возврат; КонецЕсли; @@ -171,6 +162,290 @@ КонецПроцедуры +#КонецОбласти + +#Область БизнесЛогикаПоиска + +#Область СостояниеПоиска + +Функция СостояниеПолнотекстовогоПоиска() Экспорт + + Если ПолучитьФункциональнуюОпцию("ИспользоватьПолнотекстовыйПоиск") Тогда + + Если ПолнотекстовыйПоиск.ПолучитьРежимПолнотекстовогоПоиска() = РежимПолнотекстовогоПоиска.Разрешить Тогда + + // Исключение из правила ТекущаяДатаСеанса(). + Если ТекущаяДата() < (ПолнотекстовыйПоиск.ДатаАктуальности() + 300) Тогда + Возврат "ПоискРазрешен"; + Иначе + Если ПолнотекстовыйПоиск.ИндексАктуален() Тогда + Возврат "ПоискРазрешен"; + ИначеЕсли ВыполняетсяФоновоеЗаданиеОбновлениеИндекса() Тогда + Возврат "ВыполняетсяОбновлениеИндекса"; + ИначеЕсли ВыполняетсяФоновоеЗаданиеСлияниеИндекса() Тогда + Возврат "ВыполняетсяСлияниеИндекса"; + Иначе + Возврат "ТребуетсяОбновлениеИндекса"; + КонецЕсли; + КонецЕсли; + + Иначе + // Рассинхронизация значения константы ИспользоватьПолнотекстовыйПоиск + // и установленного режима полнотекстового поиска в информационной базе. + Возврат "ОшибкаНастройкиПоиска"; + КонецЕсли; + + Иначе + Возврат "ПоискЗапрещен"; + КонецЕсли; + +КонецФункции + +Функция ВыполняетсяФоновоеЗаданиеОбновлениеИндекса() + + РегламентноеЗадание = Метаданные.РегламентныеЗадания.ОбновлениеИндексаППД; + + Отбор = Новый Структура; + Отбор.Вставить("ИмяМетода", РегламентноеЗадание.ИмяМетода); + Отбор.Вставить("Состояние", СостояниеФоновогоЗадания.Активно); + ТекущиеФоновыеЗадания = ФоновыеЗадания.ПолучитьФоновыеЗадания(Отбор); + + Возврат ТекущиеФоновыеЗадания.Количество() > 0; + +КонецФункции + +Функция ВыполняетсяФоновоеЗаданиеСлияниеИндекса() + + РегламентноеЗадание = Метаданные.РегламентныеЗадания.СлияниеИндексаППД; + + Отбор = Новый Структура; + Отбор.Вставить("ИмяМетода", РегламентноеЗадание.ИмяМетода); + Отбор.Вставить("Состояние", СостояниеФоновогоЗадания.Активно); + ТекущиеФоновыеЗадания = ФоновыеЗадания.ПолучитьФоновыеЗадания(Отбор); + + Возврат ТекущиеФоновыеЗадания.Количество() > 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'"), + МетаданныеОбъекта.ПредставлениеОбъекта, Строка(Значение)); + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбновлениеИндексаПоиска + // Общая процедура для обновления и слияния индекса ППД. Процедура ОбновитьИндекс(ПредставлениеПроцедуры, РазрешитьСлияние = Ложь, Порциями = Ложь) @@ -199,7 +474,8 @@ // ИнформацияОбОшибке - ИнформацияОбОшибке, Строка - Информация об ошибке, которая будет размещена после комментария. // Параметр - Строка - Для подстановки в КомментарийСПараметрами вместо %1. // -Процедура ЗаписьЖурнала(УровеньЖурнала, КомментарийСПараметрами, ИнформацияОбОшибке = Неопределено, Параметр = Неопределено) +Процедура ЗаписьЖурнала(УровеньЖурнала, КомментарийСПараметрами, ИнформацияОбОшибке = Неопределено, + Параметр = Неопределено) // Определение уровня журнала регистрации на основе типа переданного сообщения об ошибке. Если ТипЗнч(УровеньЖурнала) <> Тип("УровеньЖурналаРегистрации") Тогда @@ -233,3 +509,7 @@ КонецПроцедуры #КонецОбласти + +#КонецОбласти + +#КонецОбласти diff --git a/SSL/src/CommonModules/ПолучениеФайловИзИнтернета/Module.bsl b/SSL/src/CommonModules/ПолучениеФайловИзИнтернета/Module.bsl index 611160505..98ae71196 100644 --- a/SSL/src/CommonModules/ПолучениеФайловИзИнтернета/Module.bsl +++ b/SSL/src/CommonModules/ПолучениеФайловИзИнтернета/Module.bsl @@ -4,7 +4,7 @@ // // Параметры: // URL - Строка - url файла в формате [Протокол://]<Сервер>/<Путь к файлу на сервере>. -// ПараметрыПолучения - Структура - см. ОбщегоНазначенияКлиентСервер.ПараметрыПолученияФайла. +// ПараметрыПолучения - Структура - см. ПолучениеФайловИзИнтернетаКлиентСервер.ПараметрыПолученияФайла. // ЗаписыватьОшибку - Булево - Признак необходимости записи ошибки в журнал регистрации при получении файла. // // Возвращаемое значение: @@ -21,7 +21,7 @@ НастройкаСохранения = Новый Соответствие; НастройкаСохранения.Вставить("МестоХранения", "Сервер"); - Возврат ПолучениеФайловИзИнтернетаКлиентСервер.ПодготовитьПолучениеФайла(URL, + Возврат ПолучениеФайловИзИнтернетаКлиентСервер.СкачатьФайл(URL, ПараметрыПолучения, НастройкаСохранения, ЗаписыватьОшибку); КонецФункции @@ -33,7 +33,7 @@ // // Параметры: // URL - Строка - url файла в формате [Протокол://]<Сервер>/<Путь к файлу на сервере>. -// ПараметрыПолучения - Структура - см. ОбщегоНазначенияКлиентСервер.ПараметрыПолученияФайла. +// ПараметрыПолучения - Структура - см. ПолучениеФайловИзИнтернетаКлиентСервер.ПараметрыПолученияФайла. // ЗаписыватьОшибку - Булево - Признак необходимости записи ошибки в журнал регистрации при получении файла. // // Возвращаемое значение: @@ -51,7 +51,7 @@ НастройкаСохранения = Новый Соответствие; НастройкаСохранения.Вставить("МестоХранения", "ВременноеХранилище"); - Возврат ПолучениеФайловИзИнтернетаКлиентСервер.ПодготовитьПолучениеФайла(URL, + Возврат ПолучениеФайловИзИнтернетаКлиентСервер.СкачатьФайл(URL, ПараметрыПолучения, НастройкаСохранения, ЗаписыватьОшибку); КонецФункции @@ -95,8 +95,8 @@ УстановитьПривилегированныйРежим(Истина); НастройкиПроксиНаСервере = Константы.НастройкаПроксиСервера.Получить().Получить(); Возврат ?(ТипЗнч(НастройкиПроксиНаСервере) = Тип("Соответствие"), - НастройкиПроксиНаСервере, - Неопределено); + НастройкиПроксиНаСервере, + Неопределено); КонецЕсли; КонецФункции diff --git a/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаКлиент/Module.bsl b/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаКлиент/Module.bsl index d3d2aadfc..7be3b14d3 100644 --- a/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаКлиент/Module.bsl +++ b/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаКлиент/Module.bsl @@ -6,7 +6,7 @@ // // Параметры: // URL - Строка - url файла в формате [Протокол://]<Сервер>/<Путь к файлу на сервере>. -// ПараметрыПолучения - Структура - см. ОбщегоНазначенияКлиентСервер.ПараметрыПолученияФайла. +// ПараметрыПолучения - Структура - см. ПолучениеФайловИзИнтернетаКлиентСервер.ПараметрыПолученияФайла. // ЗаписыватьОшибку - Булево - Признак необходимости записи ошибки в журнал регистрации при получении файла. // // Возвращаемое значение: @@ -20,14 +20,14 @@ // Функция СкачатьФайлНаКлиенте(Знач URL, Знач ПараметрыПолучения = Неопределено, Знач ЗаписыватьОшибку = Истина) Экспорт - #Если ВебКлиент Тогда - ВызватьИсключение НСтр("ru = 'Скачивание файлов на клиент недоступно при работе в веб-клиенте.'"); - #КонецЕсли +#Если ВебКлиент Тогда + ВызватьИсключение НСтр("ru = 'Скачивание файлов на клиент недоступно при работе в веб-клиенте.'"); +#КонецЕсли НастройкаСохранения = Новый Соответствие; НастройкаСохранения.Вставить("МестоХранения", "Клиент"); - Возврат ПолучениеФайловИзИнтернетаКлиентСервер.ПодготовитьПолучениеФайла(URL, ПараметрыПолучения, НастройкаСохранения, ЗаписыватьОшибку); + Возврат ПолучениеФайловИзИнтернетаКлиентСервер.СкачатьФайл(URL, ПараметрыПолучения, НастройкаСохранения, ЗаписыватьОшибку); КонецФункции diff --git a/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаКлиентСервер/Module.bsl b/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаКлиентСервер/Module.bsl index 31b89d4b1..188c871dc 100644 --- a/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаКлиентСервер/Module.bsl @@ -11,17 +11,21 @@ // Функция ПолучитьПрокси(Знач URLИлиПротокол) Экспорт -#Если Клиент Тогда - НастройкаПроксиСервера = СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиента().НастройкиПроксиСервера; +#Если ВебКлиент Тогда + ВызватьИсключение НСтр("ru='Прокси не доступен в веб-клиенте.'"); #Иначе - НастройкаПроксиСервера = ПолучениеФайловИзИнтернета.НастройкиПроксиНаСервере(); -#КонецЕсли + + НастройкаПроксиСервера = НастройкаПроксиСервера(); + Если СтрНайти(URLИлиПротокол, "://") > 0 Тогда Протокол = РазделитьURL(URLИлиПротокол).Протокол; Иначе Протокол = НРег(URLИлиПротокол); КонецЕсли; - Возврат СформироватьИнтернетПрокси(НастройкаПроксиСервера, Протокол); + + Возврат НовыйИнтернетПрокси(НастройкаПроксиСервера, Протокол); + +#КонецЕсли КонецФункции @@ -104,10 +108,10 @@ ПараметрыПолучения.Вставить("Пользователь", Неопределено); ПараметрыПолучения.Вставить("Пароль", Неопределено); ПараметрыПолучения.Вставить("Порт", Неопределено); - ПараметрыПолучения.Вставить("Таймаут", 10); + ПараметрыПолучения.Вставить("Таймаут", АвтоматическоеОпределениеТаймаута()); ПараметрыПолучения.Вставить("ЗащищенноеСоединение", Неопределено); ПараметрыПолучения.Вставить("ПассивноеСоединение", Неопределено); - ПараметрыПолучения.Вставить("Заголовки", Новый Соответствие()); + ПараметрыПолучения.Вставить("Заголовки", Новый Соответствие); ПараметрыПолучения.Вставить("ИспользоватьАутентификациюОС", Ложь); ПараметрыПолучения.Вставить("УровеньИспользованияЗащищенногоСоединения", Неопределено); @@ -117,8 +121,79 @@ #КонецОбласти +#Область СлужебныйПрограммныйИнтерфейс + +// Служебная информация для отображения текущих настроек и состояний прокси для выполнения диагностики. +// +// Возвращаемое значение: +// Структура - со свойствами: +// * СоединениеЧерезПрокси - Булево - Признак того, что соединение должно выполняться через прокси. +// * Представление - Строка - Представление текущего настроенного прокси. +// +Функция СостояниеНастроекПрокси() Экспорт + +#Если ВебКлиент Тогда + + Результат = Новый Структура; + Результат.Вставить("СоединениеЧерезПрокси", Ложь); + Результат.Вставить("Представление", НСтр("ru = 'Прокси не доступен в веб-клиенте.'")); + Возврат Результат; + +#Иначе + + Прокси = ПолучитьПрокси("http"); + НастройкиПрокси = НастройкаПроксиСервера(); + + Журнал = Новый Массив; + + Если НастройкиПрокси = Неопределено Тогда + Журнал.Добавить(НСтр("ru = 'Параметры прокси-сервера в ИБ не указаны (используются системные настройки прокси).'")); + ИначеЕсли Не НастройкиПрокси.Получить("ИспользоватьПрокси") Тогда + Журнал.Добавить(НСтр("ru = 'Параметры прокси-сервера в ИБ: Не использовать прокси-сервер.'")); + ИначеЕсли НастройкиПрокси.Получить("ИспользоватьСистемныеНастройки") Тогда + Журнал.Добавить(НСтр("ru = 'Параметры прокси-сервера в ИБ: Использовать системные настройки прокси-сервера.'")); + Иначе + Журнал.Добавить(НСтр("ru = 'Параметры прокси-сервера в ИБ: Использовать другие настройки прокси-сервера.'")); + КонецЕсли; + + Если Прокси = Неопределено Тогда + Прокси = Новый ИнтернетПрокси(Истина); + КонецЕсли; + + УказанПроксиВсехАдресов = Не ПустаяСтрока(Прокси.Сервер()); + УказанПроксиHTTP = Не ПустаяСтрока(Прокси.Сервер("http")); + УказанПроксиHTTPS = Не ПустаяСтрока(Прокси.Сервер("https")); + + СоединениеЧерезПрокси = УказанПроксиВсехАдресов Или УказанПроксиHTTP Или УказанПроксиHTTPS; + + Если СоединениеЧерезПрокси Тогда + Журнал.Добавить(НСтр("ru = 'Соединение выполняется через прокси-сервер:'")); + Журнал.Добавить(ПредставлениеИнтернетПрокси(Прокси)); + Иначе + Журнал.Добавить(НСтр("ru = 'Соединение выполняется без использования прокси-сервера.'")); + КонецЕсли; + + Результат = Новый Структура; + Результат.Вставить("СоединениеЧерезПрокси", СоединениеЧерезПрокси); + Результат.Вставить("Представление", СтрСоединить(Журнал, Символы.ПС)); + Возврат Результат; + +#КонецЕсли + +КонецФункции + +#КонецОбласти + #Область СлужебныеПроцедурыИФункции +Функция АвтоматическоеОпределениеТаймаута() + + Возврат -1; + +КонецФункции + +#Если Не ВебКлиент Тогда + //////////////////////////////////////////////////////////////////////////////// // Экспортные служебные процедуры и функции. @@ -156,7 +231,7 @@ // либо адрес во временном хранилище // в случае неуспеха сообщение об ошибке. // -Функция ПодготовитьПолучениеФайла(Знач URL, Знач ПараметрыПолучения, Знач НастройкаСохранения, Знач ЗаписыватьОшибку = Истина) Экспорт +Функция СкачатьФайл(Знач URL, Знач ПараметрыПолучения, Знач НастройкаСохранения, Знач ЗаписыватьОшибку = Истина) Экспорт НастройкиПолучения = ПараметрыПолученияФайла(); Если ПараметрыПолучения <> Неопределено Тогда @@ -167,14 +242,12 @@ НастройкаСохранения.Вставить("Путь", НастройкиПолучения.ПутьДляСохранения); КонецЕсли; -#Если Клиент Тогда - НастройкаПроксиСервера = СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиента().НастройкиПроксиСервера; -#Иначе - НастройкаПроксиСервера = ПолучениеФайловИзИнтернета.НастройкиПроксиНаСервере(); -#КонецЕсли + НастройкаПроксиСервера = НастройкаПроксиСервера(); + + Перенаправления = Новый Массив; Возврат ПолучитьФайлИзИнтернет(URL, НастройкаСохранения, НастройкиПолучения, - НастройкаПроксиСервера, ЗаписыватьОшибку); + НастройкаПроксиСервера, ЗаписыватьОшибку, Перенаправления); КонецФункции @@ -220,144 +293,662 @@ // в случае неуспеха сообщение об ошибке. // Функция ПолучитьФайлИзИнтернет(Знач URL, Знач НастройкаСохранения, Знач НастройкаСоединения, - Знач НастройкиПрокси, Знач ЗаписыватьОшибку, КоличествоПеренаправлений = 0) + Знач НастройкиПрокси, Знач ЗаписыватьОшибку, Перенаправления = Неопределено) - URLРазделенный = РазделитьURL(URL); + СтруктураURI = ОбщегоНазначенияКлиентСервер.СтруктураURI(URL); - ИмяСервера = URLРазделенный.ИмяСервера; - ПутьКФайлуНаСервере = URLРазделенный.ПутьКФайлуНаСервере; - Протокол = URLРазделенный.Протокол; + Сервер = СтруктураURI.Хост; + ПутьНаСервере = СтруктураURI.ПутьНаСервере; + Протокол = СтруктураURI.Схема; + + Если ПустаяСтрока(Протокол) Тогда + Протокол = "http"; + КонецЕсли; ЗащищенноеСоединение = НастройкаСоединения.ЗащищенноеСоединение; - ПассивноеСоединение = НастройкаСоединения.ПассивноеСоединение; - ИмяПользователя = НастройкаСоединения.Пользователь; - ПарольПользователя = НастройкаСоединения.Пароль; - Порт = НастройкаСоединения.Порт; - Таймаут = НастройкаСоединения.Таймаут; - Заголовки = НастройкаСоединения.Заголовки; - ИспользоватьАутентификациюОС = НастройкаСоединения.ИспользоватьАутентификациюОС; - УровеньИспользованияЗащищенногоСоединения = НастройкаСоединения.УровеньИспользованияЗащищенногоСоединения; + ИмяПользователя = НастройкаСоединения.Пользователь; + ПарольПользователя = НастройкаСоединения.Пароль; + Порт = НастройкаСоединения.Порт; + Таймаут = НастройкаСоединения.Таймаут; Если (Протокол = "https" Или Протокол = "ftps") И ЗащищенноеСоединение = Неопределено Тогда ЗащищенноеСоединение = Истина; КонецЕсли; Если ЗащищенноеСоединение = Истина Тогда - ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL; + ЗащищенноеСоединение = НовыйЗащищенноеСоединение(); ИначеЕсли ЗащищенноеСоединение = Ложь Тогда ЗащищенноеСоединение = Неопределено; - // Иначе параметр ЗащищенноеСоединение был задан в явном виде. + // Иначе параметр ЗащищенноеСоединение был задан в явном виде. КонецЕсли; Если Порт = Неопределено Тогда - ПолнаяСтруктураURL = ОбщегоНазначенияКлиентСервер.СтруктураURI(URL); - Если НЕ ПустаяСтрока(ПолнаяСтруктураURL.Порт) Тогда - ИмяСервера = ПолнаяСтруктураURL.Хост; - Порт = ПолнаяСтруктураURL.Порт; - КонецЕсли; + Порт = СтруктураURI.Порт; КонецЕсли; - Прокси = ?(НастройкиПрокси <> Неопределено, СформироватьИнтернетПрокси(НастройкиПрокси, Протокол), Неопределено); - ИспользуетсяFTPПротокол = (Протокол = "ftp" Или Протокол = "ftps"); - - Если ИспользуетсяFTPПротокол Тогда - Попытка - Соединение = Новый FTPСоединение(ИмяСервера, Порт, ИмяПользователя, ПарольПользователя, - Прокси, ПассивноеСоединение, Таймаут, ЗащищенноеСоединение, УровеньИспользованияЗащищенногоСоединения); - Исключение - ИнформацияОбОшибке = ИнформацияОбОшибке(); - СообщениеОбОшибке = НСтр("ru = 'Не удалось установить FTP-соединение с сервером %1:'") + Символы.ПС + "%2"; - - ЗаписатьОшибкуВЖурналРегистрации(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СообщениеОбОшибке, ИмяСервера, - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке))); - СообщениеОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СообщениеОбОшибке, ИмяСервера, КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); - Возврат СформироватьРезультат(Ложь, СообщениеОбОшибке); - КонецПопытки; - - Иначе - - Попытка - Соединение = Новый HTTPСоединение(ИмяСервера, Порт, ИмяПользователя, ПарольПользователя, Прокси, Таймаут, ЗащищенноеСоединение, ИспользоватьАутентификациюОС); - Исключение - ИнформацияОбОшибке = ИнформацияОбОшибке(); - СообщениеОбОшибке = НСтр("ru = 'Не удалось установить HTTP-соединение с сервером %1: - |%2'"); - ЗаписатьОшибкуВЖурналРегистрации(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СообщениеОбОшибке, ИмяСервера, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке))); - СообщениеОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СообщениеОбОшибке, ИмяСервера, КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); - Возврат СформироватьРезультат(Ложь, СообщениеОбОшибке); - КонецПопытки; + Если НастройкиПрокси = Неопределено Тогда + Прокси = Неопределено; + Иначе + Прокси = НовыйИнтернетПрокси(НастройкиПрокси, Протокол); КонецЕсли; Если НастройкаСохранения["Путь"] <> Неопределено Тогда ПутьДляСохранения = НастройкаСохранения["Путь"]; Иначе - #Если НЕ ВебКлиент Тогда - // Временный файл должен удаляться вызывающим кодом. - ПутьДляСохранения = ПолучитьИмяВременногоФайла(); - #КонецЕсли + // Временный файл должен удаляться вызывающим кодом. + ПутьДляСохранения = ПолучитьИмяВременногоФайла(); КонецЕсли; - HTTPОтвет = Неопределено; + Если Таймаут = Неопределено Тогда + Таймаут = АвтоматическоеОпределениеТаймаута(); + КонецЕсли; - Попытка + ИспользуетсяFTPПротокол = (Протокол = "ftp" Или Протокол = "ftps"); + + Если ИспользуетсяFTPПротокол Тогда - Если ИспользуетсяFTPПротокол Тогда - Соединение.Получить(ПутьКФайлуНаСервере, ПутьДляСохранения); - Иначе + ПассивноеСоединение = НастройкаСоединения.ПассивноеСоединение; + УровеньИспользованияЗащищенногоСоединения = НастройкаСоединения.УровеньИспользованияЗащищенногоСоединения; + + Попытка - HTTPЗапрос = Новый HTTPЗапрос(ПутьКФайлуНаСервере, Заголовки); - HTTPЗапрос.Заголовки.Вставить("Accept-Charset", "utf-8"); - HTTPОтвет = Соединение.Получить(HTTPЗапрос, ПутьДляСохранения); + Соединение = Новый FTPСоединение( + Сервер, + Порт, + ИмяПользователя, + ПарольПользователя, + Прокси, + ПассивноеСоединение, + 10, + ЗащищенноеСоединение, + УровеньИспользованияЗащищенногоСоединения); - Если HTTPОтвет.КодСостояния = 301 Или HTTPОтвет.КодСостояния = 302 Тогда - Если КоличествоПеренаправлений > 20 Тогда - ВызватьИсключение НСтр("ru = 'Обнаружена циклическая переадресация.'"); - КонецЕсли; - НовыйURL = HTTPОтвет.Заголовки["Location"]; - Если Не СтрНачинаетсяС(НовыйURL, "http") Тогда - НовыйURL = ИмяСервера + НовыйURL; + Сервер = Соединение.Сервер; + Порт = Соединение.Порт; + + РазмерФайла = РазмерФайлаFTP(Соединение, ПутьНаСервере); + + Исключение + + РезультатДиагностики = ОбщегоНазначенияКлиентСервер.ДиагностикаСоединения(URL); + + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось установить FTP-соединение с сервером %1:%2 + |по причине: + |%3 + | + |Результат диагностики: + |%4'"), + Сервер, Формат(Порт, "ЧГ="), + КраткоеПредставлениеОшибки(ИнформацияОбОшибке()), + РезультатДиагностики.ОписаниеОшибки); + + Если ЗаписыватьОшибку Тогда + ЗаписатьОшибкуВЖурналРегистрации(ТекстОшибки); + КонецЕсли; + + Возврат РезультатПолученияФайла(Ложь, ТекстОшибки); + + КонецПопытки; + + Если Таймаут = АвтоматическоеОпределениеТаймаута() Тогда + Таймаут = ТаймаутПоРазмеруФайла(РазмерФайла); + КонецЕсли; + + Попытка + + Соединение = Новый FTPСоединение( + Сервер, + Порт, + ИмяПользователя, + ПарольПользователя, + Прокси, + ПассивноеСоединение, + Таймаут, + ЗащищенноеСоединение, + УровеньИспользованияЗащищенногоСоединения); + + Соединение.Получить(ПутьНаСервере, ПутьДляСохранения); + + Исключение + + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось получить файл %1 с сервера %2:%3 + |по причине: + |%4'"), + URL, Сервер, Формат(Порт, "ЧГ="), + КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); + + Если ЗаписыватьОшибку Тогда + СообщениеОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '%1 + | + |Трассировка: + |ЗащищенноеСоединение: %2 + |Таймаут: %3'"), + ТекстОшибки, + Формат(Соединение.Защищенное, "БЛ=Нет; БИ=Да"), + Формат(Соединение.Таймаут, "ЧГ=0")); + + ЗаписатьОшибкуВЖурналРегистрации(СообщениеОбОшибке); + КонецЕсли; + + Возврат РезультатПолученияФайла(Ложь, ТекстОшибки); + + КонецПопытки; + + Иначе // Используется HTTP протокол. + + Заголовки = НастройкаСоединения.Заголовки; + ИспользоватьАутентификациюОС = НастройкаСоединения.ИспользоватьАутентификациюОС; + + Попытка + + Соединение = Новый HTTPСоединение( + Сервер, + Порт, + ИмяПользователя, + ПарольПользователя, + Прокси, + 10, + ЗащищенноеСоединение, + ИспользоватьАутентификациюОС); + + Сервер = Соединение.Сервер; + Порт = Соединение.Порт; + + РазмерФайла = РазмерФайлаHTTP(Соединение, ПутьНаСервере, Заголовки); + + Исключение + + РезультатДиагностики = ОбщегоНазначенияКлиентСервер.ДиагностикаСоединения(URL); + + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось установить HTTP-соединение с сервером %1:%2 + |по причине: + |%3 + | + |Результат диагностики: + |%4'"), + Сервер, Формат(Порт, "ЧГ="), + КраткоеПредставлениеОшибки(ИнформацияОбОшибке()), + РезультатДиагностики.ОписаниеОшибки); + + ДописатьПредставлениеПеренаправлений(Перенаправления, ТекстОшибки); + + Если ЗаписыватьОшибку Тогда + ЗаписатьОшибкуВЖурналРегистрации(ТекстОшибки); + КонецЕсли; + + Возврат РезультатПолученияФайла(Ложь, ТекстОшибки); + + КонецПопытки; + + Если Таймаут = АвтоматическоеОпределениеТаймаута() Тогда + Таймаут = ТаймаутПоРазмеруФайла(РазмерФайла); + КонецЕсли; + + Попытка + + Соединение = Новый HTTPСоединение( + Сервер, + Порт, + ИмяПользователя, + ПарольПользователя, + Прокси, + Таймаут, + ЗащищенноеСоединение, + ИспользоватьАутентификациюОС); + + ЗапросHTTP = Новый HTTPЗапрос(ПутьНаСервере, Заголовки); + ЗапросHTTP.Заголовки.Вставить("Accept-Charset", "UTF-8"); + ЗапросHTTP.Заголовки.Вставить("X-1C-Request-UID", Строка(Новый УникальныйИдентификатор)); + ОтветHTTP = Соединение.Получить(ЗапросHTTP, ПутьДляСохранения); + + Если ОтветHTTP.КодСостояния = 301 // 301 Moved Permanently + Или ОтветHTTP.КодСостояния = 302 // 302 Found, 302 Moved Temporarily + Или ОтветHTTP.КодСостояния = 303 // 303 See Other by GET + Или ОтветHTTP.КодСостояния = 307 // 307 Temporary Redirect + Или ОтветHTTP.КодСостояния = 308 Тогда // 308 Permanent Redirect + + Если Перенаправления.Количество() > 7 Тогда + ВызватьИсключение + НСтр("ru = 'Превышено количество перенаправлений.'"); + Иначе + + НовыйURL = ОтветHTTP.Заголовки["Location"]; + + Если НовыйURL = Неопределено Тогда + ВызватьИсключение + НСтр("ru = 'Некорректное перенаправление, отсутствует HTTP-заголовок ответа ""Location"".'"); + КонецЕсли; + + НовыйURL = СокрЛП(НовыйURL); + + Если ПустаяСтрока(НовыйURL) Тогда + ВызватьИсключение + НСтр("ru = 'Некорректное перенаправление, пустой HTTP-заголовок ответа ""Location"".'"); + КонецЕсли; + + Если Перенаправления.Найти(НовыйURL) <> Неопределено Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Циклическое перенаправление. + |Попытка перейти на %1 уже выполнялась ранее.'"), + НовыйURL); + КонецЕсли; + + Перенаправления.Добавить(URL); + + Если Не СтрНачинаетсяС(НовыйURL, "http") Тогда + // <схема>://<хост>:<порт>/<путь> + НовыйURL = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + "%1://%2:%3/%4", Протокол, Сервер, Формат(Порт, "ЧГ="), НовыйURL); + КонецЕсли; + + Возврат ПолучитьФайлИзИнтернет(НовыйURL, НастройкаСохранения, НастройкаСоединения, + НастройкиПрокси, ЗаписыватьОшибку, Перенаправления); + КонецЕсли; - Возврат ПолучитьФайлИзИнтернет(НовыйURL, НастройкаСохранения, НастройкаСоединения, - НастройкиПрокси, ЗаписыватьОшибку, КоличествоПеренаправлений + 1); КонецЕсли; - Если HTTPОтвет.КодСостояния < 200 Или HTTPОтвет.КодСостояния >= 300 Тогда - ФайлОтвета = Новый ЧтениеТекста(ПутьДляСохранения, КодировкаТекста.UTF8); - Если HTTPОтвет.КодСостояния = 304 - И (HTTPЗапрос.Заголовки["If-Modified-Since"] <> Неопределено - Или HTTPЗапрос.Заголовки["If-None-Match"] <> Неопределено) Тогда + Если ОтветHTTP.КодСостояния < 200 Или ОтветHTTP.КодСостояния >= 300 Тогда + + Если ОтветHTTP.КодСостояния = 304 Тогда + + Если (ЗапросHTTP.Заголовки["If-Modified-Since"] <> Неопределено + Или ЗапросHTTP.Заголовки["If-None-Match"] <> Неопределено) Тогда ЗаписыватьОшибку = Ложь; + КонецЕсли; + + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Сервер убежден, что с вашего последнего запроса его ответ не изменился: + |%1'"), + РасшифровкаКодаСостоянияHTTP(ОтветHTTP.КодСостояния)); + + ДописатьТелоОтветаСервера(ПутьДляСохранения, ТекстОшибки); + + ВызватьИсключение ТекстОшибки; + + ИначеЕсли ОтветHTTP.КодСостояния < 200 + Или ОтветHTTP.КодСостояния >= 300 И ОтветHTTP.КодСостояния < 400 Тогда + + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Неподдерживаемый ответ сервера: + |%1'"), + РасшифровкаКодаСостоянияHTTP(ОтветHTTP.КодСостояния)); + + ДописатьТелоОтветаСервера(ПутьДляСохранения, ТекстОшибки); + + ВызватьИсключение ТекстОшибки; + + ИначеЕсли ОтветHTTP.КодСостояния >= 400 И ОтветHTTP.КодСостояния < 500 Тогда + + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка при выполнении запроса: + |%1'"), + РасшифровкаКодаСостоянияHTTP(ОтветHTTP.КодСостояния)); + + ДописатьТелоОтветаСервера(ПутьДляСохранения, ТекстОшибки); + + ВызватьИсключение ТекстОшибки; + + Иначе + + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка сервера при обработке запроса к ресурсу: + |%1'"), + РасшифровкаКодаСостоянияHTTP(ОтветHTTP.КодСостояния)); + + ДописатьТелоОтветаСервера(ПутьДляСохранения, ТекстОшибки); + + ВызватьИсключение ТекстОшибки; + КонецЕсли; - ВызватьИсключение СтроковыеФункцииКлиентСервер.ИзвлечьТекстИзHTML(ФайлОтвета.Прочитать(5 * 1024)); + КонецЕсли; - КонецЕсли; + Исключение + + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось получить файл %1 с сервера %2:%3 + |по причине: + |%4'"), + URL, Сервер, Формат(Порт, "ЧГ="), + КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); + + ДописатьПредставлениеПеренаправлений(Перенаправления, ТекстОшибки); + + Если ЗаписыватьОшибку Тогда + СообщениеОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '%1 + | + |Трассировка: + |ЗащищенноеСоединение: %2 + |Таймаут: %3 + |ИспользоватьАутентификациюОС: %4'"), + ТекстОшибки, + Формат(Соединение.Защищенное, "БЛ=Нет; БИ=Да"), + Формат(Соединение.Таймаут, "ЧГ=0"), + Формат(Соединение.ИспользоватьАутентификациюОС, "БЛ=Нет; БИ=Да")); + + ДописатьЗаголовкиHTTP(ЗапросHTTP, СообщениеОбОшибке); + ДописатьЗаголовкиHTTP(ОтветHTTP, СообщениеОбОшибке); + + ЗаписатьОшибкуВЖурналРегистрации(СообщениеОбОшибке); + КонецЕсли; + + Возврат РезультатПолученияФайла(Ложь, ТекстОшибки, ОтветHTTP); + + КонецПопытки; - Исключение - ИнформацияОбОшибке = ИнформацияОбОшибке(); - СообщениеОбОшибке = НСтр("ru = 'Не удалось получить файл %1 с сервера:'") + Символы.ПС + "%2"; - Если ЗаписыватьОшибку Тогда - ЗаписатьОшибкуВЖурналРегистрации( - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СообщениеОбОшибке, URL, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке))); - КонецЕсли; - Возврат СформироватьРезультат(Ложь, КраткоеПредставлениеОшибки(ИнформацияОбОшибке), HTTPОтвет); - КонецПопытки; + КонецЕсли; // Если сохраняем файл в соответствии с настройкой. Если НастройкаСохранения["МестоХранения"] = "ВременноеХранилище" Тогда КлючУникальности = Новый УникальныйИдентификатор; Адрес = ПоместитьВоВременноеХранилище (Новый ДвоичныеДанные(ПутьДляСохранения), КлючУникальности); - Возврат СформироватьРезультат(Истина, Адрес, HTTPОтвет); + Возврат РезультатПолученияФайла(Истина, Адрес, ОтветHTTP); ИначеЕсли НастройкаСохранения["МестоХранения"] = "Клиент" - ИЛИ НастройкаСохранения["МестоХранения"] = "Сервер" Тогда - Возврат СформироватьРезультат(Истина, ПутьДляСохранения, HTTPОтвет); + Или НастройкаСохранения["МестоХранения"] = "Сервер" Тогда + Возврат РезультатПолученияФайла(Истина, ПутьДляСохранения, ОтветHTTP); Иначе ВызватьИсключение НСтр("ru = 'Не указано место для сохранения файла.'"); КонецЕсли; КонецФункции +// Функция, заполняющая структуру по параметрам. +// +// Параметры: +// УспехОперации - булево - успех или неуспех операции. +// СообщениеПуть - строка - +// +// Возвращаемое значение - структура: +// поле успех - булево +// поле путь - строка. +// +Функция РезультатПолученияФайла(Знач Статус, Знач СообщениеПуть, HTTPОтвет = Неопределено) + + Результат = Новый Структура("Статус", Статус); + + Если Статус Тогда + Результат.Вставить("Путь", СообщениеПуть); + Иначе + Результат.Вставить("СообщениеОбОшибке", СообщениеПуть); + Результат.Вставить("КодСостояния", 1); + КонецЕсли; + + Если HTTPОтвет <> Неопределено Тогда + ЗаголовкиОтвета = HTTPОтвет.Заголовки; + Если ЗаголовкиОтвета <> Неопределено Тогда + Результат.Вставить("Заголовки", ЗаголовкиОтвета); + КонецЕсли; + + Результат.Вставить("КодСостояния", HTTPОтвет.КодСостояния); + + КонецЕсли; + + Возврат Результат; + +КонецФункции + +Функция РазмерФайлаHTTP(СоединениеHTTP, Знач ПутьНаСервере, Знач Заголовки = Неопределено) + + ЗапросHTTP = Новый HTTPЗапрос(ПутьНаСервере, Заголовки); + ПолученныеЗаголовки = СоединениеHTTP.ПолучитьЗаголовки(ЗапросHTTP);// HEAD + РазмерСтрокой = ПолученныеЗаголовки.Заголовки["Content-Length"]; + + ТипЧисло = Новый ОписаниеТипов("Число"); + РазмерФайла = ТипЧисло.ПривестиЗначение(РазмерСтрокой); + + Возврат РазмерФайла; + +КонецФункции + +Функция РазмерФайлаFTP(СоединениеFTP, Знач ПутьНаСервере) + + РазмерФайла = 0; + + НайденныеФайлы = СоединениеFTP.НайтиФайлы(ПутьНаСервере); + Если НайденныеФайлы.Количество() > 0 Тогда + РазмерФайла = НайденныеФайлы[0].Размер(); + КонецЕсли; + + Возврат РазмерФайла; + +КонецФункции + +Функция ТаймаутПоРазмеруФайла(Размер) + + БайтВМегабайте = 1048576; + + Если Размер > БайтВМегабайте Тогда + КоличествоСекунд = Окр(Размер / БайтВМегабайте * 128); + Возврат ?(КоличествоСекунд > 43200, 43200, КоличествоСекунд); + КонецЕсли; + + Возврат 128; + +КонецФункции + +Функция РасшифровкаКодаСостоянияHTTP(КодСостояния) + + Если КодСостояния = 304 Тогда // Not Modified + Расшифровка = НСтр("ru = 'Нет необходимости повторно передавать запрошенные ресурсы.'"); + ИначеЕсли КодСостояния = 400 Тогда // Bad Request + Расшифровка = НСтр("ru = 'Запрос не может быть исполнен.'"); + ИначеЕсли КодСостояния = 401 Тогда // Unauthorized + Расшифровка = НСтр("ru = 'Попытка авторизации на сервере была отклонена.'"); + ИначеЕсли КодСостояния = 402 Тогда // Payment Required + Расшифровка = НСтр("ru = 'Требуется оплата.'"); + ИначеЕсли КодСостояния = 403 Тогда // Forbidden + Расшифровка = НСтр("ru = 'К запрашиваемому ресурсу нет доступа.'"); + ИначеЕсли КодСостояния = 404 Тогда // Not Found + Расшифровка = НСтр("ru = 'Запрашиваемый ресурс не найден на сервере.'"); + ИначеЕсли КодСостояния = 405 Тогда // Method Not Allowed + Расшифровка = НСтр("ru = 'Метод запроса не поддерживается сервером.'"); + ИначеЕсли КодСостояния = 406 Тогда // Not Acceptable + Расшифровка = НСтр("ru = 'Запрошенный формат данных не поддерживается сервером.'"); + ИначеЕсли КодСостояния = 407 Тогда // Proxy Authentication Required + Расшифровка = НСтр("ru = 'Ошибка аутентификации на прокси-сервере'"); + ИначеЕсли КодСостояния = 408 Тогда // Request Timeout + Расшифровка = НСтр("ru = 'Время ожидания сервером передачи от клиента истекло.'"); + ИначеЕсли КодСостояния = 409 Тогда // Conflict + Расшифровка = НСтр("ru = 'Запрос не может быть выполнен из-за конфликтного обращения к ресурсу.'"); + ИначеЕсли КодСостояния = 410 Тогда // Gone + Расшифровка = НСтр("ru = 'Ресурс на сервере был перемешен.'"); + ИначеЕсли КодСостояния = 411 Тогда // Length Required + Расшифровка = НСтр("ru = 'Сервер требует указание ""Content-length."" в заголовке запроса.'"); + ИначеЕсли КодСостояния = 412 Тогда // Precondition Failed + Расшифровка = НСтр("ru = 'Запрос не применим к ресурсу'"); + ИначеЕсли КодСостояния = 413 Тогда // Request Entity Too Large + Расшифровка = НСтр("ru = 'Сервер отказывается обработать, слишком большой объем передаваемых данных.'"); + ИначеЕсли КодСостояния = 414 Тогда // Request-URL Too Long + Расшифровка = НСтр("ru = 'Сервер отказывается обработать, слишком длинный URL.'"); + ИначеЕсли КодСостояния = 415 Тогда // Unsupported Media-Type + Расшифровка = НСтр("ru = 'Сервер заметил, что часть запроса была сделана в неподдерживаемом формат'"); + ИначеЕсли КодСостояния = 416 Тогда // Requested Range Not Satisfiable + Расшифровка = НСтр("ru = 'Часть запрашиваемого ресурса не может быть предоставлена'"); + ИначеЕсли КодСостояния = 417 Тогда // Expectation Failed + Расшифровка = НСтр("ru = 'Сервер не может предоставить ответ на указанный запрос.'"); + ИначеЕсли КодСостояния = 429 Тогда // Too Many Requests + Расшифровка = НСтр("ru = 'Слишком много запросов за короткое время.'"); + ИначеЕсли КодСостояния = 500 Тогда // Internal Server Error + Расшифровка = НСтр("ru = 'Внутренняя ошибка сервера.'"); + ИначеЕсли КодСостояния = 501 Тогда // Not Implemented + Расшифровка = НСтр("ru = 'Сервер не поддерживает метод запроса.'"); + ИначеЕсли КодСостояния = 502 Тогда // Bad Gateway + Расшифровка = НСтр("ru = 'Сервер, выступая в роли шлюза или прокси-сервера, + |получил недействительное ответное сообщение от вышестоящего сервера.'"); + ИначеЕсли КодСостояния = 503 Тогда // Server Unavailable + Расшифровка = НСтр("ru = 'Сервер временно не доступен.'"); + ИначеЕсли КодСостояния = 504 Тогда // Gateway Timeout + Расшифровка = НСтр("ru = 'Сервер в роли шлюза или прокси-сервера + |не дождался ответа от вышестоящего сервера для завершения текущего запроса.'"); + ИначеЕсли КодСостояния = 505 Тогда // HTTP Version Not Supported + Расшифровка = НСтр("ru = 'Сервер не поддерживает указанную в запросе версию протокола HTTP'"); + ИначеЕсли КодСостояния = 506 Тогда // Variant Also Negotiates + Расшифровка = НСтр("ru = 'Сервер настроен некорректно, и не способен обработать запрос.'"); + ИначеЕсли КодСостояния = 507 Тогда // Insufficient Storage + Расшифровка = НСтр("ru = 'На сервере недостаточно места для выполнения запроса.'"); + ИначеЕсли КодСостояния = 509 Тогда // Bandwidth Limit Exceeded + Расшифровка = НСтр("ru = 'Сервер превысил отведенное ограничение на потребление траффика.'"); + ИначеЕсли КодСостояния = 510 Тогда // Not Extended + Расшифровка = НСтр("ru = 'Сервер требует больше информации о совершаемом запросе.'"); + ИначеЕсли КодСостояния = 511 Тогда // Network Authentication Required + Расшифровка = НСтр("ru = 'Требуется авторизация на сервере.'"); + Иначе + Расшифровка = НСтр("ru = '<Неизвестный код состояния>.'"); + КонецЕсли; + + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '[%1] %2'"), + КодСостояния, + Расшифровка); + +КонецФункции + +Процедура ДописатьПредставлениеПеренаправлений(Перенаправления, ТекстОшибки) + + Если Перенаправления.Количество() > 0 Тогда + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '%1 + | + |Выполненные перенаправления (%2): + |%3'"), + ТекстОшибки, + Перенаправления.Количество(), + СтрСоединить(Перенаправления, Символы.ПС)); + КонецЕсли; + +КонецПроцедуры + +Процедура ДописатьТелоОтветаСервера(ПутьКФайлу, ТекстОшибки) + + ТелоОтветаСервера = ТекстИзHTMLИзФайла(ПутьКФайлу); + + Если Не ПустаяСтрока(ТелоОтветаСервера) Тогда + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '%1 + | + |Сообщение, полученное от сервера: + |%2'"), + ТекстОшибки, + ТелоОтветаСервера); + КонецЕсли; + +КонецПроцедуры + +Функция ТекстИзHTMLИзФайла(ПутьКФайлу) + + ФайлОтвета = Новый ЧтениеТекста(ПутьКФайлу, КодировкаТекста.UTF8); + ИсходныйТекст = ФайлОтвета.Прочитать(1024 * 15); + ТекстОшибки = СтроковыеФункцииКлиентСервер.ИзвлечьТекстИзHTML(ИсходныйТекст); + ФайлОтвета.Закрыть(); + + Возврат ТекстОшибки; + +КонецФункции + +Процедура ДописатьЗаголовкиHTTP(Объект, ТекстОшибки) + + Если ТипЗнч(Объект) = Тип("HTTPЗапрос") Тогда + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '%1 + | + |HTTP запрос: + |Адрес ресурса: %2 + |Заголовки: %3'"), + ТекстОшибки, + Объект.АдресРесурса, + ПредставлениеЗаголовковHTTP(Объект.Заголовки)); + ИначеЕсли ТипЗнч(Объект) = Тип("HTTPОтвет") Тогда + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '%1 + | + |HTTP ответ: + |Код ответа: %2 + |Заголовки: %3'"), + ТекстОшибки, + Объект.КодСостояния, + ПредставлениеЗаголовковHTTP(Объект.Заголовки)); + КонецЕсли; + +КонецПроцедуры + +Функция ПредставлениеЗаголовковHTTP(Заголовки) + + ПредставлениеЗаголовков = ""; + + Для каждого Заголовок Из Заголовки Цикл + ПредставлениеЗаголовков = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '%1 + |%2: %3'"), + ПредставлениеЗаголовков, + Заголовок.Ключ, Заголовок.Значение); + КонецЦикла; + + Возврат ПредставлениеЗаголовков; + +КонецФункции + +Функция НастройкаПроксиСервера() + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + НастройкаПроксиСервера = ПолучениеФайловИзИнтернета.НастройкиПроксиНаСервере(); +#Иначе + НастройкаПроксиСервера = СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиента().НастройкиПроксиСервера; +#КонецЕсли + + Возврат НастройкаПроксиСервера; + +КонецФункции + +Функция ПредставлениеИнтернетПрокси(Прокси) + + Журнал = Новый Массив; + Журнал.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Адрес: %1:%2 + |HTTP: %3:%4 + |Secure: %5:%6 + |FTP: %7:%8'"), + Прокси.Сервер(), Формат(Прокси.Порт(), "ЧГ="), + Прокси.Сервер("http"), Формат(Прокси.Порт("http"), "ЧГ="), + Прокси.Сервер("https"), Формат(Прокси.Порт("https"), "ЧГ="), + Прокси.Сервер("ftp"), Формат(Прокси.Порт("ftp"), "ЧГ="))); + + Если Прокси.ИспользоватьАутентификациюОС("") Тогда + Журнал.Добавить(НСтр("ru = 'Используется аутентификация операционной системы'")); + Иначе + Пользователь = Прокси.Пользователь(""); + Пароль = Прокси.Пароль(""); + СостояниеПароля = ?(ПустаяСтрока(Пароль), НСтр("ru = '<не указан>'"), НСтр("ru = '********'")); + + Журнал.Добавить(НСтр("ru = 'Используется аутентификация по имени пользователя и паролю'")); + Журнал.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Пользователь: %1 + |Пароль: %2'"), + Пользователь, + СостояниеПароля)); + КонецЕсли; + + Если Прокси.НеИспользоватьПроксиДляЛокальныхАдресов Тогда + Журнал.Добавить(НСтр("ru = 'Не использовать прокси для локальных адресов'")); + КонецЕсли; + + Если Прокси.НеИспользоватьПроксиДляАдресов.Количество() > 0 Тогда + Журнал.Добавить(НСтр("ru = 'Не использовать для следующих адресов:'")); + Для Каждого ИсключаемыйАдрес Из Прокси.НеИспользоватьПроксиДляАдресов Цикл + Журнал.Добавить(ИсключаемыйАдрес); + КонецЦикла; + КонецЕсли; + + Возврат СтрСоединить(Журнал, Символы.ПС); + +КонецФункции + + // Возвращает прокси по настройкам НастройкаПроксиСервера для заданного протокола Протокол. // // Параметры: @@ -376,12 +967,12 @@ // Возвращаемое значение: // ИнтернетПрокси // -Функция СформироватьИнтернетПрокси(НастройкаПроксиСервера, Протокол) +Функция НовыйИнтернетПрокси(НастройкаПроксиСервера, Протокол) Если НастройкаПроксиСервера = Неопределено Тогда // Системные установки прокси-сервера. Возврат Неопределено; - КонецЕсли; + КонецЕсли; ИспользоватьПрокси = НастройкаПроксиСервера.Получить("ИспользоватьПрокси"); Если Не ИспользоватьПрокси Тогда @@ -394,7 +985,7 @@ // Системные настройки прокси-сервера. Возврат Новый ИнтернетПрокси(Истина); КонецЕсли; - + // Настройки прокси-сервера, заданные вручную. Прокси = Новый ИнтернетПрокси; @@ -424,43 +1015,15 @@ Прокси.НеИспользоватьПроксиДляАдресов.Добавить(АдресИсключения); КонецЦикла; КонецЕсли; - + Возврат Прокси; КонецФункции -// Функция, заполняющая структуру по параметрам. -// -// Параметры: -// УспехОперации - булево - успех или неуспех операции. -// СообщениеПуть - строка - -// -// Возвращаемое значение - структура: -// поле успех - булево -// поле путь - строка. -// -Функция СформироватьРезультат(Знач Статус, Знач СообщениеПуть, HTTPОтвет = Неопределено) +Функция НовыйЗащищенноеСоединение() - Результат = Новый Структура("Статус", Статус); - - Если Статус Тогда - Результат.Вставить("Путь", СообщениеПуть); - Иначе - Результат.Вставить("СообщениеОбОшибке", СообщениеПуть); - Результат.Вставить("КодСостояния", 1); - КонецЕсли; - - Если HTTPОтвет <> Неопределено Тогда - ЗаголовкиОтвета = HTTPОтвет.Заголовки; - Если ЗаголовкиОтвета <> Неопределено Тогда - Результат.Вставить("Заголовки", ЗаголовкиОтвета); - КонецЕсли; - - Результат.Вставить("КодСостояния", HTTPОтвет.КодСостояния); - - КонецЕсли; - - Возврат Результат; + Сертификаты = Новый СертификатыУдостоверяющихЦентровОС; + Возврат Новый ЗащищенноеСоединениеOpenSSL(, Сертификаты); КонецФункции @@ -489,4 +1052,6 @@ КонецФункции +#КонецЕсли + #КонецОбласти diff --git a/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаСлужебный/Module.bsl b/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаСлужебный/Module.bsl index 6adbe1ba1..fe8a66796 100644 --- a/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаСлужебный/Module.bsl @@ -12,7 +12,7 @@ КонецПроцедуры -// См. ОбщегоНазначенияПереопределяемый.ПараметрыРаботыКлиента. +// См. ОбщегоНазначенияПереопределяемый.ПриДобавленииПараметровРаботыКлиента. Процедура ПриДобавленииПараметровРаботыКлиента(Параметры) Экспорт Параметры.Вставить("НастройкиПроксиСервера", ПолучениеФайловИзИнтернета.НастройкиПроксиНаКлиенте()); diff --git a/SSL/src/CommonModules/Пользователи/Module.bsl b/SSL/src/CommonModules/Пользователи/Module.bsl index 4b4076677..b46207207 100644 --- a/SSL/src/CommonModules/Пользователи/Module.bsl +++ b/SSL/src/CommonModules/Пользователи/Module.bsl @@ -1038,11 +1038,12 @@ // ПользовательИнформационнойБазы. // // Параметры: -// Приемник - Структура, ПользовательИнформационнойБазы, ДанныеФормыКоллекция - подмножество +// Приемник - Структура, ПользовательИнформационнойБазы, УправляемаяФорма - подмножество // свойств из НовоеОписаниеПользователяИБ(). // -// Источник - Структура, ПользовательИнформационнойБазы, ДанныеФормыКоллекция - как и приемник, -// но типы обратные, т.е. когда в Приемнике тип Структура, тогда в источнике НЕ Структура. +// Источник - Структура, ПользовательИнформационнойБазы, УправляемаяФорма - как и приемник, +// но типы обратные, т.е. когда Приемник типа ПользовательИнформационнойБазы, +// тогда в Источник не типа ПользовательИнформационнойБазы. // // КопируемыеСвойства - Строка - список свойств через запятую, которые нужно скопировать (без префикса). // ИсключаемыеСвойства - Строка - список свойств через запятую, которые не нужно копировать (без префикса). @@ -1054,6 +1055,22 @@ ИсключаемыеСвойства = "", ПрефиксСвойств = "") Экспорт + Если ТипЗнч(Приемник) = Тип("ПользовательИнформационнойБазы") + И ТипЗнч(Источник) = Тип("ПользовательИнформационнойБазы") + + Или ТипЗнч(Приемник) = Тип("ПользовательИнформационнойБазы") + И ТипЗнч(Источник) <> Тип("Структура") + И ТипЗнч(Источник) <> Тип("УправляемаяФорма") + + Или ТипЗнч(Источник) = Тип("ПользовательИнформационнойБазы") + И ТипЗнч(Приемник) <> Тип("Структура") + И ТипЗнч(Приемник) <> Тип("УправляемаяФорма") Тогда + + ВызватьИсключение + НСтр("ru = 'Недопустимое значение параметра Приемник или Источник + |в процедуре СкопироватьСвойстваПользователяИБ общего модуля Пользователи.'"); + КонецЕсли; + ВсеСвойства = НовоеОписаниеПользователяИБ(); Если ЗначениеЗаполнено(КопируемыеСвойства) Тогда @@ -1084,7 +1101,9 @@ Продолжить; КонецЕсли; - Если ТипЗнч(Источник) = Тип("ПользовательИнформационнойБазы") Тогда + Если ТипЗнч(Источник) = Тип("ПользовательИнформационнойБазы") + И ( ТипЗнч(Приемник) = Тип("Структура") + Или ТипЗнч(Приемник) = Тип("УправляемаяФорма") ) Тогда Если Свойство = "Пароль" ИЛИ Свойство = "СтарыйПароль" Тогда @@ -1320,75 +1339,113 @@ Знач ИдентификаторПользователяСервиса = Ложь) Экспорт УстановитьПривилегированныйРежим(Истина); + ПустойУникальныйИдентификатор = Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000"); - Если ТипЗнч(УникальныйИдентификатор) <> Тип("УникальныйИдентификатор") Тогда - УникальныйИдентификатор = - Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000"); + Если ТипЗнч(УникальныйИдентификатор) <> Тип("УникальныйИдентификатор") + Или УникальныйИдентификатор = ПустойУникальныйИдентификатор Тогда + + УникальныйИдентификатор = Неопределено; КонецЕсли; Запрос = Новый Запрос; - Запрос.УстановитьПараметр("Пользователь", Пользователь); - Запрос.УстановитьПараметр("УникальныйИдентификатор", УникальныйИдентификатор); + Запрос.УстановитьПараметр("ПустойУникальныйИдентификатор", ПустойУникальныйИдентификатор); - Запрос.УстановитьПараметр("ПустойУникальныйИдентификатор", - Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")); - - Запрос.Текст = - "ВЫБРАТЬ - | ИдентификаторыПользователей.ИдентификаторПользователяИБ КАК НеоднозначныйИдентификатор, - | ИдентификаторыПользователей.Пользователь - |ИЗ - | (ВЫБРАТЬ - | Пользователи.ИдентификаторПользователяИБ, - | Пользователи.Ссылка КАК Пользователь - | ИЗ - | Справочник.Пользователи КАК Пользователи - | - | ОБЪЕДИНИТЬ ВСЕ - | - | ВЫБРАТЬ - | ВнешниеПользователи.ИдентификаторПользователяИБ, - | ВнешниеПользователи.Ссылка - | ИЗ - | Справочник.ВнешниеПользователи КАК ВнешниеПользователи) КАК ИдентификаторыПользователей - |ГДЕ - | ИдентификаторыПользователей.ИдентификаторПользователяИБ В - | (ВЫБРАТЬ - | ИдентификаторыПользователей.ИдентификаторПользователяИБ - | ИЗ - | (ВЫБРАТЬ - | Пользователи.ИдентификаторПользователяИБ, - | Пользователи.Ссылка КАК Пользователь - | ИЗ - | Справочник.Пользователи КАК Пользователи - | ГДЕ - | Пользователи.ИдентификаторПользователяИБ <> &ПустойУникальныйИдентификатор - | И НЕ(&Пользователь <> НЕОПРЕДЕЛЕНО - | И Пользователи.Ссылка <> &Пользователь) - | И НЕ(&УникальныйИдентификатор <> &ПустойУникальныйИдентификатор - | И Пользователи.ИдентификаторПользователяИБ <> &УникальныйИдентификатор) - | - | ОБЪЕДИНИТЬ ВСЕ - | - | ВЫБРАТЬ - | ВнешниеПользователи.ИдентификаторПользователяИБ, - | ВнешниеПользователи.Ссылка - | ИЗ - | Справочник.ВнешниеПользователи КАК ВнешниеПользователи - | ГДЕ - | ВнешниеПользователи.ИдентификаторПользователяИБ <> &ПустойУникальныйИдентификатор - | И НЕ(&Пользователь <> НЕОПРЕДЕЛЕНО - | И ВнешниеПользователи.Ссылка <> &Пользователь) - | И НЕ(&УникальныйИдентификатор <> &ПустойУникальныйИдентификатор - | И ВнешниеПользователи.ИдентификаторПользователяИБ <> &УникальныйИдентификатор) - | ) КАК ИдентификаторыПользователей - | СГРУППИРОВАТЬ ПО - | ИдентификаторыПользователей.ИдентификаторПользователяИБ - | ИМЕЮЩИЕ - | КОЛИЧЕСТВО(ИдентификаторыПользователей.Пользователь) > 1) - | - |УПОРЯДОЧИТЬ ПО - | ИдентификаторыПользователей.ИдентификаторПользователяИБ"; + Если Пользователь = Неопределено И УникальныйИдентификатор = Неопределено Тогда + Запрос.Текст = + "ВЫБРАТЬ + | Пользователи.ИдентификаторПользователяИБ КАК НеоднозначныйИдентификатор + |ИЗ + | Справочник.Пользователи КАК Пользователи + | + |СГРУППИРОВАТЬ ПО + | Пользователи.ИдентификаторПользователяИБ + | + |ИМЕЮЩИЕ + | Пользователи.ИдентификаторПользователяИБ <> &ПустойУникальныйИдентификатор И + | КОЛИЧЕСТВО(Пользователи.Ссылка) > 1 + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | ВнешниеПользователи.ИдентификаторПользователяИБ + |ИЗ + | Справочник.ВнешниеПользователи КАК ВнешниеПользователи + | + |СГРУППИРОВАТЬ ПО + | ВнешниеПользователи.ИдентификаторПользователяИБ + | + |ИМЕЮЩИЕ + | ВнешниеПользователи.ИдентификаторПользователяИБ <> &ПустойУникальныйИдентификатор И + | КОЛИЧЕСТВО(ВнешниеПользователи.Ссылка) > 1 + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | Пользователи.ИдентификаторПользователяИБ + |ИЗ + | Справочник.Пользователи КАК Пользователи + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ВнешниеПользователи КАК ВнешниеПользователи + | ПО (ВнешниеПользователи.ИдентификаторПользователяИБ = Пользователи.ИдентификаторПользователяИБ) + | И (Пользователи.ИдентификаторПользователяИБ <> &ПустойУникальныйИдентификатор)"; + + ИначеЕсли УникальныйИдентификатор <> Неопределено Тогда + + Запрос.УстановитьПараметр("УникальныйИдентификатор", УникальныйИдентификатор); + Запрос.Текст = + "ВЫБРАТЬ + | Пользователи.ИдентификаторПользователяИБ КАК НеоднозначныйИдентификатор + |ИЗ + | Справочник.Пользователи КАК Пользователи + |ГДЕ + | Пользователи.ИдентификаторПользователяИБ = &УникальныйИдентификатор + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | ВнешниеПользователи.ИдентификаторПользователяИБ + |ИЗ + | Справочник.ВнешниеПользователи КАК ВнешниеПользователи + |ГДЕ + | ВнешниеПользователи.ИдентификаторПользователяИБ = &УникальныйИдентификатор"; + Иначе + Запрос.УстановитьПараметр("Пользователь", Пользователь); + Запрос.Текст = + "ВЫБРАТЬ + | Пользователи.ИдентификаторПользователяИБ КАК НеоднозначныйИдентификатор + |ИЗ + | Справочник.Пользователи КАК Пользователи + |ГДЕ + | Пользователи.ИдентификаторПользователяИБ В + | (ВЫБРАТЬ + | СправочникПользователи.ИдентификаторПользователяИБ + | ИЗ + | Справочник.Пользователи КАК СправочникПользователи + | ГДЕ + | СправочникПользователи.Ссылка = &Пользователь + | И СправочникПользователи.ИдентификаторПользователяИБ <> &ПустойУникальныйИдентификатор) + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | ВнешниеПользователи.ИдентификаторПользователяИБ + |ИЗ + | Справочник.ВнешниеПользователи КАК ВнешниеПользователи + |ГДЕ + | ВнешниеПользователи.ИдентификаторПользователяИБ В + | (ВЫБРАТЬ + | СправочникПользователи.ИдентификаторПользователяИБ + | ИЗ + | Справочник.Пользователи КАК СправочникПользователи + | ГДЕ + | СправочникПользователи.Ссылка = &Пользователь + | И СправочникПользователи.ИдентификаторПользователяИБ <> &ПустойУникальныйИдентификатор)"; + + Если ТипЗнч(Пользователь) = Тип("СправочникСсылка.ВнешниеПользователи") Тогда + Запрос.Текст = СтрЗаменить(Запрос.Текст, + "Справочник.Пользователи КАК СправочникПользователи", + "Справочник.ВнешниеПользователи КАК СправочникПользователи"); + КонецЕсли; + КонецЕсли; Если ИдентификаторПользователяСервиса Тогда Запрос.Текст = СтрЗаменить(Запрос.Текст, @@ -1398,18 +1455,54 @@ Выгрузка = Запрос.Выполнить().Выгрузить(); - Если Выгрузка.Количество() = 0 Тогда - Возврат; + Если Пользователь = Неопределено И УникальныйИдентификатор = Неопределено Тогда + Если Выгрузка.Количество() = 0 Тогда + Возврат; + КонецЕсли; + Иначе + Если Выгрузка.Количество() < 2 Тогда + Возврат; + КонецЕсли; КонецЕсли; - ОписаниеОшибки = НСтр("ru = 'Ошибка в базе данных:'") + Символы.ПС; + НеоднозначныеИдентификаторы = Выгрузка.ВыгрузитьКолонку("НеоднозначныйИдентификатор"); + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("НеоднозначныеИдентификаторы", НеоднозначныеИдентификаторы); + Запрос.Текст = + "ВЫБРАТЬ + | НеоднозначныеИдентификаторы.НеоднозначныйИдентификатор КАК НеоднозначныйИдентификатор, + | НеоднозначныеИдентификаторы.Пользователь КАК Пользователь + |ИЗ + | (ВЫБРАТЬ + | Пользователи.ИдентификаторПользователяИБ КАК НеоднозначныйИдентификатор, + | Пользователи.Ссылка КАК Пользователь + | ИЗ + | Справочник.Пользователи КАК Пользователи + | ГДЕ + | Пользователи.ИдентификаторПользователяИБ В(&НеоднозначныеИдентификаторы) + | + | ОБЪЕДИНИТЬ ВСЕ + | + | ВЫБРАТЬ + | ВнешниеПользователи.ИдентификаторПользователяИБ, + | ВнешниеПользователи.Ссылка + | ИЗ + | Справочник.ВнешниеПользователи КАК ВнешниеПользователи + | ГДЕ + | ВнешниеПользователи.ИдентификаторПользователяИБ В(&НеоднозначныеИдентификаторы)) КАК НеоднозначныеИдентификаторы + | + |УПОРЯДОЧИТЬ ПО + | НеоднозначныеИдентификаторы.НеоднозначныйИдентификатор, + | НеоднозначныеИдентификаторы.Пользователь"; + + Выгрузка = Запрос.Выполнить().Выгрузить(); + + ОписаниеОшибки = НСтр("ru = 'Ошибка в базе данных.'") + Символы.ПС; ТекущийНеоднозначныйИдентификатор = Неопределено; - Для каждого Строка Из Выгрузка Цикл - - НовыйУникальныйИдентификатор = Ложь; + Для Каждого Строка Из Выгрузка Цикл Если Строка.НеоднозначныйИдентификатор <> ТекущийНеоднозначныйИдентификатор Тогда - НовыйУникальныйИдентификатор = Истина; ТекущийНеоднозначныйИдентификатор = Строка.НеоднозначныйИдентификатор; Если ТипЗнч(НайденныеИдентификаторы) = Тип("Соответствие") Тогда ТекущиеПользователи = Новый Массив; @@ -1429,37 +1522,36 @@ ИмяДляВхода = ТекущийПользовательИБ.Имя; КонецЕсли; + ОписаниеОшибки = ОписаниеОшибки + Символы.ПС; Если ИдентификаторПользователяСервиса Тогда ОписаниеОшибки = ОписаниеОшибки + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Пользователю сервиса с идентификатором ""%1"" - |соответствует более одного элемента в справочнике Пользователи:'"), + |соответствует более одного элемента в справочнике:'"), ТекущийНеоднозначныйИдентификатор); Иначе ОписаниеОшибки = ОписаниеОшибки + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Пользователю ИБ ""%1"" с идентификатором ""%2"" - |соответствует более одного элемента в справочнике Пользователи:'"), + |соответствует более одного элемента в справочнике:'"), ИмяДляВхода, ТекущийНеоднозначныйИдентификатор); КонецЕсли; + ОписаниеОшибки = ОписаниеОшибки + Символы.ПС; КонецЕсли; КонецЕсли; Если ТипЗнч(НайденныеИдентификаторы) = Тип("Соответствие") Тогда ТекущиеПользователи.Добавить(Строка.Пользователь); Иначе - Если НЕ НовыйУникальныйИдентификатор Тогда - ОписаниеОшибки = ОписаниеОшибки + ","; - КонецЕсли; - ОписаниеОшибки = ОписаниеОшибки + Символы.ПС + " " + ОписаниеОшибки = ОписаниеОшибки + "- " + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = '""%1"" с идентификатором ссылки %2'"), + НСтр("ru = '""%1"" %2'"), Строка.Пользователь, - Строка.Пользователь.УникальныйИдентификатор()); + ПолучитьНавигационнуюСсылку(Строка.Пользователь)) + Символы.ПС; КонецЕсли; КонецЦикла; Если ТипЗнч(НайденныеИдентификаторы) <> Тип("Соответствие") Тогда - ВызватьИсключение ОписаниеОшибки + "." + Символы.ПС; + ВызватьИсключение ОписаниеОшибки; КонецЕсли; КонецПроцедуры diff --git a/SSL/src/CommonModules/ПользователиСлужебный/Module.bsl b/SSL/src/CommonModules/ПользователиСлужебный/Module.bsl index 72a40796d..89228b0dd 100644 --- a/SSL/src/CommonModules/ПользователиСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ПользователиСлужебный/Module.bsl @@ -287,13 +287,11 @@ // Возвращает таблицу значений имен всех ролей конфигурации. // -// Параметры: -// // Возвращаемое значение: // ФиксированнаяСтруктура со свойствами: -// Массив - ФиксированныйМассив имен ролей. -// Соответствие - ФиксированноеСоответствие имен ролей со значением Истина. -// ТаблицаЗначений - ТаблицаЗначений с колонками: +// Массив - ФиксированныйМассив - имена ролей. +// Соответствие - ФиксированноеСоответствие - имена ролей со значением Истина. +// ТаблицаЗначений - ХранилищеЗначение - содержит ТаблицаЗначений с колонками: // Имя - Строка - имя роли. // Функция ВсеРоли() Экспорт @@ -698,7 +696,7 @@ //////////////////////////////////////////////////////////////////////////////// // Обработчики событий подсистем конфигурации. -// См. ОбщегоНазначенияПереопределяемый.ПараметрыРаботыКлиентаПриЗапуске. +// См. ОбщегоНазначенияПереопределяемый.ПриДобавленииПараметровРаботыКлиентаПриЗапуске. Процедура ПриДобавленииПараметровРаботыКлиентаПриЗапуске(Параметры, Отказ, ЭтоВызовПередНачаломРаботыСистемы) Экспорт Если Не ЭтоВызовПередНачаломРаботыСистемы Тогда КлючПредупрежденияБезопасности = КлючПредупрежденияБезопасностиПриЗапуске(); @@ -1001,7 +999,7 @@ КонецПроцедуры -// См. ОбщегоНазначенияПереопределяемый.ПараметрыРаботыКлиента. +// См. ОбщегоНазначенияПереопределяемый.ПриДобавленииПараметровРаботыКлиента. Процедура ПриДобавленииПараметровРаботыКлиента(Параметры) Экспорт Параметры.Вставить("ЭтоПолноправныйПользователь", Пользователи.ЭтоПолноправныйПользователь()); @@ -1524,7 +1522,8 @@ ДополнительныеПараметры = Новый Структура; КонецЕсли; - Если ОбщегоНазначения.РазделениеВключено() + Если Не ДополнительныеПараметры.Свойство("ЭтоСлужебныйПользователь") + И ОбщегоНазначения.РазделениеВключено() И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ПользователиВМоделиСервиса") Тогда МодульПользователиСлужебныйВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("ПользователиСлужебныйВМоделиСервиса"); @@ -1653,7 +1652,7 @@ ЧислоИПредмет = Формат(КоличествоДней, "ЧГ=") + " " + ПользователиСлужебныйКлиентСервер.ПредметЦелогоЧисла(КоличествоДней, - "Л = ru_RU", НСтр("ru = 'день,дня,дней,,,,,,0'")); + "", НСтр("ru = 'день,дня,дней,,,,,,0'")); ДополнительныеПараметры.Вставить("ТекстОшибки", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Пароль можно будет сменить только через %1.'"), ЧислоИПредмет)); @@ -1779,12 +1778,20 @@ НовыйПароль = Параметры.НовыйПароль; СтарыйПароль = Параметры.СтарыйПароль; + ДополнительныеПараметры = Новый Структура; + Если ТипЗнч(Параметры.Пользователь) = Тип("СправочникОбъект.Пользователи") Или ТипЗнч(Параметры.Пользователь) = Тип("СправочникОбъект.ВнешниеПользователи") Тогда СсылкаОбъекта = Параметры.Пользователь.Ссылка; Пользователь = СсылкаОбъекта(Параметры.Пользователь); ВызовИзФормыСменаПароля = Ложь; + + Если ТипЗнч(Параметры.Пользователь) = Тип("СправочникОбъект.Пользователи") + И Параметры.Пользователь.Служебный Тогда + + ДополнительныеПараметры.Вставить("ЭтоСлужебныйПользователь"); + КонецЕсли; Иначе СсылкаОбъекта = Параметры.Пользователь; Пользователь = Параметры.Пользователь; @@ -1793,7 +1800,6 @@ Параметры.Вставить("СтарыйПарольСовпадает", Ложь); - ДополнительныеПараметры = Новый Структура; Если Не ВозможноИзменитьПароль(СсылкаОбъекта, ДополнительныеПараметры) Тогда Возврат ДополнительныеПараметры.ТекстОшибки; КонецЕсли; @@ -3253,7 +3259,7 @@ Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; Запрос.УстановитьПараметр("ВнешниеПользователи", МассивВнешнихПользователей); - Запрос.УстановитьПараметр("ВсеРоли", ВсеРоли().Таблица); + Запрос.УстановитьПараметр("ВсеРоли", ВсеРоли().Таблица.Получить()); Запрос.УстановитьПараметр("СтарыеРолиВнешнихПользователей", СтарыеРолиВнешнихПользователей); Запрос.УстановитьПараметр("ИспользоватьВнешнихПользователей", ПолучитьФункциональнуюОпцию("ИспользоватьВнешнихПользователей")); @@ -3806,7 +3812,7 @@ СтрокаОбъект = Формат(КоличествоПользователей, "ЧДЦ=0") + " " + ПользователиСлужебныйКлиентСервер.ПредметЦелогоЧисла(КоличествоПользователей, - "Л = ru_RU", НСтр("ru = 'пользователь,пользователя,пользователей,,,,,,0'")); + "", НСтр("ru = 'пользователь,пользователя,пользователей,,,,,,0'")); Если ГруппаПриемник = Справочники.ГруппыПользователей.ВсеПользователи Тогда СтрокаДействие = НСтр("ru = 'исключены из группы'"); @@ -4169,8 +4175,8 @@ |ИЗ | Справочник.ГруппыВнешнихПользователей КАК ГруппыВнешнихПользователей |ГДЕ - | НЕ(НЕ ГруппыВнешнихПользователей.Предопределенный - | И ГруппыВнешнихПользователей.Ссылка В + | (ГруппыВнешнихПользователей.Предопределенный + | ИЛИ НЕ ГруппыВнешнихПользователей.Ссылка В | (ВЫБРАТЬ РАЗЛИЧНЫЕ | ГруппыВнешнихПользователей.Ссылка | ИЗ @@ -5924,7 +5930,7 @@ КонецФункции // Для функции ОбработатьНовыйПароль. -Функция ОшибкаДлиныИлиСложностиПароля(Пароль, МинимальнаяДлинаПароля, СложныйПароль) +Функция ОшибкаДлиныИлиСложностиПароля(Пароль, Знач МинимальнаяДлинаПароля, СложныйПароль) Если СложныйПароль И МинимальнаяДлинаПароля < 7 Тогда МинимальнаяДлинаПароля = 7; @@ -6838,7 +6844,7 @@ КонецЕсли; ДеревоРолей = ПользователиСлужебныйПовтИсп.ДеревоРолей( - ПоказатьПодсистемыРолей, НазначениеРолей).Скопировать(); + ПоказатьПодсистемыРолей, НазначениеРолей).Получить(); ДеревоРолей.Колонки.Добавить("ЭтоНедоступнаяРоль", Новый ОписаниеТипов("Булево")); ДеревоРолей.Колонки.Добавить("ЭтоНесуществующаяРоль", Новый ОписаниеТипов("Булево")); @@ -7166,7 +7172,7 @@ |ГДЕ | ВнешниеПользователи.ИдентификаторПользователяИБ <> &ПустойУникальныйИдентификатор"; - Запрос.УстановитьПараметр("ПустойУникальныйИдентификатор", Новый УникальныйИдентификатор); + Запрос.УстановитьПараметр("ПустойУникальныйИдентификатор", Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")); Выгрузка = Запрос.Выполнить().Выгрузить(); Выгрузка.Индексы.Добавить("ИдентификаторПользователяИБ"); diff --git a/SSL/src/CommonModules/ПользователиСлужебныйВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/ПользователиСлужебныйВМоделиСервиса/Module.bsl index 51392b6dc..338f557ca 100644 --- a/SSL/src/CommonModules/ПользователиСлужебныйВМоделиСервиса/Module.bsl +++ b/SSL/src/CommonModules/ПользователиСлужебныйВМоделиСервиса/Module.bsl @@ -169,7 +169,7 @@ // Вызывается из процедуры НачатьОбработкуПользователяИБ для поддержки модели сервиса. Процедура ПередНачаломОбработкиПользователяИБ(ПользовательОбъект, ПараметрыОбработки) Экспорт - Если Не РаботаВМоделиСервисаПовтИсп.РазделениеВключено() Тогда + Если Не РаботаВМоделиСервиса.РазделениеВключено() Тогда Возврат; КонецЕсли; @@ -178,7 +178,7 @@ АвтоРеквизиты = ПараметрыОбработки.АвтоРеквизиты; Если ТипЗнч(ПользовательОбъект) = Тип("СправочникОбъект.ВнешниеПользователи") - И РаботаВМоделиСервисаПовтИсп.РазделениеВключено() Тогда + И РаботаВМоделиСервиса.РазделениеВключено() Тогда ВызватьИсключение НСтр("ru = 'Внешние пользователи не поддерживаются в модели сервиса.'"); КонецЕсли; @@ -187,7 +187,7 @@ Если ДополнительныеСвойства.Свойство("ОбработкаСообщенияКаналаУдаленногоАдминистрирования") Тогда - Если НЕ РаботаВМоделиСервисаПовтИсп.СеансЗапущенБезРазделителей() Тогда + Если НЕ РаботаВМоделиСервиса.СеансЗапущенБезРазделителей() Тогда ВызватьИсключение НСтр("ru = 'Обновление пользователя по сообщению |канала удаленного администрирования @@ -239,7 +239,7 @@ // Вызывается из процедуры НачатьОбработкуПользователяИБ для поддержки модели сервиса. Процедура ПослеНачалаОбработкиПользователяИБ(ПользовательОбъект, ПараметрыОбработки) Экспорт - Если Не РаботаВМоделиСервисаПовтИсп.РазделениеВключено() Тогда + Если Не РаботаВМоделиСервиса.РазделениеВключено() Тогда Возврат; КонецЕсли; @@ -248,7 +248,7 @@ ПараметрыОбработки.Вставить("СоздатьПользователяСервиса", Ложь); Если ПараметрыОбработки.НовыйПользовательИБСуществует - И РаботаВМоделиСервисаПовтИсп.РазделениеВключено() Тогда + И РаботаВМоделиСервиса.РазделениеВключено() Тогда Если НЕ ЗначениеЗаполнено(АвтоРеквизиты.ИдентификаторПользователяСервиса) Тогда @@ -265,7 +265,7 @@ // Вызывается из процедуры ЗавершитьОбработкуПользователяИБ для поддержки модели сервиса. Процедура ПередЗавершениемОбработкиПользователяИБ(ПользовательОбъект, ПараметрыОбработки) Экспорт - Если Не РаботаВМоделиСервисаПовтИсп.РазделениеВключено() Тогда + Если Не РаботаВМоделиСервиса.РазделениеВключено() Тогда Возврат; КонецЕсли; @@ -284,7 +284,7 @@ // Вызывается из процедуры ЗавершитьОбработкуПользователяИБ для поддержки модели сервиса. Процедура ПриЗавершенииОбработкиПользователяИБ(ПользовательОбъект, ПараметрыОбработки, ОбновлятьРоли) Экспорт - Если Не РаботаВМоделиСервисаПовтИсп.РазделениеВключено() Тогда + Если Не РаботаВМоделиСервиса.РазделениеВключено() Тогда Возврат; КонецЕсли; @@ -294,7 +294,7 @@ ОписаниеПользователяИБ = ПользовательОбъект.ДополнительныеСвойства.ОписаниеПользователяИБ; - Если РаботаВМоделиСервисаПовтИсп.РазделениеВключено() + Если РаботаВМоделиСервиса.РазделениеВключено() И ТипЗнч(ПользовательОбъект) = Тип("СправочникОбъект.Пользователи") И ОписаниеПользователяИБ.Свойство("РезультатДействия") И НЕ ПользовательОбъект.Служебный Тогда @@ -420,7 +420,7 @@ // Только для внутреннего использования. Процедура ОбновитьОписаниеWebСервисаМенеджераСервиса() - Если НЕ РаботаВМоделиСервисаПовтИсп.РазделениеВключено() Тогда + Если НЕ РаботаВМоделиСервиса.РазделениеВключено() Тогда Возврат; КонецЕсли; @@ -522,7 +522,7 @@ СообщенияВМоделиСервиса.ОтправитьСообщение( Сообщение, - РаботаВМоделиСервисаПовтИсп.КонечнаяТочкаМенеджераСервиса()); + РаботаВМоделиСервиса.КонечнаяТочкаМенеджераСервиса()); ЗафиксироватьТранзакцию(); Исключение @@ -691,7 +691,7 @@ РаботаВМоделиСервиса.ОбработатьИнформациюОбОшибкеWebСервиса( ИнформацияОбОшибке, - ПользователиСлужебныйВМоделиСервисаПовтИсп.ИмяПодсистемыДляСобытийЖурналаРегистрации(), + Метаданные.Подсистемы.СтандартныеПодсистемы.Подсистемы.РаботаВМоделиСервиса.Подсистемы.ПользователиВМоделиСервиса.Имя, "ManageApplication", // Не локализуется ИмяОперации); diff --git a/SSL/src/CommonModules/ПользователиСлужебныйВМоделиСервисаПовтИсп/Module.bsl b/SSL/src/CommonModules/ПользователиСлужебныйВМоделиСервисаПовтИсп/Module.bsl deleted file mode 100644 index c94d7dead..000000000 --- a/SSL/src/CommonModules/ПользователиСлужебныйВМоделиСервисаПовтИсп/Module.bsl +++ /dev/null @@ -1,14 +0,0 @@ -#Область СлужебныеПроцедурыИФункции - -// Возвращает имя подсистемы, которое должно использоваться в именах -// событий журнала регистрации. -// -// Возвращаемое значение: Строка. -// -Функция ИмяПодсистемыДляСобытийЖурналаРегистрации() Экспорт - - Возврат Метаданные.Подсистемы.СтандартныеПодсистемы.Подсистемы.РаботаВМоделиСервиса.Подсистемы.ПользователиВМоделиСервиса.Имя; - -КонецФункции - -#КонецОбласти diff --git a/SSL/src/CommonModules/ПользователиСлужебныйВМоделиСервисаПовтИсп/ПользователиСлужебныйВМоделиСервисаПовтИсп.mdo b/SSL/src/CommonModules/ПользователиСлужебныйВМоделиСервисаПовтИсп/ПользователиСлужебныйВМоделиСервисаПовтИсп.mdo deleted file mode 100644 index 5767d4e0d..000000000 --- a/SSL/src/CommonModules/ПользователиСлужебныйВМоделиСервисаПовтИсп/ПользователиСлужебныйВМоделиСервисаПовтИсп.mdo +++ /dev/null @@ -1,12 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="1126157b-64c0-4d64-8551-f31c5ed0fd29"> - <name>ПользователиСлужебныйВМоделиСервисаПовтИсп</name> - <synonym> - <key>ru</key> - <value>Пользователи служебный в модели сервиса повт исп</value> - </synonym> - <server>true</server> - <externalConnection>true</externalConnection> - <clientOrdinaryApplication>true</clientOrdinaryApplication> - <returnValuesReuse>DuringSession</returnValuesReuse> -</mdclass:CommonModule> diff --git a/SSL/src/CommonModules/ПользователиСлужебныйКлиент/Module.bsl b/SSL/src/CommonModules/ПользователиСлужебныйКлиент/Module.bsl index 164467f59..f9823e255 100644 --- a/SSL/src/CommonModules/ПользователиСлужебныйКлиент/Module.bsl +++ b/SSL/src/CommonModules/ПользователиСлужебныйКлиент/Module.bsl @@ -313,6 +313,11 @@ Если КлючОбъекта.Пометка = Истина Тогда ИмяФормы = СтрРазделить(КлючОбъекта.Значение, "/")[0]; + ИмяФормыЧастями = СтрРазделить(ИмяФормы, "."); + Пока ИмяФормыЧастями.Количество() > 4 Цикл + ИмяФормыЧастями.Удалить(4); + КонецЦикла; + ИмяФормы = СтрСоединить(ИмяФормыЧастями, "."); ОткрытьФорму(ИмяФормы); Возврат; Иначе @@ -391,7 +396,7 @@ Иначе ПрописьПредмета = Формат(КоличествоНастроек, "ЧДЦ=0") + " " + ПользователиСлужебныйКлиентСервер.ПредметЦелогоЧисла(КоличествоНастроек, - "Л = ru_RU", НСтр("ru = 'настройка,настройки,настроек,,,,,,0'")); + "", НСтр("ru = 'настройка,настройки,настроек,,,,,,0'")); ПояснениеОповещения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Скопировано %1 %2'"), diff --git a/SSL/src/CommonModules/ПользователиСлужебныйКлиентСервер/Module.bsl b/SSL/src/CommonModules/ПользователиСлужебныйКлиентСервер/Module.bsl index b3ce4067f..c30eebcb7 100644 --- a/SSL/src/CommonModules/ПользователиСлужебныйКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ПользователиСлужебныйКлиентСервер/Module.bsl @@ -5,7 +5,7 @@ // Параметры: // Число - Число - целое число, к которому нужно добавить предмет исчисления. // ФорматнаяСтрока - Строка - см. одноименный параметр метода ЧислоПрописью, -// например: "Л = ru_RU". +// например: "ДП=Истина". // ПараметрыПредметаИсчисления - Строка - см. одноименный параметр метода ЧислоПрописью, // например: НСтр("ru = 'день,дня,дней,,,,,,0'"). // @@ -136,7 +136,7 @@ НСтр("ru = 'Вход в программу разрешен (запретить, если не работает более %1)'"), Формат(Форма.ПросрочкаРаботыВПрограммеДоЗапрещенияВхода, "ЧГ=") + " " + ПредметЦелогоЧисла(Форма.ПросрочкаРаботыВПрограммеДоЗапрещенияВхода, - "Л = ru_RU", НСтр("ru = 'день,дня,дней,,,,,,0'"))); + "", НСтр("ru = 'день,дня,дней,,,,,,0'"))); КонецЕсли; Если ЗначениеЗаполнено(ЗаголовокСОграничением) Тогда diff --git a/SSL/src/CommonModules/ПользователиСлужебныйПовтИсп/Module.bsl b/SSL/src/CommonModules/ПользователиСлужебныйПовтИсп/Module.bsl index ae86b31d4..2759a43f3 100644 --- a/SSL/src/CommonModules/ПользователиСлужебныйПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ПользователиСлужебныйПовтИсп/Module.bsl @@ -21,7 +21,7 @@ ВсеРоли = Новый Структура; ВсеРоли.Вставить("Массив", Новый ФиксированныйМассив(Массив)); ВсеРоли.Вставить("Соответствие", Новый ФиксированноеСоответствие(Соответствие)); - ВсеРоли.Вставить("Таблица", Таблица); + ВсеРоли.Вставить("Таблица", Новый ХранилищеЗначения(Таблица)); Возврат ОбщегоНазначения.ФиксированныеДанные(ВсеРоли, Ложь); @@ -75,7 +75,7 @@ КонецЕсли; КонецЦикла; - Возврат НедоступныеРоли; + Возврат Новый ФиксированноеСоответствие(НедоступныеРоли); КонецФункции @@ -238,7 +238,7 @@ ВсеНастройки.Вставить("ОбщиеНастройкиВхода", Настройки.ОбщиеНастройкиВхода); ВсеНастройки.Вставить("РедактированиеРолей", Настройки.РедактированиеРолей); - Возврат ВсеНастройки; + Возврат ОбщегоНазначения.ФиксированныеДанные(ВсеНастройки); КонецФункции @@ -292,7 +292,7 @@ Дерево.Строки.Сортировать("ЭтоРоль Убыв, Синоним Возр", Истина); - Возврат Дерево; + Возврат Новый ХранилищеЗначения(Дерево); КонецФункции diff --git a/SSL/src/CommonModules/ПоставляемыеДанные/Module.bsl b/SSL/src/CommonModules/ПоставляемыеДанные/Module.bsl index 07f111e19..10e78bbaf 100644 --- a/SSL/src/CommonModules/ПоставляемыеДанные/Module.bsl +++ b/SSL/src/CommonModules/ПоставляемыеДанные/Module.bsl @@ -6,7 +6,7 @@ Процедура ЗапроситьВсеДанные() Экспорт ОбменСообщениями.ОтправитьСообщение("ПоставляемыеДанные\ЗапросВсехДанных", Неопределено, - РаботаВМоделиСервисаПовтИсп.КонечнаяТочкаМенеджераСервиса()); + РаботаВМоделиСервиса.КонечнаяТочкаМенеджераСервиса()); КонецПроцедуры @@ -112,7 +112,7 @@ КонецЦикла; ИсходнаяОбластьДанных = Неопределено; - Если РаботаВМоделиСервисаПовтИсп.РазделениеВключено() И РаботаВМоделиСервисаПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + Если РаботаВМоделиСервиса.РазделениеВключено() И РаботаВМоделиСервиса.ДоступноИспользованиеРазделенныхДанных() Тогда ИсходнаяОбластьДанных = РаботаВМоделиСервиса.ЗначениеРазделителяСеанса(); РаботаВМоделиСервиса.УстановитьРазделениеСеанса(Ложь); КонецЕсли; @@ -548,7 +548,7 @@ // Процедура ОбластьОбработана(Знач ИдентификаторФайла, Знач КодОбработчика, Знач ОбластьДанных) Экспорт - Если РаботаВМоделиСервисаПовтИсп.РазделениеВключено() И РаботаВМоделиСервисаПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + Если РаботаВМоделиСервиса.РазделениеВключено() И РаботаВМоделиСервиса.ДоступноИспользованиеРазделенныхДанных() Тогда РаботаВМоделиСервиса.УстановитьРазделениеСеанса(Ложь); КонецЕсли; diff --git a/SSL/src/CommonModules/ПрисоединенныеФайлыПереопределяемый/Module.bsl b/SSL/src/CommonModules/ПрисоединенныеФайлыПереопределяемый/Module.bsl deleted file mode 100644 index ddf9b8244..000000000 --- a/SSL/src/CommonModules/ПрисоединенныеФайлыПереопределяемый/Module.bsl +++ /dev/null @@ -1,57 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Подсистема "Присоединенные файлы". -// -//////////////////////////////////////////////////////////////////////////////// - -#Область ПрограммныйИнтерфейс - -#Область УстаревшиеПроцедурыИФункции - -// Устарела. Следует использовать РаботаСФайламиПереопределяемый.ПриОпределенииСправочниковХраненияФайлов. -// Позволяет переопределить справочники хранения файлов по типам владельцев. -// -// Параметры: -// ТипВладелецФайла - Тип - тип ссылки объекта, к которому добавляется файл. -// -// ИменаСправочников - Соответствие - содержит в ключах имена справочников. -// При вызове содержит стандартное имя одного справочника, -// помеченного, как основной (если существует). -// Основной справочник используется для интерактивного -// взаимодействия с пользователем. Чтобы указать основной -// справочник, нужно установить Истина в значение соответствия. -// Если установить Истина более одного раза, тогда будет ошибка. -// -Процедура ПриОпределенииСправочниковХраненияФайлов(ТипВладелецФайла, ИменаСправочников) Экспорт - -КонецПроцедуры - -// Устарела. Следует использовать РаботаСФайламиПереопределяемый.ПриОпределенииНастроек. -// Формирует массив метаданных, которые не должны выводиться в настройках очистки файлов. -// -// Параметры: -// МассивИсключений - Массив - метаданные, которые не должны выводиться в настройках очистки файлов. -// -// Пример: -// МассивИсключений.Добавить(Метаданные.Справочники.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы); -// -Процедура ПриОпределенииОбъектовИсключенияОчисткиФайлов(МассивИсключений) Экспорт - -КонецПроцедуры - -// Устарела. Следует использовать РаботаСФайламиПереопределяемый.ПриОпределенииНастроек. -// Формирует массив метаданных, которые не должны выводиться в настройках синхронизации файлов. -// -// Параметры: -// МассивИсключений -Массив - метаданные, которые не должны выводиться в настройках синхронизации файлов. -// -// Пример: -// МассивИсключений.Добавить(Метаданные.Справочники.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы); -// -Процедура ПриОпределенииОбъектовИсключенияСинхронизацииФайлов(МассивИсключений) Экспорт - -КонецПроцедуры - -#КонецОбласти - -#КонецОбласти - diff --git a/SSL/src/CommonModules/РаботаВБезопасномРежимеСлужебный/Module.bsl b/SSL/src/CommonModules/РаботаВБезопасномРежимеСлужебный/Module.bsl index 9ec807cb5..5eb33c8d4 100644 --- a/SSL/src/CommonModules/РаботаВБезопасномРежимеСлужебный/Module.bsl +++ b/SSL/src/CommonModules/РаботаВБезопасномРежимеСлужебный/Module.bsl @@ -188,7 +188,7 @@ //////////////////////////////////////////////////////////////////////////////// // Обработчики событий подсистем конфигурации. -// См. ОбщегоНазначенияПереопределяемый.ПараметрыРаботыКлиентаПриЗапуске. +// См. ОбщегоНазначенияПереопределяемый.ПриДобавленииПараметровРаботыКлиентаПриЗапуске. Процедура ПриДобавленииПараметровРаботыКлиентаПриЗапуске(Параметры, ДоОбновленияПараметровРаботыПрограммы = Ложь) Экспорт Если ДоОбновленияПараметровРаботыПрограммы Тогда diff --git a/SSL/src/CommonModules/РаботаВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/РаботаВМоделиСервиса/Module.bsl index 0ddfdbabe..d2e61cf57 100644 --- a/SSL/src/CommonModules/РаботаВМоделиСервиса/Module.bsl +++ b/SSL/src/CommonModules/РаботаВМоделиСервиса/Module.bsl @@ -7,7 +7,7 @@ // Функция РазделительОсновныхДанных() Экспорт - Возврат РаботаВМоделиСервисаПовтИсп.РазделительОсновныхДанных(); + Возврат Метаданные.ОбщиеРеквизиты.ОбластьДанныхОсновныеДанные.Имя; КонецФункции @@ -18,7 +18,7 @@ // Функция РазделительВспомогательныхДанных() Экспорт - Возврат РаботаВМоделиСервисаПовтИсп.РазделительВспомогательныхДанных(); + Возврат Метаданные.ОбщиеРеквизиты.ОбластьДанныхВспомогательныеДанные.Имя; КонецФункции @@ -52,7 +52,11 @@ // Функция ДоступноИспользованиеРазделенныхДанных() Экспорт - Возврат РаботаВМоделиСервисаПовтИсп.ДоступноИспользованиеРазделенныхДанных(); + Если Не РазделениеВключено() Тогда + Возврат Истина; + КонецЕсли; + + Возврат ИспользованиеРазделителяСеанса(); КонецФункции @@ -92,7 +96,7 @@ РазблокироватьДанныеДляРедактирования(Ключ); - Если НЕ РаботаВМоделиСервисаПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + Если НЕ ДоступноИспользованиеРазделенныхДанных() Тогда Попытка @@ -549,7 +553,7 @@ // Процедура ОбслуживаниеОбластейДанных() Экспорт - Если НЕ РаботаВМоделиСервисаПовтИсп.РазделениеВключено() Тогда + Если НЕ РазделениеВключено() Тогда Возврат; КонецЕсли; @@ -703,7 +707,7 @@ // Процедура УстановитьРазделениеСеанса(Знач Использование = Неопределено, Знач ОбластьДанных = Неопределено) Экспорт - Если НЕ РаботаВМоделиСервисаПовтИсп.СеансЗапущенБезРазделителей() Тогда + Если НЕ СеансЗапущенБезРазделителей() Тогда ВызватьИсключение(НСтр("ru = 'Изменить разделение сеанса возможно только из сеанса запущенного без указания разделителей'")); КонецЕсли; @@ -729,7 +733,7 @@ // Функция ЗначениеРазделителяСеанса() Экспорт - Если НЕ РаботаВМоделиСервисаПовтИсп.РазделениеВключено() Тогда + Если НЕ РазделениеВключено() Тогда Возврат 0; Иначе Если Не ИспользованиеРазделителяСеанса() Тогда @@ -1091,9 +1095,14 @@ // Функция ПолучитьФайлИзХранилищаМенеджераСервиса(Знач ИДФайла) Экспорт + ОписаниеФайла = Неопределено; + АдресМенеджераСервиса = ВнутреннийАдресМенеджераСервиса(); - Если Не ЗначениеЗаполнено(АдресМенеджераСервиса) Тогда + + Если НЕ ЗначениеЗаполнено(АдресМенеджераСервиса) Тогда + ВызватьИсключение(НСтр("ru = 'Не установлены параметры связи с менеджером сервиса.'")); + КонецЕсли; ПараметрыДоступаКХранилищу = Новый Структура; @@ -1101,14 +1110,48 @@ ПараметрыДоступаКХранилищу.Вставить("UserName", ИмяСлужебногоПользователяМенеджераСервиса()); ПараметрыДоступаКХранилищу.Вставить("Password", ПарольСлужебногоПользователяМенеджераСервиса()); - ОписаниеФайла = ПолучитьФайлИзХранилища(ИДФайла, ПараметрыДоступаКХранилищу, Истина, Истина); + Если ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.ПередачаДанных") Тогда + + ПоддерживаемыеВерсии = ОбщегоНазначения.ПолучитьВерсииИнтерфейса(ПараметрыДоступаКХранилищу, "DataTransfer"); + + Если ПоддерживаемыеВерсии.Количество() > 0 Тогда + + // В одной из версий БТС общий модуль ПередачаДанных был переименован в ПередачаДанныхСервер для разрешения конфликта имен. + // Для совместимости реализована поддержка обоих имен модулей. + Попытка + + МодульПередачаДанных = ОбщегоНазначения.ОбщийМодуль("ПередачаДанныхСервер"); + + Исключение + + МодульПередачаДанных = ОбщегоНазначения.ОбщийМодуль("ПередачаДанных"); + + КонецПопытки; + + ОписаниеФайла = МодульПередачаДанных.ПолучитьИзЛогическогоХранилища(ПараметрыДоступаКХранилищу, "files", ИДФайла); + + КонецЕсли; + + КонецЕсли; + Если ОписаниеФайла = Неопределено Тогда + + ОписаниеФайла = ПолучитьФайлИзХранилища(ИДФайла, ПараметрыДоступаКХранилищу, Истина, Истина); + + КонецЕсли; + + Если ОписаниеФайла = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; СвойстваФайла = Новый Файл(ОписаниеФайла.ПолноеИмя); + Если Не СвойстваФайла.Существует() Тогда + Возврат Неопределено; + КонецЕсли; // Менеджер сервиса устанавливает исходному файлу атрибут "Только чтение". @@ -1132,12 +1175,46 @@ // Функция ПоместитьФайлВХранилищеМенеджераСервиса(Знач АдресДанныеФайл, Знач ИмяФайла = "") Экспорт + ИдентификаторФайлаВХранилище = Неопределено; + ПараметрыДоступаКХранилищу = Новый Структура; ПараметрыДоступаКХранилищу.Вставить("URL", ВнутреннийАдресМенеджераСервиса()); ПараметрыДоступаКХранилищу.Вставить("UserName", ИмяСлужебногоПользователяМенеджераСервиса()); ПараметрыДоступаКХранилищу.Вставить("Password", ПарольСлужебногоПользователяМенеджераСервиса()); - Возврат ПоместитьФайлВХранилище(АдресДанныеФайл, ПараметрыДоступаКХранилищу, ИмяФайла); + Если ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.ПередачаДанных") Тогда + + ПоддерживаемыеВерсии = ОбщегоНазначения.ПолучитьВерсииИнтерфейса(ПараметрыДоступаКХранилищу, "DataTransfer"); + + Если ПоддерживаемыеВерсии.Количество() > 0 Тогда + + // В одной из версий БТС общий модуль ПередачаДанных был переименован в ПередачаДанныхСервер для разрешения конфликта имен. + // Для совместимости реализована поддержка обоих имен модулей. + Попытка + + МодульПередачаДанных = ОбщегоНазначения.ОбщийМодуль("ПередачаДанныхСервер"); + + Исключение + + МодульПередачаДанных = ОбщегоНазначения.ОбщийМодуль("ПередачаДанных"); + + КонецПопытки; + + ИдентификаторФайлаВХранилище = МодульПередачаДанных.ОтправитьВЛогическоеХранилище(ПараметрыДоступаКХранилищу, "files", АдресДанныеФайл, ИмяФайла); + + КонецЕсли; + + КонецЕсли; + + Если ЗначениеЗаполнено(ИдентификаторФайлаВХранилище) Тогда + + Возврат ИдентификаторФайлаВХранилище; + + Иначе + + Возврат ПоместитьФайлВХранилище(АдресДанныеФайл, ПараметрыДоступаКХранилищу, ИмяФайла); + + КонецЕсли; КонецФункции @@ -1940,7 +2017,7 @@ ОчиститьВсеПараметрыСеансаКромеРазделителей(); - Если РаботаВМоделиСервисаПовтИсп.ДоступноИспользованиеРазделенныхДанных() + Если ДоступноИспользованиеРазделенныхДанных() И ТекущийРежимЗапуска() <> Неопределено Тогда МенеджерЗаписи = РегистрыСведений.ОбластиДанных.СоздатьМенеджерЗаписи(); @@ -2040,7 +2117,7 @@ // Функция СеансЗапущенБезРазделителей() Экспорт - Возврат РаботаВМоделиСервисаПовтИсп.СеансЗапущенБезРазделителей(); + Возврат ПользователиИнформационнойБазы.ТекущийПользователь().РазделениеДанных.Количество() = 0; КонецФункции @@ -2094,7 +2171,8 @@ // Функция КонечнаяТочкаМенеджераСервиса() Экспорт - Возврат РаботаВМоделиСервисаПовтИсп.КонечнаяТочкаМенеджераСервиса(); + ВызываемыйМодуль = ОбщегоНазначения.ОбщийМодуль("РаботаВМоделиСервисаБТС"); + Возврат ВызываемыйМодуль.КонечнаяТочкаМенеджераСервиса(); КонецФункции @@ -2184,7 +2262,7 @@ // Процедура ЗаблокироватьТекущуюОбластьДанных(Знач ПроверитьОтсутствиеДругихСеансов = Ложь, Знач РазделяемаяБлокировка = Ложь) Экспорт - Если НЕ РаботаВМоделиСервисаПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + Если НЕ ДоступноИспользованиеРазделенныхДанных() Тогда ВызватьИсключение(НСтр("ru = 'Блокировка области может быть установлена только при включенном использовании разделителей'")); КонецЕсли; @@ -2502,6 +2580,8 @@ // Процедура КонтрольНеразделенныхОбъектовПриЗаписи(Источник, Отказ) Экспорт + // ОбменДанными.Загрузка не требуется. + // Запись неразделенных данных из разделенного сеанса запрещена. КонтрольНеразделенныхДанныхПриЗаписи(Источник); КонецПроцедуры @@ -2510,6 +2590,8 @@ // Процедура КонтрольНеразделенныхНаборовЗаписейПриЗаписи(Источник, Отказ, Замещение) Экспорт + // ОбменДанными.Загрузка не требуется. + // Запись неразделенных данных из разделенного сеанса запрещена. КонтрольНеразделенныхДанныхПриЗаписи(Источник); КонецПроцедуры @@ -2667,9 +2749,9 @@ Процедура ПриПроверкеВключенияБезопасногоРежимаРазделенияДанных() Экспорт Если БезопасныйРежим() = Ложь - И РаботаВМоделиСервисаПовтИсп.РазделениеВключено() - И РаботаВМоделиСервисаПовтИсп.ДоступноИспользованиеРазделенныхДанных() - И НЕ РаботаВМоделиСервисаПовтИсп.СеансЗапущенБезРазделителей() Тогда + И РазделениеВключено() + И ДоступноИспользованиеРазделенныхДанных() + И НЕ СеансЗапущенБезРазделителей() Тогда Если НЕ БезопасныйРежимРазделенияДанных(РазделительВспомогательныхДанных()) Тогда @@ -2692,8 +2774,8 @@ // Процедура ПриПроверкеБлокировкиОбластиДанныхПриЗапуске(ОписаниеОшибки) Экспорт - Если РаботаВМоделиСервисаПовтИсп.РазделениеВключено() - И РаботаВМоделиСервисаПовтИсп.ДоступноИспользованиеРазделенныхДанных() + Если РазделениеВключено() + И ДоступноИспользованиеРазделенныхДанных() И ОбластьДанныхЗаблокирована(ЗначениеРазделителяСеанса()) Тогда ОписаниеОшибки = @@ -2739,7 +2821,7 @@ Обработчик.Приоритет = 99; Обработчик.МонопольныйРежим = Ложь; - Если РаботаВМоделиСервисаПовтИсп.РазделениеВключено() Тогда + Если РазделениеВключено() Тогда Обработчик = Обработчики.Добавить(); Обработчик.Версия = "*"; @@ -2751,7 +2833,7 @@ КонецЕсли; - Если РаботаВМоделиСервисаПовтИсп.РазделениеВключено() Тогда + Если РазделениеВключено() Тогда Обработчик = Обработчики.Добавить(); Обработчик.Версия = "2.2.4.9"; @@ -2764,18 +2846,18 @@ КонецПроцедуры -// См. ОбщегоНазначенияПереопределяемый.ПараметрыРаботыКлиентаПриЗапуске. +// См. ОбщегоНазначенияПереопределяемый.ПриДобавленииПараметровРаботыКлиентаПриЗапуске. Процедура ПриДобавленииПараметровРаботыКлиентаПриЗапуске(Параметры) Экспорт ПриДобавленииПараметровРаботыКлиента(Параметры); КонецПроцедуры -// См. ОбщегоНазначенияПереопределяемый.ПараметрыРаботыКлиента. +// См. ОбщегоНазначенияПереопределяемый.ПриДобавленииПараметровРаботыКлиента. Процедура ПриДобавленииПараметровРаботыКлиента(Параметры) Экспорт - Если НЕ РаботаВМоделиСервисаПовтИсп.РазделениеВключено() - ИЛИ НЕ РаботаВМоделиСервисаПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + Если НЕ РазделениеВключено() + ИЛИ НЕ ДоступноИспользованиеРазделенныхДанных() Тогда Возврат; КонецЕсли; @@ -2795,7 +2877,7 @@ Если НЕ Результат.Пустой() Тогда Выборка = Результат.Выбрать(); Выборка.Следующий(); - Если РаботаВМоделиСервисаПовтИсп.СеансЗапущенБезРазделителей() Тогда + Если СеансЗапущенБезРазделителей() Тогда Параметры.Вставить("ПредставлениеОбластиДанных", Формат(ЗначениеРазделителяСеанса(), "ЧН=0; ЧГ=") + " - " + Выборка.Представление); ИначеЕсли НЕ ПустаяСтрока(Выборка.Представление) Тогда @@ -2913,7 +2995,7 @@ Попытка СообщенияВМоделиСервиса.ОтправитьСообщение( Сообщение, - РаботаВМоделиСервисаПовтИсп.КонечнаяТочкаМенеджераСервиса()); + КонечнаяТочкаМенеджераСервиса()); МенеджерЗаписи.Записать(); @@ -3030,14 +3112,18 @@ ОписаниеПрокси = ОписаниеПроксиСервисаПередачиФайлов(ПараметрыПодключения); Описание = ПолучитьИмяФайлаСДанными(АдресДанныеФайл, ИмяФайла); + Если ПустаяСтрока(Описание.Имя) Тогда + Описание.Имя = ПолучитьИмяВременногоФайла(); УдалятьВременныйФайл = Истина; + КонецЕсли; СвойстваФайла = Новый Файл(Описание.Имя); ОбменЧерезФС = МожноПередаватьЧерезФСНаСервер(ОписаниеПрокси.Прокси, ОписаниеПрокси.ЕстьПоддержка2йВерсии); + Если ОбменЧерезФС Тогда // Сохранить данные в файл. @@ -3089,91 +3175,173 @@ КонецЕсли; // ОбменЧерезФС - Если Не ОбменЧерезФС Тогда - - РазмерБлокаПередачиФайла = ПолучитьРазмерБлокаПередачиФайла(); // Мб - ИдентификаторПередачи = Новый УникальныйИдентификатор; - - // Сохранить данные в файл. - КаталогСборки = СоздатьКаталогСборки(); - ПолноеИмяФайла = КаталогСборки + СвойстваФайла.Имя; + Если НЕ ОбменЧерезФС Тогда Если Описание.Данные = Неопределено Тогда + Если СвойстваФайла.Существует() Тогда - КопироватьФайл(СвойстваФайла.ПолноеИмя, ПолноеИмяФайла); + + КаталогСборки = Неопределено; + ПолноеИмяФайла = СвойстваФайла.ПолноеИмя; + Иначе + ВызватьИсключение(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Добавление файла в хранилище. Не найден файл %1.'"), СвойстваФайла.ПолноеИмя)); + КонецЕсли; + Иначе - Описание.Данные.Записать(ПолноеИмяФайла); + + Попытка + + КаталогСборки = СоздатьКаталогСборки(); + ПолноеИмяФайла = КаталогСборки + СвойстваФайла.Имя; + Описание.Данные.Записать(ПолноеИмяФайла); + + Исключение + + УдалитьВременныеФайлы(КаталогСборки); + ВызватьИсключение; + + КонецПопытки; + КонецЕсли; - ЦелевойФайл = Новый Файл(ПолноеИмяФайла); - РазмерИсходногоФайла = ЦелевойФайл.Размер(); - // Архивировать файл. - ИмяНеразделенногоФайла = ПолучитьИмяВременногоФайла("zip"); - Архиватор = Новый ЗаписьZipФайла(ИмяНеразделенногоФайла, , , , УровеньСжатияZIP.Минимальный); - Архиватор.Добавить(ПолноеИмяФайла); - Архиватор.Записать(); - - // Разделить файл на части. - // Мб => байты. - ИменаФайлов = РазделитьФайл(ИмяНеразделенногоФайла, РазмерБлокаПередачиФайла * 1024 * 1024, КаталогСборки); - Попытка - УдалитьФайлы(ИмяНеразделенногоФайла); + + ИмяФайлаАрхива = ПолучитьИмяВременногоФайла("zip"); + Архиватор = Новый ЗаписьZipФайла(ИмяФайлаАрхива,,,, УровеньСжатияZIP.Минимальный); + Архиватор.Добавить(ПолноеИмяФайла); + Архиватор.Записать(); + Исключение - ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииДобавлениеФайлаОбменНеЧерезФС(), - УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + + Если УдалятьВременныйФайл Тогда + + УдалитьВременныеФайлы(Описание.Имя); + + КонецЕсли; + + УдалитьВременныеФайлы(ИмяФайлаАрхива); + + Если ЗначениеЗаполнено(КаталогСборки) Тогда + + УдалитьВременныеФайлы(КаталогСборки); + + КонецЕсли; + + ВызватьИсключение; + КонецПопытки; - // Передать файл через сервис по частям. - КоличествоЧастей = ИменаФайлов.Количество(); - Если ОписаниеПрокси.ЕстьПоддержка2йВерсии Тогда - Для НомерЧасти = 1 По КоличествоЧастей Цикл // Передача по частям. - ИмяФайлаЧасти = ИменаФайлов[НомерЧасти - 1]; - ДанныеФайла = Новый ДвоичныеДанные(ИмяФайлаЧасти); - Попытка - УдалитьФайлы(ИмяФайлаЧасти); - Исключение - ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииДобавлениеФайлаОбменНеЧерезФС(), - УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - КонецПопытки; - ОписаниеПрокси.Прокси.PutFilePart(ИдентификаторПередачи, НомерЧасти, ДанныеФайла, КоличествоЧастей); - КонецЦикла; - Иначе // 1-я версия. - Для НомерЧасти = 1 По КоличествоЧастей Цикл // Передача по частям. - ИмяФайлаЧасти = ИменаФайлов[НомерЧасти - 1]; - ДанныеФайла = Новый ДвоичныеДанные(ИмяФайлаЧасти); - Попытка - УдалитьФайлы(ИмяФайлаЧасти); - Исключение - ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииДобавлениеФайлаОбменНеЧерезФС(), - УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - КонецПопытки; - ОписаниеПрокси.Прокси.PutFilePart(ИдентификаторПередачи, НомерЧасти, ДанныеФайла); - КонецЦикла; - КонецЕсли; - - Попытка - УдалитьФайлы(КаталогСборки); - Исключение - ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииДобавлениеФайлаОбменНеЧерезФС(), - УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - КонецПопытки; - - Если ОписаниеПрокси.ЕстьПоддержка2йВерсии Тогда - Результат = ОписаниеПрокси.Прокси.SaveFileFromParts(ИдентификаторПередачи, КоличествоЧастей); - Иначе // 1-я версия. - Результат = Неопределено; - ОписаниеПрокси.Прокси.SaveFileFromParts(ИдентификаторПередачи, КоличествоЧастей, Результат); - КонецЕсли; - Если УдалятьВременныйФайл Тогда - УдалитьВременныеФайлы(Описание.Имя) + + УдалитьВременныеФайлы(Описание.Имя); + + КонецЕсли; + + Если ЗначениеЗаполнено(КаталогСборки) Тогда + + УдалитьВременныеФайлы(КаталогСборки); + + КонецЕсли; + + РазмерБлокаПередачиФайла = ПолучитьРазмерБлокаПередачиФайла() * 1024 * 1024; + ИдентификаторПередачи = Новый УникальныйИдентификатор; + + ФайлАрхива = Новый Файл(ИмяФайлаАрхива); + РазмерФайлАрхива = ФайлАрхива.Размер(); + + КоличествоЧастей = Окр((РазмерФайлАрхива / РазмерБлокаПередачиФайла) + 0.5, 0, РежимОкругления.Окр15как10); + + ПотокЧтения = Неопределено; + + Попытка + + ПотокЧтения = ФайловыеПотоки.ОткрытьДляЧтения(ИмяФайлаАрхива, РазмерБлокаПередачиФайла); + ПотокЧтения.Перейти(0, ПозицияВПотоке.Начало); + + НомерЧасти = 0; + + Пока ПотокЧтения.ТекущаяПозиция() < РазмерФайлАрхива - 1 Цикл + + НомерЧасти = НомерЧасти + 1; + Буфер = Новый БуферДвоичныхДанных(Мин(РазмерБлокаПередачиФайла, РазмерФайлАрхива - ПотокЧтения.ТекущаяПозиция())); + ПотокЧтения.Прочитать(Буфер, 0, Буфер.Размер); + + КоличествоПопыток = 10; + + Для НомерПопытки = 1 По КоличествоПопыток Цикл + + Попытка + + Если ОписаниеПрокси.ЕстьПоддержка2йВерсии Тогда + + ОписаниеПрокси.Прокси.PutFilePart(ИдентификаторПередачи, НомерЧасти, ПолучитьДвоичныеДанныеИзБуфераДвоичныхДанных(Буфер), КоличествоЧастей); + + Иначе // 1-я версия. + + ОписаниеПрокси.Прокси.PutFilePart(ИдентификаторПередачи, НомерЧасти, ПолучитьДвоичныеДанныеИзБуфераДвоичныхДанных(Буфер)); + + КонецЕсли; + + Прервать; + + Исключение + + Если НомерПопытки = КоличествоПопыток Тогда + + ВызватьИсключение; + + КонецЕсли; + + КонецПопытки; + + КонецЦикла; + + КонецЦикла; + + Исключение + + Если ПотокЧтения <> Неопределено Тогда + + ПотокЧтения.Закрыть(); + + КонецЕсли; + + ОписаниеИсключения = ОписаниеОшибки(); + + УдалитьВременныеФайлы(ИмяФайлаАрхива); + + Попытка + + ОписаниеПрокси.Прокси.ReleaseFile(ИдентификаторПередачи); + + Исключение + + ОписаниеИсключения = ОписаниеИсключения + Символы.ПС + ОписаниеОшибки(); + + КонецПопытки; + + ВызватьИсключение ОписаниеИсключения; + + КонецПопытки; + + ПотокЧтения.Закрыть(); + УдалитьВременныеФайлы(ИмяФайлаАрхива); + + Если ОписаниеПрокси.ЕстьПоддержка2йВерсии Тогда + + Результат = ОписаниеПрокси.Прокси.SaveFileFromParts(ИдентификаторПередачи, КоличествоЧастей); + + Иначе // 1-я версия. + + Результат = Неопределено; + ОписаниеПрокси.Прокси.SaveFileFromParts(ИдентификаторПередачи, КоличествоЧастей, Результат); + КонецЕсли; ЗаписатьВЖурналСобытиеФайловогоХранилища( @@ -3909,7 +4077,7 @@ // Процедура КонтрольНеразделенныхДанныхПриЗаписи(Знач Источник) - Если РаботаВМоделиСервисаПовтИсп.РазделениеВключено() И РаботаВМоделиСервисаПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + Если РазделениеВключено() И ДоступноИспользованиеРазделенныхДанных() Тогда ПредставлениеИсключения = НСтр("ru = 'Нарушение прав доступа.'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); @@ -3949,9 +4117,9 @@ ПроверяетсяСсылка = Ложь; КонецЕсли; - Если Не МонопольныйРежим() И ЭтоРазделенныйОбъектМетаданных(ПроверяемоеЗначение.Метаданные(), РаботаВМоделиСервисаПовтИсп.РазделительВспомогательныхДанных()) Тогда + Если Не МонопольныйРежим() И ЭтоРазделенныйОбъектМетаданных(ПроверяемоеЗначение.Метаданные(), РазделительВспомогательныхДанных()) Тогда - Если РаботаВМоделиСервисаПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + Если ДоступноИспользованиеРазделенныхДанных() Тогда // В разделенном сеансе достаточно просто выполнить запись объекта. Если Записать Тогда @@ -3966,9 +4134,9 @@ // В неразделенном сеансе требуется переключение разделения сеанса для избежания // конфликта блокировок с сеансами, в которых установлено другое значение разделителя. Если ПроверяетсяСсылка Тогда - ЗначениеРазделителя = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ПроверяемоеЗначение, РаботаВМоделиСервисаПовтИсп.РазделительВспомогательныхДанных()); + ЗначениеРазделителя = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ПроверяемоеЗначение, РазделительВспомогательныхДанных()); Иначе - ЗначениеРазделителя = ОбъектВспомогательныхДанных[РаботаВМоделиСервисаПовтИсп.РазделительВспомогательныхДанных()]; + ЗначениеРазделителя = ОбъектВспомогательныхДанных[РазделительВспомогательныхДанных()]; КонецЕсли; УстановитьРазделениеСеанса(Истина, ЗначениеРазделителя); ТребуетсяВосстановлениеРазделенияСеанса = Истина; diff --git a/SSL/src/CommonModules/РаботаВМоделиСервисаПовтИсп/Module.bsl b/SSL/src/CommonModules/РаботаВМоделиСервисаПовтИсп/Module.bsl index b5afcd226..4664b3fc1 100644 --- a/SSL/src/CommonModules/РаботаВМоделиСервисаПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/РаботаВМоделиСервисаПовтИсп/Module.bsl @@ -1,16 +1,5 @@ #Область СлужебныйПрограммныйИнтерфейс -// Определяет, сеанс запущен с разделителями или без. -// -// Возвращаемое значение: -// Булево - Истина, если сеанс запущен без разделителей. -// -Функция СеансЗапущенБезРазделителей() Экспорт - - Возврат ПользователиИнформационнойБазы.ТекущийПользователь().РазделениеДанных.Количество() = 0; - -КонецФункции - // Возвращает признак наличия в конфигурации общих реквизитов-разделителей. // // Возвращаемое значение: @@ -42,8 +31,8 @@ Функция ЭтоРазделенныйОбъектМетаданных(Знач ПолноеИмяОбъектаМетаданных, Знач Разделитель = Неопределено) Экспорт Если Разделитель = Неопределено Тогда - РазделениеПоОсновномуРеквизиту = РаботаВМоделиСервиса.РазделенныеОбъектыМетаданных(РазделительОсновныхДанных()); - РазделениеПоВспомогательномуРеквизиту = РаботаВМоделиСервиса.РазделенныеОбъектыМетаданных(РазделительВспомогательныхДанных()); + РазделениеПоОсновномуРеквизиту = РаботаВМоделиСервиса.РазделенныеОбъектыМетаданных(РаботаВМоделиСервиса.РазделительОсновныхДанных()); + РазделениеПоВспомогательномуРеквизиту = РаботаВМоделиСервиса.РазделенныеОбъектыМетаданных(РаботаВМоделиСервиса.РазделительВспомогательныхДанных()); Результат = РазделениеПоОсновномуРеквизиту.Получить(ПолноеИмяОбъектаМетаданных) <> Неопределено Или РазделениеПоВспомогательномуРеквизиту.Получить(ПолноеИмяОбъектаМетаданных) <> Неопределено; Возврат Результат; @@ -54,28 +43,6 @@ КонецФункции -// Возвращает имя общего реквизита, который является разделителем основных данных. -// -// Возвращаемое значение: -// Строка - имя общего реквизита. -// -Функция РазделительОсновныхДанных() Экспорт - - Возврат Метаданные.ОбщиеРеквизиты.ОбластьДанныхОсновныеДанные.Имя; - -КонецФункции - -// Возвращает имя общего реквизита, который является разделителем вспомогательных данных. -// -// Возвращаемое значение: -// Строка - имя общего реквизита. -// -Функция РазделительВспомогательныхДанных() Экспорт - - Возврат Метаданные.ОбщиеРеквизиты.ОбластьДанныхВспомогательныеДанные.Имя; - -КонецФункции - // Возвращает признак работы в режиме разделения данных по областям // (технически это признак условного разделения). // @@ -100,28 +67,6 @@ КонецФункции -// Возвращает признак возможности обращения к разделенным данным (которые входят в состав разделителей). -// Признак относится к сеансу, но может меняться во время работы сеанса, если разделение было включено -// в самом сеансе, поэтому проверку следует делать непосредственно перед обращением к разделенным данным. -// -// Возвращает Истина, если конфигурация не может работать в режиме разделения данных -// (не содержит общих реквизитов, предназначенных для разделения данных). -// -// Возвращаемое значение: -// Булево - Истина, если разделение не поддерживается, либо разделение выключено, -// либо разделение включено и разделители установлены. -// - Ложь, если разделение включено и разделители не установлены. -// -Функция ДоступноИспользованиеРазделенныхДанных() Экспорт - - Если Не РаботаВМоделиСервиса.РазделениеВключено() Тогда - Возврат Истина; - КонецЕсли; - - Возврат РаботаВМоделиСервиса.ИспользованиеРазделителяСеанса(); - -КонецФункции - // Возвращает массив сериализуемых структурных типов, поддерживаемых в настоящее время. // // Возвращаемое значение: @@ -219,14 +164,14 @@ Результат = Новый Соответствие(); - РазделительОсновныхДанных = РазделительОсновныхДанных(); + РазделительОсновныхДанных = РаботаВМоделиСервиса.РазделительОсновныхДанных(); ОсновныеДанныеОбласти = РазделенныеОбъектыМетаданных( РазделительОсновныхДанных); Для Каждого ЭлементОсновныхДанныхОбласти Из ОсновныеДанныеОбласти Цикл Результат.Вставить(ЭлементОсновныхДанныхОбласти.Ключ, ЭлементОсновныхДанныхОбласти.Значение); КонецЦикла; - РазделительВспомогательныхДанных = РазделительВспомогательныхДанных(); + РазделительВспомогательныхДанных = РаботаВМоделиСервиса.РазделительВспомогательныхДанных(); ВспомогательныеДанныеОбласти = РаботаВМоделиСервиса.РазделенныеОбъектыМетаданных( РазделительВспомогательныхДанных); Для Каждого ЭлементВспомогательныхДанныхОбласти Из ВспомогательныеДанныеОбласти Цикл diff --git a/SSL/src/CommonModules/РаботаСАдресамиКлиентСервер/Module.bsl b/SSL/src/CommonModules/РаботаСАдресамиКлиентСервер/Module.bsl index c6492acfe..adcfb6c5a 100644 --- a/SSL/src/CommonModules/РаботаСАдресамиКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/РаботаСАдресамиКлиентСервер/Module.bsl @@ -70,7 +70,7 @@ // Наши сокращения для поддержки обратной совместимости при парсинге. Результат.Добавить(СтрокаОбъектаАдресации("2010", НСтр("ru = 'кв.'"), 3, 6)); Результат.Добавить(СтрокаОбъектаАдресации("2030", НСтр("ru = 'оф.'"), 3, 7)); - // Ввод помещения вручную. + // Ввод помещения вручную. Результат.Добавить(СтрокаОбъектаАдресации("2000", НСтр("ru = ''"), 3, 0)); // Уточняющие объекты diff --git a/SSL/src/CommonModules/РаботаСБанками/Module.bsl b/SSL/src/CommonModules/РаботаСБанками/Module.bsl index d022f67a7..9945155e4 100644 --- a/SSL/src/CommonModules/РаботаСБанками/Module.bsl +++ b/SSL/src/CommonModules/РаботаСБанками/Module.bsl @@ -192,7 +192,7 @@ КонецПроцедуры -// См. ОбщегоНазначенияПереопределяемый.ПараметрыРаботыКлиентаПриЗапуске. +// См. ОбщегоНазначенияПереопределяемый.ПриДобавленииПараметровРаботыКлиентаПриЗапуске. Процедура ПриДобавленииПараметровРаботыКлиентаПриЗапуске(Параметры) Экспорт ВыводитьОповещениеОНеактуальности = ( @@ -261,7 +261,6 @@ КонецФункции -// Получает, сортирует, записывает данные классификатора БИК РФ с сайта 1С. Процедура ЗагрузитьКлассификаторБанков() Экспорт ИмяОбработки = "ЗагрузкаКлассификатораБанков"; diff --git a/SSL/src/CommonModules/РаботаСКурсамиВалют/Module.bsl b/SSL/src/CommonModules/РаботаСКурсамиВалют/Module.bsl index 31269d0d5..e335a1bf0 100644 --- a/SSL/src/CommonModules/РаботаСКурсамиВалют/Module.bsl +++ b/SSL/src/CommonModules/РаботаСКурсамиВалют/Module.bsl @@ -59,7 +59,7 @@ Сумма = ?(СуммаЧислом < 0, -СуммаЧислом, СуммаЧислом); ПараметрыПрописи = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Валюта, "ПараметрыПрописи"); - Результат = ЧислоПрописью(Сумма, "Л=ru_RU;ДП=Ложь", ПараметрыПрописи); + Результат = ЧислоПрописью(Сумма, "ДП=Ложь", ПараметрыПрописи); Если ВыводитьСуммуБезКопеек И Цел(Сумма) = Сумма Тогда Результат = Лев(Результат, СтрНайти(Результат, "0") - 1); @@ -88,25 +88,6 @@ КонецФункции -// Загружает курсы валют на текущую дату. -// -// Параметры: -// ПараметрыЗагрузки - Структура - детали загрузки: -// * НачалоПериода - Дата - начало периода загрузки; -// * КонецПериода - Дата - конец периода загрузки; -// * СписокВалют - ТаблицаЗначений - загружаемые валюты: -// ** Валюта - СправочникСсылка.Валюты; -// ** КодВалюты - Строка. -// АдресРезультата - Строка - адрес во временном хранилище для помещения результатов загрузки. -// -Процедура ЗагрузитьАктуальныйКурс(ПараметрыЗагрузки = Неопределено, АдресРезультата = Неопределено) Экспорт - - Если Метаданные.Обработки.Найти("ЗагрузкаКурсовВалют") <> Неопределено Тогда - Обработки["ЗагрузкаКурсовВалют"].ЗагрузитьАктуальныйКурс(ПараметрыЗагрузки, АдресРезультата); - КонецЕсли; - -КонецПроцедуры - #КонецОбласти #Область СлужебныйПрограммныйИнтерфейс @@ -183,7 +164,7 @@ КонецПроцедуры -// См. ОбщегоНазначенияПереопределяемый.ПараметрыРаботыКлиентаПриЗапуске. +// См. ОбщегоНазначенияПереопределяемый.ПриДобавленииПараметровРаботыКлиентаПриЗапуске. Процедура ПриДобавленииПараметровРаботыКлиентаПриЗапуске(Параметры) Экспорт Если ОбщегоНазначения.РазделениеВключено() Или ОбщегоНазначенияПовтИсп.ЭтоАвтономноеРабочееМесто() Тогда @@ -264,30 +245,6 @@ КонецПроцедуры -#КонецОбласти - -#Область СлужебныеПроцедурыИФункции - -// Возвращает список разрешений для загрузки курсов валют с сайта 1С. -// -// Возвращаемое значение: -// Массив. -// -Функция Разрешения() - - Разрешения = Новый Массив; - ИмяОбработки = "ЗагрузкаКурсовВалют"; - Если Метаданные.Обработки.Найти(ИмяОбработки) <> Неопределено Тогда - Обработки[ИмяОбработки].ДобавитьРазрешения(Разрешения); - КонецЕсли; - - Возврат Разрешения; - -КонецФункции - -//////////////////////////////////////////////////////////////////////////////// -// Экспортные служебные процедуры и функции. - // Проверяет наличие установленного курса и кратности валюты на 1 января 1980 года. // В случае отсутствия устанавливает курс и кратность равными единице. // @@ -314,6 +271,38 @@ КонецПроцедуры +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Процедура ЗагрузитьАктуальныйКурс(ПараметрыЗагрузки = Неопределено, АдресРезультата = Неопределено) Экспорт + + Если Метаданные.Обработки.Найти("ЗагрузкаКурсовВалют") <> Неопределено Тогда + Обработки["ЗагрузкаКурсовВалют"].ЗагрузитьАктуальныйКурс(ПараметрыЗагрузки, АдресРезультата); + КонецЕсли; + +КонецПроцедуры + +// Возвращает список разрешений для загрузки курсов валют с сайта 1С. +// +// Возвращаемое значение: +// Массив. +// +Функция Разрешения() + + Разрешения = Новый Массив; + ИмяОбработки = "ЗагрузкаКурсовВалют"; + Если Метаданные.Обработки.Найти(ИмяОбработки) <> Неопределено Тогда + Обработки[ИмяОбработки].ДобавитьРазрешения(Разрешения); + КонецЕсли; + + Возврат Разрешения; + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Экспортные служебные процедуры и функции. + // Возвращает массив валют, курсы которых загружаются с сайта 1С. // Функция ЗагружаемыеВалюты() Экспорт diff --git a/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиПереопределяемый/Module.bsl b/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиПереопределяемый/Module.bsl index f532f110d..4c00b3c1b 100644 --- a/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиПереопределяемый/Module.bsl @@ -5,6 +5,8 @@ // Параметры: // Настройки - Структура - настройки подсистемы: // * ДоступноПолучениеПисем - Булево - показывать настройки получения писем в учетных записях. +// Значение по умолчанию: для базовых версий конфигурации - Ложь, +// для остальных - Истина. // Процедура ПриОпределенииНастроек(Настройки) Экспорт diff --git a/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиСлужебный/Module.bsl b/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиСлужебный/Module.bsl index 2ad6eb962..bf9bc7dfe 100644 --- a/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиСлужебный/Module.bsl +++ b/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиСлужебный/Module.bsl @@ -160,6 +160,14 @@ КонецФункции +// Возвращает тип текстов электронных писем по наименованию. +// +Функция ТипТекстовЭлектронныхПисем(Наименование) Экспорт + + Возврат Перечисления.ТипыТекстовЭлектронныхПисем[Наименование]; + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Обработчики событий подсистем конфигурации. @@ -218,6 +226,25 @@ Обработчик.Процедура = "РаботаСПочтовымиСообщениямиСлужебный.ЗаполнитьНовыеРеквизитыУчетныхЗаписей"; Обработчик.Версия = "2.2.2.5"; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Взаимодействия") Тогда + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "2.4.1.1"; + Обработчик.Процедура = "Справочники.УчетныеЗаписиЭлектроннойПочты.ОбработатьДанныеДляПереходаНаНовуюВерсию"; + Обработчик.РежимВыполнения = "Отложенно"; + Обработчик.Идентификатор = Новый УникальныйИдентификатор("d57f7a36-46ca-4a52-baab-db960e3d376d"); + Обработчик.Комментарий = НСтр("ru = 'Обновляет сведения о персональных учетных записях электронной почты. + |До завершения обработки список персональных учетных записей электронной почты может быть неполным.'"); + Обработчик.ОчередьОтложеннойОбработки = 1; + Обработчик.ПроцедураЗаполненияДанныхОбновления = "Справочники.УчетныеЗаписиЭлектроннойПочты.ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию"; + Обработчик.ИзменяемыеОбъекты = "Справочник.УчетныеЗаписиЭлектроннойПочты"; + + ЧитаемыеОбъекты = Новый Массив; + ЧитаемыеОбъекты.Добавить("Справочник.УчетныеЗаписиЭлектроннойПочты"); + МодульВзаимодействия = ОбщегоНазначения.ОбщийМодуль("Взаимодействия"); + МодульВзаимодействия.ПриПолученииЧитаемыхОбъектовОбработчикаОбновленияУчетныхЗаписейЭлектроннойПочты(ЧитаемыеОбъекты); + + Обработчик.ЧитаемыеОбъекты = СтрСоединить(ЧитаемыеОбъекты, ","); + КонецЕсли; КонецПроцедуры // См. УправлениеДоступомПереопределяемый.ПриЗаполненииВидовДоступа. diff --git a/SSL/src/CommonModules/РаботаСФайлами/Module.bsl b/SSL/src/CommonModules/РаботаСФайлами/Module.bsl index 38080de73..7337be5ed 100644 --- a/SSL/src/CommonModules/РаботаСФайлами/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайлами/Module.bsl @@ -9,7 +9,7 @@ // Если двоичные данные файла не найдены в информационной базе или в томах, будет вызвано исключение. // // Параметры: -// ПрисоединенныйФайл - СправочникСсылка - ссылка на справочник с именем "*ПрисоединенныеФайлы". +// ПрисоединенныйФайл - ОпределяемыйТип.ПрисоединенныйФайл - Ссылка на элемент справочника с файлом. // // Возвращаемое значение: // ДвоичныеДанные - двоичные данные присоединенного файла. @@ -80,35 +80,36 @@ КонецФункции -// Возвращает структуру данных файла. Используется в различных командах работы с файлами, -// и как значение параметра ДанныеФайла других процедур и функций. +// Возвращает структурированную информацию о файле. Используется в различных командах работы с файлами, +// и как значение параметра ДанныеФайла в других процедурах и функциях. // // Параметры: -// ПрисоединенныйФайл - СправочникСсылка - ссылка на справочник с именем "*ПрисоединенныеФайлы". +// ПрисоединенныйФайл - ОпределяемыйТип.ПрисоединенныйФайл - Ссылка на элемент справочника с файлом. // -// ИдентификаторФормы - УникальныйИдентификатор - идентификатор формы, который -// используется при получении двоичных данных файла. +// ИдентификаторФормы - УникальныйИдентификатор - Уникальный идентификатор формы, +// во временное хранилище которой надо поместить файл и +// вернуть адрес в свойстве СсылкаНаДвоичныеДанныеФайла. // -// ПолучатьСсылкуНаДвоичныеДанные - Булево - если передать Ложь, то ссылка на двоичные данные +// ПолучатьСсылкуНаДвоичныеДанные - Булево - если передать Ложь, то ссылка на двоичные данные в СсылкаНаДвоичныеДанныеФайла // не будет получена, что существенно ускорит выполнение для больших двоичных данных. // -// ДляРедактирования - Булево - если указать Истина, то свободный файл будет захвачен для редактирования. +// ДляРедактирования - Булево - если указать Истина, то файл будет захвачен для редактирования. // // Возвращаемое значение: // Структура - со свойствами: -// * СсылкаНаДвоичныеДанныеФайла - Строка - адрес во временном хранилище. -// * ОтносительныйПуть - Строка - относительный путь файла. -// * ДатаМодификацииУниверсальная - Дата - дата изменения фала. -// * ИмяФайла - Строка - имя файла без точки. -// * Наименование - Строка - наименование файла в справочнике хранения файлов. -// * Расширение - Строка - расширение файла без точки. -// * Размер - Число - размер файла. +// * СсылкаНаДвоичныеДанныеФайла - Строка - Адрес во временном хранилище, по которому помещены данные. +// * ОтносительныйПуть - Строка - Относительный путь файла. +// * ДатаМодификацииУниверсальная - Дата - Дата изменения фала. +// * ИмяФайла - Строка - Имя файла без точки. +// * Наименование - Строка - Наименование файла в справочнике хранения файлов. +// * Расширение - Строка - Расширение файла без точки. +// * Размер - Число - Размер файла. // * Редактирует - СправочникСсылка.Пользователи, СправочникСсылка.ВнешниеПользователи, -// Неопределено - ссылка на пользователя, занявшего файл. -// * ПодписанЭП - Булево - Истина, если файл подписан. -// * Зашифрован - Булево - Истина, если файл зашифрован. -// * ФайлРедактируется - Булево - Истина, если файл занят для редактирования. -// * ФайлРедактируетТекущийПользователь - Булево - Истина, если файл занят для редактирования текущим пользователем. +// Неопределено - Ссылка на пользователя, занявшего файл. +// * ПодписанЭП - Булево - Признак, что файл подписан. +// * Зашифрован - Булево - Признак, что файл зашифрован. +// * ФайлРедактируется - Булево - Признак, что файл занят для редактирования. +// * ФайлРедактируетТекущийПользователь - Булево - Признак, что файл занят для редактирования текущим пользователем. // Функция ДанныеФайла(Знач ПрисоединенныйФайл, Знач ИдентификаторФормы = Неопределено, @@ -117,7 +118,7 @@ ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(ПрисоединенныйФайл); - ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("РаботаСФайлами.ДанныеФайла", "ПрисоединенныйФайл", + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("РаботаСФайлами.ДанныеФайла", "ПрисоединенныйФайл", ПрисоединенныйФайл, Метаданные.ОпределяемыеТипы.ПрисоединенныйФайл.Тип); ФайлОбъект = ПрисоединенныйФайл.ПолучитьОбъект(); @@ -193,36 +194,38 @@ КонецФункции -// Заполняет массив ссылками на файлы объекта. +// Находит все присоединенные файлы к объекту и добавляет ссылки на них в свойство Файлы. // // Параметры: -// Объект - Ссылка - ссылка на объект, который может содержать присоединенные файлы. -// МассивФайлов - Массив - массив в который будут добавлены ссылки на файлы объекта: -// * СправочникСсылка - (возвращаемое значение) ссылка на присоединенный файл. +// ВладелецФайла - ОпределяемыйТип.ВладелецПрисоединенныхФайлов - Ссылка на объект-владелец файлов. +// Файлы - Массив - Массив в который будут добавлены ссылки на файлы объекта: +// * ОпределяемыйТип.ПрисоединенныйФайл - (возвращаемое значение), +// ссылка на элемента справочника с файлом. // -Процедура ЗаполнитьПрисоединенныеФайлыКОбъекту(Знач Объект, Знач МассивФайлов) Экспорт +Процедура ЗаполнитьПрисоединенныеФайлыКОбъекту(Знач ВладелецФайла, Знач Файлы) Экспорт - Если ТипЗнч(Объект) = Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных") Тогда + Если ТипЗнч(ВладелецФайла) = Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных") Тогда Возврат; КонецЕсли; ТипыВладельцев = Метаданные.РегистрыСведений.НаличиеФайлов.Измерения.ОбъектСФайлами.Тип.Типы(); - Если ТипыВладельцев.Найти(ТипЗнч(Объект)) <> Неопределено Тогда + Если ТипыВладельцев.Найти(ТипЗнч(ВладелецФайла)) <> Неопределено Тогда - МассивФайловЛокальный = РаботаСФайламиСлужебный.ВсеПодчиненныеФайлы(Объект); + МассивФайловЛокальный = РаботаСФайламиСлужебный.ВсеПодчиненныеФайлы(ВладелецФайла); Для Каждого СсылкаНаФайл Из МассивФайловЛокальный Цикл - МассивФайлов.Добавить(СсылкаНаФайл); + Файлы.Добавить(СсылкаНаФайл); КонецЦикла; КонецЕсли; КонецПроцедуры -// Возвращает новую ссылку на файл для указанного владельца, -// которую можно использовать, а затем передать в функцию ДобавитьФайл. +// Возвращает новую ссылку на файл для указанного владельца файла. +// В частности ссылка используется при добавление файла в функции ДобавитьФайл. // // Параметры: -// ВладелецФайлов - Ссылка - ссылка на объект, к которому добавляется файл. +// ВладелецФайлов - ОпределяемыйТип.ВладелецПрисоединенныхФайлов - Папка файлов или объект, к которому +// требуется прикрепить добавляемый файл. // // ИмяСправочника - Неопределено - вычислить справочник по владельцу (допустимо, // когда справочник только один, иначе будет вызвано исключение). @@ -231,7 +234,7 @@ // от стандартного <ИмяВладельца>ПрисоединенныеФайлы. // // Возвращаемое значение: -// СправочникСсылка - ссылка на новый еще несозданный присоединенный файл. +// ОпределяемыйТип.ПрисоединенныйФайл - Ссылка на новый еще не записанный элемент справочника с файлом. // Функция НоваяСсылкаНаФайл(ВладелецФайлов, ИмяСправочника = Неопределено) Экспорт @@ -244,24 +247,24 @@ КонецФункции -// Обновляет свойства файла без учета версий- двоичные данные, текст, дату изменения, +// Обновляет свойства файла без учета версий - двоичные данные, текст, дату изменения, // а также другие необязательные свойства. Использовать только для файлов, которые не хранят версии. // // Параметры: -// ПрисоединенныйФайл - СправочникСсылка - ссылка на справочник с именем "*ПрисоединенныеФайлы". +// ПрисоединенныйФайл - ОпределяемыйТип.ПрисоединенныйФайл - Ссылка на элемент справочника с файлом. // ИнформацияОФайле - Структура - со свойствами: // <обязательные> -// * АдресФайлаВоВременномХранилище - Строка - адрес новых двоичных данных файла. -// * АдресВременногоХранилищаТекста - Строка - адрес новых двоичных данных текста, +// * АдресФайлаВоВременномХранилище - Строка - Адрес новых двоичных данных файла. +// * АдресВременногоХранилищаТекста - Строка - Адрес новых двоичных данных текста, // извлеченного из файла. // <необязательные> -// * ИмяБезРасширения - Строка - если свойство не указано или не заполнено, +// * ИмяБезРасширения - Строка - Если свойство не указано или не заполнено, // тогда не будет изменено. -// * ДатаМодификацииУниверсальная - Дата - дата последнего изменения файла, если +// * ДатаМодификацииУниверсальная - Дата - Дата последнего изменения файла, если // свойство не указано или не заполнено, тогда будет // установлена текущая дата сеанса. -// * Расширение - Строка - новое расширение файла. -// * Редактирует - Ссылка - новый пользователь, редактирующий файл. +// * Расширение - Строка - Новое расширение файла. +// * Редактирует - Ссылка - Новый пользователь, редактирующий файл. // Процедура ОбновитьФайл(Знач ПрисоединенныйФайл, Знач ИнформацияОФайле) Экспорт @@ -272,10 +275,11 @@ // Возвращает имя формы объекта присоединенных файлов по владельцу. // // Параметры: -// ВладелецФайлов - Ссылка - ссылка на объект, по которому определяется имя формы. +// ВладелецФайлов - ОпределяемыйТип.ВладелецПрисоединенныхФайлов - Папка файлов или объект, к которому +// требуется прикрепить добавляемый файл. // // Возвращаемое значение: -// Строка - имя формы объекта присоединенных файлов по владельцу. +// Строка - Полное имя формы объекта присоединенных файлов по владельцу. // Функция ИмяФормыОбъектаФайловПоВладельцу(Знач ВладелецФайлов) Экспорт @@ -299,12 +303,13 @@ КонецФункции -// Определяет наличие хранилища присоединенных файлов у объекта -// право Добавление в хранилище (справочник присоединенных файлов). +// Определяет возможность прикрепления добавляемого файла к владельцу файлов. // // Параметры: -// ВладелецФайлов - Ссылка - ссылка на объект для которого выполняется проверка. -// ИмяСправочника - Строка - если требуется проверка добавления в указанное хранилище. +// ВладелецФайлов - ОпределяемыйТип.ВладелецПрисоединенныхФайлов - Папка файлов или объект, к которому +// требуется прикрепить добавляемый файл. +// ИмяСправочника - Строка - Если указано, то выполняется проверка добавления в определенное хранилище файлов. +// Иначе имя справочника будет определено по владельцу. // // Возвращаемое значение: // Булево - если Истина, тогда к объекту может присоединять файлы. @@ -324,18 +329,19 @@ КонецФункции -// Создает карточку Файла в БД вместе с версией. +// Добавляет к указанному владельцу файлов новый файл на основании файла из файловой системы. +// Если владельцу файлов поддерживает хранение версий, то будет создана первая версия файла. // // Параметры: -// Владелец - Ссылка - владелец файла, который будет установлен в реквизит ВладелецФайла у созданного файла. -// -// ПутьКФайлуНаДиске - Строка - полный путь к файлу на диске, включающий имя и расширение файла. +// ВладелецФайлов - ОпределяемыйТип.ВладелецПрисоединенныхФайлов - Папка файлов или объект, к которому +// требуется прикрепить добавляемый файл. +// ПутьКФайлуНаДиске - Строка - Полный путь к файлу на диске, включающий имя и расширение файла. // Файл должен находиться на сервере. // // Возвращаемое значение: -// СправочникСсылка.Файлы - созданный файл. +// ОпределяемыйТип.ПрисоединенныйФайл - Ссылка на элемент справочника с созданным файлом. // -Функция СоздатьФайлНаОсновеФайлаНаДиске(Владелец, ПутьКФайлуНаДиске) Экспорт +Функция СоздатьФайлНаОсновеФайлаНаДиске(ВладелецФайлов, ПутьКФайлуНаДиске) Экспорт Файл = Новый Файл(ПутьКФайлуНаДиске); @@ -358,7 +364,7 @@ СведенияОФайле = РаботаСФайламиКлиентСервер.СведенияОФайле("ФайлСВерсией", Файл); СведенияОФайле.АдресВременногоХранилищаФайла = АдресВременногоХранилищаФайла; СведенияОФайле.АдресВременногоХранилищаТекста = АдресВременногоХранилищаТекста; - Возврат РаботаСФайламиСлужебныйВызовСервера.СоздатьФайлСВерсией(Владелец, СведенияОФайле); + Возврат РаботаСФайламиСлужебныйВызовСервера.СоздатьФайлСВерсией(ВладелецФайлов, СведенияОФайле); КонецФункции @@ -447,16 +453,17 @@ // // Параметры: // ПараметрыФайла - Структура - Параметры с данными файла. -// * Автор - Ссылка - пользователь, создавший файл. -// * ВладелецФайлов - Ссылка - объект, к которому добавляется файл. -// * ИмяБезРасширения - Строка - имя файла без расширения. -// * РасширениеБезТочки - Строка - расширение файла (без точки вначале). -// * ВремяИзмененияУниверсальное - Дата - дата и время изменения файла (UTC+0:00), -// если не указана, тогда используется ТекущаяУниверсальнаяДата(). -// ГруппаФайлов - Ссылка - группа справочника с файлами, в которую будет добавлен новый файл. -// АдресФайлаВоВременномХранилище - Строка - адрес, указывающий на двоичные данные во временном хранилище. -// АдресВременногоХранилищаТекста - Строка - адрес, указывающий на извлеченный текст из файла во временном хранилище. -// Описание - Строка - текстовое описание файла. +// * Автор - Ссылка - Пользователь, создавший файл. +// * ВладелецФайлов - ОпределяемыйТип.ВладелецПрисоединенныхФайлов - Папка файлов или объект, к которому +// требуется прикрепить добавляемый файл. +// * ИмяБезРасширения - Строка - Имя файла без расширения. +// * РасширениеБезТочки - Строка - Расширение файла (без точки вначале). +// * ВремяИзмененияУниверсальное - Дата - Дата и время изменения файла (UTC+0:00), +// если не указана, тогда используется ТекущаяУниверсальнаяДата(). +// ГруппаФайлов - Ссылка - Группа справочника с файлами, в которую будет добавлен новый файл. +// АдресФайлаВоВременномХранилище - Строка - Адрес, указывающий на двоичные данные во временном хранилище. +// АдресВременногоХранилищаТекста - Строка - Адрес, указывающий на извлеченный текст из файла во временном хранилище. +// Описание - Строка - Текстовое описание файла. // // НоваяСсылкаНаФайл - Неопределено - создать новую ссылку на файл в стандартном справочнике // или в нестандартном, но единственном справочнике. Когда у владельца файла несколько @@ -465,9 +472,9 @@ // - Ссылка - ссылка на элемент справочника хранения файлов, // которую следует использовать для добавляемого файла. // Должна соответствовать одному из типов справочников хранения файлов владельца -// файлов. +// файлов. Ссылка может быть получена функцией НоваяСсылкаНаФайл. // Возвращаемое значение: -// СправочникСсылка - ссылка на созданный присоединенный файл. +// ОпределяемыйТип.ПрисоединенныйФайл - Ссылка на созданный присоединенный файл. // Функция ДобавитьФайл(ПараметрыФайла, Знач АдресФайлаВоВременномХранилище, @@ -796,6 +803,158 @@ КонецФункции +// Переносит файлы из справочника Файлы в присоединенные файлы при объекте-владельце файлов и помечает +// перенесенные файлы к удалению. +// +// Для использования в процедурах обновления ИБ, если выполняется переход от использования +// хранения файлов в справочнике Файлы на хранение файлов как присоединенных при объекте-владельце файлов. +// Выполняется последовательно для каждого элемента объекта-владельца файлов +// (элемента справочника, ПВХ, документа и т.п.). +// +// Параметры: +// ВладелецФайлов - ОпределяемыйТип.ВладелецПрисоединенныхФайлов - Объект-владелец приемник файлов. +// ИмяСправочника - Строка - если требуется конвертация в указанное хранилище. +// +// Возвращаемое значение: +// Соответствие - файлы: +// * Ключ - СправочникСсылка.Файлы - Перенесенный файл, который помечен на удаление после переноса. +// * Значение - ОпределяемыйТип.ПрисоединенныйФайл - Созданный файл. +// +Функция СконвертироватьФайлыВПрисоединенные(Знач ВладелецФайлов, ИмяСправочника = Неопределено) Экспорт + + Результат = Новый Соответствие; + Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда + Возврат Результат; + КонецЕсли; + + ЗаголовокОшибки = НСтр("ru = 'Ошибка при конвертации присоединенных файлов подсистемы Работа с файлами + |в присоединенные файлы подсистемы Присоединенные файлы.'"); + + ИмяСправочника = РаботаСФайламиСлужебный.ИмяСправочникаХраненияФайлов( + ВладелецФайлов, ИмяСправочника, ЗаголовокОшибки); + + УстановитьПривилегированныйРежим(Истина); + + ФайлыИсточник = РаботаСФайламиСлужебныйВызовСервера.ПолучитьВсеПодчиненныеФайлы(ВладелецФайлов); + МенеджерПрисоединенныхФайлов = Справочники[ИмяСправочника]; + + НачатьТранзакцию(); + Попытка + + Для Каждого ФайлИсточник Из ФайлыИсточник Цикл + ФайлИсточникОбъект = ФайлИсточник.ПолучитьОбъект(); + // Установить исключительную блокировку на файл-источник, + // для того чтобы гарантировать, что в момент записи значения его реквизитов не изменится.. + БлокировкаДанных = Новый БлокировкаДанных; + ЭлементБлокировкиДанных = БлокировкаДанных.Добавить(Метаданные.Справочники.Файлы.ПолноеИмя()); + ЭлементБлокировкиДанных.УстановитьЗначение("Ссылка", ФайлИсточникОбъект.Ссылка); + БлокировкаДанных.Заблокировать(); + + Если ЗначениеЗаполнено(ФайлИсточникОбъект.ТекущаяВерсия) Тогда + ТекущаяВерсияОбъект = ФайлИсточникОбъект.ТекущаяВерсия.ПолучитьОбъект(); + // Установить исключительную блокировку на текущую версию файла-источник, + // для того чтобы гарантировать, что в момент записи значения его реквизитов не изменится.. + БлокировкаДанных = Новый БлокировкаДанных; + ЭлементБлокировкиДанных = БлокировкаДанных.Добавить(Метаданные.Справочники.ВерсииФайлов.ПолноеИмя()); + ЭлементБлокировкиДанных.УстановитьЗначение("Ссылка", ТекущаяВерсияОбъект.Ссылка); + БлокировкаДанных.Заблокировать(); + Иначе + ТекущаяВерсияОбъект = ФайлИсточникОбъект; + КонецЕсли; + + СсылкаНового = МенеджерПрисоединенныхФайлов.ПолучитьСсылку(); + ПрисоединенныйФайл = МенеджерПрисоединенныхФайлов.СоздатьЭлемент(); + ПрисоединенныйФайл.УстановитьСсылкуНового(СсылкаНового); + + ПрисоединенныйФайл.ВладелецФайла = ВладелецФайлов; + ПрисоединенныйФайл.Наименование = ФайлИсточникОбъект.Наименование; + ПрисоединенныйФайл.Автор = ФайлИсточникОбъект.Автор; + ПрисоединенныйФайл.ДатаМодификацииУниверсальная = ТекущаяВерсияОбъект.ДатаМодификацииУниверсальная; + ПрисоединенныйФайл.ДатаСоздания = ФайлИсточникОбъект.ДатаСоздания; + + ПрисоединенныйФайл.Зашифрован = ФайлИсточникОбъект.Зашифрован; + ПрисоединенныйФайл.Изменил = ТекущаяВерсияОбъект.Автор; + ПрисоединенныйФайл.Описание = ФайлИсточникОбъект.Описание; + ПрисоединенныйФайл.ПодписанЭП = ФайлИсточникОбъект.ПодписанЭП; + ПрисоединенныйФайл.Размер = ТекущаяВерсияОбъект.Размер; + + ПрисоединенныйФайл.Расширение = ТекущаяВерсияОбъект.Расширение; + ПрисоединенныйФайл.Редактирует = ФайлИсточникОбъект.Редактирует; + ПрисоединенныйФайл.ТекстХранилище = ФайлИсточникОбъект.ТекстХранилище; + ПрисоединенныйФайл.ТипХраненияФайла = ТекущаяВерсияОбъект.ТипХраненияФайла; + ПрисоединенныйФайл.ПометкаУдаления = ФайлИсточникОбъект.ПометкаУдаления; + + // Если файл хранится на томе - делается ссылка на существующий файл. + ПрисоединенныйФайл.Том = ТекущаяВерсияОбъект.Том; + ПрисоединенныйФайл.ПутьКФайлу = ТекущаяВерсияОбъект.ПутьКФайлу; + + Для Каждого СертификатШифрованияСтрока Из ФайлИсточникОбъект.УдалитьСертификатыШифрования Цикл + НоваяСтрока = ПрисоединенныйФайл.УдалитьСертификатыШифрования.Добавить(); + ЗаполнитьЗначенияСвойств(НоваяСтрока, СертификатШифрованияСтрока); + КонецЦикла; + + Если ЗначениеЗаполнено(ФайлИсточникОбъект.ТекущаяВерсия) Тогда + Для Каждого ЭПСтрока Из ТекущаяВерсияОбъект.УдалитьЭлектронныеПодписи Цикл + НоваяСтрока = ПрисоединенныйФайл.УдалитьЭлектронныеПодписи.Добавить(); + ЗаполнитьЗначенияСвойств(НоваяСтрока, ЭПСтрока); + КонецЦикла; + КонецЕсли; + ПрисоединенныйФайл.Заполнить(Неопределено); + + ПрисоединенныйФайл.Записать(); + + Если ПрисоединенныйФайл.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда + ХранилищеФайла = ХранилищеФайлаИзИнформационнойБазы(ТекущаяВерсияОбъект.Ссылка); + + // Если двоичные данных файла отсутствуют в информационной базе, то пропускаем их перенос, но карточку файла оставляем. + // Это возможно после выполнения очистки ненужных файлов или вследствие ошибок некорректного обмена или импорта. + Если ХранилищеФайла <> Неопределено Тогда + МенеджерЗаписи = РегистрыСведений.ДвоичныеДанныеФайлов.СоздатьМенеджерЗаписи(); + МенеджерЗаписи.Файл = СсылкаНового; + МенеджерЗаписи.Прочитать(); + МенеджерЗаписи.Файл = СсылкаНового; + МенеджерЗаписи.ДвоичныеДанныеФайла = Новый ХранилищеЗначения(ХранилищеФайла.Получить(), Новый СжатиеДанных(9)); + МенеджерЗаписи.Записать(); + КонецЕсли; + + КонецЕсли; + + ТекущаяВерсияОбъект.ПометкаУдаления = Истина; + ФайлИсточникОбъект.ПометкаУдаления = Истина; + + // Удаление ссылок на том в старом файле, что бы при удалении, файлы остались на месте. + Если ТекущаяВерсияОбъект.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда + ТекущаяВерсияОбъект.ПутьКФайлу = ""; + ТекущаяВерсияОбъект.Том = Справочники.ТомаХраненияФайлов.ПустаяСсылка(); + ФайлИсточникОбъект.ПутьКФайлу = ""; + ФайлИсточникОбъект.Том = ""; + Если ЗначениеЗаполнено(ФайлИсточникОбъект.ТекущаяВерсия) Тогда + РаботаСФайламиСлужебный.ПометитьНаУдалениеВерсииФайла(ФайлИсточникОбъект.Ссылка, ТекущаяВерсияОбъект.Ссылка); + КонецЕсли; + КонецЕсли; + + Если ЗначениеЗаполнено(ФайлИсточникОбъект.ТекущаяВерсия) Тогда + ТекущаяВерсияОбъект.ДополнительныеСвойства.Вставить("КонвертацияФайлов", Истина); + ТекущаяВерсияОбъект.Записать(); + КонецЕсли; + + ФайлИсточникОбъект.ДополнительныеСвойства.Вставить("КонвертацияФайлов", Истина); + ФайлИсточникОбъект.Записать(); + Результат.Вставить(ФайлИсточникОбъект.Ссылка, СсылкаНового); + + КонецЦикла; + + ЗафиксироватьТранзакцию(); + + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + + Возврат Результат; + +КонецФункции + // Конвертирует файлы из подсистемы Работа с файлами в подсистему Присоединенные файлы. // // Для использования в процедурах обновления ИБ, если выполняется переход от использования @@ -804,7 +963,7 @@ // (элемента справочника, ПВХ, документа и т.п.). // // Параметры: -// ВладелецФайлов - Ссылка - ссылка на объект для которого выполняется конвертация. +// ВладелецФайлов - Ссылка - ссылка на объект, для которого выполняется конвертация. // ИмяСправочника - Строка - если требуется конвертация в указанное хранилище. // Процедура ИзменитьСправочникХраненияФайлов(Знач ВладелецФайлов, ИмяСправочника = Неопределено) Экспорт @@ -954,7 +1113,8 @@ //////////////////////////////////////////////////////////////////////////////// // Работа с томами файлов -// Есть ли хоть один том хранения файлов. +// Определяет наличие активных томов хранения файлов. +// Если есть хоть один том хранения файлов, то будет возвращена Истина. // // Возвращаемое значение: // Булево - если Истина, тогда существует хотя бы один работающий том. @@ -981,22 +1141,23 @@ // Используется совместно с функцией СконвертироватьФайлыВПрисоединенные. // // Параметры: -// ТаблицаВладельцевФайлов - Строка - полное имя объекта метаданных, -// который может владеть присоединенными файлами. +// ИмяТаблицыВладельцевФайлов - Строка - полное имя объекта метаданных, +// который может являться владельцем присоединенными файлами. // // Возвращаемое значение: // Массив - со значениями: -// * Ссылка - ссылка на объект у которого есть хотя бы один присоединенный файл. +// * Ссылка - Ссылка на объект, у которого есть хотя бы один присоединенный файл. // -Функция СсылкиНаОбъектыСФайлами(Знач ТаблицаВладельцевФайлов) Экспорт +Функция СсылкиНаОбъектыСФайлами(Знач ИмяТаблицыВладельцевФайлов) Экспорт - Возврат РаботаСФайламиСлужебный.СсылкиНаОбъектыСФайлами(ТаблицаВладельцевФайлов); + Возврат РаботаСФайламиСлужебный.СсылкиНаОбъектыСФайлами(ИмяТаблицыВладельцевФайлов); КонецФункции -// Добавляет подпись к файлу. +// Добавляет электронную подпись к файлу. +// // Параметры: -// ПрисоединенныйФайл - Ссылка - ссылка на присоединенный файл. +// ПрисоединенныйФайл - ОпределяемыйТип.ПрисоединенныйФайл - Ссылка на элемент справочника с файлом. // // СвойстваПодписи - Структура - содержит данные, которые возвращает процедура Подписать // общего модуля ЭлектроннаяПодписьКлиент в качестве результата. diff --git a/SSL/src/CommonModules/РаботаСФайламиКлиент/Module.bsl b/SSL/src/CommonModules/РаботаСФайламиКлиент/Module.bsl index 41bcdb984..406d6c59e 100644 --- a/SSL/src/CommonModules/РаботаСФайламиКлиент/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайламиКлиент/Module.bsl @@ -9,13 +9,13 @@ // Команды работы с файлами // Открывает файл для просмотра или редактирования. -// Если файл открывается для просмотра, тогда получает файл в рабочий каталог пользователя, +// Если файл открывается для просмотра, тогда получает файл в рабочий каталог пользователя, // при этом ищет файл в рабочем каталоге и предлагает открыть существующий или получить файл с сервера. -// Если файл открывается для редактирования, тогда открывает файл в рабочем каталоге (если есть) или +// Если файл открывается для редактирования, тогда открывает файл в рабочем каталоге (если есть) или // получает его с сервера. // // Параметры: -// ДанныеФайла - Структура - данные файла. Описание см. РаботаСФайлами.ДанныеФайла. +// ДанныеФайла - Структура - Данные файла. Описание см. РаботаСФайлами.ДанныеФайла. // ДляРедактирования - Булево - Истина, если файл открывается для редактирования, иначе Ложь. // Процедура ОткрытьФайл(Знач ДанныеФайла, Знач ДляРедактирования = Ложь) Экспорт @@ -28,10 +28,11 @@ КонецПроцедуры -// Открывает каталог на локальном компьютере в котором размещен этот файл. +// Открывает в стандартной программе просмотра (проводнике) каталог на компьютере, +// в котором размещен указанный файл. // // Параметры: -// ДанныеФайла - Структура - структура с данными файла. Описание см. РаботаСФайлами.ДанныеФайла. +// ДанныеФайла - Структура - данные файла. Описание см. РаботаСФайлами.ДанныеФайла. // Процедура ОткрытьКаталогФайла(ДанныеФайла) Экспорт @@ -39,21 +40,21 @@ КонецПроцедуры -// Обработчик команды добавления файлов. -// Предлагает пользователю выбирать файлы в диалоге выбора файлов и -// пытается поместить выбранные файлы в хранилище файлов, когда: +// Открывает диалог выбора файлов для помещения в программу одного или нескольких файлов. +// При этом проверяются необходимые условия: // - размер файла не превышает максимально допустимый, // - файл имеет допустимое расширение, // - имеется свободное место в томе (при хранении файлов в томах), // - прочие условия. // // Параметры: -// ВладелецФайла - Ссылка - владелец файла. -// ИдентификаторФормы - УникальныйИдентификатор - идентификатор управляемой формы. -// Фильтр - Строка - необязательный параметр, -// позволяет задать фильтр выбираемого файла, -// например, картинки для номенклатуры. -// ГруппаФайлов - Ссылка - группа справочника с файлами, в которую будет добавлен новый файл. +// ВладелецФайла - ОпределяемыйТип.ВладелецПрисоединенныхФайлов - Папка файлов или объект, к которому +// требуется прикрепить добавляемый файл. +// ИдентификаторФормы - УникальныйИдентификатор - Уникальный идентификатор формы, во временное хранилище +// которой будет помещен файл. +// Фильтр - Строка - Фильтр выбираемого файла, например, картинки для номенклатуры. +// ГруппаФайлов - ОпределяемыйТип.ПрисоединенныйФайл - Группа справочника с файлами, в которую будет +// добавлен новый файл. // Процедура ДобавитьФайлы(Знач ВладелецФайла, Знач ИдентификаторФормы, Знач Фильтр = "", ГруппаФайлов = Неопределено) Экспорт @@ -68,7 +69,7 @@ КонецПроцедуры -// Создает новый файл интерактивно. +// Открывает диалог выбора файлов для помещения в программу одного выбранного файла. // // Параметры: // ОбработчикРезультата - ОписаниеОповещения - Содержит описание процедуры, вызов которой будет произведен @@ -80,22 +81,21 @@ // ** ТекстОшибки - Строка - Текст ошибки, если файл не был добавлен. // * ДополнительныеПараметры - значение, которое было указано при создании объекта оповещения. // -// ВладелецФайла - ЛюбаяСсылка - определяет группу, в которой создается Элемент. -// -// ФормаВладелец - УправляемаяФорма - форма, из которой вызвано создание файла. -// +// ВладелецФайла - ОпределяемыйТип.ВладелецПрисоединенныхФайлов - Папка файлов или объект, к которому +// требуется прикрепить добавляемый файл. +// ФормаВладелец - УправляемаяФорма - Форма, из которой вызвано создание файла. // РежимСоздания - Неопределено, Число - режим создания файла: -// - Неопределено - значение по умолчанию. Показать диалог выбора режима создания файла. +// - Неопределено - Показать диалог выбора режима создания файла. // - Число - Создать файл указанным способом: -// * 1 - из шаблона (копированием другого файла), -// * 2 - с диска (из файловой системы клиента), +// * 1 - из шаблона (копированием другого файла); +// * 2 - с диска (из файловой системы клиента); // * 3 - со сканера. // // НеОткрыватьКарточку - Булево - действие после создания: -// * Ложь - Значение по умолчанию. Открывать карточку файла после создания. +// * Ложь - Открывать карточку файла после создания. // * Истина - Не открывать карточку файла после создания. // -Процедура ДобавитьФайл(ОбработчикРезультата, ВладелецФайла, ФормаВладелец, РежимСоздания = Неопределено, +Процедура ДобавитьФайл(ОбработчикРезультата, ВладелецФайла, ФормаВладелец, РежимСоздания = Неопределено, НеОткрыватьКарточку = Ложь) Экспорт Если РежимСоздания = Неопределено Тогда @@ -112,28 +112,30 @@ КонецПроцедуры -// Открывает форму для настройки рабочего каталога. +// Открывает форму для настройки параметров основного рабочего каталога из персональных настроек пользователя программы. +// Основной рабочий каталог - папка на персональном компьютере пользователя, в которой временно хранятся файлы, +// полученные из программы для просмотра или редактирования. +// Процедура ОткрытьФормуНастройкиРабочегоКаталога() Экспорт ОткрытьФорму("ОбщаяФорма.НастройкаОсновногоРабочегоКаталога"); КонецПроцедуры -// Задает вопрос о продолжении закрытия формы если в форме остались захваченные файлы: -// "Один или несколько файлов заняты для редактирования. Продолжить?" -// Вызывается из ПередЗакрытием форм с файлами. +// Показать предупреждение перед закрытием формы объекта в том случае, +// если у пользователя остались захваченные файлы, присоединенные к этому объекту. +// Вызывается из события ПередЗакрытием форм с файлами. // -// По ссылке объекта проверяет остались ли захваченные файлы. -// Если захваченные файлы остались, в параметре Отказ устанавливается значение Истина, -// Пользователю задается вопрос. -// Если пользователь ответил утвердительно, тогда форма снова закрывается. +// Если захваченные файлы остались, то в параметре Отказ устанавливается значение Истина, +// а пользователю задается вопрос. Если пользователь ответил утвердительно, то форма закрывается. // // Параметры: -// Форма - УправляемаяФорма - форма, в которой редактируется файл. -// Отказ - Булево - параметр события ПередЗакрытием. -// ЗавершениеРаботы - Булево - признак того, что форма закрывается в процессе завершения работы приложения. -// ОбъектСсылка - ЛюбаяСсылка - ссылка на владельца файла. -// ИмяРеквизита - Строка - имя реквизита типа Булево, в котором хранится признак того, +// Форма - УправляемаяФорма - Форма, в которой редактируется файл. +// Отказ - Булево - Параметр события ПередЗакрытием. +// ЗавершениеРаботы - Булево - Признак того, что форма закрывается в процессе завершения работы приложения. +// ВладелецФайлов - ОпределяемыйТип.ВладелецПрисоединенныхФайлов - Папка файлов или объект, к которому присоединены +// файлы. +// ИмяРеквизита - Строка - Имя реквизита типа Булево, в котором хранится признак того, // что вопрос уже выводился. // // Пример: @@ -143,7 +145,7 @@ // РаботаСФайламиКлиент.ПоказатьПодтверждениеЗакрытияФормыСФайлами(ЭтотОбъект, Отказ, ЗавершениеРаботы, Объект.Ссылка); // КонецПроцедуры // -Процедура ПоказатьПодтверждениеЗакрытияФормыСФайлами(Форма, Отказ, ЗавершениеРаботы, ОбъектСсылка, +Процедура ПоказатьПодтверждениеЗакрытияФормыСФайлами(Форма, Отказ, ЗавершениеРаботы, ВладелецФайлов, ИмяРеквизита = "МожноЗакрытьФормуСФайлами") Экспорт ИмяПроцедуры = "РаботаСФайламиКлиент.ПоказатьПодтверждениеЗакрытияФормыСФайлами"; @@ -160,7 +162,7 @@ Возврат; КонецЕсли; - Количество = РаботаСФайламиСлужебныйВызовСервера.КоличествоФайловЗанятыхТекущимПользователем(ОбъектСсылка); + Количество = РаботаСФайламиСлужебныйВызовСервера.КоличествоФайловЗанятыхТекущимПользователем(ВладелецФайлов); Если Количество = 0 Тогда Возврат; КонецЕсли; @@ -174,20 +176,21 @@ КонецПроцедуры -// Открывает форму нового элемента для копирования существующего файла. +// Открывает форму нового файла с копией указанного файла. // // Параметры: -// ВладелецФайла - ЛюбаяСсылка - владелец файла. -// ФайлОснование - ОпределяемыйТип.ПрисоединенныйФайл - откуда копируется Файл. -// ДополнительныеПараметры - Структура - параметры открытия формы. -// ОписаниеОповещенияОЗакрытии - ОписаниеОповещения - описание процедуры, которая будет вызвана при закрытии формы +// ВладелецФайла - ОпределяемыйТип.ВладелецПрисоединенныхФайлов - Папка файлов или объект, к которому присоединен файл. +// ФайлОснование - ОпределяемыйТип.ПрисоединенныйФайл - Копируемый файл. +// ДополнительныеПараметры - Структура - Параметры открытия формы. +// * ИмяСправочникаХранилищаФайлов - Строка - Определяет справочник для хранения копии файла. +// ОписаниеОповещенияОЗакрытии - ОписаниеОповещения - описание процедуры, которая будет вызвана при закрытии формы // со следующими параметрами: // <РезультатЗакрытия> - значение, переданное при вызове Закрыть() открываемой формы, -// <ДополнительныеПараметры> - значение, указанное при создании -// ОписаниеОповещенияОЗакрытии. +// <ДополнительныеПараметры> - значение, указанное при создании +// ОписаниеОповещенияОЗакрытии. // Если параметр не указан, то по завершению никакая процедура вызвана не будет. // -Процедура СкопироватьФайл(ВладелецФайла, ФайлОснование, ДополнительныеПараметры = Неопределено, +Процедура СкопироватьФайл(ВладелецФайла, ФайлОснование, ДополнительныеПараметры = Неопределено, ОписаниеОповещенияОЗакрытии = Неопределено) Экспорт ЭтоФайлы = ТипЗнч(ФайлОснование) = Тип("СправочникСсылка.Файлы"); @@ -199,7 +202,7 @@ Если ДополнительныеПараметры.Свойство("ИмяСправочникаХранилищаФайлов", ИмяСправочникаХранилищаФайлов) Тогда ЭтоФайлы = (ИмяСправочникаХранилищаФайлов = "Файлы"); КонецЕсли; - КонецЕсли; + КонецЕсли; ПараметрыФормы.Вставить("ЗначениеКопирования", ФайлОснование); ПараметрыФормы.Вставить("ВладелецФайла", ВладелецФайла); @@ -211,12 +214,15 @@ КонецПроцедуры -// Сохраняет файл вместе вместе с ЭП. -// Используется в обработчике команды сохранения файла. +// Открывает список электронных подписей файла и предлагает выбрать подписи +// для сохранения вместе с файлом по выбранному пользователем пути. +// Имя файл подписи формируется из имени файла и автора подписи с расширением "p7s". +// +// При отсутствии в конфигурации подсистемы Электронная подпись сохранение файла не будет выполнено. // // Параметры: -// ПрисоединенныйФайл - СправочникСсылка - ссылка на справочник с именем "*ПрисоединенныеФайлы". -// ИдентификаторФормы - УникальныйИдентификатор - идентификатор управляемой формы. +// ПрисоединенныйФайл - ОпределяемыйТип.ПрисоединенныйФайл - Ссылка на элемент справочника с файлом. +// ИдентификаторФормы - УникальныйИдентификатор - Уникальный идентификатор формы, который используется для блокировки файл. // Процедура СохранитьВместеСЭП(Знач ПрисоединенныйФайл, Знач ИдентификаторФормы) Экспорт @@ -245,14 +251,10 @@ КонецПроцедуры -// Сохраняет файл в каталог на диске. -// Так же используется, как вспомогательная функция при сохранении файла с ЭП. +// Открывает диалог сохранения файл, где пользователь может определить путь и имя для сохранения файла. // // Параметры: -// ДанныеФайла - Структура - данные файла. Описание см. РаботаСФайлами.ДанныеФайла. -// -// Возвращаемое значение: -// Строка - имя сохраненного файла. +// ДанныеФайла - Структура - Данные файла. Описание см. РаботаСФайлами.ДанныеФайла. // Процедура СохранитьФайлКак(Знач ДанныеФайла) Экспорт @@ -260,47 +262,14 @@ КонецПроцедуры -// Открывает форму файла из формы элемента -// справочника файлов. Форма элемента закрывается. -// -// Параметры: -// Форма - УправляемаяФорма - форма справочника присоединенных файлов. -// -Процедура ПерейтиКФормеФайла(Знач Форма) Экспорт - - ПрисоединенныйФайл = Форма.Ключ; - - Форма.Закрыть(); - - Для Каждого ОкноКП Из ПолучитьОкна() Цикл - - Содержимое = ОкноКП.ПолучитьСодержимое(); - - Если Содержимое = Неопределено Тогда - Продолжить; - КонецЕсли; - - Если Содержимое.ИмяФормы = "Обработка.РаботаСФайлами.Форма.ПрисоединенныйФайл" Тогда - Если Содержимое.Параметры.Свойство("ПрисоединенныйФайл") - И Содержимое.Параметры.ПрисоединенныйФайл = ПрисоединенныйФайл Тогда - ОкноКП.Активизировать(); - Возврат; - КонецЕсли; - КонецЕсли; - - КонецЦикла; - - ОткрытьФормуФайла(ПрисоединенныйФайл); - -КонецПроцедуры - // Открывает форму выбора файлов. // Используется в обработчике выбора для переопределения стандартного поведения. // // Параметры: -// ВладелецФайлов - Ссылка - ссылка на объект с файлами. -// ЭлементФормы - ТаблицаФормы, ПолеФормы - элемент формы, которому будет отправлено -// оповещение о выборе. +// ВладелецФайлов - ОпределяемыйТип.ВладелецПрисоединенныхФайлов - Папка файлов или объект, +// к которому прикреплены выбираемые файлы. +// ЭлементФормы - ТаблицаФормы, ПолеФормы - элемент формы, которому будет отправлено +// оповещение о выборе. // СтандартнаяОбработка - Булево - (возвращаемое значение), всегда устанавливается в Ложь. // Процедура ОткрытьФормуВыбораФайлов(Знач ВладелецФайлов, Знач ЭлементФормы, СтандартнаяОбработка = Ложь) Экспорт @@ -326,9 +295,9 @@ // Может использоваться как обработчик открытия файла. // // Параметры: -// ПрисоединенныйФайл - ОпределяемыйТип.ПрисоединенныйФайл - ссылка на справочник с именем *ПрисоединенныеФайлы. +// ПрисоединенныйФайл - ОпределяемыйТип.ПрисоединенныйФайл - Ссылка на элемент справочника с файлом. // СтандартнаяОбработка - Булево - (возвращаемое значение), всегда устанавливается в Ложь. -// ДополнительныеПараметры - Структура - параметры открытия формы. +// ДополнительныеПараметры - Структура - Параметры открытия формы. // ОписаниеОповещенияОЗакрытии - ОписаниеОповещения - описание процедуры, которая будет вызвана при закрытии формы // со следующими параметрами: // <РезультатЗакрытия> - значение, переданное при вызове Закрыть() открываемой формы, @@ -363,7 +332,8 @@ // // Параметры: // Файлы - ОпределяемыйТип.ПрисоединенныйФайл, Массив - Ссылка или массив ссылок на объекты с файлами. -// ИдентификаторФормы - УникальныйИдентификатор - идентификатор управляемой формы. +// ИдентификаторФормы - УникальныйИдентификатор - Уникальный идентификатор формы, во временное хранилище +// которой будет помещен файл. // Процедура НапечататьФайлы(Знач Файлы, ИдентификаторФормы = Неопределено) Экспорт @@ -380,11 +350,14 @@ КонецПроцедуры -// Подписывает файл. +// Выполняет подписание файла электронной подписью. +// При отсутствии подсистемы электронная подпись будет показано предупреждение +// о не возможности добавление электронной подписи. // // Параметры: -// ПрисоединенныйФайл - СправочникСсылка - ссылка на справочник с именем "*ПрисоединенныеФайлы". -// ИдентификаторФормы - УникальныйИдентификатор - идентификатор управляемой формы. +// ПрисоединенныйФайл - ОпределяемыйТип.ПрисоединенныйФайл - Ссылка на элемент справочника с файлом. +// ИдентификаторФормы - УникальныйИдентификатор - Уникальный идентификатор формы, +// который используется для блокировки файла. // ДополнительныеПараметры - Неопределено - стандартное поведение (см. ниже). // - Структура - со свойствами: // * ДанныеФайла - Структура - данные файла, если свойства нет, будет вставлено. @@ -431,6 +404,9 @@ КонецПроцедуры // См. РаботаСФайлами.ДанныеФайла. +// Возвращает структурированную информацию о файле. Используется в различных командах работы с файлами, +// и как значение параметра ДанныеФайла других процедур и функций. +// Функция ДанныеФайла(Знач ФайлСсылка, Знач ИдентификаторФормы = Неопределено, Знач ПолучатьСсылкуНаДвоичныеДанные = Истина, @@ -446,9 +422,9 @@ // Получает файл из хранилища файлов в рабочий каталог пользователя. // Аналог интерактивного действия Просмотреть или Редактировать без открытия полученного файла. -// Свойство ТолькоПросмотр полученного файла будет установлено в зависимости от того захвачен +// Свойство ТолькоПросмотр полученного файла будет установлено в зависимости от того захвачен // файл для редактирования или нет. Если не захвачен - устанавливается только просмотр. -// Если в рабочем каталоге уже существует файл, тогда он будет удален и заменен файлом, +// Если в рабочем каталоге уже существует файл, тогда он будет удален и заменен файлом, // полученным из хранилища файлов. // // Параметры: @@ -457,8 +433,9 @@ // * ПолноеИмяФайла - Строка - полное имя файла (с путем). // * ОписаниеОшибки - Строка - текст ошибки, если получить файл не удалось. // -// ПрисоединенныйФайл - СправочникСсылка - ссылка на справочник с именем "*ПрисоединенныеФайлы". -// ИдентификаторФормы - УникальныйИдентификатор - идентификатор управляемой формы. +// ПрисоединенныйФайл - ОпределяемыйТип.ПрисоединенныйФайл - Ссылка на элемент справочник с файлом. +// ИдентификаторФормы - УникальныйИдентификатор - Уникальный идентификатор формы, во временное хранилище +// которой будет помещен файл. // // ДополнительныеПараметры - Неопределено - использовать значения по умолчанию. // - Структура - с необязательными свойствами: @@ -477,12 +454,13 @@ // Аналог интерактивного действия Закончить редактирование. // // Параметры: -// Оповещение - ОписаниеОповещения - оповещение, которое выполняется после помещения файла в +// Оповещение - ОписаниеОповещения - Оповещение, которое выполняется после помещения файла в // хранилище файлов. В качестве результата возвращается Структура со свойствами: // * ОписаниеОшибки - Строка - текст ошибки, если поместить файл не удалось. // -// ПрисоединенныйФайл - СправочникСсылка - ссылка на справочник с именем "*ПрисоединенныеФайлы". -// ИдентификаторФормы - УникальныйИдентификатор - идентификатор управляемой формы. +// ПрисоединенныйФайл - ОпределяемыйТип.ПрисоединенныйФайл - Ссылка на элемент справочника с файлом. +// ИдентификаторФормы - УникальныйИдентификатор - Уникальный идентификатор формы, +// во временное хранилище которой надо поместить данные и вернуть новый адрес. // // ДополнительныеПараметры - Неопределено - использовать значения по умолчанию. // - Структура - с необязательными свойствами: @@ -500,7 +478,8 @@ //////////////////////////////////////////////////////////////////////////////// // Работа со сканером. -// Открывает форму настройки сканирования. +// Открывает форму настройки сканирования из пользовательских настроек. +// Процедура ОткрытьФормуНастройкиСканирования() Экспорт СистемнаяИнформация = Новый СистемнаяИнформация; @@ -526,6 +505,44 @@ КонецПроцедуры +#Область УстаревшиеПроцедурыИФункции + +// Устарела. Следует использовать РаботаСФайламиКлиент.ОткрытьФормуФайла +// Открывает форму файла из формы элемента справочника файлов. Форма элемента закрывается. +// +// Параметры: +// Форма - УправляемаяФорма - Форма справочника присоединенных файлов. +// +Процедура ПерейтиКФормеФайла(Знач Форма) Экспорт + + ПрисоединенныйФайл = Форма.Ключ; + + Форма.Закрыть(); + + Для Каждого ОкноКП Из ПолучитьОкна() Цикл + + Содержимое = ОкноКП.ПолучитьСодержимое(); + + Если Содержимое = Неопределено Тогда + Продолжить; + КонецЕсли; + + Если Содержимое.ИмяФормы = "Обработка.РаботаСФайлами.Форма.ПрисоединенныйФайл" Тогда + Если Содержимое.Параметры.Свойство("ПрисоединенныйФайл") + И Содержимое.Параметры.ПрисоединенныйФайл = ПрисоединенныйФайл Тогда + ОкноКП.Активизировать(); + Возврат; + КонецЕсли; + КонецЕсли; + + КонецЦикла; + + ОткрытьФормуФайла(ПрисоединенныйФайл); + +КонецПроцедуры + +#КонецОбласти + #КонецОбласти #Область СлужебныеПроцедурыИФункции diff --git a/SSL/src/CommonModules/РаботаСФайламиПереопределяемый/Module.bsl b/SSL/src/CommonModules/РаботаСФайламиПереопределяемый/Module.bsl index a4d6d1b4b..7c379935b 100644 --- a/SSL/src/CommonModules/РаботаСФайламиПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайламиПереопределяемый/Module.bsl @@ -15,12 +15,12 @@ // с облачными сервисами (например, служебные документы). // * НеСоздаватьФайлыПоШаблону - Массив - объекты, для файлов которых отключена возможность создавать файлы // по шаблонам. -// +// // Пример: -// Настройки.НеОчищатьФайлы.Добавить(Метаданные.Справочники._ДемоПартнеры); +// Настройки.НеОчищатьФайлы.Добавить(Метаданные.Справочники._ДемоНоменклатура); // Настройки.НеСинхронизироватьФайлы.Добавить(Метаданные.Справочники._ДемоПартнеры); // Настройки.НеСоздаватьФайлыПоШаблону.Добавить(Метаданные.Справочники._ДемоПартнеры); -// +// Процедура ПриОпределенииНастроек(Настройки) Экспорт КонецПроцедуры @@ -38,6 +38,12 @@ // справочник, нужно установить Истина в значение соответствия. // Если установить Истина более одного раза, тогда будет ошибка. // +// Пример: +// Если ТипВладелецФайла = Тип("СправочникСсылка._ДемоНоменклатура") Тогда +// ИменаСправочников["_ДемоНоменклатураПрисоединенныеФайлы"] = Ложь; +// ИменаСправочников.Вставить("Файлы", Истина); +// КонецЕсли; +// Процедура ПриОпределенииСправочниковХраненияФайлов(ТипВладелецФайла, ИменаСправочников) Экспорт КонецПроцедуры @@ -96,6 +102,21 @@ // Процедура ПриОсвобожденииФайла(ДанныеФайла, УникальныйИдентификатор) Экспорт +КонецПроцедуры + +// Позволяет определить параметры электронного письма перед отправкой файла по почте. +// +// Параметры: +// ФайлыДляОтправки - Массив - Список файлов для отправки. +// ПараметрыОтправки - Структура - Возвращаемый параметр, см. РаботаСПочтовымиСообщениямиКлиент.ПараметрыОтправкиПисьма. +// ВладелецФайлов - ОпределяемыйТип.ВладелецПрисоединенныхФайлов - Объект-владелец файлов. +// УникальныйИдентификатор - УникальныйИдентификатор - Уникальный идентификатор, +// который необходимо использовать, есть требуется помещение данных во временное хранилище. +// +Процедура ПриОтправкеФайловПочтой(ПараметрыОтправки, ФайлыДляОтправки, ВладелецФайлов, УникальныйИдентификатор) Экспорт + + + КонецПроцедуры // Позволяет определить параметры штампов электронной подписи в подписанном @@ -111,37 +132,5 @@ КонецПроцедуры -#Область УстаревшиеПроцедурыИФункции - -// Устарела. Следует использовать РаботаСФайламиПереопределяемый.ПриОпределенииНастроек. -// -// Формирует массив метаданных, которые не должны выводиться в настройках очистки файлов. -// -// Параметры: -// МассивИсключений - Массив - метаданные, которые не должны выводиться в настройках очистки файлов. -// -// Пример: -// МассивИсключений.Добавить(Метаданные.Справочники.Файлы); -// -Процедура ПриОпределенииОбъектовИсключенияОчисткиФайлов(МассивИсключений) Экспорт - -КонецПроцедуры - -// Устарела. Следует использовать РаботаСФайламиПереопределяемый.ПриОпределенииНастроек. -// -// Формирует массив метаданных, которые не должны выводиться в настройках синхронизации файлов. -// -// Параметры: -// МассивИсключений - Массив - метаданные, которые не должны выводиться в настройках синхронизации файлов. -// -// Пример: -// МассивИсключений.Добавить(Метаданные.Справочники.Файлы); -// -Процедура ПриОпределенииОбъектовИсключенияСинхронизацииФайлов(МассивИсключений) Экспорт - -КонецПроцедуры - -#КонецОбласти - #КонецОбласти diff --git a/SSL/src/CommonModules/РаботаСФайламиСлужебный/Module.bsl b/SSL/src/CommonModules/РаботаСФайламиСлужебный/Module.bsl index 3de2df594..c3fa49d58 100644 --- a/SSL/src/CommonModules/РаботаСФайламиСлужебный/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайламиСлужебный/Module.bsl @@ -505,37 +505,37 @@ МетаданныеОбъектаФайлов = Метаданные.НайтиПоПолномуИмени(ПолноеИмяСправочникаФайлов); ЕстьВозможностьХранитьВерсии = ОбщегоНазначения.ЕстьРеквизитОбъекта("ТекущаяВерсия", МетаданныеОбъектаФайлов); Если ЕстьВозможностьХранитьВерсии Тогда - СправочникВерсийФайлов = - ОбщегоНазначения.ИдентификаторОбъектаМетаданных(МетаданныеОбъектаФайлов.Реквизиты.ТекущаяВерсия.Тип.Типы()[0]); + СправочникВерсийФайлов = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(МетаданныеОбъектаФайлов.Реквизиты.ТекущаяВерсия.Тип.Типы()[0]); ПолноеИмяСправочникаВерсийФайлов = СправочникВерсийФайлов.ПолноеИмя; + Если Настройка.ПериодОчистки <> Перечисления.ПериодОчисткиФайлов.ПоПравилу Тогда Если ДанныеДляОтчета Тогда ТекстЗапроса = - "ВЫБРАТЬ - | ТИПЗНАЧЕНИЯ(Файлы.ВладелецФайла) КАК ВладелецФайла, - | ЕстьNull(ВерсииФайлов.Размер, Файлы.Размер) /1024 /1024 КАК ОбъемНенужныхФайлов"; + "ВЫБРАТЬ + | ТИПЗНАЧЕНИЯ(Файлы.ВладелецФайла) КАК ВладелецФайла, + | ВерсииФайлов.Размер /1024 /1024 КАК ОбъемНенужныхФайлов"; Иначе ТекстЗапроса = - "ВЫБРАТЬ - | Файлы.Ссылка КАК ФайлСсылка, - | ВерсииФайлов.Ссылка КАК ВерсияСсылка"; + "ВЫБРАТЬ + | Файлы.Ссылка КАК ФайлСсылка, + | ВерсииФайлов.Ссылка КАК ВерсияСсылка"; КонецЕсли; ТекстЗапроса = ТекстЗапроса + " - |ИЗ - | " + ПолноеИмяСправочникаФайлов + " КАК Файлы - | ЛЕВОЕ СОЕДИНЕНИЕ " + ПолноеИмяСправочникаВерсийФайлов + " КАК ВерсииФайлов - | ПО Файлы.Ссылка = ВерсииФайлов.Владелец - |ГДЕ - | НЕ Файлы.ПометкаУдаления - | И НЕ ЕстьNull(ВерсииФайлов.ПометкаУдаления, Ложь) - | И ТИПЗНАЧЕНИЯ(Файлы.ВладелецФайла) = &ТипВладельца - | И ВЫБОР - | КОГДА ЕстьNull(ВерсииФайлов.ТипХраненияФайла, Файлы.ТипХраненияФайла) = ЗНАЧЕНИЕ(Перечисление.ТипыХраненияФайлов.ВТомахНаДиске) - | ТОГДА ЕстьNull(ВерсииФайлов.Том, Файлы.Том) <> ЗНАЧЕНИЕ(Справочник.ТомаХраненияФайлов.ПустаяСсылка) - | ИЛИ (ВЫРАЗИТЬ(ЕстьNull(ВерсииФайлов.ПутьКФайлу, Файлы.ПутьКФайлу) КАК СТРОКА(100))) <> """" - | ИНАЧЕ ИСТИНА - | КОНЕЦ - | И ЕстьNull(ВерсииФайлов.ДатаСоздания, Файлы.ДатаСоздания) <= &ПериодОчистки"; + |ИЗ + | " + ПолноеИмяСправочникаФайлов + " КАК Файлы + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ " + ПолноеИмяСправочникаВерсийФайлов + " КАК ВерсииФайлов + | ПО Файлы.Ссылка = ВерсииФайлов.Владелец + |ГДЕ + | ВерсииФайлов.ДатаСоздания <= &ПериодОчистки + | И НЕ Файлы.ПометкаУдаления + | И ТИПЗНАЧЕНИЯ(Файлы.ВладелецФайла) = &ТипВладельца + | И ВЫБОР + | КОГДА ВерсииФайлов.ТипХраненияФайла = ЗНАЧЕНИЕ(Перечисление.ТипыХраненияФайлов.ВТомахНаДиске) + | ТОГДА ВерсииФайлов.Том <> ЗНАЧЕНИЕ(Справочник.ТомаХраненияФайлов.ПустаяСсылка) + | ИЛИ (ВЫРАЗИТЬ(ВерсииФайлов.ПутьКФайлу КАК СТРОКА(100))) <> """" + | ИНАЧЕ ИСТИНА + | КОНЕЦ + | "; Иначе МассивРеквизитовСТипомДата = Новый Массив; @@ -545,8 +545,8 @@ ЕстьТипДата = Ложь; ТекстЗапроса = - "ВЫБРАТЬ - | " + ТипОбъекта.Имя + ".Ссылка,"; + "ВЫБРАТЬ + | " + ТипОбъекта.Имя + ".Ссылка,"; Если ВсеСправочники.СодержитТип(ТипЗнч(ТипОбъекта.ЗначениеПустойСсылки)) Тогда Справочник = Метаданные.Справочники[ТипОбъекта.Имя]; Для Каждого Реквизит Из Справочник.Реквизиты Цикл @@ -564,50 +564,51 @@ КонецЕсли; Если ДанныеДляОтчета Тогда ТекстЗапроса = ТекстЗапроса + " - | ТИПЗНАЧЕНИЯ(Файлы.ВладелецФайла) КАК ВладелецФайла, - | ЕстьNull(ВерсииФайлов.Размер, Файлы.Размер) /1024 /1024 КАК ОбъемНенужныхФайлов"; - Иначе + | ТИПЗНАЧЕНИЯ(Файлы.ВладелецФайла) КАК ВладелецФайла, + | ВерсииФайлов.Размер /1024 /1024 КАК ОбъемНенужныхФайлов"; + Иначе ТекстЗапроса = ТекстЗапроса + " - | Файлы.Ссылка КАК ФайлСсылка, - | ВерсииФайлов.Ссылка КАК ВерсияСсылка"; + | Файлы.Ссылка КАК ФайлСсылка, + | ВерсииФайлов.Ссылка КАК ВерсияСсылка"; КонецЕсли; ТекстЗапроса = ТекстЗапроса + " - |ИЗ - | " + ТипОбъекта.ПолноеИмя+ " КАК " + ТипОбъекта.Имя + " - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ "+ ПолноеИмяСправочникаФайлов + " КАК Файлы - | ЛЕВОЕ СОЕДИНЕНИЕ " + ПолноеИмяСправочникаВерсийФайлов + " КАК ВерсииФайлов - | ПО Файлы.Ссылка = ВерсииФайлов.Владелец - | ПО " + ТипОбъекта.Имя + ".Ссылка = Файлы.ВладелецФайла - |ГДЕ - | НЕ Файлы.ПометкаУдаления - | И НЕ ЕстьNull(ВерсииФайлов.ПометкаУдаления, Ложь) - | И ВЫБОР - | КОГДА ЕстьNull(ВерсииФайлов.ТипХраненияФайла, Файлы.ТипХраненияФайла) = ЗНАЧЕНИЕ(Перечисление.ТипыХраненияФайлов.ВТомахНаДиске) - | ТОГДА ЕстьNull(ВерсииФайлов.Том, Файлы.Том) <> ЗНАЧЕНИЕ(Справочник.ТомаХраненияФайлов.ПустаяСсылка) - | ИЛИ (ВЫРАЗИТЬ(ЕстьNull(ВерсииФайлов.ПутьКФайлу, Файлы.ПутьКФайлу) КАК СТРОКА(100))) <> """" - | ИНАЧЕ ИСТИНА - | КОНЕЦ - | И ТИПЗНАЧЕНИЯ(Файлы.ВладелецФайла) = &ТипВладельца"; - КонецЕсли; + |ИЗ + | " + ТипОбъекта.ПолноеИмя+ " КАК " + ТипОбъекта.Имя + " + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ "+ ПолноеИмяСправочникаФайлов + " КАК Файлы + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ " + ПолноеИмяСправочникаВерсийФайлов + " КАК ВерсииФайлов + | ПО Файлы.Ссылка = ВерсииФайлов.Владелец + | ПО " + ТипОбъекта.Имя + ".Ссылка = Файлы.ВладелецФайла + |ГДЕ + | НЕ Файлы.ПометкаУдаления + | И НЕ ЕстьNull(ВерсииФайлов.ПометкаУдаления, Ложь) + | И ВЫБОР + | КОГДА ВерсииФайлов.ТипХраненияФайла = ЗНАЧЕНИЕ(Перечисление.ТипыХраненияФайлов.ВТомахНаДиске) + | ТОГДА ВерсииФайлов.Том <> ЗНАЧЕНИЕ(Справочник.ТомаХраненияФайлов.ПустаяСсылка) + | ИЛИ (ВЫРАЗИТЬ(ВерсииФайлов.ПутьКФайлу КАК СТРОКА(100))) <> """" + | ИНАЧЕ ИСТИНА + | КОНЕЦ + | И ТИПЗНАЧЕНИЯ(Файлы.ВладелецФайла) = &ТипВладельца"; + КонецЕсли; Иначе Если Настройка.ПериодОчистки <> Перечисления.ПериодОчисткиФайлов.ПоПравилу Тогда - Если ДанныеДляОтчета Тогда - ТекстЗапроса = + Если ДанныеДляОтчета Тогда + ТекстЗапроса = "ВЫБРАТЬ | ТИПЗНАЧЕНИЯ(Файлы.ВладелецФайла) КАК ВладелецФайла, | Файлы.Размер /1024 /1024 КАК ОбъемНенужныхФайлов"; - Иначе - ТекстЗапроса = + Иначе + ТекстЗапроса = "ВЫБРАТЬ | Файлы.Ссылка КАК ФайлСсылка"; - КонецЕсли; - ТекстЗапроса = ТекстЗапроса + " + КонецЕсли; + ТекстЗапроса = ТекстЗапроса + " |ИЗ | Справочник." + Настройка.ТипВладельцаФайла.Имя + " КАК Файлы | ВНУТРЕННЕЕ СОЕДИНЕНИЕ " + ВладелецФайла.ПолноеИмя + " КАК СправочникФайлы | ПО Файлы.ВладелецФайла = СправочникФайлы.Ссылка |ГДЕ - | НЕ Файлы.ПометкаУдаления + | Файлы.ДатаСоздания <= &ПериодОчистки + | И НЕ Файлы.ПометкаУдаления | И ВЫБОР | КОГДА Файлы.ТипХраненияФайла = ЗНАЧЕНИЕ(Перечисление.ТипыХраненияФайлов.ВТомахНаДиске) | ТОГДА (ВЫРАЗИТЬ(Файлы.ПутьКФайлу КАК СТРОКА(100))) <> """" @@ -615,34 +616,34 @@ | ИНАЧЕ ИСТИНА | КОНЕЦ | И ТИПЗНАЧЕНИЯ(Файлы.ВладелецФайла) = &ТипВладельца - | И Файлы.ДатаСоздания <= &ПериодОчистки"; - Иначе - МассивРеквизитовСТипомДата = Новый Массив; - - ТипОбъекта = ВладелецФайла; - ВсеСправочники = Справочники.ТипВсеСсылки(); - ВсеДокументы = Документы.ТипВсеСсылки(); - ЕстьТипДата = Ложь; - ТекстЗапроса = + | "; + Иначе + МассивРеквизитовСТипомДата = Новый Массив; + + ТипОбъекта = ВладелецФайла; + ВсеСправочники = Справочники.ТипВсеСсылки(); + ВсеДокументы = Документы.ТипВсеСсылки(); + ЕстьТипДата = Ложь; + ТекстЗапроса = "ВЫБРАТЬ | СправочникФайлы.Ссылка, | ТИПЗНАЧЕНИЯ(Файлы.ВладелецФайла) КАК ВладелецФайла, | Файлы.Размер /1024 /1024 КАК ОбъемНенужныхФайлов,"; - Если ВсеСправочники.СодержитТип(ТипЗнч(ТипОбъекта.ЗначениеПустойСсылки)) Тогда - Справочник = Метаданные.Справочники[ТипОбъекта.Имя]; - Для Каждого Реквизит Из Справочник.Реквизиты Цикл - ТекстЗапроса = ТекстЗапроса + Символы.ПС + "СправочникФайлы." + Реквизит.Имя + ","; - КонецЦикла; - ИначеЕсли ВсеДокументы.СодержитТип(ТипЗнч(ТипОбъекта.ЗначениеПустойСсылки)) Тогда - Документ = Метаданные.Документы[ТипОбъекта.Имя]; - Для Каждого Реквизит Из Документ.Реквизиты Цикл - Если Реквизит.Тип = Новый ОписаниеТипов("Дата") Тогда - ТекстЗапроса = ТекстЗапроса + Символы.ПС + "РАЗНОСТЬДАТ(" + Реквизит.Имя + ", &ТекущаяДата, ДЕНЬ) Как ДнейДоУдаленияОт" + Реквизит.Имя + ","; - КонецЕсли; - ТекстЗапроса = ТекстЗапроса + Символы.ПС + "СправочникФайлы." + Реквизит.Имя + ","; - КонецЦикла; - КонецЕсли; - ТекстЗапроса = ТекстЗапроса + " + Если ВсеСправочники.СодержитТип(ТипЗнч(ТипОбъекта.ЗначениеПустойСсылки)) Тогда + Справочник = Метаданные.Справочники[ТипОбъекта.Имя]; + Для Каждого Реквизит Из Справочник.Реквизиты Цикл + ТекстЗапроса = ТекстЗапроса + Символы.ПС + "СправочникФайлы." + Реквизит.Имя + ","; + КонецЦикла; + ИначеЕсли ВсеДокументы.СодержитТип(ТипЗнч(ТипОбъекта.ЗначениеПустойСсылки)) Тогда + Документ = Метаданные.Документы[ТипОбъекта.Имя]; + Для Каждого Реквизит Из Документ.Реквизиты Цикл + Если Реквизит.Тип = Новый ОписаниеТипов("Дата") Тогда + ТекстЗапроса = ТекстЗапроса + Символы.ПС + "РАЗНОСТЬДАТ(" + Реквизит.Имя + ", &ТекущаяДата, ДЕНЬ) Как ДнейДоУдаленияОт" + Реквизит.Имя + ","; + КонецЕсли; + ТекстЗапроса = ТекстЗапроса + Символы.ПС + "СправочникФайлы." + Реквизит.Имя + ","; + КонецЦикла; + КонецЕсли; + ТекстЗапроса = ТекстЗапроса + " | Файлы.Ссылка КАК ФайлСсылка |ИЗ | Справочник." + Настройка.ТипВладельцаФайла.Имя + " КАК Файлы @@ -662,16 +663,16 @@ Если МассивИсключений.Количество() > 0 Тогда ТекстЗапроса = ТекстЗапроса + " - | И НЕ Файлы.ВладелецФайла В ИЕРАРХИИ (&МассивИсключений)"; + | И НЕ Файлы.ВладелецФайла В ИЕРАРХИИ (&МассивИсключений)"; КонецЕсли; Если ЭлементИсключение <> Неопределено Тогда ТекстЗапроса = ТекстЗапроса + " - | И Файлы.ВладелецФайла В ИЕРАРХИИ (&ЭлементИсключение)"; + | И Файлы.ВладелецФайла В ИЕРАРХИИ (&ЭлементИсключение)"; КонецЕсли; Если ЕстьВозможностьХранитьВерсии И Настройка.Действие = Перечисления.ВариантыОчисткиФайлов.ОчиститьВерсии Тогда ТекстЗапроса = ТекстЗапроса + " - | И ВерсииФайлов.Ссылка <> Файлы.ТекущаяВерсия - | И ВерсииФайлов.РодительскаяВерсия <> ЗНАЧЕНИЕ(Справочник.ВерсииФайлов.ПустаяСсылка)"; + | И ВерсииФайлов.Ссылка <> Файлы.ТекущаяВерсия + | И ВерсииФайлов.РодительскаяВерсия <> ЗНАЧЕНИЕ(Справочник.ВерсииФайлов.ПустаяСсылка)"; КонецЕсли; Возврат ТекстЗапроса; @@ -949,7 +950,7 @@ ОжидаемыеТипы = Новый Массив; ОжидаемыеТипы.Добавить(Тип("ДвоичныеДанные")); ОжидаемыеТипы.Добавить(Тип("Строка")); - ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("РаботаСФайламиСлужебный.ДобавитьНаДиск", "ДвоичныеДанныеИлиПуть", ДвоичныеДанныеИлиПуть, + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("РаботаСФайламиСлужебный.ДобавитьФайлВТом", "ДвоичныеДанныеИлиПуть", ДвоичныеДанныеИлиПуть, Новый ОписаниеТипов(ОжидаемыеТипы)); УстановитьПривилегированныйРежим(Истина); @@ -1151,11 +1152,15 @@ Шифрование = Ложь; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") - И Пользователи.РолиДоступны("ДобавлениеИзменениеЭлектронныхПодписейИШифрование") - И Не ОбщегоНазначенияКлиентСервер.ЭтоВебКлиентПодMacOS() Тогда - МодульЭлектроннаяПодпись = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодпись"); - ЭлектронноеПодписание = МодульЭлектроннаяПодпись.ИспользоватьЭлектронныеПодписи(); - Шифрование = МодульЭлектроннаяПодпись.ИспользоватьШифрование(); + И Не ОбщегоНазначенияКлиентСервер.ЭтоВебКлиентПодMacOS() Тогда + + МодульЭлектроннаяПодписьСлужебный = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодписьСлужебный"); + Если МодульЭлектроннаяПодписьСлужебный.ИспользоватьИнтерактивноеДобавлениеЭлектронныхПодписейИШифрование() Тогда + МодульЭлектроннаяПодпись = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодпись"); + ЭлектронноеПодписание = МодульЭлектроннаяПодпись.ИспользоватьЭлектронныеПодписи(); + Шифрование = МодульЭлектроннаяПодпись.ИспользоватьШифрование(); + КонецЕсли; + КонецЕсли; Если ЭтоФормаСписка Тогда @@ -1415,6 +1420,23 @@ #Область ПроверкаНаличияСсылокНаНесуществующиеФайлыВТоме +// Исполняет проверку несуществующих файлов на диске, в случае когда присоединенные файлы хранятся в томах. +// +// Параметры: +// Проверка - СправочникСсылка.ПравилаПроверкиУчета - Ссылка на исполняемую проверку. +// ПараметрыПроверки - Структура - Параметры проверки которую необходимо выполнить: +// * Идентификатор - Строка - Строковый идентификатор проверки. +// * ДатаНачалаПроверки - Дата - Пороговая дата, обозначающая границу проверяемых +// объектов (только для объектов с датой). Объекты, дата которых меньше +// указанной, не следует проверять. По умолчанию не заполнено (т.е. проверять все). +// * ЛимитПроблем - Число - Количество проверяемых объектов. +// По умолчанию 1000. Если указано 0, то следует проверить все объекты. +// * ВидПроверки - СправочникСсылка.ВидыПроверок - Ссылка на вид проверки, к +// которому относится выполненная проверка. +// * ВажностьПроблемы - ПеречислениеСсылка.ВажностьПроблемыУчета - Важность, с которой следует +// регистрировать выявленные проблемы учета: +// Информация, Предупреждение, Ошибка, ПолезныйСовет и ВажнаяИнформация. +// Процедура ПроверкаСсылокНаНесуществующиеФайлыВТоме(Проверка, ПараметрыПроверки) Экспорт Если ОбщегоНазначения.РазделениеВключено() Тогда @@ -1425,19 +1447,24 @@ Возврат; КонецЕсли; - МодульКонтрольВеденияУчета = ОбщегоНазначения.ОбщийМодуль("КонтрольВеденияУчета"); - МодульКонтрольВеденияУчетаСлужебный = ОбщегоНазначения.ОбщийМодуль("КонтрольВеденияУчетаСлужебный"); + МодульКонтрольВеденияУчета = ОбщегоНазначения.ОбщийМодуль("КонтрольВеденияУчета"); - МассивВидовОбъектовМетаданных = Новый Массив; - МассивВидовОбъектовМетаданных.Добавить(Метаданные.Справочники); - МассивВидовОбъектовМетаданных.Добавить(Метаданные.Документы); - МассивВидовОбъектовМетаданных.Добавить(Метаданные.ПланыСчетов); - МассивВидовОбъектовМетаданных.Добавить(Метаданные.ПланыВидовХарактеристик); - МассивВидовОбъектовМетаданных.Добавить(Метаданные.Задачи); + МодульРаботаВМоделиСервиса = Неопределено; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса") Тогда + МодульРаботаВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("РаботаВМоделиСервиса"); + КонецЕсли; - Для Каждого ВидМетаданных Из МассивВидовОбъектовМетаданных Цикл - Для Каждого ОбъектМетаданных Из ВидМетаданных Цикл - Если МодульКонтрольВеденияУчетаСлужебный.ЭтоНеразделенныйОбъектМетаданных(ОбъектМетаданных.ПолноеИмя()) Тогда + ВидыОбъектовМетаданных = Новый Массив; + ВидыОбъектовМетаданных.Добавить(Метаданные.Справочники); + ВидыОбъектовМетаданных.Добавить(Метаданные.Документы); + ВидыОбъектовМетаданных.Добавить(Метаданные.ПланыСчетов); + ВидыОбъектовМетаданных.Добавить(Метаданные.ПланыВидовХарактеристик); + ВидыОбъектовМетаданных.Добавить(Метаданные.Задачи); + + Для Каждого ВидОбъектаМетаданных Из ВидыОбъектовМетаданных Цикл + Для Каждого ОбъектМетаданных Из ВидОбъектаМетаданных Цикл + Если МодульРаботаВМоделиСервиса <> Неопределено + И Не МодульРаботаВМоделиСервиса.ЭтоРазделенныйОбъектМетаданных(ОбъектМетаданных.ПолноеИмя()) Тогда Продолжить; КонецЕсли; Если Не ПроверитьОбъектПрисоединенныхФайлов(ОбъектМетаданных) Тогда @@ -2572,7 +2599,7 @@ Обработчик.ПроцедураЗаполненияДанныхОбновления = "РегистрыСведений.НаличиеФайлов.ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию"; Обработчик.ЧитаемыеОбъекты = "Справочник.Файлы"; Обработчик.ИзменяемыеОбъекты = "РегистрСведений.НаличиеФайлов"; - Обработчик.БлокируемыеОбъекты = "Справочник.Файлы, Справочник.ВерсииФайлов"; + Обработчик.БлокируемыеОбъекты = "Справочник.Файлы"; Обработчик.ОчередьОтложеннойОбработки = 3; Обработчик.ПроцедураПроверки = "ОбновлениеИнформационнойБазы.ДанныеОбновленыНаНовуюВерсиюПрограммы"; Обработчик.ПриоритетыВыполнения = ОбновлениеИнформационнойБазы.ПриоритетыВыполненияОбработчика(); @@ -2649,12 +2676,6 @@ Обработчик.Процедура = "РаботаСФайламиСлужебный.ОбновитьПутьТомаLinux"; Обработчик.РежимВыполнения = "Оперативно"; - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "2.4.1.1"; - Обработчик.ОбщиеДанные = Ложь; - Обработчик.Процедура = "РаботаСФайламиСлужебный.УдалитьУстаревшиеОбработчикиОбновления"; - Обработчик.РежимВыполнения = "Оперативно"; - КонецПроцедуры // См. ОбщегоНазначенияПереопределяемый.ПриДобавленииПереименованийОбъектовМетаданных. @@ -2668,7 +2689,7 @@ КонецПроцедуры -// См. ОбщегоНазначенияПереопределяемый.ПараметрыРаботыКлиента. +// См. ОбщегоНазначенияПереопределяемый.ПриДобавленииПараметровРаботыКлиента. Процедура ПриДобавленииПараметровРаботыКлиента(Параметры) Экспорт Если Не ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда @@ -2685,7 +2706,7 @@ КонецПроцедуры -// См. ОбщегоНазначенияПереопределяемый.ПараметрыРаботыКлиентаПриЗапуске. +// См. ОбщегоНазначенияПереопределяемый.ПриДобавленииПараметровРаботыКлиентаПриЗапуске. Процедура ПриДобавленииПараметровРаботыКлиентаПриЗапуске(Параметры) Экспорт Если Не ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда @@ -2847,6 +2868,8 @@ ФайлВременный.УстановитьТолькоЧтение(Ложь); Исключение // Не регистрируется, возможно файл не найден. + // Отсутствующий файл может быть восстановлен позже, + // поэтому исключение игнорируется, чтобы не останавливать создание начального образа. КонецПопытки; КонецПроцедуры @@ -4190,7 +4213,7 @@ ДвоичныеДанные.Записать(ИмяВременногоФайла); Отказ = Ложь; - ИзвлеченныйТекст = РаботаСФайламиСлужебныйКлиентСервер.ИзвлечьТекстВоВременноеХранилище(ИмяВременногоФайла, , Отказ); + ИзвлеченныйТекст = РаботаСФайламиСлужебныйКлиентСервер.ИзвлечьТекст(ИмяВременногоФайла, Отказ); Попытка УдалитьФайлы(ИмяВременногоФайла); @@ -4909,7 +4932,7 @@ ОписаниеКолонокТаблицыПодписей = Новый ФиксированныйМассив(КолонкиМассив); ТекущийПользователь = Пользователи.АвторизованныйПользователь(); - + Если ЗначениеЗаполнено(Параметры.ЗначениеКопирования) Тогда ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(Параметры.ЗначениеКопирования); Если Параметры.РежимСоздания = "ИзШаблона" Тогда @@ -4925,7 +4948,6 @@ КонецЕсли; ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(ОбъектЗначение, Контекст); КонецЕсли; - ОбъектЗначение.Заполнить(Неопределено); Контекст.ИмяСправочника = ОбъектЗначение.Метаданные().Имя; @@ -5015,7 +5037,6 @@ ОбъектЗначение, КопируемыйОбъект, "Наименование, - |ХранитьВерсии, |Зашифрован, |Описание, |ПодписанЭП, @@ -5031,6 +5052,8 @@ ОбъектЗначение.ДатаМодификацииУниверсальная = УниверсальноеВремя(ДатаСоздания); ОбъектЗначение.Автор = Пользователи.АвторизованныйПользователь(); ОбъектЗначение.ТипХраненияФайла = ТипХраненияФайлов(); + ОбъектЗначение.ХранитьВерсии = ?(Параметры.ИмяСправочникаХранилищаФайлов = "Файлы", + КопируемыйОбъект.ХранитьВерсии, Ложь); Возврат ОбъектЗначение; @@ -5734,7 +5757,7 @@ СтруктураHref = СтруктураURIРаскодированная(Href); - HTTP = СоздатьHTTPСоединениеWebdav(СтруктураHref, СтруктураОбмена); + HTTP = СоздатьHTTPСоединениеWebdav(СтруктураHref, СтруктураОбмена, 20); HTTPЗапросWebdav = Новый HTTPЗапрос(СтруктураHref.ПутьНаСервере, СоответствиеЗаголовков); @@ -5873,8 +5896,14 @@ КонецФункции // Инициализирует объект HTTPСоединение. -Функция СоздатьHTTPСоединениеWebdav(СтруктураHref, ПараметрыСинхронизации) - +Функция СоздатьHTTPСоединениеWebdav(СтруктураHref, ПараметрыСинхронизации, Таймаут) + + ЗащищенноеСоединение = Неопределено; + Если СтруктураHref.Схема = "https" Тогда + Сертификаты = Новый СертификатыУдостоверяющихЦентровОС; + ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL(, Сертификаты); + КонецЕсли; + Если НЕ ЗначениеЗаполнено(СтруктураHref.Порт) Тогда HTTP = Новый HTTPСоединение( СтруктураHref.Хост, @@ -5882,8 +5911,8 @@ ПараметрыСинхронизации.Логин, ПараметрыСинхронизации.Пароль, , - 20, - ?(СтруктураHref.Схема="https", Новый(Тип("ЗащищенноеСоединениеOpenSSL")),Неопределено)); + Таймаут, + ЗащищенноеСоединение); Иначе HTTP = Новый HTTPСоединение( СтруктураHref.Хост, @@ -5891,8 +5920,8 @@ ПараметрыСинхронизации.Логин, ПараметрыСинхронизации.Пароль, , - 20, - ?(СтруктураHref.Схема="https", Новый(Тип("ЗащищенноеСоединениеOpenSSL")),Неопределено)); + Таймаут, + ЗащищенноеСоединение); КонецЕсли; Возврат HTTP; @@ -5905,7 +5934,8 @@ Результат = Новый Структура("Успешно, АдресВременныхДанных, ТекстОшибки"); СтруктураHref = СтруктураURIРаскодированная(Href); - HTTP = СоздатьHTTPСоединениеWebdav(СтруктураHref, ПараметрыСинхронизации); + Таймаут = ?(ДлинаФайла <> Неопределено, РассчитатьТаймаут(ДлинаФайла), 43200); + HTTP = СоздатьHTTPСоединениеWebdav(СтруктураHref, ПараметрыСинхронизации, Таймаут); ЗаголовкиHTTP = Новый Соответствие; ЗаголовкиHTTP["User-Agent"] = "1C Enterprise 8.3"; @@ -5940,7 +5970,8 @@ СтруктураHref = СтруктураURIРаскодированная(Href); - HTTP = СоздатьHTTPСоединениеWebdav(СтруктураHref,ПараметрыСинхронизации); + Таймаут = РассчитатьТаймаут(ФайлСДвоичнымиДанными.Размер()); + HTTP = СоздатьHTTPСоединениеWebdav(СтруктураHref, ПараметрыСинхронизации, Таймаут); ЗаголовкиHTTP = Новый Соответствие; ЗаголовкиHTTP["User-Agent"] = "1C Enterprise 8.3"; @@ -7147,6 +7178,19 @@ КонецФункции +Функция РассчитатьТаймаут(Размер) + + Таймаут = Цел(Размер / 8192); // размер в мегабайтах * 128 + Если Таймаут < 10 Тогда + Возврат 10; + ИначеЕсли Таймаут > 43200 Тогда + Возврат 43200; + КонецЕсли; + + Возврат Таймаут; + +КонецФункции + Функция СоздатьФайлВОблачномСервисе(Знач АдресСервера, Знач ПараметрыСинхронизации, Знач СтрокаТаблицы, Знач ТаблицаФайлов) // отправим новый на сервер @@ -7223,6 +7267,7 @@ Если НЕ ОбщегоНазначения.ОбъектМетаданныхДоступенПоФункциональнымОпциям(СправочникФайлов) Тогда Продолжить; КонецЕсли; + ВозможностьСоздаватьГруппы = СправочникФайлов.Иерархический; ДеревоФайлов = ВыбратьДанныеПоПравилуСинхронизации(Настройка); @@ -7785,13 +7830,6 @@ КонецПроцедуры -Процедура УдалитьУстаревшиеОбработчикиОбновления() Экспорт - - // Удаление устаревшего отложенного обработчика обновления. - ОбновлениеИнформационнойБазы.УдалитьОтложенныйОбработчикИзОчереди("ФайловыеФункцииСлужебный.ОбновитьПутьТомаLinux"); - -КонецПроцедуры - // Возвращает признак принадлежности узла к плану обмена РИБ. // // Параметры: @@ -7809,14 +7847,13 @@ Процедура ПоискСсылокНаНесуществующиеФайлыВТоме(ОбъектМетаданных, ПараметрыПроверки) - МодульКонтрольВеденияУчета = ОбщегоНазначения.ОбщийМодуль("КонтрольВеденияУчета"); - МодульКонтрольВеденияУчетаПереопределяемый = ОбщегоНазначения.ОбщийМодуль("КонтрольВеденияУчетаПереопределяемый"); + МодульКонтрольВеденияУчета = ОбщегоНазначения.ОбщийМодуль("КонтрольВеденияУчета"); Реквизиты = ОбъектМетаданных.Реквизиты; ТекстЗапроса = "ВЫБРАТЬ ПЕРВЫЕ 1000 - | ОбъектМетаданных.Ссылка КАК Ссылка, + | ОбъектМетаданных.Ссылка КАК ПроблемныйОбъект, | &ПолеВладельца КАК Владелец, | ПРЕДСТАВЛЕНИЕССЫЛКИ(ОбъектМетаданных.Ссылка) КАК Файл, | ПРЕДСТАВЛЕНИЕССЫЛКИ(ОбъектМетаданных.Том) КАК Том, @@ -7844,6 +7881,7 @@ Запрос = Новый Запрос(ТекстЗапроса); Запрос.УстановитьПараметр("Ссылка", ""); + Результат = Запрос.Выполнить().Выгрузить(); Пока Истина Цикл @@ -7866,34 +7904,35 @@ КонецЕсли; ПроверяемыйФайл = Новый Файл(ПутьКФайлу); - Если Не ПроверяемыйФайл.Существует() Тогда - - СсылкаНаОбъект = СтрокаРезультата.Ссылка; - - Если СтрокаРезультата.Владелец <> Неопределено Тогда - УточнениеПроблемы = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Версия ""%1"" файла ""%2"" не найдена в томе ""%3"".'"), - СтрокаРезультата.Файл, СтрокаРезультата.Владелец, СтрокаРезультата.Том); - Иначе - УточнениеПроблемы = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Файл ""%1"" не найден в томе ""%2"".'"), - СтрокаРезультата.Файл, СтрокаРезультата.Том); - КонецЕсли; - - Проблема = МодульКонтрольВеденияУчета.ОписаниеПроблемы(СсылкаНаОбъект, ПараметрыПроверки); - Проблема.УточнениеПроблемы = УточнениеПроблемы; - Если Реквизиты.Найти("Ответственный") <> Неопределено Тогда - Проблема.Вставить("Ответственный", ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СсылкаНаОбъект, "Ответственный")); - КонецЕсли; - - МодульКонтрольВеденияУчета.ЗаписатьПроблему(Проблема); - + Если ПроверяемыйФайл.Существует() Тогда + Продолжить; КонецЕсли; + + СсылкаНаОбъект = СтрокаРезультата.ПроблемныйОбъект; + + Если СтрокаРезультата.Владелец <> Неопределено Тогда + УточнениеПроблемы = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Версия ""%1"" файла ""%2"" не существует в томе ""%3"".'"), + СтрокаРезультата.Файл, СтрокаРезультата.Владелец, СтрокаРезультата.Том); + Иначе + УточнениеПроблемы = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Файл ""%1"" не существует в томе ""%2"".'"), + СтрокаРезультата.Файл, СтрокаРезультата.Том); + КонецЕсли; + + Проблема = МодульКонтрольВеденияУчета.ОписаниеПроблемы(СсылкаНаОбъект, ПараметрыПроверки); + + Проблема.УточнениеПроблемы = УточнениеПроблемы; + Если Реквизиты.Найти("Ответственный") <> Неопределено Тогда + Проблема.Вставить("Ответственный", ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СсылкаНаОбъект, "Ответственный")); + КонецЕсли; + + МодульКонтрольВеденияУчета.ЗаписатьПроблему(Проблема, ПараметрыПроверки); + КонецЦикла; - Запрос.УстановитьПараметр("Ссылка", СтрокаРезультата.Ссылка); + Запрос.УстановитьПараметр("Ссылка", СтрокаРезультата.ПроблемныйОбъект); Результат = Запрос.Выполнить().Выгрузить(); КонецЦикла; - Запрос = Неопределено; КонецПроцедуры diff --git a/SSL/src/CommonModules/РаботаСФайламиСлужебныйВызовСервера/Module.bsl b/SSL/src/CommonModules/РаботаСФайламиСлужебныйВызовСервера/Module.bsl index 8266c1433..7ba6110fe 100644 --- a/SSL/src/CommonModules/РаботаСФайламиСлужебныйВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайламиСлужебныйВызовСервера/Module.bsl @@ -117,7 +117,7 @@ Продолжить; КонецЕсли; - ИменаСправочников = РаботаСФайламиСлужебный.ИменаСправочниковХраненияФайлов(Тип); + ИменаСправочников = РаботаСФайламиСлужебный.ИменаСправочниковХраненияФайлов(Тип, Истина); Для каждого КлючИЗначение Из ИменаСправочников Цикл Если ВсеИменаСправочников[КлючИЗначение.Ключ] <> Неопределено Тогда @@ -747,6 +747,10 @@ Для Каждого Тип Из ТипыФайлов Цикл МетаданныеСправочникаФайлов = Метаданные.НайтиПоТипу(Тип); + НеИспользоватьПолнотекстовыйПоиск = Метаданные.СвойстваОбъектов.ИспользованиеПолнотекстовогоПоиска.НеИспользовать; + Если МетаданныеСправочникаФайлов.ПолнотекстовыйПоиск = НеИспользоватьПолнотекстовыйПоиск Тогда + Продолжить; + КонецЕсли; ВсеИменаСправочников.Добавить(МетаданныеСправочникаФайлов.Имя); КонецЦикла; diff --git a/SSL/src/CommonModules/РаботаСФайламиСлужебныйКлиент/Module.bsl b/SSL/src/CommonModules/РаботаСФайламиСлужебныйКлиент/Module.bsl index 6ae0ae2f5..ea1ea43ab 100644 --- a/SSL/src/CommonModules/РаботаСФайламиСлужебныйКлиент/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайламиСлужебныйКлиент/Module.bsl @@ -109,8 +109,7 @@ ОбщиеНастройки = РаботаСФайламиСлужебныйКлиентСервер.ОбщиеНастройкиРаботыСФайлами(); ИзвлекатьТекстыФайловНаКлиенте = НЕ ОбщиеНастройки.ИзвлекатьТекстыФайловНаСервере; Если ИзвлекатьТекстыФайловНаКлиенте Тогда - АдресВременногоХранилищаТекста = РаботаСФайламиСлужебныйКлиентСервер.ИзвлечьТекстВоВременноеХранилище( - ФайлКлиента.ПолноеИмя, + АдресВременногоХранилищаТекста = ИзвлечьТекстВоВременноеХранилище(ФайлКлиента.ПолноеИмя, ПараметрыВыполнения.ФормаВладелец.УникальныйИдентификатор); Иначе АдресВременногоХранилищаТекста = ""; @@ -508,15 +507,11 @@ СписокВложений = РаботаСФайламиСлужебныйВызовСервера.ПоместитьФайлыВоВременноеХранилище(ДополнительныеПараметры); ПараметрыОтправки = ДополнительныеПараметры.ПараметрыОтправки; - ПараметрыНовогоПисьма = Новый Структура; - ПараметрыНовогоПисьма.Вставить("Получатель", ПараметрыОтправки.Получатель); - ПараметрыНовогоПисьма.Вставить("Тема", ПараметрыОтправки.Тема); - ПараметрыНовогоПисьма.Вставить("Текст", ПараметрыОтправки.Текст); - ПараметрыНовогоПисьма.Вставить("Вложения", СписокВложений); - ПараметрыНовогоПисьма.Вставить("УдалятьФайлыПослеОтправки", Истина); + ПараметрыОтправки.Вставить("Вложения", СписокВложений); + ПараметрыОтправки.Вставить("УдалятьФайлыПослеОтправки", Истина); МодульРаботаСПочтовымиСообщениямиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаСПочтовымиСообщениямиКлиент"); - МодульРаботаСПочтовымиСообщениямиКлиент.СоздатьНовоеПисьмо(ПараметрыНовогоПисьма); + МодульРаботаСПочтовымиСообщениямиКлиент.СоздатьНовоеПисьмо(ПараметрыОтправки); КонецПроцедуры @@ -659,7 +654,7 @@ // Проверяет установлена ли компонента сканирования и есть ли хоть один сканер. Функция ДоступнаКомандаСканировать() Экспорт - Если Не ПроинициализироватьКомпоненту() Тогда + Если Не ПроинициализироватьКомпоненту(Ложь) Тогда Возврат Ложь; КонецЕсли; @@ -713,14 +708,14 @@ КонецПроцедуры -#Если НЕ ВебКлиент Тогда // Извлекает текст из файла на диске на клиенте и помещает результат на сервер. Процедура ИзвлечьТекстВерсии(ФайлИлиВерсияФайла, АдресФайла, Расширение, УникальныйИдентификатор, Кодировка = Неопределено) Экспорт - + +#Если НЕ ВебКлиент Тогда ИмяФайлаСПутем = ПолучитьИмяВременногоФайла(Расширение); Если Не ПолучитьФайл(АдресФайла, ИмяФайлаСПутем, Ложь) Тогда @@ -771,10 +766,11 @@ РаботаСФайламиСлужебныйВызовСервера.ЗаписатьРезультатИзвлеченияТекста( ФайлИлиВерсияФайла, РезультатИзвлечения, АдресВременногоХранилищаТекста); - -КонецПроцедуры + #КонецЕсли +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Обработчики событий подсистем конфигурации. @@ -871,7 +867,6 @@ КонецПроцедуры - // Продолжение процедуры ПроверитьПодписи. Процедура ПроверитьПодписиЦиклНачало(ДополнительныеПараметры) @@ -1267,9 +1262,7 @@ Если ОбщиеНастройки.ИзвлекатьТекстыФайловНаСервере Тогда АдресВременногоХранилищаТекста = ""; Иначе - АдресВременногоХранилищаТекста = - РаботаСФайламиСлужебныйКлиентСервер.ИзвлечьТекстВоВременноеХранилище( - ПолноеИмяФайла, ИдентификаторФормы); + АдресВременногоХранилищаТекста = ИзвлечьТекстВоВременноеХранилище(ПолноеИмяФайла, ИдентификаторФормы); КонецЕсли; ВремяИзмененияУниверсальное = Файл.ПолучитьУниверсальноеВремяИзменения(); @@ -1539,6 +1532,39 @@ КонецПроцедуры +// Извлечь текст из файла и поместить во временное хранилище. +Функция ИзвлечьТекстВоВременноеХранилище(ПолноеИмяФайла, УникальныйИдентификатор = "", Отказ = Ложь, + Кодировка = Неопределено) + + АдресВременногоХранилища = ""; + + #Если Не ВебКлиент Тогда + + Текст = РаботаСФайламиСлужебныйКлиентСервер.ИзвлечьТекст(ПолноеИмяФайла, Отказ, Кодировка); + + Если ПустаяСтрока(Текст) Тогда + Возврат ""; + КонецЕсли; + + ИмяВременногоФайла = ПолучитьИмяВременногоФайла(); + ТекстовыйФайл = Новый ЗаписьТекста(ИмяВременногоФайла, КодировкаТекста.UTF8); + ТекстовыйФайл.Записать(Текст); + ТекстовыйФайл.Закрыть(); + + РезультатЗагрузки = ПоместитьФайлСДискаВоВременноеХранилище(ИмяВременногоФайла, , УникальныйИдентификатор); + Если РезультатЗагрузки <> Неопределено Тогда + АдресВременногоХранилища = РезультатЗагрузки; + КонецЕсли; + + УдалитьФайлы(ИмяВременногоФайла); + + #КонецЕсли + + Возврат АдресВременногоХранилища; + +КонецФункции + + //////////////////////////////////////////////////////////////////////////////// // Завершение редактирования Файла и помещение его на сервер. @@ -1725,8 +1751,6 @@ // Продолжение процедуры (см. выше). Процедура ЗакончитьРедактированиеСРасширениемПослеПроверкиНовойВерсии(ПараметрыВыполнения) - СтараяВерсия = ПараметрыВыполнения.ДанныеФайла.ТекущаяВерсия; - Если Не ПараметрыВыполнения.ДанныеФайла.Зашифрован Тогда ЗакончитьРедактированиеСРасширениемПослеПроверкиЗашифрован(, ПараметрыВыполнения); Возврат; @@ -1786,16 +1810,14 @@ ОбщиеНастройкиРаботыСФайлами = РаботаСФайламиСлужебныйКлиентСервер.ОбщиеНастройкиРаботыСФайлами(); Если Не ОбщиеНастройкиРаботыСФайлами.ИзвлекатьТекстыФайловНаСервере Тогда Попытка - СведенияОФайле.АдресВременногоХранилищаТекста = РаботаСФайламиСлужебныйКлиентСервер.ИзвлечьТекстВоВременноеХранилище( - ПараметрыВыполнения.ПолныйПутьКФайлу, ПараметрыВыполнения.ИдентификаторФормы,, ПараметрыВыполнения.Кодировка); + СведенияОФайле.АдресВременногоХранилищаТекста = ИзвлечьТекстВоВременноеХранилище(ПараметрыВыполнения.ПолныйПутьКФайлу, + ПараметрыВыполнения.ИдентификаторФормы,, ПараметрыВыполнения.Кодировка); Исключение ЗакончитьРедактированиеСРасширениемОбработкаИсключения(ИнформацияОбОшибке(), ПараметрыВыполнения); Возврат; КонецПопытки; КонецЕсли; - ВРабочемКаталогеВладельца = ПараметрыВыполнения.ДанныеФайла.РабочийКаталогВладельца <> ""; - НеМенятьЗаписьВРабочемКаталоге = Ложь; Если ПараметрыВыполнения.ПереданныйПолныйПутьКФайлу <> "" Тогда НеМенятьЗаписьВРабочемКаталоге = Истина; @@ -2131,7 +2153,6 @@ Возврат; КонецПопытки; - НоваяВерсия = ПараметрыВыполнения.ДанныеФайла.ТекущаяВерсия; Если ПараметрыВыполнения.ПоказыватьОповещение Тогда Если Результат.Успешно Тогда ШаблонПояснения = НСтр("ru = 'Файл ""%1"" @@ -2996,7 +3017,9 @@ КонецЦикла; - РасширениеПодключено = РасширениеРаботыСФайламиПодключено(); + Если Не РасширениеРаботыСФайламиПодключено() Тогда + Возврат; + КонецЕсли; Обработчик = Новый ОписаниеОповещения("ОсвободитьФайлыПоСсылкамПослеОтветаНаВопросОтменитьРедактирование", ЭтотОбъект, ПараметрыВыполнения); @@ -3398,11 +3421,10 @@ КонецЕсли; Если Не ОбщиеНастройкиРаботыСФайлами.ИзвлекатьТекстыФайловНаСервере Тогда - АдресВременногоХранилищаТекста = РаботаСФайламиСлужебныйКлиентСервер.ИзвлечьТекстВоВременноеХранилище( - ПараметрыВыполнения.ПолныйПутьКФайлу, + СведенияОФайле.АдресВременногоХранилищаТекста = ИзвлечьТекстВоВременноеХранилище(ПараметрыВыполнения.ПолныйПутьКФайлу, ПараметрыВыполнения.ИдентификаторФормы); Иначе - АдресВременногоХранилищаТекста = ""; + СведенияОФайле.АдресВременногоХранилищаТекста = ""; КонецЕсли; НеМенятьЗаписьВРабочемКаталоге = Ложь; @@ -3717,7 +3739,6 @@ КонецПроцедуры - // Для процедур СохранитьИзмененияФайла, ЗакончитьРедактирование. Функция СертификатыНеУказаны(МассивСертификатов) @@ -3953,9 +3974,6 @@ ПараметрыВыполнения.Вставить("ПолноеИмяФайла", ""); ПараметрыВыполнения.Вставить("ФайлПолучен", Ложь); - ДатаФайлаВБазе = ПараметрыВыполнения.ДанныеФайла.ДатаМодификацииУниверсальная; - РазмерФайлаВБазе = ПараметрыВыполнения.ДанныеФайла.Размер; - ВРабочемКаталогеНаЧтение = Истина; ВРабочемКаталогеВладельца = Ложь; @@ -4092,7 +4110,6 @@ КонецПроцедуры - // См. одноименную процедуру в общем модуле РаботаСФайламиКлиент. Процедура ПолучитьПрисоединенныйФайл(Оповещение, ПрисоединенныйФайл, ИдентификаторФормы, ДополнительныеПараметры = Неопределено) Экспорт @@ -4283,8 +4300,21 @@ КонецЕсли; Контекст.Вставить("РабочийКаталогПользователя", Результат.Каталог); - Контекст.Вставить("КаталогФайла", Контекст.РабочийКаталогПользователя); - Контекст.Вставить("ПолноеИмяФайла", Контекст.ДанныеФайла.ПолноеИмяФайлаВРабочемКаталоге); + Контекст.Вставить("КаталогФайла", Контекст.РабочийКаталогПользователя + Контекст.ДанныеФайла.ОтносительныйПуть); + Контекст.Вставить("ПолноеИмяФайла", Контекст.КаталогФайла + Контекст.ДанныеФайла.ИмяФайла); + + Файл = Новый Файл(Контекст.ПолноеИмяФайла); + Если НЕ Файл.Существует() Тогда + // для совместимости двух подсистем. + Контекст.Вставить("КаталогФайла", Контекст.РабочийКаталогПользователя); + Контекст.Вставить("ПолноеИмяФайла", Контекст.ДанныеФайла.ПолноеИмяФайлаВРабочемКаталоге); + + Если ПустаяСтрока(Контекст.ДанныеФайла.ПолноеИмяФайлаВРабочемКаталоге) Тогда + // файла нет в рабочем каталоге, просто освобождаем его. + ОсвободитьФайлБезВопроса(Контекст.ДанныеФайла, Контекст.ИдентификаторФормы); + Возврат; + КонецЕсли; + КонецЕсли; Если Не ЗначениеЗаполнено(Контекст.ПолноеИмяПомещаемогоФайла) Тогда Контекст.ПолноеИмяПомещаемогоФайла = Контекст.ПолноеИмяФайла; @@ -5043,8 +5073,6 @@ КонецЕсли; #КонецЕсли - РазмерФайла = 0; - // Запись Файл в каталог ПараметрыВыполнения.ИмяФайла = ОбщегоНазначенияКлиентСервер.ПолучитьИмяСРасширением( ПараметрыВыполнения.ДанныеФайла.ПолноеНаименованиеВерсии, @@ -5270,13 +5298,9 @@ // Продолжение процедуры (см. выше). Процедура ПолучитьФайлВерсииВРабочийКаталогПапкиЗапуск(ПараметрыВыполнения) - Перем Версия; - Перем ДатаПомещения; ПараметрыВыполнения.Вставить("ФайлПолучен", Ложь); - ВРабочемКаталогеВладельца = Истина; - // Формирование имени файла с расширением. ИмяФайла = ПараметрыВыполнения.ДанныеФайла.ПолноеНаименованиеВерсии; Если Не ПустаяСтрока(ПараметрыВыполнения.ДанныеФайла.Расширение) Тогда @@ -5314,7 +5338,6 @@ Версия = НайденныеСвойства.Файл; ДатаПомещения = ?(ПараметрыВыполнения.ФайлЕстьВРегистре, НайденныеСвойства.ДатаПомещения, ДатаПомещения); Владелец = НайденныеСвойства.Владелец; - НомерВерсии = НайденныеСвойства.НомерВерсии; ВРегистреНаЧтение = НайденныеСвойства.ВРегистреНаЧтение; ВРегистреКодФайла = НайденныеСвойства.ВРегистреКодФайла; ВРегистреПапка = НайденныеСвойства.ВРегистреПапка; @@ -5755,8 +5778,8 @@ ПараметрыВыполнения.Вставить("КаталогПриемника", КаталогПриемника); ПараметрыВыполнения.Вставить("Результат", Результат); - Обработчик = Новый ОписаниеОповещения( - "СкопироватьСодержимоеКаталогаПослеОтветаНаВопрос", ЭтотОбъект, ПараметрыВыполнения); + Обработчик = Новый ОписаниеОповещения("СкопироватьСодержимоеКаталогаПослеОтветаНаВопрос", + ЭтотОбъект, ПараметрыВыполнения); ПоказатьВопрос(Обработчик, ТекстВопроса, РежимДиалогаВопрос.ДаНет); Иначе @@ -6434,11 +6457,6 @@ Файл = Новый Файл(ПолноеИмяФайла); - ИмяФайла = ОбщегоНазначенияКлиентСервер.ПолучитьИмяСРасширением( - ПараметрыВыполнения.ДанныеФайла.ПолноеНаименованиеВерсии, ПараметрыВыполнения.ДанныеФайла.Расширение); - - РазмерВМб = ПараметрыВыполнения.ДанныеФайла.Размер / (1024 * 1024); - Если Файл.Существует() Тогда Если ПараметрыВыполнения.ПутьКФайлуВКэше <> ПолноеИмяФайла Тогда Файл.УстановитьТолькоЧтение(Ложь); @@ -7533,12 +7551,9 @@ ПолныйПутьКФайлу = ПолучитьИмяВременногоФайла(ПараметрыВыполнения.ДанныеФайла.Расширение); ДвоичныеДанныеРасшифрованные.Записать(ПолныйПутьКФайлу); - АдресВременногоХранилищаТекста = РаботаСФайламиСлужебныйКлиентСервер.ИзвлечьТекстВоВременноеХранилище( - ПолныйПутьКФайлу, ПараметрыВыполнения.УникальныйИдентификатор); - + АдресВременногоХранилищаТекста = ИзвлечьТекстВоВременноеХранилище(ПолныйПутьКФайлу, ПараметрыВыполнения.УникальныйИдентификатор); + УдалитьФайлы(ПолныйПутьКФайлу); - Иначе - АдресВременногоХранилищаТекста = ""; КонецЕсли; #КонецЕсли @@ -8327,9 +8342,6 @@ БиблиотекаКартинок.Информация32); // Создаем Элемент справочника Файлы. - ИмяБезРасширения = ВыбранныйФайл.ИмяБезРасширения; - Расширение = ВыбранныйФайл.Расширение; - АдресВременногоХранилищаФайла = ""; ПомещаемыеФайлы = Новый Массив; @@ -8351,9 +8363,8 @@ КонецЕсли; Если НЕ РаботаСФайламиСлужебныйКлиентСервер.ОбщиеНастройкиРаботыСФайлами().ИзвлекатьТекстыФайловНаСервере Тогда - АдресВременногоХранилищаТекста = - РаботаСФайламиСлужебныйКлиентСервер.ИзвлечьТекстВоВременноеХранилище( - ВыбранныйФайл.ПолноеИмя, ПараметрыВыполнения.ИдентификаторФормы, , ПараметрыВыполнения.Кодировка); + АдресВременногоХранилищаТекста = ИзвлечьТекстВоВременноеХранилище(ВыбранныйФайл.ПолноеИмя, + ПараметрыВыполнения.ИдентификаторФормы, , ПараметрыВыполнения.Кодировка); Иначе АдресВременногоХранилищаТекста = ""; КонецЕсли; @@ -8741,11 +8752,6 @@ ФайлЕстьВРегистре = НайденныеСвойства.ФайлЕстьВРегистре; Версия = НайденныеСвойства.Файл; ДатаПомещения = ?(ФайлЕстьВРегистре, НайденныеСвойства.ДатаПомещения, ДатаПомещения); - Владелец = НайденныеСвойства.Файл; - НомерВерсии = НайденныеСвойства.НомерВерсии; - ВРегистреНаЧтение = НайденныеСвойства.ВРегистреНаЧтение; - ВРегистреКодФайла = НайденныеСвойства.ВРегистреКодФайла; - ВРегистреПапка = НайденныеСвойства.ВРегистреПапка; Если ФайлЕстьВРегистре Тогда РедактируетТекущийПользователь = РаботаСФайламиСлужебныйВызовСервера.ПолучитьРедактируетТекущийПользователь(Версия); @@ -8789,7 +8795,6 @@ // Сперва пытаемся найти такую запись в регистре сведений. ПолноеИмяФайла = ДанныеФайла.ПолноеИмяФайлаВРабочемКаталоге; - ВРабочемКаталогеНаЧтение = ДанныеФайла.ВРабочемКаталогеНаЧтение; Если ПолноеИмяФайла <> "" Тогда // Тут надо еще на наличие на диске проверять. @@ -8837,6 +8842,31 @@ //////////////////////////////////////////////////////////////////////////////// // ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +// Возвращает структуру, содержащую различные персональные настройки. +Функция ПерсональныеНастройкиРаботыСФайлами() Экспорт + + ПерсональныеНастройки = + СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиента().ПерсональныеНастройкиРаботыСФайлами; + + // Проверка и обновление настроек сохраненных на сервере, + // которые вычисляются на клиенте. + + Возврат ПерсональныеНастройки; + +КонецФункции + +// Возвращает структуру, содержащую различные персональные настройки. +Функция ОбщиеНастройкиРаботыСФайлами() Экспорт + + ОбщиеНастройки = СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиента().ОбщиеНастройкиРаботыСФайлами; + + // Проверка и обновление настроек сохраненных на сервере, + // которые вычисляются на клиенте. + + Возврат ОбщиеНастройки; + +КонецФункции + // Находится ли в рабочем каталоге Файл для данной версии. // Параметры: // ДанныеФайла - структура с данными файла. @@ -9203,6 +9233,8 @@ Процедура ВыполнитьСравнениеФайлов(ПутьКФайлу1, ПутьКФайлу2, СпособСравненияВерсийФайлов, ЗаголовокЛевый = "", ЗаголовокПравый = "") Экспорт +#Если Не ВебКлиент Тогда + Попытка Если СпособСравненияВерсийФайлов = "MicrosoftOfficeWord" Тогда ОбъектWord = Новый COMОбъект("Word.Application"); @@ -9228,7 +9260,6 @@ // Открыть OpenOffice ServiceManager = Новый COMОбъект("com.sun.star.ServiceManager"); - Reflection = ServiceManager.createInstance("com.sun.star.reflection.CoreReflection"); Desktop = ServiceManager.createInstance("com.sun.star.frame.Desktop"); Dispatcher = ServiceManager.createInstance("com.sun.star.frame.DispatchHelper"); @@ -9240,7 +9271,7 @@ ПараметрыДокумента.SetValue(0, РежимЗапуска); // Открыть документ OpenOffice. - OOДокумент = Desktop.loadComponentFromURL(ПреобразоватьВURL(ПутьКФайлу2), "_blank", 0, ПараметрыДокумента); + Desktop.loadComponentFromURL(ПреобразоватьВURL(ПутьКФайлу2), "_blank", 0, ПараметрыДокумента); frame = Desktop.getCurrentFrame(); @@ -9254,7 +9285,6 @@ ПараметрыВызова.SetValue(0, ПрисвоитьЗначениеСвойству(ServiceManager, "URL", ПреобразоватьВURL(ПутьКФайлу1))); dispatcher.executeDispatch(frame, ".uno:CompareDocuments", "", 0, ПараметрыВызова); - OOДокумент = Неопределено; ИначеЕсли СпособСравненияВерсийФайлов = "СравнениеТабличныхДокументов" Тогда ПомещаемыеФайлы = Новый Массив; @@ -9272,14 +9302,16 @@ ПараметрыОткрытияФормы = Новый Структура("АдресТабличныхДокументов, ЗаголовокЛевый, ЗаголовокПравый", АдресТабличныхДокументов, ЗаголовокЛевый, ЗаголовокПравый); - ФормаСравнения = ОткрытьФорму("ОбщаяФорма.СравнениеТабличныхДокументов", ПараметрыОткрытияФормы, ЭтотОбъект); + ОткрытьФорму("ОбщаяФорма.СравнениеТабличныхДокументов", ПараметрыОткрытияФормы, ЭтотОбъект); КонецЕсли; Исключение ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - КраткоеПредставлениеОшибки(ИнформацияОбОшибке() )); + КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; +#КонецЕсли + КонецПроцедуры // Функция преобразует Windows имя файла в URL OpenOffice. @@ -9853,7 +9885,7 @@ КонецПроцедуры // Загружает файл с клиента во временное хранилище на сервере. Не работает без расширения работы с файлами. -Функция ПоместитьФайлСДискаВоВременноеХранилище(ПолноеИмяФайла, АдресФайла = "", УникальныйИдентификатор = Неопределено) Экспорт +Функция ПоместитьФайлСДискаВоВременноеХранилище(ПолноеИмяФайла, АдресФайла = "", УникальныйИдентификатор = Неопределено) Если Не РасширениеРаботыСФайламиПодключено() Тогда Возврат Неопределено; КонецЕсли; @@ -9871,7 +9903,7 @@ // Процедуры и функция для работы со сканером. // Инициализация компоненты сканирования. -Функция ПроинициализироватьКомпоненту() Экспорт +Функция ПроинициализироватьКомпоненту(ПопытатьсяУстановитьКомпоненту = Истина) Экспорт СистемнаяИнформация = Новый СистемнаяИнформация; Если СистемнаяИнформация.ТипПлатформы <> ТипПлатформы.Windows_x86 @@ -9884,9 +9916,17 @@ // Вызов метода ОбщегоНазначенияКлиент.ПодключитьКомпонентуИзМакета не требуется т.к. // Внешняя компонента подключается из макета и сканирование не доступно в веб-клиенте. - КодВозврата = ПодключитьВнешнююКомпоненту("ОбщийМакет.КомпонентаTWAIN", "twain", ТипВнешнейКомпоненты.Native); + КодВозврата = ПодключитьВнешнююКомпоненту("ОбщийМакет.КомпонентаTWAIN", "twain"); Если Не КодВозврата Тогда - Возврат Ложь; + + Если Не ПопытатьсяУстановитьКомпоненту Тогда + Возврат Ложь; + КонецЕсли; + + НачатьУстановкуВнешнейКомпоненты(, "ОбщийМакет.КомпонентаTWAIN"); + + Возврат ПроинициализироватьКомпоненту(Ложь); // Рекурсивно. + КонецЕсли; ПараметрыПриложения.Вставить(ИмяПараметра, Новый("AddIn.twain.AddInNativeExtension")); @@ -10003,8 +10043,9 @@ Процедура ВыбратьРежимИРедактироватьФайл(ОбработчикРезультата, ДанныеФайла, ДоступностьКомандыРедактировать) Экспорт // Выбрать режим открытия файла и начать редактирование. РезультатОткрыть = "Открыть"; - РезультатРедактировать = "Редактировать"; - РезультатОтмена = "Отмена"; + // Другие режимы открытия доступны + // "Редактировать" + // "Отмена". ПерсональныеНастройки = РаботаСФайламиСлужебныйКлиентСервер.ПерсональныеНастройкиРаботыСФайлами(); diff --git a/SSL/src/CommonModules/РаботаСФайламиСлужебныйКлиентПовтИсп/Module.bsl b/SSL/src/CommonModules/РаботаСФайламиСлужебныйКлиентПовтИсп/Module.bsl index 98375abaf..5ab7a1dc3 100644 --- a/SSL/src/CommonModules/РаботаСФайламиСлужебныйКлиентПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайламиСлужебныйКлиентПовтИсп/Module.bsl @@ -12,31 +12,6 @@ КонецФункции -// Возвращает структуру, содержащую различные персональные настройки. -Функция ПерсональныеНастройкиРаботыСФайлами() Экспорт - - ПерсональныеНастройки = - СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиента().ПерсональныеНастройкиРаботыСФайлами; - - // Проверка и обновление настроек сохраненных на сервере, - // которые вычисляются на клиенте. - - Возврат ПерсональныеНастройки; - -КонецФункции - -// Возвращает структуру, содержащую различные персональные настройки. -Функция ОбщиеНастройкиРаботыСФайлами() Экспорт - - ОбщиеНастройки = СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиента().ОбщиеНастройкиРаботыСФайлами; - - // Проверка и обновление настроек сохраненных на сервере, - // которые вычисляются на клиенте. - - Возврат ОбщиеНастройки; - -КонецФункции - // Возвращает параметр сеанса ПутьКРабочемуКаталогуПользователя. Функция РабочийКаталогПользователя() Экспорт diff --git a/SSL/src/CommonModules/РаботаСФайламиСлужебныйКлиентСервер/Module.bsl b/SSL/src/CommonModules/РаботаСФайламиСлужебныйКлиентСервер/Module.bsl index 6866d5a92..4fac52903 100644 --- a/SSL/src/CommonModules/РаботаСФайламиСлужебныйКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайламиСлужебныйКлиентСервер/Module.bsl @@ -7,7 +7,7 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда Возврат РаботаСФайламиСлужебныйПовтИсп.НастройкиРаботыСФайлами().ПерсональныеНастройки; #Иначе - Возврат РаботаСФайламиСлужебныйКлиентПовтИсп.ПерсональныеНастройкиРаботыСФайлами(); + Возврат РаботаСФайламиСлужебныйКлиент.ПерсональныеНастройкиРаботыСФайлами(); #КонецЕсли КонецФункции @@ -19,7 +19,7 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда Возврат РаботаСФайламиСлужебныйПовтИсп.НастройкиРаботыСФайлами().ОбщиеНастройки; #Иначе - Возврат РаботаСФайламиСлужебныйКлиентПовтИсп.ОбщиеНастройкиРаботыСФайлами(); + Возврат РаботаСФайламиСлужебныйКлиент.ОбщиеНастройкиРаботыСФайлами(); #КонецЕсли КонецФункции @@ -88,42 +88,6 @@ КонецФункции -// Извлечь текст из файла и поместить во временное хранилище. -Функция ИзвлечьТекстВоВременноеХранилище(ПолноеИмяФайла, УникальныйИдентификатор = "", Отказ = Ложь, - Кодировка = Неопределено) Экспорт - - АдресВременногоХранилища = ""; - - #Если Не ВебКлиент Тогда - - Текст = ИзвлечьТекст(ПолноеИмяФайла, Отказ, Кодировка); - - Если ПустаяСтрока(Текст) Тогда - Возврат ""; - КонецЕсли; - - ИмяВременногоФайла = ПолучитьИмяВременногоФайла(); - ТекстовыйФайл = Новый ЗаписьТекста(ИмяВременногоФайла, КодировкаТекста.UTF8); - ТекстовыйФайл.Записать(Текст); - ТекстовыйФайл.Закрыть(); - - #Если Клиент Тогда - РезультатЗагрузки = РаботаСФайламиСлужебныйКлиент.ПоместитьФайлСДискаВоВременноеХранилище(ИмяВременногоФайла, , УникальныйИдентификатор); - Если РезультатЗагрузки <> Неопределено Тогда - АдресВременногоХранилища = РезультатЗагрузки; - КонецЕсли; - #Иначе - Возврат Текст; - #КонецЕсли - - УдалитьФайлы(ИмяВременногоФайла); - - #КонецЕсли - - Возврат АдресВременногоХранилища; - -КонецФункции - // Получить уникальное имя файла в рабочем каталоге. // Если есть совпадения - будет имя подобное "A1\Приказ.doc". // @@ -138,22 +102,17 @@ ГенераторСлучая = Неопределено; #Если Не ВебКлиент Тогда - // ТекущаяДата() используется только для генерации случайного числа, - // поэтому приведение к ТекущаяДатаСеанса не требуется. - ЧислоСекундТекущейДаты = ТекущаяДата() - '00010101'; - ГенераторСлучая = Новый ГенераторСлучайныхЧисел(ЧислоСекундТекущейДаты); + ГенераторСлучая = Новый ГенераторСлучайныхЧисел(ТекущаяУниверсальнаяДатаВМиллисекундах()); #КонецЕсли КоличествоСлучайныхВариантов = 26; Пока НЕ Успешно И ЦиклНомер < 100 Цикл НомерКаталога = 0; + #Если Не ВебКлиент Тогда НомерКаталога = ГенераторСлучая.СлучайноеЧисло(0, КоличествоСлучайныхВариантов - 1); #Иначе - // ТекущаяДата() используется только для генерации случайного числа, - // поэтому приведение к ТекущаяДатаСеанса не требуется. - ЧислоСекундТекущейДаты = ТекущаяДата() - '00010101'; - НомерКаталога = ЧислоСекундТекущейДаты % КоличествоСлучайныхВариантов; + НомерКаталога = ТекущаяУниверсальнаяДатаВМиллисекундах() % КоличествоСлучайныхВариантов; #КонецЕсли Если Счетчик > 1 И КоличествоСлучайныхВариантов < 26 * 26 * 26 * 26 * 26 Тогда diff --git a/SSL/src/CommonModules/РассылкаОтчетов/Module.bsl b/SSL/src/CommonModules/РассылкаОтчетов/Module.bsl index 53feaa1cf..019471ea1 100644 --- a/SSL/src/CommonModules/РассылкаОтчетов/Module.bsl +++ b/SSL/src/CommonModules/РассылкаОтчетов/Module.bsl @@ -1,23 +1,22 @@ #Область ПрограммныйИнтерфейс -// Подготавливает параметры для функции ВыполнитьРассылку и выполняет ее. +// Формирует отчеты и отправляет их согласно настройкам транспорта (Папка, FILE, EMAIL, FTP); // // Параметры: -// Рассылка - СправочникСсылка.РассылкиОтчетов - Рассылка, параметры которой будут подготовлены. -// ПараметрыЖурнала - Структура - Необязательный. Параметры записи в журнал регистрации. +// Рассылка - СправочникСсылка.РассылкиОтчетов - Выполняемая рассылка отчетов. +// ПараметрыЖурнала - Структура - Параметры записи в журнал регистрации. // * ИмяСобытия - Строка - Имя события (или группы событий). // * Метаданные - ОбъектМетаданных - Метаданные для привязки события журнала регистрации. // * Данные - Произвольный - Данные для привязки события журнала регистрации. -// ПредварительныеНастройки - Структура - Необязательный. Настройки, которые не требуется формировать из рассылки. +// ДополнительныеНастройки - Структура - Настройки, которые переопределяют стандартные параметры рассылки. // * Получатели - Соответствие - Набор получателей и их e-mail адресов. // ** Ключ - СправочникСсылка - Получатель. // ** Значение - Строка - Набор e-mail адресов получателя в строке с разделителями. // // Возвращаемое значение: -// * Истина - Рассылка выполнена. -// * Ложь - Рассылка не выполнена. +// Булево - признак успешного выполнения рассылки. // -Функция ПодготовитьПараметрыИВыполнитьРассылку(Рассылка, ПараметрыЖурнала = Неопределено, ПредварительныеНастройки = Неопределено) Экспорт +Функция ВыполнитьРассылкуОтчетов(Рассылка, ПараметрыЖурнала = Неопределено, ДополнительныеНастройки = Неопределено) Экспорт // Параметры записи в журнал регистрации. Если ПараметрыЖурнала = Неопределено Тогда ПараметрыЖурнала = Новый Структура; @@ -58,7 +57,7 @@ КонецЕсли; - ЗапускЗафиксирован = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПредварительныеНастройки, "ЗапускЗафиксирован"); + ЗапускЗафиксирован = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ДополнительныеНастройки, "ЗапускЗафиксирован"); Если ЗапускЗафиксирован <> Истина Тогда // Регистрация запуска (запущена, но не выполнена). РегистрыСведений.СостоянияРассылокОтчетов.ЗафиксироватьЗапускРассылки(Рассылка); @@ -79,12 +78,12 @@ // Форматы по умолчанию ФорматыПоУмолчанию = Новый Массив; - Найденные = Рассылка.ФорматыОтчетов.НайтиСтроки(Новый Структура("Отчет", РассылкаОтчетовПовтИсп.ПустоеЗначениеОтчета())); + Найденные = Рассылка.ФорматыОтчетов.НайтиСтроки(Новый Структура("Отчет", ПустоеЗначениеОтчета())); Для Каждого СтрокаФормат Из Найденные Цикл ФорматыПоУмолчанию.Добавить(СтрокаФормат.Формат); КонецЦикла; Если ФорматыПоУмолчанию.Количество() = 0 Тогда - СписокФорматов = РассылкаОтчетовПовтИсп.СписокФорматов(); + СписокФорматов = СписокФорматов(); Для Каждого ЗначениеСписка Из СписокФорматов Цикл Если ЗначениеСписка.Пометка Тогда ФорматыПоУмолчанию.Добавить(ЗначениеСписка.Значение); @@ -187,9 +186,9 @@ Рассылка.ТекстПисьма)); // Получатели - Если ПредварительныеНастройки <> Неопределено И ПредварительныеНастройки.Свойство("Получатели") Тогда + Если ДополнительныеНастройки <> Неопределено И ДополнительныеНастройки.Свойство("Получатели") Тогда - ПараметрыДоставки.Вставить("Получатели", ПредварительныеНастройки.Получатели); + ПараметрыДоставки.Вставить("Получатели", ДополнительныеНастройки.Получатели); Иначе @@ -230,17 +229,22 @@ КонецЕсли; - Возврат ВыполнитьРассылку(ТаблицаОтчетов, ПараметрыДоставки, Рассылка, ПараметрыЖурнала); + Если Не ПараметрыДоставки.Свойство("ЗапускЗафиксирован") Или Не ПараметрыДоставки.ЗапускЗафиксирован Тогда + РегистрыСведений.СостоянияРассылокОтчетов.ЗафиксироватьЗапускРассылки(Рассылка); + КонецЕсли; + + Результат = ВыполнитьРассылку(ТаблицаОтчетов, ПараметрыДоставки, Рассылка, ПараметрыЖурнала); + РегистрыСведений.СостоянияРассылокОтчетов.ЗафиксироватьРезультатВыполненияРассылки(Рассылка, ПараметрыДоставки); + Возврат Результат; КонецФункции -// Формирует отчеты и отправляет согласно настройкам транспорта (Папка, FILE, EMAIL, FTP); -// Позволяет выполнить рассылку не создавая элемент справочника "Рассылки отчетов". +// Выполняет рассылку отчетов без элемента справочника "Рассылки отчетов". // //////////////////////////////////////////////////////////////////////////////// // Параметры: // -// ТаблицаОтчетов - ТаблицаЗначений - Набор выгружаемых отчетов. Колонки: +// Отчеты - ТаблицаЗначений - Набор выгружаемых отчетов. Колонки: // * Отчет - СправочникСсылка.ВариантыОтчетов, СправочникСсылка.ДополнительныеОтчетыИОбработки - // Отчет, который необходимо сформировать. // * ОтправлятьЕслиПустой - Булево - Флаг отправки отчета даже если он пустой. @@ -292,6 +296,7 @@ // Архивация может потребоваться, например, при рассылке графиков в формате html. // * ИмяАрхива - Строка - Имя архива. // * ПарольАрхива - Строка - Пароль архива. +// * ТранслитерироватьИменаФайлов - Булево - Признак необходимости транслитерации имен файлов отчетов рассылки. // // Необязательные реквизиты когда { ИспользоватьЭлектроннуюПочту = Истина }: // * Персонализирована - Булево - Рассылка персонализирована получателями. @@ -323,31 +328,24 @@ // - Картинка - Данные картинки. // ** АдресОтвета - Строка - E-mail адрес ответа. // -// Рассылка - Произвольный - Объект-инициатор. -// Его представление используется в шаблонах темы и сообщения и для отображения ошибок. +// НаименованиеРассылки - Строка - выводится в тему и сообщение, а также для вывода ошибок. // -// ПараметрыЖурнала - Структура - Необязательный. Параметры записи в журнал регистрации. +// ПараметрыЖурнала - Структура - параметры записи в журнал регистрации. // * ИмяСобытия - Строка - Имя события (или группы событий). // * Метаданные - ОбъектМетаданных - Метаданные для привязки события журнала регистрации. // * Данные - Произвольный - Данные для привязки события журнала регистрации. // -//////////////////////////////////////////////////////////////////////////////// // Возвращаемое значение: -// Истина - Рассылка выполнена. -// Ложь - Рассылка не выполнена. +// Булево - признак успешного выполнения рассылки. // -Функция ВыполнитьРассылку(ТаблицаОтчетов, ПараметрыДоставки, Рассылка, ПараметрыЖурнала = Неопределено) Экспорт +Функция ВыполнитьРассылку(Отчеты, ПараметрыДоставки, НаименованиеРассылки = "", ПараметрыЖурнала = Неопределено) Экспорт РассылкаВыполнена = Ложь; - Если Не ПараметрыДоставки.Свойство("ЗапускЗафиксирован") Или Не ПараметрыДоставки.ЗапускЗафиксирован Тогда - РегистрыСведений.СостоянияРассылокОтчетов.ЗафиксироватьЗапускРассылки(Рассылка); - КонецЕсли; - // Добавление дерева сформированных отчетов - табличных документов и отчетов, сохраненных в форматы (файлов). ДеревоОтчетов = СоздатьДеревоОтчетов(); // Заполнение параметрами по умолчанию и проверка на заполненность ключевых параметров доставки. - Если Не ПроверитьИДозаполнитьПараметрыВыполнения(ТаблицаОтчетов, ПараметрыДоставки, Рассылка, ПараметрыЖурнала) Тогда + Если Не ПроверитьИДозаполнитьПараметрыВыполнения(Отчеты, ПараметрыДоставки, НаименованиеРассылки, ПараметрыЖурнала) Тогда Возврат Ложь; КонецЕсли; @@ -356,12 +354,12 @@ ЗаписьЖурнала(ПараметрыЖурнала, , НСтр("ru = 'Инициализирована рассылка %1, автор: %2'"), , - "'"+ Строка(Рассылка) +"'", + "'"+ Строка(НаименованиеРассылки) +"'", "'"+ Строка(ПараметрыДоставки.Автор) +"'"); // Формирование и сохранение отчетов. НомерОтчета = 1; - Для Каждого СтрокаОтчет Из ТаблицаОтчетов Цикл + Для Каждого СтрокаОтчет Из Отчеты Цикл ТекстЖурнала = НСтр("ru = 'Отчет %1 формируется'"); Если СтрокаОтчет.Настройки = Неопределено Тогда ТекстЖурнала = ТекстЖурнала + Символы.ПС + НСтр("ru = '(пользовательские настройки не заданы)'"); @@ -417,8 +415,7 @@ Если ДеревоОтчетов.Строки.Найти(3, "Уровень", Истина) = Неопределено Тогда ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Предупреждение, НСтр("ru = 'Рассылка отчетов не выполнена, так как отчеты пустые или не сформированы из-за ошибок.'"), ,); - СтандартныеПодсистемыСервер.ОчиститьКаталогВременныхФайлов(ПараметрыДоставки.КаталогВременныхФайлов); - РегистрыСведений.СостоянияРассылокОтчетов.ЗафиксироватьРезультатВыполненияРассылки(Рассылка, ПараметрыДоставки); + ОбщегоНазначения.УдалитьВременныйКаталог(ПараметрыДоставки.КаталогВременныхФайлов); Возврат Ложь; КонецЕсли; @@ -488,7 +485,7 @@ ЗаписьЖурнала(ПараметрыЖурнала, , НСтр("ru = 'Рассылка не выполнена'")); КонецЕсли; - СтандартныеПодсистемыСервер.ОчиститьКаталогВременныхФайлов(ПараметрыДоставки.КаталогВременныхФайлов); + ОбщегоНазначения.УдалитьВременныйКаталог(ПараметрыДоставки.КаталогВременныхФайлов); // Результат. Если ПараметрыЖурнала.Свойство("БылиОшибки") Тогда @@ -497,7 +494,6 @@ Если ПараметрыЖурнала.Свойство("БылиПредупреждения") Тогда ПараметрыДоставки.БылиПредупреждения = ПараметрыЖурнала.БылиПредупреждения; КонецЕсли; - РегистрыСведений.СостоянияРассылокОтчетов.ЗафиксироватьРезультатВыполненияРассылки(Рассылка, ПараметрыДоставки); Возврат РассылкаВыполнена; КонецФункции @@ -555,11 +551,11 @@ КонецЕсли; // Идентификаторы объектов метаданных. - ИОМД = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Настройки.ОсновнойТип); - СтрокаТаблицы = ТаблицаТипов.Найти(ИОМД, "ИОМД"); + ИдентификаторОбъектаМетаданных = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Настройки.ОсновнойТип); + СтрокаТаблицы = ТаблицаТипов.Найти(ИдентификаторОбъектаМетаданных, "ИдентификаторОбъектаМетаданных"); Если СтрокаТаблицы = Неопределено Тогда СтрокаТаблицы = ТаблицаТипов.Добавить(); - СтрокаТаблицы.ИОМД = ИОМД; + СтрокаТаблицы.ИдентификаторОбъектаМетаданных = ИдентификаторОбъектаМетаданных; КонецЕсли; // Тип получателей @@ -623,7 +619,7 @@ // Параметры: // ПараметрыВыполнения - Структура - Выполняемые рассылки и их параметры. // * МассивРассылок - Массив из СправочникСсылка.РассылкиОтчетов - Выполняемые рассылки. -// * ПредварительныеНастройки - Структура - Параметры. См. ПодготовитьПараметрыИВыполнитьРассылку(). +// * ПредварительныеНастройки - Структура - Параметры см. РассылкаОтчетов.ВыполнитьРассылкуОтчетов. // АдресРезультата - Строка - Адрес во временном хранилище, по которому будет размещен результат. // Процедура ВыполнитьРассылкиВФоновомЗадании(ПараметрыВыполнения, АдресРезультата) Экспорт @@ -660,7 +656,7 @@ Для Каждого СтрокаТаблицы Из Подготовленные Цикл ПараметрыЖурнала = Новый Структура("МассивОшибок", Новый Массив); - СтрокаТаблицы.Выполнена = ПодготовитьПараметрыИВыполнитьРассылку( + СтрокаТаблицы.Выполнена = ВыполнитьРассылкуОтчетов( СтрокаТаблицы.Рассылка, ПараметрыЖурнала, ПредварительныеНастройки); @@ -726,6 +722,33 @@ ПоместитьВоВременноеХранилище(Результат, АдресРезультата); КонецПроцедуры +#Область УстаревшиеПроцедурыИФункции + +// Устарела. Следует использовать ВыполнитьРассылкуОтчетов. +// Формирует отчеты и отправляет их согласно настройкам транспорта (Папка, FILE, EMAIL, FTP); +// +// Параметры: +// Рассылка - СправочникСсылка.РассылкиОтчетов - Выполняемая рассылка отчетов. +// ПараметрыЖурнала - Структура - Параметры записи в журнал регистрации. +// * ИмяСобытия - Строка - Имя события (или группы событий). +// * Метаданные - ОбъектМетаданных - Метаданные для привязки события журнала регистрации. +// * Данные - Произвольный - Данные для привязки события журнала регистрации. +// ДополнительныеНастройки - Структура - Настройки, которые переопределяют стандартные параметры рассылки. +// * Получатели - Соответствие - Набор получателей и их e-mail адресов. +// ** Ключ - СправочникСсылка - Получатель. +// ** Значение - Строка - Набор e-mail адресов получателя в строке с разделителями. +// +// Возвращаемое значение: +// Булево - признак успешного выполнения рассылки. +// +Функция ПодготовитьПараметрыИВыполнитьРассылку(Рассылка, ПараметрыЖурнала = Неопределено, ДополнительныеНастройки = Неопределено) Экспорт + + Возврат ВыполнитьРассылкуОтчетов(Рассылка, ПараметрыЖурнала, ДополнительныеНастройки); + +КонецФункции + +#КонецОбласти + #КонецОбласти #Область СлужебныйПрограммныйИнтерфейс @@ -817,7 +840,7 @@ // Возвращает Истина если у пользователя есть право на сохранение рассылок отчетов. Функция ПравоДобавления() Экспорт - Возврат РассылкаОтчетовПовтИсп.ТекстОшибкиПроверкиПраваДобавления() = ""; + Возврат ТекстОшибкиПроверкиПраваДобавления() = ""; КонецФункции //////////////////////////////////////////////////////////////////////////////// @@ -848,7 +871,7 @@ Возврат; КонецЕсли; - ТекстЗапроса = // ОБЪЕДИНИТЬ ВСЕ используется вместо ИЛИ (требование стандартов). + ТекстЗапроса = "ВЫБРАТЬ | РассылкиОтчетов.Ссылка, | РассылкиОтчетов.ИспользоватьFTPРесурс, @@ -862,24 +885,8 @@ | Справочник.РассылкиОтчетов КАК РассылкиОтчетов |ГДЕ | РассылкиОтчетов.ПометкаУдаления = ЛОЖЬ - | И РассылкиОтчетов.ИспользоватьСетевойКаталог = ИСТИНА - | - |ОБЪЕДИНИТЬ ВСЕ - | - |ВЫБРАТЬ - | РассылкиОтчетов.Ссылка, - | РассылкиОтчетов.ИспользоватьFTPРесурс, - | РассылкиОтчетов.FTPСервер, - | РассылкиОтчетов.FTPКаталог, - | РассылкиОтчетов.FTPПорт, - | РассылкиОтчетов.ИспользоватьСетевойКаталог, - | РассылкиОтчетов.СетевойКаталогWindows, - | РассылкиОтчетов.СетевойКаталогLinux - |ИЗ - | Справочник.РассылкиОтчетов КАК РассылкиОтчетов - |ГДЕ - | РассылкиОтчетов.ПометкаУдаления = ЛОЖЬ - | И РассылкиОтчетов.ИспользоватьFTPРесурс = ИСТИНА"; + | И (РассылкиОтчетов.ИспользоватьСетевойКаталог = ИСТИНА + | ИЛИ РассылкиОтчетов.ИспользоватьFTPРесурс = ИСТИНА)"; Запрос = Новый Запрос; Запрос.Текст = ТекстЗапроса; @@ -999,7 +1006,7 @@ Пока РассылкиОтчетов.Следующий() Цикл Попытка Если РассылкиОтчетов.Ссылка <> NULL И РассылкиОтчетов.Ссылка.РегламентноеЗадание <> NULL Тогда - Задание = РегламентныеЗадания.НайтиПоУникальномуИдентификатору(РассылкиОтчетов.Ссылка.РегламентноеЗадание); + Задание = РегламентныеЗаданияСервер.Задание(РассылкиОтчетов.Ссылка.РегламентноеЗадание); Если Задание <> Неопределено И Задание.Использование Тогда Задание.Использование = Ложь; Задание.Записать(); @@ -1079,7 +1086,7 @@ ПараметрыЖурнала.Данные = Рассылка; // Рассылка - ПодготовитьПараметрыИВыполнитьРассылку(Рассылка, ПараметрыЖурнала, Новый Структура("ЗапускЗафиксирован", Истина)); + ВыполнитьРассылкуОтчетов(Рассылка, ПараметрыЖурнала, Новый Структура("ЗапускЗафиксирован", Истина)); КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// @@ -2060,7 +2067,7 @@ // Параметры и возвращаемое значение: // См. ВыполнитьРассылку(). // -Функция ПроверитьИДозаполнитьПараметрыВыполнения(ТаблицаОтчетов, ПараметрыДоставки, Рассылка, ПараметрыЖурнала) +Функция ПроверитьИДозаполнитьПараметрыВыполнения(ТаблицаОтчетов, ПараметрыДоставки, НаименованиеРассылки, ПараметрыЖурнала) // Параметры записи в журнал регистрации. Если ТипЗнч(ПараметрыЖурнала) <> Тип("Структура") Тогда ПараметрыЖурнала = Новый Структура; @@ -2069,7 +2076,7 @@ ПараметрыЖурнала.Вставить("ИмяСобытия", НСтр("ru = 'Рассылка отчетов. Запуск по требованию'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка())); КонецЕсли; Если Не ПараметрыЖурнала.Свойство("Данные") Тогда - ПараметрыЖурнала.Вставить("Данные", Рассылка); + ПараметрыЖурнала.Вставить("Данные", НаименованиеРассылки); КонецЕсли; Если Не ПараметрыЖурнала.Свойство("Метаданные") Тогда ПараметрыЖурнала.Вставить("Метаданные", Неопределено); @@ -2094,7 +2101,7 @@ Возврат Ложь; КонецЕсли; - ПараметрыДоставки.Вставить("Рассылка", СокрЛП(Строка(Рассылка))); + ПараметрыДоставки.Вставить("Рассылка", СокрЛП(Строка(НаименованиеРассылки))); ПараметрыДоставки.Вставить("ДатаВыполнения", ТекущаяДатаСеанса()); ПараметрыДоставки.Вставить("БылиОшибки", Ложь); ПараметрыДоставки.Вставить("БылиПредупреждения", Ложь); @@ -2256,7 +2263,7 @@ СтруктураЗаполненияШаблонов = Новый Структура("НаименованиеРассылки, Автор, ЗаголовокСистемы, ДатаВыполнения"); СтруктураЗаполненияШаблонов.НаименованиеРассылки = ПараметрыДоставки.Рассылка; СтруктураЗаполненияШаблонов.Автор = ПараметрыДоставки.Автор; - СтруктураЗаполненияШаблонов.ЗаголовокСистемы = РассылкаОтчетовПовтИсп.ИмяЭтойИнформационнойБазы(); + СтруктураЗаполненияШаблонов.ЗаголовокСистемы = ИмяЭтойИнформационнойБазы(); СтруктураЗаполненияШаблонов.ДатаВыполнения = ПараметрыДоставки.ДатаВыполнения; Если Не ПараметрыДоставки.Персонализирована Тогда СтруктураЗаполненияШаблонов.Вставить("Получатель", ""); @@ -2291,7 +2298,7 @@ КонецЕсли; // Каталог временных файлов. - ПараметрыДоставки.Вставить("КаталогВременныхФайлов", СтандартныеПодсистемыСервер.СоздатьКаталогВременныхФайлов("RP")); + ПараметрыДоставки.Вставить("КаталогВременныхФайлов", ОбщегоНазначения.СоздатьВременныйКаталог("RP")); // Соответствие каталогов временных файлов получателей. ПараметрыДоставки.Вставить("НастройкиПолучателей", Новый Соответствие); @@ -2326,6 +2333,11 @@ ПараметрыДоставки.ПараметрыФорматов.Вставить(Формат, ПараметрыФормата); КонецЦикла; + // Параметры транслитерации имен файлов. + Если Не ПараметрыДоставки.Свойство("ТранслитерироватьИменаФайлов") Тогда + ПараметрыДоставки.Вставить("ТранслитерироватьИменаФайлов", Ложь); + КонецЕсли; + // Параметры добавления ссылок на конечные файлы в письмо. ПараметрыДоставки.Вставить("ДобавлятьСсылки", ""); Если ПараметрыДоставки.ИспользоватьЭлектроннуюПочту @@ -2860,5 +2872,77 @@ Возврат Запрос.Выполнить().Выгрузить()[0].Количество; КонецФункции + +// Проверяет права и формирует текст ошибки. +Функция ТекстОшибкиПроверкиПраваДобавления() Экспорт + Если Не ПравоДоступа("Вывод", Метаданные) Тогда + Возврат НСтр("ru = 'Нет прав на вывод информации.'"); + КонецЕсли; + Если Не ПравоДоступа("Изменение", Метаданные.Справочники.РассылкиОтчетов) Тогда + Возврат НСтр("ru = 'Нет прав на рассылки отчетов.'"); + КонецЕсли; + Если Не РаботаСПочтовымиСообщениями.ДоступнаОтправкаПисем() Тогда + Возврат НСтр("ru = 'Нет прав на отправку писем или нет доступных учетных записей.'"); + КонецЕсли; + Возврат ""; +КонецФункции + +// Возвращает список значений перечисления "ФорматыСохраненияОтчетов". +// +// Возвращаемое значение: +// СписокФорматов - СписокЗначений - Список форматов, с пометками на системных форматах по умолчанию. +// * Значение - ПеречислениеСсылка.ФорматыСохраненияОтчетов - Ссылка на описываемый формат. +// * Представление - Строка - Пользовательское представление описываемого формата. +// * Пометка - Булево - Признак использования как формата по умолчанию. +// * Картинка - Картинка - Картинка формата. +// +Функция СписокФорматов() Экспорт + СписокФорматов = Новый СписокЗначений; + УстановитьПараметрыФормата(СписокФорматов, "HTML4", БиблиотекаКартинок.ФорматHTML, Истина); + УстановитьПараметрыФормата(СписокФорматов, "PDF" , БиблиотекаКартинок.ФорматPDF); + УстановитьПараметрыФормата(СписокФорматов, "XLSX" , БиблиотекаКартинок.ФорматExcel2007); + УстановитьПараметрыФормата(СписокФорматов, "XLS" , БиблиотекаКартинок.ФорматExcel); + УстановитьПараметрыФормата(СписокФорматов, "ODS" , БиблиотекаКартинок.ФорматOpenOfficeCalc); + УстановитьПараметрыФормата(СписокФорматов, "MXL" , БиблиотекаКартинок.ФорматMXL); + УстановитьПараметрыФормата(СписокФорматов, "DOCX" , БиблиотекаКартинок.ФорматWord2007); + УстановитьПараметрыФормата(СписокФорматов, "TXT" , БиблиотекаКартинок.ФорматTXT); + УстановитьПараметрыФормата(СписокФорматов, "ANSITXT", БиблиотекаКартинок.ФорматTXT); + + РассылкаОтчетовПереопределяемый.ПереопределитьПараметрыФорматов(СписокФорматов); + + // Оставшиеся форматы + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | Форматы.Ссылка + |ИЗ + | Перечисление.ФорматыСохраненияОтчетов КАК Форматы + |ГДЕ + | (НЕ Форматы.Ссылка В (&МассивФорматов))"; + Запрос.УстановитьПараметр("МассивФорматов", СписокФорматов.ВыгрузитьЗначения()); + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + УстановитьПараметрыФормата(СписокФорматов, Выборка.Ссылка); + КонецЦикла; + + Возврат СписокФорматов; +КонецФункции + +// Получает пустое значение для поиска по таблице "Отчеты" или "ФорматыОтчетов" справочника "РассылкиОтчетов". +Функция ПустоеЗначениеОтчета() Экспорт + УстановитьПривилегированныйРежим(Истина); + Возврат Метаданные.Справочники.РассылкиОтчетов.ТабличныеЧасти.ФорматыОтчетов.Реквизиты.Отчет.Тип.ПривестиЗначение(); +КонецФункции + +// Получает заголовок системы, а если он не задан - синоним метаданных конфигурации. +Функция ИмяЭтойИнформационнойБазы() Экспорт + + УстановитьПривилегированныйРежим(Истина); + Результат = Константы.ЗаголовокСистемы.Получить(); + Возврат ?(ПустаяСтрока(Результат), Метаданные.Синоним, Результат); + +КонецФункции + + #КонецОбласти diff --git a/SSL/src/CommonModules/РассылкаОтчетовКлиент/Module.bsl b/SSL/src/CommonModules/РассылкаОтчетовКлиент/Module.bsl index 8b35a7bcc..0fa27d099 100644 --- a/SSL/src/CommonModules/РассылкаОтчетовКлиент/Module.bsl +++ b/SSL/src/CommonModules/РассылкаОтчетовКлиент/Module.bsl @@ -97,7 +97,10 @@ РезультатВыполнения = РассылкаОтчетовВызовСервера.СформироватьСписокПолучателейРассылки(ПараметрыПолучателей); Если РезультатВыполнения.БылиКритичныеОшибки Тогда - СтандартныеПодсистемыКлиент.ВывестиПредупреждение(Неопределено, РезультатВыполнения, ОбработчикРезультата); + ПараметрыВопросаПользователю = СтандартныеПодсистемыКлиент.ПараметрыВопросаПользователю(); + ПараметрыВопросаПользователю.ПредлагатьБольшеНеЗадаватьЭтотВопрос = Ложь; + ПараметрыВопросаПользователю.Картинка = БиблиотекаКартинок.Предупреждение32; + СтандартныеПодсистемыКлиент.ПоказатьВопросПользователю(Неопределено, РезультатВыполнения.Подробно, РежимДиалогаВопрос.ОК, ПараметрыВопросаПользователю); Возврат; КонецЕсли; @@ -211,23 +214,13 @@ Если КоличествоРассылок > 0 Тогда ОповеститьОбИзменении(?(КоличествоРассылок > 1, Тип("СправочникСсылка.РассылкиОтчетов"), Результат.Рассылки[0])); КонецЕсли; - СтатусОповещения = СтатусОповещенияПользователя.Информация; + ПоказатьОповещениеПользователя(,, Результат.Текст, БиблиотекаКартинок.РассылкаОтчетов, СтатусОповещенияПользователя.Информация); + Иначе - Результат = Новый Структура("Текст, Подробно"); - Результат.Текст = НСтр("ru = 'Не удалось выполнить рассылки отчетов.'") + ВызватьИсключение НСтр("ru = 'Не удалось выполнить рассылки отчетов:'") + Символы.ПС + Задание.КраткоеПредставлениеОшибки; - Результат.Подробно = Задание.ПодробноеПредставлениеОшибки - + Символы.ПС + НСтр("ru = 'Подробности см. в журнале регистрации.'"); - СтатусОповещения = СтатусОповещенияПользователя.Важное; КонецЕсли; - Оповещение = Новый ОписаниеОповещения("УведомитьОЗавершениеРассылки", РассылкаОтчетовКлиент, Результат); - ПоказатьОповещениеПользователя(, Оповещение, Результат.Текст, БиблиотекаКартинок.РассылкаОтчетов, СтатусОповещения); - -КонецПроцедуры - -Процедура УведомитьОЗавершениеРассылки(Результат) Экспорт - СтандартныеПодсистемыКлиент.ВывестиПредупреждение(ЭтотОбъект, Результат); КонецПроцедуры // Открывает рассылку отчетов из формы отчета. diff --git a/SSL/src/CommonModules/РассылкаОтчетовПереопределяемый/Module.bsl b/SSL/src/CommonModules/РассылкаОтчетовПереопределяемый/Module.bsl index ee06e0830..44f6e50c5 100644 --- a/SSL/src/CommonModules/РассылкаОтчетовПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/РассылкаОтчетовПереопределяемый/Module.bsl @@ -90,8 +90,8 @@ // Указанные отчеты используются в качестве исключающего фильтра при выборе отчетов. // // Параметры: -// ИсключаемыеОтчеты - Массив из ОбъектМетаданных: Отчет - Отчеты, подключенные к хранилищу "ВариантыОтчетов", -// но не поддерживающие интеграцию с рассылками. +// ИсключаемыеОтчеты - Массив - Список отчетов в виде объектов с типом ОбъектМетаданных: Отчет, +// подключенные к хранилищу "ВариантыОтчетов", но не поддерживающие интеграцию с рассылками. // Процедура ОпределитьИсключаемыеОтчеты(ИсключаемыеОтчеты) Экспорт diff --git a/SSL/src/CommonModules/РассылкаОтчетовПовтИсп/Module.bsl b/SSL/src/CommonModules/РассылкаОтчетовПовтИсп/Module.bsl index 347444dfb..d2f441cab 100644 --- a/SSL/src/CommonModules/РассылкаОтчетовПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/РассылкаОтчетовПовтИсп/Module.bsl @@ -1,52 +1,11 @@ #Область СлужебныеПроцедурыИФункции -// Возвращает список значений перечисления "ФорматыСохраненияОтчетов". -// -// Возвращаемое значение: -// СписокФорматов - СписокЗначений - Список форматов, с пометками на системных форматах по умолчанию. -// * Значение - ПеречислениеСсылка.ФорматыСохраненияОтчетов - Ссылка на описываемый формат. -// * Представление - Строка - Пользовательское представление описываемого формата. -// * Пометка - Булево - Признак использования как формата по умолчанию. -// * Картинка - Картинка - Картинка формата. -// -Функция СписокФорматов() Экспорт - СписокФорматов = Новый СписокЗначений; - - РассылкаОтчетов.УстановитьПараметрыФормата(СписокФорматов, "HTML4", БиблиотекаКартинок.ФорматHTML, Истина); - РассылкаОтчетов.УстановитьПараметрыФормата(СписокФорматов, "PDF" , БиблиотекаКартинок.ФорматPDF); - РассылкаОтчетов.УстановитьПараметрыФормата(СписокФорматов, "XLSX" , БиблиотекаКартинок.ФорматExcel2007); - РассылкаОтчетов.УстановитьПараметрыФормата(СписокФорматов, "XLS" , БиблиотекаКартинок.ФорматExcel); - РассылкаОтчетов.УстановитьПараметрыФормата(СписокФорматов, "ODS" , БиблиотекаКартинок.ФорматOpenOfficeCalc); - РассылкаОтчетов.УстановитьПараметрыФормата(СписокФорматов, "MXL" , БиблиотекаКартинок.ФорматMXL); - РассылкаОтчетов.УстановитьПараметрыФормата(СписокФорматов, "DOCX" , БиблиотекаКартинок.ФорматWord2007); - РассылкаОтчетов.УстановитьПараметрыФормата(СписокФорматов, "TXT" , БиблиотекаКартинок.ФорматTXT); - РассылкаОтчетов.УстановитьПараметрыФормата(СписокФорматов, "ANSITXT", БиблиотекаКартинок.ФорматTXT); - - РассылкаОтчетовПереопределяемый.ПереопределитьПараметрыФорматов(СписокФорматов); - - // Оставшиеся форматы - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | Форматы.Ссылка - |ИЗ - | Перечисление.ФорматыСохраненияОтчетов КАК Форматы - |ГДЕ - | (НЕ Форматы.Ссылка В (&МассивФорматов))"; - Запрос.УстановитьПараметр("МассивФорматов", СписокФорматов.ВыгрузитьЗначения()); - Выборка = Запрос.Выполнить().Выбрать(); - Пока Выборка.Следующий() Цикл - РассылкаОтчетов.УстановитьПараметрыФормата(СписокФорматов, Выборка.Ссылка); - КонецЦикла; - - Возврат СписокФорматов; -КонецФункции - // Таблица типов получателей в разрезах хранения и пользовательского представления этих типов. // // Возвращаемое значение: // ТаблицаТипов - ТаблицаЗначений - Таблица типов получателей. -// * ИОМД - СправочникСсылка.ИдентификаторыОбъектовМетаданных - Ссылка, которая хранится в базе данных. +// * ИдентификаторОбъектаМетаданных - СправочникСсылка.ИдентификаторыОбъектовМетаданных - Ссылка, которая хранится +// в базе данных. // * ТипПолучателей - ОписаниеТипов - Тип, которым ограничиваются значения списков получателей и исключенных. // * Представление - Строка - Представление типа для пользователей. // * ОсновнойВидКИ - СправочникСсылка.ВидыКонтактнойИнформации - Вид контактной информации: e-mail, по @@ -55,8 +14,9 @@ // * ПутьФормыВыбора - Строка - Путь к форме выбора. // Функция ТаблицаТиповПолучателей() Экспорт + ТаблицаТипов = Новый ТаблицаЗначений; - ТаблицаТипов.Колонки.Добавить("ИОМД", Новый ОписаниеТипов("СправочникСсылка.ИдентификаторыОбъектовМетаданных")); + ТаблицаТипов.Колонки.Добавить("ИдентификаторОбъектаМетаданных", Новый ОписаниеТипов("СправочникСсылка.ИдентификаторыОбъектовМетаданных")); ТаблицаТипов.Колонки.Добавить("ТипПолучателей", Новый ОписаниеТипов("ОписаниеТипов")); ТаблицаТипов.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка")); ТаблицаТипов.Колонки.Добавить("ОсновнойВидКИ", Новый ОписаниеТипов("СправочникСсылка.ВидыКонтактнойИнформации")); @@ -64,7 +24,7 @@ ТаблицаТипов.Колонки.Добавить("ПутьФормыВыбора", Новый ОписаниеТипов("Строка")); ТаблицаТипов.Колонки.Добавить("ОсновнойТип", Новый ОписаниеТипов("ОписаниеТипов")); - ТаблицаТипов.Индексы.Добавить("ИОМД"); + ТаблицаТипов.Индексы.Добавить("ИдентификаторОбъектаМетаданных"); ТаблицаТипов.Индексы.Добавить("ТипПолучателей"); ДоступныеТипы = Метаданные.Справочники.РассылкиОтчетов.ТабличныеЧасти.Получатели.Реквизиты.Получатель.Тип.Типы(); @@ -87,28 +47,6 @@ Возврат ТаблицаТипов; КонецФункции -// Получает пустое значение для поиска по таблице "Отчеты" или "ФорматыОтчетов" справочника "РассылкиОтчетов". -Функция ПустоеЗначениеОтчета() Экспорт - УстановитьПривилегированныйРежим(Истина); - Возврат Метаданные.Справочники.РассылкиОтчетов.ТабличныеЧасти.ФорматыОтчетов.Реквизиты.Отчет.Тип.ПривестиЗначение(); -КонецФункции - -// Получает заголовок системы, а если он не задан - синоним метаданных конфигурации. -Функция ИмяЭтойИнформационнойБазы() Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Результат = Константы.ЗаголовокСистемы.Получить(); - - Если ПустаяСтрока(Результат) Тогда - - Результат = Метаданные.Синоним; - - КонецЕсли; - - Возврат Результат; -КонецФункции - // Исключаемые отчеты используются в качестве исключающего фильтра при выборе отчетов. Функция ИсключаемыеОтчеты() Экспорт МассивМетаданных = Новый Массив; @@ -118,21 +56,10 @@ Для Каждого ОтчетМетаданные Из МассивМетаданных Цикл Результат.Добавить(ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ОтчетМетаданные)); КонецЦикла; - Возврат Результат; -КонецФункции - -// Проверяет права и формирует текст ошибки. -Функция ТекстОшибкиПроверкиПраваДобавления() Экспорт - Если Не ПравоДоступа("Вывод", Метаданные) Тогда - Возврат НСтр("ru = 'Нет прав на вывод информации.'"); - КонецЕсли; - Если Не ПравоДоступа("Изменение", Метаданные.Справочники.РассылкиОтчетов) Тогда - Возврат НСтр("ru = 'Нет прав на рассылки отчетов.'"); - КонецЕсли; - Если Не РаботаСПочтовымиСообщениями.ДоступнаОтправкаПисем() Тогда - Возврат НСтр("ru = 'Нет прав на отправку писем или нет доступных учетных записей.'"); - КонецЕсли; - Возврат ""; + + ИсключаемыеОтчеты = Новый ФиксированныйМассив(Результат); + + Возврат ИсключаемыеОтчеты; КонецФункции #КонецОбласти diff --git a/SSL/src/CommonModules/РегламентныеЗаданияПереопределяемый/Module.bsl b/SSL/src/CommonModules/РегламентныеЗаданияПереопределяемый/Module.bsl index 7f2dbd6e1..812c7d654 100644 --- a/SSL/src/CommonModules/РегламентныеЗаданияПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/РегламентныеЗаданияПереопределяемый/Module.bsl @@ -32,7 +32,8 @@ // * РаботаетСВнешнимиРесурсами - Булево - Истина, если регламентное задание модифицирует данные // во внешних источниках (получение почты, синхронизация данных и т.п.). Не следует устанавливать // значение Истина, для регламентных заданий, не модифицирующих данные во внешних источниках. -// Например, регламентное задание ЗагрузкаКурсовВалют. По умолчанию - Ложь. +// Например, регламентное задание ЗагрузкаКурсовВалют. Регламентные задания, работающие с внешними ресурсами, +// автоматически отключаются в копии информационной базы. По умолчанию - Ложь. // * Параметризуется - Булево - Истина, если регламентное задание параметризованное. // По умолчанию - Ложь. // diff --git a/SSL/src/CommonModules/РегламентныеЗаданияСлужебный/Module.bsl b/SSL/src/CommonModules/РегламентныеЗаданияСлужебный/Module.bsl index b7a367431..f5b8bd3b6 100644 --- a/SSL/src/CommonModules/РегламентныеЗаданияСлужебный/Module.bsl +++ b/SSL/src/CommonModules/РегламентныеЗаданияСлужебный/Module.bsl @@ -77,6 +77,11 @@ Возврат; КонецЕсли; + ЗапускЗаданияРазрешен = ОбщегоНазначения.ХранилищеСистемныхНастроекЗагрузить("РегламентныеЗадания", РегламентноеЗадание.ИмяМетода); + Если ЗапускЗаданияРазрешен = Истина Тогда + Возврат; + КонецЕсли; + Если ЗависимостиЗаданий = Неопределено Тогда ЗависимостиЗаданий = РегламентныеЗаданияЗависимыеОтФункциональныхОпций(); КонецЕсли; @@ -254,6 +259,7 @@ ПараметрыСеанса.РаботаСВнешнимиРесурсамиЗаблокирована = Ложь; + ОбновитьПовторноИспользуемыеЗначения(); КонецПроцедуры // Запрещает работу с внешними ресурсами. @@ -272,6 +278,7 @@ ПараметрыСеанса.РаботаСВнешнимиРесурсамиЗаблокирована = Истина; + ОбновитьПовторноИспользуемыеЗначения(); КонецПроцедуры // Возвращает признак установленной блокировки работы с внешними ресурсами. @@ -815,6 +822,7 @@ КонецЕсли; Иначе НаименованиеФоновогоЗадания = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Запуск вручную: %1'"), ПредставлениеРегламентногоЗадания(Задание)); + // Не используются длительные операции, т.к. делается вызов метода регламентного задания. ФоновоеЗадание = ФоновыеЗадания.Выполнить(Задание.Метаданные.ИмяМетода, Задание.Параметры, Строка(Задание.УникальныйИдентификатор), НаименованиеФоновогоЗадания); ПараметрыВыполнения.ИдентификаторФоновогоЗадания = Строка(ФоновоеЗадание.УникальныйИдентификатор); ПараметрыВыполнения.МоментЗапуска = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(ФоновоеЗадание.УникальныйИдентификатор).Начало; diff --git a/SSL/src/CommonModules/РезервноеКопированиеИБКлиент/Module.bsl b/SSL/src/CommonModules/РезервноеКопированиеИБКлиент/Module.bsl index bcdbe5622..7eae85f54 100644 --- a/SSL/src/CommonModules/РезервноеКопированиеИБКлиент/Module.bsl +++ b/SSL/src/CommonModules/РезервноеКопированиеИБКлиент/Module.bsl @@ -508,4 +508,15 @@ КонецФункции +#Если Не ВебКлиент Тогда + +Функция КодировкаФайловПрограммыРезервногоКопированияИБ() Экспорт + + // wscript.exe может работать только с файлами в кодировке UTF-16 LE. + Возврат КодировкаТекста.UTF16; + +КонецФункции + +#КонецЕсли + #КонецОбласти diff --git a/SSL/src/CommonModules/РезервноеКопированиеИБСервер/Module.bsl b/SSL/src/CommonModules/РезервноеКопированиеИБСервер/Module.bsl index af5af9b67..d3cce764f 100644 --- a/SSL/src/CommonModules/РезервноеКопированиеИБСервер/Module.bsl +++ b/SSL/src/CommonModules/РезервноеКопированиеИБСервер/Module.bsl @@ -147,7 +147,7 @@ КонецПроцедуры -// См. ОбщегоНазначенияПереопределяемый.ПараметрыРаботыКлиентаПриЗапуске. +// См. ОбщегоНазначенияПереопределяемый.ПриДобавленииПараметровРаботыКлиентаПриЗапуске. Процедура ПриДобавленииПараметровРаботыКлиентаПриЗапуске(Параметры) Экспорт Параметры.Вставить("РезервноеКопированиеИБ", НастройкиРезервногоКопирования(Истина)); @@ -155,7 +155,7 @@ КонецПроцедуры -// См. ОбщегоНазначенияПереопределяемый.ПараметрыРаботыКлиента. +// См. ОбщегоНазначенияПереопределяемый.ПриДобавленииПараметровРаботыКлиента. Процедура ПриДобавленииПараметровРаботыКлиента(Параметры) Экспорт Параметры.Вставить("РезервноеКопированиеИБ", НастройкиРезервногоКопирования()); @@ -384,6 +384,11 @@ СтруктураПараметров.ПроведеноКопирование = Ложь; УстановитьПараметрыРезервногоКопирования(СтруктураПараметров); + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЦентрМониторинга") Тогда + МодульЦентрМониторинга = ОбщегоНазначения.ОбщийМодуль("ЦентрМониторинга"); + МодульЦентрМониторинга.ЗаписатьОперациюБизнесСтатистики("ВыполненоРезервноеКопирование", 1); + КонецЕсли; + КонецПроцедуры // Устанавливает дату последнего оповещения пользователя. diff --git a/SSL/src/CommonModules/РезервноеКопированиеОбластейДанных/Module.bsl b/SSL/src/CommonModules/РезервноеКопированиеОбластейДанных/Module.bsl index 14769113b..8df018878 100644 --- a/SSL/src/CommonModules/РезервноеКопированиеОбластейДанных/Module.bsl +++ b/SSL/src/CommonModules/РезервноеКопированиеОбластейДанных/Module.bsl @@ -24,7 +24,7 @@ Процедура УстановитьФлагАктивностиПользователяВОбласти() Экспорт Если НЕ РаботаВМоделиСервисаПовтИсп.ЭтоРазделеннаяКонфигурация() - ИЛИ НЕ РаботаВМоделиСервисаПовтИсп.ДоступноИспользованиеРазделенныхДанных() + ИЛИ НЕ РаботаВМоделиСервиса.ДоступноИспользованиеРазделенныхДанных() ИЛИ ТекущийРежимЗапуска() = Неопределено ИЛИ НЕ ПолучитьФункциональнуюОпцию("ПоддержкаРезервногоКопирования") ИЛИ РаботаВМоделиСервиса.ОбластьДанныхЗаблокирована(РаботаВМоделиСервиса.ЗначениеРазделителяСеанса()) Тогда @@ -88,7 +88,7 @@ // Функция ИмяПодсистемыДляСобытийЖурналаРегистрации() Экспорт - Возврат РезервноеКопированиеОбластейДанныхПовтИсп.ИмяПодсистемыДляСобытийЖурналаРегистрации(); + Возврат Метаданные.Подсистемы.СтандартныеПодсистемы.Подсистемы.РаботаВМоделиСервиса.Подсистемы.РезервноеКопированиеОбластейДанных.Имя; КонецФункции @@ -102,7 +102,7 @@ // Функция НаименованиеФоновогоРезервногоКопирования() Экспорт - Возврат РезервноеКопированиеОбластейДанныхПовтИсп.НаименованиеФоновогоРезервногоКопирования(); + Возврат НСтр("ru = 'Резервное копирование области данных'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); КонецФункции @@ -114,7 +114,7 @@ //////////////////////////////////////////////////////////////////////////////// // Обработчики событий подсистем конфигурации. -// См. ОбщегоНазначенияПереопределяемый.ПараметрыРаботыКлиента. +// См. ОбщегоНазначенияПереопределяемый.ПриДобавленииПараметровРаботыКлиента. Процедура ПриДобавленииПараметровРаботыКлиента(Параметры) Экспорт Параметры.Вставить("РезервноеКопированиеОбластейДанных", ПолучитьФункциональнуюОпцию("ПоддержкаРезервногоКопирования")); @@ -220,13 +220,13 @@ Процедура УстановитьФлагАктивностиВОбласти(Знач ОбластьДанных = Неопределено, Знач Состояние = Истина) Если ОбластьДанных = Неопределено Тогда - Если РаботаВМоделиСервисаПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + Если РаботаВМоделиСервиса.ДоступноИспользованиеРазделенныхДанных() Тогда ОбластьДанных = РаботаВМоделиСервиса.ЗначениеРазделителяСеанса(); Иначе ВызватьИсключение НСтр("ru = 'При вызове процедуры УстановитьФлагАктивностиВОбласти из неразделенного сеанса параметр ОбластьДанных является обязательным.'"); КонецЕсли; Иначе - Если НЕ РаботаВМоделиСервисаПовтИсп.СеансЗапущенБезРазделителей() + Если НЕ РаботаВМоделиСервиса.СеансЗапущенБезРазделителей() И ОбластьДанных <> РаботаВМоделиСервиса.ЗначениеРазделителяСеанса() Тогда ВызватьИсключение(НСтр("ru = 'Запрещено работать с данными области кроме текущей'")); @@ -567,7 +567,7 @@ // Создает файл выгрузки заданной области и помещает его в хранилище Менеджера сервиса. // // Параметры: -// ПараметрыВыгрузки - Структура: +// Параметры - Структура: // - ОбластьДанных - Число. // - ИДКопии - УникальныйИдентификатор; Неопределено. // - МоментЗапуска - Дата - момент запуска архивирования области. @@ -576,7 +576,7 @@ // - ИДФайла - УникальныйИдентификатор - ИД файла выгрузки в хранилище МС. // - НомерПопытки - Число - Счетчик попыток. Начальное значение: 1. // -Процедура ВыгрузитьОбластьВХранилищеМС(Знач ПараметрыВыгрузки, АдресХранилища = Неопределено) Экспорт +Процедура ВыгрузитьОбластьВХранилищеМС(Знач Параметры, АдресРезультата = Неопределено) Экспорт Если НЕ Пользователи.ЭтоПолноправныйПользователь() Тогда ВызватьИсключение(НСтр("ru = 'Нарушение прав доступа'")); @@ -584,8 +584,8 @@ УстановитьПривилегированныйРежим(Истина); - Если Не ТребуетсяВыгрузка(ПараметрыВыгрузки) Тогда - ОтправитьСообщениеАрхивацияОбластиПропущена(ПараметрыВыгрузки); + Если Не ТребуетсяВыгрузка(Параметры) Тогда + ОтправитьСообщениеАрхивацияОбластиПропущена(Параметры); Возврат; КонецЕсли; @@ -615,13 +615,13 @@ Попытка - ПараметрыВыгрузки.Вставить("ИДФайла", ИДФайла); - ПараметрыВыгрузки.Вставить("ДатаСоздания", ТекущаяУниверсальнаяДата()); - ОтправитьСообщениеРезервнаяКопияОбластиСоздана(ПараметрыВыгрузки); - Если ЗначениеЗаполнено(АдресХранилища) Тогда - ПоместитьВоВременноеХранилище(ИДФайла, АдресХранилища); + Параметры.Вставить("ИДФайла", ИДФайла); + Параметры.Вставить("ДатаСоздания", ТекущаяУниверсальнаяДата()); + ОтправитьСообщениеРезервнаяКопияОбластиСоздана(Параметры); + Если ЗначениеЗаполнено(АдресРезультата) Тогда + ПоместитьВоВременноеХранилище(ИДФайла, АдресРезультата); КонецЕсли; - УстановитьФлагАктивностиВОбласти(ПараметрыВыгрузки.ОбластьДанных, Ложь); + УстановитьФлагАктивностиВОбласти(Параметры.ОбластьДанных, Ложь); ЗафиксироватьТранзакцию(); Исключение @@ -644,22 +644,22 @@ ЗаписьЖурналаРегистрации(НСтр("ru = 'Создание резервной копии области данных.Не удалось удалить временный файл'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; - Если ПараметрыВыгрузки.ПоТребованию Тогда + Если Параметры.ПоТребованию Тогда ВызватьИсключение; Иначе - Если ПараметрыВыгрузки.НомерПопытки > 3 Тогда - ОтправитьСообщениеОшибкаАрхивацииОбласти(ПараметрыВыгрузки); + Если Параметры.НомерПопытки > 3 Тогда + ОтправитьСообщениеОшибкаАрхивацииОбласти(Параметры); ВызватьИсключение; Иначе // Отмена задания. - ОтменитьСозданиеРезервнойКопииОбласти(ПараметрыВыгрузки); + ОтменитьСозданиеРезервнойКопииОбласти(Параметры); // Перепланировать: текущее время области + 10 минут. - ПараметрыВыгрузки.НомерПопытки = ПараметрыВыгрузки.НомерПопытки + 1; - МоментПовторногоЗапуска = ТекущаяДатаОбласти(ПараметрыВыгрузки.ОбластьДанных); // Сейчас в области. + Параметры.НомерПопытки = Параметры.НомерПопытки + 1; + МоментПовторногоЗапуска = ТекущаяДатаОбласти(Параметры.ОбластьДанных); // Сейчас в области. МоментПовторногоЗапуска = МоментПовторногоЗапуска + 10 * 60; // На 10 минут позже. - ПараметрыВыгрузки.Вставить("МоментЗапуска", МоментПовторногоЗапуска); - ЗапланироватьАрхивациюВОчереди(ПараметрыВыгрузки); + Параметры.Вставить("МоментЗапуска", МоментПовторногоЗапуска); + ЗапланироватьАрхивациюВОчереди(Параметры); КонецЕсли; КонецЕсли; КонецПопытки; @@ -675,7 +675,7 @@ Функция ТребуетсяВыгрузка(Знач ПараметрыВыгрузки) - Если НЕ РаботаВМоделиСервисаПовтИсп.СеансЗапущенБезРазделителей() + Если НЕ РаботаВМоделиСервиса.СеансЗапущенБезРазделителей() И ПараметрыВыгрузки.ОбластьДанных <> РаботаВМоделиСервиса.ЗначениеРазделителяСеанса() Тогда ВызватьИсключение(НСтр("ru = 'Запрещено работать с данными области кроме текущей'")); @@ -778,7 +778,7 @@ СообщенияВМоделиСервиса.ОтправитьСообщение( Сообщение, - РаботаВМоделиСервисаПовтИсп.КонечнаяТочкаМенеджераСервиса()); + РаботаВМоделиСервиса.КонечнаяТочкаМенеджераСервиса()); ЗафиксироватьТранзакцию(); @@ -806,7 +806,7 @@ СообщенияВМоделиСервиса.ОтправитьСообщение( Сообщение, - РаботаВМоделиСервисаПовтИсп.КонечнаяТочкаМенеджераСервиса()); + РаботаВМоделиСервиса.КонечнаяТочкаМенеджераСервиса()); ЗафиксироватьТранзакцию(); @@ -834,7 +834,7 @@ СообщенияВМоделиСервиса.ОтправитьСообщение( Сообщение, - РаботаВМоделиСервисаПовтИсп.КонечнаяТочкаМенеджераСервиса()); + РаботаВМоделиСервиса.КонечнаяТочкаМенеджераСервиса()); ЗафиксироватьТранзакцию(); @@ -878,7 +878,7 @@ // Функция ПолучитьНастройкиРезервногоКопированияОбласти(Знач ОбластьДанных = Неопределено) Экспорт - Если НЕ РаботаВМоделиСервисаПовтИсп.СеансЗапущенБезРазделителей() + Если НЕ РаботаВМоделиСервиса.СеансЗапущенБезРазделителей() И ОбластьДанных <> РаботаВМоделиСервиса.ЗначениеРазделителяСеанса() И ОбластьДанных <> Неопределено Тогда @@ -919,7 +919,7 @@ // Процедура УстановитьНастройкиРезервногоКопированияОбласти(Знач ОбластьДанных, Знач НастройкиРезервногоКопирования) Экспорт - Если НЕ РаботаВМоделиСервисаПовтИсп.СеансЗапущенБезРазделителей() + Если НЕ РаботаВМоделиСервиса.СеансЗапущенБезРазделителей() И ОбластьДанных <> РаботаВМоделиСервиса.ЗначениеРазделителяСеанса() Тогда ВызватьИсключение(НСтр("ru = 'Запрещено работать с данными области кроме текущей'")); @@ -975,7 +975,7 @@ // Процедура ПеренестиСостояниеПланированияРезервногоКопированияВоВспомогательныеДанные() Экспорт - Если Не РаботаВМоделиСервисаПовтИсп.РазделениеВключено() Тогда + Если Не РаботаВМоделиСервиса.РазделениеВключено() Тогда Возврат; КонецЕсли; diff --git a/SSL/src/CommonModules/РезервноеКопированиеОбластейДанныхДанныеФормРеализацияWebСервис/Module.bsl b/SSL/src/CommonModules/РезервноеКопированиеОбластейДанныхДанныеФормРеализацияWebСервис/Module.bsl index a054d5074..3649b8697 100644 --- a/SSL/src/CommonModules/РезервноеКопированиеОбластейДанныхДанныеФормРеализацияWebСервис/Module.bsl +++ b/SSL/src/CommonModules/РезервноеКопированиеОбластейДанныхДанныеФормРеализацияWebСервис/Module.bsl @@ -96,7 +96,7 @@ РаботаВМоделиСервиса.ОбработатьИнформациюОбОшибкеWebСервиса( ИнформацияОбОшибке, - РезервноеКопированиеОбластейДанныхПовтИсп.ИмяПодсистемыДляСобытийЖурналаРегистрации(), + РезервноеКопированиеОбластейДанных.ИмяПодсистемыДляСобытийЖурналаРегистрации(), "ZoneBackupControl", // Не локализуется ИмяОперации); diff --git a/SSL/src/CommonModules/РезервноеКопированиеОбластейДанныхПовтИсп/Module.bsl b/SSL/src/CommonModules/РезервноеКопированиеОбластейДанныхПовтИсп/Module.bsl index b3bf4091f..5c561d30a 100644 --- a/SSL/src/CommonModules/РезервноеКопированиеОбластейДанныхПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/РезервноеКопированиеОбластейДанныхПовтИсп/Module.bsl @@ -76,30 +76,4 @@ КонецФункции -// Возвращает имя подсистемы, которое должно использоваться в именах -// событий журнала регистрации. -// -// Возвращаемое значение: -// Строка - имя подсистемы. -// -Функция ИмяПодсистемыДляСобытийЖурналаРегистрации() Экспорт - - Возврат Метаданные.Подсистемы.СтандартныеПодсистемы.Подсистемы.РаботаВМоделиСервиса.Подсистемы.РезервноеКопированиеОбластейДанных.Имя; - -КонецФункции - -//////////////////////////////////////////////////////////////////////////////// -// Фоновые задания - -// Возвращает наименование фонового задания выгрузки области в файл. -// -// Возвращаемое значение: -// Строка - наименование фонового задания. -// -Функция НаименованиеФоновогоРезервногоКопирования() Экспорт - - Возврат НСтр("ru = 'Резервное копирование области данных'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); - -КонецФункции - #КонецОбласти diff --git a/SSL/src/CommonModules/СклонениеПредставленийОбъектов/Module.bsl b/SSL/src/CommonModules/СклонениеПредставленийОбъектов/Module.bsl index 76b9b8d59..a2bae503a 100644 --- a/SSL/src/CommonModules/СклонениеПредставленийОбъектов/Module.bsl +++ b/SSL/src/CommonModules/СклонениеПредставленийОбъектов/Module.bsl @@ -60,7 +60,8 @@ МассивРеквизитов = Новый Массив; - РеквизитИзмененоПредставление = Новый РеквизитФормы("ИзмененоПредставление", Новый ОписаниеТипов("Булево"), , "Изменено представление"); + ЗаголовокРеквизита = НСтр("ru = 'Изменено представление'"); + РеквизитИзмененоПредставление = Новый РеквизитФормы("ИзмененоПредставление", Новый ОписаниеТипов("Булево"), , ЗаголовокРеквизита); МассивРеквизитов.Добавить(РеквизитИзмененоПредставление); РеквизитСклонения = Новый РеквизитФормы("Склонения", Новый ОписаниеТипов(), , "Склонения"); @@ -143,42 +144,42 @@ ПроверитьПараметрПолМетодаПросклонятьФИО(Пол); - Компонента = ОбщегоНазначения.ПодключитьКомпонентуИзМакета("CNameDecl", "ОбщийМакет.КомпонентаСклоненияФИО"); + // Определяем значение по умолчанию (именительный падеж). + Результат = ФИО; + Компонента = ОбщегоНазначения.ПодключитьКомпонентуИзМакета("CNameDecl", "ОбщийМакет.КомпонентаСклоненияФИО"); Если Компонента = Неопределено Тогда - Результат = ФИО; Возврат Ложь; КонецЕсли; - Результат = ""; + СклоняемаяЧасть = ""; МассивСтрок = СтрРазделить(ФИО, " ", Ложь); // Выделим первые 3 слова, так как компонента не умеет склонять фразу большую 3х символов. - НомерНесклоняемогоСимвола = 4; - Для Номер = 1 По Мин(МассивСтрок.Количество(), 3) Цикл + СловСклоняетКомпонента = 3; + НомерНесклоняемогоСимвола = СловСклоняетКомпонента + 1; + Для Номер = 1 По Мин(МассивСтрок.Количество(), СловСклоняетКомпонента) Цикл Если Не ФизическиеЛицаКлиентСервер.ФИОНаписаноВерно(МассивСтрок[Номер-1], Истина) Тогда НомерНесклоняемогоСимвола = Номер; Прервать; КонецЕсли; - Результат = Результат + ?(Номер > 1, " ", "") + МассивСтрок[Номер-1]; + СклоняемаяЧасть = СклоняемаяЧасть + ?(Номер > 1, " ", "") + МассивСтрок[Номер-1]; КонецЦикла; - Если ПустаяСтрока(Результат) Тогда - Результат = ФИО; + Если ПустаяСтрока(СклоняемаяЧасть) Тогда Возврат Ложь; КонецЕсли; Попытка Если Пол = Неопределено Тогда - Результат = Компонента.Просклонять(Результат, Падеж) + " "; + Результат = Компонента.Просклонять(СклоняемаяЧасть, Падеж); Иначе - Результат = Компонента.Просклонять(Результат, Падеж, Пол) + " "; + Результат = Компонента.Просклонять(СклоняемаяЧасть, Падеж, Пол); КонецЕсли; Исключение Событие = НСтр("ru = 'Склонение ФИО при помощи компоненты'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); ЗаписьЖурналаРегистрации(Событие, УровеньЖурналаРегистрации.Ошибка, , , ОписаниеОшибки()); - Результат = ФИО; Возврат Ложь; КонецПопытки; @@ -251,22 +252,22 @@ // // Параметры: // Представление - Строка - Строка для склонения. -// ЭтоФИО - Булево - Признак склонения ФИО. -// Пол - Число - Пол физического лица (в случае склонения ФИО) -// 1 - мужской -// 2 - женский. +// ЭтоФИО - Булево - Признак склонения ФИО. +// Пол - Число - Пол физического лица (в случае склонения ФИО) +// 1 - мужской +// 2 - женский. // ПоказыватьСообщения - Булево - Признак, определяющий нужно ли показывать пользователю сообщения об ошибках. // // Возвращаемое значение: -// Структура - со свойствами: -// *ИменительныйПадеж - Строка. -// *РодительныйПадеж - Строка. -// *ДательныйПадеж - Строка -// *ВинительныйПадеж - Строка. -// *ТворительныйПадеж - Строка. -// *ПредложныйПадеж - Строка. +// Структура - со свойствами: +// * ИменительныйПадеж - Строка. +// * РодительныйПадеж - Строка. +// * ДательныйПадеж - Строка +// * ВинительныйПадеж - Строка. +// * ТворительныйПадеж - Строка. +// * ПредложныйПадеж - Строка. // -Функция ДанныеСклонения(Представление, ЭтоФИО = Ложь, Пол = Неопределено, ПоказыватьСообщения = Ложь) Экспорт +Функция ДанныеСклонения(Представление, ЭтоФИО = Ложь, Пол = Неопределено, ПоказыватьСообщения = Ложь) Экспорт Если Не ЗначениеЗаполнено(Представление) Тогда Возврат СклонениеПредставленийОбъектовКлиентСервер.СтруктураСклонения(); @@ -294,24 +295,24 @@ ПросклонятьСПомощьюКомпоненты = Ложь; Если ЭтоФИО Тогда - ПросклонятьСПомощьюКомпоненты = Истина; + ПросклонятьСПомощьюКомпоненты = Истина; Иначе МассивСтрок = СтрРазделить(Представление, " ", Ложь); Если МассивСтрок.Количество() = 1 И СтроковыеФункцииКлиентСервер.ТолькоКириллицаВСтроке(Представление) Тогда ПросклонятьСПомощьюКомпоненты = Истина; - КонецЕсли; - КонецЕсли; - + КонецЕсли; + КонецЕсли; + Если ПросклонятьСПомощьюКомпоненты Тогда ПросклонятьСПомощьюКомпоненты(Представление, СтруктураСклонения, , Пол); Иначе - ЗаполнитьСтруктуруСклоненияПоПредставлению(СтруктураСклонения, Представление); + ЗаполнитьСтруктуруСклоненияПоПредставлению(СтруктураСклонения, Представление); КонецЕсли; - + Возврат СтруктураСклонения; - + КонецФункции Процедура ПросклонятьПредставлениеПоВсемПадежамДлительнаяОперация(Параметры, АдресРезультата) Экспорт @@ -457,97 +458,132 @@ КонецПроцедуры -Функция СтруктураСклоненияЧерезЗапросКСервису(Представление, ПоказыватьСообщения) - - СообщениеОбОшибке = ""; - - СтруктураСклонения = Неопределено; - - Результат = Неопределено; - - УстановитьПривилегированныйРежим(Истина); - Логин = Константы.ЛогинДоступаКСервисуMorpher.Получить(); - УстановитьПривилегированныйРежим(Ложь); - - Результат = РезультатОбращенияКСервису("http://morpher.ru/WebService.asmx?WSDL", Представление, Логин, СообщениеОбОшибке); - - Если Результат = Неопределено Тогда - - Результат = РезультатОбращенияКСервису("http://morphapi.ru/WebService.asmx?WSDL", Представление, Логин, СообщениеОбОшибке); - - КонецЕсли; - - Если Результат <> Неопределено Тогда - - СтруктураСклонения = СклонениеПредставленийОбъектовКлиентСервер.СтруктураСклонения(); - - СтруктураСклонения.ИменительныйПадеж = Представление; - СтруктураСклонения.РодительныйПадеж = Результат.Р; - СтруктураСклонения.ДательныйПадеж = Результат.Д; - СтруктураСклонения.ВинительныйПадеж = Результат.В; - СтруктураСклонения.ТворительныйПадеж = Результат.Т; - СтруктураСклонения.ПредложныйПадеж = Результат.П; - - Если Не ПустаяСтрока(СообщениеОбОшибке) Тогда - КодОсновногоЯзыка = ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка(); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Вызов веб-сервиса склонения'", КодОсновногоЯзыка), УровеньЖурналаРегистрации.Предупреждение, , ,СообщениеОбОшибке); - КонецЕсли; - - Иначе - - КодОсновногоЯзыка = ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка(); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Вызов веб-сервиса склонения'", КодОсновногоЯзыка), УровеньЖурналаРегистрации.Ошибка, , ,СообщениеОбОшибке); - - Если ПоказыватьСообщения Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Ошибка при вызове сервиса склонения. Обратитесь к администратору.'") + Символы.ПС + НСтр("ru = 'Техническая информация:'") + Символы.ПС + СообщениеОбОшибке); - КонецЕсли; - - КонецЕсли; - - Возврат СтруктураСклонения; - -КонецФункции +#Область СервисСклонений -Функция РезультатОбращенияКСервису(URL, Представление, Логин, СообщениеОбОшибке) +Функция СтруктураСклоненияЧерезЗапросКСервису(СклоняемыйТекст, ПоказыватьСообщения) - Результат = Неопределено; - - ПараметрыПодключения = ОбщегоНазначения.ПараметрыПодключенияWSПрокси(); - ПараметрыПодключения.АдресWSDL = URL; - ПараметрыПодключения.URIПространстваИмен = "http://morpher.ru/"; - ПараметрыПодключения.ИмяСервиса = "WebService"; - ПараметрыПодключения.Таймаут = 10; + Соединение = HTTPСоединениеСервисаСклонений(); + Запрос = HTTPЗапросКСервисуСклонения(СклоняемыйТекст); Попытка - - Если ЗначениеЗаполнено(Логин) Тогда - Пароль = ""; - - УстановитьПривилегированныйРежим(Истина); - Пароль = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(ОбщегоНазначения.ИдентификаторОбъектаМетаданных("РегистрСведений.СклоненияПредставленийОбъектов"), "ПарольДоступаКСервисуMorpher"); - УстановитьПривилегированныйРежим(Ложь); - - ПараметрыПодключения.ИмяПользователя = Логин; - ПараметрыПодключения.Пароль = Пароль; - КонецЕсли; - - Морфер = ОбщегоНазначения.СоздатьWSПрокси(ПараметрыПодключения); - Результат = Морфер.GetXml(Представление); - + Ответ = ВыполнитьЗапросСервисуСклонений(Соединение, Запрос); Исключение - - Если НЕ ПустаяСтрока(СообщениеОбОшибке) Тогда - СообщениеОбОшибке = СообщениеОбОшибке + Символы.ПС; - КонецЕсли; - - СообщениеОбОшибке = СообщениеОбОшибке + URL + Символы.ПС + ОписаниеОшибки(); - + ЗарегистрироватьОшибкуСервисаСклонений(ИнформацияОбОшибке(), ПоказыватьСообщения); + Возврат Неопределено; КонецПопытки; + СтруктураОтвета = СтруктураОтветаСервисаСклонений(Ответ); + + СтруктураСклонения = СклонениеПредставленийОбъектовКлиентСервер.СтруктураСклонения(); + СтруктураСклонения.ИменительныйПадеж = СклоняемыйТекст; + СтруктураСклонения.РодительныйПадеж = СтруктураОтвета.Р; + СтруктураСклонения.ДательныйПадеж = СтруктураОтвета.Д; + СтруктураСклонения.ВинительныйПадеж = СтруктураОтвета.В; + СтруктураСклонения.ТворительныйПадеж = СтруктураОтвета.Т; + СтруктураСклонения.ПредложныйПадеж = СтруктураОтвета.П; + + Возврат СтруктураСклонения; + +КонецФункции + +Функция HTTPСоединениеСервисаСклонений() + + АдресСервера = "ws3.morpher.ru"; + + ИнтернетПрокси = Неопределено; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПолучениеФайловИзИнтернета") Тогда + МодульПолучениеФайловИзИнтернетаКлиентСервер = ОбщегоНазначения.ОбщийМодуль("ПолучениеФайловИзИнтернетаКлиентСервер"); + ИнтернетПрокси = МодульПолучениеФайловИзИнтернетаКлиентСервер.ПолучитьПрокси("https"); + КонецЕсли; + + Таймаут = 10; + + ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL(, Новый СертификатыУдостоверяющихЦентровОС); + Возврат Новый HTTPСоединение(АдресСервера,,,, ИнтернетПрокси, Таймаут, ЗащищенноеСоединение); + +КонецФункции + +Функция HTTPЗапросКСервисуСклонения(СклоняемыйТекст) + + ТекстЗапроса = "/russian/declension?s=" + СклоняемыйТекст; + + УстановитьПривилегированныйРежим(Истина); + ВладелецТокена = ОбщегоНазначения.ИдентификаторОбъектаМетаданных("РегистрСведений.СклоненияПредставленийОбъектов"); + Токен = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(ВладелецТокена, "ТокенДоступаКСервисуMorpher"); + УстановитьПривилегированныйРежим(Ложь); + + Если ЗначениеЗаполнено(Токен) Тогда + ТекстЗапроса = ТекстЗапроса + "&token=" + Токен; + КонецЕсли; + + Заголовки = Новый Соответствие; + Заголовки.Вставить("User-Agent", "1C Enterprise 8.3"); + Заголовки.Вставить("Accept", "application/json"); + Заголовки.Вставить("charset", "UTF-8"); + + Возврат Новый HTTPЗапрос(ТекстЗапроса, Заголовки); + +КонецФункции + +Функция ВыполнитьЗапросСервисуСклонений(Соединение, Запрос) + + Попытка + Ответ = Соединение.Получить(Запрос); + Исключение + РезультатДиагностики = ОбщегоНазначенияКлиентСервер.ДиагностикаСоединения(Соединение.Сервер); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '%1 + | + |Результат диагностики: + |%2'"), + КраткоеПредставлениеОшибки(ИнформацияОбОшибке()), + РезультатДиагностики.ОписаниеОшибки); + КонецПопытки; + + Если Ответ.КодСостояния <> 200 Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка при обработке запроса к ресурсу: + |%1'"), + Ответ.ПолучитьТелоКакСтроку()); + КонецЕсли; + + Возврат Ответ; + +КонецФункции + +Функция СтруктураОтветаСервисаСклонений(Ответ) + + ЧтениеJSON = Новый ЧтениеJSON; + ЧтениеJSON.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку()); + Результат = ПрочитатьJSON(ЧтениеJSON); + ЧтениеJSON.Закрыть(); + Возврат Результат; КонецФункции +Процедура ЗарегистрироватьОшибкуСервисаСклонений(ИнформацияОбОшибке, ПоказыватьСообщения) + + ИмяСобытия = НСтр("ru = 'Вызов веб-сервиса склонения'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + ЗаписьЖурналаРегистрации(ИмяСобытия, УровеньЖурналаРегистрации.Ошибка,,, + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); + + Если Не ПоказыватьСообщения Тогда + Возврат; + КонецЕсли; + + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка при вызове сервиса склонения. Обратитесь к администратору. + |Техническая информация: + |%1'"), + КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); + + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения); + +КонецПроцедуры + +#КонецОбласти + Функция СклоненияИзРегистра(Представление, Объект = Неопределено) УстановитьПривилегированныйРежим(Истина); diff --git a/SSL/src/CommonModules/СоединенияИБ/Module.bsl b/SSL/src/CommonModules/СоединенияИБ/Module.bsl index 054be79da..45cefe349 100644 --- a/SSL/src/CommonModules/СоединенияИБ/Module.bsl +++ b/SSL/src/CommonModules/СоединенияИБ/Module.bsl @@ -449,7 +449,7 @@ КонецПроцедуры -// См. ОбщегоНазначенияПереопределяемый.ПараметрыРаботыКлиентаПриЗапуске. +// См. ОбщегоНазначенияПереопределяемый.ПриДобавленииПараметровРаботыКлиентаПриЗапуске. Процедура ПриДобавленииПараметровРаботыКлиентаПриЗапуске(Параметры) Экспорт ПараметрыБлокировки = СтруктураПараметровБлокировкиСеансов(); @@ -505,7 +505,7 @@ КонецПроцедуры -// См. ОбщегоНазначенияПереопределяемый.ПараметрыРаботыКлиента. +// См. ОбщегоНазначенияПереопределяемый.ПриДобавленииПараметровРаботыКлиента. Процедура ПриДобавленииПараметровРаботыКлиента(Параметры) Экспорт Параметры.Вставить("ПараметрыБлокировкиСеансов", Новый ФиксированнаяСтруктура(ПараметрыБлокировкиСеансов())); @@ -615,7 +615,7 @@ Попытка Блокировка = Новый БлокировкаДанных(); - БлокировкаРегистра = Блокировка.Добавить("РегистрСведений.БлокировкиСеансовОбластейДанных"); + Блокировка.Добавить("РегистрСведений.БлокировкиСеансовОбластейДанных"); Блокировка.Заблокировать(); ТекстЗапроса = diff --git a/SSL/src/CommonModules/СоединенияИБГлобальный/Module.bsl b/SSL/src/CommonModules/СоединенияИБГлобальный/Module.bsl index 2bfcb17d3..348be0962 100644 --- a/SSL/src/CommonModules/СоединенияИБГлобальный/Module.bsl +++ b/SSL/src/CommonModules/СоединенияИБГлобальный/Module.bsl @@ -71,7 +71,6 @@ ТекущийРежим = СоединенияИБВызовСервера.ПараметрыБлокировкиСеансов(Истина); ВремяНачалаБлокировки = ТекущийРежим.Начало; - ВремяОкончанияБлокировки = ТекущийРежим.Конец; ТекущийМомент = ТекущийРежим.ТекущаяДатаСеанса; Если ТекущийМомент < ВремяНачалаБлокировки Тогда diff --git a/SSL/src/CommonModules/СоединенияИБКлиент/Module.bsl b/SSL/src/CommonModules/СоединенияИБКлиент/Module.bsl index 2255b76af..545db5aa4 100644 --- a/SSL/src/CommonModules/СоединенияИБКлиент/Module.bsl +++ b/SSL/src/CommonModules/СоединенияИБКлиент/Module.bsl @@ -10,6 +10,7 @@ // ЗапрашиватьПараметрыАдминистрированияКластера - Булево - Признак необходимости ввода параметров администрирования // кластера. // ПараметрыАдминистрирования - Структура - Параметры администрирования, которые были введены ранее. +// См. СтандартныеПодсистемыСервер.ПараметрыАдминистрирования. // Заголовок - Строка - Заголовок формы, описывающий для чего запрашиваются параметры администрирования. // ПоясняющаяНадпись - Строка - Пояснение для выполняемого действия, в контексте которого запрашиваются параметры. // diff --git a/SSL/src/CommonModules/СообщенияВМоделиСервисаРазделениеДанных/Module.bsl b/SSL/src/CommonModules/СообщенияВМоделиСервисаРазделениеДанных/Module.bsl index 65e46a29e..027b94bff 100644 --- a/SSL/src/CommonModules/СообщенияВМоделиСервисаРазделениеДанных/Module.bsl +++ b/SSL/src/CommonModules/СообщенияВМоделиСервисаРазделениеДанных/Module.bsl @@ -77,7 +77,7 @@ Сообщение = Неопределено; Если СообщенияВМоделиСервиса.ТелоСодержитТипизированноеСообщение(ТелоСообщения, Сообщение) Тогда - Если РаботаВМоделиСервисаПовтИсп.ДоступноИспользованиеРазделенныхДанных() + Если РаботаВМоделиСервиса.ДоступноИспользованиеРазделенныхДанных() И СообщенияВМоделиСервисаПовтИсп.ТипТелоОбласти().ЭтоПотомок(Сообщение.Body.Тип()) Тогда Если РаботаВМоделиСервиса.ЗначениеРазделителяСеанса() <> Сообщение.Body.Zone Тогда @@ -90,7 +90,7 @@ Если СообщенияВМоделиСервисаПовтИсп.ТипАутентифицированноеТелоОбласти().ЭтоПотомок(Сообщение.Body.Тип()) Тогда - Если РаботаВМоделиСервисаПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + Если РаботаВМоделиСервиса.ДоступноИспользованиеРазделенныхДанных() Тогда Сообщение.Body.ZoneKey = Константы.КлючОбластиДанных.Получить(); Иначе УстановитьПривилегированныйРежим(Истина); @@ -288,7 +288,7 @@ Функция ПроверкаКлючаОбластиВСообщенияхВозможна() СтруктураНастроек = РегистрыСведений.НастройкиТранспортаОбмена.НастройкиТранспортаWS( - РаботаВМоделиСервисаПовтИсп.КонечнаяТочкаМенеджераСервиса()); + РаботаВМоделиСервиса.КонечнаяТочкаМенеджераСервиса()); ПараметрыПодключенияКМС = Новый Структура; ПараметрыПодключенияКМС.Вставить("URL", СтруктураНастроек.WSURLВебСервиса); ПараметрыПодключенияКМС.Вставить("UserName", СтруктураНастроек.WSИмяПользователя); diff --git a/SSL/src/CommonModules/СтандартныеПодсистемыБезопасныйРежим/Module.bsl b/SSL/src/CommonModules/СтандартныеПодсистемыБезопасныйРежим/Module.bsl new file mode 100644 index 000000000..e794692d8 --- /dev/null +++ b/SSL/src/CommonModules/СтандартныеПодсистемыБезопасныйРежим/Module.bsl @@ -0,0 +1,11 @@ +#Область СлужебныеПроцедурыИФункции + +Функция ПрофильБезопасностиИнформационнойБазы() Экспорт + + // Требуется явный вызов необязательной подсистемы, так как ОбщегоНазначения.ОбщийМодуль может быть запрещен + // профилем безопасности. + Возврат РаботаВБезопасномРежиме.ПрофильБезопасностиИнформационнойБазы(Истина); + +КонецФункции + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/УправлениеПечатьюПовтИсп/УправлениеПечатьюПовтИсп.mdo b/SSL/src/CommonModules/СтандартныеПодсистемыБезопасныйРежим/СтандартныеПодсистемыБезопасныйРежим.mdo similarity index 55% rename from SSL/src/CommonModules/УправлениеПечатьюПовтИсп/УправлениеПечатьюПовтИсп.mdo rename to SSL/src/CommonModules/СтандартныеПодсистемыБезопасныйРежим/СтандартныеПодсистемыБезопасныйРежим.mdo index 89c4e55e0..b96ac69ca 100644 --- a/SSL/src/CommonModules/УправлениеПечатьюПовтИсп/УправлениеПечатьюПовтИсп.mdo +++ b/SSL/src/CommonModules/СтандартныеПодсистемыБезопасныйРежим/СтандартныеПодсистемыБезопасныйРежим.mdo @@ -1,12 +1,11 @@ <?xml version="1.0" encoding="UTF-8"?> -<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="259ede1f-05d3-4ece-8994-0ae3b2e89f49"> - <name>УправлениеПечатьюПовтИсп</name> +<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="662c5b48-62e1-451e-b37f-20f3f2bb0347"> + <name>СтандартныеПодсистемыБезопасныйРежим</name> <synonym> <key>ru</key> - <value>Управление печатью повт исп</value> + <value>Стандартные подсистемы безопасный режим</value> </synonym> <server>true</server> <externalConnection>true</externalConnection> <clientOrdinaryApplication>true</clientOrdinaryApplication> - <returnValuesReuse>DuringSession</returnValuesReuse> </mdclass:CommonModule> diff --git a/SSL/src/CommonModules/СтандартныеПодсистемыВызовСервера/Module.bsl b/SSL/src/CommonModules/СтандартныеПодсистемыВызовСервера/Module.bsl index deaf23312..cd3428864 100644 --- a/SSL/src/CommonModules/СтандартныеПодсистемыВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/СтандартныеПодсистемыВызовСервера/Module.bsl @@ -199,7 +199,7 @@ ОписаниеОшибки = НачалоОписанияОшибки + Символы.ПС + Символы.ПС + ТекстОшибки; - ЗаписьЖурналаРегистрации(ИмяСобытия, УровеньЖурналаРегистрации.Ошибка,,, ТекстОшибки); + ЗаписьЖурналаРегистрации(ИмяСобытия, УровеньЖурналаРегистрации.Ошибка,,, ОписаниеОшибки); Возврат НачалоОписанияОшибки; КонецФункции diff --git a/SSL/src/CommonModules/СтандартныеПодсистемыКлиент/Module.bsl b/SSL/src/CommonModules/СтандартныеПодсистемыКлиент/Module.bsl index 506f1f577..9b0eb95a4 100644 --- a/SSL/src/CommonModules/СтандартныеПодсистемыКлиент/Module.bsl +++ b/SSL/src/CommonModules/СтандартныеПодсистемыКлиент/Module.bsl @@ -34,6 +34,12 @@ ЗаголовокПриложения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонЗаголовка, НСтр("ru = 'Не установлены разделители'"), ПараметрыКлиента.ПодробнаяИнформация); КонецЕсли; + Если ПараметрыКлиента.Свойство("РаботаСВнешнимиРесурсамиЗаблокирована") + И ПараметрыКлиента.Свойство("РазделениеВключено") + И Не ПараметрыКлиента.РазделениеВключено Тогда + ЗаголовокПриложения = НСтр("ru = '[КОПИЯ]'") + " " + ЗаголовокПриложения; + КонецЕсли; + ОбщегоНазначенияКлиентПереопределяемый.ПриУстановкеЗаголовкаКлиентскогоПриложения(ЗаголовокПриложения, ПриЗапуске); КлиентскоеПриложение.УстановитьЗаголовок(ЗаголовокПриложения); @@ -484,7 +490,7 @@ // // Возвращаемое значение: // ФиксированнаяСтруктура - параметры работы клиента при запуске. -// Состав свойств см. в ОбщегоНазначенияПереопределяемый.ПараметрыРаботыКлиентаПриЗапуске. +// См. в ОбщегоНазначенияПереопределяемый.ПриДобавленииПараметровРаботыКлиентаПриЗапуске. // // Функция ПараметрыРаботыКлиентаПриЗапуске() Экспорт @@ -498,7 +504,7 @@ // // Возвращаемое значение: // ФиксированнаяСтруктура - параметры работы клиента. -// Состав свойств см. в ОбщегоНазначенияПереопределяемый.ПараметрыРаботыКлиента. +// Состав свойств см. в ОбщегоНазначенияПереопределяемый.ПриДобавленииПараметровРаботыКлиента. // Функция ПараметрыРаботыКлиента() Экспорт @@ -772,6 +778,7 @@ //////////////////////////////////////////////////////////////////////////////// // Вывод результата выполнения. +// Устарела. Следует использовать ПоказатьПредупреждение или ВызватьИсключение. // Выводит предупреждение или текст ошибки. // // Параметры: @@ -944,33 +951,32 @@ Функция ИнформацияДляПоддержки() Экспорт Текст = НСтр("ru = 'Название программы: [НазваниеПрограммы] - |Версия программы: [ВерсияПрограммы]; - |Версия Платформы 1С:Предприятие: [ВерсияПлатформы] [РазрядностьПлатформы]; - |Версия Библиотеки стандартных подсистем: [ВерсияБСП]; - |Операционная система: [ОперационнаяСистема]; - |Размер оперативной памяти: [ОперативнаяПамять]; - |Имя COM соединителя: [ИмяCOMСоединителя]; - |Базовая: [ЭтоБазоваяВерсияКонфигурации] - |Полноправный пользователь: [ЭтоПолноправныйПользователь] - |Учебная: [ЭтоУчебнаяПлатформа] - |Конфигурация изменена: [КонфигурацияИзменена] - |'"); + |Версия программы: [ВерсияПрограммы]; + |Версия Платформы 1С:Предприятие: [ВерсияПлатформы] [РазрядностьПлатформы]; + |Версия Библиотеки стандартных подсистем: [ВерсияБСП]; + |Операционная система: [ОперационнаяСистема]; + |Размер оперативной памяти: [ОперативнаяПамять]; + |Имя COM соединителя: [ИмяCOMСоединителя]; + |Базовая: [ЭтоБазоваяВерсияКонфигурации] + |Полноправный пользователь: [ЭтоПолноправныйПользователь] + |Учебная: [ЭтоУчебнаяПлатформа] + |Конфигурация изменена: [КонфигурацияИзменена]'") + Символы.ПС; Параметры = ПараметрыРаботыКлиента(); СистемнаяИнформация = Новый СистемнаяИнформация; - Текст = СтрЗаменить(Текст, "[НазваниеПрограммы]", Параметры.ПодробнаяИнформация); - Текст = СтрЗаменить(Текст, "[ВерсияПрограммы]", Параметры.ВерсияКонфигурации); - Текст = СтрЗаменить(Текст, "[ВерсияПлатформы]", СистемнаяИнформация.ВерсияПриложения); - Текст = СтрЗаменить(Текст, "[РазрядностьПлатформы]", СистемнаяИнформация.ТипПлатформы); - Текст = СтрЗаменить(Текст, "[ВерсияБСП]", СтандартныеПодсистемыВызовСервера.ВерсияБиблиотеки()); - Текст = СтрЗаменить(Текст, "[ОперационнаяСистема]", СистемнаяИнформация.ВерсияОС); - Текст = СтрЗаменить(Текст, "[ОперативнаяПамять]", СистемнаяИнформация.ОперативнаяПамять); - Текст = СтрЗаменить(Текст, "[ИмяCOMСоединителя]", Параметры.ИмяCOMСоединителя); + Текст = СтрЗаменить(Текст, "[НазваниеПрограммы]", Параметры.ПодробнаяИнформация); + Текст = СтрЗаменить(Текст, "[ВерсияПрограммы]", Параметры.ВерсияКонфигурации); + Текст = СтрЗаменить(Текст, "[ВерсияПлатформы]", СистемнаяИнформация.ВерсияПриложения); + Текст = СтрЗаменить(Текст, "[РазрядностьПлатформы]", СистемнаяИнформация.ТипПлатформы); + Текст = СтрЗаменить(Текст, "[ВерсияБСП]", СтандартныеПодсистемыВызовСервера.ВерсияБиблиотеки()); + Текст = СтрЗаменить(Текст, "[ОперационнаяСистема]", СистемнаяИнформация.ВерсияОС); + Текст = СтрЗаменить(Текст, "[ОперативнаяПамять]", СистемнаяИнформация.ОперативнаяПамять); + Текст = СтрЗаменить(Текст, "[ИмяCOMСоединителя]", Параметры.ИмяCOMСоединителя); Текст = СтрЗаменить(Текст, "[ЭтоБазоваяВерсияКонфигурации]", Параметры.ЭтоБазоваяВерсияКонфигурации); - Текст = СтрЗаменить(Текст, "[ЭтоПолноправныйПользователь]", Параметры.ЭтоПолноправныйПользователь); - Текст = СтрЗаменить(Текст, "[ЭтоУчебнаяПлатформа]", Параметры.ЭтоУчебнаяПлатформа); + Текст = СтрЗаменить(Текст, "[ЭтоПолноправныйПользователь]", Параметры.ЭтоПолноправныйПользователь); + Текст = СтрЗаменить(Текст, "[ЭтоУчебнаяПлатформа]", Параметры.ЭтоУчебнаяПлатформа); Если Параметры.Свойство("НастройкиОбновления") Тогда Текст = СтрЗаменить(Текст, "[КонфигурацияИзменена]", Параметры.НастройкиОбновления.КонфигурацияИзменена); @@ -1144,6 +1150,9 @@ // Только для внутреннего использования. Завершение процедуры ПередНачаломРаботыСистемы. Процедура ДействияПередНачаломРаботыСистемыОбработкаЗавершения(Неопределен, Параметры) Экспорт + Параметры.ОбработкаПродолжения = Неопределено; + Параметры.ОбработкаЗавершения = Неопределено; + ПараметрыПриЗапускеПрограммы = ПараметрыПриложения["СтандартныеПодсистемы.ПараметрыПриЗапускеПрограммы"]; ПараметрыПриЗапускеПрограммы.Удалить("ПолученныеПараметрыКлиента"); ПараметрыПриложения["СтандартныеПодсистемы.ЗапускПрограммыЗавершен"] = Истина; @@ -1328,6 +1337,9 @@ // Только для внутреннего использования. Завершение процедуры ПриНачалеРаботыСистемы. Процедура ДействияПриНачалеРаботыСистемыОбработкаЗавершения(Неопределен, Параметры) Экспорт + Параметры.ОбработкаПродолжения = Неопределено; + Параметры.ОбработкаЗавершения = Неопределено; + Если НЕ Параметры.Отказ Тогда ПараметрыПриЗапускеПрограммы = ПараметрыПриложения["СтандартныеПодсистемы.ПараметрыПриЗапускеПрограммы"]; Если ПараметрыПриЗапускеПрограммы.Свойство("ПропуститьОчисткуСкрытияРабочегоСтола") Тогда @@ -1409,6 +1421,9 @@ // Только для внутреннего использования. Завершение процедуры ПередЗавершениемРаботыСистемы. Процедура ДействияПередЗавершениемРаботыСистемыОбработкаЗавершения(Неопределен, Параметры) Экспорт + Параметры.ОбработкаПродолжения = Неопределено; + Параметры.ОбработкаЗавершения = Неопределено; + Если Не Параметры.Отказ И Не Параметры.НепрерывноеВыполнение Тогда @@ -2297,17 +2312,7 @@ Возврат; КонецЕсли; - ОпцииИнтерфейса = ПараметрыПриЗапускеПрограммы.ОпцииИнтерфейса; - - Если ТипЗнч(ОпцииИнтерфейса) = Тип("ФиксированнаяСтруктура") Тогда - #Если ВебКлиент Тогда - Структура = Новый Структура; - ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(Структура, ОпцииИнтерфейса, Истина); - ОпцииИнтерфейса = Структура; - #Иначе - ОпцииИнтерфейса = Новый Структура(ОпцииИнтерфейса); - #КонецЕсли - КонецЕсли; + ОпцииИнтерфейса = Новый Структура(ПараметрыПриЗапускеПрограммы.ОпцииИнтерфейса); // Установка параметров функциональных опций производится только тогда, когда они заданы. Если ОпцииИнтерфейса.Количество() > 0 Тогда diff --git a/SSL/src/CommonModules/СтандартныеПодсистемыКлиентСервер/Module.bsl b/SSL/src/CommonModules/СтандартныеПодсистемыКлиентСервер/Module.bsl index 0d6f85c95..b2f5b0503 100644 --- a/SSL/src/CommonModules/СтандартныеПодсистемыКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/СтандартныеПодсистемыКлиентСервер/Module.bsl @@ -36,10 +36,10 @@ Результат.Вставить("НуженВызовСервера", Ложь); Если ВыделенныеОбласти = Неопределено Тогда - #Если Клиент Тогда - ВыделенныеОбласти = ТабличныйДокумент.ВыделенныеОбласти; - #Иначе + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда ВызватьИсключение НСтр("ru = 'Не указано значение параметра ""ВыделенныеОбласти"".'"); + #Иначе + ВыделенныеОбласти = ТабличныйДокумент.ВыделенныеОбласти; #КонецЕсли КонецЕсли; @@ -81,7 +81,7 @@ ВыделеннаяОбластьШирина = ВыделеннаяОбластьПраво - ВыделеннаяОбластьЛево + 1; Результат.Количество = Результат.Количество + ВыделеннаяОбластьШирина * ВыделеннаяОбластьВысота; - #Если Клиент И Не ТолстыйКлиентОбычноеПриложение Тогда + #Если Не Сервер И Не ТолстыйКлиентОбычноеПриложение И Не ВнешнееСоединение Тогда Если Результат.Количество >= 1000 Тогда Результат.НуженВызовСервера = Истина; Возврат Результат; diff --git a/SSL/src/CommonModules/СтандартныеПодсистемыПовтИсп/Module.bsl b/SSL/src/CommonModules/СтандартныеПодсистемыПовтИсп/Module.bsl index 7ff8903f5..2cd4e0288 100644 --- a/SSL/src/CommonModules/СтандартныеПодсистемыПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/СтандартныеПодсистемыПовтИсп/Module.bsl @@ -130,10 +130,7 @@ Новый ФиксированнаяСтруктура(КлючИЗначение.Значение); КонецЦикла; - ОписанияПодсистем.Порядок = Новый ФиксированныйМассив(ОписанияПодсистем.Порядок); - ОписанияПодсистем.ПоИменам = Новый ФиксированноеСоответствие(ОписанияПодсистем.ПоИменам); - - Возврат Новый ФиксированнаяСтруктура(ОписанияПодсистем); + Возврат ОбщегоНазначения.ФиксированныеДанные(ОписанияПодсистем); КонецФункции @@ -266,6 +263,8 @@ Справочники.ИдентификаторыОбъектовМетаданных.ДанныеОбновлены(Истина, ОбъектыРасширений); КонецЕсли; + Возврат Истина; + КонецФункции //////////////////////////////////////////////////////////////////////////////// @@ -348,7 +347,7 @@ ЭлементСоставаПланаОбмена = Метаданные.ПланыОбмена[ИмяПланаОбмена].Состав.Найти(ОбъектМетаданных); Если ЭлементСоставаПланаОбмена = Неопределено Тогда Возврат Неопределено; - ИначеЕсли ЭлементСоставаПланаОбмена.Авторегистрация = АвторегистрацияИзменений.Разрешить Тогда + ИначеЕсли ЭлементСоставаПланаОбмена.Авторегистрация = АвтоРегистрацияИзменений.Разрешить Тогда Возврат "АвторегистрацияВключена"; КонецЕсли; @@ -495,11 +494,6 @@ Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ТекущаяТаблица", ПолноеИмяОбъектаМетаданных); - // Разрешение вызова из безопасного режима внешней обработки или расширения. - // Ссылки предопределенных не являются секретной информацией, потому к ним - // не следует применять ограничение на уровне записей, к тому же при отсутствии - // прав разыменование ссылки все равно провалится. - УстановитьОтключениеБезопасногоРежима(Истина); УстановитьПривилегированныйРежим(Истина); diff --git a/SSL/src/CommonModules/СтандартныеПодсистемыСервер/Module.bsl b/SSL/src/CommonModules/СтандартныеПодсистемыСервер/Module.bsl index 0499778a6..6c504032c 100644 --- a/SSL/src/CommonModules/СтандартныеПодсистемыСервер/Module.bsl +++ b/SSL/src/CommonModules/СтандартныеПодсистемыСервер/Module.bsl @@ -261,8 +261,8 @@ ЧастиПолногоИмени = СтрРазделить(ПолноеИмяРеквизита, "."); Если ЧастиПолногоИмени.Количество() <> 2 Тогда - ОписаниеОшибки = НСтр("ru = 'Недопустимое значение параметра ПолноеИмяРеквизита. - |Имя реквизита должно быть в формате ""<ИмяСписка>.<ИмяПоля>""'"); + // Недопустимое значение параметра ПолноеИмяРеквизита. + // Имя реквизита должно быть в формате ""<ИмяСписка>.<ИмяПоля>""'"); Возврат; КонецЕсли; @@ -951,10 +951,10 @@ Попытка ПользовательОС = ТекущийПользователь.ПользовательОС; Исключение - ТекущийПользователь = Неопределено; + ПользовательОС = Неопределено; КонецПопытки; - Возврат ТекущийПользователь = Неопределено; + Возврат ПользовательОС = Неопределено; КонецФункции @@ -1203,48 +1203,6 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции работы с файловой системой. - -// Добавляет новый каталог временных файлов. -// Используется в связке с ОчиститьКаталогВременныхФайлов. -// -// Параметры: -// Расширение - Строка - Расширение каталога. -// В качестве расширения полезно указывать аббревиатуру подсистемы, чтобы было понятно "кто за собой не убрал". -// Рекомендуется указывать на английском языке, чтобы исключить ошибки ОС. -// -// Возвращаемое значение: -// Строка - Полный путь к каталогу с последним слешем. -// -Функция СоздатьКаталогВременныхФайлов(Расширение) Экспорт - ПутьККаталогу = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ПолучитьИмяВременногоФайла(Расширение)); - СоздатьКаталог(ПутьККаталогу); - Возврат ПутьККаталогу; -КонецФункции - -// Добавляет новый каталог временных файлов. -// Используется в связке с СоздатьКаталогВременныхФайлов. -// -// Параметры: -// ПутьККаталогу - Строка - Полный путь к каталогу. -// -Процедура ОчиститьКаталогВременныхФайлов(ПутьККаталогу) Экспорт - Попытка - УдалитьФайлы(ПутьККаталогу); - Исключение - ЗаписьЖурналаРегистрации( - НСтр("ru = 'Стандартные подсистемы'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка, - , - , - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка очистки каталога временных файлов ""%1"":%2'"), - ПутьККаталогу, - Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()))); - КонецПопытки; -КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// // Прочие процедуры и функции. @@ -1567,7 +1525,7 @@ КонецПроцедуры -// См. ОбщегоНазначенияПереопределяемый.ПараметрыРаботыКлиента. +// См. ОбщегоНазначенияПереопределяемый.ПриДобавленииПараметровРаботыКлиента. Процедура ПриДобавленииПараметровРаботыКлиента(Параметры) Экспорт ДобавитьПараметрыРаботыКлиента(Параметры); @@ -1726,6 +1684,35 @@ КонецПроцедуры +#Область УстаревшиеПроцедурыИФункции +//////////////////////////////////////////////////////////////////////////////// +// Процедуры и функции работы с файловой системой. + +// Устарела. Следует использовать ОбщегоНазначения.СоздатьВременныйКаталог. +// Создает каталог временных файлов. +// +// Параметры: +// Расширение - Строка - Расширение каталога. +// +// Возвращаемое значение: +// Строка - Полный путь к каталогу с последним слешем. +// +Функция СоздатьКаталогВременныхФайлов(Расширение) Экспорт + Возврат ОбщегоНазначения.СоздатьВременныйКаталог(Расширение); +КонецФункции + +// Устарела. Следует использовать ОбщегоНазначения.УдалитьВременныйКаталог. +// Очищает каталог временных файлов вместе с его содержимым. +// +// Параметры: +// ПутьККаталогу - Строка - Полный путь к каталогу. +// +Процедура ОчиститьКаталогВременныхФайлов(ПутьККаталогу) Экспорт + ОбщегоНазначения.УдалитьВременныйКаталог(ПутьККаталогу); +КонецПроцедуры + +#КонецОбласти + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -1841,6 +1828,9 @@ ПоказатьФормуБлокировки = МодульРегламентныеЗаданияСлужебный.УстановленаБлокировкаРаботыСВнешнимиРесурсами( ЭтоВызовПередНачаломРаботыСистемы, Истина) И Пользователи.ЭтоПолноправныйПользователь(); Параметры.Вставить("ПоказатьФормуБлокировкиРаботыСВнешнимиРесурсами", ПоказатьФормуБлокировки); + Если РегламентныеЗаданияСервер.РаботаСВнешнимиРесурсамиЗаблокирована() Тогда + Параметры.Вставить("РаботаСВнешнимиРесурсамиЗаблокирована"); + КонецЕсли; КонецЕсли; Если Не ОбновлениеИнформационнойБазыСлужебный.ДобавитьПараметрыРаботыКлиентаПриЗапуске(Параметры) @@ -2010,6 +2000,10 @@ Параметры.Вставить("ИнформационнаяБазаФайловая", ОбщегоНазначения.ИнформационнаяБазаФайловая()); + Если РегламентныеЗаданияСервер.РаботаСВнешнимиРесурсамиЗаблокирована() Тогда + Параметры.Вставить("РаботаСВнешнимиРесурсамиЗаблокирована"); + КонецЕсли; + КонецПроцедуры // Заполняет структуру параметров, необходимых для работы клиентского кода @@ -2389,7 +2383,8 @@ Возврат; КонецЕсли; - Если Источник.НомерПринятого = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Источник.Ссылка, "НомерПринятого") Тогда + Если Источник.ЭтоНовый() + Или Источник.НомерПринятого = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Источник.Ссылка, "НомерПринятого") Тогда Возврат; КонецЕсли; @@ -2516,7 +2511,7 @@ КонецЕсли; // Проверка возможности выполнения обработчиков установки параметров сеанса для запуска программы. - ПроверитьВозможностьВыполненияОбработчиковУстановкиПараметровСеанса(); + ПроверитьВозможностьЗапуска(); Если Не ЗначениеЗаполнено(ПользователиИнформационнойБазы.ТекущийПользователь().Имя) И (Не ОбщегоНазначения.РазделениеВключено() @@ -2677,7 +2672,6 @@ КонецПроцедуры - Процедура ОбработатьОчередьСкопированныхНастроек() Если ТекущийРежимЗапуска() = Неопределено Тогда @@ -2708,8 +2702,6 @@ Процедура ВыполнитьОбработчикиУстановкиПараметровСеанса(ИменаПараметровСеанса, Обработчики, УстановленныеПараметры) - Перем ТекстСообщения; - // Массив с ключами параметров сеанса // задаются начальным словом в имени параметра сеанса и символом "*". ПараметрыСеансаКлючи = Новый Массив; @@ -2882,22 +2874,22 @@ КонецПроцедуры -// Проверяет возможность выполнения обработчиков установки параметров сеанса. +// Проверяет возможность выполнения обработчиков установки параметров сеанса, +// обработчиков обновления и других базовых механизмов конфигурации, +// выполняющих код конфигурации по полному имени процедуры. // -// В случае, если при текущих настройках профилей безопасности (в кластере серверов и в информационной -// базе) выполнение обработчиков установки параметров сеанса невозможно - генерируется исключение, -// содержащее описание причины невозможности выполнения обработчиков установки параметров сеанса -// и перечень действий, которые можно предпринять для устранения этой причины. +// В случае, если при текущих настройках профилей безопасности (в кластере серверов и в информационной базе) +// выполнение обработчиков невозможно - генерируется исключение, +// содержащее описание причины и перечень действий по ее устранению. // -Процедура ПроверитьВозможностьВыполненияОбработчиковУстановкиПараметровСеанса() +Процедура ПроверитьВозможностьЗапуска() Если ОбщегоНазначения.ИнформационнаяБазаФайловая(СтрокаСоединенияИнформационнойБазы()) Тогда Возврат; КонецЕсли; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПрофилиБезопасности") Тогда - МодульРаботаВБезопасномРежиме = ОбщегоНазначения.ОбщийМодуль("РаботаВБезопасномРежиме"); - ПрофильИнформационнойБазы = МодульРаботаВБезопасномРежиме.ПрофильБезопасностиИнформационнойБазы(Истина); + ПрофильИнформационнойБазы = СтандартныеПодсистемыБезопасныйРежим.ПрофильБезопасностиИнформационнойБазы(); Иначе ПрофильИнформационнойБазы = ""; КонецЕсли; @@ -2914,18 +2906,18 @@ УстановитьБезопасныйРежим(Ложь); - Если ВозможноВыполнениеОбработчиковУстановкиПараметровСеансаБезУстановкиБезопасногоРежима() Тогда - - Возврат; - - Иначе + Попытка + ДоступенПривилегированныйРежим = ВозможноВыполнениеОбработчиковБезУстановкиБезопасногоРежима(); + Исключение + ДоступенПривилегированныйРежим = Ложь; + КонецПопытки; + Если Не ДоступенПривилегированныйРежим Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Невозможно выполнение обработчиков установки параметров сеанса по причине: профиль безопасности %1 отсутствует в кластере серверов 1С:Предприятия, или для него запрещено использование в качестве профиля безопасности безопасного режима. + НСтр("ru = 'Невозможно установить параметры сеанса по причине: профиль безопасности %1 отсутствует в кластере серверов 1С:Предприятия, или для него запрещено использование в качестве профиля безопасности безопасного режима. | |Для восстановления работоспособности программы требуется отключить использование профиля безопасности через консоль кластера и заново настроить профили безопасности с помощью интерфейса конфигурации (соответствующие команды находятся в разделе настроек программы).'"), ПрофильИнформационнойБазы); - КонецЕсли; КонецЕсли; @@ -2939,7 +2931,7 @@ // Профиль ИБ доступен для выполнения обработчиков, но в нем невозможна установка привилегированного режима. ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Невозможно выполнение обработчиков установки параметров сеанса по причине: профиль безопасности %1 не содержит разрешения на установку привилегированного режима. Возможно, он был отредактирован через консоль кластера. + НСтр("ru = 'Невозможно установить параметры сеанса по причине: профиль безопасности %1 не содержит разрешения на установку привилегированного режима. Возможно, он был отредактирован через консоль кластера. | |Для восстановления работоспособности программы требуется отключить использование профиля безопасности через консоль кластера и заново настроить профили безопасности с помощью интерфейса конфигурации (соответствующие команды находятся в разделе настроек программы).'"), ПрофильИнформационнойБазы); @@ -2952,15 +2944,13 @@ // полный доступ к внешним модулям. Попытка - - ДоступенПривилегированныйРежим = Вычислить("ДоступенПереходВПривилегированныйРежим()"); - + ДоступенПривилегированныйРежим = ВозможноВыполнениеОбработчиковБезУстановкиБезопасногоРежима(); Исключение ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Невозможно выполнение обработчиков установки параметров сеанса по причине: %1. + НСтр("ru = 'Невозможно установить параметры сеанса по причине: %1. | - |Возможно, для информационной базы через консоль кластера был установлен профиль безопасности, не допускающий выполнения внешних модулей без установки безопасного режима. В этом случае для восстановления работоспособности программы требуется отключить использование профиля безопасности через консоль кластера и заново настроить профили безопасности с помощью интерфейса конфигурации (соответствующие команды находятся в разделе настроек программы).При этом программа будет автоматически корректно настроена на использование совместно с включенными профилями безопасности.'"), + |Возможно, для информационной базы через консоль кластера был установлен профиль безопасности, не допускающий выполнения внешних модулей без установки безопасного режима. В этом случае для восстановления работоспособности программы требуется отключить использование профиля безопасности через консоль кластера и заново настроить профили безопасности с помощью интерфейса конфигурации (соответствующие команды находятся в разделе настроек программы). При этом программа будет автоматически корректно настроена на использование совместно с включенными профилями безопасности.'"), КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; @@ -2969,40 +2959,17 @@ КонецПроцедуры -// Проверяет возможность выполнения обработчиков установки параметров сеанса без установки безопасного режима. +// Проверяет возможность выполнения обработчиков без установки безопасного режима. // -// Возвращаемое значение: Булево. +// Возвращаемое значение: +// Булево. // -Функция ВозможноВыполнениеОбработчиковУстановкиПараметровСеансаБезУстановкиБезопасногоРежима() +Функция ВозможноВыполнениеОбработчиковБезУстановкиБезопасногоРежима() - Попытка + // Вызов ОбщегоНазначения.ВычислитьВБезопасномРежиме не требуется, + // т.к. это проверка установки привилегированного режима в функции Вычислить без установки безопасного режима. + Возврат Вычислить("ДоступенПереходВПривилегированныйРежим()"); - Результат = Вычислить("ДоступенПереходВПривилегированныйРежим()"); - Возврат Результат; - - Исключение - - ШаблонЗаписиЖР = НСтр("ru = 'При установке параметров сеанса произошла ошибка: - | - |-------------------------------------------------------------------------------------------- - |%1 - |-------------------------------------------------------------------------------------------- - | - |Запуск программы будет невозможен.'"); - - ТекстЗаписиЖР = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонЗаписиЖР, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - - ЗаписьЖурналаРегистрации( - НСтр("ru = 'Установка параметров сеанса'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка, - , - , - ТекстЗаписиЖР); - - Возврат Ложь; - - КонецПопытки; - КонецФункции // Проверяет возможность перехода в привилегированный режим из текущего безопасного режима. @@ -3194,15 +3161,33 @@ КонецПроцедуры Функция ТребуетсяПоказРекомендацииПоОбъемуОперативнойПамяти() - РекомендуемыйОбъем = ОбщегоНазначения.ОбщиеПараметрыБазовойФункциональности().РекомендуемыйОбъемОперативнойПамяти; - ОперативнаяПамять = ПараметрыКлиентаНаСервере().Получить("ОперативнаяПамять"); - Рекомендация = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ОбщиеНастройкиПользователя", "РекомендацияПоОбъемуОперативнойПамяти"); - Возврат Не ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент() - И ОбщегоНазначения.ИнформационнаяБазаФайловая() - И (Рекомендация = Неопределено Или Рекомендация.Показывать - Или (ТекущаяДатаСеанса() - Рекомендация.ДатаПредыдущегоПоказа) > 60*60*24*60) - И ОперативнаяПамять < РекомендуемыйОбъем; + Если ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент() + Или Не ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда + Возврат Ложь; + КонецЕсли; + + ОперативнаяПамять = ПараметрыКлиентаНаСервере().Получить("ОперативнаяПамять"); + Если ТипЗнч(ОперативнаяПамять) <> Тип("Число") Тогда + Возврат Ложь; // Параметр клиента на сервере не заполнен (нет клиентского приложения). + КонецЕсли; + + РекомендуемыйОбъем = ОбщегоНазначения.ОбщиеПараметрыБазовойФункциональности().РекомендуемыйОбъемОперативнойПамяти; + СохраненнаяРекомендация = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ОбщиеНастройкиПользователя", + "РекомендацияПоОбъемуОперативнойПамяти"); + + Рекомендация = Новый Структура; + Рекомендация.Вставить("Показывать", Истина); + Рекомендация.Вставить("ДатаПредыдущегоПоказа", Дата(1, 1, 1)); + + Если ТипЗнч(СохраненнаяРекомендация) = Тип("Структура") Тогда + ЗаполнитьЗначенияСвойств(Рекомендация, СохраненнаяРекомендация); + КонецЕсли; + + Возврат ОперативнаяПамять < РекомендуемыйОбъем + И (Рекомендация.Показывать + Или (ТекущаяДатаСеанса() - Рекомендация.ДатаПредыдущегоПоказа) > 60*60*24*60) + КонецФункции Процедура ИгнорироватьОтправкуДанныхОбработанныхВЦентральномУзлеРИБПриОбновленииИБ(ЭлементДанных, СозданиеНачальногоОбраза, Получатель) diff --git a/SSL/src/CommonModules/СтроковыеФункцииКлиентСервер/Module.bsl b/SSL/src/CommonModules/СтроковыеФункцииКлиентСервер/Module.bsl index 51687e4eb..6e7fead4d 100644 --- a/SSL/src/CommonModules/СтроковыеФункцииКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/СтроковыеФункцииКлиентСервер/Module.bsl @@ -315,20 +315,25 @@ // Проверяет, содержит ли строка только цифры. // // Параметры: -// Значение - Строка - проверяемая строка. -// УчитыватьЛидирующиеНули - Булево - флаг учета лидирующих нулей, если Истина, то ведущие нули пропускаются. -// УчитыватьПробелы - Булево - флаг учета пробелов, если Истина, то пробелы при проверке игнорируются. +// Значение - Строка - проверяемая строка. +// Устаревший - Булево - устаревший параметр, не используется. +// ПробелыЗапрещены - Булево - если Ложь, то в строке допустимо наличие пробелов. // // Возвращаемое значение: // Булево - Истина - строка содержит только цифры или пустая, Ложь - строка содержит иные символы. // -Функция ТолькоЦифрыВСтроке(Знач Значение, Знач УчитыватьЛидирующиеНули = Истина, Знач УчитыватьПробелы = Истина) Экспорт +// Пример: +// Результат = СтроковыеФункцииКлиентСервер.ТолькоЦифрыВСтроке("0123"); // Истина +// Результат = СтроковыеФункцииКлиентСервер.ТолькоЦифрыВСтроке("0123abc"); // Ложь +// Результат = СтроковыеФункцииКлиентСервер.ТолькоЦифрыВСтроке("01 2 3",, Ложь); // Истина +// +Функция ТолькоЦифрыВСтроке(Знач Значение, Знач Устаревший = Истина, Знач ПробелыЗапрещены = Истина) Экспорт Если ТипЗнч(Значение) <> Тип("Строка") Тогда Возврат Ложь; КонецЕсли; - Если Не УчитыватьПробелы Тогда + Если Не ПробелыЗапрещены Тогда Значение = СтрЗаменить(Значение, " ", ""); КонецЕсли; @@ -336,15 +341,6 @@ Возврат Истина; КонецЕсли; - Если Не УчитыватьЛидирующиеНули Тогда - Позиция = 1; - // Взятие символа за границей строки возвращает пустую строку. - Пока Сред(Значение, Позиция, 1) = "0" Цикл - Позиция = Позиция + 1; - КонецЦикла; - Значение = Сред(Значение, Позиция); - КонецЕсли; - // Если содержит только цифры, то в результате замен должна быть получена пустая строка. // Проверять при помощи ПустаяСтрока нельзя, так как в исходной строке могут быть пробельные символы. Возврат СтрДлина( @@ -804,7 +800,6 @@ Соответствие = СоответствиеНациональногоАлфавитаИЛатиницы(); - ПредыдущийСимвол = ""; Для Позиция = 1 По СтрДлина(Значение) Цикл Символ = Сред(Значение, Позиция, 1); СимволЛатиницей = Соответствие[НРег(Символ)]; // Поиск соответствия без учета регистра. @@ -817,7 +812,6 @@ КонецЕсли; КонецЕсли; Результат = Результат + СимволЛатиницей; - ПредыдущийСимвол = СимволЛатиницей; КонецЦикла; Возврат Результат; diff --git a/SSL/src/CommonModules/СтруктураПодчиненностиПереопределяемый/Module.bsl b/SSL/src/CommonModules/СтруктураПодчиненностиПереопределяемый/Module.bsl index 78c1bbd57..6b83f9e0e 100644 --- a/SSL/src/CommonModules/СтруктураПодчиненностиПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/СтруктураПодчиненностиПереопределяемый/Module.bsl @@ -1,5 +1,64 @@ #Область ПрограммныйИнтерфейс +// Вызывается для получения настроек подсистемы. +// +// Параметры: +// Настройки - Структура - со свойствами: +// * Реквизиты - Соответствие - для переопределения имен реквизитов объекта, в которых содержится информация +// о сумме и валюте, выводимых в списке связанных документов. +// В ключе указывается полное имя объекта метаданных, в значении - соответствие +// реквизитов Валюта и СуммаДокумента с реальными реквизитами объекта. +// Если не задано, то значения зачитываются из реквизитов Валюта и СуммаДокумента. +// * РеквизитыДляПредставления - Соответствие - для переопределения представления объектов, выводимых в списке +// связанных документов. В ключе указывается полное имя объекта метаданных, в значении - +// массив имен реквизитов, значения которых участвуют в формировании представления. +// Для формирования представления перечисленных здесь объектов будет вызываться +// процедура СтруктураПодчиненностиПереопределяемый.ПриПолученииПредставления. +// +// Пример: +// Реквизиты = Новый Соответствие; +// Реквизиты.Вставить("СуммаДокумента", Метаданные.Документы.СчетНаОплатуПокупателю.Реквизиты.СуммаОплаты.Имя); +// Реквизиты.Вставить("Валюта", Метаданные.Документы.СчетНаОплатуПокупателю.Реквизиты.ВалютаДокумента.Имя); +// Настройки.Реквизиты.Вставить(Метаданные.Документы.СчетНаОплатуПокупателю.ПолноеИмя(), Реквизиты); +// +// РеквизитыДляПредставления = Новый Массив; +// РеквизитыДляПредставления.Добавить(Метаданные.Документы.ЭлектронноеПисьмоИсходящее.Реквизиты.ДатаОтправления.Имя); +// РеквизитыДляПредставления.Добавить(Метаданные.Документы.ЭлектронноеПисьмоИсходящее.Реквизиты.Тема.Имя); +// РеквизитыДляПредставления.Добавить(Метаданные.Документы.ЭлектронноеПисьмоИсходящее.Реквизиты.СписокПолучателейПисьма.Имя); +// Настройки.РеквизитыДляПредставления.Вставить(Метаданные.Документы.ЭлектронноеПисьмоИсходящее.ПолноеИмя(), +// РеквизитыДляПредставления); +// +Процедура ПриОпределенииНастроек(Настройки) Экспорт + + + +КонецПроцедуры + +// Вызывается для получения представления объектов, выводимых в списке связанных документов. +// Только для тех объектов, которые перечислены в свойстве РеквизитыДляПредставления параметра Настройки +// процедуры СтруктураПодчиненностиПереопределяемый.ПриОпределенииНастроек. +// +// Параметры: +// ТипДанных - ЛюбаяСсылка - тип ссылки выводимого объекта, см. свойство Тип критерия отбора СвязанныеДокументы. +// Данные - ВыборкаИзРезультатаЗапроса, Структура - содержит значения полей, из которых формируется представление: +// * Ссылка - ЛюбаяСсылка - ссылка объекта, выводимого в списке связанных документов. +// * ДополнительныйРеквизит1 - Произвольный - значение первого реквизита, указанного в массиве +// РеквизитыДляПредставления параметра Настройки процедуры ПриОпределенииНастроек. +// * ДополнительныйРеквизит2 - Произвольный - значение второго реквизита... +// ... +// Представление - Строка - поместить в этот параметр рассчитанное представление объекта. +// СтандартнаяОбработка - Булево - поместить в этот параметр Ложь, если установлено значение параметра Представление. +// +Процедура ПриПолученииПредставления(ТипДанных, Данные, Представление, СтандартнаяОбработка) Экспорт + + + +КонецПроцедуры + +#Область УстаревшиеПроцедурыИФункции + +// Устарела. Следует использовать СтруктураПодчиненностиПереопределяемый.ПриОпределенииНастроек. +// См. свойство РеквизитыДляПредставления параметра Настройки. // Формирует массив реквизитов документа. // // Параметры: @@ -10,14 +69,11 @@ // Функция МассивРеквизитовОбъектаДляФормированияПредставления(ИмяДокумента) Экспорт - МассивДопРеквизитов = Новый Массив; - - - - Возврат МассивДопРеквизитов + Возврат Новый Массив; КонецФункции +// Устарела. Следует использовать СтруктураПодчиненностиПереопределяемый.ПриПолученииПредставления. // Получает представление документа для печати. // // Параметры: @@ -32,12 +88,12 @@ // Функция ПредставлениеОбъектаДляВыводаВОтчет(Выборка) Экспорт - - Возврат Неопределено; КонецФункции +// Устарела. Следует использовать СтруктураПодчиненностиПереопределяемый.ПриОпределенииНастроек. +// См. свойство Реквизиты параметра Настройки. // Возвращает имя реквизита документа, в котором содержится информация о Сумме и Валюте документа для вывода в // структуру подчиненности. // По умолчанию используются реквизиты Валюта и СуммаДокумента. Если для конкретного документа или конфигурации в целом @@ -53,10 +109,10 @@ // Функция ИмяРеквизитаДокумента(ИмяДокумента, Реквизит) Экспорт - - Возврат Неопределено; КонецФункции #КонецОбласти + +#КонецОбласти diff --git a/SSL/src/CommonModules/ТекущиеДелаСервер/Module.bsl b/SSL/src/CommonModules/ТекущиеДелаСервер/Module.bsl index ae354227a..37a7ca36a 100644 --- a/SSL/src/CommonModules/ТекущиеДелаСервер/Module.bsl +++ b/SSL/src/CommonModules/ТекущиеДелаСервер/Module.bsl @@ -11,9 +11,16 @@ // Функция РазделыДляОбъекта(ИмяОбъектаМетаданных) Экспорт ПринадлежностьОбъектов = ТекущиеДелаСлужебныйПовтИсп.ПринадлежностьОбъектовРазделамКомандногоИнтерфейса(); - ПодсистемыКомандногоИнтерфейса = ПринадлежностьОбъектов[ИмяОбъектаМетаданных]; - Если ПодсистемыКомандногоИнтерфейса = Неопределено Тогда - ПодсистемыКомандногоИнтерфейса = Новый Массив; + + ПодсистемыКомандногоИнтерфейса = Новый Массив; + ИменаПодсистем = ПринадлежностьОбъектов.Получить(ИмяОбъектаМетаданных); + Если ИменаПодсистем <> Неопределено Тогда + Для Каждого ИмяПодсистемы Из ИменаПодсистем Цикл + ПодсистемыКомандногоИнтерфейса.Добавить(Метаданные.НайтиПоПолномуИмени(ИмяПодсистемы)); + КонецЦикла; + КонецЕсли; + + Если ПодсистемыКомандногоИнтерфейса.Количество() = 0 Тогда ПодсистемыКомандногоИнтерфейса.Добавить(Обработки.ТекущиеДела); КонецЕсли; diff --git a/SSL/src/CommonModules/ТекущиеДелаСлужебныйПовтИсп/Module.bsl b/SSL/src/CommonModules/ТекущиеДелаСлужебныйПовтИсп/Module.bsl index 660e4e8ce..bc406d6bc 100644 --- a/SSL/src/CommonModules/ТекущиеДелаСлужебныйПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ТекущиеДелаСлужебныйПовтИсп/Module.bsl @@ -21,17 +21,17 @@ ПодсистемыОбъекта = СоответствиеОбъектовИПодсистем[Объект.ПолноеИмя()]; Если ПодсистемыОбъекта = Неопределено Тогда ПодсистемыОбъекта = Новый Массив; - ИначеЕсли ПодсистемыОбъекта.Найти(Подсистема) <> Неопределено Тогда + ИначеЕсли ПодсистемыОбъекта.Найти(Подсистема.ПолноеИмя()) <> Неопределено Тогда Продолжить; КонецЕсли; - ПодсистемыОбъекта.Добавить(Подсистема); + ПодсистемыОбъекта.Добавить(Подсистема.ПолноеИмя()); СоответствиеОбъектовИПодсистем.Вставить(Объект.ПолноеИмя(), ПодсистемыОбъекта); КонецЦикла; ДобавитьОбъектыПодчиненныхПодсистем(Подсистема, СоответствиеОбъектовИПодсистем); КонецЦикла; - Возврат СоответствиеОбъектовИПодсистем; + Возврат Новый ФиксированноеСоответствие(СоответствиеОбъектовИПодсистем); КонецФункции @@ -54,10 +54,10 @@ ПодсистемыОбъекта = СоответствиеОбъектовИПодсистем[Объект.ПолноеИмя()]; Если ПодсистемыОбъекта = Неопределено Тогда ПодсистемыОбъекта = Новый Массив; - ИначеЕсли ПодсистемыОбъекта.Найти(ПодсистемаПервогоУровня) <> Неопределено Тогда + ИначеЕсли ПодсистемыОбъекта.Найти(ПодсистемаПервогоУровня.ПолноеИмя()) <> Неопределено Тогда Продолжить; КонецЕсли; - ПодсистемыОбъекта.Добавить(ПодсистемаПервогоУровня); + ПодсистемыОбъекта.Добавить(ПодсистемаПервогоУровня.ПолноеИмя()); СоответствиеОбъектовИПодсистем.Вставить(Объект.ПолноеИмя(), ПодсистемыОбъекта); КонецЦикла; diff --git a/SSL/src/CommonModules/УправлениеДоступом/Module.bsl b/SSL/src/CommonModules/УправлениеДоступом/Module.bsl index f03838d76..0061d5185 100644 --- a/SSL/src/CommonModules/УправлениеДоступом/Module.bsl +++ b/SSL/src/CommonModules/УправлениеДоступом/Module.bsl @@ -460,7 +460,7 @@ // с помощью которого нужно найти профиль групп доступа. // - Неопределено - выключить пользователю все профили. // -Процедура ВыключитьПрофильПользователю(Пользователь, Профиль =  Неопределено) Экспорт +Процедура ВыключитьПрофильПользователю(Пользователь, Профиль = Неопределено) Экспорт ВключитьОтключитьПрофильПользователя(Пользователь, Профиль, Ложь); КонецПроцедуры diff --git a/SSL/src/CommonModules/УправлениеДоступомСлужебный/Module.bsl b/SSL/src/CommonModules/УправлениеДоступомСлужебный/Module.bsl index 76d896e1b..bce624ae2 100644 --- a/SSL/src/CommonModules/УправлениеДоступомСлужебный/Module.bsl +++ b/SSL/src/CommonModules/УправлениеДоступомСлужебный/Module.bsl @@ -320,7 +320,6 @@ ГруппаДоступаОбъект = ГруппаПрофиля.ПолучитьОбъект(); КонецЕсли; РольАдминистратора = Метаданные.Роли.АдминистраторСистемы; - АдминистраторыСРолью = Новый Массив; ПользователиИБ = ПользователиИнформационнойБазы.ПолучитьПользователей(); Для Каждого ПользовательИБ Из ПользователиИБ Цикл Если ПользовательИБ.Роли.Содержит(РольАдминистратора) Тогда @@ -630,7 +629,7 @@ Обработчик.Приоритет = 1; Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "2.4.3.101"; + Обработчик.Версия = "2.4.4.15"; Обработчик.Процедура = "Справочники.ГруппыДоступа.ОбработатьДанныеДляПереходаНаНовуюВерсию"; Обработчик.РежимВыполнения = "Отложенно"; Обработчик.ЗапускатьИВПодчиненномУзлеРИБСФильтрами = Истина; @@ -1064,27 +1063,49 @@ // Выполняет копировании прав от одного пользователя другому. Процедура ПриКопированииПравНовомуПользователю(Источник, Приемник) Экспорт + УпрощенныйИнтерфейс = УпрощенныйИнтерфейсНастройкиПравДоступа(); Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | ГруппыДоступаПользователи.Ссылка КАК ГруппаДоступа, - | ГруппыДоступаПользователи.Ссылка.Профиль КАК Профиль - |ИЗ - | Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи - |ГДЕ - | НЕ(ГруппыДоступаПользователи.Пользователь <> &Пользователь - | И НЕ ГруппыДоступаПользователи.Пользователь В - | (ВЫБРАТЬ - | СоставыГруппПользователей.ГруппаПользователей - | ИЗ - | РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей - | ГДЕ - | СоставыГруппПользователей.Пользователь = &Пользователь))"; Запрос.УстановитьПараметр("Пользователь", Источник); + + Если УпрощенныйИнтерфейс Тогда + Запрос.Текст = + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | ГруппыДоступаПользователи.Ссылка.Профиль КАК Профиль + |ИЗ + | Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи + |ГДЕ + | (ГруппыДоступаПользователи.Пользователь = &Пользователь + | ИЛИ ГруппыДоступаПользователи.Пользователь В + | (ВЫБРАТЬ + | СоставыГруппПользователей.ГруппаПользователей + | ИЗ + | РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + | ГДЕ + | СоставыГруппПользователей.Пользователь = &Пользователь))"; + Иначе + Запрос.Текст = + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | ГруппыДоступаПользователи.Ссылка КАК ГруппаДоступа + |ИЗ + | Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи + |ГДЕ + | (ГруппыДоступаПользователи.Пользователь = &Пользователь + | ИЛИ ГруппыДоступаПользователи.Пользователь В + | (ВЫБРАТЬ + | СоставыГруппПользователей.ГруппаПользователей + | ИЗ + | РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + | ГДЕ + | СоставыГруппПользователей.Пользователь = &Пользователь))"; + КонецЕсли; + РезультатЗапроса = Запрос.Выполнить(); + Если РезультатЗапроса.Пустой() Тогда + Возврат; + КонецЕсли; + Выборка = РезультатЗапроса.Выбрать(); - УпрощенныйИнтерфейс = УпрощенныйИнтерфейсНастройкиПравДоступа(); Если Не УпрощенныйИнтерфейс Тогда Блокировка = Новый БлокировкаДанных(); ЭлементБлокировки = Блокировка.Добавить("Справочник.ГруппыДоступа"); @@ -1384,11 +1405,15 @@ МассивПользователей = Пользователи1; Если МассивПользователей.Количество() = 0 Тогда Возврат; + ИначеЕсли МассивПользователей.Количество() = 1 Тогда + Пользователи.НайтиНеоднозначныхПользователейИБ(МассивПользователей[0]); + Иначе + Пользователи.НайтиНеоднозначныхПользователейИБ(Неопределено); КонецЕсли; - Пользователи.НайтиНеоднозначныхПользователейИБ(Неопределено); ИначеЕсли ТипЗнч(Пользователи1) = Тип("Тип") Тогда МассивПользователей = Пользователи1; + Пользователи.НайтиНеоднозначныхПользователейИБ(Неопределено); Иначе МассивПользователей = Новый Массив; МассивПользователей.Добавить(Пользователи1); @@ -2119,7 +2144,6 @@ // Возвращает новые наборы для заполнения табличной части. Функция ПолучитьНаборыЗначенийДоступаТабличнойЧасти(Объект) Экспорт - СсылкаНаОбъект = Объект.Ссылка; ТипЗначенияОбъект = ТипЗнч(Объект); Если Объект.Метаданные().ТабличныеЧасти.Найти("НаборыЗначенийДоступа") = Неопределено Тогда @@ -2228,12 +2252,9 @@ Таблица.Колонки.Добавить("ЗначениеБезГрупп", Новый ОписаниеТипов("Булево")); СвойстваВидовДоступа = УправлениеДоступомСлужебныйПовтИсп.СвойстваВидовДоступа(); - ВозможныеПрава = УправлениеДоступомСлужебныйПовтИсп.ВозможныеПраваДляНастройкиПравОбъектов(); ТипыЗначенийДоступаСГруппами = СвойстваВидовДоступа.ТипыЗначенийДоступаСГруппами; ТипыЗначенийДоступа = СвойстваВидовДоступа.ПоТипамЗначений; - ОтдельныеТаблицы = ВозможныеПрава.ОтдельныеТаблицы; - ТипыВладельцевНастроекПрав = ВозможныеПрава.ПоТипамСсылок; КонецЕсли; // Нормализация ресурсов Чтение, Изменение. @@ -2433,7 +2454,7 @@ УправлениеДоступомСлужебныйКлиентСервер.ЗаполнитьСвойстваВидовДоступаВФорме(Форма); - УправлениеДоступомСлужебныйКлиентСервер.ПриИзмененииТекущегоВидаДоступа(Форма); + УправлениеДоступомСлужебныйКлиентСервер.ПриИзмененииТекущегоВидаДоступа(Форма, Ложь); КонецПроцедуры @@ -2579,8 +2600,8 @@ // * ОбновлениеИБ - Булево - если Истина, то необходимо выполнять запись данных, // не выполняя лишних, избыточных действий с данными. // См. ОбновлениеИнформационнойБазы.ЗаписатьДанные. -// Если свойство не вставлено, то значение вычисляется с помощью -// функции ВыполняетсяОбновлениеИнформационнойБазы +// Если свойство не вставлено, то значение вычисляется по "Или" с помощью функций +// ВыполняетсяОбновлениеИнформационнойБазы и ЭтоВызовИзОбработчикаОбновления // общего модуля ОбновлениеИнформационнойБазы. // // ЕстьИзменения - Булево (возвращаемое значение) - если производилась запись, @@ -2603,7 +2624,8 @@ ВсеПараметры.Вставить("ТолькоПроверка", Ложь); ВсеПараметры.Вставить("ДополнительныеСвойства"); ВсеПараметры.Вставить("ОбновлениеИБ", - ОбновлениеИнформационнойБазы.ВыполняетсяОбновлениеИнформационнойБазы()); + ОбновлениеИнформационнойБазы.ВыполняетсяОбновлениеИнформационнойБазы() + Или ОбновлениеИнформационнойБазы.ЭтоВызовИзОбработчикаОбновления()); ЗаполнитьПараметры(Данные, ВсеПараметры, "НаборЗаписей, НовыеЗаписи"); @@ -2784,8 +2806,8 @@ // * ОбновлениеИБ - Булево - если Истина, то необходимо выполнять запись данных, // не выполняя лишних, избыточных действий с данными. // См. ОбновлениеИнформационнойБазы.ЗаписатьДанные. -// Если свойство не вставлено, то значение вычисляется с помощью -// функции ВыполняетсяОбновлениеИнформационнойБазы +// Если свойство не вставлено, то значение вычисляется по "Или" с помощью функций +// ВыполняетсяОбновлениеИнформационнойБазы и ЭтоВызовИзОбработчикаОбновления // общего модуля ОбновлениеИнформационнойБазы. // // ЕстьИзменения - Булево (возвращаемое значение) - если производилась запись, @@ -2808,7 +2830,8 @@ ВсеПараметры.Вставить("ТолькоПроверка", Ложь); ВсеПараметры.Вставить("ДополнительныеСвойства"); ВсеПараметры.Вставить("ОбновлениеИБ", - ОбновлениеИнформационнойБазы.ВыполняетсяОбновлениеИнформационнойБазы()); + ОбновлениеИнформационнойБазы.ВыполняетсяОбновлениеИнформационнойБазы() + Или ОбновлениеИнформационнойБазы.ЭтоВызовИзОбработчикаОбновления()); ЗаполнитьПараметры(Данные, ВсеПараметры, "МенеджерРегистра, НовыеЗаписи"); @@ -3008,8 +3031,8 @@ // * ОбновлениеИБ - Булево - если Истина, то необходимо выполнять запись данных, // не выполняя лишних, избыточных действий с данными. // См. ОбновлениеИнформационнойБазы.ЗаписатьДанные. -// Если свойство не вставлено, то значение вычисляется с помощью -// функции ВыполняетсяОбновлениеИнформационнойБазы +// Если свойство не вставлено, то значение вычисляется по "Или" с помощью функций +// ВыполняетсяОбновлениеИнформационнойБазы и ЭтоВызовИзОбработчикаОбновления // общего модуля ОбновлениеИнформационнойБазы. // // ЕстьИзменения - Булево (возвращаемое значение) - если производилась запись, @@ -3029,7 +3052,8 @@ ВсеПараметры.Вставить("ТолькоПроверка", Ложь); ВсеПараметры.Вставить("ДополнительныеСвойства"); ВсеПараметры.Вставить("ОбновлениеИБ", - ОбновлениеИнформационнойБазы.ВыполняетсяОбновлениеИнформационнойБазы()); + ОбновлениеИнформационнойБазы.ВыполняетсяОбновлениеИнформационнойБазы() + Или ОбновлениеИнформационнойБазы.ЭтоВызовИзОбработчикаОбновления()); ЗаполнитьПараметры(Данные, ВсеПараметры, "МенеджерРегистра, ИзмененияСоставаСтрок"); @@ -3328,10 +3352,10 @@ Процедура ОбновитьВспомогательныеДанныеПоИзменениямКонфигурации(Параметры = Неопределено) Экспорт Блокировка = Новый БлокировкаДанных; - ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ТаблицыГруппДоступа"); - ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.НастройкиПравОбъектов"); - ЭлементБлокировки = Блокировка.Добавить("Справочник.ПрофилиГруппДоступа"); - ЭлементБлокировки = Блокировка.Добавить("Справочник.ГруппыДоступа"); + Блокировка.Добавить("РегистрСведений.ТаблицыГруппДоступа"); + Блокировка.Добавить("РегистрСведений.НастройкиПравОбъектов"); + Блокировка.Добавить("Справочник.ПрофилиГруппДоступа"); + Блокировка.Добавить("Справочник.ГруппыДоступа"); НачатьТранзакцию(); Попытка @@ -3677,7 +3701,7 @@ ПараметрыОбновления.Вставить("ПоследниеОбъектыСИзменениемПрав", ТекущиеОбъектыСИзменениемПрав); Блокировка = Новый БлокировкаДанных; - ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ТаблицыГруппДоступа"); + Блокировка.Добавить("РегистрСведений.ТаблицыГруппДоступа"); НачатьТранзакцию(); Попытка Блокировка.Заблокировать(); @@ -3738,7 +3762,7 @@ | |%2'"), Строка(СсылкаНаЗависимыйОбъект), - КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); + КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); КонецПопытки; КонецЕсли; КонецЦикла; @@ -4833,12 +4857,8 @@ КонецФункции -Функция ОбновитьНовыеЗаписиНабораПоВсемНовымЗаписям(Знач Данные, - Знач Отбор, - Знач СписокПолей, - Знач ИмяИзмерения, - Знач ЗначенияИзмерения, - ЕстьИзменения) +Процедура ОбновитьНовыеЗаписиНабораПоВсемНовымЗаписям(Знач Данные, Знач Отбор, Знач СписокПолей, + Знач ИмяИзмерения, Знач ЗначенияИзмерения, ЕстьИзменения) ЗаблокироватьОбластьНабораЗаписей(Данные.НаборЗаписей, Данные.ПолноеИмяРегистра); @@ -4848,7 +4868,6 @@ Для каждого Значение Из ЗначенияИзмерения Цикл Отбор[ИмяИзмерения] = Значение; - НайденныеЗаписи = НовыеЗаписиНабора.НайтиСтроки(Отбор); Для каждого НайденнаяЗапись Из НовыеЗаписиНабора.НайтиСтроки(Отбор) Цикл НовыеЗаписиНабора.Удалить(НайденнаяЗапись); КонецЦикла; @@ -4865,7 +4884,7 @@ ОбновитьНаборЗаписей(ТекущиеДанные, ЕстьИзменения); -КонецФункции +КонецПроцедуры Процедура ОбновитьНовыеЗаписиНабораПоРазличнымНовымЗаписям(Знач Данные, Знач Отбор, ЕстьИзменения) @@ -5178,8 +5197,6 @@ Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ТекущаяТаблица", Данные.ПолноеИмяРегистра); Запрос.Текст = СтрЗаменить(Запрос.Текст, "&УсловиеОтбора", УсловиеОтбора); - РезультатыЗапросов = Запрос.ВыполнитьПакет(); - Данные.Вставить("КоличествоДляЧтения", Запрос.Выполнить().Выгрузить()[0].Количество); КонецПроцедуры @@ -5614,7 +5631,7 @@ | |"; - ТекстПакета = ТекстЗапроса + Объединитель + ДобавляемыйТекстЗапроса; + ТекстЗапроса = ТекстЗапроса + Объединитель + ДобавляемыйТекстЗапроса; КонецПроцедуры diff --git a/SSL/src/CommonModules/УправлениеДоступомСлужебныйВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/УправлениеДоступомСлужебныйВМоделиСервиса/Module.bsl index f4133008f..487ce454f 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 549ad0466..afd00ef2d 100644 --- a/SSL/src/CommonModules/УправлениеДоступомСлужебныйКлиент/Module.bsl +++ b/SSL/src/CommonModules/УправлениеДоступомСлужебныйКлиент/Module.bsl @@ -224,7 +224,7 @@ // Только для внутреннего использования. Процедура ВидыДоступаПередУдалением(Форма, Элемент, Отказ) Экспорт - ТекущийВидДоступа = Неопределено; + Форма.ТекущийВидДоступа = Неопределено; КонецПроцедуры diff --git a/SSL/src/CommonModules/УправлениеДоступомСлужебныйКлиентСервер/Module.bsl b/SSL/src/CommonModules/УправлениеДоступомСлужебныйКлиентСервер/Module.bsl index 321ab6057..9ee2b8ad3 100644 --- a/SSL/src/CommonModules/УправлениеДоступомСлужебныйКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/УправлениеДоступомСлужебныйКлиентСервер/Module.bsl @@ -109,7 +109,7 @@ Иначе ЧислоИПредмет = Формат(КоличествоЗначений, "ЧГ=") + " " + ПользователиСлужебныйКлиентСервер.ПредметЦелогоЧисла(КоличествоЗначений, - "Л = ru_RU", НСтр("ru = 'значение,значения,значений,,,,,,0'")); + "", НСтр("ru = 'значение,значения,значений,,,,,,0'")); КонецЕсли; ОписаниеВидаДоступа.ВсеРазрешеныПредставление = @@ -125,7 +125,7 @@ Иначе ЧислоИПредмет = Формат(КоличествоЗначений, "ЧГ=") + " " + ПользователиСлужебныйКлиентСервер.ПредметЦелогоЧисла(КоличествоЗначений, - "Л = ru_RU", НСтр("ru = 'значения,значений,значений,,,,,,0'")); + "", НСтр("ru = 'значения,значений,значений,,,,,,0'")); Представление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( ?(ОписаниеВидаДоступа.ВсеРазрешены, @@ -155,21 +155,19 @@ КонецПроцедуры // Только для внутреннего использования. -Процедура ПриИзмененииТекущегоВидаДоступа(Форма) Экспорт +Процедура ПриИзмененииТекущегоВидаДоступа(Форма, ОбработкаНаКлиенте = Истина) Экспорт Элементы = Форма.Элементы; Параметры = ПараметрыФормыРедактированияРазрешенныхЗначений(Форма); ЗначенияРедактируются = Ложь; - #Если Клиент Тогда + Если ОбработкаНаКлиенте Тогда ТекущиеДанные = Элементы.ВидыДоступа.ТекущиеДанные; - #Иначе + Иначе ТекущиеДанные = Параметры.ВидыДоступа.НайтиПоИдентификатору( - ?(Элементы.ВидыДоступа.ТекущаяСтрока = Неопределено, - -1, - Элементы.ВидыДоступа.ТекущаяСтрока)); - #КонецЕсли + ?(Элементы.ВидыДоступа.ТекущаяСтрока = Неопределено, -1, Элементы.ВидыДоступа.ТекущаяСтрока)); + КонецЕсли; Если ТекущиеДанные <> Неопределено Тогда @@ -494,3 +492,13 @@ КонецПроцедуры #КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция ПредставлениеГруппыДоступа(Данные) Экспорт + + Возврат Данные.Наименование + ": " + Данные.Пользователь; + +КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/УправлениеДоступомСлужебныйПовтИсп/Module.bsl b/SSL/src/CommonModules/УправлениеДоступомСлужебныйПовтИсп/Module.bsl index 6241ab9c6..ff3c5e432 100644 --- a/SSL/src/CommonModules/УправлениеДоступомСлужебныйПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/УправлениеДоступомСлужебныйПовтИсп/Module.bsl @@ -254,7 +254,7 @@ ТипыПоля.Вставить(Тип, Истина); КонецЦикла; - Возврат ТипыПоля; + Возврат Новый ФиксированноеСоответствие(ТипыПоля); КонецФункции @@ -308,7 +308,7 @@ Менеджер = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПолноеИмяРегистра); - Возврат Менеджер.СоздатьНаборЗаписей().Выгрузить(); + Возврат Новый ХранилищеЗначения(Менеджер.СоздатьНаборЗаписей().Выгрузить()); КонецФункции @@ -327,7 +327,7 @@ КонецЕсли; КонецЦикла; - Возврат ПустыеСсылки; + Возврат Новый ХранилищеЗначения(ПустыеСсылки); КонецФункции @@ -375,7 +375,7 @@ Формат(КлючИЗначение.Значение, ФорматнаяСтрокаКода)); КонецЦикла; - Возврат СтроковыеКодыТипов; + Возврат Новый ФиксированноеСоответствие(СтроковыеКодыТипов); КонецФункции @@ -399,30 +399,6 @@ КонецФункции -// Только для внутреннего использования. -Функция ТипыЗначенийВидовДоступа() Экспорт - - СвойстваВидовДоступа = УправлениеДоступомСлужебныйПовтИсп.СвойстваВидовДоступа(); - - ТипыЗначенийВидовДоступа = Новый ТаблицаЗначений; - ТипыЗначенийВидовДоступа.Колонки.Добавить("ВидДоступа", Метаданные.ОпределяемыеТипы.ЗначениеДоступа.Тип); - ТипыЗначенийВидовДоступа.Колонки.Добавить("ТипЗначений", Метаданные.ОпределяемыеТипы.ЗначениеДоступа.Тип); - - Для каждого КлючИЗначение Из СвойстваВидовДоступа.ПоТипамЗначений Цикл - Строка = ТипыЗначенийВидовДоступа.Добавить(); - Строка.ВидДоступа = КлючИЗначение.Значение.Ссылка; - - Типы = Новый Массив; - Типы.Добавить(КлючИЗначение.Ключ); - ОписаниеТипа = Новый ОписаниеТипов(Типы); - - Строка.ТипЗначений = ОписаниеТипа.ПривестиЗначение(Неопределено); - КонецЦикла; - - Возврат ТипыЗначенийВидовДоступа; - -КонецФункции - // Только для внутреннего использования. Функция ТипыГруппИЗначенийВидовДоступа() Экспорт @@ -477,7 +453,7 @@ ТипыЗначенийВидовДоступаИВладельцевНастроекПрав.Колонки.Добавить("ТипЗначений", УправлениеДоступомСлужебныйПовтИсп.ОписаниеТиповЗначенийДоступаИВладельцевНастроекПрав()); - ТипыЗначенийВидовДоступа = УправлениеДоступомСлужебныйПовтИсп.ТипыЗначенийВидовДоступа(); + ТипыЗначенийВидовДоступа = ТипыЗначенийВидовДоступа(); Для каждого Строка Из ТипыЗначенийВидовДоступа Цикл ЗаполнитьЗначенияСвойств(ТипыЗначенийВидовДоступаИВладельцевНастроекПрав.Добавить(), Строка); @@ -497,7 +473,7 @@ Строка.ТипЗначений = ОписаниеТипа.ПривестиЗначение(Неопределено); КонецЦикла; - Возврат ТипыЗначенийВидовДоступаИВладельцевНастроекПрав; + Возврат Новый ХранилищеЗначения(ТипыЗначенийВидовДоступаИВладельцевНастроекПрав); КонецФункции @@ -508,4 +484,30 @@ КонецФункции +//////////////////////////////////////////////////////////////////////////////// +// Вспомогательные процедуры и функции. + +Функция ТипыЗначенийВидовДоступа() + + СвойстваВидовДоступа = УправлениеДоступомСлужебныйПовтИсп.СвойстваВидовДоступа(); + + ТипыЗначенийВидовДоступа = Новый ТаблицаЗначений; + ТипыЗначенийВидовДоступа.Колонки.Добавить("ВидДоступа", Метаданные.ОпределяемыеТипы.ЗначениеДоступа.Тип); + ТипыЗначенийВидовДоступа.Колонки.Добавить("ТипЗначений", Метаданные.ОпределяемыеТипы.ЗначениеДоступа.Тип); + + Для каждого КлючИЗначение Из СвойстваВидовДоступа.ПоТипамЗначений Цикл + Строка = ТипыЗначенийВидовДоступа.Добавить(); + Строка.ВидДоступа = КлючИЗначение.Значение.Ссылка; + + Типы = Новый Массив; + Типы.Добавить(КлючИЗначение.Ключ); + ОписаниеТипа = Новый ОписаниеТипов(Типы); + + Строка.ТипЗначений = ОписаниеТипа.ПривестиЗначение(Неопределено); + КонецЦикла; + + Возврат ТипыЗначенийВидовДоступа; + +КонецФункции + #КонецОбласти diff --git a/SSL/src/CommonModules/УправлениеКонтактнойИнформацией/Module.bsl b/SSL/src/CommonModules/УправлениеКонтактнойИнформацией/Module.bsl index eb221b682..9479542c5 100644 --- a/SSL/src/CommonModules/УправлениеКонтактнойИнформацией/Module.bsl +++ b/SSL/src/CommonModules/УправлениеКонтактнойИнформацией/Module.bsl @@ -142,7 +142,6 @@ ТипыКонтактнойИнформации.Добавить(ВидКонтактнойИнформации.Тип); Иначе ВидыКонтактнойИнформации = Неопределено; - ТипКонтактнойИнформации = Неопределено; КонецЕсли; Возврат КонтактнаяИнформацияОбъектов(СсылкиИлиОбъекты, ТипыКонтактнойИнформации, ВидыКонтактнойИнформации, Дата); @@ -218,17 +217,17 @@ // Функция НоваяКонтактнаяИнформация(КолонкаОбъект = Истина) Экспорт - КонтактнаяИнформация = Новый ТаблицаЗначений; - ОписаниеТиповСтрока500 = Новый ОписаниеТипов("Строка",,Новый КвалификаторыСтроки(500)); + КонтактнаяИнформация = Новый ТаблицаЗначений; + ОписаниеТиповСтрока500 = Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(500)); Если КолонкаОбъект Тогда КонтактнаяИнформация.Колонки.Добавить("Объект"); КонецЕсли; + КонтактнаяИнформация.Колонки.Добавить("Представление", ОписаниеТиповСтрока500); + КонтактнаяИнформация.Колонки.Добавить("ЗначенияПолей", Новый ОписаниеТипов("Строка")); КонтактнаяИнформация.Колонки.Добавить("Вид", Новый ОписаниеТипов("СправочникСсылка.ВидыКонтактнойИнформации")); КонтактнаяИнформация.Колонки.Добавить("Тип", Новый ОписаниеТипов("ПеречислениеСсылка.ТипыКонтактнойИнформации")); - КонтактнаяИнформация.Колонки.Добавить("ЗначенияПолей", Новый ОписаниеТипов("Строка")); - КонтактнаяИнформация.Колонки.Добавить("Представление", ОписаниеТиповСтрока500); КонтактнаяИнформация.Колонки.Добавить("Дата", Новый ОписаниеТипов("Дата")); Возврат КонтактнаяИнформация; @@ -381,10 +380,12 @@ ХранитьИсториюИзменений = ВладелецКонтактнойИнформации.Значение["Периодическая"] И СтрокаКонтактнойИнформацииОбъекта.Вид.ХранитьИсториюИзменений; Если Замещать Тогда + Если ЗапрещенВводНесколькихЗначений(СтрокаКонтактнойИнформацииОбъекта.Вид, Объект.КонтактнаяИнформация, СтрокаКонтактнойИнформацииОбъекта.Дата) Тогда Продолжить; КонецЕсли; СтрокаКонтактнойИнформации = Объект.КонтактнаяИнформация.Добавить(); + Иначе Отбор = Новый Структура(); @@ -405,7 +406,6 @@ КонецЕсли; СтрокаКонтактнойИнформации = Объект.КонтактнаяИнформация.Добавить(); - КонецЕсли; ЗаполнитьКонтактнуюИнформациюОбъектаИзСтроки(СтрокаКонтактнойИнформацииОбъекта, ХранитьИсториюИзменений, СтрокаКонтактнойИнформации); @@ -447,6 +447,7 @@ ВызватьИсключение НСтр("ru = 'Добавление контактной информации невозможно, у объекта нет таблицы с контактной информацией.'");; КонецЕсли; + // Очистка контактной информации пустой таблицей. Если КонтактнаяИнформация.Количество() = 0 Тогда Если Замещать Тогда Объект.КонтактнаяИнформация.Очистить(); @@ -481,10 +482,12 @@ ХранитьИсториюИзменений = Периодическая И СтрокаКонтактнойИнформацииОбъекта.Вид.ХранитьИсториюИзменений; Если Замещать Тогда - Если ЗапрещенВводНесколькихЗначений(СтрокаКонтактнойИнформацииОбъекта.Вид, Объект.КонтактнаяИнформация, СтрокаКонтактнойИнформацииОбъекта.Дата) Тогда + + Если ЗапрещенВводНесколькихЗначений(СтрокаКонтактнойИнформацииОбъекта.Вид, Объект.КонтактнаяИнформация, СтрокаКонтактнойИнформацииОбъекта.Дата) Тогда Продолжить; КонецЕсли; СтрокаКонтактнойИнформации = Объект.КонтактнаяИнформация.Добавить(); + Иначе Отбор = Новый Структура(); @@ -516,7 +519,6 @@ Объект.Записать(); КонецЕсли; - КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// @@ -821,7 +823,6 @@ Запрос = Новый Запрос(); ТекстЗапросаПодготовкаДанных = ""; - ЕстьКонтактнаяИнформацияСДатой = Ложь; СтрокаРАЗРЕШЕННЫЕ = " РАЗРЕШЕННЫЕ "; СтрокаВременнойТаблицы = "ПОМЕСТИТЬ ВТКонтактнаяИнформация"; @@ -1266,7 +1267,6 @@ Знач УдалитьИсключаемыеВиды = Неопределено, УдалитьОтложеннаяИнициализация = Ложь) Экспорт ТипПомещения = Неопределено; - Если ТипЗнч(ДополнительныеПараметры) = Тип("Структура") Тогда ДополнительныеПараметры.Свойство("ТипПомещения", ТипПомещения); @@ -1275,7 +1275,7 @@ ИсключаемыеВиды = ?(ДополнительныеПараметры.Свойство("ИсключаемыеВиды"), ДополнительныеПараметры.ИсключаемыеВиды, Неопределено); ИмяЭлементаДляРазмещения = ?(ДополнительныеПараметры.Свойство("ИмяЭлементаДляРазмещения"), ДополнительныеПараметры.ИмяЭлементаДляРазмещения, "ГруппаКонтактнаяИнформация"); Иначе - ИмяЭлементаДляРазмещения =?(ДополнительныеПараметры = Неопределено, "ГруппаКонтактнаяИнформация", ДополнительныеПараметры); + ИмяЭлементаДляРазмещения = ?(ДополнительныеПараметры = Неопределено, "ГруппаКонтактнаяИнформация", ДополнительныеПараметры); ОтложеннаяИнициализация = УдалитьОтложеннаяИнициализация; ИсключаемыеВиды = УдалитьИсключаемыеВиды; ПоложениеЗаголовкаКИ = УдалитьПоложениеЗаголовкаКИ; @@ -1285,42 +1285,23 @@ ИсключаемыеВиды = Новый Массив; КонецЕсли; - МассивДобавляемыхРеквизитов = Новый Массив; - ПроверитьНаличиеРеквизитовКонтактнойИнформации(Форма, МассивДобавляемыхРеквизитов); - - // Получим список видов КИ + ДобавляемыеРеквизиты = Новый Массив; + ПроверитьНаличиеРеквизитовКонтактнойИнформации(Форма, ДобавляемыеРеквизиты); + // Кэширование часто используемых значений СсылкаНаОбъект = Объект.Ссылка; - ГруппаВидовКИ = ГруппаВидовКонтактнойИнформацииОбъекта(СсылкаНаОбъект); - - ИспользуетсяКонтактнаяИнформация = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ГруппаВидовКИ, "Используется"); - - Если ИспользуетсяКонтактнаяИнформация = Ложь Тогда - // Добавим новые реквизиты - Если МассивДобавляемыхРеквизитов.Количество() > 0 Тогда - Форма.ИзменитьРеквизиты(МассивДобавляемыхРеквизитов); - КонецЕсли; - ДобавленныеРеквизиты = Новый Массив; - Для Каждого СтрокаРеквизита Из МассивДобавляемыхРеквизитов Цикл - Если ПустаяСтрока(СтрокаРеквизита.Путь) Тогда - ДобавленныеРеквизиты.Добавить(СтрокаРеквизита.Имя); - КонецЕсли; - КонецЦикла; - - ПараметрыКонтактнойИнформации = ПараметрыВыводаКонтактнойИнформации(Форма, ИмяЭлементаДляРазмещения, ПоложениеЗаголовкаКИ, - ОтложеннаяИнициализация, ИсключаемыеВиды); - ПараметрыКонтактнойИнформации.ДобавленныеРеквизиты = ДобавленныеРеквизиты; - ПараметрыКонтактнойИнформации.Владелец = СсылкаНаОбъект; - - Если Не ПустаяСтрока(ИмяЭлементаДляРазмещения) Тогда - Форма.Элементы[ИмяЭлементаДляРазмещения].Видимость = Ложь; - КонецЕсли; - Возврат; - КонецЕсли; - МетаданныеОбъекта = СсылкаНаОбъект.Метаданные(); ПолноеИмяОбъектаМетаданных = МетаданныеОбъекта.ПолноеИмя(); ИмяОбъекта = МетаданныеОбъекта.Имя; + + ГруппаВидовКонтактнойИнформации = ГруппаВидовКонтактнойИнформацииОбъекта(ПолноеИмяОбъектаМетаданных); + ИспользуетсяКонтактнаяИнформация = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ГруппаВидовКонтактнойИнформации, "Используется"); + Если ИспользуетсяКонтактнаяИнформация = Ложь Тогда + СкрытьКонтактнуюИнформацию(Форма, ДобавляемыеРеквизиты, ИмяЭлементаДляРазмещения, ИсключаемыеВиды, + ОтложеннаяИнициализация, ПоложениеЗаголовкаКИ, СсылкаНаОбъект); + Возврат; + КонецЕсли; + РеквизитыОбъекта = МетаданныеОбъекта.ТабличныеЧасти.КонтактнаяИнформация.Реквизиты; ЕстьКолонкаДействуетС = (РеквизитыОбъекта.Найти("ДействуетС") <> Неопределено); ЕстьКолонкаИдентификаторСтрокиТабличнойЧасти = (РеквизитыОбъекта.Найти("ИдентификаторСтрокиТабличнойЧасти") <> Неопределено); @@ -1342,7 +1323,6 @@ |ГДЕ | КонтактнаяИнформация.Ссылка = &Ссылка УПОРЯДОЧИТЬ ПО Вид, ДействуетС"; - ПоляКонтактнойИнформации = ""; Если ЕстьКолонкаИдентификаторСтрокиТабличнойЧасти Тогда ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "0 КАК ИдентификаторСтрокиТабличнойЧасти", "ЕСТЬNULL(КонтактнаяИнформация.ИдентификаторСтрокиТабличнойЧасти, 0) КАК ИдентификаторСтрокиТабличнойЧасти"); @@ -1447,7 +1427,7 @@ Запрос = Новый Запрос(ТекстЗапроса); Запрос.УстановитьПараметр("ТаблицаКонтактнойИнформации", КонтактнаяИнформация); - Запрос.УстановитьПараметр("ГруппаВидовКИ", ГруппаВидовКИ); + Запрос.УстановитьПараметр("ГруппаВидовКИ", ГруппаВидовКонтактнойИнформации); Запрос.УстановитьПараметр("Владелец", СсылкаНаОбъект); УстановитьПривилегированныйРежим(Истина); @@ -1455,188 +1435,47 @@ УстановитьПривилегированныйРежим(Ложь); КонтактнаяИнформация.Сортировать("РеквизитДопУпорядочивания, НомерСтроки"); - Строка500 = Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(500)); - - СозданныеРеквизиты = ОбщегоНазначенияКлиентСервер.СкопироватьМассив(ИсключаемыеВиды); - ПредыдущийВид = Неопределено; - ПорядковыйНомер = 1; - - Для Каждого ОбъектКонтактнойИнформации Из КонтактнаяИнформация Цикл - - Если ОбъектКонтактнойИнформации.ЭтоРеквизитТабличнойЧасти Тогда - - ИмяВидаКИ = ОбъектКонтактнойИнформации.ИмяПредопределенныхДанных; - Поз = СтрНайти(ИмяВидаКИ, ИмяОбъекта); - - ИмяТабличнойЧасти = Сред(ИмяВидаКИ, Поз + СтрДлина(ИмяОбъекта)); - - ПредыдущийВид = Неопределено; - ИмяРеквизита = ""; - - ОбъектКонтактнойИнформации.Строки.Сортировать("РеквизитДопУпорядочивания"); - - Для Каждого СтрокаКИ Из ОбъектКонтактнойИнформации.Строки Цикл - - ОбъектКонтактнойИнформации.Строки.Сортировать("РеквизитДопУпорядочивания"); - - ТекущийВид = СтрокаКИ.Вид; - - Если ТекущийВид <> ПредыдущийВид Тогда - - ИмяРеквизита = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("%1%2%3%4", - "КонтактнаяИнформацияПоле", - ИмяТабличнойЧасти, - СтрЗаменить(ТекущийВид.УникальныйИдентификатор(), "-", "x"), - ОбъектКонтактнойИнформации.Строки.Индекс(СтрокаКИ)); - - ПутьРеквизитов = "Объект." + ИмяТабличнойЧасти; - - МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы(ИмяРеквизита, Строка500, ПутьРеквизитов, СтрокаКИ.Наименование, Истина)); - МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы(ИмяРеквизита + "ЗначенияПолей", Новый ОписаниеТипов("СписокЗначений, Строка"), ПутьРеквизитов,, Истина)); - ПредыдущийВид = ТекущийВид; - - КонецЕсли; - - СтрокаКИ.ИмяРеквизита = ИмяРеквизита; - - КонецЦикла; - - Иначе - - Если ОбъектКонтактнойИнформации.ЭтоИсторическаяКонтактнаяИнформация Тогда - ОбработатьСведенияКонтактнойИнформации(ОбъектКонтактнойИнформации, Форма); - Продолжить; - КонецЕсли; - - ТекущийВид = ОбъектКонтактнойИнформации.Вид; - - Если ТекущийВид <> ПредыдущийВид Тогда - ПредыдущийВид = ТекущийВид; - ПорядковыйНомер = 1; - Иначе - ПорядковыйНомер = ПорядковыйНомер + 1; - КонецЕсли; - - Индекс = СозданныеРеквизиты.Найти(ТекущийВид); - - Если Индекс = Неопределено Тогда - - ИмяРеквизита = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("%1%2%3", - "КонтактнаяИнформацияПоле", - СтрЗаменить(ТекущийВид.УникальныйИдентификатор(), "-", "x"), - ПорядковыйНомер); - - ОбъектКонтактнойИнформации.ИмяРеквизита = ИмяРеквизита; - Если Не ОтложеннаяИнициализация Тогда - МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы(ОбъектКонтактнойИнформации.ИмяРеквизита, Строка500, , ОбъектКонтактнойИнформации.Наименование, Истина)); - КонецЕсли; - Иначе - ОбъектКонтактнойИнформации.ИмяРеквизита = "КонтактнаяИнформацияПоле" + ОбъектКонтактнойИнформации.ИмяПредопределенныхДанных; - СозданныеРеквизиты.Удалить(Индекс); - КонецЕсли; - - ОбработатьСведенияКонтактнойИнформации(ОбъектКонтактнойИнформации, Форма); - КонецЕсли; - КонецЦикла; - - // Добавим новые реквизиты - Если МассивДобавляемыхРеквизитов.Количество() > 0 Тогда - Форма.ИзменитьРеквизиты(МассивДобавляемыхРеквизитов); - КонецЕсли; + СоздатьРеквизитыКонтактнойИнформации(Форма, ДобавляемыеРеквизиты, ИмяОбъекта, ИсключаемыеВиды, КонтактнаяИнформация, ОтложеннаяИнициализация); ПараметрыКонтактнойИнформации = ПараметрыВыводаКонтактнойИнформации(Форма, ИмяЭлементаДляРазмещения, ПоложениеЗаголовкаКИ, ОтложеннаяИнициализация, ИсключаемыеВиды); ПараметрыКонтактнойИнформации.Владелец = СсылкаНаОбъект; ПараметрыКонтактнойИнформации.ПараметрыАдреса.ТипПомещения = ТипПомещения; - ПредыдущийВид = Неопределено; - + // Кэш значений всех видов контактной информации у данного объекта. + ДанныеВидовКонтактнойИнформации = УправлениеКонтактнойИнформациейСлужебный.ДанныеВидовКонтактнойИнформации( + КонтактнаяИнформация.ВыгрузитьКолонку("Вид")); + Отбор = Новый Структура("Тип", Перечисления.ТипыКонтактнойИнформации.Адрес); КоличествоАдресов = КонтактнаяИнформация.НайтиСтроки(Отбор).Количество(); // Создадим элементы на форме и заполним значения реквизитов. - - ЗаголовокСлева = ЗаголовокСлева(Форма.ПараметрыКонтактнойИнформации[ИмяЭлементаДляРазмещения].ПоложениеЗаголовка); СозданныеЭлементы = ОбщегоНазначенияКлиентСервер.СкопироватьМассив(ИсключаемыеВиды); - СтатусКонтекстногоМеню = 0; - ПредыдущийЭлемент = Неопределено; + ПредыдущийВид = Неопределено; Для Каждого СтрокаКИ Из КонтактнаяИнформация Цикл Если СтрокаКИ.ЭтоРеквизитТабличнойЧасти Тогда - - ИмяВидаКИ = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СтрокаКИ.Вид, "ИмяПредопределенныхДанных"); - Поз = СтрНайти(ИмяВидаКИ, ИмяОбъекта); - - ИмяТабличнойЧасти = Сред(ИмяВидаКИ, Поз + СтрДлина(ИмяОбъекта)); - - ПредыдущийВидТЧ = Неопределено; - - Для Каждого СтрокаТабличнойЧастиКИ Из СтрокаКИ.Строки Цикл - - ВидТЧ = СтрокаТабличнойЧастиКИ.Вид; - - Если ВидТЧ <> ПредыдущийВидТЧ Тогда - - ГруппаТабличнойЧасти = Форма.Элементы[ИмяТабличнойЧасти + "ГруппаКонтактнаяИнформация"]; - - Элемент = Форма.Элементы.Добавить(СтрокаТабличнойЧастиКИ.ИмяРеквизита, Тип("ПолеФормы"), ГруппаТабличнойЧасти); - Элемент.Вид = ВидПоляФормы.ПолеВвода; - Элемент.ПутьКДанным = "Объект." + ИмяТабличнойЧасти + "." + СтрокаТабличнойЧастиКИ.ИмяРеквизита; - - Если ДляТипаКонтактнойИнформацииДоступноРедактированиеВДиалоге(СтрокаТабличнойЧастиКИ.Тип) Тогда - Элемент.КнопкаВыбора = Истина; - Если ВидТЧ.РедактированиеТолькоВДиалоге Тогда - Элемент.РедактированиеТекста = Ложь; - КонецЕсли; - - Элемент.УстановитьДействие("НачалоВыбора", "Подключаемый_КонтактнаяИнформацияНачалоВыбора"); - КонецЕсли; - Элемент.УстановитьДействие("ПриИзменении", "Подключаемый_КонтактнаяИнформацияПриИзменении"); - - Если ВидТЧ.ОбязательноеЗаполнение Тогда - Элемент.АвтоОтметкаНезаполненного = Истина; - КонецЕсли; - - Форма.ПараметрыКонтактнойИнформации[ИмяЭлементаДляРазмещения].ДобавленныеЭлементы.Добавить(СтрокаТабличнойЧастиКИ.ИмяРеквизита, - 2, Ложь); - - ДобавитьРеквизитВОписание(Форма, СтрокаТабличнойЧастиКИ, Ложь, Истина,, ИмяЭлементаДляРазмещения); - ПредыдущийВидТЧ = ВидТЧ; - - КонецЕсли; - - Отбор = Новый Структура; - Отбор.Вставить("ИдентификаторСтрокиТабличнойЧасти", СтрокаТабличнойЧастиКИ.ИдентификаторСтрокиТабличнойЧасти); - - СтрокиТаблицы = Форма.Объект[ИмяТабличнойЧасти].НайтиСтроки(Отбор); - - Если СтрокиТаблицы.Количество() = 1 Тогда - СтрокаТаблицы = СтрокиТаблицы[0]; - СтрокаТаблицы[СтрокаТабличнойЧастиКИ.ИмяРеквизита] = СтрокаТабличнойЧастиКИ.Представление; - СтрокаТаблицы[СтрокаТабличнойЧастиКИ.ИмяРеквизита + "ЗначенияПолей"] = СтрокаТабличнойЧастиКИ.ЗначенияПолей; - КонецЕсли; - КонецЦикла; - + СоздатьЭлементыТабличнойЧасти(Форма, ИмяОбъекта, ИмяЭлементаДляРазмещения, СтрокаКИ, ДанныеВидовКонтактнойИнформации); Продолжить; - КонецЕсли; ИндексЭлемента = СозданныеЭлементы.Найти(СтрокаКИ.Вид); СтатическийЭлемент = ИндексЭлемента <> Неопределено; - ЭтоНовыйВидКИ = (СтрокаКИ.Вид <> ПредыдущийВид); Если ОтложеннаяИнициализация Тогда - ДобавитьРеквизитВОписание(Форма, СтрокаКИ, ЭтоНовыйВидКИ,, СтатическийЭлемент, ИмяЭлементаДляРазмещения); + ДобавитьРеквизитВОписание(Форма, СтрокаКИ, ДанныеВидовКонтактнойИнформации, ЭтоНовыйВидКИ,, + СтатическийЭлемент, ИмяЭлементаДляРазмещения); Если СтатическийЭлемент Тогда СозданныеЭлементы.Удалить(ИндексЭлемента); КонецЕсли; Продолжить; КонецЕсли; - ДобавитьРеквизитВОписание(Форма, СтрокаКИ, ЭтоНовыйВидКИ,, НЕ СтрокаКИ.ЭтоИсторическаяКонтактнаяИнформация, ИмяЭлементаДляРазмещения); + ДобавитьРеквизитВОписание(Форма, СтрокаКИ, ДанныеВидовКонтактнойИнформации, ЭтоНовыйВидКИ,, + НЕ СтрокаКИ.ЭтоИсторическаяКонтактнаяИнформация, ИмяЭлементаДляРазмещения); Если СтатическийЭлемент Тогда СозданныеЭлементы.Удалить(ИндексЭлемента); @@ -1661,50 +1500,9 @@ Если Не ОтложеннаяИнициализация И Форма.ПараметрыКонтактнойИнформации[ИмяЭлементаДляРазмещения].СписокДобавляемыхЭлементов.Количество() > 0 Тогда - Описание = НСтр("ru = 'Добавить дополнительное поле контактной информации'"); - ГруппаКоманды = Группа("ГруппаКонтактнаяИнформацияДобавитьПолеВвода" + ИмяЭлементаДляРазмещения, Форма, Описание, ИмяЭлементаДляРазмещения); - ГруппаКоманды.Отображение = ОтображениеОбычнойГруппы.ОбычноеВыделение; - - ИмяКоманды = "КонтактнаяИнформацияДобавитьПолеВвода" + ИмяЭлементаДляРазмещения; - Команда = Форма.Команды.Добавить(ИмяКоманды); - Команда.Подсказка = Описание; - Команда.Отображение = ОтображениеКнопки.КартинкаИТекст; - Команда.Картинка = БиблиотекаКартинок.ДобавитьЭлементСписка; - Команда.Действие = "Подключаемый_КонтактнаяИнформацияВыполнитьКоманду"; - - Форма.ПараметрыКонтактнойИнформации[ИмяЭлементаДляРазмещения].ДобавленныеЭлементы.Добавить(ИмяКоманды, 9, Истина); - - Кнопка = Форма.Элементы.Добавить(ИмяКоманды,Тип("КнопкаФормы"), ГруппаКоманды); - Кнопка.Доступность = НЕ Форма.Элементы[ИмяЭлементаДляРазмещения].ТолькоПросмотр; - Кнопка.Заголовок = НСтр("ru = 'Добавить'"); - Команда.ИзменяетСохраняемыеДанные = Истина; - Кнопка.ИмяКоманды = ИмяКоманды; - Форма.ПараметрыКонтактнойИнформации[ИмяЭлементаДляРазмещения].ДобавленныеЭлементы.Добавить(ИмяКоманды, 2, Ложь); + ДобавитьКнопкуДополнительногоПоляКонтактнойИнформации(Форма, ИмяЭлементаДляРазмещения); Иначе - ГруппаДляРазмещения = Форма.Элементы[ИмяЭлементаДляРазмещения]; - // Если отложенная инициализация и на странице нет элементов, то платформа скрывает страницу, - // поэтому надо создавать временный элемент, который при переходе на страницу удаляется. - Если ОтложеннаяИнициализация - И ГруппаДляРазмещения.Вид = ВидГруппыФормы.Страница - И Форма.Элементы.Найти("КонтактнаяИнформацияЗаглушка") = Неопределено Тогда - ГруппаСтраниц = ГруппаДляРазмещения.Родитель; - ЗаголовокСтраницы = ?(ЗначениеЗаполнено(ГруппаДляРазмещения.Заголовок), ГруппаДляРазмещения.Заголовок, ГруппаДляРазмещения.Имя); - ЗаголовокГруппыСтраниц = ?(ЗначениеЗаполнено(ГруппаСтраниц.Заголовок), ГруппаСтраниц.Заголовок, ГруппаСтраниц.Имя); - - ПредупреждениеОРазмещении = НСтр("ru = 'Для отображения контактной информации необходимо разместить группу ""%1"" не первым элементом (после любой другой группы) в группе ""%2"" (меню Еще - Изменить форму).'"); - ПредупреждениеОРазмещении = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ПредупреждениеОРазмещении, - ЗаголовокСтраницы, ЗаголовокГруппыСтраниц); - ТекстПодсказки = НСтр("ru = 'Также можно установить стандартные настройки формы: - | • в меню Еще выбрать пункт Изменить форму...; - | • в открывшейся форме ""Настройка формы"" в меню Еще выбрать пункт ""Установить стандартные настройки"".'"); - - Декорация = Форма.Элементы.Добавить("КонтактнаяИнформацияЗаглушка", Тип("ДекорацияФормы"), ГруппаДляРазмещения); - Декорация.Заголовок = ПредупреждениеОРазмещении; - Декорация.ОтображениеПодсказки = ОтображениеПодсказки.Кнопка; - Декорация.Подсказка = ТекстПодсказки; - Декорация.ЦветТекста = ЦветаСтиля.ПоясняющийОшибкуТекст; - Декорация.АвтоМаксимальнаяВысота = Ложь; - КонецЕсли; + ДобавитьПояснениеПоСбросуНастроекФормы(Форма, ИмяЭлементаДляРазмещения, ОтложеннаяИнициализация); КонецЕсли; КонецПроцедуры @@ -1952,10 +1750,11 @@ Процедура ПередЗаписьюНаСервере(Форма, Объект, Отказ = Ложь) Экспорт Объект.КонтактнаяИнформация.Очистить(); - ИмяОбъекта = Объект.Ссылка.Метаданные().Имя; - ГруппаВидовКИ = ГруппаВидовКонтактнойИнформацииОбъекта(Объект.Ссылка); - ПредыдущийВид = Неопределено; + МетаданныеОбъекта = Объект.Ссылка.Метаданные(); + ИмяОбъектаМетаданных = МетаданныеОбъекта.Имя; + ПолноеИмяОбъектаМетаданных = МетаданныеОбъекта.ПолноеИмя(); + ГруппаВидовКонтактнойИнформации = ГруппаВидовКонтактнойИнформацииОбъекта(ПолноеИмяОбъектаМетаданных); ИменаТабличныхЧастейПоВидамКИ = Неопределено; Для Каждого СтрокаТаблицы Из Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов Цикл @@ -1963,7 +1762,6 @@ ВидИнформации = СтрокаТаблицы.Вид; ТипИнформации = СтрокаТаблицы.Тип; ИмяРеквизита = СтрокаТаблицы.ИмяРеквизита; - ОбязательноеЗаполнение = ВидИнформации.ОбязательноеЗаполнение; Если НЕ Форма.Элементы.Найти(СтрокаТаблицы.ИмяРеквизита) = Неопределено Тогда Элемент = Форма.Элементы[СтрокаТаблицы.ИмяРеквизита]; @@ -1980,7 +1778,7 @@ Если ИменаТабличныхЧастейПоВидамКИ = Неопределено Тогда Отбор = Новый Структура("ЭтоРеквизитТабличнойЧасти", Истина); ВидыКИТабличнойЧасти = Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.Выгрузить(Отбор, "Вид"); - ИменаТабличныхЧастейПоВидамКИ = ИменаТабличныхЧастейПоВидамКИ(ВидыКИТабличнойЧасти, ИмяОбъекта); + ИменаТабличныхЧастейПоВидамКИ = ИменаТабличныхЧастейПоВидамКИ(ВидыКИТабличнойЧасти, ИмяОбъектаМетаданных); КонецЕсли; ИмяТабличнойЧасти = ИменаТабличныхЧастейПоВидамКИ[ВидИнформации]; @@ -2000,7 +1798,7 @@ КонецЦикла; Иначе - Если ВидИнформации.Родитель <> ГруппаВидовКИ Тогда + Если ВидИнформации.Родитель <> ГруппаВидовКонтактнойИнформации Тогда Продолжить; КонецЕсли; @@ -2008,8 +1806,6 @@ ЗаписатьКонтактнуюИнформацию(Объект, СтрокаТаблицы.ЗначенияПолей, ВидИнформации, ТипИнформации,, ДействуетС); КонецЕсли; - ПредыдущийВид = ВидИнформации; - КонецЦикла; КонецПроцедуры @@ -3322,6 +3118,18 @@ Возврат СериализаторXDTO.ПрочитатьXML(Чтение); КонецФункции +// Возвращает тип контактной информации. +// +// Параметры: +// Наименование - Строка - Тип контактной информация в виде строки. +// +// Возвращаемое значение: +// ПеречислениеСсылка.ТипыКонтактнойИнформации - соответствующий тип. +// +Функция ТипКонтактнойИнформацииПоНаименованию(Знач Наименование) Экспорт + Возврат Перечисления.ТипыКонтактнойИнформации[Наименование]; +КонецФункции + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -3329,6 +3137,165 @@ //////////////////////////////////////////////////////////////////////////////// // Инициализация элементов на форме объект-владельца контактной информации. +Процедура СоздатьРеквизитыКонтактнойИнформации(Знач Форма, Знач ДобавляемыеРеквизиты, Знач ИмяОбъекта, Знач ИсключаемыеВиды, + Знач КонтактнаяИнформация, Знач ОтложеннаяИнициализация) + + Строка500 = Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(500)); + СозданныеРеквизиты = ОбщегоНазначенияКлиентСервер.СкопироватьМассив(ИсключаемыеВиды); + ПредыдущийВид = Неопределено; + ПорядковыйНомер = 1; + + Для Каждого ОбъектКонтактнойИнформации Из КонтактнаяИнформация Цикл + + Если ОбъектКонтактнойИнформации.ЭтоРеквизитТабличнойЧасти Тогда + + ИмяВидаКИ = ОбъектКонтактнойИнформации.ИмяПредопределенныхДанных; + Позиция = СтрНайти(ИмяВидаКИ, ИмяОбъекта); + ИмяТабличнойЧасти = Сред(ИмяВидаКИ, Позиция + СтрДлина(ИмяОбъекта)); + + ПредыдущийВид = Неопределено; + ИмяРеквизита = ""; + + ОбъектКонтактнойИнформации.Строки.Сортировать("РеквизитДопУпорядочивания"); + + Для Каждого СтрокаКИ Из ОбъектКонтактнойИнформации.Строки Цикл + + ТекущийВид = СтрокаКИ.Вид; + Если ТекущийВид <> ПредыдущийВид Тогда + + ИмяРеквизита = "КонтактнаяИнформацияПоле" + ИмяТабличнойЧасти + СтрЗаменить(ТекущийВид.УникальныйИдентификатор(), "-", "x") + + ОбъектКонтактнойИнформации.Строки.Индекс(СтрокаКИ); + ПутьРеквизитов = "Объект." + ИмяТабличнойЧасти; + + ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ИмяРеквизита, Строка500, ПутьРеквизитов, СтрокаКИ.Наименование, Истина)); + ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ИмяРеквизита + "ЗначенияПолей", Новый ОписаниеТипов("СписокЗначений, Строка"), + ПутьРеквизитов,, Истина)); + ПредыдущийВид = ТекущийВид; + + КонецЕсли; + + СтрокаКИ.ИмяРеквизита = ИмяРеквизита; + + КонецЦикла; + + Иначе + + Если ОбъектКонтактнойИнформации.ЭтоИсторическаяКонтактнаяИнформация Тогда + СкорректироватьКонтактнуюИнформацию(Форма, ОбъектКонтактнойИнформации); + Продолжить; + КонецЕсли; + + ТекущийВид = ОбъектКонтактнойИнформации.Вид; + + Если ТекущийВид <> ПредыдущийВид Тогда + ПредыдущийВид = ТекущийВид; + ПорядковыйНомер = 1; + Иначе + ПорядковыйНомер = ПорядковыйНомер + 1; + КонецЕсли; + + Индекс = СозданныеРеквизиты.Найти(ТекущийВид); + Если Индекс = Неопределено Тогда + ОбъектКонтактнойИнформации.ИмяРеквизита = "КонтактнаяИнформацияПоле" + СтрЗаменить(ТекущийВид.УникальныйИдентификатор(), "-", "x") + + ПорядковыйНомер; + Если Не ОтложеннаяИнициализация Тогда + ДобавляемыеРеквизиты.Добавить( + Новый РеквизитФормы(ОбъектКонтактнойИнформации.ИмяРеквизита, Строка500, , ОбъектКонтактнойИнформации.Наименование, Истина)); + КонецЕсли; + Иначе + ОбъектКонтактнойИнформации.ИмяРеквизита = "КонтактнаяИнформацияПоле" + ОбъектКонтактнойИнформации.ИмяПредопределенныхДанных; + СозданныеРеквизиты.Удалить(Индекс); + КонецЕсли; + + СкорректироватьКонтактнуюИнформацию(Форма, ОбъектКонтактнойИнформации); + КонецЕсли; + КонецЦикла; + + // Добавим новые реквизиты + Если ДобавляемыеРеквизиты.Количество() > 0 Тогда + Форма.ИзменитьРеквизиты(ДобавляемыеРеквизиты); + КонецЕсли; + +КонецПроцедуры + +Процедура СкрытьКонтактнуюИнформацию(Знач Форма, Знач ДобавляемыеРеквизиты, Знач ИмяЭлементаДляРазмещения, Знач ИсключаемыеВиды, + Знач ОтложеннаяИнициализация, Знач ПоложениеЗаголовкаКИ, Знач СсылкаНаОбъект) + + Если ДобавляемыеРеквизиты.Количество() > 0 Тогда + Форма.ИзменитьРеквизиты(ДобавляемыеРеквизиты); + КонецЕсли; + ДобавленныеРеквизиты = Новый Массив; + Для Каждого ДобавляемыйРеквизит Из ДобавляемыеРеквизиты Цикл + Если ПустаяСтрока(ДобавляемыйРеквизит.Путь) Тогда + ДобавленныеРеквизиты.Добавить(ДобавляемыйРеквизит.Имя); + КонецЕсли; + КонецЦикла; + + ПараметрыКонтактнойИнформации = ПараметрыВыводаКонтактнойИнформации(Форма, ИмяЭлементаДляРазмещения, ПоложениеЗаголовкаКИ, + ОтложеннаяИнициализация, ИсключаемыеВиды); + ПараметрыКонтактнойИнформации.ДобавленныеРеквизиты = ДобавленныеРеквизиты; + ПараметрыКонтактнойИнформации.Владелец = СсылкаНаОбъект; + + Если Не ПустаяСтрока(ИмяЭлементаДляРазмещения) Тогда + Форма.Элементы[ИмяЭлементаДляРазмещения].Видимость = Ложь; + КонецЕсли; + +КонецПроцедуры + +Процедура ДобавитьКнопкуДополнительногоПоляКонтактнойИнформации(Знач Форма, Знач ИмяЭлементаДляРазмещения) + + Описание = НСтр("ru = 'Добавить дополнительное поле контактной информации'"); + ГруппаКоманды = Группа("ГруппаКонтактнаяИнформацияДобавитьПолеВвода" + ИмяЭлементаДляРазмещения, Форма, Описание, ИмяЭлементаДляРазмещения); + ГруппаКоманды.Отображение = ОтображениеОбычнойГруппы.ОбычноеВыделение; + + ИмяКоманды = "КонтактнаяИнформацияДобавитьПолеВвода" + ИмяЭлементаДляРазмещения; + Команда = Форма.Команды.Добавить(ИмяКоманды); + Команда.Подсказка = Описание; + Команда.Отображение = ОтображениеКнопки.КартинкаИТекст; + Команда.Картинка = БиблиотекаКартинок.ДобавитьЭлементСписка; + Команда.Действие = "Подключаемый_КонтактнаяИнформацияВыполнитьКоманду"; + + Форма.ПараметрыКонтактнойИнформации[ИмяЭлементаДляРазмещения].ДобавленныеЭлементы.Добавить(ИмяКоманды, 9, Истина); + + Кнопка = Форма.Элементы.Добавить(ИмяКоманды,Тип("КнопкаФормы"), ГруппаКоманды); + Кнопка.Доступность = НЕ Форма.Элементы[ИмяЭлементаДляРазмещения].ТолькоПросмотр; + Кнопка.Заголовок = НСтр("ru = 'Добавить'"); + Команда.ИзменяетСохраняемыеДанные = Истина; + Кнопка.ИмяКоманды = ИмяКоманды; + Форма.ПараметрыКонтактнойИнформации[ИмяЭлементаДляРазмещения].ДобавленныеЭлементы.Добавить(ИмяКоманды, 2, Ложь); + +КонецПроцедуры + +Процедура ДобавитьПояснениеПоСбросуНастроекФормы(Знач Форма, Знач ИмяЭлементаДляРазмещения, Знач ОтложеннаяИнициализация) + + ГруппаДляРазмещения = Форма.Элементы[ИмяЭлементаДляРазмещения]; + // Если отложенная инициализация и на странице нет элементов, то платформа скрывает страницу, + // поэтому надо создавать временный элемент, который при переходе на страницу удаляется. + Если ОтложеннаяИнициализация + И ГруппаДляРазмещения.Вид = ВидГруппыФормы.Страница + И Форма.Элементы.Найти("КонтактнаяИнформацияЗаглушка") = Неопределено Тогда + + ГруппаСтраниц = ГруппаДляРазмещения.Родитель; + ЗаголовокСтраницы = ?(ЗначениеЗаполнено(ГруппаДляРазмещения.Заголовок), ГруппаДляРазмещения.Заголовок, ГруппаДляРазмещения.Имя); + ЗаголовокГруппыСтраниц = ?(ЗначениеЗаполнено(ГруппаСтраниц.Заголовок), ГруппаСтраниц.Заголовок, ГруппаСтраниц.Имя); + + ПредупреждениеОРазмещении = НСтр("ru = 'Для отображения контактной информации необходимо разместить группу ""%1"" не первым элементом (после любой другой группы) в группе ""%2"" (меню Еще - Изменить форму).'"); + ПредупреждениеОРазмещении = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ПредупреждениеОРазмещении, + ЗаголовокСтраницы, ЗаголовокГруппыСтраниц); + ТекстПодсказки = НСтр("ru = 'Также можно установить стандартные настройки формы: + | • в меню Еще выбрать пункт Изменить форму...; + | • в открывшейся форме ""Настройка формы"" в меню Еще выбрать пункт ""Установить стандартные настройки"".'"); + + Декорация = Форма.Элементы.Добавить("КонтактнаяИнформацияЗаглушка", Тип("ДекорацияФормы"), ГруппаДляРазмещения); + Декорация.Заголовок = ПредупреждениеОРазмещении; + Декорация.ОтображениеПодсказки = ОтображениеПодсказки.Кнопка; + Декорация.Подсказка = ТекстПодсказки; + Декорация.ЦветТекста = ЦветаСтиля.ПоясняющийОшибкуТекст; + Декорация.АвтоМаксимальнаяВысота = Ложь; + КонецЕсли; + +КонецПроцедуры + Функция ЗаголовокСлева(Знач ПоложениеЗаголовкаКИ = Неопределено) Если ЗначениеЗаполнено(ПоложениеЗаголовкаКИ) Тогда @@ -3395,8 +3362,6 @@ ЭтоПоследняяСтрока = Ложь; Если ИндексДобавляемойСтроки = ТаблицаКонтактнойИнформации.Количество() Тогда ЭтоПоследняяСтрока = Истина; - Иначе - ИмяСледующегоРеквизита = ТаблицаКонтактнойИнформации[ИндексДобавляемойСтроки].ИмяРеквизита; КонецЕсли; НоваяСтрока = ТаблицаКонтактнойИнформации.Вставить(ИндексДобавляемойСтроки); @@ -3418,9 +3383,6 @@ ОбязательноеЗаполнение = Ложь; Иначе ЭтоПоследняяСтрока = СледующаяСтрока = Неопределено; - Если Не ЭтоПоследняяСтрока Тогда - ИмяСледующегоРеквизита = СледующаяСтрока.ИмяРеквизита; - КонецЕсли; ИмяРеквизита = ИнформацияОВидеКИ.ИмяРеквизита; ЕстьКомментарий = ЗначениеЗаполнено(ИнформацияОВидеКИ.Комментарий); ОбязательноеЗаполнение = ИнформацияОВидеКИ.ОбязательноеЗаполнение; @@ -3806,9 +3768,7 @@ КонецЕсли; Если СоздатьПараметрыКонтактнойИнформации Тогда - МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("ПараметрыКонтактнойИнформации", Новый ОписаниеТипов())); - КонецЕсли; КонецПроцедуры @@ -3826,50 +3786,51 @@ КонецПроцедуры -Процедура ДобавитьРеквизитВОписание(Форма, СтрокаКИ, ЭтоНовыйВидКИ, ЭтоРеквизитТабличнойЧасти = Ложь, ЗаполнятьЗначениеРеквизита = Истина, ИмяЭлементаДляРазмещения = "ГруппаКонтактнаяИнформация") +Процедура ДобавитьРеквизитВОписание(Форма, СтрокаКонтактнойИнформации, ДанныеВидовКонтактнойИнформации, ЭтоНовыйВидКИ, + ЭтоРеквизитТабличнойЧасти = Ложь, ЗаполнятьЗначениеРеквизита = Истина, ИмяЭлементаДляРазмещения = "ГруппаКонтактнаяИнформация") НоваяСтрока = Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.Добавить(); - НоваяСтрока.ИмяРеквизита = СтрокаКИ.ИмяРеквизита; - НоваяСтрока.Вид = СтрокаКИ.Вид; - НоваяСтрока.Тип = СтрокаКИ.Тип; + НоваяСтрока.ИмяРеквизита = СтрокаКонтактнойИнформации.ИмяРеквизита; + НоваяСтрока.Вид = СтрокаКонтактнойИнформации.Вид; + НоваяСтрока.Тип = СтрокаКонтактнойИнформации.Тип; НоваяСтрока.ИмяЭлементаДляРазмещения = ИмяЭлементаДляРазмещения; НоваяСтрока.ЭтоРеквизитТабличнойЧасти = ЭтоРеквизитТабличнойЧасти; Если НоваяСтрока.Свойство("ЭтоИсторическаяКонтактнаяИнформация") Тогда - НоваяСтрока.ЭтоИсторическаяКонтактнаяИнформация = СтрокаКИ.ЭтоИсторическаяКонтактнаяИнформация; + НоваяСтрока.ЭтоИсторическаяКонтактнаяИнформация = СтрокаКонтактнойИнформации.ЭтоИсторическаяКонтактнаяИнформация; КонецЕсли; Если НоваяСтрока.Свойство("ДействуетС") Тогда - НоваяСтрока.ДействуетС = СтрокаКИ.ДействуетС; + НоваяСтрока.ДействуетС = СтрокаКонтактнойИнформации.ДействуетС; КонецЕсли; Если НоваяСтрока.Свойство("ХранитьИсториюИзменений") Тогда - НоваяСтрока.ХранитьИсториюИзменений = СтрокаКИ.ХранитьИсториюИзменений; + НоваяСтрока.ХранитьИсториюИзменений = СтрокаКонтактнойИнформации.ХранитьИсториюИзменений; КонецЕсли; - Если ПустаяСтрока(СтрокаКИ.ЗначенияПолей) Тогда + Если ПустаяСтрока(СтрокаКонтактнойИнформации.ЗначенияПолей) Тогда НоваяСтрока.ЗначенияПолей = ""; Иначе - НоваяСтрока.ЗначенияПолей = УправлениеКонтактнойИнформациейКлиентСервер.ПреобразоватьСтрокуВСписокПолей(СтрокаКИ.ЗначенияПолей); + НоваяСтрока.ЗначенияПолей = УправлениеКонтактнойИнформациейКлиентСервер.ПреобразоватьСтрокуВСписокПолей(СтрокаКонтактнойИнформации.ЗначенияПолей); КонецЕсли; - НоваяСтрока.Представление = СтрокаКИ.Представление; - НоваяСтрока.Комментарий = СтрокаКИ.Комментарий; + НоваяСтрока.Представление = СтрокаКонтактнойИнформации.Представление; + НоваяСтрока.Комментарий = СтрокаКонтактнойИнформации.Комментарий; Если ЗаполнятьЗначениеРеквизита И Не ЭтоРеквизитТабличнойЧасти Тогда - Если СтрокаКИ.Тип = Перечисления.ТипыКонтактнойИнформации.Адрес - И СтрокаКИ.РедактированиеТолькоВДиалоге - И ПустаяСтрока(СтрокаКИ.Представление) Тогда - Форма[СтрокаКИ.ИмяРеквизита] = УправлениеКонтактнойИнформациейКлиентСервер.ТекстПустогоАдресаВВидеГиперссылки(); + Если СтрокаКонтактнойИнформации.Тип = Перечисления.ТипыКонтактнойИнформации.Адрес + И СтрокаКонтактнойИнформации.РедактированиеТолькоВДиалоге + И ПустаяСтрока(СтрокаКонтактнойИнформации.Представление) Тогда + Форма[СтрокаКонтактнойИнформации.ИмяРеквизита] = УправлениеКонтактнойИнформациейКлиентСервер.ТекстПустогоАдресаВВидеГиперссылки(); Иначе - Форма[СтрокаКИ.ИмяРеквизита] = СтрокаКИ.Представление; + Форма[СтрокаКонтактнойИнформации.ИмяРеквизита] = СтрокаКонтактнойИнформации.Представление; КонецЕсли; КонецЕсли; - СтруктураВидаКИ = УправлениеКонтактнойИнформациейСлужебный.СтруктураВидаКонтактнойИнформации(СтрокаКИ.Вид); - СтруктураВидаКИ.Вставить("Ссылка", СтрокаКИ.Вид); + ДанныеВидаКонтактнойИнформации = ДанныеВидовКонтактнойИнформации[СтрокаКонтактнойИнформации.Вид]; + ДанныеВидаКонтактнойИнформации.Вставить("Ссылка", СтрокаКонтактнойИнформации.Вид); - Если ЭтоНовыйВидКИ И СтруктураВидаКИ.РазрешитьВводНесколькихЗначений И Не ЭтоРеквизитТабличнойЧасти Тогда + Если ЭтоНовыйВидКИ И ДанныеВидаКонтактнойИнформации.РазрешитьВводНесколькихЗначений И Не ЭтоРеквизитТабличнойЧасти Тогда ПараметрыКонтактнойИнформации = ПараметрыКонтактнойИнформацииФормы(Форма.ПараметрыКонтактнойИнформации, ИмяЭлементаДляРазмещения); - ПараметрыКонтактнойИнформации.СписокДобавляемыхЭлементов.Добавить(СтруктураВидаКИ, СтрокаКИ.Вид.Наименование); + ПараметрыКонтактнойИнформации.СписокДобавляемыхЭлементов.Добавить(ДанныеВидаКонтактнойИнформации, СтрокаКонтактнойИнформации.Наименование); КонецЕсли; КонецПроцедуры @@ -4024,6 +3985,68 @@ //////////////////////////////////////////////////////////////////////////////// // Заполнение дополнительных реквизитов табличной части "Контактная информация". +Процедура СоздатьЭлементыТабличнойЧасти(Знач Форма, Знач ИмяОбъекта, ИмяЭлементаДляРазмещения, + Знач СтрокаКонтактнойИнформации, Знач ДанныеВидовКонтактнойИнформации) + + ВидыКонтактнойИнформацииТЧ = Новый Массив; + Для Каждого СтрокаТабличнойЧасти Из СтрокаКонтактнойИнформации.Строки Цикл + ВидыКонтактнойИнформацииТЧ.Добавить(СтрокаТабличнойЧасти.Вид); + КонецЦикла; + ДанныеВидовКонтактнойИнформацииТЧ = УправлениеКонтактнойИнформациейСлужебный.ДанныеВидовКонтактнойИнформации( + ВидыКонтактнойИнформацииТЧ); + + ИмяВидаКонтактнойИнформации = ДанныеВидовКонтактнойИнформации[СтрокаКонтактнойИнформации.Вид].ИмяПредопределенныхДанных; + Позиция = СтрНайти(ИмяВидаКонтактнойИнформации, ИмяОбъекта); + ИмяТабличнойЧасти = Сред(ИмяВидаКонтактнойИнформации, Позиция + СтрДлина(ИмяОбъекта)); + ПредыдущийВидТЧ = Неопределено; + + Для Каждого СтрокаТабличнойЧасти Из СтрокаКонтактнойИнформации.Строки Цикл + + ВидКонтактнойИнформацииТЧ = СтрокаТабличнойЧасти.Вид; + Если ВидКонтактнойИнформацииТЧ <> ПредыдущийВидТЧ Тогда + + ГруппаТабличнойЧасти = Форма.Элементы[ИмяТабличнойЧасти + "ГруппаКонтактнаяИнформация"]; + + Элемент = Форма.Элементы.Добавить(СтрокаТабличнойЧасти.ИмяРеквизита, Тип("ПолеФормы"), ГруппаТабличнойЧасти); + Элемент.Вид = ВидПоляФормы.ПолеВвода; + Элемент.ПутьКДанным = "Объект." + ИмяТабличнойЧасти + "." + СтрокаТабличнойЧасти.ИмяРеквизита; + + Если ДляТипаКонтактнойИнформацииДоступноРедактированиеВДиалоге(СтрокаТабличнойЧасти.Тип) Тогда + Элемент.КнопкаВыбора = Истина; + Если ВидКонтактнойИнформацииТЧ.РедактированиеТолькоВДиалоге Тогда + Элемент.РедактированиеТекста = Ложь; + КонецЕсли; + + Элемент.УстановитьДействие("НачалоВыбора", "Подключаемый_КонтактнаяИнформацияНачалоВыбора"); + КонецЕсли; + Элемент.УстановитьДействие("ПриИзменении", "Подключаемый_КонтактнаяИнформацияПриИзменении"); + + Если ВидКонтактнойИнформацииТЧ.ОбязательноеЗаполнение Тогда + Элемент.АвтоОтметкаНезаполненного = Истина; + КонецЕсли; + + Форма.ПараметрыКонтактнойИнформации[ИмяЭлементаДляРазмещения].ДобавленныеЭлементы.Добавить(СтрокаТабличнойЧасти.ИмяРеквизита, + 2, Ложь); + + ДобавитьРеквизитВОписание(Форма, СтрокаТабличнойЧасти, ДанныеВидовКонтактнойИнформацииТЧ, Ложь, Истина,, ИмяЭлементаДляРазмещения); + ПредыдущийВидТЧ = ВидКонтактнойИнформацииТЧ; + + КонецЕсли; + + Отбор = Новый Структура; + Отбор.Вставить("ИдентификаторСтрокиТабличнойЧасти", СтрокаТабличнойЧасти.ИдентификаторСтрокиТабличнойЧасти); + + СтрокиТаблицы = Форма.Объект[ИмяТабличнойЧасти].НайтиСтроки(Отбор); + + Если СтрокиТаблицы.Количество() = 1 Тогда + СтрокаТаблицы = СтрокиТаблицы[0]; + СтрокаТаблицы[СтрокаТабличнойЧасти.ИмяРеквизита] = СтрокаТабличнойЧасти.Представление; + СтрокаТаблицы[СтрокаТабличнойЧасти.ИмяРеквизита + "ЗначенияПолей"] = СтрокаТабличнойЧасти.ЗначенияПолей; + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + Процедура ЗаполнитьТехническиеПоляКонтактнойИнформации(СтрокаКонтактнойИнформации, Объект, ТипКонтактнойИнформации) // Заполнение дополнительных реквизитов ТЧ. @@ -4178,10 +4201,7 @@ Процедура ЗаполнитьКонтактнуюИнформациюТабличнойЧасти(Приемник, ВидКИ, СтруктураКИ, СтрокаТабличнойЧасти = Неопределено, Дата = Неопределено) ПараметрыОтбора = Новый Структура; - Если СтрокаТабличнойЧасти = Неопределено Тогда - ДанныеЗаполнения = Приемник; - Иначе - ДанныеЗаполнения = СтрокаТабличнойЧасти; + Если СтрокаТабличнойЧасти <> Неопределено Тогда ПараметрыОтбора.Вставить("ИдентификаторСтрокиТабличнойЧасти", СтрокаТабличнойЧасти.ИдентификаторСтрокиТабличнойЧасти); КонецЕсли; @@ -4332,35 +4352,33 @@ КонецФункции // Получение и коррекция контактной информации -Процедура ОбработатьСведенияКонтактнойИнформации(СтрокаКИ, Форма) +Процедура СкорректироватьКонтактнуюИнформацию(Форма, СтрокаКИ) - РезультатПреобразования = Новый Структура(); + РезультатПреобразования = Новый Структура; Если ПустаяСтрока(СтрокаКИ.Представление) И ЗначениеЗаполнено(СтрокаКИ.ЗначенияПолей) Тогда СтрокаКИ.Представление = УправлениеКонтактнойИнформациейСлужебный.ПредставлениеКонтактнойИнформации(СтрокаКИ.ЗначенияПолей, СтрокаКИ.Вид); - Результат = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияИзXML(СтрокаКИ.ЗначенияПолей, СтрокаКИ.Вид, РезультатПреобразования, СтрокаКИ.Представление); - Иначе - Результат = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияИзXML(СтрокаКИ.ЗначенияПолей, СтрокаКИ.Вид, РезультатПреобразования, СтрокаКИ.Представление); КонецЕсли; + Результат = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияИзXML(СтрокаКИ.ЗначенияПолей, СтрокаКИ.Вид, РезультатПреобразования, СтрокаКИ.Представление); СтрокаКИ.Комментарий = ?(ЗначениеЗаполнено(Результат.Комментарий), Результат.Комментарий, ""); - Если РезультатПреобразования.Количество() > 0 Тогда - - Если Не РезультатПреобразования.Свойство("СведенияИсправлены") ИЛИ РезультатПреобразования.СведенияИсправлены = Ложь Тогда - Возврат; - КонецЕсли; - - Если РезультатПреобразования.СведенияИсправлены Тогда - СтрокаКИ.ЗначенияПолей = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияXDTOВXML(Результат); - КонецЕсли; - - Если РезультатПреобразования.Свойство("ТекстОшибки") Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(РезультатПреобразования.ТекстОшибки, , СтрокаКИ.ИмяРеквизита); - КонецЕсли; - - Форма.Модифицированность = Истина; - + Если РезультатПреобразования.Количество() = 0 Тогда + Возврат; КонецЕсли; + + Если Не РезультатПреобразования.Свойство("СведенияИсправлены") ИЛИ РезультатПреобразования.СведенияИсправлены = Ложь Тогда + Возврат; + КонецЕсли; + + Если РезультатПреобразования.СведенияИсправлены Тогда + СтрокаКИ.ЗначенияПолей = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияXDTOВXML(Результат); + КонецЕсли; + + Если РезультатПреобразования.Свойство("ТекстОшибки") Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(РезультатПреобразования.ТекстОшибки, , СтрокаКИ.ИмяРеквизита); + КонецЕсли; + + Форма.Модифицированность = Истина; КонецПроцедуры @@ -4511,18 +4529,13 @@ ПараметрыКонтактнойИнформации.Вставить("ПараметрыАдреса", ПараметрыАдреса); Форма.ПараметрыКонтактнойИнформации.Вставить(ИмяЭлементаДляРазмещения, ПараметрыКонтактнойИнформации); - Возврат Форма.ПараметрыКонтактнойИнформации[ИмяЭлементаДляРазмещения]; КонецФункции -Функция ГруппаВидовКонтактнойИнформацииОбъекта(СсылкаНаОбъект) +Функция ГруппаВидовКонтактнойИнформацииОбъекта(Знач ПолноеИмяОбъектаМетаданных) - ПолноеИмяОбъектаМетаданных = СсылкаНаОбъект.Метаданные().ПолноеИмя(); - ИмяГруппыВидовКИ = СтрЗаменить(ПолноеИмяОбъектаМетаданных, ".", ""); - ГруппаВидовКонтактнойИнформации = Справочники.ВидыКонтактнойИнформации[ИмяГруппыВидовКИ]; - - Возврат ГруппаВидовКонтактнойИнформации; + Возврат Справочники.ВидыКонтактнойИнформации[СтрЗаменить(ПолноеИмяОбъектаМетаданных, ".", "")]; КонецФункции @@ -4759,14 +4772,14 @@ КонецФункции -Процедура ЗаполнитьКонтактнуюИнформациюОбъектаИзСтроки(КонтактнаяИнформацияОбъекта, Периодическая, СтрокаКонтактнойИнформации) +Процедура ЗаполнитьКонтактнуюИнформациюОбъектаИзСтроки(СтрокаКонтактнойИнформацииОбъекта, Периодическая, СтрокаКонтактнойИнформации) - ЗаполнитьЗначенияСвойств(СтрокаКонтактнойИнформации, КонтактнаяИнформацияОбъекта); + ЗаполнитьЗначенияСвойств(СтрокаКонтактнойИнформации, СтрокаКонтактнойИнформацииОбъекта); Если Периодическая Тогда - СтрокаКонтактнойИнформации.ДействуетС = КонтактнаяИнформацияОбъекта.Дата; + СтрокаКонтактнойИнформации.ДействуетС = СтрокаКонтактнойИнформацииОбъекта.Дата; КонецЕсли; ОбъектКонтактнойИнформации = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияИзXML(СтрокаКонтактнойИнформации.ЗначенияПолей, СтрокаКонтактнойИнформации.Вид); - ЗаполнитьТехническиеПоляКонтактнойИнформации(СтрокаКонтактнойИнформации, ОбъектКонтактнойИнформации, КонтактнаяИнформацияОбъекта.Тип); + ЗаполнитьТехническиеПоляКонтактнойИнформации(СтрокаКонтактнойИнформации, ОбъектКонтактнойИнформации, СтрокаКонтактнойИнформацииОбъекта.Тип); КонецПроцедуры @@ -4813,70 +4826,75 @@ ПараметрыКонтактнойИнформации = Форма.ПараметрыКонтактнойИнформации[ИмяЭлементаДляРазмещения]; ВсеСтроки = Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов; - НайденныеСтроки = ВсеСтроки.НайтиСтроки( Новый Структура("Тип, ЭтоРеквизитТабличнойЧасти", Перечисления.ТипыКонтактнойИнформации.Адрес, Ложь) ); - + НайденныеСтроки = ВсеСтроки.НайтиСтроки( + Новый Структура("Тип, ЭтоРеквизитТабличнойЧасти", Перечисления.ТипыКонтактнойИнформации.Адрес, Ложь)); + ОбщееКоличествоКоманд = 0; Для Каждого СтрокаКИ Из ВсеСтроки Цикл + Если ОбщееКоличествоКоманд > 50 Тогда // Ограничение для большого количества адресов на форме Прервать; КонецЕсли; + Если СтрокаКИ.Тип <> Перечисления.ТипыКонтактнойИнформации.Адрес Тогда Продолжить; КонецЕсли; - ЭлементФормы = Форма.Элементы.Найти("ПодменюКопироватьАдреса" + СтрокаКИ.ИмяРеквизита); - ЭлементФормыКонтекстноеПодменю = Форма.Элементы.Найти("КонтекстноеПодменюКопироватьАдреса" + СтрокаКИ.ИмяРеквизита); - Если ЭлементФормыКонтекстноеПодменю <> Неопределено Тогда - - КоличествоКомандВПодменю = 0; - Для Каждого Адрес Из НайденныеСтроки Цикл - Если КоличествоКомандВПодменю > 7 Тогда // Ограничение для большого количества адресов на форме - Прервать; - КонецЕсли; - Если Адрес.ЭтоИсторическаяКонтактнаяИнформация Или Адрес.ИмяРеквизита = СтрокаКИ.ИмяРеквизита Тогда - Продолжить; - КонецЕсли; - Если ЭлементФормы <> Неопределено Тогда - ИмяКоманды = "МенюПодменюАдрес" + СтрокаКИ.ИмяРеквизита + "_" + Адрес.ИмяРеквизита; - Кнопка = Форма.Элементы.Найти(ИмяКоманды); - Если Кнопка = Неопределено Тогда - Кнопка = Форма.Элементы.Добавить(ИмяКоманды, Тип("КнопкаФормы"), ЭлементФормы); - Команда = Форма.Команды.Добавить(ИмяКоманды); - Команда.Подсказка = НСтр("ru = 'Скопировать адрес'"); - Команда.Действие = "Подключаемый_КонтактнаяИнформацияВыполнитьКоманду"; - Команда.ИзменяетСохраняемыеДанные = Истина; - Кнопка.ИмяКоманды = ИмяКоманды; - - ПараметрыКонтактнойИнформации.ДобавленныеЭлементы.Добавить(ИмяКоманды, 1); - ПараметрыКонтактнойИнформации.ДобавленныеЭлементы.Добавить(ИмяКоманды, 9, Истина); - КонецЕсли; - Кнопка.Заголовок = Адрес.Представление; - Кнопка.Видимость = ЗначениеЗаполнено(Адрес.Представление); - - КоличествоКомандВПодменю = КоличествоКомандВПодменю + 1; - - КонецЕсли; - ИмяКоманды = "МенюПодменюАдрес" + СтрокаКИ.ИмяРеквизита + "_" + Адрес.ИмяРеквизита +"_"; - Кнопка = Форма.Элементы.Найти(ИмяКоманды); - Если Кнопка = Неопределено Тогда - Кнопка = Форма.Элементы.Добавить(ИмяКоманды,Тип("КнопкаФормы"), ЭлементФормыКонтекстноеПодменю); - Кнопка.Заголовок = Адрес.Представление; - Команда = Форма.Команды.Добавить(ИмяКоманды); - Команда.Подсказка = НСтр("ru = 'Скопировать адрес'"); - Команда.Действие = "Подключаемый_КонтактнаяИнформацияВыполнитьКоманду"; - Команда.ИзменяетСохраняемыеДанные = Истина; - Кнопка.ИмяКоманды = ИмяКоманды; - - ПараметрыКонтактнойИнформации.ДобавленныеЭлементы.Добавить(ИмяКоманды, 1); - ПараметрыКонтактнойИнформации.ДобавленныеЭлементы.Добавить(ИмяКоманды, 9, Истина); - КонецЕсли; - Кнопка.Заголовок = Адрес.Представление; - Кнопка.Видимость = ЗначениеЗаполнено(Адрес.Представление); - - КонецЦикла; - ОбщееКоличествоКоманд = ОбщееКоличествоКоманд + КоличествоКомандВПодменю; + ПодменюКопироватьАдреса = Форма.Элементы.Найти("ПодменюКопироватьАдреса" + СтрокаКИ.ИмяРеквизита); + КонтекстноеПодменюКопироватьАдреса = Форма.Элементы.Найти("КонтекстноеПодменюКопироватьАдреса" + СтрокаКИ.ИмяРеквизита); + Если ПодменюКопироватьАдреса <> Неопределено И КонтекстноеПодменюКопироватьАдреса = Неопределено Тогда + Продолжить; КонецЕсли; + + КоличествоКомандВПодменю = 0; + Для Каждого Адрес Из НайденныеСтроки Цикл + + Если КоличествоКомандВПодменю > 7 Тогда // Ограничение для большого количества адресов на форме + Прервать; + КонецЕсли; + Если Адрес.ЭтоИсторическаяКонтактнаяИнформация Или Адрес.ИмяРеквизита = СтрокаКИ.ИмяРеквизита Тогда + Продолжить; + КонецЕсли; + + ИмяКоманды = "МенюПодменюАдрес" + СтрокаКИ.ИмяРеквизита + "_" + Адрес.ИмяРеквизита; + Команда = Форма.Команды.Найти(ИмяКоманды); + Если Команда = Неопределено Тогда + Команда = Форма.Команды.Добавить(ИмяКоманды); + Команда.Подсказка = НСтр("ru = 'Скопировать адрес'"); + Команда.Действие = "Подключаемый_КонтактнаяИнформацияВыполнитьКоманду"; + Команда.ИзменяетСохраняемыеДанные = Истина; + + ПараметрыКонтактнойИнформации.ДобавленныеЭлементы.Добавить(ИмяКоманды, 9, Истина); + КоличествоКомандВПодменю = КоличествоКомандВПодменю + 1; + + КонецЕсли; + + Если ПодменюКопироватьАдреса <> Неопределено Тогда + ДобавитьКнопкуСкопироватьАдрес(Форма, ИмяКоманды, + Адрес.Представление, ПараметрыКонтактнойИнформации, ПодменюКопироватьАдреса); + КонецЕсли; + Если КонтекстноеПодменюКопироватьАдреса <> Неопределено Тогда + ДобавитьКнопкуСкопироватьАдрес(Форма, ИмяКоманды, + Адрес.Представление, ПараметрыКонтактнойИнформации, КонтекстноеПодменюКопироватьАдреса); + КонецЕсли; + + КонецЦикла; + ОбщееКоличествоКоманд = ОбщееКоличествоКоманд + КоличествоКомандВПодменю; КонецЦикла; КонецПроцедуры +Процедура ДобавитьКнопкуСкопироватьАдрес(Форма, ИмяКоманды, ЗаголовокЭлемента, ПараметрыКонтактнойИнформации, Подменю) + + ИмяЭлемента = Подменю.Имя + "_" + ИмяКоманды; + Кнопка = Форма.Элементы.Найти(ИмяЭлемента); + Если Кнопка = Неопределено Тогда + Кнопка = Форма.Элементы.Добавить(ИмяЭлемента, Тип("КнопкаФормы"), Подменю); + Кнопка.ИмяКоманды = ИмяКоманды; + ПараметрыКонтактнойИнформации.ДобавленныеЭлементы.Добавить(ИмяЭлемента, 1); + КонецЕсли; + Кнопка.Заголовок = ЗаголовокЭлемента; + Кнопка.Видимость = ЗначениеЗаполнено(ЗаголовокЭлемента); + +КонецПроцедуры + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиент/Module.bsl b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиент/Module.bsl index a6f4786f2..b128f26f0 100644 --- a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиент/Module.bsl +++ b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиент/Module.bsl @@ -715,7 +715,6 @@ Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.Удалить(СтрокаКонтактнойИнформации); КонецЦикла; - ЭтоИсторическаяКонтактнаяИнформация = Ложь; ПараметрыОбновления = Новый Структура; Для Каждого СтрокаКонтактнойИнформации Из Результат.История Цикл ДанныеСтроки = Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.Добавить(); @@ -778,8 +777,6 @@ Отбор = Новый Структура("Вид", ДанныеНаФорме.Вид); НайденныеСтроки = РезультатЗакрытия.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.НайтиСтроки(Отбор); - ЭтоИсторическаяКонтактнаяИнформация = Ложь; - ПоследниеЗначениеПолей = ""; Если НайденныеСтроки.Количество() > 1 Тогда @@ -1162,7 +1159,7 @@ Попытка Оболочка = Новый COMОбъект("Wscript.Shell"); - Результат = Оболочка.RegRead("HKEY_CLASSES_ROOT\" + ИмяПротокола + "\"); + Оболочка.RegRead("HKEY_CLASSES_ROOT\" + ИмяПротокола + "\"); Исключение Возврат Ложь; КонецПопытки; @@ -1177,7 +1174,6 @@ Функция URLEncode(Строка) Результат = ""; - НаборСимволов = "0123456789ABCDEF"; Для НомерСимвола = 1 По СтрДлина(Строка) Цикл КодСимвола = КодСимвола(Строка, НомерСимвола); Символ = Сред(Строка, НомерСимвола, 1); diff --git a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСлужебный/Module.bsl b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСлужебный/Module.bsl index 6f92727f2..42bdacb5b 100644 --- a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСлужебный/Module.bsl +++ b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСлужебный/Module.bsl @@ -28,11 +28,12 @@ // Ссылка - ЛюбаяСсылка - ссылка на объект-владелец контактной информации (организация, // контрагент, партнер и т.д.). // ТипКонтактнойИнформации - Перечисление.ТипыКонтактнойИнформации - параметры обработки. +// Дата - Дата - Дата, на которую будет получено значение контактной информации. // // Возвращаемое значение: // Строка - строковое представление значения. // -Функция ПервоеЗначениеКонтактнойИнформацииОбъектаПоТипу(Ссылка, ТипКонтактнойИнформации) Экспорт +Функция ПервоеЗначениеКонтактнойИнформацииОбъектаПоТипу(Ссылка, ТипКонтактнойИнформации, Дата) Экспорт Результат = ""; ПолноеИмя = Ссылка.Метаданные().ПолноеИмя(); @@ -74,7 +75,7 @@ РезультатЗапроса = Запрос.Выполнить().Выбрать(); Если РезультатЗапроса.Следующий() Тогда Результат = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияОбъекта( - Ссылка, РезультатЗапроса.Ссылка); + Ссылка, РезультатЗапроса.Ссылка, Дата); КонецЕсли; КонецЕсли; КонецЦикла; @@ -212,7 +213,7 @@ Обработчик.ПриоритетыВыполнения = ОбновлениеИнформационнойБазы.ПриоритетыВыполненияОбработчика(); Обработчик.ПроцедураПроверки = "ОбновлениеИнформационнойБазы.ДанныеОбновленыНаНовуюВерсиюПрограммы"; Обработчик.Комментарий = НСтр("ru = 'Заполнение значения поля ""Другое"" у видов контактной информации. - |До завершения обработки данные документов будут отображаться некорректно.'"); + |До завершения обработки поля ""Другое"" документов в ряде случаев будут отображаться некорректно.'"); Обработчик = Обработчики.Добавить(); Обработчик.Версия = "2.4.3.4"; @@ -226,7 +227,7 @@ Обработчик.БлокируемыеОбъекты = "Справочник.СтраныМира"; Обработчик.ПроцедураПроверки = "ОбновлениеИнформационнойБазы.ДанныеОбновленыНаНовуюВерсиюПрограммы"; Обработчик.Комментарий = НСтр("ru = 'Обновление сведений о странах мирах в соответствии с общероссийским классификатором стран мира. - |До завершения обработки данные документов будут отображаться некорректно.'"); + |До завершения обработки наименование стран в документах в ряде случаев будет отображаться некорректно.'"); КонецПроцедуры @@ -1141,8 +1142,7 @@ ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(); ТипИнформации = Информация.Состав.Тип(); Если ТипИнформации = ФабрикаXDTO.Тип(ПространствоИмен, "Адрес") Тогда - ПредставлениеАдреса = ПредставлениеАдреса(Информация.Состав, ВидИнформации); - Возврат ПредставлениеАдреса; + Возврат ПредставлениеАдреса(Информация.Состав, ВидИнформации); ИначеЕсли ТипИнформации = ФабрикаXDTO.Тип(ПространствоИмен, "НомерТелефона") Тогда ПредставлениеТелефона = ПредставлениеТелефона(Информация.Состав); @@ -1192,7 +1192,6 @@ // Функция ПредставлениеАдреса(Знач XDTOАдрес, Знач ВидИнформации) Экспорт - ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(); НациональныйАдрес = XDTOАдрес.Состав; Страна = СокрЛП(XDTOАдрес.Страна); @@ -1260,13 +1259,13 @@ ""); КонецФункции -// Конструктор структуры, совместимой по полям со справочникам видов КИ. +// Конструктор структуры, совместимой по полям со справочником видов контактной информации. // // Параметры: // Источник - СправочникСсылка.ВидыКонтактнойИнформации - необязательный источник данных для заполнения. // // Возвращаемое значение: -// Структура - совместимая по полям со справочникам видов КИ. +// Структура - совместимая по полям со справочникам видов контактной информации. // Функция СтруктураВидаКонтактнойИнформации(Знач Источник = Неопределено) Экспорт @@ -1294,6 +1293,18 @@ КонецФункции +Функция ДанныеВидовКонтактнойИнформации(Знач ВидыКонтактнойИнформации) Экспорт + + МетаданныеРеквизитов = Метаданные.Справочники.ВидыКонтактнойИнформации.Реквизиты; + Реквизиты = "Наименование, ИмяПредопределенныхДанных"; + Для Каждого МетаданныеРеквизита Из МетаданныеРеквизитов Цикл + Реквизиты = Реквизиты + "," + МетаданныеРеквизита.Имя; + КонецЦикла; + + Возврат ОбщегоНазначения.ЗначенияРеквизитовОбъектов(ВидыКонтактнойИнформации, Реквизиты); + +КонецФункции + // Обновляет агрегатное поле ВидДляСписка контактной информацию у объекта. // // Параметры: @@ -1585,6 +1596,221 @@ Возврат Результат; КонецФункции +// Возвращает флаг возможности добавления и изменения элементов. +// +Функция ЕстьПравоДобавления() Экспорт + Возврат ПравоДоступа("Добавление", Метаданные.Справочники.СтраныМира); +КонецФункции + +Функция ЗаполнитьДанныеВыбораАвтоподбораПоСтранам(Знач Параметры) Экспорт + + ДанныеВыбора = Новый СписокЗначений; + + // Будем имитировать поведение платформы - поиск по всем доступным полям поиска с формированием подобного списка. + + // Подразумеваем, что поля справочника и классификатора совпадают, за исключением отсутствующего в классификаторе поля + // "Ссылка". + Запрос = Новый Запрос; + Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; + + ПрефиксПараметраОтбора = "ПараметрыОтбора"; + + // Общий отбор по параметрам + ШаблонОтбора = "ИСТИНА"; + Для Каждого КлючЗначение Из Параметры.Отбор Цикл + ЗначениеПоля = КлючЗначение.Значение; + ИмяПоля = КлючЗначение.Ключ; + ИмяПараметра = ПрефиксПараметраОтбора + ИмяПоля; + + Если ТипЗнч(ЗначениеПоля)=Тип("Массив") Тогда + ШаблонОтбора = ШаблонОтбора + " И %1." + ИмяПоля + " В (&" + ИмяПараметра + ")"; + Иначе + ШаблонОтбора = ШаблонОтбора + " И %1." + ИмяПоля + " = &" + ИмяПараметра; + КонецЕсли; + + Запрос.УстановитьПараметр(ИмяПараметра, КлючЗначение.Значение); + КонецЦикла; + + // Дополнительные отборы + Если Параметры.Свойство("ВыборГруппИЭлементов") Тогда + Если Параметры.ВыборГруппИЭлементов = ИспользованиеГруппИЭлементов.Группы Тогда + + ШаблонОтбора = ШаблонОтбора + " И %1.ЭтоГруппа"; + + ИначеЕсли Параметры.ВыборГруппИЭлементов = ИспользованиеГруппИЭлементов.Элементы Тогда + + ШаблонОтбора = ШаблонОтбора + " И (НЕ %1.ЭтоГруппа)"; + + КонецЕсли; + КонецЕсли; + + // Источники данных + Если (Параметры.Свойство("ТолькоДанныеКлассификатора") И Параметры.ТолькоДанныеКлассификатора) Тогда + // Запрос только по классификатору. + ШаблонЗапроса = " + |ВЫБРАТЬ ПЕРВЫЕ 50 + | NULL КАК Ссылка, + | Классификатор.Код КАК Код, + | Классификатор.Наименование КАК Наименование, + | ЛОЖЬ КАК ПометкаУдаления, + | %2 КАК Представление + |ИЗ + | Классификатор КАК Классификатор + |ГДЕ + | Классификатор.%1 ПОДОБНО &СтрокаПоиска + | И ( + | " + СтрЗаменить(ШаблонОтбора, "%1", "Классификатор") + " + | ) + |УПОРЯДОЧИТЬ ПО + | Классификатор.%1 + |"; + Иначе + // Запрос и по справочнику и по классификатору. + ШаблонЗапроса = " + |ВЫБРАТЬ ПЕРВЫЕ 50 + | СтраныМира.Ссылка КАК Ссылка, + | ЕСТЬNULL(СтраныМира.Код, Классификатор.Код) КАК Код, + | ЕСТЬNULL(СтраныМира.Наименование, Классификатор.Наименование) КАК Наименование, + | ЕСТЬNULL(СтраныМира.ПометкаУдаления, ЛОЖЬ) КАК ПометкаУдаления, + | + | ВЫБОР КОГДА СтраныМира.Ссылка ЕСТЬ NULL ТОГДА + | %2 + | ИНАЧЕ + | %3 + | КОНЕЦ КАК Представление + | + |ИЗ + | Справочник.СтраныМира КАК СтраныМира + |ПОЛНОЕ СОЕДИНЕНИЕ + | Классификатор + |ПО + | Классификатор.Код = СтраныМира.Код + | И Классификатор.Наименование = СтраныМира.Наименование + |ГДЕ + | (СтраныМира.%1 ПОДОБНО &СтрокаПоиска ИЛИ Классификатор.%1 ПОДОБНО &СтрокаПоиска) + | И (" + СтрЗаменить(ШаблонОтбора, "%1", "Классификатор") + ") + | И (" + СтрЗаменить(ШаблонОтбора, "%1", "СтраныМира") + ") + | + |УПОРЯДОЧИТЬ ПО + | ЕСТЬNULL(СтраныМира.%1, Классификатор.%1) + |"; + КонецЕсли; + + ИменаПолей = ПоляПоиска(); + + // Код + Наименование - ключевые поля соответствия справочника классификатору. Их обрабатываем всегда. + ИменаПолейСтрокой = "," + СтрЗаменить(ИменаПолей.ИменаПолейСтрокой, " ", ""); + ИменаПолейСтрокой = СтрЗаменить(ИменаПолейСтрокой, ",Код", ""); + ИменаПолейСтрокой = СтрЗаменить(ИменаПолейСтрокой, ",Наименование", ""); + + Запрос.Текст = " + |ВЫБРАТЬ + | Код, Наименование " + ИменаПолейСтрокой + " + |ПОМЕСТИТЬ + | Классификатор + |ИЗ + | &Классификатор КАК Классификатор + |ИНДЕКСИРОВАТЬ ПО + | Код, Наименование + | " + ИменаПолейСтрокой + " + |"; + Запрос.УстановитьПараметр("Классификатор", УправлениеКонтактнойИнформацией.ТаблицаКлассификатора()); + Запрос.Выполнить(); + Запрос.УстановитьПараметр("СтрокаПоиска", ЭкранироватьСимволыПодобия(Параметры.СтрокаПоиска) + "%"); + + Для Каждого ДанныеПоля Из ИменаПолей.СписокПолей Цикл + ТекстЗапроса = СтрЗаменить(ШаблонЗапроса, "%1", ДанныеПоля.Имя); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "%2", СтрЗаменить(ДанныеПоля.ШаблонПредставления, "%1", "Классификатор")); + Запрос.Текст = СтрЗаменить(ТекстЗапроса, "%3", СтрЗаменить(ДанныеПоля.ШаблонПредставления, "%1", "СтраныМира")); + + Результат = Запрос.Выполнить(); + Если Не Результат.Пустой() Тогда + СтандартнаяОбработка = Ложь; + + Выборка = Результат.Выбрать(); + Пока Выборка.Следующий() Цикл + Если ЗначениеЗаполнено(Выборка.Ссылка) Тогда + // Данные справочника + ЭлементВыбора = Выборка.Ссылка; + Иначе + // Данные классификатора + РезультатВыбора = Новый Структура("Код, Наименование", + Выборка.Код, Выборка.Наименование); + + ЭлементВыбора = Новый Структура("Значение, ПометкаУдаления, Предупреждение", + РезультатВыбора, Выборка.ПометкаУдаления, Неопределено); + КонецЕсли; + + ДанныеВыбора.Добавить(ЭлементВыбора, Выборка.Представление); + КонецЦикла; + + Прервать; + КонецЕсли; + КонецЦикла; + + Возврат ДанныеВыбора; + +КонецФункции + +// Возвращает поля поиска в порядке предпочтения для справочника стран мира. +// +// Возвращаемое значение: +// Массив - содержит структуры с полями: +// * Имя - Строка - имя реквизита поиска. +// * ШаблонПредставления - Строка - шаблон для формирования значения представления по именам реквизитов, +// например: "%1.Наименование (%1.Код)". Здесь "Наименование" и "Код" - имена +// реквизитов, +// "%1" - заполнитель для передачи псевдонима таблицы. +// +Функция ПоляПоиска() + Результат = Новый Массив; + СписокПолей = Справочники.СтраныМира.ПустаяСсылка().Метаданные().ВводПоСтроке; + ГраницаПолей = СписокПолей.Количество() - 1; + ВсеИменаСтрокой = ""; + + ПредставлениеРазделителя = ", "; + РазделительПредставлений = " + """ + ПредставлениеРазделителя + """ + "; + + Для Индекс=0 По ГраницаПолей Цикл + ИмяПоля = СписокПолей[Индекс].Имя; + ВсеИменаСтрокой = ВсеИменаСтрокой + "," + ИмяПоля; + + ШаблонПредставления = "%1." + ИмяПоля; + + ОстальныеПоля = ""; + Для Позиция=0 По ГраницаПолей Цикл + Если Позиция<>Индекс Тогда + ОстальныеПоля = ОстальныеПоля + РазделительПредставлений + СписокПолей[Позиция].Имя; + КонецЕсли; + КонецЦикла; + Если Не ПустаяСтрока(ОстальныеПоля) Тогда + ШаблонПредставления = ШаблонПредставления + + " + "" ("" + " + + "%1." + Сред(ОстальныеПоля, СтрДлина(РазделительПредставлений) + 1) + + " + "")"""; + КонецЕсли; + + Результат.Добавить( + Новый Структура("Имя, ШаблонПредставления", ИмяПоля, ШаблонПредставления)); + КонецЦикла; + + Возврат Новый Структура("СписокПолей, ИменаПолейСтрокой", Результат, Сред(ВсеИменаСтрокой, 2)); +КонецФункции + +// Экранирует символы для использования в функции запроса ПОДОБНО. +// +Функция ЭкранироватьСимволыПодобия(Знач Текст, Знач СпецСимвол = "\") + Результат = Текст; + СимволыПодобия = "%_[]^" + СпецСимвол; + + Для Позиция=1 По СтрДлина(СимволыПодобия) Цикл + ТекущийСимвол = Сред(СимволыПодобия, Позиция, 1); + Результат = СтрЗаменить(Результат, ТекущийСимвол, СпецСимвол + ТекущийСимвол); + КонецЦикла; + + Возврат Результат; +КонецФункции + #КонецОбласти #Область СлужебныеПроцедурыИФункцииДляСовместимости @@ -2085,7 +2311,7 @@ // Функция XSLT_ТаблицаЗначенийРазличияXML(Текст1, Текст2) - Преобразователь = УправлениеКонтактнойИнформациейСлужебныйПовтИсп.XSLT_ТаблицаЗначенийРазличияXML(); + Преобразователь = ПреобразованиеXSLT_ТаблицаЗначенийРазличияXML(); Построитель = Новый ТекстовыйДокумент; Построитель.ДобавитьСтроку("<dn><f>"); @@ -2110,7 +2336,7 @@ // Функция XSLT_СтрокаКлючЗначениеВСтруктуру(Знач Текст) - Преобразователь = УправлениеКонтактнойИнформациейСлужебныйПовтИсп.XSLT_СтрокаКлючЗначениеВСтруктуру(); + Преобразователь = ПреобразованиеXSLT_СтрокаКлючЗначениеВСтруктуру(); Возврат Преобразователь.ПреобразоватьИзСтроки(XSLT_УзелСтрокиПараметра(Текст)); КонецФункции @@ -2125,7 +2351,7 @@ // Функция XSLT_СписокЗначенийВСтруктуру(Текст) - Преобразователь = УправлениеКонтактнойИнформациейСлужебныйПовтИсп.XSLT_СписокЗначенийВСтруктуру(); + Преобразователь = ПреобразованиеXSLT_СписокЗначенийВСтруктуру(); Возврат Преобразователь.ПреобразоватьИзСтроки(Текст); КонецФункции @@ -2140,7 +2366,7 @@ // Функция XSLT_СоответствиеВСтруктуру(Текст) - Преобразователь = УправлениеКонтактнойИнформациейСлужебныйПовтИсп.XSLT_СоответствиеВСтруктуру(); + Преобразователь = ПреобразованиеXSLT_СоответствиеВСтруктуру(); Возврат Преобразователь.ПреобразоватьИзСтроки(Текст); КонецФункции @@ -2156,7 +2382,7 @@ // Функция XSLT_ИнтерпретацияРазличияXMLКонтактнойИнформации(Знач Текст, Знач ТипКонтактнойИнформации) - Преобразователь = УправлениеКонтактнойИнформациейСлужебныйПовтИсп.XSLT_ИнтерпретацияРазличияXMLКонтактнойИнформации( + Преобразователь = ПреобразованиеXSLT_ИнтерпретацияРазличияXMLКонтактнойИнформации( ТипКонтактнойИнформации); Возврат Преобразователь.ПреобразоватьИзСтроки(Текст); @@ -2175,7 +2401,7 @@ // Функция XSLT_СтруктураВАдрес(Знач Текст, Знач Представление = Неопределено, Знач Комментарий = Неопределено) - Преобразователь = УправлениеКонтактнойИнформациейСлужебныйПовтИсп.XSLT_ПреобразованиеXSL(); + Преобразователь = ПреобразованиеXSLT_ПреобразованиеXSL(); Возврат XSLT_КонтрольПредставленияИКомментария( Преобразователь.ПреобразоватьИзСтроки(Текст), Представление, Комментарий); @@ -2195,7 +2421,7 @@ // Функция XSLT_СтруктураВАдресЭлектроннойПочты(Знач Текст, Знач Представление = Неопределено, Знач Комментарий = Неопределено) - Преобразователь = УправлениеКонтактнойИнформациейСлужебныйПовтИсп.XSLT_СтруктураВАдресЭлектроннойПочты(); + Преобразователь = ПреобразованиеXSLT_СтруктураВАдресЭлектроннойПочты(); Возврат XSLT_КонтрольПредставленияИКомментария( XSLT_КонтрольСтроковогоЗначенияПростогоТипа(Преобразователь.ПреобразоватьИзСтроки(Текст), Представление), Представление, Комментарий); @@ -2214,7 +2440,7 @@ // Строка - XML контактной информации. // Функция XSLT_СтруктураВВебСтраницу(Знач Текст, Знач Представление = Неопределено, Знач Комментарий = Неопределено) - Преобразователь = УправлениеКонтактнойИнформациейСлужебныйПовтИсп.XSLT_СтруктураВВебСтраницу(); + Преобразователь = ПреобразованиеXSLT_СтруктураВВебСтраницу(); Возврат XSLT_КонтрольПредставленияИКомментария( XSLT_КонтрольСтроковогоЗначенияПростогоТипа( Преобразователь.ПреобразоватьИзСтроки(Текст), Представление), @@ -2234,7 +2460,7 @@ // Строка - XML контактной информации. // Функция XSLT_СтруктураВТелефон(Знач Текст, Знач Представление = Неопределено, Знач Комментарий = Неопределено) - Преобразователь = УправлениеКонтактнойИнформациейСлужебныйПовтИсп.XSLT_СтруктураВТелефон(); + Преобразователь = ПреобразованиеXSLT_СтруктураВТелефон(); Возврат XSLT_КонтрольПредставленияИКомментария( Преобразователь.ПреобразоватьИзСтроки(Текст), Представление, Комментарий); @@ -2253,7 +2479,7 @@ // Функция XSLT_СтруктураВФакс(Знач Текст, Знач Представление = Неопределено, Знач Комментарий = Неопределено) - Преобразователь = УправлениеКонтактнойИнформациейСлужебныйПовтИсп.XSLT_СтруктураВФакс(); + Преобразователь = ПреобразованиеXSLT_СтруктураВФакс(); Возврат XSLT_КонтрольПредставленияИКомментария( Преобразователь.ПреобразоватьИзСтроки(Текст), Представление, Комментарий); @@ -2273,7 +2499,7 @@ // Функция XSLT_СтруктураВДругое(Знач Текст, Знач Представление = Неопределено, Знач Комментарий = Неопределено) - Преобразователь = УправлениеКонтактнойИнформациейСлужебныйПовтИсп.XSLT_СтруктураВДругое(); + Преобразователь = ПреобразованиеXSLT_СтруктураВДругое(); Возврат XSLT_КонтрольПредставленияИКомментария( XSLT_КонтрольСтроковогоЗначенияПростогоТипа( Преобразователь.ПреобразоватьИзСтроки(Текст), Представление), Представление, Комментарий); @@ -2429,7 +2655,7 @@ // Функция XSLT_УдалитьОписаниеXML(Знач Текст) - Преобразователь = УправлениеКонтактнойИнформациейСлужебныйПовтИсп.XSLT_УдалитьОписаниеXML(); + Преобразователь = ПреобразованиеXSLT_УдалитьОписаниеXML(); Возврат Преобразователь.ПреобразоватьИзСтроки(СокрЛ(Текст)); КонецФункции @@ -2444,7 +2670,7 @@ // Функция XSLT_ТипКонтактнойИнформацииПоСтрокеXML(Знач Текст) - Преобразователь = УправлениеКонтактнойИнформациейСлужебныйПовтИсп.XSLT_ТипКонтактнойИнформацииПоСтрокеXML(); + Преобразователь = ПреобразованиеXSLT_ТипКонтактнойИнформацииПоСтрокеXML(); Возврат Преобразователь.ПреобразоватьИзСтроки(СокрЛ(Текст)); КонецФункции @@ -2592,6 +2818,874 @@ Список.Добавить(Строка(Значение), ИмяПоля); КонецПроцедуры +// Инициализация преобразователей + +// Преобразование для сравнения двух строк XML. +// +// Возвращаемое значение: +// ПреобразованиеXSL - подготовленный объект. +// +Функция ПреобразованиеXSLT_ТаблицаЗначенийРазличияXML() + Преобразователь = Новый ПреобразованиеXSL; + + // Пространство имен должно быть пустым! + Преобразователь.ЗагрузитьТаблицуСтилейXSLИзСтроки(" + |<xsl:stylesheet version=""1.0"" + | xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"" + | xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" + | xmlns:xs=""http://www.w3.org/2001/XMLSchema"" + | + | xmlns:str=""http://exslt.org/strings"" + | xmlns:exsl=""http://exslt.org/common"" + | + | extension-element-prefixes=""str exsl"" + |> + |<xsl:output method=""xml"" omit-xml-declaration=""yes"" indent=""yes"" encoding=""utf-8""/> + |" + XSLT_ШаблоныСтроковыхФункций() + " + |" + XSLT_ШаблоныФункцийXPath() + " + | + | <!-- parce tree elements to xpath-value --> + | <xsl:template match=""node()"" mode=""action""> + | + | <xsl:variable name=""text""> + | <xsl:call-template name=""str-trim-all""> + | <xsl:with-param name=""str"" select=""text()"" /> + | </xsl:call-template> + | </xsl:variable> + | + | <xsl:if test=""$text!=''""> + | <xsl:element name=""item""> + | <xsl:attribute name=""path""> + | <xsl:variable name=""tmp-path""> + | <xsl:call-template name=""build-path"" /> + | </xsl:variable> + | <xsl:value-of select=""substring($tmp-path, 6)"" /> <!-- pass '/dn/f' or '/dn/s' --> + | </xsl:attribute> + | <xsl:attribute name=""value""> + | <xsl:value-of select=""text()"" /> + | </xsl:attribute> + | </xsl:element> + | </xsl:if> + | + | <xsl:apply-templates select=""@* | node()"" mode=""action""/> + | </xsl:template> + | + | <!-- parce tree attributes to xpath-value --> + | <xsl:template match=""@*"" mode=""action""> + | <xsl:element name=""item""> + | <xsl:attribute name=""path""> + | <xsl:variable name=""tmp-path""> + | <xsl:call-template name=""build-path"" /> + | </xsl:variable> + | <xsl:value-of select=""substring($tmp-path, 6)"" /> <!-- pass '/dn/f' or '/dn/s' --> + | </xsl:attribute> + | <xsl:attribute name=""value""> + | <xsl:value-of select=""."" /> + | </xsl:attribute> + | </xsl:element> + | </xsl:template> + | + | <!-- main --> + | <xsl:variable name=""dummy""> + | <xsl:element name=""first""> + | <xsl:apply-templates select=""/dn/f"" mode=""action"" /> + | </xsl:element> + | <xsl:element name=""second""> + | <xsl:apply-templates select=""/dn/s"" mode=""action"" /> + | </xsl:element> + | </xsl:variable> + | <xsl:variable name=""dummy-nodeset"" select=""exsl:node-set($dummy)"" /> + | <xsl:variable name=""first-items"" select=""$dummy-nodeset/first/item"" /> + | <xsl:variable name=""second-items"" select=""$dummy-nodeset/second/item"" /> + | + | <xsl:template match=""/""> + | + | <!-- first vs second --> + | <xsl:variable name=""first-second""> + | <xsl:for-each select=""$first-items""> + | <xsl:call-template name=""compare""> + | <xsl:with-param name=""check"" select=""$second-items"" /> + | </xsl:call-template> + | </xsl:for-each> + | </xsl:variable> + | <xsl:variable name=""first-second-nodeset"" select=""exsl:node-set($first-second)"" /> + | + | <!-- second vs first without doubles --> + | <xsl:variable name=""doubles"" select=""$first-second-nodeset/item"" /> + | <xsl:variable name=""second-first""> + | <xsl:for-each select=""$second-items""> + | <xsl:call-template name=""compare""> + | <xsl:with-param name=""check"" select=""$first-items"" /> + | <xsl:with-param name=""doubles"" select=""$doubles"" /> + | </xsl:call-template> + | </xsl:for-each> + | </xsl:variable> + | + | <!-- result --> + | <ValueTable xmlns=""http://v8.1c.ru/8.1/data/core"" xmlns:xs=""http://www.w3.org/2001/XMLSchema"" xsi:type=""ValueTable""> + | <column> + | <Name xsi:type=""xs:string"">Путь</Name> + | <ValueType> + | <Type>xs:string</Type> + | <StringQualifiers><Length>0</Length><AllowedLength>Variable</AllowedLength></StringQualifiers> + | </ValueType> + | </column> + | <column> + | <Name xsi:type=""xs:string"">Значение1</Name> + | <ValueType> + | <Type>xs:string</Type> + | <StringQualifiers><Length>0</Length><AllowedLength>Variable</AllowedLength></StringQualifiers> + | </ValueType> + | </column> + | <column> + | <Name xsi:type=""xs:string"">Значение2</Name> + | <ValueType> + | <Type>xs:string</Type> + | <StringQualifiers><Length>0</Length><AllowedLength>Variable</AllowedLength></StringQualifiers> + | </ValueType> + | </column> + | + | <xsl:for-each select=""$first-second-nodeset/item | exsl:node-set($second-first)/item""> + | <xsl:element name=""row""> + | <xsl:element name=""Value""> + | <xsl:value-of select=""@path""/> + | </xsl:element> + | <xsl:element name=""Value""> + | <xsl:value-of select=""@value1""/> + | </xsl:element> + | <xsl:element name=""Value""> + | <xsl:value-of select=""@value2""/> + | </xsl:element> + | </xsl:element> + | </xsl:for-each> + | + | </ValueTable> + | + | </xsl:template> + | <!-- /main --> + | + | <!-- compare sub --> + | <xsl:template name=""compare""> + | <xsl:param name=""check"" /> + | <xsl:param name=""doubles"" select=""/.."" /> + | + | <xsl:variable name=""path"" select=""@path""/> + | <xsl:variable name=""value"" select=""@value""/> + | <xsl:variable name=""diff"" select=""$check[@path=$path]""/> + | <xsl:choose> + | <xsl:when test=""count($diff)=0""> + | <xsl:if test=""count($doubles[@path=$path and @value1='' and @value2=$value])=0""> + | <xsl:element name=""item""> + | <xsl:attribute name=""path""> <xsl:value-of select=""$path""/> </xsl:attribute> + | <xsl:attribute name=""value1""> <xsl:value-of select=""$value""/> </xsl:attribute> + | <xsl:attribute name=""value2"" /> + | </xsl:element> + | </xsl:if> + | </xsl:when> + | <xsl:otherwise> + | + | <xsl:for-each select=""$diff[@value!=$value]""> + | <xsl:variable name=""diff-value"" select=""@value""/> + | <xsl:if test=""count($doubles[@path=$path and @value1=$diff-value and @value2=$value])=0""> + | <xsl:element name=""item""> + | <xsl:attribute name=""path""> <xsl:value-of select=""$path""/> </xsl:attribute> + | <xsl:attribute name=""value1""> <xsl:value-of select=""$value""/> </xsl:attribute> + | <xsl:attribute name=""value2""> <xsl:value-of select=""@value""/> </xsl:attribute> + | </xsl:element> + | </xsl:if> + | </xsl:for-each> + | </xsl:otherwise> + | </xsl:choose> + | </xsl:template> + | + |</xsl:stylesheet> + |"); + + Возврат Преобразователь; +КонецФункции + +// Преобразование для текста с парами Ключ=Значение, разделенных переносами строк (см формат адреса) в XML. +// В случае повторных ключей все включаются в результат, но при десериализации будет использован +// последний (особенность работы сериализатора платформы). +// +// Возвращаемое значение: +// ПреобразованиеXSL - подготовленный объект. +// +Функция ПреобразованиеXSLT_СтрокаКлючЗначениеВСтруктуру() + Преобразователь = Новый ПреобразованиеXSL; + Преобразователь.ЗагрузитьТаблицуСтилейXSLИзСтроки(" + |<xsl:stylesheet version=""1.0"" + | xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"" + | xmlns:str=""http://exslt.org/strings"" + | extension-element-prefixes=""str"" + |> + |<xsl:output method=""xml"" omit-xml-declaration=""yes"" indent=""yes"" encoding=""utf-8""/> + |" + XSLT_ШаблоныСтроковыхФункций() + " + | + | <xsl:template match=""ExternalParamNode""> + | + | <xsl:variable name=""source""> + | <xsl:call-template name=""str-replace-all""> + | <xsl:with-param name=""str"" select=""."" /> + | <xsl:with-param name=""search-for"" select=""' '"" /> + | <xsl:with-param name=""replace-by"" select=""' '"" /> + | </xsl:call-template> + | </xsl:variable> + | + | <Structure xmlns=""http://v8.1c.ru/8.1/data/core"" xmlns:xs=""http://www.w3.org/2001/XMLSchema"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xsi:type=""Structure""> + | + | <xsl:for-each select=""str:tokenize($source, ' ')"" > + | <xsl:if test=""contains(., '=')""> + | + | <xsl:element name=""Property""> + | <xsl:attribute name=""name"" > + | <xsl:call-template name=""str-trim-all""> + | <xsl:with-param name=""str"" select=""substring-before(., '=')"" /> + | </xsl:call-template> + | </xsl:attribute> + | + | <Value xsi:type=""xs:string""> + | <xsl:call-template name=""str-replace-all""> + | <xsl:with-param name=""str"" select=""substring-after(., '=')"" /> + | <xsl:with-param name=""search-for"" select=""' '"" /> + | <xsl:with-param name=""replace-by"" select=""' '"" /> + | </xsl:call-template> + | </Value> + | + | </xsl:element> + | + | </xsl:if> + | </xsl:for-each> + | + | </Structure> + | + | </xsl:template> + | + |</xsl:stylesheet> + |"); + + Возврат Преобразователь; +КонецФункции + +// Преобразование для списка значений в структуру. Представление преобразуется в ключ. +// +// Возвращаемое значение: +// ПреобразованиеXSL - подготовленный объект. +// +Функция ПреобразованиеXSLT_СписокЗначенийВСтруктуру() + Преобразователь = Новый ПреобразованиеXSL; + Преобразователь.ЗагрузитьТаблицуСтилейXSLИзСтроки(" + |<xsl:stylesheet version=""1.0"" xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"" + | xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" + | xmlns:tns=""http://v8.1c.ru/8.1/data/core"" + | xmlns=""http://v8.1c.ru/8.1/data/core"" + |> + |<xsl:output method=""xml"" omit-xml-declaration=""yes"" indent=""yes"" encoding=""utf-8""/> + |" + XSLT_ШаблоныСтроковыхФункций() + " + | + | <xsl:template match=""/""> + | <Structure xmlns=""http://v8.1c.ru/8.1/data/core"" xmlns:xs=""http://www.w3.org/2001/XMLSchema"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xsi:type=""Structure""> + | <xsl:apply-templates select=""//tns:ValueListType/tns:item"" /> + | </Structure > + | </xsl:template> + | + | <xsl:template match=""//tns:ValueListType/tns:item""> + | <xsl:element name=""Property""> + | <xsl:attribute name=""name""> + | <xsl:call-template name=""str-trim-all""> + | <xsl:with-param name=""str"" select=""tns:presentation"" /> + | </xsl:call-template> + | </xsl:attribute> + | + | <xsl:element name=""Value""> + | <xsl:attribute name=""xsi:type""> + | <xsl:value-of select=""tns:value/@xsi:type""/> + | </xsl:attribute> + | <xsl:value-of select=""tns:value""/> + | </xsl:element> + | + | </xsl:element> + |</xsl:template> + | + |</xsl:stylesheet> + |"); + Возврат Преобразователь; +КонецФункции + +// Преобразование для соответствия в структуру. Ключ преобразуется в ключ, значение - в значение. +// +// Возвращаемое значение: +// ПреобразованиеXSL - подготовленный объект. +// +Функция ПреобразованиеXSLT_СоответствиеВСтруктуру() + Преобразователь = Новый ПреобразованиеXSL; + Преобразователь.ЗагрузитьТаблицуСтилейXSLИзСтроки(" + |<xsl:stylesheet version=""1.0"" xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"" + | xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" + | xmlns:tns=""http://v8.1c.ru/8.1/data/core"" + | xmlns=""http://v8.1c.ru/8.1/data/core"" + |> + |<xsl:output method=""xml"" omit-xml-declaration=""yes"" indent=""yes"" encoding=""utf-8""/> + |" + XSLT_ШаблоныСтроковыхФункций() + " + | + | <xsl:template match=""/""> + | <Structure xmlns=""http://v8.1c.ru/8.1/data/core"" xmlns:xs=""http://www.w3.org/2001/XMLSchema"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xsi:type=""Structure""> + | <xsl:apply-templates select=""//tns:Map/tns:pair"" /> + | </Structure > + | </xsl:template> + | + | <xsl:template match=""//tns:Map/tns:pair""> + | <xsl:element name=""Property""> + | <xsl:attribute name=""name""> + | <xsl:call-template name=""str-trim-all""> + | <xsl:with-param name=""str"" select=""tns:Key"" /> + | </xsl:call-template> + | </xsl:attribute> + | + | <xsl:element name=""Value""> + | <xsl:attribute name=""xsi:type""> + | <xsl:value-of select=""tns:Value/@xsi:type""/> + | </xsl:attribute> + | <xsl:value-of select=""tns:Value""/> + | </xsl:element> + | + | </xsl:element> + | </xsl:template> + | + |</xsl:stylesheet> + |"); + Возврат Преобразователь; +КонецФункции + +// Убирает описание <?xml...> для включения внутрь другого XML. +// +// Возвращаемое значение: +// ПреобразованиеXSL - подготовленный объект. +// +Функция ПреобразованиеXSLT_УдалитьОписаниеXML() + Преобразователь = Новый ПреобразованиеXSL; + Преобразователь.ЗагрузитьТаблицуСтилейXSLИзСтроки(" + |<xsl:stylesheet version=""1.0"" xmlns:xsl=""http://www.w3.org/1999/XSL/Transform""> + |<xsl:output method=""xml"" omit-xml-declaration=""yes"" indent=""yes"" encoding=""utf-8""/> + | <xsl:template match=""node() | @*""> + | <xsl:copy> + | <xsl:apply-templates select=""node() | @*"" /> + | </xsl:copy> + | </xsl:template> + |</xsl:stylesheet> + |"); + Возврат Преобразователь; +КонецФункции + +// Преобразование для контактной информации в виде XML (см пакет XDTO КонтактнаяИнформация) в перечисление +// ТипКонтактнойИнформации. +// +// Возвращаемое значение: +// ПреобразованиеXSL - подготовленный объект. +// +Функция ПреобразованиеXSLT_ТипКонтактнойИнформацииПоСтрокеXML() + Преобразователь = Новый ПреобразованиеXSL; + Преобразователь.ЗагрузитьТаблицуСтилейXSLИзСтроки(" + |<xsl:stylesheet version=""1.0"" xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"" + | xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" + | xmlns:ci=""http://www.v8.1c.ru/ssl/contactinfo"" + |> + | <xsl:output method=""xml"" omit-xml-declaration=""yes"" indent=""yes"" encoding=""utf-8""/> + | + | <xsl:template match=""/""> + | <EnumRef.ТипыКонтактнойИнформации xmlns=""http://v8.1c.ru/8.1/data/enterprise/current-config"" xmlns:xs=""http://www.w3.org/2001/XMLSchema"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xsi:type=""EnumRef.ТипыКонтактнойИнформации""> + | <xsl:call-template name=""enum-by-type"" > + | <xsl:with-param name=""type"" select=""ci:КонтактнаяИнформация/ci:Состав/@xsi:type"" /> + | </xsl:call-template> + | </EnumRef.ТипыКонтактнойИнформации> + | </xsl:template> + | + | <xsl:template name=""enum-by-type""> + | <xsl:param name=""type"" /> + | <xsl:choose> + | <xsl:when test=""$type='Адрес'""> + | <xsl:text>Адрес</xsl:text> + | </xsl:when> + | <xsl:when test=""$type='НомерТелефона'""> + | <xsl:text>Телефон</xsl:text> + | </xsl:when> + | <xsl:when test=""$type='НомерФакса'""> + | <xsl:text>Факс</xsl:text> + | </xsl:when> + | <xsl:when test=""$type='ЭлектроннаяПочта'""> + | <xsl:text>АдресЭлектроннойПочты</xsl:text> + | </xsl:when> + | <xsl:when test=""$type='ВебСайт'""> + | <xsl:text>ВебСтраница</xsl:text> + | </xsl:when> + | <xsl:when test=""$type='Прочее'""> + | <xsl:text>Другое</xsl:text> + | </xsl:when> + | </xsl:choose> + | </xsl:template> + | + |</xsl:stylesheet> + |"); + Возврат Преобразователь; +КонецФункции + +// Преобразование для таблицы различий XML в зависимости от типа контактной информации. +// +// Параметры: +// ТипКонтактнойИнформации - Строка, ПеречислениеСсылка.ТипыКонтактнойИнформации - имя или значение перечисления. +// +// Возвращаемое значение: +// ПреобразованиеXSL - подготовленный объект. +// +Функция ПреобразованиеXSLT_ИнтерпретацияРазличияXMLКонтактнойИнформации(Знач ТипКонтактнойИнформации) + + Если ТипЗнч(ТипКонтактнойИнформации) <> Тип("Строка") Тогда + ТипКонтактнойИнформации = ТипКонтактнойИнформации.Метаданные().Имя; + КонецЕсли; + + Преобразователь = Новый ПреобразованиеXSL; + Преобразователь.ЗагрузитьТаблицуСтилейXSLИзСтроки(" + |<xsl:stylesheet version=""1.0"" xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"" + | xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" + | xmlns:ci=""http://www.v8.1c.ru/ssl/contactinfo"" + |> + |<xsl:output method=""xml"" omit-xml-declaration=""yes"" indent=""yes"" encoding=""utf-8""/> + | <xsl:param name=""target-type"" select=""'" + ТипКонтактнойИнформации + "'""/> + | + | <xsl:template match=""/""> + | <xsl:choose> + | <xsl:when test=""$target-type='Адрес'""> + | <xsl:apply-templates select=""."" mode=""action-address""/> + | </xsl:when> + | <xsl:otherwise> + | <xsl:apply-templates select=""."" mode=""action-copy""/> + | </xsl:otherwise> + | </xsl:choose> + | </xsl:template> + | + | <xsl:template match=""node() | @*"" mode=""action-copy""> + | <xsl:copy> + | <xsl:apply-templates select=""node() | @*"" mode=""action-copy""/> + | </xsl:copy> + | </xsl:template> + | + | <xsl:template match=""node() | @*"" mode=""action-address""> + | <xsl:copy> + | <xsl:apply-templates select=""node() | @*"" mode=""action-address""/> + | </xsl:copy> + | </xsl:template> + | + |</xsl:stylesheet> + |"); + Возврат Преобразователь; +КонецФункции + +// Возвращает преобразователь XSL для конвертации структуры в контактную информацию в виде XML. +// +// Возвращаемое значение: +// ПреобразованиеXSL - подготовленный объект. +// +Функция ПреобразованиеXSLT_ПреобразованиеXSL() + + Если Метаданные.ОбщиеМодули.Найти("РаботаСАдресами") <> Неопределено Тогда + МодульРаботаСАдресами = ОбщегоНазначения.ОбщийМодуль("РаботаСАдресами"); + ДополнительныеПравилаПреобразования = МодульРаботаСАдресами.ДополнительныеПравилаПреобразования(); + КонецЕсли; + + Преобразователь = Новый ПреобразованиеXSL; + Преобразователь.ЗагрузитьТаблицуСтилейXSLИзСтроки(" + |<xsl:stylesheet version=""1.0"" xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"" + | xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" + | xmlns:xs=""http://www.w3.org/2001/XMLSchema"" + | xmlns:tns=""http://v8.1c.ru/8.1/data/core"" + | xmlns=""http://www.v8.1c.ru/ssl/contactinfo"" + | + | xmlns:data=""http://www.v8.1c.ru/ssl/contactinfo"" + | + | xmlns:exsl=""http://exslt.org/common"" + | extension-element-prefixes=""exsl"" + | exclude-result-prefixes=""data tns"" + |> + |<xsl:output method=""xml"" omit-xml-declaration=""yes"" indent=""yes"" encoding=""utf-8""/> + | " + XSLT_ШаблоныСтроковыхФункций() + " + | + | <xsl:variable name=""local-country"">РОССИЯ</xsl:variable> + | + | <xsl:variable name=""presentation"" select=""tns:Structure/tns:Property[@name='Представление']/tns:Value/text()"" /> + | + | <xsl:template match=""/""> + | <КонтактнаяИнформация> + | + | <xsl:attribute name=""Представление""> + | <xsl:value-of select=""$presentation""/> + | </xsl:attribute> + | <xsl:element name=""Комментарий""> + | <xsl:value-of select=""tns:Structure/tns:Property[@name='Комментарий']/tns:Value/text()""/> + | </xsl:element> + | + | <xsl:element name=""Состав""> + | <xsl:attribute name=""xsi:type"">Адрес</xsl:attribute> + | <xsl:variable name=""country"" select=""tns:Structure/tns:Property[@name='Страна']/tns:Value/text()""></xsl:variable> + | <xsl:variable name=""country-upper""> + | <xsl:call-template name=""str-upper""> + | <xsl:with-param name=""str"" select=""$country"" /> + | </xsl:call-template> + | </xsl:variable> + | + | <xsl:attribute name=""Страна""> + | <xsl:choose> + | <xsl:when test=""0=count($country)""> + | <xsl:value-of select=""$local-country"" /> + | </xsl:when> + | <xsl:otherwise> + | <xsl:value-of select=""$country"" /> + | </xsl:otherwise> + | </xsl:choose> + | </xsl:attribute> + | + | <xsl:choose> + | <xsl:when test=""0=count($country)""> + | <xsl:apply-templates select=""/"" mode=""domestic"" /> + | </xsl:when> + | <xsl:when test=""$country-upper=$local-country""> + | <xsl:apply-templates select=""/"" mode=""domestic"" /> + | </xsl:when> + | <xsl:otherwise> + | <xsl:apply-templates select=""/"" mode=""foreign"" /> + | </xsl:otherwise> + | </xsl:choose> + | + | </xsl:element> + | </КонтактнаяИнформация> + | </xsl:template> + | + | <xsl:template match=""/"" mode=""foreign""> + | <xsl:element name=""Состав""> + | <xsl:attribute name=""xsi:type"">xs:string</xsl:attribute> + | + | <xsl:variable name=""value"" select=""tns:Structure/tns:Property[@name='Значение']/tns:Value/text()"" /> + | <xsl:choose> + | <xsl:when test=""0=count($value)""> + | <xsl:value-of select=""$presentation"" /> + | </xsl:when> + | <xsl:otherwise> + | <xsl:value-of select=""$value"" /> + | </xsl:otherwise> + | </xsl:choose> + | + | </xsl:element> + | </xsl:template> + |" + ДополнительныеПравилаПреобразования); + + Возврат Преобразователь; +КонецФункции + +// Преобразует сериализованную структуру в контактную информацию в виде XML. +// +// Возвращаемое значение: +// ПреобразованиеXSL - подготовленный объект. +// +Функция ПреобразованиеXSLT_СтруктураВАдресЭлектроннойПочты() + Возврат ПреобразованиеXSLT_СтруктураВСтроковыйСостав("ЭлектроннаяПочта"); +КонецФункции + +// Преобразует сериализованную структуру в контактную информацию в виде XML. +// +// Возвращаемое значение: +// ПреобразованиеXSL - подготовленный объект. +// +Функция ПреобразованиеXSLT_СтруктураВВебСтраницу() + Возврат ПреобразованиеXSLT_СтруктураВСтроковыйСостав("ВебСайт"); +КонецФункции + +// Преобразует сериализованную структуру в контактную информацию в виде XML. +// +Функция ПреобразованиеXSLT_СтруктураВТелефон() + Возврат ПреобразованиеXSLT_СтруктураВТелефонФакс("НомерТелефона"); +КонецФункции + +// Преобразует сериализованную структуру в контактную информацию в виде XML. +// +// Возвращаемое значение: +// ПреобразованиеXSL - подготовленный объект. +// +Функция ПреобразованиеXSLT_СтруктураВФакс() + Возврат ПреобразованиеXSLT_СтруктураВТелефонФакс("НомерФакса"); +КонецФункции + +// Преобразует сериализованную структуру в контактную информацию в виде XML. +// +// Возвращаемое значение: +// ПреобразованиеXSL - подготовленный объект. +// +Функция ПреобразованиеXSLT_СтруктураВДругое() + Возврат ПреобразованиеXSLT_СтруктураВСтроковыйСостав("Прочее"); +КонецФункции + +// Общее преобразование сериализованной структуры в контактную информацию в виде XML простого типа. +// +// Возвращаемое значение: +// ПреобразованиеXSL - подготовленный объект. +// +Функция ПреобразованиеXSLT_СтруктураВСтроковыйСостав(Знач ИмяXDTOТипа) + Преобразователь = Новый ПреобразованиеXSL; + Преобразователь.ЗагрузитьТаблицуСтилейXSLИзСтроки(" + |<xsl:stylesheet version=""1.0"" xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"" + | xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" + | xmlns:tns=""http://v8.1c.ru/8.1/data/core"" + | xmlns=""http://www.v8.1c.ru/ssl/contactinfo"" + |> + |<xsl:output method=""xml"" omit-xml-declaration=""yes"" indent=""yes"" encoding=""utf-8""/> + | + |<xsl:template match=""/""> + | + | <xsl:element name=""КонтактнаяИнформация""> + | + | <xsl:attribute name=""Представление""> + | <xsl:value-of select=""tns:Structure/tns:Property[@name='Представление']/tns:Value/text()""/> + | </xsl:attribute> + | <xsl:element name=""Комментарий""> + | <xsl:value-of select=""tns:Structure/tns:Property[@name='Комментарий']/tns:Value/text()""/> + | </xsl:element> + | + | <xsl:element name=""Состав""> + | <xsl:attribute name=""xsi:type"">" + ИмяXDTOТипа + "</xsl:attribute> + | <xsl:attribute name=""Значение""> + | <xsl:choose> + | <xsl:when test=""0=count(tns:Structure/tns:Property[@name='Значение'])""> + | <xsl:value-of select=""tns:Structure/tns:Property[@name='Представление']/tns:Value/text()""/> + | </xsl:when> + | <xsl:otherwise> + | <xsl:value-of select=""tns:Structure/tns:Property[@name='Значение']/tns:Value/text()""/> + | </xsl:otherwise> + | </xsl:choose> + | </xsl:attribute> + | + | </xsl:element> + | </xsl:element> + | + |</xsl:template> + |</xsl:stylesheet> + |"); + Возврат Преобразователь; +КонецФункции + +// Общее преобразование для телефона и факса. +// +// Возвращаемое значение: +// ПреобразованиеXSL - подготовленный объект. +// +Функция ПреобразованиеXSLT_СтруктураВТелефонФакс(Знач ИмяXDTOТипа) + Преобразователь = Новый ПреобразованиеXSL; + Преобразователь.ЗагрузитьТаблицуСтилейXSLИзСтроки(" + |<xsl:stylesheet version=""1.0"" xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"" + | xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" + | xmlns:tns=""http://v8.1c.ru/8.1/data/core"" + | xmlns=""http://www.v8.1c.ru/ssl/contactinfo"" + |> + |<xsl:output method=""xml"" omit-xml-declaration=""yes"" indent=""yes"" encoding=""utf-8""/> + | <xsl:template match=""/""> + | + | <xsl:element name=""КонтактнаяИнформация""> + | + | <xsl:attribute name=""Представление""> + | <xsl:value-of select=""tns:Structure/tns:Property[@name='Представление']/tns:Value/text()""/> + | </xsl:attribute> + | <xsl:element name=""Комментарий""> + | <xsl:value-of select=""tns:Structure/tns:Property[@name='Комментарий']/tns:Value/text()""/> + | </xsl:element> + | <xsl:element name=""Состав""> + | <xsl:attribute name=""xsi:type"">" + ИмяXDTOТипа + "</xsl:attribute> + | + | <xsl:attribute name=""КодСтраны""> + | <xsl:value-of select=""tns:Structure/tns:Property[@name='КодСтраны']/tns:Value/text()""/> + | </xsl:attribute> + | <xsl:attribute name=""КодГорода""> + | <xsl:value-of select=""tns:Structure/tns:Property[@name='КодГорода']/tns:Value/text()""/> + | </xsl:attribute> + | <xsl:attribute name=""Номер""> + | <xsl:value-of select=""tns:Structure/tns:Property[@name='НомерТелефона']/tns:Value/text()""/> + | </xsl:attribute> + | <xsl:attribute name=""Добавочный""> + | <xsl:value-of select=""tns:Structure/tns:Property[@name='Добавочный']/tns:Value/text()""/> + | </xsl:attribute> + | + | </xsl:element> + | </xsl:element> + | + | </xsl:template> + |</xsl:stylesheet> + |"); + Возврат Преобразователь; +КонецФункции + +// Фрагмент XSL с процедурами для обработки строк. +// +// Возвращаемое значение: +// Строка - фрагмент XML для использования в преобразовании. +// +Функция XSLT_ШаблоныСтроковыхФункций() + Возврат " + |<!-- string functions --> + | + | <xsl:template name=""str-trim-left""> + | <xsl:param name=""str"" /> + | <xsl:variable name=""head"" select=""substring($str, 1, 1)""/> + | <xsl:variable name=""tail"" select=""substring($str, 2)""/> + | <xsl:choose> + | <xsl:when test=""(string-length($str) > 0) and (string-length(normalize-space($head)) = 0)""> + | <xsl:call-template name=""str-trim-left""> + | <xsl:with-param name=""str"" select=""$tail""/> + | </xsl:call-template> + | </xsl:when> + | <xsl:otherwise> + | <xsl:value-of select=""$str""/> + | </xsl:otherwise> + | </xsl:choose> + | </xsl:template> + | + | <xsl:template name=""str-trim-right""> + | <xsl:param name=""str"" /> + | <xsl:variable name=""head"" select=""substring($str, 1, string-length($str) - 1)""/> + | <xsl:variable name=""tail"" select=""substring($str, string-length($str))""/> + | <xsl:choose> + | <xsl:when test=""(string-length($str) > 0) and (string-length(normalize-space($tail)) = 0)""> + | <xsl:call-template name=""str-trim-right""> + | <xsl:with-param name=""str"" select=""$head""/> + | </xsl:call-template> + | </xsl:when> + | <xsl:otherwise> + | <xsl:value-of select=""$str""/> + | </xsl:otherwise> + | </xsl:choose> + | </xsl:template> + | + | <xsl:template name=""str-trim-all""> + | <xsl:param name=""str"" /> + | <xsl:call-template name=""str-trim-right""> + | <xsl:with-param name=""str""> + | <xsl:call-template name=""str-trim-left""> + | <xsl:with-param name=""str"" select=""$str""/> + | </xsl:call-template> + | </xsl:with-param> + | </xsl:call-template> + | </xsl:template> + | + | <xsl:template name=""str-replace-all""> + | <xsl:param name=""str"" /> + | <xsl:param name=""search-for"" /> + | <xsl:param name=""replace-by"" /> + | <xsl:choose> + | <xsl:when test=""contains($str, $search-for)""> + | <xsl:value-of select=""substring-before($str, $search-for)"" /> + | <xsl:value-of select=""$replace-by"" /> + | <xsl:call-template name=""str-replace-all""> + | <xsl:with-param name=""str"" select=""substring-after($str, $search-for)"" /> + | <xsl:with-param name=""search-for"" select=""$search-for"" /> + | <xsl:with-param name=""replace-by"" select=""$replace-by"" /> + | </xsl:call-template> + | </xsl:when> + | <xsl:otherwise> + | <xsl:value-of select=""$str"" /> + | </xsl:otherwise> + | </xsl:choose> + | </xsl:template> + | + | <xsl:param name=""alpha-low"" select=""'абвгдеёжзийклмнопрстуфхцчшщыъьэюяabcdefghijklmnopqrstuvwxyz'"" /> + | <xsl:param name=""alpha-up"" select=""'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЫЪЬЭЮЯABCDEFGHIJKLMNOPQRSTUVWXYZ'"" /> + | + | <xsl:template name=""str-upper""> + | <xsl:param name=""str"" /> + | <xsl:value-of select=""translate($str, $alpha-low, $alpha-up)""/> + | </xsl:template> + | + | <xsl:template name=""str-lower""> + | <xsl:param name=""str"" /> + | <xsl:value-of select=""translate($str, alpha-up, $alpha-low)"" /> + | </xsl:template> + | + |<!-- /string functions --> + |"; +КонецФункции + +// Фрагмент XSL с процедурами для работы с xpath. +// +// Возвращаемое значение: +// Строка - фрагмент XML для использования в преобразовании. +// +Функция XSLT_ШаблоныФункцийXPath() + Возврат " + |<!-- path functions --> + | + | <xsl:template name=""build-path""> + | <xsl:variable name=""node"" select="".""/> + | + | <xsl:for-each select=""$node | $node/ancestor-or-self::node()[..]""> + | <xsl:choose> + | <!-- element --> + | <xsl:when test=""self::*""> + | <xsl:value-of select=""'/'""/> + | <xsl:value-of select=""name()""/> + | <xsl:variable name=""thisPosition"" select=""count(preceding-sibling::*[name(current()) = name()])""/> + | <xsl:variable name=""numFollowing"" select=""count(following-sibling::*[name(current()) = name()])""/> + | <xsl:if test=""$thisPosition + $numFollowing > 0""> + | <xsl:value-of select=""concat('[', $thisPosition +1, ']')""/> + | </xsl:if> + | </xsl:when> + | <xsl:otherwise> + | <!-- not element --> + | <xsl:choose> + | <!-- attribute --> + | <xsl:when test=""count(. | ../@*) = count(../@*)""> + | <xsl:value-of select=""'/'""/> + | <xsl:value-of select=""concat('@',name())""/> + | </xsl:when> + | <!-- text- --> + | <xsl:when test=""self::text()""> + | <xsl:value-of select=""'/'""/> + | <xsl:value-of select=""'text()'""/> + | <xsl:variable name=""thisPosition"" select=""count(preceding-sibling::text())""/> + | <xsl:variable name=""numFollowing"" select=""count(following-sibling::text())""/> + | <xsl:if test=""$thisPosition + $numFollowing > 0""> + | <xsl:value-of select=""concat('[', $thisPosition +1, ']')""/> + | </xsl:if> + | </xsl:when> + | <!-- processing instruction --> + | <xsl:when test=""self::processing-instruction()""> + | <xsl:value-of select=""'/'""/> + | <xsl:value-of select=""'processing-instruction()'""/> + | <xsl:variable name=""thisPosition"" select=""count(preceding-sibling::processing-instruction())""/> + | <xsl:variable name=""numFollowing"" select=""count(following-sibling::processing-instruction())""/> + | <xsl:if test=""$thisPosition + $numFollowing > 0""> + | <xsl:value-of select=""concat('[', $thisPosition +1, ']')""/> + | </xsl:if> + | </xsl:when> + | <!-- comment --> + | <xsl:when test=""self::comment()""> + | <xsl:value-of select=""'/'""/> + | <xsl:value-of select=""'comment()'""/> + | <xsl:variable name=""thisPosition"" select=""count(preceding-sibling::comment())""/> + | <xsl:variable name=""numFollowing"" select=""count(following-sibling::comment())""/> + | <xsl:if test=""$thisPosition + $numFollowing > 0""> + | <xsl:value-of select=""concat('[', $thisPosition +1, ']')""/> + | </xsl:if> + | </xsl:when> + | <!-- namespace --> + | <xsl:when test=""count(. | ../namespace::*) = count(../namespace::*)""> + | <xsl:variable name=""ap"">'</xsl:variable> + | <xsl:value-of select=""'/'""/> + | <xsl:value-of select=""concat('namespace::*','[local-name() = ', $ap, local-name(), $ap, ']')""/> + | </xsl:when> + | </xsl:choose> + | </xsl:otherwise> + | </xsl:choose> + | </xsl:for-each> + | + | </xsl:template> + | + |<!-- /path functions --> + |"; +КонецФункции #КонецОбласти diff --git a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСлужебныйВызовСервера/Module.bsl b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСлужебныйВызовСервера/Module.bsl index 394a615e2..6f293f489 100644 --- a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСлужебныйВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСлужебныйВызовСервера/Module.bsl @@ -59,4 +59,18 @@ КонецПроцедуры +// Заполняет список страна при автоподборе по введенному пользователем тексту. +// +Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка) Экспорт + + Если Не УправлениеКонтактнойИнформациейСлужебный.ЕстьПравоДобавления() Тогда + // Нет прав на добавление страны мира, поведение по умолчанию. + Возврат; + КонецЕсли; + + ДанныеВыбора = УправлениеКонтактнойИнформациейСлужебный.ЗаполнитьДанныеВыбораАвтоподбораПоСтранам(Параметры); + СтандартнаяОбработка = (ДанныеВыбора.Количество() = 0); + +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСлужебныйПовтИсп/Module.bsl b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСлужебныйПовтИсп/Module.bsl index acd238467..e74c8eef7 100644 --- a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСлужебныйПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСлужебныйПовтИсп/Module.bsl @@ -13,871 +13,4 @@ Возврат ЕстьКлассификатор; КонецФункции -// Преобразование для сравнения двух строк XML. -// -// Возвращаемое значение: -// ПреобразованиеXSL - подготовленный объект. -// -Функция XSLT_ТаблицаЗначенийРазличияXML() Экспорт - Преобразователь = Новый ПреобразованиеXSL; - - // Пространство имен должно быть пустым! - Преобразователь.ЗагрузитьТаблицуСтилейXSLИзСтроки(" - |<xsl:stylesheet version=""1.0"" - | xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"" - | xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" - | xmlns:xs=""http://www.w3.org/2001/XMLSchema"" - | - | xmlns:str=""http://exslt.org/strings"" - | xmlns:exsl=""http://exslt.org/common"" - | - | extension-element-prefixes=""str exsl"" - |> - |<xsl:output method=""xml"" omit-xml-declaration=""yes"" indent=""yes"" encoding=""utf-8""/> - |" + XSLT_ШаблоныСтроковыхФункций() + " - |" + XSLT_ШаблоныФункцийXPath() + " - | - | <!-- parce tree elements to xpath-value --> - | <xsl:template match=""node()"" mode=""action""> - | - | <xsl:variable name=""text""> - | <xsl:call-template name=""str-trim-all""> - | <xsl:with-param name=""str"" select=""text()"" /> - | </xsl:call-template> - | </xsl:variable> - | - | <xsl:if test=""$text!=''""> - | <xsl:element name=""item""> - | <xsl:attribute name=""path""> - | <xsl:variable name=""tmp-path""> - | <xsl:call-template name=""build-path"" /> - | </xsl:variable> - | <xsl:value-of select=""substring($tmp-path, 6)"" /> <!-- pass '/dn/f' or '/dn/s' --> - | </xsl:attribute> - | <xsl:attribute name=""value""> - | <xsl:value-of select=""text()"" /> - | </xsl:attribute> - | </xsl:element> - | </xsl:if> - | - | <xsl:apply-templates select=""@* | node()"" mode=""action""/> - | </xsl:template> - | - | <!-- parce tree attributes to xpath-value --> - | <xsl:template match=""@*"" mode=""action""> - | <xsl:element name=""item""> - | <xsl:attribute name=""path""> - | <xsl:variable name=""tmp-path""> - | <xsl:call-template name=""build-path"" /> - | </xsl:variable> - | <xsl:value-of select=""substring($tmp-path, 6)"" /> <!-- pass '/dn/f' or '/dn/s' --> - | </xsl:attribute> - | <xsl:attribute name=""value""> - | <xsl:value-of select=""."" /> - | </xsl:attribute> - | </xsl:element> - | </xsl:template> - | - | <!-- main --> - | <xsl:variable name=""dummy""> - | <xsl:element name=""first""> - | <xsl:apply-templates select=""/dn/f"" mode=""action"" /> - | </xsl:element> - | <xsl:element name=""second""> - | <xsl:apply-templates select=""/dn/s"" mode=""action"" /> - | </xsl:element> - | </xsl:variable> - | <xsl:variable name=""dummy-nodeset"" select=""exsl:node-set($dummy)"" /> - | <xsl:variable name=""first-items"" select=""$dummy-nodeset/first/item"" /> - | <xsl:variable name=""second-items"" select=""$dummy-nodeset/second/item"" /> - | - | <xsl:template match=""/""> - | - | <!-- first vs second --> - | <xsl:variable name=""first-second""> - | <xsl:for-each select=""$first-items""> - | <xsl:call-template name=""compare""> - | <xsl:with-param name=""check"" select=""$second-items"" /> - | </xsl:call-template> - | </xsl:for-each> - | </xsl:variable> - | <xsl:variable name=""first-second-nodeset"" select=""exsl:node-set($first-second)"" /> - | - | <!-- second vs first without doubles --> - | <xsl:variable name=""doubles"" select=""$first-second-nodeset/item"" /> - | <xsl:variable name=""second-first""> - | <xsl:for-each select=""$second-items""> - | <xsl:call-template name=""compare""> - | <xsl:with-param name=""check"" select=""$first-items"" /> - | <xsl:with-param name=""doubles"" select=""$doubles"" /> - | </xsl:call-template> - | </xsl:for-each> - | </xsl:variable> - | - | <!-- result --> - | <ValueTable xmlns=""http://v8.1c.ru/8.1/data/core"" xmlns:xs=""http://www.w3.org/2001/XMLSchema"" xsi:type=""ValueTable""> - | <column> - | <Name xsi:type=""xs:string"">Путь</Name> - | <ValueType> - | <Type>xs:string</Type> - | <StringQualifiers><Length>0</Length><AllowedLength>Variable</AllowedLength></StringQualifiers> - | </ValueType> - | </column> - | <column> - | <Name xsi:type=""xs:string"">Значение1</Name> - | <ValueType> - | <Type>xs:string</Type> - | <StringQualifiers><Length>0</Length><AllowedLength>Variable</AllowedLength></StringQualifiers> - | </ValueType> - | </column> - | <column> - | <Name xsi:type=""xs:string"">Значение2</Name> - | <ValueType> - | <Type>xs:string</Type> - | <StringQualifiers><Length>0</Length><AllowedLength>Variable</AllowedLength></StringQualifiers> - | </ValueType> - | </column> - | - | <xsl:for-each select=""$first-second-nodeset/item | exsl:node-set($second-first)/item""> - | <xsl:element name=""row""> - | <xsl:element name=""Value""> - | <xsl:value-of select=""@path""/> - | </xsl:element> - | <xsl:element name=""Value""> - | <xsl:value-of select=""@value1""/> - | </xsl:element> - | <xsl:element name=""Value""> - | <xsl:value-of select=""@value2""/> - | </xsl:element> - | </xsl:element> - | </xsl:for-each> - | - | </ValueTable> - | - | </xsl:template> - | <!-- /main --> - | - | <!-- compare sub --> - | <xsl:template name=""compare""> - | <xsl:param name=""check"" /> - | <xsl:param name=""doubles"" select=""/.."" /> - | - | <xsl:variable name=""path"" select=""@path""/> - | <xsl:variable name=""value"" select=""@value""/> - | <xsl:variable name=""diff"" select=""$check[@path=$path]""/> - | <xsl:choose> - | <xsl:when test=""count($diff)=0""> - | <xsl:if test=""count($doubles[@path=$path and @value1='' and @value2=$value])=0""> - | <xsl:element name=""item""> - | <xsl:attribute name=""path""> <xsl:value-of select=""$path""/> </xsl:attribute> - | <xsl:attribute name=""value1""> <xsl:value-of select=""$value""/> </xsl:attribute> - | <xsl:attribute name=""value2"" /> - | </xsl:element> - | </xsl:if> - | </xsl:when> - | <xsl:otherwise> - | - | <xsl:for-each select=""$diff[@value!=$value]""> - | <xsl:variable name=""diff-value"" select=""@value""/> - | <xsl:if test=""count($doubles[@path=$path and @value1=$diff-value and @value2=$value])=0""> - | <xsl:element name=""item""> - | <xsl:attribute name=""path""> <xsl:value-of select=""$path""/> </xsl:attribute> - | <xsl:attribute name=""value1""> <xsl:value-of select=""$value""/> </xsl:attribute> - | <xsl:attribute name=""value2""> <xsl:value-of select=""@value""/> </xsl:attribute> - | </xsl:element> - | </xsl:if> - | </xsl:for-each> - | </xsl:otherwise> - | </xsl:choose> - | </xsl:template> - | - |</xsl:stylesheet> - |"); - - Возврат Преобразователь; -КонецФункции - -// Преобразование для текста с парами Ключ=Значение, разделенных переносами строк (см формат адреса) в XML. -// В случае повторных ключей все включаются в результат, но при десериализации будет использован -// последний (особенность работы сериализатора платформы). -// -// Возвращаемое значение: -// ПреобразованиеXSL - подготовленный объект. -// -Функция XSLT_СтрокаКлючЗначениеВСтруктуру() Экспорт - Преобразователь = Новый ПреобразованиеXSL; - Преобразователь.ЗагрузитьТаблицуСтилейXSLИзСтроки(" - |<xsl:stylesheet version=""1.0"" - | xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"" - | xmlns:str=""http://exslt.org/strings"" - | extension-element-prefixes=""str"" - |> - |<xsl:output method=""xml"" omit-xml-declaration=""yes"" indent=""yes"" encoding=""utf-8""/> - |" + XSLT_ШаблоныСтроковыхФункций() + " - | - | <xsl:template match=""ExternalParamNode""> - | - | <xsl:variable name=""source""> - | <xsl:call-template name=""str-replace-all""> - | <xsl:with-param name=""str"" select=""."" /> - | <xsl:with-param name=""search-for"" select=""' '"" /> - | <xsl:with-param name=""replace-by"" select=""' '"" /> - | </xsl:call-template> - | </xsl:variable> - | - | <Structure xmlns=""http://v8.1c.ru/8.1/data/core"" xmlns:xs=""http://www.w3.org/2001/XMLSchema"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xsi:type=""Structure""> - | - | <xsl:for-each select=""str:tokenize($source, ' ')"" > - | <xsl:if test=""contains(., '=')""> - | - | <xsl:element name=""Property""> - | <xsl:attribute name=""name"" > - | <xsl:call-template name=""str-trim-all""> - | <xsl:with-param name=""str"" select=""substring-before(., '=')"" /> - | </xsl:call-template> - | </xsl:attribute> - | - | <Value xsi:type=""xs:string""> - | <xsl:call-template name=""str-replace-all""> - | <xsl:with-param name=""str"" select=""substring-after(., '=')"" /> - | <xsl:with-param name=""search-for"" select=""' '"" /> - | <xsl:with-param name=""replace-by"" select=""' '"" /> - | </xsl:call-template> - | </Value> - | - | </xsl:element> - | - | </xsl:if> - | </xsl:for-each> - | - | </Structure> - | - | </xsl:template> - | - |</xsl:stylesheet> - |"); - - Возврат Преобразователь; -КонецФункции - -// Преобразование для списка значений в структуру. Представление преобразуется в ключ. -// -// Возвращаемое значение: -// ПреобразованиеXSL - подготовленный объект. -// -Функция XSLT_СписокЗначенийВСтруктуру() Экспорт - Преобразователь = Новый ПреобразованиеXSL; - Преобразователь.ЗагрузитьТаблицуСтилейXSLИзСтроки(" - |<xsl:stylesheet version=""1.0"" xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"" - | xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" - | xmlns:tns=""http://v8.1c.ru/8.1/data/core"" - | xmlns=""http://v8.1c.ru/8.1/data/core"" - |> - |<xsl:output method=""xml"" omit-xml-declaration=""yes"" indent=""yes"" encoding=""utf-8""/> - |" + XSLT_ШаблоныСтроковыхФункций() + " - | - | <xsl:template match=""/""> - | <Structure xmlns=""http://v8.1c.ru/8.1/data/core"" xmlns:xs=""http://www.w3.org/2001/XMLSchema"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xsi:type=""Structure""> - | <xsl:apply-templates select=""//tns:ValueListType/tns:item"" /> - | </Structure > - | </xsl:template> - | - | <xsl:template match=""//tns:ValueListType/tns:item""> - | <xsl:element name=""Property""> - | <xsl:attribute name=""name""> - | <xsl:call-template name=""str-trim-all""> - | <xsl:with-param name=""str"" select=""tns:presentation"" /> - | </xsl:call-template> - | </xsl:attribute> - | - | <xsl:element name=""Value""> - | <xsl:attribute name=""xsi:type""> - | <xsl:value-of select=""tns:value/@xsi:type""/> - | </xsl:attribute> - | <xsl:value-of select=""tns:value""/> - | </xsl:element> - | - | </xsl:element> - |</xsl:template> - | - |</xsl:stylesheet> - |"); - Возврат Преобразователь; -КонецФункции - -// Преобразование для соответствия в структуру. Ключ преобразуется в ключ, значение - в значение. -// -// Возвращаемое значение: -// ПреобразованиеXSL - подготовленный объект. -// -Функция XSLT_СоответствиеВСтруктуру() Экспорт - Преобразователь = Новый ПреобразованиеXSL; - Преобразователь.ЗагрузитьТаблицуСтилейXSLИзСтроки(" - |<xsl:stylesheet version=""1.0"" xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"" - | xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" - | xmlns:tns=""http://v8.1c.ru/8.1/data/core"" - | xmlns=""http://v8.1c.ru/8.1/data/core"" - |> - |<xsl:output method=""xml"" omit-xml-declaration=""yes"" indent=""yes"" encoding=""utf-8""/> - |" + XSLT_ШаблоныСтроковыхФункций() + " - | - | <xsl:template match=""/""> - | <Structure xmlns=""http://v8.1c.ru/8.1/data/core"" xmlns:xs=""http://www.w3.org/2001/XMLSchema"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xsi:type=""Structure""> - | <xsl:apply-templates select=""//tns:Map/tns:pair"" /> - | </Structure > - | </xsl:template> - | - | <xsl:template match=""//tns:Map/tns:pair""> - | <xsl:element name=""Property""> - | <xsl:attribute name=""name""> - | <xsl:call-template name=""str-trim-all""> - | <xsl:with-param name=""str"" select=""tns:Key"" /> - | </xsl:call-template> - | </xsl:attribute> - | - | <xsl:element name=""Value""> - | <xsl:attribute name=""xsi:type""> - | <xsl:value-of select=""tns:Value/@xsi:type""/> - | </xsl:attribute> - | <xsl:value-of select=""tns:Value""/> - | </xsl:element> - | - | </xsl:element> - | </xsl:template> - | - |</xsl:stylesheet> - |"); - Возврат Преобразователь; -КонецФункции - -// Убирает описание <?xml...> для включения внутрь другого XML. -// -// Возвращаемое значение: -// ПреобразованиеXSL - подготовленный объект. -// -Функция XSLT_УдалитьОписаниеXML() Экспорт - Преобразователь = Новый ПреобразованиеXSL; - Преобразователь.ЗагрузитьТаблицуСтилейXSLИзСтроки(" - |<xsl:stylesheet version=""1.0"" xmlns:xsl=""http://www.w3.org/1999/XSL/Transform""> - |<xsl:output method=""xml"" omit-xml-declaration=""yes"" indent=""yes"" encoding=""utf-8""/> - | <xsl:template match=""node() | @*""> - | <xsl:copy> - | <xsl:apply-templates select=""node() | @*"" /> - | </xsl:copy> - | </xsl:template> - |</xsl:stylesheet> - |"); - Возврат Преобразователь; -КонецФункции - -// Преобразование для контактной информации в виде XML (см пакет XDTO КонтактнаяИнформация) в перечисление -// ТипКонтактнойИнформации. -// -// Возвращаемое значение: -// ПреобразованиеXSL - подготовленный объект. -// -Функция XSLT_ТипКонтактнойИнформацииПоСтрокеXML() Экспорт - Преобразователь = Новый ПреобразованиеXSL; - Преобразователь.ЗагрузитьТаблицуСтилейXSLИзСтроки(" - |<xsl:stylesheet version=""1.0"" xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"" - | xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" - | xmlns:ci=""http://www.v8.1c.ru/ssl/contactinfo"" - |> - | <xsl:output method=""xml"" omit-xml-declaration=""yes"" indent=""yes"" encoding=""utf-8""/> - | - | <xsl:template match=""/""> - | <EnumRef.ТипыКонтактнойИнформации xmlns=""http://v8.1c.ru/8.1/data/enterprise/current-config"" xmlns:xs=""http://www.w3.org/2001/XMLSchema"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xsi:type=""EnumRef.ТипыКонтактнойИнформации""> - | <xsl:call-template name=""enum-by-type"" > - | <xsl:with-param name=""type"" select=""ci:КонтактнаяИнформация/ci:Состав/@xsi:type"" /> - | </xsl:call-template> - | </EnumRef.ТипыКонтактнойИнформации> - | </xsl:template> - | - | <xsl:template name=""enum-by-type""> - | <xsl:param name=""type"" /> - | <xsl:choose> - | <xsl:when test=""$type='Адрес'""> - | <xsl:text>Адрес</xsl:text> - | </xsl:when> - | <xsl:when test=""$type='НомерТелефона'""> - | <xsl:text>Телефон</xsl:text> - | </xsl:when> - | <xsl:when test=""$type='НомерФакса'""> - | <xsl:text>Факс</xsl:text> - | </xsl:when> - | <xsl:when test=""$type='ЭлектроннаяПочта'""> - | <xsl:text>АдресЭлектроннойПочты</xsl:text> - | </xsl:when> - | <xsl:when test=""$type='ВебСайт'""> - | <xsl:text>ВебСтраница</xsl:text> - | </xsl:when> - | <xsl:when test=""$type='Прочее'""> - | <xsl:text>Другое</xsl:text> - | </xsl:when> - | </xsl:choose> - | </xsl:template> - | - |</xsl:stylesheet> - |"); - Возврат Преобразователь; -КонецФункции - -// Преобразование для таблицы различий XML в зависимости от типа контактной информации. -// -// Параметры: -// ТипКонтактнойИнформации - Строка, ПеречислениеСсылка.ТипыКонтактнойИнформации - имя или значение перечисления. -// -// Возвращаемое значение: -// ПреобразованиеXSL - подготовленный объект. -// -Функция XSLT_ИнтерпретацияРазличияXMLКонтактнойИнформации(Знач ТипКонтактнойИнформации) Экспорт - - Если ТипЗнч(ТипКонтактнойИнформации) <> Тип("Строка") Тогда - ТипКонтактнойИнформации = ТипКонтактнойИнформации.Метаданные().Имя; - КонецЕсли; - - Преобразователь = Новый ПреобразованиеXSL; - Преобразователь.ЗагрузитьТаблицуСтилейXSLИзСтроки(" - |<xsl:stylesheet version=""1.0"" xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"" - | xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" - | xmlns:ci=""http://www.v8.1c.ru/ssl/contactinfo"" - |> - |<xsl:output method=""xml"" omit-xml-declaration=""yes"" indent=""yes"" encoding=""utf-8""/> - | <xsl:param name=""target-type"" select=""'" + ТипКонтактнойИнформации + "'""/> - | - | <xsl:template match=""/""> - | <xsl:choose> - | <xsl:when test=""$target-type='Адрес'""> - | <xsl:apply-templates select=""."" mode=""action-address""/> - | </xsl:when> - | <xsl:otherwise> - | <xsl:apply-templates select=""."" mode=""action-copy""/> - | </xsl:otherwise> - | </xsl:choose> - | </xsl:template> - | - | <xsl:template match=""node() | @*"" mode=""action-copy""> - | <xsl:copy> - | <xsl:apply-templates select=""node() | @*"" mode=""action-copy""/> - | </xsl:copy> - | </xsl:template> - | - | <xsl:template match=""node() | @*"" mode=""action-address""> - | <xsl:copy> - | <xsl:apply-templates select=""node() | @*"" mode=""action-address""/> - | </xsl:copy> - | </xsl:template> - | - |</xsl:stylesheet> - |"); - Возврат Преобразователь; -КонецФункции - -// Возвращает преобразователь XSL для конвертации структуры в контактную информацию в виде XML. -// -// Возвращаемое значение: -// ПреобразованиеXSL - подготовленный объект. -// -Функция XSLT_ПреобразованиеXSL() Экспорт - - Если Метаданные.ОбщиеМодули.Найти("РаботаСАдресами") <> Неопределено Тогда - МодульРаботаСАдресами = ОбщегоНазначения.ОбщийМодуль("РаботаСАдресами"); - ДополнительныеПравилаПреобразования = МодульРаботаСАдресами.ДополнительныеПравилаПреобразования(); - КонецЕсли; - - Преобразователь = Новый ПреобразованиеXSL; - Преобразователь.ЗагрузитьТаблицуСтилейXSLИзСтроки(" - |<xsl:stylesheet version=""1.0"" xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"" - | xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" - | xmlns:xs=""http://www.w3.org/2001/XMLSchema"" - | xmlns:tns=""http://v8.1c.ru/8.1/data/core"" - | xmlns=""http://www.v8.1c.ru/ssl/contactinfo"" - | - | xmlns:data=""http://www.v8.1c.ru/ssl/contactinfo"" - | - | xmlns:exsl=""http://exslt.org/common"" - | extension-element-prefixes=""exsl"" - | exclude-result-prefixes=""data tns"" - |> - |<xsl:output method=""xml"" omit-xml-declaration=""yes"" indent=""yes"" encoding=""utf-8""/> - | " + XSLT_ШаблоныСтроковыхФункций() + " - | - | <xsl:variable name=""local-country"">РОССИЯ</xsl:variable> - | - | <xsl:variable name=""presentation"" select=""tns:Structure/tns:Property[@name='Представление']/tns:Value/text()"" /> - | - | <xsl:template match=""/""> - | <КонтактнаяИнформация> - | - | <xsl:attribute name=""Представление""> - | <xsl:value-of select=""$presentation""/> - | </xsl:attribute> - | <xsl:element name=""Комментарий""> - | <xsl:value-of select=""tns:Structure/tns:Property[@name='Комментарий']/tns:Value/text()""/> - | </xsl:element> - | - | <xsl:element name=""Состав""> - | <xsl:attribute name=""xsi:type"">Адрес</xsl:attribute> - | <xsl:variable name=""country"" select=""tns:Structure/tns:Property[@name='Страна']/tns:Value/text()""></xsl:variable> - | <xsl:variable name=""country-upper""> - | <xsl:call-template name=""str-upper""> - | <xsl:with-param name=""str"" select=""$country"" /> - | </xsl:call-template> - | </xsl:variable> - | - | <xsl:attribute name=""Страна""> - | <xsl:choose> - | <xsl:when test=""0=count($country)""> - | <xsl:value-of select=""$local-country"" /> - | </xsl:when> - | <xsl:otherwise> - | <xsl:value-of select=""$country"" /> - | </xsl:otherwise> - | </xsl:choose> - | </xsl:attribute> - | - | <xsl:choose> - | <xsl:when test=""0=count($country)""> - | <xsl:apply-templates select=""/"" mode=""domestic"" /> - | </xsl:when> - | <xsl:when test=""$country-upper=$local-country""> - | <xsl:apply-templates select=""/"" mode=""domestic"" /> - | </xsl:when> - | <xsl:otherwise> - | <xsl:apply-templates select=""/"" mode=""foreign"" /> - | </xsl:otherwise> - | </xsl:choose> - | - | </xsl:element> - | </КонтактнаяИнформация> - | </xsl:template> - | - | <xsl:template match=""/"" mode=""foreign""> - | <xsl:element name=""Состав""> - | <xsl:attribute name=""xsi:type"">xs:string</xsl:attribute> - | - | <xsl:variable name=""value"" select=""tns:Structure/tns:Property[@name='Значение']/tns:Value/text()"" /> - | <xsl:choose> - | <xsl:when test=""0=count($value)""> - | <xsl:value-of select=""$presentation"" /> - | </xsl:when> - | <xsl:otherwise> - | <xsl:value-of select=""$value"" /> - | </xsl:otherwise> - | </xsl:choose> - | - | </xsl:element> - | </xsl:template> - |" + ДополнительныеПравилаПреобразования); - - Возврат Преобразователь; -КонецФункции - -// Преобразует сериализованную структуру в контактную информацию в виде XML. -// -// Возвращаемое значение: -// ПреобразованиеXSL - подготовленный объект. -// -Функция XSLT_СтруктураВАдресЭлектроннойПочты() Экспорт - Возврат XSLT_СтруктураВСтроковыйСостав("ЭлектроннаяПочта"); -КонецФункции - -// Преобразует сериализованную структуру в контактную информацию в виде XML. -// -// Возвращаемое значение: -// ПреобразованиеXSL - подготовленный объект. -// -Функция XSLT_СтруктураВВебСтраницу() Экспорт - Возврат XSLT_СтруктураВСтроковыйСостав("ВебСайт"); -КонецФункции - -// Преобразует сериализованную структуру в контактную информацию в виде XML. -// -Функция XSLT_СтруктураВТелефон() Экспорт - Возврат XSLT_СтруктураВТелефонФакс("НомерТелефона"); -КонецФункции - -// Преобразует сериализованную структуру в контактную информацию в виде XML. -// -// Возвращаемое значение: -// ПреобразованиеXSL - подготовленный объект. -// -Функция XSLT_СтруктураВФакс() Экспорт - Возврат XSLT_СтруктураВТелефонФакс("НомерФакса"); -КонецФункции - -// Преобразует сериализованную структуру в контактную информацию в виде XML. -// -// Возвращаемое значение: -// ПреобразованиеXSL - подготовленный объект. -// -Функция XSLT_СтруктураВДругое() Экспорт - Возврат XSLT_СтруктураВСтроковыйСостав("Прочее"); -КонецФункции - -// Общее преобразование сериализованной структуры в контактную информацию в виде XML простого типа. -// -// Возвращаемое значение: -// ПреобразованиеXSL - подготовленный объект. -// -Функция XSLT_СтруктураВСтроковыйСостав(Знач ИмяXDTOТипа) - Преобразователь = Новый ПреобразованиеXSL; - Преобразователь.ЗагрузитьТаблицуСтилейXSLИзСтроки(" - |<xsl:stylesheet version=""1.0"" xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"" - | xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" - | xmlns:tns=""http://v8.1c.ru/8.1/data/core"" - | xmlns=""http://www.v8.1c.ru/ssl/contactinfo"" - |> - |<xsl:output method=""xml"" omit-xml-declaration=""yes"" indent=""yes"" encoding=""utf-8""/> - | - |<xsl:template match=""/""> - | - | <xsl:element name=""КонтактнаяИнформация""> - | - | <xsl:attribute name=""Представление""> - | <xsl:value-of select=""tns:Structure/tns:Property[@name='Представление']/tns:Value/text()""/> - | </xsl:attribute> - | <xsl:element name=""Комментарий""> - | <xsl:value-of select=""tns:Structure/tns:Property[@name='Комментарий']/tns:Value/text()""/> - | </xsl:element> - | - | <xsl:element name=""Состав""> - | <xsl:attribute name=""xsi:type"">" + ИмяXDTOТипа + "</xsl:attribute> - | <xsl:attribute name=""Значение""> - | <xsl:choose> - | <xsl:when test=""0=count(tns:Structure/tns:Property[@name='Значение'])""> - | <xsl:value-of select=""tns:Structure/tns:Property[@name='Представление']/tns:Value/text()""/> - | </xsl:when> - | <xsl:otherwise> - | <xsl:value-of select=""tns:Structure/tns:Property[@name='Значение']/tns:Value/text()""/> - | </xsl:otherwise> - | </xsl:choose> - | </xsl:attribute> - | - | </xsl:element> - | </xsl:element> - | - |</xsl:template> - |</xsl:stylesheet> - |"); - Возврат Преобразователь; -КонецФункции - -// Общее преобразование для телефона и факса. -// -// Возвращаемое значение: -// ПреобразованиеXSL - подготовленный объект. -// -Функция XSLT_СтруктураВТелефонФакс(Знач ИмяXDTOТипа) - Преобразователь = Новый ПреобразованиеXSL; - Преобразователь.ЗагрузитьТаблицуСтилейXSLИзСтроки(" - |<xsl:stylesheet version=""1.0"" xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"" - | xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" - | xmlns:tns=""http://v8.1c.ru/8.1/data/core"" - | xmlns=""http://www.v8.1c.ru/ssl/contactinfo"" - |> - |<xsl:output method=""xml"" omit-xml-declaration=""yes"" indent=""yes"" encoding=""utf-8""/> - | <xsl:template match=""/""> - | - | <xsl:element name=""КонтактнаяИнформация""> - | - | <xsl:attribute name=""Представление""> - | <xsl:value-of select=""tns:Structure/tns:Property[@name='Представление']/tns:Value/text()""/> - | </xsl:attribute> - | <xsl:element name=""Комментарий""> - | <xsl:value-of select=""tns:Structure/tns:Property[@name='Комментарий']/tns:Value/text()""/> - | </xsl:element> - | <xsl:element name=""Состав""> - | <xsl:attribute name=""xsi:type"">" + ИмяXDTOТипа + "</xsl:attribute> - | - | <xsl:attribute name=""КодСтраны""> - | <xsl:value-of select=""tns:Structure/tns:Property[@name='КодСтраны']/tns:Value/text()""/> - | </xsl:attribute> - | <xsl:attribute name=""КодГорода""> - | <xsl:value-of select=""tns:Structure/tns:Property[@name='КодГорода']/tns:Value/text()""/> - | </xsl:attribute> - | <xsl:attribute name=""Номер""> - | <xsl:value-of select=""tns:Structure/tns:Property[@name='НомерТелефона']/tns:Value/text()""/> - | </xsl:attribute> - | <xsl:attribute name=""Добавочный""> - | <xsl:value-of select=""tns:Structure/tns:Property[@name='Добавочный']/tns:Value/text()""/> - | </xsl:attribute> - | - | </xsl:element> - | </xsl:element> - | - | </xsl:template> - |</xsl:stylesheet> - |"); - Возврат Преобразователь; -КонецФункции - -// Фрагмент XSL с процедурами для обработки строк. -// -// Возвращаемое значение: -// Строка - фрагмент XML для использования в преобразовании. -// -Функция XSLT_ШаблоныСтроковыхФункций() - Возврат " - |<!-- string functions --> - | - | <xsl:template name=""str-trim-left""> - | <xsl:param name=""str"" /> - | <xsl:variable name=""head"" select=""substring($str, 1, 1)""/> - | <xsl:variable name=""tail"" select=""substring($str, 2)""/> - | <xsl:choose> - | <xsl:when test=""(string-length($str) > 0) and (string-length(normalize-space($head)) = 0)""> - | <xsl:call-template name=""str-trim-left""> - | <xsl:with-param name=""str"" select=""$tail""/> - | </xsl:call-template> - | </xsl:when> - | <xsl:otherwise> - | <xsl:value-of select=""$str""/> - | </xsl:otherwise> - | </xsl:choose> - | </xsl:template> - | - | <xsl:template name=""str-trim-right""> - | <xsl:param name=""str"" /> - | <xsl:variable name=""head"" select=""substring($str, 1, string-length($str) - 1)""/> - | <xsl:variable name=""tail"" select=""substring($str, string-length($str))""/> - | <xsl:choose> - | <xsl:when test=""(string-length($str) > 0) and (string-length(normalize-space($tail)) = 0)""> - | <xsl:call-template name=""str-trim-right""> - | <xsl:with-param name=""str"" select=""$head""/> - | </xsl:call-template> - | </xsl:when> - | <xsl:otherwise> - | <xsl:value-of select=""$str""/> - | </xsl:otherwise> - | </xsl:choose> - | </xsl:template> - | - | <xsl:template name=""str-trim-all""> - | <xsl:param name=""str"" /> - | <xsl:call-template name=""str-trim-right""> - | <xsl:with-param name=""str""> - | <xsl:call-template name=""str-trim-left""> - | <xsl:with-param name=""str"" select=""$str""/> - | </xsl:call-template> - | </xsl:with-param> - | </xsl:call-template> - | </xsl:template> - | - | <xsl:template name=""str-replace-all""> - | <xsl:param name=""str"" /> - | <xsl:param name=""search-for"" /> - | <xsl:param name=""replace-by"" /> - | <xsl:choose> - | <xsl:when test=""contains($str, $search-for)""> - | <xsl:value-of select=""substring-before($str, $search-for)"" /> - | <xsl:value-of select=""$replace-by"" /> - | <xsl:call-template name=""str-replace-all""> - | <xsl:with-param name=""str"" select=""substring-after($str, $search-for)"" /> - | <xsl:with-param name=""search-for"" select=""$search-for"" /> - | <xsl:with-param name=""replace-by"" select=""$replace-by"" /> - | </xsl:call-template> - | </xsl:when> - | <xsl:otherwise> - | <xsl:value-of select=""$str"" /> - | </xsl:otherwise> - | </xsl:choose> - | </xsl:template> - | - | <xsl:param name=""alpha-low"" select=""'абвгдеёжзийклмнопрстуфхцчшщыъьэюяabcdefghijklmnopqrstuvwxyz'"" /> - | <xsl:param name=""alpha-up"" select=""'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЫЪЬЭЮЯABCDEFGHIJKLMNOPQRSTUVWXYZ'"" /> - | - | <xsl:template name=""str-upper""> - | <xsl:param name=""str"" /> - | <xsl:value-of select=""translate($str, $alpha-low, $alpha-up)""/> - | </xsl:template> - | - | <xsl:template name=""str-lower""> - | <xsl:param name=""str"" /> - | <xsl:value-of select=""translate($str, alpha-up, $alpha-low)"" /> - | </xsl:template> - | - |<!-- /string functions --> - |"; -КонецФункции - -// Фрагмент XSL с процедурами для работы с xpath. -// -// Возвращаемое значение: -// Строка - фрагмент XML для использования в преобразовании. -// -Функция XSLT_ШаблоныФункцийXPath() - Возврат " - |<!-- path functions --> - | - | <xsl:template name=""build-path""> - | <xsl:variable name=""node"" select="".""/> - | - | <xsl:for-each select=""$node | $node/ancestor-or-self::node()[..]""> - | <xsl:choose> - | <!-- element --> - | <xsl:when test=""self::*""> - | <xsl:value-of select=""'/'""/> - | <xsl:value-of select=""name()""/> - | <xsl:variable name=""thisPosition"" select=""count(preceding-sibling::*[name(current()) = name()])""/> - | <xsl:variable name=""numFollowing"" select=""count(following-sibling::*[name(current()) = name()])""/> - | <xsl:if test=""$thisPosition + $numFollowing > 0""> - | <xsl:value-of select=""concat('[', $thisPosition +1, ']')""/> - | </xsl:if> - | </xsl:when> - | <xsl:otherwise> - | <!-- not element --> - | <xsl:choose> - | <!-- attribute --> - | <xsl:when test=""count(. | ../@*) = count(../@*)""> - | <xsl:value-of select=""'/'""/> - | <xsl:value-of select=""concat('@',name())""/> - | </xsl:when> - | <!-- text- --> - | <xsl:when test=""self::text()""> - | <xsl:value-of select=""'/'""/> - | <xsl:value-of select=""'text()'""/> - | <xsl:variable name=""thisPosition"" select=""count(preceding-sibling::text())""/> - | <xsl:variable name=""numFollowing"" select=""count(following-sibling::text())""/> - | <xsl:if test=""$thisPosition + $numFollowing > 0""> - | <xsl:value-of select=""concat('[', $thisPosition +1, ']')""/> - | </xsl:if> - | </xsl:when> - | <!-- processing instruction --> - | <xsl:when test=""self::processing-instruction()""> - | <xsl:value-of select=""'/'""/> - | <xsl:value-of select=""'processing-instruction()'""/> - | <xsl:variable name=""thisPosition"" select=""count(preceding-sibling::processing-instruction())""/> - | <xsl:variable name=""numFollowing"" select=""count(following-sibling::processing-instruction())""/> - | <xsl:if test=""$thisPosition + $numFollowing > 0""> - | <xsl:value-of select=""concat('[', $thisPosition +1, ']')""/> - | </xsl:if> - | </xsl:when> - | <!-- comment --> - | <xsl:when test=""self::comment()""> - | <xsl:value-of select=""'/'""/> - | <xsl:value-of select=""'comment()'""/> - | <xsl:variable name=""thisPosition"" select=""count(preceding-sibling::comment())""/> - | <xsl:variable name=""numFollowing"" select=""count(following-sibling::comment())""/> - | <xsl:if test=""$thisPosition + $numFollowing > 0""> - | <xsl:value-of select=""concat('[', $thisPosition +1, ']')""/> - | </xsl:if> - | </xsl:when> - | <!-- namespace --> - | <xsl:when test=""count(. | ../namespace::*) = count(../namespace::*)""> - | <xsl:variable name=""ap"">'</xsl:variable> - | <xsl:value-of select=""'/'""/> - | <xsl:value-of select=""concat('namespace::*','[local-name() = ', $ap, local-name(), $ap, ']')""/> - | </xsl:when> - | </xsl:choose> - | </xsl:otherwise> - | </xsl:choose> - | </xsl:for-each> - | - | </xsl:template> - | - |<!-- /path functions --> - |"; -КонецФункции - #КонецОбласти diff --git a/SSL/src/CommonModules/УправлениеПечатью/Module.bsl b/SSL/src/CommonModules/УправлениеПечатью/Module.bsl index cfdfecf92..70f023466 100644 --- a/SSL/src/CommonModules/УправлениеПечатью/Module.bsl +++ b/SSL/src/CommonModules/УправлениеПечатью/Module.bsl @@ -525,7 +525,10 @@ // Предоставляет дополнительный профиль доступа "Редактирование, отправка по почте, сохранение в файл печатных форм (дополнительно)". // Предназначена для использования в процедуре ПриЗаполненииПоставляемыхПрофилейГруппДоступа модуля УправлениеДоступомПереопределяемый. -// См. УправлениеДоступомПереопределяемый.ПриЗаполненииПоставляемыхПрофилейГруппДоступа. +// +// Параметры: +// ОписанияПрофилей - Массив - см. УправлениеДоступомПереопределяемый.ПриЗаполненииПоставляемыхПрофилейГруппДоступа. +// Процедура ЗаполнитьПрофильРедактированиеПечатныхФорм(ОписанияПрофилей) Экспорт МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); @@ -610,40 +613,40 @@ // Возвращает макет печатной формы по полному пути к макету. // // Параметры: -// ПолныйПутьКМакету - Строка - полный путь к макету в формате: -// "Документ.<ИмяДокумента>.<ИмяМакета>" -// "Обработка.<ИмяОбработки>.<ИмяМакета>" -// "ОбщийМакет.<ИмяМакета>". +// ПутьКМакету - Строка - полный путь к макету в формате: +// "Документ.<ИмяДокумента>.<ИмяМакета>" +// "Обработка.<ИмяОбработки>.<ИмяМакета>" +// "ОбщийМакет.<ИмяМакета>". // Возвращаемое значение: -// ТабличныйДокумент - для макета типа MXL. -// ДвоичныеДанные - для макетов DOC и ODT. +// ТабличныйДокумент - для макета типа MXL. +// ДвоичныеДанные - для макетов DOC и ODT. // -Функция МакетПечатнойФормы(ПолныйПутьКМакету) Экспорт +Функция МакетПечатнойФормы(ПутьКМакету) Экспорт + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Макет ""%1"" не найден. Операция прервана.'"), ПутьКМакету); - ЧастиПути = СтрЗаменить(ПолныйПутьКМакету, ".", Символы.ПС); - - Если СтрЧислоСтрок(ЧастиПути) = 3 Тогда - ПутьКМетаданным = СтрПолучитьСтроку(ЧастиПути, 1) + "." + СтрПолучитьСтроку(ЧастиПути, 2); - ПутьКОбъектуМетаданных = СтрПолучитьСтроку(ЧастиПути, 3); - ИначеЕсли СтрЧислоСтрок(ЧастиПути) = 2 Тогда - ПутьКМетаданным = СтрПолучитьСтроку(ЧастиПути, 1); - ПутьКОбъектуМетаданных = СтрПолучитьСтроку(ЧастиПути, 2); - Иначе - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Макет ""%1"" не найден. Операция прервана.'"), ПолныйПутьКМакету); + ЧастиПути = СтрРазделить(ПутьКМакету, ".", Истина); + Если ЧастиПути.Количество() <> 2 И ЧастиПути.Количество() <> 3 Тогда + ВызватьИсключение ТекстОшибки; КонецЕсли; - Запрос = Новый Запрос; + ИмяМакета = ЧастиПути[ЧастиПути.ВГраница()]; + ЧастиПути.Удалить(ЧастиПути.ВГраница()); + ИмяОбъекта = СтрСоединить(ЧастиПути, "."); - Запрос.Текст = "ВЫБРАТЬ Макет КАК Макет, Использование КАК Использование - |ИЗ - | РегистрСведений.ПользовательскиеМакетыПечати - |ГДЕ - | Объект=&Объект - | И ИмяМакета=&ИмяМакета - | И Использование"; + ТекстЗапроса = + "ВЫБРАТЬ + | ПользовательскиеМакетыПечати.Макет КАК Макет, + | ПользовательскиеМакетыПечати.ИмяМакета КАК ИмяМакета + |ИЗ + | РегистрСведений.ПользовательскиеМакетыПечати КАК ПользовательскиеМакетыПечати + |ГДЕ + | ПользовательскиеМакетыПечати.Объект = &Объект + | И ПользовательскиеМакетыПечати.ИмяМакета ПОДОБНО &ИмяМакета + | И ПользовательскиеМакетыПечати.Использование"; - Запрос.Параметры.Вставить("Объект", ПутьКМетаданным); - Запрос.Параметры.Вставить("ИмяМакета", ПутьКОбъектуМетаданных); + Запрос = Новый Запрос(ТекстЗапроса); + Запрос.Параметры.Вставить("Объект", ИмяОбъекта); + Запрос.Параметры.Вставить("ИмяМакета", "%" + ИмяМакета + "%"); УстановитьОтключениеБезопасногоРежима(Истина); УстановитьПривилегированныйРежим(Истина); @@ -653,25 +656,100 @@ УстановитьПривилегированныйРежим(Ложь); УстановитьОтключениеБезопасногоРежима(Ложь); - Результат = Неопределено; + СписокМакетов = Новый Соответствие; + Пока Выборка.Следующий() Цикл + СписокМакетов.Вставить(Выборка.ИмяМакета, Выборка.Макет.Получить()); + КонецЦикла; - Если Выборка.Следующий() Тогда - Результат = Выборка.Макет.Получить(); - Иначе - Если СтрЧислоСтрок(ЧастиПути) = 3 Тогда - Результат = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПутьКМетаданным).ПолучитьМакет(ПутьКОбъектуМетаданных); + ИменаПоиска = Новый Массив; + Если СтрНайти(ИмяМакета, "ПФ_DOC_") > 0 Или СтрНайти(ИмяМакета, "ПФ_ODT_") > 0 Тогда + ТекущийЯзык = ТекущийЯзык(); + Если ТипЗнч(ТекущийЯзык) <> Тип("ОбъектМетаданных") Тогда + ТекущийЯзык = Метаданные.ОсновнойЯзык; + КонецЕсли; + КодЯзыка = ТекущийЯзык.КодЯзыка; + ИменаПоиска.Добавить(ИмяМакета + "_" + КодЯзыка); + Если КодЯзыка <> Метаданные.ОсновнойЯзык.КодЯзыка Тогда + ИменаПоиска.Добавить(ИмяМакета + "_" + Метаданные.ОсновнойЯзык.КодЯзыка); + КонецЕсли; + КонецЕсли; + ИменаПоиска.Добавить(ИмяМакета); + + Для Каждого ИмяПоиска Из ИменаПоиска Цикл + НайденныйМакет = СписокМакетов[ИмяПоиска]; + Если НайденныйМакет <> Неопределено Тогда + Возврат НайденныйМакет; + КонецЕсли; + КонецЦикла; + + ЭтоОбщийМакет = СтрРазделить(ИмяОбъекта, ".").Количество() = 1; + + КоллекцияМакетов = Метаданные.ОбщиеМакеты; + Если Не ЭтоОбщийМакет Тогда + ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ИмяОбъекта); + Если ОбъектМетаданных = Неопределено Тогда + ВызватьИсключение ТекстОшибки; + КонецЕсли; + КоллекцияМакетов = ОбъектМетаданных.Макеты; + КонецЕсли; + + Для Каждого ИмяПоиска Из ИменаПоиска Цикл + Если КоллекцияМакетов.Найти(ИмяПоиска) <> Неопределено Тогда + Если ЭтоОбщийМакет Тогда + Возврат ПолучитьОбщийМакет(ИмяПоиска); + Иначе + Возврат ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ИмяОбъекта).ПолучитьМакет(ИмяПоиска); + КонецЕсли; + КонецЕсли; + КонецЦикла; + + ВызватьИсключение ТекстОшибки; + +КонецФункции + +// Переключает использование пользовательского макета на макет из конфигурации. +// +// Параметры: +// ПутьКМакету - Строка - полный путь к макету в формате: +// "Документ.<ИмяДокумента>.<ИмяМакета>" +// "Обработка.<ИмяОбработки>.<ИмяМакета>" +// "ОбщийМакет.<ИмяМакета>". +// +Процедура ОтключитьПользовательскийМакет(ПутьКМакету) Экспорт + + ЧастиСтроки = СтрРазделить(ПутьКМакету, ".", Истина); + Если ЧастиСтроки.Количество() <> 2 И ЧастиСтроки.Количество() <> 3 Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Макет ""%1"" не найден.'"), ПутьКМакету); + КонецЕсли; + + ИмяМакета = ЧастиСтроки[ЧастиСтроки.ВГраница()]; + ЧастиСтроки.Удалить(ЧастиСтроки.ВГраница()); + ИмяВладельца = СтрСоединить(ЧастиСтроки, "."); + + + НаборЗаписей = РегистрыСведений.ПользовательскиеМакетыПечати.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.Объект.Установить(ИмяВладельца); + НаборЗаписей.Отбор.ИмяМакета.Установить(ИмяМакета); + НаборЗаписей.Прочитать(); + Для Каждого Запись Из НаборЗаписей Цикл + Запись.Использование = Ложь; + КонецЦикла; + + Если НаборЗаписей.Количество() > 0 Тогда + Если ОбновлениеИнформационнойБазы.ЭтоВызовИзОбработчикаОбновления() Тогда + ОбновлениеИнформационнойБазы.ЗаписатьНаборЗаписей(НаборЗаписей); Иначе - Результат = ПолучитьОбщийМакет(ПутьКОбъектуМетаданных); + УстановитьОтключениеБезопасногоРежима(Истина); + УстановитьПривилегированныйРежим(Истина); + + НаборЗаписей.Записать(); + + УстановитьПривилегированныйРежим(Ложь); + УстановитьОтключениеБезопасногоРежима(Ложь); КонецЕсли; КонецЕсли; - Если Результат = Неопределено Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Макет ""%1"" не найден. Операция прервана.'"), ПолныйПутьКМакету); - КонецЕсли; - - Возврат Результат; - -КонецФункции +КонецПроцедуры // Возвращает табличный документ по двоичным данным табличного документа. // @@ -1232,6 +1310,19 @@ Обработчик.Процедура = "УправлениеПечатью.ДобавитьРольРедактированиеПечатныхФормВПрофилиСБазовымиПравами"; Обработчик.РежимВыполнения = "Оперативно"; + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "2.4.4.10"; + Обработчик.Процедура = "УправлениеПечатью.ОчиститьПользовательскиеМакетыБезИзменений"; + Обработчик.РежимВыполнения = "Отложенно"; + Обработчик.ОчередьОтложеннойОбработки = 1; + Обработчик.Комментарий = НСтр("ru = 'Очищает пользовательские макеты, в которых нет изменений по сравнению с соответствующими поставляемыми макетами.'"); + Обработчик.Идентификатор = Новый УникальныйИдентификатор("e5b0d876-c766-40a0-a0cf-ffccc83a193f"); + Обработчик.ПроцедураПроверки = "ОбновлениеИнформационнойБазы.ДанныеОбновленыНаНовуюВерсиюПрограммы"; + Обработчик.БлокируемыеОбъекты = "РегистрСведений.ПользовательскиеМакетыПечати"; + Обработчик.ПроцедураЗаполненияДанныхОбновления = "УправлениеПечатью.ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию"; + Обработчик.ЧитаемыеОбъекты = "РегистрСведений.ПользовательскиеМакетыПечати"; + Обработчик.ИзменяемыеОбъекты = "РегистрСведений.ПользовательскиеМакетыПечати"; + КонецПроцедуры // См. РаботаВБезопасномРежимеПереопределяемый.ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам. @@ -1707,7 +1798,8 @@ // Сохраняет пользовательский макет печати в информационной базе. Процедура ЗаписатьМакет(ИмяОбъектаМетаданныхМакета, АдресМакетаВоВременномХранилище) Экспорт - Макет = ПолучитьИзВременногоХранилища(АдресМакетаВоВременномХранилище); + + ИзмененныйМакет = ПолучитьИзВременногоХранилища(АдресМакетаВоВременномХранилище); ЧастиИмени = СтрРазделить(ИмяОбъектаМетаданныхМакета, "."); ИмяМакета = ЧастиИмени[ЧастиИмени.ВГраница()]; @@ -1720,12 +1812,26 @@ ИмяВладельца = ИмяВладельца + ЧастиИмени[НомерЧасти]; КонецЦикла; + Если ЧастиИмени.Количество() = 3 Тогда + МакетИзМетаданных = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ИмяВладельца).ПолучитьМакет(ИмяМакета); + Иначе + МакетИзМетаданных = ПолучитьОбщийМакет(ИмяМакета); + КонецЕсли; + Запись = РегистрыСведений.ПользовательскиеМакетыПечати.СоздатьМенеджерЗаписи(); Запись.Объект = ИмяВладельца; Запись.ИмяМакета = ИмяМакета; - Запись.Использование = Истина; - Запись.Макет = Новый ХранилищеЗначения(Макет, Новый СжатиеДанных(9)); - Запись.Записать(); + Если МакетыРазличаются(МакетИзМетаданных, ИзмененныйМакет) Тогда + Запись.Использование = Истина; + Запись.Макет = Новый ХранилищеЗначения(ИзмененныйМакет, Новый СжатиеДанных(9)); + Запись.Записать(); + Иначе + Запись.Прочитать(); + Если Запись.Выбран() Тогда + Запись.Удалить(); + КонецЕсли; + КонецЕсли; + КонецПроцедуры Функция СтрокаОбязательныхРеквизитов(ДанныеДокумента, ТекстСообщения) @@ -1924,7 +2030,7 @@ ПечататьКомплектами = ПечататьКомплектами Или ПечатнаяФорма.ДвусторонняяПечать <> ТипДвустороннейПечати.Нет; КонецЦикла; - Если ПечататьКомплектами И ОбъектыПечати.Количество() > 0 Тогда + Если ПечататьКомплектами И ОбъектыПечати.Количество() > 1 Тогда Для Каждого ОбъектПечати Из ОбъектыПечати Цикл ИмяОбласти = ОбъектПечати.Представление; Для Каждого ПечатнаяФорма Из КоллекцияПечатныхФорм Цикл @@ -2008,7 +2114,7 @@ Если ДобавляемаяКомандаПечати.ТипыОбъектовПечати.Количество() = 0 Тогда ДобавляемаяКомандаПечати.ТипыОбъектовПечати.Добавить(Тип(СтрЗаменить(ОбъектМетаданных.ПолноеИмя(), ".", "Ссылка."))); КонецЕсли; - ЗаполнитьЗначенияСвойств(КомандыПечати.Добавить(), ДобавляемаяКомандаПечати, , "МестоРазмещения"); + ЗаполнитьЗначенияСвойств(КомандыПечати.Добавить(), ДобавляемаяКомандаПечати); КонецЦикла; КонецЦикла; КонецПроцедуры @@ -2172,4 +2278,85 @@ Возврат "АвтоМасштаб,Вывод,ВысотаСтраницы,ДвусторонняяПечать,Защита,ИмяПринтера,КодЯзыка,КоличествоЭкземпляров,МасштабПечати,ОриентацияСтраницы,ПолеСверху,ПолеСлева,ПолеСнизу,ПолеСправа,РазборПоКопиям,РазмерКолонтитулаСверху,РазмерКолонтитулаСнизу,РазмерСтраницы,ТочностьПечати,ФоноваяКартинка,ЧерноБелаяПечать,ШиринаСтраницы,ЭкземпляровНаСтранице"; КонецФункции +// Регистрирует на плане обмена ОбновлениеИнформационнойБазы объекты, +// которые необходимо обновить на новую версию. +// +// Параметры: +// Параметры - Структура - служебный параметр для передачи в процедуру ОбновлениеИнформационнойБазы.ОтметитьКОбработке. +// +Процедура ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию(Параметры) Экспорт + + ТекстЗапроса = + "ВЫБРАТЬ + | ПользовательскиеМакетыПечати.ИмяМакета КАК ИмяМакета, + | ПользовательскиеМакетыПечати.Объект КАК Объект + |ИЗ + | РегистрСведений.ПользовательскиеМакетыПечати КАК ПользовательскиеМакетыПечати"; + + Запрос = Новый Запрос(ТекстЗапроса); + ПользовательскиеМакеты = Запрос.Выполнить().Выгрузить(); + + ДополнительныеПараметры = ОбновлениеИнформационнойБазы.ДополнительныеПараметрыОтметкиОбработки(); + ДополнительныеПараметры.ЭтоНезависимыйРегистрСведений = Истина; + ДополнительныеПараметры.ПолноеИмяРегистра = "РегистрСведений.ПользовательскиеМакетыПечати"; + + ОбновлениеИнформационнойБазы.ОтметитьКОбработке(Параметры, ПользовательскиеМакеты, ДополнительныеПараметры); + +КонецПроцедуры + +Процедура ОчиститьПользовательскиеМакетыБезИзменений(Параметры) Экспорт + + Выборка = ОбновлениеИнформационнойБазы.ВыбратьИзмеренияНезависимогоРегистраСведенийДляОбработки(Параметры.Очередь, "РегистрСведений.ПользовательскиеМакетыПечати"); + Пока Выборка.Следующий() Цикл + Запись = РегистрыСведений.ПользовательскиеМакетыПечати.СоздатьМенеджерЗаписи(); + Запись.ИмяМакета = Выборка.ИмяМакета; + Запись.Объект = Выборка.Объект; + Запись.Прочитать(); + ИзмененныйМакет = Запись.Макет.Получить(); + + ЭтоОбщийМакет = СтрРазделить(Выборка.Объект, ".", Истина).Количество() < 2; + + Если ЭтоОбщийМакет Тогда + ИмяОбъектаМетаданныхМакета = "ОбщийМакет." + Выборка.ИмяМакета; + Иначе + ИмяОбъектаМетаданныхМакета = Выборка.Объект + ".Макет." + Выборка.ИмяМакета; + КонецЕсли; + + НаборЗаписей = РегистрыСведений.ПользовательскиеМакетыПечати.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.Объект.Установить(Выборка.Объект); + НаборЗаписей.Отбор.ИмяМакета.Установить(Выборка.ИмяМакета); + + Если Метаданные.НайтиПоПолномуИмени(ИмяОбъектаМетаданныхМакета) = Неопределено Тогда + ИмяСобытия = НСтр("ru = 'Печать'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Обнаружен пользовательский макет, отсутствующий в метаданных конфигурации: + |""%1"".'"), ИмяОбъектаМетаданныхМакета); + ЗаписьЖурналаРегистрации(ИмяСобытия, УровеньЖурналаРегистрации.Предупреждение, , ИмяОбъектаМетаданныхМакета, ТекстОшибки); + ОбновлениеИнформационнойБазы.ОтметитьВыполнениеОбработки(НаборЗаписей); + Продолжить; + КонецЕсли; + + Если ЭтоОбщийМакет Тогда + МакетИзМетаданных = ПолучитьОбщийМакет(Выборка.ИмяМакета); + Иначе + МакетИзМетаданных = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(Выборка.Объект).ПолучитьМакет(Выборка.ИмяМакета); + КонецЕсли; + + Если Не МакетыРазличаются(МакетИзМетаданных, ИзмененныйМакет) Тогда + ОбновлениеИнформационнойБазы.ЗаписатьДанные(НаборЗаписей); + Иначе + ОбновлениеИнформационнойБазы.ОтметитьВыполнениеОбработки(НаборЗаписей); + КонецЕсли; + КонецЦикла; + + Параметры.ОбработкаЗавершена = ОбновлениеИнформационнойБазы.ОбработкаДанныхЗавершена(Параметры.Очередь, "РегистрСведений.ПользовательскиеМакетыПечати"); + +КонецПроцедуры + +Функция МакетыРазличаются(ИсходныйМакет, ИзмененныйМакет) + + Возврат ОбщегоНазначения.КонтрольнаяСуммаСтрокой(Новый ХранилищеЗначения(ИсходныйМакет, Новый СжатиеДанных(9))) <> ОбщегоНазначения.КонтрольнаяСуммаСтрокой(Новый ХранилищеЗначения(ИзмененныйМакет, Новый СжатиеДанных(9))); + +КонецФункции + #КонецОбласти diff --git a/SSL/src/CommonModules/УправлениеПечатьюMSWordКлиент/Module.bsl b/SSL/src/CommonModules/УправлениеПечатьюMSWordКлиент/Module.bsl index 82ff846f3..7de9fb87c 100644 --- a/SSL/src/CommonModules/УправлениеПечатьюMSWordКлиент/Module.bsl +++ b/SSL/src/CommonModules/УправлениеПечатьюMSWordКлиент/Module.bsl @@ -97,10 +97,11 @@ #Если ВебКлиент Тогда ОписанияФайлов = Новый Массив; ОписанияФайлов.Добавить(Новый ОписаниеПередаваемогоФайла(ИмяВременногоФайла, ПоместитьВоВременноеХранилище(ДвоичныеДанныеМакета))); - Если НЕ ПолучитьФайлы(ОписанияФайлов, , КаталогВременныхФайлов(), Ложь) Тогда + ВременныйКаталог = УправлениеПечатьюСлужебныйКлиент.СоздатьВременныйКаталог("MSWord"); + Если НЕ ПолучитьФайлы(ОписанияФайлов, , ВременныйКаталог, Ложь) Тогда Возврат Неопределено; КонецЕсли; - ИмяВременногоФайла = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(КаталогВременныхФайлов()) + ИмяВременногоФайла; + ИмяВременногоФайла = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ВременныйКаталог) + ИмяВременногоФайла; #Иначе ИмяВременногоФайла = ПолучитьИмяВременногоФайла("DOC"); ДвоичныеДанныеМакета.Записать(ИмяВременногоФайла); @@ -623,15 +624,16 @@ Selection.Delete(); ИначеЕсли ЭтоАдресВременногоХранилища(СтрокаЗамены) Тогда Selection.Delete(); - #Если ВебКлиент Тогда - ИмяВременногоФайла = КаталогВременныхФайлов() + Строка(Новый УникальныйИдентификатор) + ".tmp"; - #Иначе - ИмяВременногоФайла = ПолучитьИмяВременногоФайла("tmp"); - #КонецЕсли + ВременныйКаталог = КаталогВременныхФайлов(); +#Если ВебКлиент Тогда + ИмяВременногоФайла = ВременныйКаталог + Строка(Новый УникальныйИдентификатор) + ".tmp"; +#Иначе + ИмяВременногоФайла = ПолучитьИмяВременногоФайла("tmp"); +#КонецЕсли ОписанияФайлов = Новый Массив; ОписанияФайлов.Добавить(Новый ОписаниеПередаваемогоФайла(ИмяВременногоФайла, СтрокаЗамены)); - Если ПолучитьФайлы(ОписанияФайлов, , КаталогВременныхФайлов(), Ложь) Тогда + Если ПолучитьФайлы(ОписанияФайлов, , ВременныйКаталог, Ложь) Тогда Selection.Range.InlineShapes.AddPicture(ИмяВременногоФайла); Иначе Selection.TypeText(""); diff --git a/SSL/src/CommonModules/УправлениеПечатьюOOWriterКлиент/Module.bsl b/SSL/src/CommonModules/УправлениеПечатьюOOWriterКлиент/Module.bsl index 0b36682e6..bb5998b13 100644 --- a/SSL/src/CommonModules/УправлениеПечатьюOOWriterКлиент/Module.bsl +++ b/SSL/src/CommonModules/УправлениеПечатьюOOWriterКлиент/Module.bsl @@ -45,8 +45,8 @@ #Если ВебКлиент Тогда Document.getCurrentController().getFrame().getContainerWindow().setVisible(Ложь); #КонецЕсли - - // Настраиваем поля по шаблону. + + // Настраиваем поля по шаблону. Если Шаблон <> Неопределено Тогда TemplateStyleName = Шаблон.Document.CurrentController.getViewCursor().PageStyleName; TemplateStyle = Шаблон.Document.StyleFamilies.getByName("PageStyles").getByName(TemplateStyleName); @@ -59,7 +59,7 @@ Style.RightMargin = TemplateStyle.RightMargin; Style.BottomMargin = TemplateStyle.BottomMargin; КонецЕсли; - + // Подготавливаем ссылку на макет. Handler = Новый Структура("ServiceManager,Desktop,Document,Тип"); Handler.ServiceManager = ServiceManager; @@ -102,10 +102,11 @@ #Если ВебКлиент Тогда ОписанияФайлов = Новый Массив; ОписанияФайлов.Добавить(Новый ОписаниеПередаваемогоФайла(ИмяВременногоФайла, ПоместитьВоВременноеХранилище(ДвоичныеДанныеШаблона))); - Если НЕ ПолучитьФайлы(ОписанияФайлов, , КаталогВременныхФайлов(), Ложь) Тогда + ВременныйКаталог = УправлениеПечатьюСлужебныйКлиент.СоздатьВременныйКаталог("OOWriter"); + Если НЕ ПолучитьФайлы(ОписанияФайлов, , ВременныйКаталог, Ложь) Тогда Возврат Неопределено; КонецЕсли; - ИмяВременногоФайла = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(КаталогВременныхФайлов()) + ИмяВременногоФайла; + ИмяВременногоФайла = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ВременныйКаталог) + ИмяВременногоФайла; #Иначе ИмяВременногоФайла = ПолучитьИмяВременногоФайла("ODT"); ДвоичныеДанныеШаблона.Записать(ИмяВременногоФайла); @@ -305,11 +306,11 @@ Если ТипЗнч(КлючЗначение) <> Тип("Массив") Тогда СтрокаЗамены = КлючЗначение.Значение; Если ЭтоАдресВременногоХранилища(СтрокаЗамены) Тогда - #Если ВебКлиент Тогда - ИмяВременногоФайла = КаталогВременныхФайлов() + Строка(Новый УникальныйИдентификатор) + ".tmp"; - #Иначе - ИмяВременногоФайла = ПолучитьИмяВременногоФайла("tmp"); - #КонецЕсли +#Если ВебКлиент Тогда + ИмяВременногоФайла = КаталогВременныхФайлов() + Строка(Новый УникальныйИдентификатор) + ".tmp"; +#Иначе + ИмяВременногоФайла = ПолучитьИмяВременногоФайла("tmp"); +#КонецЕсли ДвоичныеДанные = ПолучитьИзВременногоХранилища(СтрокаЗамены); ДвоичныеДанные.Записать(ИмяВременногоФайла); diff --git a/SSL/src/CommonModules/УправлениеПечатьюПовтИсп/Module.bsl b/SSL/src/CommonModules/УправлениеПечатьюПовтИсп/Module.bsl deleted file mode 100644 index cce2cdd3d..000000000 --- a/SSL/src/CommonModules/УправлениеПечатьюПовтИсп/Module.bsl +++ /dev/null @@ -1,9 +0,0 @@ -#Область СлужебныеПроцедурыИФункции - -Функция КомандыПечатиФормы(ИмяФормы, СписокОбъектов = Неопределено) Экспорт - Возврат УправлениеПечатью.КомандыПечатиФормы(ИмяФормы, СписокОбъектов); -КонецФункции - -#КонецОбласти - - diff --git a/SSL/src/CommonModules/УправлениеПечатьюСлужебныйКлиент/Module.bsl b/SSL/src/CommonModules/УправлениеПечатьюСлужебныйКлиент/Module.bsl index 3b17ac62b..33fe73296 100644 --- a/SSL/src/CommonModules/УправлениеПечатьюСлужебныйКлиент/Module.bsl +++ b/SSL/src/CommonModules/УправлениеПечатьюСлужебныйКлиент/Module.bsl @@ -158,8 +158,8 @@ ИнформацияОДокументе.Ссылка); НепроведенныеДокументы.Добавить(ИнформацияОДокументе.Ссылка); КонецЦикла; - ПроведенныеДокументы = ОбщегоНазначенияКлиентСервер.СократитьМассив(ДополнительныеПараметры.СписокДокументов, НепроведенныеДокументы); - ИзмененныеДокументы = ОбщегоНазначенияКлиентСервер.СократитьМассив(ДополнительныеПараметры.НепроведенныеДокументы, НепроведенныеДокументы); + ПроведенныеДокументы = ОбщегоНазначенияКлиентСервер.РазностьМассивов(ДополнительныеПараметры.СписокДокументов, НепроведенныеДокументы); + ИзмененныеДокументы = ОбщегоНазначенияКлиентСервер.РазностьМассивов(ДополнительныеПараметры.НепроведенныеДокументы, НепроведенныеДокументы); ДополнительныеПараметры.Вставить("НепроведенныеДокументы", НепроведенныеДокументы); ДополнительныеПараметры.Вставить("ПроведенныеДокументы", ПроведенныеДокументы); @@ -239,4 +239,17 @@ КонецПроцедуры +// Синхронный аналог ОбщегоНазначенияКлиент.СоздатьВременныйКаталог для обратной совместимости. +// +Функция СоздатьВременныйКаталог(Знач Расширение = "") Экспорт + + ИмяКаталога = КаталогВременныхФайлов() + "v8_" + Строка(Новый УникальныйИдентификатор); + Если Не ПустаяСтрока(Расширение) Тогда + ИмяКаталога = ИмяКаталога + "." + Расширение; + КонецЕсли; + СоздатьКаталог(ИмяКаталога); + Возврат ИмяКаталога; + +КонецФункции + #КонецОбласти diff --git a/SSL/src/CommonModules/УправлениеСвойствами/Module.bsl b/SSL/src/CommonModules/УправлениеСвойствами/Module.bsl index 045014e99..9edaf3631 100644 --- a/SSL/src/CommonModules/УправлениеСвойствами/Module.bsl +++ b/SSL/src/CommonModules/УправлениеСвойствами/Module.bsl @@ -478,6 +478,10 @@ КонецЕсли; Для Каждого СтрокаТаблицы Из ОписаниеСвойства.ЗависимостиДополнительныхРеквизитов Цикл + Если СтрокаТаблицы.ЗависимоеСвойство = "ЗаполнятьОбязательно" + И ОписаниеСвойства.ТипЗначения = Новый ОписаниеТипов("Булево") Тогда + Продолжить; + КонецЕсли; Если ОписаниеСвойства.Удалено Тогда Продолжить; КонецЕсли; @@ -655,7 +659,7 @@ Иначе Элемент.ПутьКДанным = ОписаниеСвойства.ИмяРеквизитаЗначение; КонецЕсли; - Элемент.Подсказка = ОписаниеСвойства.Свойство.Подсказка; + Элемент.Подсказка = ОписаниеСвойства.Подсказка; Элемент.УстановитьДействие("ПриИзменении", "Подключаемый_ПриИзмененииДополнительногоРеквизита"); Если Элемент.Вид = ВидПоляФормы.ПолеВвода @@ -666,11 +670,11 @@ ОписаниеСвойств.Индекс(ОписаниеСвойства)); КонецЕсли; - Если ОписаниеСвойства.Свойство.МногострочноеПолеВвода > 0 Тогда + Если ОписаниеСвойства.МногострочноеПолеВвода > 0 Тогда Если НЕ ПоляНадписей Тогда Элемент.МногострочныйРежим = Истина; КонецЕсли; - Элемент.Высота = ОписаниеСвойства.Свойство.МногострочноеПолеВвода; + Элемент.Высота = ОписаниеСвойства.МногострочноеПолеВвода; КонецЕсли; Если НЕ ПустаяСтрока(ОписаниеСвойства.ФорматСвойства) @@ -859,10 +863,12 @@ КонецПроцедуры -// Возвращает свойства владельца. +// Возвращает дополнительные реквизиты и сведения у указанного объекта. // // Параметры: // ВладелецСвойств - Ссылка - например, СправочникСсылка.Номенклатура, ДокументСсылка.ЗаказПокупателя, ... +// - Объект - например, СправочникОбъект.Номенклатура, ДокументОбъект.ЗаказПокупателя, ... +// - ДанныеФормыСтруктура - коллекция по типу объекта владельца свойств. // ПолучатьДопРеквизиты - Булево - в результат включать дополнительные реквизиты. // ПолучатьДопСведения - Булево - в результат включать дополнительные сведения. // @@ -870,7 +876,7 @@ // Массив - значения // * ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения - если есть. // -Функция ПолучитьСписокСвойств(ВладелецСвойств, ПолучатьДопРеквизиты = Истина, ПолучатьДопСведения = Истина) Экспорт +Функция СвойстваОбъекта(ВладелецСвойств, ПолучатьДопРеквизиты = Истина, ПолучатьДопСведения = Истина) Экспорт Если НЕ (ПолучатьДопРеквизиты ИЛИ ПолучатьДопСведения) Тогда Возврат Новый Массив; @@ -958,7 +964,7 @@ КонецЕсли; Если Свойства = Неопределено Тогда - Свойства = ПолучитьСписокСвойств(ВладелецСвойств, ПолучатьДопРеквизиты, ПолучатьДопСведения); + Свойства = СвойстваОбъекта(ВладелецСвойств, ПолучатьДопРеквизиты, ПолучатьДопСведения); КонецЕсли; ИмяОбъектаСоСвойствами = ОбщегоНазначения.ИмяТаблицыПоСсылке(ВладелецСвойств); @@ -1065,7 +1071,7 @@ // Функция ПроверитьСвойствоУОбъекта(ВладелецСвойств, Свойство) Экспорт - МассивСвойств = ПолучитьСписокСвойств(ВладелецСвойств); + МассивСвойств = СвойстваОбъекта(ВладелецСвойств); Если МассивСвойств.Найти(Свойство) = Неопределено Тогда Возврат Ложь; @@ -1075,48 +1081,6 @@ КонецФункции -// Возвращает перечисляемые значения указанного свойства. -// -// Параметры: -// Свойство - ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения - свойство для -// которого нужно получить перечисляемые значения. -// -// Возвращаемое значение: -// Массив - значения: -// * СправочникСсылка.ЗначенияСвойствОбъектов, СправочникСсылка.ЗначенияСвойствОбъектовИерархия - значения -// свойства, если есть. -// -Функция ПолучитьСписокЗначенийСвойств(Свойство) Экспорт - - ТипЗначения = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Свойство, "ТипЗначения"); - - Если ТипЗначения.СодержитТип(Тип("СправочникСсылка.ЗначенияСвойствОбъектовИерархия")) Тогда - ТекстЗапроса = - "ВЫБРАТЬ - | Ссылка КАК Ссылка - |ИЗ - | Справочник.ЗначенияСвойствОбъектовИерархия КАК ЗначенияСвойствОбъектов - |ГДЕ - | ЗначенияСвойствОбъектов.Владелец = &Свойство"; - Иначе - ТекстЗапроса = - "ВЫБРАТЬ - | Ссылка КАК Ссылка - |ИЗ - | Справочник.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов - |ГДЕ - | ЗначенияСвойствОбъектов.Владелец = &Свойство"; - КонецЕсли; - - Запрос = Новый Запрос; - Запрос.Текст = ТекстЗапроса; - Запрос.Параметры.Вставить("Свойство", Свойство); - Результат = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); - - Возврат Результат; - -КонецФункции - // Записывает дополнительные реквизиты и сведения владельцу свойств. // Изменения происходят в транзакции. // @@ -1146,7 +1110,7 @@ ЕстьДопРеквизиты = ТаблицаДопРеквизитов.Количество() > 0; ЕстьДопСведения = ТаблицаДопСведений.Количество() > 0; - МассивСвойств = ПолучитьСписокСвойств(ВладелецСвойств); + МассивСвойств = СвойстваОбъекта(ВладелецСвойств); МассивДопРеквизитов = Новый Массив; МассивДопСведений = Новый Массив; @@ -1309,7 +1273,11 @@ // ИмяНабораСвойств - Строка - Имя предопределенного набора свойств. // Параметры - Структура - см. описание функции СтруктураПараметровНабораСвойств. // -Процедура УстановитьПараметрыНабораСвойств(ИмяНабораСвойств, Параметры) Экспорт +Процедура УстановитьПараметрыНабораСвойств(ИмяНабораСвойств, Параметры = Неопределено) Экспорт + + Если Параметры = Неопределено Тогда + Параметры = СтруктураПараметровНабораСвойств(); + КонецЕсли; ЗаписатьОбъект = Ложь; НаборСвойств = Справочники.НаборыДополнительныхРеквизитовИСведений[ИмяНабораСвойств]; @@ -1372,6 +1340,39 @@ КонецФункции +// Устарела. Следует использовать СвойстваОбъекта. +// Возвращает свойства владельца. +// +// Параметры: +// ВладелецСвойств - Ссылка - например, СправочникСсылка.Номенклатура, ДокументСсылка.ЗаказПокупателя, ... +// ПолучатьДопРеквизиты - Булево - в результат включать дополнительные реквизиты. +// ПолучатьДопСведения - Булево - в результат включать дополнительные сведения. +// +// Возвращаемое значение: +// Массив - значения +// * ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения - если есть. +// +Функция ПолучитьСписокСвойств(ВладелецСвойств, ПолучатьДопРеквизиты = Истина, ПолучатьДопСведения = Истина) Экспорт + Возврат СвойстваОбъекта(ВладелецСвойств, ПолучатьДопРеквизиты, ПолучатьДопСведения); +КонецФункции + +// Возвращает перечисляемые значения указанного свойства. +// +// Параметры: +// Свойство - ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения - свойство для +// которого нужно получить перечисляемые значения. +// +// Возвращаемое значение: +// Массив - значения: +// * СправочникСсылка.ЗначенияСвойствОбъектов, СправочникСсылка.ЗначенияСвойствОбъектовИерархия - значения +// свойства, если есть. +// +Функция ПолучитьСписокЗначенийСвойств(Свойство) Экспорт + + Возврат УправлениеСвойствамиСлужебный.ДополнительныеЗначенияСвойства(Свойство); + +КонецФункции + #КонецОбласти #КонецОбласти @@ -1498,7 +1499,7 @@ // Добавление команды формы, если установлена роль "ДобавлениеИзменениеДополнительныхРеквизитовИСведений" или это // полноправный пользователь. - Если Пользователи.РолиДоступны("ДобавлениеИзменениеДополнительныхРеквизитовИСведений") Тогда + Если ПравоДоступа("Изменение", Метаданные.Справочники.НаборыДополнительныхРеквизитовИСведений) Тогда // Добавление команды. Команда = Форма.Команды.Добавить("РедактироватьСоставДополнительныхРеквизитов"); Команда.Заголовок = НСтр("ru = 'Изменить состав дополнительных реквизитов'"); diff --git a/SSL/src/CommonModules/УправлениеСвойствамиПереопределяемый/Module.bsl b/SSL/src/CommonModules/УправлениеСвойствамиПереопределяемый/Module.bsl index d7c1246b3..e956fb318 100644 --- a/SSL/src/CommonModules/УправлениеСвойствамиПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/УправлениеСвойствамиПереопределяемый/Module.bsl @@ -68,8 +68,3 @@ #КонецОбласти -#Область СлужебныеПроцедурыИФункции - - - -#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/УправлениеСвойствамиСлужебный/Module.bsl b/SSL/src/CommonModules/УправлениеСвойствамиСлужебный/Module.bsl index 113c932f4..de26d2028 100644 --- a/SSL/src/CommonModules/УправлениеСвойствамиСлужебный/Module.bsl +++ b/SSL/src/CommonModules/УправлениеСвойствамиСлужебный/Module.bsl @@ -72,7 +72,7 @@ Если МетаданныеСправочника.ТабличныеЧасти.Найти("ДополнительныеРеквизиты") <> Неопределено Тогда Позиция = ИнформацияПоКолонкам.Количество() + 1; - Свойства = УправлениеСвойствами.ПолучитьСписокСвойств(Справочники[МетаданныеСправочника.Имя].ПустаяСсылка()); + Свойства = УправлениеСвойствами.СвойстваОбъекта(Справочники[МетаданныеСправочника.Имя].ПустаяСсылка()); ДополнительныеСведения = Новый Массив; Для каждого Свойство Из Свойства Цикл @@ -90,7 +90,7 @@ СтрокаИнфоПроКолонки.Ширина = 30; Позиция = Позиция + 1; - Значения = УправлениеСвойствами.ПолучитьСписокЗначенийСвойств(Свойство); + Значения = ДополнительныеЗначенияСвойства(Свойство); Если Значения.Количество() > 0 Тогда СтрокаИнфоПроКолонки.Примечание = СтрокаИнфоПроКолонки.Примечание + Символы.ПС + НСтр("ru = 'Варианты значений:'") + Символы.ПС; Для каждого Значение Из Значения Цикл @@ -117,7 +117,7 @@ СтрокаИнфоПроКолонки.Ширина = 30; Позиция = Позиция + 1; - Значения = УправлениеСвойствами.ПолучитьСписокЗначенийСвойств(Свойство); + Значения = ДополнительныеЗначенияСвойства(Свойство); Если Значения.Количество() > 0 Тогда СтрокаИнфоПроКолонки.Примечание = СтрокаИнфоПроКолонки.Примечание + Символы.ПС + НСтр("ru = 'Варианты значений:'") + Символы.ПС; Для каждого Значение Из Значения Цикл @@ -538,6 +538,7 @@ | ВсеСвойства.Удалено КАК Удалено, | ДополнительныеРеквизитыИСведения.Доступен, | ДополнительныеРеквизитыИСведения.Виден, + | ДополнительныеРеквизитыИСведения.Подсказка, | ДополнительныеРеквизитыИСведения.ВыводитьВВидеГиперссылки, | ДополнительныеРеквизитыИСведения.ЗависимостиДополнительныхРеквизитов.( | ЗависимоеСвойство, @@ -567,20 +568,22 @@ ОписаниеСвойств.Колонки.Добавить("Значение"); // Удаление дублей свойств в нижестоящих наборах свойств. - Индекс = ОписаниеСвойств.Количество()-1; - - Пока Индекс >= 0 Цикл - Строка = ОписаниеСвойств[Индекс]; - НайденнаяСтрока = ОписаниеСвойств.Найти(Строка.Свойство); + Если Наборы.Количество() > 1 Тогда + Индекс = ОписаниеСвойств.Количество()-1; - Если НайденнаяСтрока <> Неопределено - И НайденнаяСтрока <> Строка Тогда + Пока Индекс >= 0 Цикл + Строка = ОписаниеСвойств[Индекс]; + НайденнаяСтрока = ОписаниеСвойств.Найти(Строка.Свойство, "Свойство"); - ОписаниеСвойств.Удалить(Индекс); - КонецЕсли; - - Индекс = Индекс-1; - КонецЦикла; + Если НайденнаяСтрока <> Неопределено + И НайденнаяСтрока <> Строка Тогда + + ОписаниеСвойств.Удалить(Индекс); + КонецЕсли; + + Индекс = Индекс-1; + КонецЦикла; + КонецЕсли; // Заполнение значений свойств. Для Каждого Строка Из ДополнительныеСвойстваОбъекта Цикл @@ -647,7 +650,7 @@ КонецЕсли; СвойстваСсылки = ОбщегоНазначения.ЗначенияРеквизитовОбъекта( - Ссылка, "ПометкаУдаления, ЭтоГруппа, Предопределенный, Родитель"); + Ссылка, "ПометкаУдаления, ЭтоГруппа, Предопределенный, Родитель, ИмяПредопределенныхДанных"); Если УчитыватьПометкуУдаления И СвойстваСсылки.ПометкаУдаления Тогда Возврат Неопределено; @@ -664,7 +667,11 @@ СсылкаПредопределенного = СвойстваСсылки.Родитель; КонецЕсли; - ИмяПредопределенного = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СсылкаПредопределенного, "ИмяПредопределенныхДанных"); + Если Ссылка <> СсылкаПредопределенного Тогда + ИмяПредопределенного = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СсылкаПредопределенного, "ИмяПредопределенныхДанных"); + Иначе + ИмяПредопределенного = СвойстваСсылки.ИмяПредопределенныхДанных; + КонецЕсли; Позиция = СтрНайти(ИмяПредопределенного, "_"); @@ -1035,6 +1042,48 @@ КонецПроцедуры +// Возвращает перечисляемые значения указанного свойства. +// +// Параметры: +// Свойство - ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения - свойство для +// которого нужно получить перечисляемые значения. +// +// Возвращаемое значение: +// Массив - значения: +// * СправочникСсылка.ЗначенияСвойствОбъектов, СправочникСсылка.ЗначенияСвойствОбъектовИерархия - значения +// свойства, если есть. +// +Функция ДополнительныеЗначенияСвойства(Свойство) Экспорт + + ТипЗначения = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Свойство, "ТипЗначения"); + + Если ТипЗначения.СодержитТип(Тип("СправочникСсылка.ЗначенияСвойствОбъектовИерархия")) Тогда + ТекстЗапроса = + "ВЫБРАТЬ + | Ссылка КАК Ссылка + |ИЗ + | Справочник.ЗначенияСвойствОбъектовИерархия КАК ЗначенияСвойствОбъектов + |ГДЕ + | ЗначенияСвойствОбъектов.Владелец = &Свойство"; + Иначе + ТекстЗапроса = + "ВЫБРАТЬ + | Ссылка КАК Ссылка + |ИЗ + | Справочник.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов + |ГДЕ + | ЗначенияСвойствОбъектов.Владелец = &Свойство"; + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.Текст = ТекстЗапроса; + Запрос.Параметры.Вставить("Свойство", Свойство); + Результат = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); + + Возврат Результат; + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Вспомогательные процедуры и функции. diff --git a/SSL/src/CommonModules/УправлениеЭлектроннойПочтой/Module.bsl b/SSL/src/CommonModules/УправлениеЭлектроннойПочтой/Module.bsl index 82586ac55..2b34f2926 100644 --- a/SSL/src/CommonModules/УправлениеЭлектроннойПочтой/Module.bsl +++ b/SSL/src/CommonModules/УправлениеЭлектроннойПочтой/Module.bsl @@ -224,7 +224,8 @@ Попытка - Если ПротоколПодключения = ПротоколИнтернетПочты.IMAP Тогда + Если ПротоколПодключения = ПротоколИнтернетПочты.IMAP + И Не СерверИсходящейПочтыНеТребуетДополнительнойОтправкиПоIMAP(ВыборкаПисьма.СерверИсходящейПочты) Тогда Взаимодействия.ВыполнитьОтправкуПисьма(ПисьмоОбъект, Соединение, ПараметрыПисьма, "IMAP"); ИдентификаторСообщенияОтправкаIMAP = ПараметрыПисьма.ИдентификаторСообщения; КонецЕсли; @@ -427,12 +428,13 @@ Запрос = Новый Запрос; Запрос.Текст = " |ВЫБРАТЬ РАЗРЕШЕННЫЕ - | УчетныеЗаписиЭлектроннойПочты.Ссылка КАК УчетнаяЗапись, - | ЭлектронноеПисьмоИсходящее.Ссылка, - | ПРЕДСТАВЛЕНИЕ(ЭлектронноеПисьмоИсходящее.Ссылка) КАК ПредставлениеПисьма, - | ЭлектронноеПисьмоИсходящее.УдалятьПослеОтправки, - | ЕСТЬNULL(ПапкиЭлектронныхПисем.ПредопределеннаяПапка, ИСТИНА) КАК ТребуетсяОпределениеПапки, - | ЕСТЬNULL(НепринятыеКОбработкеПочтовымСерверомИсходящиеПисьма.КоличествоПопыток, 0) КАК КоличествоПопыток + | УчетныеЗаписиЭлектроннойПочты.Ссылка КАК УчетнаяЗапись, + | ЭлектронноеПисьмоИсходящее.Ссылка КАК Ссылка, + | ПРЕДСТАВЛЕНИЕ(ЭлектронноеПисьмоИсходящее.Ссылка) КАК ПредставлениеПисьма, + | ЭлектронноеПисьмоИсходящее.УдалятьПослеОтправки КАК УдалятьПослеОтправки, + | ЕСТЬNULL(ПапкиЭлектронныхПисем.ПредопределеннаяПапка, ИСТИНА) КАК ТребуетсяОпределениеПапки, + | ЕСТЬNULL(НепринятыеКОбработкеПочтовымСерверомИсходящиеПисьма.КоличествоПопыток, 0) КАК КоличествоПопыток, + | УчетныеЗаписиЭлектроннойПочты.СерверИсходящейПочты КАК СерверИсходящейПочты |ИЗ | Документ.ЭлектронноеПисьмоИсходящее КАК ЭлектронноеПисьмоИсходящее | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.УчетныеЗаписиЭлектроннойПочты КАК УчетныеЗаписиЭлектроннойПочты @@ -569,7 +571,8 @@ Попытка - Если ПротоколПодключения = ПротоколИнтернетПочты.IMAP Тогда + Если ПротоколПодключения = ПротоколИнтернетПочты.IMAP + И НЕ СерверИсходящейПочтыНеТребуетДополнительнойОтправкиПоIMAP(ВыборкаПисьма.СерверИсходящейПочты) Тогда Взаимодействия.ВыполнитьОтправкуПисьма(ПисьмоОбъект, Соединение, ПараметрыПисьма, "IMAP"); ИдентификаторСообщенияОтправкаIMAP = ПараметрыПисьма.ИдентификаторСообщения; КонецЕсли; @@ -690,9 +693,6 @@ Результат.Вставить("ВсеАдресатыПисьмаОтвергнутыСервером",Ложь); Результат.Вставить("ПредставлениеОшибочныхАдресатов",""); - ЭтоПроблемаОтвергнутыхСерверомПочтовыхАдресов = Ложь; - ВсеАдресатыПисьмаОтвергнутыСервером = Ложь; - КоличествоОшибочныхПолучателей = ОшибочныеПолучатели.Количество(); Если КоличествоОшибочныхПолучателей > 0 Тогда @@ -738,7 +738,6 @@ КонецФункции - // Заполняет ИнтернетПочтовыеАдреса в объекте ИнтернетПочтовоеСообщение по переданной таблице адресов. // // Параметры: @@ -911,7 +910,6 @@ Исключение ОтменитьТранзакцию(); - ЕстьОшибки = Истина; ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'При получении письма %1 от %2, отправленное c адреса %3 произошла ошибка |%4'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), @@ -979,8 +977,6 @@ ПараметрыОтбора.Вставить("Удаленные", Ложь); КонецЕсли; - МассивИдентификаторовДляЗагрузки = Новый Массив; - Попытка ЗаголовкиПисемДляЗагрузки = Почта.ПолучитьЗаголовки(ПараметрыОтбора); Исключение @@ -1819,7 +1815,7 @@ | И НЕ(КонтактнаяИнформация.Ссылка.ПометкаУдаления) |"; - МассивОписанияТиповКонтактов = ВзаимодействияКлиентСервер.МассивОписанияВозможныхКонтактов(); + МассивОписанияТиповКонтактов = ВзаимодействияКлиентСервер.ОписанияКонтактов(); Для каждого ЭлементМассиваОписания Из МассивОписанияТиповКонтактов Цикл Если ЭлементМассиваОписания.Имя = "Пользователи" Тогда @@ -1917,7 +1913,7 @@ | Адреса.Контакт |ИЗ | (" + ?(ТипЗнч(Письмо) = Тип("ДокументСсылка.ЭлектронноеПисьмоИсходящее"), "", "ВЫБРАТЬ - | ПОДСТРОКА(ЭлектронноеПисьмоВходящее.ОтправительАдрес, 1, 100) КАК Адрес, + | ЭлектронноеПисьмоВходящее.ОтправительАдрес КАК Адрес, | ЭлектронноеПисьмоВходящее.ОтправительКонтакт КАК Контакт | ИЗ | Документ.ЭлектронноеПисьмоВходящее КАК ЭлектронноеПисьмоВходящее @@ -1952,9 +1948,8 @@ | ИЗ | Документ.ЭлектронноеПисьмоВходящее.ПолучателиОтвета КАК Получатели | ГДЕ - | Получатели.Ссылка = &Письмо) КАК Адреса - |ГДЕ - | (НЕ Адреса.Контакт ЕСТЬ NULL )"; + | Получатели.Ссылка = &Письмо) КАК Адреса"; + Запрос.УстановитьПараметр("Письмо", Письмо); Если ТипЗнч(Письмо) = Тип("ДокументСсылка.ЭлектронноеПисьмоИсходящее") Тогда @@ -2415,14 +2410,9 @@ УстановитьПривилегированныйРежим(Истина); - ДанныеПрисоединенныхФайловПисьма = ВзаимодействияПереопределяемый.ДанныеОбъектаМетаданныхПрисоединенныхФайловПисьма(Письмо); - Если ДанныеПрисоединенныхФайловПисьма = Неопределено Тогда - ИмяОбъектаМетаданных = ПолучитьИмяОбъектаМетаданныхПрисоединенныхФайловПисьма(Письмо); - ВладелецФайлов = Письмо; - Иначе - ИмяОбъектаМетаданных = ДанныеПрисоединенныхФайловПисьма.ИмяСправочникаПрисоединенныеФайлы; - ВладелецФайлов = ДанныеПрисоединенныхФайловПисьма.Владелец; - КонецЕсли; + ДанныеПрисоединенныхФайловПисьма = Взаимодействия.ДанныеПрисоединенныхФайловПисьма(Письмо); + ИмяОбъектаМетаданных = ДанныеПрисоединенныхФайловПисьма.ИмяСправочникаПрисоединенныхФайлов; + ВладелецФайлов = ДанныеПрисоединенныхФайловПисьма.ВладелецФайлов; Если ИмяОбъектаМетаданных = Неопределено Тогда Возврат Новый ТаблицаЗначений; @@ -2501,7 +2491,7 @@ Если ПустаяСтрока(ИмяБезРасширения) Тогда - ИмяФайлаБезРасширения = + ИмяБезРасширения = НСтр("ru = 'Вложение без имени'") + ?(КоличествоПустыхИменВоВложениях = 0, ""," " + Строка(КоличествоПустыхИменВоВложениях + 1)); КоличествоПустыхИменВоВложениях = КоличествоПустыхИменВоВложениях + 1; @@ -2559,7 +2549,7 @@ УстановитьПривилегированныйРежим(Истина); - ИмяОбъектаМетаданных = ПолучитьИмяОбъектаМетаданныхПрисоединенныхФайловПисьма(Письмо); + ИмяОбъектаМетаданных = ИмяОбъектаМетаданныхПрисоединенныхФайловПисьма(Письмо); Если ИмяОбъектаМетаданных = Неопределено Тогда Возврат; КонецЕсли; @@ -2591,7 +2581,7 @@ // Процедура УдалитьВложенияУПисьма(Письмо) Экспорт - ИмяОбъектаМетаданных = ПолучитьИмяОбъектаМетаданныхПрисоединенныхФайловПисьма(Письмо); + ИмяОбъектаМетаданных = ИмяОбъектаМетаданныхПрисоединенныхФайловПисьма(Письмо); Если ИмяОбъектаМетаданных = Неопределено Тогда Возврат; КонецЕсли; @@ -2657,14 +2647,18 @@ Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1 - | УчетныеЗаписиЭлектроннойПочты.Ссылка + | УчетныеЗаписиЭлектроннойПочты.Ссылка КАК Ссылка |ИЗ | РегистрСведений.НастройкиУчетныхЗаписейЭлектроннойПочты КАК НастройкиУчетныхЗаписейЭлектроннойПочты | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.УчетныеЗаписиЭлектроннойПочты КАК УчетныеЗаписиЭлектроннойПочты | ПО НастройкиУчетныхЗаписейЭлектроннойПочты.УчетнаяЗаписьЭлектроннойПочты = УчетныеЗаписиЭлектроннойПочты.Ссылка |ГДЕ | УчетныеЗаписиЭлектроннойПочты.ИспользоватьДляОтправки - | И НЕ ЕСТЬNULL(НастройкиУчетныхЗаписейЭлектроннойПочты.НеИспользоватьВоВстроенномПочтовомКлиенте, ЛОЖЬ)"; + | И НЕ ЕСТЬNULL(НастройкиУчетныхЗаписейЭлектроннойПочты.НеИспользоватьВоВстроенномПочтовомКлиенте, ЛОЖЬ) + | И (УчетныеЗаписиЭлектроннойПочты.ВладелецУчетнойЗаписи = &ТекущийПользователь + | ИЛИ УчетныеЗаписиЭлектроннойПочты.ВладелецУчетнойЗаписи = ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка))"; + + Запрос.УстановитьПараметр("ТекущийПользователь", Пользователи.АвторизованныйПользователь()); РезультатЗапроса = Запрос.Выполнить(); Если РезультатЗапроса.Пустой() Тогда @@ -2763,6 +2757,15 @@ //////////////////////////////////////////////////////////////////////////////// // Прочее +Функция СерверИсходящейПочтыНеТребуетДополнительнойОтправкиПоIMAP(ИмяСервераИсходящейПочты) Экспорт + + МассивСерверовИсключений = Новый Массив; + МассивСерверовИсключений.Добавить("smtp.gmail.com"); + + Возврат МассивСерверовИсключений.Найти(ИмяСервераИсходящейПочты) <> Неопределено; + +КонецФункции + Функция ПолучитьВажностьЭлектронногоПисьма(Важность) Если (Важность = ВажностьИнтернетПочтовогоСообщения.Высокая) @@ -2792,8 +2795,6 @@ Возврат ДокументHTML.Тело.ТекстовоеСодержимое; - Возврат ""; - КонецФункции Функция СформироватьТекстУведомленияОПрочтении(Выборка) @@ -2825,19 +2826,11 @@ КонецФункции Функция ПолучитьДатуСтрокойСоСмещениемGMT(Дата) - - Запрос = Новый Запрос("ВЫБРАТЬ - | РАЗНОСТЬДАТ(&УниверсальноеВремя, &МестноеВремя, МИНУТА) КАК РазностьДат"); - Запрос.УстановитьПараметр("МестноеВремя",Дата); - Запрос.УстановитьПараметр("УниверсальноеВремя",УниверсальноеВремя(Дата)); - Выборка = Запрос.Выполнить().Выбрать(); - Выборка.Следующий(); - - СмещениеВремениВМинутах = Выборка.РазностьДат; - ЧасыСмещения = Цел(СмещениеВремениВМинутах/60); + СмещениеВремениВСекундах = УниверсальноеВремя(Дата) - Дата; + ЧасыСмещения = Цел(СмещениеВремениВСекундах/3600); СтрокаЧасыСмещения = ?(ЧасыСмещения > 0,"+","") + Формат(ЧасыСмещения,"ЧЦ=2; ЧДЦ=0; ЧН=00; ЧВН="); - МинутыСмещения = СмещениеВремениВМинутах%60; + МинутыСмещения = СмещениеВремениВСекундах%3600; Если МинутыСмещения < 0 Тогда МинутыСмещения = + МинутыСмещения; КонецЕсли; @@ -2896,27 +2889,48 @@ Запрос = Новый Запрос; Запрос.Текст = - "ВЫБРАТЬ РАЗРЕШЕННЫЕ + "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1 + | ЭлектронноеПисьмоИсходящее.УчетнаяЗапись КАК УчетнаяЗапись + |ПОМЕСТИТЬ ПоследняяИспользовавшаясяУчетная + |ИЗ + | Документ.ЭлектронноеПисьмоИсходящее КАК ЭлектронноеПисьмоИсходящее + |ГДЕ + | ЭлектронноеПисьмоИсходящее.СтатусПисьма <> ЗНАЧЕНИЕ(Перечисление.СтатусыИсходящегоЭлектронногоПисьма.Черновик) + | И НЕ ЭлектронноеПисьмоИсходящее.ПометкаУдаления + | И ЭлектронноеПисьмоИсходящее.Автор = &ТекущийПользователь + | + |УПОРЯДОЧИТЬ ПО + | ЭлектронноеПисьмоИсходящее.Дата УБЫВ + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ РАЗРЕШЕННЫЕ | УчетныеЗаписиЭлектроннойПочты.Ссылка КАК УчетнаяЗапись, - | УчетныеЗаписиЭлектроннойПочты.ИмяПользователя, - | УчетныеЗаписиЭлектроннойПочты.АдресЭлектроннойПочты, + | УчетныеЗаписиЭлектроннойПочты.ИмяПользователя КАК ИмяПользователя, + | УчетныеЗаписиЭлектроннойПочты.АдресЭлектроннойПочты КАК АдресЭлектроннойПочты, | ЕСТЬNULL(НастройкиУчетныхЗаписейЭлектроннойПочты.УдалятьПисьмаПослеОтправки, ЛОЖЬ) КАК УдалятьПослеОтправки, | ВЫБОР + | КОГДА НЕ ПоследняяИспользовавшаясяУчетная.УчетнаяЗапись ЕСТЬ NULL + | ТОГДА 0 | КОГДА УчетныеЗаписиЭлектроннойПочты.ВладелецУчетнойЗаписи <> ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка) | И УчетныеЗаписиЭлектроннойПочты.ВладелецУчетнойЗаписи = &ТекущийПользователь - | ТОГДА 0 + | ТОГДА 1 | КОГДА УчетныеЗаписиЭлектроннойПочты.ВладелецУчетнойЗаписи = ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка) | И НастройкиУчетныхЗаписейЭлектроннойПочты.ОтветственныйЗаОбработкуПисем = &ТекущийПользователь - | ТОГДА 1 + | ТОГДА 2 | ИНАЧЕ 2 | КОНЕЦ КАК ЗначениеУпорядочивания |ИЗ | Справочник.УчетныеЗаписиЭлектроннойПочты КАК УчетныеЗаписиЭлектроннойПочты | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиУчетныхЗаписейЭлектроннойПочты КАК НастройкиУчетныхЗаписейЭлектроннойПочты | ПО (НастройкиУчетныхЗаписейЭлектроннойПочты.УчетнаяЗаписьЭлектроннойПочты = УчетныеЗаписиЭлектроннойПочты.Ссылка) + | ЛЕВОЕ СОЕДИНЕНИЕ ПоследняяИспользовавшаясяУчетная КАК ПоследняяИспользовавшаясяУчетная + | ПО ПоследняяИспользовавшаясяУчетная.УчетнаяЗапись = УчетныеЗаписиЭлектроннойПочты.Ссылка |ГДЕ | УчетныеЗаписиЭлектроннойПочты.ИспользоватьДляОтправки | И НЕ ЕСТЬNULL(НастройкиУчетныхЗаписейЭлектроннойПочты.НеИспользоватьВоВстроенномПочтовомКлиенте, ЛОЖЬ) + | И (УчетныеЗаписиЭлектроннойПочты.ВладелецУчетнойЗаписи = &ТекущийПользователь + | ИЛИ УчетныеЗаписиЭлектроннойПочты.ВладелецУчетнойЗаписи = ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка)) | |УПОРЯДОЧИТЬ ПО | ЗначениеУпорядочивания"; @@ -2985,7 +2999,7 @@ // // Возвращаемое значение: // Строка,Неопределено - имя объекта метаданных присоединенных файлов электронного письма. -Функция ПолучитьИмяОбъектаМетаданныхПрисоединенныхФайловПисьма(Письмо) Экспорт +Функция ИмяОбъектаМетаданныхПрисоединенныхФайловПисьма(Письмо) Экспорт Если ТипЗнч(Письмо) = Тип("ДокументСсылка.ЭлектронноеПисьмоИсходящее") Тогда diff --git a/SSL/src/CommonModules/ФайловыеФункцииСлужебныйВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/ФайловыеФункцииСлужебныйВМоделиСервиса/Module.bsl index 90e5c4b0e..55a3c51b1 100644 --- a/SSL/src/CommonModules/ФайловыеФункцииСлужебныйВМоделиСервиса/Module.bsl +++ b/SSL/src/CommonModules/ФайловыеФункцииСлужебныйВМоделиСервиса/Module.bsl @@ -87,12 +87,6 @@ Обработчик.Процедура = "ФайловыеФункцииСлужебныйВМоделиСервиса.ОчиститьРегистрСведенийУдалитьОчередьИзвлеченияТекста"; Обработчик.РежимВыполнения = "Оперативно"; - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "2.4.3.89"; - Обработчик.ОбщиеДанные = Ложь; - Обработчик.Процедура = "ФайловыеФункцииСлужебныйВМоделиСервиса.УдалитьУстаревшиеОбработчикиОбновления"; - Обработчик.РежимВыполнения = "Оперативно"; - КонецПроцедуры #КонецОбласти @@ -107,7 +101,7 @@ // Процедура ОбработатьОчередьИзвлеченияТекста() Экспорт - Если НЕ РаботаВМоделиСервисаПовтИсп.РазделениеВключено() Тогда + Если НЕ РаботаВМоделиСервиса.РазделениеВключено() Тогда Возврат; КонецЕсли; @@ -182,7 +176,7 @@ // Процедура ПеренестиОчередьИзвлеченияТекстаВоВспомогательныеДанные() Экспорт - Если Не РаботаВМоделиСервисаПовтИсп.РазделениеВключено() Тогда + Если Не РаботаВМоделиСервиса.РазделениеВключено() Тогда Возврат; КонецЕсли; @@ -242,12 +236,4 @@ КонецПроцедуры -// Удаление устаревшего отложенного обработчика обновления. -// -Процедура УдалитьУстаревшиеОбработчикиОбновления() Экспорт - - ОбновлениеИнформационнойБазы.УдалитьОтложенныйОбработчикИзОчереди("РегистрыСведений.УдалитьОчередьИзвлеченияТекста.ОбработатьДанныеДляПереходаНаНовуюВерсию"); - -КонецПроцедуры - #КонецОбласти diff --git a/SSL/src/CommonModules/ЦентрМониторинга/Module.bsl b/SSL/src/CommonModules/ЦентрМониторинга/Module.bsl index d469782a0..507d266fb 100644 --- a/SSL/src/CommonModules/ЦентрМониторинга/Module.bsl +++ b/SSL/src/CommonModules/ЦентрМониторинга/Module.bsl @@ -28,6 +28,28 @@ КонецПроцедуры +// Возвращает строковое представление идентификатора информационной базы в центре мониторинга. +// +Функция ИдентификаторИнформационнойБазы() Экспорт + + ПараметрыДляПолучения = Новый Структура; + ПараметрыДляПолучения.Вставить("ВключитьЦентрМониторинга"); + ПараметрыДляПолучения.Вставить("ЦентрОбработкиИнформацииОПрограмме"); + ПараметрыДляПолучения.Вставить("ОзнакомительныйПакетОтправлен"); + ПараметрыДляПолучения.Вставить("НомерКрайнегоПакета"); + ПараметрыДляПолучения.Вставить("ИдентификаторИнформационнойБазы"); + ПараметрыЦентраМониторинга = ЦентрМониторингаСлужебный.ПолучитьПараметрыЦентраМониторинга(ПараметрыДляПолучения); + + Если (ПараметрыЦентраМониторинга.ВключитьЦентрМониторинга ИЛИ ПараметрыЦентраМониторинга.ЦентрОбработкиИнформацииОПрограмме) + И ПараметрыЦентраМониторинга.ОзнакомительныйПакетОтправлен Тогда + Возврат Строка(ПараметрыЦентраМониторинга.ИдентификаторИнформационнойБазы); + КонецЕсли; + + // Если данные никогда не отправляли, тогда вернем пустую строку. + Возврат ""; + +КонецФункции + #КонецОбласти #Область ПрограммныйИнтерфейсБизнесСтатистики @@ -41,7 +63,7 @@ // Разделитель - Строка - разделитель значений в ИмяОперации, если разделитель не точка. // Процедура ЗаписатьОперациюБизнесСтатистики(ИмяОперации, Значение, Комментарий = Неопределено, Разделитель = ".") Экспорт - Если ЦентрМониторингаВызовСервераПовтИсп.ЗаписыватьОперацииБизнесСтатистики() Тогда + Если ЗаписыватьОперацииБизнесСтатистики() Тогда РегистрыСведений.БуферОперацийСтатистики.ЗаписатьОперациюБизнесСтатистики(ИмяОперации, Значение, Комментарий, Разделитель); КонецЕсли; КонецПроцедуры @@ -98,6 +120,19 @@ КонецПроцедуры + +// Возвращает состояние регистрации бизнес-статистики. +// Возвращаемое значение: +// Булево - регистрировать бизнес статистику. +// +Функция ЗаписыватьОперацииБизнесСтатистики() Экспорт + ПараметрыЦентраМониторинга = Новый Структура("ВключитьЦентрМониторинга, ЦентрОбработкиИнформацииОПрограмме, РегистрироватьБизнесСтатистику"); + + ЦентрМониторингаСлужебный.ПолучитьПараметрыЦентраМониторинга(ПараметрыЦентраМониторинга); + + Возврат (ПараметрыЦентраМониторинга.ВключитьЦентрМониторинга ИЛИ ПараметрыЦентраМониторинга.ЦентрОбработкиИнформацииОПрограмме) И ПараметрыЦентраМониторинга.РегистрироватьБизнесСтатистику; +КонецФункции + #КонецОбласти #Область ПрограммныйИнтерфейсСтатистикиКонфигурации diff --git a/SSL/src/CommonModules/ЦентрМониторингаВызовСервераПовтИсп/Module.bsl b/SSL/src/CommonModules/ЦентрМониторингаВызовСервераПовтИсп/Module.bsl index d664e8bef..ed4f5efb7 100644 --- a/SSL/src/CommonModules/ЦентрМониторингаВызовСервераПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ЦентрМониторингаВызовСервераПовтИсп/Module.bsl @@ -6,6 +6,9 @@ Возврат ЦентрМониторингаСлужебный.ПолучитьПараметрыЦентраМониторинга(Параметры); КонецФункции +// Устарела. Будет удалена в следующей редакции библиотеки. +// Необходимо использовать ЦентрМониторинга.ЗаписыватьОперацииБизнесСтатистики. +// Функция ЗаписыватьОперацииБизнесСтатистики() Экспорт ПараметрыЦентраМониторинга = Новый Структура("ВключитьЦентрМониторинга, ЦентрОбработкиИнформацииОПрограмме, РегистрироватьБизнесСтатистику"); diff --git a/SSL/src/CommonModules/ЦентрМониторингаГлобальный/Module.bsl b/SSL/src/CommonModules/ЦентрМониторингаГлобальный/Module.bsl new file mode 100644 index 000000000..7d122b1a4 --- /dev/null +++ b/SSL/src/CommonModules/ЦентрМониторингаГлобальный/Module.bsl @@ -0,0 +1,15 @@ +#Область СлужебныеПроцедурыИФункции + +// Выводит запрос на отправку дампов. +// +Процедура ЦентрМониторингаЗапросНаОтправкуДампов() Экспорт + ЦентрМониторингаКлиентСлужебный.ОповеститьЗапросНаОтправкуДампов(); +КонецПроцедуры + +// Выводит запрос на сбор и отправку дампов (один раз). +// +Процедура ЦентрМониторингаЗапросНаСборИОтправкуДампов() Экспорт + ЦентрМониторингаКлиентСлужебный.ОповеститьЗапросНаПолучениеДампов(); +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/ЦентрМониторингаГлобальный/ЦентрМониторингаГлобальный.mdo b/SSL/src/CommonModules/ЦентрМониторингаГлобальный/ЦентрМониторингаГлобальный.mdo new file mode 100644 index 000000000..d33edce0c --- /dev/null +++ b/SSL/src/CommonModules/ЦентрМониторингаГлобальный/ЦентрМониторингаГлобальный.mdo @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="e37aa075-143b-44e9-a2e2-77b3e0f76a77"> + <name>ЦентрМониторингаГлобальный</name> + <synonym> + <key>ru</key> + <value>Центр мониторинга глобальный</value> + </synonym> + <global>true</global> + <clientManagedApplication>true</clientManagedApplication> + <clientOrdinaryApplication>true</clientOrdinaryApplication> +</mdclass:CommonModule> diff --git a/SSL/src/CommonModules/ЦентрМониторингаКлиент/Module.bsl b/SSL/src/CommonModules/ЦентрМониторингаКлиент/Module.bsl index caafcfc35..835875142 100644 --- a/SSL/src/CommonModules/ЦентрМониторингаКлиент/Module.bsl +++ b/SSL/src/CommonModules/ЦентрМониторингаКлиент/Module.bsl @@ -138,4 +138,8 @@ КонецФункции +Процедура ПослеОбновленияИдентификатора(Результат, ДополнительныеПараметры) Экспорт + Оповестить("ОбновлениеИдентификатораЦентрМониторинга", Результат); +КонецПроцедуры + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ЦентрМониторингаКлиентСлужебный/Module.bsl b/SSL/src/CommonModules/ЦентрМониторингаКлиентСлужебный/Module.bsl index 26377d55d..be8cb0179 100644 --- a/SSL/src/CommonModules/ЦентрМониторингаКлиентСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ЦентрМониторингаКлиентСлужебный/Module.bsl @@ -29,6 +29,19 @@ ПараметрыПриложенияЦентрМониторинга = ПолучитьПараметрыПриложения(); ПараметрыПриложенияЦентрМониторинга.Вставить("РегистрироватьБизнесСтатистику", Параметры.ЦентрМониторинга["РегистрироватьБизнесСтатистику"]); + + Если Параметры.ЦентрМониторинга.Получить("ЗапросНаПолучениеДампов") = Истина Тогда + ОповеститьЗапросНаПолучениеДампов(); + УстановитьПараметрыПриложенияЦентрМониторинга("ЗапросПолныхДамповВыведен", Истина); + КонецЕсли; + Если Параметры.ЦентрМониторинга.Получить("ЗапросНаОтправкуДампов") = Истина Тогда + ИнформацияОДампах = Параметры.ЦентрМониторинга.Получить("ИнформацияОДампах"); + // Проверяем, было ли сообщение выведено ранее. + Если ИнформацияОДампах <> ПараметрыПриложенияЦентрМониторинга["ИнформацияОДампах"] Тогда + ОповеститьЗапросНаОтправкуДампов(); + УстановитьПараметрыПриложенияЦентрМониторинга("ИнформацияОДампах", ИнформацияОДампах); + КонецЕсли; + КонецЕсли; КонецПроцедуры @@ -42,7 +55,21 @@ Процедура ПриНачалеРаботыСистемы(Параметры) Экспорт ЦентрМониторингаПараметрыПриложения = ПолучитьПараметрыПриложения(); - + + Если Не ЦентрМониторингаПараметрыПриложения["ИнформацияКлиента"]["ПараметрыКлиента"]["ВыводитьЗапросПолныхДампов"] = Истина Тогда + Возврат; + КонецЕсли; + + Если ЦентрМониторингаПараметрыПриложения["ИнформацияКлиента"]["ПараметрыКлиента"]["ЗапросНаПолучениеДампов"] = Истина Тогда + ПодключитьОбработчикОжидания("ЦентрМониторингаЗапросНаСборИОтправкуДампов",90, Истина); + УстановитьПараметрыПриложенияЦентрМониторинга("ЗапросПолныхДамповВыведен", Истина); + КонецЕсли; + Если ЦентрМониторингаПараметрыПриложения["ИнформацияКлиента"]["ПараметрыКлиента"]["ЗапросНаОтправку"] = Истина Тогда + ПодключитьОбработчикОжидания("ЦентрМониторингаЗапросНаОтправкуДампов",90, Истина); + ИнформацияОДампах = ЦентрМониторингаПараметрыПриложения["ИнформацияКлиента"]["ПараметрыКлиента"]["ИнформацияОДампах"]; + УстановитьПараметрыПриложенияЦентрМониторинга("ИнформацияОДампах", ИнформацияОДампах); + КонецЕсли; + КонецПроцедуры Функция ПолучитьПараметрыПриложения() Экспорт @@ -59,7 +86,9 @@ ПараметрыПриложения.Вставить(ИмяПараметра, Новый Соответствие); ЦентрМониторингаПараметрыПриложения = ПараметрыПриложения[ИмяПараметра]; ЦентрМониторингаПараметрыПриложения.Вставить("РегистрироватьБизнесСтатистику", ПараметрыКлиента["РегистрироватьБизнесСтатистику"]); - + ЦентрМониторингаПараметрыПриложения.Вставить("ЗапросПолныхДамповВыведен", ПараметрыКлиента["ЗапросПолныхДамповВыведен"]); + ЦентрМониторингаПараметрыПриложения.Вставить("ИнформацияОДампах", ПараметрыКлиента["ИнформацияОДампах"]); + Замеры = Новый Соответствие; Замеры.Вставить(0, Новый Массив); Замеры.Вставить(1, Новый Соответствие); @@ -107,7 +136,15 @@ ПараметрыКлиента = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиентаПриЗапуске(),"ЦентрМониторинга"); Если ПараметрыКлиента = Неопределено Тогда - ПараметрыКлиента = Новый Структура("ЧасовойПоясСеанса, ХешПользователя, РегистрироватьБизнесСтатистику", Неопределено, Неопределено, Ложь); + ПараметрыКлиента = Новый Структура; + ПараметрыКлиента.Вставить("ЧасовойПоясСеанса", Неопределено); + ПараметрыКлиента.Вставить("ХешПользователя", Неопределено); + ПараметрыКлиента.Вставить("РегистрироватьБизнесСтатистику", Ложь); + ПараметрыКлиента.Вставить("ВыводитьЗапросПолныхДампов", Ложь); + ПараметрыКлиента.Вставить("ЗапросПолныхДамповВыведен", Ложь); + ПараметрыКлиента.Вставить("ИнформацияОДампах", ""); + ПараметрыКлиента.Вставить("ЗапросНаПолучениеДампов", Ложь); + ПараметрыКлиента.Вставить("ЗапросНаОтправку", Ложь); КонецЕсли; ПараметрыКлиентаИнформация = Новый Соответствие; @@ -146,4 +183,30 @@ КонецФункции +Процедура УстановитьПараметрыПриложенияЦентрМониторинга(Параметр, Значение) + ИмяПараметра = "СтандартныеПодсистемы.ЦентрМониторинга"; + Если ПараметрыПриложения[ИмяПараметра] = Неопределено Тогда + Возврат; + Иначе + ЦентрМониторингаПараметрыПриложения = ПараметрыПриложения["СтандартныеПодсистемы.ЦентрМониторинга"]; + ЦентрМониторингаПараметрыПриложения.Вставить(Параметр, Значение); + КонецЕсли; +КонецПроцедуры + +Процедура ОповеститьЗапросНаПолучениеДампов() Экспорт + ПоказатьОповещениеПользователя(НСтр("ru = 'Предоставить отчеты об ошибках'"), + "e1cib/app/Обработка.НастройкиЦентраМониторинга.Форма.ЗапросНаСборИОтправкуОтчетовОбОшибках", + , + БиблиотекаКартинок.Предупреждение32, + СтатусОповещенияПользователя.Важное, "ЗапросНаПолучениеДампов"); +КонецПроцедуры + +Процедура ОповеститьЗапросНаОтправкуДампов() Экспорт + ПоказатьОповещениеПользователя(НСтр("ru = 'Отправить отчеты об ошибках'"), + "e1cib/app/Обработка.НастройкиЦентраМониторинга.Форма.ЗапросНаОтправкуОтчетовОбОшибках", + , + БиблиотекаКартинок.Предупреждение32, + СтатусОповещенияПользователя.Важное, "ЗапросНаОтправкуДампов"); +КонецПроцедуры + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ЦентрМониторингаПереопределяемый/Module.bsl b/SSL/src/CommonModules/ЦентрМониторингаПереопределяемый/Module.bsl index 50af56c66..173c32ca7 100644 --- a/SSL/src/CommonModules/ЦентрМониторингаПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ЦентрМониторингаПереопределяемый/Module.bsl @@ -11,4 +11,20 @@ КонецПроцедуры +// Задает настройки, применяемые как умолчания для объектов подсистемы. +// +// Параметры: +// Настройки - Структура - Коллекция настроек подсистемы. Реквизиты: +// * ВключитьОповещение - Булево - Умолчание для оповещений пользователя: +// Истина - По умолчанию оповещаем администратора системы, например, если нет подсистемы "Текущие дела". +// Ложь - По умолчанию не оповещаем администратора системы. +// Значение по умолчанию: зависит от наличия подсистемы "Текущие дела". +// +Процедура ПриОпределенииНастроек(Настройки) Экспорт + + + +КонецПроцедуры + + #КонецОбласти diff --git a/SSL/src/CommonModules/ЦентрМониторингаСлужебный/Module.bsl b/SSL/src/CommonModules/ЦентрМониторингаСлужебный/Module.bsl index e30234c47..83e7045d9 100644 --- a/SSL/src/CommonModules/ЦентрМониторингаСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ЦентрМониторингаСлужебный/Module.bsl @@ -1,4 +1,4 @@ - + #Область СлужебныйПрограммныйИнтерфейс // Получает регламентное задание по имени. @@ -66,6 +66,14 @@ УстановитьПараметрыЦентраМониторинга(НовыеПараметры); КонецФункции +Функция ЗапускОтправкиОзнакомительногоПакета() Экспорт + ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(Новый УникальныйИдентификатор); + ПараметрыВыполнения.ОжидатьЗавершение = 0; + ПараметрыПроцедуры = Новый Структура("Итератор, ОтправкаТестовогоПакета, ПолучениеИдентификатора", 0, Ложь, Истина); + РезультатЗапуска = ДлительныеОперации.ВыполнитьВФоне("ЦентрМониторингаСлужебный.ОтправитьТестовыйПакет", ПараметрыПроцедуры, ПараметрыВыполнения); + Возврат РезультатЗапуска; +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Обработчики событий подсистем конфигурации. @@ -74,6 +82,10 @@ Зависимость = Зависимости.Добавить(); Зависимость.РегламентноеЗадание = Метаданные.РегламентныеЗадания.СборИОтправкаСтатистики; Зависимость.РаботаетСВнешнимиРесурсами = Истина; + + Зависимость = Зависимости.Добавить(); + Зависимость.РегламентноеЗадание = Метаданные.РегламентныеЗадания.СборИОтправкаОтчетовОбОшибках; + Зависимость.РаботаетСВнешнимиРесурсами = Истина; КонецПроцедуры // См. ОбновлениеИнформационнойБазыБСП.ПриДобавленииОбработчиковОбновления. @@ -92,7 +104,7 @@ Если СтандартныеПодсистемыСервер.ЭтоБазоваяВерсияКонфигурации() И НЕ РазделениеПоОбластямДанныхВключено() Тогда Обработчик = Обработчики.Добавить(); Обработчик.РежимВыполнения = "Отложенно"; - Обработчик.Версия = "2.4.3.156"; + Обработчик.Версия = "2.4.4.79"; Обработчик.Комментарий = НСтр("ru = 'Включает отправку сведений об использовании программы в фирму ""1С"". Отключить отправку сведений можно в разделе Администрирование / Интернет-поддержка и сервисы / Центр мониторинга'"); Обработчик.Идентификатор = Новый УникальныйИдентификатор("68c8c60c-5b23-436a-9555-a6f24a6b1ffd"); Обработчик.Процедура = "ЦентрМониторингаСлужебный.ВключитьОтправкуСведений"; @@ -104,17 +116,29 @@ КонецПроцедуры -// См. ОбщегоНазначенияПереопределяемый.ПараметрыРаботыКлиентаПриЗапуске. +// См. ОбщегоНазначенияПереопределяемый.ПриДобавленииПараметровРаботыКлиентаПриЗапуске. Процедура ПриДобавленииПараметровРаботыКлиентаПриЗапуске(Параметры) Экспорт - ПараметрыРаботыКлиента = Новый Структура("ЧасовойПоясСеанса, ХешПользователя, РегистрироватьБизнесСтатистику"); + ПараметрыРаботыКлиента = Новый Структура("ЧасовойПоясСеанса, ХешПользователя, РегистрироватьБизнесСтатистику, + |ВыводитьЗапросПолныхДампов, ЗапросПолныхДамповВыведен, ИнформацияОДампах, + |ЗапросНаПолучениеДампов,ЗапросНаОтправку"); УникальныйИдентификаторПользователя = Строка(ПользователиИнформационнойБазы.ТекущийПользователь().УникальныйИдентификатор); НомерСеанса = Формат(НомерСеансаИнформационнойБазы(), "ЧГ=0"); ХешПользователя = ОбщегоНазначения.КонтрольнаяСуммаСтрокой(УникальныйИдентификаторПользователя + НомерСеанса); - РегистрироватьБизнесСтатистику = ПолучитьПараметрыЦентраМониторинга("РегистрироватьБизнесСтатистику"); + РегистрироватьБизнесСтатистику = ПолучитьПараметрыЦентраМониторинга("РегистрироватьБизнесСтатистику"); + ПараметрыОповещенияОДампах = ПараметрыОповещенияОДампах(); + НастройкиЦентраМониторинга = Новый Структура; + НастройкиЦентраМониторинга.Вставить("ВключитьОповещение", Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ТекущиеДела")); + ЦентрМониторингаПереопределяемый.ПриОпределенииНастроек(НастройкиЦентраМониторинга); + + ПараметрыРаботыКлиента.ВыводитьЗапросПолныхДампов = Пользователи.ЭтоПолноправныйПользователь(, Истина) И НастройкиЦентраМониторинга.ВключитьОповещение; + ПараметрыРаботыКлиента.ЗапросПолныхДамповВыведен = Ложь; + ПараметрыРаботыКлиента.ЗапросНаПолучениеДампов = ПараметрыОповещенияОДампах.ЗапросНаПолучениеДампов; + ПараметрыРаботыКлиента.ЗапросНаОтправку = ПараметрыОповещенияОДампах.ЗапросНаОтправку; + ПараметрыРаботыКлиента.ИнформацияОДампах = ПараметрыОповещенияОДампах.ИнформацияОДампах; ПараметрыРаботыКлиента.ЧасовойПоясСеанса = ЧасовойПоясСеанса(); ПараметрыРаботыКлиента.ХешПользователя = ХешПользователя; ПараметрыРаботыКлиента.РегистрироватьБизнесСтатистику = РегистрироватьБизнесСтатистику; @@ -140,6 +164,7 @@ АктивныеФоновыеЗадания = ФоновыеЗадания.ПолучитьФоновыеЗадания(Отбор); Если АктивныеФоновыеЗадания.Количество() = 0 Тогда + ПараметрыФоновогоЗадания = Новый Массив; ПараметрыФоновогоЗадания.Добавить(Параметры); ФоновыеЗадания.Выполнить("ЦентрМониторингаСлужебный.ПриВыполненииСтандартныхПериодическихПроверокНаСервереВФоне", @@ -152,6 +177,83 @@ КонецЕсли; + Если Параметры["ИнформацияКлиента"]["ПараметрыКлиента"]["ВыводитьЗапросПолныхДампов"] Тогда + + ПараметрыОповещенияОДампах = ПараметрыОповещенияОДампах(); + + ЗапросНаПолучениеДампов = ПараметрыОповещенияОДампах.ЗапросНаПолучениеДампов + И НЕ Параметры.Получить("ЗапросПолныхДамповВыведен") = Истина; + + ПараметрыНовые = Новый Соответствие(Параметры); + ПараметрыНовые.Вставить("ЗапросНаПолучениеДампов", ЗапросНаПолучениеДампов); + ПараметрыНовые.Вставить("ЗапросНаОтправкуДампов", ПараметрыОповещенияОДампах.ЗапросНаОтправку); + ПараметрыНовые.Вставить("ИнформацияОДампах", ПараметрыОповещенияОДампах.ИнформацияОДампах); + Параметры = Новый ФиксированноеСоответствие(ПараметрыНовые); + + КонецЕсли; + + ПараметрыЦентраМониторинга = Новый Структура("ТестовыйПакетОтправлен,ЦентрОбработкиИнформацииОПрограмме,ВключитьЦентрМониторинга"); + ПараметрыЦентраМониторинга = ПолучитьПараметрыЦентраМониторинга(ПараметрыЦентраМониторинга); + + Если НЕ ПараметрыЦентраМониторинга.ТестовыйПакетОтправлен И НЕ РазделениеПоОбластямДанныхВключено() Тогда + // Тестовый пакет нет смысла отправлять - данные уже отправляются. + Если ПараметрыЦентраМониторинга.ВключитьЦентрМониторинга ИЛИ ПараметрыЦентраМониторинга.ЦентрОбработкиИнформацииОПрограмме Тогда + УстановитьПривилегированныйРежим(Истина); + УстановитьПараметрЦентраМониторинга("ТестовыйПакетОтправлен", Истина); + УстановитьПривилегированныйРежим(Ложь); + Иначе + КлючФоновогоЗадания = "ОтправкаТестовогоПакета"; + + Отбор = Новый Структура; + Отбор.Вставить("Ключ", КлючФоновогоЗадания); + Отбор.Вставить("Состояние", СостояниеФоновогоЗадания.Активно); + АктивныеФоновыеЗадания = ФоновыеЗадания.ПолучитьФоновыеЗадания(Отбор); + Если АктивныеФоновыеЗадания.Количество() = 0 Тогда + ПараметрыПроцедуры = Новый Структура("Итератор, ОтправкаТестовогоПакета, ПолучениеИдентификатора", 0, Истина, Ложь); + МассивПараметров = Новый Массив; + МассивПараметров.Добавить(ПараметрыПроцедуры); + МассивПараметров.Добавить(Неопределено); + ФоновыеЗадания.Выполнить("ЦентрМониторингаСлужебный.ОтправитьТестовыйПакет", + МассивПараметров, + КлючФоновогоЗадания, + НСтр("ru = 'Центр мониторинга: отправка тестового пакета'")); + КонецЕсли; + КонецЕсли; + КонецЕсли; + + Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда + ПараметрыЦентраМониторинга = Новый Структура("ОтправлятьФайлыДампов,ВариантДампа,ОкончаниеСбораДампов,СборПолныхДамповВключен"); + ПараметрыЦентраМониторинга = ПолучитьПараметрыЦентраМониторинга(ПараметрыЦентраМониторинга); + + НачатьСборИОтправкуОтчетовОбОшибках = Не ПараметрыЦентраМониторинга.ОтправлятьФайлыДампов = 0 + И Не ПустаяСтрока(ПараметрыЦентраМониторинга.ВариантДампа) + И ТекущаяУниверсальнаяДата() < ПараметрыЦентраМониторинга.ОкончаниеСбораДампов; + + Если НачатьСборИОтправкуОтчетовОбОшибках Тогда + Идентификатор = Параметры["ИнформацияКлиента"]["ПараметрыКлиента"]["ХешПользователя"]; + КлючФоновогоЗадания = "СборИОтправкаОтчетовОбОшибкахНаСервереВФоне" + Идентификатор; + + Отбор = Новый Структура; + Отбор.Вставить("Ключ", КлючФоновогоЗадания); + Отбор.Вставить("Состояние", СостояниеФоновогоЗадания.Активно); + АктивныеФоновыеЗадания = ФоновыеЗадания.ПолучитьФоновыеЗадания(Отбор); + + Если АктивныеФоновыеЗадания.Количество() = 0 Тогда + ПараметрыФоновогоЗадания = Новый Массив; + ПараметрыФоновогоЗадания.Добавить(Истина); + ПараметрыФоновогоЗадания.Добавить(Идентификатор); + ФоновыеЗадания.Выполнить("ЦентрМониторингаСлужебный.СобратьИОтправитьДампы", + ПараметрыФоновогоЗадания, + КлючФоновогоЗадания, + НСтр("ru = 'Сбор и отправка отчетов об ошибках'")); + КонецЕсли; + Иначе + Если ПараметрыЦентраМониторинга.СборПолныхДамповВключен[ИмяКомпьютера()] = Истина Тогда + ПрекратитьСборПолныхДампов(); + КонецЕсли; + КонецЕсли; + КонецЕсли; + КонецПроцедуры Процедура ПриВыполненииСтандартныхПериодическихПроверокНаСервереВФоне(Параметры) Экспорт @@ -163,6 +265,69 @@ КонецПроцедуры +// См. ТекущиеДелаПереопределяемый.ПриОпределенииОбработчиковТекущихДел. +Процедура ПриЗаполненииСпискаТекущихДел(ТекущиеДела) Экспорт + + // Право изменять константу имеет только администратор системы. + Если НЕ Пользователи.ЭтоПолноправныйПользователь(, Истина) Тогда + Возврат; + КонецЕсли; + + ПараметрыЦентраМониторинга = ПолучитьПараметрыЦентраМониторинга(); + + МодульТекущиеДелаСервер = ОбщегоНазначения.ОбщийМодуль("ТекущиеДелаСервер"); + + Разделы = МодульТекущиеДелаСервер.РазделыДляОбъекта("Обработка.НастройкиЦентраМониторинга"); + Если Разделы.Количество() = 0 Тогда + // Не вынесены в командный интерфейс. + РазделАдминистрирование = Метаданные.Подсистемы.Найти("Администрирование"); + Если РазделАдминистрирование = Неопределено Тогда + Возврат; + КонецЕсли; + Разделы.Добавить(РазделАдминистрирование); + КонецЕсли; + + ТекущийПользователь = Пользователи.ТекущийПользователь(); + + // 1. Обработать запрос на получение дампов. + ЗапросНаПолучениеДампов = ПараметрыЦентраМониторинга.ОтправлятьФайлыДампов = 2 И ПараметрыЦентраМониторинга.БазовыеПроверкиПройдены; + Для Каждого Раздел Из Разделы Цикл + Дело = ТекущиеДела.Добавить(); + Дело.Идентификатор = "ЗапросНаПолучениеДампов"; + Дело.ЕстьДела = ЗапросНаПолучениеДампов; + Дело.Важное = Ложь; + Дело.СкрыватьВНастройках = Истина; + Дело.Владелец = Раздел; + Дело.Представление = НСтр("ru = 'Предоставить отчеты об ошибках'"); + Дело.Количество = 0; + Дело.Подсказка = НСтр("ru = 'Зарегистрированы аварийные завершения работы программы. Пожалуйста, расскажите нам об этой проблеме.'"); + Дело.ПараметрыФормы = Новый Структура("Вариант", "Запрос"); + Дело.Форма = "Обработка.НастройкиЦентраМониторинга.Форма.ЗапросНаСборИОтправкуОтчетовОбОшибках"; + КонецЦикла; + + // 2. Обработать запрос на отправку дампов. + ЕстьДампы = ПараметрыЦентраМониторинга.Свойство("ВариантыДампов") И ПараметрыЦентраМониторинга.ВариантыДампов.Количество(); + ЗапросНаОтправку = ПараметрыЦентраМониторинга.ОтправлятьФайлыДампов = 1 + И НЕ ПустаяСтрока(ПараметрыЦентраМониторинга.ВариантДампа) + И ЕстьДампы + И ПараметрыЦентраМониторинга.СпрашиватьПередОтправкой + И Не ПустаяСтрока(ПараметрыЦентраМониторинга.ИнформацияОДампах) + И ПараметрыЦентраМониторинга.БазовыеПроверкиПройдены; + Для Каждого Раздел Из Разделы Цикл + Дело = ТекущиеДела.Добавить(); + Дело.Идентификатор = "ЗапросНаОтправкуДампов"; + Дело.ЕстьДела = ЗапросНаОтправку; + Дело.Важное = Ложь; + Дело.Владелец = Раздел; + Дело.Представление = НСтр("ru = 'Отправить отчеты об ошибках'"); + Дело.Количество = 0; + Дело.Подсказка = НСтр("ru = 'Отчеты об аварийном завершении собраны и подготовлены. Пожалуйста, согласуйте их отправку.'"); + Дело.ПараметрыФормы = Новый Структура; + Дело.Форма = "Обработка.НастройкиЦентраМониторинга.Форма.ЗапросНаОтправкуОтчетовОбОшибках"; + КонецЦикла; + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -359,6 +524,29 @@ УдалитьРегламентноеЗадание("СборИОтправкаСтатистики"); КонецЕсли; + // Убедимся, что отправка не запрещена, вариант дампа указан и срок сбора не вышел. + ПараметрыЦентраМониторинга.Вставить("ОтправлятьФайлыДампов"); + ПараметрыЦентраМониторинга.Вставить("ВариантДампа"); + ПараметрыЦентраМониторинга.Вставить("ОкончаниеСбораДампов"); + + ПараметрыЦентраМониторинга = ПолучитьПараметрыЦентраМониторинга(ПараметрыЦентраМониторинга); + + НачатьСборИОтправкуОтчетовОбОшибках = Не ПараметрыЦентраМониторинга.ОтправлятьФайлыДампов = 0 + И Не ПустаяСтрока(ПараметрыЦентраМониторинга.ВариантДампа) + И ДатаЗапуска < ПараметрыЦентраМониторинга.ОкончаниеСбораДампов; + Если НачатьСборИОтправкуОтчетовОбОшибках Тогда + Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда + // Для файловой базы сбор и отправка происходят в ПриВыполненииСтандартныхПериодическихПроверокНаСервере. + Иначе + // Проверим, существует ли регламентное задание. + РегЗадание = ПолучитьРегламентноеЗадание("СборИОтправкаОтчетовОбОшибках", Ложь); + Если РегЗадание = Неопределено Тогда + РегЗадание = ПолучитьРегламентноеЗадание("СборИОтправкаОтчетовОбОшибках", Истина); + УстановитьРасписаниеПоУмолчанию(РегЗадание); + КонецЕсли; + КонецЕсли; + КонецЕсли; + Если ОценкаПроизводительностиСуществует И НеобходимаЗаписьОценкиПроизводительности Тогда МодульОценкаПроизводительности.ЗакончитьЗамерВремени("ЦентрМониторингаСборИОтправкаСтатистики", ВремяНачала); КонецЕсли; @@ -375,8 +563,9 @@ ВремяНачала = МодульОценкаПроизводительности.НачатьЗамерВремени(); КонецЕсли; - ПериодАгрегации = ЦентрМониторингаВызовСервераПовтИсп.ПолучитьПараметрыЦентраМониторинга("ПериодАгрегацииМалый"); - ПериодУдаления = ЦентрМониторингаВызовСервераПовтИсп.ПолучитьПараметрыЦентраМониторинга("ПериодАгрегации"); + ПараметрыЦентраМониторинга = ПолучитьПараметрыЦентраМониторинга(Новый Структура("ПериодАгрегацииМалый, ПериодАгрегации")); + ПериодАгрегации = ПараметрыЦентраМониторинга.ПериодАгрегацииМалый; + ПериодУдаления = ПараметрыЦентраМониторинга.ПериодАгрегации; ОбработатьЗаписиДо = Дата(1, 1, 1) + Цел((ТекущаяДата - Дата(1, 1, 1))/ПериодАгрегации)*ПериодАгрегации; @@ -411,10 +600,11 @@ ВремяНачала = МодульОценкаПроизводительности.НачатьЗамерВремени(); КонецЕсли; - ПериодАгрегации = ЦентрМониторингаВызовСервераПовтИсп.ПолучитьПараметрыЦентраМониторинга("ПериодАгрегации"); - ПериодУдаления = ЦентрМониторингаВызовСервераПовтИсп.ПолучитьПараметрыЦентраМониторинга("ПериодУдаления"); + ПараметрыЦентраМониторинга = ПолучитьПараметрыЦентраМониторинга(Новый Структура("ПериодАгрегацииМалый, ПериодАгрегации, ГраницаАгрегирования")); + ПериодАгрегации = ПараметрыЦентраМониторинга.ПериодАгрегацииМалый; + ПериодУдаления = ПараметрыЦентраМониторинга.ПериодАгрегации; - ГраницаАгрегирования = ЦентрМониторингаВызовСервераПовтИсп.ПолучитьПараметрыЦентраМониторинга("ГраницаАгрегирования"); + ГраницаАгрегирования = ПараметрыЦентраМониторинга.ГраницаАгрегирования; ОбработатьЗаписиДо = Дата(1, 1, 1) + Цел((ТекущаяДата - Дата(1, 1, 1))/ПериодАгрегации)*ПериодАгрегации; Если ОбработатьЗаписиДо > ГраницаАгрегирования Тогда @@ -473,7 +663,7 @@ ВремяНачала = МодульОценкаПроизводительности.НачатьЗамерВремени(); КонецЕсли; - ПараметрыЦентраМониторинга = ЦентрМониторингаВызовСервераПовтИсп.ПолучитьПараметрыЦентраМониторинга(); + ПараметрыЦентраМониторинга = ПолучитьПараметрыЦентраМониторинга(Новый Структура("ДатаКрайнегоПакета, ПериодУдаления")); ДатаКрайнегоПакета = ПараметрыЦентраМониторинга.ДатаКрайнегоПакета; ПериодУдаления = ПараметрыЦентраМониторинга.ПериодУдаления; @@ -514,7 +704,9 @@ КолонкиИндекса = ДополнительныеПараметры["КолонкиИндекса"]; Если ТипЗнч(Данные) = Тип("РезультатЗапроса") Тогда - JSONСтруктура = СформироватьJSONСтруктуруРезультатЗапроса(ИмяСекции, Данные, ДатаНачала, ДатаОкончания, ДопПараметры, КолонкиИндекса) + JSONСтруктура = СформироватьJSONСтруктуруРезультатЗапроса(ИмяСекции, Данные, ДатаНачала, ДатаОкончания, ДопПараметры, КолонкиИндекса); + ИначеЕсли ТипЗнч(Данные) = Тип("ТаблицаЗначений") Тогда + JSONСтруктура = СформироватьJSONСтруктуруТаблицаЗначений(ИмяСекции, Данные, ДатаНачала, ДатаОкончания, ДопПараметры, КолонкиИндекса); КонецЕсли; Возврат JSONСтруктура; @@ -581,6 +773,66 @@ Возврат JSONСтруктура; КонецФункции +Функция СформироватьJSONСтруктуруТаблицаЗначений(ИмяСекции, Данные, ДатаНачала, ДатаОкончания, ДопПараметры, КолонкиИндекса) + JSONСтруктура = Новый Соответствие; + + Секция = Новый Структура; + + + Если ДатаНачала <> Неопределено Тогда + Секция.Вставить("date_start", ДатаНачала); + КонецЕсли; + + Если ДатаОкончания <> Неопределено Тогда + Секция.Вставить("date_end", ДатаОкончания); + КонецЕсли; + + Если ДопПараметры <> Неопределено Тогда + Для Каждого Параметр Из ДопПараметры Цикл + Секция.Вставить(Параметр.Ключ, Параметр.Значение); + КонецЦикла; + КонецЕсли; + + Колонки = Новый Массив; + Для Каждого ТекКолонка Из Данные.Колонки Цикл + Колонки.Добавить(ТекКолонка.Имя); + КонецЦикла; + Секция.Вставить("columns", Колонки); + + Строки = Новый Массив; + Если КолонкиИндекса <> Неопределено Тогда + ИндексыЗначений = Новый Соответствие; + Для Каждого ТекКолонка Из КолонкиИндекса Цикл + ИндексыЗначений.Вставить(ТекКолонка.Ключ, Новый Соответствие); + КонецЦикла; + КонецЕсли; + + Для Каждого Выборка Из Данные Цикл + Строка = Новый Массив; + Для Каждого ТекКолонка Из Колонки Цикл + ЗначениеДляДобавления = Выборка[ТекКолонка]; + Если КолонкиИндекса <> Неопределено И КолонкиИндекса[ТекКолонка] <> Неопределено Тогда + Если КолонкиИндекса[ТекКолонка][ЗначениеДляДобавления] = Неопределено Тогда + ИндексЗначения = КолонкиИндекса[ТекКолонка].Количество() + 1; + КолонкиИндекса[ТекКолонка].Вставить(ЗначениеДляДобавления, ИндексЗначения); + ИндексыЗначений[ТекКолонка].Вставить(Формат(ИндексЗначения, "ЧГ=0"), ЗначениеДляДобавления); + КонецЕсли; + + ЗначениеДляДобавления = КолонкиИндекса[ТекКолонка][ЗначениеДляДобавления]; + КонецЕсли; + + Строка.Добавить(ЗначениеДляДобавления); + КонецЦикла; + Строки.Добавить(Строка); + КонецЦикла; + Секция.Вставить("columnsValueIndex", ИндексыЗначений); + Секция.Вставить("rows", Строки); + + JSONСтруктура.Вставить(ИмяСекции, Секция); + + Возврат JSONСтруктура; +КонецФункции + Функция СформироватьСтруктуруJSONДляОтправки(Параметры) ДатаНачала = Параметры.ДатаНачала; ДатаОкончания = Параметры.ДатаОкончания; @@ -601,7 +853,7 @@ ПараметрыЦентраМониторинга.Вставить("РегистрироватьНастройкуКонфигурации"); ПараметрыЦентраМониторинга.Вставить("РегистрироватьПроизводительность"); ПараметрыЦентраМониторинга.Вставить("РегистрироватьПроизводительностьТехнологическую"); - ПараметрыЦентраМониторинга = ЦентрМониторингаВызовСервераПовтИсп.ПолучитьПараметрыЦентраМониторинга(ПараметрыЦентраМониторинга); + ПараметрыЦентраМониторинга = ПолучитьПараметрыЦентраМониторинга(ПараметрыЦентраМониторинга); Если ПараметрыЦентраМониторинга.РегистрироватьИнформациюОСистеме Тогда Инфо = ПолучитьСистемнуюИнформацию(); @@ -739,6 +991,7 @@ ДопПараметры.Вставить("InterfaceCompatibilityMode", Строка(Метаданные.РежимСовместимостиИнтерфейса)); ДопПараметры.Вставить("ModalityUseMode", Строка(Метаданные.РежимИспользованияМодальности)); ДанныеОбИспользуемыхРасширениях = ДанныеОбИспользуемыхРасширениях(); + ДанныеОбИспользованииРолей = ДанныеОбИспользованииРолей(); ДопПараметры.Вставить("UsingExtensions", ДанныеОбИспользуемыхРасширениях.ИспользованиеРасширений); ДополнительныеПараметры = Новый Соответствие; @@ -854,6 +1107,11 @@ Если ПараметрыЦентраМониторинга.РегистрироватьДампы Тогда JSONСтруктура.Вставить("dumps", СекцияDUMPS["dumps"]); + ДанныеОПолныхДампах = Новый Структура; + ДанныеОПолныхДампах.Вставить("РезультатОтправки", Параметры.РезультатОтправки); + ДанныеОПолныхДампах.Вставить("ОтправлятьФайлыДампов", Параметры.ОтправлятьФайлыДампов); + ДанныеОПолныхДампах.Вставить("СпрашиватьПередОтправкой", Параметры.СпрашиватьПередОтправкой); + JSONСтруктура.Вставить("FullDumps", ДанныеОПолныхДампах); КонецЕсли; Если ПараметрыЦентраМониторинга.РегистрироватьБизнесСтатистику Тогда @@ -869,6 +1127,7 @@ Если ПараметрыЦентраМониторинга.РегистрироватьСтатистикуКонфигурации Тогда JSONСтруктура.Вставить("config", СекцияСтатистикаКонфигурации["StatisticsConfiguration"]); JSONСтруктура.Вставить("extensionsInfo", ДанныеОбИспользуемыхРасширениях); + JSONСтруктура.Вставить("statisticOfRoles", ДанныеОбИспользованииРолей); КонецЕсли; Если ПараметрыЦентраМониторинга.РегистрироватьНастройкуКонфигурации Тогда @@ -909,26 +1168,11 @@ #Область РаботаСHTTPСервисом -Функция HTTPСервисОтправитьКакТекст(Сервер, АдресРесурса, Данные, Порт = 80, ЗащищенноеСоединение = Ложь) - Параметры = Новый Структура; - Параметры.Вставить("Сервер", Сервер); - Параметры.Вставить("Порт", Порт); - Параметры.Вставить("АдресРесурса", АдресРесурса); - Параметры.Вставить("ЗащищенноеСоединение", ЗащищенноеСоединение); - Параметры.Вставить("Данные", Данные); - Параметры.Вставить("Метод", "POST"); - Параметры.Вставить("ТипДанных", "Текст"); - - HTTPОтветСтруктура = HTTPСервисОтправитьДанныеСлужебный(Параметры); - - Возврат HTTPОтветСтруктура; -КонецФункции - Функция HTTPСервисОтправитьДанныеСлужебный(Параметры) Если Параметры.ЗащищенноеСоединение Тогда - HTTPСоединение = Новый HTTPСоединение(Параметры.Сервер, Параметры.Порт,,,,20, Новый ЗащищенноеСоединениеOpenSSL(Неопределено, Неопределено)); + HTTPСоединение = Новый HTTPСоединение(Параметры.Сервер, Параметры.Порт,,,,Параметры.Таймаут, Новый ЗащищенноеСоединениеOpenSSL(Неопределено, Неопределено)); Иначе - HTTPСоединение = Новый HTTPСоединение(Параметры.Сервер, Параметры.Порт,,,,20); + HTTPСоединение = Новый HTTPСоединение(Параметры.Сервер, Параметры.Порт,,,,Параметры.Таймаут); КонецЕсли; HTTPЗапрос = Новый HTTPЗапрос(Параметры.АдресРесурса); @@ -939,6 +1183,9 @@ ИмяФайлаАрхива = ЗаписатьДанныеВАрхив(Параметры.Данные); ДвоичныеДанныеАрхива = Новый ДвоичныеДанные(ИмяФайлаАрхива); HTTPЗапрос.УстановитьТелоИзДвоичныхДанных(ДвоичныеДанныеАрхива); + ИначеЕсли Параметры.ТипДанных = "ДвоичныеДанные" Тогда + ДвоичныеДанныеАрхива = Новый ДвоичныеДанные(Параметры.Данные); + HTTPЗапрос.УстановитьТелоИзДвоичныхДанных(ДвоичныеДанныеАрхива); КонецЕсли; Попытка @@ -948,11 +1195,15 @@ HTTPОтвет = HTTPСоединение.Получить(HTTPЗапрос); КонецЕсли; - Если Параметры.ТипДанных = "ZIP" Тогда - УдалитьФайлы(ИмяФайлаАрхива); - КонецЕсли; - HTTPОтветСтруктура = HTTPОтветВСтруктуру(HTTPОтвет); + + Если HTTPОтветСтруктура.КодСостояния = 200 Тогда + Если Параметры.ТипДанных = "ZIP" Тогда + УдалитьФайлы(ИмяФайлаАрхива); + ИначеЕсли Параметры.ТипДанных = "ДвоичныеДанные" Тогда + УдалитьФайлы(Параметры.Данные); + КонецЕсли; + КонецЕсли; Исключение HTTPОтветСтруктура = Новый Структура("КодСостояния", 105); КонецПопытки; @@ -1052,7 +1303,7 @@ Для Каждого ФайлДампа Из ФайлыДампов Цикл Если ФайлыДамповЗарегистрированные[ФайлДампа.ПолноеИмя] = Неопределено Тогда ДампНовый = Новый Структура; - СтруктураДампа = ОписаниеДампа(ФайлДампа.ИмяБезРасширения); + СтруктураДампа = ОписаниеДампа(ФайлДампа.Имя); ДампНовый.Вставить("ДатаРегистрации", ТекущаяУниверсальнаяДатаВМиллисекундах()); ДампНовый.Вставить("ВариантДампа", СтруктураДампа.Процесс + "_" + СтруктураДампа.ВерсияПлатформы + "_" + СтруктураДампа.Смещение); @@ -1180,7 +1431,7 @@ ВремяНачала = МодульОценкаПроизводительности.НачатьЗамерВремени(); КонецЕсли; - ТекДата = ТекущаяУниверсальнаяДата(); + ТекДата = ТекущаяУниверсальнаяДата(); ПараметрыЦентраМониторинга = ПолучитьПараметрыЦентраМониторинга(); @@ -1191,6 +1442,9 @@ Параметры.Вставить("TopApdex", ПараметрыЦентраМониторинга.TopApdex); Параметры.Вставить("TopApdexTech", ПараметрыЦентраМониторинга.TopApdexTech); Параметры.Вставить("ПериодУдаления", ПараметрыЦентраМониторинга.ПериодУдаления); + Параметры.Вставить("РезультатОтправки", ПараметрыЦентраМониторинга.РезультатОтправки); + Параметры.Вставить("ОтправлятьФайлыДампов", ПараметрыЦентраМониторинга.ОтправлятьФайлыДампов); + Параметры.Вставить("СпрашиватьПередОтправкой", ПараметрыЦентраМониторинга.СпрашиватьПередОтправкой); НачатьТранзакцию(); Попытка @@ -1217,7 +1471,7 @@ КонецЕсли; КонецПроцедуры -Функция ОтправитьДанныеМониторинга() +Функция ОтправитьДанныеМониторинга(ТестовыйПакет = Ложь) Параметры = ПолучитьПараметрыСервисаОтправки(); ОценкаПроизводительностиСуществует = ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОценкаПроизводительности"); @@ -1250,11 +1504,29 @@ СтрокаСоединения = ТипСоединения + "://" + Параметры.Сервер + ":" + Параметры.Порт + АдресРесурса; - HTTPОтвет = HTTPСервисОтправитьКакТекст(Параметры.Сервер, АдресРесурса, Пакет.ТелоПакета, Параметры.Порт, Параметры.ЗащищенноеСоединение); + ПараметрыHTTP = Новый Структура; + ПараметрыHTTP.Вставить("Сервер", Параметры.Сервер); + ПараметрыHTTP.Вставить("АдресРесурса", АдресРесурса); + ПараметрыHTTP.Вставить("Данные", Пакет.ТелоПакета); + ПараметрыHTTP.Вставить("Порт", Параметры.Порт); + ПараметрыHTTP.Вставить("ЗащищенноеСоединение", Параметры.ЗащищенноеСоединение); + ПараметрыHTTP.Вставить("Метод", "POST"); + ПараметрыHTTP.Вставить("ТипДанных", "Текст"); + ПараметрыHTTP.Вставить("Таймаут", 60); + + HTTPОтвет = HTTPСервисОтправитьДанныеСлужебный(ПараметрыHTTP); Если HTTPОтвет.КодСостояния = 200 Тогда ПараметрыОтвета = СтрокаJSONВСтруктуру(HTTPОтвет.Тело); - УстановитьПараметрыОтправки(ПараметрыОтвета); + Если Не ТестовыйПакет Тогда + УстановитьПараметрыОтправки(ПараметрыОтвета); + Иначе + Если ПараметрыОтвета.Свойство("foundCopy") И ПараметрыОтвета.foundCopy Тогда + ВыполнитьДействияПриОбнаруженииКопии(); + Иначе + УстановитьПараметрЦентраМониторинга("ОзнакомительныйПакетОтправлен", Истина); + КонецЕсли; + КонецЕсли; РегистрыСведений.ПакетыДляОтправки.УдалитьПакет(НомерПакета); Иначе Прервать; @@ -1356,9 +1628,42 @@ ПараметрыКонстанты.Вставить("ПакетовДляОтправки", 3); ПараметрыКонстанты.Вставить("Сервер", "pult.1c.ru"); ПараметрыКонстанты.Вставить("АдресРесурса", "pult/v1/packet/"); + ПараметрыКонстанты.Вставить("АдресРесурсаДляДампов", "pult/v1/dump/"); ПараметрыКонстанты.Вставить("Порт", 443); ПараметрыКонстанты.Вставить("ЗащищенноеСоединение", Истина); + // Параметры сбора и отправки отчетов об ошибках (дампов). + // + // ОтправлятьФайлыДампов + // 0 - нет, + // 1 - да, + // 2 - нет ответа на вопрос, еще никогда не спрашивали. + ПараметрыКонстанты.Вставить("ОтправлятьФайлыДампов", 2); + ПараметрыКонстанты.Вставить("ВариантДампа", ""); + // Факт прохождения базовых проверок, например, свободное место и права на изменение файла логов. + // По сути нужен для формирования оповещений. + ПараметрыКонстанты.Вставить("БазовыеПроверкиПройдены", Ложь); + ПараметрыКонстанты.Вставить("СпрашиватьПередОтправкой", Истина); + ПараметрыКонстанты.Вставить("РезультатОтправки", ""); + ПараметрыКонстанты.Вставить("ИнформацияОДампах", ""); // Информация, которая будет представлена пользователю при согласовании отправки. + ПараметрыКонстанты.Вставить("РезервМестаВыключен", 40); + ПараметрыКонстанты.Вставить("РезервМестаВключен", 20); + ПараметрыКонстанты.Вставить("ОкончаниеСбораДампов", Дата(2017,1,1)); + // Хранит список компьютеров, где включен сбор полных дампов. + ПараметрыКонстанты.Вставить("СборПолныхДамповВключен", Новый Соответствие); + ПараметрыКонстанты.Вставить("ВариантыДампов", Новый Соответствие); + ПараметрыКонстанты.Вставить("ВариантыДамповОдобренные", Новый Соответствие); + + + // Параметры отправки тестового пакета. + // + ПараметрыКонстанты.Вставить("ТестовыйПакетОтправлен", Ложь); + ПараметрыКонстанты.Вставить("ЧислоПопытокОтправкиТестовогоПакета", 0); + + // Параметры отправки ознакомительного пакета (для получения идентификатора. + // + ПараметрыКонстанты.Вставить("ОзнакомительныйПакетОтправлен", Ложь); + Возврат ПараметрыКонстанты; КонецФункции @@ -1411,6 +1716,8 @@ ПараметрыОтправки.Вставить("РегистрироватьНастройкуКонфигурации", Ложь); ПараметрыОтправки.Вставить("РегистрироватьПроизводительность", Ложь); ПараметрыОтправки.Вставить("РегистрироватьПроизводительностьТехнологическую", Ложь); + ПараметрыОтправки.Вставить("РезультатОтправки", ""); // Результат отправки дампа обнуляем при успешной отправке пакета. + ПараметрыОтправки.Вставить("ОзнакомительныйПакетОтправлен", Истина); // Если ответ от сервиса получен, то всегда истина. СоответствиеПараметров = Новый Структура; СоответствиеПараметров.Вставить("info", "РегистрироватьИнформациюОСистеме"); @@ -1446,13 +1753,25 @@ Если НастройкиПоУмолчанию.Свойство(Ключ) Тогда Если ТипЗнч(НастройкиПоУмолчанию[Ключ]) = Тип("Число") Тогда - ПараметрыОтправки.Вставить(Ключ, Число(Значение)); + ОписаниеЧисло = Новый ОписаниеТипов("Число"); + ПриведенноеЗначение = ОписаниеЧисло.ПривестиЗначение(Значение); + Если Формат(ПриведенноеЗначение, "ЧН=0; ЧГ=") = Значение Тогда + ПараметрыОтправки.Вставить(Ключ, ПриведенноеЗначение); + КонецЕсли; ИначеЕсли ТипЗнч(НастройкиПоУмолчанию[Ключ]) = Тип("Строка") Тогда ПараметрыОтправки.Вставить(Ключ, Значение); ИначеЕсли ТипЗнч(НастройкиПоУмолчанию[Ключ]) = Тип("Булево") Тогда - ПараметрыОтправки.Вставить(Ключ, Булево(Значение)); + ОписаниеБулево = Новый ОписаниеТипов("Булево"); + ПриведенноеЗначение = ОписаниеБулево.ПривестиЗначение(Значение); + Если Формат(ПриведенноеЗначение, "БЛ=false; БИ=true") = Значение Тогда + ПараметрыОтправки.Вставить(Ключ, ПриведенноеЗначение); + КонецЕсли; ИначеЕсли ТипЗнч(НастройкиПоУмолчанию[Ключ]) = Тип("Дата") Тогда - ПараметрыОтправки.Вставить(Ключ, Дата(Значение)); + ОписаниеДата = Новый ОписаниеТипов("Дата"); + ПриведенноеЗначение = ОписаниеДата.ПривестиЗначение(Значение); + Если Формат(ПриведенноеЗначение, "ДФ=ггггММддЧЧммсс") = Значение Тогда + ПараметрыОтправки.Вставить(Ключ, ПриведенноеЗначение); + КонецЕсли; КонецЕсли; КонецЕсли; КонецЦикла; @@ -1512,6 +1831,7 @@ Если Параметры.Свойство("foundCopy") И Параметры.foundCopy Тогда ВыполнитьДействияПриОбнаруженииКопии(); + ПараметрыОтправки.Вставить("ОзнакомительныйПакетОтправлен", Ложь); КонецЕсли; НачатьТранзакцию(); @@ -1572,29 +1892,17 @@ КонецПопытки; КонецФункции -Функция УдалитьПараметрыЦентраМониторинга() - Блокировка = Новый БлокировкаДанных; - ЭлементБлокировки = Блокировка.Добавить("Константа.ПараметрыЦентраМониторинга"); - - НачатьТранзакцию(); - +Процедура УдалитьПараметрыЦентраМониторинга() Попытка - Блокировка.Заблокировать(); Параметры = Новый Структура; - - Хранилище = Новый ХранилищеЗначения(Параметры); - Константы.ПараметрыЦентраМониторинга.Установить(Хранилище); - - ЗафиксироватьТранзакцию(); Исключение - ОтменитьТранзакцию(); Ошибка = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); ЗаписьЖурналаРегистрации(НСтр("ru = 'Центр мониторинга.Удалить параметры центра мониторинга'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, Метаданные.ОбщиеМодули.ЦентрМониторингаСлужебный,,Ошибка); ВызватьИсключение Ошибка; КонецПопытки; -КонецФункции +КонецПроцедуры Функция УстановитьПараметрЦентраМониторинга(Параметр, Значение) Блокировка = Новый БлокировкаДанных; @@ -1632,6 +1940,7 @@ ПараметрыСервиса.Вставить("ИдентификаторИнформационнойБазы"); ПараметрыСервиса.Вставить("Сервер"); ПараметрыСервиса.Вставить("АдресРесурса"); + ПараметрыСервиса.Вставить("АдресРесурсаДляДампов"); ПараметрыСервиса.Вставить("Порт"); ПараметрыСервиса.Вставить("ЗащищенноеСоединение"); @@ -1642,6 +1951,7 @@ ПараметрыСервиса.Вставить("Сервер", ПараметрыСервисаПоУмолчанию.Сервер); ПараметрыСервиса.Вставить("АдресРесурса", ПараметрыСервисаПоУмолчанию.АдресРесурса); + ПараметрыСервиса.Вставить("АдресРесурсаДляДампов", ПараметрыСервисаПоУмолчанию.АдресРесурсаДляДампов); ПараметрыСервиса.Вставить("Порт", ПараметрыСервисаПоУмолчанию.Порт); ПараметрыСервиса.Вставить("ЗащищенноеСоединение", ПараметрыСервисаПоУмолчанию.ЗащищенноеСоединение); КонецЕсли; @@ -1660,9 +1970,9 @@ // Возвращаемое значение // Структура - содержит путь к каталогу дампов и признак удаления дампов. // -Функция ПолучитьКаталогДампов() Экспорт +Функция ПолучитьКаталогДампов(ТипДампа = "0", ПрекратитьСборПолных = Ложь) Экспорт КаталогНастроек = ПолучитьКаталогНастроекТехнологическогоЖурнала(); - КаталогДампов = НайтиКаталогДампов(КаталогНастроек); + КаталогДампов = НайтиКаталогДампов(КаталогНастроек, ТипДампа, ПрекратитьСборПолных); Возврат КаталогДампов; КонецФункции @@ -1678,8 +1988,8 @@ Возврат Путь; КонецФункции -Функция НайтиКаталогДампов(КаталогНастроек) - КаталогДампов = Новый Структура("Путь, УдалятьДампы", "", Ложь); +Функция НайтиКаталогДампов(КаталогНастроек, ТипДампа, ПрекратитьСборПолных) + КаталогДампов = Новый Структура("Путь, УдалятьДампы, ОписаниеОшибки", "", Ложь, ""); ИмяФайлаНастроек = "logcfg.xml"; ПутьКаталога = СформироватьПутьСРазделителем(КаталогНастроек.Путь); @@ -1708,6 +2018,7 @@ ЗаписьЖурналаРегистрации(НСтр("ru = 'Центр мониторинга'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Предупреждение,,,Сообщение); КаталогДампов.Путь = Неопределено; + КаталогДампов.ОписаниеОшибки = НСтр("ru='Ошибка чтения файла настроек технологического журнала'"); Возврат КаталогДампов; КонецПопытки; @@ -1721,38 +2032,51 @@ ЗаписьЖурналаРегистрации(НСтр("ru = 'Центр мониторинга'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Предупреждение,,,Сообщение); КаталогДампов.Путь = Неопределено; + КаталогДампов.ОписаниеОшибки = НСтр("ru='Ошибка секции сбора дампов в файле настроек технологического журнала'"); Возврат КаталогДампов; КонецЕсли; КонецЕсли; Если ПараметрыДампов <> Неопределено Тогда КаталогДампов.Путь = СформироватьПутьСРазделителем(ПараметрыДампов.Location); - Если ПараметрыДампов.type = "0" ИЛИ СтрНайти(КаталогДампов.Путь, "80af5716-b134-4b1c-a38d-4658d1ac4196") > 0 Тогда + Если ТипДампа = "0" И (ПараметрыДампов.type = "0" ИЛИ СтрНайти(КаталогДампов.Путь, "80af5716-b134-4b1c-a38d-4658d1ac4196") > 0) Тогда КаталогДампов.УдалятьДампы = Истина; КонецЕсли; ЧтениеXML.Закрыть(); - Если СтрНайти(КаталогДампов.Путь, "80af5716-b134-4b1c-a38d-4658d1ac4196") > 0 Тогда + Если ПараметрыДампов.type <> "3" И ТипДампа = "3" Тогда + СоздатьСекциюСбораДампов(Файл, ЧтениеXML, КаталогДампов, ТипДампа); + ИначеЕсли ПараметрыДампов.type = "3" И ПрекратитьСборПолных Тогда + СоздатьСекциюСбораДампов(Файл, ЧтениеXML, КаталогДампов, ТипДампа); + ИначеЕсли СтрНайти(КаталогДампов.Путь, "80af5716-b134-4b1c-a38d-4658d1ac4196") > 0 Тогда Если НЕ ПараметрыДампов.Свойство("externaldump") Тогда - СоздатьСекциюСбораДампов(Файл, ЧтениеXML, КаталогДампов); + СоздатьСекциюСбораДампов(Файл, ЧтениеXML, КаталогДампов, ТипДампа); ИначеЕсли ПараметрыДампов.externaldump <> "1" Тогда - СоздатьСекциюСбораДампов(Файл, ЧтениеXML, КаталогДампов); + СоздатьСекциюСбораДампов(Файл, ЧтениеXML, КаталогДампов, ТипДампа); КонецЕсли; КонецЕсли; Иначе ЧтениеXML.Закрыть(); - СоздатьСекциюСбораДампов(Файл, ЧтениеXML, КаталогДампов); + СоздатьСекциюСбораДампов(Файл, ЧтениеXML, КаталогДампов, ТипДампа); КонецЕсли; Иначе - КаталогДампов.Путь = СоздатьФайлНастроекСбораДампов(ПутьКаталога); - КаталогДампов.УдалятьДампы = Истина; + КаталогДампов.Путь = СоздатьФайлНастроекСбораДампов(ПутьКаталога, ТипДампа); + Если ТипДампа = "0" Тогда + КаталогДампов.УдалятьДампы = Истина; + КонецЕсли; + Если КаталогДампов.Путь = Неопределено Тогда + КаталогДампов.ОписаниеОшибки = НСтр("ru='Ошибка создания файла настроек технологического журнала. Регистрация дампов не возможна.'"); + КонецЕсли; КонецЕсли; Возврат КаталогДампов; КонецФункции -Функция СоздатьСекциюСбораДампов(Файл, ЧтениеXML, КаталогДампов) +Функция СоздатьСекциюСбораДампов(Файл, ЧтениеXML, КаталогДампов, ТипДампа) + + Идентификатор = "80af5716-b134-4b1c-a38d-4658d1ac4196"; + ЧтениеXML.ОткрытьФайл(Файл.ПолноеИмя, Новый ПараметрыЧтенияXML(,,,,,,,Ложь, Ложь)); ПостроительDOM = Новый ПостроительDOM; @@ -1762,21 +2086,26 @@ Если ДокументDOM.ЕстьДочерниеУзлы() Тогда ПервыйДочерний = ДокументDOM.ПервыйДочерний; Если ВРЕГ(ПервыйДочерний.ИмяУзла) = "CONFIG" Тогда - КаталогДампов.Путь = СформироватьПутьСРазделителем(СформироватьПутьСРазделителем(КаталогВременныхФайлов() + "Dumps") + "80af5716-b134-4b1c-a38d-4658d1ac4196"); + ПутьПоУмолчанию = СтрНайти(КаталогДампов.Путь, Идентификатор) > 0; + Если ПустаяСтрока(КаталогДампов.Путь) ИЛИ ПутьПоУмолчанию Тогда + КаталогДампов.Путь = СформироватьПутьСРазделителем(СформироватьПутьСРазделителем(КаталогВременныхФайлов() + "Dumps") + Идентификатор); + КонецЕсли; КаталогДампов.УдалятьДампы = Истина; ЭлементыДампы = ДокументDOM.ПолучитьЭлементыПоИмени("dump"); Если ЭлементыДампы.Количество() = 0 Тогда ЭлементДампы = ДокументDOM.СоздатьЭлемент("dump"); - ЭлементДампы.УстановитьАтрибут("location", КаталогДампов.Путь); + ЭлементДампы.УстановитьАтрибут("location", КаталогДампов.Путь); ЭлементДампы.УстановитьАтрибут("create", "1"); - ЭлементДампы.УстановитьАтрибут("type", "0"); + ЭлементДампы.УстановитьАтрибут("type", ТипДампа); ЭлементДампы.УстановитьАтрибут("externaldump", "1"); ПервыйДочерний.ДобавитьДочерний(ЭлементДампы); Иначе Для Каждого ТекЭлемент Из ЭлементыДампы Цикл ТекЭлемент.УстановитьАтрибут("externaldump", "1"); + ТекЭлемент.УстановитьАтрибут("type", ТипДампа); + ТекЭлемент.УстановитьАтрибут("location", КаталогДампов.Путь); КонецЦикла; КонецЕсли; @@ -1794,6 +2123,7 @@ ЗаписьЖурналаРегистрации(НСтр("ru = 'Центр мониторинга - регистрация дампов'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Предупреждение,,,Сообщение); КаталогДампов.Путь = Неопределено; + КаталогДампов.ОписаниеОшибки = НСтр("ru='Ошибка записи файла настроек технологического журнала. Регистрация дампов не возможна.'"); Возврат КаталогДампов; КонецПопытки; КонецЕсли; @@ -1807,17 +2137,18 @@ // Возвращаемое значение: // КаталогДампов - Строка - путь к каталогу, в котором будут храниться минидампы. // -Функция СоздатьФайлНастроекСбораДампов(ПутьКаталога) +Функция СоздатьФайлНастроекСбораДампов(ПутьКаталога, ТипДампа) ИмяФайлаНастроек = "logcfg.xml"; - КаталогДампов = СформироватьПутьСРазделителем(СформироватьПутьСРазделителем(КаталогВременныхФайлов() + "Dumps") + "80af5716-b134-4b1c-a38d-4658d1ac4196"); + Идентификатор = "80af5716-b134-4b1c-a38d-4658d1ac4196"; + КаталогДампов = СформироватьПутьСРазделителем(СформироватьПутьСРазделителем(КаталогВременныхФайлов() + "Dumps") + Идентификатор); Попытка ЗаписьXML = Новый ЗаписьXML; ЗаписьXML.ОткрытьФайл(ПутьКаталога + ИмяФайлаНастроек); СборДампов = "<config xmlns=""http://v8.1c.ru/v8/tech-log""> - | <dump location=""" + КаталогДампов + """ create=""1"" type=""0"" externaldump=""1""/> + | <dump location=""" + КаталогДампов + """ create=""1"" type=""" + ТипДампа + """ externaldump=""1""/> |</config>"; ЗаписьXML.ЗаписатьБезОбработки(СборДампов); ЗаписьXML.Закрыть(); @@ -2143,6 +2474,274 @@ Возврат ОписаниеМетаданных; КонецФункции +#КонецОбласти + +#Область РаботаСПодсистемойПравДоступа + +Функция ДанныеОбИспользованииРолей() + ДанныеОбИспользованииРолей = Новый Структура; + + // Получение данных об использовании ролей. + Запрос = Новый Запрос(ТекстЗапросаИспользованияРолей()); + Запрос.УстановитьПараметр("ПустойУИД", Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")); + РезультатПакет = Запрос.ВыполнитьПакет(); + + // Формирование структуры: роли в разрезе профилей групп доступа. + КолонкиИндекса = Новый Соответствие; + КолонкиИндекса.Вставить("ПрофильУИД", Новый Соответствие); + КолонкиИндекса.Вставить("РольИмя", Новый Соответствие); + ДополнительныеПараметры = Новый Соответствие; + ДополнительныеПараметры.Вставить("КолонкиИндекса", КолонкиИндекса); + + РолиПрофилей = РезультатПакет[7].Выгрузить(); + РолиПрофилей.Колонки.Добавить("ПрофильУИД", Новый ОписаниеТипов("Строка")); + Для Каждого Строка Из РолиПрофилей Цикл + Строка.ПрофильУИД = Строка(Строка.Профиль.УникальныйИдентификатор()); + КонецЦикла; + РолиПрофилей.Колонки.Удалить("Профиль"); + + RolesOfProfiles = СформироватьJSONСтруктуру("RolesOfProfiles", РолиПрофилей, ДополнительныеПараметры); + ДанныеОбИспользованииРолей.Вставить("RolesOfProfiles", RolesOfProfiles["RolesOfProfiles"]); + + // Формирование структуры: статистика по использованию профилей. + КолонкиИндекса = Новый Соответствие; + КолонкиИндекса.Вставить("ПрофильУИД", Новый Соответствие); + КолонкиИндекса.Вставить("Наименование", Новый Соответствие); + КолонкиИндекса.Вставить("ИдентификаторПоставляемыхДанных", Новый Соответствие); + ДополнительныеПараметры = Новый Соответствие; + ДополнительныеПараметры.Вставить("КолонкиИндекса", КолонкиИндекса); + + ДанныеПрофилей = РезультатПакет[6].Выгрузить(); + ДанныеПрофилей.Колонки.Добавить("ПрофильУИД", Новый ОписаниеТипов("Строка")); + ДанныеПрофилей.Колонки.Добавить("ИдентификаторПоставляемыхДанныхСтрока", Новый ОписаниеТипов("Строка")); + Для Каждого Строка Из ДанныеПрофилей Цикл + Строка.ИдентификаторПоставляемыхДанныхСтрока = Строка(Строка.ИдентификаторПоставляемыхДанных); + Строка.ПрофильУИД = Строка(Строка.Профиль.УникальныйИдентификатор()); + КонецЦикла; + ДанныеПрофилей.Колонки.Удалить("ИдентификаторПоставляемыхДанных"); + ДанныеПрофилей.Колонки.ИдентификаторПоставляемыхДанныхСтрока.Имя = "ИдентификаторПоставляемыхДанных"; + ДанныеПрофилей.Колонки.Удалить("Профиль"); + + Profiles = СформироватьJSONСтруктуру("Profiles", ДанныеПрофилей, ДополнительныеПараметры); + ДанныеОбИспользованииРолей.Вставить("Profiles", Profiles["Profiles"]); + + Возврат ДанныеОбИспользованииРолей; +КонецФункции + +Функция ТекстЗапросаИспользованияРолей() + + Возврат + "ВЫБРАТЬ + | ПрофилиГруппДоступа.Ссылка КАК Профиль, + | ПрофилиГруппДоступа.ИдентификаторПоставляемыхДанных КАК ИдентификаторПоставляемыхДанных, + | ПрофилиГруппДоступа.ПоставляемыйПрофильИзменен КАК ПоставляемыйПрофильИзменен, + | ПрофилиГруппДоступа.Наименование КАК Наименование, + | ГруппыДоступаПользователи.Ссылка КАК ГруппаДоступа, + | ГруппыДоступаПользователи.Ссылка.Пользователь = ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка) + | ИЛИ ГруппыДоступаПользователи.Ссылка.Пользователь = ЗНАЧЕНИЕ(Справочник.ВнешниеПользователи.ПустаяСсылка) + | ИЛИ ГруппыДоступаПользователи.Ссылка.Пользователь = НЕОПРЕДЕЛЕНО КАК ОбщаяГруппаДоступа, + | ГруппыДоступаПользователи.Пользователь КАК ПользовательТЧ, + | СоставыГруппПользователей.Пользователь КАК ПользовательРС + |ПОМЕСТИТЬ ВТДанныеПрофилей + |ИЗ + | Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + | ПО ГруппыДоступаПользователи.Пользователь = СоставыГруппПользователей.ГруппаПользователей + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПрофилиГруппДоступа КАК ПрофилиГруппДоступа + | ПО (ПрофилиГруппДоступа.Ссылка = ГруппыДоступаПользователи.Ссылка.Профиль) + | И (НЕ ГруппыДоступаПользователи.Ссылка.Профиль.ПометкаУдаления) + |ГДЕ + | СоставыГруппПользователей.Используется + | И НЕ ГруппыДоступаПользователи.Ссылка.Профиль.ПометкаУдаления + | И НЕ СоставыГруппПользователей.Пользователь.ИдентификаторПользователяИБ = &ПустойУИД + | + |СГРУППИРОВАТЬ ПО + | ПрофилиГруппДоступа.Ссылка, + | ПрофилиГруппДоступа.Наименование, + | ГруппыДоступаПользователи.Пользователь, + | СоставыГруппПользователей.Пользователь, + | ГруппыДоступаПользователи.Ссылка, + | ГруппыДоступаПользователи.Ссылка.Пользователь = ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка) + | ИЛИ ГруппыДоступаПользователи.Ссылка.Пользователь = ЗНАЧЕНИЕ(Справочник.ВнешниеПользователи.ПустаяСсылка) + | ИЛИ ГруппыДоступаПользователи.Ссылка.Пользователь = НЕОПРЕДЕЛЕНО, + | ПрофилиГруппДоступа.ИдентификаторПоставляемыхДанных, + | ПрофилиГруппДоступа.ПоставляемыйПрофильИзменен + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ РАЗЛИЧНЫЕ + | ВТДанныеПрофилей.Профиль КАК Профиль, + | ВТДанныеПрофилей.Наименование КАК Наименование, + | ВТДанныеПрофилей.ИдентификаторПоставляемыхДанных КАК ИдентификаторПоставляемыхДанных, + | ВТДанныеПрофилей.ПоставляемыйПрофильИзменен КАК ПоставляемыйПрофильИзменен + |ПОМЕСТИТЬ Профили + |ИЗ + | ВТДанныеПрофилей КАК ВТДанныеПрофилей + | + |ИНДЕКСИРОВАТЬ ПО + | Профиль + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | Профили.Профиль КАК Профиль, + | СУММА(ВЫБОР + | КОГДА НЕ ПрофилиГруппДоступаВидыДоступа.ВидДоступа ЕСТЬ NULL + | ТОГДА 1 + | ИНАЧЕ 0 + | КОНЕЦ) КАК ВсегоВидовДоступа, + | СУММА(ВЫБОР + | КОГДА ЕСТЬNULL(ПрофилиГруппДоступаВидыДоступа.Предустановленный, ЛОЖЬ) + | ТОГДА 1 + | ИНАЧЕ 0 + | КОНЕЦ) КАК ПредустановленныхВидовДоступа + |ПОМЕСТИТЬ ВидыДоступа + |ИЗ + | Профили КАК Профили + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПрофилиГруппДоступа.ВидыДоступа КАК ПрофилиГруппДоступаВидыДоступа + | ПО Профили.Профиль = ПрофилиГруппДоступаВидыДоступа.Ссылка + | + |СГРУППИРОВАТЬ ПО + | Профили.Профиль + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | Вложенный.Профиль КАК Профиль, + | КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Вложенный.ГруппаДоступа) КАК ГруппаДоступа, + | СУММА(ВЫБОР + | КОГДА НЕ Вложенный.ОбщаяГруппаДоступа + | ТОГДА 1 + | ИНАЧЕ 0 + | КОНЕЦ) КАК ПерсональнаяГруппа + |ПОМЕСТИТЬ ГруппыДоступа + |ИЗ + | (ВЫБРАТЬ + | ВТДанныеПрофилей.Профиль КАК Профиль, + | ВТДанныеПрофилей.ГруппаДоступа КАК ГруппаДоступа, + | ВТДанныеПрофилей.ОбщаяГруппаДоступа КАК ОбщаяГруппаДоступа + | ИЗ + | ВТДанныеПрофилей КАК ВТДанныеПрофилей + | + | СГРУППИРОВАТЬ ПО + | ВТДанныеПрофилей.Профиль, + | ВТДанныеПрофилей.ГруппаДоступа, + | ВТДанныеПрофилей.ОбщаяГруппаДоступа) КАК Вложенный + | + |СГРУППИРОВАТЬ ПО + | Вложенный.Профиль + | + |ИНДЕКСИРОВАТЬ ПО + | Профиль + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | Вложенный.Профиль КАК Профиль, + | СУММА(ВЫБОР + | КОГДА Вложенный.ПользовательТЧ ССЫЛКА Справочник.ГруппыПользователей + | ТОГДА 1 + | ИНАЧЕ 0 + | КОНЕЦ) КАК ГруппПользователей, + | СУММА(ВЫБОР + | КОГДА Вложенный.ПользовательТЧ ССЫЛКА Справочник.ГруппыВнешнихПользователей + | ТОГДА 1 + | ИНАЧЕ 0 + | КОНЕЦ) КАК ГруппВнешнихПользователей + |ПОМЕСТИТЬ ГруппыПользователей + |ИЗ + | (ВЫБРАТЬ + | ВТДанныеПрофилей.Профиль КАК Профиль, + | ВТДанныеПрофилей.ПользовательТЧ КАК ПользовательТЧ + | ИЗ + | ВТДанныеПрофилей КАК ВТДанныеПрофилей + | + | СГРУППИРОВАТЬ ПО + | ВТДанныеПрофилей.Профиль, + | ВТДанныеПрофилей.ПользовательТЧ) КАК Вложенный + | + |СГРУППИРОВАТЬ ПО + | Вложенный.Профиль + | + |ИНДЕКСИРОВАТЬ ПО + | Профиль + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | Вложенный.Профиль КАК Профиль, + | СУММА(ВЫБОР + | КОГДА Вложенный.ПользовательРС ССЫЛКА Справочник.Пользователи + | ТОГДА 1 + | ИНАЧЕ 0 + | КОНЕЦ) КАК Пользователи, + | СУММА(ВЫБОР + | КОГДА Вложенный.ПользовательРС ССЫЛКА Справочник.ВнешниеПользователи + | ТОГДА 1 + | ИНАЧЕ 0 + | КОНЕЦ) КАК ВнешниеПользователи + |ПОМЕСТИТЬ ПользователиПрофиля + |ИЗ + | (ВЫБРАТЬ + | ВТДанныеПрофилей.Профиль КАК Профиль, + | ВТДанныеПрофилей.ПользовательРС КАК ПользовательРС + | ИЗ + | ВТДанныеПрофилей КАК ВТДанныеПрофилей + | + | СГРУППИРОВАТЬ ПО + | ВТДанныеПрофилей.Профиль, + | ВТДанныеПрофилей.ПользовательРС) КАК Вложенный + | + |СГРУППИРОВАТЬ ПО + | Вложенный.Профиль + | + |ИНДЕКСИРОВАТЬ ПО + | Профиль + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | Профили.Профиль КАК Профиль, + | Профили.Наименование КАК Наименование, + | Профили.ИдентификаторПоставляемыхДанных КАК ИдентификаторПоставляемыхДанных, + | Профили.ПоставляемыйПрофильИзменен КАК ПоставляемыйПрофильИзменен, + | ЕСТЬNULL(ГруппыДоступа.ГруппаДоступа, 0) КАК ГруппаДоступа, + | ЕСТЬNULL(ГруппыДоступа.ПерсональнаяГруппа, 0) КАК ПерсональнаяГруппа, + | ЕСТЬNULL(ГруппыПользователей.ГруппПользователей, 0) КАК ГруппПользователей, + | ЕСТЬNULL(ГруппыПользователей.ГруппВнешнихПользователей, 0) КАК ГруппВнешнихПользователей, + | ЕСТЬNULL(ПользователиПрофиля.Пользователи, 0) КАК Пользователи, + | ЕСТЬNULL(ПользователиПрофиля.ВнешниеПользователи, 0) КАК ВнешниеПользователи, + | ЕСТЬNULL(ВидыДоступа.ВсегоВидовДоступа, 0) КАК ВсегоВидовДоступа, + | ЕСТЬNULL(ВидыДоступа.ПредустановленныхВидовДоступа, 0) КАК ПредустановленныхВидовДоступа + |ИЗ + | Профили КАК Профили + | ЛЕВОЕ СОЕДИНЕНИЕ ПользователиПрофиля КАК ПользователиПрофиля + | ПО Профили.Профиль = ПользователиПрофиля.Профиль + | ЛЕВОЕ СОЕДИНЕНИЕ ГруппыПользователей КАК ГруппыПользователей + | ПО Профили.Профиль = ГруппыПользователей.Профиль + | ЛЕВОЕ СОЕДИНЕНИЕ ГруппыДоступа КАК ГруппыДоступа + | ПО Профили.Профиль = ГруппыДоступа.Профиль + | ЛЕВОЕ СОЕДИНЕНИЕ ВидыДоступа КАК ВидыДоступа + | ПО Профили.Профиль = ВидыДоступа.Профиль + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ РАЗЛИЧНЫЕ + | Профили.Профиль КАК Профиль, + | ЕСТЬNULL(ПрофилиГруппДоступаРоли.Роль.Имя, """") КАК РольИмя + |ИЗ + | Профили КАК Профили + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПрофилиГруппДоступа.Роли КАК ПрофилиГруппДоступаРоли + | ПО Профили.Профиль = ПрофилиГруппДоступаРоли.Ссылка + | И (Профили.ИдентификаторПоставляемыхДанных = &ПустойУИД + | ИЛИ Профили.ПоставляемыйПрофильИзменен) + | + |УПОРЯДОЧИТЬ ПО + | Профиль"; + +КонецФункции + + #КонецОбласти @@ -2383,4 +2982,938 @@ КонецПроцедуры +Функция ПараметрыОповещенияОДампах() + ПолучаемыеПараметры = Новый Структура; + ПолучаемыеПараметры.Вставить("ОтправлятьФайлыДампов"); + ПолучаемыеПараметры.Вставить("БазовыеПроверкиПройдены"); + ПолучаемыеПараметры.Вставить("ВариантыДампов"); + ПолучаемыеПараметры.Вставить("ВариантДампа"); + ПолучаемыеПараметры.Вставить("СпрашиватьПередОтправкой"); + ПолучаемыеПараметры.Вставить("ИнформацияОДампах"); + + ПараметрыЦентраМониторинга = ПолучитьПараметрыЦентраМониторинга(ПолучаемыеПараметры); + + ЗапросНаПолучениеДампов = ПараметрыЦентраМониторинга.ОтправлятьФайлыДампов = 2 + И ПараметрыЦентраМониторинга.БазовыеПроверкиПройдены; + + ЕстьДампы = ПараметрыЦентраМониторинга.Свойство("ВариантыДампов") И ПараметрыЦентраМониторинга.ВариантыДампов.Количество(); + ЗапросНаОтправку = ПараметрыЦентраМониторинга.ОтправлятьФайлыДампов = 1 + И НЕ ПустаяСтрока(ПараметрыЦентраМониторинга.ВариантДампа) + И ЕстьДампы + И ПараметрыЦентраМониторинга.СпрашиватьПередОтправкой + И Не ПустаяСтрока(ПараметрыЦентраМониторинга.ИнформацияОДампах) + И ПараметрыЦентраМониторинга.БазовыеПроверкиПройдены; + + ПараметрыОповещенияОДампах = Новый Структура; + ПараметрыОповещенияОДампах.Вставить("ЗапросНаПолучениеДампов", ЗапросНаПолучениеДампов); + ПараметрыОповещенияОДампах.Вставить("ЗапросНаОтправку", ЗапросНаОтправку); + ПараметрыОповещенияОДампах.Вставить("ИнформацияОДампах", ПараметрыЦентраМониторинга.ИнформацияОДампах); + + Возврат ПараметрыОповещенияОДампах; +КонецФункции + +#Область СборИОтправкаДампов + +// В клиент-серверном варианте вызывается регламентным заданием СборИОтправкаДампов. +// Из него запускаются два фоновых задания - СборДампов и ОтправкаДампов. +// +Процедура СобратьИОтправитьДампы(СКлиентаНаСервере = Ложь, ИдентификаторЗадания = "") Экспорт + + ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(Метаданные.РегламентныеЗадания.СборИОтправкаОтчетовОбОшибках); + + ПараметрыСбораИОтправкиДампов = ПолучитьПараметрыЦентраМониторинга(); + ИмяКомпьютера = ИмяКомпьютера(); + + // Проверим, разрешен ли сбор дампов. + Если ПараметрыСбораИОтправкиДампов.ОтправлятьФайлыДампов = 0 Тогда + УстановитьПривилегированныйРежим(Истина); + УстановитьПараметрЦентраМониторинга("РезультатОтправки", Нстр("ru = 'Пользователь отказал в предоставлении полных дампов.'")); + УстановитьПривилегированныйРежим(Ложь); + ПрекратитьСборПолныхДампов(); + Возврат; + КонецЕсли; + + // Проверим, запрашивали ли мы вообще сбор полных дампов. + Если ПустаяСтрока(ПараметрыСбораИОтправкиДампов.ВариантДампа) Тогда + Возврат; + КонецЕсли; + + // Проверим, не пора ли отключаться по времени. + Если ТекущаяДатаСеанса() >= ПараметрыСбораИОтправкиДампов.ОкончаниеСбораДампов Тогда + УстановитьПривилегированныйРежим(Истина); + УстановитьПараметрЦентраМониторинга("РезультатОтправки", НСтр("ru = 'Сбор дампов прекращен по таймауту.'")); + УстановитьПривилегированныйРежим(Ложь); + ПрекратитьСборПолныхДампов(); + Возврат; + КонецЕсли; + + // Полные дампы собираем только в главном узле. + Если НЕ ЭтоГлавныйУзел() Тогда + Возврат; + КонецЕсли; + + // Проверим, сможем ли мы изменить logcfg при необходимости и получим каталог хранения дампов + // Заодно проверим, включен ли сбор дампов. + ТипДампа = ?(ПараметрыСбораИОтправкиДампов.ОтправлятьФайлыДампов = 2,"0","3"); + КаталогДампов = ПолучитьКаталогДампов(ТипДампа); + ПараметрыСбораИОтправкиДампов.Вставить("КаталогДампов", КаталогДампов.Путь); + Если КаталогДампов.Путь = Неопределено Тогда + УстановитьПривилегированныйРежим(Истина); + УстановитьПараметрЦентраМониторинга("РезультатОтправки", КаталогДампов.ОписаниеОшибки); + УстановитьПривилегированныйРежим(Ложь); + ПрекратитьСборПолныхДампов(); + Возврат; + Иначе + Если ТипДампа = "3" Тогда + ПараметрыСбораИОтправкиДампов.СборПолныхДамповВключен.Вставить(ИмяКомпьютера, Истина); + КонецЕсли; + КонецЕсли; + + // Получим данные о свободном месте на диске, куда собираются дампы. + ПозицияРазделителя = СтрНайти(КаталогДампов.Путь, ПолучитьРазделительПутиСервера()); + Если ПозицияРазделителя = 0 Тогда + УстановитьПривилегированныйРежим(Истина); + УстановитьПараметрЦентраМониторинга("РезультатОтправки", НСтр("ru='Не удалось определить букву диска'")); + УстановитьПривилегированныйРежим(Ложь); + ПрекратитьСборПолныхДампов(); + Возврат; + КонецЕсли; + БукваДиска = Лев(КаталогДампов.Путь, ПозицияРазделителя-1); + РезультатЗамера = СвободноеМестоНаДиске(БукваДиска, СКлиентаНаСервере); + Если НЕ РезультатЗамера.Успешно Тогда + УстановитьПривилегированныйРежим(Истина); + УстановитьПараметрЦентраМониторинга("РезультатОтправки", РезультатЗамера.ОписаниеОшибки); + УстановитьПривилегированныйРежим(Ложь); + ПрекратитьСборПолныхДампов(); + Возврат; + КонецЕсли; + + // Если сбор включен. + Если ПараметрыСбораИОтправкиДампов.СборПолныхДамповВключен[ИмяКомпьютера] = Истина Тогда + + // Проверим, достаточно ли свободного места. + Если РезультатЗамера.Значение/1024 < ПараметрыСбораИОтправкиДампов.РезервМестаВключен Тогда + УстановитьПривилегированныйРежим(Истина); + УстановитьПараметрЦентраМониторинга("РезультатОтправки", НСтр("ru = 'Недостаточно свободного места для хранения дампов. Сбор дампов будет отключен.'")); + УстановитьПривилегированныйРежим(Ложь); + ПрекратитьСборПолныхДампов(); + Возврат; + КонецЕсли; + + Если ПустаяСтрока(ИдентификаторЗадания) Тогда + ИдентификаторЗадания = "ВыполнениеНаСервере"; + КонецЕсли; + + // Собираем дампы. + СобратьДампы(ПараметрыСбораИОтправкиДампов); + + // Отправляем дампы. + ОтправитьДампы(ПараметрыСбораИОтправкиДампов); + + СборПолныхДамповВключен = ПолучитьПараметрыЦентраМониторинга("СборПолныхДамповВключен"); + СборПолныхДамповВключен.Вставить(ИмяКомпьютера, Истина); + УстановитьПривилегированныйРежим(Истина); + УстановитьПараметрыЦентраМониторинга(Новый Структура("БазовыеПроверкиПройдены, СборПолныхДамповВключен, РезультатОтправки", Истина, СборПолныхДамповВключен, "")); + УстановитьПривилегированныйРежим(Ложь); + + Иначе + // Если сбор выключен. + // Проверим, достаточно ли свободного места. + Если РезультатЗамера.Значение/1024 < ПараметрыСбораИОтправкиДампов.РезервМестаВыключен Тогда + УстановитьПривилегированныйРежим(Истина); + УстановитьПараметрЦентраМониторинга("РезультатОтправки", НСтр("ru = 'Недостаточно свободного места для сбора дампов.'")); + УстановитьПривилегированныйРежим(Ложь); + ПрекратитьСборПолныхДампов(); + Возврат; + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + УстановитьПараметрыЦентраМониторинга(Новый Структура("БазовыеПроверкиПройдены, РезультатОтправки", Истина, "")); + УстановитьПривилегированныйРежим(Ложь); + + // Автоматически формируется текущее дело в ПриЗаполненииСпискаТекущихДел. + + КонецЕсли; + + // Если запрошенный дамп больше не требуется, отправку необходимо прекратить. + Если НЕ ДампТребуется(ПараметрыСбораИОтправкиДампов.ВариантДампа, "None") Тогда + ПрекратитьСборПолныхДампов(); + КонецЕсли; + + УдалитьУстаревшиеФайлы(ПараметрыСбораИОтправкиДампов.ВариантДампа, КаталогДампов.Путь); + +КонецПроцедуры + +Процедура СобратьДампы(Параметры) + + // Получаем каталог хранения дампов. + КаталогДампов = Параметры.КаталогДампов; + + ИмяСвойства = ?(Параметры.СпрашиватьПередОтправкой, "ВариантыДампов", "ВариантыДамповОдобренные"); + + Если НЕ Параметры.Свойство(ИмяСвойства) Тогда + Параметры.Вставить(ИмяСвойства, Новый Соответствие); + КонецЕсли; + + ИмяКомпьютера = ИмяКомпьютера(); + + // Ищем дампы в каталоге. + ФайлыДампов = НайтиФайлы(КаталогДампов, "*.mdmp"); + ЕстьИзменения = Ложь; + // Перебираем найденные дампы. + Для Каждого ФайлДампа Из ФайлыДампов Цикл + + // Если дампы с нулевым смещением - сразу удаляем. + Если СтрНайти(ФайлДампа.ИмяБезРасширения, "00000000") > 0 Тогда + ФайлыУдалены(ФайлДампа.ПолноеИмя); + Продолжить; + КонецЕсли; + + СтруктураДампа = ОписаниеДампа(ФайлДампа.Имя); + + ВариантДампа = СтруктураДампа.Процесс + "_" + СтруктураДампа.ВерсияПлатформы + "_" + СтруктураДампа.Смещение; + + // Если дамп с ненулевым смещением, то надо проверить, стоит ли его отправлять и соответствует ли он запрошенному. + Если ДампТребуется(ВариантДампа, Параметры.ВариантДампа) Тогда + + ИмяАрхива = КаталогДампов + ВариантДампа + ".zip"; + + // Архивируем дамп и записать о нем информацию (имя + размер). + ЗаписьZipФайла = Новый ЗаписьZipФайла(); + ЗаписьZipФайла.Открыть(ИмяАрхива,,,МетодСжатияZIP.Сжатие); + ЗаписьZipФайла.Добавить(ФайлДампа.ПолноеИмя); + ЗаписьZipФайла.Записать(); + + ФайлАрхива = Новый Файл(ИмяАрхива); + Размер = Окр(ФайлАрхива.Размер()/1024/1024,3); // Размер файла в мегабайтах. + + ДанныеДампа = Новый Структура; + ДанныеДампа.Вставить("ПолноеИмя", ИмяАрхива); + ДанныеДампа.Вставить("Размер", Размер); + ДанныеДампа.Вставить("ИмяКомпьютера", ИмяКомпьютера); + + Параметры[ИмяСвойства].Вставить(ВариантДампа, ДанныеДампа); + + ЕстьИзменения = Истина; + + КонецЕсли; + + // Удалить исходный дамп. + ФайлыУдалены(ФайлДампа.ПолноеИмя); + + КонецЦикла; + + Если ЕстьИзменения Тогда + ПараметрыЦентраМониторинга = ПолучитьПараметрыЦентраМониторинга(Новый Структура(ИмяСвойства)); + Для Каждого Запись Из Параметры[ИмяСвойства] Цикл + ПараметрыЦентраМониторинга[ИмяСвойства].Вставить(Запись.Ключ, Запись.Значение); + КонецЦикла; + УстановитьПривилегированныйРежим(Истина); + УстановитьПараметрЦентраМониторинга(ИмяСвойства, ПараметрыЦентраМониторинга[ИмяСвойства]); + УстановитьПривилегированныйРежим(Ложь); + КонецЕсли; + +КонецПроцедуры + +Процедура ОтправитьДампы(Параметры) + + Параметры.Вставить("ВариантыДамповОдобренные", ПолучитьПараметрыЦентраМониторинга("ВариантыДамповОдобренные")); + + Если Параметры.СпрашиватьПередОтправкой Тогда + + Если Параметры.Свойство("ВариантыДампов") И Параметры.ВариантыДампов.Количество() Тогда + + ШаблонЗапросДляОтправки = Нстр("ru = 'Для отправки подготовлены отчеты об ошибках (%1 шт.) + |Общий объем данных: %2 МБ. + |Отправить указанные файлы для анализа в фирму ""1С""?'"); + + ОбщийОбъем = 0; + ВсегоШтук = 0; + + Для Каждого Запись Из Параметры.ВариантыДампов Цикл + + ВариантДампа = Запись.Ключ; + ДанныеДампа = Запись.Значение; + + // Спросим у сервиса ЦМ нужен ли такой дамп. + Если ДампТребуется(ВариантДампа, Параметры.ВариантДампа) Тогда + ВсегоШтук = ВсегоШтук + 1; + ОбщийОбъем = ОбщийОбъем + ДанныеДампа.Размер; + Иначе + ФайлыУдалены(ДанныеДампа.ПолноеИмя); + КонецЕсли; + + КонецЦикла; + + // Спросим у пользователя, хочет ли он отправить дампы. + ЗапросДляОтправки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонЗапросДляОтправки, ВсегоШтук, Формат(ОбщийОбъем,"ЧДЦ=; ЧН=0")); + УстановитьПривилегированныйРежим(Истина); + УстановитьПараметрЦентраМониторинга("ИнформацияОДампах", ЗапросДляОтправки); + УстановитьПривилегированныйРежим(Ложь); + + КонецЕсли; + + Иначе + Для Каждого Запись Из Параметры.ВариантыДампов Цикл + Параметры.ВариантыДамповОдобренные.Вставить(Запись.Ключ, Запись.Значение); + КонецЦикла; + + УстановитьПривилегированныйРежим(Истина); + УстановитьПараметрЦентраМониторинга("ВариантыДамповОдобренные", Параметры.ВариантыДамповОдобренные); + УстановитьПривилегированныйРежим(Ложь); + + КонецЕсли; + + ИмяКомпьютера = ИмяКомпьютера(); + ТребуемыйДамп = Параметры.ВариантДампа; + + // Отправляем дампы. + МассивОтправленных = Новый Массив; + Для Каждого Запись Из Параметры.ВариантыДамповОдобренные Цикл + // Есть смысл проверять, на той ли мы машине. + Если ИмяКомпьютера <> Запись.Значение.ИмяКомпьютера Тогда + Продолжить; + КонецЕсли; + Если ОтправкаДампа(Запись.Ключ, Запись.Значение, ТребуемыйДамп) Тогда + МассивОтправленных.Добавить(Запись.Ключ); + КонецЕсли; + КонецЦикла; + + // Отправленные дампы убираем из константы. + ЕстьИзменения = Ложь; + Параметры.Вставить("ВариантыДамповОдобренные", ПолучитьПараметрыЦентраМониторинга("ВариантыДамповОдобренные")); + Для Каждого Элемент Из МассивОтправленных Цикл + Параметры.ВариантыДамповОдобренные.Удалить(Элемент); + ЕстьИзменения = Истина; + КонецЦикла; + Если ЕстьИзменения Тогда + УстановитьПривилегированныйРежим(Истина); + УстановитьПараметрЦентраМониторинга("ВариантыДамповОдобренные", Параметры.ВариантыДамповОдобренные); + УстановитьПривилегированныйРежим(Ложь); + КонецЕсли; + +КонецПроцедуры + +Процедура ПрекратитьСборПолныхДампов() + + Прекращен = Истина; + + // Очистить параметры сбора дампов. + НовыеПараметры = Новый Структура; + НовыеПараметры.Вставить("ВариантДампа", ""); + НовыеПараметры.Вставить("ВариантыДампов", Новый Соответствие); + НовыеПараметры.Вставить("ВариантыДамповОдобренные", Новый Соответствие); + НовыеПараметры.Вставить("ИнформацияОДампах", ""); + НовыеПараметры.Вставить("БазовыеПроверкиПройдены", Ложь); + + Попытка + УстановитьПривилегированныйРежим(Истина); + УстановитьПараметрыЦентраМониторинга(НовыеПараметры); + УстановитьПривилегированныйРежим(Ложь); + Исключение + // Не удалось отключить сбор полных дампов. + Прекращен = Ложь; + КонецПопытки; + + // Изменить logcfg. + КаталогДампов = ПолучитьКаталогДампов("0", Истина); + Если КаталогДампов.Путь = Неопределено Тогда + // Не удалось изменить logcfg + Прекращен = Ложь; + КонецЕсли; + // Удалить файлы дампов. + Если КаталогДампов.Путь <> Неопределено Тогда + Если НЕ ФайлыУдалены(КаталогДампов.Путь) Тогда + // Не удалось удалить файлы дампов. + Прекращен = Ложь; + КонецЕсли; + КонецЕсли; + + Если Прекращен Тогда + СборПолныхДамповВключен = ПолучитьПараметрыЦентраМониторинга("СборПолныхДамповВключен"); + СборПолныхДамповВключен.Удалить(ИмяКомпьютера()); + УстановитьПривилегированныйРежим(Истина); + УстановитьПараметрЦентраМониторинга("СборПолныхДамповВключен", СборПолныхДамповВключен); + УстановитьПривилегированныйРежим(Ложь); + УдалитьРегламентноеЗадание("СборИОтправкаОтчетовОбОшибках"); + КонецЕсли; + +КонецПроцедуры + +Процедура УдалитьУстаревшиеФайлы(ТребуемыйДамп, ПутьККаталогу) + + МассивФайлов = НайтиФайлы(ПутьККаталогу,"*"); + Для Каждого Файл Из МассивФайлов Цикл + СтруктураДампа = ОписаниеДампа(Файл.Имя); + ВариантДампа = СтруктураДампа.Процесс + "_" + СтруктураДампа.ВерсияПлатформы + "_" + СтруктураДампа.Смещение; + Если ВариантДампа = ТребуемыйДамп Тогда + Продолжить; + КонецЕсли; + + // Удалим файл старше трех дней. + Если Файл.Существует() И ТекущаяДатаСеанса() - Файл.ПолучитьВремяИзменения() > 3*86400 Тогда + ФайлыУдалены(Файл.ПолноеИмя); + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +Функция СвободноеМестоНаДиске(БукваДиска, СКлиентаНаСервере) + + РезультатЗапроса = Новый Структура("Значение, Успешно, ОписаниеОшибки", 0, Истина, ""); + + КоманднаяСтрока = "typeperf ""\LogicalDisk("+БукваДиска+")\Free Megabytes"" -sc 1"; + ПараметрыЗапускаПрограммы = Новый Структура; + ПараметрыЗапускаПрограммы.Вставить("ТекущийКаталог", ""); + ПараметрыЗапускаПрограммы.Вставить("ДождатьсяЗавершения", Истина); + ПараметрыЗапускаПрограммы.Вставить("ПолучитьПотокВывода", Истина); + ПараметрыЗапускаПрограммы.Вставить("ПолучитьПотокОшибок", Истина); + ПараметрыЗапускаПрограммы.Вставить("СКлиентаНаСервере", СКлиентаНаСервере); + + РезультатЗапуска = ЗапуститьПрограмму(КоманднаяСтрока, ПараметрыЗапускаПрограммы, "437"); + + ПотокОшибок = РезультатЗапуска.ПотокОшибок; + ПотокВывода = РезультатЗапуска.ПотокВывода; + + Если ЗначениеЗаполнено(ПотокОшибок) Тогда + РезультатЗапроса.Успешно = Ложь; + РезультатЗапроса.ОписаниеОшибки = НСтр("ru='Ошибка при выполнении команды typeperf'"); + Иначе + МассивСтрок = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ПотокВывода, Символы.ПС, Истина, Истина); + Если МассивСтрок.Количество()>=2 Тогда + ИскомаяСтрока = МассивСтрок[1]; + МассивПодстрок = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ИскомаяСтрока, ",", Истина, Истина); + Если МассивПодстрок.Количество()>=2 Тогда + ИскомаяСтрока = МассивПодстрок[1]; + ИскомаяСтрока = СтрЗаменить(ИскомаяСтрока,"""",""); + Попытка + РезультатЗапроса.Значение = Число(ИскомаяСтрока); + Исключение + РезультатЗапроса.Успешно = Ложь; + РезультатЗапроса.ОписаниеОшибки = ОписаниеОшибки(); + КонецПопытки; + КонецЕсли; + Иначе + РезультатЗапроса.Успешно = Ложь; + РезультатЗапроса.ОписаниеОшибки = НСтр("ru='Не удалось разобрать результат typeperf'"); + КонецЕсли; + КонецЕсли; + + Возврат РезультатЗапроса; + +КонецФункции + +Функция ДампТребуется(ВариантДампа, ТребуемыйДамп) + + Результат = Ложь; + + // Обратимся к http-сервису. + Параметры = ПолучитьПараметрыСервисаОтправки(); + + // Узнаем, актуален ли дамп. + АдресРесурса = Параметры.АдресРесурсаДляДампов; + Если Прав(АдресРесурса, 1) <> "/" Тогда + АдресРесурса = АдресРесурса + "/"; + КонецЕсли; + + GUID = Строка(Параметры.ИдентификаторИнформационнойБазы); + АдресРесурса = АдресРесурса + "IsDumpNeeded" + "/" + GUID + "/" + ВариантДампа; + + ПараметрыHTTP = Новый Структура; + ПараметрыHTTP.Вставить("Сервер", Параметры.Сервер); + ПараметрыHTTP.Вставить("АдресРесурса", АдресРесурса); + ПараметрыHTTP.Вставить("Данные", ""); + ПараметрыHTTP.Вставить("Порт", Параметры.Порт); + ПараметрыHTTP.Вставить("ЗащищенноеСоединение", Параметры.ЗащищенноеСоединение); + ПараметрыHTTP.Вставить("Метод", "GET"); + ПараметрыHTTP.Вставить("ТипДанных", ""); + ПараметрыHTTP.Вставить("Таймаут", 60); + + HTTPОтвет = HTTPСервисОтправитьДанныеСлужебный(ПараметрыHTTP); + + Если HTTPОтвет.КодСостояния = 200 Тогда + Результат = HTTPОтвет.Тело = "true"; + // Эта ветка для проверки востребованности запрошенного варианта дампа. + // Если ответа от веб-сервиса нет, то продолжаем сбор. + ИначеЕсли ТребуемыйДамп = "None" Тогда + Результат = Истина; + // Эта ветка для проверки востребованности собранного варианта дампа. + // Если ответа от веб-сервиса нет, то собранный дамп должен быть равен запрошенному. + Иначе + Результат = ВариантДампа = ТребуемыйДамп; + КонецЕсли; + + Возврат Результат; + +КонецФункции + +Функция МожноЗагружатьДамп(ВариантДампа) + + Результат = Ложь; + + // Обратимся к http-сервису. + Параметры = ПолучитьПараметрыСервисаОтправки(); + + // Узнаем, актуален ли дамп. + АдресРесурса = Параметры.АдресРесурсаДляДампов; + Если Прав(АдресРесурса, 1) <> "/" Тогда + АдресРесурса = АдресРесурса + "/"; + КонецЕсли; + + GUID = Строка(Параметры.ИдентификаторИнформационнойБазы); + АдресРесурса = АдресРесурса + "CanLoadDump" + "/" + GUID + "/" + ВариантДампа; + + ПараметрыHTTP = Новый Структура; + ПараметрыHTTP.Вставить("Сервер", Параметры.Сервер); + ПараметрыHTTP.Вставить("АдресРесурса", АдресРесурса); + ПараметрыHTTP.Вставить("Данные", ""); + ПараметрыHTTP.Вставить("Порт", Параметры.Порт); + ПараметрыHTTP.Вставить("ЗащищенноеСоединение", Параметры.ЗащищенноеСоединение); + ПараметрыHTTP.Вставить("Метод", "GET"); + ПараметрыHTTP.Вставить("ТипДанных", ""); + ПараметрыHTTP.Вставить("Таймаут", 60); + + HTTPОтвет = HTTPСервисОтправитьДанныеСлужебный(ПараметрыHTTP); + + Если HTTPОтвет.КодСостояния = 200 Тогда + Результат = HTTPОтвет.Тело = "true"; + КонецЕсли; + + Возврат Результат; + +КонецФункции + +Функция ОтправкаДампа(ВариантДампа, Данные, ТребуемыйДамп) + + РезультатОтправки = Ложь; + + // Проверим, существует ли файл. + // Могут быть такие ситуации, когда дамп есть в списке одобренных, но по факту файла уже нет. + // Тогда считаем, что он успешно отправлен. + Файл = Новый Файл(Данные.ПолноеИмя); + Если НЕ Файл.Существует() Тогда + Возврат Истина; + КонецЕсли; + + // Проверим, актуален ли еще дамп. Если нет - удалим. + Если Не ДампТребуется(ВариантДампа, ТребуемыйДамп) Тогда + ФайлыУдалены(Данные.ПолноеИмя); + Возврат Истина; + КонецЕсли; + + // Проверим, разрешит ли нам сервер загружать дамп, возможно нужно подождать. + Если Не МожноЗагружатьДамп(ВариантДампа) Тогда + Возврат Ложь; + КонецЕсли; + + Параметры = ПолучитьПараметрыСервисаОтправки(); + + ОценкаПроизводительностиСуществует = ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОценкаПроизводительности"); + Если ОценкаПроизводительностиСуществует Тогда + МодульОценкаПроизводительности = ОбщегоНазначения.ОбщийМодуль("ОценкаПроизводительности"); + ВремяНачала = МодульОценкаПроизводительности.НачатьЗамерВремени(); + КонецЕсли; + + // Отправим дамп через http-сервис. + GUID = Строка(Параметры.ИдентификаторИнформационнойБазы); + Хеш = Новый ХешированиеДанных(ХешФункция.CRC32); + Хеш.ДобавитьФайл(Данные.ПолноеИмя); + HASH = Формат(Хеш.ХешСумма,"ЧГ=0"); + + АдресРесурса = Параметры.АдресРесурсаДляДампов; + Если Прав(АдресРесурса, 1) <> "/" Тогда + АдресРесурса = АдресРесурса + "/"; + КонецЕсли; + + АдресРесурса = АдресРесурса + "LoadDump" + "/" + GUID + "/" + ВариантДампа + "/" + HASH; + + ПараметрыHTTP = Новый Структура; + ПараметрыHTTP.Вставить("Сервер", Параметры.Сервер); + ПараметрыHTTP.Вставить("АдресРесурса", АдресРесурса); + ПараметрыHTTP.Вставить("Данные", Данные.ПолноеИмя); + ПараметрыHTTP.Вставить("Порт", Параметры.Порт); + ПараметрыHTTP.Вставить("ЗащищенноеСоединение", Параметры.ЗащищенноеСоединение); + ПараметрыHTTP.Вставить("Метод", "POST"); + ПараметрыHTTP.Вставить("ТипДанных", "ДвоичныеДанные"); + ПараметрыHTTP.Вставить("Таймаут", 0); + + // Архив удаляется при успешной отправке. + HTTPОтвет = HTTPСервисОтправитьДанныеСлужебный(ПараметрыHTTP); + + Если HTTPОтвет.КодСостояния = 200 Тогда + РезультатОтправки = HTTPОтвет.Тело = "true"; + КонецЕсли; + + Если ОценкаПроизводительностиСуществует Тогда + МодульОценкаПроизводительности.ЗакончитьЗамерВремени("ЦентрМониторингаОтправитьОтчетОбОшибках", ВремяНачала); + КонецЕсли; + + Возврат РезультатОтправки; + +КонецФункции + +Функция ФайлыУдалены(Путь, Маска = "") + Попытка + УдалитьФайлы(Путь, Маска) + Исключение + Возврат Ложь; + КонецПопытки; + Возврат Истина; +КонецФункции + +#КонецОбласти + +#Область ЗапускПрограмм + +// Возвращает структуру параметров для см. процедуру ЗапуститьПрограмму. +// +// Возвращаемое значение: +// ТекущийКаталог - Строка - Задает текущий каталог запускаемого приложения. +// ДождатьсяЗавершения - Булево - Истина - дожидаться завершения запущенного приложения +// перед продолжением работы. +// ПолучитьПотокВывода - Булево - Истина - результат, направленный в поток stdout, +// если не указан ДождатьсяЗавершения - игнорируется. +// ПолучитьПотокОшибок - Булево - Истина - ошибки, направленные в поток stderr, +// если не указан ДождатьсяЗавершения - игнорируется. +Функция ПараметрыЗапускаПрограммы() + + Параметры = Новый Структура; + Параметры.Вставить("ТекущийКаталог", ""); + Параметры.Вставить("СКлиентаНаСервере", Ложь); + Параметры.Вставить("ДождатьсяЗавершения", Ложь); + Параметры.Вставить("ПолучитьПотокВывода", Ложь); + Параметры.Вставить("ПолучитьПотокОшибок", Ложь); + + Возврат Параметры; + +КонецФункции + +// Запускает внешнюю программу в соответствии с параметрами запуска. +// +// Параметры: +// СтрокаКоманды - Строка - Командная строка для запуска программы. +// ПараметрыЗапускаПрограммы - Структура, Неопределено - см. функцию ПараметрыЗапускаПрограммы. +// +// Возвращаемое значение: +// Структура - Результат работы программы. +// КодВозврата - Число - код возврата программы. +// ПотокВывода - Строка - результат работы программы, направленный в поток stdout. +// ПотокОшибок - Строка - ошибки исполнения программы, направленные в поток stderr. +// +Функция ЗапуститьПрограмму(Знач СтрокаКоманды, ПараметрыЗапускаПрограммы = Неопределено, Кодировка = "") + + Если СодержитНебезопасныеДействия(СтрокаКоманды) Тогда + ВызватьИсключение НСтр("ru = 'Недопустимое значение параметра СтрокаКоманды. + |Строка команды не должна содержать символы: ""$"", ""`"", ""|"", "";"", ""&"".'"); + КонецЕсли; + + Если ПараметрыЗапускаПрограммы = Неопределено Тогда + ПараметрыЗапускаПрограммы = ПараметрыЗапускаПрограммы(); + КонецЕсли; + + ТекущийКаталог = ПараметрыЗапускаПрограммы.ТекущийКаталог; + СКлиентаНаСервере = ПараметрыЗапускаПрограммы.СКлиентаНаСервере; + ДождатьсяЗавершения = ПараметрыЗапускаПрограммы.ДождатьсяЗавершения; + ПолучитьПотокВывода = ПараметрыЗапускаПрограммы.ПолучитьПотокВывода; + ПолучитьПотокОшибок = ПараметрыЗапускаПрограммы.ПолучитьПотокОшибок; + + Если Не ПустаяСтрока(Кодировка) Тогда + СтрокаКоманды = "chcp " + Кодировка + " | " + СтрокаКоманды; + КонецЕсли; + + Если ДождатьсяЗавершения Тогда + + Если ПолучитьПотокВывода Тогда + ФайлПотокаВывода = ПолучитьИмяВременногоФайла("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, ДождатьсяЗавершения); + Оболочка = Неопределено; + Иначе + ЗапуститьПриложение(СтрокаКоманды,, ДождатьсяЗавершения, КодВозврата); + КонецЕсли; + + Иначе + // Для ОС Linux и MacOS просто запускаем команду. + ЗапуститьПриложение(СтрокаКоманды,, ДождатьсяЗавершения, КодВозврата); + + КонецЕсли; + + // Переопределение возвращенного оболочной значения. + Если КодВозврата = Неопределено Тогда + КодВозврата = 0; + КонецЕсли; + + ПотокВывода = ""; + ПотокОшибок = ""; + + Если ДождатьсяЗавершения Тогда + + Если ПолучитьПотокВывода Тогда + + ЧтениеПотокаВывода = Новый ЧтениеТекста(ФайлПотокаВывода, КодировкаСтандартныхПотоков()); + ПотокВывода = ЧтениеПотокаВывода.Прочитать(); + ЧтениеПотокаВывода.Закрыть(); + + УдалитьВременныйФайл(ФайлПотокаВывода); + + Если ПотокВывода = Неопределено Тогда + ПотокВывода = ""; + КонецЕсли; + + КонецЕсли; + + Если ПолучитьПотокОшибок Тогда + + ЧтениеПотокаОшибок = Новый ЧтениеТекста(ФайлПотокаОшибок, КодировкаСтандартныхПотоков()); + ПотокОшибок = ЧтениеПотокаОшибок.Прочитать(); + ЧтениеПотокаОшибок.Закрыть(); + + УдалитьВременныйФайл(ФайлПотокаОшибок); + + Если ПотокОшибок = Неопределено Тогда + ПотокОшибок = ""; + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + + Результат = Новый Структура; + Результат.Вставить("КодВозврата", КодВозврата); + Результат.Вставить("ПотокВывода", ПотокВывода); + Результат.Вставить("ПотокОшибок", ПотокОшибок); + + Возврат Результат; + +КонецФункции + +// Возвращает кодировку стандартных поток вывода и ошибок, используемую в текущей ОС. +// +// Возвращаемое значение: +// КодировкаТекста - кодировка стандартных потоков вывода и ошибок. +// +Функция КодировкаСтандартныхПотоков() + + СистемнаяИнформация = Новый СистемнаяИнформация(); + Если (СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86) + Или (СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86_64) Тогда + + Кодировка = КодировкаТекста.OEM; + Иначе + Кодировка = КодировкаТекста.Системная; + КонецЕсли; + + Возврат Кодировка; + +КонецФункции + +Процедура УдалитьВременныйФайл(ПолноеИмяФайла) + + Если ПустаяСтрока(ПолноеИмяФайла) Тогда + Возврат; + КонецЕсли; + + Попытка + УдалитьФайлы(ПолноеИмяФайла); + Исключение + ЗаписьЖурналаРегистрации(НСтр("ru = 'Базовая функциональность'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Предупреждение,,, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось удалить временный файл + |%1 по причине: %2'"), + ПолноеИмяФайла, + КраткоеПредставлениеОшибки(ИнформацияОбОшибке()))); + КонецПопытки; + +КонецПроцедуры + +Функция СодержитНебезопасныеДействия(СтрокаКоманды) + + Возврат СтрНайти(СтрокаКоманды, "$") <> 0 + Или СтрНайти(СтрокаКоманды, "`") <> 0 + Или СтрНайти(СтрокаКоманды, "|") <> 0 + Или СтрНайти(СтрокаКоманды, ";") <> 0 + Или СтрНайти(СтрокаКоманды, "&") <> 0; + +КонецФункции + +#КонецОбласти + +#Область ОтправкаТестовогоПакета + +// Отправляет тестовый пакет в центр мониторинга. +// Параметры: +// ПараметрыВыполнения - Структура: +// * Итератор - Число. При вызове извне должен быть равен 0. +// * ОтправкаТестовогоПакета - Булево. +// * ПолучениеИдентификатора - Булево. +// +Процедура ОтправитьТестовыйПакет(ПараметрыВыполнения, АдресРезультата) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + РезультатВыполнения = Новый Структура("Успешно, КраткоеПредставлениеОшибки", Истина, ""); + + ОценкаПроизводительностиСуществует = ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОценкаПроизводительности"); + Если ОценкаПроизводительностиСуществует Тогда + МодульОценкаПроизводительности = ОбщегоНазначения.ОбщийМодуль("ОценкаПроизводительности"); + ВремяНачала = МодульОценкаПроизводительности.НачатьЗамерВремени(); + КонецЕсли; + + // Отключим, чтобы не отправить лишнего. + НовыеПараметры = Новый Структура; + НовыеПараметры.Вставить("РегистрироватьИнформациюОСистеме", Ложь); + НовыеПараметры.Вставить("РегистрироватьВерсииПодсистем", Ложь); + НовыеПараметры.Вставить("РегистрироватьДампы", Ложь); + НовыеПараметры.Вставить("РегистрироватьБизнесСтатистику", Ложь); + НовыеПараметры.Вставить("РегистрироватьСтатистикуКонфигурации", Ложь); + НовыеПараметры.Вставить("РегистрироватьНастройкуКонфигурации", Ложь); + НовыеПараметры.Вставить("РегистрироватьПроизводительность", Ложь); + НовыеПараметры.Вставить("РегистрироватьПроизводительностьТехнологическую", Ложь); + УстановитьПараметрыЦентраМониторинга(НовыеПараметры); + + ДатаЗапуска = ТекущаяУниверсальнаяДата(); + ПараметрыЦентраМониторинга = Новый Структура(); + ПараметрыЦентраМониторинга.Вставить("ТестовыйПакетОтправлен"); + ПараметрыЦентраМониторинга.Вставить("ЧислоПопытокОтправкиТестовогоПакета"); + ПараметрыЦентраМониторинга.Вставить("ОтправкаДанныхСледующееФормирование"); + ПараметрыЦентраМониторинга.Вставить("ОтправкаДанныхПериодФормирования"); + ПараметрыЦентраМониторинга.Вставить("ВключитьЦентрМониторинга"); + ПараметрыЦентраМониторинга.Вставить("ЦентрОбработкиИнформацииОПрограмме"); + ПараметрыЦентраМониторинга.Вставить("ОзнакомительныйПакетОтправлен"); + + ПараметрыЦентраМониторинга = ПолучитьПараметрыЦентраМониторинга(ПараметрыЦентраМониторинга); + + Если ОтправкаТестовогоПакетаВозможна(ПараметрыЦентраМониторинга, ДатаЗапуска) И ПараметрыВыполнения.ОтправкаТестовогоПакета + ИЛИ ПолученияИдентификатораВозможно(ПараметрыЦентраМониторинга) И ПараметрыВыполнения.ПолучениеИдентификатора Тогда + + Попытка + СформироватьПакетДляОтправки(); + Исключение + РезультатВыполнения.Успешно = Ложь; + РезультатВыполнения.КраткоеПредставлениеОшибки = НСтр("ru = 'Ошибка при формировании пакета.'"); + Комментарий = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗаписьЖурналаРегистрации( + НСтр("ru = 'Центр мониторинга - сформировать тестовый пакет для отправки'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, + , + , + Комментарий); + КонецПопытки; + + Попытка + HTTPОтвет = ОтправитьДанныеМониторинга(ПараметрыВыполнения.ОтправкаТестовогоПакета); + Если HTTPОтвет.КодСостояния = 200 Тогда + ПараметрыЦентраМониторинга.ТестовыйПакетОтправлен = Истина; + Иначе + РезультатВыполнения.Успешно = Ложь; + РезультатВыполнения.КраткоеПредставлениеОшибки = НСтр("ru = 'Ошибка при отправке пакета.'"); + Шаблон = НСтр("ru = 'Ошибка HTTP при отправке пакета. Код %1'"); + Комментарий = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, HTTPОтвет.КодСостояния); + ЗаписьЖурналаРегистрации( + НСтр("ru = 'Центр мониторинга - отправить тестовые данные мониторинга'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, + , + , + Комментарий); + КонецЕсли; + Исключение + РезультатВыполнения.Успешно = Ложь; + РезультатВыполнения.КраткоеПредставлениеОшибки = НСтр("ru = 'Ошибка при отправке пакета.'"); + Комментарий = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗаписьЖурналаРегистрации( + НСтр("ru = 'Центр мониторинга - отправить тестовые данные мониторинга'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, + , + , + Комментарий); + ЦентрМониторинга.ЗаписатьОперациюБизнесСтатистики("ЦентрМониторинга.ОтправитьДанныеМониторинга.Ошибка", 1, Комментарий); + КонецПопытки; + + Если РезультатВыполнения.Успешно Тогда + ПараметрыВыполнения.Вставить("Итератор", ПараметрыВыполнения.Итератор + 1); + КонецЕсли; + + ОзнакомительныйПакетОтправлен = ПолучитьПараметрыЦентраМониторинга("ОзнакомительныйПакетОтправлен"); + + Если РезультатВыполнения.Успешно И НЕ ОзнакомительныйПакетОтправлен И ПараметрыВыполнения.Итератор < 2 Тогда + // Идентификатор изменился, необходимо повторить отправку. + ОтправитьТестовыйПакет(ПараметрыВыполнения, АдресРезультата); + ИначеЕсли РезультатВыполнения.Успешно И ОзнакомительныйПакетОтправлен Тогда + + Если ПараметрыВыполнения.ОтправкаТестовогоПакета Тогда + ПараметрыЦентраМониторинга.ОтправкаДанныхСледующееФормирование = ТекущаяУниверсальнаяДата() + + ПолучитьПараметрыЦентраМониторинга("ОтправкаДанныхПериодФормирования"); + ПараметрыЦентраМониторинга.ЧислоПопытокОтправкиТестовогоПакета = ПараметрыЦентраМониторинга.ЧислоПопытокОтправкиТестовогоПакета + 1; + + ПараметрыЦентраМониторинга.Удалить("ОтправкаДанныхПериодФормирования"); + ПараметрыЦентраМониторинга.Удалить("ВключитьЦентрМониторинга"); + ПараметрыЦентраМониторинга.Удалить("ЦентрОбработкиИнформацииОПрограмме"); + ПараметрыЦентраМониторинга.Удалить("ОзнакомительныйПакетОтправлен"); + + УстановитьПараметрыЦентраМониторинга(ПараметрыЦентраМониторинга); + КонецЕсли; + + Если ПараметрыВыполнения.ПолучениеИдентификатора Тогда + // Отправим пакет с данными через час. + УстановитьПараметрЦентраМониторинга("ОтправкаДанныхСледующееФормирование", ТекущаяУниверсальнаяДата() + 3600); + ПоместитьВоВременноеХранилище(РезультатВыполнения, АдресРезультата); + Если ОценкаПроизводительностиСуществует Тогда + МодульОценкаПроизводительности.ЗакончитьЗамерВремени("ЦентрМониторингаЗнакомство", ВремяНачала); + КонецЕсли; + КонецЕсли; + ИначеЕсли ПараметрыВыполнения.ПолучениеИдентификатора И НЕ РезультатВыполнения.Успешно Тогда + ПоместитьВоВременноеХранилище(РезультатВыполнения, АдресРезультата); + КонецЕсли; + + ИначеЕсли ПараметрыВыполнения.ПолучениеИдентификатора И ПараметрыЦентраМониторинга.ОзнакомительныйПакетОтправлен Тогда + ПоместитьВоВременноеХранилище(РезультатВыполнения, АдресРезультата); + КонецЕсли; + + УстановитьПривилегированныйРежим(Ложь); + +КонецПроцедуры + +Функция ОтправкаТестовогоПакетаВозможна(ПараметрыЦентраМониторинга, ДатаЗапуска) + Возврат НЕ ПараметрыЦентраМониторинга.ТестовыйПакетОтправлен И ПараметрыЦентраМониторинга.ЧислоПопытокОтправкиТестовогоПакета < 3 + И ЭтоГлавныйУзел() И ДатаЗапуска >= ПараметрыЦентраМониторинга.ОтправкаДанныхСледующееФормирование; +КонецФункции + +Функция ПолученияИдентификатораВозможно(ПараметрыЦентраМониторинга) + Возврат (ПараметрыЦентраМониторинга.ВключитьЦентрМониторинга ИЛИ ПараметрыЦентраМониторинга.ЦентрОбработкиИнформацииОПрограмме) + И ЭтоГлавныйУзел() И ПараметрыЦентраМониторинга.ОзнакомительныйПакетОтправлен = Ложь; +КонецФункции + +#КонецОбласти + + #КонецОбласти diff --git a/SSL/src/CommonModules/ШаблоныСообщений/Module.bsl b/SSL/src/CommonModules/ШаблоныСообщений/Module.bsl index ba8714efc..67b6ac90b 100644 --- a/SSL/src/CommonModules/ШаблоныСообщений/Module.bsl +++ b/SSL/src/CommonModules/ШаблоныСообщений/Module.bsl @@ -95,7 +95,12 @@ Шаблон = Справочники.ШаблоныСообщений.СоздатьЭлемент(); Шаблон.Заполнить(ПараметрыШаблона); - Шаблон.Записать(); + + Если ОбновлениеИнформационнойБазы.ЭтоВызовИзОбработчикаОбновления() Тогда + ОбновлениеИнформационнойБазы.ЗаписатьДанные(Шаблон); + Иначе + Шаблон.Записать(); + КонецЕсли; Возврат Шаблон.Ссылка; @@ -127,7 +132,9 @@ ШаблоныСообщенийСлужебный.РазвернутьРеквизит(Имя, Узел, СписокРеквизитов, ИсключаяРеквизиты); КонецПроцедуры -// Добавляет адреса почты или номера телефонов из контактной информации объекта в список получателей. +// Добавляет актуальные адреса почты или номера телефонов из контактной информации объекта в список получателей. +// В выборку адресов почты или номеров телефонов попадают только актуальные сведения, +// т.к. нет смысла отправлять письма или сообщения SMS на архивные данные. // // Параметры: // ПолучателиПисьма - ТаблицаЗначений - Список получателей письма или сообщения SMS @@ -150,10 +157,6 @@ Возврат; КонецЕсли; - Если ТипКонтактнойИнформации = Неопределено Тогда - ТипКонтактнойИнформации = Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты; - КонецЕсли; - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда МодульУправлениеКонтактнойИнформацией = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформацией"); @@ -161,19 +164,24 @@ Возврат; КонецЕсли; + Если ТипКонтактнойИнформации = Неопределено Тогда + ТипКонтактнойИнформации = МодульУправлениеКонтактнойИнформацией.ТипКонтактнойИнформацииПоНаименованию("АдресЭлектроннойПочты"); + КонецЕсли; + ОбъектыКонтактнойИнформации = Новый Массив; ОбъектыКонтактнойИнформации.Добавить(Предмет[ИмяРеквизита]); - КонтактнойИнформация = МодульУправлениеКонтактнойИнформацией.КонтактнаяИнформацияОбъектов(ОбъектыКонтактнойИнформации, ТипКонтактнойИнформации); + КонтактнойИнформация = МодульУправлениеКонтактнойИнформацией.КонтактнаяИнформацияОбъектов(ОбъектыКонтактнойИнформации, ТипКонтактнойИнформации,, ТекущаяДатаСеанса()); Для каждого ЭлементКонтактнойИнформации Из КонтактнойИнформация Цикл Получатель = ПолучателиПисьма.Добавить(); - Если ТипКонтактнойИнформации = Перечисления.ТипыКонтактнойИнформации.Телефон Тогда + Если ТипКонтактнойИнформации = МодульУправлениеКонтактнойИнформацией.ТипКонтактнойИнформацииПоНаименованию("Телефон") Тогда Получатель.НомерТелефона = ЭлементКонтактнойИнформации.Представление; - Получатель.Представление = ЭлементКонтактнойИнформации.Представление + " <" + Строка(ЭлементКонтактнойИнформации.Объект) + ">"; - Получатель.Контакт = ОбъектыКонтактнойИнформации[0]; + Получатель.Представление = Строка(ЭлементКонтактнойИнформации.Объект); + Получатель.Контакт = ОбъектыКонтактнойИнформации[0]; Иначе - Получатель.Адрес = ЭлементКонтактнойИнформации.Представление; - Получатель.Представление = ЭлементКонтактнойИнформации.Представление + " <" + Строка(ЭлементКонтактнойИнформации.Объект) + ">"; + Получатель.Адрес = ЭлементКонтактнойИнформации.Представление; + Получатель.Представление = Строка(ЭлементКонтактнойИнформации.Объект); + Получатель.Контакт = ОбъектыКонтактнойИнформации[0]; КонецЕсли; КонецЦикла; @@ -319,28 +327,19 @@ Возврат ШаблоныСообщенийСлужебный.ПараметрыИзТекстаСообщения(ПараметрыШаблона); КонецФункции - #КонецОбласти #Область СлужебныеПроцедурыИФункции Функция СформироватьПараметрыОтправки(Шаблон, Предмет, УникальныйИдентификатор, ДополнительныеПараметры = Неопределено) - ПараметрыОтправки = Новый Структура(); - ПараметрыОтправки.Вставить("Шаблон", Шаблон); - ПараметрыОтправки.Вставить("Предмет", Предмет); - ПараметрыОтправки.Вставить("УникальныйИдентификатор", УникальныйИдентификатор); - Если ДополнительныеПараметры = Неопределено Тогда - ДополнительныеПараметры = Новый Структура; + ПараметрыОтправки = ШаблоныСообщенийКлиентСервер.КонструкторПараметровОтправки(Шаблон.Ссылка, Предмет, УникальныйИдентификатор); + Если ТипЗнч(ДополнительныеПараметры) = Тип("Структура") Тогда + ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(ПараметрыОтправки.ДополнительныеПараметры, ДополнительныеПараметры, Истина); КонецЕсли; - Если НЕ ДополнительныеПараметры.Свойство("ПреобразовыватьHTMLДляФорматированногоДокумента") - Или ТипЗнч(ДополнительныеПараметры.ПреобразовыватьHTMLДляФорматированногоДокумента) <> Тип("Булево") Тогда - ДополнительныеПараметры.Вставить("ПреобразовыватьHTMLДляФорматированногоДокумента", Ложь); - КонецЕсли; - ПараметрыОтправки.Вставить("ДополнительныеПараметры", ДополнительныеПараметры); Возврат ПараметрыОтправки; - + КонецФункции #КонецОбласти diff --git a/SSL/src/CommonModules/ШаблоныСообщенийКлиент/Module.bsl b/SSL/src/CommonModules/ШаблоныСообщенийКлиент/Module.bsl index 9163071b2..c5c551d8d 100644 --- a/SSL/src/CommonModules/ШаблоныСообщенийКлиент/Module.bsl +++ b/SSL/src/CommonModules/ШаблоныСообщенийКлиент/Module.bsl @@ -1,16 +1,51 @@ #Область ПрограммныйИнтерфейс +// Открывает окно выбора шаблона для формирования электронного письма или сообщения SMS по указанному предмету +// ПредметСообщения. +// +// Параметры: +// ПредметСообщения - ЛюбаяСсылка, Строка - объект-источник данных, выводимых в сообщение. +// Для общих шаблонов необходимо передавать значение "Общий". +// ВидСообщения - Строка - "Письмо" для электронного письма и "СообщениеSMS" для сообщений SMS. +// ОписаниеОповещенияОЗакрытии - ОписаниеОповещения - оповещение, которое вызывается после формирования сообщения. +// * Результат - Булево - Если Истина, то сообщение было создано. +// * ПараметрыСообщения - Структура, Неопределено - значение, которое было передано в параметре ПараметрыСообщения. +// ВладелецШаблона - ОпределяемыйТип.ВладелецШаблона - владелец шаблонов. Если не указан, то в окне выбора +// шаблона выводятся все доступные шаблоны для указанного предмета ПредметСообщения. +// ПараметрыСообщения - Структура - дополнительная информация для формирования сообщения, +// которая передается в свойство ПараметрыСообщения параметра ПараметрыШаблона +// процедуры ШаблоныСообщенийПереопределяемый.ПриФормированииСообщения. +// +Процедура СформироватьСообщение(ПредметСообщения, ВидСообщения, ОписаниеОповещенияОЗакрытии = Неопределено, + ВладелецШаблона = Неопределено, ПараметрыСообщения = Неопределено) Экспорт + + ПараметрыФормы = ПараметрыФормыСообщения(ПредметСообщения, ВидСообщения, ВладелецШаблона, ПараметрыСообщения); + ПоказатьФормуСформироватьСообщение(ОписаниеОповещенияОЗакрытии, ПараметрыФормы); + +КонецПроцедуры + + // Открывает форму для выбора шаблона. // // Параметры: -// Оповещение - ОписаниеОповещения - оповещение, которое будет вызвано после выбора шаблона с готовым сообщением. +// Оповещение - ОписаниеОповещения - оповещение, которое будет вызвано после выбора шаблона. +// * Результат - СправочникСсылка.ШаблоныСообщений - выбранный шаблон. +// * ДополнительныеПараметры - Структура - значение, которое было указано при создании объекта ОписаниеОповещения. +// ВидСообщения - Строка - "Письмо" для электронного письма и "СообщениеSMS" для сообщений SMS. +// ПредметШаблона - ЛюбаяСсылка - ссылка на объект являющийся источником данных. +// ВладелецШаблона - ОпределяемыйТип.ВладелецШаблона - владелец шаблонов. Если не указан, то в окне выбора шаблона +// выводятся все доступные шаблоны для указанного предмета ПредметСообщения. // -Процедура ВыбратьШаблон(Оповещение) Экспорт +Процедура ВыбратьШаблон(Оповещение, ВидСообщения = "Письмо", ПредметШаблона = Неопределено, ВладелецШаблона = Неопределено) Экспорт - ДополнительныеПараметры = Новый Структура("Оповещение", Оповещение); - ПараметрыФормы = Новый Структура("Назначение, РежимВыбора, ВидСообщения", "Общий", Истина, "Письмо"); - Оповещение = Новый ОписаниеОповещения("ЗаполнитьПоШаблонуПослеВыбораШаблона", ЭтотОбъект, ДополнительныеПараметры); - ОткрытьФорму("Справочник.ШаблоныСообщений.Форма.СформироватьСообщение", ПараметрыФормы, ЭтотОбъект,,,, Оповещение); + Если ПредметШаблона = Неопределено Тогда + ПредметШаблона = "Общий"; + КонецЕсли; + + ПараметрыФормы = ПараметрыФормыСообщения(ПредметШаблона, ВидСообщения, ВладелецШаблона, Неопределено); + ПараметрыФормы.Вставить("РежимВыбора", Истина); + + ПоказатьФормуСформироватьСообщение(Оповещение, ПараметрыФормы); КонецПроцедуры @@ -21,7 +56,8 @@ // то будет открыт этот шаблон. // Если передана структура, то будет открыто окно нового шаблона сообщения заполненного из полей // структуры. Описание полей. см. ШаблоныСообщенийКлиентСервер.ОписаниеПараметровШаблона. -// Если ЛюбаяСсылка, то будет открыт шаблон сообщения по владельцу. +// Если ссылка из состава типов ОпределяемыйТип.ВладелецШаблонаСообщения, то будет открыт шаблон +// сообщения по владельцу. // ПараметрыОткрытия - Структура - параметры открытия формы: // * Владелец - Произвольный - Форма или элемент управления другой формы. // * Уникальность - Произвольный - Ключ, значение которого будет использоваться для поиска уже открытых форм. @@ -84,9 +120,59 @@ #КонецОбласти +#Область СлужебныйПрограммныйИнтерфейс + +// Открывает окно выбора шаблона для формирования электронного письма или сообщения SMS по указанному предмету +// ПредметСообщения и возвращает сформированный шаблон. +// +// Параметры: +// ПредметСообщения - ЛюбаяСсылка, Строка - объект-источник данных, выводимых в сообщение. +// Для общих шаблонов необходимо передавать значение "Общий". +// ВидСообщения - Строка - "Письмо" для электронного письма и "СообщениеSMS" для сообщений SMS. +// ОписаниеОповещенияОЗакрытии - ОписаниеОповещения - оповещение, которое вызывается после формирования сообщения. +// * Результат - Структура - Если Истина, то сообщение было создано. +// * ПараметрыСообщения - Структура, Неопределено - значение, которое было передано в параметре ПараметрыСообщения. +// ВладелецШаблона - ОпределяемыйТип.ВладелецШаблона - владелец шаблонов. Если не указан, то в окне выбора +// шаблона выводятся все доступные шаблоны для указанного предмета ПредметСообщения. +// ПараметрыСообщения - Структура - дополнительная информация для формирования сообщения, +// которая передается в свойство ПараметрыСообщения параметра ПараметрыШаблона +// процедуры ШаблоныСообщенийПереопределяемый.ПриФормированииСообщения. +// +Процедура ПодготовитьСообщениеПоШаблону(ПредметСообщения, ВидСообщения, ОписаниеОповещенияОЗакрытии = Неопределено, + ВладелецШаблона = Неопределено, ПараметрыСообщения = Неопределено) Экспорт + + ПараметрыФормы = ПараметрыФормыСообщения(ПредметСообщения, ВидСообщения, ВладелецШаблона, ПараметрыСообщения); + ПараметрыФормы.Вставить("ПодготовитьШаблон", Истина); + + ПоказатьФормуСформироватьСообщение(ОписаниеОповещенияОЗакрытии, ПараметрыФормы); + +КонецПроцедуры + +#КонецОбласти + #Область СлужебныеПроцедурыИФункции -Процедура ЗаполнитьПоШаблонуПослеВыбораШаблона(Результат, ДополнительныеПараметры) Экспорт +Функция ПараметрыФормыСообщения(ПредметШаблона, ВидСообщения, ВладелецШаблона, ПараметрыСообщения) + + ПараметрыФормы = Новый Структура(); + ПараметрыФормы.Вставить("Предмет", ПредметШаблона); + ПараметрыФормы.Вставить("ВидСообщения", ВидСообщения); + ПараметрыФормы.Вставить("ВладелецШаблона", ВладелецШаблона); + ПараметрыФормы.Вставить("ПараметрыСообщения", ПараметрыСообщения); + + Возврат ПараметрыФормы; + +КонецФункции + +Процедура ПоказатьФормуСформироватьСообщение(ОписаниеОповещенияОЗакрытии, ПараметрыФормы) + + ДополнительныеПараметры = Новый Структура("Оповещение", ОписаниеОповещенияОЗакрытии); + Оповещение = Новый ОписаниеОповещения("ВыполнитьОповещениеОЗакрытие", ЭтотОбъект, ДополнительныеПараметры); + ОткрытьФорму("Справочник.ШаблоныСообщений.Форма.СформироватьСообщение", ПараметрыФормы, ЭтотОбъект,,,, Оповещение); + +КонецПроцедуры + +Процедура ВыполнитьОповещениеОЗакрытие(Результат, ДополнительныеПараметры) Экспорт Если Результат <> Неопределено Тогда ВыполнитьОбработкуОповещения(ДополнительныеПараметры.Оповещение, Результат); КонецЕсли; diff --git a/SSL/src/CommonModules/ШаблоныСообщенийКлиентСервер/Module.bsl b/SSL/src/CommonModules/ШаблоныСообщенийКлиентСервер/Module.bsl index 3195f5f98..afb5a2293 100644 --- a/SSL/src/CommonModules/ШаблоныСообщенийКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ШаблоныСообщенийКлиентСервер/Module.bsl @@ -77,6 +77,7 @@ Результат.Вставить("ВладелецШаблона", Неопределено); Результат.Вставить("Ссылка", Неопределено); Результат.Вставить("Наименование", ""); + Результат.Вставить("ПараметрыСообщения", Новый Структура); Возврат Результат; @@ -86,6 +87,23 @@ #Область СлужебныеПроцедурыИФункции +Функция КонструкторПараметровОтправки(Шаблон, Предмет, УникальныйИдентификатор) Экспорт + + ПараметрыОтправки = Новый Структура(); + ПараметрыОтправки.Вставить("Шаблон", Шаблон); + ПараметрыОтправки.Вставить("Предмет", Предмет); + ПараметрыОтправки.Вставить("УникальныйИдентификатор", УникальныйИдентификатор); + ПараметрыОтправки.Вставить("ДополнительныеПараметры", Новый Структура); + ПараметрыОтправки.ДополнительныеПараметры.Вставить("ПреобразовыватьHTMLДляФорматированногоДокумента", Ложь); + ПараметрыОтправки.ДополнительныеПараметры.Вставить("ВидСообщения", ""); + ПараметрыОтправки.ДополнительныеПараметры.Вставить("ПроизвольныеПараметры", Новый Соответствие); + ПараметрыОтправки.ДополнительныеПараметры.Вставить("ОтправитьСразу", Ложь); + ПараметрыОтправки.ДополнительныеПараметры.Вставить("ПараметрыСообщения", Новый Структура); + + Возврат ПараметрыОтправки; + +КонецФункции + Функция ЗаголовокПроизвольныхПараметров() Экспорт Возврат НСтр("ru = 'Произвольные'"); КонецФункции diff --git a/SSL/src/CommonModules/ШаблоныСообщенийСлужебный/Module.bsl b/SSL/src/CommonModules/ШаблоныСообщенийСлужебный/Module.bsl index 75ce74615..d6b3f5212 100644 --- a/SSL/src/CommonModules/ШаблоныСообщенийСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ШаблоныСообщенийСлужебный/Module.bsl @@ -9,6 +9,10 @@ КонецЕсли; ПараметрыШаблона = ПараметрыШаблона(ПараметрыОтправки.Шаблон); + Если ПараметрыОтправки.ДополнительныеПараметры.Свойство("ПараметрыСообщения") Тогда + ПараметрыШаблона.ПараметрыСообщения = ПараметрыОтправки.ДополнительныеПараметры.ПараметрыСообщения; + КонецЕсли; + Если ПараметрыОтправки.Шаблон = Неопределено Тогда Если ПараметрыОтправки.Свойство("ДополнительныеПараметры") И ПараметрыОтправки.ДополнительныеПараметры.Свойство("ВидСообщения") Тогда @@ -24,7 +28,7 @@ Если ЗначениеЗаполнено(ПараметрыШаблона.ПолноеИмяТипаНазначения) Тогда МетаданныеОбъекта = Метаданные.НайтиПоПолномуИмени(ПараметрыШаблона.ПолноеИмяТипаНазначения); Если МетаданныеОбъекта <> Неопределено Тогда - МенеджерОбъекта = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПараметрыШаблона.ПолноеИмяТипаНазначения); + МенеджерОбъекта = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПараметрыШаблона.ПолноеИмяТипаНазначения); КонецЕсли; КонецЕсли; @@ -130,20 +134,19 @@ ПараметрыПисьма.Вложения.Вставить(Вложение.Представление, НовоеВложение); КонецЦикла; - Если Сообщение.ДополнительныеПараметры.ФорматПисьма = Перечисления.СпособыРедактированияЭлектронныхПисем.HTML Тогда - ТипТекста = Перечисления.ТипыТекстовЭлектронныхПисем.HTMLСКартинками; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСПочтовымиСообщениями") Тогда + МодульРаботаСПочтовымиСообщениямиСлужебный = ОбщегоНазначения.ОбщийМодуль("РаботаСПочтовымиСообщениямиСлужебный"); + Если Сообщение.ДополнительныеПараметры.ФорматПисьма = Перечисления.СпособыРедактированияЭлектронныхПисем.HTML Тогда + ТипТекста = МодульРаботаСПочтовымиСообщениямиСлужебный.ТипТекстовЭлектронныхПисем("HTMLСКартинками"); + Иначе + ТипТекста = МодульРаботаСПочтовымиСообщениямиСлужебный.ТипТекстовЭлектронныхПисем("ПростойТекст"); + КонецЕсли; Иначе - ТипТекста = Перечисления.ТипыТекстовЭлектронныхПисем.ПростойТекст; + ТипТекста = ""; КонецЕсли; ПараметрыПисьма.Вставить("ТипТекста", ТипТекста); - Кому = Новый Массив; - Для каждого Получатель Из Сообщение.Получатель Цикл - ПолучательСообщения = Новый Структура(); - ПолучательСообщения.Вставить("Адрес", Получатель.Значение); - ПолучательСообщения.Вставить("Представление", Получатель.Представление); - Кому.Добавить(ПолучательСообщения); - КонецЦикла; + Кому = СформироватьСписокПолучателейСообщения(Сообщение.Получатель); ПараметрыПисьма.Вставить("Кому", Кому); @@ -269,6 +272,7 @@ Процедура ОпределитьСписокРеквизитовИВложений(СведенияОШаблоне, ПараметрыШаблона) Если ЗначениеЗаполнено(ПараметрыШаблона.ПолноеИмяТипаНазначения) Тогда + // Реквизиты МетаданныеОбъект = Метаданные.НайтиПоПолномуИмени(ПараметрыШаблона.ПолноеИмяТипаНазначения); РеквизитыОбъектаНазначения = РеквизитыОбъектаНазначения(СведенияОШаблоне.Реквизиты, ПараметрыШаблона.ПолноеИмяТипаНазначения, ПараметрыШаблона.Назначение); @@ -283,17 +287,23 @@ КонецЕсли; ОпределитьСписокПечатныхФорм(МетаданныеОбъект, СведенияОШаблоне); + + Префикс = МетаданныеОбъект.Имя + "."; + Представление = МетаданныеОбъект.Представление(); + Иначе + Префикс = ПараметрыШаблона.ПолноеИмяТипаНазначения +"."; + Представление = ПараметрыШаблона.Назначение; КонецЕсли; + СсылкаНаОбъект = РеквизитыОбъектаНазначения.Добавить(); + СсылкаНаОбъект.Представление = НСтр("ru = 'Ссылка на'") + " """ + Представление + """"; + СсылкаНаОбъект.Имя = Префикс + "ВнешняяСсылкаНаОбъект"; + СсылкаНаОбъект.Тип = Новый ОписаниеТипов("Строка"); + ШаблоныСообщенийПереопределяемый.ПриПодготовкеШаблонаСообщения(РеквизитыОбъектаНазначения, СведенияОШаблоне.Вложения, ПараметрыШаблона.ПолноеИмяТипаНазначения, ПараметрыШаблона); Если МетаданныеОбъект <> Неопределено Тогда МенеджерОбъекта.ПриПодготовкеШаблонаСообщения(РеквизитыОбъектаНазначения, СведенияОШаблоне.Вложения, ПараметрыШаблона); - Префикс = МетаданныеОбъект.Имя + "."; - Представление = МетаданныеОбъект.Представление(); - Иначе - Префикс = ПараметрыШаблона.ПолноеИмяТипаНазначения +"."; - Представление = ПараметрыШаблона.Назначение КонецЕсли; Для каждого РеквизитОбъектаНазначения Из РеквизитыОбъектаНазначения Цикл @@ -310,10 +320,6 @@ КонецЕсли; КонецЦикла; - СсылкаНаОбъект = РеквизитыОбъектаНазначения.Добавить(); - СсылкаНаОбъект.Представление = НСтр("ru = 'Ссылка на'") + " """ + Представление + """"; - СсылкаНаОбъект.Имя = Префикс + "ВнешняяСсылкаНаОбъект"; - СсылкаНаОбъект.Тип = Новый ОписаниеТипов("Строка"); КонецЕсли; Для каждого ПроизвольныйПараметр Из ПараметрыШаблона.Параметры Цикл @@ -353,6 +359,15 @@ КонецПроцедуры +Функция ОбъектЯвляетсяПредметомШаблона(ПолноеИмяТипаНазначения) Экспорт + + НастройкиШаблоновСообщений = ШаблоныСообщенийСлужебныйПовтИсп.ПриОпределенииНастроек(); + Результат = ШаблоныСообщенийСлужебныйПовтИсп.ПриОпределенииНастроек().ПредметыШаблонов.Найти(ПолноеИмяТипаНазначения, "Имя"); + + Возврат Результат <> Неопределено; + +КонецФункции + Функция СформироватьСообщениеВнешнейОбработкой(ПараметрыШаблона, СведенияОШаблоне, ПараметрыОтправки) Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки") Тогда @@ -419,8 +434,71 @@ КонецФункции +Функция СформироватьСписокПолучателейСообщения(СписокПолучателей) + + СпискаПолучателейСКонтактом = (ТипЗнч(СписокПолучателей)= Тип("Массив")); + + Кому = Новый Массив; + Для каждого Получатель Из СписокПолучателей Цикл + ПолучательСообщения = Новый Структура(); + ПолучательСообщения.Вставить("Представление", Получатель.Представление); + + Если СпискаПолучателейСКонтактом Тогда + ПолучательСообщения.Вставить("Адрес", Получатель.Адрес); + ПолучательСообщения.Вставить("Контакт", Получатель.ИсточникКонтактнойИнформации); + Иначе + ПолучательСообщения.Вставить("Адрес", Получатель.Значение); + КонецЕсли; + + Кому.Добавить(ПолучательСообщения); + КонецЦикла; + + Возврат Кому; + +КонецФункции + // Настройки +Функция ОпределитьПредметыШаблонов() Экспорт + ИмяМакетаШаблонаПоУмолчанию = "ДанныеШаблонаСообщений"; + + ОснованияДляШаблоновСообщений = Новый ТаблицаЗначений; + ОснованияДляШаблоновСообщений.Колонки.Добавить("Имя", Новый ОписаниеТипов("Строка")); + ОснованияДляШаблоновСообщений.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка")); + ОснованияДляШаблоновСообщений.Колонки.Добавить("Макет", Новый ОписаниеТипов("Строка")); + ОснованияДляШаблоновСообщений.Колонки.Добавить("ЗначенияПараметровСКД", Новый ОписаниеТипов("Структура")); + + ТипыПредметовШаблоновСообщений = Метаданные.ОпределяемыеТипы.ПредметШаблонаСообщения.Тип.Типы(); + Для каждого ТипПредметаШаблонаСообщения Из ТипыПредметовШаблоновСообщений Цикл + Если ТипПредметаШаблонаСообщения <> Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных") Тогда + Назначение = ОснованияДляШаблоновСообщений.Добавить(); + МетаданныеОбъект = Метаданные.НайтиПоТипу(ТипПредметаШаблонаСообщения); + Назначение.Имя = МетаданныеОбъект.ПолноеИмя(); + Назначение.Представление = МетаданныеОбъект.Представление(); + Если МетаданныеОбъект.Макеты.Найти(ИмяМакетаШаблонаПоУмолчанию) <> Неопределено Тогда + Назначение.Макет = ИмяМакетаШаблонаПоУмолчанию; + + // Параметры СКД + МенеджерОбъекта = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(Назначение.Имя); + МакетСКД = МенеджерОбъекта.ПолучитьМакет(ИмяМакетаШаблонаПоУмолчанию); + АдресСхемы = ПоместитьВоВременноеХранилище(МакетСКД); + КомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных; + КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресСхемы)); + Для Каждого ДоступныйПараметр Из КомпоновщикНастроек.Настройки.ПараметрыДанных.ДоступныеПараметры.Элементы Цикл + ИмяПараметра = Строка(ДоступныйПараметр.Параметр); + Если НЕ (СтрСравнить(ИмяПараметра , "Период") = 0 + ИЛИ СтрСравнить(ИмяПараметра, МетаданныеОбъект.Имя) = 0) Тогда + Назначение.ЗначенияПараметровСКД.Вставить(ИмяПараметра, NULL); + КонецЕсли; + КонецЦикла; + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Возврат ОснованияДляШаблоновСообщений; + +КонецФункции + Функция ВидыШаблонов() Экспорт ТипыШаблонов = Новый СписокЗначений; ТипыШаблонов.Добавить("Email", НСтр("ru = 'Электронного письма'")); @@ -428,7 +506,7 @@ Возврат ТипыШаблонов; КонецФункции -Функция ПодготовитьЗапросДляПолученияСпискаШаблонов(ТипШаблона, Предмет = Неопределено) Экспорт +Функция ПодготовитьЗапросДляПолученияСпискаШаблонов(ТипШаблона, Предмет = Неопределено, ВладелецШаблона = Неопределено, ВыводитьОбщиеШаблон = Истина) Экспорт Если ТипШаблона = "SMS" Тогда ПредназначенДляSMS = Истина; @@ -468,18 +546,30 @@ | ШаблоныСообщений.ПредназначенДляSMS = &ПредназначенДляSMS | И ШаблоныСообщений.ПредназначенДляЭлектронныхПисем = &ПредназначенДляЭлектронныхПисем | И ШаблоныСообщений.Назначение <> ""Служебный"" + | %ВладелецШаблона% | И ШаблоныСообщений.ПометкаУдаления = ЛОЖЬ"; + Если ЗначениеЗаполнено(ВладелецШаблона) Тогда + ОтборПоВладельцу = "И ШаблоныСообщений.ВладелецШаблона = &ВладелецШаблона"; + Запрос.УстановитьПараметр("ВладелецШаблона", ВладелецШаблона); + Иначе + ОтборПоВладельцу = ""; + КонецЕсли; + Запрос.Текст = СтрЗаменить(Запрос.Текст, "%ВладелецШаблона%", ОтборПоВладельцу); + Запрос.УстановитьПараметр("ПредназначенДляSMS", ПредназначенДляSMS); Запрос.УстановитьПараметр("ПредназначенДляЭлектронныхПисем", ПредназначенДляЭлектронныхПисем); Запрос.УстановитьПараметр("Пользователь", Пользователи.АвторизованныйПользователь()); + ОтборОбщиеШаблоны = ?(ВыводитьОбщиеШаблон, "ШаблоныСообщений.ПредназначенДляВводаНаОсновании = ЛОЖЬ", ""); + Если ЗначениеЗаполнено(Предмет) Тогда - Запрос.Текст = Запрос.Текст + " И (ШаблоныСообщений.ПредназначенДляВводаНаОсновании = ЛОЖЬ ИЛИ ШаблоныСообщений.ПолноеИмяТипаПараметраВводаНаОсновании = &ПолноеИмяТипаПредмета)"; + Запрос.Текст = Запрос.Текст + " И (ШаблоныСообщений.ПолноеИмяТипаПараметраВводаНаОсновании = &ПолноеИмяТипаПредмета " + + ?(ЗначениеЗаполнено(ОтборОбщиеШаблоны), " ИЛИ " + ОтборОбщиеШаблоны, "") + ")"; Запрос.УстановитьПараметр("ПолноеИмяТипаПредмета", ?(ТипЗнч(Предмет) = Тип("Строка"), Предмет, Предмет.Метаданные().ПолноеИмя())); Иначе - Запрос.Текст = Запрос.Текст + " И ШаблоныСообщений.ПредназначенДляВводаНаОсновании = ЛОЖЬ"; + Запрос.Текст = Запрос.Текст + ?(ЗначениеЗаполнено(ОтборОбщиеШаблоны), " И " + ОтборОбщиеШаблоны, ""); КонецЕсли; Возврат Запрос; @@ -487,7 +577,7 @@ КонецФункции // Реквизиты объекты основания. - +// Функция РеквизитыОбъектаНазначения(Реквизиты, ПолноеИмяТипаНазначения, Знач Представление = "") МетаданныеОбъект = Метаданные.НайтиПоПолномуИмени(ПолноеИмяТипаНазначения); @@ -935,7 +1025,15 @@ КонецЕсли; КонецЕсли; + Если ЗначениеЗаполнено(Результат.ПолноеИмяТипаНазначения) + И НЕ ОбъектЯвляетсяПредметомШаблона(Результат.ПолноеИмяТипаНазначения) Тогда + // Объект не входит в список предметов шаблона, поэтому шаблон может быть только общим. + Результат.ПолноеИмяТипаНазначения = ""; + Результат.Назначение = ""; + КонецЕсли; + НастройкиШаблоновСообщений = ШаблоныСообщенийСлужебныйПовтИсп.ПриОпределенииНастроек(); + Результат.Вставить("РасширенныйСписокПолучателей", НастройкиШаблоновСообщений.РасширенныйСписокПолучателей); СведенияОПредмете = НастройкиШаблоновСообщений.ПредметыШаблонов.Найти(Результат.ПолноеИмяТипаНазначения, "Имя"); Если СведенияОПредмете <> Неопределено Тогда Результат.Макет = СведенияОПредмете.Макет; @@ -1067,6 +1165,7 @@ Сообщение.Вложения = Новый Соответствие; Сообщение.ЗначенияОбщихРеквизитов = Новый Соответствие; Сообщение.ЗначенияРеквизитов = Новый Соответствие; + ИмяОбъекта = ""; Если Предмет <> Неопределено И ЗначениеЗаполнено(ПараметрыШаблона.ПолноеИмяТипаНазначения) Тогда @@ -1093,25 +1192,52 @@ КонецЕсли; Если ПараметрыОтправки.ДополнительныеПараметры.Свойство("ПроизвольныеПараметры") Тогда - Для каждого ПроизвольныйПараметр Из ПараметрыОтправки.ДополнительныеПараметры.ПроизвольныеПараметры Цикл + Для каждого ПроизвольныйПараметрШаблона Из ПараметрыТекстаСообщения Цикл - Если НЕ ЗначениеЗаполнено(ПроизвольныйПараметр.Значение) Тогда + КлючПараметра = ПроизвольныйПараметрШаблона.Ключ; + Если СтрСравнить(КлючПараметра, ИмяОбъекта) = 0 Тогда Продолжить; КонецЕсли; - Если ТипЗнч(ПроизвольныйПараметр.Значение) = Тип("Строка") - Или ТипЗнч(ПроизвольныйПараметр.Значение) = Тип("Дата") Тогда + Если КлючПараметра = ШаблоныСообщенийКлиентСервер.ЗаголовокПроизвольныхПараметров() Тогда ПроизвольныеРеквизиты = ПараметрыТекстаСообщения[ШаблоныСообщенийКлиентСервер.ЗаголовокПроизвольныхПараметров()]; Если ТипЗнч(ПроизвольныеРеквизиты ) = Тип("Соответствие") Тогда - ПараметрыТекстаСообщения[ШаблоныСообщенийКлиентСервер.ЗаголовокПроизвольныхПараметров()][ПроизвольныйПараметр.Ключ] = ПроизвольныйПараметр.Значение; + Для Каждого ПроизвольныйРеквизит Из ПроизвольныеРеквизиты Цикл + ПроизвольныеРеквизиты[ПроизвольныйРеквизит.Ключ] = ПараметрыОтправки.ДополнительныеПараметры.ПроизвольныеПараметры[ПроизвольныйРеквизит.Ключ]; + КонецЦикла; + КонецЕсли; + Продолжить; + КонецЕсли; + + Если КлючПараметра = ИмяУзлаОбщихРеквизитов() Тогда + Продолжить; + КонецЕсли; + + ЗначениеПроизвольногоПараметра = ПараметрыОтправки.ДополнительныеПараметры.ПроизвольныеПараметры[КлючПараметра]; + Если ЗначениеПроизвольногоПараметра <> Неопределено Тогда + + Если НЕ ЗначениеЗаполнено(ЗначениеПроизвольногоПараметра) Тогда + Продолжить; + КонецЕсли; + + Если ТипЗнч(ЗначениеПроизвольногоПараметра) = Тип("Строка") + Или ТипЗнч(ЗначениеПроизвольногоПараметра) = Тип("Дата") Тогда + ПроизвольныеРеквизиты = ПараметрыТекстаСообщения[ШаблоныСообщенийКлиентСервер.ЗаголовокПроизвольныхПараметров()]; + Если ТипЗнч(ПроизвольныеРеквизиты ) = Тип("Соответствие") Тогда + ПараметрыТекстаСообщения[ШаблоныСообщенийКлиентСервер.ЗаголовокПроизвольныхПараметров()][КлючПараметра] = ЗначениеПроизвольногоПараметра; + КонецЕсли; + Иначе + ИмяОбъекта = ЗначениеПроизвольногоПараметра.Метаданные().Имя; + Если ПараметрыТекстаСообщения[ИмяОбъекта] <> Неопределено Тогда + ЗаполнитьРеквизитыПоПредмету(ПараметрыТекстаСообщения[ИмяОбъекта], ЗначениеПроизвольногоПараметра); + ЗаполнитьРеквизитыСвойствИКонтактнойИнформации(ПараметрыТекстаСообщения[ИмяОбъекта], ЗначениеПроизвольногоПараметра); + КонецЕсли; КонецЕсли; Иначе - ИмяОбъекта = ПроизвольныйПараметр.Значение.Метаданные().Имя; - Если ПараметрыТекстаСообщения[ИмяОбъекта] <> Неопределено Тогда - ЗаполнитьРеквизитыПоПредмету(ПараметрыТекстаСообщения[ИмяОбъекта], ПроизвольныйПараметр.Значение); - ЗаполнитьРеквизитыСвойствИКонтактнойИнформации(ПараметрыТекстаСообщения[ИмяОбъекта], ПроизвольныйПараметр.Значение); - КонецЕсли; + ПараметрыОтправки.ДополнительныеПараметры.ПроизвольныеПараметры.Вставить(КлючПараметра, ПроизвольныйПараметрШаблона.Значение); + КонецЕсли; + КонецЦикла; КонецЕсли; @@ -1539,7 +1665,7 @@ ПолучатьДопРеквизиты = МодульУправлениеСвойствами.ИспользоватьДопРеквизиты(ПустаяСсылка); Если ПолучатьДопРеквизиты Или ПолучатьДопСведения Тогда - Свойства = МодульУправлениеСвойствами.ПолучитьСписокСвойств(ПустаяСсылка, ПолучатьДопРеквизиты, ПолучатьДопСведения); + Свойства = МодульУправлениеСвойствами.СвойстваОбъекта(ПустаяСсылка, ПолучатьДопРеквизиты, ПолучатьДопСведения); Для каждого Свойство Из Свойства Цикл ДобавитьРеквизитПоМетаданнымОбъекта(Реквизиты, Свойство, Префикс, СведенияОСпискеРеквизитов, СведенияОИсключаемыхРеквизитах); КонецЦикла; @@ -1726,7 +1852,7 @@ ОбъектыСКонтактнойИнформацией.Добавить(Предмет); ВидыКонтактнойИнформации = МодульУправлениеКонтактнойИнформацией.ВидыКонтактнойИнформацияОбъекта(Предмет.Ссылка); Если ВидыКонтактнойИнформации.Количество() > 0 Тогда - КонтактнаяИнформацияОбъектов = МодульУправлениеКонтактнойИнформацией.КонтактнаяИнформацияОбъектов(ОбъектыСКонтактнойИнформацией); + КонтактнаяИнформацияОбъектов = МодульУправлениеКонтактнойИнформацией.КонтактнаяИнформацияОбъектов(ОбъектыСКонтактнойИнформацией,,, ТекущаяДатаСеанса()); КонецЕсли; КонецЕсли; @@ -1898,77 +2024,140 @@ Процедура ЗаполнитьПолучателейСообщения(ПараметрыОтправки, ПараметрыШаблона, Результат, МенеджерОбъекта) - Если ПараметрыОтправки.Свойство("ДополнительныеПараметры") + Если ПараметрыОтправки.Свойство("ДополнительныеПараметры") И ПараметрыОтправки.ДополнительныеПараметры.Свойство("ПроизвольныеПараметры") Тогда + ПредметСообщения = Новый Структура("Предмет, ПроизвольныеПараметры"); ПредметСообщения.Предмет = ПараметрыОтправки.Предмет; ПредметСообщения.ПроизвольныеПараметры = ПараметрыОтправки.ДополнительныеПараметры.ПроизвольныеПараметры; - Иначе - ПредметСообщения = ПараметрыОтправки.Предмет; + ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(ПредметСообщения, ПараметрыОтправки.ДополнительныеПараметры, Ложь); + + Иначе + + ПредметСообщения = ПараметрыОтправки.Предмет; + КонецЕсли; Если ПараметрыШаблона.ТипШаблона = "Письмо" Тогда - Получатели = СформироватьПолучателейПоУмолчанию(ПараметрыОтправки.Предмет, Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты); + Получатели = СформироватьПолучателейПоУмолчанию(ПараметрыОтправки.Предмет, ПараметрыШаблона.ТипШаблона); ШаблоныСообщенийПереопределяемый.ПриЗаполненииПочтыПолучателейВСообщении(Получатели, ПараметрыШаблона.ПолноеИмяТипаНазначения, ПредметСообщения); Если МенеджерОбъекта <> Неопределено Тогда МенеджерОбъекта.ПриЗаполненииПочтыПолучателейВСообщении(Получатели, ПредметСообщения); КонецЕсли; - Для каждого Получатели Из Получатели Цикл - Если ЗначениеЗаполнено(Получатели.Адрес) Тогда - Результат.Получатель.Добавить(Получатели.Адрес, Получатели.Представление); - КонецЕсли; - КонецЦикла; + Если ПараметрыШаблона.Свойство("РасширенныйСписокПолучателей") + И ПараметрыШаблона.РасширенныйСписокПолучателей Тогда + + Результат.Получатель = Новый Массив; + Для каждого Получатель Из Получатели Цикл + Если ЗначениеЗаполнено(Получатель.Адрес) Тогда + ЗначениеПолучателя = Новый Структура("Адрес, Представление, ИсточникКонтактнойИнформации", + Получатель.Адрес, Получатель.Представление, Получатель.Контакт); + Результат.Получатель.Добавить(ЗначениеПолучателя); + КонецЕсли; + КонецЦикла; + + Иначе + + Для каждого Получатели Из Получатели Цикл + Если ЗначениеЗаполнено(Получатели.Адрес) Тогда + Результат.Получатель.Добавить(Получатели.Адрес, Получатели.Представление); + КонецЕсли; + КонецЦикла; + + КонецЕсли; + Иначе - Получатели = СформироватьПолучателейПоУмолчанию(ПараметрыОтправки.Предмет, Перечисления.ТипыКонтактнойИнформации.Телефон); + + Получатели = СформироватьПолучателейПоУмолчанию(ПараметрыОтправки.Предмет, ПараметрыШаблона.ТипШаблона); ШаблоныСообщенийПереопределяемый.ПриЗаполненииТелефоновПолучателейВСообщении(Получатели, ПараметрыШаблона.ПолноеИмяТипаНазначения, ПредметСообщения); Если МенеджерОбъекта <> Неопределено Тогда - МенеджерОбъекта.ПриЗаполненииТелефоновПолучателейВСообщении(Получатели, ПредметСообщения); + МенеджерОбъекта.ПриЗаполненииТелефоновПолучателейВСообщении(Получатели, ПредметСообщения); + КонецЕсли; + + Если ПараметрыШаблона.Свойство("РасширенныйСписокПолучателей") + И ПараметрыШаблона.РасширенныйСписокПолучателей Тогда + + Результат.Получатель = Новый Массив; + Для каждого Получатель Из Получатели Цикл + Если ЗначениеЗаполнено(Получатель.НомерТелефона) Тогда + ЗначениеПолучателя = Новый Структура("НомерТелефона, Представление, ИсточникКонтактнойИнформации", + Получатель.НомерТелефона, Получатель.Представление, Получатель.Контакт); + Результат.Получатель.Добавить(ЗначениеПолучателя); + КонецЕсли; + КонецЦикла; + + Иначе + + Для каждого Получатели Из Получатели Цикл + Если ЗначениеЗаполнено(Получатели.НомерТелефона) Тогда + Результат.Получатель.Добавить(Получатели.НомерТелефона, Получатели.Представление); + КонецЕсли; + КонецЦикла; + КонецЕсли; - Для каждого Получатели Из Получатели Цикл - Если ЗначениеЗаполнено(Получатели.НомерТелефона) Тогда - Результат.Получатель.Добавить(Получатели.НомерТелефона, Получатели.Представление); - КонецЕсли; - КонецЦикла; КонецЕсли; КонецПроцедуры -Функция СформироватьПолучателейПоУмолчанию(Предмет, ТипКонтактнойИнформации); +Функция СформироватьПолучателейПоУмолчанию(Предмет, ТипШаблона); Получатели = Новый ТаблицаЗначений; - Если ТипКонтактнойИнформации = Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты Тогда - Получатели.Колонки.Добавить("Адрес", Новый ОписаниеТипов("Строка")); - ИмяКолонки = "Адрес"; - Иначе - Получатели.Колонки.Добавить("НомерТелефона", Новый ОписаниеТипов("Строка")); - ИмяКолонки = "НомерТелефона"; - КонецЕсли; Получатели.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка")); Получатели.Колонки.Добавить("Контакт"); + Если СтрСравнить(ТипШаблона, "SMS") = 0 Тогда + Получатели.Колонки.Добавить("НомерТелефона", Новый ОписаниеТипов("Строка")); + ИмяКолонки = "НомерТелефона"; + Иначе + Получатели.Колонки.Добавить("Адрес", Новый ОписаниеТипов("Строка")); + ИмяКолонки = "Адрес"; + КонецЕсли; Если Предмет = Неопределено Тогда Возврат Получатели; КонецЕсли; - // Наше заполнение, если у объекта есть контактная информация. - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда МодульУправлениеКонтактнойИнформацией = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформацией"); - ОбъектыСКонтактнойИнформацией = Новый Массив; - ОбъектыСКонтактнойИнформацией.Добавить(Предмет); - ВидыКонтактнойИнформацияОбъекта = МодульУправлениеКонтактнойИнформацией.ВидыКонтактнойИнформацияОбъекта(Предмет); - Если ВидыКонтактнойИнформацияОбъекта.Количество() > 0 Тогда - КонтактнаяИнформацияОбъектов = МодульУправлениеКонтактнойИнформацией.КонтактнаяИнформацияОбъектов(ОбъектыСКонтактнойИнформацией, ТипКонтактнойИнформации); - Если КонтактнаяИнформацияОбъектов.Количество() > 0 Тогда - Для каждого КонтактнаяИнформацияОбъекта Из КонтактнаяИнформацияОбъектов Цикл - НоваяСтрока= Получатели.Добавить(); - НоваяСтрока[ИмяКолонки] = КонтактнаяИнформацияОбъекта.Представление; - НоваяСтрока.Представление = СтрЗаменить(Строка(КонтактнаяИнформацияОбъекта.Объект), ",", ""); - КонецЦикла; + ТипКонтактнойИнформации = ?(СтрСравнить(ТипШаблона, "SMS") = 0, + МодульУправлениеКонтактнойИнформацией.ТипКонтактнойИнформацииПоНаименованию("Телефон"), + МодульУправлениеКонтактнойИнформацией.ТипКонтактнойИнформацииПоНаименованию("АдресЭлектроннойПочты")); + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Взаимодействия") Тогда + МодульВзаимодействия = ОбщегоНазначения.ОбщийМодуль("Взаимодействия"); + + Если МодульВзаимодействия.ИспользуетсяПочтовыйКлиент() Тогда + Контакты = МодульВзаимодействия.ПолучитьКонтактыПоПредмету(Предмет, ТипКонтактнойИнформации); + + Для каждого ИнформацияОКонтакте Из Контакты Цикл + НоваяСтрока = Получатели.Добавить(); + НоваяСтрока.Контакт = ИнформацияОКонтакте.Контакт; + НоваяСтрока.Представление = ИнформацияОКонтакте.Представление; + НоваяСтрока[ИмяКолонки] = ИнформацияОКонтакте.Адрес; + КонецЦикла; + КонецЕсли; + + КонецЕсли; + + // Если список контактов пустой, а у объекта есть контактная информация. + Если Получатели.Количество() = 0 И ТипЗнч(Предмет) <> Тип("Строка") Тогда + ОбъектыСКонтактнойИнформацией = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Предмет); + + ВидыКонтактнойИнформацияОбъекта = МодульУправлениеКонтактнойИнформацией.ВидыКонтактнойИнформацияОбъекта(Предмет); + Если ВидыКонтактнойИнформацияОбъекта.Количество() > 0 Тогда + КонтактнаяИнформацияОбъектов = МодульУправлениеКонтактнойИнформацией.КонтактнаяИнформацияОбъектов(ОбъектыСКонтактнойИнформацией, ТипКонтактнойИнформации,, ТекущаяДатаСеанса()); + Если КонтактнаяИнформацияОбъектов.Количество() > 0 Тогда + Для каждого КонтактнаяИнформацияОбъекта Из КонтактнаяИнформацияОбъектов Цикл + НоваяСтрока= Получатели.Добавить(); + НоваяСтрока[ИмяКолонки] = КонтактнаяИнформацияОбъекта.Представление; + НоваяСтрока.Представление = СтрЗаменить(Строка(КонтактнаяИнформацияОбъекта.Объект), ",", ""); + НоваяСтрока.Контакт = Предмет; + КонецЦикла; + КонецЕсли; КонецЕсли; + КонецЕсли; КонецЕсли; @@ -2047,4 +2236,4 @@ КонецФункции -#КонецОбласти \ No newline at end of file +#КонецОбласти diff --git a/SSL/src/CommonModules/ШаблоныСообщенийСлужебныйПовтИсп/Module.bsl b/SSL/src/CommonModules/ШаблоныСообщенийСлужебныйПовтИсп/Module.bsl index 4995ea4fd..9374642c9 100644 --- a/SSL/src/CommonModules/ШаблоныСообщенийСлужебныйПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ШаблоныСообщенийСлужебныйПовтИсп/Module.bsl @@ -5,10 +5,13 @@ Настройки = Новый Структура("ПредметыШаблонов, ОбщиеРеквизиты"); Настройки.Вставить("ИспользоватьПроизвольныеПараметры", Ложь); Настройки.Вставить("ЗначенияПараметровСКД", Новый Структура); + Настройки.Вставить("ФорматПисьма", ""); + Настройки.Вставить("РасширенныйСписокПолучателей", Ложь); + Настройки.Вставить("ВсегдаПоказыватьФормуВыбораШаблонов", Истина); ОбщиеРеквизитыДерево = ШаблоныСообщенийСлужебный.ОпределитьОбщиеРеквизиты(); Настройки.ОбщиеРеквизиты = ШаблоныСообщенийСлужебный.ОбщиеРеквизиты(ОбщиеРеквизитыДерево); - Настройки.ПредметыШаблонов = ОпределитьПредметыШаблонов(); + Настройки.ПредметыШаблонов = ШаблоныСообщенийСлужебный.ОпределитьПредметыШаблонов(); ШаблоныСообщенийПереопределяемый.ПриОпределенииНастроек(Настройки); Настройки.ОбщиеРеквизиты = ОбщиеРеквизитыДерево; @@ -24,47 +27,8 @@ Настройки.ПредметыШаблонов.Сортировать("Представление"); - Возврат Настройки; - -КонецФункции - -Функция ОпределитьПредметыШаблонов() - ИмяМакетаШаблонаПоУмолчанию = "ДанныеШаблонаСообщений"; - - ОснованияДляШаблоновСообщений = Новый ТаблицаЗначений; - ОснованияДляШаблоновСообщений.Колонки.Добавить("Имя", Новый ОписаниеТипов("Строка")); - ОснованияДляШаблоновСообщений.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка")); - ОснованияДляШаблоновСообщений.Колонки.Добавить("Макет", Новый ОписаниеТипов("Строка")); - ОснованияДляШаблоновСообщений.Колонки.Добавить("ЗначенияПараметровСКД", Новый ОписаниеТипов("Структура")); - - ТипыПредметовШаблоновСообщений = Метаданные.ОпределяемыеТипы.ПредметШаблонаСообщения.Тип.Типы(); - Для каждого ТипПредметаШаблонаСообщения Из ТипыПредметовШаблоновСообщений Цикл - Если ТипПредметаШаблонаСообщения <> Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных") Тогда - Назначение = ОснованияДляШаблоновСообщений.Добавить(); - МетаданныеОбъект = Метаданные.НайтиПоТипу(ТипПредметаШаблонаСообщения); - Назначение.Имя = МетаданныеОбъект.ПолноеИмя(); - Назначение.Представление = МетаданныеОбъект.Представление(); - Если МетаданныеОбъект.Макеты.Найти(ИмяМакетаШаблонаПоУмолчанию) <> Неопределено Тогда - Назначение.Макет = ИмяМакетаШаблонаПоУмолчанию; - - // Параметры СКД - МенеджерОбъекта = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(Назначение.Имя); - МакетСКД = МенеджерОбъекта.ПолучитьМакет(ИмяМакетаШаблонаПоУмолчанию); - АдресСхемы = ПоместитьВоВременноеХранилище(МакетСКД); - КомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных; - КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресСхемы)); - Для Каждого ДоступныйПараметр Из КомпоновщикНастроек.Настройки.ПараметрыДанных.ДоступныеПараметры.Элементы Цикл - ИмяПараметра = Строка(ДоступныйПараметр.Параметр); - Если НЕ (СтрСравнить(ИмяПараметра , "Период") = 0 - ИЛИ СтрСравнить(ИмяПараметра, МетаданныеОбъект.Имя) = 0) Тогда - Назначение.ЗначенияПараметровСКД.Вставить(ИмяПараметра, NULL); - КонецЕсли; - КонецЦикла; - КонецЕсли; - КонецЕсли; - КонецЦикла; - - Возврат ОснованияДляШаблоновСообщений; + Результат = Новый ФиксированнаяСтруктура(Настройки); + Возврат Результат; КонецФункции diff --git a/SSL/src/CommonModules/ЭлектроннаяПодпись/Module.bsl b/SSL/src/CommonModules/ЭлектроннаяПодпись/Module.bsl index c61083712..113bea002 100644 --- a/SSL/src/CommonModules/ЭлектроннаяПодпись/Module.bsl +++ b/SSL/src/CommonModules/ЭлектроннаяПодпись/Module.bsl @@ -1071,7 +1071,10 @@ Процедура ЗаполнитьСписокПрограмм(ОписаниеПрограмм) Экспорт ПоставляемыеНастройки = Справочники.ПрограммыЭлектроннойПодписиИШифрования.ПоставляемыеНастройкиПрограмм(); - ВыполняетсяОбновлениеИнформационнойБазы = ОбновлениеИнформационнойБазы.ВыполняетсяОбновлениеИнформационнойБазы(); + + ВыполняетсяОбновлениеИнформационнойБазы = + ОбновлениеИнформационнойБазы.ВыполняетсяОбновлениеИнформационнойБазы() + Или ОбновлениеИнформационнойБазы.ЭтоВызовИзОбработчикаОбновления(); Запрос = Новый Запрос; Запрос.Текст = @@ -1477,7 +1480,9 @@ ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяПроцедуры, "Объект", Объект, ЭлектроннаяПодписьСлужебныйПовтИсп.ТипыВладельцев(ТолькоСсылки)); - ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(Объект); + ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(Объект,, + "РаботаСФайламиСлужебныйВызовСервера.ПеренестиЭлектронныеПодписиИСертификатыШифрованияВРегистрыСведений", + ИмяПроцедуры); КонецПроцедуры diff --git a/SSL/src/CommonModules/ЭлектроннаяПодписьКлиент/Module.bsl b/SSL/src/CommonModules/ЭлектроннаяПодписьКлиент/Module.bsl index 3f9a69795..5bb525f4d 100644 --- a/SSL/src/CommonModules/ЭлектроннаяПодписьКлиент/Module.bsl +++ b/SSL/src/CommonModules/ЭлектроннаяПодписьКлиент/Module.bsl @@ -141,7 +141,9 @@ // сможет открыть пользователь. Если не указан, то заполняется из // свойств Представление или Объект в свойстве НаборДанных. // -// Форма - УправляемаяФорма - форма из которой нужно получить уникальный идентификатор, который будет +// Форма - УправляемаяФорма - форма из которой нужно получить уникальный идентификатор, +// который будет использоваться при блокировке объекта. +// - УникальныйИдентификатор - уникальный идентификаторы, который будет // использоваться при блокировке объекта. // - Неопределено - использовать стандартную форму. // @@ -245,7 +247,9 @@ // * -- // -- - ОписаниеОповещения (необязательный) - обработчик получения данных, который // возвращает их в свойстве Данные (см. выше общий подход). // -// Форма - УправляемаяФорма - форма из которой нужно получить уникальный идентификатор, который будет +// Форма - УправляемаяФорма - форма из которой нужно получить уникальный идентификатор, +// который будет использоваться при блокировке объекта. +// - УникальныйИдентификатор - уникальный идентификаторы, который будет // использоваться при блокировке объекта. // - Неопределено - использовать стандартную форму. // @@ -494,6 +498,8 @@ // // Форма - УправляемаяФорма - форма из которой нужно получить уникальный идентификатор, который будет // использоваться при помещении зашифрованных данных во временное хранилище. +// - УникальныйИдентификатор - уникальный идентификаторы, который будет +// использоваться при помещении зашифрованных данных во временное хранилище. // - Неопределено - использовать стандартную форму. // // ОбработкаРезультата - ОписаниеОповещения - необязательный параметр. @@ -655,6 +661,8 @@ // // Форма - УправляемаяФорма - форма из которой нужно получить уникальный идентификатор, который будет // использоваться при помещении расшифрованных данных во временное хранилище. +// - УникальныйИдентификатор - уникальный идентификатор, который будет использоваться +// при помещении расшифрованных данных во временное хранилище // - Неопределено - использовать стандартную форму. // // ОбработкаРезультата - ОписаниеОповещения - необязательный параметр. diff --git a/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебный/Module.bsl b/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебный/Module.bsl index 4439751e3..d0933cd72 100644 --- a/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебный/Module.bsl @@ -82,6 +82,16 @@ КонецФункции +// Возвращает признак возможности интерактивного использования электронных подписей и шифрования +// для текущего пользователя. +// +// Возвращаемое значение: +// Булево - если Истина, то интерактивное использование электронных подписей и шифрование возможно. +// +Функция ИспользоватьИнтерактивноеДобавлениеЭлектронныхПодписейИШифрование() Экспорт + Возврат ПравоДоступа("ИнтерактивноеДобавление", Метаданные.Справочники.СертификатыКлючейЭлектроннойПодписиИШифрования); +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Обработчики событий подсистем конфигурации. @@ -106,7 +116,7 @@ Обработчик.ЧитаемыеОбъекты = "Справочник.ПрограммыЭлектроннойПодписиИШифрования"; Обработчик.ИзменяемыеОбъекты = "Справочник.ПрограммыЭлектроннойПодписиИШифрования"; Обработчик.ОчередьОтложеннойОбработки = 1; - Обработчик.ПроцедураПроверки = "ОбновлениеИнформационнойБазы.ОбработкаДанныхЗавершена"; + Обработчик.ПроцедураПроверки = "ОбновлениеИнформационнойБазы.ДанныеОбновленыНаНовуюВерсиюПрограммы"; КонецЕсли; @@ -141,7 +151,7 @@ КонецПроцедуры -// См. ОбщегоНазначенияПереопределяемый.ПараметрыРаботыКлиента. +// См. ОбщегоНазначенияПереопределяемый.ПриДобавленииПараметровРаботыКлиента. Процедура ПриДобавленииПараметровРаботыКлиента(Параметры) Экспорт Если ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда diff --git a/SSL/src/CommonPictures/ДлительнаяОперация16/Picture.zip b/SSL/src/CommonPictures/ДлительнаяОперация16/Picture.zip new file mode 100644 index 000000000..de09281cf Binary files /dev/null and b/SSL/src/CommonPictures/ДлительнаяОперация16/Picture.zip differ diff --git a/SSL/src/CommonPictures/ДлительнаяОперация16/ДлительнаяОперация16.mdo b/SSL/src/CommonPictures/ДлительнаяОперация16/ДлительнаяОперация16.mdo new file mode 100644 index 000000000..07589c16b --- /dev/null +++ b/SSL/src/CommonPictures/ДлительнаяОперация16/ДлительнаяОперация16.mdo @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonPicture xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="ef4d648f-4cac-4df9-9880-2aa13c422d10"> + <name>ДлительнаяОперация16</name> + <synonym> + <key>ru</key> + <value>Длительная операция</value> + </synonym> +</mdclass:CommonPicture> diff --git a/SSL/src/CommonPictures/Обсуждения/Picture.zip b/SSL/src/CommonPictures/Обсуждения/Picture.zip new file mode 100644 index 000000000..662bcd8a5 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..5fe8a6e80 --- /dev/null +++ b/SSL/src/CommonPictures/Обсуждения/Обсуждения.mdo @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonPicture xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="2522fce4-d121-482b-a39d-0c1a842d315e"> + <name>Обсуждения</name> + <synonym> + <key>ru</key> + <value>Обсуждения</value> + </synonym> +</mdclass:CommonPicture> diff --git a/SSL/src/CommonPictures/СправочникПВХКоннекторВверх/СправочникПВХКоннекторВверх.mdo b/SSL/src/CommonPictures/СправочникПВХКоннекторВверх/СправочникПВХКоннекторВверх.mdo index 6f4945986..50392bb97 100644 --- a/SSL/src/CommonPictures/СправочникПВХКоннекторВверх/СправочникПВХКоннекторВверх.mdo +++ b/SSL/src/CommonPictures/СправочникПВХКоннекторВверх/СправочникПВХКоннекторВверх.mdo @@ -3,6 +3,6 @@ <name>СправочникПВХКоннекторВверх</name> <synonym> <key>ru</key> - <value>Справочник ПВХКоннектор вверх</value> + <value>Справочник ПВХ коннектор вверх</value> </synonym> </mdclass:CommonPicture> diff --git a/SSL/src/CommonPictures/СправочникПВХКоннекторВерхНиз/СправочникПВХКоннекторВерхНиз.mdo b/SSL/src/CommonPictures/СправочникПВХКоннекторВерхНиз/СправочникПВХКоннекторВерхНиз.mdo index 753f89bfb..c2e095302 100644 --- a/SSL/src/CommonPictures/СправочникПВХКоннекторВерхНиз/СправочникПВХКоннекторВерхНиз.mdo +++ b/SSL/src/CommonPictures/СправочникПВХКоннекторВерхНиз/СправочникПВХКоннекторВерхНиз.mdo @@ -3,6 +3,6 @@ <name>СправочникПВХКоннекторВерхНиз</name> <synonym> <key>ru</key> - <value>Справочник ПВХКоннектор верх низ</value> + <value>Справочник ПВХ коннектор верх низ</value> </synonym> </mdclass:CommonPicture> diff --git a/SSL/src/CommonPictures/СправочникПВХКоннекторЛево/СправочникПВХКоннекторЛево.mdo b/SSL/src/CommonPictures/СправочникПВХКоннекторЛево/СправочникПВХКоннекторЛево.mdo index 2b776d86f..7d19de974 100644 --- a/SSL/src/CommonPictures/СправочникПВХКоннекторЛево/СправочникПВХКоннекторЛево.mdo +++ b/SSL/src/CommonPictures/СправочникПВХКоннекторЛево/СправочникПВХКоннекторЛево.mdo @@ -3,6 +3,6 @@ <name>СправочникПВХКоннекторЛево</name> <synonym> <key>ru</key> - <value>Справочник ПВХКоннектор лево</value> + <value>Справочник ПВХ коннектор лево</value> </synonym> </mdclass:CommonPicture> diff --git a/SSL/src/CommonPictures/СправочникПВХКоннекторЛевоВерх/СправочникПВХКоннекторЛевоВерх.mdo b/SSL/src/CommonPictures/СправочникПВХКоннекторЛевоВерх/СправочникПВХКоннекторЛевоВерх.mdo index ec523df7a..577d90be1 100644 --- a/SSL/src/CommonPictures/СправочникПВХКоннекторЛевоВерх/СправочникПВХКоннекторЛевоВерх.mdo +++ b/SSL/src/CommonPictures/СправочникПВХКоннекторЛевоВерх/СправочникПВХКоннекторЛевоВерх.mdo @@ -3,6 +3,6 @@ <name>СправочникПВХКоннекторЛевоВерх</name> <synonym> <key>ru</key> - <value>Справочник ПВХКоннектор лево верх</value> + <value>Справочник ПВХ коннектор лево верх</value> </synonym> </mdclass:CommonPicture> diff --git a/SSL/src/CommonPictures/СправочникПВХКоннекторЛевоНиз/СправочникПВХКоннекторЛевоНиз.mdo b/SSL/src/CommonPictures/СправочникПВХКоннекторЛевоНиз/СправочникПВХКоннекторЛевоНиз.mdo index e06934d63..1e00d9ac7 100644 --- a/SSL/src/CommonPictures/СправочникПВХКоннекторЛевоНиз/СправочникПВХКоннекторЛевоНиз.mdo +++ b/SSL/src/CommonPictures/СправочникПВХКоннекторЛевоНиз/СправочникПВХКоннекторЛевоНиз.mdo @@ -3,6 +3,6 @@ <name>СправочникПВХКоннекторЛевоНиз</name> <synonym> <key>ru</key> - <value>Справочник ПВХКоннектор лево низ</value> + <value>Справочник ПВХ коннектор лево низ</value> </synonym> </mdclass:CommonPicture> diff --git a/SSL/src/CommonPictures/СправочникПВХКоннекторНиз/СправочникПВХКоннекторНиз.mdo b/SSL/src/CommonPictures/СправочникПВХКоннекторНиз/СправочникПВХКоннекторНиз.mdo index 1af7b129a..0d85b9103 100644 --- a/SSL/src/CommonPictures/СправочникПВХКоннекторНиз/СправочникПВХКоннекторНиз.mdo +++ b/SSL/src/CommonPictures/СправочникПВХКоннекторНиз/СправочникПВХКоннекторНиз.mdo @@ -3,6 +3,6 @@ <name>СправочникПВХКоннекторНиз</name> <synonym> <key>ru</key> - <value>Справочник ПВХКоннектор низ</value> + <value>Справочник ПВХ коннектор низ</value> </synonym> </mdclass:CommonPicture> diff --git a/SSL/src/CommonPictures/СправочникПВХПомеченНаУдалениеКоннекторВерх/СправочникПВХПомеченНаУдалениеКоннекторВерх.mdo b/SSL/src/CommonPictures/СправочникПВХПомеченНаУдалениеКоннекторВерх/СправочникПВХПомеченНаУдалениеКоннекторВерх.mdo index 9b9532648..dcd70d6b4 100644 --- a/SSL/src/CommonPictures/СправочникПВХПомеченНаУдалениеКоннекторВерх/СправочникПВХПомеченНаУдалениеКоннекторВерх.mdo +++ b/SSL/src/CommonPictures/СправочникПВХПомеченНаУдалениеКоннекторВерх/СправочникПВХПомеченНаУдалениеКоннекторВерх.mdo @@ -3,6 +3,6 @@ <name>СправочникПВХПомеченНаУдалениеКоннекторВерх</name> <synonym> <key>ru</key> - <value>Справочник ПВХПомечен на удаление коннектор верх</value> + <value>Справочник ПВХ помечен на удаление коннектор верх</value> </synonym> </mdclass:CommonPicture> diff --git a/SSL/src/CommonPictures/СправочникПВХПомеченНаУдалениеКоннекторВерхНиз/СправочникПВХПомеченНаУдалениеКоннекторВерхНиз.mdo b/SSL/src/CommonPictures/СправочникПВХПомеченНаУдалениеКоннекторВерхНиз/СправочникПВХПомеченНаУдалениеКоннекторВерхНиз.mdo index 2f594e4cb..cf34c083a 100644 --- a/SSL/src/CommonPictures/СправочникПВХПомеченНаУдалениеКоннекторВерхНиз/СправочникПВХПомеченНаУдалениеКоннекторВерхНиз.mdo +++ b/SSL/src/CommonPictures/СправочникПВХПомеченНаУдалениеКоннекторВерхНиз/СправочникПВХПомеченНаУдалениеКоннекторВерхНиз.mdo @@ -3,6 +3,6 @@ <name>СправочникПВХПомеченНаУдалениеКоннекторВерхНиз</name> <synonym> <key>ru</key> - <value>Справочник ПВХПомечен на удаление коннектор верх низ</value> + <value>Справочник ПВХ помечен на удаление коннектор верх низ</value> </synonym> </mdclass:CommonPicture> diff --git a/SSL/src/CommonPictures/СправочникПВХПомеченНаУдалениеКоннекторЛево/СправочникПВХПомеченНаУдалениеКоннекторЛево.mdo b/SSL/src/CommonPictures/СправочникПВХПомеченНаУдалениеКоннекторЛево/СправочникПВХПомеченНаУдалениеКоннекторЛево.mdo index 2746edc05..3815f423e 100644 --- a/SSL/src/CommonPictures/СправочникПВХПомеченНаУдалениеКоннекторЛево/СправочникПВХПомеченНаУдалениеКоннекторЛево.mdo +++ b/SSL/src/CommonPictures/СправочникПВХПомеченНаУдалениеКоннекторЛево/СправочникПВХПомеченНаУдалениеКоннекторЛево.mdo @@ -3,6 +3,6 @@ <name>СправочникПВХПомеченНаУдалениеКоннекторЛево</name> <synonym> <key>ru</key> - <value>Справочник ПВХПомечен на удаление коннектор лево</value> + <value>Справочник ПВХ помечен на удаление коннектор лево</value> </synonym> </mdclass:CommonPicture> diff --git a/SSL/src/CommonPictures/СправочникПВХПомеченНаУдалениеКоннекторЛевоВерх/СправочникПВХПомеченНаУдалениеКоннекторЛевоВерх.mdo b/SSL/src/CommonPictures/СправочникПВХПомеченНаУдалениеКоннекторЛевоВерх/СправочникПВХПомеченНаУдалениеКоннекторЛевоВерх.mdo index 6d5b23072..a12b54dfb 100644 --- a/SSL/src/CommonPictures/СправочникПВХПомеченНаУдалениеКоннекторЛевоВерх/СправочникПВХПомеченНаУдалениеКоннекторЛевоВерх.mdo +++ b/SSL/src/CommonPictures/СправочникПВХПомеченНаУдалениеКоннекторЛевоВерх/СправочникПВХПомеченНаУдалениеКоннекторЛевоВерх.mdo @@ -3,6 +3,6 @@ <name>СправочникПВХПомеченНаУдалениеКоннекторЛевоВерх</name> <synonym> <key>ru</key> - <value>Справочник ПВХПомечен на удаление коннектор лево верх</value> + <value>Справочник ПВХ помечен на удаление коннектор лево верх</value> </synonym> </mdclass:CommonPicture> diff --git a/SSL/src/CommonPictures/СправочникПВХПомеченНаУдалениеКоннекторЛевоНиз/СправочникПВХПомеченНаУдалениеКоннекторЛевоНиз.mdo b/SSL/src/CommonPictures/СправочникПВХПомеченНаУдалениеКоннекторЛевоНиз/СправочникПВХПомеченНаУдалениеКоннекторЛевоНиз.mdo index 1f8aeffa5..038a7b8f2 100644 --- a/SSL/src/CommonPictures/СправочникПВХПомеченНаУдалениеКоннекторЛевоНиз/СправочникПВХПомеченНаУдалениеКоннекторЛевоНиз.mdo +++ b/SSL/src/CommonPictures/СправочникПВХПомеченНаУдалениеКоннекторЛевоНиз/СправочникПВХПомеченНаУдалениеКоннекторЛевоНиз.mdo @@ -3,6 +3,6 @@ <name>СправочникПВХПомеченНаУдалениеКоннекторЛевоНиз</name> <synonym> <key>ru</key> - <value>Справочник ПВХПомечен на удаление коннектор лево низ</value> + <value>Справочник ПВХ помечен на удаление коннектор лево низ</value> </synonym> </mdclass:CommonPicture> diff --git a/SSL/src/CommonPictures/СправочникПВХПомеченНаУдалениеКоннекторНиз/СправочникПВХПомеченНаУдалениеКоннекторНиз.mdo b/SSL/src/CommonPictures/СправочникПВХПомеченНаУдалениеКоннекторНиз/СправочникПВХПомеченНаУдалениеКоннекторНиз.mdo index 94d28d160..15b4491d8 100644 --- a/SSL/src/CommonPictures/СправочникПВХПомеченНаУдалениеКоннекторНиз/СправочникПВХПомеченНаУдалениеКоннекторНиз.mdo +++ b/SSL/src/CommonPictures/СправочникПВХПомеченНаУдалениеКоннекторНиз/СправочникПВХПомеченНаУдалениеКоннекторНиз.mdo @@ -3,6 +3,6 @@ <name>СправочникПВХПомеченНаУдалениеКоннекторНиз</name> <synonym> <key>ru</key> - <value>Справочник ПВХПомечен на удаление коннектор низ</value> + <value>Справочник ПВХ помечен на удаление коннектор низ</value> </synonym> </mdclass:CommonPicture> diff --git a/SSL/src/Configuration/Configuration.mdo b/SSL/src/Configuration/Configuration.mdo index 9152dda6a..68655b8a1 100644 --- a/SSL/src/Configuration/Configuration.mdo +++ b/SSL/src/Configuration/Configuration.mdo @@ -1,17 +1,17 @@ <?xml version="1.0" encoding="UTF-8"?> -<mdclass:Configuration xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="4e3a55ec-1f86-4629-91b3-05d85a2d0682"> +<mdclass:Configuration xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="bb29a0b2-5fa1-4444-8959-f785457105d1"> <name>БиблиотекаСтандартныхПодсистем</name> <synonym> <key>ru</key> <value>Библиотека стандартных подсистем, редакция 2.3</value> </synonym> - <containedObjects classId="9cd510cd-abfc-11d4-9434-004095e12fc7" objectId="504d4d69-9786-4018-b40c-ca55c4436879"/> - <containedObjects classId="9fcd25a0-4822-11d4-9414-008048da11f9" objectId="4bcf0526-d3ca-412f-b539-577e53e10611"/> - <containedObjects classId="e3687481-0a87-462c-a166-9f34594f9bba" objectId="465a1f6b-a9cd-4453-a577-66e2e42a8f0b"/> - <containedObjects classId="9de14907-ec23-4a07-96f0-85521cb6b53b" objectId="3c872709-cf10-4ea5-a3fd-8ff26fe54e6e"/> - <containedObjects classId="51f2d5d8-ea4d-4064-8892-82951750031e" objectId="e98912f3-ea40-4c6c-ab9f-815495174f1a"/> - <containedObjects classId="e68182ea-4237-4383-967f-90c1e3370bc7" objectId="dfd6a3cc-0679-429e-80df-b3e9d241cf77"/> - <containedObjects classId="fb282519-d103-4dd3-bc12-cb271d631dfc" objectId="1b33dcd5-382c-45dc-9dfd-dcd7cf7b3b11"/> + <containedObjects classId="9cd510cd-abfc-11d4-9434-004095e12fc7" objectId="d0cb99fa-0ee4-4746-97f7-9517037c8a14"/> + <containedObjects classId="9fcd25a0-4822-11d4-9414-008048da11f9" objectId="7ccdee1f-e3e6-48ff-a876-a13d8c4e86cb"/> + <containedObjects classId="e3687481-0a87-462c-a166-9f34594f9bba" objectId="21bf6cca-cbae-4d6e-81ff-6a3a335e8286"/> + <containedObjects classId="9de14907-ec23-4a07-96f0-85521cb6b53b" objectId="142f131e-c770-4a00-9dce-f48934ed5c10"/> + <containedObjects classId="51f2d5d8-ea4d-4064-8892-82951750031e" objectId="c31b47c4-d027-4eaf-9365-38e4971a6adb"/> + <containedObjects classId="e68182ea-4237-4383-967f-90c1e3370bc7" objectId="1f18650a-c94b-4ee4-9eda-ed2ded5b5a74"/> + <containedObjects classId="fb282519-d103-4dd3-bc12-cb271d631dfc" objectId="bda29e71-f86b-45d3-aad7-50abed83d641"/> <defaultRunMode>ManagedApplication</defaultRunMode> <usePurposes>PersonalComputer</usePurposes> <scriptVariant>Russian</scriptVariant> @@ -19,7 +19,7 @@ <defaultRoles>Role.АдминистраторСистемы</defaultRoles> <defaultRoles>Role.ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок</defaultRoles> <vendor>Фирма "1С"</vendor> - <version>2.4.3.176</version> + <version>2.4.4.151</version> <updateCatalogAddress>http://downloads.v8.1c.ru/tmplts/</updateCatalogAddress> <includeHelpInContents>true</includeHelpInContents> <usedMobileApplicationFunctionalities> @@ -109,6 +109,7 @@ <styleItems>StyleItem.ФонУправляющегоПоля</styleItems> <styleItems>StyleItem.ЦветПустойГиперссылки</styleItems> <styleItems>StyleItem.ЦветРазделаПанелиФункций</styleItems> + <styleItems>StyleItem.ЦветФонаПредупреждения</styleItems> <commonPictures>CommonPicture.GoogleMaps</commonPictures> <commonPictures>CommonPicture.Skype</commonPictures> <commonPictures>CommonPicture.АрхивАнкета</commonPictures> @@ -147,6 +148,7 @@ <commonPictures>CommonPicture.ГраницаСлева</commonPictures> <commonPictures>CommonPicture.ГраницаСнизу</commonPictures> <commonPictures>CommonPicture.ГраницаСправа</commonPictures> + <commonPictures>CommonPicture.ДлительнаяОперация16</commonPictures> <commonPictures>CommonPicture.ДлительнаяОперация48</commonPictures> <commonPictures>CommonPicture.ДобавитьКомплексныйВопрос</commonPictures> <commonPictures>CommonPicture.ДобавитьПростойВопрос</commonPictures> @@ -235,6 +237,7 @@ <commonPictures>CommonPicture.НетГраницы</commonPictures> <commonPictures>CommonPicture.ОбновитьФайлИзФайлаНаДиске</commonPictures> <commonPictures>CommonPicture.ОбновлениеВнешнихКомпонентССайта</commonPictures> + <commonPictures>CommonPicture.Обсуждения</commonPictures> <commonPictures>CommonPicture.ОбъединитьЯчейки</commonPictures> <commonPictures>CommonPicture.ОбычныйДоступСФлажком</commonPictures> <commonPictures>CommonPicture.ОпубликоватьФайл</commonPictures> @@ -624,10 +627,11 @@ <commonModules>CommonModule.КонтрольВеденияУчета</commonModules> <commonModules>CommonModule.КонтрольВеденияУчетаКлиент</commonModules> <commonModules>CommonModule.КонтрольВеденияУчетаПереопределяемый</commonModules> - <commonModules>CommonModule.КонтрольВеденияУчетаПовтИсп</commonModules> <commonModules>CommonModule.КонтрольВеденияУчетаСлужебный</commonModules> <commonModules>CommonModule.КонтрольВеденияУчетаСлужебныйКлиент</commonModules> + <commonModules>CommonModule.КонтрольВеденияУчетаСлужебныйПовтИсп</commonModules> <commonModules>CommonModule.КурсыВалютСлужебныйВМоделиСервиса</commonModules> + <commonModules>CommonModule.НапоминанияПользователя</commonModules> <commonModules>CommonModule.НапоминанияПользователяВызовСервера</commonModules> <commonModules>CommonModule.НапоминанияПользователяГлобальный</commonModules> <commonModules>CommonModule.НапоминанияПользователяКлиент</commonModules> @@ -673,6 +677,7 @@ <commonModules>CommonModule.ОбновлениеКонфигурации</commonModules> <commonModules>CommonModule.ОбновлениеКонфигурацииВызовСервера</commonModules> <commonModules>CommonModule.ОбновлениеКонфигурацииКлиент</commonModules> + <commonModules>CommonModule.ОбсужденияСлужебныйКлиент</commonModules> <commonModules>CommonModule.ОбщегоНазначения</commonModules> <commonModules>CommonModule.ОбщегоНазначенияВызовСервера</commonModules> <commonModules>CommonModule.ОбщегоНазначенияГлобальный</commonModules> @@ -725,6 +730,7 @@ <commonModules>CommonModule.ПоискИУдалениеДублей</commonModules> <commonModules>CommonModule.ПоискИУдалениеДублейКлиент</commonModules> <commonModules>CommonModule.ПоискИУдалениеДублейПереопределяемый</commonModules> + <commonModules>CommonModule.ПолнотекстовыйПоискКлиент</commonModules> <commonModules>CommonModule.ПолнотекстовыйПоискСервер</commonModules> <commonModules>CommonModule.ПолнотекстовыйПоискСерверПереопределяемый</commonModules> <commonModules>CommonModule.ПолучениеФайловИзИнтернета</commonModules> @@ -737,7 +743,6 @@ <commonModules>CommonModule.ПользователиСлужебный</commonModules> <commonModules>CommonModule.ПользователиСлужебныйВМоделиСервиса</commonModules> <commonModules>CommonModule.ПользователиСлужебныйВМоделиСервисаКлиент</commonModules> - <commonModules>CommonModule.ПользователиСлужебныйВМоделиСервисаПовтИсп</commonModules> <commonModules>CommonModule.ПользователиСлужебныйВызовСервера</commonModules> <commonModules>CommonModule.ПользователиСлужебныйКлиент</commonModules> <commonModules>CommonModule.ПользователиСлужебныйКлиентСервер</commonModules> @@ -753,7 +758,6 @@ <commonModules>CommonModule.ПрисоединенныеФайлы</commonModules> <commonModules>CommonModule.ПрисоединенныеФайлыКлиент</commonModules> <commonModules>CommonModule.ПрисоединенныеФайлыКлиентСервер</commonModules> - <commonModules>CommonModule.ПрисоединенныеФайлыПереопределяемый</commonModules> <commonModules>CommonModule.ПроверкаЛегальностиПолученияОбновленияКлиент</commonModules> <commonModules>CommonModule.РаботаВБезопасномРежиме</commonModules> <commonModules>CommonModule.РаботаВБезопасномРежимеКлиент</commonModules> @@ -837,6 +841,7 @@ <commonModules>CommonModule.СообщенияУправлениеРезервнымКопированиемОбработчикСообщения_1_0_2_1</commonModules> <commonModules>CommonModule.СообщенияУправлениеРезервнымКопированиемОбработчикСообщения_1_0_3_1</commonModules> <commonModules>CommonModule.СообщенияУправлениеРезервнымКопированиемРеализация</commonModules> + <commonModules>CommonModule.СтандартныеПодсистемыБезопасныйРежим</commonModules> <commonModules>CommonModule.СтандартныеПодсистемыВызовСервера</commonModules> <commonModules>CommonModule.СтандартныеПодсистемыГлобальный</commonModules> <commonModules>CommonModule.СтандартныеПодсистемыКлиент</commonModules> @@ -876,10 +881,8 @@ <commonModules>CommonModule.УправлениеПечатьюOOWriterКлиент</commonModules> <commonModules>CommonModule.УправлениеПечатьюВызовСервера</commonModules> <commonModules>CommonModule.УправлениеПечатьюКлиент</commonModules> - <commonModules>CommonModule.УправлениеПечатьюКлиентПовтИсп</commonModules> <commonModules>CommonModule.УправлениеПечатьюКлиентСервер</commonModules> <commonModules>CommonModule.УправлениеПечатьюПереопределяемый</commonModules> - <commonModules>CommonModule.УправлениеПечатьюПовтИсп</commonModules> <commonModules>CommonModule.УправлениеПечатьюСлужебныйКлиент</commonModules> <commonModules>CommonModule.УправлениеСвойствами</commonModules> <commonModules>CommonModule.УправлениеСвойствамиКлиент</commonModules> @@ -893,6 +896,7 @@ <commonModules>CommonModule.ФизическиеЛицаКлиентСервер</commonModules> <commonModules>CommonModule.ЦентрМониторинга</commonModules> <commonModules>CommonModule.ЦентрМониторингаВызовСервераПовтИсп</commonModules> + <commonModules>CommonModule.ЦентрМониторингаГлобальный</commonModules> <commonModules>CommonModule.ЦентрМониторингаКлиент</commonModules> <commonModules>CommonModule.ЦентрМониторингаКлиентСлужебный</commonModules> <commonModules>CommonModule.ЦентрМониторингаПереопределяемый</commonModules> @@ -1038,6 +1042,7 @@ <scheduledJobs>ScheduledJob.ПолучениеИОтправкаЭлектронныхПисем</scheduledJobs> <scheduledJobs>ScheduledJob.ПроверкаВеденияУчета</scheduledJobs> <scheduledJobs>ScheduledJob.РассылкаОтчетов</scheduledJobs> + <scheduledJobs>ScheduledJob.СборИОтправкаОтчетовОбОшибках</scheduledJobs> <scheduledJobs>ScheduledJob.СборИОтправкаСтатистики</scheduledJobs> <scheduledJobs>ScheduledJob.СинхронизацияДанных</scheduledJobs> <scheduledJobs>ScheduledJob.СинхронизацияФайлов</scheduledJobs> @@ -1121,6 +1126,7 @@ <definedTypes>DefinedType.ВладелецПрисоединенныхФайловОбъект</definedTypes> <definedTypes>DefinedType.ВладелецСОграничениемПоНаборамЗначенийДоступаОбъект</definedTypes> <definedTypes>DefinedType.ВладелецФайлов</definedTypes> + <definedTypes>DefinedType.ВладелецШаблонаСообщения</definedTypes> <definedTypes>DefinedType.ВнешнийПользователь</definedTypes> <definedTypes>DefinedType.ВнешнийПользовательОбъект</definedTypes> <definedTypes>DefinedType.ЗначениеДоступа</definedTypes> @@ -1150,7 +1156,7 @@ <definedTypes>DefinedType.ПрисоединенныйФайлОбъект</definedTypes> <definedTypes>DefinedType.Респондент</definedTypes> <definedTypes>DefinedType.СубъектПерсональныхДанных</definedTypes> - <definedTypes>DefinedType.УточнениеКонтекстаПроверкиСостоянияСистемы</definedTypes> + <definedTypes>DefinedType.УточнениеКонтекстаПроверокВеденияУчета</definedTypes> <definedTypes>DefinedType.ФизическоеЛицо</definedTypes> <commonCommands>CommonCommand.ВерсииФайла</commonCommands> <commonCommands>CommonCommand.ВремяТекущегоСеанса</commonCommands> @@ -1278,7 +1284,6 @@ <constants>Constant.КоличествоЗамеровВПакетеЭкспорта</constants> <constants>Constant.КоличествоЭлементовВТранзакцииЗагрузкиДанных</constants> <constants>Constant.КопироватьОбластиДанныхИзЭталонной</constants> - <constants>Constant.ЛогинДоступаКСервисуMorpher</constants> <constants>Constant.МаксимальнаяДлительностьВыполненияИсполняющегоФоновогоЗадания</constants> <constants>Constant.МаксимальноеКоличествоИсполняющихФоновыхЗаданий</constants> <constants>Constant.МаксимальныйРазмерФайла</constants> @@ -1329,6 +1334,7 @@ <constants>Constant.УдалитьИмяСлужебногоПользователяМенеджераСервиса</constants> <constants>Constant.УдалитьКонечнаяТочкаМенеджераСервиса</constants> <constants>Constant.УдалитьЛогинДляОтправкиSMS</constants> + <constants>Constant.УдалитьЛогинДоступаКСервисуMorpher</constants> <constants>Constant.УдалитьПарольДляОтправкиSMS</constants> <constants>Constant.УдалитьПарольСлужебногоПользователяМенеджераСервиса</constants> <constants>Constant.УдалитьПровайдерЭП</constants> @@ -1511,6 +1517,7 @@ <enums>Enum.ВидыПереключателяВАнкетах</enums> <enums>Enum.ВидыПравилДляОбменаДанными</enums> <enums>Enum.ВидыТранспортаСообщенийОбмена</enums> + <enums>Enum.ВидыФлажкаВАнкетах</enums> <enums>Enum.ДействияПриОбмене</enums> <enums>Enum.ДействияСФайламиПоДвойномуЩелчку</enums> <enums>Enum.ДополнительныеЗначенияДоступа</enums> @@ -1579,6 +1586,7 @@ <reports>Report.БизнесПроцессы</reports> <reports>Report.ДатыЗапретаЗагрузки</reports> <reports>Report.ДатыЗапретаИзменения</reports> + <reports>Report.ДвиженияДокумента</reports> <reports>Report.ЗависшиеЗадачи</reports> <reports>Report.Задания</reports> <reports>Report.Задачи</reports> @@ -1586,7 +1594,6 @@ <reports>Report.ИспользуемыеВнешниеРесурсы</reports> <reports>Report.МестаИспользованияСсылок</reports> <reports>Report.ОбъемНенужныхФайлов</reports> - <reports>Report.ОтчетОДвиженияхДокумента</reports> <reports>Report.ОценкаПроизводительности</reports> <reports>Report.ПраваДоступа</reports> <reports>Report.ПроверкаЦелостностиТома</reports> @@ -1626,10 +1633,12 @@ <dataProcessors>DataProcessor.НастройкаРезервногоКопированияИБ</dataProcessors> <dataProcessors>DataProcessor.НастройкаРезервногоКопированияПриложения</dataProcessors> <dataProcessors>DataProcessor.НастройкиПользователей</dataProcessors> + <dataProcessors>DataProcessor.НастройкиЦентраМониторинга</dataProcessors> <dataProcessors>DataProcessor.НерекомендуемаяВерсияПлатформы</dataProcessors> <dataProcessors>DataProcessor.ОценкаПроизводительности</dataProcessors> <dataProcessors>DataProcessor.ПанельАдминистрированияБСП</dataProcessors> <dataProcessors>DataProcessor.ПереносФайловВТома</dataProcessors> + <dataProcessors>DataProcessor.ПодключениеОбсуждений</dataProcessors> <dataProcessors>DataProcessor.ПоискИУдалениеДублей</dataProcessors> <dataProcessors>DataProcessor.ПолнотекстовыйПоискВДанных</dataProcessors> <dataProcessors>DataProcessor.ПомощникИнтерактивногоОбменаДанными</dataProcessors> diff --git a/SSL/src/Configuration/ParentConfigurations.bin b/SSL/src/Configuration/ParentConfigurations.bin index 8cbc9633e..eb6cf0763 100644 --- a/SSL/src/Configuration/ParentConfigurations.bin +++ b/SSL/src/Configuration/ParentConfigurations.bin @@ -1 +1 @@ -{6,1,1,bed77cc9-9dfa-4fc9-a953-823dbdc68669,1,61c49d41-d5e5-4013-84e8-aa837a4eeee9,"2.4.3.176","Фирма ""1С""","БиблиотекаСтандартныхПодсистем",5526,1,0,4e3a55ec-1f86-4629-91b3-05d85a2d0682,4e3a55ec-1f86-4629-91b3-05d85a2d0682,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 +{6,1,1,cd554d75-3ad3-4ea8-8867-0d884b6d37c7,1,6151b3e7-0ce8-4c19-88d1-52cf097aec78,"2.4.4.151","Фирма ""1С""","БиблиотекаСтандартныхПодсистем",5549,1,0,bb29a0b2-5fa1-4444-8959-f785457105d1,bb29a0b2-5fa1-4444-8959-f785457105d1,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,839e29b1-a0d2-40fa-9f3e-46e66b943358,839e29b1-a0d2-40fa-9f3e-46e66b943358,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,b8c4aff0-a36d-4be9-9a5e-b0873d83ff15,b8c4aff0-a36d-4be9-9a5e-b0873d83ff15,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,ef4d648f-4cac-4df9-9880-2aa13c422d10,ef4d648f-4cac-4df9-9880-2aa13c422d10,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,2522fce4-d121-482b-a39d-0c1a842d315e,2522fce4-d121-482b-a39d-0c1a842d315e,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,e9311a22-56b5-4607-8eaa-52382ed040c3,e9311a22-56b5-4607-8eaa-52382ed040c3,1,0,dc7b8596-b2c0-415f-95d9-c0aaa96c5675,dc7b8596-b2c0-415f-95d9-c0aaa96c5675,1,0,87e6e315-01e0-41eb-8373-0a60635f2f7a,87e6e315-01e0-41eb-8373-0a60635f2f7a,1,0,c4fe10b6-d025-4736-be23-3113bd7fe7b4,c4fe10b6-d025-4736-be23-3113bd7fe7b4,1,0,8fdfef8d-502e-4d27-a539-e833048fa1eb,8fdfef8d-502e-4d27-a539-e833048fa1eb,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,59b34b58-6ac9-467e-963b-0cccbf098797,59b34b58-6ac9-467e-963b-0cccbf098797,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,3174d57f-c6a8-44dc-adc1-47e9a54c844d,3174d57f-c6a8-44dc-adc1-47e9a54c844d,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,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,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,662c5b48-62e1-451e-b37f-20f3f2bb0347,662c5b48-62e1-451e-b37f-20f3f2bb0347,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,1d49b1bb-5f90-46e4-adcf-55ad46442648,1d49b1bb-5f90-46e4-adcf-55ad46442648,1,0,e1803e54-ec5e-4a82-8097-5e2331820991,e1803e54-ec5e-4a82-8097-5e2331820991,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,e37aa075-143b-44e9-a2e2-77b3e0f76a77,e37aa075-143b-44e9-a2e2-77b3e0f76a77,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,f3abaf8e-0230-43db-aaf0-716fc02047eb,f3abaf8e-0230-43db-aaf0-716fc02047eb,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,0b88b50d-6aa1-4364-82bd-1c0c0da93a58,0b88b50d-6aa1-4364-82bd-1c0c0da93a58,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,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,4766c40e-6330-4c1d-a64f-0c8c672886a4,4766c40e-6330-4c1d-a64f-0c8c672886a4,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,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,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,49bd152e-479a-46fe-b3af-26ed9181dc34,49bd152e-479a-46fe-b3af-26ed9181dc34,1,0,0a742dd2-1ff4-42de-b303-f2bb01b36fe2,0a742dd2-1ff4-42de-b303-f2bb01b36fe2,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,08c8a9bf-7b89-4d0e-a496-4c7efeca0577,08c8a9bf-7b89-4d0e-a496-4c7efeca0577,1,0,f6c2b015-9cfc-40d2-a93f-b0e88db4a23f,f6c2b015-9cfc-40d2-a93f-b0e88db4a23f,1,0,103f3d8f-e47a-4772-bdd7-dd5f8508d22b,103f3d8f-e47a-4772-bdd7-dd5f8508d22b,1,0,ba8ea271-8716-49ef-8b10-f4b5798c1f62,ba8ea271-8716-49ef-8b10-f4b5798c1f62,1,0,3633c30c-9479-4801-89cc-a5734a41e465,3633c30c-9479-4801-89cc-a5734a41e465,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,ea5d0221-fb1e-4626-862a-9c1209365d8f,ea5d0221-fb1e-4626-862a-9c1209365d8f,1,0,12bce69b-933c-4ce4-9d29-a47f3db0226e,12bce69b-933c-4ce4-9d29-a47f3db0226e,1,0,82dcd6a3-c35b-421c-a8f9-77855ad2abca,82dcd6a3-c35b-421c-a8f9-77855ad2abca,1,0,ad0b1720-282e-49d4-af80-324a887963c3,ad0b1720-282e-49d4-af80-324a887963c3,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,f4f185af-5507-427c-b82b-515ea71f3fc1,f4f185af-5507-427c-b82b-515ea71f3fc1,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,364218e0-87ba-4008-a3e3-e2351a5e04b8,364218e0-87ba-4008-a3e3-e2351a5e04b8,1,0,788a98e0-194f-466c-b4fa-bafd527aae26,788a98e0-194f-466c-b4fa-bafd527aae26,1,0,5d990585-02dd-4a13-8dfa-920df7d1dbb0,5d990585-02dd-4a13-8dfa-920df7d1dbb0,1,0,143f6db9-a4dc-4039-90d0-6161394a3e2f,143f6db9-a4dc-4039-90d0-6161394a3e2f,1,0,07820e9e-9d6b-4c37-909e-90dbd33e30c0,07820e9e-9d6b-4c37-909e-90dbd33e30c0,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,504280a1-a451-4547-ae71-e217f8fdf8f6,504280a1-a451-4547-ae71-e217f8fdf8f6,1,0,b071a9fe-0e9f-4ded-8dab-b1388fd12897,b071a9fe-0e9f-4ded-8dab-b1388fd12897,1,0,a2accd5e-e6f5-4d5f-8243-51aadfa88b00,a2accd5e-e6f5-4d5f-8243-51aadfa88b00,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,7ece6efe-16a1-4294-8c28-3fa6427ba9f0,7ece6efe-16a1-4294-8c28-3fa6427ba9f0,1,0,61094d92-b1e6-45b9-9258-38a7bb1d6469,61094d92-b1e6-45b9-9258-38a7bb1d6469,1,0,4791b5d4-3568-4420-8c25-89ecce7c6353,4791b5d4-3568-4420-8c25-89ecce7c6353,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,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,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,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,7904d64a-2c30-4434-8924-b4817b727db9,7904d64a-2c30-4434-8924-b4817b727db9,1,0,c550a43a-1240-4f29-9045-a262f37f703a,c550a43a-1240-4f29-9045-a262f37f703a,1,0,86b1feed-ed65-4672-a49a-c52282b40be3,86b1feed-ed65-4672-a49a-c52282b40be3,1,0,85ac42d7-400a-4469-8fcd-e6a14f258792,85ac42d7-400a-4469-8fcd-e6a14f258792,1,0,be0fbbfc-5873-41a6-80ef-35ed1b8adb4c,be0fbbfc-5873-41a6-80ef-35ed1b8adb4c,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,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,13b3c973-6be3-4898-89d5-20852cd14e46,13b3c973-6be3-4898-89d5-20852cd14e46,1,0,d978d078-4fd8-40b9-90c2-047cdaf94cba,d978d078-4fd8-40b9-90c2-047cdaf94cba,1,0,f38bb317-8a59-4786-be76-e1d4e534628d,f38bb317-8a59-4786-be76-e1d4e534628d,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,c3f2a760-610a-40e0-945b-1f9f6369444d,c3f2a760-610a-40e0-945b-1f9f6369444d,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,bd0f9ec3-156a-4a6f-a52b-1213ec825bc0,bd0f9ec3-156a-4a6f-a52b-1213ec825bc0,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,aa114d56-2faf-4925-8319-f0aa3993e9ee,aa114d56-2faf-4925-8319-f0aa3993e9ee,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,ab574fa5-0730-4456-b741-111e5ea8a896,ab574fa5-0730-4456-b741-111e5ea8a896,1,0,b8d5adf0-dc2f-4041-bc97-cb2442f00054,b8d5adf0-dc2f-4041-bc97-cb2442f00054,1,0,398199c4-4830-48e9-89c5-45c2c5a30ee6,398199c4-4830-48e9-89c5-45c2c5a30ee6,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,32586ba6-8922-4321-b134-70d1b77a16a4,32586ba6-8922-4321-b134-70d1b77a16a4,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,a0be938b-139e-41bd-b067-f5241ff68c90,a0be938b-139e-41bd-b067-f5241ff68c90,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/ИспользоватьСервисСклоненияMorpher/ИспользоватьСервисСклоненияMorpher.mdo b/SSL/src/Constants/ИспользоватьСервисСклоненияMorpher/ИспользоватьСервисСклоненияMorpher.mdo index 084915f0b..c34aff56e 100644 --- a/SSL/src/Constants/ИспользоватьСервисСклоненияMorpher/ИспользоватьСервисСклоненияMorpher.mdo +++ b/SSL/src/Constants/ИспользоватьСервисСклоненияMorpher/ИспользоватьСервисСклоненияMorpher.mdo @@ -8,7 +8,7 @@ <name>ИспользоватьСервисСклоненияMorpher</name> <synonym> <key>ru</key> - <value>Использовать сервис склонения morpher.ru</value> + <value>Использовать сервис склонения «Морфер»</value> </synonym> <type> <types>Boolean</types> diff --git a/SSL/src/Constants/ОтправлятьПисьмаВФорматеHTML/ValueManagerModule.bsl b/SSL/src/Constants/ОтправлятьПисьмаВФорматеHTML/ValueManagerModule.bsl index 17d3b8b7d..5ee7ba6f6 100644 --- a/SSL/src/Constants/ОтправлятьПисьмаВФорматеHTML/ValueManagerModule.bsl +++ b/SSL/src/Constants/ОтправлятьПисьмаВФорматеHTML/ValueManagerModule.bsl @@ -17,7 +17,7 @@ Попытка Блокировка = Новый БлокировкаДанных; - ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.НастройкиУчетныхЗаписейЭлектроннойПочты"); + Блокировка.Добавить("РегистрСведений.НастройкиУчетныхЗаписейЭлектроннойПочты"); Блокировка.Заблокировать(); // Переключение подписей всех учетных записей в обычный текст. diff --git a/SSL/src/Constants/ЛогинДоступаКСервисуMorpher/ЛогинДоступаКСервисуMorpher.mdo b/SSL/src/Constants/УдалитьЛогинДоступаКСервисуMorpher/УдалитьЛогинДоступаКСервисуMorpher.mdo similarity index 83% rename from SSL/src/Constants/ЛогинДоступаКСервисуMorpher/ЛогинДоступаКСервисуMorpher.mdo rename to SSL/src/Constants/УдалитьЛогинДоступаКСервисуMorpher/УдалитьЛогинДоступаКСервисуMorpher.mdo index f334321ff..6fa67be97 100644 --- a/SSL/src/Constants/ЛогинДоступаКСервисуMorpher/ЛогинДоступаКСервисуMorpher.mdo +++ b/SSL/src/Constants/УдалитьЛогинДоступаКСервисуMorpher/УдалитьЛогинДоступаКСервисуMorpher.mdo @@ -5,10 +5,10 @@ <valueManagerType typeId="4b0bb934-5f76-4b4a-8416-c46e77c669de" valueTypeId="90d9508c-7bfd-4b96-ac69-73ee967caba6"/> <valueKeyType typeId="d0ff0b54-1834-59be-b923-dfb302a5e971" valueTypeId="9a8ba82c-db21-5b5f-8f81-a1aa0357fcac"/> </producedTypes> - <name>ЛогинДоступаКСервисуMorpher</name> + <name>УдалитьЛогинДоступаКСервисуMorpher</name> <synonym> <key>ru</key> - <value>Логин доступа к сервису morpher</value> + <value>(Не используется) удалить логин доступа к сервису morpher</value> </synonym> <type> <types>String</types> diff --git a/SSL/src/DataProcessors/АктивныеПользователи/Forms/АктивныеПользователи/Module.bsl b/SSL/src/DataProcessors/АктивныеПользователи/Forms/АктивныеПользователи/Module.bsl index 35daab00a..57332eea7 100644 --- a/SSL/src/DataProcessors/АктивныеПользователи/Forms/АктивныеПользователи/Module.bsl +++ b/SSL/src/DataProcessors/АктивныеПользователи/Forms/АктивныеПользователи/Module.bsl @@ -455,9 +455,6 @@ ПараметрыАдминистрирования = Результат; - Сообщение = ""; - НомерСеансаДляЗавершения = Элементы.СписокПользователей.ТекущиеДанные.Сеанс; - СтруктураСеанса = Новый Структура; СтруктураСеанса.Вставить("Свойство", "Номер"); СтруктураСеанса.Вставить("ВидСравнения", ВидСравнения.ВСписке); diff --git a/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/БлокировкаСоединенийСИнформационнойБазой/Module.bsl b/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/БлокировкаСоединенийСИнформационнойБазой/Module.bsl index e46ab74b2..7a3148cf0 100644 --- a/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/БлокировкаСоединенийСИнформационнойБазой/Module.bsl +++ b/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/БлокировкаСоединенийСИнформационнойБазой/Module.bsl @@ -30,7 +30,7 @@ Элементы.ГруппаЗапретитьРаботуРегламентныхЗаданий.Видимость = Ложь; КонецЕсли; - Если ОбщегоНазначения.РазделениеВключено() Или Не Пользователи.РолиДоступны("ПолныеПрава") Тогда + Если ОбщегоНазначения.РазделениеВключено() Или Не ЭтоАдминистраторСистемы Тогда Элементы.КодДляРазблокировки.Видимость = Ложь; КонецЕсли; diff --git a/SSL/src/DataProcessors/БлокировкаРаботыПользователей/ObjectModule.bsl b/SSL/src/DataProcessors/БлокировкаРаботыПользователей/ObjectModule.bsl index a99d36a28..06771c519 100644 --- a/SSL/src/DataProcessors/БлокировкаРаботыПользователей/ObjectModule.bsl +++ b/SSL/src/DataProcessors/БлокировкаРаботыПользователей/ObjectModule.bsl @@ -48,7 +48,6 @@ Процедура ВыполнитьУстановкуБлокировки(Значение) - УстановленаБлокировкаСоединений = СоединенияИБ.УстановленаБлокировкаСоединений(); Если Пользователи.ЭтоПолноправныйПользователь(, Истина) Тогда Блокировка = Новый БлокировкаСеансов; Блокировка.КодРазрешения = КодДляРазблокировки; diff --git a/SSL/src/DataProcessors/ВыгрузкаЗагрузкаEnterpriseData/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ВыгрузкаЗагрузкаEnterpriseData/Forms/Форма/Module.bsl index 2c150273c..d000c83ac 100644 --- a/SSL/src/DataProcessors/ВыгрузкаЗагрузкаEnterpriseData/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ВыгрузкаЗагрузкаEnterpriseData/Forms/Форма/Module.bsl @@ -305,7 +305,7 @@ ДлительнаяОперация.Свойство("Сообщения", МассивСообщений); СообщитьОбОкончанииОперации(Истина); Иначе - МодульДлительныеОперацииКлиент = ОбщийМодуль("ДлительныеОперацииКлиент"); + МодульДлительныеОперацииКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ДлительныеОперацииКлиент"); ПараметрыОжидания = МодульДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект); ПараметрыОжидания.ВыводитьОкноОжидания = Ложь; @@ -338,7 +338,7 @@ ДлительнаяОперация.Свойство("Сообщения", МассивСообщений); ОбработатьРезультатВыгрузки(); Иначе - МодульДлительныеОперацииКлиент = ОбщийМодуль("ДлительныеОперацииКлиент"); + МодульДлительныеОперацииКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ДлительныеОперацииКлиент"); ПараметрыОжидания = МодульДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект); ПараметрыОжидания.ВыводитьОкноОжидания = Ложь; @@ -395,11 +395,34 @@ &НаКлиенте Процедура ВыбратьФайлДляЗагрузкиНаКлиенте(ЗагружатьПослеВыбора = Ложь) - ПодключитьРасширениеРаботыСФайлами(); + + ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("ЗагружатьПослеВыбора", ЗагружатьПослеВыбора); + + Оповещение = Новый ОписаниеОповещения("ПодключитьРасширениеРаботыСФайламиЗавершение", ЭтотОбъект, ДополнительныеПараметры); + НачатьПодключениеРасширенияРаботыСФайлами(Оповещение); + +КонецПроцедуры + +&НаКлиенте +Процедура ПодключитьРасширениеРаботыСФайламиЗавершение(Подключено, ДополнительныеПараметры) Экспорт + + Если Не Подключено Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + НСтр("ru = 'Для продолжения необходимо установить расширение работы с файлами.'")); + Возврат; + КонецЕсли; + ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); ДиалогОткрытияФайла.Фильтр = НСтр("ru = 'Данные загрузки'")+ "(*.xml)|*.xml"; - ОповещениеВыбора = Новый ОписаниеОповещения("ВыбранФайл", ЭтотОбъект, Новый Структура("ДляЗагрузки, ЗагружатьПослеВыбора", Истина, ЗагружатьПослеВыбора)); + + ПараметрыОповещения = Новый Структура; + ПараметрыОповещения.Вставить("ДляЗагрузки", Истина); + ПараметрыОповещения.Вставить("ЗагружатьПослеВыбора", ДополнительныеПараметры.ЗагружатьПослеВыбора); + + ОповещениеВыбора = Новый ОписаниеОповещения("ВыбранФайл", ЭтотОбъект, ПараметрыОповещения); ДиалогОткрытияФайла.Показать(ОповещениеВыбора); + КонецПроцедуры &НаКлиенте @@ -452,7 +475,7 @@ ВыполняемыйМетод = "ДлительныеОперации.ВыполнитьПроцедуруМодуляОбъектаОбработки"; - МодульДлительныеОперации = ОбщийМодуль("ДлительныеОперации"); + МодульДлительныеОперации = ОбщегоНазначения.ОбщийМодуль("ДлительныеОперации"); ПараметрыВыполнения = МодульДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор); ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Выгрузка данных EnterpriseData'"); РезультатФоновогоЗадания = МодульДлительныеОперации.ВыполнитьВФоне(ВыполняемыйМетод, ПараметрыЗадания, ПараметрыВыполнения); @@ -494,7 +517,7 @@ ВыполняемыйМетод = "ДлительныеОперации.ВыполнитьПроцедуруМодуляОбъектаОбработки"; - МодульДлительныеОперации = ОбщийМодуль("ДлительныеОперации"); + МодульДлительныеОперации = ОбщегоНазначения.ОбщийМодуль("ДлительныеОперации"); ПараметрыВыполнения = МодульДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор); ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Загрузка данных EnterpriseData'"); РезультатФоновогоЗадания = МодульДлительныеОперации.ВыполнитьВФоне(ВыполняемыйМетод, ПараметрыЗадания, ПараметрыВыполнения); @@ -865,42 +888,6 @@ Сообщение.Сообщить(); КонецПроцедуры -// Возвращает ссылку на общий модуль по имени. -// -// Параметры: -// Имя - Строка - имя общего модуля, например: -// "ОбщегоНазначения", -// "ОбщегоНазначенияКлиент". -// -// Возвращаемое значение: -// ОбщийМодуль. -// -&НаКлиентеНаСервереБезКонтекста -Функция ОбщийМодуль(Имя) - -#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда - Если Метаданные.ОбщиеМодули.Найти(Имя) <> Неопределено Тогда - Модуль = Вычислить(Имя); - Иначе - Модуль = Неопределено; - КонецЕсли; - - Если ТипЗнч(Модуль) <> Тип("ОбщийМодуль") Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ВставитьПараметрыВСтроку(НСтр("ru = 'Общий модуль ""%1"" не найден.'"), Имя); - КонецЕсли; -#Иначе - Модуль = Вычислить(Имя); -#Если НЕ ВебКлиент Тогда - Если ТипЗнч(Модуль) <> Тип("ОбщийМодуль") Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ВставитьПараметрыВСтроку(НСтр("ru = 'Общий модуль ""%1"" не найден.'"), Имя); - КонецЕсли; -#КонецЕсли -#КонецЕсли - - Возврат Модуль; - -КонецФункции - &НаКлиенте Процедура УстановитьВидимостьДоступностьКнопок(ФлагДоступность) Элементы.ГруппаВерхняя.Видимость = ФлагДоступность; @@ -940,7 +927,7 @@ &НаСервере Процедура ПрерватьВыгрузкуЗагрузкуСервер() - МодульДлительныеОперации = ОбщийМодуль("ДлительныеОперации"); + МодульДлительныеОперации = ОбщегоНазначения.ОбщийМодуль("ДлительныеОперации"); МодульДлительныеОперации.ОтменитьВыполнениеЗадания(ИдентификаторЗадания); КонецПроцедуры #КонецОбласти diff --git a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/ВыборВидаОбъектов/Module.bsl b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/ВыборВидаОбъектов/Module.bsl index 70c1997f8..ddf06b752 100644 --- a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/ВыборВидаОбъектов/Module.bsl +++ b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/ВыборВидаОбъектов/Module.bsl @@ -11,9 +11,12 @@ Если Не ПустаяСтрока(Параметры.ВыбранныеТипы) Тогда ВыбранныеТипы = СтрРазделить(Параметры.ВыбранныеТипы, ",", Истина); - Элементы.ДоступныеОбъектыДляИзменения.ТекущаяСтрока = ДоступныеОбъектыДляИзменения.НайтиПоЗначению(ВыбранныеТипы[0]).ПолучитьИдентификатор(); Для Каждого ВыбранныйТип Из ВыбранныеТипы Цикл - ДоступныеОбъектыДляИзменения.НайтиПоЗначению(ВыбранныйТип).Пометка = Истина; + НайденныйТип = ДоступныеОбъектыДляИзменения.НайтиПоЗначению(ВыбранныйТип); + Если НайденныйТип <> Неопределено Тогда + ДоступныеОбъектыДляИзменения.НайтиПоЗначению(ВыбранныйТип).Пометка = Истина; + Элементы.ДоступныеОбъектыДляИзменения.ТекущаяСтрока = НайденныйТип.ПолучитьИдентификатор(); + КонецЕсли; КонецЦикла; КонецЕсли; @@ -44,42 +47,6 @@ ОбработкаОбъект.ЗаполнитьКоллекциюДоступныхДляИзмененияОбъектов(ДоступныеОбъектыДляИзменения, Параметры.ПоказыватьСкрытые); КонецПроцедуры -// Возвращает ссылку на общий модуль по имени. -// -// Параметры: -// Имя - Строка - имя общего модуля, например: -// "ОбщегоНазначения", -// "ОбщегоНазначенияКлиент". -// -// Возвращаемое значение: -// ОбщийМодуль. -// -&НаКлиентеНаСервереБезКонтекста -Функция ОбщийМодуль(Имя) - -#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда - Если Метаданные.ОбщиеМодули.Найти(Имя) <> Неопределено Тогда - Модуль = Вычислить(Имя); - Иначе - Модуль = Неопределено; - КонецЕсли; - - Если ТипЗнч(Модуль) <> Тип("ОбщийМодуль") Тогда - ВызватьИсключение ПодставитьПараметрыВСтроку(НСтр("ru = 'Общий модуль ""%1"" не найден.'"), Имя); - КонецЕсли; -#Иначе - Модуль = Вычислить(Имя); -#Если НЕ ВебКлиент Тогда - Если ТипЗнч(Модуль) <> Тип("ОбщийМодуль") Тогда - ВызватьИсключение ПодставитьПараметрыВСтроку(НСтр("ru = 'Общий модуль ""%1"" не найден.'"), Имя); - КонецЕсли; -#КонецЕсли -#КонецЕсли - - Возврат Модуль; - -КонецФункции - &НаСервереБезКонтекста Функция ИменаПодчиненныхПодсистем(РодительскаяПодсистема) @@ -135,15 +102,4 @@ Элементы.ФормаВыбрать.Заголовок = ТекстКнопкиВыбора; КонецПроцедуры -&НаКлиентеНаСервереБезКонтекста -Функция ПодставитьПараметрыВСтроку(Знач СтрокаПодстановки, - Знач Параметр1, Знач Параметр2 = Неопределено, Знач Параметр3 = Неопределено) - - СтрокаПодстановки = СтрЗаменить(СтрокаПодстановки, "%1", Параметр1); - СтрокаПодстановки = СтрЗаменить(СтрокаПодстановки, "%2", Параметр2); - СтрокаПодстановки = СтрЗаменить(СтрокаПодстановки, "%3", Параметр3); - - Возврат СтрокаПодстановки; -КонецФункции - #КонецОбласти diff --git a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/РедактированиеФормулы/Module.bsl b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/РедактированиеФормулы/Module.bsl index 56970e032..329df3325 100644 --- a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/РедактированиеФормулы/Module.bsl +++ b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/РедактированиеФормулы/Module.bsl @@ -52,7 +52,6 @@ КонецЕсли; Отказ = Истина; - Ответ = Неопределено; Если ЗавершениеРаботы Тогда Возврат; КонецЕсли; @@ -145,7 +144,6 @@ Процедура ОперандыОкончаниеПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка) Если Элемент.ТекущиеДанные.ПометкаУдаления Тогда - Ответ = Неопределено; ПоказатьВопрос(Новый ОписаниеОповещения("ОперандыОкончаниеПеретаскиванияЗавершение", ЭтотОбъект), НСтр("ru = 'Выбранный элемент помечен на удаление'") + Символы.ПС + НСтр("ru = 'Продолжить?'"), РежимДиалогаВопрос.ДаНет); КонецЕсли; @@ -616,7 +614,6 @@ ПутьКДанным = ""; Результат = Истина; - ВыводитьСообщения = Истина; Если ЗначениеЗаполнено(Формула) Тогда @@ -691,7 +688,6 @@ ИмяОперанда = Сред(ТекстФормулы, НачалоОперанда + 1, КонецОперанда - НачалоОперанда - 1); МассивОперандов.Добавить(ИмяОперанда); ТекстФормулы = СтрЗаменить(ТекстФормулы, "[" + ИмяОперанда + "]", ""); - КонецПрошлогоОперанда = КонецОперанда; КонецЦикла; diff --git a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/Форма/Module.bsl index a0027f6a9..8314417cf 100644 --- a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/Форма/Module.bsl @@ -799,7 +799,7 @@ ТОПроцентОбъектовВПорции = 100; ТОЧислоОбъектовВПорции = 1; ОбрабатыватьРекурсивно = Ложь; - ПоказыватьСлужебныеРеквизиты = Ложь; + Объект.ПоказыватьСлужебныеРеквизиты = Ложь; СтруктураНастроек = ХранилищеОбщихНастроекЗагрузить( "Обработка.ГрупповоеИзменениеОбъектов", @@ -810,9 +810,9 @@ Объект.ПрерыватьПриОшибке = СтруктураНастроек.ПрерыватьПриОшибке; ОбрабатыватьРекурсивно = СтруктураНастроек.ОбрабатыватьРекурсивно; Если ПравоДоступа("АдминистрированиеДанных", Метаданные) И СтруктураНастроек.Свойство("ПоказыватьСлужебныеРеквизиты") Тогда - ПоказыватьСлужебныеРеквизиты = СтруктураНастроек.ПоказыватьСлужебныеРеквизиты; + Объект.ПоказыватьСлужебныеРеквизиты = СтруктураНастроек.ПоказыватьСлужебныеРеквизиты; Иначе - ПоказыватьСлужебныеРеквизиты = Ложь; + Объект.ПоказыватьСлужебныеРеквизиты = Ложь; КонецЕсли; КонецЕсли; @@ -1048,7 +1048,6 @@ // При наличии ошибок в транзакции - откатываем всю транзакцию. Если Объект.ИзменятьВТранзакции Тогда - ТекстПредупреждения = НСтр("ru = 'При изменении элементов обнаружены ошибки - изменения отменены.'"); ПодключитьОбработчикОжидания("ЗавершитьИзменениеОбъектов", 0.1, Истина); Возврат; // Досрочный выход из цикла и процедуры. КонецЕсли; @@ -1297,7 +1296,6 @@ КоличествоИзмененных = 0; Для Каждого СостояниеОбработанногоОбъекта Из РезультатИзменения.СостояниеОбработки Цикл - НомерСтроки = -1; Если Не ПустаяСтрока(СостояниеОбработанногоОбъекта.Значение.КодОшибки) Тогда КоличествоОшибок = КоличествоОшибок + 1; @@ -1406,16 +1404,6 @@ КонецПроцедуры -&НаКлиенте -Процедура УстановитьЗначениеПометкиИзменения(КоллекцияЭлементов, Значение) - - Для Каждого ЭлементКоллекции Из КоллекцияЭлементов Цикл - ЭлементКоллекции.Изменять = Значение; - УстановитьЗначениеПометкиИзменения(ЭлементКоллекции.ПолучитьЭлементы(), Значение); - КонецЦикла; - -КонецПроцедуры - &НаСервереБезКонтекста Функция ОбъектМетаданныхИерархический(СсылкаПервого) @@ -1691,8 +1679,8 @@ КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; Попытка - МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, - КомпоновщикНастроек.Настройки, , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений")); + КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек.Настройки,,, + Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений")); Исключение КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию); КонецПопытки; @@ -2418,7 +2406,7 @@ КонецЕсли; МодульУправлениеСвойствами = ОбщийМодуль("УправлениеСвойствами"); - СписокСвойств = МодульУправлениеСвойствами.ПолучитьСписокСвойств(ОбъектДляИзменения); + СписокСвойств = МодульУправлениеСвойствами.СвойстваОбъекта(ОбъектДляИзменения); Для Каждого Свойство Из СписокСвойств Цикл Если ОбщийСписокРеквизитов.Найти(Свойство) = Неопределено Тогда Продолжить; @@ -2762,7 +2750,7 @@ &НаСервере Процедура ОбновитьНадписьКоличествоВыбранных() - ЕстьОшибкиВОтборе = Ложь; + Если ЕстьНастроенныеОтборы() Тогда ТекстСообщенияОбОшибке = ""; КоличествоВыбранныхОбъектов = КоличествоВыбранныхОбъектов(Истина, , ТекстСообщенияОбОшибке); @@ -3272,7 +3260,6 @@ Менеджер = РегистрыРасчета; Иначе КлассПодчиненногоОМ = ЧастиИмени[2]; - ИмяПодчиненногоОМ = ЧастиИмени[3]; Если ВРег(КлассПодчиненногоОМ) = "ПЕРЕРАСЧЕТ" Тогда // Перерасчет Менеджер = РегистрыРасчета[ИмяОМ].Перерасчеты; @@ -4363,7 +4350,7 @@ КонецФункции &НаСервере -Функция ПроверитьВерсиюИРежимСовместимостиПлатформы() +Процедура ПроверитьВерсиюИРежимСовместимостиПлатформы() Информация = Новый СистемнаяИнформация; Если Не (Лев(Информация.ВерсияПриложения, 3) = "8.3" @@ -4379,7 +4366,7 @@ КонецЕсли; -КонецФункции +КонецПроцедуры &НаСервере Функция КартинкаВидыОпераций() diff --git a/SSL/src/DataProcessors/ДоступныеАнкеты/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ДоступныеАнкеты/Forms/Форма/Module.bsl index ff0951197..4e7338922 100644 --- a/SSL/src/DataProcessors/ДоступныеАнкеты/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ДоступныеАнкеты/Forms/Форма/Module.bsl @@ -132,8 +132,6 @@ СтрокаВозврата = ""; ЕстьОграниченияПоСроку = ЗначениеЗаполнено(СтрокаДерева.ДатаОкончания); - Закончился = ?(ЗначениеЗаполнено(СтрокаДерева.ДатаОкончания), - ?(ТекущаяДатаСеанса() <= СтрокаДерева.ДатаОкончания, Ложь, Истина), Ложь); Если ТипЗнч(СтрокаДерева.АнкетаОпрос) = Тип("ДокументСсылка.НазначениеОпросов") Тогда СтрокаВозврата = СтрокаВозврата + НСтр("ru = 'Анкета'") + " '" + СтрокаДерева.Наименование + "'"; diff --git a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ЖурналРегистрации/Attributes/ПолеИндикаторДлительныхОпераций/ExtInfo/SpreadsheetData.mxlx b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ЖурналРегистрации/Attributes/ПолеИндикаторДлительныхОпераций/ExtInfo/SpreadsheetData.mxlx new file mode 100644 index 000000000..70a095c0a --- /dev/null +++ b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ЖурналРегистрации/Attributes/ПолеИндикаторДлительныхОпераций/ExtInfo/SpreadsheetData.mxlx @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="UTF-8"?> +<document xmlns="http://v8.1c.ru/8.2/data/spreadsheet" xmlns:pal="http://v8.1c.ru/8.1/data/ui/colors/palette" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <columns> + <size>0</size> + </columns> + <vgRows>0</vgRows> +</document> \ No newline at end of file diff --git a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ЖурналРегистрации/Module.bsl b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ЖурналРегистрации/Module.bsl index e75aa0a3b..760e509eb 100644 --- a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ЖурналРегистрации/Module.bsl +++ b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ЖурналРегистрации/Module.bsl @@ -23,7 +23,7 @@ Иначе ИмяПользователя = Параметры.Пользователь; ОтборПоПользователю = Новый СписокЗначений; - ПоПользователю = ОтборПоПользователю.Добавить(ИмяПользователя, ИмяПользователя); + ОтборПоПользователю.Добавить(ИмяПользователя, ИмяПользователя); КонецЕсли; ОтборЖурналаРегистрации.Вставить("Пользователь", ОтборПоПользователю); КонецЕсли; diff --git a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ОтборЖурналаРегистрации/Module.bsl b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ОтборЖурналаРегистрации/Module.bsl index 9adbcd8b8..871e54ad7 100644 --- a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ОтборЖурналаРегистрации/Module.bsl +++ b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ОтборЖурналаРегистрации/Module.bsl @@ -25,8 +25,6 @@ &НаКлиенте Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) - Перем РедактируемыйСписок, ОтбираемыеПараметры, СтандартнаяОбработка; - Если ИмяСобытия = "ВыборЗначенийЭлементовОтбораЖурналаРегистрации" И Источник = ЭтотОбъект Тогда Если РедакторСоставаСвойстваИмяЭлемента = Элементы.Пользователи.Имя Тогда diff --git a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/ВыборКолонок/Form.form b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/ВыборКолонок/Form.form index 094246d42..90f4d1b33 100644 --- a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/ВыборКолонок/Form.form +++ b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/ВыборКолонок/Form.form @@ -29,7 +29,6 @@ <excludedCommands>MoveDown</excludedCommands> <excludedCommands>MoveUp</excludedCommands> <excludedCommands>Pickup</excludedCommands> - <excludedCommands>SelectAll</excludedCommands> <excludedCommands>SortListAsc</excludedCommands> <excludedCommands>SortListDesc</excludedCommands> <items xsi:type="form:FormGroup"> @@ -226,6 +225,10 @@ <event>Selection</event> <name>СписокКолонокВыбор</name> </handlers> + <handlers> + <event>OnStartEdit</event> + <name>СписокКолонокПриНачалеРедактирования</name> + </handlers> <searchStringAddition> <name>СписокКолонокSearchString</name> <id>19</id> @@ -312,12 +315,9 @@ <id>2</id> <autoFill>true</autoFill> </contextMenu> - <changeRowSet>true</changeRowSet> - <changeRowOrder>true</changeRowOrder> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> <autoMaxRowsCount>true</autoMaxRowsCount> - <selectionMode>MultiRow</selectionMode> <headerHeight>1</headerHeight> <footerHeight>1</footerHeight> <horizontalScrollBar>AutoUse</horizontalScrollBar> @@ -327,7 +327,6 @@ <horizontalLinesBWA>false</horizontalLinesBWA> <verticalLinesBWA>false</verticalLinesBWA> <useAlternationRowColorBWA>false</useAlternationRowColorBWA> - <autoInsertNewRow>true</autoInsertNewRow> <searchOnInput>Auto</searchOnInput> <initialListView>Auto</initialListView> <horizontalStretch>true</horizontalStretch> @@ -386,7 +385,10 @@ <common>true</common> </edit> <extInfo xsi:type="form:ValueListExtInfo"> - <itemValueType/> + <itemValueType> + <types>String</types> + <stringQualifiers/> + </itemValueType> </extInfo> </attributes> <formCommands> diff --git a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/ВыборКолонок/Module.bsl b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/ВыборКолонок/Module.bsl index 3a6077f93..9f68e0bf5 100644 --- a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/ВыборКолонок/Module.bsl +++ b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/ВыборКолонок/Module.bsl @@ -29,4 +29,23 @@ СписокКолонок.НайтиПоИдентификатору(ВыбраннаяСтрока).Пометка = НЕ СписокКолонок.НайтиПоИдентификатору(ВыбраннаяСтрока).Пометка; КонецПроцедуры +&НаКлиенте +Процедура СписокКолонокПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование) + Строка = СписокКолонок.НайтиПоИдентификатору(Элементы.СписокКолонок.ТекущаяСтрока); + Если СтрНачинаетсяС(Строка.Значение, "КонтактнаяИнформация_") Тогда + Для Каждого ИнформацияОКолонке Из СписокКолонок Цикл + Если СтрНачинаетсяС(ИнформацияОКолонке.Значение, "ДополнительныйРеквизит_") Тогда + ИнформацияОКолонке.Пометка = Ложь; + КонецЕсли; + КонецЦикла; + ИначеЕсли СтрНачинаетсяС(Строка.Значение, "ДополнительныйРеквизит_") Тогда + Для Каждого ИнформацияОКолонке Из СписокКолонок Цикл + Если СтрНачинаетсяС(ИнформацияОКолонке.Значение, "КонтактнаяИнформация_") Тогда + ИнформацияОКолонке.Пометка = Ложь; + КонецЕсли; + КонецЦикла; + КонецЕсли; + +КонецПроцедуры + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/ЗагрузкаДанныхИзФайла/Attributes/ТаблицаОтчет/ExtInfo/SpreadsheetData.mxlx b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/ЗагрузкаДанныхИзФайла/Attributes/ТаблицаОтчет/ExtInfo/SpreadsheetData.mxlx new file mode 100644 index 000000000..70a095c0a --- /dev/null +++ b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/ЗагрузкаДанныхИзФайла/Attributes/ТаблицаОтчет/ExtInfo/SpreadsheetData.mxlx @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="UTF-8"?> +<document xmlns="http://v8.1c.ru/8.2/data/spreadsheet" xmlns:pal="http://v8.1c.ru/8.1/data/ui/colors/palette" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <columns> + <size>0</size> + </columns> + <vgRows>0</vgRows> +</document> \ No newline at end of file diff --git a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/ЗагрузкаДанныхИзФайла/Attributes/ШаблонСДанными/ExtInfo/SpreadsheetData.mxlx b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/ЗагрузкаДанныхИзФайла/Attributes/ШаблонСДанными/ExtInfo/SpreadsheetData.mxlx new file mode 100644 index 000000000..70a095c0a --- /dev/null +++ b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/ЗагрузкаДанныхИзФайла/Attributes/ШаблонСДанными/ExtInfo/SpreadsheetData.mxlx @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="UTF-8"?> +<document xmlns="http://v8.1c.ru/8.2/data/spreadsheet" xmlns:pal="http://v8.1c.ru/8.1/data/ui/colors/palette" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <columns> + <size>0</size> + </columns> + <vgRows>0</vgRows> +</document> \ No newline at end of file diff --git a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/ЗагрузкаДанныхИзФайла/Module.bsl b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/ЗагрузкаДанныхИзФайла/Module.bsl index d328f0274..c4660189a 100644 --- a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/ЗагрузкаДанныхИзФайла/Module.bsl +++ b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/ЗагрузкаДанныхИзФайла/Module.bsl @@ -20,13 +20,10 @@ ТипЗагрузки = "ТабличнаяЧасть"; ИначеЕсли НЕ Пользователи.ЭтоПолноправныйПользователь() Тогда ВызватьИсключение(НСтр("ru = 'Недостаточно прав для открытия загрузки данных из файла'")); - Отказ = Истина; - Возврат; КонецЕсли; СоздаватьЕслиНеСопоставлено = 1; ОбновлятьСуществующие = 0; - ПодтверждениеЗакрытияФормы = Неопределено; ДополнительныеПараметры = Параметры.ДополнительныеПараметры; УстановитьОформлениеДанных(); @@ -164,17 +161,25 @@ &НаКлиенте Процедура СписокКолонокСопоставленияНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; Если СопоставитьПоКолонке.Количество() = 0 Тогда - Для каждого строка Из ИнформацияПоКолонкам Цикл - ПредставлениеКолонки = ?(ПустаяСтрока(Строка.Синоним), Строка.ПредставлениеКолонки, Строка.Синоним); - СопоставитьПоКолонке.Добавить(строка.ИмяКолонки, ПредставлениеКолонки); + Для каждого СведенияОКолонке Из ИнформацияПоКолонкам Цикл + Если (ТипЗнч(СведенияОКолонке.ТипКолонки) = Тип("Строка") + И СведенияОКолонке.ТипКолонки.КвалификаторыСтроки.Длина = 0) + ИЛИ СтрНачинаетсяС(СведенияОКолонке.ИмяКолонки, "Свойство_") Тогда + Продолжить; + КонецЕсли; + ПредставлениеКолонки = ?(ПустаяСтрока(СведенияОКолонке.Синоним), СведенияОКолонке.ПредставлениеКолонки, СведенияОКолонке.Синоним); + СопоставитьПоКолонке.Добавить(СведенияОКолонке.ИмяКолонки, ПредставлениеКолонки); КонецЦикла; КонецЕсли; - ПараметрыФормы = Новый Структура("СписокКолонок", СопоставитьПоКолонке); + + ПараметрыФормы = Новый Структура("СписокКолонок", СопоставитьПоКолонке); ОписаниеОповещения = Новый ОписаниеОповещения("ПослеВыбораКолонокДляСопоставления", ЭтотОбъект); ОткрытьФорму("Обработка.ЗагрузкаДанныхИзФайла.Форма.ВыборКолонок", ПараметрыФормы, ЭтотОбъект, , , , ОписаниеОповещения, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + КонецПроцедуры &НаКлиенте @@ -530,7 +535,6 @@ Иначе Оповещение = Новый ОписаниеОповещения("ПослеВыбораРасширенияФайла", ЭтотОбъект); ОткрытьФорму("Обработка.ЗагрузкаДанныхИзФайла.Форма.РасширениеФайла",, ЭтотОбъект, Истина,,, Оповещение, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); - ПутьКФайлу = ""; КонецЕсли; КонецПроцедуры @@ -573,7 +577,6 @@ Элементы.ВариантЗагрузки.Видимость = Ложь; Элементы.ПояснениеДляВыбораСправочникаДляЗагрузки.Заголовок = НСтр("ru = 'Выбор справочника для загрузки данных из электронных таблиц, расположенных во внешних файлах | (например: Microsoft Office Excel, OpenOffice Calc и др.).'"); - ВидЗагрузкиДанных = 1; КонецЕсли; Если ТипЗагрузки = "ВставкаИзБуфераОбмена" Тогда @@ -914,7 +917,6 @@ СтрЗаменить(Элементы.ОткрытьСправочникПослеЗакрытияПомощника.Заголовок, "%1", ИмяОбъекта); Элементы.ПояснениеОтчетаОЗагрузке.Заголовок = СтрЗаменить(Элементы.ПояснениеОтчетаОЗагрузке.Заголовок, "%1", ИмяОбъекта); - ТипОтчета = "ВсеЭлементы"; Если ТипЗагрузки <> "УниверсальнаяЗагрузка" Тогда ЗаписатьЗагружаемыеДанныеОтчет(); @@ -1283,7 +1285,6 @@ Возврат Истина; КонецФункции - &НаСервере Процедура УстановитьОформлениеДанных(СписокКолонок = Неопределено) @@ -1373,34 +1374,78 @@ КонецФункции &НаСервере -Функция УсловияПоВыбраннымКолонкам() +Функция УсловияПоВыбраннымКолонкам(ИмяСправочника) - Разделитель = ""; - РазделительИ = ""; - ТипСравнения = " = "; - сГде = ""; + РазделительИ = ""; + ТипСравнения = " = "; + сГде = ""; СтрокаУсловие = ""; + ТабличнаяЧасть = ""; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда + МодульУправлениеКонтактнойИнформацией = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформацией"); + ВидыКонтактнойИнформации = МодульУправлениеКонтактнойИнформацией.ВидыКонтактнойИнформацияОбъекта(Справочники[ИмяСправочника].ПустаяСсылка()); + КонецЕсли; Для каждого Элемент Из СопоставитьПоКолонке Цикл Если Элемент.Пометка Тогда Колонка = ИнформацияОКолонке(Элемент.Значение); - // Создаем запрос в зависимости от типов. + Если Колонка <> Неопределено Тогда + // Создаем запрос в зависимости от типов данных. + + Если СтрНачинаетсяС(Колонка.ИмяКолонки, "КонтактнаяИнформация_") Тогда + + ИмяВидаКИ = СтандартныеПодсистемыСервер.ПреобразоватьАдаптированноеНаименованиеКолонкиВСтроку(Сред(Колонка.ИмяКолонки, 22)); + НайденныеВиды = ВидыКонтактнойИнформации.Найти(ИмяВидаКИ, "Наименование"); + + ТабличнаяЧасть = "КонтактнаяИнформация"; + СтрокаУсловие = СтрокаУсловие + РазделительИ + "ВЫРАЗИТЬ(СправочникСопоставления.Представление + | КАК Строка(500)) = ВЫРАЗИТЬ(ТаблицаСопоставления." + Колонка.ИмяКолонки + " КАК Строка(500)) "; + Если НайденныеВиды <> Неопределено Тогда + СтрокаУсловие = СтрокаУсловие + " И СправочникСопоставления.Вид.Наименование = """ + НайденныеВиды.Ссылка.Наименование + """"; + КонецЕсли; + сГДЕ = сГДЕ + " И СправочникСопоставления.Представление <> """""; + РазделительИ = " И "; + Продолжить; + + ИначеЕсли СтрНачинаетсяС(Колонка.ИмяКолонки, "ДополнительныйРеквизит_") Тогда + ИмяКолонкиСправочника = "Значение"; + ТабличнаяЧасть = "ДополнительныеРеквизиты"; + СтрокаУсловие = СтрокаУсловие + РазделительИ + " СправочникСопоставления.Значение = ТаблицаСопоставления." + Колонка.ИмяКолонки; + + ТипКолонки = Колонка.ТипКолонки.Типы()[0]; + Если ТипЗнч(ТипКолонки) = Тип("Строка") И Колонка.ТипКолонки.КвалификаторыСтроки.Длина = 0 Тогда + Продолжить; // Нельзя сравнивать строки неограниченной длины. + КонецЕсли; + + ОбъектаТипаКолонки = Метаданные.НайтиПоТипу(ТипКолонки); + Если ОбъектаТипаКолонки <> Неопределено Тогда + сГДЕ = сГДЕ + " И СправочникСопоставления.Значение <> ЗНАЧЕНИЕ(" + ОбъектаТипаКолонки.ПолноеИмя() + ".ПустаяСсылка)"; + КонецЕсли; + РазделительИ = " И "; + Продолжить; + КонецЕсли; + + ИмяКолонкиСправочника = "Ссылка." + Колонка.ИмяКолонки; + ТипКолонки = Колонка.ТипКолонки.Типы()[0]; Если ТипКолонки = Тип("Строка") Тогда Если Колонка.ТипКолонки.КвалификаторыСтроки.Длина = 0 Тогда - СтрокаУсловие = СтрокаУсловие + РазделительИ + "ВЫРАЗИТЬ(СправочникСопоставления." + Колонка.ИмяКолонки + " КАК Строка(500)) = ВЫРАЗИТЬ(ТаблицаСопоставления." + Колонка.ИмяКолонки + " КАК Строка(500))"; - сГДЕ = сГДЕ + " И СправочникСопоставления." + Колонка.ИмяКолонки + " <> """""; + СтрокаУсловие = СтрокаУсловие + РазделительИ + "ВЫРАЗИТЬ(СправочникСопоставления." + ИмяКолонкиСправочника + + " КАК Строка(500)) = ВЫРАЗИТЬ(ТаблицаСопоставления." + Колонка.ИмяКолонки + " КАК Строка(500))"; + сГДЕ = сГДЕ + " И СправочникСопоставления." + ИмяКолонкиСправочника + " <> """""; Иначе - СтрокаУсловие = СтрокаУсловие + РазделительИ + "СправочникСопоставления." + Колонка.ИмяКолонки + " = ТаблицаСопоставления." + Колонка.ИмяКолонки; - сГДЕ = сГДЕ + " И СправочникСопоставления." + Колонка.ИмяКолонки + " <> """""; + СтрокаУсловие = СтрокаУсловие + РазделительИ + "СправочникСопоставления." + ИмяКолонкиСправочника + + " = ТаблицаСопоставления." + Колонка.ИмяКолонки; + сГДЕ = сГДЕ + " И СправочникСопоставления." + ИмяКолонкиСправочника + " <> """""; КонецЕсли; ИначеЕсли ТипКолонки = Тип("Число") Тогда - СтрокаУсловие = СтрокаУсловие + РазделительИ + "СправочникСопоставления." + Колонка.ИмяКолонки + " = ТаблицаСопоставления." + Колонка.ИмяКолонки; + СтрокаУсловие = СтрокаУсловие + РазделительИ + "СправочникСопоставления." + ИмяКолонкиСправочника + " = ТаблицаСопоставления." + Колонка.ИмяКолонки; ИначеЕсли ТипКолонки = Тип("Дата") Тогда - СтрокаУсловие = СтрокаУсловие + РазделительИ + "СправочникСопоставления." + Колонка.ИмяКолонки + " = ТаблицаСопоставления." + Колонка.ИмяКолонки; + СтрокаУсловие = СтрокаУсловие + РазделительИ + "СправочникСопоставления." + ИмяКолонкиСправочника + " = ТаблицаСопоставления." + Колонка.ИмяКолонки; ИначеЕсли ТипКолонки = Тип("Булево") Тогда - СтрокаУсловие = СтрокаУсловие + РазделительИ + "СправочникСопоставления." + Колонка.ИмяКолонки + " = ТаблицаСопоставления." + Колонка.ИмяКолонки; + СтрокаУсловие = СтрокаУсловие + РазделительИ + "СправочникСопоставления." + ИмяКолонкиСправочника + " = ТаблицаСопоставления." + Колонка.ИмяКолонки; Иначе ИнфоОбъект = ИнформацияОбОбъектеМетаданныхПоТипу(ТипКолонки); Если ИнфоОбъект.ТипОбъекта = "Справочник" Тогда @@ -1409,53 +1454,58 @@ РазделительИЛИ = ""; Для каждого СтрокаВвода Из Справочник.ВводПоСтроке Цикл Если СтрокаВвода.Имя = "Код" И НЕ Справочник.Автонумерация Тогда - ТекстУсловияВВодаПоСтроке = "СправочникСопоставления." + Колонка.ИмяКолонки+ ".Код " + ТипСравнения + " ТаблицаСопоставления." + Колонка.ИмяКолонки; + ТекстУсловияВВодаПоСтроке = "СправочникСопоставления." + ИмяКолонкиСправочника + ".Код " + ТипСравнения + " ТаблицаСопоставления." + Колонка.ИмяКолонки; Иначе - ТекстУсловияВВодаПоСтроке = "СправочникСопоставления." + Колонка.ИмяКолонки+ "." + СтрокаВвода.Имя + ТипСравнения + " ТаблицаСопоставления." + Колонка.ИмяКолонки; - КонецЕсли; + ТекстУсловияВВодаПоСтроке = "СправочникСопоставления." + ИмяКолонкиСправочника + "." + СтрокаВвода.Имя + ТипСравнения + " ТаблицаСопоставления." + Колонка.ИмяКолонки; + КонецЕсли; ТекстУсловияСправочник = ТекстУсловияСправочник + РазделительИЛИ + ТекстУсловияВВодаПоСтроке; РазделительИЛИ = " ИЛИ "; КонецЦикла; СтрокаУсловие = СтрокаУсловие + РазделительИ + " ( "+ ТекстУсловияСправочник + " )"; - ИначеЕсли ИнфоОбъект.ТипОбъекта = "Перечисление" Тогда - СтрокаУсловие = СтрокаУсловие + РазделительИ + "СправочникСопоставления." + Колонка.ИмяКолонки + " = ТаблицаСопоставления." + Колонка.ИмяКолонки; + ИначеЕсли ИнфоОбъект.ТипОбъекта = "Перечисление" Тогда + СтрокаУсловие = СтрокаУсловие + РазделительИ + "СправочникСопоставления." + ИмяКолонкиСправочника + " = ТаблицаСопоставления." + Колонка.ИмяКолонки; КонецЕсли; КонецЕсли; КонецЕсли; РазделительИ = " И "; - Разделитель = ","; КонецЕсли; КонецЦикла; - Условия = Новый Структура("УсловиеОбъединения , Где"); + Условия = Новый Структура("УсловиеОбъединения , Где, ТабличнаяЧасть"); Условия.УсловиеОбъединения = СтрокаУсловие; Условия.Где = сГДЕ; + Условия.ТабличнаяЧасть = ТабличнаяЧасть; Возврат Условия; + КонецФункции &НаСервере Процедура ВыполнитьСопоставлениеПоВыбранномуРеквизиту(КоличествоСопоставленных = 0, СписокКолонокСопоставления = "") - Условия = УсловияПоВыбраннымКолонкам(); + СтруктураОбъекта = Обработки.ЗагрузкаДанныхИзФайла.РазложитьПолноеИмяОбъекта(ИмяОбъектаСопоставления); + ИмяСправочника = СтруктураОбъекта.НазваниеОбъекта; + Условия = УсловияПоВыбраннымКолонкам(ИмяСправочника); Если Не ЗначениеЗаполнено(Условия.УсловиеОбъединения) Тогда Возврат; КонецЕсли; - СтруктураОбъекта = Обработки.ЗагрузкаДанныхИзФайла.РазложитьПолноеИмяОбъекта(ИмяОбъектаСопоставления); - ИмяСправочника = СтруктураОбъекта.НазваниеОбъекта; + Если ЗначениеЗаполнено(Условия.ТабличнаяЧасть) Тогда + ИмяСправочника = ИмяСправочника + "." + Условия.ТабличнаяЧасть; + КонецЕсли; + ТаблицаСопоставления = РеквизитФормыВЗначение("ТаблицаСопоставленияДанных"); СписокКолонок = ""; - Разделитель = ""; + Разделитель = ""; Для каждого Колонка Из ТаблицаСопоставления.Колонки Цикл Если Колонка.Имя <> "СписокНеоднозначностей" И Колонка.Имя <> "РезультатСопоставленияСтроки" И Колонка.Имя <> "ОписаниеОшибки" Тогда СписокКолонок = СписокКолонок + Разделитель + Колонка.Имя; - Разделитель = ", "; + Разделитель = ", "; КонецЕсли; КонецЦикла; @@ -1467,11 +1517,11 @@ |ВЫБРАТЬ | СправочникСопоставления.Ссылка, ТаблицаСопоставления.Идентификатор |ИЗ - | Справочник." + ИмяСправочника + " КАК СправочникСопоставления - | ПРАВОЕ СОЕДИНЕНИЕ ТаблицаСопоставления КАК ТаблицаСопоставления - | ПО " + Условия.УсловиеОбъединения + " + | ТаблицаСопоставления КАК ТаблицаСопоставления + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник." + ИмяСправочника + " КАК СправочникСопоставления + | ПО " + Условия.УсловиеОбъединения + " |ГДЕ - | СправочникСопоставления.ПометкаУдаления = ЛОЖЬ " + Условия.Где + " + | СправочникСопоставления.Ссылка.ПометкаУдаления = ЛОЖЬ " + Условия.Где + " | УПОРЯДОЧИТЬ ПО ТаблицаСопоставления.Идентификатор ИТОГИ ПО ТаблицаСопоставления.Идентификатор"; Запрос.УстановитьПараметр("ТаблицаСопоставления", ТаблицаСопоставления); @@ -1479,8 +1529,6 @@ РезультатЗапроса = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); - ПустоеЗначение = МенеджерОбъекта(ИмяОбъектаСопоставления).ПустаяСсылка(); - Пока ВыборкаДетальныеЗаписи.Следующий() Цикл Строка = ТаблицаСопоставления.Найти(ВыборкаДетальныеЗаписи.Идентификатор, "Идентификатор"); @@ -1674,7 +1722,6 @@ НазванияКолонокБезДанных = Новый Массив; Отбор = Новый Структура("ОбязательнаДляЗаполнения", Истина); - ОбязательныеКолонки = ИнформацияПоКолонкам.НайтиСтроки(Отбор); Шапка = ОбластьЗаголовкаШаблонаТаблицы(ШаблонСДанными); Для НомерКолонки = 1 По Шапка.ШиринаТаблицы Цикл @@ -1979,9 +2026,6 @@ ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ИмяОбъектаСопоставления); ОписаниеТипаОбъектаСопоставления = ОписаниеТипаПоМетаданным(ИмяОбъектаСопоставления); - ТипСтрока = Новый ОписаниеТипов("Строка"); - ТипЧисло = Новый ОписаниеТипов("Число"); - ТипСЗ = Новый ОписаниеТипов("СписокЗначений"); ВременнаяТЗ = РеквизитФормыВЗначение("ТаблицаСопоставленияДанных"); ВременнаяТЗ.Колонки.Очистить(); @@ -2043,7 +2087,6 @@ МассивРеквизитов = Новый Массив; ТипСтрока = Новый ОписаниеТипов("Строка"); - ТипЧисло = Новый ОписаниеТипов("Число"); ВременнаяТЗ = РеквизитФормыВЗначение("ТаблицаСопоставленияДанных"); ВременнаяТЗ.Колонки.Очистить(); diff --git a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/РазрешенияНеоднозначностей/Module.bsl b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/РазрешенияНеоднозначностей/Module.bsl index 8d4985454..fe62086a1 100644 --- a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/РазрешенияНеоднозначностей/Module.bsl +++ b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/РазрешенияНеоднозначностей/Module.bsl @@ -110,11 +110,10 @@ Строка = ЭлементыСправочника.Добавить(); Строка.Представление = Строка(Элемент); Для Каждого Колонка Из ВременнаяТЗ.Колонки Цикл - Попытка - Строка[Колонка.Имя] = Элемент[Колонка.Имя]; - Исключение - // Возможно падение при некорректном приведение типа. - КонецПопытки; + Типы = Новый Массив; + Типы.Добавить(ТипЗнч(Строка[Колонка.Имя])); + ОписаниеТипа = Новый ОписаниеТипов(Типы); + Строка[Колонка.Имя] = ОписаниеТипа.ПривестиЗначение(Элемент[Колонка.Имя]); КонецЦикла; КонецЦикла; diff --git a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/ManagerModule.bsl b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/ManagerModule.bsl index cbe5ed8c6..d489a3a05 100644 --- a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/ManagerModule.bsl +++ b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/ManagerModule.bsl @@ -265,7 +265,6 @@ Строка.ОбъектСопоставления = МассивСсылок[0]; Строка.РезультатСопоставленияСтроки = "СтрокаСопоставлена"; ИначеЕсли МассивСсылок.Количество() > 1 Тогда - СписокНеоднозначностей = Новый СписокЗначений; Строка.СписокНеоднозначностей.ЗагрузитьЗначения(МассивСсылок); Строка.РезультатСопоставленияСтроки = "Неоднозначность"; Иначе @@ -549,10 +548,8 @@ // Процедура ИнформациюПоКолонкамИзРеквизитовСправочника(ПараметрыЗагрузки, ИнформацияПоКолонкам) - ТекстПримечания = ""; ИнформацияПоКолонкам.Очистить(); Позиция = 1; - ОписаниеТиповСтрока = Новый ОписаниеТипов("Строка"); МетаданныеСправочника= Метаданные.НайтиПоПолномуИмени(ПараметрыЗагрузки.ПолноеИмяОбъекта); @@ -706,7 +703,7 @@ ИнформациюПоКолонкамИзРеквизитовСправочника(ПараметрыЗагрузки, ИнформацияПоКолонкамНаОснованиеРеквизитов); КонецЕсли; - ИначеЕсли ПараметрыЗагрузки.ТипЗагрузки = "ВнешняяЗагрузка" И ИнформацияПоКолонкам.Количество() = 0 Тогда + ИначеЕсли ПараметрыЗагрузки.ТипЗагрузки = "ВнешняяЗагрузка" Тогда ОбластьЗаголовокТаблицы = ОбластьЗаголовкаШаблонаТаблицы(ПараметрыЗагрузки.Макет); ОбластьЗаголовокТаблицы.Защита = Истина; @@ -763,17 +760,29 @@ Процедура ОпределитьИнформацияПоКолонкамТабличнаяЧасть(Знач ИнформацияПоКолонкам, Макет, ОбластьЗаголовокТаблицы, Знач ПараметрыЗагрузки) СтруктураНаименованияОбъекта = РазложитьПолноеИмяОбъекта(ПараметрыЗагрузки.ПолноеИмяОбъекта); + ИмяОбъектаМетаданных = СтруктураНаименованияОбъекта.ТипОбъекта + "." + СтруктураНаименованияОбъекта.НазваниеОбъекта; + + ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ИмяОбъектаМетаданных); + Если ОбъектМетаданных = Неопределено Тогда + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='Загрузка данных из файла в табличную часть не поддерживается для объектов типа: %1'"), + ИмяОбъектаМетаданных); + ВызватьИсключение ТекстОшибки; + КонецЕсли; + + МакетыОбъектаМетаданных = ОбъектМетаданных.Макеты; + ПараметрыЗагрузкиИзФайла = ПараметрыЗагрузкиИзФайлаВТЧ(ПараметрыЗагрузки.ПолноеИмяОбъекта, ПараметрыЗагрузки.ДополнительныеПараметры); ПараметрыЗагрузкиИзФайла.Вставить("ПолноеИмяОбъекта", ПараметрыЗагрузки.ПолноеИмяОбъекта); - МенеджерОбъекта = Документы[СтруктураНаименованияОбъекта.НазваниеОбъекта]; + МенеджерОбъекта = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПараметрыЗагрузки.ПолноеИмяОбъекта); МенеджерОбъекта.УстановитьПараметрыЗагрузкиИзФайлаВТЧ(ПараметрыЗагрузкиИзФайла); - МакетМетаданные = Метаданные.Документы[СтруктураНаименованияОбъекта.НазваниеОбъекта].Макеты.Найти(ПараметрыЗагрузки.Макет); - Если МакетМетаданные = Неопределено Тогда - МакетМетаданные= Метаданные.Документы[СтруктураНаименованияОбъекта.НазваниеОбъекта].Макеты.Найти("ЗагрузкаИзФайла" + СтруктураНаименованияОбъекта.ИмяТабличнойЧасти); - Если МакетМетаданные = Неопределено Тогда - МакетМетаданные = Метаданные.Документы[СтруктураНаименованияОбъекта.НазваниеОбъекта].Макеты.Найти("ЗагрузкаИзФайла"); + МакетМетаданные = МакетыОбъектаМетаданных.Найти(ПараметрыЗагрузки.Макет); + Если МакетМетаданные = Неопределено Тогда + МакетМетаданные= МакетыОбъектаМетаданных.Найти("ЗагрузкаИзФайла" + СтруктураНаименованияОбъекта.ИмяТабличнойЧасти); + Если МакетМетаданные = Неопределено Тогда + МакетМетаданные = МакетыОбъектаМетаданных.Найти("ЗагрузкаИзФайла"); КонецЕсли; КонецЕсли; @@ -781,7 +790,6 @@ Макет = МенеджерОбъекта.ПолучитьМакет(МакетМетаданные.Имя); Иначе ВызватьИсключение НСтр("ru = 'Не найден макет для загрузки данных из файла'"); - Возврат; КонецЕсли; ЗаголовокТаблицы = ОбластьЗаголовкаШаблонаТаблицы(Макет); @@ -796,7 +804,7 @@ // Заполняет таблицу о колонках в макете. Информация используется для построения таблицы сопоставления. // // Параметры: -// ОбластьЗаголовокТаблицы - ТекстовыйДокумент - Область заголовка макета. +// ОбластьЗаголовокТаблицы - ТабличныйДокумент - Область заголовка макета. // ПараметрыЗагрузкиИзФайла - Структура - Параметры загрузки. // ИнформацияПоКолонкам - ТаблицаЗначений - Таблица с описание колонок. // ИменаДобавляемыхКолонок - Строка - список добавляемых колонок через запятую. Если значение не заполонено, то @@ -837,8 +845,6 @@ ИспользуетсяГруппировка = Ложь; КонецЕсли; - СписокКолонокСФункциональнымиОпциями = КолонкиЗависимыеОтФункциональныхОпций(ПараметрыЗагрузкиИзФайла.ПолноеИмяОбъекта); - Для НомерКолонки = 1 По ОбластьЗаголовокТаблицы.ШиринаТаблицы Цикл Ячейка = ОбластьЗаголовокТаблицы.ПолучитьОбласть(ВысотаШапки, НомерКолонки, ВысотаШапки, НомерКолонки).ТекущаяОбласть; @@ -1182,7 +1188,6 @@ Возврат Неопределено; КонецЕсли; НазваниеОбъектаМетаданных = Результат[0]; - ИмяТабличнойЧасти = Результат[1]; ТипОбъектаМетаданных = Метаданные.Справочники.Найти(НазваниеОбъектаМетаданных); Если ТипОбъектаМетаданных <> Неопределено Тогда ТипОбъектаМетаданных = "Справочник"; @@ -1275,7 +1280,7 @@ /////////////// Загрузка данных ////////////////////////// -Функция ИнициализироватьКолонки(ИнформацияПоКолонкам, ШаблонСДанными, ВысотаШапки = 1) +Процедура ИнициализироватьКолонки(ИнформацияПоКолонкам, ШаблонСДанными, ВысотаШапки = 1) Для каждого Строка Из ИнформацияПоКолонкам Цикл Строка.Позиция = -1; @@ -1299,7 +1304,7 @@ КонецЕсли; КонецЦикла; -КонецФункции +КонецПроцедуры Процедура ЗагрузитьФайлВТаблицу(ПараметрыВызоваСервера, АдресХранилища) Экспорт @@ -1361,7 +1366,7 @@ Строка = ЧтениеТекста.ПрочитатьСтроку(); Если Строка = Неопределено Тогда ТекстСообщения = НСтр("ru = 'Не получилось загрузить данные из этого файла. Убедитесь в корректности данных в файле.'"); - Возврат; + ВызватьИсключение ТекстСообщения; КонецЕсли; КолонкиШапки = СтрРазделить(Строка, ";", Ложь); @@ -1448,8 +1453,6 @@ СоздаватьЕслиНеСопоставлено = ПараметрыЗагрузки.СоздаватьЕслиНеСопоставлено; ОбновлятьСуществующие = ПараметрыЗагрузки.ОбновлятьСуществующие; - ТипСтрока = Новый ОписаниеТипов("Строка"); - ИмяСправочника = РазложитьПолноеИмяОбъекта(ИмяОбъектаСопоставления).НазваниеОбъекта; МенеджерСправочника = Справочники[ИмяСправочника]; @@ -1464,7 +1467,7 @@ ПустаяСсылкаНаОбъект = Справочники[ИмяСправочника].ПустаяСсылка(); Если МодульУправлениеСвойствами.ИспользоватьДопРеквизиты(ПустаяСсылкаНаОбъект) ИЛИ МодульУправлениеСвойствами.ИспользоватьДопСведения(ПустаяСсылкаНаОбъект) Тогда - СписокСвойств = МодульУправлениеСвойствами.ПолучитьСписокСвойств(ПустаяСсылкаНаОбъект); + СписокСвойств = МодульУправлениеСвойствами.СвойстваОбъекта(ПустаяСсылкаНаОбъект); Для каждого Свойство Из СписокСвойств Цикл Свойства.Вставить(Свойство.Наименование, Свойство); КонецЦикла; @@ -1597,8 +1600,6 @@ СформироватьМакетОтчета(ТаблицаОтчет, ШаблонСДанными); - ОбластьЗаголовка = ОбластьЗаголовкаШаблонаТаблицы(ТаблицаОтчет); - КоличествоСозданных = 0; КоличествоОбновленных = 0; КоличествоПропущенных = 0; @@ -1690,67 +1691,32 @@ //////////////////// Функциональные опции /////////////////////////////////////// -// Возвращает колонки зависимые от функциональных опций. +// Возвращает колонки-реквизиты зависимые от функциональных опций. // // Параметры: // ПолноеИмяОбъекта - Строка - Полное наименование объекта. // Возвращаемое значение: -// - Соответствие - +// - Соответствие +// * Ключ - Строка - Имя колонки. +// * Значение - Булево - Признак доступности. Функция КолонкиЗависимыеОтФункциональныхОпций(ПолноеИмяОбъекта) - ФункциональныеОпцииКолонок = ДоступностьОбъектовПоОпциям(ПолноеИмяОбъекта); - СписокРеквизитов = Метаданные.НайтиПоПолномуИмени(ПолноеИмяОбъекта).Реквизиты; - ИнформацияОФункциональныхОпциях = Новый Соответствие; + ИмяОбъектаССуффиксомРеквизит = ПолноеИмяОбъекта + ".Реквизит."; - Для каждого Реквизит Из СписокРеквизитов Цикл - СтатусФункциональнойОпции = ФункциональныеОпцииКолонок.Получить(Реквизит); - Если СтатусФункциональнойОпции <> Неопределено Тогда - ИнформацияОФункциональныхОпциях.Вставить(Реквизит.Имя, СтатусФункциональнойОпции); + ФункциональныеОпции = ОбщегоНазначенияПовтИсп.ДоступностьОбъектовПоОпциям(); + Для Каждого ФункциональнаяОпция Из ФункциональныеОпции Цикл + + Если СтрНачинаетсяС(ФункциональнаяОпция.Ключ, ИмяОбъектаССуффиксомРеквизит) Тогда + ИнформацияОФункциональныхОпциях.Вставить(Сред(ФункциональнаяОпция.Ключ, СтрДлина(ИмяОбъектаССуффиксомРеквизит) + 1), ФункциональнаяОпция.Значение); КонецЕсли; + КонецЦикла; Возврат ИнформацияОФункциональныхОпциях; КонецФункции -// Доступность объектов метаданных по функциональным опциям. -// -Функция ДоступностьОбъектовПоОпциям(ИмяОбъекта) - - ОпцииИнтерфейса = Новый Структура; - Попытка - ОбщегоНазначенияПереопределяемый.ПриОпределенииПараметровФункциональныхОпцийИнтерфейса(ОпцииИнтерфейса); - Исключение - ИнформацияОбОшибке = ИнформацияОбОшибке(); - ИмяСобытия = НСтр("ru = 'Настройка интерфейса'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'При получении опций интерфейса произошла ошибка: - |%1'"), - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); - ЗаписьЖурналаРегистрации(ИмяСобытия, УровеньЖурналаРегистрации.Ошибка,,, ТекстОшибки); - КонецПопытки; - - ДоступностьОбъектов = Новый Соответствие; - Для Каждого ФункциональнаяОпция Из Метаданные.ФункциональныеОпции Цикл - Для Каждого Элемент Из ФункциональнаяОпция.Состав Цикл - Если Элемент.Объект <> Неопределено Тогда - Если СтрНайти(Элемент.Объект.ПолноеИмя(), ИмяОбъекта) > 0 Тогда - Значение = ПолучитьФункциональнуюОпцию(ФункциональнаяОпция.Имя, ОпцииИнтерфейса); - Если Значение = Истина Тогда - ДоступностьОбъектов.Вставить(Элемент.Объект, Истина); - Иначе - Если ДоступностьОбъектов[Элемент.Объект] = Неопределено Тогда - ДоступностьОбъектов.Вставить(Элемент.Объект, Ложь); - КонецЕсли; - КонецЕсли; - КонецЕсли; - КонецЕсли; - - КонецЦикла; - КонецЦикла; - Возврат ДоступностьОбъектов; -КонецФункции - //////////////////// Служебные методы /////////////////////////////////////////// Процедура ДобавитьЗначениеСвойства(ТаблицаСвойств, Свойства, Префикс, ИмяКолонки, Значение) diff --git a/SSL/src/DataProcessors/ЗагрузкаКлассификатораБанков/Forms/ЗагрузкаКлассификатора/Module.bsl b/SSL/src/DataProcessors/ЗагрузкаКлассификатораБанков/Forms/ЗагрузкаКлассификатора/Module.bsl index bdc1212ff..8f06a90fb 100644 --- a/SSL/src/DataProcessors/ЗагрузкаКлассификатораБанков/Forms/ЗагрузкаКлассификатора/Module.bsl +++ b/SSL/src/DataProcessors/ЗагрузкаКлассификатораБанков/Forms/ЗагрузкаКлассификатора/Module.bsl @@ -86,22 +86,24 @@ Процедура Далее(Команда) Если Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.СтраницаРезультат Тогда Закрыть(); - Иначе - ОчиститьСообщения(); - Если ВариантЗагрузки = "ИТС" Тогда - Если НЕ ЗначениеЗаполнено(ПутьКДискуИТС) И Не ОбщегоНазначенияКлиентСервер.ЭтоWindowsКлиент() Тогда - // Не в Windows перебор букв дисков невозможен. - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - НСтр("ru = 'При работе не в ОС Windows необходимо явно указать путь к диску'"), - , - "ПутьКДискуИТС"); - Возврат; - КонецЕсли; - Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.ВыполняетсяЗагрузка; - УстановитьИзмененияВИнтерфейсе(); - КонецЕсли; - ПодключитьОбработчикОжидания("НачатьЗагрузкуКлассификатора", 0.1, Истина); + Возврат; КонецЕсли; + + ОчиститьСообщения(); + Если ВариантЗагрузки = "ИТС" Тогда + Если НЕ ЗначениеЗаполнено(ПутьКДискуИТС) И Не ОбщегоНазначенияКлиентСервер.ЭтоWindowsКлиент() Тогда + // Не в Windows перебор букв дисков невозможен. + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + НСтр("ru = 'При работе не в ОС Windows необходимо явно указать путь к диску'"), + , + "ПутьКДискуИТС"); + Возврат; + КонецЕсли; + Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.ВыполняетсяЗагрузка; + УстановитьИзмененияВИнтерфейсе(); + КонецЕсли; + ПодключитьОбработчикОжидания("НачатьЗагрузкуКлассификатора", 0.1, Истина); + КонецПроцедуры &НаКлиенте @@ -189,39 +191,55 @@ &НаКлиенте Процедура ЗагрузитьКлассификатор() // Загружает классификатор банков с диска ИТС или с сайта 1С. - - ПараметрыЗагрузкиКлассификатора = Новый Соответствие; - // (Число) Количество новых записей классификатора: - ПараметрыЗагрузкиКлассификатора.Вставить("Загружено", 0); - // (Число) Количество обновленных записей классификатора: - ПараметрыЗагрузкиКлассификатора.Вставить("Обновлено", 0); - // (Строка) Тест сообщения о результатах загрузки: - ПараметрыЗагрузкиКлассификатора.Вставить("ТекстСообщения", ""); - // (Булево) Флаг успешного завершения загрузки данных классификатора: - ПараметрыЗагрузкиКлассификатора.Вставить("ЗагрузкаВыполнена", Ложь); + ПараметрыЗагрузки = ПараметрыЗагрузкиКлассификатора(ВариантЗагрузки); Если ВариантЗагрузки = "ИТС" Тогда - ПолучитьДанныеБИКРФДискИТС(ПараметрыЗагрузкиКлассификатора); - АдресХранилища = ПоместитьВоВременноеХранилище(ПараметрыЗагрузкиКлассификатора, УникальныйИдентификатор); - ЗагрузитьРезультат(АдресХранилища); - Возврат; - ИначеЕсли ВариантЗагрузки = "Интернет" Тогда - ДлительнаяОперация = ПолучитьДанныеНаСервере(ПараметрыЗагрузкиКлассификатора); - - Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.ВыполняетсяЗагрузка; - УстановитьИзмененияВИнтерфейсе(); - - ИдентификаторЗадания = ДлительнаяОперация.ИдентификаторЗадания; - - ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект); - ПараметрыОжидания.ВыводитьОкноОжидания = Ложь; - - ОписаниеОповещения = Новый ОписаниеОповещения("ПриЗавершенииОперацииЗагрузки", ЭтотОбъект); - ДлительныеОперацииКлиент.ОжидатьЗавершение(ДлительнаяОперация, ОписаниеОповещения, ПараметрыОжидания); + ПолучитьДанныеБИКДискИТС(ПараметрыЗагрузки); + Успешно = ПустаяСтрока(ПараметрыЗагрузки["ТекстСообщения"]); + Если Не Успешно Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ПараметрыЗагрузки["ТекстСообщения"]); + Возврат; + КонецЕсли; КонецЕсли; + ДлительнаяОперация = ПолучитьДанныеНаСервере(ПараметрыЗагрузки); + + Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.ВыполняетсяЗагрузка; + УстановитьИзмененияВИнтерфейсе(); + + ИдентификаторЗадания = ДлительнаяОперация.ИдентификаторЗадания; + + ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект); + ПараметрыОжидания.ВыводитьОкноОжидания = Ложь; + + ОписаниеОповещения = Новый ОписаниеОповещения("ПриЗавершенииОперацииЗагрузки", ЭтотОбъект); + ДлительныеОперацииКлиент.ОжидатьЗавершение(ДлительнаяОперация, ОписаниеОповещения, ПараметрыОжидания); + КонецПроцедуры +&НаКлиенте +Функция ПараметрыЗагрузкиКлассификатора(Знач ВариантЗагрузки) + + Результат = Новый Соответствие; + // (Число) Количество новых записей классификатора: + Результат.Вставить("Загружено", 0); + // (Число) Количество обновленных записей классификатора: + Результат.Вставить("Обновлено", 0); + // (Строка) Тест сообщения о результатах загрузки: + Результат.Вставить("ТекстСообщения", ""); + // (Булево) Флаг успешного завершения загрузки данных классификатора: + Результат.Вставить("ЗагрузкаВыполнена", Ложь); + + Результат.Вставить("ВариантЗагрузки", ВариантЗагрузки); + Если ВариантЗагрузки = "ИТС" Тогда + Результат.Вставить("ПутьКДискуИТС", ""); + Результат.Вставить("ДанныеИТСАдресДвоичныхДанных", ""); + КонецЕсли; + + Возврат Результат; + +КонецФункции + &НаКлиенте Процедура ПриЗавершенииОперацииЗагрузки(Результат, ДополнительныеПараметры) Экспорт @@ -281,88 +299,38 @@ КонецПроцедуры -&НаКлиенте -Процедура ПолучитьДанныеБИКРФДискИТС(ПараметрыЗагрузкиКлассификатора) - // Получает, сортирует, записывает данные классификатора БИК РФ с диска ИТС. - - ПараметрыЗагрузкиФайловИТС = Новый Соответствие; - // (Строка) Путь к диску ИТС: - ПараметрыЗагрузкиФайловИТС.Вставить("ПутьКДискуИТС", ""); - // (Строка) Адрес во временном хранилище, по которому размещен файл данных классификатора: - ПараметрыЗагрузкиФайловИТС.Вставить("ДанныеИТСАдресДвоичныхДанных", ""); - // (Строка) Адрес во временном хранилище, по которому размещен файл обработки подготовки данных: - ПараметрыЗагрузкиФайловИТС.Вставить("ПодготовкаИТСАдресДвоичныхДанных", ""); - // (Строка) Текст ошибки: - ПараметрыЗагрузкиФайловИТС.Вставить("ТекстСообщения", ПараметрыЗагрузкиКлассификатора["ТекстСообщения"]); - // Другие параметры - см. описание переменной ПараметрыЗагрузкиФайлов в ЗагрузитьКлассификатор(): - ПараметрыЗагрузкиФайловИТС.Вставить("Загружено", ПараметрыЗагрузкиКлассификатора["Загружено"]); - ПараметрыЗагрузкиФайловИТС.Вставить("Обновлено", ПараметрыЗагрузкиКлассификатора["Обновлено"]); - - ПолучитьДанныеБИКДискИТС(ПараметрыЗагрузкиФайловИТС); - - Если Не ПустаяСтрока(ПараметрыЗагрузкиФайловИТС["ТекстСообщения"]) Тогда - ПараметрыЗагрузкиКлассификатора.Вставить("ТекстСообщения", ПараметрыЗагрузкиФайловИТС["ТекстСообщения"]); - Возврат; - КонецЕсли; - - ПолучитьСортировщикДискИТС(ПараметрыЗагрузкиФайловИТС); - - Если Не ПустаяСтрока(ПараметрыЗагрузкиФайловИТС["ТекстСообщения"]) Тогда - ПараметрыЗагрузкиКлассификатора.Вставить("ТекстСообщения", ПараметрыЗагрузкиФайловИТС["ТекстСообщения"]); - Возврат; - КонецЕсли; - - ЗагрузитьДанныеДискИТСНаСервере(ПараметрыЗагрузкиФайловИТС); - - ПараметрыЗагрузкиКлассификатора.Вставить("Загружено", ПараметрыЗагрузкиФайловИТС["Загружено"]); - ПараметрыЗагрузкиКлассификатора.Вставить("Обновлено", ПараметрыЗагрузкиФайловИТС["Обновлено"]); - ПараметрыЗагрузкиКлассификатора.Вставить("ТекстСообщения", ПараметрыЗагрузкиФайловИТС["ТекстСообщения"]); - ПараметрыЗагрузкиКлассификатора.Вставить("ЗагрузкаВыполнена", Истина); - -КонецПроцедуры - &НаКлиенте Процедура ПолучитьДанныеБИКДискИТС(ПараметрыЗагрузкиФайловИТС) - // Получает данные классификатора БИК РФ с диска ИТС. - // -// Параметры: - // ПараметрыЗагрузкиФайловИТС - см. описание одноименной переменной в ПолучитьДанныеБИКРФДискИТС(). - ФайлДанных = Неопределено; - ФайлНайден = Ложь; - - Результат = Новый Структура; + ИмяФайлаБИК = "1CITS\EXE\EXTDB\bnk.zip"; Если ЗначениеЗаполнено(ПутьКДискуИТС) Тогда // Путь к диску указан явно. ПутьКДискуИТС = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ПутьКДискуИТС); - ФайлДанных = Новый Файл(ПутьКДискуИТС + "Database\Garant\MorphDB\Morph.dlc"); - Если ФайлДанных.Существует() Тогда + ФайлДанных = Новый Файл(ПутьКДискуИТС + ИмяФайлаБИК); + ФайлНайден = ФайлДанных.Существует(); + Если ФайлНайден Тогда ПараметрыЗагрузкиФайловИТС.Вставить("ПутьКДискуИТС", ПутьКДискуИТС); - ФайлНайден = Истина; - Иначе - ДанныеИТС = ""; КонецЕсли; Иначе // Под Linux - проверка расположена ранее в Далее(). // Под Windows - перебор букв дисков с D по Z. Для Индекс = 68 По 90 Цикл НайденныйПутьКДискуИТС = Символ(Индекс) + ":\"; - ФайлДанных = Новый Файл(НайденныйПутьКДискуИТС + "Database\Garant\MorphDB\Morph.dlc"); - Если ФайлДанных.Существует() Тогда + ФайлДанных = Новый Файл(НайденныйПутьКДискуИТС + ИмяФайлаБИК); + ФайлНайден = ФайлДанных.Существует(); + Если ФайлНайден Тогда ПараметрыЗагрузкиФайловИТС.Вставить("ПутьКДискуИТС", НайденныйПутьКДискуИТС); - ФайлНайден = Истина; Прервать; КонецЕсли; КонецЦикла; КонецЕсли; Если ФайлНайден Тогда - ДанныеИТСАдресДвоичныхДанных = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ФайлДанных.ПолноеИмя)); + ДанныеИТСАдресДвоичныхДанных = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ФайлДанных.ПолноеИмя), УникальныйИдентификатор); ПараметрыЗагрузкиФайловИТС.Вставить("ДанныеИТСАдресДвоичныхДанных", ДанныеИТСАдресДвоичныхДанных); - ФайлДанных = Неопределено; Иначе ТекстСообщения = НСтр("ru ='На диске 1С:ИТС не обнаружены данные классификатора БИК РФ. - |Для установки требуется диск 1С:ИТС, на котором содержится база ""Гарант. Налоги, бухучет, предпринимательство.""'"); + |Для установки требуется диск 1С:ИТС, на котором содержится база ""Гарант. Налоги, бухучет, предпринимательство.""'"); ПараметрыЗагрузкиФайловИТС.Вставить("ТекстСообщения", ТекстСообщения); КонецЕсли; @@ -370,24 +338,6 @@ КонецПроцедуры -&НаКлиенте -Процедура ПолучитьСортировщикДискИТС(ПараметрыЗагрузкиФайловИТС) - // Получает обработку сортировки классификатора БИК РФ с диска ИТС. - // -// Параметры: - // ПараметрыЗагрузкиФайловИТС - см. описание одноименной переменной в ПолучитьДанныеБИКРФДискИТС(). - - ФайлОбработки = Новый Файл(ПараметрыЗагрузкиФайловИТС["ПутьКДискуИТС"] + "1CITS\EXE\EXTDB\BIKr5v82_MA.epf"); - - Если ФайлОбработки.Существует() Тогда - АдресДвоичныхДанных = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ФайлОбработки.ПолноеИмя)); - ПараметрыЗагрузкиФайловИТС.Вставить("ПодготовкаИТСАдресДвоичныхДанных", АдресДвоичныхДанных); - Иначе - ПараметрыЗагрузкиФайловИТС.Вставить("ТекстСообщения", НСтр("ru ='На диске ИТС не обнаружен файл обработки подготовки данных классификатора БИК РФ.'")); - КонецЕсли; - -КонецПроцедуры - &НаСервере Процедура УстановитьИзмененияВИнтерфейсе() // В зависимости от текущей страницы устанавливает доступность тех или иных полей для пользователя. @@ -421,22 +371,6 @@ КонецЕсли; КонецПроцедуры -&НаСервере -Процедура ЗагрузитьДанныеДискИТСНаСервере(ПараметрыЗагрузкиФайловИТС) - // Загружает в классификатор банков данные с диска ИТС. - // -// Параметры: - // ПараметрыЗагрузкиФайловИТС - см. описание переменной ПараметрыЗагрузкиКлассификатора в - // ПолучитьДанныеБИКРФДискИТС(). - - Если ОбщегоНазначения.РазделениеВключено() Тогда - ВызватьИсключение ТекстЗагрузкаЗапрещена(); - КонецЕсли; - - Обработки.ЗагрузкаКлассификатораБанков.ЗагрузитьДанныеДискИТС(ПараметрыЗагрузкиФайловИТС); - -КонецПроцедуры - &НаСервере Функция ПолучитьДанныеНаСервере(ПараметрыЗагрузкиФайлов) @@ -444,11 +378,16 @@ ВызватьИсключение ТекстЗагрузкаЗапрещена(); КонецЕсли; + Если ПараметрыЗагрузкиФайлов["ВариантЗагрузки"] = "ИТС" Тогда + АдресХранилища = ПараметрыЗагрузкиФайлов["ДанныеИТСАдресДвоичныхДанных"]; + ПараметрыЗагрузкиФайлов["ДанныеИТСАдресДвоичныхДанных"] = Новый ХранилищеЗначения( + ПолучитьИзВременногоХранилища(АдресХранилища), Новый СжатиеДанных(9)); + УдалитьИзВременногоХранилища(АдресХранилища); + КонецЕсли; + ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор); ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Загрузка классификатора банков РФ'"); - Результат = ДлительныеОперации.ВыполнитьВФоне("Обработки.ЗагрузкаКлассификатораБанков.ПолучитьДанные", ПараметрыЗагрузкиФайлов, ПараметрыВыполнения); - Возврат Результат; КонецФункции diff --git a/SSL/src/DataProcessors/ЗагрузкаКлассификатораБанков/ManagerModule.bsl b/SSL/src/DataProcessors/ЗагрузкаКлассификатораБанков/ManagerModule.bsl index 64e58a080..42cbe1d96 100644 --- a/SSL/src/DataProcessors/ЗагрузкаКлассификатораБанков/ManagerModule.bsl +++ b/SSL/src/DataProcessors/ЗагрузкаКлассификатораБанков/ManagerModule.bsl @@ -82,21 +82,23 @@ КонецПроцедуры -// Получает, сортирует, записывает данные классификатора БИК РФ с сайта 1С. +// Получает данные классификатора БИК РФ с сайта 1С или с диска ИТС. // // Параметры: -// ПараметрыЗагрузкиКлассификатора - Соответствие: -// Загружено - Число - Количество новых записей классификатора. -// Обновлено - Число - Количество обновленных записей классификатора. -// ТекстСообщения - Строка - тест сообщения о результатах загрузки. -// ЗагрузкаВыполнена - Булево - флаг успешного завершения загрузки данных классификатора. -// АдресХранилища - Строка - адрес внутреннего хранилища. +// ПараметрыЗагрузкиКлассификатора - Соответствие - содержит параметры: +// * ВариантЗагрузки - Строка - "ИТС" или "Интернет". +// * ДанныеИТСАдресДвоичныхДанных - Строка - если ВариантЗагрузки = "ИТС", то адрес временного хранилища с bnk.zip. +// * Загружено - Число - Количество новых записей классификатора. +// * Обновлено - Число - Количество обновленных записей классификатора. +// * ТекстСообщения - Строка - Текст сообщения о результатах загрузки. +// * ЗагрузкаВыполнена - Булево - Флаг успешного завершения загрузки данных классификатора. +// * АдресХранилища - Строка - Адрес внутреннего хранилища. +// Процедура ПолучитьДанные(ПараметрыЗагрузкиКлассификатора, АдресХранилища = "") Экспорт ТекущаяВерсияКлассификатора = ВерсияКлассификатора(); - ВременныйКаталог = ПолучитьИмяВременногоФайла(); - СоздатьКаталог(ВременныйКаталог); + ВременныйКаталог = ОбщегоНазначения.СоздатьВременныйКаталог(); ПараметрыПолученияФайлов = Новый Соответствие; ПараметрыПолученияФайлов.Вставить("ПутьКФайлу", ""); @@ -105,7 +107,24 @@ ПараметрыПолученияФайлов.Вставить("ЕстьОбновлениеНаСервере", Истина); ПараметрыПолученияФайлов.Вставить("ВерсияКлассификатора", ТекущаяВерсияКлассификатора); - ПолучитьДанныеИзИнтернета(ПараметрыПолученияФайлов); + Попытка + Если ПараметрыЗагрузкиКлассификатора["ВариантЗагрузки"] = "ИТС" Тогда + ДанныеИТСДвоичныеДанные = ПараметрыЗагрузкиКлассификатора["ДанныеИТСАдресДвоичныхДанных"].Получить(); + ПараметрыПолученияФайлов["ПутьКФайлу"] = ВременныйКаталог + "\bnk.zip"; + ДанныеИТСДвоичныеДанные.Записать(ПараметрыПолученияФайлов["ПутьКФайлу"]); + Иначе + ПолучитьДанныеИзИнтернета(ПараметрыПолученияФайлов); + КонецЕсли; + ПрочитатьИЗагрузитьДанные(ПараметрыЗагрузкиКлассификатора, ПараметрыПолученияФайлов, АдресХранилища); + ОбщегоНазначения.УдалитьВременныйКаталог(ВременныйКаталог); + Исключение + ОбщегоНазначения.УдалитьВременныйКаталог(ВременныйКаталог); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +Процедура ПрочитатьИЗагрузитьДанные(ПараметрыЗагрузкиКлассификатора, ПараметрыПолученияФайлов, АдресХранилища = "") Если Не ПустаяСтрока(ПараметрыПолученияФайлов["ТекстСообщения"]) Тогда ПараметрыЗагрузкиКлассификатора.Вставить("ТекстСообщения", ПараметрыПолученияФайлов["ТекстСообщения"]); @@ -131,6 +150,7 @@ Возврат; КонецЕсли; + ВременныйКаталог = ПараметрыПолученияФайлов["ВременныйКаталог"]; Попытка ZIPФайл.ИзвлечьВсе(ВременныйКаталог); Исключение @@ -205,8 +225,6 @@ Возврат; КонецЕсли; - УдалитьФайлы(ВременныйКаталог); - ПараметрыЗагрузкиКлассификатора.Вставить("Загружено", ПараметрыЗагрузкиФайлов["Загружено"]); ПараметрыЗагрузкиКлассификатора.Вставить("Обновлено", ПараметрыЗагрузкиФайлов["Обновлено"]); ПараметрыЗагрузкиКлассификатора.Вставить("ТекстСообщения", ПараметрыЗагрузкиФайлов["ТекстСообщения"]); @@ -221,8 +239,8 @@ Если НЕ ПустаяСтрока(АдресХранилища) Тогда ПоместитьВоВременноеХранилище(ПараметрыЗагрузкиКлассификатора, АдресХранилища); КонецЕсли; - -КонецПроцедуры + +КонецПроцедуры Процедура ЗагрузитьКлассификаторБанков() Экспорт @@ -381,7 +399,7 @@ ДниНедели = СтрРазделить("Mon,Tue,Wed,Thu,Fri,Sat,Sun", ","); Месяцы = СтрРазделить("Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", ","); - ШаблонДаты = "[ДеньНедели], [День] [Месяц] [Год] [Час]:[Минута]:[Секунда] GMT"; + ШаблонДаты = "[ДеньНедели], [День] [Месяц] [Год] [Час]:[Минута]:[Секунда] GMT"; // не локализуется ПараметрыДаты = Новый Структура; ПараметрыДаты.Вставить("ДеньНедели", ДниНедели[ДеньНедели(Дата)-1]); @@ -710,87 +728,6 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Работа с данными диска ИТС - -// Сортирует, записывает данные классификатора БИК РФ с диска ИТС. -// -// Параметры: -// ПараметрыЗагрузкиФайловИТС - Соответствие: -// ПодготовкаИТСАдресДвоичныхДанных - ВременноеХранилище - Обработка подготовки данных БИК ИТС. -// ДанныеИТСАдресДвоичныхДанных - ВременноеХранилище - Файл данных БИК ИТС. -// Загружено - Число - Количество новых записей классификатора. -// Обновлено - Число - Количество обновленных записей классификатора. -// ТекстСообщения - Строка - тест сообщения о результатах загрузки. -// ЗагрузкаВыполнена - Булево - флаг успешного завершения загрузки данных классификатора. -// -Процедура ЗагрузитьДанныеДискИТС(ПараметрыЗагрузкиФайловИТС) Экспорт - - ВременныйКаталог = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ПолучитьИмяВременногоФайла()); - СоздатьКаталог(ВременныйКаталог); - - ПодготовкаИТСДвоичныеДанные = ПолучитьИзВременногоХранилища(ПараметрыЗагрузкиФайловИТС["ПодготовкаИТСАдресДвоичныхДанных"]); - ПодготовкаИТСПуть = ВременныйКаталог + "BIKr5v82_MA.epf"; - ПодготовкаИТСДвоичныеДанные.Записать(ПодготовкаИТСПуть); - ОбработкаПодготовкиДанныхИТС = Новый Файл(ПодготовкаИТСПуть); - - ДанныеИТСДвоичныеДанные = ПолучитьИзВременногоХранилища(ПараметрыЗагрузкиФайловИТС["ДанныеИТСАдресДвоичныхДанных"]); - ПутьКДаннымИТС = ВременныйКаталог + "Morph.dlc"; - ДанныеИТСДвоичныеДанные.Записать(ПутьКДаннымИТС); - ДанныеИТС = Новый ТекстовыйДокумент; - ДанныеИТС.Прочитать(ПутьКДаннымИТС); - - ТаблицаКлассификатора = Новый ТаблицаЗначений; - ТаблицаКлассификатора.Колонки.Добавить("БИК"); - ТаблицаКлассификатора.Колонки.Добавить("Наименование"); - ТаблицаКлассификатора.Колонки.Добавить("КоррСчет"); - ТаблицаКлассификатора.Колонки.Добавить("Город"); - ТаблицаКлассификатора.Колонки.Добавить("Адрес"); - ТаблицаКлассификатора.Колонки.Добавить("Телефоны"); - ТаблицаКлассификатора.Колонки.Добавить("КодРегиона"); - ТаблицаКлассификатора.Колонки.Добавить("Регион"); - - ВнешняяОбработкаПодготовкиДанныхИТС = ВнешниеОбработки.Создать(ОбработкаПодготовкиДанныхИТС.ПолноеИмя); - - КоличествоСтрок = ДанныеИТС.КоличествоСтрок(); - - СтрокаВерсии = ДанныеИТС.ПолучитьСтроку(1); - - КоличествоЧастей = Окр(КоличествоСтрок/1000); - СоответствиеРегионов = ""; - ТекстСообщения = ""; - ДатаВерсии = ""; - - Для НомерЧасти = 1 По КоличествоЧастей Цикл - ВнешняяОбработкаПодготовкиДанныхИТС.СортироватьДанныеКлассификатора(ДанныеИТС, ТаблицаКлассификатора, - СоответствиеРегионов, ДатаВерсии, - НомерЧасти, ТекстСообщения); - Если Не ПустаяСтрока(ТекстСообщения) Тогда - Возврат; - КонецЕсли; - - ПараметрыЗагрузкиДанныхИТС = Новый Соответствие; - ПараметрыЗагрузкиДанныхИТС.Вставить("ТаблицаКлассификатора", ТаблицаКлассификатора); - ПараметрыЗагрузкиДанныхИТС.Вставить("Загружено", ПараметрыЗагрузкиФайловИТС["Загружено"]); - ПараметрыЗагрузкиДанныхИТС.Вставить("Обновлено", ПараметрыЗагрузкиФайловИТС["Обновлено"]); - - ЗаписатьДанныеКлассификатора(ПараметрыЗагрузкиДанныхИТС); - - ПараметрыЗагрузкиФайловИТС.Вставить("Загружено", ПараметрыЗагрузкиДанныхИТС["Загружено"]); - ПараметрыЗагрузкиФайловИТС.Вставить("Обновлено", ПараметрыЗагрузкиДанныхИТС["Обновлено"]); - - КонецЦикла; - - УстановитьВерсиюКлассификатора(ДатаВерсии); - УдалитьФайлы(ВременныйКаталог); - - Если ПустаяСтрока(ПараметрыЗагрузкиФайловИТС["ТекстСообщения"]) Тогда - ПараметрыЗагрузкиФайловИТС.Вставить("ЗагрузкаВыполнена", Истина); - ДополнитьТекстСообщения(ПараметрыЗагрузкиФайловИТС); - КонецЕсли; - -КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// // Запись обработанных данных @@ -920,43 +857,6 @@ КонецПроцедуры -// Записывает/перезаписывает в справочник КлассификаторБанков данные банков. -// Параметры: -// ПараметрыЗагрузкиДанныхИТС - Соответствие: -// ТаблицаКлассификатора - ТаблицаЗначений - Данные банков. -// Загружено - Число - Количество новых записей классификатора. -// Обновлено - Число - Количество обновленных записей классификатора. -// -Процедура ЗаписатьДанныеКлассификатора(ПараметрыЗагрузкиДанныхИТС) - - ТаблицаБанков = ПараметрыЗагрузкиДанныхИТС["ТаблицаКлассификатора"]; - - ПараметрыЗагрузкиДанных = Новый Соответствие; - ПараметрыЗагрузкиДанных.Вставить("Загружено", ПараметрыЗагрузкиДанныхИТС["Загружено"]); - ПараметрыЗагрузкиДанных.Вставить("Обновлено", ПараметрыЗагрузкиДанныхИТС["Обновлено"]); - - Для СчетчикБанков = 1 По ТаблицаБанков.Количество() Цикл - - СтрокаТаблицыБанков = ТаблицаБанков.Получить(СчетчикБанков - 1); - - ПараметрыЗагрузкиДанных.Вставить("СтруктураБанк", СтрокаТаблицыЗначенийВСтруктуру(СтрокаТаблицыБанков)); - ЗаписатьЭлементКлассификатораБанковРФ(ПараметрыЗагрузкиДанных); - - КонецЦикла; - - ПараметрыЗагрузкиДанныхИТС.Вставить("Загружено", ПараметрыЗагрузкиДанных["Загружено"]); - ПараметрыЗагрузкиДанныхИТС.Вставить("Обновлено", ПараметрыЗагрузкиДанных["Обновлено"]); - -КонецПроцедуры - -Функция СтрокаТаблицыЗначенийВСтруктуру(СтрокаТаблицы) - Результат = Новый Структура; - Для Каждого Колонка Из СтрокаТаблицы.Владелец().Колонки Цикл - Результат.Вставить(Колонка.Имя, СтрокаТаблицы[Колонка.Имя]); - КонецЦикла; - Возврат Результат; -КонецФункции - //////////////////////////////////////////////////////////////////////////////// // Прочие процедуры и функции diff --git a/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/ПараметрыПрописиВалюты/Module.bsl b/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/ПараметрыПрописиВалюты/Module.bsl index fa37538d1..f61b76598 100644 --- a/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/ПараметрыПрописиВалюты/Module.bsl +++ b/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/ПараметрыПрописиВалюты/Module.bsl @@ -174,7 +174,7 @@ Род = СокрЛП(СтрПолучитьСтроку(СтрокаПараметров, 4)); - Если НРег(Род) = "м" Тогда + Если НРег(Род) = "м" Тогда ПолеПрописи4наРусском = "Мужской"; ИначеЕсли НРег(Род) = "ж" Тогда ПолеПрописи4наРусском = "Женский"; @@ -188,15 +188,15 @@ Род = СокрЛП(СтрПолучитьСтроку(СтрокаПараметров, 8)); - Если НРег(Род = "м") Тогда + Если НРег(Род) = "м" Тогда ПолеПрописи8наРусском = "Мужской"; - ИначеЕсли НРег(Род = "ж") Тогда + ИначеЕсли НРег(Род) = "ж" Тогда ПолеПрописи8наРусском = "Женский"; - ИначеЕсли НРег(Род = "с") Тогда + ИначеЕсли НРег(Род) = "с" Тогда ПолеПрописи8наРусском = "Средний"; КонецЕсли; - ДлинаДробнойЧасти = СокрЛП(СтрПолучитьСтроку(СтрокаПараметров, 9)); + ДлинаДробнойЧасти = СокрЛП(СтрПолучитьСтроку(СтрокаПараметров, 9)); КонецПроцедуры diff --git a/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/Форма/Module.bsl index 592e7c545..5923c461b 100644 --- a/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/Форма/Module.bsl @@ -116,7 +116,6 @@ Процедура ЗаполнитьВалюты() // Заполнение табличной части списком валют, курс которых не зависит от курса других валют. - ОкончаниеПериодаЗагрузки = Объект.ОкончаниеПериодаЗагрузки; СписокВалют = Объект.СписокВалют; СписокВалют.Очистить(); diff --git a/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Templates/ОбщероссийскийКлассификаторВалют/Template.txt b/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Templates/ОбщероссийскийКлассификаторВалют/Template.txt index 59318a906..2584fa63b 100644 --- a/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Templates/ОбщероссийскийКлассификаторВалют/Template.txt +++ b/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Templates/ОбщероссийскийКлассификаторВалют/Template.txt @@ -45,7 +45,7 @@ <Item Code="328" CodeSymbol="GYD" Name="Гайанский доллар" Description="Гайана" RBCLoading="ложь"/> <Item Code="332" CodeSymbol="HTG" Name="Гурд" Description="Гаити" RBCLoading="ложь"/> <Item Code="340" CodeSymbol="HNL" Name="Лемпира" Description="Гондурас" RBCLoading="ложь"/> - <Item Code="344" CodeSymbol="HKD" Name="Гонконгский доллар" Description="Гонконг" RBCLoading="ложь"/> + <Item Code="344" CodeSymbol="HKD" Name="Гонконгский доллар" Description="Гонконг" RBCLoading="истина"/> <Item Code="348" CodeSymbol="HUF" Name="Форинт" Description="Венгрия" RBCLoading="истина"/> <Item Code="352" CodeSymbol="ISK" Name="Исландская крона" Description="Исландия" RBCLoading="ложь"/> <Item Code="356" CodeSymbol="INR" Name="Индийская рупия" Description="Бутан; Индия" RBCLoading="истина"/> diff --git a/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ЗаменаЭлементов/Module.bsl b/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ЗаменаЭлементов/Module.bsl index 6fcde2d0b..cf1a3d1d0 100644 --- a/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ЗаменаЭлементов/Module.bsl +++ b/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ЗаменаЭлементов/Module.bsl @@ -711,7 +711,6 @@ &НаСервере Функция ПроверитьВозможностьЗаменыСсылок() - Результат = ""; ПарыЗамен = Новый Соответствие; Для Каждого Строка Из ЗаменяемыеСсылки Цикл ПарыЗамен.Вставить(Строка.Ссылка, ЦелевойЭлемент); diff --git a/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ОбъединениеЭлементов/Module.bsl b/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ОбъединениеЭлементов/Module.bsl index a52d8677e..6d7296e69 100644 --- a/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ОбъединениеЭлементов/Module.bsl +++ b/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ОбъединениеЭлементов/Module.bsl @@ -540,10 +540,9 @@ ТекстОшибки = ПроверитьВозможностьЗаменыСсылок(); Если Не ПустаяСтрока(ТекстОшибки) Тогда - ПараметрыПредупреждения = Новый Структура("Заголовок, Текст"); - ПараметрыПредупреждения.Заголовок = НСтр("ru = 'Невозможно объединить элементы'"); - ПараметрыПредупреждения.Текст = ТекстОшибки; - СтандартныеПодсистемыКлиент.ВывестиПредупреждение(ЭтотОбъект, ПараметрыПредупреждения); + СтандартныеПодсистемыКлиент.ПоказатьВопросПользователю(Неопределено, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Невозможно объединить элементы по причине: + |%1'"), ТекстОшибки), РежимДиалогаВопрос.ОК); Возврат; КонецЕсли; @@ -1181,7 +1180,7 @@ // Обновляем заголовки Представление = ?(ОсновнойЭлемент = Неопределено, "", ОсновнойЭлемент.Метаданные().Представление()); - ТекстЗаголовка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Объединение элементов %1 в один'"), Представление); + Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Объединение элементов %1 в один'"), Представление); КонецПроцедуры &НаСервере diff --git a/SSL/src/DataProcessors/ЗаполнениеКалендарныхГрафиков/Templates/ДанныеПроизводственныхКалендарей/Template.txt b/SSL/src/DataProcessors/ЗаполнениеКалендарныхГрафиков/Templates/ДанныеПроизводственныхКалендарей/Template.txt index c7df084f9..e2d41c114 100644 --- a/SSL/src/DataProcessors/ЗаполнениеКалендарныхГрафиков/Templates/ДанныеПроизводственныхКалендарей/Template.txt +++ b/SSL/src/DataProcessors/ЗаполнениеКалендарныхГрафиков/Templates/ДанныеПроизводственныхКалендарей/Template.txt @@ -46,6 +46,9 @@ <Item Calendar="04" Year="2017" DayType="Предпраздничный" Date="20170203" SwapDate=""/> <Item Calendar="04" Year="2017" DayType="Праздник" Date="20170204" SwapDate="20170206"/> <Item Calendar="04" Year="2017" DayType="Суббота" Date="20170206" SwapDate="20170204"/> + <Item Calendar="04" Year="2018" DayType="Предпраздничный" Date="20180216" SwapDate=""/> + <Item Calendar="04" Year="2018" DayType="Праздник" Date="20180217" SwapDate="20180219"/> + <Item Calendar="04" Year="2018" DayType="Суббота" Date="20180219" SwapDate="20180217"/> <Item Calendar="05" Year="2016" DayType="Предпраздничный" Date="20160705" SwapDate=""/> <Item Calendar="05" Year="2016" DayType="Праздник" Date="20160706" SwapDate=""/> <Item Calendar="05" Year="2016" DayType="Праздник" Date="20160707" SwapDate=""/> @@ -101,6 +104,15 @@ <Item Calendar="08" Year="2017" DayType="Предпраздничный" Date="20171211" SwapDate=""/> <Item Calendar="08" Year="2017" DayType="Праздник" Date="20171212" SwapDate=""/> <Item Calendar="08" Year="2017" DayType="Нерабочий" Date="20171228" SwapDate=""/> + <Item Calendar="08" Year="2018" DayType="Предпраздничный" Date="20180215" SwapDate=""/> + <Item Calendar="08" Year="2018" DayType="Праздник" Date="20180216" SwapDate=""/> + <Item Calendar="08" Year="2018" DayType="Предпраздничный" Date="20180404" SwapDate=""/> + <Item Calendar="08" Year="2018" DayType="Праздник" Date="20180405" SwapDate=""/> + <Item Calendar="08" Year="2018" DayType="Предпраздничный" Date="20180528" SwapDate=""/> + <Item Calendar="08" Year="2018" DayType="Праздник" Date="20180529" SwapDate=""/> + <Item Calendar="08" Year="2018" DayType="Праздник" Date="20181202" SwapDate="20181203"/> + <Item Calendar="08" Year="2018" DayType="Воскресенье" Date="20181203" SwapDate="20181202"/> + <Item Calendar="08" Year="2018" DayType="Нерабочий" Date="20181228" SwapDate=""/> <Item Calendar="09" Year="2016" DayType="Праздник" Date="20160503" SwapDate="20160504"/> <Item Calendar="09" Year="2016" DayType="Суббота" Date="20160504" SwapDate="20160503"/> <Item Calendar="09" Year="2016" DayType="Нерабочий" Date="20160705" SwapDate=""/> @@ -137,6 +149,13 @@ <Item Calendar="16" Year="2017" DayType="Предпраздничный" Date="20170831" SwapDate=""/> <Item Calendar="16" Year="2017" DayType="Праздник" Date="20170901" SwapDate=""/> <Item Calendar="16" Year="2017" DayType="Праздник" Date="20171106" SwapDate="20171104"/> + <Item Calendar="16" Year="2018" DayType="Предпраздничный" Date="20180614" SwapDate=""/> + <Item Calendar="16" Year="2018" DayType="Праздник" Date="20180615" SwapDate=""/> + <Item Calendar="16" Year="2018" DayType="Предпраздничный" Date="20180820" SwapDate=""/> + <Item Calendar="16" Year="2018" DayType="Праздник" Date="20180821" SwapDate=""/> + <Item Calendar="16" Year="2018" DayType="Предпраздничный" Date="20180829" SwapDate=""/> + <Item Calendar="16" Year="2018" DayType="Праздник" Date="20180830" SwapDate=""/> + <Item Calendar="16" Year="2018" DayType="Праздник" Date="20181106" SwapDate=""/> <Item Calendar="17" Year="2016" DayType="Предпраздничный" Date="20160208" SwapDate=""/> <Item Calendar="17" Year="2016" DayType="Праздник" Date="20160209" SwapDate=""/> <Item Calendar="17" Year="2016" DayType="Предпраздничный" Date="20160505" SwapDate=""/> @@ -209,6 +228,14 @@ <Item Calendar="91" Year="2017" DayType="Праздник" Date="20170605" SwapDate=""/> <Item Calendar="91" Year="2017" DayType="Праздник" Date="20170626" SwapDate=""/> <Item Calendar="91" Year="2017" DayType="Праздник" Date="20170904" SwapDate=""/> + <Item Calendar="91" Year="2018" DayType="Праздник" Date="20180318" SwapDate="20180319"/> + <Item Calendar="91" Year="2018" DayType="Воскресенье" Date="20180319" SwapDate="20180318"/> + <Item Calendar="91" Year="2018" DayType="Праздник" Date="20180409" SwapDate=""/> + <Item Calendar="91" Year="2018" DayType="Праздник" Date="20180528" SwapDate=""/> + <Item Calendar="91" Year="2018" DayType="Предпраздничный" Date="20180614" SwapDate=""/> + <Item Calendar="91" Year="2018" DayType="Праздник" Date="20180615" SwapDate=""/> + <Item Calendar="91" Year="2018" DayType="Предпраздничный" Date="20180821" SwapDate=""/> + <Item Calendar="91" Year="2018" DayType="Праздник" Date="20180822" SwapDate=""/> <Item Calendar="92" Year="2016" DayType="Предпраздничный" Date="20160317" SwapDate=""/> <Item Calendar="92" Year="2016" DayType="Праздник" Date="20160318" SwapDate=""/> <Item Calendar="92" Year="2017" DayType="Предпраздничный" Date="20170317" SwapDate=""/> diff --git a/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/Forms/Форма/Attributes/ПолеИндикаторДлительныхОпераций/ExtInfo/SpreadsheetData.mxlx b/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/Forms/Форма/Attributes/ПолеИндикаторДлительныхОпераций/ExtInfo/SpreadsheetData.mxlx new file mode 100644 index 000000000..70a095c0a --- /dev/null +++ b/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/Forms/Форма/Attributes/ПолеИндикаторДлительныхОпераций/ExtInfo/SpreadsheetData.mxlx @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="UTF-8"?> +<document xmlns="http://v8.1c.ru/8.2/data/spreadsheet" xmlns:pal="http://v8.1c.ru/8.1/data/ui/colors/palette" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <columns> + <size>0</size> + </columns> + <vgRows>0</vgRows> +</document> \ No newline at end of file diff --git a/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/Forms/Форма/Module.bsl index b3d2b5083..a68101a8c 100644 --- a/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/Forms/Форма/Module.bsl @@ -167,11 +167,45 @@ КонецФункции &НаСервере -Функция ЗаполнитьОтборЖурналаРегистрацииПоУмолчанию() +Процедура ЗаполнитьОтборЖурналаРегистрацииПоУмолчанию() ОтборЖурналаРегистрацииПоУмолчанию = Новый Структура; - ОтборЖурналаРегистрацииПоУмолчанию.Вставить("Событие", ЗащитаПерсональныхДанныхПовтИсп.СписокКонтролируемыхСобытий152ФЗ()); - ОтборЖурналаРегистрацииПоУмолчанию.Вставить("ИмяПриложения", ЗащитаПерсональныхДанныхПовтИсп.СписокКонтролируемыхПриложений152ФЗ()); + ОтборЖурналаРегистрацииПоУмолчанию.Вставить("Событие", СписокКонтролируемыхСобытий152ФЗ()); + ОтборЖурналаРегистрацииПоУмолчанию.Вставить("ИмяПриложения", СписокКонтролируемыхПриложений152ФЗ()); + +КонецПроцедуры + +&НаСервере +Функция СписокКонтролируемыхСобытий152ФЗ() + + // Функция определяет перечень событий журнала регистрации + // в соответствии с требованиями 152-ФЗ. + + СписокСобытий = Новый СписокЗначений; + СписокСобытий.Добавить("_$Access$_.Access", НСтр("ru = 'Доступ. Доступ'")); + СписокСобытий.Добавить("_$Access$_.AccessDenied", НСтр("ru = 'Доступ. Отказ в доступе'")); + СписокСобытий.Добавить("_$Session$_.Authentication", НСтр("ru = 'Сеанс. Аутентификация'")); + СписокСобытий.Добавить("_$Session$_.AuthenticationError", НСтр("ru = 'Сеанс. Ошибка аутентификации'")); + СписокСобытий.Добавить("_$Session$_.Start", НСтр("ru = 'Сеанс. Начало'")); + СписокСобытий.Добавить("_$Session$_.Finish", НСтр("ru = 'Сеанс. Завершение'")); + + Возврат СписокСобытий; + +КонецФункции + +&НаСервере +Функция СписокКонтролируемыхПриложений152ФЗ() + + // Функция определяет перечень контролируемых приложений системы + // в соответствии с требованиями 152-ФЗ. + + СписокПриложений = Новый Массив; + СписокПриложений.Добавить("1CV8"); // И идентификатор приложения 1С:Предприятие в режиме запуска "Толстый клиент"; + СписокПриложений.Добавить("1CV8C"); // И идентификатор приложения 1С:Предприятие в режиме запуска "Тонкий клиент"; + СписокПриложений.Добавить("WebClient"); // И идентификатор приложения 1С:Предприятие в режиме запуска "Веб-клиент"; + СписокПриложений.Добавить("Designer"); // И идентификатор приложения Конфигуратор; + + Возврат СписокПриложений; КонецФункции @@ -181,7 +215,7 @@ ПараметрыОтчета = ПараметрыОтчета(ОтборЖурналаНаКлиенте); Если Не ПроверитьЗаполнение() Тогда - Возврат Новый Структура("ЗаданиеВыполнено", Истина); + Возврат Новый Структура("Статус", "Выполнено"); КонецЕсли; ДлительныеОперации.ОтменитьВыполнениеЗадания(ИдентификаторЗадания); diff --git a/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Module.bsl b/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Module.bsl index ff7a83b83..bafda0714 100644 --- a/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Module.bsl +++ b/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Module.bsl @@ -2616,7 +2616,7 @@ ЗаписьXML.ЗаписатьКонецЭлемента(); // КонецЭлемента Криптопровайдер. ЗаписьXML.ЗаписатьНачалоЭлемента("ЗапросНаСертификат"); - ЗаписьXML.ЗаписатьАтрибут("УдостоверяющийЦентр", "ООО ""НПЦ ""1С"""); + ЗаписьXML.ЗаписатьАтрибут("УдостоверяющийЦентр", "ООО ""НПЦ ""1С"""); // Не локализуется (формат веб-сервиса). ЗаписьXML.ЗаписатьТекст(ТекстФайлаЗапросаНаСертификат()); ЗаписьXML.ЗаписатьКонецЭлемента(); // КонецЭлемента ЗапросНаСертификат. @@ -2812,7 +2812,7 @@ ПараметрыПодключения.АдресWSDL = "http://regservice.1c.ru/regservice/regservice.asmx?wsdl"; ПараметрыПодключения.URIПространстваИмен = "http://regservice.keydisk.ru/"; ПараметрыПодключения.ИмяСервиса = "RegService"; - ПараметрыПодключения.Таймаут = 5; + ПараметрыПодключения.Таймаут = 7; ВебСервис = ОбщегоНазначения.СоздатьWSПрокси(ПараметрыПодключения); @@ -5339,12 +5339,9 @@ // Пользователь отказался от установки внешней компоненты. ВыполнитьОбработкуОповещения(Контекст.ОбработкаПродолжения, Ложь); Иначе - ПоказатьПредупреждение(Новый ОписаниеОповещения( - "СоздатьОбъектКриптографииПослеПредупрежденияОбОшибке", ЭтотОбъект, Контекст), - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не удалось задействовать внешнюю компоненту по причине: - |%1'"), - Результат.ОписаниеОшибки)); + ПоказатьПредупреждение( + Новый ОписаниеОповещения("СоздатьОбъектКриптографииПослеПредупрежденияОбОшибке", ЭтотОбъект, Контекст), + Результат.ОписаниеОшибки); КонецЕсли; Возврат; КонецЕсли; diff --git a/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/ManagerModule.bsl b/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/ManagerModule.bsl index 8c6d42827..770276a88 100644 --- a/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/ManagerModule.bsl +++ b/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/ManagerModule.bsl @@ -59,7 +59,7 @@ ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ДополнительноеУсловие", - "Сертификаты.СостояниеЗаявления В ( + "СертификатыПереопределяемый.СостояниеЗаявления В ( | ЗНАЧЕНИЕ(Перечисление.СостоянияЗаявленияНаВыпускСертификата.ПустаяСсылка), | ЗНАЧЕНИЕ(Перечисление.СостоянияЗаявленияНаВыпускСертификата.Исполнено) )"); diff --git a/SSL/src/DataProcessors/ИнформацияПриЗапуске/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ИнформацияПриЗапуске/Forms/Форма/Module.bsl index ec7dcf57c..a79a1d5be 100644 --- a/SSL/src/DataProcessors/ИнформацияПриЗапуске/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ИнформацияПриЗапуске/Forms/Форма/Module.bsl @@ -384,7 +384,7 @@ КонецПроцедуры &НаСервере -Функция ДобавитьГиперссылкиВстроеннойСправки(ТекстHTML, ВебСтраницы) +Процедура ДобавитьГиперссылкиВстроеннойСправки(ТекстHTML, ВебСтраницы) ПрефиксГиперссылкиВстроеннойСправки = """" + СтандартныйПрефикс + "e1cib/helpservice/topics/v8config/v8cfgHelp/"; Остаток = ТекстHTML; Пока Истина Цикл @@ -409,7 +409,7 @@ РазмещениеФайла.Адрес = ПоместитьВоВременноеХранилище(Содержимое, УникальныйИдентификатор); РазмещениеФайла.ОтносительныйКаталог = ""; КонецЦикла; -КонецФункции +КонецПроцедуры &НаКлиентеНаСервереБезКонтекста Функция СтрЛевДоСимвола(Строка, Разделитель, Остаток = Неопределено) diff --git a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкиИспользованияПрофилейБезопасности/Module.bsl b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкиИспользованияПрофилейБезопасности/Module.bsl index f39483dd8..bd87af8cc 100644 --- a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкиИспользованияПрофилейБезопасности/Module.bsl +++ b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкиИспользованияПрофилейБезопасности/Module.bsl @@ -310,7 +310,7 @@ Если РеквизитПутьКДанным = "РежимИспользованияПрофилейБезопасности" ИЛИ РеквизитПутьКДанным = "" Тогда - Элементы.ГруппаПрофилиБезопасностиКолонкаПравая.Доступность = РежимИспользованияПрофилейБезопасности > 0; + Элементы.ГруппаПрофильБезопасностиИнформационнойБазы.Доступность = РежимИспользованияПрофилейБезопасности > 0; Элементы.ПрофильБезопасностиИнформационнойБазы.ТолькоПросмотр = (РежимИспользованияПрофилейБезопасности = 2); Элементы.ГруппаВосстановлениеПрофилейБезопасности.Доступность = (РежимИспользованияПрофилейБезопасности = 2); diff --git a/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/НастройкаРезервногоКопирования/Module.bsl b/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/НастройкаРезервногоКопирования/Module.bsl index d673a34c3..897610a1a 100644 --- a/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/НастройкаРезервногоКопирования/Module.bsl +++ b/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/НастройкаРезервногоКопирования/Module.bsl @@ -229,6 +229,11 @@ &НаКлиенте Функция ПроверитьКаталогСРезервнымиКопиями() +#Если ВебКлиент Тогда + ТекстСообщения = НСтр("ru = 'Настройка резервного копирования не доступна в веб-клиенте.'"); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения); + РеквизитыЗаполнены = Ложь; +#Иначе РеквизитыЗаполнены = Истина; Если ПустаяСтрока(Объект.КаталогСРезервнымиКопиями) Тогда @@ -275,6 +280,8 @@ РеквизитыЗаполнены = Ложь; КонецЕсли; + +#КонецЕсли Возврат РеквизитыЗаполнены; diff --git a/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Help/ru.html b/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Help/ru.html index ba816de52..4a2e715a5 100644 --- a/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Help/ru.html +++ b/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Help/ru.html @@ -12,7 +12,8 @@ <p>Включите флажок <strong>Выполнять автоматическое резервное копирование</strong>. </p> </li><li>После этого с помощью переключателя можно выбрать следующие возможности: <ul><li><strong>Регулярно по расписанию</strong> - выполнять резервное копирование автоматически. Перейдите по ссылке, для того чтобы настроить <a href="v8help://mngbase/jobschedule.lf">расписание</a> резервного копирования. Ссылка отражает введенное расписание. Недоступно в базовых версиях.  -<ul><li>При составлении расписания необходимо учитывать, что если к моменту запуска резервного копирования программа не будет работать, то резервное копирование не выполнится.</li></ul></li><li><strong>При завершении работы</strong> - при каждом выходе из программы администратору предлагается выполнить резервное копирование. При выходе из программы, для того чтобы началось резервное копирование, подтвердите свой выбор - нажмите кнопку <strong>Завершить</strong>. В окне <strong>Завершение работы</strong> флажок <strong>Выполнить резервное копирование</strong> по умолчанию включен. Для того чтобы при завершении работы больше не предлагалось резервное копирование, выключите флажок. </li></ul></li><li>Выберите <strong>Каталог для сохранения резервных копий</strong>. Для этого нажмите <img src="StdPicture.InputFieldSelect"></img> <strong>Выбрать</strong>, укажите путь к папке, в которую будут помещаться резервные копии, например, <strong>E:\Резервное копирование</strong>. Поле является обязательным. Рекомендуется выполнять резервное копирование на другой компьютер или внешний носитель. +<ul><li>При составлении расписания необходимо учитывать, что если к моменту запуска резервного копирования программа не будет работать, то резервное копирование не выполнится. +</li><li><strong>Внимание!</strong> Некоторые стандартные настройки в расписании резервного копирования не поддерживаются: <strong>Повторять с паузой</strong>, <strong>Завершить после</strong>, <strong>Останавливать через</strong>. Подберите другие настройки, для того чтобы заменить их.</li></ul></li><li><strong>При завершении работы</strong> - при каждом выходе из программы администратору предлагается выполнить резервное копирование. При выходе из программы, для того чтобы началось резервное копирование, подтвердите свой выбор - нажмите кнопку <strong>Завершить</strong>. В окне <strong>Завершение работы</strong> флажок <strong>Выполнить резервное копирование</strong> по умолчанию включен. Для того чтобы при завершении работы больше не предлагалось резервное копирование, выключите флажок. </li></ul></li><li>Выберите <strong>Каталог для сохранения резервных копий</strong>. Для этого нажмите <img src="StdPicture.InputFieldSelect"></img> <strong>Выбрать</strong>, укажите путь к папке, в которую будут помещаться резервные копии, например, <strong>E:\Резервное копирование</strong>. Поле является обязательным. Рекомендуется выполнять резервное копирование на другой компьютер или внешний носитель. </li><li>С помощью переключателя выберите срок, на протяжении которого программа будет <strong>Хранить резервные копии</strong>, или количество хранимых резервных копий:  <ul><li><strong>Все</strong> - если объем жесткого диска, на котором будет находиться каталог для резервного копирования, позволяет, можно выбрать это значение. </li><li><strong>За последние 6 мес</strong>. (по умолчанию). Можно выбрать срок хранения резервных копий. diff --git a/SSL/src/DataProcessors/НастройкиПользователей/Forms/КопированиеНастроекПользователей/Module.bsl b/SSL/src/DataProcessors/НастройкиПользователей/Forms/КопированиеНастроекПользователей/Module.bsl index 85c56d344..870179d14 100644 --- a/SSL/src/DataProcessors/НастройкиПользователей/Forms/КопированиеНастроекПользователей/Module.bsl +++ b/SSL/src/DataProcessors/НастройкиПользователей/Forms/КопированиеНастроекПользователей/Module.bsl @@ -46,7 +46,7 @@ ИначеЕсли КоличествоПользователей > 1 Тогда ЧислоИПредмет = Формат(КоличествоПользователей, "ЧДЦ=0") + " " + ПользователиСлужебныйКлиентСервер.ПредметЦелогоЧисла(КоличествоПользователей, - "Л = ru_RU", НСтр("ru = 'пользователь,пользователя,пользователей,,,,,,0'")); + "", НСтр("ru = 'пользователь,пользователя,пользователей,,,,,,0'")); Элементы.ВыбратьПользователей.Заголовок = ЧислоИПредмет; КонецЕсли; Элементы.ВыбратьПользователей.Подсказка = ""; @@ -237,14 +237,19 @@ // При копировании настроек внешнего вида или всех настроек другим пользователям // проверяем работают они с программой или нет. Если работают - выводим сообщение об этом. + ОткрытыеКопируемыеФормы = ОткрытыеКопируемыеФормы(); ПроверитьАктивныхПользователей(); - Если РезультатПроверки = "ЕстьАктивныеПользователиПолучатели" Тогда + Если РезультатПроверки = "ЕстьАктивныеПользователиПолучатели" + Или ЗначениеЗаполнено(ОткрытыеКопируемыеФормы) Тогда Если ПереключательКопируемыеНастройки = "СкопироватьВсе" Или (ПереключательКопируемыеНастройки = "СкопироватьОтдельные" И ВыбранныеНастройки.ВнешнийВид.Количество() <> 0) Тогда - ПараметрыФормы = Новый Структура("Действие", Команда.Имя); + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("Действие", Команда.Имя); + ПараметрыФормы.Вставить("ОткрытыеКопируемыеФормы", ОткрытыеКопируемыеФормы); + ПараметрыФормы.Вставить("ЕстьАктивныеПользователиПолучатели", РезультатПроверки = "ЕстьАктивныеПользователиПолучатели"); ОткрытьФорму("Обработка.НастройкиПользователей.Форма.ПредупреждениеОКопированииНастроек", ПараметрыФормы); Возврат; @@ -255,6 +260,48 @@ КонецПроцедуры +&НаКлиенте +Функция ОткрытыеКопируемыеФормы() + + Если ВыбранныеНастройки = Неопределено Тогда + Возврат ""; + КонецЕсли; + Настройки = ВыбранныеНастройки.ВнешнийВид; + + СтрокаОткрытыеФормы = ""; + СтрокаВсеКопируемыеНастройки = ""; + Для Каждого НастройкиФормы Из Настройки Цикл + Для Каждого НастройкаФормы Из НастройкиФормы Цикл + СтрокаВсеКопируемыеНастройки = СтрокаВсеКопируемыеНастройки + Символы.ПС + НастройкаФормы.Значение; + КонецЦикла; + КонецЦикла; + + ОткрытыеОкна = ПолучитьОкна(); + Для Каждого ОткрытоеОкно Из ОткрытыеОкна Цикл + Если ОткрытоеОкно.НачальнаяСтраница Или ОткрытоеОкно.Основное Тогда + Продолжить; + КонецЕсли; + Содержимое = ОткрытоеОкно.Содержимое; + ОсновнаяФорма = Содержимое.Получить(0); + + ИмяОткрытойФормы = ОсновнаяФорма.ИмяФормы; + Если СтрНайти(ИмяОткрытойФормы, "Обработка.НастройкиПользователей") > 0 + Или СтрНайти(ИмяОткрытойФормы, ".ПанельАдминистрированияБСП.") > 0 Тогда + Продолжить; + КонецЕсли; + + Если СтрНайти(СтрокаВсеКопируемыеНастройки, ИмяОткрытойФормы) > 0 Тогда + СтрокаОткрытыеФормы = ?(ЗначениеЗаполнено(СтрокаОткрытыеФормы), + СтрокаОткрытыеФормы + Символы.ПС + "- " + ОткрытоеОкно.Заголовок, + НСтр("ru = 'Открытые окна'") + ":" + Символы.ПС + "- " + ОткрытоеОкно.Заголовок) + КонецЕсли; + + КонецЦикла; + + Возврат СтрокаОткрытыеФормы; + +КонецФункции + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -287,7 +334,7 @@ Иначе ТекстЗаголовка = Формат(КоличествоНастроек, "ЧДЦ=0") + " " + ПользователиСлужебныйКлиентСервер.ПредметЦелогоЧисла(КоличествоНастроек, - "Л = ru_RU", НСтр("ru = 'настройка,настройки,настроек,,,,,,0'")); + "", НСтр("ru = 'настройка,настройки,настроек,,,,,,0'")); КонецЕсли; Элементы.ВыбратьНастройки.Заголовок = ТекстЗаголовка; diff --git a/SSL/src/DataProcessors/НастройкиПользователей/Forms/НастройкиПользователей/Module.bsl b/SSL/src/DataProcessors/НастройкиПользователей/Forms/НастройкиПользователей/Module.bsl index 63dc3e249..21f4d98e9 100644 --- a/SSL/src/DataProcessors/НастройкиПользователей/Forms/НастройкиПользователей/Module.bsl +++ b/SSL/src/DataProcessors/НастройкиПользователей/Forms/НастройкиПользователей/Module.bsl @@ -1176,7 +1176,7 @@ ПрописьПредмета = Формат(КоличествоНастроек, "ЧДЦ=0") + " " + ПользователиСлужебныйКлиентСервер.ПредметЦелогоЧисла(КоличествоНастроек, - "Л = ru_RU", НСтр("ru = 'настройка,настройки,настроек,,,,,,0'")); + "", НСтр("ru = 'настройка,настройки,настроек,,,,,,0'")); Если КоличествоНастроек = 1 И КоличествоПользователей = Неопределено Тогда diff --git a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ОчисткаНастроекПользователей/Module.bsl b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ОчисткаНастроекПользователей/Module.bsl index c99da4259..1f6b0d990 100644 --- a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ОчисткаНастроекПользователей/Module.bsl +++ b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ОчисткаНастроекПользователей/Module.bsl @@ -37,7 +37,7 @@ ИначеЕсли КоличествоПользователей > 1 Тогда ЧислоИПредмет = Формат(КоличествоПользователей, "ЧДЦ=0") + " " + ПользователиСлужебныйКлиентСервер.ПредметЦелогоЧисла(КоличествоПользователей, - "Л = ru_RU", НСтр("ru = 'пользователь,пользователя,пользователей,,,,,,0'")); + "", НСтр("ru = 'пользователь,пользователя,пользователей,,,,,,0'")); Элементы.ВыбратьПользователей.Заголовок = ЧислоИПредмет; ПереключательОчищаемыеНастройки = "ОчиститьВсе"; КонецЕсли; @@ -205,7 +205,7 @@ Иначе ТекстЗаголовка = Формат(КоличествоНастроек, "ЧДЦ=0") + " " + ПользователиСлужебныйКлиентСервер.ПредметЦелогоЧисла(КоличествоНастроек, - "Л = ru_RU", НСтр("ru = 'настройка,настройки,настроек,,,,,,0'")); + "", НСтр("ru = 'настройка,настройки,настроек,,,,,,0'")); КонецЕсли; Элементы.ВыбратьНастройки.Заголовок = ТекстЗаголовка; @@ -261,7 +261,7 @@ Иначе ПрописьПредмета = Формат(КоличествоНастроек, "ЧДЦ=0") + " " + ПользователиСлужебныйКлиентСервер.ПредметЦелогоЧисла(КоличествоНастроек, - "Л = ru_RU", НСтр("ru = 'настройка,настройки,настроек,,,,,,0'")); + "", НСтр("ru = 'настройка,настройки,настроек,,,,,,0'")); ТекстПояснения = НСтр("ru = 'Очищено %1 у %2'"); ТекстПояснения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстПояснения, ПрописьПредмета, ПояснениеУКогоОчищеныНастройки); diff --git a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ПредупреждениеОКопированииНастроек/Form.form b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ПредупреждениеОКопированииНастроек/Form.form index 812f78d18..e4e3069a5 100644 --- a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ПредупреждениеОКопированииНастроек/Form.form +++ b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ПредупреждениеОКопированииНастроек/Form.form @@ -4,6 +4,77 @@ <key>ru</key> <value>Копирование настроек</value> + + ГруппаОткрытыеКопируемыеФормы + 23 + + СообщениеОткрытыеФормы + 25 + + <key>ru</key> + <value>В программе есть <link ОткрытыеОкна>открытые окна</>, настройки которых копируются другому пользователю, +если в них были внесены изменения, то новые настройки могут быть не скопированы. +Рекомендуется закрыть перечисленные окна и повторить копирование. +</value> + + true + true + + true + + + СообщениеОткрытыеФормыРасширеннаяПодсказка + 27 + Label + true + true + + Left + + + + СообщениеОткрытыеФормыКонтекстноеМеню + 26 + true + + true + Label + + + URLProcessing + СообщениеОткрытыеФормыОбработкаНавигационнойСсылки + + Left + + + true + true + + true + + + <key>ru</key> + <value>Открытые копируемые формы</value> + + + ГруппаОткрытыеКопируемыеФормыРасширеннаяПодсказка + 24 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + ГруппаАктивныеПользователи 7 @@ -102,6 +173,7 @@ Vertical Auto + NormalSeparation true true Auto @@ -167,6 +239,10 @@ Right
    + + OnCreateAtServer + ПриСозданииНаСервере + Abort Close CustomizeForm @@ -204,6 +280,24 @@ true + + ОткрытыеКопируемыеФормы + + <key>ru</key> + <value>Открытые копируемые формы</value> + + 2 + + String + + + + true + + + true + + Скопировать @@ -234,6 +328,19 @@ </valueType> <keyParameter>true</keyParameter> </parameters> + <parameters> + <name>ОткрытыеКопируемыеФормы</name> + <valueType> + <types>String</types> + <stringQualifiers/> + </valueType> + </parameters> + <parameters> + <name>ЕстьАктивныеПользователиПолучатели</name> + <valueType> + <types>Boolean</types> + </valueType> + </parameters> <commandInterface> <navigationPanel/> <commandBar/> diff --git a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ПредупреждениеОКопированииНастроек/Module.bsl b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ПредупреждениеОКопированииНастроек/Module.bsl index b27edf2d7..e10c008ef 100644 --- a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ПредупреждениеОКопированииНастроек/Module.bsl +++ b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ПредупреждениеОКопированииНастроек/Module.bsl @@ -1,3 +1,19 @@ +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + ОткрытыеКопируемыеФормы = Параметры.ОткрытыеКопируемыеФормы; + Элементы.ГруппаАктивныеПользователи.Видимость = Параметры.ЕстьАктивныеПользователиПолучатели; + Элементы.ГруппаОткрытыеКопируемыеФормы.Видимость = ЗначениеЗаполнено(ОткрытыеКопируемыеФормы); + +КонецПроцедуры + +#КонецОбласти + #Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте @@ -7,6 +23,12 @@ КонецПроцедуры +&НаКлиенте +Процедура СообщениеОткрытыеФормыОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка) + ПоказатьПредупреждение(, ОткрытыеКопируемыеФормы); + СтандартнаяОбработка = Ложь; +КонецПроцедуры + #КонецОбласти #Область ОбработчикиКомандФормы diff --git a/SSL/src/DataProcessors/НастройкиЦентраМониторинга/Commands/НастройкаОтправкиОтчетовОбОшибках/CommandModule.bsl b/SSL/src/DataProcessors/НастройкиЦентраМониторинга/Commands/НастройкаОтправкиОтчетовОбОшибках/CommandModule.bsl new file mode 100644 index 000000000..def0f5ad7 --- /dev/null +++ b/SSL/src/DataProcessors/НастройкиЦентраМониторинга/Commands/НастройкаОтправкиОтчетовОбОшибках/CommandModule.bsl @@ -0,0 +1,13 @@ +#Область ОбработчикиСобытий + +&НаКлиенте +Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) + ПараметрыОткрытия = Новый Структура; + Если ТипЗнч(ПараметрыВыполненияКоманды.Источник) = Тип("УправляемаяФорма") Тогда + ПараметрыОткрытия.Вставить("ИдентификаторЗадания", ПараметрыВыполненияКоманды.Источник.ЦентрМониторингаИдентификаторЗадания); + ПараметрыОткрытия.Вставить("АдресРезультатаЗадания", ПараметрыВыполненияКоманды.Источник.ЦентрМониторингаАдресРезультатаЗадания); + КонецЕсли; + ОткрытьФорму("Обработка.НастройкиЦентраМониторинга.Форма.НастройкиЦентраМониторинга", ПараметрыОткрытия, ЭтотОбъект,,,,,РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/НастройкиЦентраМониторинга/Forms/ЗапросНаОтправкуОтчетовОбОшибках/Form.form b/SSL/src/DataProcessors/НастройкиЦентраМониторинга/Forms/ЗапросНаОтправкуОтчетовОбОшибках/Form.form new file mode 100644 index 000000000..ebc7a776e --- /dev/null +++ b/SSL/src/DataProcessors/НастройкиЦентраМониторинга/Forms/ЗапросНаОтправкуОтчетовОбОшибках/Form.form @@ -0,0 +1,299 @@ +<?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> + + + ИнформацияОДампах + 11 + true + true + + true + + + ИнформацияОДампах + + None + + ИнформацияОДампахРасширеннаяПодсказка + 13 + Label + true + true + + Left + + + + ИнформацияОДампахКонтекстноеМеню + 12 + true + + LabelField + Enter + true + Left + true + + 40 + true + 5 + true + + + + НеСпрашиватьМеняБольше + 8 + true + true + + true + + + НеСпрашиватьБольше + + Right + + НеСпрашиватьМеняБольшеРасширеннаяПодсказка + 10 + Label + true + true + + Left + + + + НеСпрашиватьМеняБольшеКонтекстноеМеню + 9 + true + + CheckBoxField + Enter + true + Left + true + + + Bottom + true + + ФормаКоманднаяПанель + -1 + + ФормаДа + 4 + + <key>ru</key> + <value>Отправить</value> + + true + true + + true + + + ФормаДаРасширеннаяПодсказка + 5 + Label + true + true + + Left + + + Form.Command.Да + Auto + true + true + true + UserCmds + Auto + + + ФормаНет + 6 + true + true + + true + + + ФормаНетРасширеннаяПодсказка + 7 + Label + true + true + + Left + + + Form.Command.Нет + Normal + Auto + true + true + UserCmds + Auto + + Center + + + OnCreateAtServer + ПриСозданииНаСервере + + LockOwner + true + true + Vertical + true + true + true + auto + true + + Объект + 1 + + DataProcessorObject.НастройкиЦентраМониторинга + + + true + + + true + +
    true
    +
    + + НеСпрашиватьБольше + + <key>ru</key> + <value>Не спрашивать больше</value> + + 2 + + Boolean + + + true + + + true + + + + ВариантыДамповОдобренные + + <key>ru</key> + <value>Варианты дампов одобренные</value> + + 3 + + + true + + + true + + + + ВариантыДампов + + <key>ru</key> + <value>Варианты дампов</value> + + 4 + + + true + + + true + + + + ДанныеОДампах + + <key>ru</key> + <value>Данные о дампах</value> + + 5 + + + true + + + true + + + + ИнформацияОДампах + + <key>ru</key> + <value>Информация о дампах</value> + + 6 + + String + + + + true + + + true + + + + Да + + <key>ru</key> + <value>Да</value> + + 1 + + ru + Да + + + true + + + + Да + + + DontUse + Auto + + + Нет + + <key>ru</key> + <value>Нет</value> + + 2 + + ru + Нет + + + true + + + + Нет + + + DontUse + Auto + + + + + + + diff --git a/SSL/src/DataProcessors/НастройкиЦентраМониторинга/Forms/ЗапросНаОтправкуОтчетовОбОшибках/Module.bsl b/SSL/src/DataProcessors/НастройкиЦентраМониторинга/Forms/ЗапросНаОтправкуОтчетовОбОшибках/Module.bsl new file mode 100644 index 000000000..39399a723 --- /dev/null +++ b/SSL/src/DataProcessors/НастройкиЦентраМониторинга/Forms/ЗапросНаОтправкуОтчетовОбОшибках/Module.bsl @@ -0,0 +1,91 @@ + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + ПараметрыДляПолучения = Новый Структура("ИнформацияОДампах, ВариантыДампов, ВариантыДамповОдобренные"); + ПараметрыЦентраМониторинга = ЦентрМониторингаСлужебный.ПолучитьПараметрыЦентраМониторинга(ПараметрыДляПолучения); + ИнформацияОДампах = ПараметрыЦентраМониторинга.ИнформацияОДампах; + Элементы.ИнформацияОДампах.Высота = СтрЧислоСтрок(ИнформацияОДампах); + ДанныеОДампах = Новый Структура; + ДанныеОДампах.Вставить("ВариантыДампов", ПараметрыЦентраМониторинга.ВариантыДампов); + ДанныеОДампах.Вставить("ВариантыДамповОдобренные", ПараметрыЦентраМониторинга.ВариантыДамповОдобренные); +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура Да(Команда) + Ответ = Новый Структура; + Ответ.Вставить("Согласовано", Истина); + Ответ.Вставить("ИнформацияОДампах", ИнформацияОДампах); + Ответ.Вставить("НеСпрашиватьБольше", НеСпрашиватьБольше); + Ответ.Вставить("ВариантыДампов", ДанныеОДампах.ВариантыДампов); + Ответ.Вставить("ВариантыДамповОдобренные", ДанныеОДампах.ВариантыДамповОдобренные); + УстановитьПараметрыЦентраМониторинга(Ответ); + Закрыть(); +КонецПроцедуры + +&НаКлиенте +Процедура Нет(Команда) + Ответ = Новый Структура; + Ответ.Вставить("Согласовано", Ложь); + Ответ.Вставить("НеСпрашиватьБольше", НеСпрашиватьБольше); + УстановитьПараметрыЦентраМониторинга(Ответ); + Закрыть(); +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервереБезКонтекста +Процедура УстановитьПараметрыЦентраМониторинга(Ответ) + + НовыеПараметры = Новый Структура; + + Если Ответ.Согласовано Тогда + + // Пользователь не хочет, чтобы его спрашивали. + Если Ответ.НеСпрашиватьБольше Тогда + НовыеПараметры.Вставить("СпрашиватьПередОтправкой", Ложь); + КонецЕсли; + + // Запросим текущие параметры, т.к. они могли поменяться. + ПараметрыДляПолучения = Новый Структура("ИнформацияОДампах, ВариантыДампов"); + ПараметрыЦентраМониторинга = ЦентрМониторингаСлужебный.ПолучитьПараметрыЦентраМониторинга(ПараметрыДляПолучения); + + // Добавляем к одобренным дампам те, что согласовал пользователь. + НовыеПараметры.Вставить("ВариантыДамповОдобренные", Ответ.ВариантыДамповОдобренные); + Для Каждого Запись Из Ответ.ВариантыДампов Цикл + НовыеПараметры.ВариантыДамповОдобренные.Вставить(Запись.Ключ, Запись.Значение); + ПараметрыЦентраМониторинга.ВариантыДампов.Удалить(Запись.Ключ); + КонецЦикла; + + НовыеПараметры.Вставить("ВариантыДампов", ПараметрыЦентраМониторинга.ВариантыДампов); + + // Очищаем параметры. + Если Ответ.ИнформацияОДампах = ПараметрыЦентраМониторинга.ИнформацияОДампах Тогда + НовыеПараметры.Вставить("ИнформацияОДампах", ""); + КонецЕсли; + + Иначе + + // Пользователь не хочет, чтобы его спрашивали и вообще не хочет ничего отправлять. + Если Ответ.НеСпрашиватьБольше Тогда + НовыеПараметры.Вставить("ОтправлятьФайлыДампов", 0); + НовыеПараметры.Вставить("РезультатОтправки", Нстр("ru = 'Пользователь отказал в предоставлении полных дампов.'")); + // Согласовывать больше нечего, очищаем параметры. + НовыеПараметры.Вставить("ИнформацияОДампах", ""); + НовыеПараметры.Вставить("ВариантыДампов", Новый Соответствие); + КонецЕсли; + + КонецЕсли; + + ЦентрМониторингаСлужебный.УстановитьПараметрыЦентраМониторингаВнешнийВызов(НовыеПараметры); + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/DataProcessors/НастройкиЦентраМониторинга/Forms/ЗапросНаСборИОтправкуОтчетовОбОшибках/Form.form b/SSL/src/DataProcessors/НастройкиЦентраМониторинга/Forms/ЗапросНаСборИОтправкуОтчетовОбОшибках/Form.form new file mode 100644 index 000000000..e5b415650 --- /dev/null +++ b/SSL/src/DataProcessors/НастройкиЦентраМониторинга/Forms/ЗапросНаСборИОтправкуОтчетовОбОшибках/Form.form @@ -0,0 +1,471 @@ + + + + <key>ru</key> + <value>Сбор и отправка отчетов об ошибках</value> + + + ГруппаСообщение + 23 + + ДекорацияПредупреждение + 20 + + <key>ru</key> + <value>Декорация предупреждение</value> + + true + true + + true + + + ДекорацияПредупреждениеРасширеннаяПодсказка + 22 + Label + true + true + + Left + + + + ДекорацияПредупреждениеКонтекстноеМеню + 21 + true + + true + true + + + CommonPicture.Предупреждение32 + + + + + Сообщение + 7 + + <key>ru</key> + <value>Обнаружены аварийные завершения работы программ. Вы можете отправить отчет о возникающих ошибках в Фирму "1С". Полученная информация поможет нам повысить качество выпускаемых продуктов. Никакие конфиденциальные данные не будут переданы третьим лицам.</value> + + true + true + + true + + + СообщениеРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + + СообщениеКонтекстноеМеню + 8 + true + + Label + 60 + true + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Сообщение</value> + + + ГруппаСообщениеРасширеннаяПодсказка + 24 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + Переадресация + 17 + + <key>ru</key> + <value>Если Вы не являетесь техническим специалистом, то сообщите об этой проблеме администратору системы и нажмите кнопку "Отмена".</value> + + true + true + + true + + + ПереадресацияРасширеннаяПодсказка + 19 + Label + true + true + + Left + + + + ПереадресацияКонтекстноеМеню + 18 + true + + Label + 60 + true + true + + Left + + + + Вопрос + 14 + + <key>ru</key> + <value>Включить автоматический сбор и отправку отчетов об ошибках?</value> + + true + true + + true + + + ВопросРасширеннаяПодсказка + 16 + Label + true + true + + Left + + + + ВопросКонтекстноеМеню + 15 + true + + Label + 60 + true + true + + Left + + + + ГруппаНиз + 27 + + ГруппаНастройки + 31 + + ПерейтиКНастройкам + 1 + + <key>ru</key> + <value>Перейти к настройкам и закрыть</value> + + true + true + + true + + + ПерейтиКНастройкамРасширеннаяПодсказка + 3 + Label + true + true + + Left + + + + ПерейтиКНастройкамКонтекстноеМеню + 2 + true + + Label + true + true + + + Click + ПерейтиКНастройкамНажатие + + true + Left + + + true + true + + true + + + <key>ru</key> + <value>Настройки</value> + + + ГруппаНастройкиРасширеннаяПодсказка + 32 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ГруппаКнопки + 29 + + ФормаДа + 10 + + <key>ru</key> + <value>Включить сбор и отправку</value> + + true + true + + true + + + ФормаДаРасширеннаяПодсказка + 11 + Label + true + true + + Left + + + Form.Command.Да + Auto + true + true + true + UserCmds + Auto + + + ФормаНет + 12 + + <key>ru</key> + <value>Запретить</value> + + true + true + + true + + + ФормаНетРасширеннаяПодсказка + 13 + Label + true + true + + Left + + + Form.Command.Нет + Normal + Auto + true + true + UserCmds + Auto + + + Отмена + 25 + true + true + + true + + + ОтменаРасширеннаяПодсказка + 26 + Label + true + true + + Left + + + Form.StandardCommand.Cancel + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Кнопки</value> + + + ГруппаКнопкиРасширеннаяПодсказка + 30 + Label + true + true + + Left + + + CommandBar + + Right + + + true + true + + true + + + <key>ru</key> + <value>Низ</value> + + + ГруппаНизРасширеннаяПодсказка + 28 + Label + true + true + + Left + + + UsualGroup + + Auto + NormalSeparation + true + true + Auto + Auto + + + Bottom + true + + ФормаКоманднаяПанель + -1 + Right + + LockOwner + true + true + Vertical + true + true + true + true + + Объект + 1 + + DataProcessorObject.НастройкиЦентраМониторинга + + + true + + + true + +
    true
    +
    + + Да + + <key>ru</key> + <value>Да</value> + + 1 + + ru + Да + + + true + + + + Да + + + DontUse + Auto + + + Нет + + <key>ru</key> + <value>Нет</value> + + 2 + + ru + Нет + + + true + + + + Нет + + + DontUse + Auto + + + + + + +
    diff --git a/SSL/src/DataProcessors/НастройкиЦентраМониторинга/Forms/ЗапросНаСборИОтправкуОтчетовОбОшибках/Module.bsl b/SSL/src/DataProcessors/НастройкиЦентраМониторинга/Forms/ЗапросНаСборИОтправкуОтчетовОбОшибках/Module.bsl new file mode 100644 index 000000000..1fc87f1a7 --- /dev/null +++ b/SSL/src/DataProcessors/НастройкиЦентраМониторинга/Forms/ЗапросНаСборИОтправкуОтчетовОбОшибках/Module.bsl @@ -0,0 +1,35 @@ + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ПерейтиКНастройкамНажатие(Элемент) + Закрыть(); + ОткрытьФорму("Обработка.НастройкиЦентраМониторинга.Форма.НастройкиЦентраМониторинга"); +КонецПроцедуры + +&НаКлиенте +Процедура Да(Команда) + НовыеПараметры = Новый Структура("ОтправлятьФайлыДампов", 1); + УстановитьПараметрыЦентраМониторинга(НовыеПараметры); + Закрыть(); +КонецПроцедуры + +&НаКлиенте +Процедура Нет(Команда) + НовыеПараметры = Новый Структура("ОтправлятьФайлыДампов", 0); + НовыеПараметры.Вставить("РезультатОтправки", Нстр("ru = 'Пользователь отказал в предоставлении полных дампов.'")); + УстановитьПараметрыЦентраМониторинга(НовыеПараметры); + Закрыть(); +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервереБезКонтекста +Процедура УстановитьПараметрыЦентраМониторинга(НовыеПараметры) + ЦентрМониторингаСлужебный.УстановитьПараметрыЦентраМониторингаВнешнийВызов(НовыеПараметры); +КонецПроцедуры + +#КонецОбласти + diff --git a/SSL/src/DataProcessors/НастройкиЦентраМониторинга/Forms/НастройкиЦентраМониторинга/Form.form b/SSL/src/DataProcessors/НастройкиЦентраМониторинга/Forms/НастройкиЦентраМониторинга/Form.form new file mode 100644 index 000000000..4342e830c --- /dev/null +++ b/SSL/src/DataProcessors/НастройкиЦентраМониторинга/Forms/НастройкиЦентраМониторинга/Form.form @@ -0,0 +1,754 @@ + + + + <key>ru</key> + <value>Настройки центра мониторинга</value> + + + ГруппаИдентификатор + 27 + + СтраницаИдентификатора + 29 + + Идентификатор + 16 + + <key>ru</key> + <value>Идентификатор для обращений в службу технической поддержки</value> + + true + true + + true + + + Идентификатор + + Left + None + + ИдентификаторРасширеннаяПодсказка + 18 + + <key>ru</key> + <value>Текст</value> + + Label + true + true + + Left + + + + ИдентификаторКонтекстноеМеню + 17 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Страница идентификатора</value> + + + СтраницаИдентификатораРасширеннаяПодсказка + 30 + Label + true + true + + Left + + + Page + + auto + false + + + + СтраницаПолучитьИдентификатор + 31 + + ЗаголовокКнопки + 33 + + <key>ru</key> + <value>Идентификатор не получен.</value> + + true + true + + true + + + ЗаголовокКнопкиРасширеннаяПодсказка + 35 + Label + true + true + + Left + + + + ЗаголовокКнопкиКонтекстноеМеню + 34 + true + + Label + true + true + + Left + + + + ПолучитьИдентификатор + 36 + + <key>ru</key> + <value>Получить идентификатор</value> + + true + true + + true + + + ПолучитьИдентификаторРасширеннаяПодсказка + 37 + Label + true + true + + Left + + + UsualButton + Form.Command.ПолучитьИдентификатор + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Страница получить идентификатор</value> + + + СтраницаПолучитьИдентификаторРасширеннаяПодсказка + 32 + Label + true + true + + Left + + + Page + + auto + false + + + true + true + + true + + + <key>ru</key> + <value>Идентификатор</value> + + + ГруппаИдентификаторРасширеннаяПодсказка + 28 + Label + true + true + + Left + + + Pages + + Auto + + + + Состояние + 22 + + Прогресс + 19 + + <key>ru</key> + <value>Прогресс</value> + + true + + true + + + ПрогрессРасширеннаяПодсказка + 21 + Label + true + true + + Left + + + + ПрогрессКонтекстноеМеню + 20 + true + + true + true + + + CommonPicture.ДлительнаяОперация16 + + + + + ОписаниеПрогресса + 24 + + <key>ru</key> + <value>Описание прогресса</value> + + true + + true + + + ОписаниеПрогрессаРасширеннаяПодсказка + 26 + Label + true + true + + Left + + + + ОписаниеПрогрессаКонтекстноеМеню + 25 + true + + Label + true + + Style.ПоясняющийТекст + + + Left + + + true + true + + true + + + <key>ru</key> + <value>Состояние</value> + + 1 + + СостояниеРасширеннаяПодсказка + 23 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ГруппаНастройкиОтправкиОтчетовОбОшибках + 38 + + ОтправлятьИнформациюОбОшибках + 8 + + <key>ru</key> + <value>Отправлять отчеты об ошибках</value> + + true + true + + true + + + ОтправлятьИнформациюОбОшибках + + Right + ShowBottom + + OnChange + ОтправлятьИнформациюОбОшибкахПриИзменении + + + ОтправлятьИнформациюОбОшибкахРасширеннаяПодсказка + 10 + + <key>ru</key> + <value>Соглашаясь отправлять информацию об ошибках, Вы даете согласие на сбор отчетов об аварийных завершениях работы программы (полных дампов%ДопИнфо) и их последующую отправку в фирму "1С". Полученная информация поможет нам повысить качество выпускаемых продуктов. Никакие конфиденциальные данные не будут переданы третьим лицам.</value> + + Label + true + + Left + + + + ОтправлятьИнформациюОбОшибкахКонтекстноеМеню + 9 + true + + CheckBoxField + Enter + true + Left + true + + + + СпрашиватьПередОтправкой + 11 + true + true + + true + + + СпрашиватьПередОтправкой + + Right + ShowBottom + + СпрашиватьПередОтправкойРасширеннаяПодсказка + 13 + + <key>ru</key> + <value>Отчеты об ошибках архивируются перед отправкой. Заархивированные отчеты в некоторых случаях могут иметь значительный объем (до нескольких гигабайт). Если Вы хотите, чтобы перед отправкой отчетов запрашивалось разрешение на отправку данных с указанием объема передаваемых файлов, установите флажок.</value> + + Label + true + + Left + + + + СпрашиватьПередОтправкойКонтекстноеМеню + 12 + true + + CheckBoxField + Enter + true + Left + true + + + true + true + + true + + + <key>ru</key> + <value>Настройки отправки отчетов об ошибках</value> + + + ГруппаНастройкиОтправкиОтчетовОбОшибкахРасширеннаяПодсказка + 39 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + NormalSeparation + true + true + Auto + Auto + + + + ФормаКоманднаяПанель + -1 + + ФормаЗаписатьИЗакрыть + 1 + true + true + + true + + + ФормаЗаписатьИЗакрытьРасширеннаяПодсказка + 2 + Label + true + true + + Left + + + Form.Command.ЗаписатьИЗакрыть + Auto + true + true + true + UserCmds + Auto + + + ФормаЗаписать + 3 + true + true + + true + + + ФормаЗаписатьРасширеннаяПодсказка + 4 + Label + true + true + + Left + + + Form.Command.Записать + Normal + Auto + true + true + UserCmds + Auto + + + ФормаПолучитьИдентификатор + 14 + true + + true + + + ФормаПолучитьИдентификаторРасширеннаяПодсказка + 15 + Label + true + true + + Left + + + Form.Command.ПолучитьИдентификатор + Normal + Auto + true + true + UserCmds + Auto + + Left + + + NotificationProcessing + ОбработкаОповещения + + + OnOpen + ПриОткрытии + + + OnCreateAtServer + ПриСозданииНаСервере + + 70 + LockOwner + true + true + Vertical + true + true + auto + true + DontShow + + Объект + 1 + + DataProcessorObject.НастройкиЦентраМониторинга + + + true + + + true + +
    true
    +
    + + ОтправлятьИнформациюОбОшибках + + <key>ru</key> + <value>Отправлять информацию об ошибках</value> + + 2 + + Number + + 1 + true + + + + true + + + true + + + + СпрашиватьПередОтправкой + + <key>ru</key> + <value>Спрашивать администратора перед отправкой данных</value> + + 3 + + Boolean + + + true + + + true + + + + АдминистраторСистемы + + <key>ru</key> + <value>Администратор системы</value> + + 4 + + CatalogRef.Пользователи + + + true + + + true + + + + Идентификатор + 5 + + String + + + + true + + + true + + + + ИдентификаторЗадания + + <key>ru</key> + <value>Идентификатор задания</value> + + 6 + + UUID + + + true + + + true + + + + РезультатФоновогоЗадания + + <key>ru</key> + <value>Результат фонового задания</value> + + 8 + + String + + + + true + + + true + + + + АдресРезультатаЗадания + + <key>ru</key> + <value>Адрес результата задания</value> + + 10 + + String + + + + true + + + true + + + + СостояниеЗаданияПолученияИдентификатора + + <key>ru</key> + <value>Состояние задания получения идентификатора</value> + + 11 + + String + + + + true + + + true + + + + Записать + + <key>ru</key> + <value>Записать</value> + + 1 + + ru + Записать + + + true + + + + Записать + + + DontUse + Auto + + + ЗаписатьИЗакрыть + + <key>ru</key> + <value>Записать и закрыть</value> + + 2 + + ru + Записать и закрыть + + + true + + + + ЗаписатьИЗакрыть + + + DontUse + Auto + + + ПолучитьИдентификатор + + <key>ru</key> + <value>Получить идентификатор</value> + + 3 + + ru + Получить идентификатор + + + true + + + + ПолучитьИдентификатор + + + DontUse + Auto + + + + + + +
    diff --git a/SSL/src/DataProcessors/НастройкиЦентраМониторинга/Forms/НастройкиЦентраМониторинга/Module.bsl b/SSL/src/DataProcessors/НастройкиЦентраМониторинга/Forms/НастройкиЦентраМониторинга/Module.bsl new file mode 100644 index 000000000..35b8d95ef --- /dev/null +++ b/SSL/src/DataProcessors/НастройкиЦентраМониторинга/Forms/НастройкиЦентраМониторинга/Module.bsl @@ -0,0 +1,177 @@ + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + СостояниеЗаданияПолученияИдентификатора = ""; + + Если Параметры.Свойство("ИдентификаторЗадания") Тогда + ИдентификаторЗадания = Параметры.ИдентификаторЗадания; + АдресРезультатаЗадания = Параметры.АдресРезультатаЗадания; + ВывестиРезультатПолученияИдентификатора = Истина; + Если ЗначениеЗаполнено(ИдентификаторЗадания) Тогда + СостояниеЗаданияПолученияИдентификатора = ЗаданиеВыполнено(ИдентификаторЗадания); + КонецЕсли; + КонецЕсли; + + ИдентификаторЦентраМониторинга = ИдентификаторЦентраМониторинга(); + Если НЕ ПустаяСтрока(ИдентификаторЦентраМониторинга) Тогда + Идентификатор = ИдентификаторЦентраМониторинга; + Иначе + // Идентификатора нет по какой-то причине, надо получить его повторно. + Элементы.ГруппаИдентификатор.ТекущаяСтраница = Элементы.СтраницаПолучитьИдентификатор; + КонецЕсли; + + ПараметрыДляПолучения = Новый Структура("ОтправлятьФайлыДампов, СпрашиватьПередОтправкой"); + ПараметрыЦентраМониторинга = ЦентрМониторингаСлужебный.ПолучитьПараметрыЦентраМониторинга(ПараметрыДляПолучения); + ОтправлятьИнформациюОбОшибках = ПараметрыЦентраМониторинга.ОтправлятьФайлыДампов; + Если ОтправлятьИнформациюОбОшибках = 2 Тогда + Элементы.ОтправлятьИнформациюОбОшибках.ТриСостояния = Истина; + КонецЕсли; + СпрашиватьПередОтправкой = ПараметрыЦентраМониторинга.СпрашиватьПередОтправкой; + СодержимоеПодсказки = Элементы.ОтправлятьИнформациюОбОшибкахРасширеннаяПодсказка.Заголовок; + Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда + Элементы.ОтправлятьИнформациюОбОшибкахРасширеннаяПодсказка.Заголовок = СтрЗаменить(СодержимоеПодсказки,"%ДопИнфо",""); + Иначе + Элементы.ОтправлятьИнформациюОбОшибкахРасширеннаяПодсказка.Заголовок = СтрЗаменить(СодержимоеПодсказки,"%ДопИнфо"," " + НСтр("ru = 'на сервере 1С'")); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + ПараметрыВидимости = Новый Структура("Статус, АдресРезультата", СостояниеЗаданияПолученияИдентификатора, АдресРезультатаЗадания); + Если НЕ ПустаяСтрока(СостояниеЗаданияПолученияИдентификатора) И ПустаяСтрока(Идентификатор) Тогда + УстановитьВидимостьЭлементов(ПараметрыВидимости); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ОтправлятьИнформациюОбОшибкахПриИзменении(Элемент) + Элемент.ТриСостояния = Ложь; +КонецПроцедуры + +#КонецОбласти + + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура Записать(Команда) + НовыеПараметры = Новый Структура("ОтправлятьФайлыДампов, СпрашиватьПередОтправкой", + ОтправлятьИнформациюОбОшибках, СпрашиватьПередОтправкой); + УстановитьПараметрыЦентраМониторинга(НовыеПараметры); +КонецПроцедуры + +&НаКлиенте +Процедура ЗаписатьИЗакрыть(Команда) + НовыеПараметры = Новый Структура("ОтправлятьФайлыДампов, СпрашиватьПередОтправкой", + ОтправлятьИнформациюОбОшибках, СпрашиватьПередОтправкой); + УстановитьПараметрыЦентраМониторинга(НовыеПараметры); + Закрыть(); +КонецПроцедуры + +&НаКлиенте +Процедура ПолучитьИдентификатор(Команда) + РезультатЗапуска = ОтправкаОзнакомительногоПакета(); + ИдентификаторЗадания = РезультатЗапуска.ИдентификаторЗадания; + АдресРезультатаЗадания = РезультатЗапуска.АдресРезультата; + СостояниеЗаданияПолученияИдентификатора = "Выполняется"; + Оповещение = Новый ОписаниеОповещения("ПослеОбновленияИдентификатора", ЦентрМониторингаКлиент); + ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект); + ПараметрыОжидания.ВыводитьОкноОжидания = Ложь; + ДлительныеОперацииКлиент.ОжидатьЗавершение(РезультатЗапуска, Оповещение, ПараметрыОжидания); + + // Вывести состояние получения идентификатора. + ПараметрыВидимости = Новый Структура("Статус, АдресРезультата", СостояниеЗаданияПолученияИдентификатора, АдресРезультатаЗадания); + УстановитьВидимостьЭлементов(ПараметрыВидимости); +КонецПроцедуры + +&НаКлиенте +Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) + Если ИмяСобытия = "ОбновлениеИдентификатораЦентрМониторинга" И Параметр <> Неопределено Тогда + УстановитьВидимостьЭлементов(Параметр); + КонецЕсли; +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервереБезКонтекста +Процедура УстановитьПараметрыЦентраМониторинга(НовыеПараметры) + ЦентрМониторингаСлужебный.УстановитьПараметрыЦентраМониторингаВнешнийВызов(НовыеПараметры); +КонецПроцедуры + +&НаСервереБезКонтекста +Функция ИдентификаторЦентраМониторинга() + Возврат ЦентрМониторинга.ИдентификаторИнформационнойБазы(); +КонецФункции + +&НаКлиенте +Процедура АктуализироватьПараметры() + ИдентификаторЦентраМониторинга = ИдентификаторЦентраМониторинга(); + Если НЕ ПустаяСтрока(ИдентификаторЦентраМониторинга) Тогда + Идентификатор = ИдентификаторЦентраМониторинга; + КонецЕсли; +КонецПроцедуры + +&НаСервереБезКонтекста +Функция ЗаданиеВыполнено(ИдентификаторЗадания) + РезультатВыполнения = "Выполняется"; + Попытка + ЗаданиеВыполнено = ДлительныеОперации.ЗаданиеВыполнено(ИдентификаторЗадания); + Если ЗаданиеВыполнено Тогда + РезультатВыполнения = "Выполнено"; + Иначе + РезультатВыполнения = "Выполняется"; + КонецЕсли; + Исключение + РезультатВыполнения = "Ошибка"; + КонецПопытки; + Возврат РезультатВыполнения; +КонецФункции + +&НаСервереБезКонтекста +Функция ОтправкаОзнакомительногоПакета() + // Отправка ознакомительного пакета. + ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(Новый УникальныйИдентификатор); + ПараметрыВыполнения.ОжидатьЗавершение = 0; + ПараметрыПроцедуры = Новый Структура("Итератор, ОтправкаТестовогоПакета, ПолучениеИдентификатора", 0, Ложь, Истина); + Возврат ДлительныеОперации.ВыполнитьВФоне("ЦентрМониторингаСлужебный.ОтправитьТестовыйПакет", ПараметрыПроцедуры, ПараметрыВыполнения); +КонецФункции + +&НаКлиенте +Процедура УстановитьВидимостьЭлементов(ПараметрыВидимости) + РезультатВыполнения = ПолучитьИзВременногоХранилища(ПараметрыВидимости.АдресРезультата); + Если ПараметрыВидимости.Статус = "Выполняется" Тогда + Элементы.ОписаниеПрогресса.Заголовок = НСтр("ru = 'Выполняется получение идентификатора'"); + Элементы.ОписаниеПрогресса.Видимость = Истина; + Элементы.Прогресс.Картинка = БиблиотекаКартинок.ДлительнаяОперация16; + Элементы.Прогресс.Видимость = Истина; + Элементы.ГруппаИдентификатор.Видимость = Ложь; + ИначеЕсли ПараметрыВидимости.Статус = "Выполнено" И РезультатВыполнения.Успешно Тогда + Элементы.ОписаниеПрогресса.Заголовок = НСтр("ru = 'Идентификатор успешно получен'"); + Элементы.ОписаниеПрогресса.Видимость = Ложь; + Элементы.Прогресс.Видимость = Ложь; + Элементы.ГруппаИдентификатор.Видимость = Истина; + Элементы.ГруппаИдентификатор.ТекущаяСтраница = Элементы.СтраницаИдентификатора; + АктуализироватьПараметры(); + ИначеЕсли ПараметрыВидимости.Статус = "Выполнено" И НЕ РезультатВыполнения.Успешно ИЛИ ПараметрыВидимости.Статус = "Ошибка" Тогда + Если ПараметрыВидимости.Статус = "Ошибка" Тогда + Пояснение = НСтр("ru = 'Ошибка при выполнении фонового задания.'"); + Иначе + Пояснение = РезультатВыполнения.КраткоеПредставлениеОшибки; + КонецЕсли; + ШаблонЗаголовка = НСтр("ru = 'Не удалось получить идентификатор. %1 Подробнее см. в журнале регистрации'"); + Элементы.ОписаниеПрогресса.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонЗаголовка, Пояснение); + Элементы.ОписаниеПрогресса.Видимость = Истина; + Элементы.Прогресс.Картинка = БиблиотекаКартинок.Предупреждение; + Элементы.Прогресс.Видимость = Истина; + Элементы.ГруппаИдентификатор.Видимость = Истина; + Элементы.ГруппаИдентификатор.ТекущаяСтраница = Элементы.СтраницаПолучитьИдентификатор; + КонецЕсли; +КонецПроцедуры + +#КонецОбласти + diff --git a/SSL/src/DataProcessors/НастройкиЦентраМониторинга/НастройкиЦентраМониторинга.mdo b/SSL/src/DataProcessors/НастройкиЦентраМониторинга/НастройкиЦентраМониторинга.mdo new file mode 100644 index 000000000..e1d300dbd --- /dev/null +++ b/SSL/src/DataProcessors/НастройкиЦентраМониторинга/НастройкиЦентраМониторинга.mdo @@ -0,0 +1,50 @@ + + + + + + + НастройкиЦентраМониторинга + + ru + Настройки центра мониторинга + + true + DataProcessor.НастройкиЦентраМониторинга.Form.НастройкиЦентраМониторинга + + НастройкиЦентраМониторинга + + ru + Настройки центра мониторинга + + PersonalComputer + MobileDevice + + + ЗапросНаСборИОтправкуОтчетовОбОшибках + + ru + Запрос на сбор и отправку отчетов об ошибках + + PersonalComputer + MobileDevice + + + ЗапросНаОтправкуОтчетовОбОшибках + + ru + Запрос на отправку отчетов об ошибках + + PersonalComputer + MobileDevice + + + НастройкаОтправкиОтчетовОбОшибках + + ru + Настройка отправки отчетов об ошибках + + ActionsPanelTools + Auto + + diff --git a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ИмпортЗамеровПроизводительности/Module.bsl b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ИмпортЗамеровПроизводительности/Module.bsl index 180c93205..7fb713aa0 100644 --- a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ИмпортЗамеровПроизводительности/Module.bsl +++ b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ИмпортЗамеровПроизводительности/Module.bsl @@ -51,10 +51,17 @@ &НаКлиенте Процедура Импорт(Команда) + Файл = Новый Файл(ФайлИмпорта); + Если Не Файл.Существует() Тогда + Сообщение = Новый СообщениеПользователю(); + Сообщение.Текст = НСтр("ru = 'Выберите файл для импорта.'"); + Сообщение.Поле = "ФайлИмпорта"; + Сообщение.Сообщить(); + Возврат; + КонецЕсли; ДвоичныеДанные = Новый ДвоичныеДанные(ФайлИмпорта); АдресХранилища = ПоместитьВоВременноеХранилище(ДвоичныеДанные, ЭтотОбъект.УникальныйИдентификатор); - ВыполнитьИмпортНаСервере(ФайлИмпорта, АдресХранилища); - + ВыполнитьИмпортНаСервере(ФайлИмпорта, АдресХранилища); КонецПроцедуры #КонецОбласти diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ИнтернетПоддержкаИСервисы/Form.form b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ИнтернетПоддержкаИСервисы/Form.form index 3fbce8d6e..f04a2d002 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ИнтернетПоддержкаИСервисы/Form.form +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ИнтернетПоддержкаИСервисы/Form.form @@ -1218,8 +1218,7 @@ Right ru - Автоматическое получение новостей с серверов 1С, -настройки новостей и лент новостей. + Настоятельно рекомендуется включить общую опцию получения новостей от фирмы 1С, что позволит оперативно получать важную информацию от службы поддержки. ShowBottom @@ -2376,6 +2375,177 @@ Auto
    + + ГруппаОбсуждения + 1818 + + ГруппаПодключениеОбсуждений + 1820 + + СостояниеПодключенияОбсуждений + 1822 + + <key>ru</key> + <value><Состояние подключения обсуждений></value> + + true + true + + true + + + СостояниеПодключенияОбсужденийРасширеннаяПодсказка + 1824 + Label + true + true + + Left + + + + СостояниеПодключенияОбсужденийКонтекстноеМеню + 1823 + true + + Label + true + true + + Left + + + + ПодключитьОтключитьОбсуждения + 1825 + + <key>ru</key> + <value>Подключить</value> + + true + true + + true + + + ПодключитьОтключитьОбсужденияРасширеннаяПодсказка + 1826 + Label + true + true + + Left + + + UsualButton + Form.Command.ПодключитьОтключитьОбсуждения + Normal + Auto + true + true + UserCmds + Auto + + + ПояснениеПодключениеОбсуждений + 1829 + + <key>ru</key> + <value>Общение пользователей друг с другом в режиме реального времени.</value> + + true + true + + true + + + ПояснениеПодключениеОбсужденийРасширеннаяПодсказка + 1831 + Label + true + true + + Left + + + + ПояснениеПодключениеОбсужденийКонтекстноеМеню + 1830 + true + + Label + true + true + + Style.ПоясняющийТекст + + + Left + + + true + true + + true + + + <key>ru</key> + <value>Подключение обсуждений</value> + + 43 + false + + ГруппаПодключениеОбсужденийРасширеннаяПодсказка + 1821 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Обсуждения</value> + + + ГруппаОбсужденияРасширеннаяПодсказка + 1819 + Label + true + true + + Left + + + UsualGroup + + Collapsible + true + Button + NormalSeparation + true + true + auto + Auto + Auto + + ГруппаИнтеграцияВызовОнлайнПоддержки 1694 @@ -2568,7 +2738,7 @@ 1709 <key>ru</key> - <value>Склонять с помощью сервиса morpher.ru</value> + <value>Склонять с помощью сервиса «Морфер»</value> true true @@ -2589,7 +2759,7 @@ 1711 <key>ru</key> - <value>Разрешить использование сервиса склонения <link http://www.morpher.ru>morpher.ru</> для получения представлений объектов в падежах (требуется подключение к Интернет).</value> + <value>Разрешить использование сервиса склонения <link http://www.morpher.ru>Морфер</> для получения представлений объектов в падежах (требуется подключение к Интернет).</value> true Label @@ -2896,6 +3066,99 @@ Auto + + ГруппаНастройкиОтправкиОтчетовОбОшибках + 1842 + + ДекорацияОтчетыОбОшибках + 1844 + true + true + + true + + + ДекорацияОтчетыОбОшибкахРасширеннаяПодсказка + 1846 + Label + true + true + + Left + + + + ДекорацияОтчетыОбОшибкахКонтекстноеМеню + 1845 + true + + Label + 3 + true + true + + Left + + + + ЦентрМониторингаНастройки + 1840 + + <key>ru</key> + <value>Настройки центра мониторинга</value> + + true + false + + true + + + ЦентрМониторингаНастройкиРасширеннаяПодсказка + 1841 + Label + true + true + + Left + + + Hyperlink + DataProcessor.НастройкиЦентраМониторинга.Command.НастройкаОтправкиОтчетовОбОшибках + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Переключатель</value> + + + ГруппаНастройкиОтправкиОтчетовОбОшибкахРасширеннаяПодсказка + 1843 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + true true @@ -2935,10 +3198,10 @@ ГруппаСтороннему - 1827 + 1832 ДекорацияСтороннему - 1829 + 1834 true true @@ -2946,7 +3209,7 @@ ДекорацияСтороннемуРасширеннаяПодсказка - 1831 + 1836 Label true true @@ -2956,7 +3219,7 @@ ДекорацияСтороннемуКонтекстноеМеню - 1830 + 1835 true Label @@ -2970,7 +3233,7 @@ ЦентрМониторингаРазрешитьОтправлятьДанныеСтороннему - 1832 + 1837 true true @@ -2986,7 +3249,7 @@ ЦентрМониторингаРазрешитьОтправлятьДанныеСтороннемуРасширеннаяПодсказка - 1834 + 1839 Label true true @@ -2996,7 +3259,7 @@ ЦентрМониторингаРазрешитьОтправлятьДанныеСтороннемуКонтекстноеМеню - 1833 + 1838 true RadioButtonField @@ -3030,7 +3293,7 @@ ГруппаСтороннемуРасширеннаяПодсказка - 1828 + 1833 Label true true @@ -3405,7 +3668,7 @@ Collapsible true Button - WeakSeparation + NormalSeparation true true auto @@ -3422,6 +3685,10 @@ NotificationProcessing ОбработкаОповещения + + OnOpen + ПриОткрытии + OnCreateAtServer ПриСозданииНаСервере @@ -3648,6 +3915,41 @@ true + + ЦентрМониторингаИдентификаторЗадания + + <key>ru</key> + <value>Центр мониторинга идентификатор задания</value> + + 26 + + UUID + + + true + + + true + + + + ЦентрМониторингаАдресРезультатаЗадания + + <key>ru</key> + <value>Центр мониторинга адрес результата задания</value> + + 27 + + String + + + + true + + + true + + БИПВойтиИлиВыйти @@ -3795,6 +4097,24 @@ <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> + <formCommands> + <name>ПодключитьОтключитьОбсуждения</name> + <title> + <key>ru</key> + <value>Подключить/Отключить обсуждения</value> + + 8 + + true + + + + ПодключитьОтключитьОбсуждения + + + DontUse + Auto + diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ИнтернетПоддержкаИСервисы/Help/ru.html b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ИнтернетПоддержкаИСервисы/Help/ru.html index f9a7bf078..9e77992db 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ИнтернетПоддержкаИСервисы/Help/ru.html +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ИнтернетПоддержкаИСервисы/Help/ru.html @@ -39,7 +39,14 @@ TD { Загрузка и обновление классификатора банков РФ из сети Интернет или диска 1С:ИТС.
  • Загрузить курсы валют
  • -Загрузка курсов валют из сети Интернет.

    Обновление версии программы

    +Загрузка курсов валют из сети Интернет.

    Обсуждения

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

    Обновление версии программы

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

    @@ -68,9 +75,9 @@ TD { настройка приложения 1С-Коннект на этом компьютере: можно расположить соответствующую ссылку для запуска на Начальной странице программы, а также скачать приложение и настроить его.

    Склонения представлений объектов

    +
  • Склонять с помощью сервиса "Морфер"
  • +
  • Настройка доступа к сервису "Морфер"
  • -
  • Склонять с помощью сервиса morpher.ru
  • включите флажок, для того чтобы разрешить использование сервиса склонения для получения представлений объектов в падежах (требуется подключение к Интернету).
    -
  • Настройка доступа к сервису склонения
  • выполните команду для перехода к вводу регистрационных данных на сервисе склонения.

    Центр мониторинга

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

    С помощью переключателя выберите:

    @@ -79,6 +86,8 @@ TD { + diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ИнтернетПоддержкаИСервисы/Module.bsl b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ИнтернетПоддержкаИСервисы/Module.bsl index 00dc0409e..e5cbabf98 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ИнтернетПоддержкаИСервисы/Module.bsl +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ИнтернетПоддержкаИСервисы/Module.bsl @@ -16,6 +16,7 @@ ЭтоАдминистраторСистемы = Пользователи.ЭтоПолноправныйПользователь(, Истина); РазделениеВключено = ОбщегоНазначения.РазделениеВключено(); ЭтоАвтономноеРабочееМесто = ОбщегоНазначения.ЭтоАвтономноеРабочееМесто(); + ЭтоБазоваяВерсияКонфигурации = СтандартныеПодсистемыСервер.ЭтоБазоваяВерсияКонфигурации(); Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда ВидимостьГруппыНастройки = Не РазделениеВключено; @@ -113,6 +114,7 @@ КонецЕсли; Элементы.ЦентрМониторингаАдресСервиса.Доступность = (ЦентрМониторингаРазрешитьОтправлятьДанные = 1); + Элементы.ЦентрМониторингаНастройки.Доступность = (ЦентрМониторингаРазрешитьОтправлятьДанные <> 2); КонецЕсли; Иначе Элементы.ГруппаЦентрМониторинга.Видимость = Ложь; @@ -153,6 +155,16 @@ НастройкиПрограммыПереопределяемый.ИнтернетПоддержкаИСервисыПриСозданииНаСервере(ЭтотОбъект); + Элементы.ГруппаОбсуждения.Видимость = ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Обсуждения") + И Не ЭтоБазоваяВерсияКонфигурации; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + ПриИзмененииСостоянияПодключенияОбсуждений(); + КонецПроцедуры &НаКлиенте @@ -173,6 +185,10 @@ Источник); КонецЕсли; + Если ИмяСобытия = "ОбсужденияПодключены" Тогда + ПриИзмененииСостоянияПодключенияОбсуждений(Параметр); + КонецЕсли; + КонецПроцедуры &НаКлиенте @@ -194,7 +210,9 @@ &НаКлиенте Процедура РазрешитьОтправлятьДанныеПриИзменении(Элемент) + Перем РезультатЗапуска; Элементы.ЦентрМониторингаАдресСервиса.Доступность = (ЦентрМониторингаРазрешитьОтправлятьДанные = 1); + Элементы.ЦентрМониторингаНастройки.Доступность = (ЦентрМониторингаРазрешитьОтправлятьДанные <> 2); Если ЦентрМониторингаРазрешитьОтправлятьДанные = 2 Тогда ПараметрыЦентраМониторингаЗапись = Новый Структура("ВключитьЦентрМониторинга, ЦентрОбработкиИнформацииОПрограмме", Ложь, Ложь); ИначеЕсли ЦентрМониторингаРазрешитьОтправлятьДанные = 1 Тогда @@ -203,7 +221,15 @@ ПараметрыЦентраМониторингаЗапись = Новый Структура("ВключитьЦентрМониторинга, ЦентрОбработкиИнформацииОПрограмме", Истина, Ложь); КонецЕсли; ЦентрМониторингаАдресСервиса = ПолучитьАдресСервиса(); - РазрешитьОтправлятьДанныеПриИзмененииНаСервере(ПараметрыЦентраМониторингаЗапись); + РазрешитьОтправлятьДанныеПриИзмененииНаСервере(ПараметрыЦентраМониторингаЗапись, РезультатЗапуска); + Если РезультатЗапуска <> Неопределено Тогда + ЦентрМониторингаИдентификаторЗадания = РезультатЗапуска.ИдентификаторЗадания; + ЦентрМониторингаАдресРезультатаЗадания = РезультатЗапуска.АдресРезультата; + Оповещение = Новый ОписаниеОповещения("ПослеОбновленияИдентификатора", ЦентрМониторингаКлиент); + ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект); + ПараметрыОжидания.ВыводитьОкноОжидания = Ложь; + ДлительныеОперацииКлиент.ОжидатьЗавершение(РезультатЗапуска, Оповещение, ПараметрыОжидания); + КонецЕсли; КонецПроцедуры &НаКлиенте @@ -420,10 +446,53 @@ КонецПроцедуры +&НаКлиенте +Процедура ПодключитьОтключитьОбсуждения(Команда) + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Обсуждения") Тогда + + МодульОбсужденияСлужебныйКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ОбсужденияСлужебныйКлиент"); + + Если МодульОбсужденияСлужебныйКлиент.ОбсужденияПодключены() Тогда + МодульОбсужденияСлужебныйКлиент.ПоказатьОтключение(); + Иначе + МодульОбсужденияСлужебныйКлиент.ПоказатьПодключение(); + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции +#Область СлужебныеОбработчикиСобытий + +&НаКлиенте +Процедура ПриИзмененииСостоянияПодключенияОбсуждений(ОбсужденияПодключены = Неопределено) + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Обсуждения") Тогда + + Если ОбсужденияПодключены = Неопределено Тогда + МодульОбсужденияСлужебныйКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ОбсужденияСлужебныйКлиент"); + ОбсужденияПодключены = МодульОбсужденияСлужебныйКлиент.ОбсужденияПодключены(); + КонецЕсли; + + Если ОбсужденияПодключены Тогда + Элементы.ПодключитьОтключитьОбсуждения.Заголовок = НСтр("ru = 'Отключить'"); + Элементы.СостояниеПодключенияОбсуждений.Заголовок = НСтр("ru = 'Обсуждения подключены.'"); + Иначе + Элементы.ПодключитьОтключитьОбсуждения.Заголовок = НСтр("ru = 'Подключить'"); + Элементы.СостояниеПодключенияОбсуждений.Заголовок = НСтр("ru = 'Подключение обсуждений не выполнено.'"); + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + //////////////////////////////////////////////////////////////////////////////// // Клиент @@ -613,7 +682,7 @@ КонецФункции &НаСервереБезКонтекста -Процедура РазрешитьОтправлятьДанныеПриИзмененииНаСервере(ПараметрыЦентраМониторинга) +Процедура РазрешитьОтправлятьДанныеПриИзмененииНаСервере(ПараметрыЦентраМониторинга, РезультатЗапуска) МодульЦентрМониторингаСлужебный = ОбщегоНазначения.ОбщийМодуль("ЦентрМониторингаСлужебный"); МодульЦентрМониторингаСлужебный.УстановитьПараметрыЦентраМониторингаВнешнийВызов(ПараметрыЦентраМониторинга); @@ -622,7 +691,13 @@ Результат = ПолучитьПереключательОтправкиДанных(ВключитьЦентрМониторинга, ЦентрОбработкиИнформацииОПрограмме); + Если Результат = 0 Или Результат = 1 Тогда + // Отправка ознакомительного пакета. + РезультатЗапуска = МодульЦентрМониторингаСлужебный.ЗапускОтправкиОзнакомительногоПакета(); + КонецЕсли; + Если Результат = 0 Тогда + // Включение задания сбора и отправки статистики. РегЗадание = МодульЦентрМониторингаСлужебный.ПолучитьРегламентноеЗаданиеВнешнийВызов("СборИОтправкаСтатистики", Истина); МодульЦентрМониторингаСлужебный.УстановитьРасписаниеПоУмолчаниюВнешнийВызов(РегЗадание); ИначеЕсли Результат = 1 Тогда diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиРаботыСФайлами/Form.form b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиРаботыСФайлами/Form.form index 3dab9fa50..d7ee3506f 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиРаботыСФайлами/Form.form +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиРаботыСФайлами/Form.form @@ -404,8 +404,8 @@ 2057 <key>ru</key> - <value>Расширения файлов, для которых будет запрещена загрузка в программы, чтобы предотвратить возможность нанесения вреда -компьютеру и данным в программе. Указываются через "пробел". + <value>Расширения файлов, для которых будет запрещена загрузка в программу, чтобы предотвратить возможность нанесения вреда +компьютеру и данным в программе. Указываются через "пробел". См. также: <link http://1c.ru/news/info.jsp?id=21537/>Пример проблемы с вирусом во внешней обработке</>. </value> diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Обслуживание/Module.bsl b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Обслуживание/Module.bsl index 3a881e475..f03794f65 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Обслуживание/Module.bsl +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Обслуживание/Module.bsl @@ -184,6 +184,7 @@ &НаКлиенте Процедура РазблокироватьРаботуСВнешнимиРесурсами(Команда) РазблокироватьРаботуСВнешнимиРесурсамиНаСервере(); + СтандартныеПодсистемыКлиент.УстановитьРасширенныйЗаголовокПриложения(); Оповестить("РазрешенаРаботаСВнешнимиРесурсами"); КонецПроцедуры diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ОбщиеНастройки/Help/ru.html b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ОбщиеНастройки/Help/ru.html index 3c5548290..f6a532a02 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ОбщиеНастройки/Help/ru.html +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ОбщиеНастройки/Help/ru.html @@ -29,7 +29,7 @@ TD {
    • Хранить историю изменений - Включите флажок для ведения истории изменения объектов программы. После этого становится доступной команда:
    • Настройки хранения - Настройка хранения и очистка версий документов и справочников.

    Полнотекстовый поиск данных

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

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

      • Электронная подпись - включите флажок, для того чтобы разрешить использовать электронные подписи и проверять отсутствие изменений файла с момента формирования электронной подписи. diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ОбщиеНастройки/Module.bsl b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ОбщиеНастройки/Module.bsl index 1716d9c16..021d05809 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ОбщиеНастройки/Module.bsl +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ОбщиеНастройки/Module.bsl @@ -152,7 +152,10 @@ &НаКлиенте Процедура УправлениеПолнотекстовымПоискомИИзвлечениемТекстов(Команда) - ОткрытьФорму("Обработка.ПанельАдминистрированияБСП.Форма.УправлениеПолнотекстовымПоискомИИзвлечениемТекстов"); + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПолнотекстовыйПоиск") Тогда + МодульПолнотекстовыйПоискКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ПолнотекстовыйПоискКлиент"); + МодульПолнотекстовыйПоискКлиент.ПоказатьУправлениеПолнотекстовымПоискомИИзвлечениемТекстов(); + КонецЕсли; КонецПроцедуры diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/СинхронизацияДанных/Form.form b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/СинхронизацияДанных/Form.form index 9426a5dc0..3c7fd416a 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/СинхронизацияДанных/Form.form +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/СинхронизацияДанных/Form.form @@ -119,7 +119,7 @@ - Группа4 + ГруппаСинхронизацияДанных 1217 ГруппаИспользоватьСинхронизациюДанных @@ -272,8 +272,12 @@ true + + <key>ru</key> + <value>Синхронизация данных</value> + - Группа4ExtendedTooltip + ГруппаСинхронизацияДанныхРасширеннаяПодсказка 2018 Label true @@ -472,7 +476,7 @@ - Группа5 + ГруппаСинхронизацияДанныхДополнительно 2000 ГруппаРезультатовСинхронизацииДанных @@ -614,8 +618,12 @@ true + + <key>ru</key> + <value>Синхронизация данных дополнительно</value> + - Группа5ExtendedTooltip + ГруппаСинхронизацияДанныхДополнительноРасширеннаяПодсказка 2025 Label true @@ -1024,6 +1032,57 @@
        true
        + + РазделениеВключено + + <key>ru</key> + <value>Разделение включено</value> + + 2 + + Boolean + + + true + + + true + + + + ПодсистемаСуществуетОбменДанными + + <key>ru</key> + <value>Подсистема существует обмен данными</value> + + 3 + + Boolean + + + true + + + true + + + + ПодсистемаСуществуетДатыЗапретаИзменения + + <key>ru</key> + <value>Подсистема существует даты запрета изменения</value> + + 4 + + Boolean + + + true + + + true + + diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/СинхронизацияДанных/Module.bsl b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/СинхронизацияДанных/Module.bsl index a1c8a557a..6be27b60d 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/СинхронизацияДанных/Module.bsl +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/СинхронизацияДанных/Module.bsl @@ -9,54 +9,17 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + Если Параметры.Свойство("АвтоТест") Тогда Возврат; КонецЕсли; - // Настройки видимости при запуске. - Элементы.ГруппаВременныеКаталогиКластераСерверов.Видимость = - Не ОбщегоНазначения.ИнформационнаяБазаФайловая() - И Пользователи.ЭтоПолноправныйПользователь(, Истина); + РазделениеВключено = ОбщегоНазначения.РазделениеВключено(); - Если ОбщегоНазначения.РазделениеВключено() Тогда - - Элементы.ОписаниеРаздела.Заголовок = НСтр("ru = 'Синхронизация данных с моими приложениями.'"); - Элементы.ИспользоватьДатыЗапретаЗагрузки.РасширеннаяПодсказка.Заголовок = - НСтр("ru = 'Запрет загрузки данных прошлых периодов из других приложений. - |Не влияет на загрузку данных из автономных рабочих мест.'"); - - Элементы.ГруппаИспользоватьСинхронизациюДанных.Видимость = Ложь; - Элементы.ГруппаВременныеКаталогиКластераСерверов.Видимость = Ложь; - - Элементы.ПрефиксУзлаРаспределеннойИнформационнойБазы.Заголовок = НСтр("ru = 'Префикс в этой программе'"); - - КонецЕсли; + ПодсистемаСуществуетОбменДанными = ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными"); + ПодсистемаСуществуетДатыЗапретаИзменения = ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДатыЗапретаИзменения"); - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда - МассивДоступныхВерсий = Новый Соответствие; - МодульОбменДаннымиПереопределяемый = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиПереопределяемый"); - МодульОбменДаннымиПереопределяемый.ПриПолученииДоступныхВерсийФормата(МассивДоступныхВерсий); - Элементы.ГруппаЗагрузкаДанныхEnterpriseData.Видимость = ?(МассивДоступныхВерсий.Количество() = 0, Ложь, Истина); - - Элементы.ГруппаПрефиксУзлаРаспределеннойИнформационнойБазы.РасширеннаяПодсказка.Заголовок = - Метаданные.Константы.ПрефиксУзлаРаспределеннойИнформационнойБазы.Подсказка; - Иначе - Элементы.ГруппаПрефиксУзлаРаспределеннойИнформационнойБазы.Видимость = Ложь; - Элементы.ГруппаНастройкиСинхронизацииДанных.Видимость = Ложь; - Элементы.ГруппаЗагрузкаДанныхEnterpriseData.Видимость = Ложь; - КонецЕсли; - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДатыЗапретаИзменения") Тогда - МодульДатыЗапретаИзмененияСлужебный = ОбщегоНазначения.ОбщийМодуль("ДатыЗапретаИзмененияСлужебный"); - СвойстваРазделов = МодульДатыЗапретаИзмененияСлужебный.СвойстваРазделов(); - Элементы.ГруппаДатыЗапретаЗагрузки.Видимость = СвойстваРазделов.ДатыЗапретаЗагрузкиВнедрены; - Иначе - Элементы.ГруппаДатыЗапретаЗагрузки.Видимость = Ложь; - КонецЕсли; - - Элементы.ДекорацияОжиданиеИзмененияПрефикса.Видимость = Ложь; - - // Обновление состояния элементов. + УстановитьВидимость(); УстановитьДоступность(); НастройкиПрограммыПереопределяемый.СинхронизацияДанныхПриСозданииНаСервере(ЭтотОбъект); @@ -367,21 +330,78 @@ КонецФункции &НаСервере -Процедура УстановитьДоступность(РеквизитПутьКДанным = "") +Процедура УстановитьВидимость() - Если (РеквизитПутьКДанным = "НаборКонстант.ИспользоватьДатыЗапретаЗагрузки" Или РеквизитПутьКДанным = "") - И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДатыЗапретаИзменения") Тогда - - Элементы.ГруппаДатыЗапретаЗагрузкиНастройка.Доступность = - НаборКонстант.ИспользоватьДатыЗапретаЗагрузки; + Если РазделениеВключено Тогда + Элементы.ОписаниеРаздела.Заголовок = НСтр("ru = 'Синхронизация данных с моими приложениями.'"); КонецЕсли; - Если (РеквизитПутьКДанным = "НаборКонстант.ИспользоватьСинхронизациюДанных" Или РеквизитПутьКДанным = "") - И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда - Элементы.НастройкиСинхронизацииДанных.Доступность = НаборКонстант.ИспользоватьСинхронизациюДанных; - Элементы.ГруппаДатыЗапретаЗагрузки.Доступность = НаборКонстант.ИспользоватьСинхронизациюДанных; - Элементы.РезультатыСинхронизацииДанных.Доступность = НаборКонстант.ИспользоватьСинхронизациюДанных; + Если ПодсистемаСуществуетОбменДанными Тогда + МассивДоступныхВерсий = Новый Соответствие; + МодульОбменДаннымиПереопределяемый = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиПереопределяемый"); + МодульОбменДаннымиПереопределяемый.ПриПолученииДоступныхВерсийФормата(МассивДоступныхВерсий); + + Элементы.ГруппаЗагрузкаДанныхEnterpriseData.Видимость = ?(МассивДоступныхВерсий.Количество() = 0, Ложь, Истина); + + Элементы.ГруппаПрефиксУзлаРаспределеннойИнформационнойБазы.РасширеннаяПодсказка.Заголовок = + Метаданные.Константы.ПрефиксУзлаРаспределеннойИнформационнойБазы.Подсказка; + + Если РазделениеВключено Тогда + Элементы.ГруппаИспользоватьСинхронизациюДанных.Видимость = Ложь; + Элементы.ГруппаВременныеКаталогиКластераСерверов.Видимость = Ложь; + + Элементы.ПрефиксУзлаРаспределеннойИнформационнойБазы.Заголовок = НСтр("ru = 'Префикс в этой программе'"); + Иначе + Элементы.ГруппаВременныеКаталогиКластераСерверов.Видимость = Не ОбщегоНазначения.ИнформационнаяБазаФайловая() + И Пользователи.ЭтоПолноправныйПользователь(, Истина); + КонецЕсли; + Иначе + Элементы.ГруппаСинхронизацияДанных.Видимость = Ложь; + Элементы.ГруппаПрефиксУзлаРаспределеннойИнформационнойБазы.Видимость = Ложь; + Элементы.ГруппаСинхронизацияДанныхДополнительно.Видимость = Ложь; + Элементы.ГруппаВременныеКаталогиКластераСерверов.Видимость = Ложь; + КонецЕсли; + + Если ПодсистемаСуществуетДатыЗапретаИзменения Тогда + МодульДатыЗапретаИзмененияСлужебный = ОбщегоНазначения.ОбщийМодуль("ДатыЗапретаИзмененияСлужебный"); + СвойстваРазделов = МодульДатыЗапретаИзмененияСлужебный.СвойстваРазделов(); + + Элементы.ГруппаДатыЗапретаЗагрузки.Видимость = СвойстваРазделов.ДатыЗапретаЗагрузкиВнедрены; + + Если РазделениеВключено + И СвойстваРазделов.ДатыЗапретаЗагрузкиВнедрены Тогда + Элементы.ИспользоватьДатыЗапретаЗагрузки.РасширеннаяПодсказка.Заголовок = + НСтр("ru = 'Запрет загрузки данных прошлых периодов из других приложений. + |Не влияет на загрузку данных из автономных рабочих мест.'"); + КонецЕсли; + Иначе + Элементы.ГруппаДатыЗапретаЗагрузки.Видимость = Ложь; + КонецЕсли; + + Элементы.ДекорацияОжиданиеИзмененияПрефикса.Видимость = Ложь; + +КонецПроцедуры + +&НаСервере +Процедура УстановитьДоступность(РеквизитПутьКДанным = "") + + Если (РеквизитПутьКДанным = "НаборКонстант.ИспользоватьДатыЗапретаЗагрузки" + Или РеквизитПутьКДанным = "") + И ПодсистемаСуществуетДатыЗапретаИзменения Тогда + + Элементы.ГруппаДатыЗапретаЗагрузкиНастройка.Доступность = НаборКонстант.ИспользоватьДатыЗапретаЗагрузки; + + КонецЕсли; + + Если (РеквизитПутьКДанным = "НаборКонстант.ИспользоватьСинхронизациюДанных" + Или РеквизитПутьКДанным = "") + И ПодсистемаСуществуетОбменДанными Тогда + + Элементы.НастройкиСинхронизацииДанных.Доступность = НаборКонстант.ИспользоватьСинхронизациюДанных; + Элементы.ГруппаДатыЗапретаЗагрузки.Доступность = НаборКонстант.ИспользоватьСинхронизациюДанных; + Элементы.РезультатыСинхронизацииДанных.Доступность = НаборКонстант.ИспользоватьСинхронизациюДанных; Элементы.ГруппаВременныеКаталогиКластераСерверов.Доступность = НаборКонстант.ИспользоватьСинхронизациюДанных; + КонецЕсли; КонецПроцедуры diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/ПанельАдминистрированияБСП.mdo b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/ПанельАдминистрированияБСП.mdo index 3a990db9a..ef70c744a 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/ПанельАдминистрированияБСП.mdo +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/ПанельАдминистрированияБСП.mdo @@ -128,20 +128,6 @@ PersonalComputer MobileDevice - - УправлениеПолнотекстовымПоискомИИзвлечениемТекстов - - ru - Управление полнотекстовым поиском и извлечением текстов - - - - ru - - - PersonalComputer - MobileDevice - Форма diff --git a/SSL/src/DataProcessors/ПодключениеОбсуждений/Commands/ОтключениеОбсуждений/CommandModule.bsl b/SSL/src/DataProcessors/ПодключениеОбсуждений/Commands/ОтключениеОбсуждений/CommandModule.bsl new file mode 100644 index 000000000..5d4b9d25d --- /dev/null +++ b/SSL/src/DataProcessors/ПодключениеОбсуждений/Commands/ОтключениеОбсуждений/CommandModule.bsl @@ -0,0 +1,61 @@ + +#Область ОбработчикиСобытий + +&НаКлиенте +Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) + + Если Не СистемаВзаимодействия.ИнформационнаяБазаЗарегистрирована() Тогда + ПоказатьПредупреждение(, НСтр("ru = 'Подключение обсуждений не выполнено.'")); + Возврат; + КонецЕсли; + + Кнопки = Новый СписокЗначений; + Кнопки.Добавить("Отключить"); + Кнопки.Добавить(КодВозвратаДиалога.Нет); + + Оповещение = Новый ОписаниеОповещения("ПослеОтветаНаВопросОбОтключении", ЭтотОбъект); + + ПоказатьВопрос(Оповещение, НСтр("ru = 'Отключить обсуждения?'"), + Кнопки,, КодВозвратаДиалога.Нет); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаКлиенте +Процедура ПослеОтветаНаВопросОбОтключении(КодВозврата, Контекст) Экспорт + + Если КодВозврата = "Отключить" Тогда + ПриОтключении(); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОтключении() + + Оповещение = Новый ОписаниеОповещения("ПослеУспешногоОтключения", ЭтотОбъект,, + "ПриОбработкеОшибкиОтключения", ЭтотОбъект); + СистемаВзаимодействия.НачатьОтменуРегистрацииИнформационнойБазы(Оповещение); + +КонецПроцедуры + +&НаКлиенте +Процедура ПослеУспешногоОтключения(Контекст) Экспорт + + Оповестить("ОбсужденияПодключены", Ложь); + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОбработкеОшибкиОтключения(ИнформацияОбОшибке, СтандартнаяОбработка, Контекст) Экспорт + + СтандартнаяОбработка = Ложь; + ПоказатьИнформациюОбОшибке(ИнформацияОбОшибке); + +КонецПроцедуры + +#КонецОбласти + diff --git a/SSL/src/DataProcessors/ПодключениеОбсуждений/Forms/Форма/Form.form b/SSL/src/DataProcessors/ПодключениеОбсуждений/Forms/Форма/Form.form new file mode 100644 index 000000000..435b4fdfb --- /dev/null +++ b/SSL/src/DataProcessors/ПодключениеОбсуждений/Forms/Форма/Form.form @@ -0,0 +1,940 @@ + + + + Страницы + 3 + + ТребуетсяСоздатьАдминистратора + 42 + + ТребуетсяСоздатьАдминистратораКартинка + 60 + true + true + + true + + + ТребуетсяСоздатьАдминистратораКартинкаРасширеннаяПодсказка + 62 + Label + true + true + + Left + + + + ТребуетсяСоздатьАдминистратораКартинкаКонтекстноеМеню + 61 + true + + true + true + + + CommonPicture.Обсуждения + + + + + ТребуетсяСоздатьАдминистратораПояснение + 44 + + <key>ru</key> + <value>Для подключения обсуждений требуется создать учетную запись администратора программы. + +<link e1cib/list/Справочник.Пользователи>Перейти к списку пользователей</><link e1cib/list/Справочник.Пользователи>...</></value> + + true + true + + true + + + ТребуетсяСоздатьАдминистратораПояснениеРасширеннаяПодсказка + 46 + Label + true + true + + Left + + + + ТребуетсяСоздатьАдминистратораПояснениеКонтекстноеМеню + 45 + true + + true + Label + 50 + true + + + URLProcessing + ТребуетсяСоздатьАдминистратораПояснениеОбработкаНавигационнойСсылки + + Left + + + true + true + + true + + + <key>ru</key> + <value>Требуется создать администратора</value> + + + ТребуетсяСоздатьАдминистратораРасширеннаяПодсказка + 43 + Label + true + true + + Left + + + Page + + auto + false + + + + ПредложениеРегистрации + 15 + + ПояснениеРегистрацииКартинка + 63 + true + true + + true + + + ПояснениеРегистрацииКартинкаРасширеннаяПодсказка + 65 + Label + true + true + + Left + + + + ПояснениеРегистрацииКартинкаКонтекстноеМеню + 64 + true + + true + true + + + CommonPicture.Обсуждения + + + + + ПояснениеРегистрации + 28 + + ПредложениеРегистрацииПояснение + 17 + + <key>ru</key> + <value>Подключите обсуждения, и пользователи этой программы смогут общаться друг с другом в режиме реального времени, создавать тематические обсуждения и вести переписку по конкретным документам, например: заказам, реализациям или контрагентам. + +Подробнее см. <link https://its.1c.ru/db/v83doc#bookmark:utx:TI000000335>документацию</>.</value> + + true + true + + true + + + ПредложениеРегистрацииПояснениеРасширеннаяПодсказка + 19 + Label + true + true + + Left + + + + ПредложениеРегистрацииПояснениеКонтекстноеМеню + 18 + true + + true + Label + 50 + true + + Left + + + + АдресЭлектроннойПочты + 7 + true + true + + true + + + АдресЭлектроннойПочты + + None + + ru + Информационная база будет связана с этим адресом. + + ShowBottom + + АдресЭлектроннойПочтыРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + + АдресЭлектроннойПочтыКонтекстноеМеню + 8 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + Normal + + ru + Адрес электронной почты + + + + true + true + + true + + + <key>ru</key> + <value>Пояснение регистрации</value> + + + ПояснениеРегистрацииРасширеннаяПодсказка + 29 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + NormalSeparation + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Предложение регистрации</value> + + + ПредложениеРегистрацииРасширеннаяПодсказка + 16 + Label + true + true + + Left + + + Page + + auto + false + + + + ВводКодаРегистрации + 10 + + ПояснениеКодРегистрации + 32 + + <key>ru</key> + <value>Код регистрации отправлен на указанный адрес электронной почты.</value> + + true + true + + true + + + ПояснениеКодРегистрацииРасширеннаяПодсказка + 34 + Label + true + true + + Left + + + + ПояснениеКодРегистрацииКонтекстноеМеню + 33 + true + + Label + true + + Left + + + + КодРегистрации + 12 + true + true + + true + + + КодРегистрации + + None + + КодРегистрацииРасширеннаяПодсказка + 14 + Label + true + true + + Left + + + + КодРегистрацииКонтекстноеМеню + 13 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + Normal + + ru + Код регистрации + + + + true + true + + true + + + <key>ru</key> + <value>Ввод кода регистрации</value> + + + ВводКодаРегистрацииРасширеннаяПодсказка + 11 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + РегистрацияЗавершена + 71 + + РегистрацияЗавершенаКартинка + 73 + + <key>ru</key> + <value>Регистрация завершена картинка</value> + + true + true + + true + + + РегистрацияЗавершенаКартинкаРасширеннаяПодсказка + 75 + Label + true + true + + Left + + + + РегистрацияЗавершенаКартинкаКонтекстноеМеню + 74 + true + + true + true + + + CommonPicture.Обсуждения + + + + + РегистрацияЗавершенаПояснение + 76 + + <key>ru</key> + <value>К программе подключены обсуждения, и пользователи этой программы теперь могут общаться между собой.</value> + + true + true + + true + + + РегистрацияЗавершенаПояснениеРасширеннаяПодсказка + 78 + Label + true + true + + Left + + + + РегистрацияЗавершенаПояснениеКонтекстноеМеню + 77 + true + + true + Label + 50 + true + + + URLProcessing + ТребуетсяСоздатьАдминистратораПояснениеОбработкаНавигационнойСсылки + + Left + + + true + true + + true + + + <key>ru</key> + <value>Регистрация завершена</value> + + + РегистрацияЗавершенаРасширеннаяПодсказка + 72 + Label + true + true + + Left + + + Page + + auto + false + + + + ДлительнаяОперация + 52 + + ДлительнаяОперацияКартинка + 57 + + <key>ru</key> + <value>Длительная операция картинка</value> + + true + true + + true + + + ДлительнаяОперацияКартинкаРасширеннаяПодсказка + 59 + Label + true + true + + Left + + + + ДлительнаяОперацияКартинкаКонтекстноеМеню + 58 + true + + true + true + + + CommonPicture.ДлительнаяОперация48 + + + + + ПожалуйстаПодождите + 54 + + <key>ru</key> + <value> +Пожалуйста подождите...</value> + + true + true + + true + + + ПожалуйстаПодождитеРасширеннаяПодсказка + 56 + Label + true + true + + Left + + + + ПожалуйстаПодождитеКонтекстноеМеню + 55 + true + + Label + true + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Длительная операция</value> + + + ДлительнаяОперацияРасширеннаяПодсказка + 53 + Label + true + true + + Left + + + Page + + auto + false + + + true + true + + true + + + <key>ru</key> + <value>Страницы</value> + + + СтраницыРасширеннаяПодсказка + 4 + Label + true + true + + Left + + + Pages + + Auto + + + + КомандныеПанели + 85 + + ЛеваяКоманднаяПанель + 81 + + Назад + 79 + true + true + + true + + + НазадРасширеннаяПодсказка + 80 + Label + true + true + + Left + + + Form.Command.Назад + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Левая командная панель</value> + + + ЛеваяКоманднаяПанельРасширеннаяПодсказка + 82 + Label + true + true + + Left + + + CommandBar + + Left + + + + ПраваяКоманднаяПанель + 83 + + Зарегистрироваться + 24 + true + true + + true + + + ЗарегистрироватьсяРасширеннаяПодсказка + 25 + Label + true + true + + Left + + + Form.Command.Зарегистрироваться + Auto + true + true + true + UserCmds + Auto + + + Закрыть + 47 + + <key>ru</key> + <value>Закрыть</value> + + true + true + + true + + + ЗакрытьРасширеннаяПодсказка + 48 + Label + true + true + + Left + + + Form.StandardCommand.Close + Normal + Auto + true + true + UserCmds + Auto + + + Справка + 1 + true + true + + true + + + СправкаРасширеннаяПодсказка + 2 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Правая командная панель</value> + + + ПраваяКоманднаяПанельРасширеннаяПодсказка + 84 + Label + true + true + + Left + + + CommandBar + + Right + + + true + true + + true + + + <key>ru</key> + <value>Командные панели</value> + + + КомандныеПанелиРасширеннаяПодсказка + 86 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + Bottom + true + + ФормаКоманднаяПанель + -1 + Right + + + OnCreateAtServer + ПриСозданииНаСервере + + LockWholeInterface + true + true + true + Vertical + true + true + auto + true + + Объект + 1 + + DataProcessorObject.ПодключениеОбсуждений + + + true + + + true + +
        true
        +
        + + АдресЭлектроннойПочты + + <key>ru</key> + <value>Адрес электронной почты</value> + + 2 + + String + + + + true + + + true + + + + КодРегистрации + + <key>ru</key> + <value>Код регистрации</value> + + 3 + + String + + + + true + + + true + + + + КонтейнерСостояний + + <key>ru</key> + <value>Контейнер состояний</value> + + 6 + + + true + + + true + + + + Зарегистрироваться + + <key>ru</key> + <value>Зарегистрироваться ></value> + + 1 + + true + + + + Зарегистрироваться + + + DontUse + Auto + + + Назад + + <key>ru</key> + <value>< Назад</value> + + 2 + + 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..7a2268823 --- /dev/null +++ b/SSL/src/DataProcessors/ПодключениеОбсуждений/Forms/Форма/Help/ru.html @@ -0,0 +1,13 @@ + +

        Предназначена для подключения обсуждений.

        +

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

        +

        Для участия в обсуждениях необходимо подключиться к серверу 1С:Диалог.

        +

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

        +

        Подключение обсуждений

        +
        • Напишите адрес электронной почты, на которую будет выслан цифровой код. +
          • Впоследствии информационная база будет связана с этим электронным адресом, при этом необходимые данные информационной базы будут автоматически указаны на сервере 1С:Диалог.
        • Нажмите кнопку Зарегистрироваться. +
        • После этого выводится сообщение Код регистрации выслан на адрес (указанный ранее адрес электронной почты). +
          • Нажмите кнопку ОК. +
          • Письмо с кодом регистрации необходимо найти в ящике электронной почты по адресу, который был указан.
        • Код, полученный на указанный адрес электронной почты, напишите в окне Подключение обсуждений. Нажмите кнопку Зарегистрироваться. +
        • После этого производится подключение обсуждений. Теперь пользователи информационной базы могут общаться между собой. +
        • Нажмите кнопку Готово, для того чтобы продолжить работу в программе.
        \ 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..711a1450a --- /dev/null +++ b/SSL/src/DataProcessors/ПодключениеОбсуждений/Forms/Форма/Module.bsl @@ -0,0 +1,289 @@ + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + + Если Не ПравоДоступа("РегистрацияИнформационнойБазыСистемыВзаимодействия", Метаданные) Тогда + Отказ = Истина; + Возврат; + КонецЕсли; + + КонтейнерСостояний = Новый Структура; + КонтейнерСостояний.Вставить("СерверВзаимодействия", "wss://1cdialog.com:443"); + КонтейнерСостояний.Вставить("ИмяИнформационнойБазы", Метаданные.КраткаяИнформация); + КонтейнерСостояний.Вставить("СостояниеРегистрации", ТекущееСостояниеРегистрации()); + // Возможные значения: + // "ТребуетсяСоздатьАдминистратора" + // "НеЗарегистрирована" + // "Зарегистрирована" + // "ОжиданиеВводаКодаПодтверждения" + // "ОжиданиеОтветаСервераВзаимодействия". + + ПриИзмененииСостоянияФормы(КонтейнерСостояний, ЭтотОбъект); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы + +&НаКлиенте +Процедура ТребуетсяСоздатьАдминистратораПояснениеОбработкаНавигационнойСсылки(Элемент, + НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка) + + Закрыть(); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура Зарегистрироваться(Команда) + + Если ПустаяСтрока(АдресЭлектроннойПочты) Тогда + ПоказатьПредупреждение(, НСтр("ru = 'Адрес электронной почты не заполнен'")); + Возврат; + КонецЕсли; + + Если Не ОбщегоНазначенияКлиентСервер.АдресЭлектроннойПочтыСоответствуетТребованиям(АдресЭлектроннойПочты) Тогда + ПоказатьПредупреждение(, НСтр("ru = 'Адрес электронной почты содержит ошибки'")); + Возврат; + КонецЕсли; + + СостояниеРегистрации = КонтейнерСостояний.СостояниеРегистрации; + + Если СостояниеРегистрации = "НеЗарегистрирована" Тогда + ПриПолученииКодаРегистрации(); + ИначеЕсли СостояниеРегистрации = "ОжиданиеВводаКодаПодтверждения" Тогда + ПриРегистрации(); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура Назад(Команда) + + СостояниеРегистрации = КонтейнерСостояний.СостояниеРегистрации; + + Если СостояниеРегистрации = "ОжиданиеВводаКодаПодтверждения" Тогда + ПриОтказеОтВводаКодаПодтверждения(); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +#Область СлужебныеОбработчикиСобытий + +&НаКлиенте +Процедура ПриПолученииКодаРегистрации() + + СерверВзаимодействия = КонтейнерСостояний.СерверВзаимодействия; + + ПараметрыРегистрации = Новый ПараметрыРегистрацииИнформационнойБазыСистемыВзаимодействия; + ПараметрыРегистрации.АдресСервера = СерверВзаимодействия; + ПараметрыРегистрации.АдресЭлектроннойПочты = АдресЭлектроннойПочты; + + Оповещение = Новый ОписаниеОповещения("ПослеУспешногоПолученияКодаРегистрации", ЭтотОбъект,, + "ПриОбработкеОшибкиПолученияКодаРегистрации", ЭтотОбъект); + СистемаВзаимодействия.НачатьРегистрациюИнформационнойБазы(Оповещение, ПараметрыРегистрации); + + КонтейнерСостояний.СостояниеРегистрации = "ОжиданиеОтветаСервераВзаимодействия"; + ПриИзмененииСостоянияФормы(КонтейнерСостояний, ЭтотОбъект); + +КонецПроцедуры + +&НаКлиенте +Процедура ПослеУспешногоПолученияКодаРегистрации(РегистрацияВыполнена, ТекстСообщения, Контекст) Экспорт + + ПоказатьПредупреждение(, ТекстСообщения); + + КонтейнерСостояний.СостояниеРегистрации = "ОжиданиеВводаКодаПодтверждения"; + ПриИзмененииСостоянияФормы(КонтейнерСостояний, ЭтотОбъект); + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОбработкеОшибкиПолученияКодаРегистрации(ИнформацияОбОшибке, СтандартнаяОбработка, Контекст) Экспорт + + СтандартнаяОбработка = Ложь; + ПоказатьИнформациюОбОшибке(ИнформацияОбОшибке); + + КонтейнерСостояний.СостояниеРегистрации = "НеЗарегистрирована"; + ПриИзмененииСостоянияФормы(КонтейнерСостояний, ЭтотОбъект); + +КонецПроцедуры + +&НаКлиенте +Процедура ПриРегистрации() + + Если ПустаяСтрока(КодРегистрации) Тогда + ПоказатьПредупреждение(, НСтр("ru = 'Код регистрации не заполнен'")); + Возврат; + КонецЕсли; + + СерверВзаимодействия = КонтейнерСостояний.СерверВзаимодействия; + ИмяИнформационнойБазы = КонтейнерСостояний.ИмяИнформационнойБазы; + + ПараметрыРегистрации = Новый ПараметрыРегистрацииИнформационнойБазыСистемыВзаимодействия; + ПараметрыРегистрации.АдресСервера = СерверВзаимодействия; + ПараметрыРегистрации.АдресЭлектроннойПочты = АдресЭлектроннойПочты; + ПараметрыРегистрации.ИмяИнформационнойБазы = ИмяИнформационнойБазы; + ПараметрыРегистрации.КодАктивации = СокрЛП(КодРегистрации); + + Оповещение = Новый ОписаниеОповещения("ПослеУспешнойРегистрации", ЭтотОбъект,, + "ПриОбработкеОшибкиРегистрации", ЭтотОбъект); + + СистемаВзаимодействия.НачатьРегистрациюИнформационнойБазы(Оповещение, ПараметрыРегистрации); + + КонтейнерСостояний.СостояниеРегистрации = "ОжиданиеОтветаСервераВзаимодействия"; + ПриИзмененииСостоянияФормы(КонтейнерСостояний, ЭтотОбъект); + +КонецПроцедуры + +&НаКлиенте +Процедура ПослеУспешнойРегистрации(РегистрацияВыполнена, ТекстСообщения, Контекст) Экспорт + + Если РегистрацияВыполнена Тогда + Оповестить("ОбсужденияПодключены", Истина); + КонтейнерСостояний.СостояниеРегистрации = "Зарегистрирована"; + Иначе + ПоказатьПредупреждение(, ТекстСообщения); + КонтейнерСостояний.СостояниеРегистрации = "ОжиданиеВводаКодаПодтверждения"; + КонецЕсли; + + ПриИзмененииСостоянияФормы(КонтейнерСостояний, ЭтотОбъект); + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОбработкеОшибкиРегистрации(ИнформацияОбОшибке, СтандартнаяОбработка, Контекст) Экспорт + + СтандартнаяОбработка = Ложь; + ПоказатьИнформациюОбОшибке(ИнформацияОбОшибке); + + КонтейнерСостояний.СостояниеРегистрации = "ОжиданиеВводаКодаПодтверждения"; + ПриИзмененииСостоянияФормы(КонтейнерСостояний, ЭтотОбъект); + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОтказеОтВводаКодаПодтверждения() + + Оповещение = Новый ОписаниеОповещения("ПослеПодтвержденияОтказаВводаКодаПодтверждения", ЭтотОбъект); + ПоказатьВопрос(Оповещение, + НСтр("ru = 'При отказе от ввода высланный на электронную почту код станет недействительным. + |Продолжение будет возможно только с запросом нового кода.'"), + РежимДиалогаВопрос.ОКОтмена,, КодВозвратаДиалога.Отмена); + +КонецПроцедуры + +&НаКлиенте +Процедура ПослеПодтвержденияОтказаВводаКодаПодтверждения(РезультатВопроса, Контекст) Экспорт + + Если РезультатВопроса = КодВозвратаДиалога.ОК Тогда + КонтейнерСостояний.СостояниеРегистрации = "НеЗарегистрирована"; + ПриИзмененииСостоянияФормы(КонтейнерСостояний, ЭтотОбъект); + КонецЕсли; + +КонецПроцедуры + +&НаКлиентеНаСервереБезКонтекста +Процедура ПриИзмененииСостоянияФормы(КонтейнерСостояний, ЭтотОбъект) + + СостояниеРегистрации = КонтейнерСостояний.СостояниеРегистрации; + + Если СостояниеРегистрации = "ОжиданиеВводаКодаПодтверждения" Тогда + ЭтотОбъект.КодРегистрации = ""; + КонецЕсли; + + УстановитьСтраницу(КонтейнерСостояний, ЭтотОбъект); + + Элементы = ЭтотОбъект.Элементы; + + ОбновитьВидимостьКнопокКоманднойПанели(КонтейнерСостояний, + Элементы.Зарегистрироваться, Элементы.Закрыть, Элементы.Назад); + +КонецПроцедуры + +#КонецОбласти + +#Область МодельПредставления + +&НаСервереБезКонтекста +Функция ТекущееСостояниеРегистрации() + + ТекущийПользователь = ПользователиИнформационнойБазы.ТекущийПользователь(); + + Если ПустаяСтрока(ТекущийПользователь.Имя) Тогда + Возврат "ТребуетсяСоздатьАдминистратора"; + КонецЕсли; + + Возврат ?(СистемаВзаимодействия.ИнформационнаяБазаЗарегистрирована(), + "Зарегистрирована", "НеЗарегистрирована"); + +КонецФункции + +#КонецОбласти + +#Область Представления + +&НаКлиентеНаСервереБезКонтекста +Процедура УстановитьСтраницу(КонтейнерСостояний, ЭтотОбъект) + + СостояниеРегистрации = КонтейнерСостояний.СостояниеРегистрации; + Элементы = ЭтотОбъект.Элементы; + + Если СостояниеРегистрации = "ТребуетсяСоздатьАдминистратора" Тогда + Элементы.Страницы.ТекущаяСтраница = Элементы.ТребуетсяСоздатьАдминистратора; + ИначеЕсли СостояниеРегистрации = "НеЗарегистрирована" Тогда + Элементы.Страницы.ТекущаяСтраница = Элементы.ПредложениеРегистрации; + ИначеЕсли СостояниеРегистрации = "ОжиданиеВводаКодаПодтверждения" Тогда + Элементы.Страницы.ТекущаяСтраница = Элементы.ВводКодаРегистрации; + ИначеЕсли СостояниеРегистрации = "ОжиданиеОтветаСервераВзаимодействия" Тогда + Элементы.Страницы.ТекущаяСтраница = Элементы.ДлительнаяОперация; + ИначеЕсли СостояниеРегистрации = "Зарегистрирована" Тогда + Элементы.Страницы.ТекущаяСтраница = Элементы.РегистрацияЗавершена; + КонецЕсли; + +КонецПроцедуры + +&НаКлиентеНаСервереБезКонтекста +Процедура ОбновитьВидимостьКнопокКоманднойПанели(КонтейнерСостояний, + Зарегистрироваться, Закрыть, Назад) + + СостояниеРегистрации = КонтейнерСостояний.СостояниеРегистрации; + + Если СостояниеРегистрации = "ТребуетсяСоздатьАдминистратора" Тогда + Зарегистрироваться.Видимость = Ложь; + Назад.Видимость = Ложь; + ИначеЕсли СостояниеРегистрации = "НеЗарегистрирована" Тогда + Зарегистрироваться.Видимость = Истина; + Назад.Видимость = Ложь; + ИначеЕсли СостояниеРегистрации = "ОжиданиеВводаКодаПодтверждения" Тогда + Зарегистрироваться.Видимость = Истина; + Назад.Видимость = Истина; + ИначеЕсли СостояниеРегистрации = "ОжиданиеОтветаСервераВзаимодействия" Тогда + Зарегистрироваться.Видимость = Ложь; + Назад.Видимость = Ложь; + ИначеЕсли СостояниеРегистрации = "Зарегистрирована" Тогда + Зарегистрироваться.Видимость = Ложь; + Назад.Видимость = Ложь; + Закрыть.КнопкаПоУмолчанию = Истина; + Закрыть.Заголовок = НСтр("ru = 'Готово'"); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПодключениеОбсуждений/ПодключениеОбсуждений.mdo b/SSL/src/DataProcessors/ПодключениеОбсуждений/ПодключениеОбсуждений.mdo new file mode 100644 index 000000000..8e85e2e81 --- /dev/null +++ b/SSL/src/DataProcessors/ПодключениеОбсуждений/ПодключениеОбсуждений.mdo @@ -0,0 +1,37 @@ + + + + + + + ПодключениеОбсуждений + + ru + Подключение обсуждений + + true + DataProcessor.ПодключениеОбсуждений.Form.Форма + + Форма + + ru + Форма + + + + ru + + + PersonalComputer + MobileDevice + + + ОтключениеОбсуждений + + ru + Отключение обсуждений + + ActionsPanelTools + Auto + + diff --git a/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПоискДублей/Module.bsl b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПоискДублей/Module.bsl index 05e6dadf0..4a7168e2d 100644 --- a/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПоискДублей/Module.bsl +++ b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПоискДублей/Module.bsl @@ -1466,6 +1466,11 @@ Активизировать(); ТекущаяСтраница = Элементы.ШагиМастера.ТекущаяСтраница; + // задание было отменено. + Если Задание = Неопределено Тогда + Возврат; + КонецЕсли; + Если Задание.Статус <> "Выполнено" Тогда // Фоновое задание завершено с ошибкой. Если ТекущаяСтраница = Элементы.ШагВыполнениеПоиска Тогда diff --git a/SSL/src/DataProcessors/ПоискИУдалениеДублей/ObjectModule.bsl b/SSL/src/DataProcessors/ПоискИУдалениеДублей/ObjectModule.bsl index ef7d6aee7..14a691018 100644 --- a/SSL/src/DataProcessors/ПоискИУдалениеДублей/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ПоискИУдалениеДублей/ObjectModule.bsl @@ -122,7 +122,13 @@ СтруктураДополнительныхПолей = Новый Структура(ПоляДополнительныхДанных); // 2. Конструируем по возможно измененному компоновщику условия отбора. - Характеристики = Новый Структура("ДлинаКода, ДлинаНомера, ДлинаНаименования, Иерархический, ВидИерархии", 0, 0, 0, Ложь); + Характеристики = Новый Структура; + Характеристики.Вставить("ДлинаКода", 0); + Характеристики.Вставить("ДлинаНомера", 0); + Характеристики.Вставить("ДлинаНаименования", 0); + Характеристики.Вставить("Иерархический", Ложь); + Характеристики.Вставить("ВидИерархии", Неопределено); + ЗаполнитьЗначенияСвойств(Характеристики, ОбъектМетаданных); ЕстьНаименование = Характеристики.ДлинаНаименования > 0; @@ -314,10 +320,16 @@ Выборка2 = ИнициализироватьВыборкуКД(СхемаКД, НастройкиКД); Таблица2 = Выборка2.ПроцессорВыводаКД.Вывести(Выборка2.ПроцессорКД); - FuzzySearch = ОбщегоНазначения.ПодключитьКомпонентуИзМакета("FuzzyStringMatchExtension", "ОбщийМакет.КомпонентаПоискаСтрок"); - - Если FuzzySearch <> Неопределено И СтруктураПолейПодобия.Количество() > 0 Тогда + Если СтруктураПолейПодобия.Количество() > 0 Тогда + FuzzySearch = ОбщегоНазначения.ПодключитьКомпонентуИзМакета("FuzzyStringMatchExtension", "ОбщийМакет.КомпонентаПоискаСтрок"); + Если FuzzySearch = Неопределено Тогда + Результат.ОписаниеОшибки = + НСтр("ru = 'Не удалось подключить внешнюю компоненту FuzzyStringMatchExtension + |из макета ""ОбщийМакет.КомпонентаПоискаСтрок"" + |Подробнее см. в журнале регистрации.'"); + Возврат Результат; + КонецЕсли; Для Каждого КлючЗначение Из СтруктураПолейПодобия Цикл ИмяПоля = КлючЗначение.Ключ; МассивСтрок = Таблица2.ВыгрузитьКолонку(ИмяПоля); @@ -637,13 +649,14 @@ КонецФункции // [ОбщегоНазначения.ЗаменитьСсылки] -Функция ЗаменитьСсылки(Знач ПарыЗамен, Знач Параметры = Неопределено, Знач АдресРезультата = "") +Процедура ЗаменитьСсылки(Знач ПарыЗамен, Знач Параметры = Неопределено, Знач АдресРезультата = "") Результат = ОбщегоНазначения.ЗаменитьСсылки(ПарыЗамен, Параметры); Если АдресРезультата <> "" Тогда ПоместитьВоВременноеХранилище(Результат, АдресРезультата); - КонецЕсли; -КонецФункции + КонецЕсли; + +КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// // Прочие. diff --git a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/ВыборОбластиПоиска/Module.bsl b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/ВыборОбластиПоиска/Module.bsl index 8260dbd5e..d8d3919cb 100644 --- a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/ВыборОбластиПоиска/Module.bsl +++ b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/ВыборОбластиПоиска/Module.bsl @@ -105,7 +105,7 @@ КоллекцияЭлементовДерева = ДеревоРазделовПоиска.ПолучитьЭлементы(); ЭлементДеревоРазделов = Элементы.ДеревоРазделовПоиска; - Для каждого ЭлементДерева Из ДеревоРазделовПоиска.ПолучитьЭлементы() Цикл + Для каждого ЭлементДерева Из КоллекцияЭлементовДерева Цикл ЭлементДеревоРазделов.Свернуть(ЭлементДерева.ПолучитьИдентификатор()); КонецЦикла; diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/УправлениеПолнотекстовымПоискомИИзвлечениемТекстов/Form.form b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/УправлениеПолнотекстовымПоискомИИзвлечениемТекстов/Form.form similarity index 100% rename from SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/УправлениеПолнотекстовымПоискомИИзвлечениемТекстов/Form.form rename to SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/УправлениеПолнотекстовымПоискомИИзвлечениемТекстов/Form.form diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/УправлениеПолнотекстовымПоискомИИзвлечениемТекстов/Help/ru.html b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/УправлениеПолнотекстовымПоискомИИзвлечениемТекстов/Help/ru.html similarity index 97% rename from SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/УправлениеПолнотекстовымПоискомИИзвлечениемТекстов/Help/ru.html rename to SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/УправлениеПолнотекстовымПоискомИИзвлечениемТекстов/Help/ru.html index 3ae17d96f..10120a82d 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/УправлениеПолнотекстовымПоискомИИзвлечениемТекстов/Help/ru.html +++ b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/УправлениеПолнотекстовымПоискомИИзвлечениемТекстов/Help/ru.html @@ -27,5 +27,4 @@ TD {
      • Тип требования: Назначать.
      • Имя ИБ: не указывается.
      • Значение дополнительного параметра: BackgroundJob.CommonModule.ПолнотекстовыйПоискСервер.ОбновлениеИндексаППДПоРасписанию.
    • В кластере нет серверов под управлением ОС Windows (все сервера в кластере только под управлением ОС Linux) - в этом случае с помощью команды Запустить извлечение текстов можно начать извлечение текстов в тонком клиенте на рабочей станции под управлением ОС Windows.
      • Если в клиент-серверном варианте один или несколько рабочих процессов сервера работают под Linux, а часть или все клиенты подключаются с помощью веб-клиента, то в информационной базе могут быть добавлены файлы, текст из которых не извлечен, и соответственно эти файлы не могут быть найдены полнотекстовым поиском по содержимому. В этом случае на одном из клиентских компьютеров, работающих под управлением ОС Microsoft Windows, нужно запустить тонкий или толстый клиент, и на нем выполнить команду Извлечение текстов, для того чтобы в автоматическом режиме извлекать текст из файлов. По умолчанию интервал времени выполнения равен 60 секундам.

    См. также:

    -
  • Настройки программы; -
  • Работа с формами.
  • \ 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 similarity index 95% rename from SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/УправлениеПолнотекстовымПоискомИИзвлечениемТекстов/Module.bsl rename to SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/УправлениеПолнотекстовымПоискомИИзвлечениемТекстов/Module.bsl index a56506246..de76b078b 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/УправлениеПолнотекстовымПоискомИИзвлечениемТекстов/Module.bsl +++ b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/УправлениеПолнотекстовымПоискомИИзвлечениемТекстов/Module.bsl @@ -13,17 +13,20 @@ Возврат; КонецЕсли; - // Значения реквизитов формы - ИзвлекатьТекстыФайловНаСервере = НаборКонстант.ИзвлекатьТекстыФайловНаСервере; - - // Настройки видимости при запуске. - Элементы.ГруппаАвтоматическоеИзвлечениеТекстов.Видимость = - Пользователи.ЭтоПолноправныйПользователь(, Истина) - И Не ОбщегоНазначения.РазделениеВключено(); - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") И Пользователи.ЭтоПолноправныйПользователь() Тогда + // Настройки видимости при запуске. + Элементы.ГруппаАвтоматическоеИзвлечениеТекстов.Видимость = + Пользователи.ЭтоПолноправныйПользователь(, Истина) + И Не ОбщегоНазначения.РазделениеВключено(); + + Иначе + Элементы.ГруппаАвтоматическоеИзвлечениеТекстов.Видимость = Ложь; + КонецЕсли; + + Если Элементы.ГруппаАвтоматическоеИзвлечениеТекстов.Видимость Тогда + Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда СписокВыбора = Элементы.ИзвлекатьТекстыФайловНаСервереWindows.СписокВыбора; СписокВыбора[0].Представление = НСтр("ru = 'Все рабочие станции работают под управлением ОС Windows'"); @@ -31,10 +34,10 @@ СписокВыбора = Элементы.ИзвлекатьТекстыФайловНаСервереLinux.СписокВыбора; СписокВыбора[0].Представление = НСтр("ru = 'Одна или несколько рабочих станций работают под управлением ОС Linux'"); КонецЕсли; - Иначе - Элементы.ГруппаАвтоматическоеИзвлечениеТекстов.Видимость = Ложь; - КонецЕсли; - Если Элементы.ГруппаАвтоматическоеИзвлечениеТекстов.Видимость Тогда + + // Значения реквизитов формы + ИзвлекатьТекстыФайловНаСервере = НаборКонстант.ИзвлекатьТекстыФайловНаСервере; + СведенияОРегламентныхЗаданиях = Новый Структура; ЗаполнитьСведенияОРегламентномЗадании("ИзвлечениеТекста"); Иначе @@ -50,7 +53,6 @@ СтандартныеПодсистемыСервер.УстановитьОтображениеЗаголовковГрупп( ЭтотОбъект, "ГруппаАвтоматическоеИзвлечениеТекстов"); - КонецПроцедуры &НаКлиенте @@ -329,8 +331,7 @@ Процедура УстановитьДоступность(РеквизитПутьКДанным = "", ИндексПроверен = Ложь) Если РеквизитПутьКДанным = "" Или РеквизитПутьКДанным = "ИспользоватьПолнотекстовыйПоиск" Тогда - МодульПолнотекстовыйПоискСервер = ОбщегоНазначения.ОбщийМодуль("ПолнотекстовыйПоискСервер"); - Если НаборКонстант.ИспользоватьПолнотекстовыйПоиск <> МодульПолнотекстовыйПоискСервер.ОперацииРазрешены() Тогда + Если НаборКонстант.ИспользоватьПолнотекстовыйПоиск <> ПолнотекстовыйПоискСервер.ОперацииРазрешены() Тогда ИспользоватьПолнотекстовыйПоиск = 2; Иначе ИспользоватьПолнотекстовыйПоиск = НаборКонстант.ИспользоватьПолнотекстовыйПоиск; @@ -350,8 +351,7 @@ Если ИспользоватьПолнотекстовыйПоиск = 1 Тогда ДатаАктуальностиИндекса = ПолнотекстовыйПоиск.ДатаАктуальности(); - МодульПолнотекстовыйПоискСервер = ОбщегоНазначения.ОбщийМодуль("ПолнотекстовыйПоискСервер"); - ИндексАктуален = МодульПолнотекстовыйПоискСервер.ИндексПоискаАктуален(); + ИндексАктуален = ПолнотекстовыйПоискСервер.ИндексПоискаАктуален(); ФлагДоступность = НЕ ИндексАктуален; Если ИндексПроверен И Не ИндексСодержитКорректныеДанные Тогда СтатусИндекса = НСтр("ru = 'Требуется очистка и обновление'"); diff --git a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/ManagerModule.bsl b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/ManagerModule.bsl index 6fb3652e2..cf7eae488 100644 --- a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/ManagerModule.bsl +++ b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/ManagerModule.bsl @@ -10,226 +10,3 @@ КонецПроцедуры #КонецОбласти - -#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда - -#Область СлужебныйПрограммныйИнтерфейс - -Функция ПараметрыПоиска() Экспорт - - Параметры = Новый Структура; - Параметры.Вставить("СтрокаПоиска", 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 572d0237c..b9c5a45f9 100644 --- a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/ПолнотекстовыйПоискВДанных.mdo +++ b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/ПолнотекстовыйПоискВДанных.mdo @@ -9,6 +9,7 @@ ruПолнотекстовый поиск + DataProcessor.ПолнотекстовыйПоискВДанных.Form.УпрощеннаяФормаtrue @@ -38,6 +39,20 @@ PersonalComputer MobileDevice + + УправлениеПолнотекстовымПоискомИИзвлечениемТекстов + + ru + Управление полнотекстовым поиском и извлечением текстов + + + + ru + + + PersonalComputer + MobileDevice + ПолнотекстовыйПоиск diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/Форма/Module.bsl index e6fec8c52..42c135233 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/Форма/Module.bsl @@ -57,9 +57,6 @@ // Значение по умолчанию для вида транспорта сообщений обмена. Объект.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.FILE; - // Выполняем проверку наличия для плана обмена формы создания начального образа. - ФормаСозданияНачальногоОбразаСуществует = (Метаданные.ПланыОбмена[Объект.ИмяПланаОбмена].Формы.Найти("ФормаСозданияНачальногоОбраза") <> Неопределено); - // Получаем значения по умолчанию для плана обмена. МенеджерПланаОбмена = ПланыОбмена[Объект.ИмяПланаОбмена]; diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ObjectModule.bsl b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ObjectModule.bsl index c140cc0b7..94ffbdb5d 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ObjectModule.bsl @@ -731,6 +731,28 @@ КонецЕсли; + ИспользоватьПрефиксыДляНастройкиОбмена = Не (ОбменДаннымиСервер.ЭтоПланОбменаXDTO(ИмяПланаОбмена) + И ОбменДаннымиXDTOСервер.ПоддерживаетсяВерсияСИдентификаторомОбменаДанными(ПланыОбмена[ИмяПланаОбмена].ПустаяСсылка())); + + Если ИспользоватьПрефиксыДляНастройкиОбмена Тогда + Если ОбщегоНазначения.РазделениеВключено() Тогда + ПрефиксИнформационнойБазыИсточника = ОбменДаннымиСервер.КодПредопределенногоУзлаПланаОбмена(ИмяПланаОбмена); + Иначе + ПрефиксИнформационнойБазыИсточника = ПолучитьФункциональнуюОпцию("ПрефиксИнформационнойБазы"); + КонецЕсли; + ПрефиксИнформационнойБазыИсточникаУстановлен = ЗначениеЗаполнено(ПрефиксИнформационнойБазыИсточника); + Иначе + КодПредопределенногоУзла = ОбменДаннымиСервер.КодПредопределенногоУзлаПланаОбмена(ИмяПланаОбмена); + ИдентификаторИнформационнойБазыИсточника = КодПредопределенногоУзла; + ПрефиксИнформационнойБазыПриемникаУстановлен = Ложь; + ПрефиксИнформационнойБазыИсточникаУстановлен = Истина; + КонецЕсли; + + Если Не ПрефиксИнформационнойБазыИсточникаУстановлен + И ИспользоватьПрефиксыДляНастройкиОбмена Тогда + ОбменДаннымиПереопределяемый.ПриОпределенииПрефиксаИнформационнойБазыПоУмолчанию(ПрефиксИнформационнойБазыИсточника); + КонецЕсли; + КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// @@ -838,7 +860,8 @@ КодЭтогоУзлаВБазе = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ЭтотУзел, "Код"); ЭтоПланОбменаРИБ = Метаданные.ПланыОбмена[ИмяПланаОбмена].РаспределеннаяИнформационнаяБаза; Если ПустаяСтрока(ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ЭтотУзел, "Код")) - Или (ЭтоПланОбменаРИБ И КодЭтогоУзлаВБазе <> КодЭтогоУзла) Тогда + Или (ЭтоПланОбменаРИБ И КодЭтогоУзлаВБазе <> КодЭтогоУзла) + Или (ИспользоватьПрефиксыДляНастройкиОбмена И КодЭтогоУзлаВБазе <> КодЭтогоУзла) Тогда ЭтотУзелОбъект = ЭтотУзел.ПолучитьОбъект(); ЭтотУзелОбъект.Код = КодЭтогоУзла; ЭтотУзелОбъект.Наименование = НаименованиеЭтойБазы; @@ -917,8 +940,8 @@ Если КодЭтогоУзла <> КодЭтогоУзлаВБазе И ИспользоватьПрефиксыДляНастройкиОбмена Тогда // Узел в базе корреспонденте нуждается в перекодировании. - СтруктураВременныйКод = Новый Структура("Корреспондент, КодУзла",УзелИнформационнойБазы,КодЭтогоУзла); - ОбменДаннымиСервер.ДобавитьЗаписьВРегистрСведений(СтруктураВременныйКод,"ПсевдонимыПредопределенныхУзлов"); + СтруктураВременныйКод = Новый Структура("Корреспондент, КодУзла", УзелИнформационнойБазы, КодЭтогоУзла); + ОбменДаннымиСервер.ДобавитьЗаписьВРегистрСведений(СтруктураВременныйКод, "ПсевдонимыПредопределенныхУзлов"); КонецЕсли; КонецПроцедуры diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВыборГруппы/Form.form b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВыборГруппы/Form.form index 38c916664..7183ebfc5 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВыборГруппы/Form.form +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВыборГруппы/Form.form @@ -367,7 +367,7 @@ ЛОЖЬ КАК ЭтоГруппа, &ВладелецФайла КАК ВладелецФайла ИЗ - Справочник.Пользователи КАК ИдентификаторыОбъектовМетаданных + Справочник.Пользователи КАК ИдентификаторыОбъектовМетаданныхПереопределяемый Catalog.Пользователи true true diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВыборГруппы/Module.bsl b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВыборГруппы/Module.bsl index b2e0ac259..c97362ff1 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВыборГруппы/Module.bsl +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВыборГруппы/Module.bsl @@ -3,14 +3,17 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; КонецЕсли; - НастроитьДинамическийСписок(); УстановитьУсловноеОформление(); + НастроитьДинамическийСписок(); + КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -20,27 +23,27 @@ УсловноеОформление.Элементы.Очистить(); Список.УсловноеОформление.Элементы.Очистить(); + Список.Группировка.Элементы.Очистить(); - Элемент = УсловноеОформление.Элементы.Добавить(); + Элемент = Список.УсловноеОформление.Элементы.Добавить(); ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); - ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Список.ВладелецФайла"); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ВладелецФайла"); ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеРавно; ОтборЭлемента.ПравоеЗначение = Параметры.ВладелецФайлов; ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); - ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Список.ЭтоГруппа"); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ЭтоГруппа"); ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; ОтборЭлемента.ПравоеЗначение = Истина; - ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); - ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СписокСтандартнаяКартинка.Имя); - ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); - ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СписокНаименование.Имя); - Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь); Элемент.Оформление.УстановитьЗначениеПараметра("Отображать", Ложь); + ЭлементГруппировки = Список.Группировка.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных")); + ЭлементГруппировки.Использование = Истина; + ЭлементГруппировки.Поле = Новый ПолеКомпоновкиДанных("ВладелецФайла"); + КонецПроцедуры &НаСервере diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ГруппаФайлов/Module.bsl b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ГруппаФайлов/Module.bsl index de3346091..5b6dde087 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ГруппаФайлов/Module.bsl +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ГруппаФайлов/Module.bsl @@ -12,7 +12,7 @@ Если ЭтоНоваяГруппа Тогда ОбъектЗначение = Справочники[Параметры.ИмяСправочникаХранилищаФайлов].СоздатьГруппу(); - ОбъектЗначение.Родитель = ?(Параметры.Родитель.ЭтоГруппа, Параметры.Родитель, Неопределено); + ОбъектЗначение.Родитель = ?(Параметры.Родитель <> Неопределено И Параметры.Родитель.ЭтоГруппа, Параметры.Родитель, Неопределено); ОбъектЗначение.ВладелецФайла = Параметры.ВладелецФайла; ОбъектЗначение.ДатаСоздания = ТекущаяУниверсальнаяДата(); ОбъектЗначение.Автор = Пользователи.АвторизованныйПользователь(); diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныеФайлы/Form.form b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныеФайлы/Form.form index 501795382..915aadcc4 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныеФайлы/Form.form +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныеФайлы/Form.form @@ -3568,7 +3568,7 @@ НЕОПРЕДЕЛЕНО КАК Редактирует, НЕОПРЕДЕЛЕНО КАК РедактируетПользователь ИЗ - Справочник.ИдентификаторыОбъектовМетаданных КАК ИдентификаторыОбъектовМетаданных + Справочник.ИдентификаторыОбъектовМетаданных КАК ИдентификаторыОбъектовМетаданныхПереопределяемый Catalog.ИдентификаторыОбъектовМетаданных true true diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныеФайлы/Module.bsl b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныеФайлы/Module.bsl index 4875dda08..c9e2e08f0 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныеФайлы/Module.bsl +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныеФайлы/Module.bsl @@ -305,7 +305,7 @@ Иначе ТекущиеДанные = Элементы.Список.ТекущиеДанные; ГруппаФайлов = Неопределено; - Если ТекущиеДанные <> Неопределено И ТекущиеДанные.ЭтоГруппа Тогда + Если ТекущиеДанные <> Неопределено И ТекущиеДанные.ЭтоГруппа И ТекущиеДанные.ВладелецФайла = Параметры.ВладелецФайла Тогда ГруппаФайлов = ТекущиеДанные.Ссылка; КонецЕсли; Если ЭтоВладелецЭлементовСправочникаФайлы Тогда @@ -533,6 +533,8 @@ &НаКлиенте Процедура Отправить(Команда) + ПриОтправкеФайловПочтой(ПараметрыОтправки, Элементы.Список.ВыделенныеСтроки, ВладелецФайла, УникальныйИдентификатор); + РаботаСФайламиСлужебныйКлиент.ОтправитьФайлыПоПочте( Элементы.Список.ВыделенныеСтроки, УникальныйИдентификатор, ПараметрыОтправки); @@ -608,17 +610,19 @@ &НаКлиенте Процедура СоздатьГруппу(Команда) + ПараметрыФормы = Новый Структура; + ТекущиеДанные = Элементы.Список.ТекущиеДанные; - Если ТекущиеДанные.ВладелецФайла <> ВладелецФайла Тогда + Если ТекущиеДанные <> Неопределено И ТекущиеДанные.ВладелецФайла <> ВладелецФайла Тогда ТекущиеДанные = Неопределено; КонецЕсли; Если ТекущиеДанные <> Неопределено Тогда - ТекущиеДанные = ТекущиеДанные.Ссылка; + ПараметрыФормы.Вставить("Родитель", ТекущиеДанные.Ссылка); + Иначе + ПараметрыФормы.Вставить("Родитель", ВладелецФайла); КонецЕсли; - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("Родитель", ТекущиеДанные); ПараметрыФормы.Вставить("ВладелецФайла", ВладелецФайла); ПараметрыФормы.Вставить("ЭтоНоваяГруппа", Истина); ПараметрыФормы.Вставить("ИмяСправочникаХранилищаФайлов", ИмяСправочникаХранилищаФайлов); @@ -1471,7 +1475,6 @@ // Команды независимые от состояния объектов. ИменаКоманд.Добавить("Добавить"); - ИменаКоманд.Добавить("СоздатьГруппу"); ИменаКоманд.Добавить("ДобавитьИзФайлаНаДиске"); ИменаКоманд.Добавить("ДобавитьФайлПоШаблону"); ИменаКоманд.Добавить("ДобавитьФайлСоСканера"); @@ -1653,6 +1656,11 @@ ОбщегоНазначения.ХранилищеОбщихНастроекСохранить(ТипСправочникаСФайлами, "Предпросмотр", Предпросмотр); КонецПроцедуры +&НаСервереБезКонтекста +Процедура ПриОтправкеФайловПочтой(ПараметрыОтправки, Знач ФайлыДляОтправки, ВладелецФайлов, УникальныйИдентификатор) + РаботаСФайламиПереопределяемый.ПриОтправкеФайловПочтой(ПараметрыОтправки, ФайлыДляОтправки, ВладелецФайлов, УникальныйИдентификатор); +КонецПроцедуры + &НаКлиенте Процедура УстановитьВидимостьПредпросмотра(ИспользоватьПредпросмотр) @@ -1690,9 +1698,10 @@ Если НЕ ЗначениеЗаполнено(АдресДанныхФайла) Тогда Элементы.АдресДанныхФайла.ТекстНевыбраннойКартинки = ТекстНевыбраннойКартинки; КонецЕсли; - + КонецПроцедуры + &НаСервере Процедура ОбновитьПояснениеОблачногоСервиса() diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/РедактируемыеФайлы/Form.form b/SSL/src/DataProcessors/РаботаСФайлами/Forms/РедактируемыеФайлы/Form.form index 78807d9e6..86c7d1aba 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/РедактируемыеФайлы/Form.form +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/РедактируемыеФайлы/Form.form @@ -1317,20 +1317,20 @@
    true
    ВЫБРАТЬ РАЗРЕШЕННЫЕ - Файлы.Редактирует, - Файлы.ИндексКартинки, - Файлы.Наименование, - Файлы.Описание, - Файлы.Ссылка, - Файлы.ХранитьВерсии, - Файлы.ВладелецФайла, - Файлы.Размер / 1024 КАК ТекущаяВерсияРазмер, - Файлы.Автор КАК ТекущаяВерсияАвтор, + ФайлыПереопределяемый.Редактирует, + ФайлыПереопределяемый.ИндексКартинки, + ФайлыПереопределяемый.Наименование, + ФайлыПереопределяемый.Описание, + ФайлыПереопределяемый.Ссылка, + ФайлыПереопределяемый.ХранитьВерсии, + ФайлыПереопределяемый.ВладелецФайла, + ФайлыПереопределяемый.Размер / 1024 КАК ТекущаяВерсияРазмер, + ФайлыПереопределяемый.Автор КАК ТекущаяВерсияАвтор, ИСТИНА КАК ИспользуютсяДополнительныеСведения ИЗ - Справочник.Файлы КАК Файлы + Справочник.Файлы КАК ФайлыПереопределяемый ГДЕ - Файлы.Редактирует = &Редактирует + ФайлыПереопределяемый.Редактирует = &Редактирует true true true diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/РедактируемыеФайлы/Module.bsl b/SSL/src/DataProcessors/РаботаСФайлами/Forms/РедактируемыеФайлы/Module.bsl index b49b956c7..513790c14 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/РедактируемыеФайлы/Module.bsl +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/РедактируемыеФайлы/Module.bsl @@ -335,7 +335,10 @@ КонецЦикла; Если Не ПустаяСтрока(ТекстЗапроса) Тогда - Список.ТекстЗапроса = ТекстЗапроса; + СвойстваСписка = ОбщегоНазначения.СтруктураСвойствДинамическогоСписка(); + СвойстваСписка.ТекстЗапроса = ТекстЗапроса; + СвойстваСписка.ДинамическоеСчитываниеДанных = Ложь; + ОбщегоНазначения.УстановитьСвойстваДинамическогоСписка(Элементы.Список, СвойстваСписка); КонецЕсли; КонецПроцедуры diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/СписокЗанятыхСВопросом/Form.form b/SSL/src/DataProcessors/РаботаСФайлами/Forms/СписокЗанятыхСВопросом/Form.form index 5447b42ac..1c0b2c7fa 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/СписокЗанятыхСВопросом/Form.form +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/СписокЗанятыхСВопросом/Form.form @@ -1130,18 +1130,18 @@
    true
    ВЫБРАТЬ РАЗРЕШЕННЫЕ - Файлы.Редактирует, - Файлы.ИндексКартинки, - Файлы.Наименование, - Файлы.Описание, - Файлы.Ссылка, - Файлы.ХранитьВерсии, - Файлы.ВладелецФайла, + ФайлыПереопределяемый.Редактирует, + ФайлыПереопределяемый.ИндексКартинки, + ФайлыПереопределяемый.Наименование, + ФайлыПереопределяемый.Описание, + ФайлыПереопределяемый.Ссылка, + ФайлыПереопределяемый.ХранитьВерсии, + ФайлыПереопределяемый.ВладелецФайла, ИСТИНА КАК ИспользуютсяДополнительныеСведения ИЗ - Справочник.Файлы КАК Файлы + Справочник.Файлы КАК ФайлыПереопределяемый ГДЕ - Файлы.Редактирует <> ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка) + ФайлыПереопределяемый.Редактирует <> ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка) true true true diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/СписокЗанятыхСВопросом/Module.bsl b/SSL/src/DataProcessors/РаботаСФайлами/Forms/СписокЗанятыхСВопросом/Module.bsl index 3e34382bf..57cab382f 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/СписокЗанятыхСВопросом/Module.bsl +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/СписокЗанятыхСВопросом/Module.bsl @@ -257,16 +257,19 @@ УстановитьПривилегированныйРежим(Истина); РезультатЗапроса = Запрос.Выполнить(); - МассивТипов = РезультатЗапроса.Выгрузить().ВыгрузитьКолонку("ТипФайла"); + МассивТипов = РезультатЗапроса.Выгрузить().ВыгрузитьКолонку("ТипФайла"); УстановитьПривилегированныйРежим(Ложь); ТекстЗапроса = ""; Для Каждого ТипСправочника Из МассивТипов Цикл МетаданныеСправочника = Метаданные.НайтиПоТипу(ТипСправочника); + Если Не ПравоДоступа("Изменение", МетаданныеСправочника) Тогда Продолжить; КонецЕсли; + Если Не СтрЗаканчиваетсяНа(МетаданныеСправочника.Имя, "ВерсииПрисоединенныхФайлов") И МетаданныеСправочника.Имя <> "ВерсииФайлов" Тогда + Если Не ПустаяСтрока(ТекстЗапроса) Тогда ТекстЗапроса = ТекстЗапроса + " | @@ -277,6 +280,7 @@ ТекстЗапроса = ТекстЗапроса + " | ВЫБРАТЬ РАЗРЕШЕННЫЕ"; КонецЕсли; + ТекстЗапроса = ТекстЗапроса + " | Файлы.Редактирует, | Файлы.ИндексКартинки, @@ -291,14 +295,19 @@ | " + МетаданныеСправочника.ПолноеИмя() + " КАК Файлы |ГДЕ | Файлы.Редактирует = &Редактирует"; + Если ЗначениеЗаполнено(Параметры.ВладелецФайла) Тогда ТекстЗапроса = ТекстЗапроса + " | И Файлы.ВладелецФайла = &Редактирует"; КонецЕсли; + КонецЕсли; КонецЦикла; - Список.ТекстЗапроса = ТекстЗапроса; + СвойстваСписка = ОбщегоНазначения.СтруктураСвойствДинамическогоСписка(); + СвойстваСписка.ДинамическоеСчитываниеДанных = Ложь; + СвойстваСписка.ТекстЗапроса = ТекстЗапроса; + ОбщегоНазначения.УстановитьСвойстваДинамическогоСписка(Элементы.Список, СвойстваСписка); КонецПроцедуры diff --git a/SSL/src/DataProcessors/РаботаСФайлами/РаботаСФайлами.mdo b/SSL/src/DataProcessors/РаботаСФайлами/РаботаСФайлами.mdo index d31465f50..0cb1ceac5 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/РаботаСФайлами.mdo +++ b/SSL/src/DataProcessors/РаботаСФайлами/РаботаСФайлами.mdo @@ -56,8 +56,9 @@ ВопросПриИмпортеФайлов ru - Сообщение о файлах, чей размер превышает допустимый + Вопрос при импорте файлов + Сообщение о файлах, чей размер превышает допустимый ru @@ -149,7 +150,7 @@ РедактированиеТекстовогоФайла ru - Редактор текстовых файлов + Редактирование текстового файла @@ -246,8 +247,9 @@ ФормаВозвратаФайла ru - Комментарий к версии + Форма возврата файла + Комментарий к версии true @@ -270,7 +272,7 @@ ФормаИмпортаФайлов ru - Импорт файлов + Форма импорта файлов @@ -284,7 +286,7 @@ ФормаЗавершениеРедактирования ru - Завершение редактирования + Форма завершение редактирования PersonalComputer MobileDevice @@ -293,7 +295,7 @@ ФормаИмпортаПапки ru - Импорт каталога + Форма импорта папки true diff --git a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВводАдреса/Form.form b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВводАдреса/Form.form index 93365885e..72eb49757 100644 --- a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВводАдреса/Form.form +++ b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВводАдреса/Form.form @@ -1102,7 +1102,6 @@ true ShowInDropList true - OnActivate true true Normal diff --git a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВводАдреса/Module.bsl b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВводАдреса/Module.bsl index 641a506b2..b0049635a 100644 --- a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВводАдреса/Module.bsl +++ b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВводАдреса/Module.bsl @@ -1398,7 +1398,7 @@ // Запрещаем добавлять больше чем есть вариантов. Элементы.ДобавитьОбъект.Доступность = ДополнительныеПараметры.КоличествоВариантов > 1; - Если ИмяТекущего <> Неопределено Тогда + Если ИмяТекущего<>Неопределено Тогда Если ВыбранныйЭлемент.Представление = НаименованиеПриДобавлениеПроизвольногоПомещения() Тогда ЭтотОбъект[ИмяТекущего] = ""; КонецЕсли; @@ -1941,7 +1941,7 @@ Если ЗначениеЗаполнено(ВычисленноеПредставление) И ПустаяСтрока(Контекст.ПредставлениеАдреса) Тогда Контекст.ПредставлениеАдреса = ВычисленноеПредставление; КонецЕсли; - + КонецЕсли; КонецПроцедуры @@ -1976,8 +1976,14 @@ Если Не ПустаяСтрока(СтруктураАдрес.Дом) Тогда ЗданиеИНомер = НаименованиеЗданияИЕгоНомер(СтруктураАдрес.Дом); - Контекст.ТипДома = ЗданиеИНомер.Здание; + ВариантыДанныхДом = Обработки.РасширенныйВводКонтактнойИнформации.ВариантыДанныхДом(); Контекст.Дом = ЗданиеИНомер.Номер; + Для каждого ВариантДанныхДом Из ВариантыДанныхДом Цикл + Если СтрСравнить(ВариантДанныхДом, ЗданиеИНомер.Здание) = 0 Тогда + Контекст.ТипДома = ЗданиеИНомер.Здание; + Прервать; + КонецЕсли; + КонецЦикла; КонецЕсли; Если Не ПустаяСтрока(СтруктураАдрес.Корпус) Тогда @@ -2164,7 +2170,7 @@ ТаблицаПомещений = ?(ТипЗнч(Контекст.ДополнительныеПомещения) = Тип("ТаблицаЗначений"), Контекст.ДополнительныеПомещения.Скопировать(), Контекст.ДополнительныеПомещения.Выгрузить()); - + Если Не ПустаяСтрока(Контекст.Помещение) Тогда СтрокаЗдания = ТаблицаЗданий.Вставить(0); СтрокаЗдания.Тип = Контекст.ТипПомещения; @@ -2560,7 +2566,11 @@ НовыйЭлемент.УстановитьДействие("ПриИзменении", "Подключаемый_ПомещениеПриИзменении"); Если НомерСтроки = КоличествоПомещений Тогда - Результат = ?(ФокусНаТип, НовыйТип.Имя, НовыйЭлемент.Имя); + Если ФокусНаТип Тогда + Результат = НовыйТип.Имя; + Иначе + Результат = НовыйЭлемент.Имя; + КонецЕсли; КонецЕсли; Добавлять = Новый Массив; @@ -3005,6 +3015,11 @@ &НаКлиенте Процедура ПослеПроверкиДоступностиКлассификатораВФоне(Задание, ДополнительныеПараметры) Экспорт + + Если ТипЗнч(Задание) <> Тип("Структура") Тогда + Возврат; + КонецЕсли; + Если Задание.Статус = "Выполнено" Тогда ДоступностьКлассификатора = ПолучитьИзВременногоХранилища(Задание.АдресРезультата); Если ДоступностьКлассификатора <> Неопределено Тогда @@ -3020,6 +3035,7 @@ ТекстСообщенияСервиса = НСтр("ru = 'Автоподбор и проверка адреса недоступны:'") + Символы.ПС + Задание.КраткоеПредставлениеОшибки; КонецЕсли; + КонецПроцедуры &НаКлиенте diff --git a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/ManagerModule.bsl b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/ManagerModule.bsl index 49e1ae07c..80202fad7 100644 --- a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/ManagerModule.bsl +++ b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/ManagerModule.bsl @@ -24,7 +24,7 @@ #КонецОбласти #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда - + #Область СлужебныеПроцедурыИФункции // Возвращает имя формы для редактирования типа контактной информации. @@ -93,8 +93,8 @@ ЗаполнятьКоды = ?(ДополнительныеПараметры.Свойство("КодыКЛАДР"), ДополнительныеПараметры.КодыКЛАДР, Ложь); Иначе НаименованиеВключаетСокращение = Ложь; - ПолноеНаименованиеСокращений = Ложь; - ЗаполнятьКоды = Ложь; + ПолноеНаименованиеСокращений = Ложь; + ЗаполнятьКоды = Ложь; КонецЕсли; НаименованиеСтраны = ""; @@ -109,9 +109,9 @@ Иначе Если СтрЧислоВхождений(Адрес, ",") = 9 Тогда Формат9Запятых = Истина; - АдресРФ = Адрес; - Иначе - XDTOАдрес = ДесериализацияАдресаОбщая(Адрес, ""); + АдресРФ = Адрес; + Иначе + XDTOАдрес = ДесериализацияАдресаОбщая(Адрес, ""); КонецЕсли; КонецЕсли; Иначе @@ -128,19 +128,15 @@ КонецЕсли; XDTOТип = Состав.Тип(); + Если XDTOТип = ФабрикаXDTO.Тип(ПространствоИмен, "Адрес") Тогда Результат.Вставить("Страна", Состав.Страна); - Если ПустаяСтрока(Состав.Страна) Тогда - Страна = РаботаСАдресами.ОсновнаяСтрана(); - НаименованиеСтраны = Страна.Наименование; - КодСтраны = СокрЛП(Страна.Код); - Иначе - Страна = Справочники.СтраныМира.НайтиПоНаименованию(Состав.Страна, Истина); - НаименованиеСтраны = Страна.Наименование; - КодСтраны = СокрЛП(Страна.Код); - КонецЕсли; - Результат.Вставить("КодСтраны", КодСтраны); + Страна = ?(ПустаяСтрока(Состав.Страна), + РаботаСАдресами.ОсновнаяСтрана(), + Справочники.СтраныМира.НайтиПоНаименованию(Состав.Страна, Истина)); + НаименованиеСтраны = Страна.Наименование; + Результат.Вставить("КодСтраны", СокрЛП(Страна.Код)); АдресРФ = Состав.Состав; @@ -270,6 +266,44 @@ Возврат Результат; КонецФункции +Функция СтруктураАдреса() + + ЭлементыАдреса = Новый Структура; + + ЭлементыАдреса.Вставить("Страна", ""); + ЭлементыАдреса.Вставить("КодСтраны", ""); + ЭлементыАдреса.Вставить("Индекс", ""); + ЭлементыАдреса.Вставить("Регион", ""); + ЭлементыАдреса.Вставить("РегионСокращение", ""); + ЭлементыАдреса.Вставить("Округ", ""); + ЭлементыАдреса.Вставить("ОкругСокращение", ""); + ЭлементыАдреса.Вставить("Район", ""); + ЭлементыАдреса.Вставить("РайонСокращение", ""); + ЭлементыАдреса.Вставить("Город", ""); + ЭлементыАдреса.Вставить("ГородСокращение", ""); + ЭлементыАдреса.Вставить("ВнутригРайон", ""); + ЭлементыАдреса.Вставить("ВнутригородскойРайонСокращение", ""); + ЭлементыАдреса.Вставить("НаселенныйПункт", ""); + ЭлементыАдреса.Вставить("НаселенныйПунктСокращение", ""); + ЭлементыАдреса.Вставить("Улица", ""); + ЭлементыАдреса.Вставить("УлицаСокращение", ""); + ЭлементыАдреса.Вставить("Дом",""); + ЭлементыАдреса.Вставить("Корпус", ""); + ЭлементыАдреса.Вставить("Квартира", ""); + ЭлементыАдреса.Вставить("ДополнительнаяТерритория", ""); + ЭлементыАдреса.Вставить("ДополнительнаяТерриторияСокращение", ""); + ЭлементыАдреса.Вставить("ЭлементДополнительнойТерритории", ""); + ЭлементыАдреса.Вставить("ЭлементДополнительнойТерриторииСокращение", ""); + ЭлементыАдреса.Вставить("Здание", Новый Структура("ТипЗдания, Номер")); + ЭлементыАдреса.Вставить("Корпуса", Новый Массив); + ЭлементыАдреса.Вставить("Помещения", Новый Массив); + ЭлементыАдреса.Вставить("КодыКЛАДР", Новый Структура); + ЭлементыАдреса.Вставить("ДополнительныеКоды", Новый Структура); + + Возврат ЭлементыАдреса; + +КонецФункции + #Область ВзаимодействиеСАдреснымКлассификатором // Определение режима работы форм ввода. @@ -1220,6 +1254,7 @@ КонецФункции + Функция СтруктураАдресаПоФормату9Запятых(АдресВФормате9Запятых) Результат = Новый Соответствие; АдресМассив = СтрРазделить(АдресВФормате9Запятых, ",", Истина); @@ -1499,47 +1534,10 @@ КонецФункции + //====================================================================================================================== // Структура и поля адреса. -Функция СтруктураАдреса() - - ЭлементыАдреса = Новый Структура; - - ЭлементыАдреса.Вставить("Страна", ""); - ЭлементыАдреса.Вставить("КодСтраны", ""); - ЭлементыАдреса.Вставить("Индекс", ""); - ЭлементыАдреса.Вставить("Регион", ""); - ЭлементыАдреса.Вставить("РегионСокращение", ""); - ЭлементыАдреса.Вставить("Округ", ""); - ЭлементыАдреса.Вставить("ОкругСокращение", ""); - ЭлементыАдреса.Вставить("Район", ""); - ЭлементыАдреса.Вставить("РайонСокращение", ""); - ЭлементыАдреса.Вставить("Город", ""); - ЭлементыАдреса.Вставить("ГородСокращение", ""); - ЭлементыАдреса.Вставить("ВнутригРайон", ""); - ЭлементыАдреса.Вставить("ВнутригородскойРайонСокращение", ""); - ЭлементыАдреса.Вставить("НаселенныйПункт", ""); - ЭлементыАдреса.Вставить("НаселенныйПунктСокращение", ""); - ЭлементыАдреса.Вставить("Улица", ""); - ЭлементыАдреса.Вставить("УлицаСокращение", ""); - ЭлементыАдреса.Вставить("Дом",""); - ЭлементыАдреса.Вставить("Корпус", ""); - ЭлементыАдреса.Вставить("Квартира", ""); - ЭлементыАдреса.Вставить("ДополнительнаяТерритория", ""); - ЭлементыАдреса.Вставить("ДополнительнаяТерриторияСокращение", ""); - ЭлементыАдреса.Вставить("ЭлементДополнительнойТерритории", ""); - ЭлементыАдреса.Вставить("ЭлементДополнительнойТерриторииСокращение", ""); - ЭлементыАдреса.Вставить("Здание", Новый Структура("ТипЗдания, Номер")); - ЭлементыАдреса.Вставить("Корпуса", Новый Массив); - ЭлементыАдреса.Вставить("Помещения", Новый Массив); - ЭлементыАдреса.Вставить("КодыКЛАДР", Новый Структура); - ЭлементыАдреса.Вставить("ДополнительныеКоды", Новый Структура); - - Возврат ЭлементыАдреса; - -КонецФункции - // Возвращает флаг того, что переданный адрес - российский. // // Параметры: @@ -1888,7 +1886,7 @@ // Чтение Для Каждого ДопЭлемент Из АдресРФ.ДопАдрЭл Цикл Если ДопЭлемент.Номер <> Неопределено Тогда - КодОбъекта = ДопЭлемент.Номер.Тип; + КодОбъекта = Строка(ДопЭлемент.Номер.Тип); ТипОбъекта = РаботаСАдресамиКлиентСервер.ТипОбъектаПоКодуСериализации(КодОбъекта); Если ТипОбъекта <> Неопределено Тогда Вид = ТипОбъекта.Тип; @@ -1900,17 +1898,17 @@ НоваяСтрока = Неопределено; КонецЕсли; Если НоваяСтрока <> Неопределено Тогда - НоваяСтрока.Тип = ТипОбъекта.Наименование; - НоваяСтрока.Значение = ДопЭлемент.Номер.Значение; - НоваяСтрока.Сокращение = ТипОбъекта.Сокращение; + НоваяСтрока.Тип = Строка(ТипОбъекта.Наименование); + НоваяСтрока.Значение = Строка(ДопЭлемент.Номер.Значение); + НоваяСтрока.Сокращение = Строка(ТипОбъекта.Сокращение); НоваяСтрока.ПутьXPath = РаботаСАдресамиКлиентСервер.XPathНомераДополнительногоОбъектаАдресации(НоваяСтрока.Тип); НоваяСтрока.Вид = Вид; КонецЕсли; Иначе - НоваяСтрока = Результат.Помещения.Добавить(); - НоваяСтрока.Тип = ДопЭлемент.Номер.Тип; - НоваяСтрока.Значение = ДопЭлемент.Номер.Значение; - НоваяСтрока.Сокращение = ДопЭлемент.Номер.Тип; + НоваяСтрока = Результат.Помещения.Добавить(); + НоваяСтрока.Тип = КодОбъекта; + НоваяСтрока.Значение = Строка(ДопЭлемент.Номер.Значение); + НоваяСтрока.Сокращение = КодОбъекта; НоваяСтрока.ПутьXPath = РаботаСАдресамиКлиентСервер.XPathНомераДополнительногоОбъектаАдресации("2000"); НоваяСтрока.Вид = 3; КонецЕсли; @@ -1924,18 +1922,22 @@ КонецФункции Функция ЗначениеЗданияИлиПомещения(Данные, Варианты, ВсеЗначенияВарианта) + Результат = ТаблицаЗначений("Тип, Значение"); - Для Каждого Вариант Из Варианты.ВариантыТипа Цикл - Для Каждого Строка Из Данные.НайтиСтроки(Новый Структура("Тип", Вариант)) Цикл - ЗаполнитьЗначенияСвойств(Результат.Добавить(), Строка); - Если Не ВсеЗначенияВарианта Тогда - Прервать; + Для каждого СведенияОбОбъекте Из Данные Цикл + Для каждого Вариант Из Варианты.ВариантыТипа Цикл + Если СтрСравнить(Вариант, СведенияОбОбъекте.Тип) = 0 Тогда + ЗаполнитьЗначенияСвойств(Результат.Добавить(), СведенияОбОбъекте); + Если Не ВсеЗначенияВарианта Тогда + Прервать; + КонецЕсли; КонецЕсли; КонецЦикла; КонецЦикла; Возврат Результат; + КонецФункции Процедура ВставитьЗданиеПомещение(XDTOАдрес, Тип, Значение) diff --git a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборОбъектовОтбором/Module.bsl b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборОбъектовОтбором/Module.bsl index d205fc599..aadc5d6ec 100644 --- a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборОбъектовОтбором/Module.bsl +++ b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборОбъектовОтбором/Module.bsl @@ -27,7 +27,12 @@ КонецЕсли; СписокДанных.ПроизвольныйЗапрос = Ложь; - СписокДанных.ОсновнаяТаблица = ИмяТаблицыДанных; + + СвойстваСписка = СтруктураСвойствДинамическогоСписка(); + СвойстваСписка.ДинамическоеСчитываниеДанных = Истина; + СвойстваСписка.ОсновнаяТаблица = ИмяТаблицыДанных; + + УстановитьСвойстваДинамическогоСписка(Элементы.СписокДанных, СвойстваСписка); Поле = СписокДанных.Отбор.ДоступныеПоляОтбора.Элементы.Найти(Новый ПолеКомпоновкиДанных("Ссылка")); ТаблицаКолонок = Новый ТаблицаЗначений; @@ -45,7 +50,12 @@ СтруктураДанных = Сред(СтруктураДанных, 2); СписокДанных.ПроизвольныйЗапрос = Истина; - СписокДанных.ТекстЗапроса = "ВЫБРАТЬ РАЗЛИЧНЫЕ " + СтруктураДанных + " ИЗ " + ИмяТаблицыДанных; + + СвойстваСписка = СтруктураСвойствДинамическогоСписка(); + СвойстваСписка.ДинамическоеСчитываниеДанных = Истина; + СвойстваСписка.ТекстЗапроса = "ВЫБРАТЬ РАЗЛИЧНЫЕ " + СтруктураДанных + " ИЗ " + ИмяТаблицыДанных; + + УстановитьСвойстваДинамическогоСписка(Элементы.СписокДанных, СвойстваСписка); Если Описание.ЭтоПоследовательность Тогда КлючФормыДанных = "Регистратор"; @@ -57,7 +67,6 @@ // Без колонок??? Возврат; КонецЕсли; - СписокДанных.ДинамическоеСчитываниеДанных = Истина; ТекущийОбъект.ДобавитьКолонкиВТаблицуФормы( Элементы.СписокДанных, @@ -112,6 +121,44 @@ #Область СлужебныеПроцедурыИФункции +&НаСервере +Процедура УстановитьСвойстваДинамическогоСписка(Список, СтруктураПараметров) + + Форма = Список.Родитель; + ТипУправляемаяФорма = Тип("УправляемаяФорма"); + + Пока ТипЗнч(Форма) <> ТипУправляемаяФорма Цикл + Форма = Форма.Родитель; + КонецЦикла; + + ДинамическийСписок = Форма[Список.ПутьКДанным]; + ТекстЗапроса = СтруктураПараметров.ТекстЗапроса; + + Если Не ПустаяСтрока(ТекстЗапроса) Тогда + ДинамическийСписок.ТекстЗапроса = ТекстЗапроса; + КонецЕсли; + + ОсновнаяТаблица = СтруктураПараметров.ОсновнаяТаблица; + + Если Не ПустаяСтрока(ОсновнаяТаблица) Тогда + ДинамическийСписок.ОсновнаяТаблица = ОсновнаяТаблица; + КонецЕсли; + + ДинамическоеСчитываниеДанных = СтруктураПараметров.ДинамическоеСчитываниеДанных; + + Если ТипЗнч(ДинамическоеСчитываниеДанных) = Тип("Булево") Тогда + ДинамическийСписок.ДинамическоеСчитываниеДанных = ДинамическоеСчитываниеДанных; + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Функция СтруктураСвойствДинамическогоСписка() + + Возврат Новый Структура("ТекстЗапроса, ОсновнаяТаблица, ДинамическоеСчитываниеДанных"); + +КонецФункции + &НаКлиенте Процедура ОткрытьФормуТекущегоОбъекта() ТекПараметры = ПараметрыФормыТекущегоОбъекта(Элементы.СписокДанных.ТекущиеДанные); diff --git a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Module.bsl index f29e3d57f..1077d1369 100644 --- a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Module.bsl @@ -269,7 +269,7 @@ Процедура УзелОбменаСсылкаОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) Если УзелОбменаСсылка <> ВыбранноеЗначение Тогда УзелОбменаСсылка = ВыбранноеЗначение; - ПодключитьОбработчикОжидания("ОбработкаВыбораУзлаОбмена",1, Истина); + ПодключитьОбработчикОжидания("ОбработкаВыбораУзлаОбмена", 0.1, Истина); КонецЕсли; КонецПроцедуры @@ -310,7 +310,7 @@ Процедура ДеревоМетаданныхПриАктивизацииСтроки(Элемент) Если Элементы.ДеревоМетаданных.ТекущаяСтрока <> ТекущаяСтрокаМетаданных Тогда ТекущаяСтрокаМетаданных = Элементы.ДеревоМетаданных.ТекущаяСтрока; - ПодключитьОбработчикОжидания("НастроитьРедактированиеИзменений", 0.0000001, Истина); + ПодключитьОбработчикОжидания("НастроитьРедактированиеИзменений", 0.1, Истина); КонецЕсли; КонецПроцедуры @@ -1318,7 +1318,7 @@ Процедура ФоновоеЗаданиеЗапуститьНаКлиенте(ПараметрыФоновогоЗадания) ДлительнаяОперацияЗапущена = Истина; ВидДлительнойОперации = ?(ПараметрыФоновогоЗадания.Команда, Истина, Ложь); - ПодключитьОбработчикОжидания("СтраницаДлительнойОперации",1,Истина); + ПодключитьОбработчикОжидания("СтраницаДлительнойОперации", 0.1, Истина); Результат = ФоновоеЗаданиеЗапуститьНаСервере(ПараметрыФоновогоЗадания); Если Результат = Неопределено Тогда ДлительнаяОперацияЗапущена = Ложь; @@ -1326,7 +1326,7 @@ ПоказатьПредупреждение(, ТекстПредупреждения); Возврат; КонецЕсли; - ОбщийМодульДлительныеОперацииКлиент = ОбщийМодуль("ДлительныеОперацииКлиент"); + ОбщийМодульДлительныеОперацииКлиент = ОбщийМодульДлительныеОперацииКлиент(); Если Результат.Статус = "Выполняется" Тогда ПараметрыОжидания = ОбщийМодульДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект); ПараметрыОжидания.ВыводитьОкноОжидания = Ложь; @@ -1336,7 +1336,7 @@ ОбщийМодульДлительныеОперацииКлиент.ОжидатьЗавершение(Результат, ОповещениеОЗавершении, ПараметрыОжидания); Иначе ФоновоеЗаданиеРезультатВыполнения = Результат; - ПодключитьОбработчикОжидания("РезультатВыполненияФоновогоЗадания", 1, Истина); + ПодключитьОбработчикОжидания("РезультатВыполненияФоновогоЗадания", 0.1, Истина); КонецЕсли; КонецПроцедуры @@ -1385,7 +1385,7 @@ &НаСервере Функция ФоновоеЗаданиеЗапуститьНаСервере(ПараметрыФоновогоЗадания) - МодульДлительныеОперации = ОбщийМодуль("ДлительныеОперации"); + МодульДлительныеОперации = ОбщийМодульДлительныеОперации(); ПараметрыВыполнения = МодульДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор); ПараметрыВыполнения.ДополнительныйРезультат = Ложь; @@ -1425,37 +1425,45 @@ ФоновоеЗаданиеИдентификатор = Неопределено; КонецПроцедуры -// Возвращает ссылку на общий модуль по имени. -// -// Параметры: -// Имя - Строка - имя общего модуля, например: -// "ОбщегоНазначения", -// "ОбщегоНазначенияКлиент". +// Возвращает ссылку на общий модуль "ДлительныеОперацииКлиент". // // Возвращаемое значение: -// ОбщийМодуль. +// ОбщийМодуль - общий модуль "ДлительныеОперацииКлиент". // -&НаКлиентеНаСервереБезКонтекста -Функция ОбщийМодуль(Имя) +&НаКлиенте +Функция ОбщийМодульДлительныеОперацииКлиент() -#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда - Если Метаданные.ОбщиеМодули.Найти(Имя) <> Неопределено Тогда - Модуль = Вычислить(Имя); + // Вызов ВычислитьВБезопасномРежиме не требуется, т.к. для вычисления передается строковый литерал. + Модуль = Вычислить("ДлительныеОперацииКлиент"); + +#Если НЕ ВебКлиент Тогда + Если ТипЗнч(Модуль) <> Тип("ОбщийМодуль") Тогда + ВызватьИсключение НСтр("ru = 'Общий модуль ""ДлительныеОперацииКлиент"" не найден.'"); + КонецЕсли; +#КонецЕсли + + Возврат Модуль; + +КонецФункции + +// Возвращает ссылку на общий модуль "ДлительныеОперации". +// +// Возвращаемое значение: +// ОбщийМодуль - общий модуль "ДлительныеОперации". +// +&НаСервереБезКонтекста +Функция ОбщийМодульДлительныеОперации() + + Если Метаданные.ОбщиеМодули.Найти("ДлительныеОперации") <> Неопределено Тогда + // Вызов ВычислитьВБезопасномРежиме не требуется, т.к. для вычисления передается строковый литерал. + Модуль = Вычислить("ДлительныеОперации"); Иначе Модуль = Неопределено; КонецЕсли; Если ТипЗнч(Модуль) <> Тип("ОбщийМодуль") Тогда - ВызватьИсключение СтрЗаменить(НСтр("ru = 'Общий модуль ""%1"" не найден.'"),"%1", Имя); + ВызватьИсключение НСтр("ru = 'Общий модуль ""ДлительныеОперации"" не найден.'"); КонецЕсли; -#Иначе - Модуль = Вычислить(Имя); -#Если НЕ ВебКлиент Тогда - Если ТипЗнч(Модуль) <> Тип("ОбщийМодуль") Тогда - ВызватьИсключение СтрЗаменить(НСтр("ru = 'Общий модуль ""%1"" не найден.'"),"%1", Имя); - КонецЕсли; -#КонецЕсли -#КонецЕсли Возврат Модуль; @@ -1896,28 +1904,32 @@ &НаСервере Процедура НастроитьСписокСсылок(ИмяТаблицы, Наименование) - СписокСсылок.ТекстЗапроса = " - |ВЫБРАТЬ - | ТаблицаИзменений.Ссылка КАК Ссылка, - | ТаблицаИзменений.НомерСообщения КАК НомерСообщения, - | ВЫБОР - | КОГДА ТаблицаИзменений.НомерСообщения ЕСТЬ NULL ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ - | КОНЕЦ КАК НеВыгружалось, - | - | ОсновнаяТаблица.Ссылка КАК СсылкаОбъекта - |ИЗ - | " + ИмяТаблицы + " КАК ОсновнаяТаблица - |ПРАВОЕ СОЕДИНЕНИЕ - | " + ИмяТаблицы + ".Изменения КАК ТаблицаИзменений - |ПО - | ОсновнаяТаблица.Ссылка = ТаблицаИзменений.Ссылка - |ГДЕ - | ТаблицаИзменений.Узел = &ВыбранныйУзел - |"; + СвойстваСписка = СтруктураСвойствДинамическогоСписка(); + СвойстваСписка.ДинамическоеСчитываниеДанных = Истина; + СвойстваСписка.ТекстЗапроса = + "ВЫБРАТЬ + | ТаблицаИзменений.Ссылка КАК Ссылка, + | ТаблицаИзменений.НомерСообщения КАК НомерСообщения, + | ВЫБОР + | КОГДА ТаблицаИзменений.НомерСообщения ЕСТЬ NULL + | ТОГДА ИСТИНА + | ИНАЧЕ ЛОЖЬ + | КОНЕЦ КАК НеВыгружалось, + | ОсновнаяТаблица.Ссылка КАК СсылкаОбъекта + |ИЗ + | #ИмяТаблицыИзменения# КАК ТаблицаИзменений + | ЛЕВОЕ СОЕДИНЕНИЕ #ИмяТаблицы# КАК ОсновнаяТаблица + | ПО (ОсновнаяТаблица.Ссылка = ТаблицаИзменений.Ссылка) + |ГДЕ + | ТаблицаИзменений.Узел = &ВыбранныйУзел"; + + СвойстваСписка.ТекстЗапроса = СтрЗаменить(СвойстваСписка.ТекстЗапроса, "#ИмяТаблицы#", ИмяТаблицы); + СвойстваСписка.ТекстЗапроса = СтрЗаменить(СвойстваСписка.ТекстЗапроса, "#ИмяТаблицыИзменения#", ИмяТаблицы + ".Изменения"); + УстановитьСвойстваДинамическогоСписка(Элементы.СписокСсылок, СвойстваСписка); + СписокСсылок.Параметры.УстановитьЗначениеПараметра("ВыбранныйУзел", УзелОбменаСсылка); СписокСсылокИмяТаблицы = ИмяТаблицы; - СписокСсылок.ДинамическоеСчитываниеДанных = Истина; // Представление объекта Мета = ЭтотОбъект().МетаданныеПоПолномуИмени(ИмяТаблицы); @@ -1970,23 +1982,26 @@ |"; КонецЦикла; - СписокКонстант.ТекстЗапроса = " - |ВЫБРАТЬ - | ИндексКартинкиАвторегистрация, ИндексКартинки, МетаПолноеИмя, НеВыгружалось, - | Наименование, НомерСообщения - | - |{ВЫБРАТЬ - | ИндексКартинкиАвторегистрация, ИндексКартинки, - | Наименование, МетаПолноеИмя, - | НомерСообщения, НеВыгружалось - |} - | - |ИЗ (" + Текст + ") Данные - | - |{ГДЕ - | Наименование, НомерСообщения, НеВыгружалось - |} - |"; + СвойстваСписка = СтруктураСвойствДинамическогоСписка(); + СвойстваСписка.ДинамическоеСчитываниеДанных = Истина; + СвойстваСписка.ТекстЗапроса = + "ВЫБРАТЬ + | ИндексКартинкиАвторегистрация, ИндексКартинки, МетаПолноеИмя, НеВыгружалось, + | Наименование, НомерСообщения + | + |{ВЫБРАТЬ + | ИндексКартинкиАвторегистрация, ИндексКартинки, + | Наименование, МетаПолноеИмя, + | НомерСообщения, НеВыгружалось + |} + | + |ИЗ (" + Текст + ") Данные + | + |{ГДЕ + | Наименование, НомерСообщения, НеВыгружалось + |}"; + + УстановитьСвойстваДинамическогоСписка(Элементы.СписокКонстант, СвойстваСписка); ЭлементыСписка = СписокКонстант.Порядок.Элементы; Если ЭлементыСписка.Количество() = 0 Тогда @@ -1996,7 +2011,6 @@ КонецЕсли; СписокКонстант.Параметры.УстановитьЗначениеПараметра("ВыбранныйУзел", УзелОбменаСсылка); - СписокКонстант.ДинамическоеСчитываниеДанных = Истина; КонецПроцедуры // Вывод заглушки с пустой страницей. @@ -2047,19 +2061,23 @@ Строка.Имя = Префикс + Имя; КонецЦикла; - СписокНаборовЗаписей.ТекстЗапроса = " - |ВЫБРАТЬ РАЗРЕШЕННЫЕ - | ТаблицаИзменений.НомерСообщения КАК НомерСообщения, - | ВЫБОР - | КОГДА ТаблицаИзменений.НомерСообщения ЕСТЬ NULL ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ - | КОНЕЦ КАК НеВыгружалось - | - | " + ТекстВыбора + " - |ИЗ - | " + ИмяТаблицы + ".Изменения КАК ТаблицаИзменений - |ГДЕ - | ТаблицаИзменений.Узел = &ВыбранныйУзел - |"; + СвойстваСписка = СтруктураСвойствДинамическогоСписка(); + СвойстваСписка.ДинамическоеСчитываниеДанных = Истина; + СвойстваСписка.ТекстЗапроса = + "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | ТаблицаИзменений.НомерСообщения КАК НомерСообщения, + | ВЫБОР + | КОГДА ТаблицаИзменений.НомерСообщения ЕСТЬ NULL ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ + | КОНЕЦ КАК НеВыгружалось + | + | " + ТекстВыбора + " + |ИЗ + | " + ИмяТаблицы + ".Изменения КАК ТаблицаИзменений + |ГДЕ + | ТаблицаИзменений.Узел = &ВыбранныйУзел"; + + УстановитьСвойстваДинамическогоСписка(Элементы.СписокНаборовЗаписей, СвойстваСписка); + СписокНаборовЗаписей.Параметры.УстановитьЗначениеПараметра("ВыбранныйУзел", УзелОбменаСсылка); // Добавляем в группу измерений. @@ -2069,7 +2087,7 @@ |Порядок, Отбор, Группировка, СтандартнаяКартинка, Параметры, УсловноеОформление", Измерения, Элементы.СписокНаборовЗаписейГруппаИзмерений); - СписокНаборовЗаписей.ДинамическоеСчитываниеДанных = Истина; + СписокНаборовЗаписейИмяТаблицы = ИмяТаблицы; КонецПроцедуры @@ -2543,4 +2561,43 @@ КонецЦикла; КонецЦикла; КонецПроцедуры + +&НаСервере +Процедура УстановитьСвойстваДинамическогоСписка(Список, СтруктураПараметров) + + Форма = Список.Родитель; + ТипУправляемаяФорма = Тип("УправляемаяФорма"); + + Пока ТипЗнч(Форма) <> ТипУправляемаяФорма Цикл + Форма = Форма.Родитель; + КонецЦикла; + + ДинамическийСписок = Форма[Список.ПутьКДанным]; + ТекстЗапроса = СтруктураПараметров.ТекстЗапроса; + + Если Не ПустаяСтрока(ТекстЗапроса) Тогда + ДинамическийСписок.ТекстЗапроса = ТекстЗапроса; + КонецЕсли; + + ОсновнаяТаблица = СтруктураПараметров.ОсновнаяТаблица; + + Если Не ПустаяСтрока(ОсновнаяТаблица) Тогда + ДинамическийСписок.ОсновнаяТаблица = ОсновнаяТаблица; + КонецЕсли; + + ДинамическоеСчитываниеДанных = СтруктураПараметров.ДинамическоеСчитываниеДанных; + + Если ТипЗнч(ДинамическоеСчитываниеДанных) = Тип("Булево") Тогда + ДинамическийСписок.ДинамическоеСчитываниеДанных = ДинамическоеСчитываниеДанных; + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Функция СтруктураСвойствДинамическогоСписка() + + Возврат Новый Структура("ТекстЗапроса, ОсновнаяТаблица, ДинамическоеСчитываниеДанных"); + +КонецФункции + #КонецОбласти diff --git a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/ObjectModule.bsl b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/ObjectModule.bsl index 403154797..959c07978 100644 --- a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/ObjectModule.bsl +++ b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/ObjectModule.bsl @@ -1048,7 +1048,7 @@ // Ссылка Результат = ""; - МодульОбщегоНазначения = ОбщегоНазначенияОбщийМодуль("ОбщегоНазначения"); + МодульОбщегоНазначения = ОбщийМодульОбщегоНазначения(); Если МодульОбщегоНазначения <> Неопределено Тогда Результат = МодульОбщегоНазначения.ПредметСтрокой(ОбъектПредставления); КонецЕсли; @@ -1484,7 +1484,7 @@ КонецЕсли; // Заводим на регистрацию в БСП всегда, необходимы дополнительные действия. - МодульОбменДаннымиСобытия = ОбщегоНазначенияОбщийМодуль("ОбменДаннымиСобытия"); + МодульОбменДаннымиСобытия = ОбщийМодульОбменДаннымиСобытия(); // На входе или объект метаданных или непосредственно объект. Если ТипЗнч(ОбъектРегистрации) = Тип("ОбъектМетаданных") Тогда @@ -1854,19 +1854,37 @@ Возврат Результат; КонецФункции -// Возвращает общий модуль или Неопределено, если нет такого. +// Возвращает общий модуль ОбменДаннымиСобытия или Неопределено, если такого нет в составе конфигурации. // -Функция ОбщегоНазначенияОбщийМодуль(Знач ИмяМодуля) - - Если Метаданные.ОбщиеМодули.Найти(ИмяМодуля) = Неопределено Тогда +Функция ОбщийМодульОбменДаннымиСобытия() + Если Метаданные.ОбщиеМодули.Найти("ОбменДаннымиСобытия") = Неопределено Тогда Возврат Неопределено; КонецЕсли; - УстановитьБезопасныйРежим(Истина); - Результат = Вычислить(ИмяМодуля); - УстановитьБезопасныйРежим(Ложь); + // Вызов ВычислитьВБезопасномРежиме не требуется, т.к. для вычисления передается строковый литерал. + Возврат Вычислить("ОбменДаннымиСобытия"); +КонецФункции + +// Возвращает общий модуль СтандартныеПодсистемыСервер или Неопределено, если такого нет в составе конфигурации. +// +Функция ОбщийМодульСтандартныеПодсистемыСервер() + Если Метаданные.ОбщиеМодули.Найти("СтандартныеПодсистемыСервер") = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; - Возврат Результат; + // Вызов ВычислитьВБезопасномРежиме не требуется, т.к. для вычисления передается строковый литерал. + Возврат Вычислить("СтандартныеПодсистемыСервер"); +КонецФункции + +// Возвращает общий модуль ОбщегоНазначения или Неопределено, если такого нет в составе конфигурации. +// +Функция ОбщийМодульОбщегоНазначения() + Если Метаданные.ОбщиеМодули.Найти("ОбщегоНазначения") = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + + // Вызов ВычислитьВБезопасномРежиме не требуется, т.к. для вычисления передается строковый литерал. + Возврат Вычислить("ОбщегоНазначения"); КонецФункции // Возвращает флаг того, что БСП в текущей конфигурации обеспечивает функционал. @@ -1874,7 +1892,7 @@ Функция БСП_ДоступнаТребуемаяВерсия(Знач Версия = Неопределено) ТекущаяВерсия = Неопределено; - МодульСтандартныеПодсистемыСервер = ОбщегоНазначенияОбщийМодуль("СтандартныеПодсистемыСервер"); + МодульСтандартныеПодсистемыСервер = ОбщийМодульСтандартныеПодсистемыСервер(); Если МодульСтандартныеПодсистемыСервер <> Неопределено Тогда Попытка ТекущаяВерсия = МодульСтандартныеПодсистемыСервер.ВерсияБиблиотеки(); @@ -1916,7 +1934,7 @@ Функция БСП_КонтрольВыгрузкиОбъекта(Узел, ОбъектРегистрации) Отправка = ОтправкаЭлементаДанных.Авто; - МодульОбменДаннымиСобытия = ОбщегоНазначенияОбщийМодуль("ОбменДаннымиСобытия"); + МодульОбменДаннымиСобытия = ОбщийМодульОбменДаннымиСобытия(); Если МодульОбменДаннымиСобытия <> Неопределено Тогда МодульОбменДаннымиСобытия.ПриОтправкеДанныхКорреспонденту(ОбъектРегистрации, Отправка, , Узел); Возврат Отправка = ОтправкаЭлементаДанных.Авто; diff --git a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентныеИФоновыеЗадания/Module.bsl b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентныеИФоновыеЗадания/Module.bsl index a4b1c6831..93d8b8694 100644 --- a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентныеИФоновыеЗадания/Module.bsl +++ b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентныеИФоновыеЗадания/Module.bsl @@ -398,7 +398,9 @@ Задание = РегламентныеЗаданияСервер.ПолучитьРегламентноеЗадание(ИдентификаторЗадания); ИмяМетода = Задание.Метаданные.ИмяМетода; + ОбщегоНазначения.ХранилищеСистемныхНастроекСохранить("РегламентныеЗадания", ИмяМетода, Истина); ОбщегоНазначения.ВыполнитьМетодКонфигурации(ИмяМетода, Задание.Параметры); + ОбщегоНазначения.ХранилищеСистемныхНастроекСохранить("РегламентныеЗадания", ИмяМетода, Неопределено); КонецФункции diff --git a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/ВосстановлениеДанныхИзРезервнойКопии/Module.bsl b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/ВосстановлениеДанныхИзРезервнойКопии/Module.bsl index a38297acc..b2de62a2a 100644 --- a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/ВосстановлениеДанныхИзРезервнойКопии/Module.bsl +++ b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/ВосстановлениеДанныхИзРезервнойКопии/Module.bsl @@ -215,6 +215,11 @@ &НаКлиенте Функция ПроверитьЗаполнениеРеквизитов() +#Если ВебКлиент Тогда + ТекстСообщения = НСтр("ru = 'Восстановление не доступно в веб-клиенте.'"); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения); + РеквизитыЗаполнены = Ложь; +#Иначе РеквизитыЗаполнены = Истина; Если ТребуетсяВводПароля И ПустаяСтрока(ПарольАдминистратораИБ) Тогда @@ -268,6 +273,8 @@ КонецЕсли; +#КонецЕсли + Возврат РеквизитыЗаполнены; КонецФункции @@ -361,13 +368,13 @@ ФайлСкрипта.УстановитьТекст(ТекстыМакетов[0]); ИмяФайлаСкрипта = ПараметрыКопирования.КаталогВременныхФайловОбновления + "main.js"; - ФайлСкрипта.Записать(ИмяФайлаСкрипта, КодировкаТекста.UTF16); + ФайлСкрипта.Записать(ИмяФайлаСкрипта, РезервноеКопированиеИБКлиент.КодировкаФайловПрограммыРезервногоКопированияИБ()); // Вспомогательный файл: helpers.js. ФайлСкрипта = Новый ТекстовыйДокумент; ФайлСкрипта.Вывод = ИспользованиеВывода.Разрешить; ФайлСкрипта.УстановитьТекст(ТекстыМакетов[1]); - ФайлСкрипта.Записать(ПараметрыКопирования.КаталогВременныхФайловОбновления + "helpers.js", КодировкаТекста.UTF16); + ФайлСкрипта.Записать(ПараметрыКопирования.КаталогВременныхФайловОбновления + "helpers.js", РезервноеКопированиеИБКлиент.КодировкаФайловПрограммыРезервногоКопированияИБ()); ИмяГлавногоФайлаСкрипта = Неопределено; // Вспомогательный файл: splash.png. @@ -381,7 +388,7 @@ ФайлСкрипта = Новый ТекстовыйДокумент; ФайлСкрипта.Вывод = ИспользованиеВывода.Разрешить; ФайлСкрипта.УстановитьТекст(ТекстыМакетов[2]); - ФайлСкрипта.Записать(ИмяГлавногоФайлаСкрипта, КодировкаТекста.UTF16); + ФайлСкрипта.Записать(ИмяГлавногоФайлаСкрипта, РезервноеКопированиеИБКлиент.КодировкаФайловПрограммыРезервногоКопированияИБ()); ФайлЛога = Новый ТекстовыйДокумент; ФайлЛога.Вывод = ИспользованиеВывода.Разрешить; @@ -460,6 +467,7 @@ Результат = СтрЗаменить(Результат, "[КаталогРезервнойКопии2]" , ПодготовитьТекст(СтрокаКаталога+"\backup"+СтрокаКаталогаИзДаты())); Результат = СтрЗаменить(Результат, "[ИмяCOMСоединителя]" , ПодготовитьТекст(СтруктураПараметров.ИмяCOMСоединителя)); Результат = СтрЗаменить(Результат, "[ИспользоватьCOMСоединитель]" , ?(СтруктураПараметров.ЭтоБазоваяВерсияКонфигурации, "false", "true")); + // Используется КаталогВременныхФайлов, т.к. автоматическое удаление временного каталога не допустимо. Результат = СтрЗаменить(Результат, "[КаталогВременныхФайлов]" , ПодготовитьТекст(КаталогВременныхФайлов())); Возврат Результат; diff --git a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/РезервноеКопированиеДанных/Module.bsl b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/РезервноеКопированиеДанных/Module.bsl index b31041e02..e4d177097 100644 --- a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/РезервноеКопированиеДанных/Module.bsl +++ b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/РезервноеКопированиеДанных/Module.bsl @@ -364,6 +364,12 @@ &НаКлиенте Функция ПроверитьЗаполнениеРеквизитов(ВыдаватьОшибку = Истина) + +#Если ВебКлиент Тогда + ТекстСообщения = НСтр("ru = 'Создание резервной копии не доступно в веб-клиенте.'"); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения); + РеквизитыЗаполнены = Ложь; +#Иначе РеквизитыЗаполнены = Истина; @@ -413,6 +419,8 @@ РеквизитыЗаполнены = Ложь; КонецЕсли; + +#КонецЕсли Возврат РеквизитыЗаполнены; @@ -594,13 +602,13 @@ ФайлСкрипта.УстановитьТекст(ТекстыМакетов[0]); ИмяФайлаСкрипта = ПараметрыРезервногоКопирования.КаталогВременныхФайловОбновления + "main.js"; - ФайлСкрипта.Записать(ИмяФайлаСкрипта, КодировкаТекста.UTF16); + ФайлСкрипта.Записать(ИмяФайлаСкрипта, РезервноеКопированиеИБКлиент.КодировкаФайловПрограммыРезервногоКопированияИБ()); // Вспомогательный файл: helpers.js. ФайлСкрипта = Новый ТекстовыйДокумент; ФайлСкрипта.Вывод = ИспользованиеВывода.Разрешить; ФайлСкрипта.УстановитьТекст(ТекстыМакетов[1]); - ФайлСкрипта.Записать(ПараметрыРезервногоКопирования.КаталогВременныхФайловОбновления + "helpers.js", КодировкаТекста.UTF16); + ФайлСкрипта.Записать(ПараметрыРезервногоКопирования.КаталогВременныхФайловОбновления + "helpers.js", РезервноеКопированиеИБКлиент.КодировкаФайловПрограммыРезервногоКопированияИБ()); ИмяГлавногоФайлаСкрипта = Неопределено; // Вспомогательный файл: splash.png. @@ -614,7 +622,7 @@ ФайлСкрипта = Новый ТекстовыйДокумент; ФайлСкрипта.Вывод = ИспользованиеВывода.Разрешить; ФайлСкрипта.УстановитьТекст(ТекстыМакетов[2]); - ФайлСкрипта.Записать(ИмяГлавногоФайлаСкрипта, КодировкаТекста.UTF16); + ФайлСкрипта.Записать(ИмяГлавногоФайлаСкрипта, РезервноеКопированиеИБКлиент.КодировкаФайловПрограммыРезервногоКопированияИБ()); ФайлЛога = Новый ТекстовыйДокумент; ФайлЛога.Вывод = ИспользованиеВывода.Разрешить; diff --git a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Templates/ЗаставкаВосстановления/Template.txt b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Templates/ЗаставкаВосстановления/Template.txt index 2a0245e27..4b3afd7fb 100644 --- a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Templates/ЗаставкаВосстановления/Template.txt +++ b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Templates/ЗаставкаВосстановления/Template.txt @@ -1,7 +1,7 @@ - + - + 0; - log1CInternal(connection, text, failed); - } - } - catch(e) - { - log(format("Исключение в write1CEventLog: {0}, {1}.", e.name, e.message), true); - return; - } - finally - { - connection = null; - } + if (!oFileSystemObject.FileExists(outFileName)) + return; + + var connection = createConnection(); + if (connection == null) + return; + try + { + var f = oFileSystemObject.OpenTextFile(outFileName, ForReading, false, TristateTrue); + + var text; + while (!f.AtEndOfStream) + { + text = f.ReadLine(); + while ((text.indexOf(successMarker) < 0) && (text.indexOf(errorMarker) < 0) && !f.AtEndOfStream) + text += "\n" + f.ReadLine(); + + var failed = text.indexOf(errorMarker) > 0; + log1CInternal(connection, text, failed); + } + } + catch(e) + { + log(format("Исключение в write1CEventLog: {0}, {1}.", e.name, e.message), true); + return; + } + finally + { + connection = null; + } } function doSetResult(success) { - var connection = createConnection(); - if (connection == null) - return (useComConnector ? 1 : 0); - var res = 0; - try - { - connection.РезервноеКопированиеИБСервер.ЗавершитьРезервноеКопирование(success,backupFileName); - } - catch(e) - { - log(format("Исключение при вызове РезервноеКопированиеИБСервер.ЗавершитьРезервноеКопирование: {0}, {1}.", e.name, e.message), true); - res = 2; - } - return res; + var connection = createConnection(); + if (connection == null) + return (useComConnector ? 1 : 0); + var res = 0; + try + { + connection.РезервноеКопированиеИБСервер.ЗавершитьРезервноеКопирование(success,backupFileName); + } + catch(e) + { + log(format("Исключение при вызове РезервноеКопированиеИБСервер.ЗавершитьРезервноеКопирование: {0}, {1}.", e.name, e.message), true); + res = 2; + } + return res; } // Передать в приложение результат выполнения function setResult(success) { - var result = doSetResult(success); - CollectGarbage(); // освобождает соединения с COM-объектом - return result; + var result = doSetResult(success); + CollectGarbage(); // освобождает соединения с COM-объектом + return result; } // Записать результат выполнения процедуры обновления в Event Log function writeEventLog(success) { - try - { - var eventKind = success ? EVENT_SUCCESS : EVENT_CRITICAL; - var message; - if (success) - message = "Резервное копирование базы выполнено успешно."; - else - message = "Ошибка при резервном копировании информационной базы."; - message += format(" Параметры информационной базы: {0}.", infoBasePath); - if (!success) - message += " Протокол резервного сохранен в журнал регистрации."; - oShell.LogEvent(eventKind, message); - } - catch(e) - { - log(format("Исключение в writeEventLog: {0}, {1}.", e.name, e.message), true); - } + try + { + var eventKind = success ? EVENT_SUCCESS : EVENT_CRITICAL; + var message; + if (success) + message = "Резервное копирование базы выполнено успешно."; + else + message = "Ошибка при резервном копировании информационной базы."; + message += format(" Параметры информационной базы: {0}.", infoBasePath); + if (!success) + message += " Протокол резервного сохранен в журнал регистрации."; + oShell.LogEvent(eventKind, message); + } + catch(e) + { + log(format("Исключение в writeEventLog: {0}, {1}.", e.name, e.message), true); + } } // Создание резервной копии информационной базы -function backupDB() -{ - try - { +function backupDB() { + try { var NewTextFile = oFileSystemObject.CreateTextFile(backupFileName,false); NewTextFile.Write(String.fromCharCode(80,75,5,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)); @@ -379,12 +385,14 @@ function backupDB() ret = 0; log(format("Попытка создания резервной копии", ret), ret != 0); + + fileDB = oFileSystemObject.GetFile(BaseFileName + '1Cv8.1CD'); + log(format("Размер файла 1Cv8.1CD: {0} кб.", fileDB.size)); } - catch(e) - { + catch(e) { alert(e.message); CollectGarbage(); // предотвращает исключение out of memory - log(format("Исключение при создании резервной копии базы", e.name, e.message), true); + log(format("Исключение при создании резервной копии базы: {0}, {1}", e.name, e.message), true); ret = -1; } if (ret == 0) @@ -396,10 +404,8 @@ function backupDB() // Ожидать создания файла резервной копии, начатое в backupDB() function WaitUntilFinish() { - var FileArchiveObject = new ActiveXObject("Scripting.FileSystemObject"); - try - { - FileArchive = FileArchiveObject.GetFile(backupFileName); + try { + FileArchive = oFileSystemObject.GetFile(backupFileName); } catch(e) { @@ -408,20 +414,45 @@ function WaitUntilFinish() } var nowSize = FileArchive.size; + var ZIPFile = oFileSystemObject.GetAbsolutePathName(backupFileName); + var dFolder = oShellApplication.NameSpace(ZIPFile); + + if (dFolder != null) { + var folderItem = dFolder.ParseName('1Cv8.1CD'); + if (folderItem != null) { + backupInfo0 = dFolder.GetDetailsOf(folderItem, 0); // Имя + backupInfo1 = dFolder.GetDetailsOf(folderItem, 1); // Тип + backupInfo2 = dFolder.GetDetailsOf(folderItem, 2); // Сжатый размер + backupInfo3 = dFolder.GetDetailsOf(folderItem, 3); // Защищен паролем + backupInfo4 = dFolder.GetDetailsOf(folderItem, 4); // Метод сжатия + backupInfo5 = dFolder.GetDetailsOf(folderItem, 5); // Размер + backupInfo6 = dFolder.GetDetailsOf(folderItem, 6); // Сжатие + backupInfo7 = dFolder.GetDetailsOf(folderItem, 7); // Дата изменения + + + log(format("Ожидание завершения: Имя {0}; Тип {1}; Сжатый размер {2}; Защищен паролем {3}; Метод сжатия {4}; Размер {5}; Сжатие {6}; Дата изменения {7}", backupInfo0, backupInfo1, backupInfo2, backupInfo3, backupInfo4, backupInfo5, backupInfo6, backupInfo7)); + } + } + // Файл все еще не начал создаваться, возможно выполняется интерактивное действие, ожидаем далее. - if (nowSize/1024 < 5){ + if (nowSize / 1024 < 5) { FileSize = nowSize; // Если за 5 минут файл все еще не начал создаваться, то отменяем резервное копирование. - if (CheckCount > 60){return 1;} + if (CheckCount > 60) { + log(format("За 5 минут файл все еще не начал создаваться. Трассировка: CheckCount {0}, nowSize {1}, FileSize {2}", CheckCount, nowSize, FileSize), true); + return 1; + } CheckCount = CheckCount + 1; - return -1;} + return -1; + } - if (FileSize != nowSize){ + if (FileSize != nowSize) { FileSize = nowSize; - return -1;} - + return -1; + } + return 0; } @@ -447,18 +478,18 @@ function doAllowConnections() // и оповещение о результате обновления function allowConnections() { - var result = doAllowConnections(); - CollectGarbage(); // освобождает соединения с COM-объектом - return result; + var result = doAllowConnections(); + CollectGarbage(); // освобождает соединения с COM-объектом + return result; } function fromUnicode(text){ - var str = ""; - for(var i=0; i1 <key>ru</key> - <value>Выполняется обновление %1 на версию %2</value> + <value>Выполняется обновление на версию %1</value> true true diff --git a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ИндикацияХодаОбновленияИБ/Module.bsl b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ИндикацияХодаОбновленияИБ/Module.bsl index c0d4185e1..bdbc7de75 100644 --- a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ИндикацияХодаОбновленияИБ/Module.bsl +++ b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ИндикацияХодаОбновленияИБ/Module.bsl @@ -67,7 +67,7 @@ Заголовок = НСтр("ru = 'Обновление версии программы'"); Элементы.РежимЗапуска.ТекущаяСтраница = Элементы.ОбновлениеВерсииПрограммы; Элементы.ТекстСообщенияОбновляемаяКонфигурация.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - Элементы.ТекстСообщенияОбновляемаяКонфигурация.Заголовок, Метаданные.Синоним, Метаданные.Версия); + Элементы.ТекстСообщенияОбновляемаяКонфигурация.Заголовок, Метаданные.Версия); КонецЕсли; КонецПроцедуры diff --git a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ИндикацияХодаОтложенногоОбновленияИБ/Module.bsl b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ИндикацияХодаОтложенногоОбновленияИБ/Module.bsl index 4ca24d008..2f1795917 100644 --- a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ИндикацияХодаОтложенногоОбновленияИБ/Module.bsl +++ b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ИндикацияХодаОтложенногоОбновленияИБ/Module.bsl @@ -245,7 +245,7 @@ КлючСохраненияПоложенияОкна = "ФормаДляОбычногоПользователя"; Элементы.ПодсказкаГдеНайтиЭтуФорму.Видимость = Ложь; - Элементы.ГиперссылкаОсновноеОбновление.Видимость = Пользователи.РолиДоступны("ПросмотрЖурналаРегистрации"); + Элементы.ГиперссылкаОсновноеОбновление.Видимость = ПравоДоступа("Просмотр", Метаданные.Обработки.ЖурналРегистрации); Иначе КлючСохраненияПоложенияОкна = "ФормаДляАдминистратора"; @@ -336,6 +336,8 @@ Если Обработчик.Статус = "Ошибка" Тогда Обработчик.СтатистикаВыполнения.Очистить(); Обработчик.Статус = "НеВыполнено"; + ИначеЕсли Обработчик.Статус = "Выполняется" Тогда + Обработчик.СтатистикаВыполнения.Вставить("КоличествоЗапусков", 0); КонецЕсли; КонецЦикла; КонецЦикла; diff --git a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ОтложенныеОбработчики/Module.bsl b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ОтложенныеОбработчики/Module.bsl index f0c1b25a4..5635ba92b 100644 --- a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ОтложенныеОбработчики/Module.bsl +++ b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ОтложенныеОбработчики/Module.bsl @@ -38,7 +38,7 @@ Элементы.КонтекстноеМенюЗапуститьВыделенный.Видимость = Ложь; КонецЕсли; - Если Не Пользователи.РолиДоступны("ПросмотрЖурналаРегистрации") Тогда + Если Не ПравоДоступа("Просмотр", Метаданные.Обработки.ЖурналРегистрации) Тогда Элементы.ГиперссылкаОтложенноеОбновление.Видимость = Ложь; КонецЕсли; @@ -329,6 +329,7 @@ &НаСервере Процедура ПриостановитьВыполнениеОтложенногоОбработчикаНаСервере(ПроцедураОбновления) + НачатьТранзакцию(); Попытка Блокировка = Новый БлокировкаДанных; diff --git a/SSL/src/DataProcessors/СдвигГраницыИтогов/Forms/ОсновнаяФорма/Module.bsl b/SSL/src/DataProcessors/СдвигГраницыИтогов/Forms/ОсновнаяФорма/Module.bsl index a5c7a6b71..e49897f32 100644 --- a/SSL/src/DataProcessors/СдвигГраницыИтогов/Forms/ОсновнаяФорма/Module.bsl +++ b/SSL/src/DataProcessors/СдвигГраницыИтогов/Forms/ОсновнаяФорма/Module.bsl @@ -41,20 +41,15 @@ &НаКлиенте Процедура ДлительнаяОперацияЗавершениеКлиент(Операция, ДополнительныеПараметры) Экспорт - ДополнительныеПараметры = Новый Структура("Результат", Ложь); - Обработчик = Новый ОписаниеОповещения("ДлительнаяОперацияПослеВыводаРезультата", ЭтотОбъект, ДополнительныеПараметры); + Обработчик = Новый ОписаниеОповещения("ДлительнаяОперацияПослеВыводаРезультата", ЭтотОбъект); Если Операция = Неопределено Тогда - ВыполнитьОбработкуОповещения(Обработчик); + ВыполнитьОбработкуОповещения(Обработчик, Ложь); Иначе Если Операция.Статус = "Выполнено" Тогда ПоказатьОповещениеПользователя(НСтр("ru = 'Оптимизация успешно завершена'"),,, БиблиотекаКартинок.Успешно32); - ДополнительныеПараметры.Результат = Истина; - ВыполнитьОбработкуОповещения(Обработчик); + ВыполнитьОбработкуОповещения(Обработчик, Истина); Иначе - Предупреждение = Новый Структура(); - Предупреждение.Вставить("Текст", Операция.КраткоеПредставлениеОшибки); - Предупреждение.Вставить("Подробно", Операция.ПодробноеПредставлениеОшибки); - СтандартныеПодсистемыКлиент.ВывестиПредупреждение(ЭтотОбъект, Предупреждение, Обработчик); + ВызватьИсключение Операция.КраткоеПредставлениеОшибки; КонецЕсли; КонецЕсли; @@ -63,10 +58,10 @@ &НаКлиенте Процедура ДлительнаяОперацияПослеВыводаРезультата(Результат, ДополнительныеПараметры) Экспорт Если ОписаниеОповещенияОЗакрытии <> Неопределено Тогда - ВыполнитьОбработкуОповещения(ОписаниеОповещенияОЗакрытии, ДополнительныеПараметры.Результат); // Обход особенности вызова из ПриОткрытии. + ВыполнитьОбработкуОповещения(ОписаниеОповещенияОЗакрытии, Результат); // Обход особенности вызова из ПриОткрытии. КонецЕсли; Если Открыта() Тогда - Закрыть(ДополнительныеПараметры.Результат); + Закрыть(Результат); КонецЕсли; КонецПроцедуры diff --git a/SSL/src/DataProcessors/Сканирование/Forms/РезультатСканирования/Module.bsl b/SSL/src/DataProcessors/Сканирование/Forms/РезультатСканирования/Module.bsl index 99378f66d..f3934ea35 100644 --- a/SSL/src/DataProcessors/Сканирование/Forms/РезультатСканирования/Module.bsl +++ b/SSL/src/DataProcessors/Сканирование/Forms/РезультатСканирования/Module.bsl @@ -292,7 +292,8 @@ ТекстСообщения = ТекстСообщенияОшибкиПреобразованияВPDF(ПараметрыВыполнения.ФайлРезультата); ПоказатьПредупреждение(, ТекстСообщения); УдалитьФайлы(ПутьКФайлуЛокальный); - Результат.ТекстСообщения = ТекстСообщения; + + Результат.ТекстОшибки = ТекстСообщения; ПринятьЗавершение(Результат, ПараметрыВыполнения); Возврат; КонецЕсли; @@ -322,7 +323,6 @@ Результат.ТекстОшибки = НСтр("ru='Не удалось сохранить отсканированный файл.'"); ПринятьЗавершение(Результат, ПараметрыВыполнения); - КонецПроцедуры &НаКлиенте @@ -391,7 +391,7 @@ ОбъектФайлРезультата = Новый Файл(ПараметрыВыполнения.ФайлРезультата); Если НЕ ОбъектФайлРезультата.Существует() Тогда ТекстСообщения = ТекстСообщенияОшибкиПреобразованияВPDF(ПараметрыВыполнения.ФайлРезультата); - ПараметрыВыполнения.ФайлРезультата = ""; + ПараметрыВыполнения.ФайлРезультата = ""; Результат.ТекстОшибки = ТекстСообщения; ПоказатьПредупреждение(, ТекстСообщения); ПринятьВсеКакОдинФайлЗавершение(Результат, ПараметрыВыполнения); @@ -399,6 +399,7 @@ КонецЕсли; Если НЕ ПустаяСтрока(ПараметрыВыполнения.ФайлРезультата) Тогда + Обработчик = Новый ОписаниеОповещения("ПринятьВсеКакОдинФайлЗавершение", ЭтотОбъект, ПараметрыВыполнения); ПараметрыДобавления = Новый Структура; @@ -417,7 +418,6 @@ Возврат; КонецЕсли; - Результат.ТекстОшибки = НСтр("ru='Не удалось сохранить отсканированный файл.'"); ПринятьВсеКакОдинФайлЗавершение(Результат, ПараметрыВыполнения); КонецПроцедуры @@ -457,9 +457,9 @@ ФайлРезультата = ""; Если РасширениеРезультата = "pdf" Тогда - #Если НЕ ВебКлиент Тогда - ФайлРезультата = ПолучитьИмяВременногоФайла("pdf"); - #КонецЕсли +#Если НЕ ВебКлиент Тогда + ФайлРезультата = ПолучитьИмяВременногоФайла("pdf"); +#КонецЕсли СтрокаВсехПутей = ПутьКФайлуЛокальный; ПараметрыПриложения["СтандартныеПодсистемы.КомпонентаTwain"].ОбъединитьВМногостраничныйФайл( @@ -489,9 +489,9 @@ ПоказатьПредупреждение(, Результат.ТекстОшибки); Возврат; КонецЕсли; - КонецЕсли; - Иначе + Иначе ОтсканированныеФайлы.Добавить(Результат); + КонецЕсли; КонецЕсли; Если НЕ ПустаяСтрока(ФайлРезультата) Тогда @@ -509,16 +509,18 @@ УдалитьВременныеФайлы(МассивФайловКопия); Если КоличествоОшибок > 0 Тогда - ПараметрыПредупреждения = Новый Структура("Текст, Подробно"); Если КоличествоОшибок = 1 Тогда - ПараметрыПредупреждения.Текст = ПолныйТекстВсехОшибок; + ТекстПредупреждения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось сохранить файл по причине: + |%1'"), + ПолныйТекстВсехОшибок); Иначе - ПараметрыПредупреждения.Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'При выполнении возникли ошибки (%1).'"), - Строка(КоличествоОшибок)); - ПараметрыПредупреждения.Подробно = ПолныйТекстВсехОшибок; + ТекстПредупреждения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось сохранить некоторые файлы (%1): + |%2'"), + Строка(КоличествоОшибок), ПолныйТекстВсехОшибок); КонецЕсли; - СтандартныеПодсистемыКлиент.ВывестиПредупреждение(ЭтотОбъект, ПараметрыПредупреждения); + СтандартныеПодсистемыКлиент.ПоказатьВопросПользователю(Неопределено, ТекстПредупреждения, РежимДиалогаВопрос.ОК); КонецЕсли; Закрыть(ОтсканированныеФайлы); @@ -676,11 +678,11 @@ КонецЕсли; Закрыть(Результат); + КонецПроцедуры &НаКлиенте Процедура ПринятьВсеКакОдинФайлЗавершение(Результат, ПараметрыВыполнения) Экспорт - УдалитьВременныеФайлы(ПараметрыВыполнения.МассивФайловКопия); УдалитьФайлы(ПараметрыВыполнения.ФайлРезультата); diff --git a/SSL/src/DataProcessors/СкрытиеКонфиденциальнойИнформации/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/СкрытиеКонфиденциальнойИнформации/Forms/Форма/Module.bsl index f365bd4e8..b41484689 100644 --- a/SSL/src/DataProcessors/СкрытиеКонфиденциальнойИнформации/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/СкрытиеКонфиденциальнойИнформации/Forms/Форма/Module.bsl @@ -375,9 +375,7 @@ КонецЕсли; КонецЕсли; Исключение - ИнформацияОбОшибке = ИнформацияОбОшибке(); - МодульДлительныеОперацииКлиент.ЗакрытьФормуДлительнойОперации( - ФормаДлительнойОперации); + МодульДлительныеОперацииКлиент.ЗакрытьФормуДлительнойОперации(ФормаДлительнойОперации); ВызватьИсключение; КонецПопытки; @@ -460,6 +458,7 @@ &НаКлиенте Процедура НачатьПолучениеФайловЗавершение(Результат, ДополнительныеПараметры) Экспорт // Обработчик не требуется + Возврат; КонецПроцедуры &НаКлиенте diff --git a/SSL/src/DataProcessors/СкрытиеКонфиденциальнойИнформации/ObjectModule.bsl b/SSL/src/DataProcessors/СкрытиеКонфиденциальнойИнформации/ObjectModule.bsl index 7f5522f49..81eada47c 100644 --- a/SSL/src/DataProcessors/СкрытиеКонфиденциальнойИнформации/ObjectModule.bsl +++ b/SSL/src/DataProcessors/СкрытиеКонфиденциальнойИнформации/ObjectModule.bsl @@ -370,8 +370,6 @@ РазделениеВключено = ОбщегоНазначения.РазделениеВключено(); ДоступноИспользованиеРазделенныхДанных = ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных(); - АдминистраторСистемы = Пользователи.ЭтоПолноправныйПользователь(, Истина); - ЗаполнитьКартинки(); СкрываемыеОбъектыПоТипам = СкрываемыеОбъекты(); diff --git a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/ObjectModule.bsl b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/ObjectModule.bsl index 3ba829161..6971e090c 100644 --- a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/ObjectModule.bsl +++ b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/ObjectModule.bsl @@ -406,9 +406,7 @@ // Поле ЭтоГруппа присутствует всегда для иерархических справочников. Если ПользовательскиеПоля.Найти("ЭтоГруппа") = Неопределено Тогда - ДобавитьПолеПоиска(ПользовательскиеПоля, "ЭтоГруппа"); - КонецЕсли; МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаEMAIL/ObjectModule.bsl b/SSL/src/DataProcessors/ТранспортСообщенийОбменаEMAIL/ObjectModule.bsl index ca3f73167..60283670e 100644 --- a/SSL/src/DataProcessors/ТранспортСообщенийОбменаEMAIL/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаEMAIL/ObjectModule.bsl @@ -340,12 +340,17 @@ ДополнитьСообщениеОбОшибке(ТекстОшибки); Возврат Ложь; КонецПопытки; - ПодстрокаТемыДляПоиска = ВРег(СтрЗаменить(СокрЛП(ШаблонИмениФайлаСообщения),"Message_","")); + + ПодстрокаТемыДляПоиска = ВРег(СтрЗаменить(СокрЛП(ШаблонИмениФайлаСообщения), "Message_", "")); + Для Каждого ПочтовоеСообщение Из НаборСообщений Цикл - Если ВРег(СокрЛП(ПочтовоеСообщение.Тема)) <> ВРег(СокрЛП(ТемаСообщения)) Тогда + ТемаПС = СокрЛП(ПочтовоеСообщение.Тема); + ТемаПС = СтрЗаменить(ТемаПС, Символы.Таб, ""); + + Если ВРег(ТемаПС) <> ВРег(СокрЛП(ТемаСообщения)) Тогда // Возможно, имя сообщения в формате Message_[префикс]_УИД1_УИД2 - Если СтрНайти(ВРег(СокрЛП(ПочтовоеСообщение.Тема)), ПодстрокаТемыДляПоиска) = 0 Тогда + Если СтрНайти(ВРег(ТемаПС), ПодстрокаТемыДляПоиска) = 0 Тогда Продолжить; КонецЕсли; КонецЕсли; diff --git a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ОсновнаяФорма/Module.bsl b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ОсновнаяФорма/Module.bsl index 9c416f403..e943f6492 100644 --- a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ОсновнаяФорма/Module.bsl +++ b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ОсновнаяФорма/Module.bsl @@ -38,6 +38,9 @@ Элементы.УдалениеПомеченныхИспользование.Видимость = ВидимостьФлажка; Элементы.УдалениеПомеченныхНастроитьРасписание.Видимость = ВидимостьРасписания; Элементы.УдалениеПомеченныхПредставлениеРасписания.Видимость = ВидимостьРасписания; + Если Не ВидимостьРасписания Тогда + Элементы.УдалениеПомеченныхИспользование.Заголовок = НСтр("ru = 'Автоматически удалять помеченные объекты'"); + КонецЕсли; УстановитьДоступность(); @@ -1184,12 +1187,10 @@ МодульСоединенияИБКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("СоединенияИБКлиент"); МодульСоединенияИБКлиент.ПриОткрытииФормыОшибкиУстановкиМонопольногоРежима(Оповещение, ПараметрыФормы); Иначе - ПараметрыПредупреждения = Новый Структура("Текст, Подробно"); - ПараметрыПредупреждения.Текст = НСтр("ru = 'Не удалось установить монопольный режим'"); - ПараметрыПредупреждения.Подробно = Задание.ТекстОшибкиУстановкиМонопольногоРежима; - СтандартныеПодсистемыКлиент.ВывестиПредупреждение( - ЭтотОбъект, - ПараметрыПредупреждения); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось заблокировать работу в программе по причине: + |%1'"), + Задание.ТекстОшибкиУстановкиМонопольногоРежима); КонецЕсли; Возврат; КонецЕсли; @@ -1216,7 +1217,7 @@ Если ИнформацияОбОшибке <> Неопределено Тогда Результат = Новый Структура; Результат.Вставить("ОшибкаПриУстановкеМонопольногоРежима", Истина); - Результат.Вставить("ТекстОшибкиУстановкиМонопольногоРежима", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); + Результат.Вставить("ТекстОшибкиУстановкиМонопольногоРежима", КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); Возврат Результат; КонецЕсли; КонецЕсли; @@ -1236,14 +1237,12 @@ ПараметрыМетода.Вставить("ПользовательскиеОбъекты", ПользовательскиеОбъекты); КонецЕсли; - ПараметрыМетода.Вставить("ПериодЗаписи", 1); // Секунд + ПараметрыМетода.Вставить("ПериодЗаписи", 3); // Секунд ПараметрыМетода.Вставить("Монопольно", Монопольно); // Переключение на страницу длительной операции. ПоказатьДиалогПередЗакрытием = Истина; - ПредставлениеРежима = Элементы.РежимУдаления.СписокВыбора.НайтиПоЗначению(РежимУдаления).Представление; - ПоказыватьБублик = ПараметрыМетода.УдалятьПомеченные И Монопольно; Элементы.ФоновоеЗаданиеАнимация.Видимость = ПоказыватьБублик; Элементы.ФоновоеЗаданиеПроцент.Видимость = Не ПоказыватьБублик; @@ -1427,7 +1426,6 @@ УзелТипа = УзлыПервогоУровня.Получить(ТипУдаляемого); Если УзелТипа = Неопределено Тогда - УдаляемыйМетаданные = УдаляемыйСсылка.Метаданные(); УзелТипа = ДеревоЗначений.Строки.Добавить(); УзелТипа.Значение = УдаляемыйИнформация.ПолноеИмя; УзелТипа.Представление = УдаляемыйИнформация.ПредставлениеСписка; diff --git a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Help/ru.html b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Help/ru.html index 56154cf4f..e55320e22 100644 --- a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Help/ru.html +++ b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Help/ru.html @@ -27,5 +27,11 @@
  • Рекомендуется выполнять удаление в период наименьшей активности пользователей.
  • Предусмотрена возможность Заблокировать всю работу в программе и ускорить удаление с помощью соответствующего флажка.
  • Настройка расписания автоматического удаления

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

    См. также:

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

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

    См. также:

    \ No newline at end of file diff --git a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/ManagerModule.bsl b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/ManagerModule.bsl index d006d7ea0..4dd732056 100644 --- a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/ManagerModule.bsl +++ b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/ManagerModule.bsl @@ -254,34 +254,38 @@ // Удаление циклов (кольцевых связей объектов). Процедура УдалитьОставшиесяОбъектыВОднойТранзакции(ПараметрыВыполнения) - Перем Ссылка; - // 1. Объекты, которые невозможно удалить. - // Получаются путем определения неразрешимых связей. + // 1. Объекты, которые невозможно удалить, получаются путем определения неразрешимых связей. ОбъектыКоторыеНевозможноУдалить = Новый Массив; ВложенныеНеразрешимыеСвязи = Новый Массив; - // 1.1. Первичным критерием для определения неразрешимых связей - // является тот факт, что объект, препятствующий удалению, не отмечен для удаления. - Для Каждого СтрокаТаблицы Из ПараметрыВыполнения.ПрепятствующиеУдалению Цикл - Если ПараметрыВыполнения.НеУдаленные.Найти(СтрокаТаблицы.ОбнаруженныйСсылка) = Неопределено - И ОбъектыКоторыеНевозможноУдалить.Найти(СтрокаТаблицы.УдаляемыйСсылка) = Неопределено Тогда - ОбъектыКоторыеНевозможноУдалить.Добавить(СтрокаТаблицы.УдаляемыйСсылка); - Найденные = ПараметрыВыполнения.ПрепятствующиеУдалению.НайтиСтроки(Новый Структура("ОбнаруженныйСсылка", СтрокаТаблицы.УдаляемыйСсылка)); + Для Каждого Препятствующий Из ПараметрыВыполнения.ПрепятствующиеУдалению Цикл + // 1.1. Критерием для определения неразрешимых связей является тот факт, что объект, препятствующий удалению, + // не является регистром. В случае с регистрами предполагаем, что записи регистра будут удалены автоматически, + // при удалении объекта в его ведущем измерении. + Если Препятствующий.ОбнаруженныйТип <> Тип("Строка") + И Не ОбщегоНазначения.ЭтоОбъектСсылочногоТипа(Метаданные.НайтиПоТипу(Препятствующий.ОбнаруженныйТип)) Тогда + Продолжить; + КонецЕсли; + // 1.2. А также то, что объект, препятствующий удалению, не отмечен для удаления. + Если ПараметрыВыполнения.НеУдаленные.Найти(Препятствующий.ОбнаруженныйСсылка) = Неопределено + И ОбъектыКоторыеНевозможноУдалить.Найти(Препятствующий.УдаляемыйСсылка) = Неопределено Тогда + ОбъектыКоторыеНевозможноУдалить.Добавить(Препятствующий.УдаляемыйСсылка); + Найденные = ПараметрыВыполнения.ПрепятствующиеУдалению.НайтиСтроки(Новый Структура("ОбнаруженныйСсылка", Препятствующий.УдаляемыйСсылка)); ВложенныеНеразрешимыеСвязи.Добавить(Найденные); КонецЕсли; КонецЦикла; - // 1.2. Далее при помощи массива ВложенныеНеразрешимыеСвязи - // получаются неразрешимые подчиненные - "связи связей", "связи связей связей" и т.д... + // 1.3. Далее при помощи массива ВложенныеНеразрешимыеСвязи + // получаются неразрешимые подчиненные - "связи связей", "связи связей связей" и т.д... Индекс = 0; Пока Индекс < ВложенныеНеразрешимыеСвязи.Количество() Цикл Найденные = ВложенныеНеразрешимыеСвязи[Индекс]; Индекс = Индекс + 1; - Для Каждого СтрокаТаблицы Из Найденные Цикл - Если ОбъектыКоторыеНевозможноУдалить.Найти(СтрокаТаблицы.УдаляемыйСсылка) = Неопределено Тогда - ОбъектыКоторыеНевозможноУдалить.Добавить(СтрокаТаблицы.УдаляемыйСсылка); - Найденные = ПараметрыВыполнения.ПрепятствующиеУдалению.НайтиСтроки(Новый Структура("ОбнаруженныйСсылка", СтрокаТаблицы.УдаляемыйСсылка)); + Для Каждого Препятствующий Из Найденные Цикл + Если ОбъектыКоторыеНевозможноУдалить.Найти(Препятствующий.УдаляемыйСсылка) = Неопределено Тогда + ОбъектыКоторыеНевозможноУдалить.Добавить(Препятствующий.УдаляемыйСсылка); + Найденные = ПараметрыВыполнения.ПрепятствующиеУдалению.НайтиСтроки(Новый Структура("ОбнаруженныйСсылка", Препятствующий.УдаляемыйСсылка)); ВложенныеНеразрешимыеСвязи.Добавить(Найденные); КонецЕсли; КонецЦикла; @@ -289,14 +293,14 @@ // 2. Объекты, которые можно попробовать удалить в одной транзакции. // = Массив удаляемых - Массив объектов, которые невозможно удалить. - МассивСсылок = Новый Массив; - Для Каждого Ссылка Из ПараметрыВыполнения.НеУдаленные Цикл - Если ОбъектыКоторыеНевозможноУдалить.Найти(Ссылка) = Неопределено Тогда - МассивСсылок.Добавить(Ссылка); + УдаляемыеОбъекты = Новый Массив; + Для Каждого НеУдаленныйОбъект Из ПараметрыВыполнения.НеУдаленные Цикл + Если ОбъектыКоторыеНевозможноУдалить.Найти(НеУдаленныйОбъект) = Неопределено Тогда + УдаляемыеОбъекты.Добавить(НеУдаленныйОбъект); КонецЕсли; КонецЦикла; - Количество = МассивСсылок.Количество(); + Количество = УдаляемыеОбъекты.Количество(); Если Количество = 0 Тогда Возврат; // Нет объектов для удаления. КонецЕсли; @@ -307,37 +311,37 @@ Попытка Для Номер = 1 По Количество Цикл ОбратныйИндекс = Количество - Номер; - Ссылка = МассивСсылок[ОбратныйИндекс]; + НеУдаленныйОбъект = УдаляемыеОбъекты[ОбратныйИндекс]; - Информация = СформироватьИнформациюОТипах(ПараметрыВыполнения, ТипЗнч(Ссылка)); + Информация = СформироватьИнформациюОТипах(ПараметрыВыполнения, ТипЗнч(НеУдаленныйОбъект)); Блокировка = Новый БлокировкаДанных; ЭлементБлокировки = Блокировка.Добавить(Информация.ПолноеИмя); - ЭлементБлокировки.УстановитьЗначение("Ссылка", Ссылка); + ЭлементБлокировки.УстановитьЗначение("Ссылка", НеУдаленныйОбъект); Блокировка.Заблокировать(); - Объект = Ссылка.ПолучитьОбъект(); + Объект = НеУдаленныйОбъект.ПолучитьОбъект(); Если Объект = Неопределено Тогда // Объект уже удален. Продолжить; КонецЕсли; Если Объект.ПометкаУдаления <> Истина Тогда - МассивСсылок.Удалить(ОбратныйИндекс); // Объект уже не помечен на удаление. + УдаляемыеОбъекты.Удалить(ОбратныйИндекс); // Объект уже не помечен на удаление. Продолжить; КонецЕсли; Объект.Удалить(); КонецЦикла; - Ссылка = Неопределено; + НеУдаленныйОбъект = Неопределено; - Если МассивСсылок.Количество() > 0 Тогда - ПрепятствующиеУдалению = НайтиПоСсылкам(МассивСсылок); + Если УдаляемыеОбъекты.Количество() > 0 Тогда + ПрепятствующиеУдалению = НайтиПоСсылкам(УдаляемыеОбъекты); ИмяКолонки = ПрепятствующиеУдалению.Колонки[1].Имя; - Для Каждого Ссылка Из МассивСсылок Цикл - ПоискНеПрепятствующих = Новый Структура(ИмяКолонки, Ссылка); + Для Каждого НеУдаленныйОбъект Из УдаляемыеОбъекты Цикл + ПоискНеПрепятствующих = Новый Структура(ИмяКолонки, НеУдаленныйОбъект); НеПрепятствующие = ПрепятствующиеУдалению.НайтиСтроки(ПоискНеПрепятствующих); - Для Каждого СтрокаТаблицы Из НеПрепятствующие Цикл - ПрепятствующиеУдалению.Удалить(СтрокаТаблицы); + Для Каждого Препятствующий Из НеПрепятствующие Цикл + ПрепятствующиеУдалению.Удалить(Препятствующий); КонецЦикла; КонецЦикла; @@ -348,38 +352,40 @@ Если Успех Тогда ЗафиксироватьТранзакцию(); + Иначе + ОтменитьТранзакцию(); КонецЕсли; Исключение ОтменитьТранзакцию(); Успех = Ложь; - ЗаписатьПредупреждение(Ссылка, ИнформацияОбОшибке()); + ЗаписатьПредупреждение(НеУдаленныйОбъект, ИнформацияОбОшибке()); КонецПопытки; // 4. Регистрация результата (если успех). Если Успех Тогда - Для Каждого Ссылка Из МассивСсылок Цикл + Для Каждого НеУдаленныйОбъект Из УдаляемыеОбъекты Цикл // Регистрация ссылки в коллекции удаленных. - Если ПараметрыВыполнения.Удаленные.Найти(Ссылка) = Неопределено Тогда - ПараметрыВыполнения.Удаленные.Добавить(Ссылка); + Если ПараметрыВыполнения.Удаленные.Найти(НеУдаленныйОбъект) = Неопределено Тогда + ПараметрыВыполнения.Удаленные.Добавить(НеУдаленныйОбъект); КонецЕсли; // Удаление ссылки из коллекции не удаленных. - Индекс = ПараметрыВыполнения.НеУдаленные.Найти(Ссылка); + Индекс = ПараметрыВыполнения.НеУдаленные.Найти(НеУдаленныйОбъект); Если Индекс <> Неопределено Тогда ПараметрыВыполнения.НеУдаленные.Удалить(Индекс); КонецЕсли; // Очистка информации о связях "от" удаленных объектов. - Найденные = ПараметрыВыполнения.ПрепятствующиеУдалению.НайтиСтроки(Новый Структура("УдаляемыйСсылка", Ссылка)); - Для Каждого СтрокаТаблицы Из Найденные Цикл - ПараметрыВыполнения.ПрепятствующиеУдалению.Удалить(СтрокаТаблицы); + Найденные = ПараметрыВыполнения.ПрепятствующиеУдалению.НайтиСтроки(Новый Структура("УдаляемыйСсылка", НеУдаленныйОбъект)); + Для Каждого Препятствующий Из Найденные Цикл + ПараметрыВыполнения.ПрепятствующиеУдалению.Удалить(Препятствующий); КонецЦикла; // Очистка информации о связях "к" удаленным объектам. - Найденные = ПараметрыВыполнения.ПрепятствующиеУдалению.НайтиСтроки(Новый Структура("ОбнаруженныйСсылка", Ссылка)); - Для Каждого СтрокаТаблицы Из Найденные Цикл - ПараметрыВыполнения.ПрепятствующиеУдалению.Удалить(СтрокаТаблицы); + Найденные = ПараметрыВыполнения.ПрепятствующиеУдалению.НайтиСтроки(Новый Структура("ОбнаруженныйСсылка", НеУдаленныйОбъект)); + Для Каждого Препятствующий Из Найденные Цикл + ПараметрыВыполнения.ПрепятствующиеУдалению.Удалить(Препятствующий); КонецЦикла; КонецЦикла; КонецЕсли; @@ -521,19 +527,11 @@ ПрепятствующиеУдалению = Новый ТаблицаЗначений; // Попытка удалить с контролем ссылочной целостности. - Попытка - УстановитьПривилегированныйРежим(Истина); - УдалитьОбъекты(УдаляемыеОбъекты, Истина, ПрепятствующиеУдалению); - УстановитьПривилегированныйРежим(Ложь); - Исключение - ЗаписатьПредупреждение(Неопределено, ИнформацияОбОшибке()); - КонецПопытки; - - Если ТипЗнч(ПрепятствующиеУдалению) <> Тип("ТаблицаЗначений") Тогда - Продолжить; - КонецЕсли; + УстановитьПривилегированныйРежим(Истина); + УдалитьОбъекты(УдаляемыеОбъекты, Истина, ПрепятствующиеУдалению); + УстановитьПривилегированныйРежим(Ложь); Если ПрепятствующиеУдалению.Колонки.Количество() < 3 Тогда - Продолжить; + ВызватьИсключение НСтр("ru = 'Не удалось выполнить удаление объектов.'"); КонецЕсли; // Назначение имен колонок для таблицы конфликтов, возникших при удалении. @@ -568,13 +566,9 @@ // Удаление без контроля, если все связи в исключениях поиска ссылок. Если ВсеСвязиВИсключениях Тогда - Попытка - УстановитьПривилегированныйРежим(Истина); - УдалитьОбъекты(УдаляемыеОбъекты, Ложь); - УстановитьПривилегированныйРежим(Ложь); - Исключение - ЗаписатьПредупреждение(Неопределено, ИнформацияОбОшибке()); - КонецПопытки; + УстановитьПривилегированныйРежим(Истина); + УдалитьОбъекты(УдаляемыеОбъекты, Ложь); + УстановитьПривилегированныйРежим(Ложь); Прервать; // Выход из цикла. КонецЕсли; КонецЦикла; @@ -1016,8 +1010,9 @@ ПараметрыВыполнения.Вставить("ДостигнутыйПроцент", 0); ПараметрыВыполнения.Вставить("Диапазон", 0); - ПараметрыВыполнения.Вставить("Всего", 0); + ПараметрыВыполнения.Вставить("СледующийКонтрольныйНомер", 0); ПараметрыВыполнения.Вставить("Номер", 0); + ПараметрыВыполнения.Вставить("Всего", 0); ПараметрыВыполнения.Вставить("Время", ТекущаяДатаСеанса() - 0.1); ПараметрыВыполнения.Вставить("Диапазоны", Новый Соответствие); @@ -1056,12 +1051,13 @@ КонецЕсли; ПараметрыВыполнения.ДостигнутыйПроцент = ПараметрыВыполнения.ДостигнутыйПроцент + ПараметрыВыполнения.Диапазон; ПараметрыВыполнения.Диапазон = ПараметрыВыполнения.Диапазоны[ИмяКоллекции]; + ПараметрыВыполнения.СледующийКонтрольныйНомер = 0; + ПараметрыВыполнения.Номер = 0; + Если Коллекция <> Неопределено Или ПараметрыВыполнения.Свойство(ИмяКоллекции, Коллекция) Тогда ПараметрыВыполнения.Всего = Коллекция.Количество(); - ПараметрыВыполнения.Номер = 0; Иначе ПараметрыВыполнения.Всего = 1; - ПараметрыВыполнения.Номер = 0; ОтметитьПрогрессОбходаКоллекции(ПараметрыВыполнения, ИмяКоллекции); КонецЕсли; КонецПроцедуры @@ -1072,21 +1068,38 @@ Возврат; КонецЕсли; + // Проверяется целесообразность передачи информации на клиент. + Если ПараметрыВыполнения.ИскатьПомеченные Тогда + Возврат; // Если текущий шаг - расчет помеченных, то оповещать клиент не требуется. + КонецЕсли; + + // Проверяется целесообразность передачи информации на клиент. + Если ПараметрыВыполнения.Всего < 10 Тогда + Возврат; // Если всего обрабатывается меньше 10 объектов - то оповещать клиент не требуется. + КонецЕсли; + // Регистрация прогресса. ПараметрыВыполнения.Номер = ПараметрыВыполнения.Номер + 1; // Проверка что подошло время передачи информации на клиент. - Если ТекущаяДатаСеанса() >= ПараметрыВыполнения.Время Тогда - // Установка следующего времени передачи информации на клиент. - ПараметрыВыполнения.Время = ПараметрыВыполнения.Время + ПараметрыВыполнения.ПериодЗаписи; - ИначеЕсли ПараметрыВыполнения.Номер = ПараметрыВыполнения.Всего Тогда - // Вывод последнего. - Иначе - Возврат; + Если ТекущаяДатаСеанса() < ПараметрыВыполнения.Время Тогда + Возврат; // Не чаще, чем раз в 3 секунды. КонецЕсли; + // Установка следующего времени передачи информации на клиент. + ПараметрыВыполнения.Время = ПараметрыВыполнения.Время + ПараметрыВыполнения.ПериодЗаписи; + + // Проверка что набралось достаточно изменений для передачи информации на клиент. + Если ПараметрыВыполнения.Номер < ПараметрыВыполнения.СледующийКонтрольныйНомер Тогда + Возврат; // Не чаще, чем набралось измененных объектов для изменения прогресса на 1 шаг. + КонецЕсли; + ШагОповещения = Цел(ПараметрыВыполнения.Всего / 100) + 1; + ПараметрыВыполнения.СледующийКонтрольныйНомер = ПараметрыВыполнения.Номер + ШагОповещения; + + // Расчет информации для передачи на клиент. + Процент = ПараметрыВыполнения.ДостигнутыйПроцент - + ПараметрыВыполнения.Диапазон*ПараметрыВыполнения.Номер/ПараметрыВыполнения.Всего; + + ПараметрыВыполнения.Диапазон * ПараметрыВыполнения.Номер / ПараметрыВыполнения.Всего; // Подготовка передаваемых параметров. Если ИмяКоллекции = "ПередПоискомПомеченныхНаУдаление" Тогда diff --git a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФорма/Module.bsl b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФорма/Module.bsl index 1b1d1d1db..4fa73afee 100644 --- a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФорма/Module.bsl +++ b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФорма/Module.bsl @@ -23,12 +23,6 @@ Заголовок = ЗаголовокФормы; - Если ПустаяСтрока(ТипУдаленияРегистрацииИзмененийДляУзловОбменаПослеВыгрузки) Тогда - Объект.ТипУдаленияРегистрацииИзмененийДляУзловОбменаПослеВыгрузки = 0; - Иначе - Объект.ТипУдаленияРегистрацииИзмененийДляУзловОбменаПослеВыгрузки = Число(ТипУдаленияРегистрацииИзмененийДляУзловОбменаПослеВыгрузки); - КонецЕсли; - ЗаполнитьСписокТиповДоступныхДляУдаления(); КонецПроцедуры @@ -42,6 +36,8 @@ ПриИзмененииПериода(); + ПриИзмененииТипаУдаленияРегистрацииИзменений(); + ОчиститьДанныеОФайлеДляЗагрузкиДанных(); ПрямаяВыгрузка = ?(Объект.НепосредственноеЧтениеВИБПриемнике, 1, 0); @@ -120,7 +116,7 @@ &НаКлиенте Процедура ИмяФайлаПравилОбменаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) - ВыборФайла(Элемент, ИмяФайлаПравил, Истина, , Ложь, Истина); + ВыборФайла(Элемент, ЭтотОбъект, "ИмяФайлаПравил", Истина, , Ложь, Истина); КонецПроцедуры @@ -178,28 +174,28 @@ &НаКлиенте Процедура ИмяФайлаОбменаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) - ВыборФайла(Элемент, ИмяФайлаОбмена, Ложь, , Объект.АрхивироватьФайл); + ВыборФайла(Элемент, ЭтотОбъект, "ИмяФайлаОбмена", Ложь, , Объект.АрхивироватьФайл); КонецПроцедуры &НаКлиенте Процедура ИмяФайлаПротоколаОбменаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) - ВыборФайла(Элемент, Объект.ИмяФайлаПротоколаОбмена, Ложь, "txt", Ложь); + ВыборФайла(Элемент, Объект, "ИмяФайлаПротоколаОбмена", Ложь, "txt", Ложь); КонецПроцедуры &НаКлиенте Процедура ИмяФайлаПротоколаОбменаЗагрузкаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) - ВыборФайла(Элемент, Объект.ИмяФайлаПротоколаОбменаЗагрузка, Ложь, "txt", Ложь); + ВыборФайла(Элемент, Объект, "ИмяФайлаПротоколаОбменаЗагрузка", Ложь, "txt", Ложь); КонецПроцедуры &НаКлиенте Процедура ИмяФайлаДанныхНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) - ВыборФайла(Элемент, ИмяФайлаДанных, Ложь, , Объект.АрхивироватьФайл); + ВыборФайла(Элемент, ЭтотОбъект, "ИмяФайлаДанных", Ложь, , Объект.АрхивироватьФайл); КонецПроцедуры @@ -212,12 +208,20 @@ ДиалогВыбораФайла.Каталог = Объект.КаталогИнформационнойБазыДляПодключения; ДиалогВыбораФайла.ПроверятьСуществованиеФайла = Истина; - Если ДиалогВыбораФайла.Выбрать() Тогда - - Объект.КаталогИнформационнойБазыДляПодключения = ДиалогВыбораФайла.Каталог; - + Оповещение = Новый ОписаниеОповещения("КаталогИнформационнойБазыДляПодключенияОбработкаВыбора", ЭтотОбъект); + ДиалогВыбораФайла.Показать(Оповещение); + +КонецПроцедуры + +&НаКлиенте +Процедура КаталогИнформационнойБазыДляПодключенияОбработкаВыбора(ВыбранныеФайлы, ДополнительныеПараметры) Экспорт + + Если ВыбранныеФайлы = Неопределено Тогда + Возврат; КонецЕсли; + Объект.КаталогИнформационнойБазыДляПодключения = ВыбранныеФайлы[0]; + КонецПроцедуры &НаКлиенте @@ -253,7 +257,16 @@ Процедура ИмяФайлаПравилПриИзменении(Элемент) Файл = Новый Файл(ИмяФайлаПравил); - Если ПустаяСтрока(ИмяФайлаПравил) Или Не Файл.Существует() Тогда + + Оповещение = Новый ОписаниеОповещения("ИмяФайлаПравилПослеПроверкиСуществования", ЭтотОбъект); + Файл.НачатьПроверкуСуществования(Оповещение); + +КонецПроцедуры + +&НаКлиенте +Процедура ИмяФайлаПравилПослеПроверкиСуществования(Существует, ДополнительныеПараметры) Экспорт + + Если Не Существует Тогда СообщитьПользователю(НСтр("ru = 'Не найден файл правил обмена'"), "ИмяФайлаПравил"); УстановитьПризнакЗагрузкиПравил(Ложь); Возврат; @@ -361,11 +374,7 @@ &НаКлиенте Процедура ТипУдаленияРегистрацииИзмененийДляУзловОбменаПослеВыгрузкиПриИзменении(Элемент) - Если ПустаяСтрока(ТипУдаленияРегистрацииИзмененийДляУзловОбменаПослеВыгрузки) Тогда - Объект.ТипУдаленияРегистрацииИзмененийДляУзловОбменаПослеВыгрузки = 0; - Иначе - Объект.ТипУдаленияРегистрацииИзмененийДляУзловОбменаПослеВыгрузки = Число(ТипУдаленияРегистрацииИзмененийДляУзловОбменаПослеВыгрузки); - КонецЕсли; + ПриИзмененииТипаУдаленияРегистрацииИзменений(); КонецПроцедуры @@ -393,7 +402,7 @@ &НаКлиенте Процедура ИмяФайлаПравилЗагрузкиНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) - ВыборФайла(Элемент, ИмяФайлаПравилЗагрузки, Истина, , Ложь, Истина); + ВыборФайла(Элемент, ЭтотОбъект, "ИмяФайлаПравилЗагрузки", Истина, , Ложь, Истина); КонецПроцедуры @@ -1033,12 +1042,8 @@ // Открывает диалог выбора файла. // -// Параметры: -// Элемент - Элемент управления, для которого выбираем файл. -// ПроверятьСуществование - Если Истина, то выбор отменяется если файл не существует. -// &НаКлиенте -Процедура ВыборФайла(Элемент, ИмяСвойства, ПроверятьСуществование, Знач РасширениеПоУмолчанию = "xml", +Процедура ВыборФайла(Элемент, ОбъектХранения, ИмяСвойства, ПроверятьСуществование, Знач РасширениеПоУмолчанию = "xml", АрхивироватьФайлДанных = Истина, ВыборФайлаПравил = Ложь) ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); @@ -1083,20 +1088,35 @@ ДиалогВыбораФайла.ПолноеИмяФайла = Элемент.ТекстРедактирования; ДиалогВыбораФайла.ПроверятьСуществованиеФайла = ПроверятьСуществование; - Если ДиалогВыбораФайла.Выбрать() Тогда - - ИмяСвойства = ДиалогВыбораФайла.ПолноеИмяФайла; - - Если Элемент = Элементы.ИмяФайлаПравил Тогда - ИмяФайлаПравилПриИзменении(Элемент); - ИначеЕсли Элемент = Элементы.ИмяФайлаОбмена Тогда - ИмяФайлаОбменаПриИзменении(Элемент); - ИначеЕсли Элемент = Элементы.ИмяФайлаДанных Тогда - ИмяФайлаДанныхПриИзменении(Элемент); - ИначеЕсли Элемент = Элементы.ИмяФайлаПравилЗагрузки Тогда - ИмяФайлаПравилЗагрузкиПриИзменении(Элемент); - КонецЕсли; - + ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("ОбъектХранения", ОбъектХранения); + ДополнительныеПараметры.Вставить("ИмяСвойства", ИмяСвойства); + ДополнительныеПараметры.Вставить("Элемент", Элемент); + + Оповещение = Новый ОписаниеОповещения("ДиалогВыбораФайлаОбработкаВыбора", ЭтотОбъект, ДополнительныеПараметры); + ДиалогВыбораФайла.Показать(Оповещение); + +КонецПроцедуры + +&НаКлиенте +Процедура ДиалогВыбораФайлаОбработкаВыбора(ВыбранныеФайлы, ДополнительныеПараметры) Экспорт + + Если ВыбранныеФайлы = Неопределено Тогда + Возврат; + КонецЕсли; + + ДополнительныеПараметры.ОбъектХранения[ДополнительныеПараметры.ИмяСвойства] = ВыбранныеФайлы[0]; + + Элемент = ДополнительныеПараметры.Элемент; + + Если Элемент = Элементы.ИмяФайлаПравил Тогда + ИмяФайлаПравилПриИзменении(Элемент); + ИначеЕсли Элемент = Элементы.ИмяФайлаОбмена Тогда + ИмяФайлаОбменаПриИзменении(Элемент); + ИначеЕсли Элемент = Элементы.ИмяФайлаДанных Тогда + ИмяФайлаДанныхПриИзменении(Элемент); + ИначеЕсли Элемент = Элементы.ИмяФайлаПравилЗагрузки Тогда + ИмяФайлаПравилЗагрузкиПриИзменении(Элемент); КонецЕсли; КонецПроцедуры @@ -1739,7 +1759,8 @@ КонецЕсли; - УдалитьФайлы(ИмяФайла); + Оповещение = Новый ОписаниеОповещения("ОткрытьФормуНастройкиОтладкиОбработчиковЗавершениеУдалениеФайлов", ЭтотОбъект); + НачатьУдалениеФайлов(Оповещение, ИмяФайла); КонецЕсли; @@ -1747,6 +1768,13 @@ КонецПроцедуры +&НаКлиенте +Процедура ОткрытьФормуНастройкиОтладкиОбработчиковЗавершениеУдалениеФайлов(ДополнительныеПараметры) Экспорт + + Возврат; + +КонецПроцедуры + &НаКлиенте Процедура ИзменитьРасположениеФайла() @@ -1841,6 +1869,17 @@ КонецПроцедуры +&НаКлиенте +Процедура ПриИзмененииТипаУдаленияРегистрацииИзменений() + + Если ПустаяСтрока(ТипУдаленияРегистрацииИзмененийДляУзловОбменаПослеВыгрузки) Тогда + Объект.ТипУдаленияРегистрацииИзмененийДляУзловОбменаПослеВыгрузки = 0; + Иначе + Объект.ТипУдаленияРегистрацииИзмененийДляУзловОбменаПослеВыгрузки = Число(ТипУдаленияРегистрацииИзмененийДляУзловОбменаПослеВыгрузки); + КонецЕсли; + +КонецПроцедуры + &НаКлиентеНаСервереБезКонтекста Процедура СообщитьПользователю(Текст, ПутьКДанным = "") diff --git a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФормаНастройкиОтладкиОбработчиков/Form.form b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФормаНастройкиОтладкиОбработчиков/Form.form index 105613cde..60dda4070 100644 --- a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФормаНастройкиОтладкиОбработчиков/Form.form +++ b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФормаНастройкиОтладкиОбработчиков/Form.form @@ -547,6 +547,165 @@ Группа_Шаг_4 4 + + СтраницыШаг4 + 50 + + СтраницаЗеленый + 52 + + Декорация1 + 56 + + <key>ru</key> + <value>Имя файла внешней обработки с модулем отладки на сервере</value> + + true + true + + true + + + Декорация1РасширеннаяПодсказка + 58 + Label + true + true + + Left + + + + Декорация1КонтекстноеМеню + 57 + true + + Label + true + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Страница зеленый</value> + + + СтраницаЗеленыйРасширеннаяПодсказка + 53 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + СтраницаКрасный + 54 + + Декорация2 + 59 + + <key>ru</key> + <value>Имя файла внешней обработки с модулем отладки на сервере</value> + + true + true + + true + + + Декорация2РасширеннаяПодсказка + 61 + Label + true + true + + Left + + + + Декорация2КонтекстноеМеню + 60 + true + + Label + true + true + + Style.SpecialTextColor + + + Style.NormalTextFont + + + Left + + + true + true + + true + + + <key>ru</key> + <value>Страница красный</value> + + + СтраницаКрасныйРасширеннаяПодсказка + 55 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + true + true + + true + + + <key>ru</key> + <value>Страницы шаг 4</value> + + + СтраницыШаг4РасширеннаяПодсказка + 51 + Label + true + true + + Left + + + Pages + + Auto + + ИмяФайлаВнешнейОбработкиОбработчиковСобытий 15 @@ -562,7 +721,7 @@ Объект.ИмяФайлаВнешнейОбработкиОбработчиковСобытий - Top + None OnChange ИмяФайлаВнешнейОбработкиОбработчиковСобытийПриИзменении @@ -715,6 +874,10 @@ -1 Left + + OnOpen + ПриОткрытии + OnCreateAtServer ПриСозданииНаСервере @@ -743,6 +906,23 @@
    true
    + + ЦветОсобогоТекста + + <key>ru</key> + <value>Цвет особого текста</value> + + 2 + + Color + + + true + + + true + + ВыгрузитьКодОбработчиков diff --git a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФормаНастройкиОтладкиОбработчиков/Module.bsl b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФормаНастройкиОтладкиОбработчиков/Module.bsl index 46df10bd2..8766f26be 100644 --- a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФормаНастройкиОтладкиОбработчиков/Module.bsl +++ b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФормаНастройкиОтладкиОбработчиков/Module.bsl @@ -29,6 +29,13 @@ ЗаголовокКнопки = СтрЗаменить(ЗаголовокКнопки, "%Событие%", Событие); Элементы.ВыгрузитьКодОбработчиков.Заголовок = ЗаголовокКнопки; + ЦветОсобогоТекста = ЦветаСтиля.ЦветОсобогоТекста; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + УстановитьВидимость(); КонецПроцедуры @@ -40,7 +47,7 @@ &НаКлиенте Процедура ОтладкаАлгоритмовПриИзменении(Элемент) - ОтладкаАлгоритмовПриИзмененииНаСервере(); + ПриИзмененииРежимаОтладкиИзменений(); КонецПроцедуры @@ -57,14 +64,25 @@ ДиалогВыбораФайла.ПолноеИмяФайла = Элемент.ТекстРедактирования; ДиалогВыбораФайла.ПроверятьСуществованиеФайла = Истина; - Если ДиалогВыбораФайла.Выбрать() Тогда - - Объект.ИмяФайлаВнешнейОбработкиОбработчиковСобытий = ДиалогВыбораФайла.ПолноеИмяФайла; - - ИмяФайлаВнешнейОбработкиОбработчиковСобытийПриИзменении(Элемент) - + ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("Элемент", Элемент); + + Оповещение = Новый ОписаниеОповещения("ИмяФайлаВнешнейОбработкиОбработчиковСобытийОбработкаВыбора", ЭтотОбъект, ДополнительныеПараметры); + ДиалогВыбораФайла.Показать(Оповещение); + +КонецПроцедуры + +&НаКлиенте +Процедура ИмяФайлаВнешнейОбработкиОбработчиковСобытийОбработкаВыбора(ВыбранныеФайлы, ДополнительныеПараметры) Экспорт + + Если ВыбранныеФайлы = Неопределено Тогда + Возврат; КонецЕсли; + Объект.ИмяФайлаВнешнейОбработкиОбработчиковСобытий = ВыбранныеФайлы[0]; + + ИмяФайлаВнешнейОбработкиОбработчиковСобытийПриИзменении(ДополнительныеПараметры.Элемент); + КонецПроцедуры &НаКлиенте @@ -91,11 +109,19 @@ КонецЕсли; ФайлВнешнейОбработкиОбработчиковСобытий = Новый Файл(Объект.ИмяФайлаВнешнейОбработкиОбработчиковСобытий); - Если Не ФайлВнешнейОбработкиОбработчиковСобытий.Существует() Тогда - - СообщитьПользователю(НСтр("ru = 'Указанный файл внешней обработки не существует.'"), "ИмяФайлаВнешнейОбработкиОбработчиковСобытий"); + + Оповещение = Новый ОписаниеОповещения("ПроверкаСуществованияФайлаВнешнейОбработкиОбработчиковСобытийЗавершение", ЭтотОбъект); + ФайлВнешнейОбработкиОбработчиковСобытий.НачатьПроверкуСуществования(Оповещение); + +КонецПроцедуры + +&НаКлиенте +Процедура ПроверкаСуществованияФайлаВнешнейОбработкиОбработчиковСобытийЗавершение(Существует, ДополнительныеПараметры) Экспорт + + Если Не Существует Тогда + СообщитьПользователю(НСтр("ru = 'Указанный файл внешней обработки не существует.'"), + "ИмяФайлаВнешнейОбработкиОбработчиковСобытий"); Возврат; - КонецЕсли; ПараметрыЗакрытия = Новый Структура; @@ -119,32 +145,22 @@ #Область СлужебныеПроцедурыИФункции -&НаСервере +&НаКлиенте Процедура УстановитьВидимость() - ОтладкаАлгоритмовПриИзмененииНаСервере(); + ПриИзмененииРежимаОтладкиИзменений(); // Выделение красным цветом шагов мастера, которые выполнены неправильно. - УстановитьВыделениеРамки("Группа_Шаг_4", ПустаяСтрока(Объект.ИмяФайлаВнешнейОбработкиОбработчиковСобытий)); + УстановитьВыделениеИмениФайлаВнешнейОбработки(ПустаяСтрока(Объект.ИмяФайлаВнешнейОбработкиОбработчиковСобытий)); Элементы.ОткрытьФайл.Доступность = Не ПустаяСтрока(Объект.ИмяВременногоФайлаОбработчиковСобытий); КонецПроцедуры -&НаСервере -Процедура УстановитьВыделениеРамки(ИмяРамки, НадоВыделитьРамку = Ложь) +&НаКлиенте +Процедура УстановитьВыделениеИмениФайлаВнешнейОбработки(НадоВыделить = Ложь) - РамкаШагаМастера = Элементы[ИмяРамки]; - - Если НадоВыделитьРамку Тогда - - РамкаШагаМастера.ЦветТекстаЗаголовка = ЦветаСтиля.ЦветОсобогоТекста; - - Иначе - - РамкаШагаМастера.ЦветТекстаЗаголовка = Новый Цвет; - - КонецЕсли; + Элементы.СтраницыШаг4.ТекущаяСтраница = ?(НадоВыделить, Элементы.СтраницаКрасный, Элементы.СтраницаЗеленый); КонецПроцедуры @@ -252,8 +268,8 @@ КонецПроцедуры -&НаСервере -Процедура ОтладкаАлгоритмовПриИзмененииНаСервере() +&НаКлиенте +Процедура ПриИзмененииРежимаОтладкиИзменений() Подсказка = Элементы.ПодсказкаОтладкаАлгоритмов; diff --git a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/ObjectModule.bsl b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/ObjectModule.bsl index 118fe2768..a58413daf 100644 --- a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/ObjectModule.bsl +++ b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/ObjectModule.bsl @@ -9057,6 +9057,7 @@ КонецЦикла; КонецЕсли; + // Вызов ВычислитьВБезопасномРежиме не требуется, т.к. безопасный режим устанавливается без использования средств БСП. Возврат Вычислить(Выражение); КонецФункции @@ -13788,6 +13789,7 @@ // Модули стандартных подсистем. Попытка + // Вызов ВычислитьВБезопасномРежиме не требуется, т.к. для вычисления передается строковый литерал. МодульДатыЗапретаИзменения = Вычислить("ДатыЗапретаИзменения"); Исключение МодульДатыЗапретаИзменения = Неопределено; diff --git a/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ОсновнаяФорма/Module.bsl b/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ОсновнаяФорма/Module.bsl index ae7bb5d88..2ac330b45 100644 --- a/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ОсновнаяФорма/Module.bsl +++ b/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ОсновнаяФорма/Module.bsl @@ -160,7 +160,6 @@ ВыделенныеСтроки = Элементы.СписокИтогов.ВыделенныеСтроки; ВыделеныРегистрыСИтогами = Ложь; - ВыделеныРегистрыСОстатками = Ложь; ВыделеныРегистрыСИтогамиИОстатками = Ложь; ВыделеныРегистрыСРазделениемИтогов = Ложь; @@ -178,9 +177,6 @@ Если СтрокаТаблицы.РазрешитьРазделениеИтогов Тогда ВыделеныРегистрыСРазделениемИтогов = Истина; КонецЕсли; - Если СтрокаТаблицы.ОстаткиИОбороты Тогда - ВыделеныРегистрыСОстатками = Истина; - КонецЕсли; КонецЦикла; Элементы.ГруппаИтоги.Доступность = ВыделеныРегистрыСИтогами; @@ -502,7 +498,6 @@ &НаКлиенте Процедура УстановитьПериодРассчитанныхИтогов(Команда) - Результат = Истина; ОчиститьСообщения(); МассивДействий = СписокИтогов.НайтиСтроки(Новый Структура("ОстаткиИОбороты", Истина)); @@ -530,7 +525,6 @@ &НаКлиенте Процедура ВключитьИспользованиеИтоговБыстрыйДоступ(Команда) - Результат = Истина; ОчиститьСообщения(); МассивДействий = СписокИтогов.НайтиСтроки(Новый Структура("ИспользоватьИтоги", Ложь)); @@ -567,8 +561,6 @@ Возврат; КонецЕсли; - ШагПроцесса = 100/МассивДействий.Количество(); - ПараметрыИтогов = Новый Структура; ПараметрыИтогов.Вставить("ОбрабатыватьЗаголовок", НСтр("ru='Перестроение агрегатов ...'")); ПараметрыИтогов.Вставить("ПослеПроцесса", НСтр("ru='Перестроение агрегатов завершено'")); @@ -833,10 +825,7 @@ Процедура ПолучитьОптимальныеАгрегатКлиентЗавершение(ПустойПараметр, РезультатВыполнения) Экспорт Если РезультатВыполнения.ЕстьОшибки Тогда - Предупреждение = Новый Структура; - Предупреждение.Вставить("Текст", РезультатВыполнения.ТекстСообщения); - Предупреждение.Вставить("Подробно", РезультатВыполнения.ПодробныйТекстСообщения); - СтандартныеПодсистемыКлиент.ВывестиПредупреждение(ЭтотОбъект, Предупреждение); + ВызватьИсключение РезультатВыполнения.ТекстСообщения; Иначе ПоказатьОповещениеПользователя(НСтр("ru = 'Агрегаты успешно получены.'"),, РезультатВыполнения.ТекстСообщения, БиблиотекаКартинок.Успешно32); @@ -1102,7 +1091,6 @@ Результат.Вставить("ИмяФайла", ""); Результат.Вставить("ЕстьОшибки", Ложь); Результат.Вставить("ТекстСообщения", ""); - Результат.Вставить("ПодробныйТекстСообщения", ""); Если ПолныеВозможности Тогда Коллекция = ВыделенныеСтроки("АгрегатыПоРегистрам"); @@ -1127,22 +1115,16 @@ ИмяРегистраНакопления = Коллекция[НомерСтроки - 1].ИмяМетаданного; МенеджерРегистра = РегистрыНакопления[ИмяРегистраНакопления]; - ИнформацияОбОшибке = Неопределено; Попытка ОптимальныеАгрегаты = МенеджерРегистра.ОпределитьОптимальныеАгрегаты(МаксимальныйОтносительныйРазмер); Исключение - ИнформацияОбОшибке = ИнформацияОбОшибке(); - КонецПопытки; - Если ИнформацияОбОшибке <> Неопределено Тогда Результат.ЕстьОшибки = Истина; - ЗаголовокОшибки = НСтр("ru = 'Не удалось получить оптимальные агрегаты регистра ""%1"":'"); ПодробныйТекстОшибок = ПодробныйТекстОшибок - + ?(ПодробныйТекстОшибок = "", "", Символы.ПС + Символы.ПС) - + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ЗаголовокОшибки, ИмяРегистраНакопления) - + Символы.ПС - + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); + + ?(ПустаяСтрока(ПодробныйТекстОшибок), "", Символы.ПС + Символы.ПС) + + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1: %2'"), ИмяРегистраНакопления, + КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); Продолжить; - КонецЕсли; + КонецПопытки; ПолноеИмяФайла = КаталогВременныхФайлов + ИмяРегистраНакопления + ".xml"; @@ -1191,12 +1173,12 @@ Если Всего = 1 Тогда // Когда 1 регистр. - ЭлементСписка = ФайлыДляАрхивации[0]; - ИмяРегистра = ЭлементСписка.Представление; + ЭлементСписка = Коллекция[0]; + ИмяРегистра = ЭлементСписка.Наименование; Если Результат.ЕстьОшибки Тогда Результат.ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не удалось получить оптимальные агрегаты регистра накопления ""%1"".'"), ИмяРегистра); - Результат.ПодробныйТекстСообщения = ПодробныйТекстОшибок; + НСтр("ru = 'Не удалось получить оптимальные агрегаты регистра накопления ""%1"" по причине: + |%2'"), ИмяРегистра, ПодробныйТекстОшибок); Иначе Результат.ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = '%1 (регистр накопления)'"), ИмяРегистра); @@ -1206,19 +1188,21 @@ // Ничего не получилось. Результат.ЕстьОшибки = Истина; - Результат.ТекстСообщения = НСтр("ru = 'Не удалось получить оптимальные агрегаты регистров накопления.'"); - Результат.ПодробныйТекстСообщения = ПодробныйТекстОшибок; + Результат.ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось получить оптимальные агрегаты регистров накопления по причине: + |%1'"), ПодробныйТекстОшибок); ИначеЕсли Результат.ЕстьОшибки Тогда // Частично успешно. Результат.ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Агрегаты успешно получены для %1 из %2 регистров. - |Не получены: %3.'"), + |Не получены для %3 по причине: + |%4'"), Успешно, Всего, - Всего - Успешно); - Результат.ПодробныйТекстСообщения = ПодробныйТекстОшибок; + Всего - Успешно, + ПодробныйТекстОшибок); Иначе @@ -1402,7 +1386,6 @@ Результат.Вставить("АдресФайлаВоВременномХранилище", ""); МенеджерРегистра = РегистрыНакопления[ПараметрыСервера.ИмяРегистра]; - МетаданныеРегистра = Метаданные.РегистрыНакопления[ПараметрыСервера.ИмяРегистра]; Попытка diff --git a/SSL/src/DataProcessors/УстановкаОбновлений/Forms/Форма/Form.form b/SSL/src/DataProcessors/УстановкаОбновлений/Forms/Форма/Form.form index dc4242e01..8e4716887 100644 --- a/SSL/src/DataProcessors/УстановкаОбновлений/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/УстановкаОбновлений/Forms/Форма/Form.form @@ -2691,145 +2691,6 @@ <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> - <items xsi:type="form:FormGroup"> - <name>НеуспешноеОбновление</name> - <id>271</id> - <items xsi:type="form:FormGroup"> - <name>ГруппаНеуспешноеОбновление</name> - <id>1040</id> - <items xsi:type="form:Decoration"> - <name>Надпись54</name> - <id>274</id> - <title> - <key>ru</key> - <value>Во время обновления программы произошли ошибки. Информация об ошибках сохранена в журнал регистрации.</value> - - true - true - - true - - - Надпись54ExtendedTooltip - 934 - Label - true - true - - Left - - - - Надпись54КонтекстноеМеню - 275 - true - - Label - true - false - - Left - Top - 2 - -
    - - НадписьОткрытьЖурналРегистрации - 279 - - <key>ru</key> - <value>Журнал регистрации</value> - - true - true - - true - - - НадписьОткрытьЖурналРегистрацииExtendedTooltip - 935 - Label - true - true - - Left - - - - НадписьОткрытьЖурналРегистрацииКонтекстноеМеню - 280 - true - - Label - true - false - - - Click - НадписьОткрытьЖурналРегистрацииНажатие - - true - Left - Top - - - true - true - - true - - - <key>ru</key> - <value>Не удалось установить обновление</value> - - - ГруппаНеуспешноеОбновлениеРасширеннаяПодсказка - 1041 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - WeakSeparation - true - true - auto - Auto - Auto - -
    - true - true - - true - - - <key>ru</key> - <value>Неуспешное обновление</value> - - - НеуспешноеОбновлениеExtendedTooltip - 932 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - true true diff --git a/SSL/src/DataProcessors/УстановкаОбновлений/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/УстановкаОбновлений/Forms/Форма/Module.bsl index fd443491c..809171ddb 100644 --- a/SSL/src/DataProcessors/УстановкаОбновлений/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/УстановкаОбновлений/Forms/Форма/Module.bsl @@ -39,9 +39,10 @@ Элементы.ПанельИнформацииОбОшибках.Видимость = ВидимостьПанелиОшибок(); + // Проверяем каждый раз при открытии помощника. КонфигурацияИзменена = КонфигурацияИзменена(); - НуженФайлОбновления = Не КонфигурацияИзменена; + НуженФайлОбновления = ?(КонфигурацияИзменена, 0, 1); Если Параметры.ЗавершениеРаботыСистемы Тогда Элементы.ПереключательОбновленияФайл.Видимость = Ложь; @@ -87,10 +88,6 @@ Страницы = Элементы.СтраницыПомощника.ПодчиненныеЭлементы; ИмяСтраницы = Страницы.ФайлОбновления.Имя; - Если Объект.КодЗадачиПланировщика <> 0 И Не ОбновлениеКонфигурацииКлиент.СуществуетЗадачаПланировщика(Объект.КодЗадачиПланировщика) Тогда - Объект.КодЗадачиПланировщика = 0; - КонецЕсли; - Если Не СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиента().ЭтоГлавныйУзел Тогда Если КонфигурацияИзменена Тогда ПерейтиКВыборуРежимаОбновления(); @@ -227,32 +224,12 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Страница НеуспешноеОбновление - -&НаКлиенте -Процедура НадписьОткрытьЖурналРегистрацииНажатие(Элемент) - - СписокПриложений = Новый Массив; - СписокПриложений.Добавить("COMConnection"); - СписокПриложений.Добавить("Designer"); - СписокПриложений.Добавить("1CV8"); - СписокПриложений.Добавить("1CV8C"); - - ОтборЖурналаРегистрации = Новый Структура; - ОтборЖурналаРегистрации.Вставить("Пользователь", ИмяПользователя()); - ОтборЖурналаРегистрации.Вставить("ИмяПриложения", СписокПриложений); - - ОткрытьФорму("Обработка.ЖурналРегистрации.Форма", ОтборЖурналаРегистрации); - -КонецПроцедуры - &НаКлиенте Процедура НадписьВыявленныеПроблемыОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка) Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.КонтрольВеденияУчета") Тогда - МодульКонтрольВеденияУчетаКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("КонтрольВеденияУчетаКлиент"); - МодульКонтрольВеденияУчетаКлиент.ОткрытьОтчетПоПроблемамИзОбработкиОбновления(ЭтотОбъект, СтандартнаяОбработка); + МодульКонтрольВеденияУчетаСлужебныйКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("КонтрольВеденияУчетаСлужебныйКлиент"); + МодульКонтрольВеденияУчетаСлужебныйКлиент.ОткрытьОтчетПоПроблемамИзОбработкиОбновления(ЭтотОбъект, СтандартнаяОбработка); КонецЕсли; КонецПроцедуры @@ -262,8 +239,8 @@ Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтрольВеденияУчета") Тогда МодульКонтрольВеденияУчета = ОбщегоНазначения.ОбщийМодуль("КонтрольВеденияУчета"); - СводнаяИнформацияПоВидамПроверки = МодульКонтрольВеденияУчета.СводнаяИнформацияПоВидамПроверки("СистемныеПроверки"); - Возврат СводнаяИнформацияПоВидамПроверки.Количество > 0; + СводнаяИнформацияПоВидамПроверок = МодульКонтрольВеденияУчета.СводнаяИнформацияПоВидамПроверок("СистемныеПроверки"); + Возврат СводнаяИнформацияПоВидамПроверок.Количество > 0; Иначе Возврат Ложь; КонецЕсли; @@ -377,11 +354,6 @@ Элементы.КнопкаДалее.Отображение = ОтображениеКнопки.КартинкаИТекст; КонецЕсли; - ИначеЕсли НоваяТекущаяСтраница = Страницы.НеуспешноеОбновление Тогда - - ФункцияКнопкиДалее = Ложь; - ДоступностьКнопкиЗакрыть = Ложь; - ИначеЕсли НоваяТекущаяСтраница = Страницы.ФайлОбновления Тогда ДоступностьКнопкиНазад = Ложь; @@ -437,7 +409,6 @@ Если СоединенияИнфо.НаличиеАктивныхСоединений Тогда ВсеСтраницы = Элементы.ПанельАктивныеПользователи.ПодчиненныеЭлементы; - ДоступностьКнопкиДалее = Истина; Если СоединенияИнфо.НаличиеCOMСоединений Тогда Элементы.ПанельАктивныеПользователи.ТекущаяСтраница = ВсеСтраницы.АктивныеСоединения; ИначеЕсли СоединенияИнфо.НаличиеСоединенияКонфигуратором Тогда @@ -513,8 +484,7 @@ НоваяТекущаяСтраница = ТекущаяСтраница; Если ТекущаяСтраница = Страницы.ВыборРежимаОбновленияФайл - Или ТекущаяСтраница = Страницы.ВыборРежимаОбновленияСервер - Или ТекущаяСтраница = Страницы.НеуспешноеОбновление Тогда + Или ТекущаяСтраница = Страницы.ВыборРежимаОбновленияСервер Тогда НоваяТекущаяСтраница = Страницы.ФайлОбновления; КонецЕсли; @@ -636,10 +606,6 @@ |корректные параметры администрирования информационной базы.'"); ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(ИмяСобытияЖурнала, "Ошибка", ТекстСообщения); - НоваяТекущаяСтраница = Элементы.НеуспешноеОбновление; - ПередОткрытиемСтраницы(НоваяТекущаяСтраница); - Элементы.СтраницыПомощника.ТекущаяСтраница = НоваяТекущаяСтраница; - КонецЕсли; ОбновлениеКонфигурацииКлиент.ЗаписатьСобытияВЖурналРегистрации(); diff --git a/SSL/src/DataProcessors/УстановкаОбновлений/Templates/ЗаставкаОбновленияКонфигурации/Template.txt b/SSL/src/DataProcessors/УстановкаОбновлений/Templates/ЗаставкаОбновленияКонфигурации/Template.txt index 8bd127c26..4d12134c6 100644 --- a/SSL/src/DataProcessors/УстановкаОбновлений/Templates/ЗаставкаОбновленияКонфигурации/Template.txt +++ b/SSL/src/DataProcessors/УстановкаОбновлений/Templates/ЗаставкаОбновленияКонфигурации/Template.txt @@ -1,7 +1,7 @@ - + TextDocument + + СкриптСозданияЗадачиПланировщикаЗадач + + ru + Скрипт создания задачи планировщика задач + + TextDocument + diff --git a/SSL/src/DefinedTypes/ВладелецШаблонаСообщения/ВладелецШаблонаСообщения.mdo b/SSL/src/DefinedTypes/ВладелецШаблонаСообщения/ВладелецШаблонаСообщения.mdo new file mode 100644 index 000000000..3eeca04c0 --- /dev/null +++ b/SSL/src/DefinedTypes/ВладелецШаблонаСообщения/ВладелецШаблонаСообщения.mdo @@ -0,0 +1,14 @@ + + + + + + ВладелецШаблонаСообщения + + ru + Владелец шаблона сообщения + + + CatalogRef.ИдентификаторыОбъектовМетаданных + + diff --git a/SSL/src/DefinedTypes/УточнениеКонтекстаПроверкиСостоянияСистемы/УточнениеКонтекстаПроверкиСостоянияСистемы.mdo b/SSL/src/DefinedTypes/УточнениеКонтекстаПроверокВеденияУчета/УточнениеКонтекстаПроверокВеденияУчета.mdo similarity index 70% rename from SSL/src/DefinedTypes/УточнениеКонтекстаПроверкиСостоянияСистемы/УточнениеКонтекстаПроверкиСостоянияСистемы.mdo rename to SSL/src/DefinedTypes/УточнениеКонтекстаПроверокВеденияУчета/УточнениеКонтекстаПроверокВеденияУчета.mdo index 593069f70..b1a246923 100644 --- a/SSL/src/DefinedTypes/УточнениеКонтекстаПроверкиСостоянияСистемы/УточнениеКонтекстаПроверкиСостоянияСистемы.mdo +++ b/SSL/src/DefinedTypes/УточнениеКонтекстаПроверокВеденияУчета/УточнениеКонтекстаПроверокВеденияУчета.mdo @@ -3,10 +3,10 @@ - УточнениеКонтекстаПроверкиСостоянияСистемы + УточнениеКонтекстаПроверокВеденияУчета ru - Уточнение контекста проверки состояния системы + Уточнение контекста проверок ведения учета String diff --git a/SSL/src/DocumentJournals/Взаимодействия/Forms/НастройкиРаботыСПочтой/Module.bsl b/SSL/src/DocumentJournals/Взаимодействия/Forms/НастройкиРаботыСПочтой/Module.bsl index fdfe27e5a..ac9182386 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Forms/НастройкиРаботыСПочтой/Module.bsl +++ b/SSL/src/DocumentJournals/Взаимодействия/Forms/НастройкиРаботыСПочтой/Module.bsl @@ -195,21 +195,13 @@ &НаСервере Процедура СохранитьНастройки() - Если ФорматПодписиДляНовыхСообщений <> Перечисления.СпособыРедактированияЭлектронныхПисем.HTML Тогда - - ПодписьДляНовыхСообщенийФорматированныйДокумент = Неопределено; - - Иначе + Если ФорматПодписиДляНовыхСообщений = Перечисления.СпособыРедактированияЭлектронныхПисем.HTML Тогда ПодписьДляНовыхСообщенийПростойТекст = НовоеСообщениеФорматированныйДокумент.ПолучитьТекст(); КонецЕсли; - Если ФорматПодписиПриОтветеПересылке <> Перечисления.СпособыРедактированияЭлектронныхПисем.HTML Тогда - - ПодписьПриОтветеПересылкеФорматированныйДокумент = Неопределено; - - Иначе + Если ФорматПодписиПриОтветеПересылке = Перечисления.СпособыРедактированияЭлектронныхПисем.HTML Тогда ПодписьПриОтветеПересылкеПростойТекст = ПриОтветеПересылкеФорматированныйДокумент.ПолучитьТекст(); diff --git a/SSL/src/DocumentJournals/Взаимодействия/Forms/ПечатьЭлектронногоПисьма/Form.form b/SSL/src/DocumentJournals/Взаимодействия/Forms/ПечатьЭлектронногоПисьма/Form.form index ea6647703..3558dab60 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Forms/ПечатьЭлектронногоПисьма/Form.form +++ b/SSL/src/DocumentJournals/Взаимодействия/Forms/ПечатьЭлектронногоПисьма/Form.form @@ -555,8 +555,7 @@ 4 - String - + Boolean true diff --git a/SSL/src/DocumentJournals/Взаимодействия/Forms/ПечатьЭлектронногоПисьма/Module.bsl b/SSL/src/DocumentJournals/Взаимодействия/Forms/ПечатьЭлектронногоПисьма/Module.bsl index cc821fce6..5667c65f8 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Forms/ПечатьЭлектронногоПисьма/Module.bsl +++ b/SSL/src/DocumentJournals/Взаимодействия/Forms/ПечатьЭлектронногоПисьма/Module.bsl @@ -226,7 +226,6 @@ Если ПочтовоеСообщение.СтатусРазбора = СтатусРазбораИнтернетПочтовогоСообщения.ОбнаруженыОшибки Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Не удалось разобрать почтовое сообщение.'")); - Отказ = Истина; Возврат; КонецЕсли; @@ -253,8 +252,6 @@ Для Каждого Вложение Из ПочтовоеСообщение.Вложения Цикл - ЭтоВложениеПисьмо = Ложь; - Если НЕ ПустаяСтрока(Вложение.Идентификатор) И СтрНайти(СтруктураПисьмо.ТекстHTML, Вложение.Имя) = 0 Тогда diff --git a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Form.form b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Form.form index a4a5c0253..679fc4760 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Form.form +++ b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Form.form @@ -6875,97 +6875,97 @@ ВЫБРАТЬ ВЫБОР - КОГДА ЖурналДокументовВзаимодействия.Ссылка ССЫЛКА Документ.Встреча + КОГДА ЖурналДокументовВзаимодействияПереопределяемый.Ссылка ССЫЛКА Документ.Встреча ТОГДА ВЫБОР - КОГДА ЖурналДокументовВзаимодействия.ПометкаУдаления + КОГДА ЖурналДокументовВзаимодействияПереопределяемый.ПометкаУдаления ТОГДА 10 ИНАЧЕ 0 КОНЕЦ - КОГДА ЖурналДокументовВзаимодействия.Ссылка ССЫЛКА Документ.ЗапланированноеВзаимодействие + КОГДА ЖурналДокументовВзаимодействияПереопределяемый.Ссылка ССЫЛКА Документ.ЗапланированноеВзаимодействие ТОГДА ВЫБОР - КОГДА ЖурналДокументовВзаимодействия.ПометкаУдаления + КОГДА ЖурналДокументовВзаимодействияПереопределяемый.ПометкаУдаления ТОГДА 11 ИНАЧЕ 1 КОНЕЦ - КОГДА ЖурналДокументовВзаимодействия.Ссылка ССЫЛКА Документ.ТелефонныйЗвонок + КОГДА ЖурналДокументовВзаимодействияПереопределяемый.Ссылка ССЫЛКА Документ.ТелефонныйЗвонок ТОГДА ВЫБОР - КОГДА ЖурналДокументовВзаимодействия.ПометкаУдаления + КОГДА ЖурналДокументовВзаимодействияПереопределяемый.ПометкаУдаления ТОГДА 12 ИНАЧЕ 2 КОНЕЦ - КОГДА ЖурналДокументовВзаимодействия.Ссылка ССЫЛКА Документ.ЭлектронноеПисьмоВходящее + КОГДА ЖурналДокументовВзаимодействияПереопределяемый.Ссылка ССЫЛКА Документ.ЭлектронноеПисьмоВходящее ТОГДА ВЫБОР - КОГДА ЖурналДокументовВзаимодействия.ПометкаУдаления + КОГДА ЖурналДокументовВзаимодействияПереопределяемый.ПометкаУдаления ТОГДА 13 ИНАЧЕ 3 КОНЕЦ - КОГДА ЖурналДокументовВзаимодействия.Ссылка ССЫЛКА Документ.ЭлектронноеПисьмоИсходящее + КОГДА ЖурналДокументовВзаимодействияПереопределяемый.Ссылка ССЫЛКА Документ.ЭлектронноеПисьмоИсходящее ТОГДА ВЫБОР - КОГДА ЖурналДокументовВзаимодействия.ПометкаУдаления + КОГДА ЖурналДокументовВзаимодействияПереопределяемый.ПометкаУдаления ТОГДА 14 ИНАЧЕ ВЫБОР - КОГДА ЖурналДокументовВзаимодействия.СтатусИсходящегоПисьма = ЗНАЧЕНИЕ(Перечисление.СтатусыИсходящегоЭлектронногоПисьма.Черновик) + КОГДА ЖурналДокументовВзаимодействияПереопределяемый.СтатусИсходящегоПисьма = ЗНАЧЕНИЕ(Перечисление.СтатусыИсходящегоЭлектронногоПисьма.Черновик) ТОГДА 15 - КОГДА ЖурналДокументовВзаимодействия.СтатусИсходящегоПисьма = ЗНАЧЕНИЕ(Перечисление.СтатусыИсходящегоЭлектронногоПисьма.Исходящее) + КОГДА ЖурналДокументовВзаимодействияПереопределяемый.СтатусИсходящегоПисьма = ЗНАЧЕНИЕ(Перечисление.СтатусыИсходящегоЭлектронногоПисьма.Исходящее) ТОГДА 16 ИНАЧЕ 4 КОНЕЦ КОНЕЦ - КОГДА ЖурналДокументовВзаимодействия.Ссылка ССЫЛКА Документ.СообщениеSMS + КОГДА ЖурналДокументовВзаимодействияПереопределяемый.Ссылка ССЫЛКА Документ.СообщениеSMS ТОГДА ВЫБОР - КОГДА ЖурналДокументовВзаимодействия.ПометкаУдаления + КОГДА ЖурналДокументовВзаимодействияПереопределяемый.ПометкаУдаления ТОГДА 22 ИНАЧЕ ВЫБОР - КОГДА ЖурналДокументовВзаимодействия.СтатусИсходящегоПисьма = ЗНАЧЕНИЕ(Перечисление.СостоянияДокументаСообщениеSMS.Черновик) + КОГДА ЖурналДокументовВзаимодействияПереопределяемый.СтатусИсходящегоПисьма = ЗНАЧЕНИЕ(Перечисление.СостоянияДокументаСообщениеSMS.Черновик) ТОГДА 17 - КОГДА ЖурналДокументовВзаимодействия.СтатусИсходящегоПисьма = ЗНАЧЕНИЕ(Перечисление.СостоянияДокументаСообщениеSMS.Исходящее) + КОГДА ЖурналДокументовВзаимодействияПереопределяемый.СтатусИсходящегоПисьма = ЗНАЧЕНИЕ(Перечисление.СостоянияДокументаСообщениеSMS.Исходящее) ТОГДА 18 - КОГДА ЖурналДокументовВзаимодействия.СтатусИсходящегоПисьма = ЗНАЧЕНИЕ(Перечисление.СостоянияДокументаСообщениеSMS.Доставляется) + КОГДА ЖурналДокументовВзаимодействияПереопределяемый.СтатусИсходящегоПисьма = ЗНАЧЕНИЕ(Перечисление.СостоянияДокументаСообщениеSMS.Доставляется) ТОГДА 19 - КОГДА ЖурналДокументовВзаимодействия.СтатусИсходящегоПисьма = ЗНАЧЕНИЕ(Перечисление.СостоянияДокументаСообщениеSMS.ЧастичноДоставлено) + КОГДА ЖурналДокументовВзаимодействияПереопределяемый.СтатусИсходящегоПисьма = ЗНАЧЕНИЕ(Перечисление.СостоянияДокументаСообщениеSMS.ЧастичноДоставлено) ТОГДА 21 - КОГДА ЖурналДокументовВзаимодействия.СтатусИсходящегоПисьма = ЗНАЧЕНИЕ(Перечисление.СостоянияДокументаСообщениеSMS.НеДоставлено) + КОГДА ЖурналДокументовВзаимодействияПереопределяемый.СтатусИсходящегоПисьма = ЗНАЧЕНИЕ(Перечисление.СостоянияДокументаСообщениеSMS.НеДоставлено) ТОГДА 23 - КОГДА ЖурналДокументовВзаимодействия.СтатусИсходящегоПисьма = ЗНАЧЕНИЕ(Перечисление.СостоянияДокументаСообщениеSMS.Доставлено) + КОГДА ЖурналДокументовВзаимодействияПереопределяемый.СтатусИсходящегоПисьма = ЗНАЧЕНИЕ(Перечисление.СостоянияДокументаСообщениеSMS.Доставлено) ТОГДА 24 ИНАЧЕ 17 КОНЕЦ КОНЕЦ КОНЕЦ КАК НомерКартинки, - ЖурналДокументовВзаимодействия.Ссылка, - ЖурналДокументовВзаимодействия.Дата, - ЖурналДокументовВзаимодействия.ПометкаУдаления, - ЖурналДокументовВзаимодействия.Номер, - ЖурналДокументовВзаимодействия.Автор, - ЖурналДокументовВзаимодействия.Входящий, - ЖурналДокументовВзаимодействия.Тема, - ЖурналДокументовВзаимодействия.Ответственный КАК Ответственный, - ЕСТЬNULL(ПредметыВзаимодействий.Рассмотрено, Ложь) КАК Рассмотрено, - ЕСТЬNULL(ПредметыВзаимодействий.РассмотретьПосле, ДатаВремя(1,1,1)) КАК РассмотретьПосле, - ЖурналДокументовВзаимодействия.Участники, - ЖурналДокументовВзаимодействия.Тип, - ЖурналДокументовВзаимодействия.СтатусИсходящегоПисьма, - ЖурналДокументовВзаимодействия.ЕстьВложения, - ЕСТЬNULL(ПредметыВзаимодействий.Предмет, НЕОПРЕДЕЛЕНО) КАК Предмет, - ТИПЗНАЧЕНИЯ(ПредметыВзаимодействий.Предмет) КАК ТипПредмета, - ЖурналДокументовВзаимодействия.УчетнаяЗапись, - ЕСТЬNULL(ПредметыВзаимодействий.ПапкаЭлектронногоПисьма, ЗНАЧЕНИЕ(Справочник.ПапкиЭлектронныхПисем.ПустаяСсылка)) КАК Папка, - ЖурналДокументовВзаимодействия.ПолученоОтправлено КАК ПолученоОтправлено, - ВЫРАЗИТЬ(ЖурналДокументовВзаимодействия.Размер / 1024 КАК ЧИСЛО(10, 2)) КАК Размер, - ЖурналДокументовВзаимодействия.Важность, + ЖурналДокументовВзаимодействияПереопределяемый.Ссылка, + ЖурналДокументовВзаимодействияПереопределяемый.Дата, + ЖурналДокументовВзаимодействияПереопределяемый.ПометкаУдаления, + ЖурналДокументовВзаимодействияПереопределяемый.Номер, + ЖурналДокументовВзаимодействияПереопределяемый.Автор, + ЖурналДокументовВзаимодействияПереопределяемый.Входящий, + ЖурналДокументовВзаимодействияПереопределяемый.Тема, + ЖурналДокументовВзаимодействияПереопределяемый.Ответственный КАК Ответственный, + ЕСТЬNULL(ПредметыВзаимодействийПереопределяемый.Рассмотрено, Ложь) КАК Рассмотрено, + ЕСТЬNULL(ПредметыВзаимодействийПереопределяемый.РассмотретьПосле, ДатаВремя(1,1,1)) КАК РассмотретьПосле, + ЖурналДокументовВзаимодействияПереопределяемый.Участники, + ЖурналДокументовВзаимодействияПереопределяемый.Тип, + ЖурналДокументовВзаимодействияПереопределяемый.СтатусИсходящегоПисьма, + ЖурналДокументовВзаимодействияПереопределяемый.ЕстьВложения, + ЕСТЬNULL(ПредметыВзаимодействийПереопределяемый.Предмет, НЕОПРЕДЕЛЕНО) КАК Предмет, + ТИПЗНАЧЕНИЯ(ПредметыВзаимодействийПереопределяемый.Предмет) КАК ТипПредмета, + ЖурналДокументовВзаимодействияПереопределяемый.УчетнаяЗапись, + ЕСТЬNULL(ПредметыВзаимодействийПереопределяемый.ПапкаЭлектронногоПисьма, ЗНАЧЕНИЕ(Справочник.ПапкиЭлектронныхПисем.ПустаяСсылка)) КАК Папка, + ЖурналДокументовВзаимодействияПереопределяемый.ПолученоОтправлено КАК ПолученоОтправлено, + ВЫРАЗИТЬ(ЖурналДокументовВзаимодействияПереопределяемый.Размер / 1024 КАК ЧИСЛО(10, 2)) КАК Размер, + ЖурналДокументовВзаимодействияПереопределяемый.Важность, ВЫБОР - КОГДА ЖурналДокументовВзаимодействия.Важность = ЗНАЧЕНИЕ(Перечисление.ВариантыВажностиВзаимодействия.Высокая) + КОГДА ЖурналДокументовВзаимодействияПереопределяемый.Важность = ЗНАЧЕНИЕ(Перечисление.ВариантыВажностиВзаимодействия.Высокая) ТОГДА 2 - КОГДА ЖурналДокументовВзаимодействия.Важность = ЗНАЧЕНИЕ(Перечисление.ВариантыВажностиВзаимодействия.Низкая) + КОГДА ЖурналДокументовВзаимодействияПереопределяемый.Важность = ЗНАЧЕНИЕ(Перечисление.ВариантыВажностиВзаимодействия.Низкая) ТОГДА 0 ИНАЧЕ 1 КОНЕЦ КАК ВажностьНомерКартинки ИЗ - ЖурналДокументов.Взаимодействия КАК ЖурналДокументовВзаимодействия - ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПредметыПапкиВзаимодействий КАК ПредметыВзаимодействий - ПО ЖурналДокументовВзаимодействия.Ссылка = ПредметыВзаимодействий.Взаимодействие + ЖурналДокументов.Взаимодействия КАК ЖурналДокументовВзаимодействияПереопределяемый + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПредметыПапкиВзаимодействий КАК ПредметыВзаимодействийПереопределяемый + ПО ЖурналДокументовВзаимодействияПереопределяемый.Ссылка = ПредметыВзаимодействийПереопределяемый.Взаимодействие {ГДЕ - ЖурналДокументовВзаимодействия.Ссылка КАК Поиск} + ЖурналДокументовВзаимодействияПереопределяемый.Ссылка КАК Поиск} DocumentJournal.Взаимодействия true true @@ -8138,28 +8138,28 @@ ВЫБРАТЬ РАЗЛИЧНЫЕ - СостоянияКонтактовВзаимодействий.Контакт, - СостоянияКонтактовВзаимодействий.КоличествоНеРассмотрено, - СостоянияКонтактовВзаимодействий.ДатаПоследнегоВзаимодействия, - ТИПЗНАЧЕНИЯ(СостоянияКонтактовВзаимодействий.Контакт) КАК ТипКонтакта + СостоянияКонтактовВзаимодействийПереопределяемый.Контакт КАК Контакт, + СостоянияКонтактовВзаимодействийПереопределяемый.КоличествоНеРассмотрено КАК КоличествоНеРассмотрено, + СостоянияКонтактовВзаимодействийПереопределяемый.ДатаПоследнегоВзаимодействия КАК ДатаПоследнегоВзаимодействия, + ТИПЗНАЧЕНИЯ(СостоянияКонтактовВзаимодействийПереопределяемый.Контакт) КАК ТипКонтакта ИЗ - РегистрСведений.СостоянияКонтактовВзаимодействий КАК СостоянияКонтактовВзаимодействий - {ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КонтактыВзаимодействий КАК КонтактыВзаимодействий - ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ПредметыПапкиВзаимодействий КАК ПредметыПапкиВзаимодействий - ПО КонтактыВзаимодействий.Взаимодействие = ПредметыПапкиВзаимодействий.Взаимодействие - ВНУТРЕННЕЕ СОЕДИНЕНИЕ ЖурналДокументов.Взаимодействия КАК Взаимодействия - ПО КонтактыВзаимодействий.Взаимодействие = Взаимодействия.Ссылка - ПО СостоянияКонтактовВзаимодействий.Контакт = КонтактыВзаимодействий.Контакт} + РегистрСведений.СостоянияКонтактовВзаимодействий КАК СостоянияКонтактовВзаимодействийПереопределяемый + {ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КонтактыВзаимодействий КАК КонтактыВзаимодействийПереопределяемый + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ПредметыПапкиВзаимодействий КАК ПредметыПапкиВзаимодействийПереопределяемый + ПО КонтактыВзаимодействийПереопределяемый.Взаимодействие = ПредметыПапкиВзаимодействийПереопределяемый.Взаимодействие + ВНУТРЕННЕЕ СОЕДИНЕНИЕ ЖурналДокументов.Взаимодействия КАК ВзаимодействияПереопределяемый + ПО КонтактыВзаимодействийПереопределяемый.Взаимодействие = ВзаимодействияПереопределяемый.Ссылка + ПО СостоянияКонтактовВзаимодействийПереопределяемый.Контакт = КонтактыВзаимодействийПереопределяемый.Контакт} {ГДЕ - Взаимодействия.Ответственный, - Взаимодействия.Тип, - Взаимодействия.Важность, - Взаимодействия.СтатусИсходящегоПисьма, - Взаимодействия.УчетнаяЗапись, - Взаимодействия.Автор, - Взаимодействия.Входящий, - ПредметыПапкиВзаимодействий.Рассмотрено, - ПредметыПапкиВзаимодействий.РассмотретьПосле} + ВзаимодействияПереопределяемый.Ответственный, + ВзаимодействияПереопределяемый.Тип, + ВзаимодействияПереопределяемый.Важность, + ВзаимодействияПереопределяемый.СтатусИсходящегоПисьма, + ВзаимодействияПереопределяемый.УчетнаяЗапись, + ВзаимодействияПереопределяемый.Автор, + ВзаимодействияПереопределяемый.Входящий, + ПредметыПапкиВзаимодействийПереопределяемый.Рассмотрено, + ПредметыПапкиВзаимодействийПереопределяемый.РассмотретьПосле} InformationRegister.СостоянияКонтактовВзаимодействий true true diff --git a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Module.bsl b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Module.bsl index e555da168..97e5e7812 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Module.bsl @@ -27,7 +27,6 @@ ОпределитьДоступностьПолнотекстовыйПоиск(); ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(Закладки, "Владелец", Пользователи.ТекущийПользователь(),,, Истина); - ТекущийПользователь = Пользователи.АвторизованныйПользователь(); ДополнитьМенюПанелиНавигации(); Взаимодействия.ЗаполнитьПодменюСтатус(Элементы.СписокСтатус, ЭтотОбъект); @@ -51,6 +50,12 @@ ПодготовитьНастройкиФормыКВыводуТекущейСсылки(ТекущаяСсылка); КонецЕсли; + // СтандартныеПодсистемы.ПодключаемыеКоманды + ПараметрыРазмещения = ПодключаемыеКоманды.ПараметрыРазмещения(); + ПараметрыРазмещения.Вставить("КоманднаяПанель", Элементы.ГруппаПанельНавигацииСписок.ПодчиненныеЭлементы.КоманднаяПанельВариантаНавигации); + ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект, ПараметрыРазмещения); + // Конец СтандартныеПодсистемы.ПодключаемыеКоманды + Взаимодействия.ЗаполнитьСписокДоступныхДляСозданияДокументов(ДокументыДоступныеДляСоздания); КонецПроцедуры @@ -339,6 +344,10 @@ КонецЕсли; + // СтандартныеПодсистемы.ПодключаемыеКоманды + ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект); + // Конец СтандартныеПодсистемы.ПодключаемыеКоманды + КонецПроцедуры &НаКлиенте @@ -504,7 +513,6 @@ "Поиск", Неопределено, ВидСравненияКомпоновкиДанных.Равно,,Ложь); - ОснованиеВыбора = ""; Элементы.ОписаниеНайденоПП.Видимость = РасширенныйПоиск; КонецЕсли; @@ -1435,7 +1443,8 @@ &НаСервере Процедура ПриИзмененииСтатусаСервер(ОбновлятьПанельНавигации) - ВзаимодействияКлиентСервер.БыстрыйОтборСписокПриИзменении(ЭтотОбъект, "Статус"); + ДатаДляОтбора = ТекущаяДатаСеанса(); + ВзаимодействияКлиентСервер.БыстрыйОтборСписокПриИзменении(ЭтотОбъект, "Статус", ДатаДляОтбора); ШаблонЗаголовка = НСтр("ru = 'Статус: %1'"); ПредставлениеСтатуса = ВзаимодействияКлиентСервер.СписокСтатусов().НайтиПоЗначению(Статус).Представление; @@ -1571,7 +1580,7 @@ ИзменитьОтборСписок("Закладки",Новый Структура("Значение", ТекущиеДанные.Ссылка)); СохранитьТекущееАктивноеЗначениеВНастройках("Закладки", ТекущиеДанные.Ссылка); Иначе - ГруппаОтбора = СоздатьГруппуОтбораПанелиНавигации(); + СоздатьГруппуОтбораПанелиНавигации(); КонецЕсли; ИначеЕсли Элементы.СтраницыПанелиНавигации.ТекущаяСтраница = Элементы.СтраницаСвойства Тогда ТекущиеДанные = Элементы.Свойства.ТекущиеДанные; @@ -1627,11 +1636,16 @@ Процедура ИзменитьОтборСписок(ИмяТаблицы, ДанныеДляОбработки); Если ИмяТаблицы = "Предметы" ИЛИ ИмяТаблицы = "Контакты" Тогда - Список.ТекстЗапроса = Взаимодействия.ТекстЗапросаСпискаВзаимодействий(ДанныеДляОбработки.Значение); + ТекстЗапросаДинамическогоСписка = Взаимодействия.ТекстЗапросаСпискаВзаимодействий(ДанныеДляОбработки.Значение); Иначе - Список.ТекстЗапроса = Взаимодействия.ТекстЗапросаСпискаВзаимодействий(); + ТекстЗапросаДинамическогоСписка = Взаимодействия.ТекстЗапросаСпискаВзаимодействий(); КонецЕсли; + СтруктураСвойствСписка = ОбщегоНазначения.СтруктураСвойствДинамическогоСписка(); + СтруктураСвойствСписка.ТекстЗапроса = ТекстЗапросаДинамическогоСписка; + + ОбщегоНазначения.УстановитьСвойстваДинамическогоСписка(Элементы.Список, СтруктураСвойствСписка); + ГруппаОтбора = СоздатьГруппуОтбораПанелиНавигации(); Если ДанныеДляОбработки.Значение = НСтр("ru = 'Все'") Тогда @@ -1824,8 +1838,6 @@ ТекущаяСтраницаПанелиНавигации = Элементы.СтраницыПанелиНавигации.ТекущаяСтраница; ЭтоПапки = (ТекущаяСтраницаПанелиНавигации = Элементы.СтраницаПапки); - ЭтоПредметы = (ТекущаяСтраницаПанелиНавигации = Элементы.СтраницаПредмет); - ЭтоКонтакты = (ТекущаяСтраницаПанелиНавигации = Элементы.СтраницаКонтакт); Элементы.СписокКонтекстноеМенюПеренестиВПапку.Видимость = ЭтоПапки; Элементы.ПолученоОтправлено.Видимость = ЭтоПапки; @@ -1908,7 +1920,7 @@ ИначеЕсли Элементы.СтраницыПанелиНавигации.ТекущаяСтраница = Элементы.СтраницаКатегории Тогда Элементы.ВыборВариантаНавигации.Заголовок = НСтр("ru = 'По категориям'"); - Элементы.ДопКнопкаВыбораВариантаНавигацииКатегории.Пометка = Истина; + Элементы["ДопКнопкаВыбораВариантаНавигацииКатегории"].Пометка = Истина; КонецЕсли; @@ -1919,7 +1931,7 @@ КонецПроцедуры &НаСервере -Функция ДобавитьСтрокуВсе(ДанныеФормыКоллекция, НомерКартинки = 0) +Процедура ДобавитьСтрокуВсе(ДанныеФормыКоллекция, НомерКартинки = 0) Если ТипЗнч(ДанныеФормыКоллекция) = Тип("ДанныеФормыДерево") Тогда НоваяСтрока = ДанныеФормыКоллекция.ПолучитьЭлементы().Добавить(); @@ -1927,18 +1939,14 @@ НоваяСтрока = ДанныеФормыКоллекция.Добавить(); КонецЕсли; - НоваяСтрока.Значение = НСтр("ru = 'Все'"); - НоваяСтрока.Представление = НСтр("ru = 'Все'"); - НоваяСтрока.НомерКартинки = НомерКартинки; + НоваяСтрока.Значение = НСтр("ru = 'Все'"); + НоваяСтрока.Представление = НСтр("ru = 'Все'"); + НоваяСтрока.НомерКартинки = НомерКартинки; - Возврат НоваяСтрока; - -КонецФункции +КонецПроцедуры &НаСервере -Функция ЗаполнитьДеревоСвойств(ИмяКоманды = "") - - ЗначениеТекущейСтроки = ПолучитьЗначениеТекущейСтрокиФормыДерева("Свойства"); +Процедура ЗаполнитьДеревоСвойств(ИмяКоманды = "") Свойства.ПолучитьЭлементы().Очистить(); @@ -2155,9 +2163,9 @@ ДобавитьСтрокиВДеревоНавигации(Строка, СтрокаСвойства, Истина, 1); КонецЦикла; - СтрокаВсе = ДобавитьСтрокуВсе(Свойства, 2); + ДобавитьСтрокуВсе(Свойства, 2); -КонецФункции +КонецПроцедуры &НаСервере Процедура ЗаполнитьПанельПредметов() @@ -2408,13 +2416,15 @@ КонецЦикла; - СтрокаВсе = ДобавитьСтрокуВсе(Категории, 1); + ДобавитьСтрокуВсе(Свойства, 2); КонецПроцедуры &НаСервере Процедура ЗаполнитьПанельКонтактов() + СтруктураСвойствСписка = ОбщегоНазначения.СтруктураСвойствДинамическогоСписка(); + Если ТолькоЗначимыеКонтакты Тогда Запрос = Новый Запрос; @@ -2440,35 +2450,30 @@ КонецЦикла; ТекстЗапросаДинамическийСписок = - "ВЫБРАТЬ - | СостоянияКонтактовВзаимодействий.Контакт, - | СостоянияКонтактовВзаимодействий.КоличествоНеРассмотрено, - | СостоянияКонтактовВзаимодействий.ДатаПоследнегоВзаимодействия, + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | СостоянияКонтактовВзаимодействий.Контакт КАК Контакт, + | СостоянияКонтактовВзаимодействий.КоличествоНеРассмотрено КАК КоличествоНеРассмотрено, + | СостоянияКонтактовВзаимодействий.ДатаПоследнегоВзаимодействия КАК ДатаПоследнегоВзаимодействия, | 3 КАК НомерКартинки, | ТИПЗНАЧЕНИЯ(СостоянияКонтактовВзаимодействий.Контакт) КАК ТипКонтакта |ИЗ | РегистрСведений.СостоянияКонтактовВзаимодействий КАК СостоянияКонтактовВзаимодействий - |ГДЕ - | ИСТИНА В - | (ВЫБРАТЬ ПЕРВЫЕ 1 - | ИСТИНА - | ИЗ - | РегистрСведений.КонтактыВзаимодействий КАК КонтактыВзаимодействий - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ЖурналДокументов.Взаимодействия КАК ЖурналДокументовВзаимодействия - | ПО - | КонтактыВзаимодействий.Контакт = СостоянияКонтактовВзаимодействий.Контакт - | И КонтактыВзаимодействий.Взаимодействие = ЖурналДокументовВзаимодействия.Ссылка - | %ТекстУсловияЖурналДокументов% - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ПредметыПапкиВзаимодействий КАК ПредметыВзаимодействий - | ПО - | КонтактыВзаимодействий.Контакт = СостоянияКонтактовВзаимодействий.Контакт - | И КонтактыВзаимодействий.Взаимодействие = ПредметыВзаимодействий.Взаимодействие - | %ТекстУсловияРегистрПапки%)"; + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КонтактыВзаимодействий КАК КонтактыВзаимодействий + | ПО СостоянияКонтактовВзаимодействий.Контакт = КонтактыВзаимодействий.Контакт + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ЖурналДокументов.Взаимодействия КАК ЖурналДокументовВзаимодействия + | ПО (КонтактыВзаимодействий.Контакт = СостоянияКонтактовВзаимодействий.Контакт) + | И (КонтактыВзаимодействий.Взаимодействие = ЖурналДокументовВзаимодействия.Ссылка) + | %ТекстУсловияЖурналДокументов% + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ПредметыПапкиВзаимодействий КАК ПредметыВзаимодействий + | ПО (КонтактыВзаимодействий.Контакт = СостоянияКонтактовВзаимодействий.Контакт) + | И (КонтактыВзаимодействий.Взаимодействие = ПредметыВзаимодействий.Взаимодействие) + | %ТекстУсловияРегистрПапки%"; ТекстЗапросаДинамическийСписок = СтрЗаменить(ТекстЗапросаДинамическийСписок, "%ТекстУсловияЖурналДокументов%", ТекстУсловийПоЖурналуДокументов); ТекстЗапросаДинамическийСписок = СтрЗаменить(ТекстЗапросаДинамическийСписок, "%ТекстУсловияРегистрПапки%", ТекстУсловийПоРегистру); - КонтактыПанельНавигации.ТекстЗапроса = ТекстЗапросаДинамическийСписок; + СтруктураСвойствСписка.ТекстЗапроса = ТекстЗапросаДинамическийСписок; + ОбщегоНазначения.УстановитьСвойстваДинамическогоСписка(Элементы.КонтактыПанелиНавигации, СтруктураСвойствСписка); Для каждого ПараметрЗапроса Из Запрос.Параметры Цикл Если СтрНачинаетсяС(ПараметрЗапроса.Ключ, "П") Тогда @@ -2481,7 +2486,7 @@ Иначе - КонтактыПанельНавигации.ТекстЗапроса = " + ТекстЗапросаДинамическийСписок = " |ВЫБРАТЬ | СостоянияКонтактовВзаимодействий.Контакт, | СостоянияКонтактовВзаимодействий.КоличествоНеРассмотрено, @@ -2489,20 +2494,10 @@ | 3 КАК НомерКартинки, | ТИПЗНАЧЕНИЯ(СостоянияКонтактовВзаимодействий.Контакт) КАК ТипКонтакта |ИЗ - | РегистрСведений.СостоянияКонтактовВзаимодействий КАК СостоянияКонтактовВзаимодействий - |ГДЕ - | ИСТИНА В - | (ВЫБРАТЬ ПЕРВЫЕ 1 - | ИСТИНА - | ИЗ - | РегистрСведений.КонтактыВзаимодействий КАК КонтактыВзаимодействий - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ЖурналДокументов.Взаимодействия КАК ЖурналДокументовВзаимодействия - | ПО КонтактыВзаимодействий.Контакт = СостоянияКонтактовВзаимодействий.Контакт - | И КонтактыВзаимодействий.Взаимодействие = ЖурналДокументовВзаимодействия.Ссылка - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ПредметыПапкиВзаимодействий КАК ПредметыВзаимодействий - | ПО - | КонтактыВзаимодействий.Контакт = СостоянияКонтактовВзаимодействий.Контакт - | И КонтактыВзаимодействий.Взаимодействие = ПредметыВзаимодействий.Взаимодействие)"; + | РегистрСведений.СостоянияКонтактовВзаимодействий КАК СостоянияКонтактовВзаимодействий"; + + СтруктураСвойствСписка.ТекстЗапроса = ТекстЗапросаДинамическийСписок; + ОбщегоНазначения.УстановитьСвойстваДинамическогоСписка(Элементы.КонтактыПанелиНавигации, СтруктураСвойствСписка); КонецЕсли; @@ -2521,7 +2516,7 @@ | УчетныеЗаписиЭлектроннойПочты.Ссылка КАК УчетнаяЗапись, | ПапкиЭлектронныхПисем.Ссылка КАК Значение, | ЕСТЬNULL(НеРассмотреноПапки.КоличествоНеРассмотрено, 0) КАК НеРассмотрено, - | ПапкиЭлектронныхПисем.ПредопределеннаяПапка, + | ПапкиЭлектронныхПисем.ПредопределеннаяПапка КАК ПредопределеннаяПапка, | ВЫБОР | КОГДА ВЫБОР | КОГДА УчетныеЗаписиЭлектроннойПочты.ВладелецУчетнойЗаписи = ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка) @@ -2562,6 +2557,8 @@ | НЕ ЕСТЬNULL(НастройкиУчетныхЗаписейЭлектроннойПочты.НеИспользоватьВоВстроенномПочтовомКлиенте, ЛОЖЬ) | И НЕ ПапкиЭлектронныхПисем.ПометкаУдаления | И НЕ УчетныеЗаписиЭлектроннойПочты.ПометкаУдаления + | И (УчетныеЗаписиЭлектроннойПочты.ВладелецУчетнойЗаписи = &ТекущийПользователь + | ИЛИ УчетныеЗаписиЭлектроннойПочты.ВладелецУчетнойЗаписи = ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка)) | |УПОРЯДОЧИТЬ ПО | ПапкиЭлектронныхПисем.Код @@ -3050,22 +3047,6 @@ КонецПроцедуры -&НаСервере -Функция ПолучитьЗначениеТекущейСтрокиФормыДерева(ИмяЭлемента) - - ЗначениеТекущейСтроки = Неопределено; - - Если Элементы[ИмяЭлемента].ТекущаяСтрока <> Неопределено Тогда - НайденнаяСтрока = ЭтотОбъект[ИмяЭлемента].НайтиПоИдентификатору(Элементы[ИмяЭлемента].ТекущаяСтрока); - Если НайденнаяСтрока <> Неопределено Тогда - ЗначениеТекущейСтроки = НайденнаяСтрока.Значение; - КонецЕсли; - КонецЕсли; - - Возврат ЗначениеТекущейСтроки; - -КонецФункции - &НаСервере Процедура СпозиционироватьсяНаСтрокеСогласноСохраненномуЗначению(ЗначениеТекущейСтроки, ИмяЭлемента, @@ -3333,7 +3314,7 @@ Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл - Если ПолучитьXML(КомпоновщикНастроек.ПолучитьНастройки()) = ПолучитьXML(Выборка.КомпоновщикНастроек.Получить()) Тогда + Если ЗначениеВXML(КомпоновщикНастроек.ПолучитьНастройки()) = ЗначениеВXML(Выборка.КомпоновщикНастроек.Получить()) Тогда Результат.ТекстСообщенияОшибка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Закладка с такими настройками уже существует : %1'"), Выборка.Наименование); Возврат Результат; @@ -3353,8 +3334,8 @@ КонецФункции -&НаСервере -Функция ПолучитьXML(Значение) +&НаСервереБезКонтекста +Функция ЗначениеВXML(Значение) Запись = Новый ЗаписьXML(); Запись.УстановитьСтроку(); @@ -3370,8 +3351,6 @@ &НаСервере Процедура УстановитьПредмет(Предмет, Знач ДанныеДляОбработки) - ОбновлятьПанельНавигации = Ложь; - Если ДанныеДляОбработки <> Неопределено Тогда Запрос = Новый Запрос; @@ -3868,7 +3847,6 @@ "Поиск", Неопределено, ВидСравненияКомпоновкиДанных.Равно,,Ложь); - ОснованиеВыбора = ""; Элементы.ОписаниеНайденоПП.Видимость = РасширенныйПоиск; КонецЕсли; @@ -3883,4 +3861,22 @@ УправлениеВидимостьюПриПереключенииПанелиНавигации(); КонецПроцедуры +// СтандартныеПодсистемы.ПодключаемыеКоманды +&НаКлиенте +Процедура Подключаемый_ВыполнитьКоманду(Команда) + ПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Элементы.Список); +КонецПроцедуры + +&НаСервере +Процедура Подключаемый_ВыполнитьКомандуНаСервере(Контекст, Результат) + ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, Контекст, Элементы.Список, Результат); +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ОбновитьКоманды() + ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Элементы.Список); +КонецПроцедуры + +// Конец СтандартныеПодсистемы.ПодключаемыеКоманды + #КонецОбласти diff --git a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/Form.form b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/Form.form index 8bf08bd8c..fe6ad650a 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/Form.form +++ b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/Form.form @@ -2774,6 +2774,10 @@ NotificationProcessing ОбработкаОповещения + + OnLoadDataFromSettingsAtServer + ПриЗагрузкеДанныхИзНастроекНаСервере + OnCreateAtServer ПриСозданииНаСервере diff --git a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/Module.bsl b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/Module.bsl index 1cfb9bf5b..a5a06c1ad 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/Module.bsl +++ b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/Module.bsl @@ -175,7 +175,7 @@ Если Элементы.СтраницыСписокДерево.ТекущаяСтраница = Элементы.СтраницаСписок Тогда - ВзаимодействияКлиентСервер.БыстрыйОтборСписокПриИзменении(ЭтотОбъект,Элемент.Имя,ОтборПоПредмету); + ВзаимодействияКлиентСервер.БыстрыйОтборСписокПриИзменении(ЭтотОбъект, Элемент.Имя,, ОтборПоПредмету); Иначе @@ -190,7 +190,8 @@ Если Элементы.СтраницыСписокДерево.ТекущаяСтраница = Элементы.СтраницаСписок Тогда - ВзаимодействияКлиентСервер.БыстрыйОтборСписокПриИзменении(ЭтотОбъект,Элемент.Имя,ОтборПоПредмету); + ДатаДляОтбора = ОбщегоНазначенияКлиент.ДатаСеанса(); + ВзаимодействияКлиентСервер.БыстрыйОтборСписокПриИзменении(ЭтотОбъект,Элемент.Имя, ДатаДляОтбора, ОтборПоПредмету); Иначе @@ -257,7 +258,6 @@ Отказ = Истина; ТекущиеДанные = Элемент.ТекущиеДанные; Если ТекущиеДанные <> Неопределено Тогда - СтандартнаяОбработка = Ложь; ПоказатьЗначение(, ТекущиеДанные.Ссылка); КонецЕсли; @@ -764,11 +764,13 @@ Элементы.СтраницыСписокДерево.ТекущаяСтраница = Элементы.СтраницаДерево; ЗаполнитьДеревоВзаимодействий(); Иначе + + ДатаДляОтбора = ТекущаяДатаСеанса(); Элементы.Список.Период = Интервал; Команды.ПереключитьРежимПросмотра.Подсказка = НСтр("ru = 'Установить режим просмотра в виде дерева'"); Элементы.СтраницыСписокДерево.ТекущаяСтраница = Элементы.СтраницаСписок; - ВзаимодействияКлиентСервер.БыстрыйОтборСписокПриИзменении(ЭтотОбъект,"Статус", ОтборПоПредмету); - ВзаимодействияКлиентСервер.БыстрыйОтборСписокПриИзменении(ЭтотОбъект,"Ответственный", ОтборПоПредмету); + ВзаимодействияКлиентСервер.БыстрыйОтборСписокПриИзменении(ЭтотОбъект,"Статус", ДатаДляОтбора, ОтборПоПредмету); + ВзаимодействияКлиентСервер.БыстрыйОтборСписокПриИзменении(ЭтотОбъект,"Ответственный", ДатаДляОтбора, ОтборПоПредмету); ПриИзмененииТипаСервер(); КонецЕсли; @@ -777,8 +779,6 @@ &НаСервере Процедура ЗаполнитьДеревоВзаимодействий() - Запрос = Новый Запрос; - Если ОтборПоПредмету Тогда СхемаОтбора = ЖурналыДокументов.Взаимодействия.ПолучитьМакет("ИерархияВзаимодействийПредмет"); Иначе @@ -1003,7 +1003,7 @@ &НаСервере Функция ПараметрКонтактВЗависимостиОтТипа(Контакт) - МассивОписанияКонтактов = ВзаимодействияКлиентСервер.МассивОписанияВозможныхКонтактов(); + МассивОписанияКонтактов = ВзаимодействияКлиентСервер.ОписанияКонтактов(); ЕстьДополнительныеТаблицы = Ложь; ТекстЗапроса = ""; ИмяТаблицыКонтакта = Контакт.Метаданные().Имя; diff --git a/SSL/src/Documents/Анкета/Forms/ФормаДокумента/Form.form b/SSL/src/Documents/Анкета/Forms/ФормаДокумента/Form.form index cf7dba527..8d689c84b 100644 --- a/SSL/src/Documents/Анкета/Forms/ФормаДокумента/Form.form +++ b/SSL/src/Documents/Анкета/Forms/ФормаДокумента/Form.form @@ -178,7 +178,7 @@ Auto - ФормаОтменаПроведения + ФормаПеречитать 215 true true @@ -186,7 +186,7 @@ true - ФормаОтменаПроведенияРасширеннаяПодсказка + ФормаПеречитатьРасширеннаяПодсказка 216 Label true @@ -195,7 +195,7 @@ Left
    - Form.StandardCommand.UndoPosting + Form.StandardCommand.Reread Normal Auto true @@ -204,7 +204,7 @@ Auto - ФормаПеречитать + ФормаОтменаПроведения 219 true true @@ -212,7 +212,7 @@ true - ФормаПеречитатьРасширеннаяПодсказка + ФормаОтменаПроведенияРасширеннаяПодсказка 220 Label true @@ -221,7 +221,7 @@ Left
    - Form.StandardCommand.Reread + Form.StandardCommand.UndoPosting Normal Auto true @@ -1148,18 +1148,16 @@ 73 true - InputField + LabelField Auto + true Left - + Show + Always + true true false - true - true - true - true - Normal @@ -2068,6 +2066,23 @@ true + + ВидФлажка + + <key>ru</key> + <value>Вид флажка</value> + + 8 + + EnumRef.ВидыФлажкаВАнкетах + + + true + + + true + + ТаблицаВопросовРаздела @@ -2559,6 +2574,23 @@ true + + ВидФлажка + + <key>ru</key> + <value>Вид флажка</value> + + 27 + + EnumRef.ВидыФлажкаВАнкетах + + + true + + + true + + ТаблицаВопросовРаздела.СоставТабличногоВопроса diff --git a/SSL/src/Documents/Анкета/Forms/ФормаДокумента/Module.bsl b/SSL/src/Documents/Анкета/Forms/ФормаДокумента/Module.bsl index 6164e2b07..fd68b020f 100644 --- a/SSL/src/Documents/Анкета/Forms/ФормаДокумента/Module.bsl +++ b/SSL/src/Documents/Анкета/Forms/ФормаДокумента/Module.bsl @@ -21,8 +21,6 @@ ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(Объект, ЭтотОбъект); - ПозиционированиеНаРазделе = Ложь; - Если Объект.РежимАнкетирования = Перечисления.РежимыАнкетирования.Интервью Тогда Если НЕ Объект.ШаблонАнкеты.Пустая() Тогда @@ -71,10 +69,9 @@ Если НомерТекущегоРаздела >= 0 Тогда - Элементы.ДеревоРазделов.ТекущаяСтрока = НомерТекущегоРаздела; - ПостроениеФормыСогласноРаздела(); - ПозиционированиеНаРазделе = Истина; - + Элементы.ДеревоРазделов.ТекущаяСтрока = НомерТекущегоРаздела; + ПостроениеФормыСогласноРаздела(); + КонецЕсли; Иначе @@ -176,12 +173,10 @@ СтандартнаяОбработка = Ложь; - Результат = ""; - ДополнительныеПараметры = Новый Структура("Элемент", Элемент); ОбработчикОповещения = Новый ОписаниеОповещения("РедактированиеМногострочногоТекстаПриОкончании", ЭтотОбъект, ДополнительныеПараметры); ОбщегоНазначенияКлиент.ПоказатьФормуРедактированияМногострочногоТекста(ОбработчикОповещения, - Элемент.ТекстРедактирования); + Элемент.ТекстРедактирования); КонецПроцедуры @@ -231,8 +226,6 @@ &НаКлиенте Процедура ФормаЗаполненияПровестиЗакрыть(Команда) - Отказ = Ложь; - ОбработчикОповещенияОЗакрытии = Новый ОписаниеОповещения("ВопросОПринятииАнкетыПослеЗавершения", ЭтотОбъект); ПоказатьВопрос(ОбработчикОповещенияОЗакрытии, НСтр("ru='Ваша анкета будет принята. @@ -563,8 +556,7 @@ ИмяКолонкиБезНомера = ИмяТаблицы + "_Колонка_"; Таблица = РеквизитФормыВЗначение(ИмяТаблицы); КоличествоКолонок = Таблица.Колонки.Количество(); - КоличествоСтрока = Таблица.Количество(); - + ВопросЯчейка = СтрокаДерева.СоставТабличногоВопроса[2].ЭлементарныйВопрос; Пока ВыборкаВопрос.Следующий() Цикл @@ -1103,8 +1095,6 @@ &НаСервере Функция ПроверитьЗаполнениеАнкеты() - Отказ = Ложь; - Запрос = Новый Запрос; Запрос.Текст = " |ВЫБРАТЬ diff --git a/SSL/src/Documents/Встреча/Forms/ФормаДокумента/Module.bsl b/SSL/src/Documents/Встреча/Forms/ФормаДокумента/Module.bsl index 5bfa1bb5a..3757774be 100644 --- a/SSL/src/Documents/Встреча/Forms/ФормаДокумента/Module.bsl +++ b/SSL/src/Documents/Встреча/Forms/ФормаДокумента/Module.bsl @@ -385,16 +385,6 @@ КонецПроцедуры -&НаКлиенте -Процедура ОбновитьЗависимостиДополнительныхРеквизитов() - - Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда - МодульУправлениеСвойствамиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеСвойствамиКлиент"); - МодульУправлениеСвойствамиКлиент.ОбновитьЗависимостиДополнительныхРеквизитов(ЭтотОбъект); - КонецЕсли; - -КонецПроцедуры - &НаКлиенте Процедура Подключаемый_ПриИзмененииДополнительногоРеквизита(Элемент) diff --git a/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаДокумента/Module.bsl b/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаДокумента/Module.bsl index 3f997cc06..6cd377516 100644 --- a/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаДокумента/Module.bsl +++ b/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаДокумента/Module.bsl @@ -310,16 +310,6 @@ КонецПроцедуры -&НаКлиенте -Процедура ОбновитьЗависимостиДополнительныхРеквизитов() - - Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда - МодульУправлениеСвойствамиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеСвойствамиКлиент"); - МодульУправлениеСвойствамиКлиент.ОбновитьЗависимостиДополнительныхРеквизитов(ЭтотОбъект); - КонецЕсли; - -КонецПроцедуры - &НаКлиенте Процедура Подключаемый_ПриИзмененииДополнительногоРеквизита(Элемент) diff --git a/SSL/src/Documents/НазначениеОпросов/Forms/ФормаПодбораРеспондентов/Module.bsl b/SSL/src/Documents/НазначениеОпросов/Forms/ФормаПодбораРеспондентов/Module.bsl index 4cea38a8e..b3406c0ff 100644 --- a/SSL/src/Documents/НазначениеОпросов/Forms/ФормаПодбораРеспондентов/Module.bsl +++ b/SSL/src/Documents/НазначениеОпросов/Forms/ФормаПодбораРеспондентов/Module.bsl @@ -10,7 +10,10 @@ Если Справочники.ТипВсеСсылки().СодержитТип(ТипЗнч(Параметры.ТипРеспондента)) Тогда - Респонденты.ОсновнаяТаблица = Параметры.ТипРеспондента.Метаданные().ПолноеИмя(); + СтруктураСвойствСписка = ОбщегоНазначения.СтруктураСвойствДинамическогоСписка(); + СтруктураСвойствСписка.ОсновнаяТаблица = Параметры.ТипРеспондента.Метаданные().ПолноеИмя(); + + ОбщегоНазначения.УстановитьСвойстваДинамическогоСписка(Элементы.Респонденты, СтруктураСвойствСписка); Иначе diff --git a/SSL/src/Documents/ОтзывСогласияНаОбработкуПерсональныхДанных/Forms/ФормаСписка/Form.form b/SSL/src/Documents/ОтзывСогласияНаОбработкуПерсональныхДанных/Forms/ФормаСписка/Form.form index fad443c9e..b1ae76c32 100644 --- a/SSL/src/Documents/ОтзывСогласияНаОбработкуПерсональныхДанных/Forms/ФормаСписка/Form.form +++ b/SSL/src/Documents/ОтзывСогласияНаОбработкуПерсональныхДанных/Forms/ФормаСписка/Form.form @@ -233,6 +233,40 @@ true + + Ссылка + 34 + true + true + + + Список.Ref + + + СсылкаРасширеннаяПодсказка + 36 + Label + true + true + + Left + + + + СсылкаКонтекстноеМеню + 35 + true + + LabelField + Enter + true + Left + true + + true + true + + None СписокКоманднаяПанель diff --git a/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Forms/ФормаДокумента/Form.form b/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Forms/ФормаДокумента/Form.form index e542190e7..2c306c54c 100644 --- a/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Forms/ФормаДокумента/Form.form +++ b/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Forms/ФормаДокумента/Form.form @@ -119,24 +119,112 @@ ОрганизацияАдресГруппа 75 - - Организация - 7 + + ОрганизацияГруппа + 96 + + Организация + 7 + true + true + + true + + + Объект.Организация + + + OnChange + ОрганизацияПриИзменении + + + ОрганизацияРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + + ОрганизацияКонтекстноеМеню + 8 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + НаименованиеОрганизации + 93 + + <key>ru</key> + <value>Наименование для печати</value> + + true + true + + true + + + Объект.НаименованиеОрганизации + + Button + + НаименованиеОрганизацииРасширеннаяПодсказка + 95 + Label + true + true + + Left + + + + НаименованиеОрганизацииКонтекстноеМеню + 94 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + true true true - - Объект.Организация - - - OnChange - ОрганизацияПриИзменении - + + <key>ru</key> + <value>Организация</value> + - ОрганизацияРасширеннаяПодсказка - 9 + ОрганизацияГруппаРасширеннаяПодсказка + 97 Label true true @@ -144,24 +232,13 @@ Left - - ОрганизацияКонтекстноеМеню - 8 - true - - InputField - Auto - true - Left - true - - true - true - true - true - true - true - Normal + UsualGroup + + Auto + true + true + DontUse + Auto diff --git a/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Forms/ФормаДокумента/Module.bsl b/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Forms/ФормаДокумента/Module.bsl index 9274bbee3..e4e8d72cf 100644 --- a/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Forms/ФормаДокумента/Module.bsl +++ b/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Forms/ФормаДокумента/Module.bsl @@ -154,6 +154,7 @@ ЗащитаПерсональныхДанныхПереопределяемый.ДополнитьДанныеОрганизацииОператораПерсональныхДанных(Объект.Организация, ДанныеОрганизации, Объект.ДатаПолучения); + Объект.НаименованиеОрганизации = ДанныеОрганизации.НаименованиеОрганизации; Объект.ЮридическийАдресОрганизации = ДанныеОрганизации.АдресОрганизации; Объект.ОтветственныйЗаОбработкуПерсональныхДанных = ДанныеОрганизации.ОтветственныйЗаОбработкуПерсональныхДанных; diff --git a/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/ManagerModule.bsl b/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/ManagerModule.bsl index 0b36cbd5f..0b4b36e04 100644 --- a/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/ManagerModule.bsl +++ b/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/ManagerModule.bsl @@ -230,18 +230,19 @@ Запрос = Новый Запрос( "ВЫБРАТЬ | Согласия.Ссылка КАК ДокументОснование, - | Согласия.Номер, - | Согласия.Организация, + | Согласия.Номер КАК Номер, + | Согласия.Организация КАК Организация, + | Согласия.НаименованиеОрганизации КАК НаименованиеОрганизации, | Согласия.ЮридическийАдресОрганизации КАК АдресОрганизации, - | Согласия.ОтветственныйЗаОбработкуПерсональныхДанных, - | Согласия.Субъект, + | Согласия.ОтветственныйЗаОбработкуПерсональныхДанных КАК ОтветственныйЗаОбработкуПерсональныхДанных, + | Согласия.Субъект КАК Субъект, | Согласия.ФИОСубъекта КАК ФИО, | Согласия.АдресСубъекта КАК Адрес, - | Согласия.ПаспортныеДанные, + | Согласия.ПаспортныеДанные КАК ПаспортныеДанные, | Согласия.ДатаПолучения КАК ДатаСогласия, - | Согласия.СрокДействия, - | Согласия.Ответственный, - | Согласия.Комментарий + | Согласия.СрокДействия КАК СрокДействия, + | Согласия.Ответственный КАК Ответственный, + | Согласия.Комментарий КАК Комментарий |ИЗ | Документ.СогласиеНаОбработкуПерсональныхДанных КАК Согласия |ГДЕ @@ -253,6 +254,9 @@ Пока Выборка.Следующий() Цикл Описание = ОписаниеСогласия(); ЗаполнитьЗначенияСвойств(Описание, Выборка); + Если Не ПустаяСтрока(СокрЛП(Выборка.НаименованиеОрганизации)) Тогда + Описание.Организация = Выборка.НаименованиеОрганизации; + КонецЕсли; Описание.ДатаСогласия = Формат(Выборка.ДатаСогласия, "ДЛФ=D"); Если ЗначениеЗаполнено(Выборка.СрокДействия) Тогда Описание.ПериодДействия = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'с %1 по %2.'"), Формат(Выборка.ДатаСогласия, "ДЛФ=D"), Формат(Выборка.СрокДействия, "ДЛФ=D")); diff --git a/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/СогласиеНаОбработкуПерсональныхДанных.mdo b/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/СогласиеНаОбработкуПерсональныхДанных.mdo index 78ae04db0..a76099ecd 100644 --- a/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/СогласиеНаОбработкуПерсональныхДанных.mdo +++ b/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/СогласиеНаОбработкуПерсональныхДанных.mdo @@ -113,6 +113,26 @@ Use Use + + НаименованиеОрганизации + + ru + Наименование организации + + + String + + + + ru + Используется для размещения полного официального наименования организации для вывода в печатные формы документов. + + + + + Use + Use + ЮридическийАдресОрганизации diff --git a/SSL/src/Documents/СообщениеSMS/Forms/ФормаДокумента/Module.bsl b/SSL/src/Documents/СообщениеSMS/Forms/ФормаДокумента/Module.bsl index 40b884906..960f1aee1 100644 --- a/SSL/src/Documents/СообщениеSMS/Forms/ФормаДокумента/Module.bsl +++ b/SSL/src/Documents/СообщениеSMS/Forms/ФормаДокумента/Module.bsl @@ -388,16 +388,6 @@ КонецПроцедуры -&НаКлиенте -Процедура ОбновитьЗависимостиДополнительныхРеквизитов() - - Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда - МодульУправлениеСвойствамиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеСвойствамиКлиент"); - МодульУправлениеСвойствамиКлиент.ОбновитьЗависимостиДополнительныхРеквизитов(ЭтотОбъект); - КонецЕсли; - -КонецПроцедуры - &НаКлиенте Процедура Подключаемый_ПриИзмененииДополнительногоРеквизита(Элемент) @@ -560,10 +550,10 @@ Если СообщениеОтправлено Тогда ОтправкаДоступна = Ложь; ИначеЕсли Форма.Объект.Состояние = ПредопределенноеЗначение("Перечисление.СостоянияДокументаСообщениеSMS.Исходящее") Тогда - #Если Клиент Тогда - ДатаСеанса = ОбщегоНазначенияКлиент.ДатаСеанса(); - #Иначе + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда ДатаСеанса = ТекущаяДатаСеанса(); + #Иначе + ДатаСеанса = ОбщегоНазначенияКлиент.ДатаСеанса(); #КонецЕсли Если (Форма.Объект.ДатаКогдаОтправить) <> Дата(1,1,1) И Форма.Объект.ДатаКогдаОтправить > ДатаСеанса Тогда diff --git a/SSL/src/Documents/ТелефонныйЗвонок/Forms/ФормаДокумента/Module.bsl b/SSL/src/Documents/ТелефонныйЗвонок/Forms/ФормаДокумента/Module.bsl index e3d7a4f97..9bfa41ce1 100644 --- a/SSL/src/Documents/ТелефонныйЗвонок/Forms/ФормаДокумента/Module.bsl +++ b/SSL/src/Documents/ТелефонныйЗвонок/Forms/ФормаДокумента/Module.bsl @@ -324,16 +324,6 @@ КонецПроцедуры -&НаКлиенте -Процедура ОбновитьЗависимостиДополнительныхРеквизитов() - - Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда - МодульУправлениеСвойствамиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеСвойствамиКлиент"); - МодульУправлениеСвойствамиКлиент.ОбновитьЗависимостиДополнительныхРеквизитов(ЭтотОбъект); - КонецЕсли; - -КонецПроцедуры - &НаКлиенте Процедура Подключаемый_ПриИзмененииДополнительногоРеквизита(Элемент) diff --git a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаДокумента/Form.form b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаДокумента/Form.form index 6bada4cd9..0da1bf525 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаДокумента/Form.form +++ b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаДокумента/Form.form @@ -2392,26 +2392,31 @@ 0 CommandGroup.Взаимодействия 2 + 0 CommandGroup.Взаимодействия 3 + 0 CommandGroup.Взаимодействия 4 + 0 CommandGroup.Взаимодействия 5 + 0 CommandGroup.Взаимодействия 6 + Document.ЭлектронноеПисьмоВходящее.Command.ОтветитьВсем diff --git a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаДокумента/Module.bsl b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаДокумента/Module.bsl index c3e6b2b68..6cb2b1f5f 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаДокумента/Module.bsl +++ b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаДокумента/Module.bsl @@ -663,16 +663,6 @@ КонецПроцедуры -&НаКлиенте -Процедура ОбновитьЗависимостиДополнительныхРеквизитов() - - Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда - МодульУправлениеСвойствамиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеСвойствамиКлиент"); - МодульУправлениеСвойствамиКлиент.ОбновитьЗависимостиДополнительныхРеквизитов(ЭтотОбъект); - КонецЕсли; - -КонецПроцедуры - &НаКлиенте Процедура Подключаемый_ПриИзмененииДополнительногоРеквизита(Элемент) diff --git a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/ObjectModule.bsl b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/ObjectModule.bsl index 057fc62d3..16203d6ec 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/ObjectModule.bsl +++ b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/ObjectModule.bsl @@ -35,7 +35,7 @@ ДополнительныеСвойства.Вставить("ПометкаУдаления", ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Ссылка, "ПометкаУдаления")); КонецЕсли; - + КонецПроцедуры Процедура ПриЗаписи(Отказ) diff --git a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Module.bsl b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Module.bsl index e0a52cc89..12f5e1501 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Module.bsl +++ b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Module.bsl @@ -348,8 +348,6 @@ Взаимодействия.ПриЗаписиВзаимодействияИзФормы(ТекущийОбъект, ЭтотОбъект); - НайденнаяПапка = Неопределено; - Если Объект.СтатусПисьма <> Перечисления.СтатусыИсходящегоЭлектронногоПисьма.Черновик Тогда Возврат; КонецЕсли; @@ -884,7 +882,8 @@ Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ШаблоныСообщений") Тогда МодульШаблоныСообщенийКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ШаблоныСообщенийКлиент"); Оповещение = Новый ОписаниеОповещения("ЗаполнитьПоШаблонуПослеВыбораШаблона", ЭтотОбъект); - МодульШаблоныСообщенийКлиент.ВыбратьШаблон(Оповещение); + ПредметСообщения = ?(ЗначениеЗаполнено(Предмет), Предмет, "Общий"); + МодульШаблоныСообщенийКлиент.ПодготовитьСообщениеПоШаблону(ПредметСообщения, "Письмо", Оповещение); КонецЕсли КонецПроцедуры @@ -1015,7 +1014,6 @@ Объект.УчетнаяЗапись = ДоступныеДляОтправкиУчетныеЗаписи[0].УчетнаяЗапись; ЭлементСписка = Элементы.ОтправительПредставление.СписокВыбора.НайтиПоЗначению(Объект.УчетнаяЗапись); Если ЭлементСписка <> Неопределено Тогда - СтандартнаяОбработка = Ложь; Объект.ОтправительПредставление = ЭлементСписка.Представление; КонецЕсли; КонецЕсли; @@ -2038,11 +2036,10 @@ Объект.Текст = ""; Объект.ТипТекста = ПредопределенноеЗначение("Перечисление.ТипыТекстовЭлектронныхПисем.HTML"); Элементы.СтраницыТекстПисьма.ТекущаяСтраница = Элементы.СтраницаФорматированныйДокумент; + Элементы.ФорматСообщения.Заголовок = ФорматСообщения; КонецЕсли; - Элементы.ФорматСообщения.Заголовок = ФорматСообщения; - КонецПроцедуры &НаСервере @@ -2086,7 +2083,7 @@ Функция ДанныеВыбораДляЭлектронногоПисьма(Текст, ИндексВСпискеПолучателей) ВозвращаемыйСписок = Новый СписокЗначений; - МассивОписанияТиповКонтактов = ВзаимодействияКлиентСервер.МассивОписанияВозможныхКонтактов(); + МассивОписанияТиповКонтактов = ВзаимодействияКлиентСервер.ОписанияКонтактов(); ТекстЗапроса = "ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ @@ -2325,7 +2322,7 @@ КонецПроцедуры &НаСервере -Функция ДобавитьАдресВСписокПолучателей(СписокПолучателей, ПолучателиПисьма, Кому) +Процедура ДобавитьАдресВСписокПолучателей(СписокПолучателей, ПолучателиПисьма, Кому) Для каждого СтрокаПолучатель Из ПолучателиПисьма Цикл НоваяСтрока = СписокПолучателей.Добавить(); @@ -2336,7 +2333,7 @@ СтрокаПолучатель.Адрес, ""); КонецЦикла; -КонецФункции +КонецПроцедуры &НаКлиенте Процедура ЗаполнитьУточненныеКонтакты(Результат) @@ -2379,7 +2376,14 @@ Попытка ПараметрыПисьма = Неопределено; - Взаимодействия.ВыполнитьОтправкуПисьма(ПисьмоОбъект,,ПараметрыПисьма,"Все"); + + ИмяСервераИсходящейПочты = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.УчетнаяЗапись, "СерверИсходящейПочты", Истина); + + Если УправлениеЭлектроннойПочтой.СерверИсходящейПочтыНеТребуетДополнительнойОтправкиПоIMAP(ИмяСервераИсходящейПочты) Тогда + Взаимодействия.ВыполнитьОтправкуПисьма(ПисьмоОбъект,,ПараметрыПисьма); + Иначе + Взаимодействия.ВыполнитьОтправкуПисьма(ПисьмоОбъект,,ПараметрыПисьма,"Все"); + КонецЕсли; Исключение @@ -2536,16 +2540,17 @@ Если РезультатВопроса <> КодВозвратаДиалога.Да Тогда ФорматСообщения = ПредопределенноеЗначение("Перечисление.СпособыРедактированияЭлектронныхПисем.HTML"); - Возврат; + Иначе + ТекстПисьма = ТекстПисьмаФорматированныйДокумент.ПолучитьТекст(); + Объект.ТипТекста = ПредопределенноеЗначение("Перечисление.ТипыТекстовЭлектронныхПисем.ПростойТекст"); + ТекстПисьмаФорматированныйДокумент.Удалить(); + Элементы.ТекстПисьма.Вид = ВидПоляФормы.ПолеТекстовогоДокумента; + Объект.ТекстHTML = ""; + Объект.Кодировка = "UTF-8"; + Элементы.СтраницыТекстПисьма.ТекущаяСтраница = Элементы.СтраницаОбычныйТекст; КонецЕсли; - ТекстПисьма = ТекстПисьмаФорматированныйДокумент.ПолучитьТекст(); - Объект.ТипТекста = ПредопределенноеЗначение("Перечисление.ТипыТекстовЭлектронныхПисем.ПростойТекст"); - ТекстПисьмаФорматированныйДокумент.Удалить(); - Элементы.ТекстПисьма.Вид = ВидПоляФормы.ПолеТекстовогоДокумента; - Объект.ТекстHTML = ""; - Объект.Кодировка = "UTF-8"; - Элементы.СтраницыТекстПисьма.ТекущаяСтраница = Элементы.СтраницаОбычныйТекст; + Элементы.ФорматСообщения.Заголовок = ФорматСообщения; КонецПроцедуры @@ -2607,9 +2612,6 @@ Если СтрЧислоВхождений(ТекстПисьмо, ТекстПредыдущаяУЗ) > 0 Тогда - КоличествоЭлементовСтараяПодпись = ПараметрыПредыдущаяУЗ.Подпись.Элементы.Количество(); - КоличествоЭлементовПисьмо = ТекстПисьмаФорматированныйДокумент.Элементы.Количество(); - УдалитьЭлементыСтаройПодписи(ТекстПисьмаФорматированныйДокумент,ПараметрыПредыдущаяУЗ.Подпись); КонецЕсли; @@ -2635,9 +2637,7 @@ ДобавитьФорматированныйДокументКФорматированномуДокументу(СтараяПодписьБезПараграфов, СтараяПодпись); ПервыйЗначимыйЭлементПодпись = Неопределено; - ИндексПервогоЗначимогоЭлемента = -1; ПоследнийЗначимыйЭлементПодпись = Неопределено; - ИндексПоследнегоЗначимогоЭлемента = -1; КоличествоЭлементовПодпись = СтараяПодписьБезПараграфов.Элементы[0].Элементы.Количество(); КоличествоЭлементовТекст = ТекстПисьмаБезПараграфов.Элементы[0].Элементы.Количество(); @@ -2648,7 +2648,6 @@ Или ТипЗнч(ЭлементПодписи) = Тип("КартинкаФорматированногоДокумента") Тогда ПервыйЗначимыйЭлементПодпись = ЭлементПодписи; - ИндексПервогоЗначимогоЭлемента = Инд; Прервать; КонецЕсли; @@ -2662,7 +2661,6 @@ Или ТипЗнч(ЭлементПодписи) = Тип("КартинкаФорматированногоДокумента") Тогда ПоследнийЗначимыйЭлементПодпись = ЭлементПодписи; - ИндексПоследнегоЗначимогоЭлемента = КоличествоЭлементовПодпись - 1 - Инд; Прервать; КонецЕсли; @@ -2747,7 +2745,7 @@ КонецЕсли; НовыйЭлемент = ПриемникДокумент.Элементы.Добавить( , Тип("ПереводСтрокиФорматированногоДокумента")); КонецЕсли; - КонецЕсли + КонецЕсли; КонецЦикла; КонецПроцедуры @@ -2820,16 +2818,6 @@ КонецПроцедуры -&НаКлиенте -Процедура ОбновитьЗависимостиДополнительныхРеквизитов() - - Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда - МодульУправлениеСвойствамиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеСвойствамиКлиент"); - МодульУправлениеСвойствамиКлиент.ОбновитьЗависимостиДополнительныхРеквизитов(ЭтотОбъект); - КонецЕсли; - -КонецПроцедуры - &НаКлиенте Процедура Подключаемый_ПриИзмененииДополнительногоРеквизита(Элемент) @@ -2880,18 +2868,31 @@ КонецЕсли; ТекстПисьма = РезультатТекст; Объект.Тема = Результат.Тема; + + Если ЗначениеЗаполнено(Результат.Получатель) Тогда + Для каждого Получатель Из Результат.Получатель Цикл + НоваяСтрока = СписокПолучателей.Добавить(); + НоваяСтрока.ВариантОтправки = НСтр("ru = 'Кому:'"); + НоваяСтрока.Адрес = Получатель.Значение; + НоваяСтрока.Представление = ВзаимодействияКлиентСервер.ПолучитьПредставлениеАдресата(Получатель.Представление, + Получатель.Значение, ""); + КонецЦикла; + КонецЕсли; + КонецПроцедуры &НаСервере Процедура ОпределитьВозможностьЗаполненияПисьмаПоШаблону() + ИспользуютсяШаблоныСообщений = Ложь; Если Объект.СтатусПисьма = Перечисления.СтатусыИсходящегоЭлектронногоПисьма.Черновик И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ШаблоныСообщений") Тогда МодульШаблоныСообщенийСлужебный = ОбщегоНазначения.ОбщийМодуль("ШаблоныСообщенийСлужебный"); - Элементы.ФормаСформироватьПоШаблону.Видимость = МодульШаблоныСообщенийСлужебный.ЕстьДоступныеШаблоны("Письмо"); - Иначе - Элементы.ФормаСформироватьПоШаблону.Видимость = Ложь; - КонецЕсли + Если МодульШаблоныСообщенийСлужебный.ИспользуютсяШаблоныСообщений() Тогда + ИспользуютсяШаблоныСообщений = МодульШаблоныСообщенийСлужебный.ЕстьДоступныеШаблоны("Письмо"); + КонецЕсли; + КонецЕсли; + Элементы.ФормаСформироватьПоШаблону.Видимость = ИспользуютсяШаблоныСообщений; КонецПроцедуры diff --git a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ManagerModule.bsl b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ManagerModule.bsl index e6968ab74..cdbde0ef6 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ManagerModule.bsl +++ b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ManagerModule.bsl @@ -198,8 +198,8 @@ Возврат; КонецЕсли; - Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ВТДокументыДляОбработки", Результат.ИмяВременнойТаблицы); + Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; ОбъектыДляОбработки = Запрос.Выполнить().Выбрать(); diff --git a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ObjectModule.bsl b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ObjectModule.bsl index 13f96349e..f3cdf0910 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ObjectModule.bsl +++ b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ObjectModule.bsl @@ -90,6 +90,19 @@ #Область ОбработчикиСобытий +Процедура ПриЗаписи(Отказ) + + Если ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + + Взаимодействия.ПриЗаписиДокумента(ЭтотОбъект); + УправлениеЭлектроннойПочтой.УстановитьПометкуУдаленияУВложенийПисьма(Ссылка, ПометкаУдаления); + УстановитьПривилегированныйРежим(Истина); + Взаимодействия.ОтработатьПризнакИзмененияПометкиУдаленияПриЗаписиПисьма(ЭтотОбъект); + +КонецПроцедуры + Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения) Если ОбменДанными.Загрузка Тогда @@ -107,19 +120,6 @@ КонецПроцедуры -Процедура ПриЗаписи(Отказ) - - Если ОбменДанными.Загрузка Тогда - Возврат; - КонецЕсли; - - Взаимодействия.ПриЗаписиДокумента(ЭтотОбъект); - УправлениеЭлектроннойПочтой.УстановитьПометкуУдаленияУВложенийПисьма(Ссылка, ПометкаУдаления); - УстановитьПривилегированныйРежим(Истина); - Взаимодействия.ОтработатьПризнакИзмененияПометкиУдаленияПриЗаписиПисьма(ЭтотОбъект); - -КонецПроцедуры - Процедура ПередУдалением(Отказ) Если ОбменДанными.Загрузка Тогда diff --git a/SSL/src/Enums/ВажностьПроблемыУчета/ВажностьПроблемыУчета.mdo b/SSL/src/Enums/ВажностьПроблемыУчета/ВажностьПроблемыУчета.mdo index 66613fad2..447674f3f 100644 --- a/SSL/src/Enums/ВажностьПроблемыУчета/ВажностьПроблемыУчета.mdo +++ b/SSL/src/Enums/ВажностьПроблемыУчета/ВажностьПроблемыУчета.mdo @@ -29,32 +29,39 @@ true BothWays - + Информация ru Информация - + Предупреждение ru Предупреждение - + Ошибка ru Ошибка - + ПолезныйСовет ru Полезный совет + + ВажнаяИнформация + + ru + Важная информация + + diff --git a/SSL/src/Enums/ВидыФлажкаВАнкетах/ВидыФлажкаВАнкетах.mdo b/SSL/src/Enums/ВидыФлажкаВАнкетах/ВидыФлажкаВАнкетах.mdo new file mode 100644 index 000000000..a9cf0927f --- /dev/null +++ b/SSL/src/Enums/ВидыФлажкаВАнкетах/ВидыФлажкаВАнкетах.mdo @@ -0,0 +1,45 @@ + + + + + + + + ВидыФлажкаВАнкетах + + ru + Виды флажка в анкетах + + + Use + Order + + Use + + + + + Use + Ref + + Use + + + + true + BothWays + + ПолеВвода + + ru + Поле ввода + + + + Флажок + + ru + Флажок + + + diff --git a/SSL/src/Enums/СпособВыполненияПроверки/СпособВыполненияПроверки.mdo b/SSL/src/Enums/СпособВыполненияПроверки/СпособВыполненияПроверки.mdo index 406be11c4..efadf90f4 100644 --- a/SSL/src/Enums/СпособВыполненияПроверки/СпособВыполненияПроверки.mdo +++ b/SSL/src/Enums/СпособВыполненияПроверки/СпособВыполненияПроверки.mdo @@ -28,21 +28,21 @@ true BothWays - + ПоОбщемуРасписанию ru По общему расписанию - + ПоОтдельномуРасписанию ru По отдельному расписанию - + Вручную ru diff --git a/SSL/src/EventSubscriptions/КонтрольНеразделенныхОбъектовПриЗаписи/КонтрольНеразделенныхОбъектовПриЗаписи.mdo b/SSL/src/EventSubscriptions/КонтрольНеразделенныхОбъектовПриЗаписи/КонтрольНеразделенныхОбъектовПриЗаписи.mdo index 5fbaef21e..a4066144e 100644 --- a/SSL/src/EventSubscriptions/КонтрольНеразделенныхОбъектовПриЗаписи/КонтрольНеразделенныхОбъектовПриЗаписи.mdo +++ b/SSL/src/EventSubscriptions/КонтрольНеразделенныхОбъектовПриЗаписи/КонтрольНеразделенныхОбъектовПриЗаписи.mdo @@ -30,7 +30,7 @@ ConstantValueManager.ИзвлекатьТекстыФайловНаСервере ConstantValueManager.ПрофильБезопасностиИнформационнойБазы ConstantValueManager.ПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском - ConstantValueManager.ЛогинДоступаКСервисуMorpher + ConstantValueManager.УдалитьЛогинДоступаКСервисуMorpher CatalogObject.СценарииОбменовДанными ConstantValueManager.ИсточникДанныхАдресногоКлассификатора ConstantValueManager.КаталогОбменаФайламиВМоделиСервиса diff --git a/SSL/src/EventSubscriptions/УстановитьПометкуУдаленияПрисоединенныхФайловДокументовВзаимодействия/УстановитьПометкуУдаленияПрисоединенныхФайловДокументовВзаимодействия.mdo b/SSL/src/EventSubscriptions/УстановитьПометкуУдаленияПрисоединенныхФайловДокументовВзаимодействия/УстановитьПометкуУдаленияПрисоединенныхФайловДокументовВзаимодействия.mdo index 73271c4d5..6fae4fdb9 100644 --- a/SSL/src/EventSubscriptions/УстановитьПометкуУдаленияПрисоединенныхФайловДокументовВзаимодействия/УстановитьПометкуУдаленияПрисоединенныхФайловДокументовВзаимодействия.mdo +++ b/SSL/src/EventSubscriptions/УстановитьПометкуУдаленияПрисоединенныхФайловДокументовВзаимодействия/УстановитьПометкуУдаленияПрисоединенныхФайловДокументовВзаимодействия.mdo @@ -14,5 +14,5 @@ DocumentObject.ЭлектронноеПисьмоИсходящее BeforeWrite - CommonModule.ПрисоединенныеФайлы.УстановитьПометкуУдаленияПрисоединенныхФайловДокументов + CommonModule.РаботаСФайлами.УстановитьПометкуУдаленияПрисоединенныхФайловДокументов diff --git a/SSL/src/ExchangePlans/ОбменСообщениями/ObjectModule.bsl b/SSL/src/ExchangePlans/ОбменСообщениями/ObjectModule.bsl index 244ab2dfc..8fd6d4b54 100644 --- a/SSL/src/ExchangePlans/ОбменСообщениями/ObjectModule.bsl +++ b/SSL/src/ExchangePlans/ОбменСообщениями/ObjectModule.bsl @@ -54,10 +54,10 @@ СписокСсылок.Добавить(Владелец); Ссылки = НайтиПоСсылкам(СписокСсылок); - Для Каждого Ссылка Из Ссылки Цикл + Для Каждого ТекущаяСсылка Из Ссылки Цикл - Если ОбщегоНазначения.ЗначениеСсылочногоТипа(Ссылка[1]) Тогда - Ссылка[1].ПолучитьОбъект().УстановитьПометкуУдаления(ПометкаУдаления); + Если ОбщегоНазначения.ЗначениеСсылочногоТипа(ТекущаяСсылка[1]) Тогда + ТекущаяСсылка[1].ПолучитьОбъект().УстановитьПометкуУдаления(ПометкаУдаления); КонецЕсли; КонецЦикла; diff --git a/SSL/src/ExchangePlans/ОбновлениеИнформационнойБазы/ManagerModule.bsl b/SSL/src/ExchangePlans/ОбновлениеИнформационнойБазы/ManagerModule.bsl index 210979c1c..0bf28f57c 100644 --- a/SSL/src/ExchangePlans/ОбновлениеИнформационнойБазы/ManagerModule.bsl +++ b/SSL/src/ExchangePlans/ОбновлениеИнформационнойБазы/ManagerModule.bsl @@ -50,7 +50,7 @@ НачатьТранзакцию(); Попытка Блокировка = Новый БлокировкаДанных; - ЭлементБлокировки = Блокировка.Добавить("ПланОбмена.ОбновлениеИнформационнойБазы"); + Блокировка.Добавить("ПланОбмена.ОбновлениеИнформационнойБазы"); Блокировка.Заблокировать(); Запрос = Новый Запрос; diff --git a/SSL/src/CommonModules/УправлениеПечатьюКлиентПовтИсп/Module.bsl b/SSL/src/ExchangePlans/ОбновлениеИнформационнойБазы/ObjectModule.bsl similarity index 100% rename from SSL/src/CommonModules/УправлениеПечатьюКлиентПовтИсп/Module.bsl rename to SSL/src/ExchangePlans/ОбновлениеИнформационнойБазы/ObjectModule.bsl diff --git a/SSL/src/FunctionalOptions/ИспользоватьПрочиеВзаимодействия/ИспользоватьПрочиеВзаимодействия.mdo b/SSL/src/FunctionalOptions/ИспользоватьПрочиеВзаимодействия/ИспользоватьПрочиеВзаимодействия.mdo index 0784fcd2e..e41cfbf08 100644 --- a/SSL/src/FunctionalOptions/ИспользоватьПрочиеВзаимодействия/ИспользоватьПрочиеВзаимодействия.mdo +++ b/SSL/src/FunctionalOptions/ИспользоватьПрочиеВзаимодействия/ИспользоватьПрочиеВзаимодействия.mdo @@ -19,4 +19,8 @@ Catalog.СообщениеSMSПрисоединенныеФайлы Document.СообщениеSMS DocumentJournal.Взаимодействия.Command.НаписатьSMSПоКонтакту + DocumentJournal.Взаимодействия.Command.ЗапланироватьВзаимодействиеПоПредмету + DocumentJournal.Взаимодействия.Command.ЗапланироватьВстречуПоПредмету + DocumentJournal.Взаимодействия.Command.НаписатьSMSПоПредмету + DocumentJournal.Взаимодействия.Command.ПозвонитьПоПредмету diff --git a/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ЗагрузкаАдресногоКлассификатора/Module.bsl b/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ЗагрузкаАдресногоКлассификатора/Module.bsl index 4c9228e90..7fbdcf129 100644 --- a/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ЗагрузкаАдресногоКлассификатора/Module.bsl +++ b/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ЗагрузкаАдресногоКлассификатора/Module.bsl @@ -359,7 +359,7 @@ #Область СлужебныеПроцедурыИФункции &НаКлиенте -Функция ПроверитьДоступностьОбновленияКлиент() +Процедура ПроверитьДоступностьОбновленияКлиент() Задание = ЗапуститьПроверкуДоступностиОбновления(УникальныйИдентификатор); @@ -369,7 +369,7 @@ Обработчик = Новый ОписаниеОповещения("ПослеПроверкиДоступностиОбновленияКлиент", ЭтотОбъект); ДлительныеОперацииКлиент.ОжидатьЗавершение(Задание, Обработчик, НастройкиОжидания); -КонецФункции +КонецПроцедуры &НаКлиенте Процедура ПослеПроверкиДоступностиОбновленияКлиент(Задание, ДополнительныеПараметры) Экспорт @@ -447,7 +447,6 @@ Если ЗначениеЗаполнено(ИнформацияОбновление) И ИнформацияОбновление.Свойство("Таблица") И ИнформацияОбновление.Таблица.Количество() > 0 Тогда - ОставшиесяКоличествоПопытокПолучитьОбновление = 0; ДатаОбновления = ИнформацияОбновление.Таблица[0].ДатаОбновления; Если ТипЗнч(ДатаОбновления) <> Тип("Дата") Тогда Возврат Ложь; diff --git a/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ОчисткаАдресногоКлассификатора/Module.bsl b/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ОчисткаАдресногоКлассификатора/Module.bsl index d40cedd69..d6f2f496e 100644 --- a/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ОчисткаАдресногоКлассификатора/Module.bsl +++ b/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ОчисткаАдресногоКлассификатора/Module.bsl @@ -237,7 +237,7 @@ ИначеЕсли Задание.Статус = "Ошибка" Тогда Элементы.ШагиОчистки.ТекущаяСтраница = Элементы.ВыборРегионовОчистки; ТекстОшибки = НСтр("ru = 'Не удается очистить адресный классификатор.'"); - ТекстОшибки = ТекстОшибки + Символы.ПС + + НСтр("ru = 'Техническая информация:'") + Задание.ПодробноеПредставлениеОшибки; + ТекстОшибки = ТекстОшибки + Символы.ПС + НСтр("ru = 'Техническая информация:'") + Задание.ПодробноеПредставлениеОшибки; ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки); КонецЕсли; КонецПроцедуры @@ -288,11 +288,7 @@ Процедура ОтменитьФоновоеЗадание(Знач Идентификатор) Если Идентификатор <> Неопределено Тогда - Попытка - ДлительныеОперации.ОтменитьВыполнениеЗадания(Идентификатор); - Исключение - // Действие не требуется, запись в журнал регистрации уже произведена. - КонецПопытки + ДлительныеОперации.ОтменитьВыполнениеЗадания(Идентификатор); КонецЕсли; КонецПроцедуры diff --git a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ВыборХранимыхВерсий/Module.bsl b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ВыборХранимыхВерсий/Module.bsl index e33138454..ce7008a42 100644 --- a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ВыборХранимыхВерсий/Module.bsl +++ b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ВыборХранимыхВерсий/Module.bsl @@ -323,7 +323,6 @@ Процедура УстановитьДоступность() ВыбранаОднаВерсия = Элементы.ДеревоВерсий.ВыделенныеСтроки.Количество() = 1; - ВыбраноНесколькоВерсий = Элементы.ДеревоВерсий.ВыделенныеСтроки.Количество() > 1; Элементы.ОткрытьВерсиюОбъекта.Доступность = ВыбранаОднаВерсия; Элементы.ДеревоВерсийКонтекстноеМенюОткрытьВерсию.Доступность = ВыбранаОднаВерсия; diff --git a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ОтчетПоВерсиямОбъекта/Attributes/ОбщийШаблон/ExtInfo/SpreadsheetData.mxlx b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ОтчетПоВерсиямОбъекта/Attributes/ОбщийШаблон/ExtInfo/SpreadsheetData.mxlx new file mode 100644 index 000000000..70a095c0a --- /dev/null +++ b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ОтчетПоВерсиямОбъекта/Attributes/ОбщийШаблон/ExtInfo/SpreadsheetData.mxlx @@ -0,0 +1,7 @@ + + + + 0 + + 0 + \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ОтчетПоВерсиямОбъекта/Attributes/ТаблицаОтчета/ExtInfo/SpreadsheetData.mxlx b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ОтчетПоВерсиямОбъекта/Attributes/ТаблицаОтчета/ExtInfo/SpreadsheetData.mxlx new file mode 100644 index 000000000..70a095c0a --- /dev/null +++ b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ОтчетПоВерсиямОбъекта/Attributes/ТаблицаОтчета/ExtInfo/SpreadsheetData.mxlx @@ -0,0 +1,7 @@ + + + + 0 + + 0 + \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ОтчетПоВерсиямОбъекта/Module.bsl b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ОтчетПоВерсиямОбъекта/Module.bsl index 3cba2173d..4bc2acbef 100644 --- a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ОтчетПоВерсиямОбъекта/Module.bsl +++ b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ОтчетПоВерсиямОбъекта/Module.bsl @@ -140,7 +140,7 @@ АдресТабличныхДокументов = ПолучитьАдресТабличныхДокументов(ИмяТабличногоДокумента, Версия1, Версия0); ПараметрыОткрытияФормы = Новый Структура("АдресТабличныхДокументов, ЗаголовокЛевый, ЗаголовокПравый", АдресТабличныхДокументов, ЗаголовокЛевый, ЗаголовокПравый); - ФормаСравнения = ОткрытьФорму("ОбщаяФорма.СравнениеТабличныхДокументов", + ОткрытьФорму("ОбщаяФорма.СравнениеТабличныхДокументов", ПараметрыОткрытияФормы, ЭтотОбъект); КонецПроцедуры diff --git a/SSL/src/InformationRegisters/ВерсииОбъектов/ManagerModule.bsl b/SSL/src/InformationRegisters/ВерсииОбъектов/ManagerModule.bsl index 02fce2c2f..ca42b8a9e 100644 --- a/SSL/src/InformationRegisters/ВерсииОбъектов/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ВерсииОбъектов/ManagerModule.bsl @@ -150,20 +150,6 @@ ДобавленныеСтроки = ТаблицаСИзменениями["Д"]; УдаленныеСтроки = ТаблицаСИзменениями["У"]; - РазмерностьВТЧ0 = ВерсияОбъекта_Пред.ТабличныеЧасти[ИмяТаблицы].Количество(); - Если РазмерностьВТЧ0 = 0 Тогда - ПомеченныеВТЧ0 = Новый Массив; - Иначе - ПомеченныеВТЧ0 = Новый Массив(РазмерностьВТЧ0); - КонецЕсли; - - РазмерностьВТЧ1 = ВерсияОбъекта.ТабличныеЧасти[ИмяТаблицы].Количество(); - Если РазмерностьВТЧ1 = 0 Тогда - ПомеченныеВТЧ1 = Новый Массив; - Иначе - ПомеченныеВТЧ1 = Новый Массив(РазмерностьВТЧ1); - КонецЕсли; - Для Каждого ЭлементТЧ Из ИзмененныеСтроки Цикл СтрокаТИЗ = ТаблицаИзмененийТабличныхЧастей[ИмяТаблицы][НомерПредыдущейВерсии][ЭлементТЧ.ИндексВТЧ0-1]; СсылкаНаВерсиюТаблицы[ЭлементТЧ.ИндексВТЧ1-1].Версионирование_ИдСтроки = СтрокаТИЗ.Версионирование_ИдСтроки; @@ -297,7 +283,6 @@ ПредставлениеЗначенияРеквизита = ""; ЗначениеРеквизита = ""; Изменение = Неопределено; - ТипЗначения = ""; // Если в текущей версии не было изменений реквизита, то пропускаем до следующей версии. Если ТипЗнч(СтруктураХарактеристикаИзменения) = Тип("Строка") Тогда @@ -353,7 +338,6 @@ ЗаголовокСекцииТабличныхЧастейВыводился = Ложь; ШаблонСвободнаяСтрока = ОбщийШаблон.ПолучитьОбласть("СвободнаяСтрока"); - ШаблонОчереднаяСтрокаТЧ = ОбщийШаблон.ПолучитьОбласть("ШапкаСтрокиТабличнойЧасти"); ТЧОтчета.Вывести(ШаблонСвободнаяСтрока); @@ -609,7 +593,7 @@ КонецПроцедуры -Функция ВывестиРезультатыКомпоновкиВОтчет(Параметры) +Процедура ВывестиРезультатыКомпоновкиВОтчет(Параметры) ТаблицаИзмененийРеквизитов = Параметры.ТаблицаИзмененийРеквизитов; ТаблицаИзмененийТабличныхЧастей = Параметры.ТаблицаИзмененийТабличныхЧастей; ТаблицаИзмененийТабличныхДокументов = Параметры.ТаблицаИзмененийТабличныхДокументов; @@ -646,9 +630,9 @@ ТЧОтчета.Защита = Ложь; ТЧОтчета.ТолькоПросмотр = Истина; -КонецФункции +КонецПроцедуры -Функция ВывестиШапку(ТЧОтчета, СписокВерсий, ЧислоВерсий, ОбщийШаблон, СсылкаНаОбъект) +Процедура ВывестиШапку(ТЧОтчета, СписокВерсий, ЧислоВерсий, ОбщийШаблон, СсылкаНаОбъект) ОбластьШапка = ОбщийШаблон.ПолучитьОбласть("Шапка"); ОбластьШапка.Параметры.НаименованиеОтчета = НСтр("ru = 'Отчет по изменениям версий объекта'"); @@ -703,16 +687,10 @@ ОбластьСвободнаяСтрока = ОбщийШаблон.ПолучитьОбласть("СвободнаяСтрока"); ТЧОтчета.Вывести(ОбластьСвободнаяСтрока); -КонецФункции +КонецПроцедуры Функция РассчитатьИзменения(НомерВерсии, РезультатРазбораВерсии_0, РезультатРазбораВерсии_1, СсылкаНаОбъект) - ЭтоДокумент = Ложь; - - Если Метаданные.Документы.Содержит(СсылкаНаОбъект.Метаданные()) Тогда - ЭтоДокумент = Истина; - КонецЕсли; - // Выполняем разбор предпоследней версии. Реквизиты_0 = РезультатРазбораВерсии_0.Реквизиты; ТабличныеЧасти_0 = РезультатРазбораВерсии_0.ТабличныеЧасти; @@ -1267,8 +1245,6 @@ Если ТаблицаИнициализации <> Неопределено Тогда - МассивЗначений = ТаблицаИнициализации.ВыгрузитьКолонку(ИмяКолонкиСравнения); - Для Каждого Элемент Из ТаблицаИнициализации Цикл НоваяСтрока = Таблица.Добавить(); НоваяСтрока.Установить(0, Элемент[ИмяКолонкиСравнения]); diff --git a/SSL/src/InformationRegisters/ВерсииОбъектов/ВерсииОбъектов.mdo b/SSL/src/InformationRegisters/ВерсииОбъектов/ВерсииОбъектов.mdo index e8f2514b4..01ea0dc6c 100644 --- a/SSL/src/InformationRegisters/ВерсииОбъектов/ВерсииОбъектов.mdo +++ b/SSL/src/InformationRegisters/ВерсииОбъектов/ВерсииОбъектов.mdo @@ -126,9 +126,7 @@ String - - 1024 - + ru @@ -277,9 +275,7 @@ Технический реквизит, используется при выгрузке данных в РИБ String - - 255 - + ru diff --git a/SSL/src/InformationRegisters/ГруппыЗначенийДоступа/ManagerModule.bsl b/SSL/src/InformationRegisters/ГруппыЗначенийДоступа/ManagerModule.bsl index 2be56ac83..6a11d0505 100644 --- a/SSL/src/InformationRegisters/ГруппыЗначенийДоступа/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ГруппыЗначенийДоступа/ManagerModule.bsl @@ -85,7 +85,9 @@ НачатьТранзакцию(); Попытка - Если ОбновлениеИнформационнойБазы.ВыполняетсяОбновлениеИнформационнойБазы() Тогда + Если ОбновлениеИнформационнойБазы.ВыполняетсяОбновлениеИнформационнойБазы() + Или ОбновлениеИнформационнойБазы.ЭтоВызовИзОбработчикаОбновления() Тогда + УдалитьЛишниеЗаписи(ЕстьИзменения); КонецЕсли; @@ -252,12 +254,20 @@ Строка.ТипГруппЗначений = КлючИЗначение.Значение; КонецЦикла; + // Группы данных в регистре. + // 0 - Стандартные значения доступа. + // 1 - Обычные/внешние пользователи. + // 2 - Обычные/внешние группы пользователей. + // 3 - Группы исполнителей. + // 4 - Объекты авторизации. + + Запрос = Новый Запрос; Запрос.УстановитьПараметр("ТаблицаТиповГруппИЗначений", ТаблицаТиповГруппИЗначений); Запрос.Текст = "ВЫБРАТЬ - | ТаблицаТипов.ТипЗначений, - | ТаблицаТипов.ТипГруппЗначений + | ТаблицаТипов.ТипЗначений КАК ТипЗначений, + | ТаблицаТипов.ТипГруппЗначений КАК ТипГруппЗначений |ПОМЕСТИТЬ ТаблицаТиповГруппИЗначений |ИЗ | &ТаблицаТиповГруппИЗначений КАК ТаблицаТипов @@ -269,72 +279,188 @@ | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ РАЗЛИЧНЫЕ - | ГруппыЗначенийДоступа.ЗначениеДоступа, - | ГруппыЗначенийДоступа.ГруппаЗначенийДоступа, - | ГруппыЗначенийДоступа.ГруппаДанных + | ГруппыЗначений.ЗначениеДоступа КАК ЗначениеДоступа, + | ГруппыЗначений.ГруппаЗначенийДоступа КАК ГруппаЗначенийДоступа, + | ГруппыЗначений.ГруппаДанных КАК ГруппаДанных |ИЗ - | РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа - |ГДЕ - | ВЫБОР - | КОГДА ГруппыЗначенийДоступа.ЗначениеДоступа = НЕОПРЕДЕЛЕНО - | ТОГДА ИСТИНА - | КОГДА ГруппыЗначенийДоступа.ГруппаДанных = 0 - | ТОГДА НЕ ИСТИНА В - | (ВЫБРАТЬ ПЕРВЫЕ 1 - | ИСТИНА - | ИЗ - | ТаблицаТиповГруппИЗначений КАК ТаблицаТиповГруппИЗначений - | ГДЕ - | ТИПЗНАЧЕНИЯ(ТаблицаТиповГруппИЗначений.ТипЗначений) = ТИПЗНАЧЕНИЯ(ГруппыЗначенийДоступа.ЗначениеДоступа) - | И ТИПЗНАЧЕНИЯ(ТаблицаТиповГруппИЗначений.ТипГруппЗначений) = ТИПЗНАЧЕНИЯ(ГруппыЗначенийДоступа.ГруппаЗначенийДоступа)) - | КОГДА ГруппыЗначенийДоступа.ГруппаДанных = 1 - | ТОГДА ВЫБОР - | КОГДА ТИПЗНАЧЕНИЯ(ГруппыЗначенийДоступа.ЗначениеДоступа) = ТИП(Справочник.Пользователи) - | ТОГДА ТИПЗНАЧЕНИЯ(ГруппыЗначенийДоступа.ГруппаЗначенийДоступа) <> ТИП(Справочник.Пользователи) - | И ТИПЗНАЧЕНИЯ(ГруппыЗначенийДоступа.ГруппаЗначенийДоступа) <> ТИП(Справочник.ГруппыПользователей) - | КОГДА ТИПЗНАЧЕНИЯ(ГруппыЗначенийДоступа.ЗначениеДоступа) = ТИП(Справочник.ВнешниеПользователи) - | ТОГДА ТИПЗНАЧЕНИЯ(ГруппыЗначенийДоступа.ГруппаЗначенийДоступа) <> ТИП(Справочник.ВнешниеПользователи) - | И ТИПЗНАЧЕНИЯ(ГруппыЗначенийДоступа.ГруппаЗначенийДоступа) <> ТИП(Справочник.ГруппыВнешнихПользователей) - | ИНАЧЕ ИСТИНА - | КОНЕЦ - | КОГДА ГруппыЗначенийДоступа.ГруппаДанных = 2 - | ТОГДА ВЫБОР - | КОГДА ТИПЗНАЧЕНИЯ(ГруппыЗначенийДоступа.ЗначениеДоступа) = ТИП(Справочник.ГруппыПользователей) - | ТОГДА ТИПЗНАЧЕНИЯ(ГруппыЗначенийДоступа.ГруппаЗначенийДоступа) <> ТИП(Справочник.Пользователи) - | И ТИПЗНАЧЕНИЯ(ГруппыЗначенийДоступа.ГруппаЗначенийДоступа) <> ТИП(Справочник.ГруппыПользователей) - | КОГДА ТИПЗНАЧЕНИЯ(ГруппыЗначенийДоступа.ЗначениеДоступа) = ТИП(Справочник.ГруппыВнешнихПользователей) - | ТОГДА ТИПЗНАЧЕНИЯ(ГруппыЗначенийДоступа.ГруппаЗначенийДоступа) <> ТИП(Справочник.ВнешниеПользователи) - | И ТИПЗНАЧЕНИЯ(ГруппыЗначенийДоступа.ГруппаЗначенийДоступа) <> ТИП(Справочник.ГруппыВнешнихПользователей) - | ИНАЧЕ ИСТИНА - | КОНЕЦ - | КОГДА ГруппыЗначенийДоступа.ГруппаДанных = 3 - | ТОГДА ВЫБОР - | КОГДА ТИПЗНАЧЕНИЯ(ГруппыЗначенийДоступа.ЗначениеДоступа) = ТИП(Справочник.Пользователи) - | ИЛИ ТИПЗНАЧЕНИЯ(ГруппыЗначенийДоступа.ЗначениеДоступа) = ТИП(Справочник.ГруппыПользователей) - | ИЛИ ТИПЗНАЧЕНИЯ(ГруппыЗначенийДоступа.ЗначениеДоступа) = ТИП(Справочник.ВнешниеПользователи) - | ИЛИ ТИПЗНАЧЕНИЯ(ГруппыЗначенийДоступа.ЗначениеДоступа) = ТИП(Справочник.ГруппыВнешнихПользователей) - | ТОГДА ИСТИНА - | КОГДА ТИПЗНАЧЕНИЯ(ГруппыЗначенийДоступа.ГруппаЗначенийДоступа) <> ТИП(Справочник.Пользователи) - | И ТИПЗНАЧЕНИЯ(ГруппыЗначенийДоступа.ГруппаЗначенийДоступа) <> ТИП(Справочник.ГруппыПользователей) - | И ТИПЗНАЧЕНИЯ(ГруппыЗначенийДоступа.ГруппаЗначенийДоступа) <> ТИП(Справочник.ВнешниеПользователи) - | И ТИПЗНАЧЕНИЯ(ГруппыЗначенийДоступа.ГруппаЗначенийДоступа) <> ТИП(Справочник.ГруппыВнешнихПользователей) - | ТОГДА ИСТИНА - | ИНАЧЕ ЛОЖЬ - | КОНЕЦ - | КОГДА ГруппыЗначенийДоступа.ГруппаДанных = 4 - | ТОГДА ВЫБОР - | КОГДА ТИПЗНАЧЕНИЯ(ГруппыЗначенийДоступа.ЗначениеДоступа) = ТИП(Справочник.Пользователи) - | ИЛИ ТИПЗНАЧЕНИЯ(ГруппыЗначенийДоступа.ЗначениеДоступа) = ТИП(Справочник.ГруппыПользователей) - | ИЛИ ТИПЗНАЧЕНИЯ(ГруппыЗначенийДоступа.ЗначениеДоступа) = ТИП(Справочник.ВнешниеПользователи) - | ИЛИ ТИПЗНАЧЕНИЯ(ГруппыЗначенийДоступа.ЗначениеДоступа) = ТИП(Справочник.ГруппыВнешнихПользователей) - | ТОГДА ИСТИНА - | КОГДА ТИПЗНАЧЕНИЯ(ГруппыЗначенийДоступа.ГруппаЗначенийДоступа) <> ТИП(Справочник.ВнешниеПользователи) - | И ТИПЗНАЧЕНИЯ(ГруппыЗначенийДоступа.ГруппаЗначенийДоступа) <> ТИП(Справочник.ГруппыВнешнихПользователей) - | ТОГДА ИСТИНА - | ИНАЧЕ ЛОЖЬ - | КОНЕЦ - | ИНАЧЕ ИСТИНА - | КОНЕЦ"; + | (ВЫБРАТЬ + | ГруппыЗначенийДоступа.ЗначениеДоступа КАК ЗначениеДоступа, + | ГруппыЗначенийДоступа.ГруппаЗначенийДоступа КАК ГруппаЗначенийДоступа, + | ГруппыЗначенийДоступа.ГруппаДанных КАК ГруппаДанных + | ИЗ + | РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + | ГДЕ + | ГруппыЗначенийДоступа.ЗначениеДоступа = НЕОПРЕДЕЛЕНО + | + | ОБЪЕДИНИТЬ ВСЕ + | + | ВЫБРАТЬ + | ГруппыЗначенийДоступа.ЗначениеДоступа, + | ГруппыЗначенийДоступа.ГруппаЗначенийДоступа, + | ГруппыЗначенийДоступа.ГруппаДанных + | ИЗ + | РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + | ГДЕ + | ГруппыЗначенийДоступа.ГруппаДанных = 0 + | И НЕ ИСТИНА В + | (ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА + | ИЗ + | ТаблицаТиповГруппИЗначений КАК ТаблицаТиповГруппИЗначений + | ГДЕ + | ТИПЗНАЧЕНИЯ(ТаблицаТиповГруппИЗначений.ТипЗначений) = ТИПЗНАЧЕНИЯ(ГруппыЗначенийДоступа.ЗначениеДоступа) + | И ТИПЗНАЧЕНИЯ(ТаблицаТиповГруппИЗначений.ТипГруппЗначений) = ТИПЗНАЧЕНИЯ(ГруппыЗначенийДоступа.ГруппаЗначенийДоступа)) + | + | ОБЪЕДИНИТЬ ВСЕ + | + | ВЫБРАТЬ + | ГруппыЗначенийДоступа.ЗначениеДоступа, + | ГруппыЗначенийДоступа.ГруппаЗначенийДоступа, + | ГруппыЗначенийДоступа.ГруппаДанных + | ИЗ + | РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + | ГДЕ + | ГруппыЗначенийДоступа.ГруппаДанных = 1 + | И ТИПЗНАЧЕНИЯ(ГруппыЗначенийДоступа.ЗначениеДоступа) <> ТИП(Справочник.Пользователи) + | И ТИПЗНАЧЕНИЯ(ГруппыЗначенийДоступа.ЗначениеДоступа) <> ТИП(Справочник.ВнешниеПользователи) + | + | ОБЪЕДИНИТЬ ВСЕ + | + | ВЫБРАТЬ + | ГруппыЗначенийДоступа.ЗначениеДоступа, + | ГруппыЗначенийДоступа.ГруппаЗначенийДоступа, + | ГруппыЗначенийДоступа.ГруппаДанных + | ИЗ + | РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + | ГДЕ + | ГруппыЗначенийДоступа.ГруппаДанных = 1 + | И ТИПЗНАЧЕНИЯ(ГруппыЗначенийДоступа.ЗначениеДоступа) = ТИП(Справочник.Пользователи) + | И ТИПЗНАЧЕНИЯ(ГруппыЗначенийДоступа.ГруппаЗначенийДоступа) <> ТИП(Справочник.Пользователи) + | И ТИПЗНАЧЕНИЯ(ГруппыЗначенийДоступа.ГруппаЗначенийДоступа) <> ТИП(Справочник.ГруппыПользователей) + | + | ОБЪЕДИНИТЬ ВСЕ + | + | ВЫБРАТЬ + | ГруппыЗначенийДоступа.ЗначениеДоступа, + | ГруппыЗначенийДоступа.ГруппаЗначенийДоступа, + | ГруппыЗначенийДоступа.ГруппаДанных + | ИЗ + | РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + | ГДЕ + | ГруппыЗначенийДоступа.ГруппаДанных = 1 + | И ТИПЗНАЧЕНИЯ(ГруппыЗначенийДоступа.ЗначениеДоступа) = ТИП(Справочник.ВнешниеПользователи) + | И ТИПЗНАЧЕНИЯ(ГруппыЗначенийДоступа.ГруппаЗначенийДоступа) <> ТИП(Справочник.ВнешниеПользователи) + | И ТИПЗНАЧЕНИЯ(ГруппыЗначенийДоступа.ГруппаЗначенийДоступа) <> ТИП(Справочник.ГруппыВнешнихПользователей) + | + | ОБЪЕДИНИТЬ ВСЕ + | + | ВЫБРАТЬ + | ГруппыЗначенийДоступа.ЗначениеДоступа, + | ГруппыЗначенийДоступа.ГруппаЗначенийДоступа, + | ГруппыЗначенийДоступа.ГруппаДанных + | ИЗ + | РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + | ГДЕ + | ГруппыЗначенийДоступа.ГруппаДанных = 2 + | И ТИПЗНАЧЕНИЯ(ГруппыЗначенийДоступа.ЗначениеДоступа) <> ТИП(Справочник.ГруппыПользователей) + | И ТИПЗНАЧЕНИЯ(ГруппыЗначенийДоступа.ЗначениеДоступа) <> ТИП(Справочник.ГруппыВнешнихПользователей) + | + | ОБЪЕДИНИТЬ ВСЕ + | + | ВЫБРАТЬ + | ГруппыЗначенийДоступа.ЗначениеДоступа, + | ГруппыЗначенийДоступа.ГруппаЗначенийДоступа, + | ГруппыЗначенийДоступа.ГруппаДанных + | ИЗ + | РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + | ГДЕ + | ГруппыЗначенийДоступа.ГруппаДанных = 2 + | И ТИПЗНАЧЕНИЯ(ГруппыЗначенийДоступа.ЗначениеДоступа) = ТИП(Справочник.ГруппыПользователей) + | И ТИПЗНАЧЕНИЯ(ГруппыЗначенийДоступа.ГруппаЗначенийДоступа) <> ТИП(Справочник.Пользователи) + | И ТИПЗНАЧЕНИЯ(ГруппыЗначенийДоступа.ГруппаЗначенийДоступа) <> ТИП(Справочник.ГруппыПользователей) + | + | ОБЪЕДИНИТЬ ВСЕ + | + | ВЫБРАТЬ + | ГруппыЗначенийДоступа.ЗначениеДоступа, + | ГруппыЗначенийДоступа.ГруппаЗначенийДоступа, + | ГруппыЗначенийДоступа.ГруппаДанных + | ИЗ + | РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + | ГДЕ + | ГруппыЗначенийДоступа.ГруппаДанных = 2 + | И ТИПЗНАЧЕНИЯ(ГруппыЗначенийДоступа.ЗначениеДоступа) = ТИП(Справочник.ГруппыВнешнихПользователей) + | И ТИПЗНАЧЕНИЯ(ГруппыЗначенийДоступа.ГруппаЗначенийДоступа) <> ТИП(Справочник.ВнешниеПользователи) + | И ТИПЗНАЧЕНИЯ(ГруппыЗначенийДоступа.ГруппаЗначенийДоступа) <> ТИП(Справочник.ГруппыВнешнихПользователей) + | + | ОБЪЕДИНИТЬ ВСЕ + | + | ВЫБРАТЬ + | ГруппыЗначенийДоступа.ЗначениеДоступа, + | ГруппыЗначенийДоступа.ГруппаЗначенийДоступа, + | ГруппыЗначенийДоступа.ГруппаДанных + | ИЗ + | РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + | ГДЕ + | ГруппыЗначенийДоступа.ГруппаДанных = 3 + | И (ТИПЗНАЧЕНИЯ(ГруппыЗначенийДоступа.ЗначениеДоступа) = ТИП(Справочник.Пользователи) + | ИЛИ ТИПЗНАЧЕНИЯ(ГруппыЗначенийДоступа.ЗначениеДоступа) = ТИП(Справочник.ГруппыПользователей) + | ИЛИ ТИПЗНАЧЕНИЯ(ГруппыЗначенийДоступа.ЗначениеДоступа) = ТИП(Справочник.ВнешниеПользователи) + | ИЛИ ТИПЗНАЧЕНИЯ(ГруппыЗначенийДоступа.ЗначениеДоступа) = ТИП(Справочник.ГруппыВнешнихПользователей)) + | + | ОБЪЕДИНИТЬ ВСЕ + | + | ВЫБРАТЬ + | ГруппыЗначенийДоступа.ЗначениеДоступа, + | ГруппыЗначенийДоступа.ГруппаЗначенийДоступа, + | ГруппыЗначенийДоступа.ГруппаДанных + | ИЗ + | РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + | ГДЕ + | ГруппыЗначенийДоступа.ГруппаДанных = 3 + | И ТИПЗНАЧЕНИЯ(ГруппыЗначенийДоступа.ГруппаЗначенийДоступа) <> ТИП(Справочник.Пользователи) + | И ТИПЗНАЧЕНИЯ(ГруппыЗначенийДоступа.ГруппаЗначенийДоступа) <> ТИП(Справочник.ГруппыПользователей) + | И ТИПЗНАЧЕНИЯ(ГруппыЗначенийДоступа.ГруппаЗначенийДоступа) <> ТИП(Справочник.ВнешниеПользователи) + | И ТИПЗНАЧЕНИЯ(ГруппыЗначенийДоступа.ГруппаЗначенийДоступа) <> ТИП(Справочник.ГруппыВнешнихПользователей) + | + | ОБЪЕДИНИТЬ ВСЕ + | + | ВЫБРАТЬ + | ГруппыЗначенийДоступа.ЗначениеДоступа, + | ГруппыЗначенийДоступа.ГруппаЗначенийДоступа, + | ГруппыЗначенийДоступа.ГруппаДанных + | ИЗ + | РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + | ГДЕ + | ГруппыЗначенийДоступа.ГруппаДанных = 4 + | И (ТИПЗНАЧЕНИЯ(ГруппыЗначенийДоступа.ЗначениеДоступа) = ТИП(Справочник.Пользователи) + | ИЛИ ТИПЗНАЧЕНИЯ(ГруппыЗначенийДоступа.ЗначениеДоступа) = ТИП(Справочник.ГруппыПользователей) + | ИЛИ ТИПЗНАЧЕНИЯ(ГруппыЗначенийДоступа.ЗначениеДоступа) = ТИП(Справочник.ВнешниеПользователи) + | ИЛИ ТИПЗНАЧЕНИЯ(ГруппыЗначенийДоступа.ЗначениеДоступа) = ТИП(Справочник.ГруппыВнешнихПользователей)) + | + | ОБЪЕДИНИТЬ ВСЕ + | + | ВЫБРАТЬ + | ГруппыЗначенийДоступа.ЗначениеДоступа, + | ГруппыЗначенийДоступа.ГруппаЗначенийДоступа, + | ГруппыЗначенийДоступа.ГруппаДанных + | ИЗ + | РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + | ГДЕ + | ГруппыЗначенийДоступа.ГруппаДанных = 4 + | И ТИПЗНАЧЕНИЯ(ГруппыЗначенийДоступа.ГруппаЗначенийДоступа) <> ТИП(Справочник.ВнешниеПользователи) + | И ТИПЗНАЧЕНИЯ(ГруппыЗначенийДоступа.ГруппаЗначенийДоступа) <> ТИП(Справочник.ГруппыВнешнихПользователей) + | + | ОБЪЕДИНИТЬ ВСЕ + | + | ВЫБРАТЬ + | ГруппыЗначенийДоступа.ЗначениеДоступа, + | ГруппыЗначенийДоступа.ГруппаЗначенийДоступа, + | ГруппыЗначенийДоступа.ГруппаДанных + | ИЗ + | РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + | ГДЕ + | ГруппыЗначенийДоступа.ГруппаДанных > 4) КАК ГруппыЗначений"; РезультатЗапроса = Запрос.Выполнить(); @@ -823,7 +949,7 @@ // Подготовка отобранных связей исполнителей и групп исполнителей. Запрос.УстановитьПараметр("ПустыеСсылкиГруппЗначений", УправлениеДоступомСлужебныйПовтИсп.ТаблицаПустыхСсылокУказанныхТипов( - "РегистрСведений.ГруппыЗначенийДоступа.Измерение.ГруппаЗначенийДоступа")); + "РегистрСведений.ГруппыЗначенийДоступа.Измерение.ГруппаЗначенийДоступа").Получить()); ТекстЗапросовВременныхТаблиц = "ВЫБРАТЬ @@ -999,7 +1125,7 @@ Запрос = Новый Запрос; Запрос.УстановитьПараметр("ПустыеСсылкиЗначений", УправлениеДоступомСлужебныйПовтИсп.ТаблицаПустыхСсылокУказанныхТипов( - "РегистрСведений.ГруппыЗначенийДоступа.Измерение.ЗначениеДоступа")); + "РегистрСведений.ГруппыЗначенийДоступа.Измерение.ЗначениеДоступа").Получить()); ТекстЗапросовВременныхТаблиц = "ВЫБРАТЬ diff --git a/SSL/src/InformationRegisters/ДанныеОбработанныеВЦентральномУзлеРИБ/ManagerModule.bsl b/SSL/src/InformationRegisters/ДанныеОбработанныеВЦентральномУзлеРИБ/ManagerModule.bsl index 2345c694f..568aab9d2 100644 --- a/SSL/src/InformationRegisters/ДанныеОбработанныеВЦентральномУзлеРИБ/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ДанныеОбработанныеВЦентральномУзлеРИБ/ManagerModule.bsl @@ -99,6 +99,9 @@ Если ТипЗнч(Данные) <> Тип("Массив") Тогда ОбъектМетаданных = Метаданные.НайтиПоТипу(ТипДанных); + Если ОбщегоНазначения.ЭтоКонстанта(ОбъектМетаданных) Тогда + Возврат; + КонецЕсли; Если ОбщегоНазначения.ЭтоРегистрСведений(ОбъектМетаданных) И ОбъектМетаданных.РежимЗаписи = Метаданные.СвойстваОбъектов.РежимЗаписиРегистра.Независимый Тогда diff --git a/SSL/src/InformationRegisters/ДанныеПроизводственногоКалендаря/ДанныеПроизводственногоКалендаря.mdo b/SSL/src/InformationRegisters/ДанныеПроизводственногоКалендаря/ДанныеПроизводственногоКалендаря.mdo index eae5bd407..6ae464378 100644 --- a/SSL/src/InformationRegisters/ДанныеПроизводственногоКалендаря/ДанныеПроизводственногоКалендаря.mdo +++ b/SSL/src/InformationRegisters/ДанныеПроизводственногоКалендаря/ДанныеПроизводственногоКалендаря.mdo @@ -149,6 +149,14 @@ true + + ru + ЧГ= + + + ru + ЧГ= + ru Календарный год diff --git a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ДатыЗапретаИзменения/Module.bsl b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ДатыЗапретаИзменения/Module.bsl index 2ce023f49..1ebf89d6a 100644 --- a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ДатыЗапретаИзменения/Module.bsl +++ b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ДатыЗапретаИзменения/Module.bsl @@ -109,7 +109,8 @@ НавигационнаяСсылка = "e1cib/command/РегистрСведений.ДатыЗапретаИзменения.Команда.ДатыЗапретаЗагрузкиДанных"; Иначе - Если Не Пользователи.РолиДоступны("ДобавлениеИзменениеДатЗапретаИзменения") Тогда + Если Не ПравоДоступа("Редактирование", Метаданные.РегистрыСведений.ДатыЗапретаИзменения) + Или Не ПравоДоступа("Просмотр", Метаданные.ПланыВидовХарактеристик.РазделыДатЗапретаИзменения) Тогда ВызватьИсключение НСтр("ru = 'Недостаточно прав для работы с датами запрета изменения.'"); КонецЕсли; @@ -771,8 +772,6 @@ ТекущиеДанные = Элемент.ТекущиеДанные; Поле = Элементы.ДатыЗапрета.ТекущийЭлемент; - РазделБезОбъектов = РазделыБезОбъектов.Найти(ТекущиеДанные.Раздел) <> Неопределено; - // Переход к доступному полю или открытие формы. ОткрытьФормуРедактированияДатыЗапрета = Ложь; @@ -1008,8 +1007,8 @@ Для Каждого ТекущийОбъект Из ОбъектыДляДобавления Цикл ОписаниеОбъекта = КоллекцияОбъектов.Добавить(); ОписаниеОбъекта.Раздел = ТекущийРаздел(, Истина); - ОписаниеОбъекта.Объект = Объект; - ОписаниеОбъекта.Представление = Строка(Объект); + ОписаниеОбъекта.Объект = ТекущийОбъект; + ОписаниеОбъекта.Представление = Строка(ТекущийОбъект); ОписаниеОбъекта.ПолноеПредставление = ОписаниеОбъекта.Представление; ОписаниеОбъекта.ОписаниеДатыЗапрета = "ПроизвольнаяДата"; @@ -2893,8 +2892,6 @@ &НаКлиенте Процедура ВыбратьПодобратьОбъекты(Подобрать = Ложь) - ТекущиеДанные = Элементы.ДатыЗапрета.ТекущиеДанные; - // Выбор типа данных ТекущийРаздел = ТекущийРаздел(, Истина); Если ТекущийРаздел = РазделПустаяСсылка Тогда @@ -3162,7 +3159,7 @@ КонецПроцедуры &НаСервере -Функция ИзменитьУстановкуДатыЗапрета(Знач ВыбранноеЗначение, Знач УдалитьЛишнее) +Процедура ИзменитьУстановкуДатыЗапрета(Знач ВыбранноеЗначение, Знач УдалитьЛишнее) Если УдалитьЛишнее Тогда @@ -3236,7 +3233,7 @@ УстановитьВидимость(); -КонецФункции +КонецПроцедуры &НаСервереБезКонтекста Функция ТекущийСпособУказанияДатыЗапрета(Знач Пользователь, Знач ЕдинственныйРаздел, Знач ЗначениеДляВсехПользователей, Знач НачалоДня, Данные = Неопределено) @@ -3356,7 +3353,7 @@ КонецФункции &НаСервере -Функция УдалитьЛишнееПриИзмененииСпособаУказанияДатыЗапрета(Знач ВыбранноеЗначение, Знач ТекущийПользователь, Знач УстановкаДатыЗапрета) +Процедура УдалитьЛишнееПриИзмененииСпособаУказанияДатыЗапрета(Знач ВыбранноеЗначение, Знач ТекущийПользователь, Знач УстановкаДатыЗапрета) НаборЗаписей = РегистрыСведений.ДатыЗапретаИзменения.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Пользователь.Установить(ТекущийПользователь); @@ -3388,7 +3385,7 @@ ПрочитатьДанныеПользователя(ЭтотОбъект); -КонецФункции +КонецПроцедуры &НаКлиенте Процедура РедактироватьДатуЗапретаВФорме() @@ -3461,10 +3458,6 @@ Если Элементы.ДатыЗапрета.ТекущиеДанные.ЭтоРаздел Тогда ПараметрыФормы.Вставить("РазделПредставление", Элементы.ДатыЗапрета.ТекущиеДанные.Представление); - - РазделБезОбъектов = Элементы.ДатыЗапрета.ТекущиеДанные.Раздел = РазделПустаяСсылка - Или РазделыБезОбъектов.Найти(Элементы.ДатыЗапрета.ТекущиеДанные.Раздел) <> Неопределено; - Иначе ПараметрыФормы.Вставить("РазделПредставление", Элементы.ДатыЗапрета.ТекущиеДанные.ПолучитьРодителя().Представление); diff --git a/SSL/src/InformationRegisters/ДвоичныеДанныеФайлов/ManagerModule.bsl b/SSL/src/InformationRegisters/ДвоичныеДанныеФайлов/ManagerModule.bsl index 324697705..9847bede8 100644 --- a/SSL/src/InformationRegisters/ДвоичныеДанныеФайлов/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ДвоичныеДанныеФайлов/ManagerModule.bsl @@ -26,9 +26,7 @@ | ВерсииФайлов.ДатаМодификацииУниверсальная УБЫВ"; РезультатЗапроса = Запрос.Выполнить(); - МассивСсылок = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); - ОбновлениеИнформационнойБазы.ОтметитьКОбработке(Параметры, МассивСсылок); КонецПроцедуры @@ -47,6 +45,13 @@ НачатьТранзакцию(); Попытка + + БлокировкаДанных = Новый БлокировкаДанных; + ЭлементБлокировкиДанных = БлокировкаДанных.Добавить("РегистрСведений.УдалитьХранимыеФайлыВерсий"); + ЭлементБлокировкиДанных.УстановитьЗначение("ВерсияФайла", Выборка.Ссылка); + ЭлементБлокировкиДанных.Режим = РежимБлокировкиДанных.Разделяемый; + БлокировкаДанных.Заблокировать(); + МенеджерЗаписиВерсииФайла = РегистрыСведений.УдалитьХранимыеФайлыВерсий.СоздатьМенеджерЗаписи(); МенеджерЗаписиВерсииФайла.ВерсияФайла = Выборка.Ссылка; МенеджерЗаписиВерсииФайла.Прочитать(); diff --git a/SSL/src/InformationRegisters/ЗначенияГруппДоступа/ManagerModule.bsl b/SSL/src/InformationRegisters/ЗначенияГруппДоступа/ManagerModule.bsl index 76a431a1e..584ade65f 100644 --- a/SSL/src/InformationRegisters/ЗначенияГруппДоступа/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ЗначенияГруппДоступа/ManagerModule.bsl @@ -102,10 +102,10 @@ |ИЗ | ИспользуемыеВидыДоступа КАК ИспользуемыеВидыДоступа | ВНУТРЕННЕЕ СОЕДИНЕНИЕ НазначениеПрофилей КАК НазначениеПрофилей - | ПО (НЕ(НЕ(ИспользуемыеВидыДоступа.ВидДоступаПользователи - | И НЕ НазначениеПрофилей.ТолькоДляПользователей) - | И НЕ(ИспользуемыеВидыДоступа.ВидДоступаВнешниеПользователи - | И НЕ НазначениеПрофилей.ТолькоДляВнешнихПользователей))) + | ПО (ИспользуемыеВидыДоступа.ВидДоступаПользователи + | И НЕ НазначениеПрофилей.ТолькоДляПользователей + | ИЛИ ИспользуемыеВидыДоступа.ВидДоступаВнешниеПользователи + | И НЕ НазначениеПрофилей.ТолькоДляВнешнихПользователей) | |ИНДЕКСИРОВАТЬ ПО | НазначениеПрофилей.Профиль, @@ -306,10 +306,10 @@ |ИЗ | ИспользуемыеВидыДоступа КАК ИспользуемыеВидыДоступа | ВНУТРЕННЕЕ СОЕДИНЕНИЕ НазначениеПрофилей КАК НазначениеПрофилей - | ПО (НЕ(НЕ(ИспользуемыеВидыДоступа.ВидДоступаПользователи - | И НЕ НазначениеПрофилей.ТолькоДляПользователей) - | И НЕ(ИспользуемыеВидыДоступа.ВидДоступаВнешниеПользователи - | И НЕ НазначениеПрофилей.ТолькоДляВнешнихПользователей))) + | ПО (ИспользуемыеВидыДоступа.ВидДоступаПользователи + | И НЕ НазначениеПрофилей.ТолькоДляПользователей + | ИЛИ ИспользуемыеВидыДоступа.ВидДоступаВнешниеПользователи + | И НЕ НазначениеПрофилей.ТолькоДляВнешнихПользователей) | |ИНДЕКСИРОВАТЬ ПО | НазначениеПрофилей.Профиль, diff --git a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРолиСОбъектомАдресации/Module.bsl b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРолиСОбъектомАдресации/Module.bsl index 1b3c6df52..64b0b2ca3 100644 --- a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРолиСОбъектомАдресации/Module.bsl +++ b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРолиСОбъектомАдресации/Module.bsl @@ -149,8 +149,8 @@ &НаКлиенте Процедура СписокОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) - Пользователи = ОпределитьДействительностьПользователей(ВыбранноеЗначение); - Для каждого Значение Из Пользователи Цикл + СписокПользователей = ОпределитьДействительностьПользователей(ВыбранноеЗначение); + Для каждого Значение Из СписокПользователей Цикл Если НаборЗаписей.НайтиСтроки(Новый Структура("Исполнитель", Значение.Ключ)).Количество() > 0 Тогда Продолжить; @@ -176,17 +176,17 @@ #Область ОбработчикиКомандФормы &НаСервереБезКонтекста -Функция ОпределитьДействительностьПользователей(Пользователи) +Функция ОпределитьДействительностьПользователей(СписокПользователей) - Если ЗначениеЗаполнено(Пользователи) Тогда - Если ТипЗнч(Пользователи) = тип("Массив") Тогда + Если ЗначениеЗаполнено(СписокПользователей) Тогда + Если ТипЗнч(СписокПользователей) = тип("Массив") Тогда Результат = Новый Соответствие; - Для каждого Значение Из Пользователи Цикл + Для каждого Значение Из СписокПользователей Цикл Результат.Вставить(Значение, Значение.Недействителен); КонецЦикла; Возврат Результат; Иначе - Возврат Пользователи.Недействителен; + Возврат СписокПользователей.Недействителен; КонецЕсли; КонецЕсли; diff --git a/SSL/src/InformationRegisters/КонтактыВзаимодействий/ManagerModule.bsl b/SSL/src/InformationRegisters/КонтактыВзаимодействий/ManagerModule.bsl index b8476b012..80c033845 100644 --- a/SSL/src/InformationRegisters/КонтактыВзаимодействий/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/КонтактыВзаимодействий/ManagerModule.bsl @@ -208,7 +208,6 @@ РезультатЗапроса = Запрос.Выполнить(); Если РезультатЗапроса.Пустой() Тогда - ТребуетсяЗаполнение = Ложь; Возврат; КонецЕсли; diff --git a/SSL/src/InformationRegisters/КэшПрограммныхИнтерфейсов/ManagerModule.bsl b/SSL/src/InformationRegisters/КэшПрограммныхИнтерфейсов/ManagerModule.bsl index 394d64955..3d2c63823 100644 --- a/SSL/src/InformationRegisters/КэшПрограммныхИнтерфейсов/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/КэшПрограммныхИнтерфейсов/ManagerModule.bsl @@ -286,10 +286,11 @@ КонецЕсли; Если (Протокол = "https" Или Протокол = "ftps") И ЗащищенноеСоединение = Неопределено Тогда - ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL; + Сертификаты = Новый СертификатыУдостоверяющихЦентровОС; + ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL(, Сертификаты); КонецЕсли; - WSОпределения = WSОпределения(АдресWSDL, ИмяПользователя, Пароль, , ЗащищенноеСоединение); + WSОпределения = WSОпределения(АдресWSDL, ИмяПользователя, Пароль,, ЗащищенноеСоединение); Если ПустаяСтрока(ИмяТочкиПодключения) Тогда ИмяТочкиПодключения = ИмяСервиса + "Soap"; @@ -353,7 +354,26 @@ Функция WSОпределения(Знач АдресWSDL, Знач ИмяПользователя, Знач Пароль, Знач Таймаут = 10, Знач ЗащищенноеСоединение = Неопределено) Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПолучениеФайловИзИнтернета") Тогда - Возврат Новый WSОпределения(АдресWSDL, ИмяПользователя, Пароль, ,Таймаут, ЗащищенноеСоединение); + Попытка + Определения = Новый WSОпределения(АдресWSDL, ИмяПользователя, Пароль, ,Таймаут, ЗащищенноеСоединение); + Исключение + РезультатДиагностики = ОбщегоНазначенияКлиентСервер.ДиагностикаСоединения(АдресWSDL); + + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось получить WS-определения по адресу + |%1 + |по причине: + |%2 + | + |Результат диагностики: + |%3'"), + АдресWSDL, + КраткоеПредставлениеОшибки(ИнформацияОбОшибке()), + РезультатДиагностики.ОписаниеОшибки); + + ВызватьИсключение ТекстОшибки; + КонецПопытки; + Возврат Определения; КонецЕсли; ПараметрыПолучения = Новый Массив; @@ -378,7 +398,16 @@ ИнтернетПрокси = МодульПолучениеФайловИзИнтернетаКлиентСервер.ПолучитьПрокси(АдресWSDL); КонецЕсли; - Определения = Новый WSОпределения(ИмяФайлаWSDL, ИмяПользователя, Пароль, ИнтернетПрокси, Таймаут, ЗащищенноеСоединение); + Попытка + Определения = Новый WSОпределения(ИмяФайлаWSDL, ИмяПользователя, Пароль, ИнтернетПрокси, Таймаут, ЗащищенноеСоединение); + Исключение + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось получить WS-определения из кэша + |по причине: + |%1'"), + КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); + ВызватьИсключение ТекстОшибки; + КонецПопытки; Попытка УдалитьФайлы(ИмяФайлаWSDL); @@ -423,7 +452,7 @@ ПараметрыПодключения.Вставить("ИмяСервиса", "InterfaceVersion"); ПараметрыПодключения.Вставить("ИмяПользователя", ИмяПользователя); ПараметрыПодключения.Вставить("Пароль", ПарольПользователя); - ПараметрыПодключения.Вставить("Таймаут", 3); + ПараметрыПодключения.Вставить("Таймаут", 7); ПроксиВерсионирования = ОбщегоНазначения.СоздатьWSПрокси(ПараметрыПодключения); @@ -451,23 +480,38 @@ МодульПолучениеФайловИзИнтернета = ОбщегоНазначения.ОбщийМодуль("ПолучениеФайловИзИнтернета"); ОписаниеФайла = МодульПолучениеФайловИзИнтернета.СкачатьФайлНаСервере(Адрес, ПараметрыПолучения); Иначе - ВызватьИсключение НСтр("ru = 'Подсистема ""Получение файлов из интернета"" не доступна.'"); + ВызватьИсключение + НСтр("ru = 'Подсистема ""Получение файлов из интернета"" не доступна.'"); КонецЕсли; - Если НЕ ОписаниеФайла.Статус Тогда - ВызватьИсключение(НСтр("ru = 'Ошибка получения файла описания web-сервиса:'") + Символы.ПС + ОписаниеФайла.СообщениеОбОшибке) + Если Не ОписаниеФайла.Статус Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось получить файл описания web-сервиса + |по причине: + |%1'"), + ОписаниеФайла.СообщениеОбОшибке); КонецЕсли; - Определения = Новый WSОпределения(ОписаниеФайла.Путь, , , , Таймаут); + Попытка + Определения = Новый WSОпределения(ОписаниеФайла.Путь, ИмяПользователя, Пароль,, Таймаут, ЗащищенноеСоединение); + Исключение + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось получить файл описания web-сервиса + |по причине: + |Не удалось получить WS-определения для сохранения в кэше: + |%1'"), + КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; Если Определения.Сервисы.Количество() = 0 Тогда - ШаблонСообщения = НСтр("ru = 'Ошибка получения файла описания web-сервиса: - |В полученном файле не содержится ни одного описания сервиса. - | - |Возможно, адрес файла описания указан неверно: - |%1'"); - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, Адрес); - ВызватьИсключение(ТекстСообщения); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось получить файл описания web-сервиса + |по причине: + |В полученном файле не содержится ни одного описания сервиса. + | + |Возможно, адрес файла описания указан неверно: + |%1'"), + Адрес); КонецЕсли; Определения = Неопределено; diff --git a/SSL/src/InformationRegisters/НаличиеФайлов/ManagerModule.bsl b/SSL/src/InformationRegisters/НаличиеФайлов/ManagerModule.bsl index d39b2eb84..44b837a2a 100644 --- a/SSL/src/InformationRegisters/НаличиеФайлов/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/НаличиеФайлов/ManagerModule.bsl @@ -10,12 +10,8 @@ // Процедура ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию(Параметры) Экспорт - УстановитьПривилегированныйРежим(Истина); - ОтработаныВсеВладельцыФайлов = Ложь; - Ссылка = ""; - Пока Не ОтработаныВсеВладельцыФайлов Цикл Запрос = Новый Запрос; @@ -71,9 +67,16 @@ НачатьТранзакцию(); Попытка + + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Справочник.Файлы"); + ЭлементБлокировки.УстановитьЗначение("Ссылка", Выборка.Ссылка); + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Разделяемый; + Блокировка.Заблокировать(); + МенеджерЗаписиНаличиеФайлов = СоздатьМенеджерЗаписи(); - МенеджерЗаписиНаличиеФайлов.ОбъектСФайлами = ВладелецФайла; - МенеджерЗаписиНаличиеФайлов.ЕстьФайлы = Истина; + МенеджерЗаписиНаличиеФайлов.ОбъектСФайлами = ВладелецФайла; + МенеджерЗаписиНаличиеФайлов.ЕстьФайлы = Истина; МенеджерЗаписиНаличиеФайлов.ИдентификаторОбъекта = РаботаСФайламиСлужебный.ПолучитьОчереднойИдентификаторОбъекта(); МенеджерЗаписиНаличиеФайлов.Записать(Истина); diff --git a/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/Напоминание/Module.bsl b/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/Напоминание/Module.bsl index 02fd9d015..3bcaee7a8 100644 --- a/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/Напоминание/Module.bsl +++ b/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/Напоминание/Module.bsl @@ -444,7 +444,6 @@ &НаКлиенте Процедура НормализоватьРасписание(НормализуемоеРасписание); НормализуемоеРасписание.ВремяКонца = '000101010000'; - НормализуемоеРасписание.ВремяЗавершения = НормализуемоеРасписание.ВремяКонца; НормализуемоеРасписание.ПериодПовтораВТечениеДня = 0; НормализуемоеРасписание.ПаузаПовтора = 0; НормализуемоеРасписание.ИнтервалЗавершения = 0; diff --git a/SSL/src/InformationRegisters/НапоминанияПользователя/НапоминанияПользователя.mdo b/SSL/src/InformationRegisters/НапоминанияПользователя/НапоминанияПользователя.mdo index 18262e6be..03ff33d85 100644 --- a/SSL/src/InformationRegisters/НапоминанияПользователя/НапоминанияПользователя.mdo +++ b/SSL/src/InformationRegisters/НапоминанияПользователя/НапоминанияПользователя.mdo @@ -15,7 +15,6 @@ Напоминания пользователя BothWays - InformationRegister.НапоминанияПользователя.Form.Напоминание Use Active @@ -214,6 +213,28 @@ Use + + Идентификатор + + ru + Идентификатор + + + String + + 100 + + + + ru + Уточняет предмет напоминания, например, "ДеньРождения". + + + + Use + Use + + Пользователь diff --git a/SSL/src/InformationRegisters/НаследованиеНастроекПравОбъектов/ManagerModule.bsl b/SSL/src/InformationRegisters/НаследованиеНастроекПравОбъектов/ManagerModule.bsl index 4527c662e..06ae8e5b2 100644 --- a/SSL/src/InformationRegisters/НаследованиеНастроекПравОбъектов/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/НаследованиеНастроекПравОбъектов/ManagerModule.bsl @@ -149,7 +149,7 @@ НовыеЗаписи = РодителиОбъекта(Ссылка, Ссылка, СвойстваРодителяОбъекта); Иначе НовыеЗаписи = УправлениеДоступомСлужебныйПовтИсп.ТаблицаПустогоНабораЗаписей( - Метаданные.РегистрыСведений.НаследованиеНастроекПравОбъектов.ПолноеИмя()).Скопировать(); + Метаданные.РегистрыСведений.НаследованиеНастроекПравОбъектов.ПолноеИмя()).Получить(); НоваяСтрока = НовыеЗаписи.Добавить(); НоваяСтрока.Объект = Ссылка; @@ -204,7 +204,7 @@ Функция РодителиОбъекта(Ссылка, СсылкаОбъекта = Неопределено, СвойстваРодителяОбъекта = "", ПолучатьНаследование = Истина) Экспорт НовыеЗаписи = УправлениеДоступомСлужебныйПовтИсп.ТаблицаПустогоНабораЗаписей( - Метаданные.РегистрыСведений.НаследованиеНастроекПравОбъектов.ПолноеИмя()).Скопировать(); + Метаданные.РегистрыСведений.НаследованиеНастроекПравОбъектов.ПолноеИмя()).Получить(); // Получение флажка наследования настроек прав родителей для ссылки. Если ПолучатьНаследование Тогда diff --git a/SSL/src/InformationRegisters/НастройкиПравОбъектов/ManagerModule.bsl b/SSL/src/InformationRegisters/НастройкиПравОбъектов/ManagerModule.bsl index 1814e2ca9..931bc4530 100644 --- a/SSL/src/InformationRegisters/НастройкиПравОбъектов/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/НастройкиПравОбъектов/ManagerModule.bsl @@ -135,7 +135,7 @@ Если ВозможныеПрава.ИерархическиеТаблицы.Получить(ТипЗнч(СсылкаНаОбъект)) = Неопределено Тогда НаследованиеНастроек = УправлениеДоступомСлужебныйПовтИсп.ТаблицаПустогоНабораЗаписей( - Метаданные.РегистрыСведений.НаследованиеНастроекПравОбъектов.ПолноеИмя()).Скопировать(); + Метаданные.РегистрыСведений.НаследованиеНастроекПравОбъектов.ПолноеИмя()).Получить(); НоваяСтрока = НаследованиеНастроек.Добавить(); НаследованиеНастроек.Колонки.Добавить("Уровень", Новый ОписаниеТипов("Число")); НоваяСтрока.Объект = СсылкаНаОбъект; @@ -151,9 +151,9 @@ Запрос.УстановитьПараметр("НаследованиеНастроек", НаследованиеНастроек); Запрос.Текст = "ВЫБРАТЬ - | НаследованиеНастроек.Объект, - | НаследованиеНастроек.Родитель, - | НаследованиеНастроек.Уровень + | НаследованиеНастроек.Объект КАК Объект, + | НаследованиеНастроек.Родитель КАК Родитель, + | НаследованиеНастроек.Уровень КАК Уровень |ПОМЕСТИТЬ НаследованиеНастроек |ИЗ | &НаследованиеНастроек КАК НаследованиеНастроек @@ -180,8 +180,8 @@ | ВНУТРЕННЕЕ СОЕДИНЕНИЕ НаследованиеНастроек КАК НаследованиеНастроек | ПО НастройкиПравОбъектов.Объект = НаследованиеНастроек.Родитель |ГДЕ - | НЕ(НаследованиеНастроек.Родитель <> &Объект - | И НастройкиПравОбъектов.НаследованиеРазрешено <> ИСТИНА) + | (НаследованиеНастроек.Родитель = &Объект + | ИЛИ НастройкиПравОбъектов.НаследованиеРазрешено) | |УПОРЯДОЧИТЬ ПО | НастройкаРодителя УБЫВ, @@ -269,7 +269,7 @@ // Подготовка новых настроек НовыеНастройкиПрав = УправлениеДоступомСлужебныйПовтИсп.ТаблицаПустогоНабораЗаписей( - Метаданные.РегистрыСведений.НастройкиПравОбъектов.ПолноеИмя()).Скопировать(); + Метаданные.РегистрыСведений.НастройкиПравОбъектов.ПолноеИмя()).Получить(); ТаблицаОбщихПрав = Справочники.ИдентификаторыОбъектовМетаданных.ПустаяСсылка(); diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/ManagerModule.bsl b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/ManagerModule.bsl index b74f1141c..72c932d12 100644 --- a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/ManagerModule.bsl @@ -52,9 +52,17 @@ Результат = ПолучитьДанныеРегистраПоСтруктуре(Узел, СтруктураНастроек); УстановитьПривилегированныйРежим(Истина); - Результат.Вставить("WSПароль", ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(Узел, "WSПароль", Истина)); + WSПароль = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(Узел, "WSПароль", Истина); УстановитьПривилегированныйРежим(Ложь); + Если ТипЗнч(WSПароль) = Тип("Строка") + Или WSПароль = Неопределено Тогда + + Результат.Вставить("WSПароль", WSПароль); + Иначе + ВызватьИсключение НСтр("ru='Ошибка при извлечении пароля из безопасного хранилища.'"); + КонецЕсли; + Если ТипЗнч(ПараметрыАутентификации) = Тип("Структура") Тогда // Инициация обмена пользователем с клиента. Если ПараметрыАутентификации.ИспользоватьТекущегоПользователя Тогда diff --git a/SSL/src/InformationRegisters/НастройкиУчетныхЗаписейЭлектроннойПочты/Forms/ФормаЗаписи/Help/ru.html b/SSL/src/InformationRegisters/НастройкиУчетныхЗаписейЭлектроннойПочты/Forms/ФормаЗаписи/Help/ru.html index 07724ebfd..dc2764d74 100644 --- a/SSL/src/InformationRegisters/НастройкиУчетныхЗаписейЭлектроннойПочты/Forms/ФормаЗаписи/Help/ru.html +++ b/SSL/src/InformationRegisters/НастройкиУчетныхЗаписейЭлектроннойПочты/Forms/ФормаЗаписи/Help/ru.html @@ -2,7 +2,6 @@

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

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

    Настройка использования учетной записи во встроенном почтовом клиенте.

    -

    Флажок Персональная учетная запись.

    Коллективная учетная запись.

    Использование коллективной учетной записи.

    Флажок Удалять письма после отправки.

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

    +
    В этом случае после отправки письма будут удалены.

    Коллективная учетная запись

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

    Коллективная учетная запись

    -
    • -
      Для настройки коллективной учетной записи электронной почты на вкладке Обработка писем выключите флажок Персональная учетная запись.
      -
    • Для коллективной учетной записи ответственным за папки может быть один пользователь, а ответственным за обработку писем по умолчанию другой (например, администратор программы).
      • Выберите Ответственного за обработку писем из списка пользователей. Поле является обязательным для заполнения.
        diff --git a/SSL/src/InformationRegisters/ОперацииСтатистики/ManagerModule.bsl b/SSL/src/InformationRegisters/ОперацииСтатистики/ManagerModule.bsl index 4df27dd1b..6081870cb 100644 --- a/SSL/src/InformationRegisters/ОперацииСтатистики/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ОперацииСтатистики/ManagerModule.bsl @@ -18,7 +18,7 @@ Функция НайтиПоХешу(Хеш) Запрос = Новый Запрос; Запрос.Текст = " - |ВЫБРАТЬ + |ВЫБРАТЬ ПЕРВЫЕ 1 | ОперацииСтатистики.ИдентификаторОперации |ИЗ | РегистрСведений.ОперацииСтатистики КАК ОперацииСтатистики diff --git a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/МакетыПечатныхФорм/Module.bsl b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/МакетыПечатныхФорм/Module.bsl index 8eee081e0..c839f5116 100644 --- a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/МакетыПечатныхФорм/Module.bsl +++ b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/МакетыПечатныхФорм/Module.bsl @@ -32,12 +32,12 @@ Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) Если ИмяСобытия = "Запись_ПользовательскиеМакетыПечати" Тогда - ОбновитьОтображениеМакета(Параметр.ИмяОбъектаМетаданныхМакета); + ОбновитьОтображениеМакетов(); ИначеЕсли ИмяСобытия = "Запись_ТабличныйДокумент" И Источник.ВладелецФормы = ЭтотОбъект Тогда Макет = Параметр.ТабличныйДокумент; АдресМакетаВоВременномХранилище = ПоместитьВоВременноеХранилище(Макет); ЗаписатьМакет(Параметр.ИмяОбъектаМетаданныхМакета, АдресМакетаВоВременномХранилище); - ОбновитьОтображениеМакета(Параметр.ИмяОбъектаМетаданныхМакета) + ОбновитьОтображениеМакетов() КонецЕсли; КонецПроцедуры @@ -468,15 +468,9 @@ КонецПроцедуры &НаКлиенте -Процедура ОбновитьОтображениеМакета(ИмяОбъектаМетаданныхМакета); - - НайденныеМакеты = МакетыПечатныхФорм.НайтиСтроки(Новый Структура("ИмяОбъектаМетаданныхМакета", ИмяОбъектаМетаданныхМакета)); - Для Каждого Макет Из НайденныеМакеты Цикл - Макет.Изменен = Истина; - Макет.ИспользуетсяИзмененный = Истина; - УстановитьКартинкуИспользования(Макет); - КонецЦикла; +Процедура ОбновитьОтображениеМакетов(); + УстановитьФлагиИспользованияИзмененныхМакетов(); УстановитьДоступностьКнопокКоманднойПанели(); КонецПроцедуры diff --git a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ЗагрузитьПравилаСинхронизацииДанных/Module.bsl b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ЗагрузитьПравилаСинхронизацииДанных/Module.bsl index 6570656b1..636666db8 100644 --- a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ЗагрузитьПравилаСинхронизацииДанных/Module.bsl +++ b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ЗагрузитьПравилаСинхронизацииДанных/Module.bsl @@ -96,6 +96,12 @@ // Продолжение процедуры (см. выше). &НаКлиенте Процедура ОпределениеСуществованияФайла(Существует, ДополнительныеПараметры) Экспорт + +#Если ВебКлиент Тогда + + ВызватьИсключение НСтр("ru='Операция в веб-клиенте не предусмотрена'"); + +#Иначе НайденныйКаталог = Неопределено; @@ -133,6 +139,8 @@ Оповещение = Новый ОписаниеОповещения("ИнициализироватьФайл", ЭтотОбъект, ДополнительныеПараметры); Файл.НачатьИнициализацию(Оповещение, ДополнительныеПараметры.РасположениеФайла); +#КонецЕсли + КонецПроцедуры // Продолжение процедуры (см. выше). diff --git a/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Form.form b/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Form.form index 37a766efd..a7f4c1933 100644 --- a/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Form.form +++ b/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Form.form @@ -4939,15 +4939,27 @@ Коллизии.ТипСтрокой - ВЫБРАТЬ - NULL КАК Дата, - NULL КАК Ссылка, - NULL КАК ТипСтрокой, - NULL КАК НомерЭтойВерсии, - NULL КАК НомерДругойВерсии, - NULL КАК АвторДругойВерсии, - NULL КАК ДругаяВерсияПринята, - NULL КАК ВерсияПроигнорирована + ВЫБРАТЬ РАЗРЕШЕННЫЕ + ВерсииДругойПрограммыПереопределяемый.ДатаВерсии КАК Дата, + ВерсииДругойПрограммыПереопределяемый.Объект КАК Ссылка, + ТИПЗНАЧЕНИЯ(ВерсииДругойПрограммыПереопределяемый.Объект) КАК ТипСтрокой, + ВерсииЭтойПрограммыПереопределяемый.НомерВерсии КАК НомерЭтойВерсии, + ВерсииДругойПрограммыПереопределяемый.НомерВерсии КАК НомерДругойВерсии, + ВерсииДругойПрограммыПереопределяемый.АвторВерсии КАК АвторДругойВерсии, + ВЫБОР + КОГДА ВерсииДругойПрограммыПереопределяемый.ТипВерсииОбъекта = ЗНАЧЕНИЕ(Перечисление.ТипыВерсийОбъекта.ПринятыеДанныеПоКоллизии) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ КАК ДругаяВерсияПринята, + ВерсииДругойПрограммыПереопределяемый.ВерсияПроигнорирована КАК ВерсияПроигнорирована +ИЗ + РегистрСведений.ВерсииОбъектов КАК ВерсииДругойПрограммыПереопределяемый + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ВерсииОбъектов КАК ВерсииЭтойПрограммыПереопределяемый + ПО ВерсииДругойПрограммыПереопределяемый.Объект = ВерсииЭтойПрограммыПереопределяемый.Объект + И (ВерсииДругойПрограммыПереопределяемый.НомерВерсии = ВерсииЭтойПрограммыПереопределяемый.НомерВерсии + 1) +ГДЕ + НЕ(ВерсииДругойПрограммыПереопределяемый.ТипВерсииОбъекта <> ЗНАЧЕНИЕ(Перечисление.ТипыВерсийОбъекта.ПринятыеДанныеПоКоллизии) + И ВерсииДругойПрограммыПереопределяемый.ТипВерсииОбъекта <> ЗНАЧЕНИЕ(Перечисление.ТипыВерсийОбъекта.НеПринятыеДанныеПоКоллизии)) true true true @@ -4995,17 +5007,28 @@ НепринятыеПоДате.ТипСтрокой - ВЫБРАТЬ - NULL КАК Дата, - NULL КАК Ссылка, - NULL КАК ПричинаЗапрета, - NULL КАК НовыйОбъект, - NULL КАК НомерДругойВерсии, - NULL КАК АвторДругойВерсии, - NULL КАК НомерЭтойВерсии, - NULL КАК ТипСтрокой, - NULL КАК ВерсияПроигнорирована - + ВЫБРАТЬ РАЗРЕШЕННЫЕ + НепринятаяВерсияПереопределяемый.ДатаВерсии КАК Дата, + НепринятаяВерсияПереопределяемый.Объект КАК Ссылка, + НепринятаяВерсияПереопределяемый.Комментарий КАК ПричинаЗапрета, + ВЫБОР + КОГДА НепринятаяВерсияПереопределяемый.ТипВерсииОбъекта = ЗНАЧЕНИЕ(Перечисление.ТипыВерсийОбъекта.НепринятыйПоДатеЗапретаОбъектСуществуетВБазе) + ТОГДА ЛОЖЬ + ИНАЧЕ ИСТИНА + КОНЕЦ КАК НовыйОбъект, + ЕСТЬNULL(НепринятаяВерсияПереопределяемый.НомерВерсии, 0) КАК НомерДругойВерсии, + НепринятаяВерсияПереопределяемый.АвторВерсии КАК АвторДругойВерсии, + ЕСТЬNULL(ТекущаяВерсияПереопределяемый.НомерВерсии, 0) КАК НомерЭтойВерсии, + ТИПЗНАЧЕНИЯ(НепринятаяВерсияПереопределяемый.Объект) КАК ТипСтрокой, + НепринятаяВерсияПереопределяемый.ВерсияПроигнорирована КАК ВерсияПроигнорирована +ИЗ + РегистрСведений.ВерсииОбъектов КАК НепринятаяВерсияПереопределяемый + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ВерсииОбъектов КАК ТекущаяВерсияПереопределяемый + ПО НепринятаяВерсияПереопределяемый.Объект = ТекущаяВерсияПереопределяемый.Объект + И (НепринятаяВерсияПереопределяемый.НомерВерсии = ТекущаяВерсияПереопределяемый.НомерВерсии + 1) +ГДЕ + НЕ(НепринятаяВерсияПереопределяемый.ТипВерсииОбъекта <> ЗНАЧЕНИЕ(Перечисление.ТипыВерсийОбъекта.НепринятыйПоДатеЗапретаОбъектСуществуетВБазе) + И НепринятаяВерсияПереопределяемый.ТипВерсииОбъекта <> ЗНАЧЕНИЕ(Перечисление.ТипыВерсийОбъекта.НепринятыйПоДатеЗапретаОбъектНеСуществуетВБазе)) true true true diff --git a/SSL/src/InformationRegisters/РезультатыПроверкиУчета/ManagerModule.bsl b/SSL/src/InformationRegisters/РезультатыПроверкиУчета/ManagerModule.bsl new file mode 100644 index 000000000..5935a9a65 --- /dev/null +++ b/SSL/src/InformationRegisters/РезультатыПроверкиУчета/ManagerModule.bsl @@ -0,0 +1,148 @@ + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ОбработчикиОбновления + +Процедура ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию(Параметры) Экспорт + + ДополнительныеПараметры = ОбновлениеИнформационнойБазы.ДополнительныеПараметрыОтметкиОбработки(); + ДополнительныеПараметры.ЭтоНезависимыйРегистрСведений = Истина; + ДополнительныеПараметры.ПолноеИмяРегистра = Метаданные.РегистрыСведений.РезультатыПроверкиУчета.ПолноеИмя(); + + ОтработаныВсеПроблемы = Ложь; + КлючУникальности = Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000"); + Пока Не ОтработаныВсеПроблемы Цикл + + Запрос = Новый Запрос; + Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1000 + | РезультатыПроверкиУчета.ПроблемныйОбъект КАК ПроблемныйОбъект, + | РезультатыПроверкиУчета.ПравилоПроверки КАК ПравилоПроверки, + | РезультатыПроверкиУчета.ВидПроверки КАК ВидПроверки, + | РезультатыПроверкиУчета.КлючУникальности КАК КлючУникальности + |ИЗ + | РегистрСведений.РезультатыПроверкиУчета КАК РезультатыПроверкиУчета + |ГДЕ + | РезультатыПроверкиУчета.УдалитьИгнорироватьПроблему + | И РезультатыПроверкиУчета.КлючУникальности > &КлючУникальности + | + |УПОРЯДОЧИТЬ ПО + | КлючУникальности"; + + Запрос.УстановитьПараметр("КлючУникальности", КлючУникальности); + Результат = Запрос.Выполнить().Выгрузить(); + + ОбновлениеИнформационнойБазы.ОтметитьКОбработке(Параметры, Результат, ДополнительныеПараметры); + + КоличествоЗаписей = Результат.Количество(); + Если КоличествоЗаписей < 1000 Тогда + ОтработаныВсеПроблемы = Истина; + КонецЕсли; + + Если КоличествоЗаписей > 0 Тогда + КлючУникальности = Результат[КоличествоЗаписей - 1].КлючУникальности; + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +Процедура ОбработатьДанныеДляПереходаНаНовуюВерсию(Параметры) Экспорт + + ОбработкаЗавершена = Истина; + + МетаданныеРегистра = Метаданные.РегистрыСведений.РезультатыПроверкиУчета; + ПолноеИмяРегистра = МетаданныеРегистра.ПолноеИмя(); + ПредставлениеРегистра = МетаданныеРегистра.Представление(); + ПредставлениеОтбора = НСтр("ru = 'Проблемный объект = ""%1"" + |Правило проверки = ""%2"" + |Вид проверки = ""%3"" + |Ключ уникальности = ""%4""'"); + + ДополнительныеПараметрыВыборкиДанныхДляОбработки = ОбновлениеИнформационнойБазы.ДополнительныеПараметрыВыборкиДанныхДляОбработки(); + + Выборка = ОбновлениеИнформационнойБазы.ВыбратьИзмеренияНезависимогоРегистраСведенийДляОбработки( + Параметры.Очередь, ПолноеИмяРегистра, ДополнительныеПараметрыВыборкиДанныхДляОбработки); + + ОбъектовОбработано = 0; + ПроблемныхОбъектов = 0; + + Пока Выборка.Следующий() Цикл + + НачатьТранзакцию(); + + Попытка + + ПроблемныйОбъект = Выборка.ПроблемныйОбъект; + ПравилоПроверки = Выборка.ПравилоПроверки; + ВидПроверки = Выборка.ВидПроверки; + КлючУникальности = Выборка.КлючУникальности; + + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить(ПолноеИмяРегистра); + ЭлементБлокировки.УстановитьЗначение("ПроблемныйОбъект", ПроблемныйОбъект); + ЭлементБлокировки.УстановитьЗначение("ПравилоПроверки", ПравилоПроверки); + ЭлементБлокировки.УстановитьЗначение("ВидПроверки", ВидПроверки); + ЭлементБлокировки.УстановитьЗначение("КлючУникальности", КлючУникальности); + Блокировка.Заблокировать(); + + НаборЗаписей = СоздатьНаборЗаписей(); + Отбор = НаборЗаписей.Отбор; + Отбор.КлючУникальности.Установить(КлючУникальности); + Отбор.ПроблемныйОбъект.Установить(ПроблемныйОбъект); + Отбор.ПравилоПроверки.Установить(ПравилоПроверки); + Отбор.ВидПроверки.Установить(ВидПроверки); + + ПредставлениеОтбора = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ПредставлениеОтбора, ПроблемныйОбъект, ПравилоПроверки, ВидПроверки, КлючУникальности); + + НаборЗаписей.Прочитать(); + Для Каждого ТекущаяЗапись Из НаборЗаписей Цикл + ТекущаяЗапись.ИгнорироватьПроблему = Истина; + КонецЦикла; + + ОбновлениеИнформационнойБазы.ЗаписатьНаборЗаписей(НаборЗаписей); + + ОбъектовОбработано = ОбъектовОбработано + 1; + + ЗафиксироватьТранзакцию(); + + Исключение + + ОтменитьТранзакцию(); + + ПроблемныхОбъектов = ПроблемныхОбъектов + 1; + + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось обработать набор записей регистра ""%1"" с отбором %2 по причине: + |%3'"), ПредставлениеРегистра, ПредставлениеОтбора, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + + ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Предупреждение, + МетаданныеРегистра, , ТекстСообщения); + + КонецПопытки; + + КонецЦикла; + + Если Не ОбновлениеИнформационнойБазы.ОбработкаДанныхЗавершена(Параметры.Очередь, "РегистрСведений.РезультатыПроверкиУчета") Тогда + ОбработкаЗавершена = Ложь; + КонецЕсли; + + Если ОбъектовОбработано = 0 И ПроблемныхОбъектов <> 0 Тогда + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Процедуре РегистрыСведений.РезультатыПроверкиУчета.ОбработатьДанныеДляПереходаНаНовуюВерсию не удалось обработать некоторые записи проблемных объектов (пропущены): %1'"), + ПроблемныхОбъектов); + ВызватьИсключение ТекстСообщения; + Иначе + ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Информация, + , , + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Процедура РегистрыСведений.НаличиеФайлов.ОбработатьДанныеДляПереходаНаНовуюВерсию обработала очередную порцию проблемных объектов: %1'"), + ОбъектовОбработано)); + КонецЕсли; + + Параметры.ОбработкаЗавершена = ОбработкаЗавершена; + +КонецПроцедуры + +#КонецОбласти + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/РезультатыПроверкиУчета/RecordSetModule.bsl b/SSL/src/InformationRegisters/РезультатыПроверкиУчета/RecordSetModule.bsl new file mode 100644 index 000000000..7472f16a6 --- /dev/null +++ b/SSL/src/InformationRegisters/РезультатыПроверкиУчета/RecordSetModule.bsl @@ -0,0 +1,17 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ОбработчикиСобытий + +Процедура ПередЗаписью(Отказ, Замещение) + + Если ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + + ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(ЭтотОбъект); + +КонецПроцедуры + +#КонецОбласти + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/РезультатыПроверкиУчета/РезультатыПроверкиУчета.mdo b/SSL/src/InformationRegisters/РезультатыПроверкиУчета/РезультатыПроверкиУчета.mdo index 112cb1c1f..a70607e15 100644 --- a/SSL/src/InformationRegisters/РезультатыПроверкиУчета/РезультатыПроверкиУчета.mdo +++ b/SSL/src/InformationRegisters/РезультатыПроверкиУчета/РезультатыПроверкиУчета.mdo @@ -107,25 +107,6 @@ Use - - ИгнорироватьПроблему - - ru - Игнорировать проблему - - - Boolean - - - ru - Признак того, что проблема не должна быть устранена - - - - Use - Use - - ДополнительнаяИнформация @@ -165,6 +146,21 @@ Use + + УдалитьИгнорироватьПроблему + + ru + (Не используется) Игнорировать проблему + + + Boolean + + + + Use + Use + + ПроблемныйОбъект @@ -252,4 +248,24 @@ true + + ИгнорироватьПроблему + + ru + Игнорировать проблему + + + Boolean + + + ru + Признак того, что проблема не должна быть устранена + + + + Use + Use + + true + diff --git a/SSL/src/InformationRegisters/РейтингАктивностиОбластейДанных/RecordSetModule.bsl b/SSL/src/InformationRegisters/РейтингАктивностиОбластейДанных/RecordSetModule.bsl index ab388879d..d966a6b6d 100644 --- a/SSL/src/InformationRegisters/РейтингАктивностиОбластейДанных/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/РейтингАктивностиОбластейДанных/RecordSetModule.bsl @@ -11,7 +11,7 @@ // Данный регистр не должен входить в любые обмены или операции выгрузки / загрузки данных при включенном // разделении по областям данных. - Если Не РаботаВМоделиСервисаПовтИсп.СеансЗапущенБезРазделителей() Тогда + Если Не РаботаВМоделиСервиса.СеансЗапущенБезРазделителей() Тогда ВызватьИсключение НСтр("ru = 'Нарушение прав доступа.'"); diff --git a/SSL/src/InformationRegisters/СведенияОФайлах/ManagerModule.bsl b/SSL/src/InformationRegisters/СведенияОФайлах/ManagerModule.bsl index 66996beba..4707dc8e0 100644 --- a/SSL/src/InformationRegisters/СведенияОФайлах/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/СведенияОФайлах/ManagerModule.bsl @@ -10,62 +10,37 @@ // Процедура ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию(Параметры) Экспорт - УстановитьПривилегированныйРежим(Истина); - - Для Каждого ТипПрисоединенногоФайла Из Метаданные.ОпределяемыеТипы.ПрисоединенныйФайл.Тип.Типы() Цикл - - ОтработаныВсеВладельцыФайлов = Ложь; + Ссылка = ""; + ОтработаныВсеВладельцыФайлов = Ложь; + Пока Не ОтработаныВсеВладельцыФайлов Цикл - МетаданныеПрисоединенногоФайла = Метаданные.НайтиПоТипу(ТипПрисоединенногоФайла); + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ РАЗЛИЧНЫЕ ПЕРВЫЕ 1000 + | Файлы.Ссылка КАК Ссылка + |ИЗ + | Справочник.Файлы КАК Файлы + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СведенияОФайлах КАК СведенияОФайлах + | ПО Файлы.Ссылка = СведенияОФайлах.Файл + |ГДЕ + | Файлы.Ссылка > &Ссылка + | И СведенияОФайлах.Файл ЕСТЬ NULL + |УПОРЯДОЧИТЬ ПО + | Файлы.Ссылка"; - ЭтоСправочникФайлов = ОбщегоНазначения.ЕстьРеквизитОбъекта("ТекущаяВерсия", МетаданныеПрисоединенногоФайла); + Запрос.УстановитьПараметр("Ссылка", Ссылка); + МассивСсылок = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); - Если Не ЭтоСправочникФайлов Тогда - Продолжить; + ОбновлениеИнформационнойБазы.ОтметитьКОбработке(Параметры, МассивСсылок); + + КоличествоСсылок = МассивСсылок.Количество(); + Если КоличествоСсылок < 1000 Тогда + ОтработаныВсеВладельцыФайлов = Истина; КонецЕсли; - ПолноеИмяОбъектаМетаданных = Метаданные.НайтиПоТипу(ТипПрисоединенногоФайла).ПолноеИмя(); - - Ссылка = ""; - - Пока Не ОтработаныВсеВладельцыФайлов Цикл - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ РАЗЛИЧНЫЕ ПЕРВЫЕ 1000 - | Файлы.Ссылка КАК Ссылка - |ИЗ - | " + ПолноеИмяОбъектаМетаданных + " КАК Файлы - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СведенияОФайлах КАК СведенияОФайлах - | ПО Файлы.Ссылка = СведенияОФайлах.Файл - |ГДЕ - | Файлы.Ссылка > &Ссылка - | И СведенияОФайлах.Файл ЕСТЬ NULL - | И ИСТИНА - |УПОРЯДОЧИТЬ ПО - | Файлы.Ссылка"; - - Если МетаданныеПрисоединенногоФайла.Иерархический Тогда - Запрос.Текст = СтрЗаменить(Запрос.Текст, "И ИСТИНА", "И НЕ Файлы.ЭтоГруппа"); - КонецЕсли; - - Запрос.УстановитьПараметр("Ссылка", Ссылка); - - МассивСсылок = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); - - ОбновлениеИнформационнойБазы.ОтметитьКОбработке(Параметры, МассивСсылок); - - КоличествоСсылок = МассивСсылок.Количество(); - - Если КоличествоСсылок < 1000 Тогда - ОтработаныВсеВладельцыФайлов = Истина; - КонецЕсли; - - Если КоличествоСсылок > 0 Тогда - Ссылка = МассивСсылок[КоличествоСсылок-1]; - КонецЕсли; - - КонецЦикла; + Если КоличествоСсылок > 0 Тогда + Ссылка = МассивСсылок[КоличествоСсылок-1]; + КонецЕсли; КонецЦикла; @@ -74,42 +49,26 @@ // Обновить записи регистра. Процедура ОбработатьДанныеДляПереходаНаНовуюВерсию(Параметры) Экспорт - УстановитьПривилегированныйРежим(Истина); - - ОбработкаЗавершена = Истина; - - Для Каждого ТипПрисоединенногоФайла Из Метаданные.ОпределяемыеТипы.ПрисоединенныйФайл.Тип.Типы() Цикл - - ЭтоСправочникФайлов = ОбщегоНазначения.ЕстьРеквизитОбъекта("ТекущаяВерсия", Метаданные.НайтиПоТипу(ТипПрисоединенногоФайла)); - - Если Не ЭтоСправочникФайлов Тогда - Продолжить; - КонецЕсли; - - ПолноеИмяОбъектаМетаданных = Метаданные.НайтиПоТипу(ТипПрисоединенногоФайла).ПолноеИмя(); - - Выборка = ОбновлениеИнформационнойБазы.ВыбратьСсылкиДляОбработки(Параметры.Очередь, ПолноеИмяОбъектаМетаданных); - - Если Выборка.Количество() > 0 Тогда - Прервать; - КонецЕсли; - - КонецЦикла; - + Выборка = ОбновлениеИнформационнойБазы.ВыбратьСсылкиДляОбработки(Параметры.Очередь, "Справочник.Файлы"); ОбъектовОбработано = 0; ПроблемныхОбъектов = 0; Пока Выборка.Следующий() Цикл - НачатьТранзакцию(); Попытка + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Справочник.Файлы"); + ЭлементБлокировки.УстановитьЗначение("Ссылка", Выборка.Ссылка); + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Разделяемый; + Блокировка.Заблокировать(); МенеджерЗаписи = СоздатьМенеджерЗаписи(); ЗаполнитьЗначенияСвойств(МенеджерЗаписи, Выборка.Ссылка); - МенеджерЗаписи.Файл = Выборка.Ссылка; - СтруктураРеквизитов = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Выборка.Ссылка, "Автор, ВладелецФайла"); + МенеджерЗаписи.Файл = Выборка.Ссылка; + СтруктураРеквизитов = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Выборка.Ссылка, "Автор, ВладелецФайла"); МенеджерЗаписи.Автор = СтруктураРеквизитов.Автор; МенеджерЗаписи.ВладелецФайла = СтруктураРеквизитов.ВладелецФайла; + Если Выборка.Ссылка.ПодписанЭП И Выборка.Ссылка.Зашифрован Тогда МенеджерЗаписи.НомерКартинкиПодписанЗашифрован = 2; ИначеЕсли Выборка.Ссылка.Зашифрован Тогда @@ -125,7 +84,6 @@ ОбъектовОбработано = ОбъектовОбработано + 1; ЗафиксироватьТранзакцию(); - Исключение ОтменитьТранзакцию(); // Если не удалось обработать какой-либо документ, повторяем попытку снова. @@ -135,44 +93,27 @@ НСтр("ru = 'Не удалось обработать файл: %1 по причине: |%2'"), Выборка.Ссылка, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Предупреждение, + ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Предупреждение, Выборка.Ссылка.Метаданные(), Выборка.Ссылка, ТекстСообщения); КонецПопытки; КонецЦикла; - Для Каждого ТипПрисоединенногоФайла Из Метаданные.ОпределяемыеТипы.ПрисоединенныйФайл.Тип.Типы() Цикл - - ЭтоСправочникФайлов = ОбщегоНазначения.ЕстьРеквизитОбъекта("ТекущаяВерсия", Метаданные.НайтиПоТипу(ТипПрисоединенногоФайла)); - - Если Не ЭтоСправочникФайлов Тогда - Продолжить; - КонецЕсли; - - ПолноеИмяОбъектаМетаданных = Метаданные.НайтиПоТипу(ТипПрисоединенногоФайла).ПолноеИмя(); - - Если Не ОбновлениеИнформационнойБазы.ОбработкаДанныхЗавершена(Параметры.Очередь, ПолноеИмяОбъектаМетаданных) Тогда - ОбработкаЗавершена = Ложь; - Прервать; - КонецЕсли; - - КонецЦикла; + Параметры.ОбработкаЗавершена = ОбновлениеИнформационнойБазы.ОбработкаДанныхЗавершена(Параметры.Очередь, "Справочник.Файлы"); Если ОбъектовОбработано = 0 И ПроблемныхОбъектов <> 0 Тогда ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Процедуре РегистрыСведений.СведенияОФайлах.ОбработатьДанныеДляПереходаНаНовуюВерсию не удалось обработать некоторые файлы файлов (пропущены): %1'"), - ПроблемныхОбъектов); + НСтр("ru = 'Процедуре РегистрыСведений.СведенияОФайлах.ОбработатьДанныеДляПереходаНаНовуюВерсию не удалось обработать некоторые файлы файлов (пропущены): %1'"), + ПроблемныхОбъектов); ВызватьИсключение ТекстСообщения; Иначе ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Информация, - Метаданные.НайтиПоПолномуИмени("ПолноеИмяОбъектаМетаданных"),, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Процедура РегистрыСведений.СведенияОФайлах.ОбработатьДанныеДляПереходаНаНовуюВерсию обработала очередную порцию файлов: %1'"), - ОбъектовОбработано)); + Справочники.Файлы,, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Процедура РегистрыСведений.СведенияОФайлах.ОбработатьДанныеДляПереходаНаНовуюВерсию обработала очередную порцию файлов: %1'"), + ОбъектовОбработано)); КонецЕсли; - Параметры.ОбработкаЗавершена = ОбработкаЗавершена; - КонецПроцедуры #КонецОбласти @@ -181,16 +122,13 @@ Функция ОбновляемыеОбъекты() Экспорт - Объекты = ""; + Объекты = Новый Массив; Для Каждого ТипПрисоединенногоФайла Из Метаданные.ОпределяемыеТипы.ПрисоединенныйФайл.Тип.Типы() Цикл - ПолноеИмяОбъектаМетаданных = Метаданные.НайтиПоТипу(ТипПрисоединенногоФайла).ПолноеИмя(); - Объекты = Объекты + ПолноеИмяОбъектаМетаданных + ", "; + Объекты.Добавить(Метаданные.НайтиПоТипу(ТипПрисоединенногоФайла).ПолноеИмя()); КонецЦикла; - Объекты = Лев(Объекты, СтрДлина(Объекты) - 2); - - Возврат Объекты; + Возврат СтрСоединить(Объекты, ", "); КонецФункции diff --git a/SSL/src/InformationRegisters/СостоянияРассылокОтчетов/ManagerModule.bsl b/SSL/src/InformationRegisters/СостоянияРассылокОтчетов/ManagerModule.bsl index 5b34563e3..43b091b04 100644 --- a/SSL/src/InformationRegisters/СостоянияРассылокОтчетов/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/СостоянияРассылокОтчетов/ManagerModule.bsl @@ -5,12 +5,6 @@ // Для внутреннего использования. // Процедура ЗафиксироватьЗапускРассылки(Рассылка) Экспорт - - Если ТипЗнч(Рассылка) <> Тип("СправочникСсылка.РассылкиОтчетов") - Или Не ЗначениеЗаполнено(Рассылка) Тогда - Возврат; - КонецЕсли; - УстановитьПривилегированныйРежим(Истина); НачатьТранзакцию(); @@ -44,12 +38,6 @@ // Для внутреннего использования. // Процедура ЗафиксироватьРезультатВыполненияРассылки(Рассылка, РезультатВыполнения) Экспорт - - Если ТипЗнч(Рассылка) <> Тип("СправочникСсылка.РассылкиОтчетов") - Или Не ЗначениеЗаполнено(Рассылка) Тогда - Возврат; - КонецЕсли; - УстановитьПривилегированныйРежим(Истина); НачатьТранзакцию(); diff --git a/SSL/src/Reports/АнализЖурналаРегистрации/ManagerModule.bsl b/SSL/src/Reports/АнализЖурналаРегистрации/ManagerModule.bsl index 48f86a734..5cda285c9 100644 --- a/SSL/src/Reports/АнализЖурналаРегистрации/ManagerModule.bsl +++ b/SSL/src/Reports/АнализЖурналаРегистрации/ManagerModule.bsl @@ -414,7 +414,6 @@ ОдновременноРаботавшихПользователей = 0; Счетчик = 0; ТекущаяДата = Неопределено; - СтрокаТаблицы = Неопределено; Для Каждого СтрокаДанныхЖурналаРегистрации Из ДанныеЖурналаРегистрации Цикл @@ -650,15 +649,10 @@ // Параметры отчета ДатаНачала = ПараметрыЗаполнения.ДатаНачала; ДатаОкончания = ПараметрыЗаполнения.ДатаОкончания; - РазмерОдновременноСессий = ПараметрыЗаполнения.РазмерОдновременноСессий; МинимальнаяПродолжительностьСеансовРегламентныхЗаданий = ПараметрыЗаполнения.МинимальнаяПродолжительностьСеансовРегламентныхЗаданий; - ОтображатьФоновыеЗадания = ПараметрыЗаполнения.ОтображатьФоновыеЗадания; ВыводитьЗаголовок = ПараметрыЗаполнения.ВыводитьЗаголовок; ВыводитьОтбор = ПараметрыЗаполнения.ВыводитьОтбор; - ЗаголовокОтчета = ПараметрыЗаполнения.ЗаголовокОтчета; - СкрытьРегламентныеЗадания = ПараметрыЗаполнения.СкрытьРегламентныеЗадания; - СмещениеВремениСервера = ПараметрыЗаполнения.СмещениеВремениСервера; Результат = Новый Структура; Отчет = Новый ТабличныйДокумент; @@ -761,7 +755,6 @@ ТекущееСобытие = Неопределено; ОбщаяПродолжительностьРЗ = 0; Точка = Неопределено; - РасшифровкаТочки = Неопределено; СтрокаКоличествоЗапусков = Неопределено; ЗапусковРегламентногоЗадания = 0; ПризнакСменыТочки = Ложь; @@ -1251,7 +1244,6 @@ Отчет = Новый ТабличныйДокумент; ОтмененоЗаданий = 0; ОшибкаВыполнения = 0; - МетаданныеЗадания = Расшифровка.Получить(1); ДатаЗапускаЗадания = Расшифровка.Получить(5); ДатаОкончанияЗадания = Расшифровка.Получить(6); @@ -1310,7 +1302,6 @@ Область = Макет.ПолучитьОбласть("ТаблицаИнтервалов"); НачалоИнтервала = ДатаЗапускаЗадания.Получить(Индекс); КонецИнтервала = ДатаОкончанияЗадания.Получить(Индекс); - СеансРегламентногоЗадания = СписокСеансов.Получить(Индекс); ПродолжительностьРЗ = ПродолжительностьРегламентногоЗадания(КонецИнтервала - НачалоИнтервала); Область.Параметры.НомерИнтервала = НомерИнтервала; Область.Параметры.НачалоИнтервала = Формат(НачалоИнтервала, "ДЛФ=T"); diff --git a/SSL/src/Reports/АнализОпроса/ObjectModule.bsl b/SSL/src/Reports/АнализОпроса/ObjectModule.bsl index a4e10d5be..0c936accb 100644 --- a/SSL/src/Reports/АнализОпроса/ObjectModule.bsl +++ b/SSL/src/Reports/АнализОпроса/ObjectModule.bsl @@ -544,8 +544,199 @@ Функция ВыполнитьЗапросПоВопросамШаблонаАнкеты(Опрос,ШаблонАнкеты) Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ + Запрос.Текст = " + |ВЫБРАТЬ + | ОтветыНаВопросыАнкет.Вопрос КАК Вопрос, + | ОтветыНаВопросыАнкет.ЭлементарныйВопрос КАК ЭлементарныйВопрос, + | ОтветыНаВопросыАнкет.НомерЯчейки КАК НомерЯчейки, + | ОтветыНаВопросыАнкет.Ответ КАК ВариантОтвета, + | КОЛИЧЕСТВО(ОтветыНаВопросыАнкет.Ответ) КАК КоличествоРазличных + |ПОМЕСТИТЬ ДанныеРегистраБулевоВариантыОтветов + |ИЗ + | РегистрСведений.ОтветыНаВопросыАнкет КАК ОтветыНаВопросыАнкет + |ГДЕ + | ОтветыНаВопросыАнкет.Анкета.Опрос = &Опрос + | И ТИПЗНАЧЕНИЯ(ОтветыНаВопросыАнкет.Ответ) В (ТИП(БУЛЕВО), ТИП(Справочник.ВариантыОтветовАнкет)) + | + |СГРУППИРОВАТЬ ПО + | ОтветыНаВопросыАнкет.Вопрос, + | ОтветыНаВопросыАнкет.ЭлементарныйВопрос, + | ОтветыНаВопросыАнкет.НомерЯчейки, + | ОтветыНаВопросыАнкет.Ответ + |; + |//////////////////////////////////////////////////////////////////// + | + |ВЫБРАТЬ + | ОтветыНаВопросыАнкет.Вопрос КАК Вопрос, + | ОтветыНаВопросыАнкет.ЭлементарныйВопрос КАК ЭлементарныйВопрос, + | ОтветыНаВопросыАнкет.НомерЯчейки КАК НомерЯчейки, + | NULL КАК ВариантОтвета, + | МИНИМУМ(ОтветыНаВопросыАнкет.Ответ) КАК МИНИМУМ, + | МАКСИМУМ(ОтветыНаВопросыАнкет.Ответ) КАК МАКСИМУМ, + | СРЕДНЕЕ(ВЫРАЗИТЬ(ОтветыНаВопросыАнкет.Ответ КАК ЧИСЛО)) КАК Среднее, + | СУММА(ВЫРАЗИТЬ(ОтветыНаВопросыАнкет.Ответ КАК ЧИСЛО)) КАК СУММА, + | КОЛИЧЕСТВО(ОтветыНаВопросыАнкет.Ответ) КАК КоличествоРазличных + |ПОМЕСТИТЬ ДанныеРегистра + |ИЗ + | РегистрСведений.ОтветыНаВопросыАнкет КАК ОтветыНаВопросыАнкет + |ГДЕ + | ОтветыНаВопросыАнкет.Анкета.Опрос = &Опрос + | И ТИПЗНАЧЕНИЯ(ОтветыНаВопросыАнкет.Ответ) = ТИП(ЧИСЛО) + |СГРУППИРОВАТЬ ПО + | ОтветыНаВопросыАнкет.Вопрос, + | ОтветыНаВопросыАнкет.ЭлементарныйВопрос, + | ОтветыНаВопросыАнкет.НомерЯчейки + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | ОтветыНаВопросыАнкет.Вопрос, + | ОтветыНаВопросыАнкет.ЭлементарныйВопрос, + | ОтветыНаВопросыАнкет.НомерЯчейки, + | NULL, + | МИНИМУМ(ОтветыНаВопросыАнкет.Ответ), + | МАКСИМУМ(ОтветыНаВопросыАнкет.Ответ), + | СРЕДНЕЕ(0), + | СУММА(0), + | КОЛИЧЕСТВО(ОтветыНаВопросыАнкет.Ответ) + |ИЗ + | РегистрСведений.ОтветыНаВопросыАнкет КАК ОтветыНаВопросыАнкет + |ГДЕ + | ОтветыНаВопросыАнкет.Анкета.Опрос = &Опрос + | И ТИПЗНАЧЕНИЯ(ОтветыНаВопросыАнкет.Ответ) = ТИП(ДАТА) + | + |СГРУППИРОВАТЬ ПО + | ОтветыНаВопросыАнкет.Вопрос, + | ОтветыНаВопросыАнкет.ЭлементарныйВопрос, + | ОтветыНаВопросыАнкет.НомерЯчейки + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | ОтветыНаВопросыАнкет.Вопрос, + | ОтветыНаВопросыАнкет.ЭлементарныйВопрос, + | ОтветыНаВопросыАнкет.НомерЯчейки, + | ОтветыНаВопросыАнкет.Ответ, + | NULL, + | NULL, + | NULL, + | NULL, + | КОЛИЧЕСТВО(ОтветыНаВопросыАнкет.Ответ) + |ИЗ + | РегистрСведений.ОтветыНаВопросыАнкет КАК ОтветыНаВопросыАнкет + |ГДЕ + | ОтветыНаВопросыАнкет.Анкета.Опрос = &Опрос + | И ТИПЗНАЧЕНИЯ(ОтветыНаВопросыАнкет.Ответ) = ТИП(БУЛЕВО) + | + |СГРУППИРОВАТЬ ПО + | ОтветыНаВопросыАнкет.Вопрос, + | ОтветыНаВопросыАнкет.ЭлементарныйВопрос, + | ОтветыНаВопросыАнкет.НомерЯчейки, + | ОтветыНаВопросыАнкет.Ответ + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | ОтветыНаВопросыАнкет.Вопрос, + | ОтветыНаВопросыАнкет.ЭлементарныйВопрос, + | ОтветыНаВопросыАнкет.НомерЯчейки, + | NULL, + | NULL, + | NULL, + | NULL, + | NULL, + | КОЛИЧЕСТВО(ОтветыНаВопросыАнкет.Ответ) + |ИЗ + | РегистрСведений.ОтветыНаВопросыАнкет КАК ОтветыНаВопросыАнкет + |ГДЕ + | ОтветыНаВопросыАнкет.Анкета.Опрос = &Опрос + | И ТИПЗНАЧЕНИЯ(ОтветыНаВопросыАнкет.Ответ) <> ТИП(БУЛЕВО) + | И ТИПЗНАЧЕНИЯ(ОтветыНаВопросыАнкет.Ответ) <> ТИП(ДАТА) + | И ТИПЗНАЧЕНИЯ(ОтветыНаВопросыАнкет.Ответ) <> ТИП(ЧИСЛО) + | И ТИПЗНАЧЕНИЯ(ОтветыНаВопросыАнкет.Ответ) <> ТИП(Справочник.ВариантыОтветовАнкет) + | + |СГРУППИРОВАТЬ ПО + | ОтветыНаВопросыАнкет.Вопрос, + | ОтветыНаВопросыАнкет.ЭлементарныйВопрос, + | ОтветыНаВопросыАнкет.НомерЯчейки + |; + |//////////////////////////////////////////////////////////////////// + | + |ВЫБРАТЬ + | ВопросыШаблонаАнкеты.Представление КАК Формулировка, + | ВопросыШаблонаАнкеты.ЭтоГруппа КАК ЭтоРаздел, + | ЕСТЬNULL(ВопросыДляАнкетирования.ТипОтвета, ЗНАЧЕНИЕ(Перечисление.ТипыОтветовНаВопрос.ПустаяСсылка)) КАК ТипОтвета, + | ВопросыШаблонаАнкеты.Ссылка КАК Ссылка, + | ЕСТЬNULL(ВопросыДляАнкетирования.АгрегироватьСуммуВОтчетах, ЛОЖЬ) КАК АгрегироватьСуммуВОтчетах + |ПОМЕСТИТЬ ВопросыШаблонаАнкеты + |ИЗ + | Справочник.ВопросыШаблонаАнкеты КАК ВопросыШаблонаАнкеты + | ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовХарактеристик.ВопросыДляАнкетирования КАК ВопросыДляАнкетирования + | ПО ВопросыШаблонаАнкеты.ЭлементарныйВопрос = ВопросыДляАнкетирования.Ссылка + |ГДЕ + | ВопросыШаблонаАнкеты.Владелец = &ШаблонАнкеты + | И (НЕ ВопросыШаблонаАнкеты.ЭтоГруппа) + |; + |//////////////////////////////////////////////////////////////////// + | + |ВЫБРАТЬ + | ВопросыШаблонаАнкеты.ЭтоРаздел КАК ЭтоРаздел, + | ВопросыШаблонаАнкеты.ТипОтвета КАК ТипОтвета, + | ВопросыШаблонаАнкеты.Ссылка КАК Ссылка, + | ВопросыШаблонаАнкеты.АгрегироватьСуммуВОтчетах КАК АгрегироватьСуммуВОтчетах + |ПОМЕСТИТЬ ВопросыШаблонаАнкетыВарианты + |ИЗ + | ВопросыШаблонаАнкеты КАК ВопросыШаблонаАнкеты + |ГДЕ + | ВопросыШаблонаАнкеты.ТипОтвета <> ЗНАЧЕНИЕ(Перечисление.ТипыОтветовНаВопрос.ОдинВариантИз) + |И ВопросыШаблонаАнкеты.ТипОтвета <> ЗНАЧЕНИЕ(Перечисление.ТипыОтветовНаВопрос.НесколькоВариантовИз) + |; + |//////////////////////////////////////////////////////////////////// + | + |ВЫБРАТЬ + | ВопросыШаблонаАнкеты.Представление КАК Формулировка, + | ВопросыШаблонаАнкеты.ЭтоГруппа КАК ЭтоРаздел, + | ЕСТЬNULL(ВопросыДляАнкетирования.ТипОтвета, ЗНАЧЕНИЕ(Перечисление.ТипыОтветовНаВопрос.ПустаяСсылка)) КАК ТипОтвета, + | ВопросыШаблонаАнкеты.Ссылка КАК Ссылка, + | ВариантыОтветовАнкет.Ссылка КАК ВариантОтвета, + | ЕСТЬNULL(ВопросыДляАнкетирования.АгрегироватьСуммуВОтчетах, ЛОЖЬ) КАК АгрегироватьСуммуВОтчетах, + | ВариантыОтветовАнкет.РеквизитДопУпорядочивания КАК Код, + | ВопросыШаблонаАнкеты.ЭлементарныйВопрос КАК ЭлементарныйВопрос + |ПОМЕСТИТЬ ВопросыШаблонаАнкетыВопросы + |ИЗ + | Справочник.ВопросыШаблонаАнкеты КАК ВопросыШаблонаАнкеты + | ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовХарактеристик.ВопросыДляАнкетирования КАК ВопросыДляАнкетирования + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВариантыОтветовАнкет КАК ВариантыОтветовАнкет + | ПО ВопросыДляАнкетирования.Ссылка = ВариантыОтветовАнкет.Владелец + | ПО ВопросыШаблонаАнкеты.ЭлементарныйВопрос = ВопросыДляАнкетирования.Ссылка + |ГДЕ + | ВопросыШаблонаАнкеты.Владелец = &ШаблонАнкеты + | И (НЕ ВопросыШаблонаАнкеты.ЭтоГруппа) + | И ВопросыДляАнкетирования.ТипОтвета В (ЗНАЧЕНИЕ(Перечисление.ТипыОтветовНаВопрос.ОдинВариантИЗ), ЗНАЧЕНИЕ(Перечисление.ТипыОтветовНаВопрос.НесколькоВариантовИз)) + |; + |//////////////////////////////////////////////////////////////////// + | + |ВЫБРАТЬ + | ОтветыНаВопросыАнкет.Вопрос КАК Вопрос, + | ОтветыНаВопросыАнкет.ЭлементарныйВопрос КАК ЭлементарныйВопрос, + | ОтветыНаВопросыАнкет.НомерЯчейки КАК НомерЯчейки, + | ОтветыНаВопросыАнкет.Ответ КАК Ответ + |ПОМЕСТИТЬ ОтветыНаТабличныеВопросы + |ИЗ + | РегистрСведений.ОтветыНаВопросыАнкет КАК ОтветыНаВопросыАнкет + | ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовХарактеристик.ВопросыДляАнкетирования КАК ВопросыДляАнкетирования + | ПО ОтветыНаВопросыАнкет.ЭлементарныйВопрос = ВопросыДляАнкетирования.Ссылка + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВопросыШаблонаАнкеты КАК ВопросыШаблонаАнкеты + | ПО ОтветыНаВопросыАнкет.Вопрос = ВопросыШаблонаАнкеты.Ссылка + |ГДЕ + | ОтветыНаВопросыАнкет.Анкета.Опрос = &Опрос + | И (НЕ ВопросыШаблонаАнкеты.ТипТабличногоВопроса = ЗНАЧЕНИЕ(Перечисление.ТипыТабличныхВопросов.Составной)) + | И ВопросыШаблонаАнкеты.ТипВопроса = ЗНАЧЕНИЕ(Перечисление.ТипыВопросовШаблонаАнкеты.Табличный) + | И ВопросыДляАнкетирования.ТипОтвета В (ЗНАЧЕНИЕ(Перечисление.ТипыОтветовНаВопрос.Булево), ЗНАЧЕНИЕ(Перечисление.ТипыОтветовНаВопрос.ОдинВариантИз), ЗНАЧЕНИЕ(Перечисление.ТипыОтветовНаВопрос.НесколькоВариантовИз)) + |; + |//////////////////////////////////////////////////////////////////// + | + |ВЫБРАТЬ | ВопросыШаблонаАнкеты.Формулировка КАК Наименование, | ВопросыШаблонаАнкеты.Ссылка КАК ВопросШаблона, | ВопросыШаблонаАнкеты.ЭтоГруппа КАК ЭтоРаздел, @@ -574,192 +765,45 @@ | ЭлементарныйВопрос.*} |ИЗ | (ВЫБРАТЬ - | Вопросы.Ссылка КАК ВопросШаблона, - | Вопросы.ЭтоРаздел КАК ЭтоРаздел, - | ДанныеРегистра.ЭлементарныйВопрос КАК ЭлементарныйВопросРегистр, - | ДанныеРегистра.НомерЯчейки КАК НомерЯчейки, - | ДанныеРегистра.ВариантОтвета КАК ВариантОтвета, - | ДанныеРегистра.КоличествоРазличных КАК КоличествоРазличных, - | ДанныеРегистра.МИНИМУМ КАК МИНИМУМ, - | ДанныеРегистра.МАКСИМУМ КАК МАКСИМУМ, - | ДанныеРегистра.Среднее КАК Среднее, - | ДанныеРегистра.СУММА КАК СУММА, - | Вопросы.ТипОтвета КАК ТипОтвета, - | Вопросы.АгрегироватьСуммуВОтчетах КАК АгрегироватьСуммуВОтчетах, - | 0 КАК КодВариантаОтвета + | ВопросыШаблонаАнкетыВарианты.Ссылка КАК ВопросШаблона, + | ВопросыШаблонаАнкетыВарианты.ЭтоРаздел КАК ЭтоРаздел, + | ДанныеРегистра.ЭлементарныйВопрос КАК ЭлементарныйВопросРегистр, + | ДанныеРегистра.НомерЯчейки КАК НомерЯчейки, + | ДанныеРегистра.ВариантОтвета КАК ВариантОтвета, + | ДанныеРегистра.КоличествоРазличных КАК КоличествоРазличных, + | ДанныеРегистра.МИНИМУМ КАК МИНИМУМ, + | ДанныеРегистра.МАКСИМУМ КАК МАКСИМУМ, + | ДанныеРегистра.Среднее КАК Среднее, + | ДанныеРегистра.СУММА КАК СУММА, + | ВопросыШаблонаАнкетыВарианты.ТипОтвета КАК ТипОтвета, + | ВопросыШаблонаАнкетыВарианты.АгрегироватьСуммуВОтчетах КАК АгрегироватьСуммуВОтчетах, + | 0 КАК КодВариантаОтвета | ИЗ - | (ВЫБРАТЬ - | ВложенныйЗапрос.ЭтоРаздел КАК ЭтоРаздел, - | ВложенныйЗапрос.ТипОтвета КАК ТипОтвета, - | ВложенныйЗапрос.Ссылка КАК Ссылка, - | ВложенныйЗапрос.АгрегироватьСуммуВОтчетах КАК АгрегироватьСуммуВОтчетах - | ИЗ - | (ВЫБРАТЬ - | ВопросыШаблонаАнкеты.Представление КАК Формулировка, - | ВопросыШаблонаАнкеты.ЭтоГруппа КАК ЭтоРаздел, - | ЕСТЬNULL(ВопросыДляАнкетирования.ТипОтвета, ЗНАЧЕНИЕ(Перечисление.ТипыОтветовНаВопрос.ПустаяСсылка)) КАК ТипОтвета, - | ВопросыШаблонаАнкеты.Ссылка КАК Ссылка, - | ЕСТЬNULL(ВопросыДляАнкетирования.АгрегироватьСуммуВОтчетах, ЛОЖЬ) КАК АгрегироватьСуммуВОтчетах - | ИЗ - | Справочник.ВопросыШаблонаАнкеты КАК ВопросыШаблонаАнкеты - | ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовХарактеристик.ВопросыДляАнкетирования КАК ВопросыДляАнкетирования - | ПО ВопросыШаблонаАнкеты.ЭлементарныйВопрос = ВопросыДляАнкетирования.Ссылка - | ГДЕ - | ВопросыШаблонаАнкеты.Владелец = &ШаблонАнкеты - | И (НЕ ВопросыШаблонаАнкеты.ЭтоГруппа)) КАК ВложенныйЗапрос - | ГДЕ - | ВложенныйЗапрос.ТипОтвета <> ЗНАЧЕНИЕ(Перечисление.ТипыОтветовНаВопрос.ОдинВариантИз) - | И ВложенныйЗапрос.ТипОтвета <> ЗНАЧЕНИЕ(Перечисление.ТипыОтветовНаВопрос.НесколькоВариантовИз)) КАК Вопросы - | ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ - | ОтветыНаВопросыАнкет.Вопрос КАК Вопрос, - | ОтветыНаВопросыАнкет.ЭлементарныйВопрос КАК ЭлементарныйВопрос, - | ОтветыНаВопросыАнкет.НомерЯчейки КАК НомерЯчейки, - | NULL КАК ВариантОтвета, - | МИНИМУМ(ОтветыНаВопросыАнкет.Ответ) КАК МИНИМУМ, - | МАКСИМУМ(ОтветыНаВопросыАнкет.Ответ) КАК МАКСИМУМ, - | СРЕДНЕЕ(ВЫРАЗИТЬ(ОтветыНаВопросыАнкет.Ответ КАК ЧИСЛО)) КАК Среднее, - | СУММА(ВЫРАЗИТЬ(ОтветыНаВопросыАнкет.Ответ КАК ЧИСЛО)) КАК СУММА, - | КОЛИЧЕСТВО(ОтветыНаВопросыАнкет.Ответ) КАК КоличествоРазличных - | ИЗ - | РегистрСведений.ОтветыНаВопросыАнкет КАК ОтветыНаВопросыАнкет - | ГДЕ - | ОтветыНаВопросыАнкет.Анкета.Опрос = &Опрос - | И ТИПЗНАЧЕНИЯ(ОтветыНаВопросыАнкет.Ответ) = ТИП(ЧИСЛО) - | - | СГРУППИРОВАТЬ ПО - | ОтветыНаВопросыАнкет.Вопрос, - | ОтветыНаВопросыАнкет.ЭлементарныйВопрос, - | ОтветыНаВопросыАнкет.НомерЯчейки - | - | ОБЪЕДИНИТЬ ВСЕ - | - | ВЫБРАТЬ - | ОтветыНаВопросыАнкет.Вопрос, - | ОтветыНаВопросыАнкет.ЭлементарныйВопрос, - | ОтветыНаВопросыАнкет.НомерЯчейки, - | NULL, - | МИНИМУМ(ОтветыНаВопросыАнкет.Ответ), - | МАКСИМУМ(ОтветыНаВопросыАнкет.Ответ), - | СРЕДНЕЕ(0), - | СУММА(0), - | КОЛИЧЕСТВО(ОтветыНаВопросыАнкет.Ответ) - | ИЗ - | РегистрСведений.ОтветыНаВопросыАнкет КАК ОтветыНаВопросыАнкет - | ГДЕ - | ОтветыНаВопросыАнкет.Анкета.Опрос = &Опрос - | И ТИПЗНАЧЕНИЯ(ОтветыНаВопросыАнкет.Ответ) = ТИП(ДАТА) - | - | СГРУППИРОВАТЬ ПО - | ОтветыНаВопросыАнкет.Вопрос, - | ОтветыНаВопросыАнкет.ЭлементарныйВопрос, - | ОтветыНаВопросыАнкет.НомерЯчейки - | - | ОБЪЕДИНИТЬ ВСЕ - | - | ВЫБРАТЬ - | ОтветыНаВопросыАнкет.Вопрос, - | ОтветыНаВопросыАнкет.ЭлементарныйВопрос, - | ОтветыНаВопросыАнкет.НомерЯчейки, - | ОтветыНаВопросыАнкет.Ответ, - | NULL, - | NULL, - | NULL, - | NULL, - | КОЛИЧЕСТВО(ОтветыНаВопросыАнкет.Ответ) - | ИЗ - | РегистрСведений.ОтветыНаВопросыАнкет КАК ОтветыНаВопросыАнкет - | ГДЕ - | ОтветыНаВопросыАнкет.Анкета.Опрос = &Опрос - | И ТИПЗНАЧЕНИЯ(ОтветыНаВопросыАнкет.Ответ) = ТИП(БУЛЕВО) - | - | СГРУППИРОВАТЬ ПО - | ОтветыНаВопросыАнкет.Вопрос, - | ОтветыНаВопросыАнкет.ЭлементарныйВопрос, - | ОтветыНаВопросыАнкет.НомерЯчейки, - | ОтветыНаВопросыАнкет.Ответ - | - | ОБЪЕДИНИТЬ ВСЕ - | - | ВЫБРАТЬ - | ОтветыНаВопросыАнкет.Вопрос, - | ОтветыНаВопросыАнкет.ЭлементарныйВопрос, - | ОтветыНаВопросыАнкет.НомерЯчейки, - | NULL, - | NULL, - | NULL, - | NULL, - | NULL, - | КОЛИЧЕСТВО(ОтветыНаВопросыАнкет.Ответ) - | ИЗ - | РегистрСведений.ОтветыНаВопросыАнкет КАК ОтветыНаВопросыАнкет - | ГДЕ - | ОтветыНаВопросыАнкет.Анкета.Опрос = &Опрос - | И ТИПЗНАЧЕНИЯ(ОтветыНаВопросыАнкет.Ответ) <> ТИП(БУЛЕВО) - | И ТИПЗНАЧЕНИЯ(ОтветыНаВопросыАнкет.Ответ) <> ТИП(ДАТА) - | И ТИПЗНАЧЕНИЯ(ОтветыНаВопросыАнкет.Ответ) <> ТИП(ЧИСЛО) - | И ТИПЗНАЧЕНИЯ(ОтветыНаВопросыАнкет.Ответ) <> ТИП(Справочник.ВариантыОтветовАнкет) - | - | СГРУППИРОВАТЬ ПО - | ОтветыНаВопросыАнкет.Вопрос, - | ОтветыНаВопросыАнкет.ЭлементарныйВопрос, - | ОтветыНаВопросыАнкет.НомерЯчейки) КАК ДанныеРегистра - | ПО Вопросы.Ссылка = ДанныеРегистра.Вопрос + | ВопросыШаблонаАнкетыВарианты КАК ВопросыШаблонаАнкетыВарианты + | ЛЕВОЕ СОЕДИНЕНИЕ ДанныеРегистра КАК ДанныеРегистра + | ПО ВопросыШаблонаАнкетыВарианты.Ссылка = ДанныеРегистра.Вопрос | | ОБЪЕДИНИТЬ ВСЕ | | ВЫБРАТЬ - | Вопросы.Ссылка, - | Вопросы.ЭтоРаздел, - | ЕСТЬNULL(ДанныеРегистра.ЭлементарныйВопрос, Вопросы.ЭлементарныйВопрос), - | ДанныеРегистра.НомерЯчейки, - | Вопросы.ВариантОтвета, - | ДанныеРегистра.КоличествоРазличных, + | ВопросыШаблонаАнкетыВопросы.Ссылка, + | ВопросыШаблонаАнкетыВопросы.ЭтоРаздел, + | ЕСТЬNULL(ДанныеРегистраБулевоВариантыОтветов.ЭлементарныйВопрос, ВопросыШаблонаАнкетыВопросы.ЭлементарныйВопрос), + | ДанныеРегистраБулевоВариантыОтветов.НомерЯчейки, + | ВопросыШаблонаАнкетыВопросы.ВариантОтвета, + | ДанныеРегистраБулевоВариантыОтветов.КоличествоРазличных, | NULL, | NULL, | NULL, | NULL, - | Вопросы.ТипОтвета, - | Вопросы.АгрегироватьСуммуВОтчетах, - | Вопросы.Код + | ВопросыШаблонаАнкетыВопросы.ТипОтвета, + | ВопросыШаблонаАнкетыВопросы.АгрегироватьСуммуВОтчетах, + | ВопросыШаблонаАнкетыВопросы.Код | ИЗ - | (ВЫБРАТЬ - | ВопросыШаблонаАнкеты.Представление КАК Формулировка, - | ВопросыШаблонаАнкеты.ЭтоГруппа КАК ЭтоРаздел, - | ЕСТЬNULL(ВопросыДляАнкетирования.ТипОтвета, ЗНАЧЕНИЕ(Перечисление.ТипыОтветовНаВопрос.ПустаяСсылка)) КАК ТипОтвета, - | ВопросыШаблонаАнкеты.Ссылка КАК Ссылка, - | ВариантыОтветовАнкет.Ссылка КАК ВариантОтвета, - | ЕСТЬNULL(ВопросыДляАнкетирования.АгрегироватьСуммуВОтчетах, ЛОЖЬ) КАК АгрегироватьСуммуВОтчетах, - | ВариантыОтветовАнкет.РеквизитДопУпорядочивания КАК Код, - | ВопросыШаблонаАнкеты.ЭлементарныйВопрос КАК ЭлементарныйВопрос - | ИЗ - | Справочник.ВопросыШаблонаАнкеты КАК ВопросыШаблонаАнкеты - | ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовХарактеристик.ВопросыДляАнкетирования КАК ВопросыДляАнкетирования - | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВариантыОтветовАнкет КАК ВариантыОтветовАнкет - | ПО ВопросыДляАнкетирования.Ссылка = ВариантыОтветовАнкет.Владелец - | ПО ВопросыШаблонаАнкеты.ЭлементарныйВопрос = ВопросыДляАнкетирования.Ссылка - | ГДЕ - | ВопросыШаблонаАнкеты.Владелец = &ШаблонАнкеты - | И (НЕ ВопросыШаблонаАнкеты.ЭтоГруппа) - | И ВопросыДляАнкетирования.ТипОтвета В (ЗНАЧЕНИЕ(Перечисление.ТипыОтветовНаВопрос.ОдинВариантИЗ), ЗНАЧЕНИЕ(Перечисление.ТипыОтветовНаВопрос.НесколькоВариантовИз))) КАК Вопросы - | ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ - | ОтветыНаВопросыАнкет.Вопрос КАК Вопрос, - | ОтветыНаВопросыАнкет.ЭлементарныйВопрос КАК ЭлементарныйВопрос, - | ОтветыНаВопросыАнкет.НомерЯчейки КАК НомерЯчейки, - | ОтветыНаВопросыАнкет.Ответ КАК ВариантОтвета, - | КОЛИЧЕСТВО(ОтветыНаВопросыАнкет.Ответ) КАК КоличествоРазличных - | ИЗ - | РегистрСведений.ОтветыНаВопросыАнкет КАК ОтветыНаВопросыАнкет - | ГДЕ - | ОтветыНаВопросыАнкет.Анкета.Опрос = &Опрос - | И ТИПЗНАЧЕНИЯ(ОтветыНаВопросыАнкет.Ответ) В (ТИП(БУЛЕВО), ТИП(Справочник.ВариантыОтветовАнкет)) - | - | СГРУППИРОВАТЬ ПО - | ОтветыНаВопросыАнкет.Вопрос, - | ОтветыНаВопросыАнкет.ЭлементарныйВопрос, - | ОтветыНаВопросыАнкет.НомерЯчейки, - | ОтветыНаВопросыАнкет.Ответ) КАК ДанныеРегистра - | ПО Вопросы.Ссылка = ДанныеРегистра.Вопрос - | И Вопросы.ВариантОтвета = ДанныеРегистра.ВариантОтвета + | ВопросыШаблонаАнкетыВопросы КАК ВопросыШаблонаАнкетыВопросы + | ЛЕВОЕ СОЕДИНЕНИЕ ДанныеРегистраБулевоВариантыОтветов КАК ДанныеРегистраБулевоВариантыОтветов + | ПО ВопросыШаблонаАнкетыВопросы.Ссылка = ДанныеРегистраБулевоВариантыОтветов.Вопрос + | И ВопросыШаблонаАнкетыВопросы.ВариантОтвета = ДанныеРегистраБулевоВариантыОтветов.ВариантОтвета | | ОБЪЕДИНИТЬ ВСЕ | @@ -767,9 +811,9 @@ | ВопросыШаблонаАнкетыСоставТабличногоВопроса.Ссылка, | ВопросыШаблонаАнкеты.ЭтоГруппа, | ВопросыШаблонаАнкетыСоставТабличногоВопроса.ЭлементарныйВопрос, - | ДанныеРегистра.НомерЯчейки, + | ОтветыНаТабличныеВопросы.НомерЯчейки, | NULL, - | КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ДанныеРегистра.Ответ), + | КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ОтветыНаТабличныеВопросы.Ответ), | NULL, | NULL, | NULL, @@ -781,24 +825,9 @@ | Справочник.ВопросыШаблонаАнкеты.СоставТабличногоВопроса КАК ВопросыШаблонаАнкетыСоставТабличногоВопроса | ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовХарактеристик.ВопросыДляАнкетирования КАК ВопросыДляАнкетирования | ПО ВопросыШаблонаАнкетыСоставТабличногоВопроса.ЭлементарныйВопрос = ВопросыДляАнкетирования.Ссылка - | ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ - | ОтветыНаВопросыАнкет.Вопрос КАК Вопрос, - | ОтветыНаВопросыАнкет.ЭлементарныйВопрос КАК ЭлементарныйВопрос, - | ОтветыНаВопросыАнкет.НомерЯчейки КАК НомерЯчейки, - | ОтветыНаВопросыАнкет.Ответ КАК Ответ - | ИЗ - | РегистрСведений.ОтветыНаВопросыАнкет КАК ОтветыНаВопросыАнкет - | ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовХарактеристик.ВопросыДляАнкетирования КАК ВопросыДляАнкетирования - | ПО ОтветыНаВопросыАнкет.ЭлементарныйВопрос = ВопросыДляАнкетирования.Ссылка - | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВопросыШаблонаАнкеты КАК ВопросыШаблонаАнкеты - | ПО ОтветыНаВопросыАнкет.Вопрос = ВопросыШаблонаАнкеты.Ссылка - | ГДЕ - | ОтветыНаВопросыАнкет.Анкета.Опрос = &Опрос - | И (НЕ ВопросыШаблонаАнкеты.ТипТабличногоВопроса = ЗНАЧЕНИЕ(Перечисление.ТипыТабличныхВопросов.Составной)) - | И ВопросыШаблонаАнкеты.ТипВопроса = ЗНАЧЕНИЕ(Перечисление.ТипыВопросовШаблонаАнкеты.Табличный) - | И ВопросыДляАнкетирования.ТипОтвета В (ЗНАЧЕНИЕ(Перечисление.ТипыОтветовНаВопрос.Булево), ЗНАЧЕНИЕ(Перечисление.ТипыОтветовНаВопрос.ОдинВариантИз), ЗНАЧЕНИЕ(Перечисление.ТипыОтветовНаВопрос.НесколькоВариантовИз))) КАК ДанныеРегистра - | ПО ВопросыШаблонаАнкетыСоставТабличногоВопроса.Ссылка = ДанныеРегистра.Вопрос - | И ВопросыШаблонаАнкетыСоставТабличногоВопроса.ЭлементарныйВопрос = ДанныеРегистра.ЭлементарныйВопрос + | ЛЕВОЕ СОЕДИНЕНИЕ ОтветыНаТабличныеВопросы КАК ОтветыНаТабличныеВопросы + | ПО ВопросыШаблонаАнкетыСоставТабличногоВопроса.Ссылка = ОтветыНаТабличныеВопросы.Вопрос + | И ВопросыШаблонаАнкетыСоставТабличногоВопроса.ЭлементарныйВопрос = ОтветыНаТабличныеВопросы.ЭлементарныйВопрос | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВопросыШаблонаАнкеты КАК ВопросыШаблонаАнкеты | ПО ВопросыШаблонаАнкетыСоставТабличногоВопроса.Ссылка = ВопросыШаблонаАнкеты.Ссылка | ГДЕ @@ -817,7 +846,7 @@ | ВопросыШаблонаАнкетыСоставТабличногоВопроса.Ссылка, | ВопросыШаблонаАнкеты.ЭтоГруппа, | ВопросыШаблонаАнкетыСоставТабличногоВопроса.ЭлементарныйВопрос, - | ДанныеРегистра.НомерЯчейки) КАК ОсновнойЗапрос + | ОтветыНаТабличныеВопросы.НомерЯчейки) КАК ОсновнойЗапрос | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВопросыШаблонаАнкеты КАК ВопросыШаблонаАнкеты | ПО ОсновнойЗапрос.ВопросШаблона = ВопросыШаблонаАнкеты.Ссылка | @@ -1040,7 +1069,8 @@ | " + МетаданныеТипаРеспондентов.ПолноеИмя() + " КАК ТаблицаСправочника |ГДЕ | (НЕ ТаблицаСправочника.ПометкаУдаления) - | " + ?(МетаданныеТипаРеспондентов.ВидИерархии = Метаданные.СвойстваОбъектов.ВидИерархии.ИерархияГруппИЭлементов," И (НЕ ТаблицаСправочника.ЭтоГруппа)","") + " + | " + ?(МетаданныеТипаРеспондентов.Иерархический И МетаданныеТипаРеспондентов.ВидИерархии = Метаданные.СвойстваОбъектов.ВидИерархии.ИерархияГруппИЭлементов, + " И (НЕ ТаблицаСправочника.ЭтоГруппа)","") + " |; | |//////////////////////////////////////////////////////////////////////////////// diff --git a/SSL/src/Reports/ДатыЗапретаЗагрузки/ObjectModule.bsl b/SSL/src/Reports/ДатыЗапретаЗагрузки/ObjectModule.bsl index e5e3e9628..0d647f402 100644 --- a/SSL/src/Reports/ДатыЗапретаЗагрузки/ObjectModule.bsl +++ b/SSL/src/Reports/ДатыЗапретаЗагрузки/ObjectModule.bsl @@ -380,12 +380,12 @@ | И ДатыЗапрета.Раздел = ДатыЗапретаИзменения.Раздел | И ДатыЗапрета.Объект = ДатыЗапретаИзменения.Объект |ГДЕ - | НЕ(НЕ ЛОЖЬ В (&ЗаданныеРазделы) - | И ДатыЗапрета.Раздел <> ЗНАЧЕНИЕ(ПланВидовХарактеристик.РазделыДатЗапретаИзменения.ПустаяСсылка) - | И НЕ ДатыЗапрета.Раздел В (&ЗаданныеРазделы)) - | И НЕ(НЕ ЛОЖЬ В (&ЗаданныеОбъекты) - | И ДатыЗапрета.Объект <> ДатыЗапрета.Раздел - | И НЕ ДатыЗапрета.Объект В (&ЗаданныеОбъекты))"; + | (ЛОЖЬ В (&ЗаданныеРазделы) + | ИЛИ ДатыЗапрета.Раздел = ЗНАЧЕНИЕ(ПланВидовХарактеристик.РазделыДатЗапретаИзменения.ПустаяСсылка) + | ИЛИ ДатыЗапрета.Раздел В (&ЗаданныеРазделы)) + | И (ЛОЖЬ В (&ЗаданныеОбъекты) + | ИЛИ ДатыЗапрета.Объект = ДатыЗапрета.Раздел + | ИЛИ ДатыЗапрета.Объект В (&ЗаданныеОбъекты))"; КонецФункции diff --git a/SSL/src/Reports/ДатыЗапретаИзменения/ObjectModule.bsl b/SSL/src/Reports/ДатыЗапретаИзменения/ObjectModule.bsl index e0f444255..354487ac8 100644 --- a/SSL/src/Reports/ДатыЗапретаИзменения/ObjectModule.bsl +++ b/SSL/src/Reports/ДатыЗапретаИзменения/ObjectModule.bsl @@ -387,12 +387,12 @@ | И ДатыЗапрета.Раздел = ДатыЗапретаИзменения.Раздел | И ДатыЗапрета.Объект = ДатыЗапретаИзменения.Объект |ГДЕ - | НЕ(НЕ ЛОЖЬ В (&ЗаданныеРазделы) - | И ДатыЗапрета.Раздел <> ЗНАЧЕНИЕ(ПланВидовХарактеристик.РазделыДатЗапретаИзменения.ПустаяСсылка) - | И НЕ ДатыЗапрета.Раздел В (&ЗаданныеРазделы)) - | И НЕ(НЕ ЛОЖЬ В (&ЗаданныеОбъекты) - | И ДатыЗапрета.Объект <> ДатыЗапрета.Раздел - | И НЕ ДатыЗапрета.Объект В (&ЗаданныеОбъекты))"; + | (ЛОЖЬ В (&ЗаданныеРазделы) + | ИЛИ ДатыЗапрета.Раздел = ЗНАЧЕНИЕ(ПланВидовХарактеристик.РазделыДатЗапретаИзменения.ПустаяСсылка) + | ИЛИ ДатыЗапрета.Раздел В (&ЗаданныеРазделы)) + | И (ЛОЖЬ В (&ЗаданныеОбъекты) + | ИЛИ ДатыЗапрета.Объект = ДатыЗапрета.Раздел + | ИЛИ ДатыЗапрета.Объект В (&ЗаданныеОбъекты))"; КонецФункции diff --git a/SSL/src/Reports/ОтчетОДвиженияхДокумента/Help/ru.html b/SSL/src/Reports/ДвиженияДокумента/Help/ru.html similarity index 82% rename from SSL/src/Reports/ОтчетОДвиженияхДокумента/Help/ru.html rename to SSL/src/Reports/ДвиженияДокумента/Help/ru.html index 5cd003d08..f9c10b414 100644 --- a/SSL/src/Reports/ОтчетОДвиженияхДокумента/Help/ru.html +++ b/SSL/src/Reports/ДвиженияДокумента/Help/ru.html @@ -1,6 +1,6 @@

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

        -

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

        +

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

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

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

        • При необходимости можно поменять настройки отчета с помощью кнопки Настройки. diff --git a/SSL/src/Reports/ОтчетОДвиженияхДокумента/ManagerModule.bsl b/SSL/src/Reports/ДвиженияДокумента/ManagerModule.bsl similarity index 50% rename from SSL/src/Reports/ОтчетОДвиженияхДокумента/ManagerModule.bsl rename to SSL/src/Reports/ДвиженияДокумента/ManagerModule.bsl index 5faa0aefd..0151bace3 100644 --- a/SSL/src/Reports/ОтчетОДвиженияхДокумента/ManagerModule.bsl +++ b/SSL/src/Reports/ДвиженияДокумента/ManagerModule.bsl @@ -17,58 +17,47 @@ НастройкиОтчета.Размещение.Вставить(ВариантыОтчетовКлиентСервер.ИдентификаторНачальнойСтраницы(), "Важный"); НастройкиВарианта_Горизонталь = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "Основной"); - НастройкиВарианта_Горизонталь.Описание = НСтр("ru = 'Отчет о движениях документа (Горизонтально).'"); - НастройкиВарианта_Горизонталь.НастройкиДляПоиска.КлючевыеСлова = НСтр("ru = 'Отчет о движениях документа'"); + НастройкиВарианта_Горизонталь.Описание = НСтр("ru = 'Движения документа (Горизонтально).'"); + НастройкиВарианта_Горизонталь.НастройкиДляПоиска.КлючевыеСлова = НСтр("ru = 'Движения документа'"); НастройкиВарианта_Вертикаль = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "Дополнительный"); - НастройкиВарианта_Вертикаль.Описание = НСтр("ru = 'Отчет о движениях документа (Вертикально).'"); - НастройкиВарианта_Вертикаль.НастройкиДляПоиска.КлючевыеСлова = НСтр("ru = 'Отчет о движениях документа'"); + НастройкиВарианта_Вертикаль.Описание = НСтр("ru = 'Движения документа (Вертикально).'"); + НастройкиВарианта_Вертикаль.НастройкиДляПоиска.КлючевыеСлова = НСтр("ru = 'Движения документа'"); КонецПроцедуры // Для вызова из процедуры ВариантыОтчетовПереопределяемый.ПередДобавлениемКомандОтчетов. // // Параметры: -// КомандыОтчетов - ТаблицаЗначений - Таблица команд для вывода в подменю. -// См. ВариантыОтчетовПереопределяемый.ПередДобавлениемКомандОтчетов. -// Параметры - Структура - Структура, содержащая параметры подключения команды. -// ДокументыСОтчетомОДвижениях - Массив - Массив документов, в которых будет выводится команда открытия отчета. +// КомандыОтчетов - ТаблицаЗначений - таблица команд для вывода в подменю. +// (См. ВариантыОтчетовПереопределяемый.ПередДобавлениемКомандОтчетов). +// Параметры - Структура - структура, содержащая параметры подключения команды. +// ДокументыСОтчетомОДвижениях - Массив, Неопределено - массив документов, в которых будет выводится +// команда открытия отчета. Неопределено в том случае когда отчет выводится +// для всех документов со свойством "Проведение" установленным в "Разрешить" +// и непустой коллекцией движений. // // Возвращаемое значение: // СтрокаТаблицыЗначений, Неопределено - добавленная команда или Неопределено, если нет прав на просмотр отчета. // -Функция ДобавитьКомандуОтчетОДвиженияхДокумента(КомандыОтчетов, Параметры, ДокументыСОтчетомОДвижениях) Экспорт +Функция ДобавитьКомандуОтчетОДвиженияхДокумента(КомандыОтчетов, Параметры, ДокументыСОтчетомОДвижениях = Неопределено) Экспорт - Если Не ПравоДоступа("Просмотр", Метаданные.Отчеты.ОтчетОДвиженияхДокумента) Тогда + Если Не ПравоДоступа("Просмотр", Метаданные.Отчеты.ДвиженияДокумента) Тогда Возврат Неопределено; КонецЕсли; - Если Параметры.ВидВРег <> "ДОКУМЕНТ" Тогда + ОписаниеТипаПараметраКоманды = ОписаниеТипаПараметраКоманды(КомандыОтчетов, Параметры, ДокументыСОтчетомОДвижениях); + Если ОписаниеТипаПараметраКоманды = Неопределено Тогда Возврат Неопределено; - Иначе - - ОтключитьОтчетОтДокументов(КомандыОтчетов); - - РазделенноеИмяФормы = СтрРазделить(Параметры.ИмяФормы, "."); - Если РазделенноеИмяФормы.Количество() > 2 Тогда - - ИмяДокумента = РазделенноеИмяФормы.Получить(1); - ДокументМетаданные = Метаданные.Документы.Найти(ИмяДокумента); - Если ДокументыСОтчетомОДвижениях.Найти(ДокументМетаданные) = Неопределено Тогда - Возврат Неопределено; - КонецЕсли; - - КонецЕсли; - КонецЕсли; Команда = КомандыОтчетов.Добавить(); - Команда.Представление = НСтр("ru = 'Отчет о движениях документа'"); + Команда.Представление = НСтр("ru = 'Движения документа'"); Команда.МножественныйВыбор = Ложь; Команда.ИмяПараметраФормы = ""; Команда.Важность = "СмТакже"; - Команда.КлючВарианта = "Основной"; - Команда.Менеджер = "Отчет.ОтчетОДвиженияхДокумента"; + Команда.ТипПараметра = ОписаниеТипаПараметраКоманды; + Команда.Менеджер = "Отчет.ДвиженияДокумента"; Возврат Команда; @@ -77,17 +66,15 @@ // См. ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов. Процедура ПриНастройкеВариантовОтчетов(Настройки) Экспорт - ВариантыОтчетов.НастроитьОтчетВМодулеМенеджера(Настройки, Метаданные.Отчеты.ОтчетОДвиженияхДокумента); - ВариантыОтчетов.ОписаниеОтчета(Настройки, Метаданные.Отчеты.ОтчетОДвиженияхДокумента).Включен = Ложь; + ВариантыОтчетов.НастроитьОтчетВМодулеМенеджера(Настройки, Метаданные.Отчеты.ДвиженияДокумента); + ВариантыОтчетов.ОписаниеОтчета(Настройки, Метаданные.Отчеты.ДвиженияДокумента).Включен = Ложь; КонецПроцедуры // См. ВариантыОтчетовПереопределяемый.ПередДобавлениемКомандОтчетов. Процедура ПередДобавлениемКомандОтчетов(КомандыОтчетов, НастройкиФормы, СтандартнаяОбработка) Экспорт - ДокументыСОтчетомОДвижениях = СформироватьДокументыСОтчетомОДвижениях(КомандыОтчетов); - - ДобавитьКомандуОтчетОДвиженияхДокумента(КомандыОтчетов, НастройкиФормы, ДокументыСОтчетомОДвижениях); + ДобавитьКомандуОтчетОДвиженияхДокумента(КомандыОтчетов, НастройкиФормы); КонецПроцедуры @@ -99,24 +86,58 @@ #Область СлужебныеПроцедурыИФункции -Функция СформироватьДокументыСОтчетомОДвижениях(КомандыОтчетов, ДокументыСОтчетомОДвижениях = Неопределено) +Функция ОписаниеТипаПараметраКоманды(КомандыОтчетов, Параметры, ДокументыСОтчетомОДвижениях) - ДокументыСОтчетомОДвижениях = Новый Массив; - МетаданныеДокументы = Метаданные.Документы; - Для Каждого МетаданныеДокумент Из МетаданныеДокументы Цикл - Если МетаданныеДокумент.Движения.Количество() > 0 Тогда - ДокументыСОтчетомОДвижениях.Добавить(МетаданныеДокумент); + Если Не Параметры.Свойство("Источники") Тогда + Возврат Неопределено; + КонецЕсли; + + СтрокиИсточников = Параметры.Источники.Строки; + + Если ДокументыСОтчетомОДвижениях <> Неопределено Тогда + ОтключитьОтчетОтДокументов(КомандыОтчетов); + КонецЕсли; + + Типы = Новый Массив; + ИсключаемыеТипы = Новый Массив; + + Для Каждого СтрокаИсточника Из СтрокиИсточников Цикл + + ТипСсылкиДанных = СтрокаИсточника.ТипСсылкиДанных; + + Если ТипЗнч(ТипСсылкиДанных) = Тип("Тип") Тогда + Типы.Добавить(ТипСсылкиДанных); + ИначеЕсли ТипЗнч(ТипСсылкиДанных) = Тип("ОписаниеТипов") Тогда + ОбщегоНазначенияКлиентСервер.ДополнитьМассив(Типы, ТипСсылкиДанных.Типы()); КонецЕсли; + КонецЦикла; - Возврат ДокументыСОтчетомОДвижениях; + ОбщегоНазначенияКлиентСервер.СвернутьМассив(Типы); + + Для Каждого ТекущийТип Из Типы Цикл + Если ЭтоПодключаемыйТип(ТекущийТип, ДокументыСОтчетомОДвижениях) Тогда + Продолжить; + КонецЕсли; + ИсключаемыеТипы.Добавить(ТекущийТип); + КонецЦикла; + + Для Каждого ИсключаемыйТип Из ИсключаемыеТипы Цикл + Типы.Удалить(Типы.Найти(ИсключаемыйТип)); + КонецЦикла; + + Если Типы.Количество() = 0 Тогда + Возврат Неопределено; + Иначе + Возврат Новый ОписаниеТипов(Типы); + КонецЕсли; КонецФункции Процедура ОтключитьОтчетОтДокументов(КомандыОтчетов) СтруктураПоиска = Новый Структура; - СтруктураПоиска.Вставить("Менеджер", "Отчет.ОтчетОДвиженияхДокумента"); + СтруктураПоиска.Вставить("Менеджер", "Отчет.ДвиженияДокумента"); НайденныеСтроки = КомандыОтчетов.НайтиСтроки(СтруктураПоиска); Для Каждого НайденнаяСтрока Из НайденныеСтроки Цикл @@ -125,6 +146,31 @@ КонецПроцедуры +Функция ЭтоПодключаемыйТип(ПроверяемыйТип, ДокументыСОтчетомОДвижениях) + + ОбъектМетаданных = Метаданные.НайтиПоТипу(ПроверяемыйТип); + + Если ОбъектМетаданных = Неопределено Тогда + Возврат Ложь; + КонецЕсли; + + Если ДокументыСОтчетомОДвижениях <> Неопределено И ДокументыСОтчетомОДвижениях.Найти(ОбъектМетаданных) = Неопределено Тогда + Возврат Ложь; + КонецЕсли; + + Если Не ОбщегоНазначения.ЭтоДокумент(ОбъектМетаданных) Тогда + Возврат Ложь; + КонецЕсли; + + Если ОбъектМетаданных.Проведение <> Метаданные.СвойстваОбъектов.Проведение.Разрешить + Или ОбъектМетаданных.Движения.Количество() = 0 Тогда + Возврат Ложь; + КонецЕсли; + + Возврат Истина; + +КонецФункции + #КонецОбласти -#КонецЕсли +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Reports/ОтчетОДвиженияхДокумента/ObjectModule.bsl b/SSL/src/Reports/ДвиженияДокумента/ObjectModule.bsl similarity index 70% rename from SSL/src/Reports/ОтчетОДвиженияхДокумента/ObjectModule.bsl rename to SSL/src/Reports/ДвиженияДокумента/ObjectModule.bsl index 151b6af9d..08e887232 100644 --- a/SSL/src/Reports/ОтчетОДвиженияхДокумента/ObjectModule.bsl +++ b/SSL/src/Reports/ДвиженияДокумента/ObjectModule.bsl @@ -29,6 +29,8 @@ Настройки.События.ПередЗагрузкойВариантаНаСервере = Истина; Настройки.События.ПриОпределенииПараметровВыбора = Истина; + Настройки.ФормироватьСразу = Истина; + КонецПроцедуры // Вызывается перед загрузкой новых настроек. Используется для изменения схемы компоновки. @@ -54,32 +56,28 @@ // Пользовательские настройки, которые будут загружены в компоновщик настроек после его инициализации. // Неопределено когда пользовательские настройки не надо загружать (уже загружены ранее). // -// Примеры: -// 1. Компоновщик отчета инициализируется на основании схемы из общих макетов: -// Если КлючСхемы <> "1" Тогда -// КлючСхемы = "1"; -// СхемаКД = ПолучитьОбщийМакет("МояОбщаяСхемаКомпоновки"); -// ОтчетыСервер.ПодключитьСхему(ЭтотОбъект, Контекст, СхемаКД, КлючСхемы); -// КонецЕсли; -// -// 2. Схема зависит от значения параметра, выведенного в пользовательские настройки отчета: -// Если ТипЗнч(НовыеПользовательскиеНастройкиКД) = Тип("ПользовательскиеНастройкиКомпоновкиДанных") Тогда -// ПолноеИмяОбъектаМетаданных = ""; -// Для Каждого ЭлементКД Из НовыеПользовательскиеНастройкиКД.Элементы Цикл -// Если ТипЗнч(ЭлементКД) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда -// ИмяПараметра = Строка(ЭлементКД.Параметр); -// Если ИмяПараметра = "ОбъектМетаданных" Тогда -// ПолноеИмяОбъектаМетаданных = ЭлементКД.Значение; -// КонецЕсли; -// КонецЕсли; -// КонецЦикла; -// Если КлючСхемы <> ПолноеИмяОбъектаМетаданных Тогда -// КлючСхемы = ПолноеИмяОбъектаМетаданных; -// СхемаКД = Новый СхемаКомпоновкиДанных; -// // Наполнение схемы... -// ОтчетыСервер.ПодключитьСхему(ЭтотОбъект, Контекст, СхемаКД, КлючСхемы); -// КонецЕсли; -// КонецЕсли; +// Варианты вызова: +// Если КлючСхемы <> "1" Тогда +// КлючСхемы = "1"; +// СхемаКД = ПолучитьОбщийМакет("МояОбщаяСхемаКомпоновки"); +// ОтчетыСервер.ПодключитьСхему(ЭтотОбъект, Контекст, СхемаКД, КлючСхемы); +// КонецЕсли; - компоновщик отчета инициализируется на основании схемы из общих макетов. +// Если ТипЗнч(НовыеПользовательскиеНастройкиКД) = Тип("ПользовательскиеНастройкиКомпоновкиДанных") Тогда +// ПолноеИмяОбъектаМетаданных = ""; +// Для Каждого ЭлементКД Из НовыеПользовательскиеНастройкиКД.Элементы Цикл +// Если ТипЗнч(ЭлементКД) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда +// ИмяПараметра = Строка(ЭлементКД.Параметр); +// Если ИмяПараметра = "ОбъектМетаданных" Тогда +// ПолноеИмяОбъектаМетаданных = ЭлементКД.Значение; +// КонецЕсли; +// КонецЕсли; +// КонецЦикла; +// Если КлючСхемы <> ПолноеИмяОбъектаМетаданных Тогда +// КлючСхемы = ПолноеИмяОбъектаМетаданных; +// СхемаКД = Новый СхемаКомпоновкиДанных; +// ОтчетыСервер.ПодключитьСхему(ЭтотОбъект, Контекст, СхемаКД, КлючСхемы); +// КонецЕсли; +// КонецЕсли; - схема зависит от значения параметра, выведенного в пользовательские настройки отчета. // Процедура ПередЗагрузкойНастроекВКомпоновщик(Контекст, КлючСхемы, КлючВарианта, НовыеНастройкиКД, НовыеПользовательскиеНастройкиКД) Экспорт @@ -92,6 +90,10 @@ ПараметрыОтчета = ПараметрыОтчета(НастройкиКД, НовыеПользовательскиеНастройкиКД); + Если ПараметрыОтчета.ДокументВладелец = Неопределено Тогда + ВызватьИсключение НСтр("ru = 'Отчет о движениях документа не предназначен для рассылки.'"); + КонецЕсли; + Если КлючСхемы <> КлючВарианта Тогда КлючСхемы = КлючВарианта; @@ -109,79 +111,55 @@ НастройкиКДПоУмолчаниюТиповойСхемы(СхемаКомпоновкиДанных, ПараметрыОтчета, НовыеНастройкиКД, КлючВарианта); КонецЕсли; - КонецПроцедуры // Вызывается в обработчике одноименного события формы отчета после выполнения кода формы. // // Параметры: -// Форма - УправляемаяФорма - Форма отчета. -// Отказ - Передается из параметров обработчика "как есть". -// СтандартнаяОбработка - Передается из параметров обработчика "как есть". -// -// См. также: -// "УправляемаяФорма.ПриСозданииНаСервере" в синтакс-помощнике. -// ОтчетыПереопределяемый.ПриСозданииНаСервере(). -// -// Пример 1 - Добавление команды с обработчиком в ОтчетыКлиентПереопределяемый.ОбработчикКоманды: -// Команда = Форма.Команды.Добавить("МояОсобеннаяКоманда"); -// Команда.Действие = "Подключаемый_Команда"; -// Команда.Заголовок = НСтр("ru = 'Моя команда...'"); -// -// Кнопка = Форма.Элементы.Добавить(Команда.Имя, Тип("КнопкаФормы"), Форма.Элементы.ГруппаПрограммныйИнтерфейс); -// Кнопка.ИмяКоманды = Команда.Имя; -// -// Форма.ПостоянныеКоманды.Добавить(КомандаСоздать.Имя); +// Форма - УправляемаяФорма - форма отчета. +// Отказ - Булево - передается из параметров стандартного обработчика ПриСозданииНаСервере "как есть". +// СтандартнаяОбработка - Булево - передается из параметров стандартного обработчика ПриСозданииНаСервере "как есть". // Процедура ПриСозданииНаСервере(Форма, Отказ, СтандартнаяОбработка) Экспорт + Если Форма.Параметры.ПредставлениеВарианта = "Расшифровка" Тогда + ВызватьИсключение НСтр("ru = 'Выбранное действие в данном отчете не доступно.'"); + КонецЕсли; + Если Форма.Параметры.Свойство("ДокументВладелец") Тогда СтруктураПараметровДанных = Новый Структура("ДокументВладелец", Форма.Параметры.ДокументВладелец); УстановитьПараметрыДанных(КомпоновщикНастроек.Настройки, СтруктураПараметровДанных); ИначеЕсли Не Форма.Параметры.Свойство("ПараметрКоманды") Тогда ВызватьИсключение НСтр("ru = 'Для начала работы с отчетом необходимо воспользоваться соответствующей командой в форме интересующего документа.'"); - Отказ = Истина; - Иначе - ДокументВладелец = Форма.Параметры.ПараметрКоманды; - Если Не ЗначениеЗаполнено(ДокументВладелец) Тогда - ВызватьИсключение НСтр("ru = 'Для начала работы с отчетом необходимо воспользоваться соответствующей командой в форме интересующего документа.'"); - Отказ = Истина; - Иначе - Если Не ДокументВладелец.Проведен Тогда - ВызватьИсключение НСтр("ru = 'Для непроведенного документа вывод отчета невозможен.'"); - Отказ = Истина; - Иначе - СтруктураПараметровДанных = Новый Структура("ДокументВладелец", ДокументВладелец); - УстановитьПараметрыДанных(КомпоновщикНастроек.Настройки, СтруктураПараметровДанных); - КонецЕсли; - КонецЕсли; КонецЕсли; + ДокументВладелец = Форма.Параметры.ПараметрКоманды; + Если Не ЗначениеЗаполнено(ДокументВладелец) Тогда + ВызватьИсключение НСтр("ru = 'Для начала работы с отчетом необходимо воспользоваться соответствующей командой в форме интересующего документа.'"); + КонецЕсли; + + СтруктураПараметровДанных = Новый Структура("ДокументВладелец", ДокументВладелец); + УстановитьПараметрыДанных(КомпоновщикНастроек.Настройки, СтруктураПараметровДанных); + Форма.КлючНазначенияИспользования = ДокументВладелец.Метаданные().ПолноеИмя(); КонецПроцедуры -// Вызывается в форме отчета перед выводом настройки. +// Вызывается в форме отчета перед выводом настройки (см. ОтчетыПереопределяемый.ПриОпределенииПараметровВыбора). // // Параметры: -// Форма - УправляемаяФорма, Неопределено - Форма отчета. +// Форма - УправляемаяФорма, Неопределено - форма отчета. // СвойстваНастройки - Структура - Описание настройки отчета, которая будет выведена в форме отчета. -// * ОписаниеТипов - ОписаниеТипов - -// Тип настройки. -// * ЗначенияДляВыбора - СписокЗначений - -// Объекты, которые будут предложены пользователю в списке выбора. -// Дополняет список объектов, уже выбранных пользователем ранее. -// * ЗапросЗначенийВыбора - Запрос - -// Возвращает объекты, которыми необходимо дополнить ЗначенияДляВыбора. -// Первой колонкой (с 0м индексом) должен выбираться объект, -// который следует добавить в ЗначенияДляВыбора.Значение. -// Для отключения автозаполнения -// в свойство ЗапросЗначенийВыбора.Текст следует записать пустую строку. -// * ОграничиватьВыборУказаннымиЗначениями - Булево - -// Когда Истина, то выбор пользователя будет ограничен значениями, -// указанными в ЗначенияДляВыбора (его конечным состоянием). -// -// См. также: -// ОтчетыПереопределяемый.ПриОпределенииПараметровВыбора(). +// * ОписаниеТипов - ОписаниеТипов - тип настройки. +// * ЗначенияДляВыбора - СписокЗначений - объекты, которые будут предложены пользователю в списке выбора. +// Дополняет список объектов, уже выбранных пользователем ранее. +// * ЗапросЗначенийВыбора - Запрос - возвращает объекты, которыми необходимо дополнить ЗначенияДляВыбора. +// Первой колонкой (с 0м индексом) должен выбираться объект, +// который следует добавить в ЗначенияДляВыбора.Значение. +// Для отключения автозаполнения в свойство ЗапросЗначенийВыбора.Текст +// следует записать пустую строку. +// * ОграничиватьВыборУказаннымиЗначениями - Булево - когда Истина, то выбор пользователя будет +// ограничен значениями, указанными в +// ЗначенияДляВыбора (его конечным состоянием). // Процедура ПриОпределенииПараметровВыбора(Форма, СвойстваНастройки) Экспорт @@ -216,14 +194,12 @@ КонецПроцедуры // Вызывается в обработчике одноименного события формы отчета после выполнения кода формы. +// Более подробное описание можно найти в синтакс-помощнике, а именно, в разделе расширений +// управляемой формы для отчета. // // Параметры: -// Форма - УправляемаяФорма - Форма отчета. -// НовыеНастройкиКД - НастройкиКомпоновкиДанных - Настройки для загрузки в компоновщик настроек. -// -// См. также: -// "Расширение управляемой формы для отчета.ПередЗагрузкойВариантаНаСервере" в синтакс-помощнике. -// ОтчетыПереопределяемый.ПередЗагрузкойВариантаНаСервере(). +// Форма - УправляемаяФорма - форма отчета. +// НовыеНастройкиКД - НастройкиКомпоновкиДанных - настройки для загрузки в компоновщик настроек. // Процедура ПередЗагрузкойВариантаНаСервере(Форма, НовыеНастройкиКД) Экспорт @@ -235,23 +211,21 @@ КонецЕсли; Если ЗначениеЗаполнено(ДокументПараметр) Тогда - + УстановитьПараметрыДанных(НовыеНастройкиКД, Новый Структура("ДокументВладелец", ДокументПараметр)); - + Если Форма.КлючТекущегоВарианта = Форма.Отчет.КомпоновщикНастроек.Настройки.ДополнительныеСвойства.КлючВарианта Тогда - - НовыеНастройкиКД = КомпоновщикНастроек.Настройки; - + + СкопироватьНастройкиКомпоновкиДанных(НовыеНастройкиКД, КомпоновщикНастроек.Настройки); + Если Форма.КлючТекущегоВарианта = "Основной" Тогда ЗаполнитьСхемуКомпоновкиДанных_Горизонталь(ДокументПараметр, СхемаКомпоновкиДанных.НастройкиПоУмолчанию); ИначеЕсли Форма.КлючТекущегоВарианта = "Дополнительный" Тогда ЗаполнитьСхемуКомпоновкиДанных_Вертикаль(ДокументПараметр, СхемаКомпоновкиДанных.НастройкиПоУмолчанию, Истина); КонецЕсли; - - Форма.КлючНазначенияИспользования = СтрРазделить(ДокументПараметр.Метаданные().ПолноеИмя(), ".").Получить(1); - + КонецЕсли; - + КонецЕсли; КонецПроцедуры @@ -355,6 +329,8 @@ ТекстЗапроса = "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | 1 КАК КоличествоЗаписейРегистра, + | ""&ИмяРегистра"" КАК ИмяРегистра, | &Поля |ИЗ | &ТекущаяТаблица КАК ТекущаяТаблица @@ -363,14 +339,12 @@ |{ГДЕ | (&УсловиеКомпоновки)}"; - ШаблонСообщения = "Регистр" + ВидРегистра + "_" + ИмяРегистра; - Поля = """" + ШаблонСообщения + """ Как ИмяРегистра," + ПоляВыбора; - УсловиеКомпоновки = """" + ШаблонСообщения + """ В (&СписокРегистров)"; - - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&Поля", Поля); - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекущаяТаблица", ДвижениеДокумента.ПолноеИмя()); - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&УсловиеЗапроса", "Регистратор = &ДокументВладелец"); - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&УсловиеКомпоновки", УсловиеКомпоновки); + ПолноеИмяРегистра = "Регистр" + ВидРегистра + "_" + ИмяРегистра; + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ИмяРегистра", ПолноеИмяРегистра); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&Поля", ПоляВыбора); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекущаяТаблица", ДвижениеДокумента.ПолноеИмя()); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&УсловиеЗапроса", "Регистратор = &ДокументВладелец"); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&УсловиеКомпоновки", """" + ПолноеИмяРегистра + """ В (&СписокРегистров)"); ИнформацияДляФормированияНабораДанных = Новый Структура; ИнформацияДляФормированияНабораДанных.Вставить("ТекстЗапроса", ТекстЗапроса); @@ -502,20 +476,22 @@ ТекстЗапроса = "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | 1 КАК КоличествоЗаписейРегистра, + | ""&ИмяРегистра"" КАК ИмяРегистра, | &Поля |ИЗ | &ТекущаяТаблица КАК ТекущаяТаблица + |ГДЕ + | &УсловиеЗапроса |{ГДЕ | (&УсловиеКомпоновки)}"; - ШаблонСообщения = "Регистр" + ВидРегистра + "_" + ИмяРегистра; - Поля = """" + ШаблонСообщения + """ Как ИмяРегистра," + ПоляВыбора; - УсловиеКомпоновки = """" + ШаблонСообщения + """ В (&СписокРегистров)"; - - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&Поля", Поля); - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекущаяТаблица", "РегистрБухгалтерии." + ИмяРегистра - + ".ДвиженияССубконто(, , Регистратор = &ДокументВладелец)"); - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&УсловиеКомпоновки", УсловиеКомпоновки); + ПолноеИмяРегистра = "Регистр" + ВидРегистра + "_" + ИмяРегистра; + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ИмяРегистра", ПолноеИмяРегистра); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&Поля", ПоляВыбора); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекущаяТаблица", "РегистрБухгалтерии." + ИмяРегистра + ".ДвиженияССубконто(, , Регистратор = &ДокументВладелец)"); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&УсловиеЗапроса", "Регистратор = &ДокументВладелец"); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&УсловиеКомпоновки", """" + ПолноеИмяРегистра + """ В (&СписокРегистров)"); ИнформацияДляФормированияНабораДанных = Новый Структура; ИнформацияДляФормированияНабораДанных.Вставить("ТекстЗапроса", ТекстЗапроса); @@ -572,6 +548,8 @@ ТекстЗапроса = "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | 1 КАК КоличествоЗаписейРегистра, + | ""&ИмяРегистра"" КАК ИмяРегистра, | &Поля |ИЗ | &ТекущаяТаблица КАК ТекущаяТаблица @@ -580,14 +558,12 @@ |{ГДЕ | (&УсловиеКомпоновки)}"; - ШаблонСообщения = "Регистр" + ВидРегистра + "_" + ИмяРегистра; - Поля = """" + ШаблонСообщения + """ Как ИмяРегистра," + ПоляВыбора; - УсловиеКомпоновки = """" + ШаблонСообщения + """ В (&СписокРегистров)"; - - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&Поля", Поля); - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекущаяТаблица", ДвижениеДокумента.ПолноеИмя()); - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&УсловиеЗапроса", "Регистратор = &ДокументВладелец"); - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&УсловиеКомпоновки", УсловиеКомпоновки); + ПолноеИмяРегистра = "Регистр" + ВидРегистра + "_" + ИмяРегистра; + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ИмяРегистра", ПолноеИмяРегистра); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&Поля", ПоляВыбора); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекущаяТаблица", ДвижениеДокумента.ПолноеИмя()); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&УсловиеЗапроса", "Регистратор = &ДокументВладелец"); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&УсловиеКомпоновки", """" + ПолноеИмяРегистра + """ В (&СписокРегистров)"); ИнформацияДляФормированияНабораДанных = Новый Структура; ИнформацияДляФормированияНабораДанных.Вставить("ТекстЗапроса", ТекстЗапроса); @@ -650,7 +626,7 @@ КонецЕсли; Если СтруктураИзмерений.Количество() > 0 Тогда - + ПараметрыГруппы = Новый Структура; ПараметрыГруппы.Вставить("ИмяГруппы", "Измерения"); ПараметрыГруппы.Вставить("РасположениеВыбраннойГруппы", Неопределено); @@ -662,7 +638,7 @@ КонецЕсли; Если СтруктураИзмеренийДт.Количество() > 0 Тогда - + ПараметрыГруппы = Новый Структура; ПараметрыГруппы.Вставить("ИмяГруппы", "ИзмеренияДт"); ПараметрыГруппы.Вставить("РасположениеВыбраннойГруппы", РасположениеПоляКомпоновкиДанных.Вертикально); @@ -674,7 +650,7 @@ КонецЕсли; Если СтруктураСубконто.Количество() > 0 Тогда - + ПараметрыГруппы = Новый Структура; ПараметрыГруппы.Вставить("ИмяГруппы", "Субконто"); ПараметрыГруппы.Вставить("РасположениеВыбраннойГруппы", РасположениеПоляКомпоновкиДанных.Вертикально); @@ -686,7 +662,7 @@ КонецЕсли; Если СтруктураСубконтоДт.Количество() > 0 Тогда - + ПараметрыГруппы = Новый Структура; ПараметрыГруппы.Вставить("ИмяГруппы", "СубконтоДт"); ПараметрыГруппы.Вставить("РасположениеВыбраннойГруппы", РасположениеПоляКомпоновкиДанных.Вертикально); @@ -698,7 +674,7 @@ КонецЕсли; Если СтруктураРесурсовДт.Количество() > 0 Тогда - + ПараметрыГруппы = Новый Структура; ПараметрыГруппы.Вставить("ИмяГруппы", "РесурсыДт"); ПараметрыГруппы.Вставить("РасположениеВыбраннойГруппы", РасположениеПоляКомпоновкиДанных.Вертикально); @@ -710,7 +686,7 @@ КонецЕсли; Если СтруктураИзмеренийКт.Количество() > 0 Тогда - + ПараметрыГруппы = Новый Структура; ПараметрыГруппы.Вставить("ИмяГруппы", "ИзмеренияКт"); ПараметрыГруппы.Вставить("РасположениеВыбраннойГруппы", РасположениеПоляКомпоновкиДанных.Вертикально); @@ -718,11 +694,11 @@ ПараметрыГруппы.Вставить("ПредставлениеВыбраннойГруппы", ""); РазместитьГруппуПолейСКД(СтруктураИзмеренийКт, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы); - + КонецЕсли; Если СтруктураСубконтоКт.Количество() > 0 Тогда - + ПараметрыГруппы = Новый Структура; ПараметрыГруппы.Вставить("ИмяГруппы", "СубконтоКт"); ПараметрыГруппы.Вставить("РасположениеВыбраннойГруппы", РасположениеПоляКомпоновкиДанных.Вертикально); @@ -734,7 +710,7 @@ КонецЕсли; Если СтруктураРесурсовКт.Количество() > 0 Тогда - + ПараметрыГруппы = Новый Структура; ПараметрыГруппы.Вставить("ИмяГруппы", "РесурсыКт"); ПараметрыГруппы.Вставить("РасположениеВыбраннойГруппы", РасположениеПоляКомпоновкиДанных.Вертикально); @@ -746,7 +722,7 @@ КонецЕсли; Если СтруктураРесурсов.Количество() > 0 Тогда - + ПараметрыГруппы = Новый Структура; ПараметрыГруппы.Вставить("ИмяГруппы", "Ресурсы"); ПараметрыГруппы.Вставить("РасположениеВыбраннойГруппы", Неопределено); @@ -758,7 +734,7 @@ КонецЕсли; Если СтруктураРеквизитов.Количество() > 0 Тогда - + ПараметрыГруппы = Новый Структура; ПараметрыГруппы.Вставить("ИмяГруппы", "Реквизиты"); ПараметрыГруппы.Вставить("РасположениеВыбраннойГруппы", Неопределено); @@ -784,11 +760,13 @@ МетаданныеДокумента = ДокументОтбор.Метаданные(); ДвиженияДокумента = МетаданныеДокумента.Движения; - МассивРегистров = МассивИспользуемыхРегистров(ДокументОтбор, ДвиженияДокумента); - Если МассивРегистров.Количество() = 0 Тогда + МассивИспользуемыхРегистров = МассивИспользуемыхРегистров(ДокументОтбор, ДвиженияДокумента); + ЗафиксироватьГлобальныеНастройки(ДокументОтбор, МассивИспользуемыхРегистров); + + Если МассивИспользуемыхРегистров.Количество() = 0 Тогда Возврат СхемаКомпоновкиДанных; Иначе - ТаблицаРегистров = ТаблицаИспользуемыхРегистров(МассивРегистров); + ТаблицаРегистров = ТаблицаИспользуемыхРегистров(МассивИспользуемыхРегистров); ПодготовленныеДанные = ПодготовкаДанных(ДвиженияДокумента, ТаблицаРегистров); СтруктураПараметровДанных = Новый Структура("СписокРегистров", СформироватьСписокРегистров(ТаблицаРегистров)); @@ -833,8 +811,6 @@ КонецЦикла; - ПользовательскоеОформление(СхемаКД, НастройкиКД, ПодготовленныеДанные); - Возврат СхемаКД; КонецФункции @@ -974,7 +950,7 @@ ПараметрыГруппы.Вставить("ПредставлениеВыбраннойГруппы", НСтр("ru = 'Измерения'")); РазместитьГруппуПолейСКД(СтруктураИзмерений, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы); - + КонецЕсли; Если СтруктураРесурсов.Количество() > 0 Тогда @@ -998,7 +974,7 @@ ПараметрыГруппы.Вставить("ПредставлениеВыбраннойГруппы", НСтр("ru = 'Реквизиты'")); РазместитьГруппуПолейСКД(СтруктураРеквизитов, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы); - + КонецЕсли; КонецПроцедуры @@ -1016,11 +992,13 @@ МетаданныеДокумента = ДокументОтбор.Метаданные(); ДвиженияДокумента = МетаданныеДокумента.Движения; - МассивРегистров = МассивИспользуемыхРегистров(ДокументОтбор, ДвиженияДокумента); - Если МассивРегистров.Количество() = 0 Тогда + МассивИспользуемыхРегистров = МассивИспользуемыхРегистров(ДокументОтбор, ДвиженияДокумента); + ЗафиксироватьГлобальныеНастройки(ДокументОтбор, МассивИспользуемыхРегистров); + + Если МассивИспользуемыхРегистров.Количество() = 0 Тогда Возврат СхемаКомпоновкиДанных; Иначе - ТаблицаРегистров = ТаблицаИспользуемыхРегистров(МассивРегистров); + ТаблицаРегистров = ТаблицаИспользуемыхРегистров(МассивИспользуемыхРегистров); ПодготовленныеДанные = ПодготовкаДанных(ДвиженияДокумента, ТаблицаРегистров, ДополнительнаяНумерация); СтруктураПараметровДанных = Новый Структура("СписокРегистров", СформироватьСписокРегистров(ТаблицаРегистров)); @@ -1065,8 +1043,6 @@ КонецЦикла; - ПользовательскоеОформление(СхемаКД, НастройкиКД, ПодготовленныеДанные); - Возврат СхемаКД; КонецФункции @@ -1115,7 +1091,7 @@ ПользовательскийЗаголовок); Если СтруктураНумератора.Количество() > 0 Тогда - + ПараметрыГруппы = Новый Структура; ПараметрыГруппы.Вставить("ИмяГруппы", "Нумератор"); ПараметрыГруппы.Вставить("РасположениеВыбраннойГруппы", РасположениеПоляКомпоновкиДанных.Вертикально); @@ -1123,11 +1099,11 @@ ПараметрыГруппы.Вставить("ПредставлениеВыбраннойГруппы", "№ГруппаЭлементаВыводаСКДТекущегоДокумента"); РазместитьГруппуПолейСКД(СтруктураНумератора, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы); - + КонецЕсли; Если СтруктураСтандартныхРеквизитов.Количество() > 0 Тогда - + ПараметрыГруппы = Новый Структура; ПараметрыГруппы.Вставить("ИмяГруппы", "СтандартныеРеквизиты"); ПараметрыГруппы.Вставить("РасположениеВыбраннойГруппы", РасположениеПоляКомпоновкиДанных.Вертикально); @@ -1139,7 +1115,7 @@ КонецЕсли; Если СтруктураИзмерений.Количество() > 0 Тогда - + ПараметрыГруппы = Новый Структура; ПараметрыГруппы.Вставить("ИмяГруппы", "Измерения"); ПараметрыГруппы.Вставить("РасположениеВыбраннойГруппы", РасположениеПоляКомпоновкиДанных.Вертикально); @@ -1151,7 +1127,7 @@ КонецЕсли; Если СтруктураРесурсов.Количество() > 0 Тогда - + ПараметрыГруппы = Новый Структура; ПараметрыГруппы.Вставить("ИмяГруппы", "Ресурсы"); ПараметрыГруппы.Вставить("РасположениеВыбраннойГруппы", РасположениеПоляКомпоновкиДанных.Вертикально); @@ -1163,7 +1139,7 @@ КонецЕсли; Если СтруктураРеквизитов.Количество() > 0 Тогда - + ПараметрыГруппы = Новый Структура; ПараметрыГруппы.Вставить("ИмяГруппы", "Реквизиты"); ПараметрыГруппы.Вставить("РасположениеВыбраннойГруппы", РасположениеПоляКомпоновкиДанных.Вертикально); @@ -1208,7 +1184,7 @@ ПараметрыГруппы.Вставить("ПредставлениеВыбраннойГруппы", "№ГруппаЭлементаВыводаСКДТекущегоДокумента"); РазместитьГруппуПолейСКД(СтруктураНумератора, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы); - + КонецЕсли; Если СтруктураСтандартныхРеквизитов.Количество() > 0 Тогда @@ -1220,7 +1196,7 @@ ПараметрыГруппы.Вставить("ПредставлениеВыбраннойГруппы", НСтр("ru = 'Стандартные реквизиты'")); РазместитьГруппуПолейСКД(СтруктураСтандартныхРеквизитов, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы); - + КонецЕсли; Если СтруктураИзмерений.Количество() > 0 Тогда @@ -1244,7 +1220,7 @@ ПараметрыГруппы.Вставить("ПредставлениеВыбраннойГруппы", НСтр("ru = 'Ресурсы'")); РазместитьГруппуПолейСКД(СтруктураРесурсов, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы); - + КонецЕсли; Если СтруктураРеквизитов.Количество() > 0 Тогда @@ -1256,7 +1232,7 @@ ПараметрыГруппы.Вставить("ПредставлениеВыбраннойГруппы", НСтр("ru = 'Реквизиты'")); РазместитьГруппуПолейСКД(СтруктураРеквизитов, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы); - + КонецЕсли; КонецПроцедуры @@ -1347,6 +1323,22 @@ #КонецОбласти +#Область Ресурс + +Процедура ДобавитьРесурсРасчетаКоличестваЗаписей(СхемаКД) + + ПолеКоличестваЗаписей = СхемаКД.ПоляИтога.Найти("КоличествоЗаписейРегистра"); + Если ПолеКоличестваЗаписей = Неопределено Тогда + ПолеИтога = СхемаКД.ПоляИтога.Добавить(); + ПолеИтога.Группировки.Добавить("ИмяРегистра"); + ПолеИтога.ПутьКДанным = "КоличествоЗаписейРегистра"; + ПолеИтога.Выражение = "Сумма(КоличествоЗаписейРегистра)"; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + #Область Прочее Процедура ДополнительнаяОбщаяНастройкаГруппировки(Группировка, СтруктураНастроек) @@ -1362,19 +1354,17 @@ КонецПроцедуры -Функция ДобавитьЭлементСтруктуры(НастройкиКД, ИмяГруппировки, ЗначениеОтбора) +Функция ДобавитьЭлементСтруктуры(НастройкиКД, ИмяГруппировки, ПользовательскийЗаголовок) ГруппировкаПоРегистру = НастройкиКД.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных")); ГруппировкаПоРегистру.Имя = ИмяГруппировки; - ГруппировкаПоРегистру.ПредставлениеПользовательскойНастройки = ЗначениеОтбора; + ГруппировкаПоРегистру.ПредставлениеПользовательскойНастройки = ПользовательскийЗаголовок; ГруппировкаПоРегистру.Использование = Истина; ГруппировкаПоРегистру.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных")); ГруппировкаПоРегистру.Порядок.Элементы.Добавить(Тип("АвтоЭлементПорядкаКомпоновкиДанных")); - УстановитьОтборПоИмениРегистра(ГруппировкаПоРегистру, ИмяГруппировки); - ОформитьГруппировкуПоРегистру(ГруппировкаПоРегистру); ПолеГруппировкиРегистр = ГруппировкаПоРегистру.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных")); @@ -1392,20 +1382,6 @@ КонецФункции -Процедура УстановитьОтборПоИмениРегистра(ГруппировкаДетальныеЗаписи, ЗначениеОтбора) - - Отбор = ГруппировкаДетальныеЗаписи.Отбор; - ЭлементыОтбора = Отбор.Элементы; - - ЭлементОтбора = ЭлементыОтбора.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); - ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ИмяРегистра"); - ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; - ЭлементОтбора.ПравоеЗначение = ЗначениеОтбора; - ЭлементОтбора.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; - ЭлементОтбора.Использование = Истина; - -КонецПроцедуры - Процедура РазместитьГруппуПолейСКД(СтруктураПолей, НаборДанныхКД, ГруппировкаДетальныеЗаписи, ПараметрыГруппы) Если ПараметрыГруппы.ВыбраннаяГруппаПуста Тогда @@ -1519,101 +1495,98 @@ ПараметрОтчета = НастройкиКД.ПараметрыДанных.Элементы.Найти("ДокументВладелец"); ПараметрОтчета.Значение = ПараметрыОтчета.ДокументВладелец; + ДобавитьРесурсРасчетаКоличестваЗаписей(СхемаКомпоновкиДанных); + КонецПроцедуры -Функция МассивИспользуемыхРегистров(Регистратор, Движения, МассивИсключаемыхРегистров = Неопределено) - - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("Регистратор", Регистратор); - Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; - - Результат = Новый Массив; - ТекстЗапроса = ""; +Функция МассивИспользуемыхРегистров(Регистратор, Движения) + Результат = Новый Массив; Для Каждого ОбъектМетаданныхРегистр Из Движения Цикл - - ПропуститьРегистр = МассивИсключаемыхРегистров <> Неопределено - И МассивИсключаемыхРегистров.Найти(ОбъектМетаданныхРегистр.Имя) <> Неопределено; - - Если Не ПропуститьРегистр Тогда - - ТекущийТекстЗапроса = - "ВЫБРАТЬ - | &ИдентификаторыРегистра - |ПОМЕСТИТЬ ВТ_ВременнаяТаблица - |ИЗ - | &ТекущаяТаблица КАК ТекущаяТаблица - |ГДЕ - | &Условие"; - - ИдентификаторыРегистра = - """" + ОбъектМетаданныхРегистр.Имя + """ КАК ИмяТекущегоРегистра, - |""" + ОбъектМетаданныхРегистр.Представление() + """ КАК ПредставлениеТекущегоРегистра"; - - ИдентификаторВременнойТаблицы = "ВТ_" + СтрЗаменить(ОбъектМетаданныхРегистр.ПолноеИмя(), ".", "_"); - - ТекущийТекстЗапроса = СтрЗаменить(ТекущийТекстЗапроса, "&ИдентификаторыРегистра", ИдентификаторыРегистра); - ТекущийТекстЗапроса = СтрЗаменить(ТекущийТекстЗапроса, "ВТ_ВременнаяТаблица", ИдентификаторВременнойТаблицы); - ТекущийТекстЗапроса = СтрЗаменить(ТекущийТекстЗапроса, "&ТекущаяТаблица", ОбъектМетаданныхРегистр.ПолноеИмя()); - ТекущийТекстЗапроса = СтрЗаменить(ТекущийТекстЗапроса, "&Условие", "Регистратор = &Регистратор"); - - ТекстЗапроса = ТекстЗапроса + ?(ЗначениеЗаполнено(ТекстЗапроса), ";", "") + ТекущийТекстЗапроса; - - КонецЕсли; - + Результат.Добавить(ОбъектМетаданныхРегистр); КонецЦикла; - Запрос.Текст = ТекстЗапроса; - РезультатыЗапроса = Запрос.ВыполнитьПакетСПромежуточнымиДанными(); - - ГлобальныеНастройки = Новый Массив; - - Для Каждого РезультатЗапроса Из РезультатыЗапроса Цикл - - ВыгрузкаРезультатаЗапроса = РезультатЗапроса.Выгрузить(); - Если ВыгрузкаРезультатаЗапроса.Количество() <> 0 Тогда - - ИмяРегистра = ВыгрузкаРезультатаЗапроса.Получить(0).ИмяТекущегоРегистра; - ПредставлениеРегистра = ВыгрузкаРезультатаЗапроса.Получить(0).ПредставлениеТекущегоРегистра; - - Результат.Добавить(ИмяРегистра); - - Если Метаданные.РегистрыНакопления.Найти(ИмяРегистра) <> Неопределено Тогда - ВидРегистра = "Накопления"; - ЛокализацияВидРегистра = НСтр("ru = 'Накопления'"); - ИначеЕсли Метаданные.РегистрыБухгалтерии.Найти(ИмяРегистра) <> Неопределено Тогда - ВидРегистра = "Бухгалтерии"; - ЛокализацияВидРегистра = НСтр("ru = 'Бухгалтерии'"); - ИначеЕсли Метаданные.РегистрыСведений.Найти(ИмяРегистра) <> Неопределено Тогда - ВидРегистра = "Сведений"; - ЛокализацияВидРегистра = НСтр("ru = 'Сведений'"); - ИначеЕсли Метаданные.РегистрыРасчета.Найти(ИмяРегистра) <> Неопределено Тогда - ВидРегистра = "Расчета"; - ЛокализацияВидРегистра = НСтр("ru = 'Расчета'"); - КонецЕсли; - - СтруктураНастроек = Новый Структура; - СтруктураНастроек.Вставить("ИмяРегистра", ИмяРегистра); - СтруктураНастроек.Вставить("ПредставлениеРегистра" , ПредставлениеРегистра); - СтруктураНастроек.Вставить("ВидРегистра", ВидРегистра); - СтруктураНастроек.Вставить("ЛокализацияВидРегистра", ЛокализацияВидРегистра); - СтруктураНастроек.Вставить("КоличествоЗаписей", ВыгрузкаРезультатаЗапроса.Количество()); - ГлобальныеНастройки.Добавить(СтруктураНастроек); - - КонецЕсли; - - КонецЦикла; - - Запрос.МенеджерВременныхТаблиц.Закрыть(); - Запрос = Неопределено; - - КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Вставить("ГлобальныеНастройки", ГлобальныеНастройки); - Возврат Результат; КонецФункции -Функция ТаблицаИспользуемыхРегистров(МассивРегистров) +Процедура ЗафиксироватьГлобальныеНастройки(Регистратор, МассивИспользуемыхРегистров) + + ГлобальныеНастройки = Новый Массив; + ПредварительныйРасчетКоличества = ПредварительныйРасчетКоличества(Регистратор, МассивИспользуемыхРегистров); + + Для Каждого ИспользуемыйРегистр Из МассивИспользуемыхРегистров Цикл + + ИмяРегистра = ИспользуемыйРегистр.Имя; + ПредставлениеРегистра = ИспользуемыйРегистр.Представление(); + + Если ОбщегоНазначения.ЭтоРегистрНакопления(ИспользуемыйРегистр) Тогда + ВидРегистра = "Накопления"; + ЛокализацияВидРегистра = НСтр("ru = 'Накопления'"); + ИначеЕсли ОбщегоНазначения.ЭтоРегистрБухгалтерии(ИспользуемыйРегистр) Тогда + ВидРегистра = "Бухгалтерии"; + ЛокализацияВидРегистра = НСтр("ru = 'Бухгалтерии'"); + ИначеЕсли ОбщегоНазначения.ЭтоРегистрСведений(ИспользуемыйРегистр) Тогда + ВидРегистра = "Сведений"; + ЛокализацияВидРегистра = НСтр("ru = 'Сведений'"); + ИначеЕсли ОбщегоНазначения.ЭтоРегистрРасчета(ИспользуемыйРегистр) Тогда + ВидРегистра = "Расчета"; + ЛокализацияВидРегистра = НСтр("ru = 'Расчета'"); + КонецЕсли; + + СтруктураНастроек = Новый Структура; + СтруктураНастроек.Вставить("ИмяРегистра", ИмяРегистра); + СтруктураНастроек.Вставить("ПредставлениеРегистра" , ПредставлениеРегистра); + СтруктураНастроек.Вставить("ВидРегистра", ВидРегистра); + СтруктураНастроек.Вставить("ЛокализацияВидРегистра", ЛокализацияВидРегистра); + СтруктураНастроек.Вставить("КоличествоЗаписей", ПредварительныйРасчетКоличества[СтрЗаменить(ИспользуемыйРегистр.ПолноеИмя(), ".", "_")]); + СтруктураНастроек.Вставить("Использование", Ложь); + ГлобальныеНастройки.Добавить(СтруктураНастроек); + + КонецЦикла; + + КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Вставить("ГлобальныеНастройки", ГлобальныеНастройки); + +КонецПроцедуры + +Функция ПредварительныйРасчетКоличества(Регистратор, МассивИспользуемыхРегистров) + + РассчитанноеКоличество = Новый Соответствие; + + ТекстЗапроса = ""; + Для Каждого ИспользуемыйРегистр Из МассивИспользуемыхРегистров Цикл + + ПолноеИмя = ИспользуемыйРегистр.ПолноеИмя(); + ТекстЗапросаШаблон = + "ВЫБРАТЬ + | ""&ПолноеИмяРегистра"" КАК ПолноеИмяРегистра, + | КОЛИЧЕСТВО(*) КАК Количество + |ИЗ + | &ТекущаяТаблица КАК ТекущаяТаблица + |ГДЕ + | &Условие"; + + ТекстЗапросаШаблон = СтрЗаменить(ТекстЗапросаШаблон, "&ПолноеИмяРегистра", СтрЗаменить(ПолноеИмя, ".", "_")); + ТекстЗапросаШаблон = СтрЗаменить(ТекстЗапросаШаблон, "&Условие", "Регистратор = &ДокументВладелец"); + ТекстЗапросаШаблон = СтрЗаменить(ТекстЗапросаШаблон, "&ТекущаяТаблица", ПолноеИмя); + + ТекстЗапроса = ТекстЗапроса + ?(ЗначениеЗаполнено(ТекстЗапроса), " ОБЪЕДИНИТЬ ВСЕ ", "") + ТекстЗапросаШаблон; + + КонецЦикла; + + Запрос = Новый Запрос(ТекстЗапроса); + Запрос.УстановитьПараметр("ДокументВладелец", Регистратор); + Результат = Запрос.Выполнить().Выгрузить(); + + Для Каждого СтрокаРезультата Из Результат Цикл + РассчитанноеКоличество.Вставить(СтрокаРезультата.ПолноеИмяРегистра, СтрокаРезультата.Количество); + КонецЦикла; + + Возврат РассчитанноеКоличество; + +КонецФункции + +Функция ТаблицаИспользуемыхРегистров(МассивИспользуемыхРегистров) ТаблицаРегистров = Новый ТаблицаЗначений; КолонкиТаблицыРегистров = ТаблицаРегистров.Колонки; @@ -1625,72 +1598,50 @@ КолонкиТаблицыРегистров.Добавить("ПериодичностьРегистраСведений", Новый ОписаниеТипов("Строка")); КолонкиТаблицыРегистров.Добавить("РежимЗаписиРегистраСведений", Новый ОписаниеТипов("Строка")); КолонкиТаблицыРегистров.Добавить("ПериодичностьРегистраРасчета", Новый ОписаниеТипов("Строка")); - КолонкиТаблицыРегистров.Добавить("Сортировщик", Новый ОписаниеТипов("Число", , , - Новый КвалификаторыЧисла(1, 0, ДопустимыйЗнак.Неотрицательный))); + КолонкиТаблицыРегистров.Добавить("ВидРегистраДляУпорядочивания", Новый ОписаниеТипов("Число", , , Новый КвалификаторыЧисла(1, 0, ДопустимыйЗнак.Неотрицательный))); - МетаданныеРегистрыНакопления = Метаданные.РегистрыНакопления; - МетаданныеРегистрыБухгалтерии = Метаданные.РегистрыБухгалтерии; - МетаданныеРегистрыСведений = Метаданные.РегистрыСведений; - МетаданныеРегистрыРасчета = Метаданные.РегистрыРасчета; - - Для Каждого Регистр Из МассивРегистров Цикл + Для Каждого ИспользуемыйРегистр Из МассивИспользуемыхРегистров Цикл СтрокаТаблицыРегистров = ТаблицаРегистров.Добавить(); - СтрокаТаблицыРегистров.ИмяРегистра = Регистр; - - РезультатПоиска = МетаданныеРегистрыНакопления.Найти(Регистр); - Если РезультатПоиска <> Неопределено Тогда - - СтрокаТаблицыРегистров.ПредставлениеРегистра = РезультатПоиска.Представление(); - СтрокаТаблицыРегистров.ВидРегистра = "Накопления"; - СтрокаТаблицыРегистров.ЛокализацияВидРегистра = НСтр("ru = 'Накопления'"); - СтрокаТаблицыРегистров.ВидРегистраНакопления = Строка(РезультатПоиска.ВидРегистра); - СтрокаТаблицыРегистров.Сортировщик = 1; - - Иначе - - РезультатПоиска = МетаданныеРегистрыБухгалтерии.Найти(Регистр); - Если РезультатПоиска <> Неопределено Тогда - - СтрокаТаблицыРегистров.ПредставлениеРегистра = РезультатПоиска.Представление(); - СтрокаТаблицыРегистров.ВидРегистра = "Бухгалтерии"; - СтрокаТаблицыРегистров.ЛокализацияВидРегистра = НСтр("ru = 'Бухгалтерии'"); - СтрокаТаблицыРегистров.Сортировщик = 3; - - Иначе - - РезультатПоиска = МетаданныеРегистрыСведений.Найти(Регистр); - Если РезультатПоиска <> Неопределено Тогда - - СтрокаТаблицыРегистров.ПредставлениеРегистра = РезультатПоиска.Представление(); - СтрокаТаблицыРегистров.ВидРегистра = "Сведений"; - СтрокаТаблицыРегистров.ЛокализацияВидРегистра = НСтр("ru = 'Сведений'"); - СтрокаТаблицыРегистров.ПериодичностьРегистраСведений = РезультатПоиска.ПериодичностьРегистраСведений; - СтрокаТаблицыРегистров.РежимЗаписиРегистраСведений = РезультатПоиска.РежимЗаписи; - СтрокаТаблицыРегистров.Сортировщик = 2; - - Иначе - - РезультатПоиска = МетаданныеРегистрыРасчета.Найти(Регистр); - Если РезультатПоиска <> Неопределено Тогда - - СтрокаТаблицыРегистров.ПредставлениеРегистра = РезультатПоиска.Представление(); - СтрокаТаблицыРегистров.ВидРегистра = "Расчета"; - СтрокаТаблицыРегистров.ЛокализацияВидРегистра = НСтр("ru = 'Расчета'"); - СтрокаТаблицыРегистров.ПериодичностьРегистраРасчета = РезультатПоиска.Периодичность; - СтрокаТаблицыРегистров.Сортировщик = 4; - - КонецЕсли; - - КонецЕсли; - - КонецЕсли; - + СтрокаТаблицыРегистров.ИмяРегистра = ИспользуемыйРегистр.Имя; + + Если ОбщегоНазначения.ЭтоРегистрНакопления(ИспользуемыйРегистр) Тогда + + СтрокаТаблицыРегистров.ПредставлениеРегистра = ИспользуемыйРегистр.Представление(); + СтрокаТаблицыРегистров.ВидРегистра = "Накопления"; + СтрокаТаблицыРегистров.ЛокализацияВидРегистра = НСтр("ru = 'Накопления'"); + СтрокаТаблицыРегистров.ВидРегистраНакопления = Строка(ИспользуемыйРегистр.ВидРегистра); + СтрокаТаблицыРегистров.ВидРегистраДляУпорядочивания = 1; + + ИначеЕсли ОбщегоНазначения.ЭтоРегистрБухгалтерии(ИспользуемыйРегистр) Тогда + + СтрокаТаблицыРегистров.ПредставлениеРегистра = ИспользуемыйРегистр.Представление(); + СтрокаТаблицыРегистров.ВидРегистра = "Бухгалтерии"; + СтрокаТаблицыРегистров.ЛокализацияВидРегистра = НСтр("ru = 'Бухгалтерии'"); + СтрокаТаблицыРегистров.ВидРегистраДляУпорядочивания = 3; + + ИначеЕсли ОбщегоНазначения.ЭтоРегистрСведений(ИспользуемыйРегистр) Тогда + + СтрокаТаблицыРегистров.ПредставлениеРегистра = ИспользуемыйРегистр.Представление(); + СтрокаТаблицыРегистров.ВидРегистра = "Сведений"; + СтрокаТаблицыРегистров.ЛокализацияВидРегистра = НСтр("ru = 'Сведений'"); + СтрокаТаблицыРегистров.ПериодичностьРегистраСведений = ИспользуемыйРегистр.ПериодичностьРегистраСведений; + СтрокаТаблицыРегистров.РежимЗаписиРегистраСведений = ИспользуемыйРегистр.РежимЗаписи; + СтрокаТаблицыРегистров.ВидРегистраДляУпорядочивания = 2; + + ИначеЕсли ОбщегоНазначения.ЭтоРегистрРасчета(ИспользуемыйРегистр) Тогда + + СтрокаТаблицыРегистров.ПредставлениеРегистра = ИспользуемыйРегистр.Представление(); + СтрокаТаблицыРегистров.ВидРегистра = "Расчета"; + СтрокаТаблицыРегистров.ЛокализацияВидРегистра = НСтр("ru = 'Расчета'"); + СтрокаТаблицыРегистров.ПериодичностьРегистраРасчета = ИспользуемыйРегистр.Периодичность; + СтрокаТаблицыРегистров.ВидРегистраДляУпорядочивания = 4; + КонецЕсли; - + КонецЦикла; - ТаблицаРегистров.Сортировать("Сортировщик"); + ТаблицаРегистров.Сортировать("ВидРегистраДляУпорядочивания, ПредставлениеРегистра"); Возврат ТаблицаРегистров; @@ -1703,45 +1654,54 @@ СтрокиГлобальныхНастроек = ГлобальныеНастройки.НайтиСтроки(СтруктураПоиска); Если СтрокиГлобальныхНастроек.Количество() > 0 Тогда - + СтрокаГлобальныхНастроек = СтрокиГлобальныхНастроек.Получить(0); - ЗаголовокГруппировки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Регистр %1 ""%2"" (%3)'"), - НРег(ЛокализацияВидРегистра), СтрокаГлобальныхНастроек.ПредставлениеРегистра, - Формат(СтрокаГлобальныхНастроек.КоличествоЗаписей, "ЧГ=0")); - + ЗаголовокГруппировки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Регистр %1 ""%2""'"), + НРег(ЛокализацияВидРегистра), СтрокаГлобальныхНастроек.ПредставлениеРегистра); + + Макет = СхемаКД.Макеты.Добавить(); + Макет.Имя = "Макет" + Формат(ИндексНабора + 1, "ЧГ=0"); + Макет.Макет = Новый МакетОбластиКомпоновкиДанных; + + Параметр = Макет.Параметры.Добавить(Тип("ПараметрОбластиВыражениеКомпоновкиДанных")); + Параметр.Имя = "КоличествоЗаписей"; + Параметр.Выражение = "КоличествоЗаписейРегистра"; + МакетГруппировки = СхемаКД.МакетыГруппировок.Добавить(); МакетГруппировки.ИмяГруппировки = "Регистр" + ВидРегистра + "_" + ИмяРегистра; МакетГруппировки.ТипМакета = ТипМакетаОбластиКомпоновкиДанных.Заголовок; МакетГруппировки.Макет = "Макет" + Формат(ИндексНабора + 1, "ЧГ=0"); - - МакетОбласти = Новый МакетОбластиКомпоновкиДанных; + + МакетОбласти = Макет.Макет; СтрокаМакета = МакетОбласти.Добавить(Тип("СтрокаТаблицыОбластиКомпоновкиДанных")); Ячейка = СтрокаМакета.Ячейки.Добавить(); - + ОформлениеЯчейки = Ячейка.Оформление.Элементы; - + Шрифт = ОформлениеЯчейки.Найти("Шрифт"); - + Если Шрифт <> Неопределено Тогда Шрифт.Значение = Новый Шрифт("Arial", 14); Шрифт.Использование = Истина; КонецЕсли; - + Размещение = ОформлениеЯчейки.Найти("Размещение"); - + Если Размещение <> Неопределено Тогда Размещение.Значение = ТипРазмещенияТекстаКомпоновкиДанных.Переносить; Размещение.Использование = Истина; КонецЕсли; - + ОбластьКД = Ячейка.Элементы.Добавить(Тип("ПолеОбластиКомпоновкиДанных")); - ОбластьКД.Значение = ЗаголовокГруппировки; - - Макет = СхемаКД.Макеты.Добавить(); - Макет.Имя = "Макет" + Формат(ИндексНабора + 1, "ЧГ=0"); - Макет.Макет = МакетОбласти; - + ОбластьКД.Значение = ЗаголовокГруппировки + " ("; + + ОбластьКД = Ячейка.Элементы.Добавить(Тип("ПолеОбластиКомпоновкиДанных")); + ОбластьКД.Значение = Новый ПараметрКомпоновкиДанных(Параметр.Имя); + + ОбластьКД = Ячейка.Элементы.Добавить(Тип("ПолеОбластиКомпоновкиДанных")); + ОбластьКД.Значение = ")"; + КонецЕсли; КонецПроцедуры @@ -1812,14 +1772,20 @@ ОбластьЗаголовка.Параметры.СсылкаНаДокумент = Строка(ДокументОтбор); ПустаяОбласть = МакетЗаголовка.ПолучитьОбласть("ПустаяОбласть"); + ОбластьЗаголовка.ТекущаяОбласть.Расшифровка = ДокументОтбор; + ДокументРезультат.Вывести(ПустаяОбласть); - ДокументРезультат.НачатьГруппуСтрок(); ДокументРезультат.Вывести(ОбластьЗаголовка); - ДокументРезультат.ЗакончитьГруппуСтрок(); ДокументРезультат.Вывести(ПустаяОбласть); НастройкиКД = КомпоновщикНастроек.ПолучитьНастройки(); + СкрытьНеактуальныеГруппировки(НастройкиКД, ДокументОтбор); + + ВосстановитьОтборПоГруппировкамРегистров(НастройкиКД); + + ПользовательскоеОформление(СхемаКомпоновкиДанных, НастройкиКД); + КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, НастройкиКД, ДанныеРасшифровки); @@ -1840,8 +1806,10 @@ ТаблицаГлобальныхНастроек = ПерехватитьГлобальныеНастройки(); ТаблицаГлобальныхНастроек.Колонки.Добавить("ТаблицаПримечаний", Новый ОписаниеТипов("ТаблицаЗначений")); + НастройкиКД = КомпоновщикНастроек.ПолучитьНастройки(); + Для Каждого Строка Из ТаблицаГлобальныхНастроек Цикл - Строка.ТаблицаПримечаний = ФормированиеСтрокиПримечания("Регистр" + Строка.ВидРегистра + "_" + Строка.ИмяРегистра); + Строка.ТаблицаПримечаний = ФормированиеСтрокиПримечания("Регистр" + Строка.ВидРегистра + "_" + Строка.ИмяРегистра, НастройкиКД); КонецЦикла; ШиринаТаблицы = ДокументРезультат.ШиринаТаблицы; @@ -1855,8 +1823,8 @@ ИмяОбласти = "R" + Формат(ИндексСтрок, "ЧГ=0") + "C" + Формат(ИндексКолонок, "ЧГ=0"); Область = ДокументРезультат.Область(ИмяОбласти); - - СтрокаГлобальныхНастроек = ТаблицаГлобальныхНастроек.Найти(СокрЛП(Область.Текст), "НадписьРезультат"); + + СтрокаГлобальныхНастроек = НайтиНадписьРегистраНаДокументе(ТаблицаГлобальныхНастроек, Область.Текст); Если СтрокаГлобальныхНастроек <> Неопределено Тогда СтруктураРасшифровки = Новый Структура; @@ -1870,6 +1838,8 @@ ТаблицаПримечаний = СтрокаГлобальныхНастроек.ТаблицаПримечаний; ГраницаПримечаний = 1; + + Прервать; КонецЕсли; @@ -1934,253 +1904,101 @@ КонецПроцедуры -Процедура ПользовательскоеОформление(СхемаКД, НастройкиКД, ПодготовленныеДанные) +Процедура ПользовательскоеОформление(СхемаКД, НастройкиКД) - СписокВыбораРегистров = Новый СписокЗначений; + УсловноеОформление = НастройкиКД.УсловноеОформление.Элементы; + ОформитьОтрицательныеЧисла(УсловноеОформление); - УсловноеОформление = НастройкиКД.УсловноеОформление.Элементы; - ПоляУсловногоОформления = Новый ТаблицаЗначений; - ПоляУсловногоОформленияКолонки = ПоляУсловногоОформления.Колонки; - ПоляУсловногоОформленияКолонки.Добавить("ИмяРесурса", Новый ОписаниеТипов("Строка")); - ПоляУсловногоОформленияКолонки.Добавить("ПредставлениеРесурса", Новый ОписаниеТипов("Строка")); - ПоляУсловногоОформленияКолонки.Добавить("ВидРегистра", Новый ОписаниеТипов("Строка")); - ПоляУсловногоОформленияКолонки.Добавить("ПредставлениеРегистра", Новый ОписаниеТипов("Строка")); - ПоляУсловногоОформленияКолонки.Добавить("ВидОформления", Новый ОписаниеТипов("Строка")); + ДополнительныеСвойства = НастройкиКД.ДополнительныеСвойства; + Если Не ДополнительныеСвойства.Свойство("ГлобальныеНастройки") Тогда + Возврат; + КонецЕсли; - Для Каждого ЭлементДанных Из ПодготовленныеДанные Цикл - - ИнформацияПоРегистру = ЭлементДанных.ИнформацияПоРегистру; - ИмяРегистра = ИнформацияПоРегистру.ИмяРегистра; - ВидРегистра = ИнформацияПоРегистру.ВидРегистра; - ЛокализацияВидРегистра = ИнформацияПоРегистру.ЛокализацияВидРегистра; - ПредставлениеРегистра = ИнформацияПоРегистру.ПредставлениеРегистра; - РесурсыРегистра = ИнформацияПоРегистру.Ресурсы; - СтандартныеРеквизиты = ИнформацияПоРегистру.СтандартныеРеквизиты; - - ЭлементСписка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Регистр %1 %2'"), - НРег(ВидРегистра), ПредставлениеРегистра); - - СписокВыбораРегистров.Добавить(ЭлементСписка); - - Если ИнформацияПоРегистру.Свойство("РесурсыДт") Тогда - - РесурсыДт = ИнформацияПоРегистру.РесурсыДт; - Для Каждого РесурсДт Из РесурсыДт Цикл - - СтруктураУсловногоОформления = Новый Структура; - СтруктураУсловногоОформления.Вставить("ИмяРесурса", РесурсДт.Ключ); - СтруктураУсловногоОформления.Вставить("ПредставлениеРесурса", РесурсДт.Значение); - СтруктураУсловногоОформления.Вставить("ВидРегистра", ВидРегистра); - СтруктураУсловногоОформления.Вставить("ЛокализацияВидРегистра", ЛокализацияВидРегистра); - СтруктураУсловногоОформления.Вставить("ПредставлениеРегистра", ПредставлениеРегистра); - СтруктураУсловногоОформления.Вставить("ВидОформления", "ОформлениеОтрицательности"); - - ЗаполнитьЗначенияСвойств(ПоляУсловногоОформления.Добавить(), СтруктураУсловногоОформления); - - КонецЦикла; - - КонецЕсли; - - Если ИнформацияПоРегистру.Свойство("РесурсыКт") Тогда - - РесурсыКт = ИнформацияПоРегистру.РесурсыКт; - Для Каждого РесурсКт Из РесурсыКт Цикл - - СтруктураУсловногоОформления = Новый Структура; - СтруктураУсловногоОформления.Вставить("ИмяРесурса", РесурсКт.Ключ); - СтруктураУсловногоОформления.Вставить("ПредставлениеРесурса", РесурсКт.Значение); - СтруктураУсловногоОформления.Вставить("ВидРегистра", ВидРегистра); - СтруктураУсловногоОформления.Вставить("ЛокализацияВидРегистра", ЛокализацияВидРегистра); - СтруктураУсловногоОформления.Вставить("ПредставлениеРегистра", ПредставлениеРегистра); - СтруктураУсловногоОформления.Вставить("ВидОформления", "ОформлениеОтрицательности"); - - ЗаполнитьЗначенияСвойств(ПоляУсловногоОформления.Добавить(), СтруктураУсловногоОформления); - - КонецЦикла; - - КонецЕсли; - - Для Каждого РесурсРегистра Из РесурсыРегистра Цикл - - Если СокрЛП(НРег(ВидРегистра)) <> "сведений" Тогда - - СтруктураУсловногоОформления = Новый Структура; - СтруктураУсловногоОформления.Вставить("ИмяРесурса", РесурсРегистра.Ключ); - СтруктураУсловногоОформления.Вставить("ПредставлениеРесурса", РесурсРегистра.Значение); - СтруктураУсловногоОформления.Вставить("ВидРегистра", ВидРегистра); - СтруктураУсловногоОформления.Вставить("ЛокализацияВидРегистра", ЛокализацияВидРегистра); - СтруктураУсловногоОформления.Вставить("ПредставлениеРегистра", ПредставлениеРегистра); - СтруктураУсловногоОформления.Вставить("ВидОформления", "ОформлениеОтрицательности"); - - ЗаполнитьЗначенияСвойств(ПоляУсловногоОформления.Добавить(), СтруктураУсловногоОформления); - - Иначе - МетаданныеРесурсы = Метаданные.РегистрыСведений[ИмяРегистра]; - МетаданныеРесурс = МетаданныеРесурсы.Ресурсы.Найти(РесурсРегистра.Ключ); - Если МетаданныеРесурс <> Неопределено Тогда - - Если МетаданныеРесурс.Тип.СодержитТип(Тип("Число")) Тогда - - СтруктураУсловногоОформления = Новый Структура; - СтруктураУсловногоОформления.Вставить("ИмяРесурса", РесурсРегистра.Ключ); - СтруктураУсловногоОформления.Вставить("ПредставлениеРесурса", РесурсРегистра.Значение); - СтруктураУсловногоОформления.Вставить("ВидРегистра", ВидРегистра); - СтруктураУсловногоОформления.Вставить("ЛокализацияВидРегистра", ЛокализацияВидРегистра); - СтруктураУсловногоОформления.Вставить("ПредставлениеРегистра", ПредставлениеРегистра); - СтруктураУсловногоОформления.Вставить("ВидОформления", "ОформлениеОтрицательности"); - - ЗаполнитьЗначенияСвойств(ПоляУсловногоОформления.Добавить(), СтруктураУсловногоОформления); - - КонецЕсли; - - КонецЕсли; - КонецЕсли; - - КонецЦикла; - - Если СтандартныеРеквизиты.Свойство("ВидДвижения") Тогда - - СтруктураУсловногоОформления = Новый Структура; - СтруктураУсловногоОформления.Вставить("ИмяРесурса", "ВидДвижения"); - СтруктураУсловногоОформления.Вставить("ПредставлениеРесурса", НСтр("ru = 'Вид движения'")); - СтруктураУсловногоОформления.Вставить("ВидРегистра", ВидРегистра); - СтруктураУсловногоОформления.Вставить("ЛокализацияВидРегистра", ЛокализацияВидРегистра); - СтруктураУсловногоОформления.Вставить("ПредставлениеРегистра", ПредставлениеРегистра); - СтруктураУсловногоОформления.Вставить("ВидОформления", "ОформлениеВидаДвижений"); - - ЗаполнитьЗначенияСвойств(ПоляУсловногоОформления.Добавить(), СтруктураУсловногоОформления); - - КонецЕсли; - - КонецЦикла; - - Для Каждого ПолеУсловногоОформления Из ПоляУсловногоОформления Цикл - - Если ПолеУсловногоОформления.ВидОформления = "ОформлениеОтрицательности" Тогда - - ЦелевоеПоле = Новый ПолеКомпоновкиДанных(ПолеУсловногоОформления.ИмяРесурса); - - ЕдиницаУсловногоОформления = УсловноеОформление.Добавить(); - ЕдиницаУсловногоОформления.ИдентификаторПользовательскойНастройки = Строка(Новый УникальныйИдентификатор); - - ОтборУсловногоОформления = ЕдиницаУсловногоОформления.Отбор; - - ЭлементОтбора = ОтборУсловногоОформления.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); - - ЭлементОтбора.ЛевоеЗначение = ЦелевоеПоле; - ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Меньше; - ЭлементОтбора.ПравоеЗначение = 0; - ЭлементОтбора.Использование = Истина; - - ЭлементОтбора = ОтборУсловногоОформления.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); - - ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ПараметрыДанных.ОтрицательноеКрасным"); - ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; - ЭлементОтбора.ПравоеЗначение = Истина; - ЭлементОтбора.Использование = Истина; - - ЕдиницаУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЦветОтрицательногоЧисла); - - ОформляемыеПоля = ЕдиницаУсловногоОформления.Поля.Элементы; - ОформляемоеПоле = ОформляемыеПоля.Добавить(); - - ОформляемоеПоле.Поле = ЦелевоеПоле; - ОформляемоеПоле.Использование = Истина; - - СтрокаПредставления = НСтр("ru = 'Отметка отрицательности ресурса ""%1"", регистра %2: ""%3""'"); - ПредставлениеПользовательскойНастройки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаПредставления, - ПолеУсловногоОформления.ПредставлениеРесурса, НРег(ПолеУсловногоОформления.ВидРегистра), - ПолеУсловногоОформления.ПредставлениеРегистра); - - ЕдиницаУсловногоОформления.ПредставлениеПользовательскойНастройки = ПредставлениеПользовательскойНастройки; - ЕдиницаУсловногоОформления.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; - ЕдиницаУсловногоОформления.Использование = Истина; - - ИначеЕсли ПолеУсловногоОформления.ВидОформления = "ОформлениеВидаДвижений" Тогда - - ЦелевоеПоле = Новый ПолеКомпоновкиДанных(ПолеУсловногоОформления.ИмяРесурса); - - ЕдиницаУсловногоОформленияПриход = УсловноеОформление.Добавить(); - ЕдиницаУсловногоОформленияПриход.ИдентификаторПользовательскойНастройки = Строка(Новый УникальныйИдентификатор); - - ОтборУсловногоОформленияПриход = ЕдиницаУсловногоОформленияПриход.Отбор; - - ЭлементОтбора = ОтборУсловногоОформленияПриход.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); - - ЭлементОтбора.ЛевоеЗначение = ЦелевоеПоле; - ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; - ЭлементОтбора.ПравоеЗначение = ВидДвиженияНакопления.Приход; - ЭлементОтбора.Использование = Истина; - - ЭлементОтбора = ОтборУсловногоОформленияПриход.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); - - ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ПараметрыДанных.ВыделятьВидДвиженияНакопления"); - ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; - ЭлементОтбора.ПравоеЗначение = Истина; - ЭлементОтбора.Использование = Истина; - - ЕдиницаУсловногоОформленияПриход.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.РезультатУспехЦвет); - - ОформляемыеПоля = ЕдиницаУсловногоОформленияПриход.Поля.Элементы; - ОформляемоеПоле = ОформляемыеПоля.Добавить(); - - ОформляемоеПоле.Поле = ЦелевоеПоле; - ОформляемоеПоле.Использование = Истина; - - СтрокаПредставления = НСтр("ru = 'Отметить зеленым приход регистра %1: ""%2""'"); - ПредставлениеПользовательскойНастройки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаПредставления, - НРег(ПолеУсловногоОформления.ВидРегистра), ПолеУсловногоОформления.ПредставлениеРегистра); - - ЕдиницаУсловногоОформленияПриход.ПредставлениеПользовательскойНастройки = ПредставлениеПользовательскойНастройки; - ЕдиницаУсловногоОформленияПриход.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; - ЕдиницаУсловногоОформленияПриход.Использование = Истина; - - ЕдиницаУсловногоОформленияРасход = УсловноеОформление.Добавить(); - ЕдиницаУсловногоОформленияРасход.ИдентификаторПользовательскойНастройки = Строка(Новый УникальныйИдентификатор); - - ОтборУсловногоОформленияРасход = ЕдиницаУсловногоОформленияРасход.Отбор; - ЭлементОтбора = ОтборУсловногоОформленияРасход.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); - - ЭлементОтбора.ЛевоеЗначение = ЦелевоеПоле; - ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; - ЭлементОтбора.ПравоеЗначение = ВидДвиженияНакопления.Расход; - ЭлементОтбора.Использование = Истина; - - ЭлементОтбора = ОтборУсловногоОформленияРасход.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); - - ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ПараметрыДанных.ВыделятьВидДвиженияНакопления"); - ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; - ЭлементОтбора.ПравоеЗначение = Истина; - ЭлементОтбора.Использование = Истина; - - ЕдиницаУсловногоОформленияРасход.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЦветОтрицательногоЧисла); - - ОформляемыеПоля = ЕдиницаУсловногоОформленияРасход.Поля.Элементы; - - ОформляемоеПоле = ОформляемыеПоля.Добавить(); - - ОформляемоеПоле.Поле = ЦелевоеПоле; - ОформляемоеПоле.Использование = Истина; - - СтрокаПредставления = НСтр("ru = 'Отметить красным расход регистра %1: ""%2""'"); - ПредставлениеПользовательскойНастройки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаПредставления, - НРег(ПолеУсловногоОформления.ВидРегистра), ПолеУсловногоОформления.ПредставлениеРегистра); - - ЕдиницаУсловногоОформленияРасход.ПредставлениеПользовательскойНастройки = ПредставлениеПользовательскойНастройки; - ЕдиницаУсловногоОформленияРасход.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; - ЕдиницаУсловногоОформленияРасход.Использование = Истина; - - КонецЕсли; - - КонецЦикла; + Если ЕстьОстаточныйРегистрНакопления(ДополнительныеСвойства.ГлобальныеНастройки) Тогда + ОформитьВидДвижения(УсловноеОформление, ВидДвиженияНакопления.Приход); + ОформитьВидДвижения(УсловноеОформление, ВидДвиженияНакопления.Расход); + КонецЕсли; КонецПроцедуры +Процедура ОформитьОтрицательныеЧисла(УсловноеОформление) + + ЕдиницаУсловногоОформления = УсловноеОформление.Добавить(); + ОтборУсловногоОформления = ЕдиницаУсловногоОформления.Отбор; + + ЭлементОтбора = ОтборУсловногоОформления.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + + ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ПараметрыДанных.ОтрицательноеКрасным"); + ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ЭлементОтбора.ПравоеЗначение = Истина; + ЭлементОтбора.Использование = Истина; + + ЕдиницаУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ВыделятьОтрицательные", Истина); + + ЕдиницаУсловногоОформления.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; + ЕдиницаУсловногоОформления.Использование = Истина; + +КонецПроцедуры + +Процедура ОформитьВидДвижения(УсловноеОформление, ВидДвижения) + + ЦелевоеПоле = Новый ПолеКомпоновкиДанных("ВидДвижения"); + + ЕдиницаУсловногоОформления = УсловноеОформление.Добавить(); + ОтборУсловногоОформления = ЕдиницаУсловногоОформления.Отбор; + + ЭлементОтбора = ОтборУсловногоОформления.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + + ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ПараметрыДанных.ВыделятьВидДвиженияНакопления"); + ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ЭлементОтбора.ПравоеЗначение = Истина; + ЭлементОтбора.Использование = Истина; + + ЭлементОтбора = ОтборУсловногоОформления.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + + ЭлементОтбора.ЛевоеЗначение = ЦелевоеПоле; + ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ЭлементОтбора.ПравоеЗначение = ВидДвижения; + ЭлементОтбора.Использование = Истина; + + ОформляемыеПоля = ЕдиницаУсловногоОформления.Поля.Элементы; + ОформляемоеПоле = ОформляемыеПоля.Добавить(); + ОформляемоеПоле.Поле = ЦелевоеПоле; + ОформляемоеПоле.Использование = Истина; + + ЕдиницаУсловногоОформления.ИспользоватьВЗаголовке = ИспользованиеУсловногоОформленияКомпоновкиДанных.НеИспользовать; + ЕдиницаУсловногоОформления.ИспользоватьВЗаголовкеПолей = ИспользованиеУсловногоОформленияКомпоновкиДанных.НеИспользовать; + + ЕдиницаУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ЦветТекста", + ?(ВидДвижения = ВидДвиженияНакопления.Приход, ЦветаСтиля.РезультатУспехЦвет, ЦветаСтиля.ЦветОтрицательногоЧисла)); + ЕдиницаУсловногоОформления.Использование = Истина; + +КонецПроцедуры + +Функция ЕстьОстаточныйРегистрНакопления(ГлобальныеНастройки) + + Для Каждого ИнформацияПоРегистру Из ГлобальныеНастройки Цикл + + Если ИнформацияПоРегистру.ВидРегистра <> "Накопления" Тогда + Продолжить; + КонецЕсли; + + ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени("Регистр" + ИнформацияПоРегистру.ВидРегистра + "." + ИнформацияПоРегистру.ИмяРегистра); + Если ОбъектМетаданных.ВидРегистра = Метаданные.СвойстваОбъектов.ВидРегистраНакопления.Остатки Тогда + Возврат Истина; + КонецЕсли; + + КонецЦикла; + + Возврат Ложь; + +КонецФункции + #КонецОбласти #Область ФормированиеПримечаний -Функция ФормированиеСтрокиПримечания(ИмяРегистра) +Функция ФормированиеСтрокиПримечания(ИмяРегистра, НастройкиКД) ЭтажиСтроки = Новый ТаблицаЗначений; КолонкиЭтажей = ЭтажиСтроки.Колонки; @@ -2189,7 +2007,7 @@ КолонкиЭтажей.Добавить("Этажность", Новый ОписаниеТипов("Число")); МассивВыбранныхПолей = Новый Массив; - СтруктураГруппировок = КомпоновщикНастроек.ПолучитьНастройки().Структура; + СтруктураГруппировок = НастройкиКД.Структура; НайтиГруппировкуРекурсивно(СтруктураГруппировок, МассивВыбранныхПолей, ИмяРегистра); ПолеНумератора = Новый ПолеКомпоновкиДанных("Нумератор"); @@ -2269,12 +2087,12 @@ Функция ЭтоЧисло(Знач ПроверяемоеЗначение) - Попытка - ПроверяемоеЗначение = Число(ПроверяемоеЗначение); + Если ПроверяемоеЗначение = "0" Тогда Возврат Истина; - Исключение - Возврат Ложь; - КонецПопытки; + Иначе + ОписаниеТипаЧисло = Новый ОписаниеТипов("Число"); + Возврат ОписаниеТипаЧисло.ПривестиЗначение(ПроверяемоеЗначение) <> 0; + КонецЕсли; КонецФункции @@ -2320,10 +2138,9 @@ НоваяСтрока = ТаблицаГлобальныхНастроек.Добавить(); ЗаполнитьЗначенияСвойств(НоваяСтрока, ЭлементГлобальныхНастроек); - НадписьРезультат = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Регистр %1 ""%2"" (%3)'"), + НадписьРезультат = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Регистр %1 ""%2""'"), СокрЛП(НРег(ЭлементГлобальныхНастроек.ЛокализацияВидРегистра)), - ЭлементГлобальныхНастроек.ПредставлениеРегистра, - Формат(ЭлементГлобальныхНастроек.КоличествоЗаписей, "ЧГ=0")); + ЭлементГлобальныхНастроек.ПредставлениеРегистра); НоваяСтрока.НадписьРезультат = НадписьРезультат; @@ -2405,6 +2222,314 @@ КонецФункции +// Копирует настройки компоновки данных +// +// Параметры: +// НастройкиПриемник - НастройкиКомпоновкиДанных, НастройкиВложенногоОбъектаКомпоновкиДанных +// ГруппировкаКомпоновкиДанных, ГруппировкаТаблицыКомпоновкиДанных, ГруппировкаДиаграммыКомпоновкиДанных, +// ТаблицаКомпоновкиДанных, ДиаграммаКомпоновкиДанных - коллекция настроек КД, куда копируются настройки +// НастройкиИсточник - НастройкиКомпоновкиДанных, НастройкиВложенногоОбъектаКомпоновкиДанных +// ГруппировкаКомпоновкиДанных, ГруппировкаТаблицыКомпоновкиДанных, ГруппировкаДиаграммыКомпоновкиДанных, +// ТаблицаКомпоновкиДанных, ДиаграммаКомпоновкиДанных - коллекция настроек КД, откуда копируются настройки. +// +Процедура СкопироватьНастройкиКомпоновкиДанных(НастройкиПриемник, НастройкиИсточник) + + Если НастройкиИсточник = Неопределено Тогда + Возврат; + КонецЕсли; + + Если ТипЗнч(НастройкиПриемник) = Тип("НастройкиКомпоновкиДанных") Тогда + Для каждого Параметр Из НастройкиИсточник.ПараметрыДанных.Элементы Цикл + ЗначениеПараметра = НастройкиПриемник.ПараметрыДанных.НайтиЗначениеПараметра(Параметр.Параметр); + Если ЗначениеПараметра <> Неопределено Тогда + ЗаполнитьЗначенияСвойств(ЗначениеПараметра, Параметр); + КонецЕсли; + КонецЦикла; + Для Каждого Элемент Из НастройкиИсточник.ДополнительныеСвойства Цикл + НастройкиПриемник.ДополнительныеСвойства.Вставить(Элемент.Ключ, Элемент.Значение); + КонецЦикла; + КонецЕсли; + + Если ТипЗнч(НастройкиИсточник) = Тип("НастройкиВложенногоОбъектаКомпоновкиДанных") Тогда + ЗаполнитьЗначенияСвойств(НастройкиПриемник, НастройкиИсточник); + СкопироватьНастройкиКомпоновкиДанных(НастройкиПриемник.Настройки, НастройкиИсточник.Настройки); + Возврат; + КонецЕсли; + + // Копирование настроек + Если ТипЗнч(НастройкиИсточник) = Тип("НастройкиКомпоновкиДанных") Тогда + + ЗаполнитьЭлементы(НастройкиПриемник.ПараметрыДанных, НастройкиИсточник.ПараметрыДанных); + СкопироватьЭлементы(НастройкиПриемник.ПользовательскиеПоля, НастройкиИсточник.ПользовательскиеПоля, Ложь); + СкопироватьЭлементы(НастройкиПриемник.Отбор, НастройкиИсточник.Отбор, Ложь); + СкопироватьЭлементы(НастройкиПриемник.Порядок, НастройкиИсточник.Порядок, Ложь); + + КонецЕсли; + + Если ТипЗнч(НастройкиИсточник) = Тип("ГруппировкаКомпоновкиДанных") + ИЛИ ТипЗнч(НастройкиИсточник) = Тип("ГруппировкаТаблицыКомпоновкиДанных") + ИЛИ ТипЗнч(НастройкиИсточник) = Тип("ГруппировкаДиаграммыКомпоновкиДанных") Тогда + + СкопироватьЭлементы(НастройкиПриемник.ПоляГруппировки, НастройкиИсточник.ПоляГруппировки, Ложь); + СкопироватьЭлементы(НастройкиПриемник.Отбор, НастройкиИсточник.Отбор, Ложь); + СкопироватьЭлементы(НастройкиПриемник.Порядок, НастройкиИсточник.Порядок, Ложь); + ЗаполнитьЗначенияСвойств(НастройкиПриемник, НастройкиИсточник); + + КонецЕсли; + + СкопироватьЭлементы(НастройкиПриемник.Выбор, НастройкиИсточник.Выбор, Ложь); + СкопироватьЭлементы(НастройкиПриемник.УсловноеОформление, НастройкиИсточник.УсловноеОформление, Ложь); + ЗаполнитьЭлементы(НастройкиПриемник.ПараметрыВывода, НастройкиИсточник.ПараметрыВывода); + + // Копирование структуры + Если ТипЗнч(НастройкиИсточник) = Тип("НастройкиКомпоновкиДанных") + ИЛИ ТипЗнч(НастройкиИсточник) = Тип("ГруппировкаКомпоновкиДанных") Тогда + + Для каждого ЭлементСтруктурыИсточник Из НастройкиИсточник.Структура Цикл + ЭлементСтруктурыПриемник = НастройкиПриемник.Структура.Добавить(ТипЗнч(ЭлементСтруктурыИсточник)); + СкопироватьНастройкиКомпоновкиДанных(ЭлементСтруктурыПриемник, ЭлементСтруктурыИсточник); + КонецЦикла; + + КонецЕсли; + + Если ТипЗнч(НастройкиИсточник) = Тип("ГруппировкаТаблицыКомпоновкиДанных") + ИЛИ ТипЗнч(НастройкиИсточник) = Тип("ГруппировкаДиаграммыКомпоновкиДанных") Тогда + + Для каждого ЭлементСтруктурыИсточник Из НастройкиИсточник.Структура Цикл + ЭлементСтруктурыПриемник = НастройкиПриемник.Структура.Добавить(); + СкопироватьНастройкиКомпоновкиДанных(ЭлементСтруктурыПриемник, ЭлементСтруктурыИсточник); + КонецЦикла; + + КонецЕсли; + + Если ТипЗнч(НастройкиИсточник) = Тип("ТаблицаКомпоновкиДанных") Тогда + + Для каждого ЭлементСтруктурыИсточник Из НастройкиИсточник.Строки Цикл + ЭлементСтруктурыПриемник = НастройкиПриемник.Строки.Добавить(); + СкопироватьНастройкиКомпоновкиДанных(ЭлементСтруктурыПриемник, ЭлементСтруктурыИсточник); + КонецЦикла; + + Для каждого ЭлементСтруктурыИсточник Из НастройкиИсточник.Колонки Цикл + ЭлементСтруктурыПриемник = НастройкиПриемник.Колонки.Добавить(); + СкопироватьНастройкиКомпоновкиДанных(ЭлементСтруктурыПриемник, ЭлементСтруктурыИсточник); + КонецЦикла; + + КонецЕсли; + + Если ТипЗнч(НастройкиИсточник) = Тип("ДиаграммаКомпоновкиДанных") Тогда + + Для каждого ЭлементСтруктурыИсточник Из НастройкиИсточник.Серии Цикл + ЭлементСтруктурыПриемник = НастройкиПриемник.Серии.Добавить(); + СкопироватьНастройкиКомпоновкиДанных(ЭлементСтруктурыПриемник, ЭлементСтруктурыИсточник); + КонецЦикла; + + Для каждого ЭлементСтруктурыИсточник Из НастройкиИсточник.Точки Цикл + ЭлементСтруктурыПриемник = НастройкиПриемник.Точки.Добавить(); + СкопироватьНастройкиКомпоновкиДанных(ЭлементСтруктурыПриемник, ЭлементСтруктурыИсточник); + КонецЦикла; + + КонецЕсли; + +КонецПроцедуры + +// Заполняет одну коллекцию элементов настроек на основании другой +// +// Параметры: +// ПриемникЗначения - КоллекцияЗначенийПараметровКомпоновкиДанных, ЗначенияПараметровДанныхКомпоновкиДанных - +// коллекция элементов КД, куда копируются параметры +// ИсточникЗначения - КоллекцияЗначенийПараметровКомпоновкиДанных, ЗначенияПараметровДанныхКомпоновкиДанных - +// коллекция элементов КД, откуда копируются параметры +// ПервыйУровень - ЗначенияПараметровДанныхКомпоновкиДанных - уровень структуры коллекции элементов КД для +// копирования параметров. +// +Процедура ЗаполнитьЭлементы(ПриемникЗначения, ИсточникЗначения, ПервыйУровень = Неопределено) + + Если ТипЗнч(ПриемникЗначения) = Тип("КоллекцияЗначенийПараметровКомпоновкиДанных") Тогда + КоллекцияЗначений = ИсточникЗначения; + Иначе + КоллекцияЗначений = ИсточникЗначения.Элементы; + КонецЕсли; + + Для каждого ЭлементИсточник Из КоллекцияЗначений Цикл + Если ПервыйУровень = Неопределено Тогда + ЭлементПриемник = ПриемникЗначения.НайтиЗначениеПараметра(ЭлементИсточник.Параметр); + Иначе + ЭлементПриемник = ПервыйУровень.НайтиЗначениеПараметра(ЭлементИсточник.Параметр); + КонецЕсли; + Если ЭлементПриемник = Неопределено Тогда + Продолжить; + КонецЕсли; + Если ЭлементИсточник.Использование Тогда + ЗаполнитьЗначенияСвойств(ЭлементПриемник, ЭлементИсточник); + КонецЕсли; + Если ТипЗнч(ЭлементИсточник) = Тип("ЗначениеПараметраКомпоновкиДанных") Тогда + Если ЭлементИсточник.ЗначенияВложенныхПараметров.Количество() <> 0 Тогда + ЗаполнитьЭлементы(ЭлементПриемник.ЗначенияВложенныхПараметров, ЭлементИсточник.ЗначенияВложенныхПараметров, ПриемникЗначения); + КонецЕсли; + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +// Копирует элементы из одной коллекции в другую +// +// Параметры: +// ПриемникЗначения - КоллекцияЗначенийПараметровКомпоновкиДанных, ЗначенияПараметровДанныхКомпоновкиДанных - +// коллекция элементов КД, куда копируются параметры +// ИсточникЗначения - КоллекцияЗначенийПараметровКомпоновкиДанных, ЗначенияПараметровДанныхКомпоновкиДанных - +// коллекция элементов КД, откуда копируются параметры +// ОчищатьПриемник - Булево - признак необходимости очистки приемника. +// +Процедура СкопироватьЭлементы(ПриемникЗначения, ИсточникЗначения, ОчищатьПриемник = Истина) + + Если ТипЗнч(ИсточникЗначения) = Тип("УсловноеОформлениеКомпоновкиДанных") + ИЛИ ТипЗнч(ИсточникЗначения) = Тип("ВариантыПользовательскогоПоляВыборКомпоновкиДанных") + ИЛИ ТипЗнч(ИсточникЗначения) = Тип("ОформляемыеПоляКомпоновкиДанных") + ИЛИ ТипЗнч(ИсточникЗначения) = Тип("ЗначенияПараметровДанныхКомпоновкиДанных") Тогда + СоздаватьПоТипу = Ложь; + Иначе + СоздаватьПоТипу = Истина; + КонецЕсли; + ПриемникЭлементов = ПриемникЗначения.Элементы; + ИсточникЭлементов = ИсточникЗначения.Элементы; + Если ОчищатьПриемник Тогда + ПриемникЭлементов.Очистить(); + КонецЕсли; + + Для каждого ЭлементИсточник Из ИсточникЭлементов Цикл + + Если ТипЗнч(ЭлементИсточник) = Тип("ЭлементПорядкаКомпоновкиДанных") Тогда + // Элементы порядка добавляем в начало + Индекс = ИсточникЭлементов.Индекс(ЭлементИсточник); + ЭлементПриемник = ПриемникЭлементов.Вставить(Индекс, ТипЗнч(ЭлементИсточник)); + Иначе + Если СоздаватьПоТипу Тогда + ЭлементПриемник = ПриемникЭлементов.Добавить(ТипЗнч(ЭлементИсточник)); + Иначе + ЭлементПриемник = ПриемникЭлементов.Добавить(); + КонецЕсли; + КонецЕсли; + + ЗаполнитьЗначенияСвойств(ЭлементПриемник, ЭлементИсточник); + // В некоторых коллекциях необходимо заполнить другие коллекции + Если ТипЗнч(ИсточникЭлементов) = Тип("КоллекцияЭлементовУсловногоОформленияКомпоновкиДанных") Тогда + СкопироватьЭлементы(ЭлементПриемник.Поля, ЭлементИсточник.Поля); + СкопироватьЭлементы(ЭлементПриемник.Отбор, ЭлементИсточник.Отбор); + ЗаполнитьЭлементы(ЭлементПриемник.Оформление, ЭлементИсточник.Оформление); + ИначеЕсли ТипЗнч(ИсточникЭлементов) = Тип("КоллекцияВариантовПользовательскогоПоляВыборКомпоновкиДанных") Тогда + СкопироватьЭлементы(ЭлементПриемник.Отбор, ЭлементИсточник.Отбор); + КонецЕсли; + + // В некоторых элементах коллекции необходимо заполнить другие коллекции + Если ТипЗнч(ЭлементИсточник) = Тип("ГруппаЭлементовОтбораКомпоновкиДанных") Тогда + СкопироватьЭлементы(ЭлементПриемник, ЭлементИсточник); + ИначеЕсли ТипЗнч(ЭлементИсточник) = Тип("ГруппаВыбранныхПолейКомпоновкиДанных") Тогда + СкопироватьЭлементы(ЭлементПриемник, ЭлементИсточник); + ИначеЕсли ТипЗнч(ЭлементИсточник) = Тип("ПользовательскоеПолеВыборКомпоновкиДанных") Тогда + СкопироватьЭлементы(ЭлементПриемник.Варианты, ЭлементИсточник.Варианты); + ИначеЕсли ТипЗнч(ЭлементИсточник) = Тип("ПользовательскоеПолеВыражениеКомпоновкиДанных") Тогда + ЭлементПриемник.УстановитьВыражениеДетальныхЗаписей (ЭлементИсточник.ПолучитьВыражениеДетальныхЗаписей()); + ЭлементПриемник.УстановитьВыражениеИтоговыхЗаписей(ЭлементИсточник.ПолучитьВыражениеИтоговыхЗаписей()); + ЭлементПриемник.УстановитьПредставлениеВыраженияДетальныхЗаписей(ЭлементИсточник.ПолучитьПредставлениеВыраженияДетальныхЗаписей ()); + ЭлементПриемник.УстановитьПредставлениеВыраженияИтоговыхЗаписей(ЭлементИсточник.ПолучитьПредставлениеВыраженияИтоговыхЗаписей ()); + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +Функция НайтиНадписьРегистраНаДокументе(ТаблицаГлобальныхНастроек, Знач ТекстОбласти) + + ТекстОбласти = ВРег(СокрЛП(ТекстОбласти)); + Если Не ЗначениеЗаполнено(ТекстОбласти) Тогда + Возврат Неопределено; + КонецЕсли; + + Для Каждого ГлобальнаяНастройка Из ТаблицаГлобальныхНастроек Цикл + ЗначениеВТаблице = ВРег(СокрЛП(ГлобальнаяНастройка.НадписьРезультат)); + Если СтрНачинаетсяС(ТекстОбласти, ЗначениеВТаблице) Тогда + Возврат ГлобальнаяНастройка; + КонецЕсли; + КонецЦикла; + + Возврат Неопределено; + +КонецФункции + +Процедура ВосстановитьОтборПоГруппировкамРегистров(НастройкиКД) + + СтруктураОтчета = НастройкиКД.Структура; + Для Каждого ЭлементСтруктуры Из СтруктураОтчета Цикл + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора(ЭлементСтруктуры.Отбор, + "ИмяРегистра", ЭлементСтруктуры.Имя, ВидСравненияКомпоновкиДанных.Равно, + НСтр("ru = 'Служебный отбор'"), Истина, РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный); + КонецЦикла; + +КонецПроцедуры + +Процедура ПерерасчетКоличестваДвижений(СписокРегистров, ДокументОтбор, ГлобальныеНастройки) + + МассивИспользуемыхРегистров = МассивИспользуемыхРегистров(ДокументОтбор, ДокументОтбор.Метаданные().Движения); + ПредварительныйРасчетКоличества = ПредварительныйРасчетКоличества(ДокументОтбор, МассивИспользуемыхРегистров); + + ОтмеченныеРегистры = Новый СписокЗначений; + Если ТипЗнч(СписокРегистров) = Тип("Строка") Тогда + ОтмеченныеРегистры.Добавить(СписокРегистров); + ИначеЕсли ТипЗнч(СписокРегистров) = Тип("СписокЗначений") Тогда + ОтмеченныеРегистры = СписокРегистров; + КонецЕсли; + + Для Каждого ГлобальнаяНастройка Из ГлобальныеНастройки Цикл + + ПолноеИмяРегистра = "Регистр" + ГлобальнаяНастройка.ВидРегистра + "_" + ГлобальнаяНастройка.ИмяРегистра; + ГлобальнаяНастройка.Вставить("КоличествоЗаписей", ПредварительныйРасчетКоличества[ПолноеИмяРегистра]); + + Если ОтмеченныеРегистры.НайтиПоЗначению(ПолноеИмяРегистра) <> Неопределено Тогда + ГлобальнаяНастройка.Вставить("Использование", Истина); + Иначе + ГлобальнаяНастройка.Вставить("Использование", Ложь); + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +Процедура СкрытьНеактуальныеГруппировки(НастройкиКД, ДокументОтбор) + + ДополнительныеСвойства = НастройкиКД.ДополнительныеСвойства; + Если Не ДополнительныеСвойства.Свойство("ГлобальныеНастройки") Тогда + Возврат; + КонецЕсли; + ГлобальныеНастройки = ДополнительныеСвойства.ГлобальныеНастройки; + + СписокРегистровПараметрСКД = НастройкиКД.ПараметрыДанных.Элементы.Найти("СписокРегистров"); + Если СписокРегистровПараметрСКД = Неопределено Тогда + Возврат; + КонецЕсли; + СписокРегистров = СписокРегистровПараметрСКД.Значение; + + ПерерасчетКоличестваДвижений(СписокРегистров, ДокументОтбор, ГлобальныеНастройки); + + СтруктураКД = НастройкиКД.Структура; + Для Каждого Элемент Из СтруктураКД Цикл + + Для Каждого ГлобальнаяНастройка Из ГлобальныеНастройки Цикл + + Если ВРег(СокрЛП("Регистр" + ГлобальнаяНастройка.ВидРегистра + "_" + ГлобальнаяНастройка.ИмяРегистра)) <> ВРег(СокрЛП(Элемент.Имя)) Тогда + Продолжить; + КонецЕсли; + + Если ГлобальнаяНастройка.КоличествоЗаписей = 0 Или (СписокРегистровПараметрСКД.Использование И Не ГлобальнаяНастройка.Использование) Тогда + Элемент.Состояние = СостояниеЭлементаНастройкиКомпоновкиДанных.Отключен; + Элемент.Структура.Получить(0).Состояние = СостояниеЭлементаНастройкиКомпоновкиДанных.Отключен; + КонецЕсли; + + КонецЦикла; + + КонецЦикла; + +КонецПроцедуры + #КонецОбласти #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Reports/ОтчетОДвиженияхДокумента/Templates/Заголовок/Template.mxlx b/SSL/src/Reports/ДвиженияДокумента/Templates/Заголовок/Template.mxlx similarity index 88% rename from SSL/src/Reports/ОтчетОДвиженияхДокумента/Templates/Заголовок/Template.mxlx rename to SSL/src/Reports/ДвиженияДокумента/Templates/Заголовок/Template.mxlx index e27f82981..bbbc9a92f 100644 --- a/SSL/src/Reports/ОтчетОДвиженияхДокумента/Templates/Заголовок/Template.mxlx +++ b/SSL/src/Reports/ДвиженияДокумента/Templates/Заголовок/Template.mxlx @@ -11,14 +11,20 @@ 1 + + 0 + + 1 + + 1 - 1 + 2 - 2 + 3 ru @@ -32,14 +38,14 @@ 2 - 3 + 4 true 4 - 4 + 5 true @@ -50,7 +56,7 @@ true - 5 + 6 5 5 @@ -74,6 +80,9 @@ + + 567 + 0 #009646 @@ -82,6 +91,7 @@ 0 #009646 Template + Row 0 diff --git a/SSL/src/Reports/ОтчетОДвиженияхДокумента/Templates/ПустаяСхемаКомпоновкиДанных/Template.dcs b/SSL/src/Reports/ДвиженияДокумента/Templates/ПустаяСхемаКомпоновкиДанных/Template.dcs similarity index 97% rename from SSL/src/Reports/ОтчетОДвиженияхДокумента/Templates/ПустаяСхемаКомпоновкиДанных/Template.dcs rename to SSL/src/Reports/ДвиженияДокумента/Templates/ПустаяСхемаКомпоновкиДанных/Template.dcs index 7309eda62..241b89d67 100644 --- a/SSL/src/Reports/ОтчетОДвиженияхДокумента/Templates/ПустаяСхемаКомпоновкиДанных/Template.dcs +++ b/SSL/src/Reports/ДвиженияДокумента/Templates/ПустаяСхемаКомпоновкиДанных/Template.dcs @@ -91,7 +91,7 @@ ru - Отчет о движениях документа (Горизонтально) + Движения документа (Горизонтально) @@ -165,7 +165,7 @@ ru - Отчет о движениях документа (Вертикально) + Движения документа (Вертикально) diff --git a/SSL/src/Reports/ОтчетОДвиженияхДокумента/ОтчетОДвиженияхДокумента.mdo b/SSL/src/Reports/ДвиженияДокумента/ДвиженияДокумента.mdo similarity index 82% rename from SSL/src/Reports/ОтчетОДвиженияхДокумента/ОтчетОДвиженияхДокумента.mdo rename to SSL/src/Reports/ДвиженияДокумента/ДвиженияДокумента.mdo index 9855784e2..4a212141c 100644 --- a/SSL/src/Reports/ОтчетОДвиженияхДокумента/ОтчетОДвиженияхДокумента.mdo +++ b/SSL/src/Reports/ДвиженияДокумента/ДвиженияДокумента.mdo @@ -4,13 +4,13 @@ - ОтчетОДвиженияхДокумента + ДвиженияДокумента ru - Отчет о движениях документа + Движения документа CommonForm.ФормаОтчета - Report.ОтчетОДвиженияхДокумента.Template.ПустаяСхемаКомпоновкиДанных + Report.ДвиженияДокумента.Template.ПустаяСхемаКомпоновкиДанных CommonForm.ФормаНастроекОтчета CommonForm.ФормаВариантаОтчета SettingsStorage.ХранилищеВариантовОтчетов diff --git a/SSL/src/Reports/ИспользуемыеВнешниеРесурсы/ManagerModule.bsl b/SSL/src/Reports/ИспользуемыеВнешниеРесурсы/ManagerModule.bsl index e7c9b3413..5e9ff9b51 100644 --- a/SSL/src/Reports/ИспользуемыеВнешниеРесурсы/ManagerModule.bsl +++ b/SSL/src/Reports/ИспользуемыеВнешниеРесурсы/ManagerModule.bsl @@ -9,21 +9,33 @@ // См. ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов. // Процедура НастроитьВариантыОтчета(Настройки, НастройкиОтчета) Экспорт - НастройкиОтчета.Описание = НСтр("ru = 'Внешние ресурсы, используемые программой и дополнительными модулями'"); + + МодульВариантыОтчетов = ОбщегоНазначения.ОбщийМодуль("ВариантыОтчетов"); + НастройкиОтчета.ОпределитьНастройкиФормы = Истина; - НастройкиОтчета.НастройкиДляПоиска.НаименованияПолей = + + НастройкиВарианта = МодульВариантыОтчетов.ОписаниеВарианта(Настройки, Метаданные.Отчеты.ИспользуемыеВнешниеРесурсы, ""); + НастройкиВарианта.Наименование = НСтр("ru = 'Внешние ресурсы, используемые программой и дополнительными модулями'"); + НастройкиВарианта.Описание = + НСтр("ru = 'Интернет-ресурсы, внешние компоненты, COM-классы и прочее. + |Параметры окружения, которые помогут администратору + |выполнить настройку компьютера и провести аудит безопасности.'"); + НастройкиВарианта.НастройкиДляПоиска.НаименованияПолей = НСтр("ru = 'Имя и идентификатор COM-класса - |Имя компьютера - |Адрес - |Чтение данных - |Запись данных - |Имя макета или файла компоненты - |Контрольная сумма - |Шаблон командной строки - |Протокол - |Адрес Интернет-ресурса - |Порт'"); - НастройкиОтчета.НастройкиДляПоиска.НаименованияПараметровИОтборов = ""; + |Имя компьютера + |Адрес + |Чтение данных + |Запись данных + |Имя макета или файла компоненты + |Контрольная сумма + |Шаблон командной строки + |Протокол + |Адрес Интернет-ресурса + |Порт'"); + + // Отборов и параметров для отчета не предусмотрено. + НастройкиВарианта.НастройкиДляПоиска.НаименованияПараметровИОтборов = "#"; + КонецПроцедуры // Конец СтандартныеПодсистемы.ВариантыОтчетов @@ -401,12 +413,12 @@ Результат = Новый Структура(); - Результат.Вставить("FileSystemAccess", 1); - Результат.Вставить("CreateComObject", 2); + Результат.Вставить("InternetResourceAccess", 1); + Результат.Вставить("FileSystemAccess", 2); Результат.Вставить("AttachAddin", 3); - Результат.Вставить("ExternalModule", 4); + Результат.Вставить("CreateComObject", 4); Результат.Вставить("RunApplication", 5); - Результат.Вставить("InternetResourceAccess", 6); + Результат.Вставить("ExternalModule", 6); Результат.Вставить("ExternalModulePrivilegedModeAllowed", 7); Возврат Новый ФиксированнаяСтруктура(Результат); diff --git a/SSL/src/Reports/ИспользуемыеВнешниеРесурсы/ИспользуемыеВнешниеРесурсы.mdo b/SSL/src/Reports/ИспользуемыеВнешниеРесурсы/ИспользуемыеВнешниеРесурсы.mdo index 19ed92e9d..7cf560d31 100644 --- a/SSL/src/Reports/ИспользуемыеВнешниеРесурсы/ИспользуемыеВнешниеРесурсы.mdo +++ b/SSL/src/Reports/ИспользуемыеВнешниеРесурсы/ИспользуемыеВнешниеРесурсы.mdo @@ -9,7 +9,9 @@ ru Внешние ресурсы, используемые программой и дополнительными модулями + true SettingsStorage.ХранилищеВариантовОтчетов + true ПредставленияРазрешений diff --git a/SSL/src/Reports/ОценкаПроизводительности/ObjectModule.bsl b/SSL/src/Reports/ОценкаПроизводительности/ObjectModule.bsl index 9b8418c58..913dc5746 100644 --- a/SSL/src/Reports/ОценкаПроизводительности/ObjectModule.bsl +++ b/SSL/src/Reports/ОценкаПроизводительности/ObjectModule.bsl @@ -32,13 +32,13 @@ ПараметрДанных = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ВидСравнения"); ПараметрДанныхВидСравнения = КомпоновщикНастроек.ПользовательскиеНастройки.Элементы.Найти(ПараметрДанных.ИдентификаторПользовательскойНастройки); - Если ПараметрДанныхВидСравнения.Значение = "Левое соединение" Тогда + Если ПараметрДанныхВидСравнения.Значение = "ЛевоеСоединение" Тогда ТекстЗапроса = СхемаКомпоновкиДанных.НаборыДанных.НаборДанныхЗамеры.Запрос; СхемаКомпоновкиДанных.НаборыДанных.НаборДанныхЗамеры.Запрос = СтрЗаменить(ТекстЗапроса, "{ЛЕВОЕ СОЕДИНЕНИЕ}", "ЛЕВОЕ СОЕДИНЕНИЕ"); - ИначеЕсли ПараметрДанныхВидСравнения.Значение = "Внутреннее соединение" Тогда + ИначеЕсли ПараметрДанныхВидСравнения.Значение = "ВнутреннееСоединение" Тогда ТекстЗапроса = СхемаКомпоновкиДанных.НаборыДанных.НаборДанныхЗамеры.Запрос; СхемаКомпоновкиДанных.НаборыДанных.НаборДанныхЗамеры.Запрос = СтрЗаменить(ТекстЗапроса, "{ЛЕВОЕ СОЕДИНЕНИЕ}", "ВНУТРЕННЕЕ СОЕДИНЕНИЕ"); - ИначеЕсли ПараметрДанныхВидСравнения.Значение = "Полное соединение" Тогда + ИначеЕсли ПараметрДанныхВидСравнения.Значение = "ПолноеСоединение" Тогда ТекстЗапроса = СхемаКомпоновкиДанных.НаборыДанных.НаборДанныхЗамеры.Запрос; СхемаКомпоновкиДанных.НаборыДанных.НаборДанныхЗамеры.Запрос = СтрЗаменить(ТекстЗапроса, "{ЛЕВОЕ СОЕДИНЕНИЕ}", "ПОЛНОЕ СОЕДИНЕНИЕ"); КонецЕсли; diff --git a/SSL/src/Reports/ОценкаПроизводительности/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs b/SSL/src/Reports/ОценкаПроизводительности/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs index dedcb1008..c60066108 100644 --- a/SSL/src/Reports/ОценкаПроизводительности/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs +++ b/SSL/src/Reports/ОценкаПроизводительности/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs @@ -770,10 +770,10 @@ Variable - Левое соединение + ЛевоеСоединение false - Левое соединение + ЛевоеСоединение ru @@ -782,7 +782,7 @@ - Внутреннее соединение + ВнутреннееСоединение ru @@ -791,7 +791,7 @@ - Полное соединение + ПолноеСоединение ru diff --git a/SSL/src/Reports/ПраваДоступа/Forms/ФормаОтчета/Module.bsl b/SSL/src/Reports/ПраваДоступа/Forms/ФормаОтчета/Module.bsl index a6be20111..eba8747ce 100644 --- a/SSL/src/Reports/ПраваДоступа/Forms/ФормаОтчета/Module.bsl +++ b/SSL/src/Reports/ПраваДоступа/Forms/ФормаОтчета/Module.bsl @@ -1831,15 +1831,16 @@ Возврат Кэш.Таблица; КонецЕсли; + ТипыЗначенийВидовДоступа = + УправлениеДоступомСлужебныйПовтИсп.ТипыЗначенийВидовДоступаИВладельцевНастроекПрав().Получить(); + Запрос = Новый Запрос; Запрос.УстановитьПараметр("ПостоянныеВидыОграничений", УправлениеДоступомСлужебныйПовтИсп.ПостоянныеВидыОграниченийПравОбъектовМетаданных()); - Запрос.УстановитьПараметр("ТипыЗначенийВидовДоступа", - УправлениеДоступомСлужебныйПовтИсп.ТипыЗначенийВидовДоступаИВладельцевНастроекПрав()); + Запрос.УстановитьПараметр("ТипыЗначенийВидовДоступа", ТипыЗначенийВидовДоступа); - ТипыЗначений = УправлениеДоступомСлужебныйПовтИсп.ТипыЗначенийВидовДоступаИВладельцевНастроекПрав(); - ИспользуемыеВидыДоступа = ТипыЗначений.Скопировать(, "ВидДоступа"); + ИспользуемыеВидыДоступа = ТипыЗначенийВидовДоступа.Скопировать(, "ВидДоступа"); ИспользуемыеВидыДоступа.Свернуть("ВидДоступа"); ИспользуемыеВидыДоступа.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(150))); diff --git a/SSL/src/Reports/РезультатыПроверкиУчета/ManagerModule.bsl b/SSL/src/Reports/РезультатыПроверкиУчета/ManagerModule.bsl index efecd5f6b..e0d9719db 100644 --- a/SSL/src/Reports/РезультатыПроверкиУчета/ManagerModule.bsl +++ b/SSL/src/Reports/РезультатыПроверкиУчета/ManagerModule.bsl @@ -6,39 +6,13 @@ // СтандартныеПодсистемы.ВариантыОтчетов -// Настройки размещения в панели отчетов. -// -// Параметры: -// Настройки - Коллекция - Используется для передачи в параметрах вспомогательных методов (см. ниже). -// Соответствует 1 параметру процедуры ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). -// НастройкиОтчета - СтрокаДереваЗначений - Настройки этого отчета, -// уже сформированные при помощи функции ВариантыОтчетов.ОписаниеОтчета() и готовые к изменению. -// См. "Свойства для изменения" процедуры ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). -// -// Описание: -// См. ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). -// -// Вспомогательные методы: -// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); -// ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, НастройкиОтчета, Истина/Ложь); -// -// Примеры: -// -// 1. Установка описания варианта. -// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); -// НастройкиВарианта.Описание = НСтр("ru = '<Описание>'"); -// -// 2. Отключение варианта отчета. -// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); -// НастройкиВарианта.Включен = Ложь; -// +// См. ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов. Процедура НастроитьВариантыОтчета(Настройки, НастройкиОтчета) Экспорт МодульВариантыОтчетов = ОбщегоНазначения.ОбщийМодуль("ВариантыОтчетов"); МодульВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, НастройкиОтчета, Ложь); НастройкиОтчета.ОпределитьНастройкиФормы = Истина; - НастройкиОтчета.Размещение.Вставить(Метаданные.Подсистемы.Администрирование); НастройкиВарианта_Основной = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "Основной"); НастройкиВарианта_Основной.Описание = НСтр("ru = 'Выводит результаты проверок учета.'"); diff --git a/SSL/src/Reports/РезультатыПроверкиУчета/ObjectModule.bsl b/SSL/src/Reports/РезультатыПроверкиУчета/ObjectModule.bsl index 566a8e79b..dfbd1f0b1 100644 --- a/SSL/src/Reports/РезультатыПроверкиУчета/ObjectModule.bsl +++ b/SSL/src/Reports/РезультатыПроверкиУчета/ObjectModule.bsl @@ -33,23 +33,9 @@ // Вызывается в обработчике одноименного события формы отчета после выполнения кода формы. // // Параметры: -// Форма - УправляемаяФорма - Форма отчета. -// Отказ - Передается из параметров обработчика "как есть". -// СтандартнаяОбработка - Передается из параметров обработчика "как есть". -// -// См. также: -// "УправляемаяФорма.ПриСозданииНаСервере" в синтакс-помощнике. -// ОтчетыПереопределяемый.ПриСозданииНаСервере(). -// -// Пример 1 - Добавление команды с обработчиком в ОтчетыКлиентПереопределяемый.ОбработчикКоманды: -// Команда = Форма.Команды.Добавить("МояОсобеннаяКоманда"); -// Команда.Действие = "Подключаемый_Команда"; -// Команда.Заголовок = НСтр("ru = 'Моя команда...'"); -// -// Кнопка = Форма.Элементы.Добавить(Команда.Имя, Тип("КнопкаФормы"), Форма.Элементы.ГруппаПрограммныйИнтерфейс); -// Кнопка.ИмяКоманды = Команда.Имя; -// -// Форма.ПостоянныеКоманды.Добавить(КомандаСоздать.Имя); +// Форма - УправляемаяФорма - форма отчета. +// Отказ - Булево - передается из параметров стандартного обработчика ПриСозданииНаСервере "как есть". +// СтандартнаяОбработка - Булево - передается из параметров стандартного обработчика ПриСозданииНаСервере "как есть". // Процедура ПриСозданииНаСервере(Форма, Отказ, СтандартнаяОбработка) Экспорт @@ -106,29 +92,21 @@ ИначеЕсли ПараметрыФормы.Свойство("ВидПроверки") Тогда - ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("КонтрольВеденияУчетаКлиент.ОткрытьОтчетПоПроблемам", "ВидПроверки", ПараметрыФормы.ВидПроверки, КонтрольВеденияУчетаСлужебный.ОписаниеТипаВидПроверки()); + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("КонтрольВеденияУчетаКлиент.ОткрытьОтчетПоПроблемам", "ВидПроверки", + ПараметрыФормы.ВидПроверки, КонтрольВеденияУчетаСлужебный.ОписаниеТипаВидПроверки()); - ПодробнаяИнформацияПоВидамПроверки = КонтрольВеденияУчета.ПодробнаяИнформацияПоВидамПроверки(ПараметрыФормы.ВидПроверки); - Если ПодробнаяИнформацияПоВидамПроверки.Количество() = 0 Тогда + ПодробнаяИнформацияПоВидамПроверок = КонтрольВеденияУчета.ПодробнаяИнформацияПоВидамПроверок(ПараметрыФормы.ВидПроверки); + Если ПодробнаяИнформацияПоВидамПроверок.Количество() = 0 Тогда Отказ = Истина; Иначе - - СписокПроверокПередОбновлением = Новый СписокЗначений; - СписокПроверокПередОбновлением.ЗагрузитьЗначения(ОбщегоНазначенияКлиентСервер.СвернутьМассив(ПодробнаяИнформацияПоВидамПроверки.ВыгрузитьКолонку("ПравилоПроверки"))); - - КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Вставить("СписокПроблем", СписокПроверокПередОбновлением); - + КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Вставить("СписокПроблем", ПодготовитьСписокПроверок(ОбщегоНазначенияКлиентСервер.СвернутьМассив( + ПодробнаяИнформацияПоВидамПроверок.ВыгрузитьКолонку("ПравилоПроверки")))); КонецЕсли; ИначеЕсли ПараметрыФормы.Свойство("ПараметрКоманды") Тогда Если ТипЗнч(ПараметрыФормы.ПараметрКоманды) = Тип("Массив") И ПараметрыФормы.ПараметрКоманды.Количество() > 0 Тогда - - СписокПроверок = Новый СписокЗначений; - СписокПроверок.ЗагрузитьЗначения(ПараметрыФормы.ПараметрКоманды); - - КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Вставить("СписокПроблем", СписокПроверок); - + КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Вставить("СписокПроблем", ПодготовитьСписокПроверок(ПараметрыФормы.ПараметрКоманды)); КонецЕсли; КонецЕсли; @@ -158,35 +136,30 @@ // Пользовательские настройки, которые будут загружены в компоновщик настроек после его инициализации. // Неопределено когда пользовательские настройки не надо загружать (уже загружены ранее). // -// Примеры: -// 1. Компоновщик отчета инициализируется на основании схемы из общих макетов: -// Если КлючСхемы <> "1" Тогда -// КлючСхемы = "1"; -// СхемаКД = ПолучитьОбщийМакет("МояОбщаяСхемаКомпоновки"); -// ОтчетыСервер.ПодключитьСхему(ЭтотОбъект, Контекст, СхемаКД, КлючСхемы); -// КонецЕсли; +// Варианты вызова: +// Если КлючСхемы <> "1" Тогда +// КлючСхемы = "1"; +// СхемаКД = ПолучитьОбщийМакет("МояОбщаяСхемаКомпоновки"); +// ОтчетыСервер.ПодключитьСхему(ЭтотОбъект, Контекст, СхемаКД, КлючСхемы); +// КонецЕсли; - компоновщик отчета инициализируется на основании схемы из общих макетов. +// Если ТипЗнч(НовыеПользовательскиеНастройкиКД) = Тип("ПользовательскиеНастройкиКомпоновкиДанных") Тогда +// ПолноеИмяОбъектаМетаданных = ""; +// Для Каждого ЭлементКД Из НовыеПользовательскиеНастройкиКД.Элементы Цикл +// Если ТипЗнч(ЭлементКД) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда +// ИмяПараметра = Строка(ЭлементКД.Параметр); +// Если ИмяПараметра = "ОбъектМетаданных" Тогда +// ПолноеИмяОбъектаМетаданных = ЭлементКД.Значение; +// КонецЕсли; +// КонецЕсли; +// КонецЦикла; +// Если КлючСхемы <> ПолноеИмяОбъектаМетаданных Тогда +// КлючСхемы = ПолноеИмяОбъектаМетаданных; +// СхемаКД = Новый СхемаКомпоновкиДанных; +// ОтчетыСервер.ПодключитьСхему(ЭтотОбъект, Контекст, СхемаКД, КлючСхемы); +// КонецЕсли; +// КонецЕсли; - схема зависит от значения параметра, выведенного в пользовательские настройки отчета. // -// 2. Схема зависит от значения параметра, выведенного в пользовательские настройки отчета: -// Если ТипЗнч(НовыеПользовательскиеНастройкиКД) = Тип("ПользовательскиеНастройкиКомпоновкиДанных") Тогда -// ПолноеИмяОбъектаМетаданных = ""; -// Для Каждого ЭлементКД Из НовыеПользовательскиеНастройкиКД.Элементы Цикл -// Если ТипЗнч(ЭлементКД) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда -// ИмяПараметра = Строка(ЭлементКД.Параметр); -// Если ИмяПараметра = "ОбъектМетаданных" Тогда -// ПолноеИмяОбъектаМетаданных = ЭлементКД.Значение; -// КонецЕсли; -// КонецЕсли; -// КонецЦикла; -// Если КлючСхемы <> ПолноеИмяОбъектаМетаданных Тогда -// КлючСхемы = ПолноеИмяОбъектаМетаданных; -// СхемаКД = Новый СхемаКомпоновкиДанных; -// // Наполнение схемы... -// ОтчетыСервер.ПодключитьСхему(ЭтотОбъект, Контекст, СхемаКД, КлючСхемы); -// КонецЕсли; -// КонецЕсли; -// -Процедура ПередЗагрузкойНастроекВКомпоновщик(Контекст, КлючСхемы, КлючВарианта, НовыеНастройкиКД, - НовыеПользовательскиеНастройкиКД) Экспорт +Процедура ПередЗагрузкойНастроекВКомпоновщик(Контекст, КлючСхемы, КлючВарианта, НовыеНастройкиКД, НовыеПользовательскиеНастройкиКД) Экспорт ПараметрВыводитьОтветственного = КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("ВыводитьОтветственного")); Если ПараметрВыводитьОтветственного <> Неопределено И НовыеПользовательскиеНастройкиКД <> Неопределено Тогда @@ -204,14 +177,12 @@ КонецПроцедуры // Вызывается в обработчике одноименного события формы отчета после выполнения кода формы. +// Более подробное описание можно найти в синтакс-помощнике, а именно, в разделе расширений +// управляемой формы для отчета. // // Параметры: -// Форма - УправляемаяФорма - Форма отчета. -// НовыеНастройкиКД - НастройкиКомпоновкиДанных - Настройки для загрузки в компоновщик настроек. -// -// См. также: -// "Расширение управляемой формы для отчета.ПередЗагрузкойВариантаНаСервере" в синтакс-помощнике. -// ОтчетыПереопределяемый.ПередЗагрузкойВариантаНаСервере(). +// Форма - УправляемаяФорма - форма отчета. +// НовыеНастройкиКД - НастройкиКомпоновкиДанных - настройки для загрузки в компоновщик настроек. // Процедура ПередЗагрузкойВариантаНаСервере(Форма, НовыеНастройкиКД) Экспорт @@ -247,7 +218,7 @@ СтандартнаяОбработка = Ложь; - ПроверкиВеденияУчета = КонтрольВеденияУчетаПовтИсп.ПроверкиВеденияУчета(); + ПроверкиВеденияУчета = КонтрольВеденияУчетаСлужебныйПовтИсп.ПроверкиВеденияУчета(); НастройкиКД = КомпоновщикНастроек.ПолучитьНастройки(); КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; @@ -262,49 +233,77 @@ ПроцессорВывода.Вывести(ПроцессорКомпоновки); - ДоопределитьГотовыйМакет(ДокументРезультат); + ДоопределитьГотовыйМакет(ДокументРезультат, СтруктураОтчетаНеИзменена()); КонецПроцедуры -Процедура ДоопределитьГотовыйМакет(ДокументРезультат) +Процедура ДоопределитьГотовыйМакет(ДокументРезультат, СтруктураОтчетаНеИзменена) - ДоопределитьШапку(ДокументРезультат); + ДоопределитьШапку(ДокументРезультат, СтруктураОтчетаНеИзменена); - ДоопределитьВыводИтогов(ДокументРезультат); + ДоопределитьВыводИтогов(ДокументРезультат, СтруктураОтчетаНеИзменена); ПроставитьГиперссылкиРешений(ДокументРезультат); КонецПроцедуры -Процедура ДоопределитьШапку(ДокументРезультат) +Процедура ДоопределитьШапку(ДокументРезультат, СтруктураОтчетаНеИзменена) - ПерваяСтрока = 0; - ПоследняяСтрока = 0; - - ВысотаТаблицы = ДокументРезультат.ВысотаТаблицы; - - Для ИндексСтрок = 1 По ВысотаТаблицы Цикл + Если СтруктураОтчетаНеИзменена Тогда - ИмяОбласти = "R" + Формат(ИндексСтрок, "ЧГ=0"); - Область = ДокументРезультат.Область(ИмяОбласти); + ПерваяСтрока = 0; + ПоследняяСтрока = 0; - Если СтрНайти(Область.Текст, "[ЗаголовокСкрыт]") <> 0 Тогда - Если ПерваяСтрока = 0 Тогда - ПерваяСтрока = ИндексСтрок; + ВысотаТаблицы = ДокументРезультат.ВысотаТаблицы; + + Для ИндексСтрок = 1 По ВысотаТаблицы Цикл + + ИмяОбласти = "R" + Формат(ИндексСтрок, "ЧГ=0"); + Область = ДокументРезультат.Область(ИмяОбласти); + + Если СтрНайти(Область.Текст, "[ЗаголовокСкрыт]") <> 0 Тогда + Если ПерваяСтрока = 0 Тогда + ПерваяСтрока = ИндексСтрок; + КонецЕсли; + ПоследняяСтрока = ПоследняяСтрока + 1; КонецЕсли; - ПоследняяСтрока = ПоследняяСтрока + 1; - КонецЕсли; + + КонецЦикла; - КонецЦикла; - - ДокументРезультат.УдалитьОбласть(ДокументРезультат.Область("R" + Формат(ПерваяСтрока, "ЧГ=0") + ":R" + Формат(ПерваяСтрока + ПоследняяСтрока - 1, "ЧГ=0")), - ТипСмещенияТабличногоДокумента.ПоВертикали); + ДокументРезультат.УдалитьОбласть(ДокументРезультат.Область("R" + Формат(ПерваяСтрока, "ЧГ=0") + ":R" + Формат(ПерваяСтрока + ПоследняяСтрока - 1, "ЧГ=0")), + ТипСмещенияТабличногоДокумента.ПоВертикали); - ДокументРезультат.ФиксацияСверху = ПерваяСтрока - 1; + ДокументРезультат.ФиксацияСверху = ПерваяСтрока - 1; + + Иначе + + ШиринаТаблицы = ДокументРезультат.ШиринаТаблицы; + ВысотаТаблицы = ДокументРезультат.ВысотаТаблицы; + + Для ИндексСтрок = 1 По ВысотаТаблицы Цикл + + Для ИндексКолонок = 1 По ШиринаТаблицы Цикл + + ИмяОбласти = "R" + Формат(ИндексСтрок, "ЧГ=0") + "C" + Формат(ИндексКолонок, "ЧГ=0"); + Область = ДокументРезультат.Область(ИмяОбласти); + + Если СтрНайти(Область.Текст, "[ЗаголовокСкрыт]") <> 0 Тогда + Область.Текст = СтрЗаменить(Область.Текст, "[ЗаголовокСкрыт]", ""); + КонецЕсли; + + КонецЦикла; + + КонецЦикла; + + КонецЕсли КонецПроцедуры -Процедура ДоопределитьВыводИтогов(ДокументРезультат) +Процедура ДоопределитьВыводИтогов(ДокументРезультат, СтруктураОтчетаНеИзменена) + + Если Не СтруктураОтчетаНеИзменена Тогда + Возврат; + КонецЕсли; ШиринаТаблицы = ДокументРезультат.ШиринаТаблицы; ВысотаТаблицы = ДокументРезультат.ВысотаТаблицы; @@ -327,7 +326,7 @@ Область = ДокументРезультат.Область(ИмяОбласти); ТекстОбласти = СокрЛП(ВРег(Область.Текст)); - Если ТекстОбласти = НСтр("ru = 'ОШИБКА'") + Если ТекстОбласти = НСтр("ru = 'ОШИБКА'") Или ТекстОбласти = НСтр("ru = 'ВОЗМОЖНЫЕ ПРИЧИНЫ'") Или ТекстОбласти = НСтр("ru = 'РЕКОМЕНДАЦИИ'") Или ТекстОбласти = НСтр("ru = 'РЕШЕНИЕ'") Тогда @@ -450,6 +449,39 @@ КонецПроцедуры +Функция ПодготовитьСписокПроверок(МассивПроверок) + + СписокПроверок = Новый СписокЗначений; + ПервыйЭлемент = МассивПроверок.Получить(0); + + Если Не ОбщегоНазначения.ЗначениеСсылочногоТипа(ПервыйЭлемент) Тогда + СписокПроверок.ЗагрузитьЗначения(МассивПроверок); + Иначе + ТекстЗапроса = + "ВЫБРАТЬ + | Таблица.Ссылка КАК Ссылка, + | ПРЕДСТАВЛЕНИЕ(Таблица.Ссылка) КАК ПредставлениеСсылки + |ИЗ + | &Таблица КАК Таблица + |ГДЕ + | Таблица.Ссылка В(&МассивСсылок)"; + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&Таблица", ПервыйЭлемент.Метаданные().ПолноеИмя()); + Запрос = Новый Запрос(ТекстЗапроса); + Запрос.УстановитьПараметр("МассивСсылок", МассивПроверок); + + РезультатЗапроса = Запрос.Выполнить().Выгрузить(); + Для Каждого ЭлементРезультата Из РезультатЗапроса Цикл + СписокПроверок.Добавить(ЭлементРезультата.Ссылка, ЭлементРезультата.ПредставлениеСсылки); + КонецЦикла; + + Запрос = Неопределено; + КонецЕсли; + + Возврат СписокПроверок; + +КонецФункции + #КонецОбласти #Область ПрограммныеНастройкиСКД @@ -515,6 +547,11 @@ Процедура УстановитьОтборПоСпискуПроблем(ОтборНастроекКД, ВидСравнения, ЗначениеОтбора) + ПредставлениеОтбора = ""; + Для Каждого ЭлементСпискаОтбора Из ЗначениеОтбора Цикл + ПредставлениеОтбора = ПредставлениеОтбора + ?(ЗначениеЗаполнено(ПредставлениеОтбора), "; ", "") + Лев(ЭлементСпискаОтбора.Представление, 25) + "..."; + КонецЦикла; + ЭлементыОтбора = ОтборНастроекКД.Элементы; ЭлементОтбора = ЭлементыОтбора.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); @@ -522,6 +559,7 @@ ЭлементОтбора.ВидСравнения = ВидСравнения; ЭлементОтбора.ПравоеЗначение = ЗначениеОтбора; ЭлементОтбора.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; + ЭлементОтбора.Представление = НСтр("ru = 'Правило проверки В списке'") + " """ + ПредставлениеОтбора + """"; ЭлементОтбора.Использование = Истина; КонецПроцедуры @@ -572,7 +610,12 @@ Функция НайтиПолеГруппировки(Структура, ИмяПоля) - Группировка = НайтиГруппировку(Структура, ИмяПоля); + Группировка = НайтиГруппировку(Структура, ИмяПоля); + + Если Группировка = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + ПоляГруппировки = Группировка.ПоляГруппировки.Элементы; НайденноеПоле = Неопределено; @@ -589,4 +632,436 @@ #КонецОбласти +#Область СлужебныеПроцедурыИФункции + +Функция СтруктураОтчетаНеИзменена(ИсходнаяСтруктура = Неопределено, КонечнаяСтруктура = Неопределено) + + ИсходнаяСтруктура = СтруктураОтчетаДеревом(СхемаКомпоновкиДанных.НастройкиПоУмолчанию); + КонечнаяСтруктура = СтруктураОтчетаДеревом(КомпоновщикНастроек.Настройки); + Возврат ДеревьяИдентичны(ИсходнаяСтруктура, КонечнаяСтруктура); + +КонецФункции + +Функция ДеревьяИдентичны(ПервоеДерево, ВтороеДерево, ДеревьяИдентичны = Истина, СвойстваДляСравнения = Неопределено) + + Если СвойстваДляСравнения = Неопределено Тогда + СвойстваДляСравнения = Новый Массив; + СвойстваДляСравнения.Добавить("Тип"); + СвойстваДляСравнения.Добавить("Подтип"); + СвойстваДляСравнения.Добавить("ЕстьСтруктура"); + КонецЕсли; + + СтрокиПервогоДерева = ПервоеДерево.Строки; + СтрокиВторогоДерева = ВтороеДерево.Строки; + + КоличествоСтрокПервогоДерева = СтрокиПервогоДерева.Количество(); + КоличествоСтрокиВторогоДерева = СтрокиВторогоДерева.Количество(); + + Если КоличествоСтрокПервогоДерева <> КоличествоСтрокиВторогоДерева Тогда + ДеревьяИдентичны = Ложь; + КонецЕсли; + + Для ИндексСтроки = 0 По КоличествоСтрокПервогоДерева - 1 Цикл + + ТекущаяСтрокаПервогоДерева = СтрокиПервогоДерева.Получить(ИндексСтроки); + ТекущаяСтрокаВторогоДерева = СтрокиВторогоДерева.Получить(ИндексСтроки); + + Для Каждого СвойствоДляСравнения Из СвойстваДляСравнения Цикл + + Если ТекущаяСтрокаПервогоДерева[СвойствоДляСравнения] <> ТекущаяСтрокаВторогоДерева[СвойствоДляСравнения] Тогда + ДеревьяИдентичны = Ложь; + КонецЕсли; + + КонецЦикла; + + Если Не НастройкиУзловКДИдентичны(ТекущаяСтрокаПервогоДерева.УзелКД, ТекущаяСтрокаВторогоДерева.УзелКД) Тогда + ДеревьяИдентичны = Ложь; + КонецЕсли; + + ДеревьяИдентичны(ТекущаяСтрокаПервогоДерева, ТекущаяСтрокаВторогоДерева, ДеревьяИдентичны, СвойстваДляСравнения); + + КонецЦикла; + + Возврат ДеревьяИдентичны; + +КонецФункции + +Функция НастройкиУзловКДИдентичны(ПервыйУзелКД, ВторойУзелКД) + + Если ТипЗнч(ПервыйУзелКД) <> ТипЗнч(ВторойУзелКД) Тогда + Возврат Ложь; + КонецЕсли; + + Если ТипЗнч(ПервыйУзелКД) = Тип("НастройкиКомпоновкиДанных") Тогда + + Если Не ВыбранныеПоляИдентичны(ПервыйУзелКД, ВторойУзелКД) Тогда + Возврат Ложь; + КонецЕсли; + + Если Не ПользовательскиеПоляИдентичны(ПервыйУзелКД, ВторойУзелКД) Тогда + Возврат Ложь; + КонецЕсли; + + ИначеЕсли ТипЗнч(ПервыйУзелКД) = Тип("ТаблицаКомпоновкиДанных") Тогда + + Если Не СвойстваТаблицКомпоновкиИдентичны(ПервыйУзелКД, ВторойУзелКД) Тогда + Возврат Ложь; + КонецЕсли; + + Если Не ВыбранныеПоляИдентичны(ПервыйУзелКД, ВторойУзелКД) Тогда + Возврат Ложь; + КонецЕсли; + + ИначеЕсли ТипЗнч(ПервыйУзелКД) = Тип("КоллекцияЭлементовСтруктурыТаблицыКомпоновкиДанных") Тогда + + Если Не СвойстваКоллекцийЭлементовСтруктурыТаблицыКомпоновкиДанныхИдентичны(ПервыйУзелКД, ВторойУзелКД) Тогда + Возврат Ложь; + КонецЕсли; + + ИначеЕсли ТипЗнч(ПервыйУзелКД) = Тип("ГруппировкаТаблицыКомпоновкиДанных") Или ТипЗнч(ПервыйУзелКД) = Тип("ГруппировкаКомпоновкиДанных") Тогда + + Если Не СвойстваГруппировокКомпоновкиИдентичны(ПервыйУзелКД, ВторойУзелКД) Тогда + Возврат Ложь; + КонецЕсли; + + Если Не ВыбранныеПоляИдентичны(ПервыйУзелКД, ВторойУзелКД) Тогда + Возврат Ложь; + КонецЕсли; + + Если Не ПоляГруппировокКомпоновкиИдентичны(ПервыйУзелКД, ВторойУзелКД) Тогда + Возврат Ложь; + КонецЕсли; + + КонецЕсли; + + Возврат Истина; + +КонецФункции + +Функция ВыбранныеПоляИдентичны(ПервыйУзелКД, ВторойУзелКД) + + ВыбранныеПоляПервогоУзла = ПервыйУзелКД.Выбор.Элементы; + ВыбранныеПоляВторогоУзла = ВторойУзелКД.Выбор.Элементы; + + КоличествоВыбранныхПолейПервогоУзла = ВыбранныеПоляПервогоУзла.Количество(); + КоличествоВыбранныхПолейВторогоУзла = ВыбранныеПоляВторогоУзла.Количество(); + + Если КоличествоВыбранныхПолейПервогоУзла <> КоличествоВыбранныхПолейВторогоУзла Тогда + Возврат Ложь; + КонецЕсли; + + СвойстваВыбранныхПолей = Новый Массив; + + Для Индекс = 0 По КоличествоВыбранныхПолейПервогоУзла - 1 Цикл + + ТекущаяСтрокаПервойКоллекции = ВыбранныеПоляПервогоУзла.Получить(Индекс); + ТекущаяСтрокаВторойКоллекции = ВыбранныеПоляВторогоУзла.Получить(Индекс); + + Если ТипЗнч(ТекущаяСтрокаПервойКоллекции) <> ТипЗнч(ТекущаяСтрокаВторойКоллекции) Тогда + Возврат Ложь; + КонецЕсли; + + Если ТипЗнч(ТекущаяСтрокаПервойКоллекции) = Тип("АвтоВыбранноеПолеКомпоновкиДанных") Тогда + + СвойстваВыбранныхПолей.Добавить("Использование"); + СвойстваВыбранныхПолей.Добавить("Родитель"); + + ИначеЕсли ТипЗнч(ТекущаяСтрокаПервойКоллекции) = Тип("ВыбранноеПолеКомпоновкиДанных") Тогда + + СвойстваВыбранныхПолей.Добавить("Заголовок"); + СвойстваВыбранныхПолей.Добавить("Использование"); + СвойстваВыбранныхПолей.Добавить("Поле"); + СвойстваВыбранныхПолей.Добавить("РежимОтображения"); + СвойстваВыбранныхПолей.Добавить("Родитель"); + + ИначеЕсли ТипЗнч(ТекущаяСтрокаПервойКоллекции) = Тип("ГруппаВыбранныхПолейКомпоновкиДанных") Тогда + + Возврат Истина; + + КонецЕсли; + + Если Не СравнитьСущностиПоСвойствам(ТекущаяСтрокаПервойКоллекции, ТекущаяСтрокаВторойКоллекции, СвойстваВыбранныхПолей) Тогда + Возврат Ложь; + КонецЕсли; + + КонецЦикла; + + Возврат Истина; + +КонецФункции + +Функция СвойстваТаблицКомпоновкиИдентичны(ПерваяТаблица, ВтораяТаблица) + + СвойстваТаблицыКомпоновки = Новый Массив; + СвойстваТаблицыКомпоновки.Добавить("Идентификатор"); + СвойстваТаблицыКомпоновки.Добавить("ИдентификаторПользовательскойНастройки"); + СвойстваТаблицыКомпоновки.Добавить("Имя"); + СвойстваТаблицыКомпоновки.Добавить("Использование"); + СвойстваТаблицыКомпоновки.Добавить("ПредставлениеПользовательскойНастройки"); + СвойстваТаблицыКомпоновки.Добавить("РежимОтображения"); + + Если Не СравнитьСущностиПоСвойствам(ПерваяТаблица, ВтораяТаблица, СвойстваТаблицыКомпоновки) Тогда + Возврат Ложь; + КонецЕсли; + + Возврат Истина; + +КонецФункции + +Функция СвойстваГруппировокКомпоновкиИдентичны(ПерваяТаблица, ВтораяТаблица) + + СвойстваТаблицыКомпоновки = Новый Массив; + СвойстваТаблицыКомпоновки.Добавить("Идентификатор"); + СвойстваТаблицыКомпоновки.Добавить("ИдентификаторПользовательскойНастройки"); + СвойстваТаблицыКомпоновки.Добавить("Имя"); + СвойстваТаблицыКомпоновки.Добавить("Использование"); + СвойстваТаблицыКомпоновки.Добавить("ПредставлениеПользовательскойНастройки"); + СвойстваТаблицыКомпоновки.Добавить("РежимОтображения"); + СвойстваТаблицыКомпоновки.Добавить("Состояние"); + + Если Не СравнитьСущностиПоСвойствам(ПерваяТаблица, ВтораяТаблица, СвойстваТаблицыКомпоновки) Тогда + Возврат Ложь; + КонецЕсли; + + Возврат Истина; + +КонецФункции + +Функция СвойстваКоллекцийЭлементовСтруктурыТаблицыКомпоновкиДанныхИдентичны(ПерваяКоллекция, ВтораяКоллекция) + + СвойстваКоллекции = Новый Массив; + СвойстваКоллекции.Добавить("ИдентификаторПользовательскойНастройки"); + СвойстваКоллекции.Добавить("ПредставлениеПользовательскойНастройки"); + СвойстваКоллекции.Добавить("РежимОтображения"); + + Если Не СравнитьСущностиПоСвойствам(ПерваяКоллекция, ВтораяКоллекция, СвойстваКоллекции) Тогда + Возврат Ложь; + КонецЕсли; + + Возврат Истина; + +КонецФункции + +Функция ПоляГруппировокКомпоновкиИдентичны(ПерваяГруппировка, ВтораяГруппировка) + + ПерваяКоллекцияПолей = ПерваяГруппировка.ПоляГруппировки.Элементы; + ВтораяКоллекцияПолей = ВтораяГруппировка.ПоляГруппировки.Элементы; + + КоличествоПолейВПервойКоллекции = ПерваяКоллекцияПолей.Количество(); + КоличествоПолейВоВторойКоллекции = ВтораяКоллекцияПолей.Количество(); + + СвойстваПолей = Новый Массив; + СвойстваПолей.Добавить("Использование"); + СвойстваПолей.Добавить("КонецПериода"); + СвойстваПолей.Добавить("НачалоПериода"); + СвойстваПолей.Добавить("Поле"); + СвойстваПолей.Добавить("ТипГруппировки"); + СвойстваПолей.Добавить("ТипДополнения"); + + Если КоличествоПолейВПервойКоллекции <> КоличествоПолейВоВторойКоллекции Тогда + Возврат Ложь; + КонецЕсли; + + Для Индекс = 0 По КоличествоПолейВПервойКоллекции - 1 Цикл + + ТекущаяСтрокаПервогоПоля = ПерваяКоллекцияПолей.Получить(Индекс); + ТекущаяСтрокаВторогоПоля = ВтораяКоллекцияПолей.Получить(Индекс); + + Если Не СравнитьСущностиПоСвойствам(ТекущаяСтрокаПервогоПоля, ТекущаяСтрокаВторогоПоля, СвойстваПолей) Тогда + Возврат Ложь; + КонецЕсли; + + КонецЦикла; + + Возврат Истина; + +КонецФункции + +Функция ПользовательскиеПоляИдентичны(ПервыеНастройкиКД, ВторыеНастройкиКД) + + Если ПервыеНастройкиКД.ПользовательскиеПоля.Элементы.Количество() <> ВторыеНастройкиКД.ПользовательскиеПоля.Элементы.Количество() Тогда + Возврат Ложь; + КонецЕсли; + + Возврат Истина; + +КонецФункции + +Функция СравнитьСущностиПоСвойствам(ПерваяСущность, ВтораяСущность, Свойства) + + Для Каждого Свойство Из Свойства Цикл + + Если ЭтоИсключение(ПерваяСущность, Свойство) Тогда + Продолжить; + КонецЕсли; + + Если ПерваяСущность[Свойство] <> ВтораяСущность[Свойство] Тогда + Возврат Ложь + КонецЕсли; + + КонецЦикла; + + Возврат Истина; + +КонецФункции + +Функция ЭтоИсключение(ПерваяСущность, Свойство) + + Если ТипЗнч(ПерваяСущность) = Тип("ГруппировкаТаблицыКомпоновкиДанных") Тогда + + Если ПерваяСущность.Имя = "Ответственный" И Свойство = "Состояние" Тогда + Возврат Истина; + КонецЕсли; + + ИначеЕсли ТипЗнч(ПерваяСущность) = Тип("ПолеГруппировкиКомпоновкиДанных") Тогда + + Если ПерваяСущность.Поле = Новый ПолеКомпоновкиДанных("Ответственный") И Свойство = "Использование" Тогда + Возврат Истина; + КонецЕсли; + + КонецЕсли; + + Возврат Ложь; + +КонецФункции + +Функция СтруктураОтчетаДеревом(НастройкиКД) + + ДеревоСтруктуры = ДеревоСтруктуры(); + СтрокаДереваСтруктуры = ЗарегистрироватьУзелДереваВарианта(НастройкиКД, НастройкиКД, ДеревоСтруктуры.Строки); + Возврат ДеревоСтруктуры; + +КонецФункции + +Функция ДеревоСтруктуры() + + ДеревоСтруктуры = Новый ДеревоЗначений; + + КолонкиДереваСтруктуры = ДеревоСтруктуры.Колонки; + КолонкиДереваСтруктуры.Добавить("УзелКД"); + КолонкиДереваСтруктуры.Добавить("ДоступнаяНастройкаКД"); + КолонкиДереваСтруктуры.Добавить("Тип", Новый ОписаниеТипов("Строка")); + КолонкиДереваСтруктуры.Добавить("Подтип", Новый ОписаниеТипов("Строка")); + КолонкиДереваСтруктуры.Добавить("ЕстьСтруктура", Новый ОписаниеТипов("Булево")); + + Возврат ДеревоСтруктуры; + +КонецФункции + +Функция ЗарегистрироватьУзелДереваВарианта(НастройкиКД, УзелКД, НаборСтрокДерева, ПодТип = "") + + СтрокаДерева = НаборСтрокДерева.Добавить(); + СтрокаДерева.УзелКД = УзелКД; + СтрокаДерева.Тип = ТипНастройкиСтрокой(ТипЗнч(УзелКД)); + СтрокаДерева.Подтип = ПодТип; + + Если СтрНайти("Настройки, Группировка, ГруппировкаДиаграммы, ГруппировкаТаблицы", СтрокаДерева.Тип) <> 0 Тогда + СтрокаДерева.ЕстьСтруктура = Истина; + ИначеЕсли СтрНайти("Таблица, Диаграмма, НастройкиВложенногоОбъекта, + |КоллекцияЭлементовСтруктурыТаблицы, КоллекцияЭлементовСтруктурыДиаграммы", СтрокаДерева.Тип) = 0 Тогда + Возврат СтрокаДерева; + КонецЕсли; + + Если СтрокаДерева.ЕстьСтруктура Тогда + Для Каждого ВложенныйЭлемент Из УзелКД.Структура Цикл + ЗарегистрироватьУзелДереваВарианта(НастройкиКД, ВложенныйЭлемент, СтрокаДерева.Строки); + КонецЦикла; + КонецЕсли; + + Если СтрокаДерева.Тип = "Таблица" Тогда + ЗарегистрироватьУзелДереваВарианта(НастройкиКД, УзелКД.Строки, СтрокаДерева.Строки, "ТаблицаСтроки"); + ЗарегистрироватьУзелДереваВарианта(НастройкиКД, УзелКД.Колонки, СтрокаДерева.Строки, "ТаблицаКолонки"); + ИначеЕсли СтрокаДерева.Тип = "Диаграмма" Тогда + ЗарегистрироватьУзелДереваВарианта(НастройкиКД, УзелКД.Точки, СтрокаДерева.Строки, "ДиаграммаТочки"); + ЗарегистрироватьУзелДереваВарианта(НастройкиКД, УзелКД.Серии, СтрокаДерева.Строки, "ДиаграммаСерии"); + ИначеЕсли СтрокаДерева.Тип = "КоллекцияЭлементовСтруктурыТаблицы" + Или СтрокаДерева.Тип = "КоллекцияЭлементовСтруктурыДиаграммы" Тогда + Для Каждого ВложенныйЭлемент Из УзелКД Цикл + ЗарегистрироватьУзелДереваВарианта(НастройкиКД, ВложенныйЭлемент, СтрокаДерева.Строки); + КонецЦикла; + ИначеЕсли СтрокаДерева.Тип = "НастройкиВложенногоОбъекта" Тогда + ЗарегистрироватьУзелДереваВарианта(НастройкиКД, УзелКД.Настройки, СтрокаДерева.Строки); + КонецЕсли; + + Возврат СтрокаДерева; + +КонецФункции + +Функция ТипНастройкиСтрокой(Тип) Экспорт + Если Тип = Тип("НастройкиКомпоновкиДанных") Тогда + Возврат "Настройки"; + ИначеЕсли Тип = Тип("НастройкиВложенногоОбъектаКомпоновкиДанных") Тогда + Возврат "НастройкиВложенногоОбъекта"; + + ИначеЕсли Тип = Тип("ОтборКомпоновкиДанных") Тогда + Возврат "Отбор"; + ИначеЕсли Тип = Тип("ЭлементОтбораКомпоновкиДанных") Тогда + Возврат "ЭлементОтбора"; + ИначеЕсли Тип = Тип("ГруппаЭлементовОтбораКомпоновкиДанных") Тогда + Возврат "ГруппаЭлементовОтбора"; + + ИначеЕсли Тип = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда + Возврат "ЗначениеПараметраНастроек"; + + ИначеЕсли Тип = Тип("ГруппировкаКомпоновкиДанных") Тогда + Возврат "Группировка"; + ИначеЕсли Тип = Тип("ПоляГруппировкиКомпоновкиДанных") Тогда + Возврат "ПоляГруппировки"; + ИначеЕсли Тип = Тип("КоллекцияПолейГруппировкиКомпоновкиДанных") Тогда + Возврат "КоллекцияПолейГруппировки"; + ИначеЕсли Тип = Тип("ПолеГруппировкиКомпоновкиДанных") Тогда + Возврат "ПолеГруппировки"; + ИначеЕсли Тип = Тип("АвтоПолеГруппировкиКомпоновкиДанных") Тогда + Возврат "АвтоПолеГруппировки"; + + ИначеЕсли Тип = Тип("ВыбранныеПоляКомпоновкиДанных") Тогда + Возврат "ВыбранныеПоля"; + ИначеЕсли Тип = Тип("ВыбранноеПолеКомпоновкиДанных") Тогда + Возврат "ВыбранноеПоле"; + ИначеЕсли Тип = Тип("ГруппаВыбранныхПолейКомпоновкиДанных") Тогда + Возврат "ГруппаВыбранныхПолей"; + ИначеЕсли Тип = Тип("АвтоВыбранноеПолеКомпоновкиДанных") Тогда + Возврат "АвтоВыбранноеПоле"; + + ИначеЕсли Тип = Тип("ПорядокКомпоновкиДанных") Тогда + Возврат "Порядок"; + ИначеЕсли Тип = Тип("ЭлементПорядкаКомпоновкиДанных") Тогда + Возврат "ЭлементПорядка"; + ИначеЕсли Тип = Тип("АвтоЭлементПорядкаКомпоновкиДанных") Тогда + Возврат "АвтоЭлементПорядка"; + + ИначеЕсли Тип = Тип("УсловноеОформлениеКомпоновкиДанных") Тогда + Возврат "УсловноеОформление"; + ИначеЕсли Тип = Тип("ЭлементУсловногоОформленияКомпоновкиДанных") Тогда + Возврат "ЭлементУсловногоОформления"; + + ИначеЕсли Тип = Тип("СтруктураНастроекКомпоновкиДанных") Тогда + Возврат "СтруктураНастроек"; + ИначеЕсли Тип = Тип("КоллекцияЭлементовСтруктурыНастроекКомпоновкиДанных") Тогда + Возврат "КоллекцияЭлементовСтруктурыНастроек"; + + ИначеЕсли Тип = Тип("ТаблицаКомпоновкиДанных") Тогда + Возврат "Таблица"; + ИначеЕсли Тип = Тип("ГруппировкаТаблицыКомпоновкиДанных") Тогда + Возврат "ГруппировкаТаблицы"; + ИначеЕсли Тип = Тип("КоллекцияЭлементовСтруктурыТаблицыКомпоновкиДанных") Тогда + Возврат "КоллекцияЭлементовСтруктурыТаблицы"; + + ИначеЕсли Тип = Тип("ДиаграммаКомпоновкиДанных") Тогда + Возврат "Диаграмма"; + ИначеЕсли Тип = Тип("ГруппировкаДиаграммыКомпоновкиДанных") Тогда + Возврат "ГруппировкаДиаграммы"; + ИначеЕсли Тип = Тип("КоллекцияЭлементовСтруктурыДиаграммыКомпоновкиДанных") Тогда + Возврат "КоллекцияЭлементовСтруктурыДиаграммы"; + + ИначеЕсли Тип = Тип("ЗначенияПараметровДанныхКомпоновкиДанных") Тогда + Возврат "ЗначенияПараметровДанных"; + + Иначе + Возврат ""; + КонецЕсли; +КонецФункции + +#КонецОбласти + #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Reports/РезультатыПроверкиУчета/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs b/SSL/src/Reports/РезультатыПроверкиУчета/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs index 0a1f522ba..ff2c50718 100644 --- a/SSL/src/Reports/РезультатыПроверкиУчета/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs +++ b/SSL/src/Reports/РезультатыПроверкиУчета/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs @@ -776,6 +776,7 @@ + ОбщаяТаблица Ответственный diff --git a/SSL/src/Reports/УниверсальныйОтчет/Forms/ФормаОтчета/Attributes/ОтчетТабличныйДокумент/ExtInfo/SpreadsheetData.mxlx b/SSL/src/Reports/УниверсальныйОтчет/Forms/ФормаОтчета/Attributes/ОтчетТабличныйДокумент/ExtInfo/SpreadsheetData.mxlx new file mode 100644 index 000000000..70a095c0a --- /dev/null +++ b/SSL/src/Reports/УниверсальныйОтчет/Forms/ФормаОтчета/Attributes/ОтчетТабличныйДокумент/ExtInfo/SpreadsheetData.mxlx @@ -0,0 +1,7 @@ + + + + 0 + + 0 + \ No newline at end of file diff --git a/SSL/src/Reports/УниверсальныйОтчет/Forms/ФормаОтчета/Module.bsl b/SSL/src/Reports/УниверсальныйОтчет/Forms/ФормаОтчета/Module.bsl index edb8d53bc..39bd5f185 100644 --- a/SSL/src/Reports/УниверсальныйОтчет/Forms/ФормаОтчета/Module.bsl +++ b/SSL/src/Reports/УниверсальныйОтчет/Forms/ФормаОтчета/Module.bsl @@ -228,7 +228,6 @@ #Если ТолстыйКлиентОбычноеПриложение ИЛИ ТолстыйКлиентУправляемоеПриложение Тогда Если Тип(Результат) = Тип("СхемаКомпоновкиДанных") Тогда НастройкиОтчета.АдресСхемы = ПоместитьВоВременноеХранилище(Результат, УникальныйИдентификатор); - АдресСхемы = НастройкиОтчета.АдресСхемы; Путь = ПолучитьИмяВременногоФайла(); @@ -518,19 +517,11 @@ &НаКлиенте Процедура ОтчетТабличныйДокументОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка) - Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.АнализЖурналаРегистрации") Тогда - МодульАнализЖурналаРегистрацииКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("АнализЖурналаРегистрацииКлиент"); - МодульАнализЖурналаРегистрацииКлиент.ФормаОтчетаОбработкаРасшифровки(ЭтотОбъект, Элемент, Расшифровка, СтандартнаяОбработка); - КонецЕсли; ОтчетыКлиентПереопределяемый.ОбработкаРасшифровки(ЭтотОбъект, Элемент, Расшифровка, СтандартнаяОбработка); КонецПроцедуры &НаКлиенте Процедура ОтчетТабличныйДокументОбработкаДополнительнойРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка) - Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.АнализЖурналаРегистрации") Тогда - МодульАнализЖурналаРегистрацииКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("АнализЖурналаРегистрацииКлиент"); - МодульАнализЖурналаРегистрацииКлиент.ФормаОтчетаОбработкаДополнительнойРасшифровки(ЭтотОбъект, Элемент, Расшифровка, СтандартнаяОбработка); - КонецЕсли; ОтчетыКлиентПереопределяемый.ОбработкаДополнительнойРасшифровки(ЭтотОбъект, Элемент, Расшифровка, СтандартнаяОбработка); КонецПроцедуры @@ -843,7 +834,6 @@ ЗаполнитьЗначенияСвойств(СостояниеДоИзменения, Элементы.ОтчетТабличныйДокумент.ОтображениеСостояния); Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.ДополнительныеСвойства.Вставить("ФормироватьСразу", ФормироватьСразу); - ПользовательскиеНастройкиМодифицированы = Истина; ЗаполнитьЗначенияСвойств(Элементы.ОтчетТабличныйДокумент.ОтображениеСостояния, СостояниеДоИзменения); @@ -1350,7 +1340,7 @@ КонецПроцедуры &НаСервере -Функция БыстрыеНастройкиЗаполнить(Знач ПараметрыКлиента) +Процедура БыстрыеНастройкиЗаполнить(Знач ПараметрыКлиента) // Вставка значений по умолчанию для обязательных ключей параметров заполнения. ПараметрыЗаполнения = БыстрыеНастройкиДозаполнитьПараметры(ПараметрыКлиента); @@ -1413,7 +1403,7 @@ Информация.ДеревоВарианта.Колонки.Очистить(); Информация.НастройкиВарианта.Колонки.Очистить(); Информация.ПользовательскиеНастройки.Колонки.Очистить(); -КонецФункции +КонецПроцедуры &НаСервере Функция ФоновоеЗаданиеЗапустить(Знач ФормированиеПриОткрытии, Непосредственно) @@ -1882,10 +1872,6 @@ |РедактированиеТекста, КнопкаВыбора, КнопкаОткрытия, КнопкаОчистки, КнопкаРегулирования, АвтоОтметкаНезаполненного"); ПериодОкончание.УстановитьДействие("ПриИзменении", "Подключаемый_СтандартныйПериод_КонецПериода_ПриИзменении"); - // Значения. - НачалоПериода = СвойстваНастройки.Значение.ДатаНачала; - КонецПериода = СвойстваНастройки.Значение.ДатаОкончания; - // Кнопка выбора. КомандаВыбора = Форма.Команды.Добавить(КнопкаВыбораИмя); КомандаВыбора.Действие = "Подключаемый_ВыбратьПериод"; @@ -1917,7 +1903,6 @@ ГруппаКолонокИмя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонИмениЭлемента, "ГруппаКолонок"); КолонкаИспользованиеИмя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонИмениЭлемента, "Колонка_Использование"); КолонкаЗначениеИмя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонИмениЭлемента, "Колонка_Значение"); - КоманднаяПанельИмя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонИмениЭлемента, "КоманднаяПанель"); КнопкаПодборИмя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонИмениЭлемента, "Подбор"); КнопкаВставитьИмя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонИмениЭлемента, "ВставитьИзБуфера"); @@ -2306,7 +2291,6 @@ // Кэши для быстрого поиска с клиента. СоответствиеПользовательскихНастроек = Новый Соответствие; СоответствиеИменОбъектовМетаданных = Информация.СоответствиеИменОбъектовМетаданных; - СоответствиеОтключаемыхСвязей = Новый Соответствие; СоответствиеНастроекВарианта = Новый Соответствие; // Удаление реквизитов @@ -2331,20 +2315,15 @@ ИменаОсновныхРеквизитовФормы = Новый Соответствие; ИменаЭлементовДляУстановкиСвязей = Новый Соответствие; - ИменаФлажковИспользование = Новый Соответствие; - НастройкиСВидомСравненияРавно = Новый Соответствие; КомпоновщикНастроекКД = Отчет.КомпоновщикНастроек; ПользовательскиеНастройкиКД = КомпоновщикНастроекКД.ПользовательскиеНастройки; - НастройкиКД = КомпоновщикНастроекКД.ПолучитьНастройки(); ДополнительныеНастройкиЭлементов = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПользовательскиеНастройкиКД.ДополнительныеСвойства, "ЭлементыФормы"); Если ДополнительныеНастройкиЭлементов = Неопределено Тогда ДополнительныеНастройкиЭлементов = Новый Соответствие; КонецЕсли; - Режимы = РежимОтображенияЭлементаНастройкиКомпоновкиДанных; - ШаблонНастройки = Новый Структура("Тип, Подтип, Шаблон, СтрокаДерева, |ПользовательскаяНастройкаКД, Идентификатор, НастройкаВариантаКД, ДоступнаяНастройкаКД"); ШаблонНастройки.Вставить("Иерархия", Ложь); @@ -2507,70 +2486,6 @@ КонецЕсли; КонецПроцедуры -&НаСервере -Процедура РекурсивныйАнализНастроекКД(Коллекция, Соответствие) - Если Коллекция = Неопределено Тогда - РекурсивныйАнализНастроекКД(Отчет.КомпоновщикНастроек.Настройки.Отбор.Элементы, Соответствие); - РекурсивныйАнализНастроекКД(Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы, Соответствие); - РекурсивныйАнализНастроекКД(Отчет.КомпоновщикНастроек.ФиксированныеНастройки.Отбор.Элементы, Соответствие); - РекурсивныйАнализНастроекКД(Отчет.КомпоновщикНастроек.ФиксированныеНастройки.ПараметрыДанных.Элементы, Соответствие); - Иначе - // Регистрация значений включенных отборов и параметров КД, не выведенных в быстрый доступ. - Для Каждого НастройкаВарианта Из Коллекция Цикл - // ЭлементОтбораКомпоновкиДанных, ГруппаЭлементовОтбораКомпоновкиДанных, - // ЗначениеПараметраКомпоновкиДанных, ЗначениеПараметраНастроекКомпоновкиДанных. - Если ТипЗнч(НастройкаВарианта) = Тип("ЗначениеПараметраКомпоновкиДанных") Тогда - Значение = НастройкаВарианта.Значение; - Если ЗначениеИлиПолеКомпоновкиДанныхЗаполнено(Значение) Тогда - ПолеКД = Новый ПолеКомпоновкиДанных("ПараметрыДанных." + Строка(НастройкаВарианта.Параметр)); - Соответствие.Вставить(ПолеКД, Значение); - КонецЕсли; - РекурсивныйАнализНастроекКД(НастройкаВарианта.ЗначенияВложенныхПараметров, Соответствие); - Продолжить; - КонецЕсли; - - Если НастройкаВарианта.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ - И ЗначениеЗаполнено(НастройкаВарианта.ИдентификаторПользовательскойНастройки) Тогда - Продолжить; - КонецЕсли; - Если НастройкаВарианта.Использование <> Истина Тогда - Продолжить; - КонецЕсли; - - Если ТипЗнч(НастройкаВарианта) = Тип("ГруппаЭлементовОтбораКомпоновкиДанных") Тогда - РекурсивныйАнализНастроекКД(НастройкаВарианта.Элементы, Соответствие); - Продолжить; - КонецЕсли; - - Если ТипЗнч(НастройкаВарианта) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда - Значение = НастройкаВарианта.ПравоеЗначение; - Если ЗначениеИлиПолеКомпоновкиДанныхЗаполнено(Значение) Тогда - ПолеКД = НастройкаВарианта.ЛевоеЗначение; - Соответствие.Вставить(ПолеКД, Значение); - КонецЕсли; - ИначеЕсли ТипЗнч(НастройкаВарианта) = Тип("ЗначениеПараметраКомпоновкиДанных") Тогда - Значение = НастройкаВарианта.ПравоеЗначение; - Если ЗначениеИлиПолеКомпоновкиДанныхЗаполнено(Значение) Тогда - ПолеКД = Новый ПолеКомпоновкиДанных("ПараметрыДанных." + Строка(НастройкаВарианта.Параметр)); - Соответствие.Вставить(ПолеКД, Значение); - КонецЕсли; - РекурсивныйАнализНастроекКД(НастройкаВарианта.ЗначенияВложенныхПараметров, Соответствие); - КонецЕсли; - - КонецЦикла; - КонецЕсли; - -КонецПроцедуры - -&НаСервере -Функция ЗначениеИлиПолеКомпоновкиДанныхЗаполнено(Значение) - Если ТипЗнч(Значение) = Тип("ПолеКомпоновкиДанных") Тогда - Возврат ЗначениеЗаполнено(Строка(Значение)); - Иначе - Возврат ЗначениеЗаполнено(Значение); - КонецЕсли; -КонецФункции - &НаСервере Процедура ЗаполнитьКомандыВыбораВариантов() ВариантыФормы = РеквизитФормыВЗначение("ДобавленныеВарианты"); @@ -2593,7 +2508,6 @@ ТаблицаВариантов.Сортировать("Наименование Возр, КлючВарианта Возр"); Группа = Элементы.ВариантыОтчета; - КнопкиГруппы = Группа.ПодчиненныеЭлементы; ПоследнийИндекс = ВариантыФормы.Количество() - 1; Для Каждого СтрокаТаблицы Из ТаблицаВариантов Цикл Если СтрокаТаблицы.ТолькоДляАвтора = Истина diff --git a/SSL/src/Reports/УниверсальныйОтчет/ManagerModule.bsl b/SSL/src/Reports/УниверсальныйОтчет/ManagerModule.bsl index a2890fb15..39f954a19 100644 --- a/SSL/src/Reports/УниверсальныйОтчет/ManagerModule.bsl +++ b/SSL/src/Reports/УниверсальныйОтчет/ManagerModule.bsl @@ -66,16 +66,16 @@ ТекстЗапроса = ТекстЗапроса + "* ИЗ " + ИмяТипаДанных + "." + ПараметрыОтчета.ПолноеИмяОбъектаМетаданных; - ЭтоТабличнаяЧастьИсточника = Ложь; + ЭтоТабличнаяЧасть = Ложь; Если НЕ ПустаяСтрока(ПараметрыОтчета.ИмяТаблицы) Тогда Если ИмяТипаДанных = "Справочник" ИЛИ ИмяТипаДанных = "Документ" Или ИмяТипаДанных = "Задача" ИЛИ ИмяТипаДанных = "БизнесПроцесс" Тогда - // Если это табличная часть объекта то нужно проверить ее наличие. - Если Метаданные[ПараметрыОтчета.ТипОбъектаМетаданных][ПараметрыОтчета.ПолноеИмяОбъектаМетаданных].ТабличныеЧасти.Найти(ПараметрыОтчета.ИмяТаблицы) <> Неопределено Тогда + // Если это табличная часть объекта, то нужно проверить ее наличие. + Если Метаданные[ПараметрыОтчета.ТипОбъектаМетаданных][ПараметрыОтчета.ПолноеИмяОбъектаМетаданных].ТабличныеЧасти.Найти(ПараметрыОтчета.ИмяТаблицы) <> Неопределено Тогда ТекстЗапроса = ТекстЗапроса + "." + ПараметрыОтчета.ИмяТаблицы; - ЭтоТабличнаяЧастьИсточника = Истина; + ЭтоТабличнаяЧасть = Истина; КонецЕсли; Иначе ТекстЗапроса = ТекстЗапроса + "." + ПараметрыОтчета.ИмяТаблицы; @@ -99,7 +99,7 @@ Если ПараметрыОтчета.ТипОбъектаМетаданных = "Документы" Или ПараметрыОтчета.ТипОбъектаМетаданных = "Задачи" Или ПараметрыОтчета.ТипОбъектаМетаданных = "БизнесПроцессы" Тогда - Если ЭтоТабличнаяЧастьИсточника Тогда + Если ЭтоТабличнаяЧасть Тогда ТекстЗапроса = ТекстЗапроса + " |{ГДЕ | (ИсточникДанных.Ссылка.Дата >= &НачалоПериода),(ИсточникДанных.Ссылка.Дата <= &КонецПериода)}"; @@ -321,85 +321,260 @@ КонецФункции -Процедура ДобавитьПоляНабораДанных(ПараметрыОтчета, СхемаКомпоновкиДанных) +Процедура ДобавитьИтоги(ПараметрыОтчета, СхемаКомпоновкиДанных) Если ПараметрыОтчета.ТипОбъектаМетаданных = "РегистрыНакопления" ИЛИ ПараметрыОтчета.ТипОбъектаМетаданных = "РегистрыСведений" ИЛИ ПараметрыОтчета.ТипОбъектаМетаданных = "РегистрыБухгалтерии" ИЛИ ПараметрыОтчета.ТипОбъектаМетаданных = "РегистрыРасчета" Тогда - ОбъектМетаданных = Метаданные[ПараметрыОтчета.ТипОбъектаМетаданных][ПараметрыОтчета.ПолноеИмяОбъектаМетаданных]; - // Добавляем измерения - Для каждого Измерение Из ОбъектМетаданных.Измерения Цикл - ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Измерение.Имя, Измерение.Синоним); + ДобавитьИтогиРегистра(ПараметрыОтчета, СхемаКомпоновкиДанных); + + ИначеЕсли ПараметрыОтчета.ТипОбъектаМетаданных = "Документы" + ИЛИ ПараметрыОтчета.ТипОбъектаМетаданных = "Справочники" + ИЛИ ПараметрыОтчета.ТипОбъектаМетаданных = "БизнесПроцессы" + ИЛИ ПараметрыОтчета.ТипОбъектаМетаданных = "Задачи" Тогда + + ДобавитьИтогиОбъекта(ПараметрыОтчета, СхемаКомпоновкиДанных); + КонецЕсли; + +КонецПроцедуры + +Процедура ДобавитьИтогиОбъекта(Знач ПараметрыОтчета, Знач СхемаКомпоновкиДанных) + + ОбъектМетаданных = Метаданные[ПараметрыОтчета.ТипОбъектаМетаданных][ПараметрыОтчета.ПолноеИмяОбъектаМетаданных]; + Если ПараметрыОтчета.ИмяТаблицы <> "" Тогда + ТабличнаяЧасть = ОбъектМетаданных.ТабличныеЧасти.Найти(ПараметрыОтчета.ИмяТаблицы); + Если ТабличнаяЧасть <> Неопределено Тогда + ОбъектМетаданных = ТабличнаяЧасть; + КонецЕсли; + КонецЕсли; + + // Добавляем итоги по числовым реквизитам + Для каждого Реквизит Из ОбъектМетаданных.Реквизиты Цикл + ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Реквизит.Имя, Реквизит.Синоним); + Если Реквизит.Тип.СодержитТип(Тип("Число")) Тогда + ДобавитьПолеИтога(СхемаКомпоновкиДанных, Реквизит.Имя); + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +Процедура ДобавитьИтогиРегистра(Знач ПараметрыОтчета, Знач СхемаКомпоновкиДанных) + + ОбъектМетаданных = Метаданные[ПараметрыОтчета.ТипОбъектаМетаданных][ПараметрыОтчета.ПолноеИмяОбъектаМетаданных]; + + // Добавляем измерения + Для каждого Измерение Из ОбъектМетаданных.Измерения Цикл + ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Измерение.Имя, Измерение.Синоним); + КонецЦикла; + + // Добавляем реквизиты + Если ПустаяСтрока(ПараметрыОтчета.ИмяТаблицы) Тогда + Для каждого Реквизит Из ОбъектМетаданных.Реквизиты Цикл + ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Реквизит.Имя, Реквизит.Синоним); + КонецЦикла; + КонецЕсли; + + // Добавляем поля периода + Если ПараметрыОтчета.ИмяТаблицы = "ОстаткиИОбороты" + ИЛИ ПараметрыОтчета.ИмяТаблицы = "Обороты" + ИЛИ ПараметрыОтчета.ТипОбъектаМетаданных = "РегистрыБухгалтерии" И ПараметрыОтчета.ИмяТаблицы = ""Тогда + ДобавитьПоляПериодаВНаборДанных(СхемаКомпоновкиДанных.НаборыДанных[0]); + КонецЕсли; + + // Для регистров бухгалтерии важна настройка ролей. + Если ПараметрыОтчета.ТипОбъектаМетаданных = "РегистрыБухгалтерии" Тогда + + ПолеСчет = ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], "Счет", НСтр("ru = 'Счет'")); + ПолеСчет.Роль.ВыражениеВидаСчета = "Счет.Вид"; + ПолеСчет.Роль.Счет = Истина; + + Для НомерСубконто = 1 По 3 Цикл + ПолеСубконто = ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], "Субконто" + НомерСубконто, НСтр("ru = 'Субконто'") + " " + НомерСубконто); + ПолеСубконто.Роль.Измерение = Истина; + ПолеСубконто.Роль.ИгнорироватьЗначенияNULL = Истина; КонецЦикла; - // Добавляем реквизиты - Если ПустаяСтрока(ПараметрыОтчета.ИмяТаблицы) Тогда - Для каждого Реквизит Из ОбъектМетаданных.Реквизиты Цикл - ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Реквизит.Имя, Реквизит.Синоним); - КонецЦикла; - КонецЕсли; - - // Добавляем поля периода - Если ПараметрыОтчета.ИмяТаблицы = "ОстаткиИОбороты" - ИЛИ ПараметрыОтчета.ИмяТаблицы = "Обороты" - ИЛИ ПараметрыОтчета.ТипОбъектаМетаданных = "РегистрыБухгалтерии" И ПараметрыОтчета.ИмяТаблицы = ""Тогда - ДобавитьПоляПериодаВНаборДанных(СхемаКомпоновкиДанных.НаборыДанных[0]); - КонецЕсли; - - // Для регистров бухгалтерии важна настройка ролей. - Если ПараметрыОтчета.ТипОбъектаМетаданных = "РегистрыБухгалтерии" Тогда + КонецЕсли; + + // Добавляем ресурсы + Для каждого Ресурс Из ОбъектМетаданных.Ресурсы Цикл + Если ПараметрыОтчета.ИмяТаблицы = "Обороты" Тогда - ПолеСчет = ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], "Счет", НСтр("ru = 'Счет'")); - ПолеСчет.Роль.ВыражениеВидаСчета = "Счет.Вид"; - ПолеСчет.Роль.Счет = Истина; - - Для НомерСубконто = 1 По 3 Цикл - ПолеСубконто = ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], "Субконто" + НомерСубконто, НСтр("ru = 'Субконто'") + " " + НомерСубконто); - ПолеСубконто.Роль.Измерение = Истина; - ПолеСубконто.Роль.ИгнорироватьЗначенияNULL = Истина; - КонецЦикла; - - КонецЕсли; - - // Добавляем ресурсы - Для каждого Ресурс Из ОбъектМетаданных.Ресурсы Цикл - Если ПараметрыОтчета.ИмяТаблицы = "Обороты" Тогда + ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "Оборот", Ресурс.Синоним); + ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "Оборот"); + + Если ПараметрыОтчета.ТипОбъектаМетаданных = "РегистрыБухгалтерии" Тогда + ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "ОборотДт", Ресурс.Синоним + " " + НСтр("ru = 'оборот Дт'"), Ресурс.Имя + "ОборотДт"); + ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "ОборотДт"); + ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "ОборотКт", Ресурс.Синоним + " " + НСтр("ru = 'оборот Кт'"), Ресурс.Имя + "ОборотКт"); + ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "ОборотКт"); + Если НЕ Ресурс.Балансовый Тогда + ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "КорОборот", Ресурс.Синоним + " " + НСтр("ru = 'кор. оборот'"), Ресурс.Имя + "КорОборот"); + ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "КорОборот"); + ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "КорОборотДт", Ресурс.Синоним + " " + НСтр("ru = 'кор. оборот Дт'"), Ресурс.Имя + "КорОборотДт"); + ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "КорОборотДт"); + ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "КорОборотКт", Ресурс.Синоним + " " + НСтр("ru = 'кор. оборот Кт'"), Ресурс.Имя + "КорОборотКт"); + ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "КорОборотКт"); + КонецЕсли; + КонецЕсли; + + ИначеЕсли ПараметрыОтчета.ИмяТаблицы = "ОборотыДтКт" Тогда + + Если Ресурс.Балансовый Тогда ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "Оборот", Ресурс.Синоним); ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "Оборот"); + Иначе + ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "ОборотДт", Ресурс.Синоним + " " + НСтр("ru = 'оборот Дт'"), Ресурс.Имя + "ОборотДт"); + ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "ОборотДт"); + ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "ОборотКт", Ресурс.Синоним + " " + НСтр("ru = 'оборот Кт'"), Ресурс.Имя + "ОборотКт"); + ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "ОборотКт"); + КонецЕсли; + + ИначеЕсли ПараметрыОтчета.ИмяТаблицы = "ДвиженияССубконто" Тогда + + Если Ресурс.Балансовый Тогда + ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя, Ресурс.Синоним); + ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя); + Иначе + ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "Дт", Ресурс.Синоним + " " + НСтр("ru = 'Дт'"), Ресурс.Имя + "Дт"); + ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "Дт"); + ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "Кт", Ресурс.Синоним + " " + НСтр("ru = 'Кт'"), Ресурс.Имя + "Кт"); + ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "Кт"); + КонецЕсли; + + ИначеЕсли ПараметрыОтчета.ИмяТаблицы = "ОстаткиИОбороты" Тогда + + ПолеНабора = ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "НачальныйОстаток", Ресурс.Синоним + " " + НСтр("ru = 'нач. остаток'"), Ресурс.Имя + "НачальныйОстаток"); + ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "НачальныйОстаток"); + + Если ПараметрыОтчета.ТипОбъектаМетаданных = "РегистрыБухгалтерии" Тогда - Если ПараметрыОтчета.ТипОбъектаМетаданных = "РегистрыБухгалтерии" Тогда - ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "ОборотДт", Ресурс.Синоним + " " + НСтр("ru = 'оборот Дт'"), Ресурс.Имя + "ОборотДт"); - ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "ОборотДт"); - ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "ОборотКт", Ресурс.Синоним + " " + НСтр("ru = 'оборот Кт'"), Ресурс.Имя + "ОборотКт"); - ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "ОборотКт"); - - Если НЕ Ресурс.Балансовый Тогда - ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "КорОборот", Ресурс.Синоним + " " + НСтр("ru = 'кор. оборот'"), Ресурс.Имя + "КорОборот"); - ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "КорОборот"); - ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "КорОборотДт", Ресурс.Синоним + " " + НСтр("ru = 'кор. оборот Дт'"), Ресурс.Имя + "КорОборотДт"); - ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "КорОборотДт"); - ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "КорОборотКт", Ресурс.Синоним + " " + НСтр("ru = 'кор. оборот Кт'"), Ресурс.Имя + "КорОборотКт"); - ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "КорОборотКт"); - КонецЕсли; - КонецЕсли; + ПолеНабора.Роль.Остаток = Истина; + ПолеНабора.Роль.ТипОстатка = ТипОстаткаКомпоновкиДанных.НачальныйОстаток; + ПолеНабора.Роль.ГруппаОстатка = "Ост" + Ресурс.Имя; + ПолеНабора.Роль.ПолеСчета = "Счет"; - ИначеЕсли ПараметрыОтчета.ИмяТаблицы = "ОборотыДтКт" Тогда + ПолеНабора = ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "НачальныйОстатокДт", Ресурс.Синоним + " " + НСтр("ru = 'нач. остаток Дт'"), Ресурс.Имя + "НачальныйОстатокДт"); + ПолеНабора.Роль.Остаток = Истина; + ПолеНабора.Роль.ТипОстатка = ТипОстаткаКомпоновкиДанных.НачальныйОстаток; + ПолеНабора.Роль.ТипБухгалтерскогоОстатка = ТипБухгалтерскогоОстаткаКомпоновкиДанных.Дебет; + ПолеНабора.Роль.ПолеСчета = "Счет"; + ПолеНабора.Роль.ГруппаОстатка = "Ост" + Ресурс.Имя; + ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "НачальныйОстатокДт"); - Если Ресурс.Балансовый Тогда - ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "Оборот", Ресурс.Синоним); - ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "Оборот"); - Иначе - ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "ОборотДт", Ресурс.Синоним + " " + НСтр("ru = 'оборот Дт'"), Ресурс.Имя + "ОборотДт"); - ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "ОборотДт"); - ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "ОборотКт", Ресурс.Синоним + " " + НСтр("ru = 'оборот Кт'"), Ресурс.Имя + "ОборотКт"); - ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "ОборотКт"); - КонецЕсли; + ПолеНабора = ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "НачальныйОстатокКт", Ресурс.Синоним + " " + НСтр("ru = 'нач. остаток Кт'"), Ресурс.Имя + "НачальныйОстатокКт"); + ПолеНабора.Роль.Остаток = Истина; + ПолеНабора.Роль.ТипОстатка = ТипОстаткаКомпоновкиДанных.НачальныйОстаток; + ПолеНабора.Роль.ТипБухгалтерскогоОстатка = ТипБухгалтерскогоОстаткаКомпоновкиДанных.Кредит; + ПолеНабора.Роль.ПолеСчета = "Счет"; + ПолеНабора.Роль.ГруппаОстатка = "Ост" + Ресурс.Имя; + ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "НачальныйОстатокКт"); - ИначеЕсли ПараметрыОтчета.ИмяТаблицы = "ДвиженияССубконто" Тогда + ПолеНабора = ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "НачальныйРазвернутыйОстатокДт", Ресурс.Синоним + " " + НСтр("ru = 'нач. развернутый остаток Дт'"), Ресурс.Имя + "НачальныйРазвернутыйОстатокДт"); + ПолеНабора.Роль.Остаток = Истина; + ПолеНабора.Роль.ТипОстатка = ТипОстаткаКомпоновкиДанных.НачальныйОстаток; + ПолеНабора.Роль.ТипБухгалтерскогоОстатка = ТипБухгалтерскогоОстаткаКомпоновкиДанных.Нет; + ПолеНабора.Роль.ПолеСчета = "Счет"; + ПолеНабора.Роль.ГруппаОстатка = "РазвОст" + Ресурс.Имя; + ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "НачальныйРазвернутыйОстатокДт"); + ПолеНабора =ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "НачальныйРазвернутыйОстатокКт", Ресурс.Синоним + " " + НСтр("ru = 'нач. развернутый остаток Кт'"), Ресурс.Имя + "НачальныйРазвернутыйОстатокКт"); + ПолеНабора.Роль.Остаток = Истина; + ПолеНабора.Роль.ТипОстатка = ТипОстаткаКомпоновкиДанных.НачальныйОстаток; + ПолеНабора.Роль.ТипБухгалтерскогоОстатка = ТипБухгалтерскогоОстаткаКомпоновкиДанных.Нет; + ПолеНабора.Роль.ПолеСчета = "Счет"; + ПолеНабора.Роль.ГруппаОстатка = "РазвОст" + Ресурс.Имя; + ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "НачальныйРазвернутыйОстатокКт"); + КонецЕсли; + + ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "Оборот", Ресурс.Синоним + " " + НСтр("ru = 'оборот'"), Ресурс.Имя + "Оборот"); + ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "Оборот"); + + Если ПараметрыОтчета.ТипОбъектаМетаданных = "РегистрыНакопления" Тогда + ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "Приход", Ресурс.Синоним + " " + НСтр("ru = 'приход'"), Ресурс.Имя + "Приход"); + ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "Приход"); + + ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "Расход", Ресурс.Синоним + " " + НСтр("ru = 'расход'"), Ресурс.Имя + "Расход"); + ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "Расход"); + ИначеЕсли ПараметрыОтчета.ТипОбъектаМетаданных = "РегистрыБухгалтерии" Тогда + ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "ОборотДт", Ресурс.Синоним + " " + НСтр("ru = 'оборот Дт'"), Ресурс.Имя + "ОборотДт"); + ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "ОборотДт"); + + ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "ОборотКт", Ресурс.Синоним + " " + НСтр("ru = 'оборот Кт'"), Ресурс.Имя + "ОборотКт"); + ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "ОборотКт"); + КонецЕсли; + + ПолеНабора = ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "КонечныйОстаток", Ресурс.Синоним + " " + НСтр("ru = 'кон. остаток'"), Ресурс.Имя + "КонечныйОстаток"); + ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "КонечныйОстаток"); + + Если ПараметрыОтчета.ТипОбъектаМетаданных = "РегистрыБухгалтерии" Тогда + + ПолеНабора.Роль.Остаток = Истина; + ПолеНабора.Роль.ТипОстатка = ТипОстаткаКомпоновкиДанных.КонечныйОстаток; + ПолеНабора.Роль.ПолеСчета = "Счет"; + ПолеНабора.Роль.ГруппаОстатка = "Ост" + Ресурс.Имя; + + ПолеНабора = ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "КонечныйОстатокДт", Ресурс.Синоним + " " + НСтр("ru = 'кон. остаток Дт'"), Ресурс.Имя + "КонечныйОстатокДт"); + ПолеНабора.Роль.Остаток = Истина; + ПолеНабора.Роль.ТипОстатка = ТипОстаткаКомпоновкиДанных.КонечныйОстаток; + ПолеНабора.Роль.ТипБухгалтерскогоОстатка = ТипБухгалтерскогоОстаткаКомпоновкиДанных.Дебет; + ПолеНабора.Роль.ПолеСчета = "Счет"; + ПолеНабора.Роль.ГруппаОстатка = "Ост" + Ресурс.Имя; + ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "КонечныйОстатокДт"); + + ПолеНабора = ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "КонечныйОстатокКт", Ресурс.Синоним + " " + НСтр("ru = 'кон. остаток Кт'"), Ресурс.Имя + "КонечныйОстатокКт"); + ПолеНабора.Роль.Остаток = Истина; + ПолеНабора.Роль.ТипОстатка = ТипОстаткаКомпоновкиДанных.КонечныйОстаток; + ПолеНабора.Роль.ТипБухгалтерскогоОстатка = ТипБухгалтерскогоОстаткаКомпоновкиДанных.Кредит; + ПолеНабора.Роль.ПолеСчета = "Счет"; + ПолеНабора.Роль.ГруппаОстатка = "Ост" + Ресурс.Имя; + ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "КонечныйОстатокКт"); + + ПолеНабора = ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "КонечныйРазвернутыйОстатокДт", Ресурс.Синоним + " " + НСтр("ru = 'кон. развернутый остаток Дт'"), Ресурс.Имя + "КонечныйРазвернутыйОстатокДт"); + ПолеНабора.Роль.Остаток = Истина; + ПолеНабора.Роль.ТипОстатка = ТипОстаткаКомпоновкиДанных.КонечныйОстаток; + ПолеНабора.Роль.ТипБухгалтерскогоОстатка = ТипБухгалтерскогоОстаткаКомпоновкиДанных.Нет; + ПолеНабора.Роль.ПолеСчета = "Счет"; + ПолеНабора.Роль.ГруппаОстатка = "РазвОст" + Ресурс.Имя; + ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "КонечныйРазвернутыйОстатокДт"); + + ПолеНабора = ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "КонечныйРазвернутыйОстатокКт", Ресурс.Синоним + " " + НСтр("ru = 'кон. развернутый остаток Кт'"), Ресурс.Имя + "КонечныйРазвернутыйОстатокКт"); + ПолеНабора.Роль.Остаток = Истина; + ПолеНабора.Роль.ТипОстатка = ТипОстаткаКомпоновкиДанных.КонечныйОстаток; + ПолеНабора.Роль.ТипБухгалтерскогоОстатка = ТипБухгалтерскогоОстаткаКомпоновкиДанных.Нет; + ПолеНабора.Роль.ПолеСчета = "Счет"; + ПолеНабора.Роль.ГруппаОстатка = "РазвОст" + Ресурс.Имя; + ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "КонечныйРазвернутыйОстатокКт"); + КонецЕсли; + + ИначеЕсли ПараметрыОтчета.ИмяТаблицы = "Остатки" Тогда + ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "Остаток", Ресурс.Синоним + " " + НСтр("ru = 'остаток'"), Ресурс.Имя + "Остаток"); + ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "Остаток"); + + ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "ОстатокДт", Ресурс.Синоним + " " + НСтр("ru = 'остаток Дт'"), Ресурс.Имя + "ОстатокДт"); + ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "ОстатокДт"); + + ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "ОстатокКт", Ресурс.Синоним + " " + НСтр("ru = 'остаток Кт'"), Ресурс.Имя + "ОстатокКт"); + ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "ОстатокКт"); + + ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "РазвернутыйОстатокДт", Ресурс.Синоним + " " + НСтр("ru = 'развернутый остаток Дт'"), Ресурс.Имя + "РазвернутыйОстатокДт"); + ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "РазвернутыйОстатокДт"); + + ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "РазвернутыйОстатокКт", Ресурс.Синоним + " " + НСтр("ru = 'развернутый остаток Кт'"), Ресурс.Имя + "РазвернутыйОстатокКт"); + ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "РазвернутыйОстатокКт"); + + ИначеЕсли ПараметрыОтчета.ТипОбъектаМетаданных = "РегистрыСведений" Тогда + + ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя, Ресурс.Синоним); + Если Ресурс.Тип.СодержитТип(Тип("Число")) Тогда + ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя); + КонецЕсли; + ИначеЕсли ПараметрыОтчета.ИмяТаблицы = "" Тогда + + Если ПараметрыОтчета.ТипОбъектаМетаданных = "РегистрыБухгалтерии" Тогда Если Ресурс.Балансовый Тогда ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя, Ресурс.Синоним); ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя); @@ -409,175 +584,14 @@ ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "Кт", Ресурс.Синоним + " " + НСтр("ru = 'Кт'"), Ресурс.Имя + "Кт"); ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "Кт"); КонецЕсли; - - ИначеЕсли ПараметрыОтчета.ИмяТаблицы = "ОстаткиИОбороты" Тогда - - ПолеНабора = ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "НачальныйОстаток", Ресурс.Синоним + " " + НСтр("ru = 'нач. остаток'"), Ресурс.Имя + "НачальныйОстаток"); - ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "НачальныйОстаток"); - - Если ПараметрыОтчета.ТипОбъектаМетаданных = "РегистрыБухгалтерии" Тогда - - ПолеНабора.Роль.Остаток = Истина; - ПолеНабора.Роль.ТипОстатка = ТипОстаткаКомпоновкиДанных.НачальныйОстаток; - ПолеНабора.Роль.ГруппаОстатка = "Ост" + Ресурс.Имя; - ПолеНабора.Роль.ПолеСчета = "Счет"; - - ПолеНабора = ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "НачальныйОстатокДт", Ресурс.Синоним + " " + НСтр("ru = 'нач. остаток Дт'"), Ресурс.Имя + "НачальныйОстатокДт"); - ПолеНабора.Роль.Остаток = Истина; - ПолеНабора.Роль.ТипОстатка = ТипОстаткаКомпоновкиДанных.НачальныйОстаток; - ПолеНабора.Роль.ТипБухгалтерскогоОстатка = ТипБухгалтерскогоОстаткаКомпоновкиДанных.Дебет; - ПолеНабора.Роль.ПолеСчета = "Счет"; - ПолеНабора.Роль.ГруппаОстатка = "Ост" + Ресурс.Имя; - ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "НачальныйОстатокДт"); - - ПолеНабора = ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "НачальныйОстатокКт", Ресурс.Синоним + " " + НСтр("ru = 'нач. остаток Кт'"), Ресурс.Имя + "НачальныйОстатокКт"); - ПолеНабора.Роль.Остаток = Истина; - ПолеНабора.Роль.ТипОстатка = ТипОстаткаКомпоновкиДанных.НачальныйОстаток; - ПолеНабора.Роль.ТипБухгалтерскогоОстатка = ТипБухгалтерскогоОстаткаКомпоновкиДанных.Кредит; - ПолеНабора.Роль.ПолеСчета = "Счет"; - ПолеНабора.Роль.ГруппаОстатка = "Ост" + Ресурс.Имя; - ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "НачальныйОстатокКт"); - - ПолеНабора = ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "НачальныйРазвернутыйОстатокДт", Ресурс.Синоним + " " + НСтр("ru = 'нач. развернутый остаток Дт'"), Ресурс.Имя + "НачальныйРазвернутыйОстатокДт"); - ПолеНабора.Роль.Остаток = Истина; - ПолеНабора.Роль.ТипОстатка = ТипОстаткаКомпоновкиДанных.НачальныйОстаток; - ПолеНабора.Роль.ТипБухгалтерскогоОстатка = ТипБухгалтерскогоОстаткаКомпоновкиДанных.Нет; - ПолеНабора.Роль.ПолеСчета = "Счет"; - ПолеНабора.Роль.ГруппаОстатка = "РазвОст" + Ресурс.Имя; - ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "НачальныйРазвернутыйОстатокДт"); - - ПолеНабора =ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "НачальныйРазвернутыйОстатокКт", Ресурс.Синоним + " " + НСтр("ru = 'нач. развернутый остаток Кт'"), Ресурс.Имя + "НачальныйРазвернутыйОстатокКт"); - ПолеНабора.Роль.Остаток = Истина; - ПолеНабора.Роль.ТипОстатка = ТипОстаткаКомпоновкиДанных.НачальныйОстаток; - ПолеНабора.Роль.ТипБухгалтерскогоОстатка = ТипБухгалтерскогоОстаткаКомпоновкиДанных.Нет; - ПолеНабора.Роль.ПолеСчета = "Счет"; - ПолеНабора.Роль.ГруппаОстатка = "РазвОст" + Ресурс.Имя; - ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "НачальныйРазвернутыйОстатокКт"); - КонецЕсли; - - ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "Оборот", Ресурс.Синоним + " " + НСтр("ru = 'оборот'"), Ресурс.Имя + "Оборот"); - ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "Оборот"); - - Если ПараметрыОтчета.ТипОбъектаМетаданных = "РегистрыНакопления" Тогда - ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "Приход", Ресурс.Синоним + " " + НСтр("ru = 'приход'"), Ресурс.Имя + "Приход"); - ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "Приход"); - - ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "Расход", Ресурс.Синоним + " " + НСтр("ru = 'расход'"), Ресурс.Имя + "Расход"); - ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "Расход"); - ИначеЕсли ПараметрыОтчета.ТипОбъектаМетаданных = "РегистрыБухгалтерии" Тогда - ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "ОборотДт", Ресурс.Синоним + " " + НСтр("ru = 'оборот Дт'"), Ресурс.Имя + "ОборотДт"); - ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "ОборотДт"); - - ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "ОборотКт", Ресурс.Синоним + " " + НСтр("ru = 'оборот Кт'"), Ресурс.Имя + "ОборотКт"); - ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "ОборотКт"); - КонецЕсли; - - ПолеНабора = ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "КонечныйОстаток", Ресурс.Синоним + " " + НСтр("ru = 'кон. остаток'"), Ресурс.Имя + "КонечныйОстаток"); - ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "КонечныйОстаток"); - - Если ПараметрыОтчета.ТипОбъектаМетаданных = "РегистрыБухгалтерии" Тогда - - ПолеНабора.Роль.Остаток = Истина; - ПолеНабора.Роль.ТипОстатка = ТипОстаткаКомпоновкиДанных.КонечныйОстаток; - ПолеНабора.Роль.ПолеСчета = "Счет"; - ПолеНабора.Роль.ГруппаОстатка = "Ост" + Ресурс.Имя; - - ПолеНабора = ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "КонечныйОстатокДт", Ресурс.Синоним + " " + НСтр("ru = 'кон. остаток Дт'"), Ресурс.Имя + "КонечныйОстатокДт"); - ПолеНабора.Роль.Остаток = Истина; - ПолеНабора.Роль.ТипОстатка = ТипОстаткаКомпоновкиДанных.КонечныйОстаток; - ПолеНабора.Роль.ТипБухгалтерскогоОстатка = ТипБухгалтерскогоОстаткаКомпоновкиДанных.Дебет; - ПолеНабора.Роль.ПолеСчета = "Счет"; - ПолеНабора.Роль.ГруппаОстатка = "Ост" + Ресурс.Имя; - ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "КонечныйОстатокДт"); - - ПолеНабора = ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "КонечныйОстатокКт", Ресурс.Синоним + " " + НСтр("ru = 'кон. остаток Кт'"), Ресурс.Имя + "КонечныйОстатокКт"); - ПолеНабора.Роль.Остаток = Истина; - ПолеНабора.Роль.ТипОстатка = ТипОстаткаКомпоновкиДанных.КонечныйОстаток; - ПолеНабора.Роль.ТипБухгалтерскогоОстатка = ТипБухгалтерскогоОстаткаКомпоновкиДанных.Кредит; - ПолеНабора.Роль.ПолеСчета = "Счет"; - ПолеНабора.Роль.ГруппаОстатка = "Ост" + Ресурс.Имя; - ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "КонечныйОстатокКт"); - - ПолеНабора = ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "КонечныйРазвернутыйОстатокДт", Ресурс.Синоним + " " + НСтр("ru = 'кон. развернутый остаток Дт'"), Ресурс.Имя + "КонечныйРазвернутыйОстатокДт"); - ПолеНабора.Роль.Остаток = Истина; - ПолеНабора.Роль.ТипОстатка = ТипОстаткаКомпоновкиДанных.КонечныйОстаток; - ПолеНабора.Роль.ТипБухгалтерскогоОстатка = ТипБухгалтерскогоОстаткаКомпоновкиДанных.Нет; - ПолеНабора.Роль.ПолеСчета = "Счет"; - ПолеНабора.Роль.ГруппаОстатка = "РазвОст" + Ресурс.Имя; - ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "КонечныйРазвернутыйОстатокДт"); - - ПолеНабора = ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "КонечныйРазвернутыйОстатокКт", Ресурс.Синоним + " " + НСтр("ru = 'кон. развернутый остаток Кт'"), Ресурс.Имя + "КонечныйРазвернутыйОстатокКт"); - ПолеНабора.Роль.Остаток = Истина; - ПолеНабора.Роль.ТипОстатка = ТипОстаткаКомпоновкиДанных.КонечныйОстаток; - ПолеНабора.Роль.ТипБухгалтерскогоОстатка = ТипБухгалтерскогоОстаткаКомпоновкиДанных.Нет; - ПолеНабора.Роль.ПолеСчета = "Счет"; - ПолеНабора.Роль.ГруппаОстатка = "РазвОст" + Ресурс.Имя; - ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "КонечныйРазвернутыйОстатокКт"); - КонецЕсли; - - ИначеЕсли ПараметрыОтчета.ИмяТаблицы = "Остатки" Тогда - ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "Остаток", Ресурс.Синоним + " " + НСтр("ru = 'остаток'"), Ресурс.Имя + "Остаток"); - ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "Остаток"); - - ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "ОстатокДт", Ресурс.Синоним + " " + НСтр("ru = 'остаток Дт'"), Ресурс.Имя + "ОстатокДт"); - ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "ОстатокДт"); - - ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "ОстатокКт", Ресурс.Синоним + " " + НСтр("ru = 'остаток Кт'"), Ресурс.Имя + "ОстатокКт"); - ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "ОстатокКт"); - - ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "РазвернутыйОстатокДт", Ресурс.Синоним + " " + НСтр("ru = 'развернутый остаток Дт'"), Ресурс.Имя + "РазвернутыйОстатокДт"); - ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "РазвернутыйОстатокДт"); - - ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "РазвернутыйОстатокКт", Ресурс.Синоним + " " + НСтр("ru = 'развернутый остаток Кт'"), Ресурс.Имя + "РазвернутыйОстатокКт"); - ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "РазвернутыйОстатокКт"); - - ИначеЕсли ПараметрыОтчета.ТипОбъектаМетаданных = "РегистрыСведений" Тогда - + Иначе ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя, Ресурс.Синоним); - Если Ресурс.Тип.СодержитТип(Тип("Число")) Тогда - ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя, Ресурс.Имя); - КонецЕсли; - ИначеЕсли ПараметрыОтчета.ИмяТаблицы = "" Тогда - - Если ПараметрыОтчета.ТипОбъектаМетаданных = "РегистрыБухгалтерии" Тогда - Если Ресурс.Балансовый Тогда - ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя, Ресурс.Синоним); - ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя); - Иначе - ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "Дт", Ресурс.Синоним + " " + НСтр("ru = 'Дт'"), Ресурс.Имя + "Дт"); - ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "Дт"); - ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "Кт", Ресурс.Синоним + " " + НСтр("ru = 'Кт'"), Ресурс.Имя + "Кт"); - ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "Кт"); - КонецЕсли; - Иначе - ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя, Ресурс.Синоним); - ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя); - КонецЕсли; - - КонецЕсли; - КонецЦикла; - - ИначеЕсли ПараметрыОтчета.ТипОбъектаМетаданных = "Документы" - ИЛИ ПараметрыОтчета.ТипОбъектаМетаданных = "Справочники" Тогда - - Если ПараметрыОтчета.ИмяТаблицы = "" Тогда - ОбъектМетаданных = Метаданные[ПараметрыОтчета.ТипОбъектаМетаданных][ПараметрыОтчета.ПолноеИмяОбъектаМетаданных]; - Иначе - ОбъектМетаданных = Метаданные[ПараметрыОтчета.ТипОбъектаМетаданных][ПараметрыОтчета.ПолноеИмяОбъектаМетаданных].ТабличныеЧасти.Найти(ПараметрыОтчета.ИмяТаблицы); - Если ОбъектМетаданных = Неопределено Тогда - ОбъектМетаданных = Метаданные[ПараметрыОтчета.ТипОбъектаМетаданных][ПараметрыОтчета.ПолноеИмяОбъектаМетаданных]; + ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя); КонецЕсли; + КонецЕсли; - - // Добавляем реквизиты - Для каждого Реквизит Из ОбъектМетаданных.Реквизиты Цикл - ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Реквизит.Имя, Реквизит.Синоним); - Если Реквизит.Тип.СодержитТип(Тип("Число")) Тогда - ДобавитьПолеИтога(СхемаКомпоновкиДанных, Реквизит.Имя); - КонецЕсли; - КонецЦикла; - КонецЕсли; - + КонецЦикла; + КонецПроцедуры Функция ДобавитьПоляПериодаВНаборДанных(НаборДанных) @@ -617,7 +631,7 @@ КонецФункции -// Добавляет в набор данных поле набора данных. +// Добавить поле в набор данных. Функция ДобавитьПолеНабораДанных(НаборДанных, Поле, Заголовок, ПутьКДанным = Неопределено) Если ПутьКДанным = Неопределено Тогда @@ -632,7 +646,7 @@ КонецФункции -// Функция добавляет поле итога в схему компоновки данных. Если параметр Выражение не указан, используется Сумма(ПутьКДанным). +// Добавить поле итога в схему компоновки данных. Если параметр Выражение не указан, используется Сумма(ПутьКДанным). Функция ДобавитьПолеИтога(СхемаКомпоновкиДанных, ПутьКДанным, Выражение = Неопределено) Если Выражение = Неопределено Тогда @@ -849,33 +863,36 @@ Функция ПолучитьТиповуюСхему(ПараметрыОтчета, НастройкиКД, НовыеПользовательскиеНастройкиКД) Экспорт - СхемаКД = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных"); + СхемаКомпоновкиДанных = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных"); - ИсточникДанных = СхемаКД.ИсточникиДанных.Добавить(); + ИсточникДанных = СхемаКомпоновкиДанных.ИсточникиДанных.Добавить(); ИсточникДанных.Имя = "ИсточникДанных1"; ИсточникДанных.ТипИсточникаДанных = "Local"; - НаборДанных = СхемаКД.НаборыДанных.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных")); + НаборДанных = СхемаКомпоновкиДанных.НаборыДанных.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных")); НаборДанных.Имя = "НаборДанных1"; НаборДанных.ИсточникДанных = ИсточникДанных.Имя; - СхемаКД.ПоляИтога.Очистить(); - СхемаКД.НаборыДанных[0].Запрос = ТекстЗапросаПоМетаданным(ПараметрыОтчета); + СхемаКомпоновкиДанных.ПоляИтога.Очистить(); + СхемаКомпоновкиДанных.НаборыДанных[0].Запрос = ТекстЗапросаПоМетаданным(ПараметрыОтчета); - ДобавитьПоляНабораДанных(ПараметрыОтчета, СхемаКД); + ДобавитьИтоги(ПараметрыОтчета, СхемаКомпоновкиДанных); - // Для справочников и планов видов расчета пользовательский параметр Период не выводится. + // Параметр Период не выводится для справочников, планов видов расчета и непериодических регистров сведений. Если ПараметрыОтчета.ТипОбъектаМетаданных = "Справочники" - Или ПараметрыОтчета.ТипОбъектаМетаданных = "ПланыВидовРасчета" Тогда - СхемаКД.Параметры.Период.ОграничениеИспользования = Истина; + Или ПараметрыОтчета.ТипОбъектаМетаданных = "ПланыВидовРасчета" + Или (ПараметрыОтчета.ТипОбъектаМетаданных = "РегистрыСведений" + И Метаданные[ПараметрыОтчета.ТипОбъектаМетаданных][ПараметрыОтчета.ПолноеИмяОбъектаМетаданных].ПериодичностьРегистраСведений + = Метаданные.СвойстваОбъектов.ПериодичностьРегистраСведений.Непериодический) Тогда + СхемаКомпоновкиДанных.Параметры.Период.ОграничениеИспользования = Истина; КонецЕсли; ДоступныеТаблицы = ДоступныеТаблицы(НастройкиКД, ПараметрыОтчета.ТипОбъектаМетаданных, ПараметрыОтчета.ПолноеИмяОбъектаМетаданных); Если ДоступныеТаблицы.Количество() <= 1 Тогда - СхемаКД.Параметры.ИмяТаблицы.ОграничениеИспользования = Истина; + СхемаКомпоновкиДанных.Параметры.ИмяТаблицы.ОграничениеИспользования = Истина; КонецЕсли; - Возврат СхемаКД; + Возврат СхемаКомпоновкиДанных; КонецФункции diff --git a/SSL/src/Reports/УниверсальныйОтчет/ObjectModule.bsl b/SSL/src/Reports/УниверсальныйОтчет/ObjectModule.bsl index 289bf2075..2a5f4f4ff 100644 --- a/SSL/src/Reports/УниверсальныйОтчет/ObjectModule.bsl +++ b/SSL/src/Reports/УниверсальныйОтчет/ObjectModule.bsl @@ -348,6 +348,13 @@ Иначе Отчеты.УниверсальныйОтчет.НастройкиКДПоУмолчаниюТиповойСхемы(ЭтотОбъект, ПараметрыОтчета, НовыеНастройкиКД, НовыеПользовательскиеНастройкиКД); КонецЕсли; + + Если ТипЗнч(Контекст) = Тип("УправляемаяФорма") Тогда + // Вызов переопределяемого модуля. + ОтчетыПереопределяемый.ПередЗагрузкойВариантаНаСервере(Контекст, НовыеНастройкиКД); + ПередЗагрузкойВариантаНаСервере(Контекст, НовыеНастройкиКД); + КонецЕсли; + КонецЕсли; КонецПроцедуры diff --git a/SSL/src/Roles/АдминистраторСистемы/Rights.rights b/SSL/src/Roles/АдминистраторСистемы/Rights.rights index 46944c3b5..08cb98693 100644 --- a/SSL/src/Roles/АдминистраторСистемы/Rights.rights +++ b/SSL/src/Roles/АдминистраторСистемы/Rights.rights @@ -1002,7 +1002,7 @@ - Constant.ЛогинДоступаКСервисуMorpher + Constant.УдалитьЛогинДоступаКСервисуMorpher Read true @@ -1073,93 +1073,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.УдалитьБлокировкиСеансовОбластиДанных @@ -1852,6 +1765,17 @@ true + + DataProcessor.НастройкиЦентраМониторинга + + Use + true + + + View + true + + DataProcessor.ОценкаПроизводительности.Command.ЭкспортЗамеровПроизводительности @@ -2562,6 +2486,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 + + InformationRegister.УровниСокращенийАдресныхСведений @@ -2585,6 +2596,13 @@ true + + DataProcessor.НастройкиЦентраМониторинга.Command.НастройкаОтправкиОтчетовОбОшибках + + View + true + + InformationRegister.АдресныеОбъекты.Command.ЗагрузитьАдресныйКлассификатор diff --git a/SSL/src/Roles/БазовыеПрава/Rights.rights b/SSL/src/Roles/БазовыеПрава/Rights.rights index 11cacc7a4..509da200f 100644 --- a/SSL/src/Roles/БазовыеПрава/Rights.rights +++ b/SSL/src/Roles/БазовыеПрава/Rights.rights @@ -2479,11 +2479,6 @@ Т ГДЕ // Т - псевдоним текущей таблицы (выбран коротким, чтобы сократить количество символов в тексте параметра-условия на языке запросов). -// Безусловная выборка групп в иерархическом объекте метаданных (если нужно). -#Если "#Параметр(3)" = "НеОграничиватьДоступКГруппам" #Тогда - Т.ЭтоГруппа ИЛИ -#КонецЕсли - ИСТИНА В ( // Проверка права пользователя на текущую таблицу в целом. // Права на таблицы формируются по составу ролей профиля группы доступа. @@ -2517,6 +2512,12 @@ И СоставыГруппПользователей.ГруппаПользователей = ГруппыДоступаПользователи.Пользователь ) ГДЕ + +// Безусловная выборка групп в иерархическом объекте метаданных (если нужно). +#Если "#Параметр(3)" = "НеОграничиватьДоступКГруппам" #Тогда + Т.ЭтоГруппа ИЛИ +#КонецЕсли + ( // Поиск значений заданных полей в разрешенных значениях групп доступа (пользователей). //// Проверка значения поля группы параметров 1. @@ -5474,11 +5475,6 @@ ГДЕ -// Безусловная выборка групп в иерархическом объекте метаданных (если нужно). -#Если "#Параметр(3)" = "НеОграничиватьДоступКГруппам" #Тогда - Т.ЭтоГруппа ИЛИ -#КонецЕсли - ИСТИНА В ( // Проверка права пользователя на текущую таблицу в целом. // Права на таблицы формируются по составу ролей профиля группы доступа. @@ -5512,6 +5508,12 @@ И СоставыГруппПользователей.ГруппаПользователей = ГруппыДоступаПользователи.Пользователь ) ГДЕ + +// Безусловная выборка групп в иерархическом объекте метаданных (если нужно). +#Если "#Параметр(3)" = "НеОграничиватьДоступКГруппам" #Тогда + Т.ЭтоГруппа ИЛИ +#КонецЕсли + ( // Поиск значений заданных полей в разрешенных значениях групп доступа (пользователей). #Параметр(5) // [([(][(]...] 0-n открывающихся скобок. diff --git a/SSL/src/Roles/БазовыеПраваВнешнегоПользователя/Rights.rights b/SSL/src/Roles/БазовыеПраваВнешнегоПользователя/Rights.rights index c71d8acd1..be5ae58e5 100644 --- a/SSL/src/Roles/БазовыеПраваВнешнегоПользователя/Rights.rights +++ b/SSL/src/Roles/БазовыеПраваВнешнегоПользователя/Rights.rights @@ -2132,11 +2132,6 @@ Т ГДЕ // Т - псевдоним текущей таблицы (выбран коротким, чтобы сократить количество символов в тексте параметра-условия на языке запросов). -// Безусловная выборка групп в иерархическом объекте метаданных (если нужно). -#Если "#Параметр(3)" = "НеОграничиватьДоступКГруппам" #Тогда - Т.ЭтоГруппа ИЛИ -#КонецЕсли - ИСТИНА В ( // Проверка права пользователя на текущую таблицу в целом. // Права на таблицы формируются по составу ролей профиля группы доступа. @@ -2170,6 +2165,12 @@ И СоставыГруппПользователей.ГруппаПользователей = ГруппыДоступаПользователи.Пользователь ) ГДЕ + +// Безусловная выборка групп в иерархическом объекте метаданных (если нужно). +#Если "#Параметр(3)" = "НеОграничиватьДоступКГруппам" #Тогда + Т.ЭтоГруппа ИЛИ +#КонецЕсли + ( // Поиск значений заданных полей в разрешенных значениях групп доступа (пользователей). //// Проверка значения поля группы параметров 1. diff --git a/SSL/src/Roles/ДобавлениеИзменениеВзаимодействий/Rights.rights b/SSL/src/Roles/ДобавлениеИзменениеВзаимодействий/Rights.rights index 1e16745d8..2d7e15b12 100644 --- a/SSL/src/Roles/ДобавлениеИзменениеВзаимодействий/Rights.rights +++ b/SSL/src/Roles/ДобавлениеИзменениеВзаимодействий/Rights.rights @@ -66,27 +66,39 @@ Read true - #ПоЗначениям( "Справочник.ПапкиЭлектронныхПисем","","", -"УчетныеЗаписиЭлектроннойПочты", "Владелец", -"","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","") + #ПоЗначениямРасширенный("Справочник.ПапкиЭлектронныхПисем", "", "", +"", +"", +"УчетныеЗаписиЭлектроннойПочты", "Т.Владелец", "ИЛИ(", +"Пользователи", "Т.Владелец.ВладелецУчетнойЗаписи", "И", +"Условие", "Т.Владелец.ВладелецУчетнойЗаписи <> Значение(Справочник.Пользователи.ПустаяСсылка)", ")", +"", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "") Insert true - #ПоЗначениям( "Справочник.ПапкиЭлектронныхПисем","","", -"УчетныеЗаписиЭлектроннойПочты", "Владелец", -"","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","") + #ПоЗначениямРасширенный("Справочник.ПапкиЭлектронныхПисем", "", "", +"", +"", +"УчетныеЗаписиЭлектроннойПочты", "Т.Владелец", "ИЛИ(", +"Пользователи", "Т.Владелец.ВладелецУчетнойЗаписи", "И", +"Условие", "Т.Владелец.ВладелецУчетнойЗаписи <> Значение(Справочник.Пользователи.ПустаяСсылка)", ")", +"", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "") Update true - #ПоЗначениям( "Справочник.ПапкиЭлектронныхПисем","","", -"УчетныеЗаписиЭлектроннойПочты", "Владелец", -"","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","") + #ПоЗначениямРасширенный("Справочник.ПапкиЭлектронныхПисем", "", "", +"", +"", +"УчетныеЗаписиЭлектроннойПочты", "Т.Владелец", "ИЛИ(", +"Пользователи", "Т.Владелец.ВладелецУчетнойЗаписи", "И", +"Условие", "Т.Владелец.ВладелецУчетнойЗаписи <> Значение(Справочник.Пользователи.ПустаяСсылка)", ")", +"", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "") @@ -138,9 +150,13 @@ Read true - #ПоЗначениям( "РегистрСведений.НастройкиУчетныхЗаписейЭлектроннойПочты","","", -"УчетныеЗаписиЭлектроннойПочты", "УчетнаяЗаписьЭлектроннойПочты", -"","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","") + #ПоЗначениямРасширенный("РегистрСведений.НастройкиУчетныхЗаписейЭлектроннойПочты", "", "", +"", +"", +"УчетныеЗаписиЭлектроннойПочты", "Т.УчетнаяЗаписьЭлектроннойПочты", "ИЛИ(", +"Пользователи", "Т.УчетнаяЗаписьЭлектроннойПочты.ВладелецУчетнойЗаписи", "И", +"Условие", "Т.УчетнаяЗаписьЭлектроннойПочты.ВладелецУчетнойЗаписи <> Значение(Справочник.Пользователи.ПустаяСсылка)", ")", +"", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "") @@ -1028,27 +1044,39 @@ Read true - #ПоЗначениям( "Справочник.ПравилаОбработкиЭлектроннойПочты","","", -"УчетныеЗаписиЭлектроннойПочты", "Владелец", -"","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","") + #ПоЗначениямРасширенный("Справочник.ПравилаОбработкиЭлектроннойПочты", "", "", +"", +"", +"УчетныеЗаписиЭлектроннойПочты", "Т.Владелец", "ИЛИ(", +"Пользователи", "Т.Владелец.ВладелецУчетнойЗаписи", "И", +"Условие", "Т.Владелец.ВладелецУчетнойЗаписи <> Значение(Справочник.Пользователи.ПустаяСсылка)", ")", +"", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "") Insert true - #ПоЗначениям( "Справочник.ПравилаОбработкиЭлектроннойПочты","","", -"УчетныеЗаписиЭлектроннойПочты", "Владелец", -"","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","") + #ПоЗначениямРасширенный("Справочник.ПравилаОбработкиЭлектроннойПочты", "", "", +"", +"", +"УчетныеЗаписиЭлектроннойПочты", "Т.Владелец", "ИЛИ(", +"Пользователи", "Т.Владелец.ВладелецУчетнойЗаписи", "И", +"Условие", "Т.Владелец.ВладелецУчетнойЗаписи <> Значение(Справочник.Пользователи.ПустаяСсылка)", ")", +"", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "") Update true - #ПоЗначениям( "Справочник.ПравилаОбработкиЭлектроннойПочты","","", -"УчетныеЗаписиЭлектроннойПочты", "Владелец", -"","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","") + #ПоЗначениямРасширенный("Справочник.ПравилаОбработкиЭлектроннойПочты", "", "", +"", +"", +"УчетныеЗаписиЭлектроннойПочты", "Т.Владелец", "ИЛИ(", +"Пользователи", "Т.Владелец.ВладелецУчетнойЗаписи", "И", +"Условие", "Т.Владелец.ВладелецУчетнойЗаписи <> Значение(Справочник.Пользователи.ПустаяСсылка)", ")", +"", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "") @@ -1384,11 +1412,6 @@ Т ГДЕ // Т - псевдоним текущей таблицы (выбран коротким, чтобы сократить количество символов в тексте параметра-условия на языке запросов). -// Безусловная выборка групп в иерархическом объекте метаданных (если нужно). -#Если "#Параметр(3)" = "НеОграничиватьДоступКГруппам" #Тогда - Т.ЭтоГруппа ИЛИ -#КонецЕсли - ИСТИНА В ( // Проверка права пользователя на текущую таблицу в целом. // Права на таблицы формируются по составу ролей профиля группы доступа. @@ -1422,6 +1445,12 @@ И СоставыГруппПользователей.ГруппаПользователей = ГруппыДоступаПользователи.Пользователь ) ГДЕ + +// Безусловная выборка групп в иерархическом объекте метаданных (если нужно). +#Если "#Параметр(3)" = "НеОграничиватьДоступКГруппам" #Тогда + Т.ЭтоГруппа ИЛИ +#КонецЕсли + ( // Поиск значений заданных полей в разрешенных значениях групп доступа (пользователей). //// Проверка значения поля группы параметров 1. @@ -4401,11 +4430,6 @@ ГДЕ -// Безусловная выборка групп в иерархическом объекте метаданных (если нужно). -#Если "#Параметр(3)" = "НеОграничиватьДоступКГруппам" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Т.ЭтоГруппа ИЛИ -#КонецЕсли - ИСТИНА В ( // Проверка права пользователя на текущую таблицу в целом. // Права на таблицы формируются по составу ролей профиля группы доступа. @@ -4439,6 +4463,12 @@ И СоставыГруппПользователей.ГруппаПользователей = ГруппыДоступаПользователи.Пользователь ) ГДЕ + +// Безусловная выборка групп в иерархическом объекте метаданных (если нужно). +#Если "#Параметр(3)" = "НеОграничиватьДоступКГруппам" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Т.ЭтоГруппа ИЛИ +#КонецЕсли + ( // Поиск значений заданных полей в разрешенных значениях групп доступа (пользователей). #Параметр(5) // [([(][(]...] 0-n открывающихся скобок. @@ -13565,6 +13595,3066 @@ ) #КонецЕсли +#КонецЕсли // Информационная база заблокирована для обновления. + + + + ПоЗначениямРасширенный + // ПоЗначениямРасширенный(Таблица, -, Модификатор, ПрисоединяемыеТаблицы, О, В1,П1,О1, В2,П2,О2,..., В(n), П(n), О(n)). +// № параметра: 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,...,3+n*3,4+n*3,5+n*3. +// Читается так: "ограничение доступа по значениям расширенный". +// Параметры: +// Таблица - Имя текущей таблицы, например "Документ.ПоступлениеТоваровИУслуг". +// Модификатор - изменяет шаблон. +// 1-й модификатор - строка "НеОграничиватьДоступКГруппам" указывает +// безусловно выбирать группы иерархического справочника. +// Других модификаторов в этой версии шаблона не предусмотрено. +// ПрисоединяемыеТаблицы - текст присоедиения дополнительных таблиц на языке запросов, например, +// "ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.АвансовыйОтчет.ОплатаПоставщикам КАК Т1 +// ПО Т.Ссылка = Т1.Ссылка". +// Присоединение позволяет указать поля таблицы ОплатаПоставщикам, как поля основной таблицы +// для проверки их значений, как значений основной таблицы. +// Следует помнить, что при размножении строк в результате соединения, достаточно чтобы +// всего одна строка прошла условия проверки, т.е. результаты проверки строк объединяются по "ИЛИ". +// О - Начальные скобки "(". +// В(n) - Вид доступа - имя вида доступа, например, "Организации". Для полей составного типа, с целью повышения +// производительности, лучше указать несколько имен, например, "Организации,ГруппыФизическихЛиц", +// чем использовать несколько блоков параметров, с одним и тем же именем поля. +// Специальные виды доступа "Условие", "НастройкиПрав", "ПравоЧтения", "ПравоИзменения", +// "ПравоЧтенияПоИдентификатору", "ПравоИзмененияПоИдентификатору" можно использовать только отдельно. +// Когда В(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) +#КонецЕсли + +// Общая проверка использования ограничений доступа на уровне записей и +// проверка использования хотя бы одного ограничения из указанных видов доступа. +#Если Не + ( Истина + И ("#Параметр(6)" = "" И "#Параметр(7)" = "" + Или Не &ОграничениеДоступаНаУровнеЗаписейВключено + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(6),") + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(6),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),")) + И ("#Параметр(9)" = "" И "#Параметр(10)" = "" + Или Не &ОграничениеДоступаНаУровнеЗаписейВключено + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(9),") + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(9),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(9),")) + И ("#Параметр(12)" = "" И "#Параметр(13)" = "" + Или Не &ОграничениеДоступаНаУровнеЗаписейВключено + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(12),") + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(12),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),")) + И ("#Параметр(15)" = "" И "#Параметр(16)" = "" + Или Не &ОграничениеДоступаНаУровнеЗаписейВключено + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(15),") + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(15),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(15),")) + И ("#Параметр(18)" = "" И "#Параметр(19)" = "" + Или Не &ОграничениеДоступаНаУровнеЗаписейВключено + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(18),") + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(18),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),")) + И ("#Параметр(21)" = "" И "#Параметр(22)" = "" + Или Не &ОграничениеДоступаНаУровнеЗаписейВключено + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(21),") + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(21),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(21),")) + И ("#Параметр(24)" = "" И "#Параметр(25)" = "" + Или Не &ОграничениеДоступаНаУровнеЗаписейВключено + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(24),") + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(24),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),")) + И ("#Параметр(27)" = "" И "#Параметр(28)" = "" + Или Не &ОграничениеДоступаНаУровнеЗаписейВключено + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(27),") + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(27),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(27),")) + И ("#Параметр(30)" = "" И "#Параметр(31)" = "" + Или Не &ОграничениеДоступаНаУровнеЗаписейВключено + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(30),") + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(30),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),")) + И ("#Параметр(33)" = "" И "#Параметр(34)" = "" + Или Не &ОграничениеДоступаНаУровнеЗаписейВключено + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(33),") + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(33),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(33),")) + И ("#Параметр(36)" = "" И "#Параметр(37)" = "" + Или Не &ОграничениеДоступаНаУровнеЗаписейВключено + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(36),") + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(36),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(36),")) + И ("#Параметр(39)" = "" И "#Параметр(40)" = "" + Или Не &ОграничениеДоступаНаУровнеЗаписейВключено + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(39),") + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(39),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(39),")) + И ("#Параметр(42)" = "" И "#Параметр(43)" = "" + Или Не &ОграничениеДоступаНаУровнеЗаписейВключено + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(42),") + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(42),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(42),")) + И ("#Параметр(45)" = "" И "#Параметр(46)" = "" + Или Не &ОграничениеДоступаНаУровнеЗаписейВключено + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(45),") + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(45),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(45),")) + И ("#Параметр(48)" = "" И "#Параметр(49)" = "" + Или Не &ОграничениеДоступаНаУровнеЗаписейВключено + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(48),") + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(48),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(48),")) + И ("#Параметр(51)" = "" И "#Параметр(52)" = "" + Или Не &ОграничениеДоступаНаУровнеЗаписейВключено + И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(51),") + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(51),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(51),")) + ) #Тогда + +Т ИЗ Т // Т - псевдоним текущей таблицы (выбран коротким, чтобы сократить количество символов в тексте параметра-условия на языке запросов). + +// Присоединяемые таблицы к проверяемой строке текущей таблицы "Т". +#Параметр(4) + +ГДЕ + +ИСТИНА В +( // Проверка права пользователя на текущую таблицу в целом. + // Права на таблицы формируются по составу ролей профиля группы доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ + Справочник.ИдентификаторыОбъектовМетаданных КАК СвойстваТекущейТаблицы + ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа КАК ГруппыДоступа + ПО + СвойстваТекущейТаблицы.ПолноеИмя = "#Параметр(1)" + И ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ + РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступа + ГДЕ + ТаблицыГруппДоступа.Таблица = СвойстваТекущейТаблицы.Ссылка + И ТаблицыГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И ТаблицыГруппДоступа.Изменение + #КонецЕсли + ) + И ГруппыДоступа.Ссылка В + ( + ВЫБРАТЬ + ГруппыДоступаПользователи.Ссылка КАК ГруппаДоступа + ИЗ + Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = ГруппыДоступаПользователи.Пользователь + ) + ГДЕ + +// Безусловная выборка групп в иерархическом объекте метаданных (если нужно). +#Если "#Параметр(3)" = "НеОграничиватьДоступКГруппам" #Тогда + Т.ЭтоГруппа ИЛИ +#КонецЕсли + + ( // Поиск значений заданных полей в разрешенных значениях групп доступа (пользователей). + + #Параметр(5) // [([(][(]...] 0-n открывающихся скобок. + +//// Проверка значения поля группы параметров 1. +#Если &ОграничениеДоступаНаУровнеЗаписейВключено И ("#Параметр(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)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + ) + ) +#Иначе + ИСТИНА +#КонецЕсли + + #Параметр(8) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. + +//// Проверка значения поля группы параметров 2. +#Если "#Параметр(9)" = "" И "#Параметр(10)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли &ОграничениеДоступаНаУровнеЗаписейВключено И ("#Параметр(9)" = "Условие" Или "#Параметр(9)" = "") #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + ( #Параметр(10) ) +#ИначеЕсли "#Параметр(9)" = "ПравоЧтения" Или "#Параметр(9)" = "ПравоИзменения" #Тогда + #Параметр(10) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(10)) + #Если Не "#Параметр(9)" = "ПравоЧтения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(9)" = "ПравоЧтенияПоИдентификатору" Или "#Параметр(9)" = "ПравоИзмененияПоИдентификатору" #Тогда + ИСТИНА В + ( // Проверка права пользователя на таблицу, идентификатор которой указан в Значении, установленном в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТаблицыГруппДоступаПроверкаПрава.Таблица = #Параметр(10) + #Если Не "#Параметр(9)" = "ПравоЧтенияПоИдентификатору" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли Не &ОграничениеДоступаНаУровнеЗаписейВключено #Тогда + ИСТИНА // Группа параметров отключена. +#ИначеЕсли "#Параметр(9)" = "НастройкиПрав" #Тогда + + ( + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = #Параметр(10) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = #Параметр(10) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + ) +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(9),") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + #Если СтрСодержит("#Параметр(9)", ",") #Тогда + НеверныйВидДоступа: "#Параметр(9)" - "Список имен видов доступа не найден" + #Иначе + НеверныйВидДоступа: "#Параметр(9)" - "Имя вида доступа не найдено" + #КонецЕсли +#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(9),") #Тогда + + ( + ЕСТЬNULL(#Параметр(10), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(9),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(9),", ",ВнешниеПользователи,")) #Тогда + НЕ + ( + НЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + ГДЕ + ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(10) + И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь + ) + И НЕ + #Иначе + ( + #КонецЕсли + ВЫБОР + КОГДА ИСТИНА В + ( + #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(9),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = #Параметр(10) + #ИначеЕсли "#Параметр(10)" = "Т.Ссылка" + И "#Параметр(9)" <> "Пользователи" + И "#Параметр(9)" <> "ВнешниеПользователи" #Тогда + #Если СтрСодержит("#Параметр(9)", ",") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверныйВидДоступа: "#Параметр(9)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" + #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(9),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + И ГруппыЗначений.Ссылка = #Параметр(10) + #КонецЕсли + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа + И ГруппыЗначений.ЗначениеДоступа = #Параметр(10) + #КонецЕсли + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + = + ВЫБОР + КОГДА ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию + ГДЕ + ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(10)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + ) + ) +#Иначе + ИСТИНА +#КонецЕсли + + #Параметр(11) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. + +//// Проверка значения поля группы параметров 3. +#Если "#Параметр(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)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + ) + ) +#Иначе + ИСТИНА +#КонецЕсли + + #Параметр(14) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. + +//// Проверка значения поля группы параметров 4. +#Если "#Параметр(15)" = "" И "#Параметр(16)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли &ОграничениеДоступаНаУровнеЗаписейВключено И ("#Параметр(15)" = "Условие" Или "#Параметр(15)" = "") #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + ( #Параметр(16) ) +#ИначеЕсли "#Параметр(15)" = "ПравоЧтения" Или "#Параметр(15)" = "ПравоИзменения" #Тогда + #Параметр(16) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(16)) + #Если Не "#Параметр(15)" = "ПравоЧтения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(15)" = "ПравоЧтенияПоИдентификатору" Или "#Параметр(15)" = "ПравоИзмененияПоИдентификатору" #Тогда + ИСТИНА В + ( // Проверка права пользователя на таблицу, идентификатор которой указан в Значении, установленном в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТаблицыГруппДоступаПроверкаПрава.Таблица = #Параметр(16) + #Если Не "#Параметр(15)" = "ПравоЧтенияПоИдентификатору" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли Не &ОграничениеДоступаНаУровнеЗаписейВключено #Тогда + ИСТИНА // Группа параметров отключена. +#ИначеЕсли "#Параметр(15)" = "НастройкиПрав" #Тогда + + ( + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = #Параметр(16) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = #Параметр(16) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + ) +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(15),") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + #Если СтрСодержит("#Параметр(15)", ",") #Тогда + НеверныйВидДоступа: "#Параметр(15)" - "Список имен видов доступа не найден" + #Иначе + НеверныйВидДоступа: "#Параметр(15)" - "Имя вида доступа не найдено" + #КонецЕсли +#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(15),") #Тогда + + ( + ЕСТЬNULL(#Параметр(16), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(15),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(15),", ",ВнешниеПользователи,")) #Тогда + НЕ + ( + НЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + ГДЕ + ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(16) + И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь + ) + И НЕ + #Иначе + ( + #КонецЕсли + ВЫБОР + КОГДА ИСТИНА В + ( + #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(15),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = #Параметр(16) + #ИначеЕсли "#Параметр(16)" = "Т.Ссылка" + И "#Параметр(15)" <> "Пользователи" + И "#Параметр(15)" <> "ВнешниеПользователи" #Тогда + #Если СтрСодержит("#Параметр(15)", ",") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверныйВидДоступа: "#Параметр(15)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" + #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(15),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + И ГруппыЗначений.Ссылка = #Параметр(16) + #КонецЕсли + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа + И ГруппыЗначений.ЗначениеДоступа = #Параметр(16) + #КонецЕсли + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + = + ВЫБОР + КОГДА ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию + ГДЕ + ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(16)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + ) + ) +#Иначе + ИСТИНА +#КонецЕсли + + #Параметр(17) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. + +//// Проверка значения поля группы параметров 5. +#Если "#Параметр(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)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + ) + ) +#Иначе + ИСТИНА +#КонецЕсли + + #Параметр(20) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. + +//// Проверка значения поля группы параметров 6. +#Если "#Параметр(21)" = "" И "#Параметр(22)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли &ОграничениеДоступаНаУровнеЗаписейВключено И ("#Параметр(21)" = "Условие" Или "#Параметр(21)" = "") #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + ( #Параметр(22) ) +#ИначеЕсли "#Параметр(21)" = "ПравоЧтения" Или "#Параметр(21)" = "ПравоИзменения" #Тогда + #Параметр(22) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(22)) + #Если Не "#Параметр(21)" = "ПравоЧтения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(21)" = "ПравоЧтенияПоИдентификатору" Или "#Параметр(21)" = "ПравоИзмененияПоИдентификатору" #Тогда + ИСТИНА В + ( // Проверка права пользователя на таблицу, идентификатор которой указан в Значении, установленном в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТаблицыГруппДоступаПроверкаПрава.Таблица = #Параметр(22) + #Если Не "#Параметр(21)" = "ПравоЧтенияПоИдентификатору" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли Не &ОграничениеДоступаНаУровнеЗаписейВключено #Тогда + ИСТИНА // Группа параметров отключена. +#ИначеЕсли "#Параметр(21)" = "НастройкиПрав" #Тогда + + ( + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = #Параметр(22) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = #Параметр(22) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + ) +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(21),") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + #Если СтрСодержит("#Параметр(21)", ",") #Тогда + НеверныйВидДоступа: "#Параметр(21)" - "Список имен видов доступа не найден" + #Иначе + НеверныйВидДоступа: "#Параметр(21)" - "Имя вида доступа не найдено" + #КонецЕсли +#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(21),") #Тогда + + ( + ЕСТЬNULL(#Параметр(22), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(21),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(21),", ",ВнешниеПользователи,")) #Тогда + НЕ + ( + НЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + ГДЕ + ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(22) + И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь + ) + И НЕ + #Иначе + ( + #КонецЕсли + ВЫБОР + КОГДА ИСТИНА В + ( + #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(21),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = #Параметр(22) + #ИначеЕсли "#Параметр(22)" = "Т.Ссылка" + И "#Параметр(21)" <> "Пользователи" + И "#Параметр(21)" <> "ВнешниеПользователи" #Тогда + #Если СтрСодержит("#Параметр(21)", ",") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверныйВидДоступа: "#Параметр(21)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" + #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(21),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + И ГруппыЗначений.Ссылка = #Параметр(22) + #КонецЕсли + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа + И ГруппыЗначений.ЗначениеДоступа = #Параметр(22) + #КонецЕсли + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + = + ВЫБОР + КОГДА ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию + ГДЕ + ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(22)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + ) + ) +#Иначе + ИСТИНА +#КонецЕсли + + #Параметр(23) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. + +//// Проверка значения поля группы параметров 7. +#Если "#Параметр(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)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + ) + ) +#Иначе + ИСТИНА +#КонецЕсли + + #Параметр(26) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. + +//// Проверка значения поля группы параметров 8. +#Если "#Параметр(27)" = "" И "#Параметр(28)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли &ОграничениеДоступаНаУровнеЗаписейВключено И ("#Параметр(27)" = "Условие" Или "#Параметр(27)" = "") #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + ( #Параметр(28) ) +#ИначеЕсли "#Параметр(27)" = "ПравоЧтения" Или "#Параметр(27)" = "ПравоИзменения" #Тогда + #Параметр(28) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(28)) + #Если Не "#Параметр(27)" = "ПравоЧтения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(27)" = "ПравоЧтенияПоИдентификатору" Или "#Параметр(27)" = "ПравоИзмененияПоИдентификатору" #Тогда + ИСТИНА В + ( // Проверка права пользователя на таблицу, идентификатор которой указан в Значении, установленном в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТаблицыГруппДоступаПроверкаПрава.Таблица = #Параметр(28) + #Если Не "#Параметр(27)" = "ПравоЧтенияПоИдентификатору" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли Не &ОграничениеДоступаНаУровнеЗаписейВключено #Тогда + ИСТИНА // Группа параметров отключена. +#ИначеЕсли "#Параметр(27)" = "НастройкиПрав" #Тогда + + ( + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = #Параметр(28) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = #Параметр(28) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + ) +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(27),") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + #Если СтрСодержит("#Параметр(27)", ",") #Тогда + НеверныйВидДоступа: "#Параметр(27)" - "Список имен видов доступа не найден" + #Иначе + НеверныйВидДоступа: "#Параметр(27)" - "Имя вида доступа не найдено" + #КонецЕсли +#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(27),") #Тогда + + ( + ЕСТЬNULL(#Параметр(28), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(27),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(27),", ",ВнешниеПользователи,")) #Тогда + НЕ + ( + НЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + ГДЕ + ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(28) + И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь + ) + И НЕ + #Иначе + ( + #КонецЕсли + ВЫБОР + КОГДА ИСТИНА В + ( + #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(27),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = #Параметр(28) + #ИначеЕсли "#Параметр(28)" = "Т.Ссылка" + И "#Параметр(27)" <> "Пользователи" + И "#Параметр(27)" <> "ВнешниеПользователи" #Тогда + #Если СтрСодержит("#Параметр(27)", ",") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверныйВидДоступа: "#Параметр(27)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" + #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(27),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + И ГруппыЗначений.Ссылка = #Параметр(28) + #КонецЕсли + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа + И ГруппыЗначений.ЗначениеДоступа = #Параметр(28) + #КонецЕсли + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + = + ВЫБОР + КОГДА ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию + ГДЕ + ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(28)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + ) + ) +#Иначе + ИСТИНА +#КонецЕсли + + #Параметр(29) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. + +//// Проверка значения поля группы параметров 9. +#Если "#Параметр(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)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + ) + ) +#Иначе + ИСТИНА +#КонецЕсли + + #Параметр(32) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. + +//// Проверка значения поля группы параметров 10. +#Если "#Параметр(33)" = "" И "#Параметр(34)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли &ОграничениеДоступаНаУровнеЗаписейВключено И ("#Параметр(33)" = "Условие" Или "#Параметр(33)" = "") #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + ( #Параметр(34) ) +#ИначеЕсли "#Параметр(33)" = "ПравоЧтения" Или "#Параметр(33)" = "ПравоИзменения" #Тогда + #Параметр(34) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(34)) + #Если Не "#Параметр(33)" = "ПравоЧтения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(33)" = "ПравоЧтенияПоИдентификатору" Или "#Параметр(33)" = "ПравоИзмененияПоИдентификатору" #Тогда + ИСТИНА В + ( // Проверка права пользователя на таблицу, идентификатор которой указан в Значении, установленном в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТаблицыГруппДоступаПроверкаПрава.Таблица = #Параметр(34) + #Если Не "#Параметр(33)" = "ПравоЧтенияПоИдентификатору" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли Не &ОграничениеДоступаНаУровнеЗаписейВключено #Тогда + ИСТИНА // Группа параметров отключена. +#ИначеЕсли "#Параметр(33)" = "НастройкиПрав" #Тогда + + ( + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = #Параметр(34) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = #Параметр(34) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + ) +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(33),") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + #Если СтрСодержит("#Параметр(33)", ",") #Тогда + НеверныйВидДоступа: "#Параметр(33)" - "Список имен видов доступа не найден" + #Иначе + НеверныйВидДоступа: "#Параметр(33)" - "Имя вида доступа не найдено" + #КонецЕсли +#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(33),") #Тогда + + ( + ЕСТЬNULL(#Параметр(34), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(33),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(33),", ",ВнешниеПользователи,")) #Тогда + НЕ + ( + НЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + ГДЕ + ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(34) + И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь + ) + И НЕ + #Иначе + ( + #КонецЕсли + ВЫБОР + КОГДА ИСТИНА В + ( + #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(33),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = #Параметр(34) + #ИначеЕсли "#Параметр(34)" = "Т.Ссылка" + И "#Параметр(33)" <> "Пользователи" + И "#Параметр(33)" <> "ВнешниеПользователи" #Тогда + #Если СтрСодержит("#Параметр(33)", ",") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверныйВидДоступа: "#Параметр(33)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" + #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(33),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + И ГруппыЗначений.Ссылка = #Параметр(34) + #КонецЕсли + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа + И ГруппыЗначений.ЗначениеДоступа = #Параметр(34) + #КонецЕсли + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + = + ВЫБОР + КОГДА ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию + ГДЕ + ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(34)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + ) + ) +#Иначе + ИСТИНА +#КонецЕсли + + #Параметр(35) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. + +//// Проверка значения поля группы параметров 11. +#Если "#Параметр(36)" = "" И "#Параметр(37)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли &ОграничениеДоступаНаУровнеЗаписейВключено И ("#Параметр(36)" = "Условие" Или "#Параметр(36)" = "") #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + ( #Параметр(37) ) +#ИначеЕсли "#Параметр(36)" = "ПравоЧтения" Или "#Параметр(36)" = "ПравоИзменения" #Тогда + #Параметр(37) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(37)) + #Если Не "#Параметр(36)" = "ПравоЧтения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(36)" = "ПравоЧтенияПоИдентификатору" Или "#Параметр(36)" = "ПравоИзмененияПоИдентификатору" #Тогда + ИСТИНА В + ( // Проверка права пользователя на таблицу, идентификатор которой указан в Значении, установленном в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТаблицыГруппДоступаПроверкаПрава.Таблица = #Параметр(37) + #Если Не "#Параметр(36)" = "ПравоЧтенияПоИдентификатору" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли Не &ОграничениеДоступаНаУровнеЗаписейВключено #Тогда + ИСТИНА // Группа параметров отключена. +#ИначеЕсли "#Параметр(36)" = "НастройкиПрав" #Тогда + + ( + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = #Параметр(37) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = #Параметр(37) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + ) +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(36),") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + #Если СтрСодержит("#Параметр(36)", ",") #Тогда + НеверныйВидДоступа: "#Параметр(36)" - "Список имен видов доступа не найден" + #Иначе + НеверныйВидДоступа: "#Параметр(36)" - "Имя вида доступа не найдено" + #КонецЕсли +#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(36),") #Тогда + + ( + ЕСТЬNULL(#Параметр(37), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(36),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(36),", ",ВнешниеПользователи,")) #Тогда + НЕ + ( + НЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + ГДЕ + ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(37) + И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь + ) + И НЕ + #Иначе + ( + #КонецЕсли + ВЫБОР + КОГДА ИСТИНА В + ( + #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(36),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = #Параметр(37) + #ИначеЕсли "#Параметр(37)" = "Т.Ссылка" + И "#Параметр(36)" <> "Пользователи" + И "#Параметр(36)" <> "ВнешниеПользователи" #Тогда + #Если СтрСодержит("#Параметр(36)", ",") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверныйВидДоступа: "#Параметр(36)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" + #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(36),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + И ГруппыЗначений.Ссылка = #Параметр(37) + #КонецЕсли + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа + И ГруппыЗначений.ЗначениеДоступа = #Параметр(37) + #КонецЕсли + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + = + ВЫБОР + КОГДА ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию + ГДЕ + ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(37)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + ) + ) +#Иначе + ИСТИНА +#КонецЕсли + + #Параметр(38) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. + +//// Проверка значения поля группы параметров 12. +#Если "#Параметр(39)" = "" И "#Параметр(40)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли &ОграничениеДоступаНаУровнеЗаписейВключено И ("#Параметр(39)" = "Условие" Или "#Параметр(39)" = "") #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + ( #Параметр(40) ) +#ИначеЕсли "#Параметр(39)" = "ПравоЧтения" Или "#Параметр(39)" = "ПравоИзменения" #Тогда + #Параметр(40) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(40)) + #Если Не "#Параметр(39)" = "ПравоЧтения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(39)" = "ПравоЧтенияПоИдентификатору" Или "#Параметр(39)" = "ПравоИзмененияПоИдентификатору" #Тогда + ИСТИНА В + ( // Проверка права пользователя на таблицу, идентификатор которой указан в Значении, установленном в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТаблицыГруппДоступаПроверкаПрава.Таблица = #Параметр(40) + #Если Не "#Параметр(39)" = "ПравоЧтенияПоИдентификатору" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли Не &ОграничениеДоступаНаУровнеЗаписейВключено #Тогда + ИСТИНА // Группа параметров отключена. +#ИначеЕсли "#Параметр(39)" = "НастройкиПрав" #Тогда + + ( + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = #Параметр(40) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = #Параметр(40) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + ) +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(39),") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + #Если СтрСодержит("#Параметр(39)", ",") #Тогда + НеверныйВидДоступа: "#Параметр(39)" - "Список имен видов доступа не найден" + #Иначе + НеверныйВидДоступа: "#Параметр(39)" - "Имя вида доступа не найдено" + #КонецЕсли +#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(39),") #Тогда + + ( + ЕСТЬNULL(#Параметр(40), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(39),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(39),", ",ВнешниеПользователи,")) #Тогда + НЕ + ( + НЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + ГДЕ + ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(40) + И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь + ) + И НЕ + #Иначе + ( + #КонецЕсли + ВЫБОР + КОГДА ИСТИНА В + ( + #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(39),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = #Параметр(40) + #ИначеЕсли "#Параметр(40)" = "Т.Ссылка" + И "#Параметр(39)" <> "Пользователи" + И "#Параметр(39)" <> "ВнешниеПользователи" #Тогда + #Если СтрСодержит("#Параметр(39)", ",") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверныйВидДоступа: "#Параметр(39)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" + #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(39),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + И ГруппыЗначений.Ссылка = #Параметр(40) + #КонецЕсли + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа + И ГруппыЗначений.ЗначениеДоступа = #Параметр(40) + #КонецЕсли + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + = + ВЫБОР + КОГДА ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию + ГДЕ + ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(40)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + ) + ) +#Иначе + ИСТИНА +#КонецЕсли + + #Параметр(41) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. + +//// Проверка значения поля группы параметров 13. +#Если "#Параметр(42)" = "" И "#Параметр(43)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли &ОграничениеДоступаНаУровнеЗаписейВключено И ("#Параметр(42)" = "Условие" Или "#Параметр(42)" = "") #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + ( #Параметр(43) ) +#ИначеЕсли "#Параметр(42)" = "ПравоЧтения" Или "#Параметр(42)" = "ПравоИзменения" #Тогда + #Параметр(43) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(43)) + #Если Не "#Параметр(42)" = "ПравоЧтения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(42)" = "ПравоЧтенияПоИдентификатору" Или "#Параметр(42)" = "ПравоИзмененияПоИдентификатору" #Тогда + ИСТИНА В + ( // Проверка права пользователя на таблицу, идентификатор которой указан в Значении, установленном в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТаблицыГруппДоступаПроверкаПрава.Таблица = #Параметр(43) + #Если Не "#Параметр(42)" = "ПравоЧтенияПоИдентификатору" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли Не &ОграничениеДоступаНаУровнеЗаписейВключено #Тогда + ИСТИНА // Группа параметров отключена. +#ИначеЕсли "#Параметр(42)" = "НастройкиПрав" #Тогда + + ( + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = #Параметр(43) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = #Параметр(43) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + ) +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(42),") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + #Если СтрСодержит("#Параметр(42)", ",") #Тогда + НеверныйВидДоступа: "#Параметр(42)" - "Список имен видов доступа не найден" + #Иначе + НеверныйВидДоступа: "#Параметр(42)" - "Имя вида доступа не найдено" + #КонецЕсли +#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(42),") #Тогда + + ( + ЕСТЬNULL(#Параметр(43), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(42),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(42),", ",ВнешниеПользователи,")) #Тогда + НЕ + ( + НЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + ГДЕ + ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(43) + И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь + ) + И НЕ + #Иначе + ( + #КонецЕсли + ВЫБОР + КОГДА ИСТИНА В + ( + #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(42),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = #Параметр(43) + #ИначеЕсли "#Параметр(43)" = "Т.Ссылка" + И "#Параметр(42)" <> "Пользователи" + И "#Параметр(42)" <> "ВнешниеПользователи" #Тогда + #Если СтрСодержит("#Параметр(42)", ",") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверныйВидДоступа: "#Параметр(42)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" + #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(42),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + И ГруппыЗначений.Ссылка = #Параметр(43) + #КонецЕсли + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа + И ГруппыЗначений.ЗначениеДоступа = #Параметр(43) + #КонецЕсли + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + = + ВЫБОР + КОГДА ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию + ГДЕ + ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(43)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + ) + ) +#Иначе + ИСТИНА +#КонецЕсли + + #Параметр(44) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. + +//// Проверка значения поля группы параметров 14. +#Если "#Параметр(45)" = "" И "#Параметр(46)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли &ОграничениеДоступаНаУровнеЗаписейВключено И ("#Параметр(45)" = "Условие" Или "#Параметр(45)" = "") #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + ( #Параметр(46) ) +#ИначеЕсли "#Параметр(45)" = "ПравоЧтения" Или "#Параметр(45)" = "ПравоИзменения" #Тогда + #Параметр(46) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(46)) + #Если Не "#Параметр(45)" = "ПравоЧтения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(45)" = "ПравоЧтенияПоИдентификатору" Или "#Параметр(45)" = "ПравоИзмененияПоИдентификатору" #Тогда + ИСТИНА В + ( // Проверка права пользователя на таблицу, идентификатор которой указан в Значении, установленном в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТаблицыГруппДоступаПроверкаПрава.Таблица = #Параметр(46) + #Если Не "#Параметр(45)" = "ПравоЧтенияПоИдентификатору" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли Не &ОграничениеДоступаНаУровнеЗаписейВключено #Тогда + ИСТИНА // Группа параметров отключена. +#ИначеЕсли "#Параметр(45)" = "НастройкиПрав" #Тогда + + ( + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = #Параметр(46) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = #Параметр(46) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + ) +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(45),") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + #Если СтрСодержит("#Параметр(45)", ",") #Тогда + НеверныйВидДоступа: "#Параметр(45)" - "Список имен видов доступа не найден" + #Иначе + НеверныйВидДоступа: "#Параметр(45)" - "Имя вида доступа не найдено" + #КонецЕсли +#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(45),") #Тогда + + ( + ЕСТЬNULL(#Параметр(46), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(45),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(45),", ",ВнешниеПользователи,")) #Тогда + НЕ + ( + НЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + ГДЕ + ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(46) + И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь + ) + И НЕ + #Иначе + ( + #КонецЕсли + ВЫБОР + КОГДА ИСТИНА В + ( + #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(45),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = #Параметр(46) + #ИначеЕсли "#Параметр(46)" = "Т.Ссылка" + И "#Параметр(45)" <> "Пользователи" + И "#Параметр(45)" <> "ВнешниеПользователи" #Тогда + #Если СтрСодержит("#Параметр(45)", ",") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверныйВидДоступа: "#Параметр(45)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" + #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(45),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + И ГруппыЗначений.Ссылка = #Параметр(46) + #КонецЕсли + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа + И ГруппыЗначений.ЗначениеДоступа = #Параметр(46) + #КонецЕсли + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + = + ВЫБОР + КОГДА ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию + ГДЕ + ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(46)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + ) + ) +#Иначе + ИСТИНА +#КонецЕсли + + #Параметр(47) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. + +//// Проверка значения поля группы параметров 15. +#Если "#Параметр(48)" = "" И "#Параметр(49)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли &ОграничениеДоступаНаУровнеЗаписейВключено И ("#Параметр(48)" = "Условие" Или "#Параметр(48)" = "") #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + ( #Параметр(49) ) +#ИначеЕсли "#Параметр(48)" = "ПравоЧтения" Или "#Параметр(48)" = "ПравоИзменения" #Тогда + #Параметр(49) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(49)) + #Если Не "#Параметр(48)" = "ПравоЧтения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(48)" = "ПравоЧтенияПоИдентификатору" Или "#Параметр(48)" = "ПравоИзмененияПоИдентификатору" #Тогда + ИСТИНА В + ( // Проверка права пользователя на таблицу, идентификатор которой указан в Значении, установленном в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТаблицыГруппДоступаПроверкаПрава.Таблица = #Параметр(49) + #Если Не "#Параметр(48)" = "ПравоЧтенияПоИдентификатору" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли Не &ОграничениеДоступаНаУровнеЗаписейВключено #Тогда + ИСТИНА // Группа параметров отключена. +#ИначеЕсли "#Параметр(48)" = "НастройкиПрав" #Тогда + + ( + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = #Параметр(49) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = #Параметр(49) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + ) +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(48),") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + #Если СтрСодержит("#Параметр(48)", ",") #Тогда + НеверныйВидДоступа: "#Параметр(48)" - "Список имен видов доступа не найден" + #Иначе + НеверныйВидДоступа: "#Параметр(48)" - "Имя вида доступа не найдено" + #КонецЕсли +#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(48),") #Тогда + + ( + ЕСТЬNULL(#Параметр(49), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(48),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(48),", ",ВнешниеПользователи,")) #Тогда + НЕ + ( + НЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + ГДЕ + ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(49) + И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь + ) + И НЕ + #Иначе + ( + #КонецЕсли + ВЫБОР + КОГДА ИСТИНА В + ( + #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(48),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = #Параметр(49) + #ИначеЕсли "#Параметр(49)" = "Т.Ссылка" + И "#Параметр(48)" <> "Пользователи" + И "#Параметр(48)" <> "ВнешниеПользователи" #Тогда + #Если СтрСодержит("#Параметр(48)", ",") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверныйВидДоступа: "#Параметр(48)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" + #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(48),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + И ГруппыЗначений.Ссылка = #Параметр(49) + #КонецЕсли + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа + И ГруппыЗначений.ЗначениеДоступа = #Параметр(49) + #КонецЕсли + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + = + ВЫБОР + КОГДА ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию + ГДЕ + ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(49)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + ) + ) +#Иначе + ИСТИНА +#КонецЕсли + + #Параметр(50) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. + +//// Проверка значения поля группы параметров 16. +#Если "#Параметр(51)" = "" И "#Параметр(52)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли &ОграничениеДоступаНаУровнеЗаписейВключено И ("#Параметр(51)" = "Условие" Или "#Параметр(51)" = "") #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + ( #Параметр(52) ) +#ИначеЕсли "#Параметр(51)" = "ПравоЧтения" Или "#Параметр(51)" = "ПравоИзменения" #Тогда + #Параметр(52) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(52)) + #Если Не "#Параметр(51)" = "ПравоЧтения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(51)" = "ПравоЧтенияПоИдентификатору" Или "#Параметр(51)" = "ПравоИзмененияПоИдентификатору" #Тогда + ИСТИНА В + ( // Проверка права пользователя на таблицу, идентификатор которой указан в Значении, установленном в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТаблицыГруппДоступаПроверкаПрава.Таблица = #Параметр(52) + #Если Не "#Параметр(51)" = "ПравоЧтенияПоИдентификатору" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли Не &ОграничениеДоступаНаУровнеЗаписейВключено #Тогда + ИСТИНА // Группа параметров отключена. +#ИначеЕсли "#Параметр(51)" = "НастройкиПрав" #Тогда + + ( + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = #Параметр(52) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = #Параметр(52) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + ) +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(51),") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + #Если СтрСодержит("#Параметр(51)", ",") #Тогда + НеверныйВидДоступа: "#Параметр(51)" - "Список имен видов доступа не найден" + #Иначе + НеверныйВидДоступа: "#Параметр(51)" - "Имя вида доступа не найдено" + #КонецЕсли +#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(51),") #Тогда + + ( + ЕСТЬNULL(#Параметр(52), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(51),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(51),", ",ВнешниеПользователи,")) #Тогда + НЕ + ( + НЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + ГДЕ + ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(52) + И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь + ) + И НЕ + #Иначе + ( + #КонецЕсли + ВЫБОР + КОГДА ИСТИНА В + ( + #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(51),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = #Параметр(52) + #ИначеЕсли "#Параметр(52)" = "Т.Ссылка" + И "#Параметр(51)" <> "Пользователи" + И "#Параметр(51)" <> "ВнешниеПользователи" #Тогда + #Если СтрСодержит("#Параметр(51)", ",") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверныйВидДоступа: "#Параметр(51)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" + #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(51),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + И ГруппыЗначений.Ссылка = #Параметр(52) + #КонецЕсли + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа + И ГруппыЗначений.ЗначениеДоступа = #Параметр(52) + #КонецЕсли + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + = + ВЫБОР + КОГДА ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию + ГДЕ + ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(52)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + ) + ) +#Иначе + ИСТИНА +#КонецЕсли + + #Параметр(53) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. + + ) +) +#КонецЕсли + #КонецЕсли // Информационная база заблокирована для обновления. @@ -13636,11 +16726,6 @@ Т ГДЕ // Т - псевдоним текущей таблицы (выбран коротким, чтобы сократить количество символов в тексте параметра-условия на языке запросов). -// Безусловная выборка групп в иерархическом объекте метаданных (если нужно). -#Если "#Параметр(3)" = "НеОграничиватьДоступКГруппам" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Т.ЭтоГруппа Или -#КонецЕсли - ИСТИНА В ( // Проверка права пользователя на текущую таблицу в целом. // Права на таблицы формируются по составу ролей профиля группы доступа. @@ -13674,6 +16759,12 @@ И СоставыГруппПользователей.ГруппаПользователей = ГруппыДоступаПользователи.Пользователь ) ГДЕ + +// Безусловная выборка групп в иерархическом объекте метаданных (если нужно). +#Если "#Параметр(3)" = "НеОграничиватьДоступКГруппам" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Т.ЭтоГруппа Или +#КонецЕсли + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( diff --git a/SSL/src/Roles/ДобавлениеИзменениеЗаданий/Rights.rights b/SSL/src/Roles/ДобавлениеИзменениеЗаданий/Rights.rights index ce7a2c1ca..946db3b9b 100644 --- a/SSL/src/Roles/ДобавлениеИзменениеЗаданий/Rights.rights +++ b/SSL/src/Roles/ДобавлениеИзменениеЗаданий/Rights.rights @@ -357,11 +357,6 @@ Т ГДЕ // Т - псевдоним текущей таблицы (выбран коротким, чтобы сократить количество символов в тексте параметра-условия на языке запросов). -// Безусловная выборка групп в иерархическом объекте метаданных (если нужно). -#Если "#Параметр(3)" = "НеОграничиватьДоступКГруппам" #Тогда - Т.ЭтоГруппа ИЛИ -#КонецЕсли - ИСТИНА В ( // Проверка права пользователя на текущую таблицу в целом. // Права на таблицы формируются по составу ролей профиля группы доступа. @@ -395,6 +390,12 @@ И СоставыГруппПользователей.ГруппаПользователей = ГруппыДоступаПользователи.Пользователь ) ГДЕ + +// Безусловная выборка групп в иерархическом объекте метаданных (если нужно). +#Если "#Параметр(3)" = "НеОграничиватьДоступКГруппам" #Тогда + Т.ЭтоГруппа ИЛИ +#КонецЕсли + ( // Поиск значений заданных полей в разрешенных значениях групп доступа (пользователей). //// Проверка значения поля группы параметров 1. @@ -3374,11 +3375,6 @@ ГДЕ -// Безусловная выборка групп в иерархическом объекте метаданных (если нужно). -#Если "#Параметр(3)" = "НеОграничиватьДоступКГруппам" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Т.ЭтоГруппа ИЛИ -#КонецЕсли - ИСТИНА В ( // Проверка права пользователя на текущую таблицу в целом. // Права на таблицы формируются по составу ролей профиля группы доступа. @@ -3412,6 +3408,12 @@ И СоставыГруппПользователей.ГруппаПользователей = ГруппыДоступаПользователи.Пользователь ) ГДЕ + +// Безусловная выборка групп в иерархическом объекте метаданных (если нужно). +#Если "#Параметр(3)" = "НеОграничиватьДоступКГруппам" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Т.ЭтоГруппа ИЛИ +#КонецЕсли + ( // Поиск значений заданных полей в разрешенных значениях групп доступа (пользователей). #Параметр(5) // [([(][(]...] 0-n открывающихся скобок. diff --git a/SSL/src/Roles/ДобавлениеИзменениеПапокИФайлов/Rights.rights b/SSL/src/Roles/ДобавлениеИзменениеПапокИФайлов/Rights.rights index 57d8c0214..3142a1ef9 100644 --- a/SSL/src/Roles/ДобавлениеИзменениеПапокИФайлов/Rights.rights +++ b/SSL/src/Roles/ДобавлениеИзменениеПапокИФайлов/Rights.rights @@ -367,11 +367,6 @@ Т ГДЕ // Т - псевдоним текущей таблицы (выбран коротким, чтобы сократить количество символов в тексте параметра-условия на языке запросов). -// Безусловная выборка групп в иерархическом объекте метаданных (если нужно). -#Если "#Параметр(3)" = "НеОграничиватьДоступКГруппам" #Тогда - Т.ЭтоГруппа ИЛИ -#КонецЕсли - ИСТИНА В ( // Проверка права пользователя на текущую таблицу в целом. // Права на таблицы формируются по составу ролей профиля группы доступа. @@ -405,6 +400,12 @@ И СоставыГруппПользователей.ГруппаПользователей = ГруппыДоступаПользователи.Пользователь ) ГДЕ + +// Безусловная выборка групп в иерархическом объекте метаданных (если нужно). +#Если "#Параметр(3)" = "НеОграничиватьДоступКГруппам" #Тогда + Т.ЭтоГруппа ИЛИ +#КонецЕсли + ( // Поиск значений заданных полей в разрешенных значениях групп доступа (пользователей). //// Проверка значения поля группы параметров 1. @@ -3384,11 +3385,6 @@ ГДЕ -// Безусловная выборка групп в иерархическом объекте метаданных (если нужно). -#Если "#Параметр(3)" = "НеОграничиватьДоступКГруппам" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Т.ЭтоГруппа ИЛИ -#КонецЕсли - ИСТИНА В ( // Проверка права пользователя на текущую таблицу в целом. // Права на таблицы формируются по составу ролей профиля группы доступа. @@ -3422,6 +3418,12 @@ И СоставыГруппПользователей.ГруппаПользователей = ГруппыДоступаПользователи.Пользователь ) ГДЕ + +// Безусловная выборка групп в иерархическом объекте метаданных (если нужно). +#Если "#Параметр(3)" = "НеОграничиватьДоступКГруппам" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Т.ЭтоГруппа ИЛИ +#КонецЕсли + ( // Поиск значений заданных полей в разрешенных значениях групп доступа (пользователей). #Параметр(5) // [([(][(]...] 0-n открывающихся скобок. diff --git a/SSL/src/Roles/ДобавлениеИзменениеРассылокОтчетов/Rights.rights b/SSL/src/Roles/ДобавлениеИзменениеРассылокОтчетов/Rights.rights index 079d879b5..8456ef16b 100644 --- a/SSL/src/Roles/ДобавлениеИзменениеРассылокОтчетов/Rights.rights +++ b/SSL/src/Roles/ДобавлениеИзменениеРассылокОтчетов/Rights.rights @@ -21,37 +21,6 @@ true - - Configuration.БиблиотекаСтандартныхПодсистем - - MainWindowModeNormal - true - - - MainWindowModeWorkplace - true - - - MainWindowModeEmbeddedWorkplace - true - - - MainWindowModeFullscreenWorkplace - true - - - MainWindowModeKiosk - true - - - AnalyticsSystemClient - true - - - Output - true - - Catalog.РассылкиОтчетов.Command.ВыполнитьСейчас @@ -103,4 +72,35 @@ 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 3d7c0c114..110126e8a 100644 --- a/SSL/src/Roles/ДобавлениеИзменениеУчетныхЗаписейЭлектроннойПочты/Rights.rights +++ b/SSL/src/Roles/ДобавлениеИзменениеУчетныхЗаписейЭлектроннойПочты/Rights.rights @@ -19,10 +19,10 @@ #ПоЗначениямРасширенный("Справочник.УчетныеЗаписиЭлектроннойПочты", "", "", "", "", -"УчетныеЗаписиЭлектроннойПочты", "Т.Ссылка", "ИЛИ", -"Пользователи", "Т.ВладелецУчетнойЗаписи", "", -"", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "") - +"УчетныеЗаписиЭлектроннойПочты", "Т.Ссылка", "ИЛИ(", +"Пользователи", "Т.ВладелецУчетнойЗаписи", "И", +"Условие", "Т.ВладелецУчетнойЗаписи <> Значение(Справочник.Пользователи.ПустаяСсылка)", ")", +"", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "") @@ -32,9 +32,8 @@ #ПоЗначениямРасширенный("Справочник.УчетныеЗаписиЭлектроннойПочты", "", "", "", "", -"Пользователи", "Т.ВладелецУчетнойЗаписи", "", -"", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "") - +"Пользователи", "Т.ВладелецУчетнойЗаписи", "И", +"Условие", "Т.ВладелецУчетнойЗаписи <> Значение(Справочник.Пользователи.ПустаяСсылка)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "") @@ -44,9 +43,8 @@ #ПоЗначениямРасширенный("Справочник.УчетныеЗаписиЭлектроннойПочты", "", "", "", "", -"Пользователи", "Т.ВладелецУчетнойЗаписи", "", -"", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "") - +"Пользователи", "Т.ВладелецУчетнойЗаписи", "И", +"Условие", "Т.ВладелецУчетнойЗаписи <> Значение(Справочник.Пользователи.ПустаяСсылка)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "") @@ -243,11 +241,6 @@ Т ГДЕ // Т - псевдоним текущей таблицы (выбран коротким, чтобы сократить количество символов в тексте параметра-условия на языке запросов). -// Безусловная выборка групп в иерархическом объекте метаданных (если нужно). -#Если "#Параметр(3)" = "НеОграничиватьДоступКГруппам" #Тогда - Т.ЭтоГруппа ИЛИ -#КонецЕсли - ИСТИНА В ( // Проверка права пользователя на текущую таблицу в целом. // Права на таблицы формируются по составу ролей профиля группы доступа. @@ -281,6 +274,12 @@ И СоставыГруппПользователей.ГруппаПользователей = ГруппыДоступаПользователи.Пользователь ) ГДЕ + +// Безусловная выборка групп в иерархическом объекте метаданных (если нужно). +#Если "#Параметр(3)" = "НеОграничиватьДоступКГруппам" #Тогда + Т.ЭтоГруппа ИЛИ +#КонецЕсли + ( // Поиск значений заданных полей в разрешенных значениях групп доступа (пользователей). //// Проверка значения поля группы параметров 1. @@ -3238,11 +3237,6 @@ ГДЕ -// Безусловная выборка групп в иерархическом объекте метаданных (если нужно). -#Если "#Параметр(3)" = "НеОграничиватьДоступКГруппам" #Тогда - Т.ЭтоГруппа ИЛИ -#КонецЕсли - ИСТИНА В ( // Проверка права пользователя на текущую таблицу в целом. // Права на таблицы формируются по составу ролей профиля группы доступа. @@ -3276,6 +3270,12 @@ И СоставыГруппПользователей.ГруппаПользователей = ГруппыДоступаПользователи.Пользователь ) ГДЕ + +// Безусловная выборка групп в иерархическом объекте метаданных (если нужно). +#Если "#Параметр(3)" = "НеОграничиватьДоступКГруппам" #Тогда + Т.ЭтоГруппа ИЛИ +#КонецЕсли + ( // Поиск значений заданных полей в разрешенных значениях групп доступа (пользователей). #Параметр(5) // [([(][(]...] 0-n открывающихся скобок. diff --git a/SSL/src/Roles/ИзменениеВыполнениеЗадач/Rights.rights b/SSL/src/Roles/ИзменениеВыполнениеЗадач/Rights.rights index 341baa78d..d87d4c398 100644 --- a/SSL/src/Roles/ИзменениеВыполнениеЗадач/Rights.rights +++ b/SSL/src/Roles/ИзменениеВыполнениеЗадач/Rights.rights @@ -375,11 +375,6 @@ ГДЕ -// Безусловная выборка групп в иерархическом объекте метаданных (если нужно). -#Если "#Параметр(3)" = "НеОграничиватьДоступКГруппам" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Т.ЭтоГруппа ИЛИ -#КонецЕсли - ИСТИНА В ( // Проверка права пользователя на текущую таблицу в целом. // Права на таблицы формируются по составу ролей профиля группы доступа. @@ -413,6 +408,12 @@ И СоставыГруппПользователей.ГруппаПользователей = ГруппыДоступаПользователи.Пользователь ) ГДЕ + +// Безусловная выборка групп в иерархическом объекте метаданных (если нужно). +#Если "#Параметр(3)" = "НеОграничиватьДоступКГруппам" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Т.ЭтоГруппа ИЛИ +#КонецЕсли + ( // Поиск значений заданных полей в разрешенных значениях групп доступа (пользователей). #Параметр(5) // [([(][(]...] 0-n открывающихся скобок. diff --git a/SSL/src/Roles/ИзменениеДополнительныхСведений/Rights.rights b/SSL/src/Roles/ИзменениеДополнительныхСведений/Rights.rights index ff872b065..1bbc71ec7 100644 --- a/SSL/src/Roles/ИзменениеДополнительныхСведений/Rights.rights +++ b/SSL/src/Roles/ИзменениеДополнительныхСведений/Rights.rights @@ -208,11 +208,6 @@ Т ГДЕ // Т - псевдоним текущей таблицы (выбран коротким, чтобы сократить количество символов в тексте параметра-условия на языке запросов). -// Безусловная выборка групп в иерархическом объекте метаданных (если нужно). -#Если "#Параметр(3)" = "НеОграничиватьДоступКГруппам" #Тогда - Т.ЭтоГруппа ИЛИ -#КонецЕсли - ИСТИНА В ( // Проверка права пользователя на текущую таблицу в целом. // Права на таблицы формируются по составу ролей профиля группы доступа. @@ -246,6 +241,12 @@ И СоставыГруппПользователей.ГруппаПользователей = ГруппыДоступаПользователи.Пользователь ) ГДЕ + +// Безусловная выборка групп в иерархическом объекте метаданных (если нужно). +#Если "#Параметр(3)" = "НеОграничиватьДоступКГруппам" #Тогда + Т.ЭтоГруппа ИЛИ +#КонецЕсли + ( // Поиск значений заданных полей в разрешенных значениях групп доступа (пользователей). //// Проверка значения поля группы параметров 1. diff --git a/SSL/src/Roles/ИзменениеУчастниковГруппДоступа/Rights.rights b/SSL/src/Roles/ИзменениеУчастниковГруппДоступа/Rights.rights index 9b61d0de6..6e1c95c85 100644 --- a/SSL/src/Roles/ИзменениеУчастниковГруппДоступа/Rights.rights +++ b/SSL/src/Roles/ИзменениеУчастниковГруппДоступа/Rights.rights @@ -291,11 +291,6 @@ Т ГДЕ // Т - псевдоним текущей таблицы (выбран коротким, чтобы сократить количество символов в тексте параметра-условия на языке запросов). -// Безусловная выборка групп в иерархическом объекте метаданных (если нужно). -#Если "#Параметр(3)" = "НеОграничиватьДоступКГруппам" #Тогда - Т.ЭтоГруппа ИЛИ -#КонецЕсли - ИСТИНА В ( // Проверка права пользователя на текущую таблицу в целом. // Права на таблицы формируются по составу ролей профиля группы доступа. @@ -329,6 +324,12 @@ И СоставыГруппПользователей.ГруппаПользователей = ГруппыДоступаПользователи.Пользователь ) ГДЕ + +// Безусловная выборка групп в иерархическом объекте метаданных (если нужно). +#Если "#Параметр(3)" = "НеОграничиватьДоступКГруппам" #Тогда + Т.ЭтоГруппа ИЛИ +#КонецЕсли + ( // Поиск значений заданных полей в разрешенных значениях групп доступа (пользователей). //// Проверка значения поля группы параметров 1. @@ -3308,11 +3309,6 @@ ГДЕ -// Безусловная выборка групп в иерархическом объекте метаданных (если нужно). -#Если "#Параметр(3)" = "НеОграничиватьДоступКГруппам" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Т.ЭтоГруппа ИЛИ -#КонецЕсли - ИСТИНА В ( // Проверка права пользователя на текущую таблицу в целом. // Права на таблицы формируются по составу ролей профиля группы доступа. @@ -3346,6 +3342,12 @@ И СоставыГруппПользователей.ГруппаПользователей = ГруппыДоступаПользователи.Пользователь ) ГДЕ + +// Безусловная выборка групп в иерархическом объекте метаданных (если нужно). +#Если "#Параметр(3)" = "НеОграничиватьДоступКГруппам" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Т.ЭтоГруппа ИЛИ +#КонецЕсли + ( // Поиск значений заданных полей в разрешенных значениях групп доступа (пользователей). #Параметр(5) // [([(][(]...] 0-n открывающихся скобок. @@ -12655,11 +12657,6 @@ ГДЕ -// Безусловная выборка групп в иерархическом объекте метаданных (если нужно). -#Если "#Параметр(3)" = "НеОграничиватьДоступКГруппам" #Тогда - Т.ЭтоГруппа ИЛИ -#КонецЕсли - ИСТИНА В ( // Проверка права пользователя на текущую таблицу в целом. // Права на таблицы формируются по составу ролей профиля группы доступа. @@ -12693,6 +12690,12 @@ И СоставыГруппПользователей.ГруппаПользователей = ГруппыДоступаПользователи.Пользователь ) ГДЕ + +// Безусловная выборка групп в иерархическом объекте метаданных (если нужно). +#Если "#Параметр(3)" = "НеОграничиватьДоступКГруппам" #Тогда + Т.ЭтоГруппа ИЛИ +#КонецЕсли + ( // Поиск значений заданных полей в разрешенных значениях групп доступа (пользователей). #Параметр(5) // [([(][(]...] 0-n открывающихся скобок. @@ -15602,11 +15605,6 @@ Т ГДЕ // Т - псевдоним текущей таблицы (выбран коротким, чтобы сократить количество символов в тексте параметра-условия на языке запросов). -// Безусловная выборка групп в иерархическом объекте метаданных (если нужно). -#Если "#Параметр(3)" = "НеОграничиватьДоступКГруппам" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Т.ЭтоГруппа Или -#КонецЕсли - ИСТИНА В ( // Проверка права пользователя на текущую таблицу в целом. // Права на таблицы формируются по составу ролей профиля группы доступа. @@ -15640,6 +15638,12 @@ И СоставыГруппПользователей.ГруппаПользователей = ГруппыДоступаПользователи.Пользователь ) ГДЕ + +// Безусловная выборка групп в иерархическом объекте метаданных (если нужно). +#Если "#Параметр(3)" = "НеОграничиватьДоступКГруппам" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Т.ЭтоГруппа Или +#КонецЕсли + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( diff --git a/SSL/src/Roles/ПолныеПрава/Rights.rights b/SSL/src/Roles/ПолныеПрава/Rights.rights index 8a31945ec..a6f3de175 100644 --- a/SSL/src/Roles/ПолныеПрава/Rights.rights +++ b/SSL/src/Roles/ПолныеПрава/Rights.rights @@ -1923,7 +1923,7 @@ - Constant.ЛогинДоступаКСервисуMorpher + Constant.УдалитьЛогинДоступаКСервисуMorpher Update false @@ -1993,45 +1993,6 @@ false - - Configuration.БиблиотекаСтандартныхПодсистем - - Administration - false - - - UpdateDataBaseConfiguration - false - - - ThickClient - false - - - ExternalConnection - false - - - Automation - false - - - TechnicalSpecialistMode - false - - - ConfigurationExtensionsAdministration - false - - - InteractiveOpenExtDataProcessors - false - - - InteractiveOpenExtReports - false - - InformationRegister.УдалитьБлокировкиСеансовОбластиДанных @@ -2658,6 +2619,13 @@ false + + DataProcessor.РезервноеКопированиеИБ.Command.ПоказатьРезультат + + View + false + + InformationRegister.ОбластиДанных @@ -2967,6 +2935,13 @@ false + + DataProcessor.ОценкаПроизводительности.Command.ИмпортЗамеровПроизводительности + + View + false + + InformationRegister.ПакетыИнформацииПриЗапуске @@ -3368,6 +3343,17 @@ false + + DataProcessor.НастройкиЦентраМониторинга + + Use + false + + + View + false + + Catalog.СтраныМира @@ -3391,6 +3377,13 @@ false + + DataProcessor.ОценкаПроизводительности.Command.ЭкспортЗамеровПроизводительности + + View + false + + Document.ОтзывСогласияНаОбработкуПерсональныхДанных @@ -4829,6 +4822,45 @@ false + + Configuration.БиблиотекаСтандартныхПодсистем + + Administration + false + + + UpdateDataBaseConfiguration + false + + + ThickClient + false + + + ExternalConnection + false + + + Automation + false + + + TechnicalSpecialistMode + false + + + ConfigurationExtensionsAdministration + false + + + InteractiveOpenExtDataProcessors + false + + + InteractiveOpenExtReports + false + + InformationRegister.УровниСокращенийАдресныхСведений @@ -4844,6 +4876,13 @@ false + + DataProcessor.НастройкиЦентраМониторинга.Command.НастройкаОтправкиОтчетовОбОшибках + + View + false + + Constant.РазмерБлокаПередачиФайла @@ -5576,6 +5615,13 @@ false + + DataProcessor.ОценкаПроизводительности.Command.НастройкиОценкиПроизводительности + + View + false + + InformationRegister.УдалитьСтраныМира diff --git a/SSL/src/Roles/ЧтениеДополнительныхОтчетовИОбработок/Rights.rights b/SSL/src/Roles/ЧтениеДополнительныхОтчетовИОбработок/Rights.rights index 138ef9a2d..56047700f 100644 --- a/SSL/src/Roles/ЧтениеДополнительныхОтчетовИОбработок/Rights.rights +++ b/SSL/src/Roles/ЧтениеДополнительныхОтчетовИОбработок/Rights.rights @@ -227,11 +227,6 @@ Т ГДЕ // Т - псевдоним текущей таблицы (выбран коротким, чтобы сократить количество символов в тексте параметра-условия на языке запросов). -// Безусловная выборка групп в иерархическом объекте метаданных (если нужно). -#Если "#Параметр(3)" = "НеОграничиватьДоступКГруппам" #Тогда - Т.ЭтоГруппа ИЛИ -#КонецЕсли - ИСТИНА В ( // Проверка права пользователя на текущую таблицу в целом. // Права на таблицы формируются по составу ролей профиля группы доступа. @@ -265,6 +260,12 @@ И СоставыГруппПользователей.ГруппаПользователей = ГруппыДоступаПользователи.Пользователь ) ГДЕ + +// Безусловная выборка групп в иерархическом объекте метаданных (если нужно). +#Если "#Параметр(3)" = "НеОграничиватьДоступКГруппам" #Тогда + Т.ЭтоГруппа ИЛИ +#КонецЕсли + ( // Поиск значений заданных полей в разрешенных значениях групп доступа (пользователей). //// Проверка значения поля группы параметров 1. diff --git a/SSL/src/Roles/ЧтениеДополнительныхСведений/Rights.rights b/SSL/src/Roles/ЧтениеДополнительныхСведений/Rights.rights index 529b3cf0d..f6d3675b2 100644 --- a/SSL/src/Roles/ЧтениеДополнительныхСведений/Rights.rights +++ b/SSL/src/Roles/ЧтениеДополнительныхСведений/Rights.rights @@ -195,11 +195,6 @@ Т ГДЕ // Т - псевдоним текущей таблицы (выбран коротким, чтобы сократить количество символов в тексте параметра-условия на языке запросов). -// Безусловная выборка групп в иерархическом объекте метаданных (если нужно). -#Если "#Параметр(3)" = "НеОграничиватьДоступКГруппам" #Тогда - Т.ЭтоГруппа ИЛИ -#КонецЕсли - ИСТИНА В ( // Проверка права пользователя на текущую таблицу в целом. // Права на таблицы формируются по составу ролей профиля группы доступа. @@ -233,6 +228,12 @@ И СоставыГруппПользователей.ГруппаПользователей = ГруппыДоступаПользователи.Пользователь ) ГДЕ + +// Безусловная выборка групп в иерархическом объекте метаданных (если нужно). +#Если "#Параметр(3)" = "НеОграничиватьДоступКГруппам" #Тогда + Т.ЭтоГруппа ИЛИ +#КонецЕсли + ( // Поиск значений заданных полей в разрешенных значениях групп доступа (пользователей). //// Проверка значения поля группы параметров 1. diff --git a/SSL/src/Roles/ЧтениеЗаданий/Rights.rights b/SSL/src/Roles/ЧтениеЗаданий/Rights.rights index 957be0258..8dbd83a54 100644 --- a/SSL/src/Roles/ЧтениеЗаданий/Rights.rights +++ b/SSL/src/Roles/ЧтениеЗаданий/Rights.rights @@ -356,11 +356,6 @@ ГДЕ -// Безусловная выборка групп в иерархическом объекте метаданных (если нужно). -#Если "#Параметр(3)" = "НеОграничиватьДоступКГруппам" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Т.ЭтоГруппа ИЛИ -#КонецЕсли - ИСТИНА В ( // Проверка права пользователя на текущую таблицу в целом. // Права на таблицы формируются по составу ролей профиля группы доступа. @@ -394,6 +389,12 @@ И СоставыГруппПользователей.ГруппаПользователей = ГруппыДоступаПользователи.Пользователь ) ГДЕ + +// Безусловная выборка групп в иерархическом объекте метаданных (если нужно). +#Если "#Параметр(3)" = "НеОграничиватьДоступКГруппам" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Т.ЭтоГруппа ИЛИ +#КонецЕсли + ( // Поиск значений заданных полей в разрешенных значениях групп доступа (пользователей). #Параметр(5) // [([(][(]...] 0-n открывающихся скобок. diff --git a/SSL/src/Roles/ЧтениеЗадач/Rights.rights b/SSL/src/Roles/ЧтениеЗадач/Rights.rights index d86697a49..af9e6bc1a 100644 --- a/SSL/src/Roles/ЧтениеЗадач/Rights.rights +++ b/SSL/src/Roles/ЧтениеЗадач/Rights.rights @@ -329,11 +329,6 @@ ГДЕ -// Безусловная выборка групп в иерархическом объекте метаданных (если нужно). -#Если "#Параметр(3)" = "НеОграничиватьДоступКГруппам" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Т.ЭтоГруппа ИЛИ -#КонецЕсли - ИСТИНА В ( // Проверка права пользователя на текущую таблицу в целом. // Права на таблицы формируются по составу ролей профиля группы доступа. @@ -367,6 +362,12 @@ И СоставыГруппПользователей.ГруппаПользователей = ГруппыДоступаПользователи.Пользователь ) ГДЕ + +// Безусловная выборка групп в иерархическом объекте метаданных (если нужно). +#Если "#Параметр(3)" = "НеОграничиватьДоступКГруппам" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Т.ЭтоГруппа ИЛИ +#КонецЕсли + ( // Поиск значений заданных полей в разрешенных значениях групп доступа (пользователей). #Параметр(5) // [([(][(]...] 0-n открывающихся скобок. diff --git a/SSL/src/Roles/ЧтениеРезультатовПроверкиУчета/Rights.rights b/SSL/src/Roles/ЧтениеРезультатовПроверкиУчета/Rights.rights index 5ac6c1a4b..f59a2c408 100644 --- a/SSL/src/Roles/ЧтениеРезультатовПроверкиУчета/Rights.rights +++ b/SSL/src/Roles/ЧтениеРезультатовПроверкиУчета/Rights.rights @@ -58,8 +58,8 @@ true #ПоЗначениям( "РегистрСведений.РезультатыПроверкиУчета", "","", -"", "", -"ПравоЧтения","ПроблемныйОбъект", +"ПравоЧтения", "ПроблемныйОбъект", +"","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","") @@ -230,11 +230,6 @@ Т ГДЕ // Т - псевдоним текущей таблицы (выбран коротким, чтобы сократить количество символов в тексте параметра-условия на языке запросов). -// Безусловная выборка групп в иерархическом объекте метаданных (если нужно). -#Если "#Параметр(3)" = "НеОграничиватьДоступКГруппам" #Тогда - Т.ЭтоГруппа ИЛИ -#КонецЕсли - ИСТИНА В ( // Проверка права пользователя на текущую таблицу в целом. // Права на таблицы формируются по составу ролей профиля группы доступа. @@ -268,6 +263,12 @@ И СоставыГруппПользователей.ГруппаПользователей = ГруппыДоступаПользователи.Пользователь ) ГДЕ + +// Безусловная выборка групп в иерархическом объекте метаданных (если нужно). +#Если "#Параметр(3)" = "НеОграничиватьДоступКГруппам" #Тогда + Т.ЭтоГруппа ИЛИ +#КонецЕсли + ( // Поиск значений заданных полей в разрешенных значениях групп доступа (пользователей). //// Проверка значения поля группы параметров 1. diff --git a/SSL/src/ScheduledJobs/СборИОтправкаОтчетовОбОшибках/СборИОтправкаОтчетовОбОшибках.mdo b/SSL/src/ScheduledJobs/СборИОтправкаОтчетовОбОшибках/СборИОтправкаОтчетовОбОшибках.mdo new file mode 100644 index 000000000..af4532171 --- /dev/null +++ b/SSL/src/ScheduledJobs/СборИОтправкаОтчетовОбОшибках/СборИОтправкаОтчетовОбОшибках.mdo @@ -0,0 +1,14 @@ + + + СборИОтправкаОтчетовОбОшибках + + ru + Сбор и отправка отчетов об ошибках + + CommonModule.ЦентрМониторингаСлужебный.СобратьИОтправитьДампы + Сбор и отправка отчетов об ошибках + 584cfc82-81d9-4696-8afa-1189f883fcd0 + true + 3 + 10 + diff --git a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборВариантаОтчета/Module.bsl b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборВариантаОтчета/Module.bsl index ac5157466..37d79aea8 100644 --- a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборВариантаОтчета/Module.bsl +++ b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборВариантаОтчета/Module.bsl @@ -278,33 +278,34 @@ ТекстЗапроса = "ВЫБРАТЬ РАЗРЕШЕННЫЕ - | ВариантыОтчетов.Ссылка, - | ВариантыОтчетов.Наименование, - | ВариантыОтчетов.КлючВарианта, + | ВариантыОтчетов.Ссылка КАК Ссылка, + | ВариантыОтчетов.Наименование КАК Наименование, + | ВариантыОтчетов.КлючВарианта КАК КлючВарианта, | ВЫБОР | КОГДА ПОДСТРОКА(ВариантыОтчетов.Описание, 1, 1) = """" | ТОГДА ВЫРАЗИТЬ(ВариантыОтчетов.ПредопределенныйВариант.Описание КАК СТРОКА(1000)) | ИНАЧЕ ВЫРАЗИТЬ(ВариантыОтчетов.Описание КАК СТРОКА(1000)) | КОНЕЦ КАК Описание, | ВЫБОР - | КОГДА НЕ ВариантыОтчетов.Пользовательский И НЕ ВариантыОтчетов.ВидимостьПоУмолчаниюПереопределена + | КОГДА НЕ ВариантыОтчетов.Пользовательский + | И НЕ ВариантыОтчетов.ВидимостьПоУмолчаниюПереопределена | ТОГДА ЕСТЬNULL(ВариантыОтчетов.ПредопределенныйВариант.ВидимостьПоУмолчанию, ЛОЖЬ) | ИНАЧЕ ВариантыОтчетов.ВидимостьПоУмолчанию | КОНЕЦ КАК ВидимостьПоУмолчанию, - | ВариантыОтчетов.Автор, - | ВариантыОтчетов.ТолькоДляАвтора, - | ВариантыОтчетов.Пользовательский, - | ВариантыОтчетов.ПометкаУдаления, - | ВариантыОтчетов.ПредопределенныйВариант + | ВариантыОтчетов.Автор КАК Автор, + | ВариантыОтчетов.ТолькоДляАвтора КАК ТолькоДляАвтора, + | ВариантыОтчетов.Пользовательский КАК Пользовательский, + | ВариантыОтчетов.ПометкаУдаления КАК ПометкаУдаления, + | ВариантыОтчетов.ПредопределенныйВариант КАК ПредопределенныйВариант |ПОМЕСТИТЬ втВарианты |ИЗ | Справочник.ВариантыОтчетов КАК ВариантыОтчетов |ГДЕ | ВариантыОтчетов.Отчет = &Отчет - | И НЕ(НЕ ВариантыОтчетов.Пользовательский = ИСТИНА - | И НЕ ВариантыОтчетов.ПометкаУдаления = ЛОЖЬ) - | И НЕ(НЕ ВариантыОтчетов.ТолькоДляАвтора = ЛОЖЬ - | И НЕ ВариантыОтчетов.Автор = &ТекущийПользователь) + | И (ВариантыОтчетов.Пользовательский = ИСТИНА + | ИЛИ ВариантыОтчетов.ПометкаУдаления = ЛОЖЬ) + | И (ВариантыОтчетов.ТолькоДляАвтора = ЛОЖЬ + | ИЛИ ВариантыОтчетов.Автор = &ТекущийПользователь) | И НЕ ВариантыОтчетов.ПредопределенныйВариант В (&ОтключенныеВариантыПрограммы) |; | @@ -349,7 +350,7 @@ | ЕСТЬNULL(РазмещениеАдминистратора.Подсистема, РазмещениеРазработчика.Подсистема) КАК Подсистема, | ЕСТЬNULL(РазмещениеАдминистратора.Использование, ИСТИНА) КАК Использование, | ВЫБОР - | КОГДА РазмещениеАдминистратора.Ссылка ЕСТЬ NULL + | КОГДА РазмещениеАдминистратора.Ссылка ЕСТЬ NULL | ТОГДА ИСТИНА | ИНАЧЕ ЛОЖЬ | КОНЕЦ КАК ЭтоНастройкаРазработчика @@ -383,14 +384,14 @@ | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ - | Варианты.Ссылка, - | Варианты.Наименование, - | Варианты.КлючВарианта, - | Варианты.ВидимостьПоУмолчанию, - | Варианты.Автор, - | Варианты.ТолькоДляАвтора, - | Варианты.Пользовательский, - | Варианты.ПометкаУдаления, + | Варианты.Ссылка КАК Ссылка, + | Варианты.Наименование КАК Наименование, + | Варианты.КлючВарианта КАК КлючВарианта, + | Варианты.ВидимостьПоУмолчанию КАК ВидимостьПоУмолчанию, + | Варианты.Автор КАК Автор, + | Варианты.ТолькоДляАвтора КАК ТолькоДляАвтора, + | Варианты.Пользовательский КАК Пользовательский, + | Варианты.ПометкаУдаления КАК ПометкаУдаления, | ВЫБОР | КОГДА Варианты.ПометкаУдаления = ИСТИНА | ТОГДА 3 @@ -398,7 +399,7 @@ | ТОГДА 1 | ИНАЧЕ 2 | КОНЕЦ КАК НомерГруппы, - | Варианты.Описание, + | Варианты.Описание КАК Описание, | ВЫБОР | КОГДА Варианты.ПометкаУдаления | ТОГДА 4 diff --git a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборПоляОтчета/Module.bsl b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборПоляОтчета/Module.bsl index b08e44239..c83830f6b 100644 --- a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборПоляОтчета/Module.bsl +++ b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборПоляОтчета/Module.bsl @@ -253,7 +253,6 @@ СтрокаДерева = СтрокиДерева.Добавить(); СтрокаДерева.Представление = СтрЗаменить(ДоступноеПолеКД.Заголовок, Префикс, ""); СтрокаДерева.ИдентификаторКД = ТаблицаКД.ПолучитьИдентификаторПоОбъекту(ДоступноеПолеКД); - НадоПрочитатьВложенные = Неопределено; Если ДоступноеПолеКД.Таблица Тогда Тип = "Таблица"; ИначеЕсли ДоступноеПолеКД.Ресурс Тогда diff --git a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ПанельДругихОтчетов/Module.bsl b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ПанельДругихОтчетов/Module.bsl index 7e880cfe2..c80584fc9 100644 --- a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ПанельДругихОтчетов/Module.bsl +++ b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ПанельДругихОтчетов/Module.bsl @@ -143,7 +143,6 @@ КонецЦикла; Элементы.ГруппаДругиеВариантыОтчета.Видимость = (ТаблицаВариантов.Количество() > 0); - ВидимостьГруппыПохожиеОтчеты = Ложь; Если ЗначениеЗаполнено(ПодсистемаСсылка) Тогда Подсистемы = Подсистемы(); diff --git a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/СохранениеВариантаОтчета/Module.bsl b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/СохранениеВариантаОтчета/Module.bsl index 85ed822ea..e0bb844fb 100644 --- a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/СохранениеВариантаОтчета/Module.bsl +++ b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/СохранениеВариантаОтчета/Module.bsl @@ -719,12 +719,12 @@ | Справочник.ВариантыОтчетов КАК ВариантыОтчетов |ГДЕ | ВариантыОтчетов.Отчет = &Отчет - | И НЕ(НЕ ВариантыОтчетов.ПометкаУдаления = ЛОЖЬ - | И НЕ ВариантыОтчетов.Пользовательский = ИСТИНА) - | И НЕ(НЕ ВариантыОтчетов.ТолькоДляАвтора = ЛОЖЬ - | И НЕ ВариантыОтчетов.Автор = &ТекущийПользователь - | И НЕ ВариантыОтчетов.КлючВарианта = &ПрототипКлюч - | И НЕ ВариантыОтчетов.КлючВарианта = &ТекущийКлючВарианта) + | И (ВариантыОтчетов.ПометкаУдаления = ЛОЖЬ + | ИЛИ ВариантыОтчетов.Пользовательский = ИСТИНА) + | И (ВариантыОтчетов.ТолькоДляАвтора = ЛОЖЬ + | ИЛИ ВариантыОтчетов.Автор = &ТекущийПользователь + | ИЛИ ВариантыОтчетов.КлючВарианта = &ПрототипКлюч + | ИЛИ ВариантыОтчетов.КлючВарианта = &ТекущийКлючВарианта) | И НЕ ВариантыОтчетов.ПредопределенныйВариант В (&ОтключенныеВариантыПрограммы)"; Запрос = Новый Запрос; diff --git a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ЭлементУсловногоОформленияОтчета/Form.form b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ЭлементУсловногоОформленияОтчета/Form.form index 43161a90d..92e46791b 100644 --- a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ЭлементУсловногоОформленияОтчета/Form.form +++ b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ЭлементУсловногоОформленияОтчета/Form.form @@ -3061,24 +3061,6 @@ true - - НаименованиеПереопределено - - <key>ru</key> - <value>Наименование переопределено</value> - - 7 - - String - - - - true - - - true - - Наименование diff --git a/SSL/src/StyleItems/ЦветФонаПредупреждения/ЦветФонаПредупреждения.mdo b/SSL/src/StyleItems/ЦветФонаПредупреждения/ЦветФонаПредупреждения.mdo new file mode 100644 index 000000000..5da262a76 --- /dev/null +++ b/SSL/src/StyleItems/ЦветФонаПредупреждения/ЦветФонаПредупреждения.mdo @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:StyleItem xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:core="http://g5.1c.ru/v8/dt/mcore" xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="b8c4aff0-a36d-4be9-9a5e-b0873d83ff15"> + <name>ЦветФонаПредупреждения</name> + <synonym> + <key>ru</key> + <value>Цвет фона предупреждения</value> + </synonym> + <value xsi:type="core:ColorValue"> + <value xsi:type="core:ColorDef"> + <red>251</red> + <green>212</green> + <blue>212</blue> + </value> + </value> +</mdclass:StyleItem> diff --git a/SSL/src/Subsystems/Администрирование/CommandInterface.cmi b/SSL/src/Subsystems/Администрирование/CommandInterface.cmi index b14552d5f..88def58cd 100644 --- a/SSL/src/Subsystems/Администрирование/CommandInterface.cmi +++ b/SSL/src/Subsystems/Администрирование/CommandInterface.cmi @@ -353,6 +353,14 @@ <command>CommonForm.НастройкиВходаПользователей.StandardCommand.Open</command> <visible/> </visibilityFragments> + <visibilityFragments> + <command>DataProcessor.ПодключениеОбсуждений.Command.ОтключениеОбсуждений</command> + <visible/> + </visibilityFragments> + <visibilityFragments> + <command>DataProcessor.ПодключениеОбсуждений.StandardCommand.Open</command> + <visible/> + </visibilityFragments> <visibilityFragments> <command>DataProcessor.ИнформацияПриЗапуске.Command.ИнформацияПриЗапуске</command> <visible/> @@ -488,6 +496,10 @@ <commands>DataProcessor.ОценкаПроизводительности.Command.ЭкспортЗамеровПроизводительности</commands> <commands>CommonForm.НастройкиВходаПользователей.StandardCommand.Open</commands> <commands>DataProcessor.ОценкаПроизводительности.Command.ИмпортЗамеровПроизводительности</commands> + <commands>DataProcessor.ПодключениеОбсуждений.Command.ОтключениеОбсуждений</commands> + <commands>DataProcessor.ПодключениеОбсуждений.StandardCommand.Open</commands> + <commands>DataProcessor.НастройкиЦентраМониторинга.Command.НастройкаОтправкиОтчетовОбОшибках</commands> + <commands>DataProcessor.НастройкиЦентраМониторинга.StandardCommand.Open</commands> </orderFragments> </commandsOrder> </cmi:CommandInterface> diff --git a/SSL/src/Subsystems/Администрирование/Администрирование.mdo b/SSL/src/Subsystems/Администрирование/Администрирование.mdo index 87e71da63..4e960b306 100644 --- a/SSL/src/Subsystems/Администрирование/Администрирование.mdo +++ b/SSL/src/Subsystems/Администрирование/Администрирование.mdo @@ -93,5 +93,9 @@ <content>DataProcessor.ВыгрузкаЗагрузкаEnterpriseData</content> <content>Catalog.ПрофилиКлючевыхОпераций</content> <content>Report.ОценкаПроизводительности</content> + <content>DataProcessor.ПодключениеОбсуждений</content> + <content>DataProcessor.НастройкиЦентраМониторинга</content> <content>Catalog.ПравилаПроверкиУчета</content> + <content>Report.ИспользуемыеВнешниеРесурсы</content> + <content>Report.РезультатыПроверкиУчета</content> </mdclass:Subsystem> diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Анкетирование/Анкетирование.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Анкетирование/Анкетирование.mdo index fb37c3dfd..7a5ef5a0f 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Анкетирование/Анкетирование.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Анкетирование/Анкетирование.mdo @@ -45,5 +45,6 @@ <content>Enum.РежимыАнкетирования</content> <content>Enum.ВидыПереключателяВАнкетах</content> <content>CommonPicture.ДобавитьКомплексныйВопрос</content> + <content>Enum.ВидыФлажкаВАнкетах</content> <parentSubsystem>Subsystem.СтандартныеПодсистемы</parentSubsystem> </mdclass:Subsystem> diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/БазоваяФункциональность/БазоваяФункциональность.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/БазоваяФункциональность/БазоваяФункциональность.mdo index 9f1a0f449..a66ecf8d5 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/БазоваяФункциональность/БазоваяФункциональность.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/БазоваяФункциональность/БазоваяФункциональность.mdo @@ -225,5 +225,8 @@ <content>SessionParameter.ОтмененныеДлительныеОперации</content> <content>StyleItem.ЦветРазделаПанелиФункций</content> <content>CommonPicture.ЗначокЩита</content> + <content>StyleItem.ЦветФонаПредупреждения</content> + <content>CommonModule.СтандартныеПодсистемыБезопасныйРежим</content> + <content>CommonPicture.ДлительнаяОперация16</content> <parentSubsystem>Subsystem.СтандартныеПодсистемы</parentSubsystem> </mdclass:Subsystem> diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/КонтрольВеденияУчета/КонтрольВеденияУчета.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/КонтрольВеденияУчета/КонтрольВеденияУчета.mdo index d949556ff..230b4e373 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/КонтрольВеденияУчета/КонтрольВеденияУчета.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/КонтрольВеденияУчета/КонтрольВеденияУчета.mdo @@ -15,10 +15,10 @@ <content>Report.РезультатыПроверкиУчета</content> <content>InformationRegister.РезультатыПроверкиУчета</content> <content>CommonModule.КонтрольВеденияУчетаСлужебныйКлиент</content> - <content>CommonModule.КонтрольВеденияУчетаПовтИсп</content> - <content>DefinedType.КонтекстПроверокВеденияУчета</content> - <content>DefinedType.УточнениеКонтекстаПроверкиСостоянияСистемы</content> + <content>CommonModule.КонтрольВеденияУчетаСлужебныйПовтИсп</content> <content>Catalog.ПравилаПроверкиУчета</content> + <content>DefinedType.КонтекстПроверокВеденияУчета</content> + <content>DefinedType.УточнениеКонтекстаПроверокВеденияУчета</content> <content>Enum.ВажностьПроблемыУчета</content> <content>Enum.СпособВыполненияПроверки</content> <parentSubsystem>Subsystem.СтандартныеПодсистемы</parentSubsystem> diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/НапоминанияПользователя/НапоминанияПользователя.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/НапоминанияПользователя/НапоминанияПользователя.mdo index 75c3f8149..4e8a63510 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/НапоминанияПользователя/НапоминанияПользователя.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/НапоминанияПользователя/НапоминанияПользователя.mdo @@ -24,5 +24,6 @@ <content>DefinedType.ПредметНапоминания</content> <content>DefinedType.ПредметНапоминанияОбъект</content> <content>CommonModule.НапоминанияПользователяПереопределяемый</content> + <content>CommonModule.НапоминанияПользователя</content> <parentSubsystem>Subsystem.СтандартныеПодсистемы</parentSubsystem> </mdclass:Subsystem> diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Обсуждения/Обсуждения.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Обсуждения/Обсуждения.mdo new file mode 100644 index 000000000..0cc0ecdaf --- /dev/null +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Обсуждения/Обсуждения.mdo @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:Subsystem xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="839e29b1-a0d2-40fa-9f3e-46e66b943358"> + <name>Обсуждения</name> + <synonym> + <key>ru</key> + <value>Обсуждения</value> + </synonym> + <content>DataProcessor.ПодключениеОбсуждений</content> + <content>CommonPicture.Обсуждения</content> + <content>CommonModule.ОбсужденияСлужебныйКлиент</content> + <parentSubsystem>Subsystem.СтандартныеПодсистемы</parentSubsystem> +</mdclass:Subsystem> diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОтчетОДвиженияхДокумента/ОтчетОДвиженияхДокумента.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОтчетОДвиженияхДокумента/ОтчетОДвиженияхДокумента.mdo index cfd5279d9..1a844d0c8 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОтчетОДвиженияхДокумента/ОтчетОДвиженияхДокумента.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОтчетОДвиженияхДокумента/ОтчетОДвиженияхДокумента.mdo @@ -5,7 +5,7 @@ <key>ru</key> <value>Отчет о движениях документа</value> </synonym> - <content>Report.ОтчетОДвиженияхДокумента</content> + <content>Report.ДвиженияДокумента</content> <content>CommonModule.ОтчетОДвиженияхДокументаСлужебныйКлиент</content> <parentSubsystem>Subsystem.СтандартныеПодсистемы</parentSubsystem> </mdclass:Subsystem> diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Печать/Печать.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Печать/Печать.mdo index 8773e78d4..fea726e53 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Печать/Печать.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Печать/Печать.mdo @@ -31,10 +31,8 @@ <content>CommonForm.СохранениеПечатнойФормы</content> <content>CommonModule.УправлениеПечатьюВызовСервера</content> <content>CommonPicture.ИспользованиеМакета</content> - <content>CommonModule.УправлениеПечатьюКлиентПовтИсп</content> <content>CommonModule.УправлениеПечатьюСлужебныйКлиент</content> <content>CommonTemplate.КомпонентаПечатиQRКода</content> - <content>CommonModule.УправлениеПечатьюПовтИсп</content> <content>InformationRegister.НастройкиКомандПечати</content> <content>CommonForm.НастройкаКомандПечати</content> <content>CommonPicture.Пустая</content> diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ПолнотекстовыйПоиск/ПолнотекстовыйПоиск.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ПолнотекстовыйПоиск/ПолнотекстовыйПоиск.mdo index 323647a5c..3181b9ced 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ПолнотекстовыйПоиск/ПолнотекстовыйПоиск.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ПолнотекстовыйПоиск/ПолнотекстовыйПоиск.mdo @@ -18,5 +18,6 @@ <content>FunctionalOption.ИспользоватьПолнотекстовыйПоиск</content> <content>CommonModule.ПолнотекстовыйПоискСерверПереопределяемый</content> <content>CommonForm.ФормаПоиска</content> + <content>CommonModule.ПолнотекстовыйПоискКлиент</content> <parentSubsystem>Subsystem.СтандартныеПодсистемы</parentSubsystem> </mdclass:Subsystem> diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/ПользователиВМоделиСервиса/ПользователиВМоделиСервиса.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/ПользователиВМоделиСервиса/ПользователиВМоделиСервиса.mdo index 12887b48e..2ba46e394 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/ПользователиВМоделиСервиса/ПользователиВМоделиСервиса.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/ПользователиВМоделиСервиса/ПользователиВМоделиСервиса.mdo @@ -10,6 +10,5 @@ <content>CommonCommand.ДобавитьПользователейСервиса</content> <content>CommonModule.ПользователиСлужебныйВМоделиСервисаКлиент</content> <content>CommonForm.АутентификацияВСервисе</content> - <content>CommonModule.ПользователиСлужебныйВМоделиСервисаПовтИсп</content> <parentSubsystem>Subsystem.СтандартныеПодсистемы.Subsystem.РаботаВМоделиСервиса</parentSubsystem> </mdclass:Subsystem> diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаСФайлами/РаботаСФайлами.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаСФайлами/РаботаСФайлами.mdo index adef5af64..01a672c99 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаСФайлами/РаботаСФайлами.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаСФайлами/РаботаСФайлами.mdo @@ -116,7 +116,6 @@ <content>CommonModule.ПрисоединенныеФайлы</content> <content>CommonModule.ПрисоединенныеФайлыКлиент</content> <content>CommonModule.ПрисоединенныеФайлыКлиентСервер</content> - <content>CommonModule.ПрисоединенныеФайлыПереопределяемый</content> <content>CommonModule.РаботаСФайламиСлужебныйПовтИсп</content> <content>CommonModule.ФайловыеФункцииКлиент</content> <content>CommonModule.ФайловыеФункции</content> diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/СклонениеПредставленийОбъектов/СклонениеПредставленийОбъектов.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/СклонениеПредставленийОбъектов/СклонениеПредставленийОбъектов.mdo index 233a8e9c7..b086532b2 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/СклонениеПредставленийОбъектов/СклонениеПредставленийОбъектов.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/СклонениеПредставленийОбъектов/СклонениеПредставленийОбъектов.mdo @@ -13,7 +13,7 @@ <content>CommonModule.СклонениеПредставленийОбъектовКлиентСервер</content> <content>CommonModule.СклонениеПредставленийОбъектовКлиент</content> <content>CommonModule.СклонениеПредставленийОбъектовВызовСервера</content> - <content>Constant.ЛогинДоступаКСервисуMorpher</content> + <content>Constant.УдалитьЛогинДоступаКСервисуMorpher</content> <content>CommonTemplate.КомпонентаСклоненияФИО</content> <content>CommonForm.НастройкаДоступаКСервисуMorpher</content> <parentSubsystem>Subsystem.СтандартныеПодсистемы</parentSubsystem> diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ЦентрМониторинга/ЦентрМониторинга.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ЦентрМониторинга/ЦентрМониторинга.mdo index a35dadfca..bdf470f1b 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ЦентрМониторинга/ЦентрМониторинга.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ЦентрМониторинга/ЦентрМониторинга.mdo @@ -26,5 +26,8 @@ <content>CommonModule.ЦентрМониторингаКлиент</content> <content>CommonModule.ЦентрМониторингаКлиентСлужебный</content> <content>CommonModule.ЦентрМониторингаПовтИсп</content> + <content>DataProcessor.НастройкиЦентраМониторинга</content> + <content>ScheduledJob.СборИОтправкаОтчетовОбОшибках</content> + <content>CommonModule.ЦентрМониторингаГлобальный</content> <parentSubsystem>Subsystem.СтандартныеПодсистемы</parentSubsystem> </mdclass:Subsystem> diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ШаблоныСообщений/ШаблоныСообщений.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ШаблоныСообщений/ШаблоныСообщений.mdo index 3e1a8a536..04a0f5a56 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ШаблоныСообщений/ШаблоныСообщений.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ШаблоныСообщений/ШаблоныСообщений.mdo @@ -26,5 +26,6 @@ <content>CommonModule.ШаблоныСообщенийКлиентСервер</content> <content>CommonModule.ШаблоныСообщенийСервер</content> <content>CommonModule.ШаблоныСообщенийВызовСервера</content> + <content>DefinedType.ВладелецШаблонаСообщения</content> <parentSubsystem>Subsystem.СтандартныеПодсистемы</parentSubsystem> </mdclass:Subsystem> diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/СтандартныеПодсистемы.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/СтандартныеПодсистемы.mdo index 65f48d108..9b497b5f4 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/СтандартныеПодсистемы.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/СтандартныеПодсистемы.mdo @@ -37,6 +37,7 @@ <subsystems>ОбменДанными</subsystems> <subsystems>ОбновлениеВерсииИБ</subsystems> <subsystems>ОбновлениеКонфигурации</subsystems> + <subsystems>Обсуждения</subsystems> <subsystems>ОтправкаSMS</subsystems> <subsystems>ОтчетОДвиженияхДокумента</subsystems> <subsystems>ОценкаПроизводительности</subsystems> diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоПредмету/Form.form b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоПредмету/Form.form index cd1c479cf..764d8c9d6 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоПредмету/Form.form +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоПредмету/Form.form @@ -1892,6 +1892,10 @@ <event>NotificationProcessing</event> <name>ОбработкаОповещения</name> </handlers> + <handlers> + <event>OnLoadDataFromSettingsAtServer</event> + <name>ПриЗагрузкеДанныхИзНастроекНаСервере</name> + </handlers> <handlers> <event>OnCreateAtServer</event> <name>ПриСозданииНаСервере</name> diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоПредмету/Module.bsl b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоПредмету/Module.bsl index dea36e17d..4e825c5cc 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоПредмету/Module.bsl +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоПредмету/Module.bsl @@ -239,8 +239,6 @@ &НаСервере Процедура ДобавитьПодчиненныеБизнесПроцессы(Дерево, ЗадачаСсылка) - Ветвь = Дерево.Строки.Найти(ЗадачаСсылка, "Ссылка", Истина); - Для каждого МетаданныеБизнесПроцесса Из Метаданные.БизнесПроцессы Цикл // У бизнес-процесса может и не быть главной задачи. diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ПеренаправитьЗадачи/Module.bsl b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ПеренаправитьЗадачи/Module.bsl index 275d6dcae..f40d05e05 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ПеренаправитьЗадачи/Module.bsl +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ПеренаправитьЗадачи/Module.bsl @@ -93,7 +93,6 @@ Процедура ИсполнительПриИзменении(Элемент) ТипАдресации = 0; - РольИсполнителя = Неопределено; ОсновнойОбъектАдресации = Неопределено; ДополнительныйОбъектАдресации = Неопределено; УстановитьТипыОбъектовАдресации(); diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/ManagerModule.bsl b/SSL/src/Tasks/ЗадачаИсполнителя/ManagerModule.bsl index 7c42929c1..de7f7e979 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/ManagerModule.bsl +++ b/SSL/src/Tasks/ЗадачаИсполнителя/ManagerModule.bsl @@ -62,6 +62,7 @@ Если Результат Тогда ВыбраннаяФорма = ИмяФормыЗадачи; СтандартнаяОбработка = Ложь; + ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(Параметры, ПараметрыФормы.ПараметрыФормы, Ложь); КонецЕсли; КонецЕсли; diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/ObjectModule.bsl b/SSL/src/Tasks/ЗадачаИсполнителя/ObjectModule.bsl index 1f6091784..35647f65f 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/ObjectModule.bsl +++ b/SSL/src/Tasks/ЗадачаИсполнителя/ObjectModule.bsl @@ -37,6 +37,10 @@ "Выполнена, ПометкаУдаления, СостояниеБизнесПроцесса", Ложь, Ложь, Перечисления.СостоянияБизнесПроцессов.ПустаяСсылка()); КонецЕсли; + + Если ИсходныеРеквизиты.ПометкаУдаления <> ПометкаУдаления Тогда + БизнесПроцессыИЗадачиСервер.ПриПометкеУдаленияЗадачи(Ссылка, ПометкаУдаления); + КонецЕсли; Если НЕ ИсходныеРеквизиты.Выполнена И Выполнена Тогда @@ -54,7 +58,7 @@ Если ДатаИсполнения = Дата(1, 1, 1) Тогда ДатаИсполнения = ТекущаяДатаСеанса(); КонецЕсли; - ИначеЕсли ИсходныеРеквизиты.Выполнена И Выполнена Тогда + ИначеЕсли НЕ ПометкаУдаления И ИсходныеРеквизиты.Выполнена И Выполнена Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю( НСтр("ru = 'Эта задача уже была выполнена ранее.'"),,,, Отказ); Возврат; @@ -70,10 +74,6 @@ ПредметСтрокой = ОбщегоНазначения.ПредметСтрокой(Предмет); - Если ИсходныеРеквизиты.ПометкаУдаления <> ПометкаУдаления Тогда - БизнесПроцессыИЗадачиСервер.ПриПометкеУдаленияЗадачи(Ссылка, ПометкаУдаления); - КонецЕсли; - Если НЕ Ссылка.Пустая() И ИсходныеРеквизиты.СостояниеБизнесПроцесса <> СостояниеБизнесПроцесса Тогда УстановитьСостояниеПодчиненныхБизнесПроцессов(СостояниеБизнесПроцесса); КонецЕсли; diff --git a/SSL/src/WebServices/EnterpriseDataExchange_1_0_1_1/Module.bsl b/SSL/src/WebServices/EnterpriseDataExchange_1_0_1_1/Module.bsl index e7ec9599f..200223a14 100644 --- a/SSL/src/WebServices/EnterpriseDataExchange_1_0_1_1/Module.bsl +++ b/SSL/src/WebServices/EnterpriseDataExchange_1_0_1_1/Module.bsl @@ -87,15 +87,22 @@ СтруктураПараметров.ИдентификаторФайлаВоВременномХранилище = ОбменДаннымиСлужебный.ПодготовитьФайлДляЗагрузки(ИдентификаторФайла, СообщениеОбОшибке); СтруктураПараметров.ИмяWEBСервиса = "EnterpriseDataExchange_1_0_1_1"; - // Загружаем в информационную базу. - МассивПараметров = Новый Массив; - МассивПараметров.Добавить(СтруктураПараметров); - МассивПараметров.Добавить(СообщениеОбОшибке); - ФоновоеЗаданиеЗагрузкиДанных = ФоновыеЗадания.Выполнить("ОбменДаннымиСлужебный.ЗагрузитьДанныеXDTOВИнформационнуюБазу", - МассивПараметров, - Строка(Новый УникальныйИдентификатор()), - НСтр("ru = 'Загрузка данных в информационную базу через web-сервис ""Enterprise Data Exchange""'")); - ИдентификаторФоновогоЗадания = Строка(ФоновоеЗаданиеЗагрузкиДанных.УникальныйИдентификатор); + // Загружаем данные в информационную базу. + ПараметрыПроцедуры = Новый Структура; + ПараметрыПроцедуры.Вставить("ПараметрыWEBСервиса", СтруктураПараметров); + ПараметрыПроцедуры.Вставить("СообщениеОбОшибке", СообщениеОбОшибке); + + ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(Новый УникальныйИдентификатор); + ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Загрузка данных в информационную базу через web-сервис ""Enterprise Data Exchange""'"); + ПараметрыВыполнения.КлючФоновогоЗадания = Строка(Новый УникальныйИдентификатор); + + ПараметрыВыполнения.ЗапуститьВФоне = Истина; + + ФоновоеЗадание = ДлительныеОперации.ВыполнитьВФоне( + "ОбменДаннымиСлужебный.ЗагрузитьДанныеXDTOВИнформационнуюБазу", + ПараметрыПроцедуры, + ПараметрыВыполнения); + ИдентификаторФоновогоЗадания = Строка(ФоновоеЗадание.ИдентификаторЗадания); КонецФункции @@ -111,14 +118,21 @@ СтруктураПараметров.ИмяWEBСервиса = "EnterpriseDataExchange_1_0_1_1"; // Подготавливаем данные к выгрузке из информационной базы. - МассивПараметров = Новый Массив; - МассивПараметров.Добавить(СтруктураПараметров); - МассивПараметров.Добавить(СообщениеОбОшибке); - ФоновоеЗаданиеЗагрузкиДанных = ФоновыеЗадания.Выполнить("ОбменДаннымиСлужебный.ПодготовитьДанныеДляВыгрузкиИзИнформационнойБазы", - МассивПараметров, - Строка(Новый УникальныйИдентификатор()), - НСтр("ru = 'Подготовка к выгрузке данных из информационной базы через web-сервис ""Enterprise Data Exchange""'")); - ИдентификаторФоновогоЗадания = Строка(ФоновоеЗаданиеЗагрузкиДанных.УникальныйИдентификатор); + ПараметрыПроцедуры = Новый Структура; + ПараметрыПроцедуры.Вставить("ПараметрыWEBСервиса", СтруктураПараметров); + ПараметрыПроцедуры.Вставить("СообщениеОбОшибке", СообщениеОбОшибке); + + ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(Новый УникальныйИдентификатор); + ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Подготовка к выгрузке данных из информационной базы через web-сервис ""Enterprise Data Exchange""'"); + ПараметрыВыполнения.КлючФоновогоЗадания = Строка(Новый УникальныйИдентификатор); + + ПараметрыВыполнения.ЗапуститьВФоне = Истина; + + ФоновоеЗадание = ДлительныеОперации.ВыполнитьВФоне( + "ОбменДаннымиСлужебный.ПодготовитьДанныеДляВыгрузкиИзИнформационнойБазы", + ПараметрыПроцедуры, + ПараметрыВыполнения); + ИдентификаторФоновогоЗадания = Строка(ФоновоеЗадание.ИдентификаторЗадания); КонецФункции diff --git a/SSL/src/WebServices/EnterpriseDataUpload_1_0_1_1/Module.bsl b/SSL/src/WebServices/EnterpriseDataUpload_1_0_1_1/Module.bsl index 25123ab77..320a1c0e9 100644 --- a/SSL/src/WebServices/EnterpriseDataUpload_1_0_1_1/Module.bsl +++ b/SSL/src/WebServices/EnterpriseDataUpload_1_0_1_1/Module.bsl @@ -54,14 +54,21 @@ СтруктураПараметров.ИмяWEBСервиса = "EnterpriseDataUpload_1_0_1_1"; // Загружаем в информационную базу. - МассивПараметров = Новый Массив; - МассивПараметров.Добавить(СтруктураПараметров); - МассивПараметров.Добавить(СообщениеОбОшибке); - ФоновоеЗаданиеЗагрузкиДанных = ФоновыеЗадания.Выполнить("ОбменДаннымиСлужебный.ЗагрузитьДанныеXDTOВИнформационнуюБазу", - МассивПараметров, - Строка(Новый УникальныйИдентификатор()), - НСтр("ru = 'Загрузка данных в информационную базу через web-сервис ""Enterprise Data Upload""'")); - ИдентификаторДлительнойОперации = Строка(ФоновоеЗаданиеЗагрузкиДанных.УникальныйИдентификатор); + ПараметрыПроцедуры = Новый Структура; + ПараметрыПроцедуры.Вставить("ПараметрыWEBСервиса", СтруктураПараметров); + ПараметрыПроцедуры.Вставить("СообщениеОбОшибке", СообщениеОбОшибке); + + ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(Новый УникальныйИдентификатор); + ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Загрузка данных в информационную базу через web-сервис ""Enterprise Data Upload""'"); + ПараметрыВыполнения.КлючФоновогоЗадания = Строка(Новый УникальныйИдентификатор); + + ПараметрыВыполнения.ЗапуститьВФоне = Истина; + + ФоновоеЗадание = ДлительныеОперации.ВыполнитьВФоне( + "ОбменДаннымиСлужебный.ЗагрузитьДанныеXDTOВИнформационнуюБазу", + ПараметрыПроцедуры, + ПараметрыВыполнения); + ИдентификаторФоновогоЗадания = Строка(ФоновоеЗадание.ИдентификаторЗадания); КонецФункции diff --git a/SSL/src/WebServices/Exchange/Module.bsl b/SSL/src/WebServices/Exchange/Module.bsl index 43279527e..d9c1e956b 100644 --- a/SSL/src/WebServices/Exchange/Module.bsl +++ b/SSL/src/WebServices/Exchange/Module.bsl @@ -115,6 +115,10 @@ Если Отказ Тогда Сообщение = НСтр("ru = 'При создании настройки обмена во второй информационной базе возникли ошибки: %1'"); Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Сообщение, ПомощникСозданияОбменаДанными.СтрокаСообщенияОбОшибке()); + + ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииСозданиеОбменаДанными(), + УровеньЖурналаРегистрации.Ошибка, , , Сообщение); + ВызватьИсключение Сообщение; КонецЕсли; @@ -134,6 +138,10 @@ Если Отказ Тогда Сообщение = НСтр("ru = 'При создании настройки обмена во второй информационной базе возникли ошибки: %1'"); Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Сообщение, ПомощникСозданияОбменаДанными.СтрокаСообщенияОбОшибке()); + + ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииСозданиеОбменаДанными(), + УровеньЖурналаРегистрации.Ошибка, , , Сообщение); + ВызватьИсключение Сообщение; КонецЕсли; @@ -390,58 +398,48 @@ ИдентификаторОперации, ДлительнаяОперацияРазрешена) - Параметры = Новый Массив; - Параметры.Добавить(ИмяПланаОбмена); - Параметры.Добавить(КодУзлаИнформационнойБазы); - Параметры.Добавить(ИдентификаторФайла); + КлючФоновогоЗадания = КлючФоновогоЗаданияВыгрузкиЗагрузкиДанных(ИмяПланаОбмена, + КодУзлаИнформационнойБазы, + НСтр("ru = 'Выгрузка'")); - КлючФоновогоЗадания = КлючФоновогоЗаданияВыгрузкиЗагрузкиДанных(ИмяПланаОбмена, КодУзлаИнформационнойБазы); - Отбор = Новый Структура; - Отбор.Вставить("Ключ", КлючФоновогоЗадания); - Отбор.Вставить("Состояние", СостояниеФоновогоЗадания.Активно); - Если ФоновыеЗадания.ПолучитьФоновыеЗадания (Отбор).Количество() = 1 Тогда + Если ЕстьАктивныеФоновыеЗаданияСинхронизацииДанных(КлючФоновогоЗадания) Тогда ВызватьИсключение НСтр("ru = 'Синхронизация данных уже выполняется.'"); КонецЕсли; - ФоновоеЗадание = ФоновыеЗадания.Выполнить("ОбменДаннымиСервер.ВыполнитьВыгрузкуДляУзлаИнформационнойБазыВСервисПередачиФайлов", - Параметры, - КлючФоновогоЗадания, - НСтр("ru = 'Выполнение обмена данными через веб-сервис.'")); + ПараметрыПроцедуры = Новый Структура; + ПараметрыПроцедуры.Вставить("ИмяПланаОбмена", ИмяПланаОбмена); + ПараметрыПроцедуры.Вставить("КодУзлаИнформационнойБазы", КодУзлаИнформационнойБазы); + ПараметрыПроцедуры.Вставить("ИдентификаторФайла", ИдентификаторФайла); - Попытка - Таймаут = ?(ДлительнаяОперацияРазрешена, 5, Неопределено); + ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(Новый УникальныйИдентификатор); + ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Выгрузка данных через веб-сервис.'"); + ПараметрыВыполнения.КлючФоновогоЗадания = КлючФоновогоЗадания; + + ПараметрыВыполнения.ЗапуститьНеВФоне = Не ДлительнаяОперацияРазрешена; + ПараметрыВыполнения.ЗапуститьВФоне = ДлительнаяОперацияРазрешена; + + ФоновоеЗадание = ДлительныеОперации.ВыполнитьВФоне( + "ОбменДаннымиСервер.ВыполнитьВыгрузкуДляУзлаИнформационнойБазыВСервисПередачиФайлов", + ПараметрыПроцедуры, + ПараметрыВыполнения); - ФоновоеЗадание.ОжидатьЗавершения(Таймаут); - Исключение - - ФоновоеЗадание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(ФоновоеЗадание.УникальныйИдентификатор); - - Если ФоновоеЗадание.Состояние = СостояниеФоновогоЗадания.Активно Тогда - - ИдентификаторОперации = Строка(ФоновоеЗадание.УникальныйИдентификатор); - ДлительнаяОперация = Истина; - Возврат; - - Иначе - - Если ФоновоеЗадание.ИнформацияОбОшибке <> Неопределено Тогда - ВызватьИсключение ПодробноеПредставлениеОшибки(ФоновоеЗадание.ИнформацияОбОшибке); - КонецЕсли; - - ВызватьИсключение; + Если ФоновоеЗадание.Статус = "Выполняется" Тогда + ИдентификаторОперации = Строка(ФоновоеЗадание.ИдентификаторЗадания); + ДлительнаяОперация = Истина; + Возврат; + ИначеЕсли ФоновоеЗадание.Статус = "Выполнено" Тогда + ДлительнаяОперация = Ложь; + Возврат; + Иначе + Сообщение = НСтр("ru = 'Ошибка при выгрузке данных через веб-сервис.'"); + Если ЗначениеЗаполнено(ФоновоеЗадание.ПодробноеПредставлениеОшибки) Тогда + Сообщение = ФоновоеЗадание.ПодробноеПредставлениеОшибки; КонецЕсли; - КонецПопытки; - - ФоновоеЗадание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(ФоновоеЗадание.УникальныйИдентификатор); - - Если ФоновоеЗадание.Состояние <> СостояниеФоновогоЗадания.Завершено Тогда + ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииВыгрузкаДанныхВСервисПередачиФайлов(), + УровеньЖурналаРегистрации.Ошибка, , , Сообщение); - Если ФоновоеЗадание.ИнформацияОбОшибке <> Неопределено Тогда - ВызватьИсключение ПодробноеПредставлениеОшибки(ФоновоеЗадание.ИнформацияОбОшибке); - КонецЕсли; - - ВызватьИсключение НСтр("ru = 'Ошибка при выгрузке данных через веб-сервис.'"); + ВызватьИсключение Сообщение; КонецЕсли; КонецПроцедуры @@ -453,75 +451,80 @@ ИдентификаторОперации, ДлительнаяОперацияРазрешена) - Параметры = Новый Массив; - Параметры.Добавить(ИмяПланаОбмена); - Параметры.Добавить(КодУзлаИнформационнойБазы); - Параметры.Добавить(ИдентификаторФайла); + КлючФоновогоЗадания = КлючФоновогоЗаданияВыгрузкиЗагрузкиДанных(ИмяПланаОбмена, + КодУзлаИнформационнойБазы, + НСтр("ru = 'Загрузка'")); - КлючФоновогоЗадания = КлючФоновогоЗаданияВыгрузкиЗагрузкиДанных(ИмяПланаОбмена, КодУзлаИнформационнойБазы); - Отбор = Новый Структура; - Отбор.Вставить("Ключ", КлючФоновогоЗадания); - Отбор.Вставить("Состояние", СостояниеФоновогоЗадания.Активно); - Если ФоновыеЗадания.ПолучитьФоновыеЗадания (Отбор).Количество() = 1 Тогда + Если ЕстьАктивныеФоновыеЗаданияСинхронизацииДанных(КлючФоновогоЗадания) Тогда ВызватьИсключение НСтр("ru = 'Синхронизация данных уже выполняется.'"); КонецЕсли; - ФоновоеЗадание = ФоновыеЗадания.Выполнить("ОбменДаннымиСервер.ВыполнитьЗагрузкуДляУзлаИнформационнойБазыИзСервисаПередачиФайлов", - Параметры, - КлючФоновогоЗадания, - НСтр("ru = 'Выполнение обмена данными через веб-сервис.'")); + ПараметрыПроцедуры = Новый Структура; + ПараметрыПроцедуры.Вставить("ИмяПланаОбмена", ИмяПланаОбмена); + ПараметрыПроцедуры.Вставить("КодУзлаИнформационнойБазы", КодУзлаИнформационнойБазы); + ПараметрыПроцедуры.Вставить("ИдентификаторФайла", ИдентификаторФайла); - Попытка - Таймаут = ?(ДлительнаяОперацияРазрешена, 5, Неопределено); + ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(Новый УникальныйИдентификатор); + ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Загрузка данных через веб-сервис.'"); + ПараметрыВыполнения.КлючФоновогоЗадания = КлючФоновогоЗадания; + + ПараметрыВыполнения.ЗапуститьНеВФоне = Не ДлительнаяОперацияРазрешена; + ПараметрыВыполнения.ЗапуститьВФоне = ДлительнаяОперацияРазрешена; + + ФоновоеЗадание = ДлительныеОперации.ВыполнитьВФоне( + "ОбменДаннымиСервер.ВыполнитьЗагрузкуДляУзлаИнформационнойБазыИзСервисаПередачиФайлов", + ПараметрыПроцедуры, + ПараметрыВыполнения); - ФоновоеЗадание.ОжидатьЗавершения(Таймаут); - Исключение + Если ФоновоеЗадание.Статус = "Выполняется" Тогда + ИдентификаторОперации = Строка(ФоновоеЗадание.ИдентификаторЗадания); + ДлительнаяОперация = Истина; + Возврат; + ИначеЕсли ФоновоеЗадание.Статус = "Выполнено" Тогда + ДлительнаяОперация = Ложь; + Возврат; + Иначе - ФоновоеЗадание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(ФоновоеЗадание.УникальныйИдентификатор); - - Если ФоновоеЗадание.Состояние = СостояниеФоновогоЗадания.Активно Тогда - - ИдентификаторОперации = Строка(ФоновоеЗадание.УникальныйИдентификатор); - ДлительнаяОперация = Истина; - Возврат; - - Иначе - - Если ФоновоеЗадание.ИнформацияОбОшибке <> Неопределено Тогда - ВызватьИсключение ПодробноеПредставлениеОшибки(ФоновоеЗадание.ИнформацияОбОшибке); - КонецЕсли; - ВызватьИсключение; + Сообщение = НСтр("ru = 'Ошибка при загрузке данных через веб-сервис.'"); + Если ЗначениеЗаполнено(ФоновоеЗадание.ПодробноеПредставлениеОшибки) Тогда + Сообщение = ФоновоеЗадание.ПодробноеПредставлениеОшибки; КонецЕсли; - КонецПопытки; - - ФоновоеЗадание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(ФоновоеЗадание.УникальныйИдентификатор); - - Если ФоновоеЗадание.Состояние <> СостояниеФоновогоЗадания.Завершено Тогда + ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииЗагрузкаДанныхИзСервисаПередачиФайлов(), + УровеньЖурналаРегистрации.Ошибка, , , Сообщение); - Если ФоновоеЗадание.ИнформацияОбОшибке <> Неопределено Тогда - ВызватьИсключение ПодробноеПредставлениеОшибки(ФоновоеЗадание.ИнформацияОбОшибке); - КонецЕсли; - - ВызватьИсключение НСтр("ru = 'Ошибка при загрузке данных через веб-сервис.'"); + ВызватьИсключение Сообщение; КонецЕсли; КонецПроцедуры -Функция КлючФоновогоЗаданияВыгрузкиЗагрузкиДанных(ПланОбмена, КодУзла) +Функция КлючФоновогоЗаданияВыгрузкиЗагрузкиДанных(ПланОбмена, КодУзла, Действие) - Ключ = НСтр("ru = 'ПланОбмена:[ПланОбмена] КодУзла:[КодУзла]'"); - Ключ = СтрЗаменить(Ключ, "[ПланОбмена]", ПланОбмена); - Ключ = СтрЗаменить(Ключ, "[КодУзла]", КодУзла); + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'ПланОбмена:%1 КодУзла:%2 Действие:%3'"), + ПланОбмена, + КодУзла, + Действие); + +КонецФункции + +Функция ЕстьАктивныеФоновыеЗаданияСинхронизацииДанных(КлючФоновогоЗадания) + + Отбор = Новый Структура; + Отбор.Вставить("Ключ", КлючФоновогоЗадания); + Отбор.Вставить("Состояние", СостояниеФоновогоЗадания.Активно); + + АктивныеФоновыеЗадания = ФоновыеЗадания.ПолучитьФоновыеЗадания(Отбор); + + Возврат (АктивныеФоновыеЗадания.Количество() > 0); - Возврат Ключ; КонецФункции Функция ЗарегистрироватьДанныеДляНачальнойВыгрузки(Знач ИмяПланаОбмена, Знач КодУзла, ДлительнаяОперация, ИдентификаторОперации, ТолькоСправочники) УстановитьПривилегированныйРежим(Истина); - УзелИнформационнойБазы = ПланыОбмена[ИмяПланаОбмена].НайтиПоКоду(КодУзла); + УзелИнформационнойБазы = ОбменДаннымиСервер.УзелПланаОбменаПоКоду(ИмяПланаОбмена, КодУзла); Если Не ЗначениеЗаполнено(УзелИнформационнойБазы) Тогда Сообщение = НСтр("ru = 'Не найден узел плана обмена; имя плана обмена %1; код узла %2'"); @@ -544,36 +547,37 @@ Иначе Если ТолькоСправочники Тогда - ИмяМетода = "ОбменДаннымиСервер.ЗарегистрироватьТолькоСправочникиДляНачальнойВыгрузки"; + ИмяМетода = "ОбменДаннымиСервер.ЗарегистрироватьТолькоСправочникиДляНачальнойВыгрузкиВФоне"; + НаименованиеЗадания = НСтр("ru = 'Регистрация изменений справочников для начальной выгрузки.'"); Иначе - ИмяМетода = "ОбменДаннымиСервер.ЗарегистрироватьВсеДанныеКромеСправочниковДляНачальнойВыгрузки"; + ИмяМетода = "ОбменДаннымиСервер.ЗарегистрироватьВсеДанныеКромеСправочниковДляНачальнойВыгрузкиВФоне"; + НаименованиеЗадания = НСтр("ru = 'Регистрация изменений всех данных кроме справочников для начальной выгрузки.'"); КонецЕсли; - Параметры = Новый Массив; - Параметры.Добавить(УзелИнформационнойБазы); + ПараметрыПроцедуры = Новый Структура; + ПараметрыПроцедуры.Вставить("УзелИнформационнойБазы", УзелИнформационнойБазы); - ФоновоеЗадание = ФоновыеЗадания.Выполнить(ИмяМетода, Параметры,, НСтр("ru = 'Создание обмена данными.'")); + ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(Новый УникальныйИдентификатор); + ПараметрыВыполнения.НаименованиеФоновогоЗадания = НаименованиеЗадания; - Попытка - ФоновоеЗадание.ОжидатьЗавершения(5); - Исключение + ПараметрыВыполнения.ЗапуститьВФоне = Истина; + + ФоновоеЗадание = ДлительныеОперации.ВыполнитьВФоне(ИмяМетода, ПараметрыПроцедуры, ПараметрыВыполнения); - ФоновоеЗадание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(ФоновоеЗадание.УникальныйИдентификатор); - - Если ФоновоеЗадание.Состояние = СостояниеФоновогоЗадания.Активно Тогда - - ИдентификаторОперации = Строка(ФоновоеЗадание.УникальныйИдентификатор); - ДлительнаяОперация = Истина; - - Иначе - Если ФоновоеЗадание.ИнформацияОбОшибке <> Неопределено Тогда - ВызватьИсключение ПодробноеПредставлениеОшибки(ФоновоеЗадание.ИнформацияОбОшибке); - КонецЕсли; - - ВызватьИсключение; + Если ФоновоеЗадание.Статус = "Выполняется" Тогда + ИдентификаторОперации = Строка(ФоновоеЗадание.ИдентификаторЗадания); + ДлительнаяОперация = Истина; + ИначеЕсли ФоновоеЗадание.Статус = "Выполнено" Тогда + ДлительнаяОперация = Ложь; + Иначе + Если ЗначениеЗаполнено(ФоновоеЗадание.ПодробноеПредставлениеОшибки) Тогда + ВызватьИсключение ФоновоеЗадание.ПодробноеПредставлениеОшибки; КонецЕсли; - КонецПопытки; + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка при выполнении фонового задания: %1'"), + НаименованиеЗадания); + КонецЕсли; КонецЕсли; diff --git a/SSL/src/WebServices/Exchange_2_0_1_6/Module.bsl b/SSL/src/WebServices/Exchange_2_0_1_6/Module.bsl index 94203932c..2ce2a276f 100644 --- a/SSL/src/WebServices/Exchange_2_0_1_6/Module.bsl +++ b/SSL/src/WebServices/Exchange_2_0_1_6/Module.bsl @@ -112,6 +112,10 @@ Если Отказ Тогда Сообщение = НСтр("ru = 'При создании настройки обмена во второй информационной базе возникли ошибки: %1'"); Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Сообщение, ПомощникСозданияОбменаДанными.СтрокаСообщенияОбОшибке()); + + ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииСозданиеОбменаДанными(), + УровеньЖурналаРегистрации.Ошибка, , , Сообщение); + ВызватьИсключение Сообщение; КонецЕсли; @@ -129,6 +133,10 @@ Если Отказ Тогда Сообщение = НСтр("ru = 'При создании настройки обмена во второй информационной базе возникли ошибки: %1'"); Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Сообщение, ПомощникСозданияОбменаДанными.СтрокаСообщенияОбОшибке()); + + ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииСозданиеОбменаДанными(), + УровеньЖурналаРегистрации.Ошибка, , , Сообщение); + ВызватьИсключение Сообщение; КонецЕсли; @@ -384,7 +392,7 @@ // Проверяем наличие прав для выполнения обмена. Попытка - ОбменДаннымиСервер.ПроверитьВозможностьВыполненияОбменов(); + ОбменДаннымиСервер.ПроверитьВозможностьВыполненияОбменов(Истина); Исключение Результат = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); Возврат Ложь; @@ -429,59 +437,49 @@ ИдентификаторОперации, ДлительнаяОперацияРазрешена) - Параметры = Новый Массив; - Параметры.Добавить(ИмяПланаОбмена); - Параметры.Добавить(КодУзлаИнформационнойБазы); - Параметры.Добавить(ИдентификаторФайла); - Параметры.Добавить(Истина); + КлючФоновогоЗадания = КлючФоновогоЗаданияВыгрузкиЗагрузкиДанных(ИмяПланаОбмена, + КодУзлаИнформационнойБазы, + НСтр("ru = 'Выгрузка'")); - КлючФоновогоЗадания = КлючФоновогоЗаданияВыгрузкиЗагрузкиДанных(ИмяПланаОбмена, КодУзлаИнформационнойБазы); - Отбор = Новый Структура; - Отбор.Вставить("Ключ", КлючФоновогоЗадания); - Отбор.Вставить("Состояние", СостояниеФоновогоЗадания.Активно); - Если ФоновыеЗадания.ПолучитьФоновыеЗадания (Отбор).Количество() = 1 Тогда + Если ЕстьАктивныеФоновыеЗаданияСинхронизацииДанных(КлючФоновогоЗадания) Тогда ВызватьИсключение НСтр("ru = 'Синхронизация данных уже выполняется.'"); КонецЕсли; - ФоновоеЗадание = ФоновыеЗадания.Выполнить("ОбменДаннымиСервер.ВыполнитьВыгрузкуДляУзлаИнформационнойБазыВСервисПередачиФайлов", - Параметры, - КлючФоновогоЗадания, - НСтр("ru = 'Выполнение обмена данными через веб-сервис.'")); + ПараметрыПроцедуры = Новый Структура; + ПараметрыПроцедуры.Вставить("ИмяПланаОбмена", ИмяПланаОбмена); + ПараметрыПроцедуры.Вставить("КодУзлаИнформационнойБазы", КодУзлаИнформационнойБазы); + ПараметрыПроцедуры.Вставить("ИдентификаторФайла", ИдентификаторФайла); + ПараметрыПроцедуры.Вставить("ИспользоватьСжатие", Истина); - Попытка - Таймаут = ?(ДлительнаяОперацияРазрешена, 5, Неопределено); + ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(Новый УникальныйИдентификатор); + ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Выгрузка данных через веб-сервис.'"); + ПараметрыВыполнения.КлючФоновогоЗадания = КлючФоновогоЗадания; + + ПараметрыВыполнения.ЗапуститьНеВФоне = Не ДлительнаяОперацияРазрешена; + ПараметрыВыполнения.ЗапуститьВФоне = ДлительнаяОперацияРазрешена; + + ФоновоеЗадание = ДлительныеОперации.ВыполнитьВФоне( + "ОбменДаннымиСервер.ВыполнитьВыгрузкуДляУзлаИнформационнойБазыВСервисПередачиФайлов", + ПараметрыПроцедуры, + ПараметрыВыполнения); - ФоновоеЗадание.ОжидатьЗавершения(Таймаут); - Исключение - - ФоновоеЗадание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(ФоновоеЗадание.УникальныйИдентификатор); - - Если ФоновоеЗадание.Состояние = СостояниеФоновогоЗадания.Активно Тогда - - ИдентификаторОперации = Строка(ФоновоеЗадание.УникальныйИдентификатор); - ДлительнаяОперация = Истина; - Возврат; - - Иначе - - Если ФоновоеЗадание.ИнформацияОбОшибке <> Неопределено Тогда - ВызватьИсключение ПодробноеПредставлениеОшибки(ФоновоеЗадание.ИнформацияОбОшибке); - КонецЕсли; - - ВызватьИсключение; + Если ФоновоеЗадание.Статус = "Выполняется" Тогда + ИдентификаторОперации = Строка(ФоновоеЗадание.ИдентификаторЗадания); + ДлительнаяОперация = Истина; + Возврат; + ИначеЕсли ФоновоеЗадание.Статус = "Выполнено" Тогда + ДлительнаяОперация = Ложь; + Возврат; + Иначе + Сообщение = НСтр("ru = 'Ошибка при выгрузке данных через веб-сервис.'"); + Если ЗначениеЗаполнено(ФоновоеЗадание.ПодробноеПредставлениеОшибки) Тогда + Сообщение = ФоновоеЗадание.ПодробноеПредставлениеОшибки; КонецЕсли; - КонецПопытки; - - ФоновоеЗадание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(ФоновоеЗадание.УникальныйИдентификатор); - - Если ФоновоеЗадание.Состояние <> СостояниеФоновогоЗадания.Завершено Тогда + ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииВыгрузкаДанныхВСервисПередачиФайлов(), + УровеньЖурналаРегистрации.Ошибка, , , Сообщение); - Если ФоновоеЗадание.ИнформацияОбОшибке <> Неопределено Тогда - ВызватьИсключение ПодробноеПредставлениеОшибки(ФоновоеЗадание.ИнформацияОбОшибке); - КонецЕсли; - - ВызватьИсключение НСтр("ru = 'Ошибка при выгрузке данных через веб-сервис.'"); + ВызватьИсключение Сообщение; КонецЕсли; КонецПроцедуры @@ -493,75 +491,81 @@ ИдентификаторОперации, ДлительнаяОперацияРазрешена) - Параметры = Новый Массив; - Параметры.Добавить(ИмяПланаОбмена); - Параметры.Добавить(КодУзлаИнформационнойБазы); - Параметры.Добавить(ИдентификаторФайла); + + КлючФоновогоЗадания = КлючФоновогоЗаданияВыгрузкиЗагрузкиДанных(ИмяПланаОбмена, + КодУзлаИнформационнойБазы, + НСтр("ru = 'Загрузка'")); - КлючФоновогоЗадания = КлючФоновогоЗаданияВыгрузкиЗагрузкиДанных(ИмяПланаОбмена, КодУзлаИнформационнойБазы); - Отбор = Новый Структура; - Отбор.Вставить("Ключ", КлючФоновогоЗадания); - Отбор.Вставить("Состояние", СостояниеФоновогоЗадания.Активно); - Если ФоновыеЗадания.ПолучитьФоновыеЗадания (Отбор).Количество() = 1 Тогда + Если ЕстьАктивныеФоновыеЗаданияСинхронизацииДанных(КлючФоновогоЗадания) Тогда ВызватьИсключение НСтр("ru = 'Синхронизация данных уже выполняется.'"); КонецЕсли; - ФоновоеЗадание = ФоновыеЗадания.Выполнить("ОбменДаннымиСервер.ВыполнитьЗагрузкуДляУзлаИнформационнойБазыИзСервисаПередачиФайлов", - Параметры, - КлючФоновогоЗадания, - НСтр("ru = 'Выполнение обмена данными через веб-сервис.'")); + ПараметрыПроцедуры = Новый Структура; + ПараметрыПроцедуры.Вставить("ИмяПланаОбмена", ИмяПланаОбмена); + ПараметрыПроцедуры.Вставить("КодУзлаИнформационнойБазы", КодУзлаИнформационнойБазы); + ПараметрыПроцедуры.Вставить("ИдентификаторФайла", ИдентификаторФайла); - Попытка - Таймаут = ?(ДлительнаяОперацияРазрешена, 5, Неопределено); + ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(Новый УникальныйИдентификатор); + ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Загрузка данных через веб-сервис.'"); + ПараметрыВыполнения.КлючФоновогоЗадания = КлючФоновогоЗадания; + + ПараметрыВыполнения.ЗапуститьНеВФоне = Не ДлительнаяОперацияРазрешена; + ПараметрыВыполнения.ЗапуститьВФоне = ДлительнаяОперацияРазрешена; + + ФоновоеЗадание = ДлительныеОперации.ВыполнитьВФоне( + "ОбменДаннымиСервер.ВыполнитьЗагрузкуДляУзлаИнформационнойБазыИзСервисаПередачиФайлов", + ПараметрыПроцедуры, + ПараметрыВыполнения); - ФоновоеЗадание.ОжидатьЗавершения(Таймаут); - Исключение + Если ФоновоеЗадание.Статус = "Выполняется" Тогда + ИдентификаторОперации = Строка(ФоновоеЗадание.ИдентификаторЗадания); + ДлительнаяОперация = Истина; + Возврат; + ИначеЕсли ФоновоеЗадание.Статус = "Выполнено" Тогда + ДлительнаяОперация = Ложь; + Возврат; + Иначе - ФоновоеЗадание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(ФоновоеЗадание.УникальныйИдентификатор); - - Если ФоновоеЗадание.Состояние = СостояниеФоновогоЗадания.Активно Тогда - - ИдентификаторОперации = Строка(ФоновоеЗадание.УникальныйИдентификатор); - ДлительнаяОперация = Истина; - Возврат; - - Иначе - - Если ФоновоеЗадание.ИнформацияОбОшибке <> Неопределено Тогда - ВызватьИсключение ПодробноеПредставлениеОшибки(ФоновоеЗадание.ИнформацияОбОшибке); - КонецЕсли; - ВызватьИсключение; + Сообщение = НСтр("ru = 'Ошибка при загрузке данных через веб-сервис.'"); + Если ЗначениеЗаполнено(ФоновоеЗадание.ПодробноеПредставлениеОшибки) Тогда + Сообщение = ФоновоеЗадание.ПодробноеПредставлениеОшибки; КонецЕсли; - КонецПопытки; - - ФоновоеЗадание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(ФоновоеЗадание.УникальныйИдентификатор); - - Если ФоновоеЗадание.Состояние <> СостояниеФоновогоЗадания.Завершено Тогда + ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииЗагрузкаДанныхИзСервисаПередачиФайлов(), + УровеньЖурналаРегистрации.Ошибка, , , Сообщение); - Если ФоновоеЗадание.ИнформацияОбОшибке <> Неопределено Тогда - ВызватьИсключение ПодробноеПредставлениеОшибки(ФоновоеЗадание.ИнформацияОбОшибке); - КонецЕсли; - - ВызватьИсключение НСтр("ru = 'Ошибка при загрузке данных через веб-сервис.'"); + ВызватьИсключение Сообщение; КонецЕсли; КонецПроцедуры -Функция КлючФоновогоЗаданияВыгрузкиЗагрузкиДанных(ПланОбмена, КодУзла) +Функция КлючФоновогоЗаданияВыгрузкиЗагрузкиДанных(ПланОбмена, КодУзла, Действие) - Ключ = НСтр("ru = 'ПланОбмена:[ПланОбмена] КодУзла:[КодУзла]'"); - Ключ = СтрЗаменить(Ключ, "[ПланОбмена]", ПланОбмена); - Ключ = СтрЗаменить(Ключ, "[КодУзла]", КодУзла); + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'ПланОбмена:%1 КодУзла:%2 Действие:%3'"), + ПланОбмена, + КодУзла, + Действие); + +КонецФункции + +Функция ЕстьАктивныеФоновыеЗаданияСинхронизацииДанных(КлючФоновогоЗадания) + + Отбор = Новый Структура; + Отбор.Вставить("Ключ", КлючФоновогоЗадания); + Отбор.Вставить("Состояние", СостояниеФоновогоЗадания.Активно); + + АктивныеФоновыеЗадания = ФоновыеЗадания.ПолучитьФоновыеЗадания(Отбор); + + Возврат (АктивныеФоновыеЗадания.Количество() > 0); - Возврат Ключ; КонецФункции Функция ЗарегистрироватьДанныеДляНачальнойВыгрузки(Знач ИмяПланаОбмена, Знач КодУзла, ДлительнаяОперация, ИдентификаторОперации, ТолькоСправочники) УстановитьПривилегированныйРежим(Истина); - УзелИнформационнойБазы = ПланыОбмена[ИмяПланаОбмена].НайтиПоКоду(КодУзла); + УзелИнформационнойБазы = ОбменДаннымиСервер.УзелПланаОбменаПоКоду(ИмяПланаОбмена, КодУзла); Если Не ЗначениеЗаполнено(УзелИнформационнойБазы) Тогда Сообщение = НСтр("ru = 'Не найден узел плана обмена; имя плана обмена %1; код узла %2'"); @@ -584,36 +588,37 @@ Иначе Если ТолькоСправочники Тогда - ИмяМетода = "ОбменДаннымиСервер.ЗарегистрироватьТолькоСправочникиДляНачальнойВыгрузки"; + ИмяМетода = "ОбменДаннымиСервер.ЗарегистрироватьТолькоСправочникиДляНачальнойВыгрузкиВФоне"; + НаименованиеЗадания = НСтр("ru = 'Регистрация изменений справочников для начальной выгрузки.'"); Иначе - ИмяМетода = "ОбменДаннымиСервер.ЗарегистрироватьВсеДанныеКромеСправочниковДляНачальнойВыгрузки"; + ИмяМетода = "ОбменДаннымиСервер.ЗарегистрироватьВсеДанныеКромеСправочниковДляНачальнойВыгрузкиВФоне"; + НаименованиеЗадания = НСтр("ru = 'Регистрация изменений всех данных кроме справочников для начальной выгрузки.'"); КонецЕсли; - Параметры = Новый Массив; - Параметры.Добавить(УзелИнформационнойБазы); + ПараметрыПроцедуры = Новый Структура; + ПараметрыПроцедуры.Вставить("УзелИнформационнойБазы", УзелИнформационнойБазы); - ФоновоеЗадание = ФоновыеЗадания.Выполнить(ИмяМетода, Параметры,, НСтр("ru = 'Создание обмена данными.'")); + ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(Новый УникальныйИдентификатор); + ПараметрыВыполнения.НаименованиеФоновогоЗадания = НаименованиеЗадания; - Попытка - ФоновоеЗадание.ОжидатьЗавершения(5); - Исключение + ПараметрыВыполнения.ЗапуститьВФоне = Истина; + + ФоновоеЗадание = ДлительныеОперации.ВыполнитьВФоне(ИмяМетода, ПараметрыПроцедуры, ПараметрыВыполнения); - ФоновоеЗадание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(ФоновоеЗадание.УникальныйИдентификатор); - - Если ФоновоеЗадание.Состояние = СостояниеФоновогоЗадания.Активно Тогда - - ИдентификаторОперации = Строка(ФоновоеЗадание.УникальныйИдентификатор); - ДлительнаяОперация = Истина; - - Иначе - Если ФоновоеЗадание.ИнформацияОбОшибке <> Неопределено Тогда - ВызватьИсключение ПодробноеПредставлениеОшибки(ФоновоеЗадание.ИнформацияОбОшибке); - КонецЕсли; - - ВызватьИсключение; + Если ФоновоеЗадание.Статус = "Выполняется" Тогда + ИдентификаторОперации = Строка(ФоновоеЗадание.ИдентификаторЗадания); + ДлительнаяОперация = Истина; + ИначеЕсли ФоновоеЗадание.Статус = "Выполнено" Тогда + ДлительнаяОперация = Ложь; + Иначе + Если ЗначениеЗаполнено(ФоновоеЗадание.ПодробноеПредставлениеОшибки) Тогда + ВызватьИсключение ФоновоеЗадание.ПодробноеПредставлениеОшибки; КонецЕсли; - КонецПопытки; + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка при выполнении фонового задания: %1'"), + НаименованиеЗадания); + КонецЕсли; КонецЕсли; diff --git a/SSL/src/WebServices/MessageExchange/Module.bsl b/SSL/src/WebServices/MessageExchange/Module.bsl index eb8d89354..1b3df4b64 100644 --- a/SSL/src/WebServices/MessageExchange/Module.bsl +++ b/SSL/src/WebServices/MessageExchange/Module.bsl @@ -35,10 +35,16 @@ Иначе - ПараметрыФоновогоЗадания = Новый Массив; - ПараметрыФоновогоЗадания.Добавить(ЗагруженныеСообщения); + ПараметрыПроцедуры = Новый Структура; + ПараметрыПроцедуры.Вставить("ЗагруженныеСообщения", ЗагруженныеСообщения); - ФоновыеЗадания.Выполнить("ОбменСообщениямиВнутренний.ОбработатьОчередьСообщенийСистемы", ПараметрыФоновогоЗадания); + ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(Новый УникальныйИдентификатор); + ПараметрыВыполнения.ЗапуститьВФоне = Истина; + + ФоновоеЗадание = ДлительныеОперации.ВыполнитьВФоне( + "ОбменСообщениямиВнутренний.ОбработатьОчередьСообщенийСистемыВФоне", + ПараметрыПроцедуры, + ПараметрыВыполнения); КонецЕсли; diff --git a/SSL/src/WebServices/MessageExchange_2_0_1_6/Module.bsl b/SSL/src/WebServices/MessageExchange_2_0_1_6/Module.bsl index 632987f9c..b12c17814 100644 --- a/SSL/src/WebServices/MessageExchange_2_0_1_6/Module.bsl +++ b/SSL/src/WebServices/MessageExchange_2_0_1_6/Module.bsl @@ -35,10 +35,16 @@ Иначе - ПараметрыФоновогоЗадания = Новый Массив; - ПараметрыФоновогоЗадания.Добавить(ЗагруженныеСообщения); + ПараметрыПроцедуры = Новый Структура; + ПараметрыПроцедуры.Вставить("ЗагруженныеСообщения", ЗагруженныеСообщения); - ФоновыеЗадания.Выполнить("ОбменСообщениямиВнутренний.ОбработатьОчередьСообщенийСистемы", ПараметрыФоновогоЗадания); + ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(Новый УникальныйИдентификатор); + ПараметрыВыполнения.ЗапуститьВФоне = Истина; + + ФоновоеЗадание = ДлительныеОперации.ВыполнитьВФоне( + "ОбменСообщениямиВнутренний.ОбработатьОчередьСообщенийСистемыВФоне", + ПараметрыПроцедуры, + ПараметрыВыполнения); КонецЕсли;
  • Разрешить автоматическую отправку сведений об использовании программы в фирму "1С"
  • выбрано по умолчанию, рекомендуется.
    +
  • Настройки центра мониторинга
  • перейдите по ссылке, для того чтобы разрешить отправку отчетов об ошибках, а также указать, спрашивать ли каждый раз перед отправкой данных.
  • Разрешить отправку сведений стороннему разработчику
  • в этом случае необходимо заполнить Адрес сервиса.
  • Запретить отправку сведений