diff --git a/SSL/src/BusinessProcesses/Задание/Flowchart.scheme b/SSL/src/BusinessProcesses/Задание/Flowchart.scheme index 800f8cbd9..8d3f0c0ab 100644 --- a/SSL/src/BusinessProcesses/Задание/Flowchart.scheme +++ b/SSL/src/BusinessProcesses/Задание/Flowchart.scheme @@ -6,16 +6,11 @@ 20 20 - 9 - Portrait - 1 - 1 10 10 10 10 false - 7 Auto diff --git a/SSL/src/BusinessProcesses/Задание/Forms/ДействиеВыполнить/Form.form b/SSL/src/BusinessProcesses/Задание/Forms/ДействиеВыполнить/Form.form index df5856174..6b2165997 100644 --- a/SSL/src/BusinessProcesses/Задание/Forms/ДействиеВыполнить/Form.form +++ b/SSL/src/BusinessProcesses/Задание/Forms/ДействиеВыполнить/Form.form @@ -354,13 +354,6 @@ ru Номер и важность - - System.DefaultGUIFont - true - false - false - false - ГруппаНомерИВажностьExtendedTooltip 181 @@ -725,13 +718,6 @@ ru Содержание - - System.DefaultGUIFont - true - false - false - false - ГруппаСодержаниеExtendedTooltip 187 @@ -1758,5 +1744,9 @@ BeforeWriteAtServer ПередЗаписьюНаСервере + + OnWriteAtServer + ПриЗаписиНаСервере + diff --git a/SSL/src/BusinessProcesses/Задание/Forms/ДействиеВыполнить/Module.bsl b/SSL/src/BusinessProcesses/Задание/Forms/ДействиеВыполнить/Module.bsl index bb6c6dd93..b8ea1ca7c 100644 --- a/SSL/src/BusinessProcesses/Задание/Forms/ДействиеВыполнить/Module.bsl +++ b/SSL/src/BusinessProcesses/Задание/Forms/ДействиеВыполнить/Module.bsl @@ -61,7 +61,11 @@ Возврат; КонецЕсли; - // Запись объекта бизнес-процесса. +КонецПроцедуры + +&НаСервере +Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) + ЗаписатьРеквизитыБизнесПроцесса(ТекущийОбъект); КонецПроцедуры @@ -227,7 +231,9 @@ &НаКлиенте Процедура ИзменитьЗадание(Команда) - Записать(); + Если Модифицированность Тогда + Записать(); + КонецЕсли; ПоказатьЗначение(,Объект.БизнесПроцесс); КонецПроцедуры @@ -289,17 +295,18 @@ ЗаданиеРезультатВыполнения = ЗаданиеОбъект.РезультатВыполнения; ЗаданиеСодержание = ЗаданиеОбъект.Содержание; -КонецПроцедуры +КонецПроцедуры &НаСервере Процедура ЗаписатьРеквизитыБизнесПроцесса(ЗадачаОбъект) УстановитьПривилегированныйРежим(Истина); - ЗаданиеОбъект = ЗадачаОбъект.БизнесПроцесс.ПолучитьОбъект(); - ЗаблокироватьДанныеДляРедактирования(ЗаданиеОбъект.Ссылка); - ЗаданиеОбъект.Выполнено = ЗаданиеВыполнено; - ЗаданиеОбъект.Записать(); - + БизнесПроцессыИЗадачиСервер.ЗаблокироватьБизнесПроцессы(ЗадачаОбъект.БизнесПроцесс); + БизнесПроцессОбъект = ЗадачаОбъект.БизнесПроцесс.ПолучитьОбъект(); + ЗаблокироватьДанныеДляРедактирования(БизнесПроцессОбъект.Ссылка); + БизнесПроцессОбъект.Выполнено = ЗаданиеВыполнено; + БизнесПроцессОбъект.Записать(); // АПК:1327 Блокировка установлена в БизнесПроцессыИЗадачиСервер.ЗаблокироватьБизнесПроцессы + КонецПроцедуры &НаСервере diff --git a/SSL/src/BusinessProcesses/Задание/Forms/ДействиеПроверить/Form.form b/SSL/src/BusinessProcesses/Задание/Forms/ДействиеПроверить/Form.form index 8647f12e1..796b0ebfd 100644 --- a/SSL/src/BusinessProcesses/Задание/Forms/ДействиеПроверить/Form.form +++ b/SSL/src/BusinessProcesses/Задание/Forms/ДействиеПроверить/Form.form @@ -392,13 +392,6 @@ ru Номер и важность - - System.DefaultGUIFont - true - false - false - false - ГруппаНомерИВажностьExtendedTooltip 202 @@ -440,7 +433,7 @@ UsualGroup - HorizontalIfPossible + AlwaysHorizontal Auto true true @@ -1883,5 +1876,9 @@ BeforeWriteAtServer ПередЗаписьюНаСервере + + OnWriteAtServer + ПриЗаписиНаСервере + diff --git a/SSL/src/BusinessProcesses/Задание/Forms/ДействиеПроверить/Module.bsl b/SSL/src/BusinessProcesses/Задание/Forms/ДействиеПроверить/Module.bsl index 8648989aa..300dd87b6 100644 --- a/SSL/src/BusinessProcesses/Задание/Forms/ДействиеПроверить/Module.bsl +++ b/SSL/src/BusinessProcesses/Задание/Forms/ДействиеПроверить/Module.bsl @@ -69,8 +69,11 @@ Возврат; КонецЕсли; +КонецПроцедуры + +&НаСервере +Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) ЗаписатьРеквизитыБизнесПроцесса(ТекущийОбъект); - КонецПроцедуры &НаСервере @@ -216,8 +219,10 @@ &НаКлиенте Процедура ИзменитьЗаданиеВыполнить(Команда) - Записать(); - ПоказатьЗначение(,ЗаданиеСсылка); + Если Модифицированность Тогда + Записать(); + КонецЕсли; + ПоказатьЗначение(, ЗаданиеСсылка); КонецПроцедуры @@ -307,11 +312,12 @@ Процедура ЗаписатьРеквизитыБизнесПроцесса(ЗадачаОбъект) УстановитьПривилегированныйРежим(Истина); + БизнесПроцессыИЗадачиСервер.ЗаблокироватьБизнесПроцессы(ЗадачаОбъект.БизнесПроцесс); ЗаданиеОбъект = ЗадачаОбъект.БизнесПроцесс.ПолучитьОбъект(); ЗаблокироватьДанныеДляРедактирования(ЗаданиеОбъект.Ссылка); ЗаданиеОбъект.Выполнено = ЗаданиеВыполнено; ЗаданиеОбъект.Подтверждено = ЗаданиеПодтверждено; - ЗаданиеОбъект.Записать(); + ЗаданиеОбъект.Записать(); // АПК:1327 Блокировка установлена в БизнесПроцессыИЗадачиСервер.ЗаблокироватьБизнесПроцессы КонецПроцедуры diff --git a/SSL/src/BusinessProcesses/Задание/Forms/ФормаБизнесПроцесса/Form.form b/SSL/src/BusinessProcesses/Задание/Forms/ФормаБизнесПроцесса/Form.form index 5a0fa538b..de8cc1f6f 100644 --- a/SSL/src/BusinessProcesses/Задание/Forms/ФормаБизнесПроцесса/Form.form +++ b/SSL/src/BusinessProcesses/Задание/Forms/ФормаБизнесПроцесса/Form.form @@ -529,13 +529,6 @@ ru Исполнение - - System.DefaultGUIFont - true - false - false - false - ГруппаИсполнениеExtendedTooltip 115 @@ -1135,13 +1128,6 @@ ru Автор - - System.DefaultGUIFont - true - false - false - false - ГруппаОбщиеСведенияExtendedTooltip 128 diff --git a/SSL/src/BusinessProcesses/Задание/Forms/ФормаСписка/Form.form b/SSL/src/BusinessProcesses/Задание/Forms/ФормаСписка/Form.form index 7b2fc2004..76bc97fd2 100644 --- a/SSL/src/BusinessProcesses/Задание/Forms/ФормаСписка/Form.form +++ b/SSL/src/BusinessProcesses/Задание/Forms/ФормаСписка/Form.form @@ -1358,7 +1358,7 @@ ИЗ БизнесПроцесс.Задание КАК БизнесПроцессЗадание ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПроцессыДляЗапуска КАК ПроцессыДляЗапуска - ПО БизнесПроцессЗадание.Ссылка = ПроцессыДляЗапуска.БизнесПроцесс + ПО БизнесПроцессЗадание.Ссылка = ПроцессыДляЗапуска.Владелец BusinessProcess.Задание true true diff --git a/SSL/src/BusinessProcesses/Задание/ManagerModule.bsl b/SSL/src/BusinessProcesses/Задание/ManagerModule.bsl index eee8ef8f7..f1648deac 100644 --- a/SSL/src/BusinessProcesses/Задание/ManagerModule.bsl +++ b/SSL/src/BusinessProcesses/Задание/ManagerModule.bsl @@ -66,12 +66,15 @@ // Процедура ПриПеренаправленииЗадачи(ЗадачаСсылка, НоваяЗадачаСсылка) Экспорт + // АПК:1327-выкл Блокировка бизнес-процесса установлена ранее + // в вызывающей функции БизнесПроцессыИЗадачиВызовСервера.ПеренаправитьЗадачи. БизнесПроцессОбъект = ЗадачаСсылка.БизнесПроцесс.ПолучитьОбъект(); ЗаблокироватьДанныеДляРедактирования(БизнесПроцессОбъект.Ссылка); БизнесПроцессОбъект.РезультатВыполнения = РезультатВыполненияПриПеренаправлении(ЗадачаСсылка) + БизнесПроцессОбъект.РезультатВыполнения; УстановитьПривилегированныйРежим(Истина); БизнесПроцессОбъект.Записать(); + // АПК:1327-вкл КонецПроцедуры @@ -84,22 +87,35 @@ // Процедура ОбработкаВыполненияПоУмолчанию(ЗадачаСсылка, БизнесПроцессСсылка, ТочкаМаршрутаБизнесПроцесса) Экспорт - // Устанавливаем значения по умолчанию для пакетного выполнения задач. - Если ТочкаМаршрутаБизнесПроцесса = БизнесПроцессы.Задание.ТочкиМаршрута.Выполнить Тогда - УстановитьПривилегированныйРежим(Истина); - ЗаданиеОбъект = БизнесПроцессСсылка.ПолучитьОбъект(); - ЗаблокироватьДанныеДляРедактирования(ЗаданиеОбъект.Ссылка); - ЗаданиеОбъект.Выполнено = Истина; - ЗаданиеОбъект.Записать(); - ИначеЕсли ТочкаМаршрутаБизнесПроцесса = БизнесПроцессы.Задание.ТочкиМаршрута.Проверить Тогда - УстановитьПривилегированныйРежим(Истина); - ЗаданиеОбъект = БизнесПроцессСсылка.ПолучитьОбъект(); - ЗаблокироватьДанныеДляРедактирования(ЗаданиеОбъект.Ссылка); - ЗаданиеОбъект.Выполнено = Истина; - ЗаданиеОбъект.Подтверждено = Истина; - ЗаданиеОбъект.Записать(); + ЭтоТочкаМаршрутаВыполнить = (ТочкаМаршрутаБизнесПроцесса = БизнесПроцессы.Задание.ТочкиМаршрута.Выполнить); + ЭтоТочкаМаршрутаПроверить = (ТочкаМаршрутаБизнесПроцесса = БизнесПроцессы.Задание.ТочкиМаршрута.Проверить); + Если Не ЭтоТочкаМаршрутаВыполнить И Не ЭтоТочкаМаршрутаПроверить Тогда + Возврат; КонецЕсли; + // Устанавливаем значения по умолчанию для пакетного выполнения задач. + НачатьТранзакцию(); + Попытка + БизнесПроцессыИЗадачиСервер.ЗаблокироватьБизнесПроцессы(БизнесПроцессСсылка); + + УстановитьПривилегированныйРежим(Истина); + ЗаданиеОбъект = БизнесПроцессСсылка.ПолучитьОбъект(); + ЗаблокироватьДанныеДляРедактирования(ЗаданиеОбъект.Ссылка); + + Если ЭтоТочкаМаршрутаВыполнить Тогда + ЗаданиеОбъект.Выполнено = Истина; + ИначеЕсли ЭтоТочкаМаршрутаПроверить Тогда + ЗаданиеОбъект.Выполнено = Истина; + ЗаданиеОбъект.Подтверждено = Истина; + КонецЕсли; + ЗаданиеОбъект.Записать(); // АПК:1327 Блокировка в БизнесПроцессыИЗадачиСервер.ЗаблокироватьБизнесПроцессы. + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + КонецПроцедуры // Конец СтандартныеПодсистемы.БизнесПроцессыИЗадачи @@ -141,6 +157,40 @@ // Конец СтандартныеПодсистемы.УправлениеДоступом +// СтандартныеПодсистемы.ПодключаемыеКоманды + +// Определяет список команд создания на основании. +// +// Параметры: +// КомандыСозданияНаОсновании - ТаблицаЗначений - см. СозданиеНаОснованииПереопределяемый.ПередДобавлениемКомандСозданияНаОсновании. +// Параметры - Структура - см. СозданиеНаОснованииПереопределяемый.ПередДобавлениемКомандСозданияНаОсновании. +// +Процедура ДобавитьКомандыСозданияНаОсновании(КомандыСозданияНаОсновании, Параметры) Экспорт + +КонецПроцедуры + +// Для использования в процедуре ДобавитьКомандыСозданияНаОсновании других модулей менеджеров объектов. +// Добавляет в список команд создания на основании этот объект. +// +// Параметры: +// КомандыСозданияНаОсновании - ТаблицаЗначений - см. СозданиеНаОснованииПереопределяемый.ПередДобавлениемКомандСозданияНаОсновании. +// +// Возвращаемое значение: +// СтрокаТаблицыЗначений, Неопределено - описание добавленной команды. +// +Функция ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании) Экспорт + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда + МодульСозданиеНаОсновании = ОбщегоНазначения.ОбщийМодуль("СозданиеНаОсновании"); + Возврат МодульСозданиеНаОсновании.ДобавитьКомандуСозданияНаОсновании(КомандыСозданияНаОсновании, Метаданные.БизнесПроцессы.Задание); + КонецЕсли; + + Возврат Неопределено; + +КонецФункции + +// Конец СтандартныеПодсистемы.ПодключаемыеКоманды + #КонецОбласти #КонецОбласти diff --git a/SSL/src/BusinessProcesses/Задание/ObjectModule.bsl b/SSL/src/BusinessProcesses/Задание/ObjectModule.bsl index 41beda300..e5c6e459e 100644 --- a/SSL/src/BusinessProcesses/Задание/ObjectModule.bsl +++ b/SSL/src/BusinessProcesses/Задание/ObjectModule.bsl @@ -15,6 +15,10 @@ // СтандартныеПодсистемы.УправлениеДоступом // См. УправлениеДоступом.ЗаполнитьНаборыЗначенийДоступа. +// +// Параметры: +// Таблица - ТаблицаЗначений - см. УправлениеДоступом.ТаблицаНаборыЗначенийДоступа. +// Процедура ЗаполнитьНаборыЗначенийДоступа(Таблица) Экспорт БизнесПроцессыИЗадачиПереопределяемый.ПриЗаполненииНаборовЗначенийДоступа(ЭтотОбъект, Таблица); diff --git a/SSL/src/BusinessProcesses/Задание/Задание.mdo b/SSL/src/BusinessProcesses/Задание/Задание.mdo index e00c08780..3b1de99ec 100644 --- a/SSL/src/BusinessProcesses/Задание/Задание.mdo +++ b/SSL/src/BusinessProcesses/Задание/Задание.mdo @@ -363,10 +363,7 @@ Объект системы, "по поводу" которого был создан бизнес-процесс. - DocumentRef - TaskRef - ChartOfCharacteristicTypesRef - CatalogRef + DefinedType.ПредметЗадачи ru diff --git a/SSL/src/Catalogs/Валюты/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/Валюты/Forms/ФормаСписка/Form.form index 3c1e20757..48e3da308 100644 --- a/SSL/src/Catalogs/Валюты/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/Валюты/Forms/ФормаСписка/Form.form @@ -754,7 +754,7 @@ 2 ru - Загрузить курсы валют с веб-сайта 1С + Загрузить курсы валют из Интернета true diff --git a/SSL/src/Catalogs/Валюты/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/Валюты/Forms/ФормаСписка/Module.bsl index dc33a7632..e338ac943 100644 --- a/SSL/src/Catalogs/Валюты/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/Валюты/Forms/ФормаСписка/Module.bsl @@ -84,7 +84,7 @@ СтрокаСписка = Строки[Выборка.Валюта]; СтрокаСписка.Данные["Курс"] = Выборка.Курс; Если Выборка.Кратность <> 1 Тогда - Пояснение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'руб. за %1 %2'"), + Пояснение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'за %1 %2'"), Выборка.Кратность, СтрокаСписка.Данные["Наименование"]); СтрокаСписка.Данные["Кратность"] = Пояснение; КонецЕсли; diff --git a/SSL/src/Catalogs/Валюты/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/Валюты/Forms/ФормаЭлемента/Help/ru.html index 6a40b87a8..440b59a45 100644 --- a/SSL/src/Catalogs/Валюты/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/Валюты/Forms/ФормаЭлемента/Help/ru.html @@ -7,10 +7,10 @@
Наименование валюты - полное наименование валюты.
  • -
    Цифровой код - уникальный числовой код, принят международным стандартом, служит для идентификации валюты при загрузке курсов из сети Интернет (с портала 1С:ИТС).
    +
    Цифровой код - уникальный числовой код, служит для идентификации валюты при загрузке курсов из сети Интернет (с портала 1С:ИТС).
  • -
    Символьный код - принят международным стандартом, используется как краткое наименование и основное представление валюты.
    +
    Символьный код - используется как краткое наименование и основное представление валюты.
  • Курс валюты - переключатель установлен в положение загружается из интернета, если курс валюты может загружаться с портала 1С:ИТС.
  • Особенности использования переключателя Курс валюты

    diff --git a/SSL/src/Catalogs/Валюты/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/Валюты/Forms/ФормаЭлемента/Module.bsl index c3404adc1..aabd4543b 100644 --- a/SSL/src/Catalogs/Валюты/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/Валюты/Forms/ФормаЭлемента/Module.bsl @@ -138,7 +138,7 @@ &НаКлиенте Процедура ПриИзмененииПараметровПрописиВалюты(Результат, ДополнительныеПараметры) Экспорт - Если Результат = Неопределено Тогда + Если Результат = Неопределено Или Результат = КодВозвратаДиалога.Отмена Тогда Возврат; КонецЕсли; diff --git a/SSL/src/Catalogs/Валюты/Help/ru.html b/SSL/src/Catalogs/Валюты/Help/ru.html index 0a7a724d6..bc3692b32 100644 --- a/SSL/src/Catalogs/Валюты/Help/ru.html +++ b/SSL/src/Catalogs/Валюты/Help/ru.html @@ -8,21 +8,17 @@
  • -
    Цифр. код - уникальный числовой код, принят международным стандартом, служит для идентификации валюты при загрузке курсов из сети Интернет.
    +
    Цифр. код - уникальный цифровой код, служит для идентификации валюты при загрузке курсов из сети Интернет. Например, 840 для доллара США.
  • -
    Симв. код - принят международным стандартом, используется как основное представление валюты.
    +
    Симв. код - символьный код валюты, используется в качестве представления в полях ввода. Например, EUR (Евро).
  • Курс - значение курса на текущую дату.
  • Кратность - по умолчанию заполнено единицей и не выводится. Если курс какой-либо валюты очень низкий (точность составляет меньше четырех знаков дробной части), то в этом поле указывается количество котировочных единиц. Например, курс вьетнамского донга (VND) составляет 16,1574 руб. за 10000 VND. Состоит из трех вспомогательных колонок, в которых размещается данное выражение:
    • -
      Руб. за - логическая связка.
      -
    • -
    • -
      Кратность - проставляется количество котировочных единиц.
      -
    • +
      Кратность - проставляется количество котировочных единиц.
    • Краткое наименование - указывается символьный код валюты
  • Добавление валюты из Общероссийского классификатора валют (ОКВ)

    • diff --git a/SSL/src/Catalogs/Валюты/ObjectModule.bsl b/SSL/src/Catalogs/Валюты/ObjectModule.bsl index 7f5cd2c7e..ee5ec92c7 100644 --- a/SSL/src/Catalogs/Валюты/ObjectModule.bsl +++ b/SSL/src/Catalogs/Валюты/ObjectModule.bsl @@ -124,7 +124,7 @@ Возврат; КонецЕсли; - Если ВыполняетсяФоновыйПересчетКурсов() Тогда + Если ДополнительныеСвойства.Свойство("ОбновитьКурсы") И ВыполняетсяФоновыйПересчетКурсов() Тогда ВызватьИсключение НСтр("ru = 'Не удалось записать валюту, так как еще не завершился фоновый пересчет курсов. |Попробуйте записать валюту позже.'"); КонецЕсли; @@ -141,6 +141,10 @@ КонецПроцедуры +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + Функция ВыполняетсяФоновыйПересчетКурсов() ПараметрыЗадания = Новый Структура; diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Forms/РазмещениеВРазделах/Module.bsl b/SSL/src/Catalogs/ВариантыОтчетов/Forms/РазмещениеВРазделах/Module.bsl index 779a5ef9f..a6644cb70 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/Forms/РазмещениеВРазделах/Module.bsl +++ b/SSL/src/Catalogs/ВариантыОтчетов/Forms/РазмещениеВРазделах/Module.bsl @@ -86,8 +86,9 @@ ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДеревоПодсистем.Важность"); ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; ОтборЭлемента.ПравоеЗначение = Новый ПолеКомпоновкиДанных("СмешаннаяВажность"); - - Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЗаблокированныйРеквизитЦвет); + + ЦветЗаблокированногоРеквизита = Метаданные.ЭлементыСтиля.ЗаблокированныйРеквизитЦвет; + Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветЗаблокированногоРеквизита.Значение); ВариантыОтчетов.УстановитьУсловноеОформлениеДереваПодсистем(ЭтотОбъект); diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаСписка/Form.form index 8861be107..02f647cb1 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаСписка/Form.form @@ -599,6 +599,82 @@ Auto InAdditionalSubmenu + + ГруппаОбменВариантамиОтчетов + 200 + + ОбновитьВариантОтчетаИзФайла + 196 + true + true + + true + + + ОбновитьВариантОтчетаИзФайлаРасширеннаяПодсказка + 197 + Label + true + true + + Left + + + Form.Command.ОбновитьВариантОтчетаИзФайла + Normal + Auto + true + true + UserCmds + Auto + + + СохранитьВариантОтчетаВФайл + 198 + true + true + + true + + + СохранитьВариантОтчетаВФайлРасширеннаяПодсказка + 199 + Label + true + true + + Left + + + Form.Command.СохранитьВариантОтчетаВФайл + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Обмен вариантами отчетов</value> + + + ГруппаОбменВариантамиОтчетовРасширеннаяПодсказка + 201 + Label + true + true + + Left + + + + true true @@ -1832,6 +1908,9 @@ Список.Отчет + + Список.ПолноеИмяОтчета + Список.ТипОтчета @@ -1849,7 +1928,7 @@ ИЛИ ВариантыОтчетов.ПредопределенныйВариант В ( НЕОПРЕДЕЛЕНО, ЗНАЧЕНИЕ(Справочник.ПредопределенныеВариантыОтчетов.ПустаяСсылка), - ЗНАЧЕНИЕ(Справочник.ПредопределенныеВариантыОтчетовРасширений.ПустаяСсылка)) + ЗНАЧЕНИЕ(Справочник.ПредопределенныеВариантыОтчетовРасширений.ПустаяСсылка)) ТОГДА ВЫРАЗИТЬ(ЕСТЬNULL(ПредставленияВариантов.Наименование, ВариантыОтчетов.Наименование) КАК СТРОКА(1000)) КОГДА &ЭтоОсновнойЯзык ТОГДА ВЫРАЗИТЬ(ЕСТЬNULL(ЕСТЬNULL(ВариантыКонфигурации.Наименование, ВариантыРасширений.Наименование), ВариантыОтчетов.Наименование) КАК СТРОКА(1000)) @@ -1870,13 +1949,15 @@ ИНАЧЕ ВЫРАЗИТЬ(ЕСТЬNULL(ПредставленияВариантов.Описание, ВариантыОтчетов.Описание) КАК СТРОКА(1000)) КОНЕЦ КАК Описание, ВЫБОР - КОГДА ВариантыОтчетов.ТипОтчета В (ЗНАЧЕНИЕ(Перечисление.ТипыОтчетов.Внутренний), - ВариантыОтчетов.ТипОтчета = ЗНАЧЕНИЕ(Перечисление.ТипыОтчетов.Расширение)) + КОГДА ВариантыОтчетов.ТипОтчета В ( + ЗНАЧЕНИЕ(Перечисление.ТипыОтчетов.Внутренний), + ЗНАЧЕНИЕ(Перечисление.ТипыОтчетов.Расширение)) ТОГДА ВариантыОтчетов.Отчет.Имя КОГДА ВариантыОтчетов.ТипОтчета = ЗНАЧЕНИЕ(Перечисление.ТипыОтчетов.Дополнительный) ТОГДА ВариантыОтчетов.Отчет ИНАЧЕ ПОДСТРОКА(ВЫРАЗИТЬ(ВариантыОтчетов.Отчет КАК СТРОКА(150)), 14, 137) КОНЕЦ КАК ИмяОтчета, + СведенияОРасширениях.ПолноеИмяОбъекта КАК ПолноеИмяОтчета, ВЫБОР КОГДА ВариантыОтчетов.ПометкаУдаления = ИСТИНА ТОГДА 4 @@ -1886,19 +1967,22 @@ КОНЕЦ КАК ИндексКартинки ИЗ Справочник.ВариантыОтчетов КАК ВариантыОтчетов - ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетов КАК ВариантыКонфигурации + ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетов КАК ВариантыКонфигурации ПО ВариантыОтчетов.ПредопределенныйВариант = ВариантыКонфигурации.Ссылка - ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетовРасширений КАК ВариантыРасширений + ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетовРасширений КАК ВариантыРасширений ПО ВариантыОтчетов.ПредопределенныйВариант = ВариантыРасширений.Ссылка - ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВариантыОтчетов.Представления КАК ПредставленияВариантов - ПО ВариантыОтчетов.Ссылка = ПредставленияВариантов.Ссылка - И (ПредставленияВариантов.КодЯзыка = &КодЯзыка) - ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетов.Представления КАК ПредставленияИзКонфигурации - ПО ВариантыОтчетов.ПредопределенныйВариант = ПредставленияИзКонфигурации.Ссылка - И (ПредставленияИзКонфигурации.КодЯзыка = &КодЯзыка) - ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетовРасширений.Представления КАК ПредставленияИзРасширений - ПО ВариантыОтчетов.ПредопределенныйВариант = ПредставленияИзРасширений.Ссылка - И (ПредставленияИзРасширений.КодЯзыка = &КодЯзыка) + ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВариантыОтчетов.Представления КАК ПредставленияВариантов + ПО ВариантыОтчетов.Ссылка = ПредставленияВариантов.Ссылка + И (ПредставленияВариантов.КодЯзыка = &КодЯзыка) + ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетов.Представления КАК ПредставленияИзКонфигурации + ПО ВариантыОтчетов.ПредопределенныйВариант = ПредставленияИзКонфигурации.Ссылка + И (ПредставленияИзКонфигурации.КодЯзыка = &КодЯзыка) + ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетовРасширений.Представления КАК ПредставленияИзРасширений + ПО ВариантыОтчетов.ПредопределенныйВариант = ПредставленияИзРасширений.Ссылка + И (ПредставленияИзРасширений.КодЯзыка = &КодЯзыка) + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ИдентификаторыОбъектовВерсийРасширений КАК СведенияОРасширениях + ПО СведенияОРасширениях.ВерсияРасширений = &ВерсияРасширений + И СведенияОРасширениях.Идентификатор = ВариантыОтчетов.Отчет ГДЕ ВариантыОтчетов.Отчет В(&ДоступныеОтчеты) И ВЫБОР @@ -1907,7 +1991,6 @@ ИНАЧЕ ВариантыОтчетов.Ссылка В (&ВариантыПользователя) КОНЕЦ Catalog.ВариантыОтчетов - true true true true @@ -2180,6 +2263,58 @@ DontUse Auto + + СохранитьВариантОтчетаВФайл + + <key>ru</key> + <value>Сохранить в файл...</value> + + 3 + + ru + Сохранить вариант отчета в файл + + + true + + + CommonPicture.СохранитьФайлКак + + + + СохранитьВариантОтчетаВФайл + + + TextPicture + Auto + Auto + + + ОбновитьВариантОтчетаИзФайла + + <key>ru</key> + <value>Обновить из файла...</value> + + 4 + + ru + Обновить вариант отчета из файла + + + true + + + CommonPicture.ОбновитьФайлИзФайлаНаДиске + + + + ОбновитьВариантОтчетаИзФайла + + + TextPicture + Auto + Auto + ТолькоВарианты diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаСписка/Module.bsl index 864660499..9ed7ff72c 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаСписка/Module.bsl @@ -92,6 +92,7 @@ Список.Параметры.УстановитьЗначениеПараметра("ОтключенныеВариантыПрограммы", Новый Массив(ВариантыОтчетовПовтИсп.ОтключенныеВариантыПрограммы())); Список.Параметры.УстановитьЗначениеПараметра("ЭтоОсновнойЯзык", ТекущийЯзык() = Метаданные.ОсновнойЯзык); Список.Параметры.УстановитьЗначениеПараметра("КодЯзыка", ТекущийЯзык().КодЯзыка); + Список.Параметры.УстановитьЗначениеПараметра("ВерсияРасширений", ПараметрыСеанса.ВерсияРасширений); ТекущийЭлемент = Элементы.Список; @@ -181,7 +182,7 @@ Возврат; КонецЕсли; - ПараметрыРазмещения = Новый Структура("Варианты, Действие, Приемник, Источник"); //МассивВариантов, Всего, Представление + ПараметрыРазмещения = Новый Структура("Варианты, Действие, Приемник, Источник"); ПараметрыРазмещения.Варианты = Новый Структура("Массив, Всего, Представление"); ПараметрыРазмещения.Варианты.Массив = ПараметрыПеретаскивания.Значение; ПараметрыРазмещения.Варианты.Всего = ПараметрыПеретаскивания.Значение.Количество(); @@ -290,6 +291,44 @@ ВариантыОтчетовКлиент.ПоказатьНастройкиОтчета(Элементы.Список.ТекущаяСтрока); КонецПроцедуры +&НаКлиенте +Процедура СохранитьВариантОтчетаВФайл(Команда) + ВариантОтчета = Элементы.Список.ТекущаяСтрока; + Если Не ЗначениеЗаполнено(ВариантОтчета) Тогда + Возврат; + КонецЕсли; + + ПараметрыСохранения = Новый Структура(ВариантыОтчетовКлиентСервер.СвойстваСохраненияВариантаОтчета()); + ПараметрыСохранения.ВариантОтчета = ВариантОтчета; + + ОткрытьФорму( + "ХранилищеНастроек.ХранилищеВариантовОтчетов.Форма.СохранениеВариантаОтчетаВФайл", + ПараметрыСохранения, + ЭтотОбъект); +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьВариантОтчетаИзФайла(Команда) + Ссылка = Элементы.Список.ТекущаяСтрока; + + Если ТипЗнч(Ссылка) <> Тип("СправочникСсылка.ВариантыОтчетов") Тогда + Возврат; + КонецЕсли; + + СвойстваВариантаОтчета = ВариантыОтчетовКлиент.СвойстваВариантаОтчетаОснования(); + СвойстваВариантаОтчета.Ссылка = Ссылка; + СвойстваВариантаОтчета.ПредставлениеВарианта = Строка(Ссылка); + + Обработчик = Новый ОписаниеОповещения( + "ОбновитьВариантОтчетаИзФайла", ВариантыОтчетовКлиент, СвойстваВариантаОтчета); + + ПараметрыЗагрузки = ФайловаяСистемаКлиент.ПараметрыЗагрузкиФайла(); + ПараметрыЗагрузки.Диалог.Фильтр = НСтр("ru = 'Архив ZIP (*.zip)|*.zip'"); + ПараметрыЗагрузки.ИдентификаторФормы = УникальныйИдентификатор; + + ФайловаяСистемаКлиент.ЗагрузитьФайл(Обработчик, ПараметрыЗагрузки); +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -334,8 +373,9 @@ ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Список.Описание"); ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено; - - Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ПоясняющийТекст); + + ЦветПоясняющегоТекста = Метаданные.ЭлементыСтиля.ПоясняющийТекст; + Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветПоясняющегоТекста.Значение); КонецПроцедуры @@ -530,8 +570,13 @@ Размещено = 0; УжеРазмещены = ""; НеМогутРазмещаться = ""; + НачатьТранзакцию(); Попытка + Блокировка = Новый БлокировкаДанных; + ЗаблокироватьВариантыОтчетовПередРазмещением(Блокировка, ПараметрыРазмещения.Варианты.Массив); + Блокировка.Заблокировать(); + Для Каждого ВариантСсылка Из ПараметрыРазмещения.Варианты.Массив Цикл Если ВариантСсылка.ТипОтчета = Перечисления.ТипыОтчетов.Внешний Тогда НеМогутРазмещаться = ?(НеМогутРазмещаться = "", "", НеМогутРазмещаться + Символы.ПС) @@ -599,6 +644,7 @@ + Строка(ВариантСсылка); КонецЕсли; КонецЦикла; + ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); @@ -610,9 +656,26 @@ ОбновитьСодержимоеСписка(); КонецЕсли; - Возврат Новый Структура("Размещено,УжеРазмещены,НеМогутРазмещаться", Размещено, УжеРазмещены, НеМогутРазмещаться); + Возврат Новый Структура("Размещено, УжеРазмещены, НеМогутРазмещаться", Размещено, УжеРазмещены, НеМогутРазмещаться); КонецФункции +&НаСервере +Процедура ЗаблокироватьВариантыОтчетовПередРазмещением(Блокировка, ВариантыОтчетов) + + ИсточникДанных = Новый ТаблицаЗначений; + ИсточникДанных.Колонки.Добавить("Ссылка", Новый ОписаниеТипов("СправочникСсылка.ВариантыОтчетов")); + + Для Каждого ВариантОтчета Из ВариантыОтчетов Цикл + Строка = ИсточникДанных.Добавить(); + Строка.Ссылка = ВариантОтчета; + КонецЦикла; + + ЭлементБлокировки = Блокировка.Добавить("Справочник.ВариантыОтчетов"); + ЭлементБлокировки.ИсточникДанных = ИсточникДанных; + ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Ссылка", "Ссылка"); + +КонецПроцедуры + &НаКлиенте Процедура ОбновитьСодержимоеСпискаКлиент(Событие) Замер = НачатьЗамер(Событие); diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаЭлемента/Form.form index 056ad5f63..a8121bd3c 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаЭлемента/Form.form @@ -32,10 +32,6 @@ Left true - - Opening - НаименованиеОткрытие - true true true @@ -82,10 +78,6 @@ StartChoice ОписаниеНачалоВыбора - - Opening - ОписаниеОткрытие - true 2 true @@ -145,214 +137,31 @@ Normal - - Доступен - 109 - true - true - - true - - - Доступен - - Left - - OnChange - ДоступенПриИзменении - - - ДоступенExtendedTooltip - 164 - Label - true - true - - Left - - - - ДоступенКонтекстноеМеню - 110 - true - - RadioButtonField - Enter - true - Left - true - - - - ru - Только для автора - - - 1 - - - - - ru - Всем пользователям - - - 2 - - - Vertical - - - ДеревоПодсистемЗаголовокИВидимостьПоУмолчанию - 236 - - ДеревоПодсистемЗаголовок - 238 - - <key>ru</key> - <value>Размещение в панелях отчетов: </value> - - true - true - - true - - - ДеревоПодсистемЗаголовокРасширеннаяПодсказка - 240 - Label - true - true - - Left - - - - ДеревоПодсистемЗаголовокКонтекстноеМеню - 239 - true - - Label - true - Left - - Left - - - - ВидимостьПоУмолчанию - 203 - true - true - - true - - - Объект.ВидимостьПоУмолчанию - - Right - - ВидимостьПоУмолчаниюРасширеннаяПодсказка - 205 - Label - true - true - - Left - - - - ВидимостьПоУмолчаниюКонтекстноеМеню - 204 - true - - CheckBoxField - Enter - true - Left - true - - - true - true - - true - - - <key>ru</key> - <value>Дерево подсистем заголовок и видимость по умолчанию</value> - - - ДеревоПодсистемЗаголовокИВидимостьПоУмолчаниюРасширеннаяПодсказка - 237 - Label - true - true - - Left - - - UsualGroup - - HorizontalIfPossible - Auto - true - true - Auto - Auto - - - - ДеревоПодсистем - 80 - - <key>ru</key> - <value>Дерево подсистем</value> - - true - true - - true - - - ДеревоПодсистем - - None - Add - Copy - Delete - HierarchicalList - List - MoveDown - MoveUp - SortListAsc - SortListDesc - Tree + Страницы + 269 - ГруппаКолонок - 83 - VeryHigh + Пользователи + 271 - ДеревоПодсистемИспользование - 104 - VeryHigh + Доступен + 109 true true true - ДеревоПодсистем.Использование + Доступен - None + Left OnChange - ДеревоПодсистемИспользованиеПриИзменении + ДоступенПриИзменении - ДеревоПодсистемИспользованиеExtendedTooltip - 171 + ДоступенExtendedTooltip + 164 Label true true @@ -361,33 +170,378 @@ - ДеревоПодсистемИспользованиеКонтекстноеМеню - 105 + ДоступенКонтекстноеМеню + 110 true - CheckBoxField - Left - Auto + RadioButtonField + Enter true Left true - + + + + ru + Только автору + + + ТолькоДляАвтора + + + + + ru + Указанным пользователям + + + УказаннымПользователям + + + Vertical + - - ДеревоПодсистемПредставление - 86 - VeryHigh + + ПользователиВарианта + 275 + + <key>ru</key> + <value>Пользователи варианта</value> + true true true - ДеревоПодсистем.Представление + ПользователиВарианта + None + Add + Change + Copy + CopyToClipboard + EndEdit + Pickup + + ПользователиВариантаПометка + 291 + true + true + + true + + + ПользователиВарианта.Check + + + OnChange + ПользователиВариантаПометкаПриИзменении + + + ПользователиВариантаПометкаРасширеннаяПодсказка + 293 + Label + true + true + + Left + + + + ПользователиВариантаПометкаКонтекстноеМеню + 292 + true + + CheckBoxField + Auto + true + Left + true + + + + ПользователиВариантаЗначение + 288 + true + true + + true + + + ПользователиВарианта.Value + + + ПользователиВариантаЗначениеРасширеннаяПодсказка + 290 + Label + true + true + + Left + + + + ПользователиВариантаЗначениеКонтекстноеМеню + 289 + true + + InputField + true + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ПользователиВариантаКоманднаяПанель + 277 + + ПользователиВариантаГруппаПодобрать + 294 + + ПользователиВариантаПодобратьПользователейГруппы + 296 + + <key>ru</key> + <value>Пользователей (группы)</value> + + true + true + + true + + + ПользователиВариантаПодобратьПользователейГруппыРасширеннаяПодсказка + 297 + Label + true + true + + Left + + + Form.Command.ПодобратьПользователей + Normal + Auto + true + true + UserCmds + Auto + + + ПользователиВариантаПодобратьГруппыВнешнихПользователей + 298 + + <key>ru</key> + <value>Группы внешних пользователей</value> + + true + true + + true + + + ПользователиВариантаПодобратьГруппыВнешнихПользователейРасширеннаяПодсказка + 299 + Label + true + true + + Left + + + Form.Command.ПодобратьГруппыВнешнихПользователей + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Подобрать</value> + + + ПользователиВариантаГруппаПодобратьРасширеннаяПодсказка + 295 + Label + true + true + + Left + + + Popup + + Auto + Normal + + + + ПользователиВариантаПодобратьПользователей + 300 + + <key>ru</key> + <value>Подобрать</value> + + true + true + + true + + + ПользователиВариантаПодобратьПользователейРасширеннаяПодсказка + 301 + Label + true + true + + Left + + + Form.Command.ПодобратьПользователей + Normal + Auto + true + true + UserCmds + Auto + + + ПользователиВариантаУдалить + 302 + true + true + + true + + + ПользователиВариантаУдалитьРасширеннаяПодсказка + 303 + Label + true + true + + Left + + + Form.Item.ПользователиВарианта.StandardCommand.Delete + Normal + Auto + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + Left + + + BeforeAddRow + ПользователиВариантаПередНачаломДобавления + + + BeforeDeleteRow + ПользователиВариантаПередУдалением + + + ChoiceProcessing + ПользователиВариантаОбработкаВыбора + + + OnChange + ПользователиВариантаПриИзменении + + + ПользователиВариантаСтрокаПоиска + 279 + + ПользователиВариантаСтрокаПоискаРасширеннаяПодсказка + 281 + Label + true + true + + Left + + + + ПользователиВариантаСтрокаПоискаКонтекстноеМеню + 280 + true + + ПользователиВарианта + + true + + + + ПользователиВариантаСостояниеПросмотра + 282 + + ПользователиВариантаСостояниеПросмотраРасширеннаяПодсказка + 284 + Label + true + true + + Left + + + + ПользователиВариантаСостояниеПросмотраКонтекстноеМеню + 283 + true + + ViewStatusAddition + ПользователиВарианта + + true + + + + ПользователиВариантаУправлениеПоиском + 285 + + ПользователиВариантаУправлениеПоискомРасширеннаяПодсказка + 287 + Label + true + true + + Left + + + + ПользователиВариантаУправлениеПоискомКонтекстноеМеню + 286 + true + + SearchControlAddition + ПользователиВарианта + + true + + - ДеревоПодсистемПредставлениеExtendedTooltip - 172 + ПользователиВариантаРасширеннаяПодсказка + 278 Label true true @@ -396,26 +550,36 @@ - ДеревоПодсистемПредставлениеКонтекстноеМеню - 87 + ПользователиВариантаКонтекстноеМеню + 276 true - InputField - true - Left - Auto - true - Left - true - - true - true - true - true - true - true - Normal - + true + true + true + true + true + MultiRow + Row + 1 + 1 + AutoUse + AutoUse + true + true + false + false + false + true + Auto + Auto + true + true + AsFileRef + + ПользователиВарианта.Picture + + true true true @@ -424,11 +588,11 @@ <key>ru</key> - <value>Колонок</value> + <value>Пользователи</value> - ГруппаКолонокExtendedTooltip - 170 + ПользователиРасширеннаяПодсказка + 272 Label true true @@ -436,31 +600,329 @@ Left - ColumnGroup - - InCell + Page + + Vertical auto - true + false - - ДеревоПодсистемВажность - 96 + + Разделы + 273 + + ДеревоПодсистем + 80 + + <key>ru</key> + <value>Дерево подсистем</value> + + true + true + + true + + + ДеревоПодсистем + + None + Add + Copy + Delete + HierarchicalList + List + MoveDown + MoveUp + SortListAsc + SortListDesc + Tree + + ГруппаКолонок + 83 + VeryHigh + + ДеревоПодсистемИспользование + 104 + VeryHigh + true + true + + true + + + ДеревоПодсистем.Использование + + None + + OnChange + ДеревоПодсистемИспользованиеПриИзменении + + + ДеревоПодсистемИспользованиеExtendedTooltip + 171 + Label + true + true + + Left + + + + ДеревоПодсистемИспользованиеКонтекстноеМеню + 105 + true + + CheckBoxField + Left + Auto + true + Left + true + + + + ДеревоПодсистемПредставление + 86 + VeryHigh + true + true + + true + + + ДеревоПодсистем.Представление + + + ДеревоПодсистемПредставлениеExtendedTooltip + 172 + Label + true + true + + Left + + + + ДеревоПодсистемПредставлениеКонтекстноеМеню + 87 + true + + InputField + true + Left + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Колонок</value> + + + ГруппаКолонокExtendedTooltip + 170 + Label + true + true + + Left + + + ColumnGroup + + InCell + auto + true + + + + ДеревоПодсистемВажность + 96 + true + true + + true + + + ДеревоПодсистем.Важность + + + OnChange + ДеревоПодсистемВажностьПриИзменении + + + ДеревоПодсистемВажностьExtendedTooltip + 173 + Label + true + true + + Left + + + + ДеревоПодсистемВажностьКонтекстноеМеню + 97 + true + + InputField + Auto + true + Left + true + + 8 + true + true + true + false + true + true + true + true + Normal + + + + ДеревоПодсистемКоманднаяПанель + 82 + Left + + + ДеревоПодсистемSearchString + 206 + + ДеревоПодсистемSearchStringExtendedTooltip + 208 + Label + true + true + + Left + + + + ДеревоПодсистемSearchStringContextMenu + 207 + true + + ДеревоПодсистем + + true + + + + ДеревоПодсистемViewStatus + 209 + + ДеревоПодсистемViewStatusExtendedTooltip + 211 + Label + true + true + + Left + + + + ДеревоПодсистемViewStatusContextMenu + 210 + true + + ViewStatusAddition + ДеревоПодсистем + + true + + + + ДеревоПодсистемSearchControl + 212 + + ДеревоПодсистемSearchControlExtendedTooltip + 214 + Label + true + true + + Left + + + + ДеревоПодсистемSearchControlContextMenu + 213 + true + + SearchControlAddition + ДеревоПодсистем + + true + + + + ДеревоПодсистемExtendedTooltip + 169 + Label + true + true + + Left + + + + ДеревоПодсистемКонтекстноеМеню + 81 + true + + Tree + true + true + true + true + MultiRow +
      true
      + 1 + 1 + AutoUse + AutoUse + true + true + true + Auto + Auto + ExpandAllLevels + true + true + SelectionPresentationAndChoice + true +
      true true true - - ДеревоПодсистем.Важность - - - OnChange - ДеревоПодсистемВажностьПриИзменении - + + <key>ru</key> + <value>Разделы</value> + - ДеревоПодсистемВажностьExtendedTooltip - 173 + РазделыРасширеннаяПодсказка + 274 Label true true @@ -468,108 +930,25 @@ Left
      - - ДеревоПодсистемВажностьКонтекстноеМеню - 97 - true - - InputField - Auto - true - Left - true - - 8 - true - true - true - false - true - true - true - true - Normal + Page + + Vertical + auto + false - - ДеревоПодсистемКоманднаяПанель - 82 - Left - - - ДеревоПодсистемSearchString - 206 - - ДеревоПодсистемSearchStringExtendedTooltip - 208 - Label - true - true - - Left - - - - ДеревоПодсистемSearchStringContextMenu - 207 - true - - ДеревоПодсистем - - true - - - - ДеревоПодсистемViewStatus - 209 - - ДеревоПодсистемViewStatusExtendedTooltip - 211 - Label - true - true - - Left - - - - ДеревоПодсистемViewStatusContextMenu - 210 - true - - ViewStatusAddition - ДеревоПодсистем - - true - - - - ДеревоПодсистемSearchControl - 212 - - ДеревоПодсистемSearchControlExtendedTooltip - 214 - Label - true - true - - Left - - - - ДеревоПодсистемSearchControlContextMenu - 213 - true - - SearchControlAddition - ДеревоПодсистем - - true - - + true + true + + true + + + <key>ru</key> + <value>Страницы</value> + - ДеревоПодсистемExtendedTooltip - 169 + СтраницыРасширеннаяПодсказка + 270 Label true true @@ -577,33 +956,11 @@ Left - - ДеревоПодсистемКонтекстноеМеню - 81 - true - - Tree - true - true - true - true - MultiRow -
      true
      - 1 - 1 - AutoUse - AutoUse - true - true - false - true - Auto - Auto - ExpandAllLevels - true - true - SelectionPresentationAndChoice - true + Pages + + TabsOnTop + Auto + Родитель @@ -2129,6 +2486,93 @@ true + + ПользователиВарианта + + <key>ru</key> + <value>Пользователи варианта</value> + + 3 + + ValueList + + + true + + + true + + true + + + CatalogRef.ГруппыВнешнихПользователей + CatalogRef.ГруппыПользователей + CatalogRef.Пользователи + + + + + ИспользоватьГруппыПользователей + 5 + + Boolean + + + true + + + true + + + + ИспользоватьВнешнихПользователей + 9 + + Boolean + + + true + + + true + + + + ПодобратьГруппыВнешнихПользователей + + <key>ru</key> + <value>Подобрать группы внешних пользователей</value> + + 1 + + true + + + + ПодобратьГруппыВнешнихПользователей + + + Auto + Auto + + + ПодобратьПользователей + + <key>ru</key> + <value>Подобрать пользователей</value> + + 2 + + true + + + + ПодобратьПользователей + + + Auto + Auto + diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаЭлемента/Help/ru.html index bc5d542d5..ee70e7b58 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаЭлемента/Help/ru.html @@ -2,27 +2,35 @@

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

      Сведения о варианте отчета

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

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

    Доступность

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

    Размещение в панелях отчетов

    -

    Размещение вариантов отчетов могут менять администраторы вариантов отчетов и авторы.

    +

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

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

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

    • Нажмите Открыть, укажите необходимые для отчета параметры, затем нажмите Сформировать.

    Сброс настроек

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

    См. также:

    +

    +
    • Еще - Сбросить настройки размещения - сбросить настройки размещения по данному варианту отчета;
    • +
    • Еще - Сбросить настройки пользователей - сбросить пользовательские настройки в панелях отчетов по данному варианту отчета.

    +

    См. также:

    \ No newline at end of file +
    \ No newline at end of file diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаЭлемента/Module.bsl index bf0d06d44..458df1b3c 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаЭлемента/Module.bsl @@ -18,7 +18,7 @@ ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(Объект, ЭтотОбъект); - Доступен = ?(Объект.ТолькоДляАвтора, "1", "2"); + Доступен = ?(Объект.ТолькоДляАвтора, "ТолькоДляАвтора", "УказаннымПользователям"); ПолныеПраваНаВарианты = ВариантыОтчетов.ПолныеПраваНаВарианты(); ПравоНаЭтотВариант = ПолныеПраваНаВарианты Или Объект.Автор = Пользователи.АвторизованныйПользователь(); @@ -45,7 +45,6 @@ Элементы.Доступен.ТолькоПросмотр = Не ПолныеПраваНаВарианты; Элементы.Автор.ТолькоПросмотр = Не ПолныеПраваНаВарианты; - Элементы.ВидимостьПоУмолчанию.ТолькоПросмотр = Не ПолныеПраваНаВарианты; Элементы.ТехническаяИнформация.Видимость = ПолныеПраваНаВарианты; // Заполнение имени отчета для команды "Просмотр". @@ -60,19 +59,22 @@ ПерезаполнитьДерево(Ложь); - ЛокализуемыеЭлементы = Новый Массив; - ЛокализуемыеЭлементы.Добавить(Элементы.Наименование); - ЛокализуемыеЭлементы.Добавить(Элементы.Описание); - ЛокализацияСервер.ПриСозданииНаСервере(ЛокализуемыеЭлементы); + МультиязычностьСервер.ПриСозданииНаСервере(ЭтотОбъект, Объект); + + ВариантыОтчетов.ОпределитьПоведениеСпискаПользователейВариантаОтчета(ЭтотОбъект); КонецПроцедуры &НаКлиенте Процедура ПриОткрытии(Отказ) + Если ПараметрыОткрытияФормыОтчета <> Неопределено Тогда Отказ = Истина; ВариантыОтчетовКлиент.ОткрытьФормуОтчета(Неопределено, ПараметрыОткрытияФормыОтчета); КонецЕсли; + + ВариантыОтчетовКлиент.ОформитьПользователейВариантаОтчета(ЭтотОбъект, Ложь); + КонецПроцедуры &НаКлиенте @@ -87,15 +89,14 @@ &НаСервере Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) + // Запись свойств, связанных с предопределенным вариантом отчета. ОписаниеИзменено = Ложь; Если ЭтоПредопределенный Тогда ПредопределенныйВариант = ТекущийОбъект.ПредопределенныйВариант.ПолучитьОбъект(); - ЛокализацияСервер.ПриЧтенииПредставленийНаСервере(ПредопределенныйВариант); + МультиязычностьСервер.ПриЧтенииПредставленийНаСервере(ПредопределенныйВариант); - ТекущийОбъект.ВидимостьПоУмолчаниюПереопределена = - Объект.ВидимостьПоУмолчанию <> ПредопределенныйВариант.ВидимостьПоУмолчанию; ОписаниеИзменено = Не ПустаяСтрока(Объект.Описание) И НРег(СокрЛП(Объект.Описание)) <> НРег(СокрЛП(ПредопределенныйВариант.Описание)); Если Не ОписаниеИзменено Тогда ТекущийОбъект.Описание = ""; @@ -114,10 +115,13 @@ КонецЕсли; ВариантыОтчетов.ДеревоПодсистемЗаписать(ТекущийОбъект, ИзмененныеРазделы); - ЛокализацияСервер.ПередЗаписьюНаСервере(ТекущийОбъект); + МультиязычностьСервер.ПередЗаписьюНаСервере(ТекущийОбъект); Если ЭтоПредопределенный И Не ОписаниеИзменено Тогда ТекущийОбъект.Представления.Очистить(); КонецЕсли; + + ТекущийОбъект.ДополнительныеСвойства.Вставить("ПользователиВарианта", ПользователиВарианта); + КонецПроцедуры &НаСервере @@ -132,7 +136,7 @@ ПерезаполнитьДерево(Ложь); ЗаполнитьИзПредопределенного(ТекущийОбъект); - ЛокализацияСервер.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); + МультиязычностьСервер.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); КонецПроцедуры &НаКлиенте @@ -152,7 +156,10 @@ // Конец СтандартныеПодсистемы.УправлениеДоступом ЗаполнитьИзПредопределенного(ТекущийОбъект); - ЛокализацияСервер.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); + МультиязычностьСервер.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); + + РегистрыСведений.НастройкиВариантовОтчетов.ПрочитатьНастройкиДоступностиВариантаОтчета( + ТекущийОбъект.Ссылка, ПользователиВарианта, ИспользоватьГруппыПользователей, ИспользоватьВнешнихПользователей); КонецПроцедуры @@ -163,22 +170,64 @@ &НаКлиенте Процедура ОписаниеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; - ВариантыОтчетовКлиент.РедактироватьМногострочныйТекст(ЭтотОбъект, Элемент.ТекстРедактирования, Объект, "Описание", НСтр("ru = 'Описание'")); + ОбщегоНазначенияКлиент.ПоказатьФормуРедактированияКомментария(Элемент.ТекстРедактирования, ЭтотОбъект, "Описание", НСтр("ru = 'Описание'")); КонецПроцедуры &НаКлиенте Процедура ДоступенПриИзменении(Элемент) - Объект.ТолькоДляАвтора = (ЭтотОбъект.Доступен = "1"); + + Объект.ТолькоДляАвтора = (Доступен = "ТолькоДляАвтора"); + ВариантыОтчетовКлиент.ОформитьПользователейВариантаОтчета(ЭтотОбъект, Ложь); + КонецПроцедуры &НаКлиенте -Процедура НаименованиеОткрытие(Элемент, СтандартнаяОбработка) - ЛокализацияКлиент.ПриОткрытии(Объект, Элемент, "Наименование", СтандартнаяОбработка); +Процедура Подключаемый_Открытие(Элемент, СтандартнаяОбработка) + МультиязычностьКлиент.ПриОткрытии(ЭтотОбъект, Объект, Элемент, СтандартнаяОбработка); +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыПользователиВарианта + +&НаКлиенте +Процедура ПользователиВариантаПриИзменении(Элемент) + + ВариантыОтчетовКлиент.ОформитьПользователейВариантаОтчета(ЭтотОбъект); + КонецПроцедуры &НаКлиенте -Процедура ОписаниеОткрытие(Элемент, СтандартнаяОбработка) - ЛокализацияКлиент.ПриОткрытии(Объект, Элемент, "Описание", СтандартнаяОбработка); +Процедура ПользователиВариантаПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр) + + Отказ = Истина; + +КонецПроцедуры + +&НаКлиенте +Процедура ПользователиВариантаПередУдалением(Элемент, Отказ) + + Если Не ИспользоватьГруппыПользователей + И Не ИспользоватьВнешнихПользователей Тогда + + Отказ = Истина; + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПользователиВариантаОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) + + ВариантыОтчетовКлиент.ПользователиВариантаОтчетаОбработкаВыбора(ЭтотОбъект, ВыбранноеЗначение, СтандартнаяОбработка); + +КонецПроцедуры + +&НаКлиенте +Процедура ПользователиВариантаПометкаПриИзменении(Элемент) + + ВариантыОтчетовКлиент.ОформитьПользователейВариантаОтчета(ЭтотОбъект); + КонецПроцедуры #КонецОбласти @@ -197,12 +246,32 @@ #КонецОбласти +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ПодобратьПользователей(Команда) + + ВариантыОтчетовКлиент.ПодобратьПользователейВариантаОтчета(ЭтотОбъект); + +КонецПроцедуры + +&НаКлиенте +Процедура ПодобратьГруппыВнешнихПользователей(Команда) + + ВариантыОтчетовКлиент.ПодобратьПользователейВариантаОтчета(ЭтотОбъект, Истина); + +КонецПроцедуры + +#КонецОбласти + #Область СлужебныеПроцедурыИФункции &НаСервере Процедура УстановитьУсловноеОформление() УсловноеОформление.Элементы.Очистить(); + + ВариантыОтчетов.УстановитьУсловноеОформлениеСпискаПользователейВариантаОтчета(ЭтотОбъект); ВариантыОтчетов.УстановитьУсловноеОформлениеДереваПодсистем(ЭтотОбъект); КонецПроцедуры @@ -228,13 +297,10 @@ И ЗначениеЗаполнено(ВариантОбъект.ПредопределенныйВариант); Если Не ЭтоПредопределенный Тогда Возврат; - КонецЕсли; - - ПредопределенныйВариант = ВариантОбъект.ПредопределенныйВариант.ПолучитьОбъект(); - Если ВариантОбъект.ВидимостьПоУмолчаниюПереопределена = Ложь Тогда - ВариантОбъект.ВидимостьПоУмолчанию = ПредопределенныйВариант.ВидимостьПоУмолчанию; КонецЕсли; + ПредопределенныйВариант = ВариантОбъект.ПредопределенныйВариант.ПолучитьОбъект(); + ВариантОбъект.Наименование = ПредопределенныйВариант.Наименование; ПредставленияВарианта = ВариантОбъект.Представления.Выгрузить(); diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Help/ru.html b/SSL/src/Catalogs/ВариантыОтчетов/Help/ru.html index 00918cabb..856d09dc7 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/Help/ru.html +++ b/SSL/src/Catalogs/ВариантыОтчетов/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

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

    @@ -9,63 +9,95 @@

    Список состоит из двух частей:

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

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

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

    • Наименование - полное наименование варианта отчета, которое выводится в списках.
      -
    • Автор - полное имя пользователя, который является автором варианта отчета. -
    • Описание - подробная информация о варианте отчета.

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

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

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

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

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

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

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

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

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

    Настройка варианта отчета

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

    Удаление варианта отчета

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

    +

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

    +

    Сохранение варианта отчета в файл

    +

    +
    • С помощью кнопки  Сохранить в файл можно записать вариант отчета (с включением пользовательских настроек). Укажите путь к архивному файлу на компьютере. Вместе с вариантом отчета по умолчанию сохраняются и пользовательские настройки. Можно отменить сохранение всех или некоторых настроек с помощью флажков.
    • +
    • Данная возможность предназначена для обмена настройками вариантов отчета между информационными базами идентичной структуры.

    Удаление варианта отчета

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

    Размещение вариантов отчетов в разделах программы 

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

    Размещение варианта отчета может быть изменено автором отчета или администратором.

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

      -
    • +
    • +
    • Предусмотрены дополнительные возможности по настройке внешнего вида панели отчетов в программе: можно выделить тот или иной вариант отчета как Важный или поместить в группу См. также.

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

    Сброс настроек

    • Нажмите Еще - Сбросить настройки размещения, для того чтобы восстановить исходные настройки выбранных вариантов отчетов: размещение в разделах программы, доступность и видимость по умолчанию. Может выполняться только для предопределенных вариантов отчетов;
      -
    • Нажмите Еще - Сбросить настройки пользователей, для того чтобы сбросить пользовательские настройки выбранных вариантов отчетов: видимость и быстрый доступ.

    См. также:

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

    \ No newline at end of file diff --git a/SSL/src/Catalogs/ВариантыОтчетов/ManagerModule.bsl b/SSL/src/Catalogs/ВариантыОтчетов/ManagerModule.bsl index f851797ed..dc3effab3 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/ManagerModule.bsl +++ b/SSL/src/Catalogs/ВариантыОтчетов/ManagerModule.bsl @@ -135,8 +135,8 @@ Если ЭтоПредопределенный Тогда Данные.Ссылка = Данные.ПредопределенныйВариант; КонецЕсли; - ЛокализацияКлиентСервер.ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка); - + МультиязычностьКлиентСервер.ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка); + КонецПроцедуры #КонецОбласти diff --git a/SSL/src/Catalogs/ВариантыОтчетов/ObjectModule.bsl b/SSL/src/Catalogs/ВариантыОтчетов/ObjectModule.bsl index 7703a6c63..5e03cb4f8 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/ObjectModule.bsl +++ b/SSL/src/Catalogs/ВариантыОтчетов/ObjectModule.bsl @@ -10,7 +10,14 @@ #Область ОбработчикиСобытий +Процедура ОбработкаЗаполнения(ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка) + + ИнициализироватьОбъект(ДанныеЗаполнения); + +КонецПроцедуры + Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты) + ИсключаемыеРеквизиты = Новый Массив; Если Не Пользовательский Тогда @@ -25,19 +32,24 @@ СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '""%1"" занято, необходимо указать другое наименование.'"), Наименование), , "Наименование"); - КонецЕсли; + КонецЕсли; + КонецПроцедуры Процедура ПередЗаписью(Отказ) + Если ДополнительныеСвойства.Свойство("ЗаполнениеПредопределенных") Тогда ПроверитьЗаполнениеПредопределенного(Отказ); КонецЕсли; + Если ОбменДанными.Загрузка Тогда Возврат; КонецЕсли; ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(ЭтотОбъект); + ДополнительныеСвойства.Вставить("ЭтоНовый", ЭтоНовый()); + ПользователемИзмененаПометкаУдаления = ( Не ЭтоНовый() И ПометкаУдаления <> Ссылка.ПометкаУдаления @@ -88,20 +100,110 @@ КонецЦикла; ЗаполнитьПоляДляПоиска(); + +КонецПроцедуры + +Процедура ПриЗаписи(Отказ) + + Если ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + + ПользователиВарианта = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ДополнительныеСвойства, "ПользователиВарианта"); + ЭтоНовый = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ДополнительныеСвойства, "ЭтоНовый", Ложь); + + РегистрыСведений.НастройкиВариантовОтчетов.ЗаписатьНастройкиДоступностиВариантаОтчета( + Ссылка, ЭтоНовый, ПользователиВарианта); + КонецПроцедуры #КонецОбласти #Область СлужебныеПроцедурыИФункции +Процедура ИнициализироватьОбъект(ДанныеЗаполнения) + + Если ТипЗнч(ДанныеЗаполнения) = Тип("Структура") Тогда + + ЗаполнитьЗначенияСвойств(ЭтотОбъект, ДанныеЗаполнения); + НастройкиВариантаОтчета = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ДанныеЗаполнения, "Настройки"); + + Если ТипЗнч(НастройкиВариантаОтчета) = Тип("НастройкиКомпоновкиДанных") Тогда + + Настройки = Новый ХранилищеЗначения(НастройкиВариантаОтчета); + + КонецЕсли; + + #Область УстановкаТипаОтчета + + Если ТипЗнч(Отчет) = Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных") Тогда + + ТипОтчета = Перечисления.ТипыОтчетов.Внутренний; + + ИначеЕсли ТипЗнч(Отчет) = Тип("СправочникСсылка.ИдентификаторыОбъектовРасширений") Тогда + + ТипОтчета = Перечисления.ТипыОтчетов.Расширение; + + ИначеЕсли ТипЗнч(Отчет) = Тип("СправочникСсылка.ДополнительныеОтчетыИОбработки") Тогда + + ТипОтчета = Перечисления.ТипыОтчетов.Дополнительный; + + ИначеЕсли ТипЗнч(Отчет) = Тип("Строка") Тогда + + ТипОтчета = Перечисления.ТипыОтчетов.Внешний; + + КонецЕсли; + + #КонецОбласти + + #Область УстановкаДанныхВЗависимостиОтЗначенияАвтора + + Если ЗначениеЗаполнено(Автор) Тогда + + Пользовательский = ЗначениеЗаполнено(Автор); + + ПользователиВарианта = Новый СписокЗначений; + ПользователиВарианта.Добавить(Автор); + + ДополнительныеСвойства.Вставить("ПользователиВарианта", ПользователиВарианта); + + КонецЕсли; + + #КонецОбласти + + #Область УстановкаРодителя + + Основание = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ДанныеЗаполнения, "Основание"); + + Если ТипЗнч(Основание) = ТипЗнч(Ссылка) Тогда + + СвойстваОснования = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Основание, "Родитель, Отчет, Пользовательский"); + + Если СвойстваОснования.Отчет = Отчет Тогда + Родитель = ?(СвойстваОснования.Пользовательский, СвойстваОснования.Родитель, Основание); + КонецЕсли; + + КонецЕсли; + + Если Не ЗначениеЗаполнено(Родитель) Тогда + ЗаполнитьРодителя(); + КонецЕсли; + + #КонецОбласти + + КонецЕсли; + +КонецПроцедуры + Процедура ПриЧтенииПредставленийНаСервере() Экспорт - ЛокализацияСервер.ПриЧтенииПредставленийНаСервере(ЭтотОбъект); + МультиязычностьСервер.ПриЧтенииПредставленийНаСервере(ЭтотОбъект); -КонецПроцедуры +КонецПроцедуры // Заполнение реквизитов НаименованияПолей и НаименованияПараметровИОтборов. Процедура ЗаполнитьПоляДляПоиска() + Дополнительный = (ТипОтчета = Перечисления.ТипыОтчетов.Дополнительный); Если Не Пользовательский И Не Дополнительный Тогда Возврат; @@ -118,48 +220,66 @@ ТекстОшибки = ТекстОшибки + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); ВариантыОтчетов.ЗаписатьВЖурнал(УровеньЖурналаРегистрации.Ошибка, ТекстОшибки, Ссылка); КонецПопытки; + КонецПроцедуры // Заполняет родителя варианта отчета, основываясь на ссылке отчета и предопределенных настройках. Процедура ЗаполнитьРодителя() Экспорт - ТекстЗапроса = + + Запрос = Новый Запрос( "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1 - | Предопределенные.Ссылка КАК ПредопределенныйВариант - |ПОМЕСТИТЬ втПредопределенные + | ПредопределенныеВарианты.Ссылка, + | ПредопределенныеВарианты.Включен + |ПОМЕСТИТЬ ПредопределенныеВарианты |ИЗ - | Справочник.ПредопределенныеВариантыОтчетов КАК Предопределенные + | Справочник.ПредопределенныеВариантыОтчетов КАК ПредопределенныеВарианты |ГДЕ - | Предопределенные.Отчет = &Отчет - | И Предопределенные.ПометкаУдаления = ЛОЖЬ - | И Предопределенные.ГруппироватьПоОтчету + | ТИПЗНАЧЕНИЯ(&Отчет) <> ТИП(Справочник.ИдентификаторыОбъектовРасширений) + | И ПредопределенныеВарианты.Отчет = &Отчет + | И НЕ ПредопределенныеВарианты.ПометкаУдаления + | И ПредопределенныеВарианты.ГруппироватьПоОтчету + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ ПЕРВЫЕ 1 + | ПредопределенныеВарианты.Ссылка, + | ПредопределенныеВарианты.Включен + |ИЗ + | Справочник.ПредопределенныеВариантыОтчетовРасширений КАК ПредопределенныеВарианты + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПредопределенныеВариантыОтчетовВерсийРасширений КАК ДоступныеВарианты + | ПО ДоступныеВарианты.Вариант = ПредопределенныеВарианты.Ссылка + |ГДЕ + | ТИПЗНАЧЕНИЯ(&Отчет) = ТИП(Справочник.ИдентификаторыОбъектовРасширений) + | И ПредопределенныеВарианты.Отчет = &Отчет + | И ПредопределенныеВарианты.ГруппироватьПоОтчету + | И НЕ ДоступныеВарианты.Вариант ЕСТЬ NULL | |УПОРЯДОЧИТЬ ПО - | Предопределенные.Включен УБЫВ + | ПредопределенныеВарианты.Включен УБЫВ |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1 | ВариантыОтчетов.Ссылка |ИЗ - | втПредопределенные КАК втПредопределенные - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ВариантыОтчетов КАК ВариантыОтчетов - | ПО втПредопределенные.ПредопределенныйВариант = ВариантыОтчетов.ПредопределенныйВариант + | ПредопределенныеВарианты КАК ПредопределенныеВарианты + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ВариантыОтчетов КАК ВариантыОтчетов + | ПО ПредопределенныеВарианты.Ссылка = ВариантыОтчетов.ПредопределенныйВариант |ГДЕ - | ВариантыОтчетов.ПометкаУдаления = ЛОЖЬ"; - Если ТипОтчета = Перечисления.ТипыОтчетов.Расширение Тогда - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, ".ПредопределенныеВариантыОтчетов", ".ПредопределенныеВариантыОтчетовРасширений"); - КонецЕсли; - Запрос = Новый Запрос; + | НЕ ВариантыОтчетов.ПометкаУдаления"); + Запрос.УстановитьПараметр("Отчет", Отчет); - Запрос.Текст = ТекстЗапроса; + Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Следующий() Тогда Родитель = Выборка.Ссылка; КонецЕсли; + КонецПроцедуры // Базовые проверки корректности данных предопределенных вариантов отчетов. Процедура ПроверитьЗаполнениеПредопределенного(Отказ) + Если ПометкаУдаления Или Не Предопределенный Тогда Возврат; ИначеЕсли Не ЗначениеЗаполнено(Отчет) Тогда @@ -175,11 +295,15 @@ Иначе Возврат; КонецЕсли; + ВызватьИсключение ТекстОшибки; + КонецПроцедуры Функция НеЗаполненоПоле(ИмяПоля) + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не заполнено поле ""%1""'"), ИмяПоля); + КонецФункции #КонецОбласти diff --git a/SSL/src/Catalogs/ВариантыОтчетов/ВариантыОтчетов.mdo b/SSL/src/Catalogs/ВариантыОтчетов/ВариантыОтчетов.mdo index b9929f424..fdaeda2de 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/ВариантыОтчетов.mdo +++ b/SSL/src/Catalogs/ВариантыОтчетов/ВариантыОтчетов.mdo @@ -348,6 +348,7 @@ ru Отчет + АПК:1329 - в таблице предполагается мало записей (в ERP ~ 1200) - оптимизация не требуется CatalogRef.ИдентификаторыОбъектовРасширений String @@ -359,7 +360,7 @@ ru - Ссылка отчета или его полное имя. + Ссылка отчета или полное имя внешнего отчета. diff --git a/SSL/src/Catalogs/ВерсииРасширений/ManagerModule.bsl b/SSL/src/Catalogs/ВерсииРасширений/ManagerModule.bsl index f707b4c91..b57e7f2a8 100644 --- a/SSL/src/Catalogs/ВерсииРасширений/ManagerModule.bsl +++ b/SSL/src/Catalogs/ВерсииРасширений/ManagerModule.bsl @@ -117,6 +117,10 @@ Процедура ЗарегистрироватьИспользованиеВерсииРасширений() Экспорт Если Не ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступомСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступомСлужебный"); + МодульУправлениеДоступомСлужебный.ПриРегистрацииИспользованияВерсииРасширенийВНеразделенномСеансе(); + КонецЕсли; Возврат; КонецЕсли; @@ -689,9 +693,10 @@ Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Следующий() И Выборка.Количество() = 1 Тогда Объект = Выборка.Ссылка.ПолучитьОбъект(); - // АПК:143-выкл - требуется ТекущаяДата(), так как именно она устанавливается в поле НачалоСеанса. + // АПК:143-выкл - №643.2.1 Требуется ТекущаяДата сервера, а не ТекущаяДатаСеанса, + // так как именно ТекущаяДата устанавливается в поле НачалоСеанса. Объект.ПоследняяДатаДобавленияВторойВерсии = ТекущаяДата(); - // АПК:143-вкл + // АПК:143-вкл. Объект.ОбменДанными.Загрузка = Истина; Объект.Записать(); ВключитьЗаданиеУдалениеУстаревшихПараметровРаботыВерсийРасширений(Истина); @@ -754,11 +759,27 @@ Если Выгрузка.Количество() = 1 И Не ЗначениеЗаполнено(Выгрузка[0].ДатаПервогоВходаПослеУдаленияВсехРасширений) Тогда - Объект = Выгрузка[0].Ссылка.ПолучитьОбъект(); - // АПК:143-выкл - требуется ТекущаяДата(), так как именно она устанавливается в поле НачалоСеанса. - Объект.ДатаПервогоВходаПослеУдаленияВсехРасширений = ТекущаяДата(); - // АПК:143-вкл - Объект.Записать(); + ВерсияРасширенийСсылка = Выгрузка[0].Ссылка; + НачатьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Справочник.ВерсииРасширений"); + ЭлементБлокировки.УстановитьЗначение("Ссылка", ВерсияРасширенийСсылка); + Блокировка.Заблокировать(); + + Объект = ВерсияРасширенийСсылка.ПолучитьОбъект(); + Если Не ЗначениеЗаполнено(Объект.ДатаПервогоВходаПослеУдаленияВсехРасширений) Тогда + // АПК:143-выкл. См. 643.2.1. Требуется ТекущаяДата сервера, а не ТекущаяДатаСеанса, + // так как именно ТекущаяДата устанавливается в поле НачалоСеанса. + Объект.ДатаПервогоВходаПослеУдаленияВсехРасширений = ТекущаяДата(); + // АПК:143-вкл. + Объект.Записать(); + КонецЕсли; + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; КонецЕсли; КонецПроцедуры diff --git a/SSL/src/Catalogs/ВерсииФайлов/Forms/ВерсииФайла/Module.bsl b/SSL/src/Catalogs/ВерсииФайлов/Forms/ВерсииФайла/Module.bsl index 0b962ba9c..b02ed867d 100644 --- a/SSL/src/Catalogs/ВерсииФайлов/Forms/ВерсииФайла/Module.bsl +++ b/SSL/src/Catalogs/ВерсииФайлов/Forms/ВерсииФайла/Module.bsl @@ -145,7 +145,7 @@ ЧислоВыделенныхСтрок = Элементы.Список.ВыделенныеСтроки.Количество(); Если ЧислоВыделенныхСтрок <> 2 И ЧислоВыделенныхСтрок <> 1 Тогда - ПоказатьПредупреждение(, НСтр("ru='Для просмотра отличий необходимо выбрать две версии файла.'")); + ПоказатьПредупреждение(, НСтр("ru = 'Для просмотра отличий необходимо выбрать две версии файла.'")); Возврат; КонецЕсли; diff --git a/SSL/src/Catalogs/ВерсииФайлов/ObjectModule.bsl b/SSL/src/Catalogs/ВерсииФайлов/ObjectModule.bsl index 944291607..a7590e1df 100644 --- a/SSL/src/Catalogs/ВерсииФайлов/ObjectModule.bsl +++ b/SSL/src/Catalogs/ВерсииФайлов/ObjectModule.bsl @@ -91,28 +91,13 @@ Процедура ПередУдалением(Отказ) Если ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда - Если НЕ Том.Пустая() И ОбщегоНазначения.СсылкаСуществует(Том) Тогда - ПолныйПуть = РаботаСФайламиСлужебный.ПолныйПутьТома(Том) + ПутьКФайлу; - Попытка - Файл = Новый Файл(ПолныйПуть); - Файл.УстановитьТолькоЧтение(Ложь); - УдалитьФайлы(ПолныйПуть); - - ПутьСПодкаталогом = Файл.Путь; - МассивФайловВКаталоге = НайтиФайлы(ПутьСПодкаталогом, ПолучитьМаскуВсеФайлы()); - Если МассивФайловВКаталоге.Количество() = 0 Тогда - УдалитьФайлы(ПутьСПодкаталогом); - КонецЕсли; - - Исключение - - ЗаписьЖурналаРегистрации(НСтр("ru = 'Файлы.Ошибка удаления файла.'", - ОбщегоНазначения.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка,, - Файл, ОписаниеОшибки()); - - КонецПопытки; - КонецЕсли; + + СвойстваФайла = РаботаСФайламиВТомахСлужебный.СвойстваФайлаВТоме(); + ЗаполнитьЗначенияСвойств(СвойстваФайла, ЭтотОбъект); + + РаботаСФайламиВТомахСлужебный.УдалитьФайл( + РаботаСФайламиВТомахСлужебный.ПолноеИмяФайлаВТоме(СвойстваФайла)); + КонецЕсли; // Проверку ОбменДанными.Загрузка следует выполнять начиная с этой строки. diff --git a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаСписка/Form.form index 16007c563..1f3230b7e 100644 --- a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаСписка/Form.form @@ -362,20 +362,12 @@ КОНЕЦ КОНЕЦ КАК ИндексПиктограммы, СправочникВидыКонтактнойИнформации.Ссылка, - СправочникВидыКонтактнойИнформации.ПометкаУдаления, - СправочникВидыКонтактнойИнформации.Предопределенный, - СправочникВидыКонтактнойИнформации.Родитель, - СправочникВидыКонтактнойИнформации.ЭтоГруппа, ВЫБОР КОГДА &ЭтоОсновнойЯзык ТОГДА СправочникВидыКонтактнойИнформации.Наименование ИНАЧЕ ВЫРАЗИТЬ(ЕСТЬNULL(ВидыКонтактнойИнформацииПредставления.Наименование, СправочникВидыКонтактнойИнформации.Наименование) КАК СТРОКА(150)) КОНЕЦ КАК Наименование, - СправочникВидыКонтактнойИнформации.Тип, СправочникВидыКонтактнойИнформации.РеквизитДопУпорядочивания, - СправочникВидыКонтактнойИнформации.РедактированиеТолькоВДиалоге, - СправочникВидыКонтактнойИнформации.МожноИзменятьСпособРедактирования, - СправочникВидыКонтактнойИнформации.ТолькоНациональныйАдрес, СправочникВидыКонтактнойИнформации.Используется ИЗ Справочник.ВидыКонтактнойИнформации КАК СправочникВидыКонтактнойИнформации diff --git a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаСписка/Module.bsl index 34b20adaa..71ed0f259 100644 --- a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаСписка/Module.bsl @@ -33,7 +33,7 @@ Если Копирование И Группа Тогда Отказ = Истина; - ПоказатьПредупреждение(, НСтр("ru='Добавление новых групп в справочнике запрещено.'")); + ПоказатьПредупреждение(, НСтр("ru = 'Добавление новых групп в справочнике запрещено.'")); КонецЕсли; КонецПроцедуры @@ -45,12 +45,17 @@ // СтандартныеПодсистемы.ПодключаемыеКоманды &НаКлиенте Процедура Подключаемый_ВыполнитьКоманду(Команда) - ПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Элементы.Список); + ПодключаемыеКомандыКлиент.НачатьВыполнениеКоманды(ЭтотОбъект, Команда, Элементы.Список); +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ПродолжитьВыполнениеКомандыНаСервере(ПараметрыВыполнения, ДополнительныеПараметры) Экспорт + ВыполнитьКомандуНаСервере(ПараметрыВыполнения); КонецПроцедуры &НаСервере -Процедура Подключаемый_ВыполнитьКомандуНаСервере(Контекст, Результат) Экспорт - ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, Контекст, Элементы.Список, Результат); +Процедура ВыполнитьКомандуНаСервере(ПараметрыВыполнения) + ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, ПараметрыВыполнения, Элементы.Список); КонецПроцедуры &НаКлиенте diff --git a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаЭлемента/Form.form index 72bc60b51..4a9653d91 100644 --- a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаЭлемента/Form.form @@ -121,10 +121,6 @@ Left true - - Opening - НаименованиеОткрытие - true true true @@ -246,24 +242,27 @@
    - РедактированиеТолькоВДиалоге - 9 + ВидРедактирования + 168 + + <key>ru</key> + <value>Редактировать</value> + true true true - Объект.РедактированиеТолькоВДиалоге + Объект.ВидРедактирования - Right OnChange - РедактированиеТолькоВДиалогеПриИзменении + ВидРедактированияПриИзменении - РедактированиеТолькоВДиалогеExtendedTooltip - 93 + ВидРедактированияРасширеннаяПодсказка + 170 Label true true @@ -272,16 +271,51 @@ - РедактированиеТолькоВДиалогеКонтекстноеМеню - 10 + ВидРедактированияКонтекстноеМеню + 169 true - CheckBoxField + InputField Enter true Left true - + + 15 + true + true + true + true + true + + + ru + В диалоге + + + Диалог + + + + + ru + В поле ввода + + + ПолеВвода + + + + + ru + В диалоге и поле ввода + + + ПолеВводаИДиалог + + + Normal + ГруппаХранитьИсториюИзменений diff --git a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаЭлемента/Module.bsl index 93bfab4bf..d4b095321 100644 --- a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаЭлемента/Module.bsl @@ -28,12 +28,16 @@ КонецЕсли; КонецЕсли; + Если Объект.Ссылка.Пустая() Тогда + Объект.ВидРедактирования = "ПолеВводаИДиалог"; + КонецЕсли; + СсылкаРодителя = Объект.Родитель; - Элементы.ХранитьИсториюИзменений.Доступность = Объект.РедактированиеТолькоВДиалоге; + Элементы.ХранитьИсториюИзменений.Доступность = Объект.ВидРедактирования = "Диалог"; Элементы.РазрешитьВводНесколькихЗначений.Доступность = НЕ Объект.ХранитьИсториюИзменений; Если Не Объект.МожноИзменятьСпособРедактирования Тогда - Элементы.РедактированиеТолькоВДиалоге.Доступность = Ложь; + Элементы.ВидРедактирования.Доступность = Ложь; Элементы.РазрешитьВводНесколькихЗначений.Доступность = Ложь; Элементы.ГруппаНаименованиеНастройкиПоТипам.Доступность = Ложь; Элементы.ХранитьИсториюИзменений.Доступность = Ложь; @@ -72,7 +76,7 @@ ДоступныДополнительныеНастройкиАдреса = (Метаданные.Обработки.Найти("РасширенныйВводКонтактнойИнформации") <> Неопределено И Метаданные.Обработки["РасширенныйВводКонтактнойИнформации"].Формы.Найти("НастройкиАдреса") <> Неопределено); - ЛокализацияСервер.ПриСозданииНаСервере(Элементы.Наименование); + МультиязычностьСервер.ПриСозданииНаСервере(ЭтотОбъект, Объект); КонецПроцедуры @@ -84,7 +88,7 @@ &НаСервере Процедура ПриЧтенииНаСервере(ТекущийОбъект) - ЛокализацияСервер.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); + МультиязычностьСервер.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); КонецПроцедуры @@ -95,7 +99,7 @@ Отказ = Истина; КонецЕсли; - ЛокализацияСервер.ПередЗаписьюНаСервере(ТекущийОбъект); + МультиязычностьСервер.ПередЗаписьюНаСервере(ТекущийОбъект); КонецПроцедуры @@ -110,7 +114,7 @@ КонецЕсли; КонецЕсли; - ЛокализацияСервер.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); + МультиязычностьСервер.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); КонецПроцедуры @@ -141,9 +145,9 @@ КонецПроцедуры &НаКлиенте -Процедура РедактированиеТолькоВДиалогеПриИзменении(Элемент) +Процедура ВидРедактированияПриИзменении(Элемент) - Если Объект.РедактированиеТолькоВДиалоге Тогда + Если Объект.ВидРедактирования = "Диалог" Тогда Элементы.ХранитьИсториюИзменений.Доступность = Истина; Иначе Элементы.ХранитьИсториюИзменений.Доступность = Ложь; @@ -187,10 +191,8 @@ КонецПроцедуры &НаКлиенте -Процедура НаименованиеОткрытие(Элемент, СтандартнаяОбработка) - - ЛокализацияКлиент.ПриОткрытии(Объект, Элемент, "Наименование", СтандартнаяОбработка); - +Процедура Подключаемый_Открытие(Элемент, СтандартнаяОбработка) + МультиязычностьКлиент.ПриОткрытии(ЭтотОбъект, Объект, Элемент, СтандартнаяОбработка); КонецПроцедуры #КонецОбласти @@ -228,32 +230,35 @@ Если Объект.Тип = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Адрес") Тогда Элементы.Проверки.ТекущаяСтраница = Элементы.Проверки.ПодчиненныеЭлементы.Адрес; - Элементы.РедактированиеТолькоВДиалоге.Доступность = Объект.МожноИзменятьСпособРедактирования; + Элементы.ВидРедактирования.Доступность = Объект.МожноИзменятьСпособРедактирования; Элементы.ДополнительныеНастройкиАдреса.Видимость = ДоступныДополнительныеНастройкиАдреса; Элементы.ДополнительныеНастройкиАдреса.Доступность = Не Объект.МеждународныйФорматАдреса; + Элементы.ВидРедактирования.Видимость = Истина; Иначе Элементы.ДополнительныеНастройкиАдреса.Видимость = Ложь; Если Объект.Тип = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты") Тогда Элементы.Проверки.ТекущаяСтраница = Элементы.Проверки.ПодчиненныеЭлементы.АдресЭлектроннойПочты; - Элементы.РедактированиеТолькоВДиалоге.Доступность = Ложь; + Элементы.ВидРедактирования.Видимость = Ложь; ИначеЕсли Объект.Тип = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Skype") Тогда Элементы.Проверки.ТекущаяСтраница = Элементы.Проверки.ПодчиненныеЭлементы.Skype; - Элементы.РедактированиеТолькоВДиалоге.Доступность = Ложь; + Элементы.ВидРедактирования.Видимость = Ложь; Элементы.РазрешитьВводНесколькихЗначений.Доступность = Истина; ИначеЕсли Объект.Тип = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Телефон") Или Объект.Тип = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Факс") Тогда Элементы.Проверки.ТекущаяСтраница = Элементы.Проверки.ПодчиненныеЭлементы.Телефон; - Элементы.РедактированиеТолькоВДиалоге.Доступность = Объект.МожноИзменятьСпособРедактирования; + Элементы.ВидРедактирования.Доступность = Объект.МожноИзменятьСпособРедактирования; + Элементы.ВидРедактирования.Видимость = Истина; ИначеЕсли Объект.Тип = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Другое") Тогда Элементы.Проверки.ТекущаяСтраница = Элементы.Проверки.ПодчиненныеЭлементы.Другое; - Элементы.РедактированиеТолькоВДиалоге.Доступность = Ложь; + Элементы.ВидРедактирования.Доступность = Ложь; + Элементы.ВидРедактирования.Видимость = Ложь; ИначеЕсли Объект.Тип = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.ВебСтраница") Тогда Элементы.Проверки.ТекущаяСтраница = Элементы.Проверки.ПодчиненныеЭлементы.Прочие; - Элементы.РедактированиеТолькоВДиалоге.Видимость = Ложь; + Элементы.ВидРедактирования.Видимость = Ложь; Элементы.ГруппаХранитьИсториюИзменений.Видимость = Ложь; Иначе Элементы.Проверки.ТекущаяСтраница = Элементы.Проверки.ПодчиненныеЭлементы.Прочие; - Элементы.РедактированиеТолькоВДиалоге.Доступность = Ложь; + Элементы.ВидРедактирования.Доступность = Ложь; КонецЕсли; КонецЕсли; @@ -270,12 +275,12 @@ Элементы.ХранитьИсториюИзменений.Доступность = Ложь; Если Объект.Тип = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты") Тогда - Объект.РедактированиеТолькоВДиалоге = Ложь; + Объект.ВидРедактирования = "ПолеВвода"; ИначеЕсли Объект.Тип = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Телефон") Или Объект.Тип = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Факс") Тогда // Нет изменений Иначе - Объект.РедактированиеТолькоВДиалоге = Ложь; + Объект.ВидРедактирования = "ПолеВводаИДиалог"; КонецЕсли; КонецЕсли; diff --git a/SSL/src/Catalogs/ВидыКонтактнойИнформации/ManagerModule.bsl b/SSL/src/Catalogs/ВидыКонтактнойИнформации/ManagerModule.bsl index 3670e11b6..7c59e8f4f 100644 --- a/SSL/src/Catalogs/ВидыКонтактнойИнформации/ManagerModule.bsl +++ b/SSL/src/Catalogs/ВидыКонтактнойИнформации/ManagerModule.bsl @@ -45,6 +45,123 @@ // Конец СтандартныеПодсистемы.ЗапретРедактированияРеквизитовОбъектов +// СтандартныеПодсистемы.ПоискИУдалениеДублей + +// Анализирует пары ссылок справочника на возможность замены одной на другую +// во всех местах использования с прикладной точки зрения. +// Проверки на запрет замены групп и ссылок разных типов производятся автоматически при начале замены. +// +// Параметры: +// ПарыЗамен - Соответствие - Ключ - что будет заменено, значение - на что будет заменено. +// Параметры - Структура - Набор флагов, описывающих действие с заменяемыми элементами. +// Содержит необязательные реквизиты: +// * СпособУдаления - Строка, может принимать значения: +// "Непосредственно" - Если после замены ссылка нигде не используется, +// то она будет удалена непосредственно +// "Пометка" - Если после замены ссылка не используется, то +// она будет помечена на удаление. +// Любые другие значения говорят о том, что заменяемая ссылка не будет изменена. +// +// Возвращаемое значение: +// Соответствие - Ключ - исходная ссылка, значение - строка - описание, почему замена недопустима. +// Если все замены допустимы, то возвращается пустое соответствие; +// +Функция ВозможностьЗаменыЭлементов(Знач ПарыЗамен, Знач Параметры = Неопределено) Экспорт + + Результат = Новый Соответствие; + Для Каждого КлючЗначение Из ПарыЗамен Цикл + ТекущаяСсылка = КлючЗначение.Ключ; + ЦелеваяСсылка = КлючЗначение.Значение; + + Если ТекущаяСсылка = ЦелеваяСсылка Тогда + Продолжить; + КонецЕсли; + + // Разрешаем заменять вид контактной информации на другой, только если они относятся к одной группе. + МожноЗаменять = ТекущаяСсылка.Родитель = ЦелеваяСсылка.Родитель; + Если Не МожноЗаменять Тогда + Ошибка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Элемент ""%1"" относится к ""%2"", а ""%3"" - к ""%4""'"), + ТекущаяСсылка, ТекущаяСсылка.Родитель, ЦелеваяСсылка, ЦелеваяСсылка.Родитель); + Результат.Вставить(ТекущаяСсылка, Ошибка); + КонецЕсли; + + КонецЦикла; + + Возврат Результат; +КонецФункции + +// Вызывается для определения прикладных параметров поиска дублей. +// +// Параметры: +// +// ПараметрыПоиска - Структура - Предлагаемые параметры поиска. Содержит поля: +// +// * ПравилаПоиска - ТаблицаЗначений - Предлагаемые правила сравнения для объектов. +// Может быть изменена для установки новых вариантов. Содержит колонки. +// ** Реквизит - Строка - Имя реквизита для сравнения. +// ** Правило - Строка - Правило сравнения: "Равно" - сравнение по равенству, "Подобно" -подобие строк, +// "" - пустая строка - не сравнивать. +// +// * КомпоновщикОтбора - КомпоновщикНастроекКомпоновкиДанных - Инициализированный компоновщик для +// предварительного отбора. Может быть изменен, например, для +// усиления отборов. +// +// * ОграниченияСравнения - Массив - Предназначен для заполнения описания прикладных правил-ограничений. +// Должен быть дополнен структурами с полями: +// ** Представление - Строка - Описание правила-ограничения для пользователя. +// ** ДополнительныеПоля - Строка - Список дополнительных реквизитов запятую, необходимых для +// дополнительного анализа. +// +// * КоличествоЭлементовДляСравнения - Число - Количество кандидатов в дубли, передаваемых одним вызовом +// обработчику. +// +// ДополнительныеПараметры - Произвольный - Значение, переданное при вызове программного интерфейса +// ОбщегоНазначения.НайтиДублиЭлементов. +// При вызове пользователем из обработки "ПоискИЗаменаДублей" равно Неопределено. +// +Процедура ПараметрыПоискаДублей(ПараметрыПоиска, ДополнительныеПараметры = Неопределено) Экспорт + + Ограничение = Новый Структура; + Ограничение.Вставить("Представление", НСтр("ru = 'Относятся к одной группе и одного типа (адрес, телефон и пр.).'")); + Ограничение.Вставить("ДополнительныеПоля", "Родитель, Тип"); + ПараметрыПоиска.ОграниченияСравнения.Добавить(Ограничение); + + // Размер таблицы для передачи в обработчик. + ПараметрыПоиска.КоличествоЭлементовДляСравнения = 100; + +КонецПроцедуры + +// Вызывается для определения дублей по прикладным правилам. +// +// Параметры: +// +// ТаблицаКандидатов - ТаблицаЗначений - Описывает кандидатов в дубли. Содержит колонки: +// - Ссылка1 - ЛюбаяСсылка - Ссылка на элемент первого кандидата. +// - Ссылка2 - ЛюбаяСсылка - Ссылка на элемент второго кандидата. +// - ЭтоДубли - Булево - Флаг того, что кандидаты действительно являются дублями. По умолчанию содержит +// значение Ложь, может быть изменено на Истина, если кандидаты - действительно +// дубли. +// - Поля1 - Структура - Содержит поля Код, Наименование и дополнительные поля первого кандидата, +// указанные в ПараметрыПоискаДублей. +// - Поля2 - Структура - Содержит поля Код, Наименование и дополнительные поля второго кандидата, +// указанные в ПараметрыПоискаДублей. +// +// ДополнительныеПараметры - Произвольный - Значение, переданное при вызове программного интерфейса +// ОбщегоНазначения.НайтиДублиЭлементов. +// При вызове пользователем из обработки "ПоискИЗаменаДублей" равно Неопределено. +// +Процедура ПриПоискеДублей(ТаблицаКандидатов, ДополнительныеПараметры = Неопределено) Экспорт + + Для Каждого Вариант Из ТаблицаКандидатов Цикл + Если Вариант.Поля1.Родитель = Вариант.Поля2.Родитель И Вариант.Поля1.Тип = Вариант.Поля2.Тип Тогда + Вариант.ЭтоДубли = Истина; + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +// Конец СтандартныеПодсистемы.ПоискИУдалениеДублей + #КонецОбласти #КонецОбласти @@ -54,7 +171,87 @@ #Область ОбработчикиСобытий Процедура ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка) - ЛокализацияКлиентСервер.ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка); + МультиязычностьКлиентСервер.ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка); КонецПроцедуры -#КонецОбласти \ No newline at end of file +#КонецОбласти + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область СлужебныеПроцедурыИФункции + +// Регистрирует к обработке виды контактной информации другое у которых необходимо заполнить поле ВидРедактирования. +// +Процедура ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию(Параметры) Экспорт + + Запрос = Новый Запрос; + Запрос.Текст = "ВЫБРАТЬ + | ВидыКонтактнойИнформации.Ссылка КАК Ссылка + |ИЗ + | Справочник.ВидыКонтактнойИнформации КАК ВидыКонтактнойИнформации + |ГДЕ + | ВидыКонтактнойИнформации.ЭтоГруппа = ЛОЖЬ"; + + РезультатЗапроса = Запрос.Выполнить().Выгрузить(); + + ОбновлениеИнформационнойБазы.ОтметитьКОбработке(Параметры, + РезультатЗапроса.ВыгрузитьКолонку("Ссылка")); + +КонецПроцедуры + +Процедура ОбработатьДанныеДляПереходаНаНовуюВерсию(Параметры) Экспорт + + ВидКонтактнойИнформацииСсылка = ОбновлениеИнформационнойБазы.ВыбратьСсылкиДляОбработки(Параметры.Очередь, "Справочник.ВидыКонтактнойИнформации"); + + ПроблемныхОбъектов = 0; + ОбъектовОбработано = 0; + + Пока ВидКонтактнойИнформацииСсылка.Следующий() Цикл + Попытка + ВидКонтактнойИнформации = ВидКонтактнойИнформацииСсылка.Ссылка.ПолучитьОбъект(); + Если ВидКонтактнойИнформации.УдалитьРедактированиеТолькоВДиалоге Тогда + ВидКонтактнойИнформации.ВидРедактирования = "Диалог"; + ИначеЕсли ВидКонтактнойИнформации.Тип = Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты + Или ВидКонтактнойИнформации.Тип = Перечисления.ТипыКонтактнойИнформации.Skype + Или ВидКонтактнойИнформации.Тип = Перечисления.ТипыКонтактнойИнформации.Другое Тогда + ВидКонтактнойИнформации.ВидРедактирования = "ПолеВвода"; + ИначеЕсли ВидКонтактнойИнформации.Тип = Перечисления.ТипыКонтактнойИнформации.ВебСтраница Тогда + ВидКонтактнойИнформации.ВидРедактирования = "Диалог"; + Иначе + ВидКонтактнойИнформации.ВидРедактирования = "ПолеВводаИДиалог"; + КонецЕсли; + ОбновлениеИнформационнойБазы.ЗаписатьДанные(ВидКонтактнойИнформации); + ОбъектовОбработано = ОбъектовОбработано + 1; + + Исключение + // Если не удалось обработать какой-либо вид контактной информации, повторяем попытку снова. + ПроблемныхОбъектов = ПроблемныхОбъектов + 1; + + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось обработать вид контактной информации: %1 по причине: %2'"), + ВидКонтактнойИнформацииСсылка.Ссылка, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Предупреждение, + Метаданные.Справочники.ВидыКонтактнойИнформации, ВидКонтактнойИнформацииСсылка.Ссылка, ТекстСообщения); + КонецПопытки; + КонецЦикла; + + Параметры.ОбработкаЗавершена = ОбновлениеИнформационнойБазы.ОбработкаДанныхЗавершена(Параметры.Очередь, "Справочник.ВидыКонтактнойИнформации"); + + Если ОбъектовОбработано = 0 И ПроблемныхОбъектов <> 0 Тогда + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Процедуре ЗаполнитьВидыКонтактнойИнформации не удалось обработать некоторые виды контактной информации (пропущены): %1'"), + ПроблемныхОбъектов); + ВызватьИсключение ТекстСообщения; + Иначе + ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Информация, + Метаданные.Справочники.ВидыКонтактнойИнформации,, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Процедура ЗаполнитьВидыКонтактнойИнформации обработала очередную порцию видов контактной информации: %1'"), + ОбъектовОбработано)); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/ВидыКонтактнойИнформации/ObjectModule.bsl b/SSL/src/Catalogs/ВидыКонтактнойИнформации/ObjectModule.bsl index 50de4eb46..dee9a66a4 100644 --- a/SSL/src/Catalogs/ВидыКонтактнойИнформации/ObjectModule.bsl +++ b/SSL/src/Catalogs/ВидыКонтактнойИнформации/ObjectModule.bsl @@ -16,6 +16,10 @@ Возврат; КонецЕсли; + Если СтрНачинаетсяС(ИмяПредопределенныхДанных, "Удалить") Тогда + Возврат; + КонецЕсли; + Если НЕ ЭтоГруппа Тогда Результат = УправлениеКонтактнойИнформациейСлужебный.ПроверитьПараметрыВидаКонтактнойИнформации(ЭтотОбъект); Если Результат.ЕстьОшибки Тогда @@ -32,23 +36,32 @@ Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты) + Если СтрНачинаетсяС(ИмяПредопределенныхДанных, "Удалить") Тогда + ПроверяемыеРеквизиты.Очистить(); + Возврат; + КонецЕсли; + Если ЭтоГруппа Тогда НепроверяемыеРеквизиты = Новый Массив; НепроверяемыеРеквизиты.Добавить("Родитель"); ОбщегоНазначения.УдалитьНепроверяемыеРеквизитыИзМассива(ПроверяемыеРеквизиты, НепроверяемыеРеквизиты); - + КонецЕсли; КонецПроцедуры +Процедура ПриКопировании(ОбъектКопирования) + ИмяПредопределенногоВида = ""; +КонецПроцедуры + #КонецОбласти -#Область ОбработчикиСобытий +#Область СлужебныеПроцедурыИФункции Процедура ПриЧтенииПредставленийНаСервере() Экспорт - ЛокализацияСервер.ПриЧтенииПредставленийНаСервере(ЭтотОбъект); + МультиязычностьСервер.ПриЧтенииПредставленийНаСервере(ЭтотОбъект); КонецПроцедуры diff --git a/SSL/src/Catalogs/ВидыКонтактнойИнформации/ВидыКонтактнойИнформации.mdo b/SSL/src/Catalogs/ВидыКонтактнойИнформации/ВидыКонтактнойИнформации.mdo index 4fa4c4ec6..f8fa4ac67 100644 --- a/SSL/src/Catalogs/ВидыКонтактнойИнформации/ВидыКонтактнойИнформации.mdo +++ b/SSL/src/Catalogs/ВидыКонтактнойИнформации/ВидыКонтактнойИнформации.mdo @@ -185,6 +185,29 @@ Use Use + + ВидРедактирования + + ru + Вид редактирования + + + String + + 20 + + + + ru + Редактировать контактную информацию в только в поле ввода или только в диалоге (ручной ввод информации невозможен). + + + + ShowError + + Use + Use + ВидПоляДругое @@ -368,10 +391,10 @@ Use - РедактированиеТолькоВДиалоге + УдалитьРедактированиеТолькоВДиалоге ru - Редактирование только в диалоге + (не используется) Редактирование только в диалоге Boolean diff --git a/SSL/src/Catalogs/ВидыПроверок/ВидыПроверок.mdo b/SSL/src/Catalogs/ВидыПроверок/ВидыПроверок.mdo index 0a69eff0d..548ef1c78 100644 --- a/SSL/src/Catalogs/ВидыПроверок/ВидыПроверок.mdo +++ b/SSL/src/Catalogs/ВидыПроверок/ВидыПроверок.mdo @@ -172,6 +172,7 @@ + Index Use Use @@ -203,6 +204,7 @@ + Index Use Use diff --git a/SSL/src/Catalogs/ВнешниеКомпоненты/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ВнешниеКомпоненты/Forms/ФормаЭлемента/Module.bsl index 19c0ff575..6bfc69ce5 100644 --- a/SSL/src/Catalogs/ВнешниеКомпоненты/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ВнешниеКомпоненты/Forms/ФормаЭлемента/Module.bsl @@ -227,7 +227,7 @@ Оповещение = Новый ОписаниеОповещения("ЗагрузитьКомпонентуПослеПомещенияФайла", ЭтотОбъект, Контекст); ПараметрыЗагрузки = ФайловаяСистемаКлиент.ПараметрыЗагрузкиФайла(); - ПараметрыЗагрузки.Диалог.Фильтр = НСтр("ru = 'Внешняя компонента (*.zip)|*.zip|Все файлы(*.*)|*.*'"); + ПараметрыЗагрузки.Диалог.Фильтр = НСтр("ru = 'Внешняя компонента (*.zip)|*.zip|Все файлы (*.*)|*.*'"); ПараметрыЗагрузки.Диалог.Заголовок = НСтр("ru = 'Выберите файл внешней компоненты'"); ПараметрыЗагрузки.ИдентификаторФормы = УникальныйИдентификатор; @@ -266,15 +266,11 @@ Иначе Оповещение = Новый ОписаниеОповещения("ЗагрузитьКомпонентуПослеОтображенияОшибки", ЭтотОбъект); - СтрокаСПредупреждением = Новый ФорматированнаяСтрока( - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = '%1 - |Необходимо указать zip-архив с внешней компонентой. - |Подробнее:'"), - ОписаниеОшибки), - Новый ФорматированнаяСтрока("https://its.1c.ru/db/metod8dev/content/3221",,,, - "https://its.1c.ru/db/metod8dev/content/3221"), "."); - + СтрокаСПредупреждением = НСтр("ru = '%1 + |Необходимо указать zip-архив с внешней компонентой. + |Подробнее см. Технология создания внешних компонент'"); + СтрокаСПредупреждением = СтроковыеФункцииКлиент.ФорматированнаяСтрока(СтрокаСПредупреждением, ОписаниеОшибки); + ПоказатьПредупреждение(Оповещение, СтрокаСПредупреждением); КонецЕсли; @@ -355,7 +351,7 @@ Если ОбъектСправочника.Идентификатор <> Информация.Реквизиты.Идентификатор Тогда Результат.ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru='Текущий идентификатор %1 отличается от загружаемого %2 + НСтр("ru = 'Текущий идентификатор %1 отличается от загружаемого %2 |Обновление невозможно.'"), ОбъектСправочника.Идентификатор, Информация.Реквизиты.Идентификатор); diff --git a/SSL/src/Catalogs/ВнешниеКомпоненты/ObjectModule.bsl b/SSL/src/Catalogs/ВнешниеКомпоненты/ObjectModule.bsl index c4d82ea9f..8188903d8 100644 --- a/SSL/src/Catalogs/ВнешниеКомпоненты/ObjectModule.bsl +++ b/SSL/src/Catalogs/ВнешниеКомпоненты/ObjectModule.bsl @@ -34,9 +34,9 @@ // Контроль уникальности идентификатора и версии компоненты. Если Не ЭтоУникальнаяКомпонента() Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Внешняя компонента со значениями Идентификатор ""%1"" и версия ""%2"" уже загружена в программу.'"), + НСтр("ru = 'Внешняя компонента с таким идентификатором ""%1"" и датой ""%2"" уже загружена в программу.'"), Идентификатор, - Версия); + ДатаВерсии); КонецЕсли; // Помещение двоичных данных компоненты @@ -110,6 +110,11 @@ Процедура ПерезаписатьКомпонентыМладшихВерсий() + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Справочник.ВнешниеКомпоненты"); + ЭлементБлокировки.УстановитьЗначение("Идентификатор", Идентификатор); + Блокировка.Заблокировать(); + Запрос = Новый Запрос; Запрос.УстановитьПараметр("Идентификатор", Идентификатор); Запрос.УстановитьПараметр("ДатаВерсии", ДатаВерсии); @@ -127,6 +132,7 @@ Выборка = Результат.Выбрать(); Пока Выборка.Следующий() Цикл Объект = Выборка.Ссылка.ПолучитьОбъект(); + Объект.Заблокировать(); Объект.Записать(); КонецЦикла; diff --git a/SSL/src/Catalogs/ВнешниеКомпоненты/ВнешниеКомпоненты.mdo b/SSL/src/Catalogs/ВнешниеКомпоненты/ВнешниеКомпоненты.mdo index c0bba8e59..32f5582f9 100644 --- a/SSL/src/Catalogs/ВнешниеКомпоненты/ВнешниеКомпоненты.mdo +++ b/SSL/src/Catalogs/ВнешниеКомпоненты/ВнешниеКомпоненты.mdo @@ -98,6 +98,7 @@ ru + Catalog.ВнешниеКомпоненты.Attribute.Идентификатор Managed Use diff --git a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Module.bsl index 9e1c64ad2..50ad0e90e 100644 --- a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Module.bsl @@ -356,21 +356,9 @@ Неопределено); Иначе ГруппаПомеченаНаУдаление = Элементы.ГруппыВнешнихПользователей.ДанныеСтроки(Строка).ПометкаУдаления; - КоличествоПользователей = ПараметрыПеретаскивания.Значение.Количество(); - ДействиеИсключитьПользователя = (ХранимыеПараметры.ГруппаВсеПользователи = Строка); - - ДействиеСПользователем = - ?((ХранимыеПараметры.ГруппаВсеПользователи = ТекущаяСтрокаГруппы) ИЛИ ГруппаСТипомВсеОбъектыАвторизации, - НСтр("ru = 'Включить'"), - ?(Перемещение, НСтр("ru = 'Переместить'"), НСтр("ru = 'Скопировать'"))); - - Если ГруппаПомеченаНаУдаление Тогда - ШаблонДействия = ?(Перемещение, НСтр("ru = 'Группа ""%1"" помечена на удаление. %2'"), - НСтр("ru = 'Группа ""%1"" помечена на удаление. %2'")); - ДействиеСПользователем = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонДействия, Строка(Строка), ДействиеСПользователем); - КонецЕсли; + ВключитьВГруппу = (ХранимыеПараметры.ГруппаВсеПользователи = ТекущаяСтрокаГруппы) ИЛИ ГруппаСТипомВсеОбъектыАвторизации; Если КоличествоПользователей = 1 Тогда Если ДействиеИсключитьПользователя Тогда @@ -380,15 +368,30 @@ Строка(Элементы.ГруппыВнешнихПользователей.ТекущаяСтрока)); ИначеЕсли Не ГруппаПомеченаНаУдаление Тогда + Если ВключитьВГруппу Тогда + Шаблон = НСтр("ru = 'Включить пользователя ""%1"" в группу ""%2""?'"); + ИначеЕсли Перемещение Тогда + Шаблон = НСтр("ru = 'Переместить пользователя ""%1"" в группу ""%2""?'"); + Иначе + Шаблон = НСтр("ru = 'Скопировать пользователя ""%1"" в группу ""%2""?'"); + КонецЕсли; + ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = '%1 пользователя ""%2"" в группу ""%3""?'"), - ДействиеСПользователем, + Шаблон, Строка(ПараметрыПеретаскивания.Значение[0]), Строка(Строка)); Иначе + Если ВключитьВГруппу Тогда + Шаблон = НСтр("ru = 'Группа ""%1"" помечена на удаление. Включить пользователя ""%2"" в эту группу?'"); + ИначеЕсли Перемещение Тогда + Шаблон = НСтр("ru = 'Группа ""%1"" помечена на удаление. Переместить пользователя ""%2"" в эту группу?'"); + Иначе + Шаблон = НСтр("ru = 'Группа ""%1"" помечена на удаление. Скопировать пользователя ""%2"" в эту группу?'"); + КонецЕсли; + ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = '%1 пользователя ""%2"" в эту группу?'"), - ДействиеСПользователем, + Шаблон, + Строка(Строка), Строка(ПараметрыПеретаскивания.Значение[0])); КонецЕсли; Иначе @@ -399,15 +402,30 @@ Строка(Элементы.ГруппыВнешнихПользователей.ТекущаяСтрока)); ИначеЕсли Не ГруппаПомеченаНаУдаление Тогда + Если ВключитьВГруппу Тогда + Шаблон = НСтр("ru = 'Включить пользователей (%1) в группу ""%2""?'"); + ИначеЕсли Перемещение Тогда + Шаблон = НСтр("ru = 'Переместить пользователей (%1) в группу ""%2""?'"); + Иначе + Шаблон = НСтр("ru = 'Скопировать пользователей (%1) в группу ""%2""?'"); + КонецЕсли; + ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = '%1 пользователей (%2) в группу ""%3""?'"), - ДействиеСПользователем, + Шаблон, КоличествоПользователей, Строка(Строка)); Иначе + Если ВключитьВГруппу Тогда + Шаблон = НСтр("ru = 'Группа ""%1"" помечена на удаление. Включить пользователей (%2) в эту группу?'"); + ИначеЕсли Перемещение Тогда + Шаблон = НСтр("ru = 'Группа ""%1"" помечена на удаление. Переместить пользователей (%2) в эту группу?'"); + Иначе + Шаблон = НСтр("ru = 'Группа ""%1"" помечена на удаление. Скопировать пользователей (%2) в эту группу?'"); + КонецЕсли; + ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = '%1 пользователей (%2) в эту группу?'"), - ДействиеСПользователем, + Шаблон, + Строка(Строка), КоличествоПользователей); КонецЕсли; КонецЕсли; diff --git a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Form.form index cbb0d0519..936228c91 100644 --- a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Form.form @@ -2746,6 +2746,19 @@ true + + ПользовательИБАутентификацияСтандартнаяЗначениеПрямогоИзменения + 3 + + Boolean + + + true + + + true + + ПоказатьТолькоВыбранныеРоли diff --git a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Module.bsl index fbd865a94..6494ae017 100644 --- a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Module.bsl @@ -65,7 +65,6 @@ Объект.ОбъектАвторизации = Параметры.ОбъектАвторизацииНовогоВнешнегоПользователя; ОбъектАвторизацииЗаданПриОткрытии = ЗначениеЗаполнено(Объект.ОбъектАвторизации); - ОбъектАвторизацииПриИзмененииНаКлиентеНаСервере(ЭтотОбъект, Объект); ИначеЕсли ЗначениеЗаполнено(ГруппаНовогоВнешнегоПользователя) Тогда @@ -112,7 +111,11 @@ ОбработатьИнтерфейсРолей("НастроитьИнтерфейсРолейПриСозданииФормы", Истина); НачальноеОписаниеПользователяИБ = НачальноеОписаниеПользователяИБ(); - ОбщаяНастройкаФормы(Объект, Истина); + НастроитьФорму(Объект, Истина); + + Если ОбъектАвторизацииЗаданПриОткрытии Тогда + ОбъектАвторизацииПриИзмененииНаКлиентеНаСервере(ЭтотОбъект, Объект); + КонецЕсли; Если ОбщегоНазначения.ЭтоАвтономноеРабочееМесто() Тогда Элементы.ГруппаШапка.ТолькоПросмотр = Истина; @@ -172,7 +175,7 @@ МодульУправлениеСвойствами.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); КонецЕсли; - ОбщаяНастройкаФормы(ТекущийОбъект); + НастроитьФорму(ТекущийОбъект); ТекущееПредставлениеОбъектаАвторизации = Строка(Объект.ОбъектАвторизации); @@ -201,7 +204,7 @@ КонецПроцедуры &НаСервере -Процедура ОбщаяНастройкаФормы(ТекущийОбъект, ПриСозданииНаСервере = Ложь, ПараметрыЗаписи = Неопределено) +Процедура НастроитьФорму(ТекущийОбъект, ПриСозданииНаСервере = Ложь, ПараметрыЗаписи = Неопределено) Если НачальноеОписаниеПользователяИБ = Неопределено Тогда Возврат; // Вызов ПриЧтенииНаСервере до вызова ПриСозданииНаСервере. @@ -373,7 +376,7 @@ ТекущийОбъект.ДополнительныеСвойства.ОписаниеПользователяИБ.РезультатДействия); КонецЕсли; - ОбщаяНастройкаФормы(ТекущийОбъект, , ПараметрыЗаписи); + НастроитьФорму(ТекущийОбъект, , ПараметрыЗаписи); Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); @@ -468,7 +471,7 @@ СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Роль ""%1"" не найдена в метаданных.'"), Строка.Синоним), "Роли", ЭлементыДерева.Индекс(Строка), - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Роль ""%1"" в строке %%1 не найдена в метаданных.'"), Строка.Синоним)); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Роль ""%1"" в строке %2 не найдена в метаданных.'"), Строка.Синоним, "%1")); КонецЕсли; Если Строка.ЭтоНедоступнаяРоль Тогда ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Ошибки, @@ -476,7 +479,7 @@ СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Роль ""%1"" недоступна для внешних пользователей.'"), Строка.Синоним), "Роли", ЭлементыДерева.Индекс(Строка), - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Роль ""%1"" в строке %%1 недоступна для внешних пользователей.'"), Строка.Синоним)); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Роль ""%1"" в строке %2 недоступна для внешних пользователей.'"), Строка.Синоним, "%1")); КонецЕсли; КонецЦикла; ОбщегоНазначенияКлиентСервер.СообщитьОшибкиПользователю(Ошибки, Отказ); @@ -512,10 +515,18 @@ Если Объект.Недействителен Тогда ВходВПрограммуРазрешен = Ложь; - Иначе - ВходВПрограммуРазрешен = ВходВПрограммуРазрешенЗначениеПрямогоИзменения - И (ПользовательИБАутентификацияOpenID - Или ПользовательИБАутентификацияСтандартная); + Если Не ПользовательИБАутентификацияOpenID + И Не ПользовательИБАутентификацияСтандартнаяЗначениеПрямогоИзменения + И ПользовательИБАутентификацияСтандартная Тогда + + ПользовательИБАутентификацияСтандартная = Ложь; + КонецЕсли; + ИначеЕсли ВходВПрограммуРазрешенЗначениеПрямогоИзменения Тогда + Если Не ПользовательИБАутентификацияСтандартная + И Не ПользовательИБАутентификацияOpenID Тогда + ПользовательИБАутентификацияСтандартная = Истина; + КонецЕсли; + ВходВПрограммуРазрешен = Истина; КонецЕсли; УстановитьДоступностьСвойств(ЭтотОбъект); @@ -533,6 +544,14 @@ Возврат; КонецЕсли; + Если Не ВходВПрограммуРазрешен + И Не ПользовательИБАутентификацияOpenID + И Не ПользовательИБАутентификацияСтандартнаяЗначениеПрямогоИзменения + И ПользовательИБАутентификацияСтандартная Тогда + + ПользовательИБАутентификацияСтандартная = Ложь; + КонецЕсли; + ОбновитьИмяДляВхода(ЭтотОбъект); Если ВходВПрограммуРазрешен @@ -577,6 +596,7 @@ Процедура ПользовательИБАутентификацияСтандартнаяПриИзменении(Элемент) АутентификацияПриИзменении(); + ПользовательИБАутентификацияСтандартнаяЗначениеПрямогоИзменения = ПользовательИБАутентификацияСтандартная; КонецПроцедуры @@ -746,6 +766,17 @@ Элементы = Форма.Элементы; + // Настройка необходимости заполнения. + Если ТребуетсяЗаписьПользователяИБ(Форма, Ложь) Тогда + НоваяСтраница = Элементы.ИмяСОтметкойНезаполненного; + Иначе + НоваяСтраница = Элементы.ИмяБезОтметкиНезаполненного; + КонецЕсли; + + Если Элементы.ИмяПереключениеОтметкиНезаполненного.ТекущаяСтраница <> НоваяСтраница Тогда + Элементы.ИмяПереключениеОтметкиНезаполненного.ТекущаяСтраница = НоваяСтраница; + КонецЕсли; + Если Форма.ПользовательИБСуществует Тогда Возврат; КонецЕсли; @@ -755,7 +786,8 @@ Если Элементы.ИмяПереключениеОтметкиНезаполненного.ТекущаяСтраница = Элементы.ИмяБезОтметкиНезаполненного Тогда - Если Не ЗначениеЗаполнено(Форма.ПользовательИБИмяЗначениеПрямогоИзменения) + Если (Не ЗначениеЗаполнено(Форма.ПользовательИБИмяЗначениеПрямогоИзменения) + Или Форма.ПользовательИБИмяЗначениеПрямогоИзменения = КраткоеИмя) И Форма.ПользовательИБИмя = КраткоеИмя Тогда Форма.ПользовательИБИмя = ""; @@ -773,8 +805,6 @@ &НаКлиенте Процедура АутентификацияПриИзменении() - УстановитьДоступностьСвойств(ЭтотОбъект); - Если НЕ ПользовательИБАутентификацияOpenID И НЕ ПользовательИБАутентификацияСтандартная Тогда @@ -784,6 +814,8 @@ ВходВПрограммуРазрешен = ВходВПрограммуРазрешенЗначениеПрямогоИзменения; КонецЕсли; + УстановитьДоступностьСвойств(ЭтотОбъект); + КонецПроцедуры // Продолжение процедуры СменитьПароль. @@ -1064,7 +1096,6 @@ ОписаниеПользователяИБ = Пользователи.НовоеОписаниеПользователяИБ(); ОписаниеПользователяИБ.ПоказыватьВСпискеВыбора = Ложь; - ОписаниеПользователяИБ.АутентификацияСтандартная = Истина; ОписаниеПользователяИБ.Роли = Новый Массив; Возврат ОписаниеПользователяИБ; @@ -1091,6 +1122,7 @@ Если Пользователи.ВходВПрограммуРазрешен(ПрочитанныеСвойства) Тогда ВходВПрограммуРазрешен = Истина; ВходВПрограммуРазрешенЗначениеПрямогоИзменения = Истина; + ОписаниеПользователяИБ.АутентификацияСтандартная = Истина; КонецЕсли; // Копирование свойств и ролей пользователяИБ. @@ -1186,6 +1218,11 @@ ПользовательИБАутентификацияСтандартная = ХранимыеСвойства.АутентификацияСтандартная; КонецЕсли; + Если ПользовательИБСуществует Тогда + ПользовательИБАутентификацияСтандартнаяЗначениеПрямогоИзменения + = ПользовательИБАутентификацияСтандартная; + КонецЕсли; + ОбработатьИнтерфейсРолей("ЗаполнитьРоли", ОписаниеПользователяИБ.Роли); ПриЧтенииВходВПрограммуРазрешен = ВходВПрограммуРазрешен; @@ -1367,16 +1404,6 @@ Элементы.Комментарий.ТолькоПросмотр = Не (ДействияВФорме.СвойстваЭлемента = "Редактирование" И УровеньДоступа.УправлениеСписком); - // Настройка необходимости заполнения. - Если ТребуетсяЗаписьПользователяИБ(Форма, Ложь) Тогда - НоваяСтраница = Элементы.ИмяСОтметкойНезаполненного; - Иначе - НоваяСтраница = Элементы.ИмяБезОтметкиНезаполненного; - КонецЕсли; - - Если Элементы.ИмяПереключениеОтметкиНезаполненного.ТекущаяСтраница <> НоваяСтраница Тогда - Элементы.ИмяПереключениеОтметкиНезаполненного.ТекущаяСтраница = НоваяСтраница; - КонецЕсли; ОбновитьИмяДляВхода(Форма); // Настройка доступности связанных элементов. diff --git a/SSL/src/Catalogs/ВнешниеПользователи/ВнешниеПользователи.mdo b/SSL/src/Catalogs/ВнешниеПользователи/ВнешниеПользователи.mdo index 6f10b39bf..6cbeca92d 100644 --- a/SSL/src/Catalogs/ВнешниеПользователи/ВнешниеПользователи.mdo +++ b/SSL/src/Catalogs/ВнешниеПользователи/ВнешниеПользователи.mdo @@ -12,6 +12,7 @@ <key>ru</key> <value>Внешние пользователи</value> </synonym> + <comment>АПК:413 - №744.2.1.1 Допустимо не отключать историю выбора, так как она используется, а переопределение отбора фиксированное, то есть служебные и недействительные пользователи в нее не попадут, но если как-то попали, то это не является проблемой</comment> <useStandardCommands>true</useStandardCommands> <inputByString>Catalog.ВнешниеПользователи.StandardAttribute.Description</inputByString> <fullTextSearchOnInputByString>DontUse</fullTextSearchOnInputByString> @@ -139,6 +140,7 @@ <lang>ru</lang> </pages> </help> + <dataLockFields>Catalog.ВнешниеПользователи.Attribute.ИдентификаторПользователяИБ</dataLockFields> <dataLockControlMode>Managed</dataLockControlMode> <fullTextSearch>Use</fullTextSearch> <objectPresentation> diff --git a/SSL/src/Catalogs/ВопросыШаблонаАнкеты/ВопросыШаблонаАнкеты.mdo b/SSL/src/Catalogs/ВопросыШаблонаАнкеты/ВопросыШаблонаАнкеты.mdo index 3d45c9c65..0a41b0eeb 100644 --- a/SSL/src/Catalogs/ВопросыШаблонаАнкеты/ВопросыШаблонаАнкеты.mdo +++ b/SSL/src/Catalogs/ВопросыШаблонаАнкеты/ВопросыШаблонаАнкеты.mdo @@ -121,6 +121,7 @@ <maxValue xsi:type="core:UndefinedValue"/> </standardAttributes> <createOnInput>Use</createOnInput> + <dataLockFields>Catalog.ВопросыШаблонаАнкеты.StandardAttribute.Owner</dataLockFields> <dataLockControlMode>Managed</dataLockControlMode> <fullTextSearch>Use</fullTextSearch> <objectPresentation> diff --git a/SSL/src/Catalogs/ВстречаПрисоединенныеФайлы/ВстречаПрисоединенныеФайлы.mdo b/SSL/src/Catalogs/ВстречаПрисоединенныеФайлы/ВстречаПрисоединенныеФайлы.mdo index aa7e22d93..8312cef7c 100644 --- a/SSL/src/Catalogs/ВстречаПрисоединенныеФайлы/ВстречаПрисоединенныеФайлы.mdo +++ b/SSL/src/Catalogs/ВстречаПрисоединенныеФайлы/ВстречаПрисоединенныеФайлы.mdo @@ -95,6 +95,7 @@ <maxValue xsi:type="core:UndefinedValue"/> </standardAttributes> <createOnInput>DontUse</createOnInput> + <dataLockFields>Catalog.ВстречаПрисоединенныеФайлы.Attribute.ВладелецФайла</dataLockFields> <dataLockControlMode>Managed</dataLockControlMode> <fullTextSearch>Use</fullTextSearch> <objectPresentation> diff --git a/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаСписка/Module.bsl index 49beee2dd..603b33f4c 100644 --- a/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаСписка/Module.bsl @@ -30,6 +30,8 @@ Иначе Заголовок = НСтр("ru = 'Выбор группы внешних пользователей'"); КонецЕсли; + + АвтоЗаголовок = Ложь; Иначе Элементы.Список.РежимВыбора = Ложь; КонецЕсли; diff --git a/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Form.form index 3239e2d61..0f7c81632 100644 --- a/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Form.form @@ -194,7 +194,7 @@ <value>Выбранные пользователи указанных видов</value> </presentation> <value xsi:type="core:StringValue"> - <value>ВыбранныеПользователиВидов</value> + <value>ВыбранныеПользователиУказанныхВидов</value> </value> </choiceList> <choiceList> @@ -203,7 +203,7 @@ <value>Все пользователи указанных видов</value> </presentation> <value xsi:type="core:StringValue"> - <value>ВсеПользователиВидов</value> + <value>ВсеПользователиУказанныхВидов</value> </value> </choiceList> <backColor xsi:type="core:ColorRef"> diff --git a/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Module.bsl index 055a9c9d1..0507b4cf7 100644 --- a/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Module.bsl @@ -49,7 +49,7 @@ Элементы.Состав.Видимость = ЗначениеЗаполнено(ДействияВФорме.СоставГруппы); Элементы.ОтображениеРолей.Видимость = ЗначениеЗаполнено(ДействияВФорме.Роли); - УчастникиГруппы = ?(Объект.ВсеОбъектыАвторизации, "ВсеПользователиВидов", "ВыбранныеПользователиВидов"); + УчастникиГруппы = ?(Объект.ВсеОбъектыАвторизации, "ВсеПользователиУказанныхВидов", "ВыбранныеПользователиУказанныхВидов"); ЭтоГруппаВсеВнешниеПользователи = Объект.Ссылка = Справочники.ГруппыВнешнихПользователей.ВсеВнешниеПользователи; @@ -174,7 +174,7 @@ СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Роль ""%1"" не найдена в метаданных.'"), Строка.Синоним), "Роли", ЭлементыДерева.Индекс(Строка), - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Роль ""%1"" в строке %%1 не найдена в метаданных.'"), Строка.Синоним)); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Роль ""%1"" в строке %2 не найдена в метаданных.'"), Строка.Синоним, "%1")); КонецЕсли; Если Строка.ЭтоНедоступнаяРоль Тогда ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Ошибки, @@ -182,7 +182,7 @@ СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Роль ""%1"" недоступна для внешних пользователей.'"), Строка.Синоним), "Роли", ЭлементыДерева.Индекс(Строка), - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Роль ""%1"" в строке %%1 недоступна для внешних пользователей.'"), Строка.Синоним)); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Роль ""%1"" в строке %2 недоступна для внешних пользователей.'"), Строка.Синоним, "%1")); КонецЕсли; КонецЦикла; КонецЕсли; @@ -216,7 +216,7 @@ &НаКлиенте Процедура СоставУчастниковПриИзменении(Элемент) - Объект.ВсеОбъектыАвторизации = (УчастникиГруппы = "ВсеПользователиВидов"); + Объект.ВсеОбъектыАвторизации = (УчастникиГруппы = "ВсеПользователиУказанныхВидов"); Если Объект.ВсеОбъектыАвторизации Тогда Объект.Состав.Очистить(); КонецЕсли; @@ -445,7 +445,7 @@ И Объект.Родитель <> Справочники.ГруппыВнешнихПользователей.ВсеВнешниеПользователи Тогда Элементы.ТипПользователей.Доступность = Ложь; - УчастникиГруппы = Элементы.УчастникиГруппы.СписокВыбора.НайтиПоЗначению("ВыбранныеПользователиВидов").Значение; + УчастникиГруппы = Элементы.УчастникиГруппы.СписокВыбора.НайтиПоЗначению("ВыбранныеПользователиУказанныхВидов").Значение; Иначе diff --git a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Form.form index b60a9e40b..3af0ab5f3 100644 --- a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Form.form @@ -570,13 +570,6 @@ <key>ru</key> <value>Участники группы</value> - - System.DefaultGUIFont - true - false - false - false - ПользователиГруппыExtendedTooltip 344 @@ -1042,6 +1035,10 @@ ЗначенияДоступаНомерСтрокиПоВиду 308 + + <key>ru</key> + <value>N</value> + true true @@ -1137,6 +1134,47 @@ Normal + + ЗначенияДоступаВключаяНижестоящие + 448 + true + true + + true + + + Объект.ЗначенияДоступа.ВключаяНижестоящие + + None + + ru + Включая нижестоящие (с иерархией) + + + ЗначенияДоступаВключаяНижестоящиеРасширеннаяПодсказка + 450 + Label + true + true + + Left + + + + ЗначенияДоступаВключаяНижестоящиеКонтекстноеМеню + 449 + true + + CheckBoxField + Auto + true + + CommonPicture.ИерархическийСписок + + Left + true + + ЗначенияДоступаКоманднаяПанель 68 @@ -1252,6 +1290,7 @@ 2 true MultiRow +
    true
    1 1 AutoUse @@ -1309,13 +1348,6 @@ ru Ограничения доступа - - System.DefaultGUIFont - true - false - false - false - ДоступExtendedTooltip 362 diff --git a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Module.bsl index 07003ffea..59ba2e6d5 100644 --- a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Module.bsl @@ -42,7 +42,7 @@ Если НЕ ДействияСПользователемСервиса.ИзменениеАдминистративногоДоступа Тогда ВызватьИсключение - НСтр("ru = 'Не достаточно прав доступа для изменения состава администраторов.'"); + НСтр("ru = 'Недостаточно прав доступа для изменения состава администраторов.'"); КонецЕсли; КонецЕсли; @@ -50,10 +50,6 @@ ВыполненаПроцедураПриСозданииНаСервере = Истина; - Если КлиентскоеПриложение.ТекущийВариантИнтерфейса() = ВариантИнтерфейсаКлиентскогоПриложения.Версия8_2 Тогда - Элементы.ПользователиДобавить.ТолькоВоВсехДействиях = Ложь; - КонецЕсли; - Если ОбщегоНазначения.ЭтоАвтономноеРабочееМесто() Тогда Если Не Объект.Ссылка = Справочники.ГруппыДоступа.Администраторы И Не УправлениеДоступомСлужебный.ЭтоПрофильОткрытиеВнешнихОтчетовИОбработок(Объект.Профиль) Тогда diff --git a/SSL/src/Catalogs/ГруппыДоступа/ManagerModule.bsl b/SSL/src/Catalogs/ГруппыДоступа/ManagerModule.bsl index 47771eaae..1e1f93f23 100644 --- a/SSL/src/Catalogs/ГруппыДоступа/ManagerModule.bsl +++ b/SSL/src/Catalogs/ГруппыДоступа/ManagerModule.bsl @@ -104,7 +104,7 @@ // элементам в процессе обновления конфигурации базы данных. // // Параметры: -// ЕстьИзменения - Булево (возвращаемое значение) - если производилась запись, +// ЕстьИзменения - Булево - (возвращаемое значение) - если производилась запись, // устанавливается Истина, иначе не изменяется. // Процедура ПометитьНаУдалениеГруппыДоступаПомеченныхПрофилей(ЕстьИзменения = Неопределено) Экспорт @@ -326,7 +326,7 @@ КонецЕсли; КонецЦикла; - Отбор = Новый Структура("ВидДоступа, ЗначениеДоступа"); + Отбор = Новый Структура("ВидДоступа, ЗначениеДоступа, ВключаяНижестоящие"); Для Каждого Строка Из ТекущийОбъект.ЗначенияДоступа Цикл ЗаполнитьЗначенияСвойств(Отбор, Строка); Если ЗначенияДоступа.НайтиСтроки(Отбор).Количество() = 0 Тогда @@ -561,32 +561,44 @@ // Только для внутреннего использования. Процедура УдалитьУчастниковГруппыДоступаАдминистраторыБезПользователяИБ() Экспорт - ГруппаДоступаАдминистраторы = Администраторы.ПолучитьОбъект(); - - Индекс = ГруппаДоступаАдминистраторы.Пользователи.Количество() - 1; - Пока Индекс >= 0 Цикл - ТекущийПользователь = ГруппаДоступаАдминистраторы.Пользователи[Индекс].Пользователь; - Если ТипЗнч(ТекущийПользователь) = Тип("СправочникСсылка.Пользователи") Тогда - ИдентификаторПользователяИБ = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ТекущийПользователь, - "ИдентификаторПользователяИБ"); - Иначе - ИдентификаторПользователяИБ = Неопределено; + НачатьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Справочник.ГруппыДоступа"); + ЭлементБлокировки.УстановитьЗначение("Ссылка", Администраторы); + Блокировка.Заблокировать(); + + ГруппаДоступаАдминистраторы = Администраторы.ПолучитьОбъект(); + + Индекс = ГруппаДоступаАдминистраторы.Пользователи.Количество() - 1; + Пока Индекс >= 0 Цикл + ТекущийПользователь = ГруппаДоступаАдминистраторы.Пользователи[Индекс].Пользователь; + Если ТипЗнч(ТекущийПользователь) = Тип("СправочникСсылка.Пользователи") Тогда + ИдентификаторПользователяИБ = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ТекущийПользователь, + "ИдентификаторПользователяИБ"); + Иначе + ИдентификаторПользователяИБ = Неопределено; + КонецЕсли; + Если ТипЗнч(ИдентификаторПользователяИБ) = Тип("УникальныйИдентификатор") Тогда + ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору( + ИдентификаторПользователяИБ); + Иначе + ПользовательИБ = Неопределено; + КонецЕсли; + Если ПользовательИБ = Неопределено Тогда + ГруппаДоступаАдминистраторы.Пользователи.Удалить(Индекс); + КонецЕсли; + Индекс = Индекс - 1; + КонецЦикла; + + Если ГруппаДоступаАдминистраторы.Модифицированность() Тогда + ГруппаДоступаАдминистраторы.Записать(); КонецЕсли; - Если ТипЗнч(ИдентификаторПользователяИБ) = Тип("УникальныйИдентификатор") Тогда - ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору( - ИдентификаторПользователяИБ); - Иначе - ПользовательИБ = Неопределено; - КонецЕсли; - Если ПользовательИБ = Неопределено Тогда - ГруппаДоступаАдминистраторы.Пользователи.Удалить(Индекс); - КонецЕсли; - Индекс = Индекс - 1; - КонецЦикла; - - Если ГруппаДоступаАдминистраторы.Модифицированность() Тогда - ГруппаДоступаАдминистраторы.Записать(); - КонецЕсли; + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; КонецПроцедуры diff --git a/SSL/src/Catalogs/ГруппыДоступа/ObjectModule.bsl b/SSL/src/Catalogs/ГруппыДоступа/ObjectModule.bsl index f1e17864e..0af4cec8f 100644 --- a/SSL/src/Catalogs/ГруппыДоступа/ObjectModule.bsl +++ b/SSL/src/Catalogs/ГруппыДоступа/ObjectModule.bsl @@ -97,14 +97,27 @@ // При снятии пометки удаления с группы доступа выполняется // снятие пометки удаления с профиля этой группы доступа. Если Не ПометкаУдаления И СтарыеЗначения.ПометкаУдаления = Истина Тогда - ПометкаУдаленияПрофиля = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Профиль, "ПометкаУдаления"); - ПометкаУдаленияПрофиля = ?(ПометкаУдаленияПрофиля = Неопределено, Ложь, ПометкаУдаленияПрофиля); - Если ПометкаУдаленияПрофиля Тогда - ЗаблокироватьДанныеДляРедактирования(Профиль); - ПрофильОбъект = Профиль.ПолучитьОбъект(); - ПрофильОбъект.ПометкаУдаления = Ложь; - ПрофильОбъект.Записать(); - КонецЕсли; + НачатьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Справочник.ПрофилиГруппДоступа"); + ЭлементБлокировки.УстановитьЗначение("Ссылка", Профиль); + Блокировка.Заблокировать(); + + ПометкаУдаленияПрофиля = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Профиль, "ПометкаУдаления"); + ПометкаУдаленияПрофиля = ?(ПометкаУдаленияПрофиля = Неопределено, Ложь, ПометкаУдаленияПрофиля); + Если ПометкаУдаленияПрофиля Тогда + ЗаблокироватьДанныеДляРедактирования(Профиль); + ПрофильОбъект = Профиль.ПолучитьОбъект(); + ПрофильОбъект.ПометкаУдаления = Ложь; + ПрофильОбъект.Записать(); + КонецЕсли; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; КонецЕсли; КонецЕсли; diff --git a/SSL/src/Catalogs/ГруппыДоступа/ГруппыДоступа.mdo b/SSL/src/Catalogs/ГруппыДоступа/ГруппыДоступа.mdo index 545300688..5422de4b8 100644 --- a/SSL/src/Catalogs/ГруппыДоступа/ГруппыДоступа.mdo +++ b/SSL/src/Catalogs/ГруппыДоступа/ГруппыДоступа.mdo @@ -399,6 +399,20 @@ Index Use + + ВключаяНижестоящие + + ru + Включая нижестоящие + + + Boolean + + + + Use + Use + ФормаЭлемента diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Form.form index aa5a92caf..c361677fe 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Form.form @@ -331,6 +331,705 @@ СтраницыВариантыКомандыРазрешения 80 + + СтраницаВарианты + 81 + + СтраницыВарианты + 83 + + ВариантыСкрытьДоЗаписи + 84 + + ВариантыИнформационнаяНадпись + 85 + + <key>ru</key> + <value>Для просмотра и изменения вариантов +необходимо записать дополнительный отчет, +указав в поле Публикация "Используется".</value> + + true + true + + true + + + ВариантыИнформационнаяНадписьExtendedTooltip + 192 + Label + true + true + + Left + + + + ВариантыИнформационнаяНадписьКонтекстноеМеню + 86 + true + + Label + true + + Style.ПоясняющийТекст + + + Left + + + + КомандаЗаписатьДляВариантовОтчетов + 248 + true + true + + true + + + КомандаЗаписатьДляВариантовОтчетовРасширеннаяПодсказка + 249 + Label + true + true + + Left + + + UsualButton + Form.Command.КомандаЗаписать + Normal + PictureAndText + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Варианты скрыть до записи</value> + + true + + ВариантыСкрытьДоЗаписиExtendedTooltip + 191 + Label + true + true + + Left + + + Page + + HorizontalIfPossible + auto + false + + + + ВариантыПоказать + 88 + + ВариантыДополнительногоОтчета + 89 + + <key>ru</key> + <value>Варианты дополнительного отчета</value> + + true + true + + true + + + ВариантыДополнительногоОтчета + + None + Add + Copy + EndEdit + MoveDown + MoveUp + SelectAll + + ВариантыДополнительногоОтчетаНаименование + 98 + true + true + + true + + + ВариантыДополнительногоОтчета.Наименование + + + ВариантыДополнительногоОтчетаНаименованиеExtendedTooltip + 208 + Label + true + true + + Left + + + + ВариантыДополнительногоОтчетаНаименованиеКонтекстноеМеню + 99 + true + + LabelField + Enter + true + Left + true + + true + true + + + + ВариантыДополнительногоОтчетаКоманднаяПанель + 91 + + ВариантыДополнительногоОтчетаПоискИВывестиСписок + 113 + + ВариантыДополнительногоОтчетаНайти + 101 + true + true + + true + + + ВариантыДополнительногоОтчетаНайтиExtendedTooltip + 200 + Label + true + true + + Left + + + Form.Item.ВариантыДополнительногоОтчета.StandardCommand.Find + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ВариантыДополнительногоОтчетаОтменитьПоиск + 102 + true + true + + true + + + ВариантыДополнительногоОтчетаОтменитьПоискExtendedTooltip + 201 + Label + true + true + + Left + + + Form.Item.ВариантыДополнительногоОтчета.StandardCommand.CancelSearch + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ВариантыДополнительногоОтчетаВывестиСписок + 112 + true + true + + true + + + ВариантыДополнительногоОтчетаВывестиСписокExtendedTooltip + 202 + Label + true + true + + Left + + + Form.Item.ВариантыДополнительногоОтчета.StandardCommand.OutputList + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Группа поиск и вывести список</value> + + + ВариантыДополнительногоОтчетаПоискИВывестиСписокExtendedTooltip + 199 + Label + true + true + + Left + + + + + + ВариантыДополнительногоОтчетаОткрыть + 94 + true + true + + true + + + ВариантыДополнительногоОтчетаОткрытьExtendedTooltip + 203 + Label + true + true + + Left + + + Form.Command.ВариантыДополнительногоОтчетаОткрыть + Normal + Auto + true + true + UserCmds + Auto + + + ВариантыДополнительногоОтчетаИзменить + 111 + + <key>ru</key> + <value>Изменить...</value> + + true + true + + true + + + ВариантыДополнительногоОтчетаИзменитьExtendedTooltip + 204 + Label + true + true + + Left + + + Form.Item.ВариантыДополнительногоОтчета.StandardCommand.Change + Normal + PictureAndText + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + + ВариантыДополнительногоОтчетаРазместитьВРазделах + 103 + true + true + + true + + + ВариантыДополнительногоОтчетаРазместитьВРазделахExtendedTooltip + 205 + Label + true + true + + Left + + + Form.Command.РазместитьВРазделах + Normal + Auto + true + true + UserCmds + Auto + + + ВариантыДополнительногоОтчетаУдалить + 104 + true + true + + true + + + ВариантыДополнительногоОтчетаУдалитьExtendedTooltip + 206 + Label + true + true + + Left + + + Form.Item.ВариантыДополнительногоОтчета.StandardCommand.Delete + Normal + Auto + true + true + UserCmds + + StdPicture.MarkToDelete + + Auto + + Left + true + + + BeforeAddRow + ВариантыДополнительногоОтчетаПередНачаломДобавления + + + BeforeDeleteRow + ВариантыДополнительногоОтчетаПередУдалением + + + BeforeRowChange + ВариантыДополнительногоОтчетаПередНачаломИзменения + + + ВариантыДополнительногоОтчетаСтрокаПоиска + 344 + + ВариантыДополнительногоОтчетаСтрокаПоискаРасширеннаяПодсказка + 346 + Label + true + true + + Left + + + + ВариантыДополнительногоОтчетаСтрокаПоискаКонтекстноеМеню + 345 + true + + ВариантыДополнительногоОтчета + + true + + + + ВариантыДополнительногоОтчетаСостояниеПросмотра + 347 + + ВариантыДополнительногоОтчетаСостояниеПросмотраРасширеннаяПодсказка + 349 + Label + true + true + + Left + + + + ВариантыДополнительногоОтчетаСостояниеПросмотраКонтекстноеМеню + 348 + true + + ViewStatusAddition + ВариантыДополнительногоОтчета + + true + + + + ВариантыДополнительногоОтчетаУправлениеПоиском + 350 + + ВариантыДополнительногоОтчетаУправлениеПоискомРасширеннаяПодсказка + 352 + Label + true + true + + Left + + + + ВариантыДополнительногоОтчетаУправлениеПоискомКонтекстноеМеню + 351 + true + + SearchControlAddition + ВариантыДополнительногоОтчета + + true + + + + ВариантыДополнительногоОтчетаExtendedTooltip + 207 + Label + true + true + + Left + + + + ВариантыДополнительногоОтчетаКонтекстноеМеню + 90 + + ВариантыДополнительногоОтчетаОткрыть1 + 114 + true + true + + true + + + ВариантыДополнительногоОтчетаОткрыть1ExtendedTooltip + 195 + Label + true + true + + Left + + + Form.Command.ВариантыДополнительногоОтчетаОткрыть + Normal + Auto + true + true + UserCmds + Auto + + + ВариантыДополнительногоОтчетаИзменить1 + 115 + + <key>ru</key> + <value>Изменить...</value> + + true + true + + true + + + ВариантыДополнительногоОтчетаИзменить1ExtendedTooltip + 196 + Label + true + true + + Left + + + Form.Item.ВариантыДополнительногоОтчета.StandardCommand.Change + Normal + PictureAndText + true + true + UserCmds + Auto + + + ВариантыДополнительногоОтчетаРазместитьВРазделах1 + 116 + true + true + + true + + + ВариантыДополнительногоОтчетаРазместитьВРазделах1ExtendedTooltip + 197 + Label + true + true + + Left + + + Form.Command.РазместитьВРазделах + Normal + Auto + true + true + UserCmds + Auto + + + ВариантыДополнительногоОтчетаУдалить1 + 117 + true + true + + true + + + ВариантыДополнительногоОтчетаУдалить1ExtendedTooltip + 198 + Label + true + true + + Left + + + Form.Item.ВариантыДополнительногоОтчета.StandardCommand.Delete + Normal + Auto + true + true + UserCmds + + StdPicture.MarkToDelete + + Auto + + true + + true + true + true + true + MultiRow + 1 + 1 + AutoUse + AutoUse + true + true + false + false + false + true + Auto + Auto + true + true + + ВариантыДополнительногоОтчета.ИндексКартинки + + + CommonPicture.ПиктограммыЭлементов + + true + + + true + true + + true + + + <key>ru</key> + <value>Варианты показать</value> + + true + + ВариантыПоказатьExtendedTooltip + 194 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + true + true + + true + + + <key>ru</key> + <value>Страницы варианты</value> + + true + + СтраницыВариантыExtendedTooltip + 190 + Label + true + true + + Left + + + Pages + + Auto + + + true + true + + true + + + <key>ru</key> + <value>Варианты отчета</value> + + + СтраницаВариантыExtendedTooltip + 189 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + СтраницаКоманды 164 @@ -1106,705 +1805,6 @@ false - - СтраницаВарианты - 81 - - СтраницыВарианты - 83 - - ВариантыСкрытьДоЗаписи - 84 - - ВариантыИнформационнаяНадпись - 85 - - <key>ru</key> - <value>Для просмотра и изменения вариантов -необходимо записать дополнительный отчет, -указав в поле Публикация "Используется".</value> - - true - true - - true - - - ВариантыИнформационнаяНадписьExtendedTooltip - 192 - Label - true - true - - Left - - - - ВариантыИнформационнаяНадписьКонтекстноеМеню - 86 - true - - Label - true - - Style.ПоясняющийТекст - - - Left - - - - КомандаЗаписатьДляВариантовОтчетов - 248 - true - true - - true - - - КомандаЗаписатьДляВариантовОтчетовРасширеннаяПодсказка - 249 - Label - true - true - - Left - - - UsualButton - Form.Command.КомандаЗаписать - Normal - PictureAndText - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Варианты скрыть до записи</value> - - true - - ВариантыСкрытьДоЗаписиExtendedTooltip - 191 - Label - true - true - - Left - - - Page - - HorizontalIfPossible - auto - false - - - - ВариантыПоказать - 88 - - ВариантыДополнительногоОтчета - 89 - - <key>ru</key> - <value>Варианты дополнительного отчета</value> - - true - true - - true - - - ВариантыДополнительногоОтчета - - None - Add - Copy - EndEdit - MoveDown - MoveUp - SelectAll - - ВариантыДополнительногоОтчетаНаименование - 98 - true - true - - true - - - ВариантыДополнительногоОтчета.Наименование - - - ВариантыДополнительногоОтчетаНаименованиеExtendedTooltip - 208 - Label - true - true - - Left - - - - ВариантыДополнительногоОтчетаНаименованиеКонтекстноеМеню - 99 - true - - LabelField - Enter - true - Left - true - - true - true - - - - ВариантыДополнительногоОтчетаКоманднаяПанель - 91 - - ВариантыДополнительногоОтчетаПоискИВывестиСписок - 113 - - ВариантыДополнительногоОтчетаНайти - 101 - true - true - - true - - - ВариантыДополнительногоОтчетаНайтиExtendedTooltip - 200 - Label - true - true - - Left - - - Form.Item.ВариантыДополнительногоОтчета.StandardCommand.Find - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - ВариантыДополнительногоОтчетаОтменитьПоиск - 102 - true - true - - true - - - ВариантыДополнительногоОтчетаОтменитьПоискExtendedTooltip - 201 - Label - true - true - - Left - - - Form.Item.ВариантыДополнительногоОтчета.StandardCommand.CancelSearch - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - ВариантыДополнительногоОтчетаВывестиСписок - 112 - true - true - - true - - - ВариантыДополнительногоОтчетаВывестиСписокExtendedTooltip - 202 - Label - true - true - - Left - - - Form.Item.ВариантыДополнительногоОтчета.StandardCommand.OutputList - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Группа поиск и вывести список</value> - - - ВариантыДополнительногоОтчетаПоискИВывестиСписокExtendedTooltip - 199 - Label - true - true - - Left - - - - - - ВариантыДополнительногоОтчетаОткрыть - 94 - true - true - - true - - - ВариантыДополнительногоОтчетаОткрытьExtendedTooltip - 203 - Label - true - true - - Left - - - Form.Command.ВариантыДополнительногоОтчетаОткрыть - Normal - Auto - true - true - UserCmds - Auto - - - ВариантыДополнительногоОтчетаИзменить - 111 - - <key>ru</key> - <value>Изменить...</value> - - true - true - - true - - - ВариантыДополнительногоОтчетаИзменитьExtendedTooltip - 204 - Label - true - true - - Left - - - Form.Item.ВариантыДополнительногоОтчета.StandardCommand.Change - Normal - PictureAndText - true - true - UserCmds - Auto - InCommandBarAndInAdditionalSubmenu - - - ВариантыДополнительногоОтчетаРазместитьВРазделах - 103 - true - true - - true - - - ВариантыДополнительногоОтчетаРазместитьВРазделахExtendedTooltip - 205 - Label - true - true - - Left - - - Form.Command.РазместитьВРазделах - Normal - Auto - true - true - UserCmds - Auto - - - ВариантыДополнительногоОтчетаУдалить - 104 - true - true - - true - - - ВариантыДополнительногоОтчетаУдалитьExtendedTooltip - 206 - Label - true - true - - Left - - - Form.Item.ВариантыДополнительногоОтчета.StandardCommand.Delete - Normal - Auto - true - true - UserCmds - - StdPicture.MarkToDelete - - Auto - - Left - true - - - BeforeAddRow - ВариантыДополнительногоОтчетаПередНачаломДобавления - - - BeforeDeleteRow - ВариантыДополнительногоОтчетаПередУдалением - - - BeforeRowChange - ВариантыДополнительногоОтчетаПередНачаломИзменения - - - ВариантыДополнительногоОтчетаСтрокаПоиска - 344 - - ВариантыДополнительногоОтчетаСтрокаПоискаРасширеннаяПодсказка - 346 - Label - true - true - - Left - - - - ВариантыДополнительногоОтчетаСтрокаПоискаКонтекстноеМеню - 345 - true - - ВариантыДополнительногоОтчета - - true - - - - ВариантыДополнительногоОтчетаСостояниеПросмотра - 347 - - ВариантыДополнительногоОтчетаСостояниеПросмотраРасширеннаяПодсказка - 349 - Label - true - true - - Left - - - - ВариантыДополнительногоОтчетаСостояниеПросмотраКонтекстноеМеню - 348 - true - - ViewStatusAddition - ВариантыДополнительногоОтчета - - true - - - - ВариантыДополнительногоОтчетаУправлениеПоиском - 350 - - ВариантыДополнительногоОтчетаУправлениеПоискомРасширеннаяПодсказка - 352 - Label - true - true - - Left - - - - ВариантыДополнительногоОтчетаУправлениеПоискомКонтекстноеМеню - 351 - true - - SearchControlAddition - ВариантыДополнительногоОтчета - - true - - - - ВариантыДополнительногоОтчетаExtendedTooltip - 207 - Label - true - true - - Left - - - - ВариантыДополнительногоОтчетаКонтекстноеМеню - 90 - - ВариантыДополнительногоОтчетаОткрыть1 - 114 - true - true - - true - - - ВариантыДополнительногоОтчетаОткрыть1ExtendedTooltip - 195 - Label - true - true - - Left - - - Form.Command.ВариантыДополнительногоОтчетаОткрыть - Normal - Auto - true - true - UserCmds - Auto - - - ВариантыДополнительногоОтчетаИзменить1 - 115 - - <key>ru</key> - <value>Изменить...</value> - - true - true - - true - - - ВариантыДополнительногоОтчетаИзменить1ExtendedTooltip - 196 - Label - true - true - - Left - - - Form.Item.ВариантыДополнительногоОтчета.StandardCommand.Change - Normal - PictureAndText - true - true - UserCmds - Auto - - - ВариантыДополнительногоОтчетаРазместитьВРазделах1 - 116 - true - true - - true - - - ВариантыДополнительногоОтчетаРазместитьВРазделах1ExtendedTooltip - 197 - Label - true - true - - Left - - - Form.Command.РазместитьВРазделах - Normal - Auto - true - true - UserCmds - Auto - - - ВариантыДополнительногоОтчетаУдалить1 - 117 - true - true - - true - - - ВариантыДополнительногоОтчетаУдалить1ExtendedTooltip - 198 - Label - true - true - - Left - - - Form.Item.ВариантыДополнительногоОтчета.StandardCommand.Delete - Normal - Auto - true - true - UserCmds - - StdPicture.MarkToDelete - - Auto - - true - - true - true - true - true - MultiRow - 1 - 1 - AutoUse - AutoUse - true - true - false - false - false - true - Auto - Auto - true - true - - ВариантыДополнительногоОтчета.ИндексКартинки - - - CommonPicture.ПиктограммыЭлементов - - true - - - true - true - - true - - - <key>ru</key> - <value>Варианты показать</value> - - true - - ВариантыПоказатьExtendedTooltip - 194 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - - true - true - - true - - - <key>ru</key> - <value>Страницы варианты</value> - - true - - СтраницыВариантыExtendedTooltip - 190 - Label - true - true - - Left - - - Pages - - Auto - - - true - true - - true - - - <key>ru</key> - <value>Варианты отчета</value> - - - СтраницаВариантыExtendedTooltip - 189 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - СтраницаРазрешения 259 @@ -2555,56 +2555,11 @@ СтраницаДополнительнаяИнформация 318 - Вид - 12 - true - true - - true - - - Объект.Вид - - true - - ВидExtendedTooltip - 232 - Label - true - true - - Left - - - - ВидКонтекстноеМеню - 13 - true - - LabelField - Enter - true - Left - true - - 50 - true - true - - System.DefaultGUIFont - true - false - false - false - - - - - ИмяФайла - 4 + Информация + 26 <key>ru</key> - <value>Имя файла</value> + <value>Описание</value> true true @@ -2612,12 +2567,13 @@ true - Объект.ИмяФайла + Объект.Информация true + None - ИмяФайлаExtendedTooltip - 233 + ИнформацияExtendedTooltip + 236 Label true true @@ -2626,27 +2582,24 @@ - ИмяФайлаКонтекстноеМеню - 5 + ИнформацияКонтекстноеМеню + 27 true - LabelField + InputField true Enter true Left true - - 50 - true + true - - System.DefaultGUIFont - true - false - false - false - + true + true + true + true + Normal + ByContent @@ -2680,22 +2633,113 @@ 8 true - LabelField + InputField + true Enter true Left true - + 10 true true - - System.DefaultGUIFont - true - false - false - false - + true + true + true + true + Normal + + + + Вид + 12 + true + true + + true + + + Объект.Вид + + true + + ВидExtendedTooltip + 232 + Label + true + true + + Left + + + + ВидКонтекстноеМеню + 13 + true + + InputField + true + Enter + true + Left + true + + 50 + true + true + true + true + true + true + Normal + + + + ИмяФайла + 4 + + <key>ru</key> + <value>Имя файла</value> + + true + true + + true + + + Объект.ИмяФайла + + true + + ИмяФайлаExtendedTooltip + 233 + Label + true + true + + Left + + + + ИмяФайлаКонтекстноеМеню + 5 + true + + InputField + true + Enter + true + Left + true + + 50 + true + true + true + true + true + true + Normal @@ -2725,85 +2769,85 @@ 79 true - LabelField - Enter - true - Left - true - - 1 - true - true - - System.DefaultGUIFont - true - false - false - false - - - - - Информация - 26 - - <key>ru</key> - <value>Описание</value> - - true - true - - true - - - Объект.Информация - - true - Left - - ИнформацияExtendedTooltip - 236 - Label - true - true - - Left - - - - ИнформацияКонтекстноеМеню - 27 - true - - LabelField + InputField true Enter true Left true - - 2 - 3 + + 1 + true + true + true + true + true + true + Normal - - Группа - 45 - - <key>ru</key> - <value>Группа</value> - + + ГруппаОтступ + 409 + + Группа + 45 + + <key>ru</key> + <value>Группа</value> + + true + true + + true + + + Объект.Parent + + + ГруппаExtendedTooltip + 237 + Label + true + true + + Left + + + + ГруппаКонтекстноеМеню + 46 + true + + InputField + Enter + true + Left + true + + 33 + true + true + false + true + true + true + true + Normal + + true true true - - Объект.Parent - + + <key>ru</key> + <value>Отступ</value> + - ГруппаExtendedTooltip - 237 + ГруппаОтступРасширеннаяПодсказка + 410 Label true true @@ -2811,26 +2855,14 @@ Left - - ГруппаКонтекстноеМеню - 46 - true - - InputField - Enter - true - Left - true - - 33 - true - true - false - true - true - true - true - Normal + UsualGroup + + HorizontalIfPossible + Auto + NormalSeparation + true + true + Auto true @@ -2842,10 +2874,6 @@ ru Дополнительная информация - - ru - Дополнительная информация об обработке - СтраницаДополнительнаяИнформацияРасширеннаяПодсказка 319 diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Module.bsl index 05b4730fd..e30490f23 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Module.bsl @@ -231,11 +231,13 @@ ЗаполнитьКоманды(); УстановитьВидимостьДоступность(); - Если Объект.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.ПечатнаяФорма + Если Объект.Публикация <> Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.Отключена + И Объект.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.ПечатнаяФорма И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Печать") Тогда МодульУправлениеПечатью = ОбщегоНазначения.ОбщийМодуль("УправлениеПечатью"); МодульУправлениеПечатью.ОтключитьКомандыПечати(ВыбранныеОбъектыНазначения().ВыгрузитьЗначения(), ОтключаемыеКоманды().ВыгрузитьЗначения()); КонецЕсли; + КонецПроцедуры #КонецОбласти diff --git a/SSL/src/Catalogs/Заметки/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/Заметки/Forms/ФормаЭлемента/Module.bsl index bfdb4c36a..25b1db571 100644 --- a/SSL/src/Catalogs/Заметки/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/Заметки/Forms/ФормаЭлемента/Module.bsl @@ -74,6 +74,9 @@ &НаКлиенте Процедура ПослеЗаписи(ПараметрыЗаписи) ОповеститьОбИзменении(Объект.Ссылка); + Если ЗначениеЗаполнено(Объект.Предмет) Тогда + ОповеститьОбИзменении(Объект.Предмет); + КонецЕсли; КонецПроцедуры #КонецОбласти diff --git a/SSL/src/Catalogs/Заметки/Заметки.mdo b/SSL/src/Catalogs/Заметки/Заметки.mdo index 0b2789286..7391ed8bb 100644 --- a/SSL/src/Catalogs/Заметки/Заметки.mdo +++ b/SSL/src/Catalogs/Заметки/Заметки.mdo @@ -115,6 +115,8 @@ ru + Catalog.Заметки.Attribute.Автор + Catalog.Заметки.Attribute.Предмет Managed Use @@ -160,14 +162,7 @@ Предмет - ExchangePlanRef - BusinessProcessRef - DocumentRef - ChartOfCalculationTypesRef - TaskRef - ChartOfCharacteristicTypesRef - ChartOfAccountsRef - CatalogRef + DefinedType.ПредметЗаметок ru diff --git a/SSL/src/Catalogs/ЗапланированноеВзаимодействиеПрисоединенныеФайлы/ЗапланированноеВзаимодействиеПрисоединенныеФайлы.mdo b/SSL/src/Catalogs/ЗапланированноеВзаимодействиеПрисоединенныеФайлы/ЗапланированноеВзаимодействиеПрисоединенныеФайлы.mdo index f675f6fb1..153869fa8 100644 --- a/SSL/src/Catalogs/ЗапланированноеВзаимодействиеПрисоединенныеФайлы/ЗапланированноеВзаимодействиеПрисоединенныеФайлы.mdo +++ b/SSL/src/Catalogs/ЗапланированноеВзаимодействиеПрисоединенныеФайлы/ЗапланированноеВзаимодействиеПрисоединенныеФайлы.mdo @@ -95,6 +95,7 @@ DontUse + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.ВладелецФайла Managed Use diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаГруппы/Form.form b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаГруппы/Form.form index c1b1bfbc4..a8f6af596 100644 --- a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаГруппы/Form.form +++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаГруппы/Form.form @@ -40,10 +40,6 @@ Left true - - Opening - НаименованиеОткрытие - true true true diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаГруппы/Module.bsl b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаГруппы/Module.bsl index c80fa6737..8e90d24be 100644 --- a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаГруппы/Module.bsl +++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаГруппы/Module.bsl @@ -23,15 +23,13 @@ УстановитьЗаголовок(); - ЛокализуемыеЭлементы = Новый Массив; - ЛокализуемыеЭлементы.Добавить(Элементы.Наименование); - ЛокализацияСервер.ПриСозданииНаСервере(ЛокализуемыеЭлементы); + МультиязычностьСервер.ПриСозданииНаСервере(ЭтотОбъект, Объект); КонецПроцедуры &НаСервере Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) - ЛокализацияСервер.ПередЗаписьюНаСервере(ТекущийОбъект); + МультиязычностьСервер.ПередЗаписьюНаСервере(ТекущийОбъект); КонецПроцедуры &НаСервере @@ -45,7 +43,7 @@ // Конец СтандартныеПодсистемы.УправлениеДоступом УстановитьЗаголовок(); - ЛокализацияСервер.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); + МультиязычностьСервер.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); КонецПроцедуры &НаСервере @@ -57,7 +55,7 @@ КонецЕсли; // Конец СтандартныеПодсистемы.УправлениеДоступом - ЛокализацияСервер.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); + МультиязычностьСервер.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); КонецПроцедуры #КонецОбласти @@ -65,8 +63,8 @@ #Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте -Процедура НаименованиеОткрытие(Элемент, СтандартнаяОбработка) - ЛокализацияКлиент.ПриОткрытии(Объект, Элемент, "Наименование", СтандартнаяОбработка); +Процедура Подключаемый_Открытие(Элемент, СтандартнаяОбработка) + МультиязычностьКлиент.ПриОткрытии(ЭтотОбъект, Объект, Элемент, СтандартнаяОбработка); КонецПроцедуры #КонецОбласти diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаЭлемента/Form.form index 58ab034b5..f6f27138e 100644 --- a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаЭлемента/Form.form @@ -32,10 +32,6 @@ Left true - - Opening - НаименованиеОткрытие - true true true diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаЭлемента/Module.bsl index 4e318518c..aac8f8c3a 100644 --- a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаЭлемента/Module.bsl @@ -38,9 +38,7 @@ УстановитьЗаголовок(); - ЛокализуемыеЭлементы = Новый Массив; - ЛокализуемыеЭлементы.Добавить(Элементы.Наименование); - ЛокализацияСервер.ПриСозданииНаСервере(ЛокализуемыеЭлементы); + МультиязычностьСервер.ПриСозданииНаСервере(ЭтотОбъект, Объект); КонецПроцедуры @@ -62,7 +60,7 @@ &НаСервере Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) - ЛокализацияСервер.ПередЗаписьюНаСервере(ТекущийОбъект); + МультиязычностьСервер.ПередЗаписьюНаСервере(ТекущийОбъект); КонецПроцедуры &НаСервере @@ -76,7 +74,7 @@ // Конец СтандартныеПодсистемы.УправлениеДоступом УстановитьЗаголовок(); - ЛокализацияСервер.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); + МультиязычностьСервер.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); КонецПроцедуры @@ -97,7 +95,7 @@ КонецЕсли; // Конец СтандартныеПодсистемы.УправлениеДоступом - ЛокализацияСервер.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); + МультиязычностьСервер.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); КонецПроцедуры #КонецОбласти @@ -105,8 +103,8 @@ #Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте -Процедура НаименованиеОткрытие(Элемент, СтандартнаяОбработка) - ЛокализацияКлиент.ПриОткрытии(Объект, Элемент, "Наименование", СтандартнаяОбработка); +Процедура Подключаемый_Открытие(Элемент, СтандартнаяОбработка) + МультиязычностьКлиент.ПриОткрытии(ЭтотОбъект, Объект, Элемент, СтандартнаяОбработка); КонецПроцедуры #КонецОбласти diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/ManagerModule.bsl b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/ManagerModule.bsl index aeaed5f69..12d6e3668 100644 --- a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/ManagerModule.bsl +++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/ManagerModule.bsl @@ -55,7 +55,7 @@ #Область ОбработчикиСобытий Процедура ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка) - ЛокализацияКлиентСервер.ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка); + МультиязычностьКлиентСервер.ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка); КонецПроцедуры #КонецОбласти diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/ObjectModule.bsl b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/ObjectModule.bsl index c820cacb6..6aa6658af 100644 --- a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/ObjectModule.bsl +++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/ObjectModule.bsl @@ -42,7 +42,7 @@ #Область СлужебныйПрограммныйИнтерфейс Процедура ПриЧтенииПредставленийНаСервере() Экспорт - ЛокализацияСервер.ПриЧтенииПредставленийНаСервере(ЭтотОбъект); + МультиязычностьСервер.ПриЧтенииПредставленийНаСервере(ЭтотОбъект); КонецПроцедуры #КонецОбласти diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаЭлемента/Form.form index 38359f79f..c035b6e9a 100644 --- a/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаЭлемента/Form.form @@ -32,10 +32,6 @@ Left true - - Opening - НаименованиеОткрытие - true true true diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаЭлемента/Module.bsl index 689ce5a02..71d61ec41 100644 --- a/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаЭлемента/Module.bsl @@ -38,9 +38,7 @@ УстановитьЗаголовок(); - ЛокализуемыеЭлементы = Новый Массив; - ЛокализуемыеЭлементы.Добавить(Элементы.Наименование); - ЛокализацияСервер.ПриСозданииНаСервере(ЛокализуемыеЭлементы); + МультиязычностьСервер.ПриСозданииНаСервере(ЭтотОбъект, Объект); КонецПроцедуры @@ -62,7 +60,7 @@ &НаСервере Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) - ЛокализацияСервер.ПередЗаписьюНаСервере(ТекущийОбъект); + МультиязычностьСервер.ПередЗаписьюНаСервере(ТекущийОбъект); КонецПроцедуры &НаСервере @@ -76,7 +74,7 @@ // Конец СтандартныеПодсистемы.УправлениеДоступом УстановитьЗаголовок(); - ЛокализацияСервер.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); + МультиязычностьСервер.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); КонецПроцедуры @@ -97,7 +95,7 @@ КонецЕсли; // Конец СтандартныеПодсистемы.УправлениеДоступом - ЛокализацияСервер.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); + МультиязычностьСервер.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); КонецПроцедуры #КонецОбласти @@ -105,8 +103,8 @@ #Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте -Процедура НаименованиеОткрытие(Элемент, СтандартнаяОбработка) - ЛокализацияКлиент.ПриОткрытии(Объект, Элемент, "Наименование", СтандартнаяОбработка); +Процедура Подключаемый_Открытие(Элемент, СтандартнаяОбработка) + МультиязычностьКлиент.ПриОткрытии(ЭтотОбъект, Объект, Элемент, СтандартнаяОбработка); КонецПроцедуры #КонецОбласти diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/ManagerModule.bsl b/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/ManagerModule.bsl index deacbd759..f1a4a592a 100644 --- a/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/ManagerModule.bsl +++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/ManagerModule.bsl @@ -55,7 +55,7 @@ #Область ОбработчикиСобытий Процедура ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка) - ЛокализацияКлиентСервер.ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка); + МультиязычностьКлиентСервер.ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка); КонецПроцедуры #КонецОбласти diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/ObjectModule.bsl b/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/ObjectModule.bsl index c820cacb6..6aa6658af 100644 --- a/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/ObjectModule.bsl +++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/ObjectModule.bsl @@ -42,7 +42,7 @@ #Область СлужебныйПрограммныйИнтерфейс Процедура ПриЧтенииПредставленийНаСервере() Экспорт - ЛокализацияСервер.ПриЧтенииПредставленийНаСервере(ЭтотОбъект); + МультиязычностьСервер.ПриЧтенииПредставленийНаСервере(ЭтотОбъект); КонецПроцедуры #КонецОбласти diff --git a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаСписка/Form.form index d15deb0ff..b9a2f2ab7 100644 --- a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаСписка/Form.form @@ -498,6 +498,42 @@ true None + + СписокСсылка + 18 + true + true + + true + + + Список.Ref + + + СписокСсылкаРасширеннаяПодсказка + 20 + Label + true + true + + Left + + + + СписокСсылкаКонтекстноеМеню + 19 + true + + LabelField + Enter + true + Left + true + + true + true + + СписокСиноним 4 @@ -507,9 +543,7 @@ true true - - true - + Список.Синоним @@ -573,40 +607,6 @@ true - - СписокСсылка - 18 - true - true - - - Список.Ref - - - СписокСсылкаРасширеннаяПодсказка - 20 - Label - true - true - - Left - - - - СписокСсылкаКонтекстноеМеню - 19 - true - - LabelField - Enter - true - Left - true - - true - true - - None СписокКоманднаяПанель diff --git a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаЭлемента/Form.form index 9d223be84..11de22024 100644 --- a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаЭлемента/Form.form @@ -1,5 +1,53 @@ + + Ссылка + 59 + true + true + + true + + + Объект.Ref + + + ru + Вычисляемое представление идентификатора объекта метаданных + + + СсылкаРасширеннаяПодсказка + 61 + Label + true + true + + Left + + + + СсылкаКонтекстноеМеню + 60 + true + + InputField + Enter + true + Left + true + + 60 + true + true + true + false + false + true + true + true + Normal + + Наименование 1 diff --git a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ManagerModule.bsl b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ManagerModule.bsl index b930daa81..42b7ac02f 100644 --- a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ManagerModule.bsl +++ b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ManagerModule.bsl @@ -34,7 +34,7 @@ // Возвращает реквизиты справочника, которые образуют естественный ключ для элементов справочника. // // Возвращаемое значение: -// Массив(Строка) - массив имен реквизитов, образующих естественный ключ. +// Массив Из Строка - массив имен реквизитов, образующих естественный ключ. // Функция ПоляЕстественногоКлюча() Экспорт @@ -51,6 +51,37 @@ #КонецОбласти +#КонецЕсли + +#Область ОбработчикиСобытий + +Процедура ОбработкаПолученияПолейПредставления(Поля, СтандартнаяОбработка) Экспорт + + СтандартнаяОбработка = Ложь; + + Поля.Добавить("Ссылка"); + Поля.Добавить("Наименование"); + Поля.Добавить("ПолноеИмя"); + Поля.Добавить("ПолныйСиноним"); + +КонецПроцедуры + +Процедура ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка) Экспорт + + СтандартнаяОбработка = Ложь; + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + Представление = СтандартныеПодсистемыПовтИсп.ПредставлениеИдентификатораОбъектаМетаданных(Данные.Ссылка); +#Иначе + Представление = СтандартныеПодсистемыКлиентПовтИсп.ПредставлениеИдентификатораОбъектаМетаданных(Данные.Ссылка); +#КонецЕсли + +КонецПроцедуры + +#КонецОбласти + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + #Область СлужебныйПрограммныйИнтерфейс // Только для внутреннего использования. @@ -456,10 +487,10 @@ // Процедура обновляет данные справочника по метаданным конфигурации. // // Параметры: -// ЕстьИзменения - Булево (возвращаемое значение) - в этот параметр возвращается +// ЕстьИзменения - Булево - (возвращаемое значение) - в этот параметр возвращается // значение Истина, если производилась запись, иначе не изменяется. // -// ЕстьУдаленные - Булево (возвращаемое значение) - в этот параметр возвращается +// ЕстьУдаленные - Булево - (возвращаемое значение) - в этот параметр возвращается // значение Истина, если хотя бы один элемент справочника был помечен // на удаление, иначе не изменяется. // @@ -1468,9 +1499,8 @@ Если ОбъектыРасширений И СвойстваРасширений.ИменаНеподключенныхРасширений[Свойства.ИмяРасширения] <> Неопределено Тогда - // Элементы неподключенных расширений остаются неизменными для возможности - // использования после исправления ошибок в расширениях так, чтобы обработка - // удаления помеченных не удалила связанные данные. + // Для случаев, когда расширение было временно отключено, а затем подключено обратно, + // предотвращаем удаление помеченных элементов и связанных с ними данных. Продолжить; КонецЕсли; @@ -1628,109 +1658,111 @@ Процедура ОбновитьИдентификаторыОбъектовМетаданных(Выгрузка, СвойстваОбъектовМетаданных, ОбъектыРасширений, СвойстваРасширений, ВерсияРасширений, ЕстьИзменения, ТолькоПроверка) - Если ОбъектыРасширений Тогда - НаборЗаписей = РегистрыСведений.ИдентификаторыОбъектовВерсийРасширений.СоздатьНаборЗаписей(); - НаборЗаписей.Отбор.ВерсияРасширений.Установить(ВерсияРасширений); - НаборЗаписей.Прочитать(); - ТаблицаЗаписей = НаборЗаписей.Выгрузить(); - ТаблицаЗаписей.Колонки.Добавить("Удалить", Новый ОписаниеТипов("Булево")); - ТаблицаЗаписей.ЗаполнитьЗначения(Истина, "Удалить"); - ТаблицаЗаписей.Индексы.Добавить("Идентификатор, ПолноеИмяОбъекта, ВерсияРасширений"); - ОбновитьНаборЗаписей = Ложь; + // АПК:1327-выкл - №783.1.4.1 Управляемая блокировка устанавливается в вызывающем коде. + Если ОбъектыРасширений Тогда + НаборЗаписей = РегистрыСведений.ИдентификаторыОбъектовВерсийРасширений.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.ВерсияРасширений.Установить(ВерсияРасширений); + НаборЗаписей.Прочитать(); + ТаблицаЗаписей = НаборЗаписей.Выгрузить(); + ТаблицаЗаписей.Колонки.Добавить("Удалить", Новый ОписаниеТипов("Булево")); + ТаблицаЗаписей.ЗаполнитьЗначения(Истина, "Удалить"); + ТаблицаЗаписей.Индексы.Добавить("Идентификатор, ПолноеИмяОбъекта, ВерсияРасширений"); + ОбновитьНаборЗаписей = Ложь; + КонецЕсли; + + Для Каждого Свойства Из Выгрузка Цикл + + // Обновление родителей идентификаторов объектов метаданных. + Если Не Свойства.ЭтоКоллекция Тогда + СвойстваОбъекта = СвойстваОбъектовМетаданных.Найти(Свойства.ПолноеИмя, "ПолноеИмя"); + НовыйРодитель = ПустаяСсылкаСправочника(ОбъектыРасширений); + + Если СвойстваОбъекта <> Неопределено Тогда + Если Не ЗначениеЗаполнено(СвойстваОбъекта.ПолноеИмяРодителя) Тогда + // Коллекция объектов метаданных. + НовыйРодитель = СвойстваОбъекта.Родитель; + Иначе + // Не коллекция объектов метаданных, например, подсистема. + ОписаниеРодителя = Выгрузка.Найти(СвойстваОбъекта.ПолноеИмяРодителя, "ПолноеИмя"); + Если ОписаниеРодителя <> Неопределено Тогда + НовыйРодитель = ОписаниеРодителя.Ссылка; + КонецЕсли; + КонецЕсли; + КонецЕсли; + + Если Свойства.Родитель <> НовыйРодитель Тогда + Свойства.Родитель = НовыйРодитель; + Свойства.Обновлен = Истина; + КонецЕсли; + + Если ОбъектыРасширений + И Свойства.ПометкаУдаления = Ложь + И СвойстваРасширений.ИменаНеподключенныхРасширений[Свойства.ИмяРасширения] = Неопределено Тогда + + Отбор = Новый Структура; + Отбор.Вставить("ВерсияРасширений", ВерсияРасширений); + Отбор.Вставить("Идентификатор", Свойства.Ссылка); + Отбор.Вставить("ПолноеИмяОбъекта", Свойства.ПолноеИмя); + Строки = ТаблицаЗаписей.НайтиСтроки(Отбор); + Если Строки.Количество() = 0 Тогда + ОбновитьНаборЗаписей = Истина; + ЗаполнитьЗначенияСвойств(ТаблицаЗаписей.Добавить(), Отбор); + Иначе + Строки[0].Удалить = Ложь; + КонецЕсли; + КонецЕсли; КонецЕсли; - Для Каждого Свойства Из Выгрузка Цикл - - // Обновление родителей идентификаторов объектов метаданных. - Если Не Свойства.ЭтоКоллекция Тогда - СвойстваОбъекта = СвойстваОбъектовМетаданных.Найти(Свойства.ПолноеИмя, "ПолноеИмя"); - НовыйРодитель = ПустаяСсылкаСправочника(ОбъектыРасширений); - - Если СвойстваОбъекта <> Неопределено Тогда - Если Не ЗначениеЗаполнено(СвойстваОбъекта.ПолноеИмяРодителя) Тогда - // Коллекция объектов метаданных. - НовыйРодитель = СвойстваОбъекта.Родитель; - Иначе - // Не коллекция объектов метаданных, например, подсистема. - ОписаниеРодителя = Выгрузка.Найти(СвойстваОбъекта.ПолноеИмяРодителя, "ПолноеИмя"); - Если ОписаниеРодителя <> Неопределено Тогда - НовыйРодитель = ОписаниеРодителя.Ссылка; - КонецЕсли; - КонецЕсли; - КонецЕсли; - - Если Свойства.Родитель <> НовыйРодитель Тогда - Свойства.Родитель = НовыйРодитель; - Свойства.Обновлен = Истина; - КонецЕсли; - - Если ОбъектыРасширений - И Свойства.ПометкаУдаления = Ложь - И СвойстваРасширений.ИменаНеподключенныхРасширений[Свойства.ИмяРасширения] = Неопределено Тогда - - Отбор = Новый Структура; - Отбор.Вставить("ВерсияРасширений", ВерсияРасширений); - Отбор.Вставить("Идентификатор", Свойства.Ссылка); - Отбор.Вставить("ПолноеИмяОбъекта", Свойства.ПолноеИмя); - Строки = ТаблицаЗаписей.НайтиСтроки(Отбор); - Если Строки.Количество() = 0 Тогда - ОбновитьНаборЗаписей = Истина; - ЗаполнитьЗначенияСвойств(ТаблицаЗаписей.Добавить(), Отбор); - Иначе - Строки[0].Удалить = Ложь; - КонецЕсли; - КонецЕсли; - КонецЕсли; - - // Обновление идентификаторов объектов метаданных. - Если Свойства.ЭтоНовый Тогда - ТаблицаОбъект = СоздатьЭлементСправочника(ОбъектыРасширений); - ТаблицаОбъект.УстановитьСсылкуНового(Свойства.Ссылка); - - ИначеЕсли Свойства.Обновлен Тогда - ТаблицаОбъект = Свойства.Ссылка.ПолучитьОбъект(); - Иначе - Продолжить; - КонецЕсли; + // Обновление идентификаторов объектов метаданных. + Если Свойства.ЭтоНовый Тогда + ТаблицаОбъект = СоздатьЭлементСправочника(ОбъектыРасширений); + ТаблицаОбъект.УстановитьСсылкуНового(Свойства.Ссылка); + ИначеЕсли Свойства.Обновлен Тогда + ТаблицаОбъект = Свойства.Ссылка.ПолучитьОбъект(); + Иначе + Продолжить; + КонецЕсли; + + ЕстьИзменения = Истина; + Если ТолькоПроверка Тогда + Возврат; + КонецЕсли; + + ЗаполнитьЗначенияСвойств(ТаблицаОбъект, Свойства); + ТаблицаОбъект.КлючОбъектаМетаданных = Новый ХранилищеЗначения(Свойства.КлючОбъектаМетаданных); + ТаблицаОбъект.ОбменДанными.Загрузка = Истина; + ПроверитьОбъектПередЗаписью(ТаблицаОбъект, Истина); + ТаблицаОбъект.Записать(); + КонецЦикла; + + Если ОбъектыРасширений Тогда + ТаблицаЗаписей.Индексы.Добавить("Удалить"); + Строки = ТаблицаЗаписей.НайтиСтроки(Новый Структура("Удалить", Истина)); + Если Строки.Количество() > 0 Тогда + ОбновитьНаборЗаписей = Истина; + Для Каждого Строка Из Строки Цикл + ТаблицаЗаписей.Удалить(Строка); + КонецЦикла; + КонецЕсли; + Если ТаблицаЗаписей.Количество() = 0 + И ЗначениеЗаполнено(ВерсияРасширений) Тогда + // Добавление записи, если в расширении нет объектов метаданных, + // чтобы при проверке наличия кэша, получить значение Истина. + ТаблицаЗаписей.Добавить().ВерсияРасширений = ВерсияРасширений; + ОбновитьНаборЗаписей = Истина; + КонецЕсли; + Если ОбновитьНаборЗаписей Тогда ЕстьИзменения = Истина; Если ТолькоПроверка Тогда Возврат; КонецЕсли; - - ЗаполнитьЗначенияСвойств(ТаблицаОбъект, Свойства); - ТаблицаОбъект.КлючОбъектаМетаданных = Новый ХранилищеЗначения(Свойства.КлючОбъектаМетаданных); - ТаблицаОбъект.ОбменДанными.Загрузка = Истина; - ПроверитьОбъектПередЗаписью(ТаблицаОбъект, Истина); - ТаблицаОбъект.Записать(); - КонецЦикла; - - Если ОбъектыРасширений Тогда - ТаблицаЗаписей.Индексы.Добавить("Удалить"); - Строки = ТаблицаЗаписей.НайтиСтроки(Новый Структура("Удалить", Истина)); - Если Строки.Количество() > 0 Тогда - ОбновитьНаборЗаписей = Истина; - Для Каждого Строка Из Строки Цикл - ТаблицаЗаписей.Удалить(Строка); - КонецЦикла; - КонецЕсли; - Если ТаблицаЗаписей.Количество() = 0 - И ЗначениеЗаполнено(ВерсияРасширений) Тогда - // Добавление записи, если в расширении нет объектов метаданных, - // чтобы при проверке наличия кэша, получить значение Истина. - ТаблицаЗаписей.Добавить().ВерсияРасширений = ВерсияРасширений; - ОбновитьНаборЗаписей = Истина; - КонецЕсли; - Если ОбновитьНаборЗаписей Тогда - ЕстьИзменения = Истина; - Если ТолькоПроверка Тогда - Возврат; - КонецЕсли; - НаборЗаписей.Загрузить(ТаблицаЗаписей); - НаборЗаписей.Записать(); - КонецЕсли; + НаборЗаписей.Загрузить(ТаблицаЗаписей); + НаборЗаписей.Записать(); КонецЕсли; - + КонецЕсли; + // АПК:1327-вкл. + КонецПроцедуры Процедура ОбновитьСвойстваПомеченногоНаУдаление(Свойства, СвойстваОбновлены = Ложь, ЕстьУдаленные = Ложь, ЭтоДубль = Ложь) @@ -2500,7 +2532,7 @@ ЭлементПорядка = Порядок.Элементы.Добавить(Тип("ЭлементПорядкаКомпоновкиДанных")); ЭлементПорядка.Поле = Новый ПолеКомпоновкиДанных("ПометкаУдаления"); - ЭлементПорядка.ТипУпорядочивания = НаправлениеСортировкиКомпоновкиДанных.Убыв; + ЭлементПорядка.ТипУпорядочивания = НаправлениеСортировкиКомпоновкиДанных.Возр; ЭлементПорядка.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; ЭлементПорядка.Использование = Истина; @@ -2516,6 +2548,12 @@ ЭлементПорядка.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; ЭлементПорядка.Использование = Истина; + ЭлементПорядка = Порядок.Элементы.Добавить(Тип("ЭлементПорядкаКомпоновкиДанных")); + ЭлементПорядка.Поле = Новый ПолеКомпоновкиДанных("ПометкаБудущегоУдаления"); + ЭлементПорядка.ТипУпорядочивания = НаправлениеСортировкиКомпоновкиДанных.Возр; + ЭлементПорядка.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; + ЭлементПорядка.Использование = Истина; + ЭлементПорядка = Порядок.Элементы.Добавить(Тип("ЭлементПорядкаКомпоновкиДанных")); ЭлементПорядка.Поле = Новый ПолеКомпоновкиДанных("Синоним"); ЭлементПорядка.ТипУпорядочивания = НаправлениеСортировкиКомпоновкиДанных.Возр; @@ -2523,25 +2561,27 @@ ЭлементПорядка.Использование = Истина; // Оформление. - ЭлементУсловногоОформления = Форма.УсловноеОформление.Элементы.Добавить(); + ЭлементОформления = Форма.Список.КомпоновщикНастроек.Настройки.УсловноеОформление.Элементы.Добавить(); + ЭлементОформления.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; - ЭлементЦветаОформления = ЭлементУсловногоОформления.Оформление.Элементы.Найти("TextColor"); - ЭлементЦветаОформления.Значение = Метаданные.ЭлементыСтиля.ТекстЗапрещеннойЯчейкиЦвет.Значение; - ЭлементЦветаОформления.Использование = Истина; + ЭлементЦвета = ЭлементОформления.Оформление.Элементы.Найти("TextColor"); + ЭлементЦвета.Значение = Метаданные.ЭлементыСтиля.ТекстЗапрещеннойЯчейкиЦвет.Значение; + ЭлементЦвета.Использование = Истина; - ЭлементОтбораДанных = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); - ЭлементОтбораДанных.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Список.ПометкаБудущегоУдаления"); - ЭлементОтбораДанных.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; - ЭлементОтбораДанных.ПравоеЗначение = Истина; - ЭлементОтбораДанных.Использование = Истина; + ЭлементГруппыОтбора = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных")); + ЭлементГруппыОтбора.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли; - ЭлементОформляемогоПоля = ЭлементУсловногоОформления.Поля.Элементы.Добавить(); - ЭлементОформляемогоПоля.Поле = Новый ПолеКомпоновкиДанных("Синоним"); - ЭлементОформляемогоПоля.Использование = Истина; + ЭлементОтбора = ЭлементГруппыОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ПометкаУдаления"); + ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ЭлементОтбора.ПравоеЗначение = Истина; + ЭлементОтбора.Использование = Истина; - ЭлементОформляемогоПоля = ЭлементУсловногоОформления.Поля.Элементы.Добавить(); - ЭлементОформляемогоПоля.Поле = Новый ПолеКомпоновкиДанных("ПолноеИмя"); - ЭлементОформляемогоПоля.Использование = Истина; + ЭлементОтбора = ЭлементГруппыОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ПометкаБудущегоУдаления"); + ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ЭлементОтбора.ПравоеЗначение = Истина; + ЭлементОтбора.Использование = Истина; КонецПроцедуры @@ -2787,11 +2827,11 @@ НомерОшибки = НомерОшибки + 1; ТекстВсехОшибок = ТекстВсехОшибок + ?(НомерОшибки = 1, "", Разделитель) + ОписаниеОшибки; Если НомерОшибки = 3 И КоличествоОшибок > 5 Тогда - ПредставлениеКоличества = СтроковыеФункцииКлиентСервер.СтрокаСЧисломДляЛюбогоЯзыка( - НСтр("ru = ';%1 ошибка;; %1 ошибки; %1 ошибок; %1 ошибки'"), (КоличествоОшибок - НомерОшибки)); - ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = '... И еще %1'"), - ПредставлениеКоличества); + + ОписаниеОшибки = "... " + СтроковыеФункцииКлиентСервер.СтрокаСЧисломДляЛюбогоЯзыка( + НСтр("ru = ';И еще %1 ошибка;;И еще %1 ошибки;И еще %1 ошибок;И еще %1 ошибки'"), + (КоличествоОшибок - НомерОшибки)); + ТекстВсехОшибок = ТекстВсехОшибок + Разделитель + ОписаниеОшибки; Прервать; КонецЕсли; @@ -3124,6 +3164,68 @@ КонецФункции +// Для процедуры ОбработкаПолученияПредставления. +Функция ПредставлениеИдентификатора(Ссылка) Экспорт + + ОбъектыРасширений = ТипЗнч(Ссылка) <> Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных"); + СвойстваКоллекций = СтандартныеПодсистемыПовтИсп.СвойстваКоллекцийОбъектовМетаданных(ОбъектыРасширений); + + СвойстваКоллекции = СвойстваКоллекций.Найти(Ссылка.УникальныйИдентификатор(), "Идентификатор"); + Если СвойстваКоллекции <> Неопределено Тогда + Возврат СвойстваКоллекции.Синоним; + КонецЕсли; + + Если ОбъектыРасширений Тогда + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("Ссылка", Ссылка); + Запрос.УстановитьПараметр("ВерсияРасширений", ПараметрыСеанса.ВерсияРасширений); + Запрос.Текст = + "ВЫБРАТЬ + | ЕСТЬNULL(ИдентификаторыОбъектовВерсийРасширений.ПолноеИмяОбъекта, ИдентификаторыОбъектовРасширений.ПолноеИмя) КАК ПолноеИмя + |ИЗ + | Справочник.ИдентификаторыОбъектовРасширений КАК ИдентификаторыОбъектовРасширений + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ИдентификаторыОбъектовВерсийРасширений КАК ИдентификаторыОбъектовВерсийРасширений + | ПО (ИдентификаторыОбъектовВерсийРасширений.Идентификатор = ИдентификаторыОбъектовРасширений.Ссылка) + | И (ИдентификаторыОбъектовВерсийРасширений.ВерсияРасширений = &ВерсияРасширений) + |ГДЕ + | ИдентификаторыОбъектовРасширений.Ссылка = &Ссылка"; + Выборка = Запрос.Выполнить().Выбрать(); + Если Выборка.Следующий() Тогда + ПолноеИмя = Выборка.ПолноеИмя; + Иначе + ПолноеИмя = Неопределено; + КонецЕсли; + Иначе + ПолноеИмя = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Ссылка, "ПолноеИмя"); + КонецЕсли; + + Если ПолноеИмя = Неопределено Тогда + Возврат НСтр("ru = 'Объект не найден.'") + КонецЕсли; + + ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ПолноеИмя); + Если ОбъектМетаданных = Неопределено Тогда + Если СтрНачинаетсяС(ПолноеИмя, "?") Тогда + Возврат "? " + СтрРазделить(ПолноеИмя, " ")[1]; + Иначе + Возврат ПолноеИмя; + КонецЕсли; + КонецЕсли; + + ПозицияТочки = СтрНайти(ПолноеИмя, "."); + ИмяБазовогоТипа = Лев(ПолноеИмя, ПозицияТочки -1); + + Отбор = Новый Структура("ИмяВЕдЧисле", ИмяБазовогоТипа); + Строки = СвойстваКоллекций.НайтиСтроки(Отбор); + + Если Строки.Количество() <> 1 Тогда + Возврат ПолноеИмя; + КонецЕсли; + + Возврат ПредставлениеОбъектаМетаданных(ОбъектМетаданных, Строки[0]); + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Процедуры и функции замены идентификатора в базе данных. @@ -3227,6 +3329,9 @@ // Функция ВыполнитьЗаменуЭлементов(Знач Заменяемые, Знач ТаблицаСсылок, Знач ОтключатьКонтрольЗаписи = Ложь, Знач ОбъектыРасширений = Ложь) + // АПК:1327-выкл - №783.1.4.1 Во-первых, нетранзакционная операция, так как может быть длительной. + // Во-вторых, выполняется после загрузки данных из главного узла в режиме обновление информационной базы. + // В третьих, выполняется только тогда, когда найдены дубли идентификаторов объектов метаданных (редкий случай). Параметры = Новый Структура; Для Каждого РегистрБухгалтерии Из Метаданные.РегистрыБухгалтерии Цикл @@ -3634,8 +3739,11 @@ СообщитьОбОшибке(ТекстОшибки, ОбъектыРасширений); КонецПопытки; Иначе - СообщитьОбОшибке(НСтр("ru = 'Значения не заменяются в данных типа'") - + ": " + Строка(СтрокаТаблицы.Метаданные), ОбъектыРасширений); + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Значения не заменяются в данных типа: %1'"), + Строка(СтрокаТаблицы.Метаданные)); + + СообщитьОбОшибке(ТекстОшибки, ОбъектыРасширений); КонецЕсли; КонецЦикла; @@ -3668,6 +3776,7 @@ КонецПопытки; Возврат Не БылиИсключения; + // АПК:1327-вкл. КонецФункции diff --git a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ИдентификаторыОбъектовМетаданных.mdo b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ИдентификаторыОбъектовМетаданных.mdo index 1c0719f38..17bb40ecd 100644 --- a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ИдентификаторыОбъектовМетаданных.mdo +++ b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ИдентификаторыОбъектовМетаданных.mdo @@ -12,6 +12,7 @@ ru Идентификаторы объектов метаданных + АПК:304 - №697.1.2 Обновление предопределенных данных вместо Авто требуется установить Не обновлять автоматически, так как предопределенные элементы сопоставляются с данными программно Catalog.ИдентификаторыОбъектовМетаданных.StandardAttribute.Description DontUse @@ -35,7 +36,7 @@ Ref ru - Ссылка на объект метаданных в базе данных + Ссылка на объект метаданных в информационной базе Use @@ -96,7 +97,7 @@ ru - Представление идентификатора объекта метаданных + Сохраняемое представление идентификатора объекта метаданных ShowError @@ -125,7 +126,7 @@
    ru - Идентификаторы объектов метаданных для использования в базе данных. + Идентификаторы объектов метаданных для использования в информационной базе. true HierarchyOfItems @@ -1096,12 +1097,6 @@
    - - РегистрСведенийИнцидентыОграничениеСкоростиОтсылки - - - - РегистрСведенийИнцидентыОткрытые @@ -1168,6 +1163,12 @@ + + РегистрСведенийОграничениеСкоростиОтсылкиИнцидентов + + + + DontAutoUpdate InDialog @@ -1318,6 +1319,7 @@ ru Значение пустой ссылки + АПК:1330 - №728.2.1 Допустимо использование универсального ссылочного типа, так как это универсальный механизм и мало данных ExchangePlanRef BusinessProcessRef @@ -1384,6 +1386,7 @@ ru Форма списка + АПК:149 - #std702,1 Поле Ссылка используется вместо поля Наименование для динамического представления на разных языках PersonalComputer MobileDevice diff --git a/SSL/src/Catalogs/ИдентификаторыОбъектовРасширений/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ИдентификаторыОбъектовРасширений/Forms/ФормаСписка/Form.form index 6b4daef20..9085a855e 100644 --- a/SSL/src/Catalogs/ИдентификаторыОбъектовРасширений/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/ИдентификаторыОбъектовРасширений/Forms/ФормаСписка/Form.form @@ -498,6 +498,42 @@ true None + + СписокСсылка + 18 + true + true + + true + + + Список.Ref + + + СписокСсылкаРасширеннаяПодсказка + 20 + Label + true + true + + Left + + + + СписокСсылкаКонтекстноеМеню + 19 + true + + LabelField + Enter + true + Left + true + + true + true + + СписокСиноним 4 @@ -507,9 +543,7 @@ true true - - true - + Список.Синоним @@ -573,40 +607,6 @@ true - - СписокСсылка - 18 - true - true - - - Список.Ref - - - СписокСсылкаРасширеннаяПодсказка - 20 - Label - true - true - - Left - - - - СписокСсылкаКонтекстноеМеню - 19 - true - - LabelField - Enter - true - Left - true - - true - true - - None СписокКоманднаяПанель diff --git a/SSL/src/Catalogs/ИдентификаторыОбъектовРасширений/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ИдентификаторыОбъектовРасширений/Forms/ФормаЭлемента/Form.form index de06700ae..833e175e1 100644 --- a/SSL/src/Catalogs/ИдентификаторыОбъектовРасширений/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ИдентификаторыОбъектовРасширений/Forms/ФормаЭлемента/Form.form @@ -1,5 +1,53 @@ + + Ссылка + 62 + true + true + + true + + + Объект.Ref + + + ru + Вычисляемое представление идентификатора объекта расширения + + + СсылкаРасширеннаяПодсказка + 64 + Label + true + true + + Left + + + + СсылкаКонтекстноеМеню + 63 + true + + InputField + Enter + true + Left + true + + 60 + true + true + true + false + false + true + true + true + Normal + + Наименование 1 diff --git a/SSL/src/Catalogs/ИдентификаторыОбъектовРасширений/ManagerModule.bsl b/SSL/src/Catalogs/ИдентификаторыОбъектовРасширений/ManagerModule.bsl index 3ba435b9a..043dcaf76 100644 --- a/SSL/src/Catalogs/ИдентификаторыОбъектовРасширений/ManagerModule.bsl +++ b/SSL/src/Catalogs/ИдентификаторыОбъектовРасширений/ManagerModule.bsl @@ -32,7 +32,7 @@ // Возвращает реквизиты справочника, которые образуют естественный ключ для элементов справочника. // // Возвращаемое значение: -// Массив(Строка) - массив имен реквизитов, образующих естественный ключ. +// Массив Из Строка - массив имен реквизитов, образующих естественный ключ. // Функция ПоляЕстественногоКлюча() Экспорт @@ -46,6 +46,28 @@ #КонецОбласти +#КонецЕсли + +#Область ОбработчикиСобытий + +Процедура ОбработкаПолученияПолейПредставления(Поля, СтандартнаяОбработка) + + Справочники.ИдентификаторыОбъектовМетаданных.ОбработкаПолученияПолейПредставления(Поля, + СтандартнаяОбработка); + +КонецПроцедуры + +Процедура ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка) + + Справочники.ИдентификаторыОбъектовМетаданных.ОбработкаПолученияПредставления(Данные, + Представление, СтандартнаяОбработка); + +КонецПроцедуры + +#КонецОбласти + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + #Область СлужебныйПрограммныйИнтерфейс Функция ПолныеИменаТаблицСДанными() Экспорт diff --git a/SSL/src/Catalogs/ИдентификаторыОбъектовРасширений/ИдентификаторыОбъектовРасширений.mdo b/SSL/src/Catalogs/ИдентификаторыОбъектовРасширений/ИдентификаторыОбъектовРасширений.mdo index 70f7d0b22..5121e5168 100644 --- a/SSL/src/Catalogs/ИдентификаторыОбъектовРасширений/ИдентификаторыОбъектовРасширений.mdo +++ b/SSL/src/Catalogs/ИдентификаторыОбъектовРасширений/ИдентификаторыОбъектовРасширений.mdo @@ -12,6 +12,7 @@ ru Идентификаторы объектов расширений + АПК:304 - №697.1.2 Обновление предопределенных данных вместо Авто требуется установить Не обновлять автоматически, так как предопределенные элементы сопоставляются с данными программно Catalog.ИдентификаторыОбъектовРасширений.StandardAttribute.Description DontUse @@ -35,7 +36,7 @@ Ref ru - Ссылка на объект метаданных в базе данных + Ссылка на объект метаданных в информационной базе Use @@ -96,7 +97,7 @@ ru - Представление идентификатора объекта метаданных + Сохраняемое представление идентификатора объекта расширений ShowError @@ -125,7 +126,7 @@ ru - Идентификаторы объектов метаданных расширений для использования в базе данных. + Идентификаторы объектов метаданных расширений для использования в информационной базе. true HierarchyOfItems @@ -284,6 +285,7 @@ ru Значение пустой ссылки + АПК:1330 - №728.2.1 Допустимо использование универсального ссылочного типа, так как это универсальный механизм и мало данных ExchangePlanRef BusinessProcessRef @@ -390,6 +392,7 @@ ru Форма списка + АПК:149 - #std702,1 Поле Ссылка используется вместо поля Наименование для динамического представления на разных языках PersonalComputer MobileDevice diff --git a/SSL/src/Catalogs/Календари/Forms/РасписаниеРаботы/Form.form b/SSL/src/Catalogs/Календари/Forms/РасписаниеРаботы/Form.form index cddbee232..5edc63eb4 100644 --- a/SSL/src/Catalogs/Календари/Forms/РасписаниеРаботы/Form.form +++ b/SSL/src/Catalogs/Календари/Forms/РасписаниеРаботы/Form.form @@ -56,14 +56,6 @@ true true true - - ru - ДФ=ЧЧ:мм; ДП= - - - ru - ДФ=ЧЧ:мм - true true true @@ -109,14 +101,6 @@ true true true - - ru - ДФ=ЧЧ:мм; ДП= - - - ru - ДФ=ЧЧ:мм - true true true diff --git a/SSL/src/Catalogs/Календари/Forms/РасписаниеРаботы/Module.bsl b/SSL/src/Catalogs/Календари/Forms/РасписаниеРаботы/Module.bsl index d174434dc..be632a572 100644 --- a/SSL/src/Catalogs/Календари/Forms/РасписаниеРаботы/Module.bsl +++ b/SSL/src/Catalogs/Календари/Forms/РасписаниеРаботы/Module.bsl @@ -12,6 +12,7 @@ Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) РасписаниеДня = Параметры.РасписаниеРаботы; + УточнитьФорматПолейВремени(); Для Каждого ОписаниеИнтервала Из РасписаниеДня Цикл ЗаполнитьЗначенияСвойств(РасписаниеРаботы.Добавить(), ОписаниеИнтервала); @@ -129,4 +130,17 @@ КонецПроцедуры +&НаСервере +Процедура УточнитьФорматПолейВремени() + + ФорматВремени = НСтр("ru = 'ДФ=ЧЧ:мм; ДП='"); + + Элементы.РасписаниеРаботыВремяНачала.Формат = ФорматВремени; + Элементы.РасписаниеРаботыВремяНачала.ФорматРедактирования = ФорматВремени; + + Элементы.РасписаниеРаботыВремяОкончания.Формат = ФорматВремени; + Элементы.РасписаниеРаботыВремяОкончания.ФорматРедактирования = ФорматВремени; + +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Form.form index 32eedc7d4..bbcd012ea 100644 --- a/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Form.form @@ -678,7 +678,6 @@ Left true - 8 true true true @@ -1814,13 +1813,6 @@ Right Bottom UserCmds - - System.DefaultGUIFont - true - false - false - false - Auto true @@ -2284,13 +2276,6 @@ true true UserCmds - - System.DefaultGUIFont - true - false - false - false - Auto true diff --git a/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Module.bsl index f7fb42742..610c8a154 100644 --- a/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Module.bsl @@ -139,7 +139,8 @@ // то записываем их как есть, остальные периоды обновляем по шаблону. Если МодифицированностьРезультата Тогда - РегистрыСведений.КалендарныеГрафики.ЗаписатьДанныеГрафикаВРегистр(ТекущийОбъект.Ссылка, ДниГрафика, Дата(НомерГода, 1, 1), Дата(НомерГода, 12, 31), Истина); + РегистрыСведений.КалендарныеГрафики.ЗаписатьДанныеГрафикаВРегистр(ТекущийОбъект.Ссылка, ДниГрафика, + Дата(НомерГода, 1, 1), Дата(НомерГода, 12, 31), Истина); КонецЕсли; ЗаписатьПризнакРучногоРедактирования(ТекущийОбъект, НомерГода); @@ -586,7 +587,10 @@ Если СтрокаРасписания.НомерДня <> НомерДня Тогда Продолжить; КонецЕсли; - ПредставлениеИнтервала = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("%1-%2, ", Формат(СтрокаРасписания.ВремяНачала, "ДФ=ЧЧ:мм; ДП="), Формат(СтрокаРасписания.ВремяОкончания, "ДФ=ЧЧ:мм; ДП=")); + ПредставлениеИнтервала = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + "%1-%2, ", + ПредставлениеВремениСуток(СтрокаРасписания.ВремяНачала), + ПредставлениеВремениСуток(СтрокаРасписания.ВремяОкончания)); ПредставлениеИнтервалов = ПредставлениеИнтервалов + ПредставлениеИнтервала; Если Не ЗначениеЗаполнено(СтрокаРасписания.ВремяОкончания) Тогда СекундИнтервала = КонецДня(СтрокаРасписания.ВремяОкончания) - СтрокаРасписания.ВремяНачала + 1; @@ -607,6 +611,17 @@ КонецФункции +&НаКлиентеНаСервереБезКонтекста +Функция ПредставлениеВремениСуток(Знач ВремяСуток) + + Если Не ЗначениеЗаполнено(ВремяСуток) Тогда + ВремяСуток = Дата(1980, 1, 1); + КонецЕсли; + + Возврат Формат(ВремяСуток, НСтр("ru = 'ДФ=ЧЧ:мм'")); + +КонецФункции + &НаКлиенте Функция РасписаниеРаботы(НомерДня) @@ -679,7 +694,7 @@ Если Не ЗначениеЗаполнено(Форма.Объект.ГоризонтПланирования) Тогда ИнформационныйТекст = НСтр("ru = 'График работы заполнен до %1'"); Форма.ЗаполненностьИнформационныйТекст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ИнформационныйТекст, Формат(Форма.ДатаЗаполненности, "ДЛФ=D")); - Иначе + Иначе #Если ВебКлиент Или ТонкийКлиент ИЛИ МобильныйКлиент Тогда ТекущаяДата = ОбщегоНазначенияКлиент.ДатаСеанса(); #Иначе @@ -747,7 +762,10 @@ ДниГрафика = Новый ФиксированноеСоответствие(ДниГрафикаСоответствие); - УстановитьСнятьПризнакСоответствияРезультатовШаблону(ЭтотОбъект, Истина); + Если Не РезультатЗаполненПоШаблону Тогда + УстановитьСнятьМодифицированностьРезультата(ЭтотОбъект, Истина); + УстановитьСнятьПризнакСоответствияРезультатовШаблону(ЭтотОбъект, Истина); + КонецЕсли; КонецПроцедуры @@ -839,7 +857,8 @@ &НаСервере Процедура ЗаписатьДанныеГрафикаРаботыНаГод(НомерГода) - РегистрыСведений.КалендарныеГрафики.ЗаписатьДанныеГрафикаВРегистр(Объект.Ссылка, ДниГрафика, Дата(НомерГода, 1, 1), Дата(НомерГода, 12, 31), Истина); + РегистрыСведений.КалендарныеГрафики.ЗаписатьДанныеГрафикаВРегистр(Объект.Ссылка, ДниГрафика, Дата(НомерГода, 1, 1), + Дата(НомерГода, 12, 31), Истина); ЗаписатьПризнакРучногоРедактирования(Объект, НомерГода); КонецПроцедуры diff --git a/SSL/src/Catalogs/Календари/Календари.mdo b/SSL/src/Catalogs/Календари/Календари.mdo index b308beaf8..e1bc46045 100644 --- a/SSL/src/Catalogs/Календари/Календари.mdo +++ b/SSL/src/Catalogs/Календари/Календари.mdo @@ -313,7 +313,7 @@ Владелец графика - CatalogRef + DefinedType.ВладелецГрафикаРаботы ru diff --git a/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаВыбора/Form.form b/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаВыбора/Form.form index 93e44f698..bff4da66e 100644 --- a/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаВыбора/Form.form +++ b/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаВыбора/Form.form @@ -266,10 +266,6 @@ true - - Отбор - - diff --git a/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаВыбора/Module.bsl b/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаВыбора/Module.bsl index ae1aae4c6..227692a0b 100644 --- a/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаВыбора/Module.bsl +++ b/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаВыбора/Module.bsl @@ -11,12 +11,6 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - ОценкаПроизводительностиКлиентСервер.УстановитьЭлементОтбора( - Список.Отбор, - "Ссылка", - Параметры.Отбор, - ВидСравненияКомпоновкиДанных.НеВСписке); - ОценкаПроизводительностиКлиентСервер.УстановитьЭлементОтбора( Список.Отбор, "ПометкаУдаления", diff --git a/SSL/src/Catalogs/КлючевыеОперации/ObjectModule.bsl b/SSL/src/Catalogs/КлючевыеОперации/ObjectModule.bsl index 31c523ce8..e0a74e479 100644 --- a/SSL/src/Catalogs/КлючевыеОперации/ObjectModule.bsl +++ b/SSL/src/Catalogs/КлючевыеОперации/ObjectModule.bsl @@ -55,7 +55,7 @@ ТекстСообщения = НСтр("ru = 'Ключевая операция с приоритетом ""%1"" уже существует (%2).'"); ТекстСообщения = СтрЗаменить(ТекстСообщения, "%1", Строка(Приоритет)); ТекстСообщения = СтрЗаменить(ТекстСообщения, "%2", Выборка.Наименование); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Справочник.КлючевыеОперации.МодульОбъекта.ПередЗаписью'", Метаданные.ОсновнойЯзык.КодЯзыка), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Справочник.КлючевыеОперации.МодульОбъекта.ПередЗаписью'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , НСтр("ru = 'Оценка производительности'"), diff --git a/SSL/src/Catalogs/НаборыГруппДоступа/НаборыГруппДоступа.mdo b/SSL/src/Catalogs/НаборыГруппДоступа/НаборыГруппДоступа.mdo index 7dc05dd4c..e61eb7349 100644 --- a/SSL/src/Catalogs/НаборыГруппДоступа/НаборыГруппДоступа.mdo +++ b/SSL/src/Catalogs/НаборыГруппДоступа/НаборыГруппДоступа.mdo @@ -421,7 +421,7 @@ ru Форма списка - АПК:494 - допустимо, так как объем данных небольшой (от единиц до нескольких тысяч). + АПК:494 - №656 Соединение с вложенным запросом допустимо, так как объем данных небольшой (от единиц до нескольких тысяч). PersonalComputer MobileDevice diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаВыбора/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаСписка/Attributes/НеиспользуемыеНаборы/ExtInfo/ListSettings.dcss similarity index 100% rename from SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаВыбора/Attributes/Список/ExtInfo/ListSettings.dcss rename to SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаСписка/Attributes/НеиспользуемыеНаборы/ExtInfo/ListSettings.dcss diff --git a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаСписка/Form.form index 08f4cb28a..2914975ac 100644 --- a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаСписка/Form.form @@ -101,44 +101,277 @@ ГруппаСвойства 70 - - НаборыСвойств - 1 - - <key>ru</key> - <value>Наборы свойств</value> - - true - true - - true - - - НаборыСвойств - - true - false - None - Change - - Представление - 4 - - <key>ru</key> - <value>Набор</value> - + + СтраницыНаборы + 188 + + Основная + 190 + + НаборыСвойств + 1 + + <key>ru</key> + <value>Наборы свойств</value> + + true + true + + true + + + НаборыСвойств + + false + None + Change + + Представление + 4 + + <key>ru</key> + <value>Набор</value> + + true + true + + true + + + НаборыСвойств.Представление + + true + + ПредставлениеExtendedTooltip + 123 + Label + true + true + + Left + + + + ПредставлениеКонтекстноеМеню + 5 + true + + InputField + Enter + true + Left + true + + 20 + true + true + true + true + true + + Style.BorderColor + + Normal + + + + Ссылка + 139 + true + true + + + НаборыСвойств.Ссылка + + + СсылкаРасширеннаяПодсказка + 141 + Label + true + true + + Left + + + + СсылкаКонтекстноеМеню + 140 + true + + LabelField + Enter + true + Left + true + + true + true + + + + НаборыСвойствКоманднаяПанель + 3 + Left + + + DragCheck + НаборыСвойствПроверкаПеретаскивания + + + OnActivateRow + НаборыСвойствПриАктивизацииСтроки + + + Drag + НаборыСвойствПеретаскивание + + + BeforeRowChange + НаборыСвойствПередНачаломИзменения + + + НаборыСвойствСтрокаПоиска + 147 + + НаборыСвойствСтрокаПоискаРасширеннаяПодсказка + 149 + Label + true + true + + Left + + + + НаборыСвойствСтрокаПоискаКонтекстноеМеню + 148 + true + + НаборыСвойств + + true + + + + НаборыСвойствСостояниеПросмотра + 150 + + НаборыСвойствСостояниеПросмотраРасширеннаяПодсказка + 152 + Label + true + true + + Left + + + + НаборыСвойствСостояниеПросмотраКонтекстноеМеню + 151 + true + + ViewStatusAddition + НаборыСвойств + + true + + + + НаборыСвойствУправлениеПоиском + 153 + + НаборыСвойствУправлениеПоискомРасширеннаяПодсказка + 155 + Label + true + true + + Left + + + + НаборыСвойствУправлениеПоискомКонтекстноеМеню + 154 + true + + SearchControlAddition + НаборыСвойств + + true + + + + НаборыСвойствExtendedTooltip + 122 + Label + true + true + + Left + + + + НаборыСвойствКонтекстноеМеню + 2 + true + + Tree + true + true + true + true + MultiRow + 1 + 1 + AutoUse + AutoUse + true + true + false + false + Auto + Auto + true + true + true + + НаборыСвойств.НомерКартинки + + + CommonPicture.ПиктограммыЭлементов + + + Style.BorderColor + + SelectionPresentation + true + + + OnGetDataAtServer + НаборыСвойствПриПолученииДанныхНаСервере + + 60 + + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + true + ГруппаПользовательскихНастроек + + true true true - - НаборыСвойств.Представление - - true + + <key>ru</key> + <value>Основная</value> + - ПредставлениеExtendedTooltip - 123 + ОсновнаяРасширеннаяПодсказка + 191 Label true true @@ -146,41 +379,216 @@ Left - - ПредставлениеКонтекстноеМеню - 5 - true - - InputField - Enter - true - Left - true - - 20 - true - true - true - true - true - - Style.BorderColor - - Normal + Page + + Vertical + auto + false - - Ссылка - 139 + + Неиспользуемые + 192 + + НеиспользуемыеНаборы + 194 + + <key>ru</key> + <value>Неиспользуемые наборы</value> + + true + true + + true + + + НеиспользуемыеНаборы + + false + None + ListSettings + + НеиспользуемыеНаборыПредставление + 210 + + <key>ru</key> + <value>Представление</value> + + true + true + + true + + + НеиспользуемыеНаборы.Представление + + + НеиспользуемыеНаборыПредставлениеРасширеннаяПодсказка + 212 + Label + true + true + + Left + + + + НеиспользуемыеНаборыПредставлениеКонтекстноеМеню + 211 + true + + LabelField + Enter + true + Left + true + + true + true + + + None + + НеиспользуемыеНаборыКоманднаяПанель + 196 + Left + true + + + НеиспользуемыеНаборыСтрокаПоиска + 198 + + НеиспользуемыеНаборыСтрокаПоискаРасширеннаяПодсказка + 200 + Label + true + true + + Left + + + + НеиспользуемыеНаборыСтрокаПоискаКонтекстноеМеню + 199 + true + + НеиспользуемыеНаборы + + true + + + + НеиспользуемыеНаборыСостояниеПросмотра + 201 + + НеиспользуемыеНаборыСостояниеПросмотраРасширеннаяПодсказка + 203 + Label + true + true + + Left + + + + НеиспользуемыеНаборыСостояниеПросмотраКонтекстноеМеню + 202 + true + + ViewStatusAddition + НеиспользуемыеНаборы + + true + + + + НеиспользуемыеНаборыУправлениеПоиском + 204 + + НеиспользуемыеНаборыУправлениеПоискомРасширеннаяПодсказка + 206 + Label + true + true + + Left + + + + НеиспользуемыеНаборыУправлениеПоискомКонтекстноеМеню + 205 + true + + SearchControlAddition + НеиспользуемыеНаборы + + true + + + + НеиспользуемыеНаборыРасширеннаяПодсказка + 197 + Label + true + true + + Left + + + + НеиспользуемыеНаборыКонтекстноеМеню + 195 + true + + Tree + true + true + true + true + MultiRow + 1 + 1 + AutoUse + AutoUse + true + true + false + false + Auto + Auto + true + true + true + + НеиспользуемыеНаборы.DefaultPicture + + + CommonPicture.ПиктограммыЭлементов + + SelectionPresentation + true + + 60 + + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + true + + true true - - - НаборыСвойств.Ссылка - + + true + + + <key>ru</key> + <value>Неиспользуемые</value> + - СсылкаРасширеннаяПодсказка - 141 + НеиспользуемыеРасширеннаяПодсказка + 193 Label true true @@ -188,116 +596,25 @@ Left - - СсылкаКонтекстноеМеню - 140 - true - - LabelField - Enter - true - Left - true - - true - true + Page + + Vertical + auto + false - - НаборыСвойствКоманднаяПанель - 3 - Left - - - DragCheck - НаборыСвойствПроверкаПеретаскивания - - - OnActivateRow - НаборыСвойствПриАктивизацииСтроки - - - Drag - НаборыСвойствПеретаскивание - - - BeforeRowChange - НаборыСвойствПередНачаломИзменения - - - НаборыСвойствСтрокаПоиска - 147 - - НаборыСвойствСтрокаПоискаРасширеннаяПодсказка - 149 - Label - true - true - - Left - - - - НаборыСвойствСтрокаПоискаКонтекстноеМеню - 148 - true - - НаборыСвойств - - true - - - - НаборыСвойствСостояниеПросмотра - 150 - - НаборыСвойствСостояниеПросмотраРасширеннаяПодсказка - 152 - Label - true - true - - Left - - - - НаборыСвойствСостояниеПросмотраКонтекстноеМеню - 151 - true - - ViewStatusAddition - НаборыСвойств - - true - - - - НаборыСвойствУправлениеПоиском - 153 - - НаборыСвойствУправлениеПоискомРасширеннаяПодсказка - 155 - Label - true - true - - Left - - - - НаборыСвойствУправлениеПоискомКонтекстноеМеню - 154 - true - - SearchControlAddition - НаборыСвойств - - true - - + true + true + + true + + + <key>ru</key> + <value>Страницы наборы</value> + - НаборыСвойствExtendedTooltip - 122 + СтраницыНаборыРасширеннаяПодсказка + 189 Label true true @@ -305,50 +622,9 @@ Left - - НаборыСвойствКонтекстноеМеню - 2 - true - - Tree - true - true - true - true - MultiRow - 1 - 1 - AutoUse - AutoUse - true - true - false - false - Auto - Auto - true - true - true - - НаборыСвойств.НомерКартинки - - - CommonPicture.ПиктограммыЭлементов - - - Style.BorderColor - - SelectionPresentation - true - - 60 - - 0001-01-01T00:00:00 - 0001-01-01T00:00:00 - - - true - ГруппаПользовательскихНастроек + Pages + + Auto @@ -726,39 +1002,6 @@ СвойстваКонтекстноеМеню 39 - - СвойстваКонтекстноеМенюТолькоСоздать - 102 - - <key>ru</key> - <value>Создать</value> - - true - true - - true - - - СвойстваКонтекстноеМенюТолькоСоздатьExtendedTooltip - 124 - Label - true - true - - Left - - - Form.Command.Создать - Normal - Auto - true - true - UserCmds - - StdPicture.CreateListItem - - Auto - СвойстваКонтекстноеМенюПодменюДобавить 84 @@ -1057,44 +1300,49 @@ Auto + + ПоказатьНеиспользуемыеРеквизиты + 185 + true + true + + true + + + ПоказатьНеиспользуемыеРеквизиты + + Right + + OnChange + ПоказатьНеиспользуемыеРеквизитыПриИзменении + + + ПоказатьНеиспользуемыеРеквизитыРасширеннаяПодсказка + 187 + Label + true + true + + Left + + + + ПоказатьНеиспользуемыеРеквизитыКонтекстноеМеню + 186 + true + + CheckBoxField + Enter + true + Left + true + + Top true ФормаКоманднаяПанель -1 - - СвойстваТолькоСоздать - 101 - - <key>ru</key> - <value>Создать</value> - - true - true - - true - - - СвойстваТолькоСоздатьExtendedTooltip - 105 - Label - true - true - - Left - - - Form.Command.Создать - Normal - Auto - true - true - UserCmds - - StdPicture.CreateListItem - - Auto - СвойстваПодменюДобавить 80 @@ -1604,6 +1852,15 @@ true + + НаборыСвойств.КоличествоРеквизитов + + + НаборыСвойств.КоличествоСведений + + + НаборыСвойств.НаименованиеНаДругихЯзыках + НаборыСвойств.Родитель @@ -1613,6 +1870,9 @@ НаборыСвойств.ЭтоГруппа + + НаборыСвойств.ЭтоСведения +
    true
    ВЫБРАТЬ @@ -1624,27 +1884,9 @@ Наборы.ЭтоГруппа КАК ЭтоГруппа, Наборы.Наименование КАК Наименование, Наборы.Используется КАК Используется, - ВЫБОР - КОГДА Наборы.ЭтоГруппа - ТОГДА ПРЕДСТАВЛЕНИЕ(Наборы.Ссылка) - КОГДА &ЭтоНаборыДополнительныхСведений - ТОГДА ВЫБОР - КОГДА Наборы.КоличествоСведений = "" - ТОГДА ПРЕДСТАВЛЕНИЕ(Наборы.Ссылка) - КОГДА Наборы.КоличествоСведений <> "" - И &ЭтоОсновнойЯзык - ТОГДА Наборы.Наименование + " (" + Наборы.КоличествоСведений + ")" - ИНАЧЕ (ВЫРАЗИТЬ(ЕСТЬNULL(НаборыПредставления.Наименование, Наборы.Наименование) КАК СТРОКА(150))) + " (" + Наборы.КоличествоСведений + ")" - КОНЕЦ - ИНАЧЕ ВЫБОР - КОГДА Наборы.КоличествоРеквизитов = "" - ТОГДА ПРЕДСТАВЛЕНИЕ(Наборы.Ссылка) - КОГДА Наборы.КоличествоСведений <> "" - И &ЭтоОсновнойЯзык - ТОГДА Наборы.Наименование + " (" + Наборы.КоличествоРеквизитов + ")" - ИНАЧЕ (ВЫРАЗИТЬ(ЕСТЬNULL(НаборыПредставления.Наименование, Наборы.Наименование) КАК СТРОКА(150))) + " (" + Наборы.КоличествоРеквизитов + ")" - КОНЕЦ - КОНЕЦ КАК Представление, + ВЫРАЗИТЬ("" КАК СТРОКА(150)) КАК Представление, + &ЭтоНаборыДополнительныхСведений КАК ЭтоСведения, + НаборыПредставления.Наименование КАК НаименованиеНаДругихЯзыках, ВЫБОР КОГДА Наборы.ПометкаУдаления ТОГДА 1 @@ -1653,7 +1895,9 @@ КОГДА Наборы.Предопределенный ТОГДА 2 ИНАЧЕ 0 - КОНЕЦ КАК НомерКартинки + КОНЕЦ КАК НомерКартинки, + Наборы.КоличествоРеквизитов КАК КоличествоРеквизитов, + Наборы.КоличествоСведений КАК КоличествоСведений ИЗ Справочник.НаборыДополнительныхРеквизитовИСведений КАК Наборы ЛЕВОЕ СОЕДИНЕНИЕ Справочник.НаборыДополнительныхРеквизитовИСведений.Представления КАК НаборыПредставления @@ -1725,7 +1969,6 @@ true - FunctionalOption.ИспользоватьОбщиеДополнительныеРеквизитыИСведения ПометкаУдаления @@ -1855,7 +2098,6 @@ true - FunctionalOption.ИспользоватьОбщиеДополнительныеЗначения @@ -1979,6 +2221,53 @@ true + + ПоказатьНеиспользуемыеРеквизиты + + <key>ru</key> + <value>Показать неиспользуемые реквизиты</value> + + 12 + + Boolean + + + true + + + true + + + + НеиспользуемыеНаборы + + <key>ru</key> + <value>Неиспользуемые наборы</value> + + 14 + + DynamicList + + + true + + + true + + + ВЫБРАТЬ + ВЫБОР + КОГДА &ЭтоДополнительноеСведение + ТОГДА &ОбщиеДополнительныеСведения + ИНАЧЕ &ОбщиеДополнительныеРеквизиты + КОНЕЦ КАК Представление, + 0 КАК НомерКартинки + true + true + true + true + + ПереместитьВверх @@ -2117,8 +2406,7 @@ <id>8</id> <toolTip> <key>ru</key> - <value>Создать уникальный реквизит -(только для этого набора)</value> + <value>Создать уникальный реквизит</value> </toolTip> <use> <common>true</common> diff --git a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаСписка/Module.bsl index bed238b30..788b05f06 100644 --- a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаСписка/Module.bsl @@ -24,11 +24,9 @@ КонецЕсли; ЦветФормы = Элементы.Свойства.ЦветФона; - ОформитьНаборыИСвойства(); - - НастроитьИспользованиеКоманд(); НастроитьОтображениеНаборов(); + ОформитьНаборыИСвойства(); Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПоискИУдалениеДублей") Тогда Элементы.ПоискИУдалениеДублей.Видимость = Ложь; @@ -61,12 +59,6 @@ ВыбратьУказанныеСтроки(Параметр); КонецЕсли; - ИначеЕсли ИмяСобытия = "Запись_НаборКонстант" Тогда - - Если Источник = "ИспользоватьОбщиеДополнительныеЗначения" - ИЛИ Источник = "ИспользоватьОбщиеДополнительныеРеквизитыИСведения" Тогда - НастроитьИспользованиеКоманд(); - КонецЕсли; КонецЕсли; КонецПроцедуры @@ -79,9 +71,16 @@ Процедура ЭтоНаборыДополнительныхСведенийПриИзменении(Элемент) НастроитьОтображениеНаборов(); + ОформитьНаборыИСвойства(); КонецПроцедуры +&НаКлиенте +Процедура ПоказатьНеиспользуемыеРеквизитыПриИзменении(Элемент) + ПереключитьСписокНаборов(); + ПриИзмененииТекущегоНабора(); +КонецПроцедуры + #КонецОбласти #Область ОбработчикиСобытийЭлементовТаблицыФормыНаборыСвойств @@ -104,6 +103,10 @@ Процедура НаборыСвойствПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле) СтандартнаяОбработка = Ложь; + Если Строка = Неопределено Тогда + Возврат; + КонецЕсли; + Если Элементы.НаборыСвойств.ДанныеСтроки(Строка).ЭтоГруппа Тогда ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена; КонецЕсли; @@ -128,6 +131,43 @@ ДобавитьРеквизитВНабор(ПеретаскиваемыйЭлемент, Строка); КонецПроцедуры +&НаСервереБезКонтекста +Процедура НаборыСвойствПриПолученииДанныхНаСервере(ИмяЭлемента, Настройки, Строки) + + ЭтоОсновнойЯзык = (ТекущийЯзык() = Метаданные.ОсновнойЯзык); + + Для Каждого СтрокаДинамическогоСписка Из Строки Цикл + Данные = СтрокаДинамическогоСписка.Значение.Данные; + Если Данные.ЭтоГруппа Тогда + Данные.Представление = Строка(Данные.Ссылка); + Продолжить; + КонецЕсли; + + Если Данные.ЭтоСведения Тогда + Если Не ЗначениеЗаполнено(Данные.КоличествоСведений) Тогда + Данные.Представление = Строка(Данные.Ссылка); + Продолжить; + КонецЕсли; + Если ЗначениеЗаполнено(Данные.НаименованиеНаДругихЯзыках) Тогда + Данные.Представление = Данные.НаименованиеНаДругихЯзыках + " (" + Данные.КоличествоСведений + ")"; + Продолжить; + КонецЕсли; + Данные.Представление = Строка(Данные.Ссылка) + " (" + Данные.КоличествоСведений + ")"; + Иначе + Если Не ЗначениеЗаполнено(Данные.КоличествоРеквизитов) Тогда + Данные.Представление = Строка(Данные.Ссылка); + Продолжить; + КонецЕсли; + Если ЗначениеЗаполнено(Данные.НаименованиеНаДругихЯзыках) Тогда + Данные.Представление = Данные.НаименованиеНаДругихЯзыках + " (" + Данные.КоличествоРеквизитов + ")"; + Продолжить; + КонецЕсли; + Данные.Представление = Строка(Данные.Ссылка) + " (" + Данные.КоличествоРеквизитов + ")"; + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + #КонецОбласти #Область ОбработчикиСобытийЭлементовТаблицыФормыСвойства @@ -343,7 +383,7 @@ КопируемыйРеквизит.Вставить("ОбщиеЗначения", Элементы.Свойства.ТекущиеДанные.ОбщиеЗначения); КопируемыйРеквизит.Вставить("ВладелецДополнительныхЗначений", Элементы.Свойства.ТекущиеДанные.ВладелецДополнительныхЗначений); - Элементы.ВставитьРеквизит.Доступность = Истина; + Элементы.ВставитьРеквизит.Доступность = Не ПоказатьНеиспользуемыеРеквизиты; КонецПроцедуры &НаКлиенте @@ -416,7 +456,7 @@ ЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить(); ЭлементЦветаОформления = ЭлементУсловногоОформления.Оформление.Элементы.Найти("Font"); - ЭлементЦветаОформления.Значение = Новый Шрифт(, , Истина); + ЭлементЦветаОформления.Значение = ШрифтыСтиля.ОсновнойЭлементСписка; ЭлементЦветаОформления.Использование = Истина; ЭлементОтбораДанных = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); @@ -458,6 +498,27 @@ КонецПроцедуры +&НаКлиенте +Процедура ПереключитьСписокНаборов() + + Если Не ПоказатьНеиспользуемыеРеквизиты Тогда + Элементы.СтраницыНаборы.ТекущаяСтраница = Элементы.Основная; + Возврат; + КонецЕсли; + + Элементы.СтраницыНаборы.ТекущаяСтраница = Элементы.Неиспользуемые; + + ОбщегоНазначенияКлиентСервер.УстановитьПараметрДинамическогоСписка( + НеиспользуемыеНаборы, "ЭтоДополнительноеСведение", (ЭтоНаборыДополнительныхСведений = 1), Истина); + + ОбщегоНазначенияКлиентСервер.УстановитьПараметрДинамическогоСписка( + НеиспользуемыеНаборы, "ОбщиеДополнительныеСведения", НСтр("ru = 'Неиспользуемые дополнительные сведения'"), Истина); + + ОбщегоНазначенияКлиентСервер.УстановитьПараметрДинамическогоСписка( + НеиспользуемыеНаборы, "ОбщиеДополнительныеРеквизиты", НСтр("ru = 'Неиспользуемые дополнительные реквизиты'"), Истина); + +КонецПроцедуры + &НаСервереБезКонтекста Процедура ПреобразоватьСтрокиВСсылки(Описание) @@ -469,27 +530,6 @@ КонецПроцедуры -&НаСервере -Процедура НастроитьИспользованиеКоманд() - - Если ПолучитьФункциональнуюОпцию("ИспользоватьОбщиеДополнительныеЗначения") - ИЛИ ПолучитьФункциональнуюОпцию("ИспользоватьОбщиеДополнительныеРеквизитыИСведения") Тогда - - Элементы.СвойстваТолькоСоздать.Видимость = Ложь; - Элементы.СвойстваПодменюДобавить.Видимость = Истина; - - Элементы.СвойстваКонтекстноеМенюТолькоСоздать.Видимость = Ложь; - Элементы.СвойстваКонтекстноеМенюПодменюДобавить.Видимость = Истина - Иначе - Элементы.СвойстваТолькоСоздать.Видимость = Истина; - Элементы.СвойстваПодменюДобавить.Видимость = Ложь; - - Элементы.СвойстваКонтекстноеМенюТолькоСоздать.Видимость = Истина; - Элементы.СвойстваКонтекстноеМенюПодменюДобавить.Видимость = Ложь - КонецЕсли; - -КонецПроцедуры - &НаСервере Процедура НастроитьОтображениеНаборов() @@ -526,6 +566,8 @@ Элементы.СвойстваОбщиеЗначения.Подсказка = НСтр("ru = 'Сведение использует список значений сведения-образца.'"); + Элементы.ПоказатьНеиспользуемыеРеквизиты.Заголовок = НСтр("ru = 'Показать неиспользуемые сведения'"); + Элементы.СвойстваОбщее.Заголовок = НСтр("ru = 'Общее'"); Элементы.СвойстваОбщее.Подсказка = НСтр("ru = 'Общее дополнительное сведение, которое используется в |нескольких наборах дополнительных сведений.'"); @@ -555,6 +597,8 @@ Элементы.СвойстваОбщиеЗначения.Подсказка = НСтр("ru = 'Реквизит использует список значений реквизита-образца.'"); + Элементы.ПоказатьНеиспользуемыеРеквизиты.Заголовок = НСтр("ru = 'Показать неиспользуемые реквизиты'"); + Элементы.СвойстваОбщее.Заголовок = НСтр("ru = 'Общий'"); Элементы.СвойстваОбщее.Подсказка = НСтр("ru = 'Общий дополнительный реквизит, который используется в |нескольких наборах дополнительных реквизитов.'"); @@ -605,7 +649,10 @@ &НаКлиенте Процедура ПриИзмененииТекущегоНабора() - Если Элементы.НаборыСвойств.ТекущиеДанные = Неопределено Тогда + Если ПоказатьНеиспользуемыеРеквизиты Тогда + ТекущийНабор = Неопределено; + ПриИзмененииТекущегоНабораНаСервере(); + ИначеЕсли Элементы.НаборыСвойств.ТекущиеДанные = Неопределено Тогда Если ЗначениеЗаполнено(ТекущийНабор) Тогда ТекущийНабор = Неопределено; ПриИзмененииТекущегоНабораНаСервере(); @@ -634,22 +681,22 @@ Если Элементы.Свойства.ТекущиеДанные <> Неопределено Тогда Если ЭтоНаборыДополнительныхСведений Тогда - Если Элементы.Свойства.ТекущиеДанные.Общее Тогда - ТекстВопроса = НСтр("ru ='Исключить текущее общее сведения из набора?'"); + Если Не ПоказатьНеиспользуемыеРеквизиты Тогда + ТекстВопроса = НСтр("ru = 'Исключить сведение из набора?'"); ИначеЕсли Элементы.Свойства.ТекущиеДанные.ПометкаУдаления Тогда - ТекстВопроса = НСтр("ru ='Снять с текущего сведения пометку на удаление?'"); + ТекстВопроса = НСтр("ru = 'Снять с текущего сведения пометку на удаление?'"); Иначе - ТекстВопроса = НСтр("ru ='Пометить текущее сведение на удаление?'"); + ТекстВопроса = НСтр("ru = 'Пометить текущее сведение на удаление?'"); КонецЕсли; Иначе - Если Элементы.Свойства.ТекущиеДанные.Общее Тогда - ТекстВопроса = НСтр("ru ='Исключить текущий общий реквизит из набора?'"); + Если Не ПоказатьНеиспользуемыеРеквизиты Тогда + ТекстВопроса = НСтр("ru = 'Исключить реквизит из набора?'"); ИначеЕсли Элементы.Свойства.ТекущиеДанные.ПометкаУдаления Тогда - ТекстВопроса = НСтр("ru ='Снять с текущего реквизита пометку на удаление?'"); + ТекстВопроса = НСтр("ru = 'Снять с текущего реквизита пометку на удаление?'"); Иначе - ТекстВопроса = НСтр("ru ='Пометить текущий реквизит на удаление?'"); + ТекстВопроса = НСтр("ru = 'Пометить текущий реквизит на удаление?'"); КонецЕсли; КонецЕсли; @@ -678,7 +725,8 @@ Процедура ПриИзмененииТекущегоНабораНаСервере() Если ЗначениеЗаполнено(ТекущийНабор) - И НЕ ТекущийНаборЭтоГруппа Тогда + И НЕ ТекущийНаборЭтоГруппа + Или ПоказатьНеиспользуемыеРеквизиты Тогда ТекущаяДоступность = Истина; Если Элементы.Свойства.ЦветФона <> Элементы.НаборыСвойств.ЦветФона Тогда @@ -707,6 +755,7 @@ Процедура СвойстваУстановитьДоступностьКоманд(Контекст) Элементы = Контекст.Элементы; + ПоказатьНеиспользуемыеРеквизиты = Контекст.ПоказатьНеиспользуемыеРеквизиты; ОбщаяДоступность = НЕ Элементы.Свойства.ТолькоПросмотр; ДоступностьВставки = ОбщаяДоступность И (Контекст.КопируемыйРеквизит <> Неопределено); @@ -714,12 +763,13 @@ ДоступностьДляСтроки = ОбщаяДоступность И Контекст.Элементы.Свойства.ТекущаяСтрока <> Неопределено; + ОбщаяДоступность = ОбщаяДоступность И Не ПоказатьНеиспользуемыеРеквизиты; + // Настройка команд командной панели. Элементы.ДобавитьИзНабора.Доступность = ОбщаяДоступность; Элементы.СвойстваСоздать.Доступность = ОбщаяДоступность; - Элементы.СвойстваТолькоСоздать.Доступность = ОбщаяДоступность; - Элементы.СвойстваСкопировать.Доступность = ДоступностьДляСтроки; + Элементы.СвойстваСкопировать.Доступность = ДоступностьДляСтроки И Не ПоказатьНеиспользуемыеРеквизиты; Элементы.СвойстваИзменить.Доступность = ДоступностьДляСтроки; Элементы.СвойстваПометитьНаУдаление.Доступность = ДоступностьДляСтроки; @@ -727,19 +777,18 @@ Элементы.СвойстваПереместитьВниз.Доступность = ДоступностьДляСтроки; Элементы.КопироватьРеквизит.Доступность = ДоступностьДляСтроки; - Элементы.ВставитьРеквизит.Доступность = ДоступностьВставки; + Элементы.ВставитьРеквизит.Доступность = ДоступностьВставки И Не ПоказатьНеиспользуемыеРеквизиты; // Настройка команд контекстного меню. Элементы.СвойстваКонтекстноеМенюСоздать.Доступность = ОбщаяДоступность; - Элементы.СвойстваКонтекстноеМенюТолькоСоздать.Доступность = ОбщаяДоступность; Элементы.СвойстваКонтекстноеМенюДобавитьИзНабора.Доступность = ОбщаяДоступность; - Элементы.СвойстваКонтекстноеМенюСкопировать.Доступность = ДоступностьДляСтроки; + Элементы.СвойстваКонтекстноеМенюСкопировать.Доступность = ДоступностьДляСтроки И Не ПоказатьНеиспользуемыеРеквизиты; Элементы.СвойстваКонтекстноеМенюИзменить.Доступность = ДоступностьДляСтроки; Элементы.СвойстваКонтекстноеМенюПометитьНаУдаление.Доступность = ДоступностьДляСтроки; Элементы.СвойстваКонтекстноеМенюКопироватьРеквизит.Доступность = ДоступностьДляСтроки; - Элементы.СвойстваКонтекстноеМенюВставитьРеквизит.Доступность = ДоступностьВставки; + Элементы.СвойстваКонтекстноеМенюВставитьРеквизит.Доступность = ДоступностьВставки И Не ПоказатьНеиспользуемыеРеквизиты; КонецПроцедуры @@ -751,52 +800,102 @@ Запрос.УстановитьПараметр("ЭтоОсновнойЯзык", ТекущийЯзык() = Метаданные.ОсновнойЯзык); Запрос.УстановитьПараметр("КодЯзыка", ТекущийЯзык().КодЯзыка); - Запрос.Текст = - "ВЫБРАТЬ - | СвойстваНаборов.НомерСтроки, - | СвойстваНаборов.Свойство, - | СвойстваНаборов.ПометкаУдаления, - | ВЫБОР - | КОГДА &ЭтоОсновнойЯзык - | ТОГДА Свойства.Заголовок - | ИНАЧЕ ВЫРАЗИТЬ(ЕСТЬNULL(СвойстваПредставления.Заголовок, Свойства.Заголовок) КАК СТРОКА(150)) - | КОНЕЦ КАК Заголовок, - | Свойства.ВладелецДополнительныхЗначений, - | Свойства.ЗаполнятьОбязательно, - | Свойства.ТипЗначения КАК ТипЗначения, - | ВЫБОР - | КОГДА Свойства.Ссылка ЕСТЬ NULL - | ТОГДА ИСТИНА - | КОГДА Свойства.НаборСвойств = ЗНАЧЕНИЕ(Справочник.НаборыДополнительныхРеквизитовИСведений.ПустаяСсылка) - | ТОГДА ИСТИНА - | ИНАЧЕ ЛОЖЬ - | КОНЕЦ КАК Общее, - | ВЫБОР - | КОГДА СвойстваНаборов.ПометкаУдаления = ИСТИНА - | ТОГДА 4 - | ИНАЧЕ 3 - | КОНЕЦ КАК НомерКартинки - |ИЗ - | Справочник.НаборыДополнительныхРеквизитовИСведений.ДополнительныеРеквизиты КАК СвойстваНаборов - | ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК Свойства - | ПО СвойстваНаборов.Свойство = Свойства.Ссылка - | ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.Представления КАК СвойстваПредставления - | ПО (СвойстваПредставления.Ссылка = Свойства.Ссылка) - | И СвойстваПредставления.КодЯзыка = &КодЯзыка - |ГДЕ - | СвойстваНаборов.Ссылка = &Набор - | - |УПОРЯДОЧИТЬ ПО - | СвойстваНаборов.НомерСтроки - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | Наборы.ВерсияДанных КАК ВерсияДанных - |ИЗ - | Справочник.НаборыДополнительныхРеквизитовИСведений КАК Наборы - |ГДЕ - | Наборы.Ссылка = &Набор"; + Если Не ПоказатьНеиспользуемыеРеквизиты Тогда + Запрос.Текст = + "ВЫБРАТЬ + | СвойстваНаборов.НомерСтроки, + | СвойстваНаборов.Свойство, + | СвойстваНаборов.ПометкаУдаления, + | ВЫБОР + | КОГДА &ЭтоОсновнойЯзык + | ТОГДА Свойства.Заголовок + | ИНАЧЕ ВЫРАЗИТЬ(ЕСТЬNULL(СвойстваПредставления.Заголовок, Свойства.Заголовок) КАК СТРОКА(150)) + | КОНЕЦ КАК Заголовок, + | Свойства.ВладелецДополнительныхЗначений, + | Свойства.ЗаполнятьОбязательно, + | Свойства.ТипЗначения КАК ТипЗначения, + | ИСТИНА КАК Общее, + | ВЫБОР + | КОГДА СвойстваНаборов.ПометкаУдаления = ИСТИНА + | ТОГДА 4 + | ИНАЧЕ 3 + | КОНЕЦ КАК НомерКартинки + |ИЗ + | Справочник.НаборыДополнительныхРеквизитовИСведений.ДополнительныеРеквизиты КАК СвойстваНаборов + | ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК Свойства + | ПО СвойстваНаборов.Свойство = Свойства.Ссылка + | ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.Представления КАК СвойстваПредставления + | ПО (СвойстваПредставления.Ссылка = Свойства.Ссылка) + | И СвойстваПредставления.КодЯзыка = &КодЯзыка + |ГДЕ + | СвойстваНаборов.Ссылка = &Набор + | + |УПОРЯДОЧИТЬ ПО + | СвойстваНаборов.НомерСтроки + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | Наборы.ВерсияДанных КАК ВерсияДанных + |ИЗ + | Справочник.НаборыДополнительныхРеквизитовИСведений КАК Наборы + |ГДЕ + | Наборы.Ссылка = &Набор"; + Иначе + Запрос.Текст = + "ВЫБРАТЬ + | Свойства.Ссылка КАК Свойство, + | Свойства.ПометкаУдаления КАК ПометкаУдаления, + | ВЫБОР + | КОГДА &ЭтоОсновнойЯзык + | ТОГДА Свойства.Заголовок + | ИНАЧЕ ВЫРАЗИТЬ(ЕСТЬNULL(СвойстваПредставления.Заголовок, Свойства.Заголовок) КАК СТРОКА(150)) + | КОНЕЦ КАК Заголовок, + | Свойства.ВладелецДополнительныхЗначений, + | Свойства.ТипЗначения КАК ТипЗначения, + | ИСТИНА КАК Общее, + | ВЫБОР + | КОГДА Свойства.ПометкаУдаления = ИСТИНА + | ТОГДА 4 + | ИНАЧЕ 3 + | КОНЕЦ КАК НомерКартинки, + | ВЫБОР + | КОГДА &ЭтоОсновнойЯзык + | ТОГДА Свойства.Подсказка + | ИНАЧЕ ВЫРАЗИТЬ(ЕСТЬNULL(СвойстваПредставления.Подсказка, Свойства.Подсказка) КАК СТРОКА(150)) + | КОНЕЦ КАК Подсказка, + | ВЫБОР + | КОГДА &ЭтоОсновнойЯзык + | ТОГДА Свойства.ЗаголовокФормыЗначения + | ИНАЧЕ ВЫРАЗИТЬ(ЕСТЬNULL(СвойстваПредставления.ЗаголовокФормыЗначения, Свойства.ЗаголовокФормыЗначения) КАК СТРОКА(150)) + | КОНЕЦ КАК ЗаголовокФормыЗначения, + | ВЫБОР + | КОГДА &ЭтоОсновнойЯзык + | ТОГДА Свойства.ЗаголовокФормыВыбораЗначения + | ИНАЧЕ ВЫРАЗИТЬ(ЕСТЬNULL(СвойстваПредставления.ЗаголовокФормыВыбораЗначения, Свойства.ЗаголовокФормыВыбораЗначения) КАК СТРОКА(150)) + | КОНЕЦ КАК ЗаголовокФормыВыбораЗначения + |ИЗ + | ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК Свойства + | ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.Представления КАК СвойстваПредставления + | ПО Свойства.Ссылка = СвойстваПредставления.Ссылка + | И СвойстваПредставления.КодЯзыка = &КодЯзыка + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.НаборыДополнительныхРеквизитовИСведений.[ИмяТаблицы] КАК СоставНабора + | ПО Свойства.Ссылка = СоставНабора.Свойство + | + |ГДЕ + | Свойства.ЭтоДополнительноеСведение = &ЭтоДополнительноеСведение + | И СоставНабора.Свойство ЕСТЬ NULL + | + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ""ВерсияДанных"" КАК ВерсияДанных"; + + Запрос.Текст = СтрЗаменить(Запрос.Текст, "[ИмяТаблицы]", + ?(ЭтоНаборыДополнительныхСведений, "ДополнительныеСведения", "ДополнительныеРеквизиты")); + Запрос.УстановитьПараметр("ЭтоДополнительноеСведение", (ЭтоНаборыДополнительныхСведений = 1)); + КонецЕсли; Если ЭтоНаборыДополнительныхСведений Тогда Запрос.Текст = СтрЗаменить( @@ -990,6 +1089,24 @@ ЭлементБлокировки.УстановитьЗначение("Ссылка", ТекущийНабор); КонецЕсли; + Если ПоказатьНеиспользуемыеРеквизиты Тогда + НачатьТранзакцию(); + Попытка + Блокировка.Заблокировать(); + + Строка = Свойства.НайтиПоИдентификатору(Элементы.Свойства.ТекущаяСтрока); + ИзменитьПометкуУдаленияИВладельцаЗначений(Строка.Свойство, Неопределено); + ПриИзмененииТекущегоНабораНаСервере(); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + + Возврат; + КонецЕсли; + Попытка ЗаблокироватьДанныеДляРедактирования(ТекущийНабор); НачатьТранзакцию(); @@ -1071,7 +1188,6 @@ ТекущийНаборОбъект.Записать(); ИзменитьПометкуУдаленияИВладельцаЗначений( - ТекущийНаборОбъект.Ссылка, ТабличнаяЧасть[Индекс].Свойство, ТабличнаяЧасть[Индекс].ПометкаУдаления); КонецЕсли; @@ -1094,7 +1210,7 @@ КонецПроцедуры &НаСервере -Процедура ИзменитьПометкуУдаленияИВладельцаЗначений(ТекущийНабор, ТекущееСвойство, ПометкаУдаленияСвойства) +Процедура ИзменитьПометкуУдаленияИВладельцаЗначений(ТекущееСвойство, ПометкаУдаленияСвойства) СтарыйВладелецЗначений = ТекущееСвойство; @@ -1103,91 +1219,92 @@ СвойствоОбъект = ТекущееСвойство.ПолучитьОбъект(); - Если ЗначениеЗаполнено(СвойствоОбъект.НаборСвойств) Тогда + Если ПометкаУдаленияСвойства = Неопределено Тогда + ПометкаУдаленияСвойства = Не СвойствоОбъект.ПометкаУдаления; + КонецЕсли; + + Если ПометкаУдаленияСвойства Тогда + // При пометке уникального свойства: + // - пометить свойство, + // - если есть созданные по образцу не помеченные на удаление + // тогда установить нового владельца значений, + // и всем свойствам указать новый образец, + // иначе пометить на удаление все значения. + СвойствоОбъект.ПометкаУдаления = Истина; - Если ПометкаУдаленияСвойства Тогда - // При пометке уникального свойства: - // - пометить свойство, - // - если есть созданные по образцу не помеченные на удаление - // тогда установить нового владельца значений, - // и всем свойствам указать новый образец, - // иначе пометить на удаление все значения. - СвойствоОбъект.ПометкаУдаления = Истина; - - Если НЕ ЗначениеЗаполнено(СвойствоОбъект.ВладелецДополнительныхЗначений) Тогда - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("Свойство", СвойствоОбъект.Ссылка); - Запрос.Текст = - "ВЫБРАТЬ - | Свойства.Ссылка, - | Свойства.ПометкаУдаления - |ИЗ - | ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК Свойства - |ГДЕ - | Свойства.ВладелецДополнительныхЗначений = &Свойство"; - Выгрузка = Запрос.Выполнить().Выгрузить(); - НайденнаяСтрока = Выгрузка.Найти(Ложь, "ПометкаУдаления"); - Если НайденнаяСтрока <> Неопределено Тогда - НовыйВладелецЗначений = НайденнаяСтрока.Ссылка; - СвойствоОбъект.ВладелецДополнительныхЗначений = НовыйВладелецЗначений; - Для каждого Строка Из Выгрузка Цикл - ТекущийОбъект = Строка.Ссылка.ПолучитьОбъект(); - Если ТекущийОбъект.Ссылка = НовыйВладелецЗначений Тогда - ТекущийОбъект.ВладелецДополнительныхЗначений = Неопределено; - Иначе - ТекущийОбъект.ВладелецДополнительныхЗначений = НовыйВладелецЗначений; - КонецЕсли; - ТекущийОбъект.Записать(); - КонецЦикла; - Иначе - НоваяПометкаЗначений = Истина; - КонецЕсли; - КонецЕсли; - СвойствоОбъект.Записать(); - Иначе - Если СвойствоОбъект.ПометкаУдаления Тогда - СвойствоОбъект.ПометкаУдаления = Ложь; - СвойствоОбъект.Записать(); - КонецЕсли; - // При снятии пометки с уникального свойства: - // - снять пометку со свойства, - // - если свойство создано по образцу - // тогда если образец помечен на удаление - // тогда установить нового владельца значений (текущего) - // для всех свойств и снять пометку удаления со значений - // иначе снять пометку удаления со значений. - Если НЕ ЗначениеЗаполнено(СвойствоОбъект.ВладелецДополнительныхЗначений) Тогда - НоваяПометкаЗначений = Ложь; - - ИначеЕсли ОбщегоНазначения.ЗначениеРеквизитаОбъекта( - СвойствоОбъект.ВладелецДополнительныхЗначений, "ПометкаУдаления") Тогда - - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("Свойство", СвойствоОбъект.ВладелецДополнительныхЗначений); - Запрос.Текст = - "ВЫБРАТЬ - | Свойства.Ссылка КАК Ссылка - |ИЗ - | ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК Свойства - |ГДЕ - | Свойства.ВладелецДополнительныхЗначений = &Свойство"; - Массив = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); - Массив.Добавить(СвойствоОбъект.ВладелецДополнительныхЗначений); - НовыйВладелецЗначений = СвойствоОбъект.Ссылка; - Для каждого ТекущаяСсылка Из Массив Цикл - Если ТекущаяСсылка = НовыйВладелецЗначений Тогда - Продолжить; + Если НЕ ЗначениеЗаполнено(СвойствоОбъект.ВладелецДополнительныхЗначений) Тогда + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("Свойство", СвойствоОбъект.Ссылка); + Запрос.Текст = + "ВЫБРАТЬ + | Свойства.Ссылка, + | Свойства.ПометкаУдаления + |ИЗ + | ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК Свойства + |ГДЕ + | Свойства.ВладелецДополнительныхЗначений = &Свойство"; + Выгрузка = Запрос.Выполнить().Выгрузить(); + НайденнаяСтрока = Выгрузка.Найти(Ложь, "ПометкаУдаления"); + Если НайденнаяСтрока <> Неопределено Тогда + НовыйВладелецЗначений = НайденнаяСтрока.Ссылка; + СвойствоОбъект.ВладелецДополнительныхЗначений = НовыйВладелецЗначений; + Для каждого Строка Из Выгрузка Цикл + ТекущийОбъект = Строка.Ссылка.ПолучитьОбъект(); + Если ТекущийОбъект.Ссылка = НовыйВладелецЗначений Тогда + ТекущийОбъект.ВладелецДополнительныхЗначений = Неопределено; + Иначе + ТекущийОбъект.ВладелецДополнительныхЗначений = НовыйВладелецЗначений; КонецЕсли; - ТекущийОбъект = ТекущаяСсылка.ПолучитьОбъект(); - ТекущийОбъект.ВладелецДополнительныхЗначений = НовыйВладелецЗначений; ТекущийОбъект.Записать(); КонецЦикла; - СтарыйВладелецЗначений = СвойствоОбъект.ВладелецДополнительныхЗначений; - СвойствоОбъект.ВладелецДополнительныхЗначений = Неопределено; - СвойствоОбъект.Записать(); - НоваяПометкаЗначений = Ложь; + Иначе + НоваяПометкаЗначений = Истина; КонецЕсли; КонецЕсли; + СвойствоОбъект.Записать(); + Иначе + Если СвойствоОбъект.ПометкаУдаления Тогда + СвойствоОбъект.ПометкаУдаления = Ложь; + СвойствоОбъект.Записать(); + КонецЕсли; + // При снятии пометки с уникального свойства: + // - снять пометку со свойства, + // - если свойство создано по образцу + // тогда если образец помечен на удаление + // тогда установить нового владельца значений (текущего) + // для всех свойств и снять пометку удаления со значений + // иначе снять пометку удаления со значений. + Если НЕ ЗначениеЗаполнено(СвойствоОбъект.ВладелецДополнительныхЗначений) Тогда + НоваяПометкаЗначений = Ложь; + + ИначеЕсли ОбщегоНазначения.ЗначениеРеквизитаОбъекта( + СвойствоОбъект.ВладелецДополнительныхЗначений, "ПометкаУдаления") Тогда + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("Свойство", СвойствоОбъект.ВладелецДополнительныхЗначений); + Запрос.Текст = + "ВЫБРАТЬ + | Свойства.Ссылка КАК Ссылка + |ИЗ + | ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК Свойства + |ГДЕ + | Свойства.ВладелецДополнительныхЗначений = &Свойство"; + Массив = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); + Массив.Добавить(СвойствоОбъект.ВладелецДополнительныхЗначений); + НовыйВладелецЗначений = СвойствоОбъект.Ссылка; + Для каждого ТекущаяСсылка Из Массив Цикл + Если ТекущаяСсылка = НовыйВладелецЗначений Тогда + Продолжить; + КонецЕсли; + ТекущийОбъект = ТекущаяСсылка.ПолучитьОбъект(); + ТекущийОбъект.ВладелецДополнительныхЗначений = НовыйВладелецЗначений; + ТекущийОбъект.Записать(); + КонецЦикла; + СтарыйВладелецЗначений = СвойствоОбъект.ВладелецДополнительныхЗначений; + СвойствоОбъект.ВладелецДополнительныхЗначений = Неопределено; + СвойствоОбъект.Записать(); + НоваяПометкаЗначений = Ложь; + КонецЕсли; КонецЕсли; Если НоваяПометкаЗначений = Неопределено diff --git a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаЭлемента/Form.form index 3f5796e97..bf166b903 100644 --- a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаЭлемента/Form.form @@ -138,39 +138,6 @@ <textSize>Normal</textSize> </extInfo> </items> - <items xsi:type="form:FormField"> - <name>ДополнительныеРеквизитыПометкаУдаления</name> - <id>81</id> - <visible>true</visible> - <enabled>true</enabled> - <userVisible> - <common>true</common> - </userVisible> - <dataPath xsi:type="form:DataPath"> - <segments>Объект.ДополнительныеРеквизиты.ПометкаУдаления</segments> - </dataPath> - <extendedTooltip> - <name>ДополнительныеРеквизитыПометкаУдаленияExtendedTooltip</name> - <id>100</id> - <type>Label</type> - <autoMaxWidth>true</autoMaxWidth> - <autoMaxHeight>true</autoMaxHeight> - <extInfo xsi:type="form:LabelDecorationExtInfo"> - <horizontalAlign>Left</horizontalAlign> - </extInfo> - </extendedTooltip> - <contextMenu> - <name>ДополнительныеРеквизитыПометкаУдаленияКонтекстноеМеню</name> - <id>82</id> - <autoFill>true</autoFill> - </contextMenu> - <type>CheckBoxField</type> - <editMode>Auto</editMode> - <showInHeader>true</showInHeader> - <headerHorizontalAlign>Left</headerHorizontalAlign> - <showInFooter>true</showInFooter> - <extInfo xsi:type="form:CheckBoxFieldExtInfo"/> - </items> <commandBarLocation>None</commandBarLocation> <autoCommandBar> <name>ДополнительныеРеквизитыКоманднаяПанель</name> @@ -346,39 +313,6 @@ <textSize>Normal</textSize> </extInfo> </items> - <items xsi:type="form:FormField"> - <name>ДополнительныеСведенияПометкаУдаления</name> - <id>92</id> - <visible>true</visible> - <enabled>true</enabled> - <userVisible> - <common>true</common> - </userVisible> - <dataPath xsi:type="form:DataPath"> - <segments>Объект.ДополнительныеСведения.ПометкаУдаления</segments> - </dataPath> - <extendedTooltip> - <name>ДополнительныеСведенияПометкаУдаленияExtendedTooltip</name> - <id>103</id> - <type>Label</type> - <autoMaxWidth>true</autoMaxWidth> - <autoMaxHeight>true</autoMaxHeight> - <extInfo xsi:type="form:LabelDecorationExtInfo"> - <horizontalAlign>Left</horizontalAlign> - </extInfo> - </extendedTooltip> - <contextMenu> - <name>ДополнительныеСведенияПометкаУдаленияКонтекстноеМеню</name> - <id>93</id> - <autoFill>true</autoFill> - </contextMenu> - <type>CheckBoxField</type> - <editMode>Auto</editMode> - <showInHeader>true</showInHeader> - <headerHorizontalAlign>Left</headerHorizontalAlign> - <showInFooter>true</showInFooter> - <extInfo xsi:type="form:CheckBoxFieldExtInfo"/> - </items> <commandBarLocation>None</commandBarLocation> <autoCommandBar> <name>ДополнительныеСведенияКоманднаяПанель</name> diff --git a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Help/ru.html b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Help/ru.html index 07e74d20a..6f38bef4c 100644 --- a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Help/ru.html +++ b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Help/ru.html @@ -3,83 +3,125 @@ <p>Можно настроить наборы дополнительных свойств для определенных объектов программы. </p> <p>Способ хранения дополнительного свойства в программе и место размещения в окне объекта программы зависит от типа свойства: </p> <ul><li><strong>Дополнительные реквизиты</strong> - хранятся в самом элементе справочника или документе (могут размещаться в специальном разделе или на специальной вкладке). Создаются для реализации таких свойств, которые являются неотъемлемой частью объекта, вводятся при его редактировании и доступны для редактирования тем же пользователям, которым доступен и сам объект со свойствами. -</li><li><strong>Дополнительные сведения</strong> - предназначены для хранения сведений об элементе справочника или документе, которые не являются его неотъемлемой частью. Доступны, как правило, для просмотра и/или редактирования пользователям, которые не имеют доступа к самому объекту. Редактируются в отдельном окне, которое можно открыть из окна объекта.</li></ul><p>Для разных объектов программы может быть предусмотрено использование дополнительных реквизитов и сведений в разных сочетаниях: или дополнительных реквизитов и сведений, или дополнительных реквизитов, или дополнительных сведений.</p> +</li> +<li><strong>Дополнительные сведения</strong> - предназначены для хранения сведений об элементе справочника или документе, которые не являются его неотъемлемой частью. Доступны, как правило, для просмотра и/или редактирования пользователям, которые не имеют доступа к самому объекту. Редактируются в отдельном окне, которое можно открыть из окна объекта.</li></ul><p>Для разных объектов программы может быть предусмотрено использование дополнительных реквизитов и сведений в разных сочетаниях: или дополнительных реквизитов и сведений, или дополнительных реквизитов, или дополнительных сведений.</p> <p>Для того чтобы использовать дополнительные свойства, необходимо включить флажок <strong>Дополнительные реквизиты и сведения</strong> в разделе <strong>Администрирование - Общие настройки</strong>. После этого становятся доступными соответствующие команды.</p> <p>Работа с дополнительными реквизитами (сведениями) осуществляется в списках, которые открываются по команде <strong>Дополнительные реквизиты</strong> или <strong>Дополнительные сведения</strong> в разделе <strong>Администрирование - Общие настройки</strong>. </p> <p>Список наборов дополнительных реквизитов можно также открыть из объектов программы, для которых они настроены, по команде <strong>Еще</strong> <strong>- Изменить состав дополнительных реквизитов</strong>. </p> <p>Список наборов дополнительных сведений можно также открыть по команде <strong>Еще</strong> - <strong>Изменить состав дополнительных </strong><strong>сведений</strong> из окна <a href="CommonForm.РедактированиеДополнительныхСведений/Help">Дополнительные сведения</a> объекта программы.</p> <p>Список <strong>Дополнительные реквизиты</strong> (<strong>сведения</strong>) представляет собой таблицу из двух частей: </p> <ul><li>В левой части располагаются наборы дополнительных реквизитов и сведений, назначенных справочникам или документам, которые показаны в виде групп. Группы в наборах дополнительных реквизитов и сведений соответствуют некоему состоянию объекта (его виду), например, для номенклатуры наборы по имени соответствуют видам номенклатуры. -</li><li>В правой части в виде таблицы располагается список дополнительных реквизитов (сведений), входящих в выделенный набор. Жирным шрифтом в списке дополнительных реквизитов отражаются реквизиты, обязательные для заполнения. Для дополнительных сведений такая возможность не предусмотрена. -</li><li>В таблице выводится: +</li> +<li>В правой части в виде таблицы располагается список дополнительных реквизитов (сведений), входящих в выделенный набор. Жирным шрифтом в списке дополнительных реквизитов отражаются реквизиты, обязательные для заполнения. Для дополнительных сведений такая возможность не предусмотрена. +</li> +<li>В таблице выводится: <ul><li><strong>Дополнительный реквизит</strong> (<strong>сведение</strong>) - включает перечень наименований дополнительных реквизитов (сведений); -</li><li><strong>Тип значения</strong> - указывается тип дополнительных реквизитов (сведений) и количество значений.</li></ul></li></ul><p>Предопределенные наборы дополнительных реквизитов и сведений соответствуют объектам программы (спискам или документам), в которых можно использовать дополнительные реквизиты и сведения. Добавление новых наборов в этом списке невозможно. Наборы автоматически создаются при создании групп в списках. </p> +</li> +<li><strong>Тип значения</strong> - указывается тип дополнительных реквизитов (сведений) и количество значений.</li></ul></li></ul><p>Предопределенные наборы дополнительных реквизитов и сведений соответствуют объектам программы (спискам или документам), в которых можно использовать дополнительные реквизиты и сведения. Добавление новых наборов в этом списке невозможно. Наборы автоматически создаются при создании групп в списках. </p> <p>Программа позволяет создать набор дополнительных реквизитов и сведений, как для всех элементов справочника, так и для части. В этом случае справочник является группой, а элементами группы являются реквизиты справочника или значения реквизитов справочника (в этом случае количество элементов группы будет равно количеству значений реквизита).</p> <h3>Назначение нового дополнительного реквизита (сведения) справочнику или документу</h3> <ul><li>В зависимости от настройки может быть доступна одна из команд ввода новых реквизитов (сведений): <ul><li>Выберите соответствующий этому справочнику или документу набор, нажмите <strong>Создать</strong>. По умолчанию дополнительный реквизит (сведение) может быть добавлен только в один набор. Заполните необходимые <a href="ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.Form.ФормаЭлемента/Help">поля</a>. -</li><li>Выберите соответствующий этому справочнику или документу набор, нажмите <strong>Добавить - Новый </strong>(<strong>Новое</strong>) - аналогична команде <strong>Создать</strong>. С помощью этой команды дополнительный реквизит (сведение) может быть добавлен только в один набор. Заполните необходимые поля.</li></ul></li></ul><h3>Общие наборы дополнительных реквизитов и сведений</h3> +</li> +<li>Выберите соответствующий этому справочнику или документу набор, нажмите <strong>Добавить - Новый </strong>(<strong>Новое</strong>) - аналогична команде <strong>Создать</strong>. С помощью этой команды дополнительный реквизит (сведение) может быть добавлен только в один набор. Заполните необходимые поля.</li></ul></li></ul><h3>Общие наборы дополнительных реквизитов и сведений</h3> <ul><li>Для некоторых справочников предусмотрены предопределенные наборы <strong>Общие</strong>. Введенные в такой набор дополнительные реквизиты и сведения по умолчанию становятся общими для всех элементов этих справочников. -</li><li> +</li> +<li> <div>Выберите набор <strong>Общий</strong>. </div> -</li><li> +</li> +<li> <div>Нажмите <strong>Создать</strong> или <strong>Добавить - Новый</strong> (<strong>Новое</strong>). Заполните необходимые поля.</div></li></ul><h3>Добавление из другого набора</h3> <ul><li>В программе предусмотрена возможность использовать ранее введенные дополнительные реквизиты и сведения для других наборов. -</li><li>Наиболее актуален этот способ для дополнительных реквизитов и сведений типа <strong>Дополнительное значение</strong> и <strong>Дополнительное значение (иерархия)</strong>. Если проведены соответствующие настройки (включен хотя бы один из флажков в разделе <strong>Администрирование - Общие настройки</strong>), становится доступной кнопка <strong>Добавить</strong>. -</li><li>Выберите набор дополнительных реквизитов (сведений), нажмите кнопку <strong>Добавить</strong>, в выпадающем меню выполните команду <strong>Из другого набора</strong>. -</li><li>Открывается помощник по добавлению дополнительного реквизита (сведения). -<ul><li>В левой части первой страницы помощника отображается список ранее введенных реквизитов (сведений). В правой части отражаются значения и другие параметры выбранного реквизита.</li></ul></li><li>На первой странице помощника выберите дополнительный реквизит (сведение). Обратите внимание, что создать дополнительный реквизит или сведение в данном списке невозможно. +</li> +<li>Наиболее актуален этот способ для дополнительных реквизитов и сведений типа <strong>Дополнительное значение</strong> и <strong>Дополнительное значение (иерархия)</strong>. Если проведены соответствующие настройки (включен хотя бы один из флажков в разделе <strong>Администрирование - Общие настройки</strong>), становится доступной кнопка <strong>Добавить</strong>. +</li> +<li>Выберите набор дополнительных реквизитов (сведений), нажмите кнопку <strong>Добавить</strong>, в выпадающем меню выполните команду <strong>Из другого набора</strong>. +</li> +<li>Открывается помощник по добавлению дополнительного реквизита (сведения). +<ul><li>В левой части первой страницы помощника отображается список ранее введенных реквизитов (сведений). В правой части отражаются значения и другие параметры выбранного реквизита.</li></ul></li> +<li>На первой странице помощника выберите дополнительный реквизит (сведение). Обратите внимание, что создать дополнительный реквизит или сведение в данном списке невозможно. <ul><li>Для выбора варианта добавления дополнительного реквизита (сведения) нажмите кнопку <strong>Далее</strong>. -</li><li>Также можно добавить реквизит из одного набора в другой с помощью перетаскивания мышью. Если были произведены соответствующие настройки, открывается вторая страница помощника <strong>Добавление дополнительного реквизита (сведения)</strong>.</li></ul></li><li>На второй странице помощника с помощью переключателя выберите вариант добавления дополнительного реквизита (сведения): +</li> +<li>Также можно добавить реквизит из одного набора в другой с помощью перетаскивания мышью. Если были произведены соответствующие настройки, открывается вторая страница помощника <strong>Добавление дополнительного реквизита (сведения)</strong>.</li></ul></li> +<li>На второй странице помощника с помощью переключателя выберите вариант добавления дополнительного реквизита (сведения): <ul><li><a href="#1">Сделать копию реквизита</a> - в новом наборе будет создан такой же дополнительный реквизит (сведение). -</li><li><a href="#2">Сделать копию реквизита по образцу</a> - создается дополнительный реквизит (сведение) с общим списком значений. Должен быть включен флажок <strong>Реквизиты и сведения с общим списком значений</strong> в разделе <strong>Администрирование - Общие настройки</strong>. -</li><li><a href="#3">Добавить общий реквизит в набор</a> - сделать дополнительный реквизит (сведение) общим. В этом случае общим становится не список значений, а сам реквизит. Должен быть включен флажок <strong>Общие реквизиты и сведения</strong> в разделе <strong>Администрирование - Общие настройки</strong>.</li></ul></li></ul><h3><a name="1">Копирование дополнительных реквизитов (сведений)</a></h3> +</li> +<li><a href="#2">Сделать копию реквизита по образцу</a> - создается дополнительный реквизит (сведение) с общим списком значений. Должен быть включен флажок <strong>Реквизиты и сведения с общим списком значений</strong> в разделе <strong>Администрирование - Общие настройки</strong>. +</li> +<li><a href="#3">Добавить общий реквизит в набор</a> - сделать дополнительный реквизит (сведение) общим. В этом случае общим становится не список значений, а сам реквизит. Должен быть включен флажок <strong>Общие реквизиты и сведения</strong> в разделе <strong>Администрирование - Общие настройки</strong>.</li></ul></li></ul><h3><a name="1">Копирование дополнительных реквизитов (сведений)</a></h3> <ul><li>В программе предусмотрена возможность копирования дополнительных реквизитов (сведений). -</li><li>В этом случае для набора дополнительных реквизитов (сведений) будет создана копия - самостоятельный дополнительный реквизит (сведение) со своим списком значений, никак не связанный с оригиналом, по которому был создан. -</li><li>В зависимости от настроек производится несколькими способами: +</li> +<li>В этом случае для набора дополнительных реквизитов (сведений) будет создана копия - самостоятельный дополнительный реквизит (сведение) со своим списком значений, никак не связанный с оригиналом, по которому был создан. +</li> +<li>В зависимости от настроек производится несколькими способами: <ul><li>В помощнике добавления дополнительных реквизитов и сведений; <ul><li>Выделите набор дополнительных реквизитов в списке, нажмите <strong>Добавить - Из другого набора</strong>. -</li><li>На первой странице помощника в списке выбора реквизитов для копирования выберите нужный реквизит, нажмите <strong>Далее</strong>. -</li><li>На второй странице помощника с помощью переключателя выберите <strong>Сделать копию реквизита</strong>, нажмите <strong>Далее</strong>. -</li><li>Заполните недостающие поля. После копирования реквизита список значений доступен для редактирования.</li></ul></li><li>перетаскиванием мышью; +</li> +<li>На первой странице помощника в списке выбора реквизитов для копирования выберите нужный реквизит, нажмите <strong>Далее</strong>. +</li> +<li>На второй странице помощника с помощью переключателя выберите <strong>Сделать копию реквизита</strong>, нажмите <strong>Далее</strong>. +</li> +<li>Заполните недостающие поля. После копирования реквизита список значений доступен для редактирования.</li></ul></li> +<li>перетаскиванием мышью; <ul><li>Можно перетащить нужный дополнительный реквизит (сведение) из одного набора в другой с помощью мыши. -</li><li>Если в списке имеется кнопка <strong>Добавить</strong>, то открывается вторая страница помощника добавления дополнительного реквизита (сведения). -</li><li>Если в списке только кнопка <strong>Создать</strong>, то открывается карточка дополнительного реквизита (сведения), который будет скопирован. Заполните недостающие поля.</li></ul></li><li>с помощью кнопок <strong>Копировать</strong> и <strong>Вставить</strong>. +</li> +<li>Если в списке имеется кнопка <strong>Добавить</strong>, то открывается вторая страница помощника добавления дополнительного реквизита (сведения). +</li> +<li>Если в списке только кнопка <strong>Создать</strong>, то открывается карточка дополнительного реквизита (сведения), который будет скопирован. Заполните недостающие поля.</li></ul></li> +<li>с помощью кнопок <strong>Копировать</strong> и <strong>Вставить</strong>. <ul><li>Выделите дополнительный реквизит (сведение), нажмите кнопку <strong>Копировать</strong>. Выделите набор, в который нужно добавить дополнительный реквизит (сведение). Нажмите кнопку <strong>Вставить</strong>. Если были произведены соответствующие настройки, то открывается вторая страница помощника добавления дополнительных реквизитов (сведений). Если выбранный дополнительный реквизит (сведение) уже входит в какой-либо набор, то предлагается сделать его общим. -</li><li>Команды <strong>Копировать</strong> и <strong>Вставить</strong> также доступны в контекстном меню по правой кнопке мыши или в меню <strong>Еще</strong>.</li></ul></li></ul></li></ul><h3><a name="2">Добавление по образцу</a></h3> +</li> +<li>Команды <strong>Копировать</strong> и <strong>Вставить</strong> также доступны в контекстном меню по правой кнопке мыши или в меню <strong>Еще</strong>.</li></ul></li></ul></li></ul><h3><a name="2">Добавление по образцу</a></h3> <ul><li>Для того чтобы использовать эту возможность, необходимо включить флажок <strong>Реквизиты и сведения с общим списком значений</strong> в разделе <strong>Администрирование - Общие настройки</strong>. -</li><li>Можно использовать ранее введенные дополнительные реквизиты и сведения из других наборов, добавлять реквизиты с общим списком значений сразу для нескольких однотипных реквизитов (например, <strong>Цвет двери</strong> по образцу реквизита <strong>Цвет</strong>). Список значений в этом случае используется из реквизита-образца. Удобно выполнять централизованную настройку списка значений сразу для нескольких однотипных реквизитов. -</li><li> +</li> +<li>Можно использовать ранее введенные дополнительные реквизиты и сведения из других наборов, добавлять реквизиты с общим списком значений сразу для нескольких однотипных реквизитов (например, <strong>Цвет двери</strong> по образцу реквизита <strong>Цвет</strong>). Список значений в этом случае используется из реквизита-образца. Удобно выполнять централизованную настройку списка значений сразу для нескольких однотипных реквизитов. +</li> +<li> <div>Выберите набор из списка.</div> -</li><li> +</li> +<li> <div>Нажмите <strong>Добавить - Из другого набора</strong>.</div> -</li><li> -<div>Будет открыт список всех дополнительных реквизитов (сведений), уже существующих в программе. Выберите дополнительный реквизит (сведение) из <a href="ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.Form.ФормаВыбора/Help">списка</a> уже существующих в программе, нажмите <strong>Далее</strong>.</div> -</li><li> +</li> +<li> +<div>Будет открыт список всех дополнительных реквизитов (сведений), уже существующих в программе. Выберите дополнительный реквизит (сведение) из списка уже существующих в программе, нажмите <strong>Далее</strong>.</div> +</li> +<li> <div> <div>С помощью переключателя выберите способ создания элемента <strong>Сделать копию реквизита по образцу</strong>, нажмите <strong>Далее</strong>.</div></div> -</li><li> +</li> +<li> <div>Тип и все значения выбранного в качестве образца дополнительного реквизита (сведения) будут скопированы в новый элемент. </div> -</li><li> +</li> +<li> <div>Заполните все необходимые поля. По умолчанию реквизит становится общим с набором, из которого был использован образец. Ввод новых значений в этом случае невозможен. Программа выводит напоминание, что список значений является общим с другим реквизитом.</div> -</li><li> +</li> +<li> <div>После сохранения дополнительного реквизита (сведения) с помощью ссылки можно просмотреть реквизит-образец и добавить значения, если необходимо.</div></li></ul><h3><a name="3">Добавление общих дополнительных реквизитов (сведений)</a></h3> <ul><li>Общий реквизит входит в несколько наборов. Этот вариант подходит для тех случаев, когда общим должен быть не только список значений, но и сам реквизит. В списках и отчетах по элементам различных справочников и документов общие реквизиты группируются и выводятся как один реквизит в одной колонке или поле. Например, с помощью общего реквизита <strong>Цвет</strong> можно отобрать всю желтую одежду и обувь. -</li><li>Для того чтобы использовать эту возможность, необходимо включить флажок <strong>Общие реквизиты и сведения</strong> в разделе <strong>Администрирование - Общие настройки</strong>. -</li><li> +</li> +<li>Для того чтобы использовать эту возможность, необходимо включить флажок <strong>Общие реквизиты и сведения</strong> в разделе <strong>Администрирование - Общие настройки</strong>. +</li> +<li> <div>Для того чтобы добавить в набор общий дополнительный реквизит (сведение), выделите нужный набор, нажмите <strong>Добавить - Из другого набора</strong>.</div> -</li><li> -<div>Выберите из предлагаемого <a href="ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.Form.ФормаВыбора/Help">списка</a> уже существующий общий дополнительный реквизит (сведение).Нажмите кнопку <strong>Далее</strong>. </div> -</li><li>Открывается вторая страница помощника. Выберите с помощью переключателя вариант добавления <strong>Сделать реквизит общим и добавить в набор</strong>, нажмите <strong>Далее</strong>. Открывается общий дополнительный реквизит. -</li><li> +</li> +<li> +<div>Выберите из предлагаемого <a>списка</a> уже существующий общий дополнительный реквизит (сведение).Нажмите кнопку <strong>Далее</strong>. </div> +</li> +<li>Открывается вторая страница помощника. Выберите с помощью переключателя вариант добавления <strong>Сделать реквизит общим и добавить в набор</strong>, нажмите <strong>Далее</strong>. Открывается общий дополнительный реквизит. +</li> +<li> <div>Также можно добавить общий дополнительный реквизит (сведение) с помощью перетаскивания мышью или кнопок <strong>Копировать</strong> и <strong>Вставить</strong>.</div> -</li><li> +</li> +<li> <div>Для того чтобы добавить общий реквизит в несколько наборов, повторите эти действия для каждого набора.</div></li></ul><h3>Особенности удаления дополнительных реквизитов (сведений)</h3> <ul dir="ltr"><li> <div>Для того чтобы удалить общий дополнительный реквизит (сведение), необходимо удалить его из всех наборов, в который входил данный реквизит. Возможно, для окончательного удаления придется очистить дополнительные реквизиты от значений.</div> -</li><li> +</li> +<li> <div>При пометке на удаление свойства в наборе значения свойства сохраняется в объектах до тех пор, пока не будут очищены. Свойство, помеченное на удаление в наборе, будет отображаться в окне объекта или окне дополнительных сведений особым образом.</div> -</li><li> +</li> +<li> <div>При необходимости можно снять пометку удаления.</div></li></ul><h3>См. также:</h3> <ul><li><a href="ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения/Help">Дополнительные реквизиты и сведения</a>; -</li><li><a href="v8help://frame/form_common">Работа с формами</a>.</li></ul></body></html> \ No newline at end of file +</li> +<li><a href="v8help://frame/form_common">Работа с формами</a>.</li></ul></body></html> \ No newline at end of file diff --git a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/ManagerModule.bsl b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/ManagerModule.bsl index c44bd26f7..774da6b6f 100644 --- a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/ManagerModule.bsl +++ b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/ManagerModule.bsl @@ -52,7 +52,7 @@ КонецЕсли; Если ЗначениеЗаполнено(Данные.Родитель) Тогда - ЛокализацияКлиентСервер.ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка); + МультиязычностьКлиентСервер.ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка); Возврат; КонецЕсли; @@ -78,9 +78,9 @@ // Обновляет состав наименований предопределенных наборов в // параметрах дополнительных реквизитов и сведений. -// +// // Параметры: -// ЕстьИзменения - Булево (возвращаемое значение) - если производилась запись, +// ЕстьИзменения - Булево - (возвращаемое значение) - если производилась запись, // устанавливается Истина, иначе не изменяется. // Процедура ОбновитьСоставНаименованийПредопределенныхНаборов(ЕстьИзменения = Неопределено) Экспорт @@ -187,27 +187,6 @@ НоваяСтрокаСведения.ИмяПредопределенногоНабора = НовыйНаборОбъект.ИмяПредопределенногоНабора; КонецЦикла; - // Обновление реквизитов и сведений. - Если Не ОбновляемыйНабор.ЭтоГруппа Тогда - Для Каждого СтрокаТаблицы Из ОбновляемыйНабор.ДополнительныеРеквизиты Цикл - РеквизитОбъект = СтрокаТаблицы.Свойство.ПолучитьОбъект(); - Если Не ЗначениеЗаполнено(РеквизитОбъект.НаборСвойств) Тогда - Продолжить; - КонецЕсли; - РеквизитОбъект.НаборСвойств = НовыйНабор; - ОбновлениеИнформационнойБазы.ЗаписатьОбъект(РеквизитОбъект); - КонецЦикла; - - Для Каждого СтрокаТаблицы Из ОбновляемыйНабор.ДополнительныеСведения Цикл - СвойствоОбъект = СтрокаТаблицы.Свойство.ПолучитьОбъект(); - Если Не ЗначениеЗаполнено(СвойствоОбъект.НаборСвойств) Тогда - Продолжить; - КонецЕсли; - СвойствоОбъект.НаборСвойств = НовыйНабор; - ОбновлениеИнформационнойБазы.ЗаписатьОбъект(СвойствоОбъект); - КонецЦикла; - КонецЕсли; - Если Не ОбновляемыйНабор.ЭтоГруппа Тогда КоличествоРеквизитов = Формат(НовыйНаборОбъект.ДополнительныеРеквизиты.НайтиСтроки( Новый Структура("ПометкаУдаления", Ложь)).Количество(), "ЧГ="); diff --git a/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаЭлемента/Module.bsl index 30e46254d..85c592ac3 100644 --- a/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаЭлемента/Module.bsl @@ -233,7 +233,7 @@ ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим); ДиалогОткрытияФайла.Каталог = РабочийКаталог; ДиалогОткрытияФайла.ПолноеИмяФайла = ""; - Фильтр = НСтр("ru = 'Все файлы(*.*)|*.*'"); + Фильтр = НСтр("ru = 'Все файлы (*.*)|*.*'"); ДиалогОткрытияФайла.Фильтр = Фильтр; ДиалогОткрытияФайла.МножественныйВыбор = Ложь; ДиалогОткрытияФайла.Заголовок = НСтр("ru = 'Выберите каталог'"); @@ -426,11 +426,9 @@ ВидимостьПояснения = Истина; - ЧастиСтроки = Новый Массив; - ЧастиСтроки.Добавить(НСтр("ru = 'Работа с файлами ведется в облачном сервисе'")); - ЧастиСтроки.Добавить(" "); - ЧастиСтроки.Добавить(Новый ФорматированнаяСтрока(ВыборкаДетальныеЗаписи.УчетнаяЗаписьНаименование, , , , АдресПапкиВОблачномСервисе)); - Элементы.ДекорацияПояснение.Заголовок = Новый ФорматированнаяСтрока(ЧастиСтроки); + Элементы.ДекорацияПояснение.Заголовок = СтроковыеФункции.ФорматированнаяСтрока( + НСтр("ru = 'Работа с файлами ведется в облачном сервисе <a href=""%1"">%2</a>'"), + Строка(АдресПапкиВОблачномСервисе), Строка(ВыборкаДетальныеЗаписи.УчетнаяЗаписьНаименование)); КонецЦикла; diff --git a/SSL/src/Catalogs/ПапкиФайлов/ManagerModule.bsl b/SSL/src/Catalogs/ПапкиФайлов/ManagerModule.bsl index 95d48c43c..b97ff2cfa 100644 --- a/SSL/src/Catalogs/ПапкиФайлов/ManagerModule.bsl +++ b/SSL/src/Catalogs/ПапкиФайлов/ManagerModule.bsl @@ -72,4 +72,32 @@ #КонецОбласти +#Область СлужебныйПрограммныйИнтерфейс + +// Начальное заполнение + +Процедура ПриНастройкеНачальногоЗаполненияЭлементов(Настройки) Экспорт + + Настройки.ПриНачальномЗаполненииЭлемента = Ложь; + +КонецПроцедуры + +// Вызывается при начальном заполнении справочника ПапкиФайлов. +// +// Параметры: +// КодыЯзыков - Массив - список языков конфигурации. Актуально для мультиязычных конфигураций. +// Элементы - ТаблицаЗначений - данные заполнения. Состав колонок соответствует набору реквизитов +// справочника ПапкиФайлов. +// +Процедура ПриНачальномЗаполненииЭлементов(КодыЯзыков, Элементы) Экспорт + + Элемент = Элементы.Добавить(); + Элемент.ИмяПредопределенныхДанных = "Шаблоны"; + Элемент.Наименование = НСтр("ru = 'Шаблоны файлов'", ОбщегоНазначения.КодОсновногоЯзыка()); + +КонецПроцедуры + +#КонецОбласти + + #КонецЕсли diff --git a/SSL/src/Catalogs/ПапкиФайлов/ПапкиФайлов.mdo b/SSL/src/Catalogs/ПапкиФайлов/ПапкиФайлов.mdo index 3731527c3..ec873b5a9 100644 --- a/SSL/src/Catalogs/ПапкиФайлов/ПапкиФайлов.mdo +++ b/SSL/src/Catalogs/ПапкиФайлов/ПапкиФайлов.mdo @@ -151,6 +151,7 @@ <lang>ru</lang> </pages> </help> + <dataLockFields>Catalog.ПапкиФайлов.StandardAttribute.Parent</dataLockFields> <dataLockControlMode>Managed</dataLockControlMode> <fullTextSearch>Use</fullTextSearch> <objectPresentation> diff --git a/SSL/src/Catalogs/Пользователи/Forms/ВыборПользователяОперационнойСистемы/Form.form b/SSL/src/Catalogs/Пользователи/Forms/ВыборПользователяОперационнойСистемы/Form.form index 3e96d9fc0..5eb847fbd 100644 --- a/SSL/src/Catalogs/Пользователи/Forms/ВыборПользователяОперационнойСистемы/Form.form +++ b/SSL/src/Catalogs/Пользователи/Forms/ВыборПользователяОперационнойСистемы/Form.form @@ -9,10 +9,6 @@ <items xsi:type="form:Table"> <name>ТаблицаДоменов</name> <id>5</id> - <title> - <key>ru</key> - <value>Домены</value> - true true @@ -370,10 +366,6 @@ ТаблицаПользователейДомена 8 - - <key>ru</key> - <value>Пользователи</value> - true true @@ -756,10 +748,6 @@ true - - <key>ru</key> - <value>Домены и пользователи</value> - ДоменыИПользователиExtendedTooltip 29 diff --git a/SSL/src/Catalogs/Пользователи/Forms/ОграничениеНаВходВПрограмму/Help/ru.html b/SSL/src/Catalogs/Пользователи/Forms/ОграничениеНаВходВПрограмму/Help/ru.html new file mode 100644 index 000000000..da82803a2 --- /dev/null +++ b/SSL/src/Catalogs/Пользователи/Forms/ОграничениеНаВходВПрограмму/Help/ru.html @@ -0,0 +1,12 @@ + +

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

    +

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

    +
    • Согласно общим настройкам входа - как указано для всех пользователей в настройке Запрещать вход в программу пользователям, которые не работали в программе более: [k] дней; +
    • +
    • Без ограничения срока - бессрочный доступ, только для этого пользователя; +
    • +
    • Вход разрешен до (установите срок - введите дату вручную или выберите из календаря с помощью кнопки , удобно, если работник временно пользуется данной программой. Для защиты от несанкционированного доступа к программе у любого пользователя может быть настроен срок действия, который позволяет автоматически отключить пользователя после достижения указанной даты; +
    • +
    • +
      Запретить вход, если не работает более (укажите количество дней) - если пользователь не войдет в программу больше указанного количества дней, то вход в программу будет невозможен. 
      +
      • В этом случае пользователь должен будет обратиться к администратору для возобновления работы в программе, также удобно для временных работников.
    Ограничение отражается в карточке пользователя, после настройки ссылка принимает значение Изменить ограничение. \ No newline at end of file diff --git a/SSL/src/Catalogs/Пользователи/Forms/ПользователиИнформационнойБазы/Module.bsl b/SSL/src/Catalogs/Пользователи/Forms/ПользователиИнформационнойБазы/Module.bsl index 3572b8138..ca9c44c4f 100644 --- a/SSL/src/Catalogs/Пользователи/Forms/ПользователиИнформационнойБазы/Module.bsl +++ b/SSL/src/Catalogs/Пользователи/Forms/ПользователиИнформационнойБазы/Module.bsl @@ -502,13 +502,28 @@ &НаСервере Процедура ОтменитьСопоставлениеНаСервере() - ТекущаяСтрока = ПользователиИБ.НайтиПоИдентификатору( - Элементы.ПользователиИБ.ТекущаяСтрока); + ТекущаяСтрока = ПользователиИБ.НайтиПоИдентификатору(Элементы.ПользователиИБ.ТекущаяСтрока); + Если ТипЗнч(ТекущаяСтрока.Ссылка) = Тип("СправочникСсылка.Пользователи") Тогда + ИмяТаблицы = "Справочник.Пользователи"; + Иначе + ИмяТаблицы = "Справочник.ВнешниеПользователи"; + КонецЕсли; - Объект = ТекущаяСтрока.Ссылка.ПолучитьОбъект(); - Объект.ИдентификаторПользователяИБ = Неопределено; - Объект.ОбменДанными.Загрузка = Истина; - Объект.Записать(); + НачатьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить(ИмяТаблицы); + ЭлементБлокировки.УстановитьЗначение("Ссылка", ТекущаяСтрока.Ссылка); + Блокировка.Заблокировать(); + + Объект = ТекущаяСтрока.Ссылка.ПолучитьОбъект(); + Объект.ИдентификаторПользователяИБ = Неопределено; + ОбновлениеИнформационнойБазы.ЗаписатьДанные(Объект); + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; ЗаполнитьПользователейИБ(); diff --git a/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Module.bsl index 2201d5ac6..9f0df4df1 100644 --- a/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Module.bsl @@ -320,19 +320,8 @@ ГруппаПомеченаНаУдаление = Элементы.ГруппыПользователей.ДанныеСтроки(Строка).ПометкаУдаления; КоличествоПользователей = ПараметрыПеретаскивания.Значение.Количество(); - ДействиеИсключитьПользователя = (ХранимыеПараметры.ГруппаВсеПользователи = Строка); - - ДействиеСПользователем = ?((ХранимыеПараметры.ГруппаВсеПользователи = Элементы.ГруппыПользователей.ТекущаяСтрока), - НСтр("ru = 'Включить'"), - ?(Перемещение, НСтр("ru = 'Переместить'"), НСтр("ru = 'Скопировать'"))); - - Если ГруппаПомеченаНаУдаление Тогда - ШаблонДействия = ?(Перемещение, - НСтр("ru = 'Группа ""%1"" помечена на удаление. %2'"), - НСтр("ru = 'Группа ""%1"" помечена на удаление. %2'")); - ДействиеСПользователем = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонДействия, Строка(Строка), ДействиеСПользователем); - КонецЕсли; + ВключитьВГруппу = (ХранимыеПараметры.ГруппаВсеПользователи = Элементы.ГруппыПользователей.ТекущаяСтрока); Если КоличествоПользователей = 1 Тогда Если ДействиеИсключитьПользователя Тогда @@ -342,16 +331,32 @@ Строка(Элементы.ГруппыПользователей.ТекущаяСтрока)); ИначеЕсли Не ГруппаПомеченаНаУдаление Тогда + Если ВключитьВГруппу Тогда + Шаблон = НСтр("ru = 'Включить пользователя ""%1"" в группу ""%2""?'"); + ИначеЕсли Перемещение Тогда + Шаблон = НСтр("ru = 'Переместить пользователя ""%1"" в группу ""%2""?'"); + Иначе + Шаблон = НСтр("ru = 'Скопировать пользователя ""%1"" в группу ""%2""?'"); + КонецЕсли; + ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = '%1 пользователя ""%2"" в группу ""%3""?'"), - ДействиеСПользователем, + Шаблон, Строка(ПараметрыПеретаскивания.Значение[0]), Строка(Строка)); Иначе + Если ВключитьВГруппу Тогда + Шаблон = НСтр("ru = 'Группа ""%1"" помечена на удаление. Включить пользователя ""%2"" в эту группу?'"); + ИначеЕсли Перемещение Тогда + Шаблон = НСтр("ru = 'Группа ""%1"" помечена на удаление. Переместить пользователя ""%2"" в эту группу?'"); + Иначе + Шаблон = НСтр("ru = 'Группа ""%1"" помечена на удаление. Скопировать пользователя ""%2"" в эту группу?'"); + КонецЕсли; + ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = '%1 пользователя ""%2"" в эту группу?'"), - ДействиеСПользователем, + Шаблон, + Строка(Строка), Строка(ПараметрыПеретаскивания.Значение[0])); + КонецЕсли; Иначе Если ДействиеИсключитьПользователя Тогда @@ -361,15 +366,30 @@ Строка(Элементы.ГруппыПользователей.ТекущаяСтрока)); ИначеЕсли Не ГруппаПомеченаНаУдаление Тогда + Если ВключитьВГруппу Тогда + Шаблон = НСтр("ru = 'Включить пользователей (%1) в группу ""%2""?'"); + ИначеЕсли Перемещение Тогда + Шаблон = НСтр("ru = 'Переместить пользователей (%1) в группу ""%2""?'"); + Иначе + Шаблон = НСтр("ru = 'Скопировать пользователей (%1) в группу ""%2""?'"); + КонецЕсли; + ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = '%1 пользователей (%2) в группу ""%3""?'"), - ДействиеСПользователем, + Шаблон, КоличествоПользователей, Строка(Строка)); Иначе + Если ВключитьВГруппу Тогда + Шаблон = НСтр("ru = 'Группа ""%1"" помечена на удаление. Включить пользователей (%2) в эту группу?'"); + ИначеЕсли Перемещение Тогда + Шаблон = НСтр("ru = 'Группа ""%1"" помечена на удаление. Переместить пользователей (%2) в эту группу?'"); + Иначе + Шаблон = НСтр("ru = 'Группа ""%1"" помечена на удаление. Скопировать пользователей (%2) в эту группу?'"); + КонецЕсли; + ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = '%1 пользователей (%2) в эту группу?'"), - ДействиеСПользователем, + Шаблон, + Строка(Строка), КоличествоПользователей); КонецЕсли; КонецЕсли; @@ -752,6 +772,11 @@ КонецЕсли; Пользователи.ЗаполнитьНомераКартинокПользователей(ВыбранныеПользователиИГруппы, "Пользователь", "НомерКартинки"); ХранимыеПараметры.Вставить("ЗаголовокФормыПодбора", ПараметрыРасширеннойФормыПодбора.ЗаголовокФормыПодбора); + + Если ПараметрыРасширеннойФормыПодбора.Свойство("ЗаголовокКнопкиЗавершенияПодбора") Тогда + ХранимыеПараметры.Вставить("ЗаголовокКнопкиЗавершенияПодбора", ПараметрыРасширеннойФормыПодбора.ЗаголовокКнопкиЗавершенияПодбора); + КонецЕсли; + // Установка параметров расширенной формы подбора. Элементы.ЗавершитьИЗакрыть.Видимость = Истина; Элементы.ГруппаВыбратьПользователя.Видимость = Истина; @@ -931,11 +956,17 @@ Если ХранимыеПараметры.РасширенныйПодбор Тогда Заголовок = ХранимыеПараметры.ЗаголовокФормыПодбора; + + Если ХранимыеПараметры.Свойство("ЗаголовокКнопкиЗавершенияПодбора") Тогда + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, + "ЗавершитьИЗакрыть", "Заголовок", ХранимыеПараметры.ЗаголовокКнопкиЗавершенияПодбора); + КонецЕсли; Иначе Заголовок = НСтр("ru = 'Подбор пользователей'"); КонецЕсли; КонецЕсли; + Иначе // Режим выбора. Если ВыборГруппПользователей Тогда diff --git a/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Form.form index dc8f7f855..0d848606f 100644 --- a/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Form.form @@ -3302,6 +3302,19 @@ true + + ПользовательИБАутентификацияСтандартнаяЗначениеПрямогоИзменения + 3 + + Boolean + + + true + + + true + + ПоказатьТолькоВыбранныеРоли diff --git a/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Help/ru.html index b38ab6000..234fff90d 100644 --- a/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Help/ru.html @@ -8,64 +8,96 @@ <h3>Установка и смена пароля</h3> <ul><li> <div>Любой пользователь может просмотреть сведения о себе в персональных настройках программы.</div> -</li><li> +</li> +<li> <div>Администратор или пользователь при необходимости (и наличии прав) может <a href="CommonForm.СменаПароля/Help">установить пароль</a> или сменить его.</div> -</li><li> +</li> +<li> <div>Нажмите кнопку <strong>Установить пароль</strong>. Если пароль уже установлен, можно сменить пароль. Для этого нажмите кнопку <strong>Сменить пароль</strong>, введите <a href="CommonForm.СменаПароля/Help">новый пароль</a>.</div></li></ul><h3>Рекомендации по созданию пароля для входа в программу</h3> <p>Хороший пароль должен:</p> <ul><li>быть малопонятным выражением. -</li><li>состоять не менее чем из восьми символов. -</li><li>включать в себя: +</li> +<li>состоять не менее чем из восьми символов. +</li> +<li>включать в себя: <ul><li>заглавные латинские буквы -</li><li>прописные латинские буквы -</li><li>цифры -</li><li>символы (подчеркивание, скобки и т.д.) </li></ul></li></ul><p>Нежелательно, чтобы пароль совпадал с именем пользователя, полностью состоял из цифр, содержал понятные слова, содержал чередующиеся группы символов. </p> +</li> +<li>прописные латинские буквы +</li> +<li>цифры +</li> +<li>символы (подчеркивание, скобки и т.д.) </li></ul></li></ul><p>Нежелательно, чтобы пароль совпадал с именем пользователя, полностью состоял из цифр, содержал понятные слова, содержал чередующиеся группы символов. </p> <ul><li>Примеры хороших паролей:<br>“nj7{jhjibq*Gfhjkm, <br>F5”njnGhkmNj;t{HI. -</li><li>Примеры неудачных паролей: <br>Иванов, <br>qwerty, <br>12345678, <br>123123123.</li></ul><h3><a name="1">Ввод пользователя</a> (при наличии права)</h3> +</li> +<li>Примеры неудачных паролей: <br>Иванов, <br>qwerty, <br>12345678, <br>123123123.</li></ul><h3><a name="1">Ввод пользователя</a> (при наличии права)</h3> <p>Если пользователя ввел ответственный за список и заполнил имя для входа, тогда администратору в карточке пользователя выводится рекомендация проверить настройки для входа. После разрешения входа рекомендация скрывается, а ответственный более не может изменить настройки для входа, кроме отключения разрешения на вход в программу. Для того чтобы посмотреть всех таких пользователей, которых подготовил ответственный, можно установить отбор в списке по полю <strong>Подготовлен</strong>. </p> <p>Сведения о пользователе располагаются на вкладках: </p> <ul><li><strong>Главное</strong> <ul><li>Введите <strong>Полное имя</strong> пользователя, которое будет отображаться в программе в различных списках и отчетах программы. -</li><li>Флажок <strong>Недействителен</strong> по умолчанию снят для всех пользователей. Но если пользователь по каким-либо причинам более не работает с программой (например, уволен), и в то же время его нельзя удалить из-за наличия ссылок на него из других объектов программы, то рекомендуется установить флажок <strong>Недействителен</strong>. Такого пользователя нельзя выбрать, например, как исполнителя задачи или ответственного за документ, и он не отображается в списке пользователей. Если пользователя нужно восстановить в программе (например, его снова взяли на работу), то можно снять флажок и снова использовать эти данные. -</li><li><strong>Имя (для входа)</strong> - короткое имя, используется для входа в программу. Может отличаться от полного имени (например, "Иванов", а полное имя - "Иванов Иван Иванович"). -</li><li><strong>Аутентификация 1С:Предприятия</strong> - по умолчанию флажок включен и активно поле для ввода пароля. -<ul><li>Состояние аутентификации 1С:Предприятия выводится под флажком.</li></ul></li><li>Нажмите кнопку <strong>Установить пароль</strong>, - введите <a href="CommonForm.СменаПароля/Help">пароль для входа в программу</a>. В целях безопасности данных всегда заполняйте это поле. +</li> +<li>Флажок <strong>Недействителен</strong> по умолчанию снят для всех пользователей. Но если пользователь по каким-либо причинам более не работает с программой (например, уволен), и в то же время его нельзя удалить из-за наличия ссылок на него из других объектов программы, то рекомендуется установить флажок <strong>Недействителен</strong>. Такого пользователя нельзя выбрать, например, как исполнителя задачи или ответственного за документ, и он не отображается в списке пользователей. Если пользователя нужно восстановить в программе (например, его снова взяли на работу), то можно снять флажок и снова использовать эти данные. +</li> +<li><strong>Имя (для входа)</strong> - короткое имя, используется для входа в программу. Может отличаться от полного имени (например, "Иванов", а полное имя - "Иванов Иван Иванович"). +</li> +<li><strong>Аутентификация 1С:Предприятия</strong> - по умолчанию флажок включен и активно поле для ввода пароля. +<ul><li>Состояние аутентификации 1С:Предприятия выводится под флажком.</li></ul></li> +<li>Нажмите кнопку <strong>Установить пароль</strong>, - введите <a href="CommonForm.СменаПароля/Help">пароль для входа в программу</a>. В целях безопасности данных всегда заполняйте это поле. <ul><li>Если данные пользователя еще не были записаны, выводится сообщение. Нажмите кнопку <strong>Записать</strong>. -</li><li>После установки пароля состояние аутентификации меняется на <strong>Пароль установлен</strong>.</li></ul></li><li><strong>Потребовать смену пароля при входе</strong> - включите флажок, в этом случае пользователь будет обязан самостоятельно ввести свой пароль, который больше никто не будет знать. Для удобства администрирования и обеспечения безопасности у всех пользователей добавлен этот реквизит, который нужен, чтобы пользователь сменил пароль, заданный администратором, на свой. -</li><li><strong>Показывать в списке выбора</strong> - для того чтобы включить пользователя в список выбора, который выводится при начале работы с программой, включите флажок. Если в программе используются внешние пользователи, то этот флажок не рекомендуется устанавливать. Если флажок не установлен, то при входе в программу имя такого пользователя будет скрыто из списка выбора. -</li><li><strong>Пользователю запрещено изменять пароль</strong> - Если пароли в программе должен будет вводить только администратор, при необходимости включите флажок и запретите пользователю менять свой пароль. В этом случае при открытии учетной записи пользователем кнопка <strong>Установить пароль</strong> (<strong>Сменить пароль</strong>) станет недоступной. -</li><li><strong>Аутентификация по протоколу OpenID</strong> - включите флажок, чтобы разрешить пользователю использовать единую учетную запись по протоколу OpenID. Данная функция используется для работы в веб-клиенте 1С:Предприятия. Для корректной работы программы в этом случае должен быть также включен флажок <strong>Аутентификация 1С: Предприятия</strong>. -</li><li><strong>Аутентификация операционной системы</strong> - для того чтобы упростить вход в программу, включите этот флажок. -<ul><li>В поле <strong>Пользователь</strong> с помощью кнопки <img src="StdPicture.InputFieldSelect"></img> <a href="Catalog.Пользователи.Form.ВыборПользователяОперационнойСистемы/Help">выберите</a>, под каким именем данный пользователь работает в операционной системе. Под этим именем он будет входить в программу. В этом случае можно отключить флажок <strong>Аутентификация 1С: Предприятия</strong>.</li></ul></li><li>Если ни один флажок <strong>Аутентификация</strong> не включен, то автоматически выключается и флажок <strong>Вход в программу разрешен</strong>. -</li><li><strong>Режим запуска</strong> - заполнено программой по умолчанию (<strong>Авто</strong>). Рекомендуется выбирать этот <a href="v8help://frame/InformationEntryToForm">режим</a>.</li></ul></li><li><strong>Адреса, телефоны</strong> -<ul><li>На вкладке введите <a href="DataProcessor.ВводКонтактнойИнформации/Help">контактную информацию</a> пользователя, предусмотренную в программе (например, телефон и адрес электронной почты).</li></ul></li><li><strong>Комментарий</strong> +</li> +<li>После установки пароля состояние аутентификации меняется на <strong>Пароль установлен</strong>.</li></ul></li> +<li><strong>Потребовать смену пароля при входе</strong> - включите флажок, в этом случае пользователь будет обязан самостоятельно ввести свой пароль, который больше никто не будет знать. Для удобства администрирования и обеспечения безопасности у всех пользователей добавлен этот реквизит, который нужен, чтобы пользователь сменил пароль, заданный администратором, на свой. +</li> +<li><strong>Показывать в списке выбора</strong> - для того чтобы включить пользователя в список выбора, который выводится при начале работы с программой, включите флажок. Если в программе используются внешние пользователи, то этот флажок не рекомендуется устанавливать. Если флажок не установлен, то при входе в программу имя такого пользователя будет скрыто из списка выбора. +</li> +<li><strong>Пользователю запрещено изменять пароль</strong> - Если пароли в программе должен будет вводить только администратор, при необходимости включите флажок и запретите пользователю менять свой пароль. В этом случае при открытии учетной записи пользователем кнопка <strong>Установить пароль</strong> (<strong>Сменить пароль</strong>) станет недоступной. +</li> +<li><strong>Аутентификация по протоколу OpenID</strong> - включите флажок, чтобы разрешить пользователю использовать единую учетную запись по протоколу OpenID. Данная функция используется для работы в веб-клиенте 1С:Предприятия. Для корректной работы программы в этом случае должен быть также включен флажок <strong>Аутентификация 1С: Предприятия</strong>. +</li> +<li><strong>Аутентификация операционной системы</strong> - для того чтобы упростить вход в программу, включите этот флажок. +<ul><li>В поле <strong>Пользователь</strong> с помощью кнопки <img src="StdPicture.InputFieldSelect"></img> <a href="Catalog.Пользователи.Form.ВыборПользователяОперационнойСистемы/Help">выберите</a>, под каким именем данный пользователь работает в операционной системе. Под этим именем он будет входить в программу. В этом случае можно отключить флажок <strong>Аутентификация 1С: Предприятия</strong>.</li></ul></li> +<li>Если ни один флажок <strong>Аутентификация</strong> не включен, то автоматически выключается и флажок <strong>Вход в программу разрешен</strong>. +</li> +<li><strong>Режим запуска</strong> - заполнено программой по умолчанию (<strong>Авто</strong>). Рекомендуется выбирать этот <a href="v8help://frame/InformationEntryToForm">режим</a>.</li></ul></li> +<li><strong>Адреса, телефоны</strong> +<ul><li>На вкладке введите <a href="DataProcessor.ВводКонтактнойИнформации/Help">контактную информацию</a> пользователя, предусмотренную в программе (например, телефон и адрес электронной почты).</li></ul></li> +<li><strong>Комментарий</strong> <ul><li>На вкладке напишите дополнительную информацию о пользователе.</li></ul></li></ul><h3>Включение пользователя в группы</h3> <p>Если в программе включено использование групп пользователей, то пользователя во время ввода можно включить в одну или несколько групп.</p> <ul><li>Нажмите <strong>Группы</strong> на панели навигации, с помощью флажков выберите одну или несколько <a href="Catalog.ГруппыПользователей/Help">групп</a>. -</li><li>Для того чтобы быстро отменить свой выбор, нажмите <strong>Исключить из всех групп</strong>.</li></ul><h3>Права доступа пользователя </h3> +</li> +<li>Для того чтобы быстро отменить свой выбор, нажмите <strong>Исключить из всех групп</strong>.</li></ul><h3>Права доступа пользователя </h3> <p>В зависимости от состава программы для настройки прав доступа предусмотрена одна из возможностей:</p> <ul><li>Нажмите <strong>Права доступа</strong> на панели навигации, чтобы включить пользователя в одну или несколько <a href="Catalog.ГруппыДоступа/Help">групп доступа</a>. Их необходимо выбрать из списка. -</li><li>В списке <strong>Разрешенные действия (роли)</strong> можно назначить пользователю одну или несколько ролей, которые в совокупности образуют его персональные настройки прав доступа. Роли могут соответствовать как различным должностным обязанностям (или видам деятельности) пользователей, так и более мелким функциям. +</li> +<li>В списке <strong>Разрешенные действия (роли)</strong> можно назначить пользователю одну или несколько ролей, которые в совокупности образуют его персональные настройки прав доступа. Роли могут соответствовать как различным должностным обязанностям (или видам деятельности) пользователей, так и более мелким функциям. <ul><li>Выберите нужные роли с помощью флажков. -</li><li>С помощью кнопки <strong>Только выбранные роли</strong> можно ограничить видимость ролей. -</li><li>Для удобства назначения можно упорядочить роли как в алфавитном порядке, так и <strong>По подсистемам</strong>.</li></ul></li></ul><h3><a name="2">Разрешение входа в программу (только для администратора)</a></h3> +</li> +<li>С помощью кнопки <strong>Только выбранные роли</strong> можно ограничить видимость ролей. +</li> +<li>Для удобства назначения можно упорядочить роли как в алфавитном порядке, так и <strong>По подсистемам</strong>.</li></ul></li></ul><h3><a name="2">Разрешение входа в программу (только для администратора)</a></h3> <ul><li> <div>Для входа пользователя в программу нужно установить флажок <strong>Вход в программу разрешен.</strong> При этом должны быть заданы необходимые свойства: имя (для входа), пароль и другие параметры авторизации. </div> -</li><li> +</li> +<li> <div>В программе возможно прекращение работы пользователей, которым сняли флажок <strong>Вход в программу разрешен</strong>, интерактивно или программно в связи с окончанием срока действия.</div> -</li><li> +</li> +<li> <div>Открытые сеансы пользователей автоматически завершаются не более чем через 25 минут после того, как вход в программу был запрещен.</div></li></ul><h3>Ограничения на вход</h3> <p>Перейдите по ссылке, для того чтобы <strong>Установить ограничение</strong>. С помощью переключателя установите ограничение на вход в программу:</p> <ul><li> -<div><strong>Согласно общим настройкам входа</strong> - установлено по умолчанию;</div> -</li><li> -<div><strong>Без ограничения срока</strong>;</div> -</li><li> +<div><strong>Согласно общим настройкам входа</strong> - установлено по умолчанию (<a href="CommonForm.НастройкиВходаПользователей/Help">централизованно</a> может быть запрещен вход всем пользователям, которые не заходили в программу больше установленного срока;</div> +</li> +<li> +<div><strong>Без ограничения срока </strong>- бессрочный доступ, только для этого пользователя;</div> +</li> +<li> <div><strong>Вход разрешен до</strong> (установите срок - введите дату вручную или выберите из календаря с помощью кнопки <img src="StdPicture.InputFieldCalendar"></img>). Для защиты от несанкционированного доступа к программу у всех пользователей добавлен <strong>Срок действия</strong>, который позволяет автоматически отключить пользователя по достижению указанной даты;</div> -</li><li> +</li> +<li> <div><strong>Запретить вход, если не работает более</strong> (укажите количество дней) - если пользователь не войдет в программу больше указанного количества дней, то вход в программу будет невозможен. </div> <ul><li> -<div>В этом случае пользователь должен будет обратиться к администратору для возобновления работы в программе.</div></li></ul></li><li> +<div>В этом случае пользователь должен будет обратиться к администратору для возобновления работы в программе.</div></li></ul></li> +<li> <div>Ограничения отражаются в карточке пользователя, также на всех пользователей их можно просмотреть в отчете <a href="Report.СведенияОПользователях/Help">Сведения о пользователях</a>.</div></li></ul><h3>Управление настройками пользователя</h3> <ul><li> <div>Программа запоминает <a href="DataProcessor.НастройкиПользователей.Form.НастройкиПользователей/Help">настройки</a> каждого пользователя во время его работы. Для того чтобы просмотреть, скопировать или удалить настройки пользователя (удалять настройки приходится, если из-за этих неправильных настроек работать в программе становится невозможно), нажмите <strong>Настройки</strong> на панели навигации.</div></li></ul><h3>Предупреждения программы</h3> diff --git a/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Module.bsl index 7b4e77ded..e01c5f3e9 100644 --- a/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Module.bsl @@ -137,7 +137,7 @@ ПереопределитьРедактированиеКонтактнойИнформацииВСервисе(); КонецЕсли; - ОбщаяНастройкаФормы(Объект, Истина); + НастроитьФорму(Объект, Истина); Если ОбщегоНазначения.ЭтоАвтономноеРабочееМесто() Тогда Элементы.ГруппаШапка.ТолькоПросмотр = Истина; @@ -230,7 +230,7 @@ МодульУправлениеКонтактнойИнформацией.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект, "КонтактнаяИнформация"); КонецЕсли; - ОбщаяНастройкаФормы(ТекущийОбъект); + НастроитьФорму(ТекущийОбъект); // СтандартныеПодсистемы.УправлениеДоступом Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда @@ -379,7 +379,7 @@ ТекущийОбъект.ДополнительныеСвойства.ОписаниеПользователяИБ.РезультатДействия); КонецЕсли; - ОбщаяНастройкаФормы(ТекущийОбъект, , ПараметрыЗаписи); + НастроитьФорму(ТекущийОбъект, , ПараметрыЗаписи); ОбновитьСпособИзмененияEMailВСервисе(); @@ -459,7 +459,7 @@ СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Роль ""%1"" не найдена в метаданных.'"), Строка.Синоним), "Роли", ЭлементыДерева.Индекс(Строка), - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Роль ""%1"" в строке %%1 не найдена в метаданных.'"), Строка.Синоним)); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Роль ""%1"" в строке %2 не найдена в метаданных.'"), Строка.Синоним, "%1")); КонецЕсли; Если Строка.ЭтоНедоступнаяРоль Тогда ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Ошибки, @@ -467,7 +467,7 @@ СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Роль ""%1"" недоступна для пользователей.'"), Строка.Синоним), "Роли", ЭлементыДерева.Индекс(Строка), - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Роль ""%1"" в строке %%1 недоступна для пользователей.'"), Строка.Синоним)); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Роль ""%1"" в строке %2 недоступна для пользователей.'"), Строка.Синоним, "%1")); КонецЕсли; КонецЦикла; ОбщегоНазначенияКлиентСервер.СообщитьОшибкиПользователю(Ошибки, Отказ); @@ -520,11 +520,20 @@ Если Объект.Недействителен Тогда ВходВПрограммуРазрешен = Ложь; - Иначе - ВходВПрограммуРазрешен = ВходВПрограммуРазрешенЗначениеПрямогоИзменения - И (ПользовательИБАутентификацияOpenID - Или ПользовательИБАутентификацияСтандартная - Или ПользовательИБАутентификацияОС); + Если Не ПользовательИБАутентификацияOpenID + И Не ПользовательИБАутентификацияОС + И Не ПользовательИБАутентификацияСтандартнаяЗначениеПрямогоИзменения + И ПользовательИБАутентификацияСтандартная Тогда + + ПользовательИБАутентификацияСтандартная = Ложь; + КонецЕсли; + ИначеЕсли ВходВПрограммуРазрешенЗначениеПрямогоИзменения Тогда + Если Не ПользовательИБАутентификацияСтандартная + И Не ПользовательИБАутентификацияOpenID + И Не ПользовательИБАутентификацияОС Тогда + ПользовательИБАутентификацияСтандартная = Истина; + КонецЕсли; + ВходВПрограммуРазрешен = Истина; КонецЕсли; УстановитьДоступностьСвойств(ЭтотОбъект); @@ -544,6 +553,15 @@ Возврат; КонецЕсли; + Если Не ВходВПрограммуРазрешен + И Не ПользовательИБАутентификацияOpenID + И Не ПользовательИБАутентификацияОС + И Не ПользовательИБАутентификацияСтандартнаяЗначениеПрямогоИзменения + И ПользовательИБАутентификацияСтандартная Тогда + + ПользовательИБАутентификацияСтандартная = Ложь; + КонецЕсли; + ОбновитьИмяДляВхода(ЭтотОбъект); Если ВходВПрограммуРазрешен @@ -592,6 +610,7 @@ Процедура ПользовательИБАутентификацияСтандартнаяПриИзменении(Элемент) АутентификацияПриИзменении(); + ПользовательИБАутентификацияСтандартнаяЗначениеПрямогоИзменения = ПользовательИБАутентификацияСтандартная; КонецПроцедуры @@ -1051,7 +1070,7 @@ КонецПроцедуры &НаСервере -Процедура ОбщаяНастройкаФормы(ТекущийОбъект, ПриСозданииНаСервере = Ложь, ПараметрыЗаписи = Неопределено) +Процедура НастроитьФорму(ТекущийОбъект, ПриСозданииНаСервере = Ложь, ПараметрыЗаписи = Неопределено) Если НачальноеОписаниеПользователяИБ = Неопределено Тогда Возврат; // Вызов ПриЧтенииНаСервере до вызова ПриСозданииНаСервере. @@ -1205,6 +1224,17 @@ Элементы = Форма.Элементы; + // Настройка необходимости заполнения. + Если ТребуетсяЗаписьПользователяИБ(Форма, Ложь) Тогда + НоваяСтраница = Элементы.ИмяСОтметкойНезаполненного; + Иначе + НоваяСтраница = Элементы.ИмяБезОтметкиНезаполненного; + КонецЕсли; + + Если Элементы.ИмяПереключениеОтметкиНезаполненного.ТекущаяСтраница <> НоваяСтраница Тогда + Элементы.ИмяПереключениеОтметкиНезаполненного.ТекущаяСтраница = НоваяСтраница; + КонецЕсли; + Если Форма.ПользовательИБСуществует Тогда Возврат; КонецЕсли; @@ -1213,7 +1243,8 @@ Если Элементы.ИмяПереключениеОтметкиНезаполненного.ТекущаяСтраница = Элементы.ИмяБезОтметкиНезаполненного Тогда - Если Не ЗначениеЗаполнено(Форма.ПользовательИБИмяЗначениеПрямогоИзменения) + Если (Не ЗначениеЗаполнено(Форма.ПользовательИБИмяЗначениеПрямогоИзменения) + Или Форма.ПользовательИБИмяЗначениеПрямогоИзменения = КраткоеИмя) И Форма.ПользовательИБИмя = КраткоеИмя Тогда Форма.ПользовательИБИмя = ""; @@ -1231,8 +1262,6 @@ &НаКлиенте Процедура АутентификацияПриИзменении() - УстановитьДоступностьСвойств(ЭтотОбъект); - Если НЕ ПользовательИБАутентификацияOpenID И НЕ ПользовательИБАутентификацияСтандартная И НЕ ПользовательИБАутентификацияОС Тогда @@ -1243,6 +1272,8 @@ ВходВПрограммуРазрешен = ВходВПрограммуРазрешенЗначениеПрямогоИзменения; КонецЕсли; + УстановитьДоступностьСвойств(ЭтотОбъект); + КонецПроцедуры &НаКлиенте @@ -1734,7 +1765,6 @@ ОписаниеПользователяИБ.ПоказыватьВСпискеВыбора = НЕ Константы.ИспользоватьВнешнихПользователей.Получить(); КонецЕсли; - ОписаниеПользователяИБ.АутентификацияСтандартная = Истина; ОписаниеПользователяИБ.Роли = Новый Массив; Возврат ОписаниеПользователяИБ; @@ -1762,6 +1792,7 @@ Если Пользователи.ВходВПрограммуРазрешен(ПрочитанныеСвойства) Тогда ВходВПрограммуРазрешен = Истина; ВходВПрограммуРазрешенЗначениеПрямогоИзменения = Истина; + ОписаниеПользователяИБ.АутентификацияСтандартная = Истина; КонецЕсли; // Копирование свойств и ролей пользователяИБ. @@ -1848,6 +1879,11 @@ ПользовательИБАутентификацияОС = ХранимыеСвойства.АутентификацияОС; КонецЕсли; + Если ПользовательИБСуществует Тогда + ПользовательИБАутентификацияСтандартнаяЗначениеПрямогоИзменения + = ПользовательИБАутентификацияСтандартная; + КонецЕсли; + ОбработатьИнтерфейсРолей("ЗаполнитьРоли", ОписаниеПользователяИБ.Роли); ПриЧтенииВходВПрограммуРазрешен = ВходВПрограммуРазрешен; @@ -1998,16 +2034,6 @@ И Не Форма.ПользовательИБЗапрещеноИзменятьПароль) И Не Объект.Служебный; - // Настройка необходимости заполнения. - Если ТребуетсяЗаписьПользователяИБ(Форма, Ложь) Тогда - НоваяСтраница = Элементы.ИмяСОтметкойНезаполненного; - Иначе - НоваяСтраница = Элементы.ИмяБезОтметкиНезаполненного; - КонецЕсли; - - Если Элементы.ИмяПереключениеОтметкиНезаполненного.ТекущаяСтраница <> НоваяСтраница Тогда - Элементы.ИмяПереключениеОтметкиНезаполненного.ТекущаяСтраница = НоваяСтраница; - КонецЕсли; ОбновитьИмяДляВхода(Форма); // Настройка доступности связанных элементов. diff --git a/SSL/src/Catalogs/Пользователи/ManagerModule.bsl b/SSL/src/Catalogs/Пользователи/ManagerModule.bsl index 5def29de1..981ae44c2 100644 --- a/SSL/src/Catalogs/Пользователи/ManagerModule.bsl +++ b/SSL/src/Catalogs/Пользователи/ManagerModule.bsl @@ -51,6 +51,40 @@ // Конец СтандартныеПодсистемы.УправлениеДоступом +// СтандартныеПодсистемы.ПодключаемыеКоманды + +// Определяет список команд создания на основании. +// +// Параметры: +// КомандыСозданияНаОсновании - ТаблицаЗначений - см. СозданиеНаОснованииПереопределяемый.ПередДобавлениемКомандСозданияНаОсновании. +// Параметры - Структура - см. СозданиеНаОснованииПереопределяемый.ПередДобавлениемКомандСозданияНаОсновании. +// +Процедура ДобавитьКомандыСозданияНаОсновании(КомандыСозданияНаОсновании, Параметры) Экспорт + +КонецПроцедуры + +// Для использования в процедуре ДобавитьКомандыСозданияНаОсновании других модулей менеджеров объектов. +// Добавляет в список команд создания на основании этот объект. +// +// Параметры: +// КомандыСозданияНаОсновании - ТаблицаЗначений - см. СозданиеНаОснованииПереопределяемый.ПередДобавлениемКомандСозданияНаОсновании. +// +// Возвращаемое значение: +// СтрокаТаблицыЗначений, Неопределено - описание добавленной команды. +// +Функция ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании) Экспорт + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда + МодульСозданиеНаОсновании = ОбщегоНазначения.ОбщийМодуль("СозданиеНаОсновании"); + Возврат МодульСозданиеНаОсновании.ДобавитьКомандуСозданияНаОсновании(КомандыСозданияНаОсновании, Метаданные.Справочники.Пользователи); + КонецЕсли; + + Возврат Неопределено; + +КонецФункции + +// Конец СтандартныеПодсистемы.ПодключаемыеКоманды + #КонецОбласти #КонецОбласти diff --git a/SSL/src/Catalogs/Пользователи/ObjectModule.bsl b/SSL/src/Catalogs/Пользователи/ObjectModule.bsl index 92d6ff12d..6ee0c8baf 100644 --- a/SSL/src/Catalogs/Пользователи/ObjectModule.bsl +++ b/SSL/src/Catalogs/Пользователи/ObjectModule.bsl @@ -37,9 +37,13 @@ // - Булево - если Истина, тогда установить аутентификацию, как // указана или сохранена в значениях одноименных реквизитов; // если Ложь, тогда снять все виды аутентификации у пользователя ИБ. -// - свойство не указано - прямая установка сохраняемых и +// Если свойство не указано - прямая установка сохраняемых и // действующих видов аутентификации (для поддержки обратной совместимости). // +// ПотребоватьСменуПароляПриВходе - Булево - изменяет одноименный флажок карточки пользователя. +// - Неопределено - флажок не изменяется (аналогично, +// если свойство не указано). +// // АутентификацияСтандартная, АутентификацияОС, АутентификацияOpenID - установить // сохраняемые значения видов аутентификации и, в зависимости от использования свойства. // ВходВПрограммуРазрешен, установить действующие значения видов аутентификации. diff --git a/SSL/src/Catalogs/Пользователи/Пользователи.mdo b/SSL/src/Catalogs/Пользователи/Пользователи.mdo index 204ff4556..de614cf80 100644 --- a/SSL/src/Catalogs/Пользователи/Пользователи.mdo +++ b/SSL/src/Catalogs/Пользователи/Пользователи.mdo @@ -12,6 +12,7 @@ <key>ru</key> <value>Пользователи</value> </synonym> + <comment>АПК:413 - №744.2.1.1 Допустимо не отключать историю выбора, так как она используется, а переопределение отбора фиксированное, то есть служебные и недействительные пользователи в нее не попадут, но если как-то попали, то это не является проблемой</comment> <useStandardCommands>true</useStandardCommands> <inputByString>Catalog.Пользователи.StandardAttribute.Description</inputByString> <fullTextSearchOnInputByString>DontUse</fullTextSearchOnInputByString> @@ -175,6 +176,8 @@ <lang>ru</lang> </pages> </help> + <dataLockFields>Catalog.Пользователи.StandardAttribute.Description</dataLockFields> + <dataLockFields>Catalog.Пользователи.Attribute.ИдентификаторПользователяИБ</dataLockFields> <dataLockControlMode>Managed</dataLockControlMode> <fullTextSearch>Use</fullTextSearch> <objectPresentation> @@ -797,6 +800,11 @@ <key>ru</key> <value>Ограничение на вход в программу</value> </synonym> + <help> + <pages> + <lang>ru</lang> + </pages> + </help> <usePurposes>PersonalComputer</usePurposes> <usePurposes>MobileDevice</usePurposes> </forms> diff --git a/SSL/src/Catalogs/ПользовательскиеНастройкиОтчетов/ПользовательскиеНастройкиОтчетов.mdo b/SSL/src/Catalogs/ПользовательскиеНастройкиОтчетов/ПользовательскиеНастройкиОтчетов.mdo index eca38d161..256bae2d7 100644 --- a/SSL/src/Catalogs/ПользовательскиеНастройкиОтчетов/ПользовательскиеНастройкиОтчетов.mdo +++ b/SSL/src/Catalogs/ПользовательскиеНастройкиОтчетов/ПользовательскиеНастройкиОтчетов.mdo @@ -93,6 +93,8 @@ <maxValue xsi:type="core:UndefinedValue"/> </standardAttributes> <createOnInput>Use</createOnInput> + <dataLockFields>Catalog.ПользовательскиеНастройкиОтчетов.Attribute.Вариант</dataLockFields> + <dataLockFields>Catalog.ПользовательскиеНастройкиОтчетов.Attribute.Пользователь</dataLockFields> <dataLockControlMode>Managed</dataLockControlMode> <objectPresentation> <key>ru</key> diff --git a/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ФормаСписка/Module.bsl index c6e8b15dc..55fd73414 100644 --- a/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ФормаСписка/Module.bsl @@ -61,12 +61,17 @@ // СтандартныеПодсистемы.ПодключаемыеКоманды &НаКлиенте Процедура Подключаемый_ВыполнитьКоманду(Команда) - ПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Элементы.Список); + ПодключаемыеКомандыКлиент.НачатьВыполнениеКоманды(ЭтотОбъект, Команда, Элементы.Список); +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ПродолжитьВыполнениеКомандыНаСервере(ПараметрыВыполнения, ДополнительныеПараметры) Экспорт + ВыполнитьКомандуНаСервере(ПараметрыВыполнения); КонецПроцедуры &НаСервере -Процедура Подключаемый_ВыполнитьКомандуНаСервере(Контекст, Результат) Экспорт - ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, Контекст, Элементы.Список, Результат); +Процедура ВыполнитьКомандуНаСервере(ПараметрыВыполнения) + ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, ПараметрыВыполнения, Элементы.Список); КонецПроцедуры &НаКлиенте diff --git a/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/ManagerModule.bsl b/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/ManagerModule.bsl index 0c9317f3e..a4c35d10a 100644 --- a/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/ManagerModule.bsl +++ b/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/ManagerModule.bsl @@ -176,11 +176,10 @@ КонецЦикла; Для каждого СтрокаТаблицы Из ТаблицаСоответствий Цикл - ВзаимодействияВызовСервера.УстановитьПапкуЭлектронногоПисьма( - СтрокаТаблицы.Письмо, СтрокаТаблицы.Папка, Ложь); - Если ЗначениеЗаполнено(СтрокаТаблицы.Папка) И МассивПапок.Найти(СтрокаТаблицы.Папка) = Неопределено Тогда - МассивПапок.Добавить(СтрокаТаблицы.Папка); - КонецЕсли; + Взаимодействия.УстановитьПапкуЭлектронногоПисьма(СтрокаТаблицы.Письмо, СтрокаТаблицы.Папка, Ложь); + Если ЗначениеЗаполнено(СтрокаТаблицы.Папка) И МассивПапок.Найти(СтрокаТаблицы.Папка) = Неопределено Тогда + МассивПапок.Добавить(СтрокаТаблицы.Папка); + КонецЕсли; КонецЦикла; Взаимодействия.РассчитатьРассмотреноПоПапкам(Взаимодействия.ТаблицаДанныхДляРасчетаРассмотрено(МассивПапок, "Папка")); diff --git a/SSL/src/Catalogs/ПравилаПроверкиУчета/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ПравилаПроверкиУчета/Forms/ФормаСписка/Module.bsl index 0d8a3bb92..3bc076191 100644 --- a/SSL/src/Catalogs/ПравилаПроверкиУчета/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ПравилаПроверкиУчета/Forms/ФормаСписка/Module.bsl @@ -227,29 +227,8 @@ ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор); ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Выполнение проверок ведения учета'"); - МассивПараметров = Новый Массив; - Для Каждого Проверка Из Проверки Цикл - - РеквизитыПроверки = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Проверка, - "Идентификатор, Наименование, ИдентификаторРегламентногоЗадания, - |ДатаНачалаПроверки, ЛимитПроблем, СпособВыполнения"); - - ПараметрыПроверки = Новый Структура; - ПараметрыПроверки.Вставить("Идентификатор", РеквизитыПроверки.Идентификатор); - ПараметрыПроверки.Вставить("Наименование", РеквизитыПроверки.Наименование); - ПараметрыПроверки.Вставить("ИдентификаторРегламентногоЗадания", РеквизитыПроверки.ИдентификаторРегламентногоЗадания); - ПараметрыПроверки.Вставить("ДатаНачалаПроверки", РеквизитыПроверки.ДатаНачалаПроверки); - ПараметрыПроверки.Вставить("ЛимитПроблем", РеквизитыПроверки.ЛимитПроблем); - ПараметрыПроверки.Вставить("СпособВыполнения", РеквизитыПроверки.СпособВыполнения); - ПараметрыПроверки.Вставить("ПроверкаБылаОстановлена", Ложь); - ПараметрыПроверки.Вставить("РучнойЗапуск", Истина); - - МассивПараметров.Добавить(ПараметрыПроверки); - - КонецЦикла; - Возврат ДлительныеОперации.ВыполнитьВФоне("КонтрольВеденияУчетаСлужебный.ВыполнитьПроверкиВФоновомЗадании", - Новый Структура("МассивПараметров", МассивПараметров), ПараметрыВыполнения); + Новый Структура("Проверки", Проверки), ПараметрыВыполнения); КонецФункции @@ -263,11 +242,13 @@ Если Результат.Статус = "Ошибка" Тогда ВызватьИсключение Результат.КраткоеПредставлениеОшибки; ИначеЕсли Результат.Статус = "Выполнено" Тогда - ПоказатьОповещениеПользователя(НСтр("ru = 'Проверка выполнена'"),, + Оповестить("КонтрольВеденияУчета_УспешнаяПроверка"); + ПоказатьОповещениеПользователя(НСтр("ru = 'Проверка выполнена'"), + "e1cib/data/Отчет.РезультатыПроверкиУчета", НСтр("ru = 'Проверка ведения учета завершена успешно.'")); КонецЕсли; -КонецПроцедуры +КонецПроцедуры &НаСервере Процедура ВосстановитьПоНачальномуЗаполнениюНаСервере() @@ -319,12 +300,12 @@ ТекстоваяСсылка = ПоместитьВоВременноеХранилище(ОбщееРасписание, УникальныйИдентификатор); - Возврат Новый ФорматированнаяСтрока(НСтр("ru='Общее расписание выполнения проверок:'") + " ", + Возврат Новый ФорматированнаяСтрока(НСтр("ru = 'Общее расписание выполнения проверок:'") + " ", Новый ФорматированнаяСтрока(ОбщееРасписаниеПредставление, , , , ТекстоваяСсылка)); Иначе - Возврат Новый ФорматированнаяСтрока(НСтр("ru='Общее расписание выполнения проверок:'") + " ", + Возврат Новый ФорматированнаяСтрока(НСтр("ru = 'Общее расписание выполнения проверок:'") + " ", Новый ФорматированнаяСтрока(ОбщееРасписаниеПредставление, , ЦветаСтиля.ГиперссылкаЦвет)); КонецЕсли; @@ -367,19 +348,23 @@ // СтандартныеПодсистемы.ПодключаемыеКоманды &НаКлиенте Процедура Подключаемый_ВыполнитьКоманду(Команда) - ПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Элементы.Список); + ПодключаемыеКомандыКлиент.НачатьВыполнениеКоманды(ЭтотОбъект, Команда, Элементы.Список); +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ПродолжитьВыполнениеКомандыНаСервере(ПараметрыВыполнения, ДополнительныеПараметры) Экспорт + ВыполнитьКомандуНаСервере(ПараметрыВыполнения); КонецПроцедуры &НаСервере -Процедура Подключаемый_ВыполнитьКомандуНаСервере(Контекст, Результат) Экспорт - ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, Контекст, Элементы.Список, Результат); +Процедура ВыполнитьКомандуНаСервере(ПараметрыВыполнения) + ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, ПараметрыВыполнения, Элементы.Список); КонецПроцедуры &НаКлиенте Процедура Подключаемый_ОбновитьКоманды() ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Элементы.Список); КонецПроцедуры - // Конец СтандартныеПодсистемы.ПодключаемыеКоманды #КонецОбласти diff --git a/SSL/src/Catalogs/ПравилаПроверкиУчета/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ПравилаПроверкиУчета/Forms/ФормаЭлемента/Module.bsl index 4a6fc3728..d5948da54 100644 --- a/SSL/src/Catalogs/ПравилаПроверкиУчета/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ПравилаПроверкиУчета/Forms/ФормаЭлемента/Module.bsl @@ -12,7 +12,7 @@ Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Если НЕ ЗначениеЗаполнено(Объект.Ссылка) Тогда - ВызватьИсключение НСтр("ru='Интерактивное создание запрещено.'"); + ВызватьИсключение НСтр("ru = 'Интерактивное создание запрещено.'"); КонецЕсли; ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(Объект, ЭтотОбъект); @@ -160,25 +160,11 @@ ПараметрыВыполнения.НаименованиеФоновогоЗадания = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Выполнение проверки ведения учета ""%1""'"), Объект.Наименование); - МассивПараметров = Новый Массив; - - ПараметрыЗадания = Новый Структура; - ПараметрыЗадания.Вставить("Идентификатор", Объект.Идентификатор); - ПараметрыЗадания.Вставить("Наименование", Объект.Наименование); - ПараметрыЗадания.Вставить("ИдентификаторРегламентногоЗадания", Объект.ИдентификаторРегламентногоЗадания); - ПараметрыЗадания.Вставить("ДатаНачалаПроверки", Объект.ДатаНачалаПроверки); - ПараметрыЗадания.Вставить("ЛимитПроблем", Объект.ЛимитПроблем); - ПараметрыЗадания.Вставить("СпособВыполнения", Объект.СпособВыполнения); - ПараметрыЗадания.Вставить("ВажностьПроблемы", Объект.ВажностьПроблемы); - ПараметрыЗадания.Вставить("КонтекстПроверокВеденияУчета", Объект.КонтекстПроверокВеденияУчета); - ПараметрыЗадания.Вставить("УточнениеКонтекстаПроверокВеденияУчета", Объект.УточнениеКонтекстаПроверокВеденияУчета); - ПараметрыЗадания.Вставить("ПроверкаБылаОстановлена", Ложь); - ПараметрыЗадания.Вставить("РучнойЗапуск", Истина); - - МассивПараметров.Добавить(ПараметрыЗадания); + Проверки = Новый Массив; + Проверки.Добавить(Объект.Ссылка); Возврат ДлительныеОперации.ВыполнитьВФоне("КонтрольВеденияУчетаСлужебный.ВыполнитьПроверкиВФоновомЗадании", - Новый Структура("МассивПараметров", МассивПараметров), ПараметрыВыполнения); + Новый Структура("Проверки", Проверки), ПараметрыВыполнения); КонецФункции @@ -240,7 +226,7 @@ Если ОтдельноеРегламентноеЗадание = Неопределено Тогда Элементы.ПредставлениеИндивидуальногоРасписания.Заголовок = - Новый ФорматированнаяСтрока(НСтр("ru='Настроить расписание'"), , , , ПоместитьВоВременноеХранилище("ДобавитьЗадание", УникальныйИдентификатор)); + Новый ФорматированнаяСтрока(НСтр("ru = 'Настроить расписание'"), , , , ПоместитьВоВременноеХранилище("ДобавитьЗадание", УникальныйИдентификатор)); Иначе Элементы.ПредставлениеИндивидуальногоРасписания.Заголовок = Новый ФорматированнаяСтрока(ОтдельноеРасписаниеПредставление, , , , ПоместитьВоВременноеХранилище(ОтдельноеРегламентноеЗадание.Расписание, УникальныйИдентификатор)); @@ -486,22 +472,25 @@ КонецПроцедуры // СтандартныеПодсистемы.ПодключаемыеКоманды - &НаКлиенте Процедура Подключаемый_ВыполнитьКоманду(Команда) - ПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Объект); + ПодключаемыеКомандыКлиент.НачатьВыполнениеКоманды(ЭтотОбъект, Команда, Объект); +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ПродолжитьВыполнениеКомандыНаСервере(ПараметрыВыполнения, ДополнительныеПараметры) Экспорт + ВыполнитьКомандуНаСервере(ПараметрыВыполнения); КонецПроцедуры &НаСервере -Процедура Подключаемый_ВыполнитьКомандуНаСервере(Контекст, Результат) Экспорт - ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, Контекст, Объект, Результат); +Процедура ВыполнитьКомандуНаСервере(ПараметрыВыполнения) + ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, ПараметрыВыполнения, Объект); КонецПроцедуры &НаКлиенте Процедура Подключаемый_ОбновитьКоманды() ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект); КонецПроцедуры - // Конец СтандартныеПодсистемы.ПодключаемыеКоманды #КонецОбласти \ No newline at end of file diff --git a/SSL/src/Catalogs/ПредопределенныеВариантыОтчетов/ManagerModule.bsl b/SSL/src/Catalogs/ПредопределенныеВариантыОтчетов/ManagerModule.bsl index 6ebf98b59..6a4f62f4d 100644 --- a/SSL/src/Catalogs/ПредопределенныеВариантыОтчетов/ManagerModule.bsl +++ b/SSL/src/Catalogs/ПредопределенныеВариантыОтчетов/ManagerModule.bsl @@ -17,7 +17,7 @@ // Имена реквизитов справочника, значения которых разрешено изменять массово. // // Возвращаемое значение: -// Массив (Строка) - Имена реквизитов справочника. +// Массив Из Строка - Имена реквизитов справочника. // Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт @@ -34,7 +34,7 @@ // Имена реквизитов справочника, в разрезе которых контролируется уникальность элементов. // // Возвращаемое значение: -// Массив (Строка) - Имена реквизитов справочника. +// Массив Из Строка - Имена реквизитов справочника. // Функция ПоляЕстественногоКлюча() Экспорт @@ -59,8 +59,8 @@ Процедура ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка) - ЛокализацияКлиентСервер.ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка); - + МультиязычностьКлиентСервер.ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка); + КонецПроцедуры #КонецОбласти diff --git a/SSL/src/Catalogs/ПредопределенныеВариантыОтчетовРасширений/ManagerModule.bsl b/SSL/src/Catalogs/ПредопределенныеВариантыОтчетовРасширений/ManagerModule.bsl index 6ebf98b59..6a4f62f4d 100644 --- a/SSL/src/Catalogs/ПредопределенныеВариантыОтчетовРасширений/ManagerModule.bsl +++ b/SSL/src/Catalogs/ПредопределенныеВариантыОтчетовРасширений/ManagerModule.bsl @@ -17,7 +17,7 @@ // Имена реквизитов справочника, значения которых разрешено изменять массово. // // Возвращаемое значение: -// Массив (Строка) - Имена реквизитов справочника. +// Массив Из Строка - Имена реквизитов справочника. // Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт @@ -34,7 +34,7 @@ // Имена реквизитов справочника, в разрезе которых контролируется уникальность элементов. // // Возвращаемое значение: -// Массив (Строка) - Имена реквизитов справочника. +// Массив Из Строка - Имена реквизитов справочника. // Функция ПоляЕстественногоКлюча() Экспорт @@ -59,8 +59,8 @@ Процедура ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка) - ЛокализацияКлиентСервер.ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка); - + МультиязычностьКлиентСервер.ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка); + КонецПроцедуры #КонецОбласти diff --git a/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/ManagerModule.bsl b/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/ManagerModule.bsl index cbb732efc..138330464 100644 --- a/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/ManagerModule.bsl +++ b/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/ManagerModule.bsl @@ -202,14 +202,14 @@ Если ОбъектовОбработано = 0 И ПроблемныхОбъектов <> 0 Тогда ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Процедуре Справочники.ОбработатьДанныеДляПереходаНаНовуюВерсию.ОбработатьДанныеДляПереходаНаНовуюВерсию не удалось обработать некоторые программы электронной подписи (пропущены): %1'"), + НСтр("ru = 'Процедуре Справочники.ПрограммыЭлектроннойПодписиИШифрования.ОбработатьДанныеДляПереходаНаНовуюВерсию не удалось обработать некоторые программы электронной подписи (пропущены): %1'"), ПроблемныхОбъектов); ВызватьИсключение ТекстСообщения; Иначе ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Информация, Метаданные.НайтиПоПолномуИмени("Справочник.ПрограммыЭлектроннойПодписиИШифрования"),, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Процедура Справочники.ОбработатьДанныеДляПереходаНаНовуюВерсию.ОбработатьДанныеДляПереходаНаНовуюВерсию обработала очередную порцию программ электронной подписи: %1'"), + НСтр("ru = 'Процедура Справочники.ПрограммыЭлектроннойПодписиИШифрования.ОбработатьДанныеДляПереходаНаНовуюВерсию обработала очередную порцию программ электронной подписи: %1'"), ОбъектовОбработано)); КонецЕсли; diff --git a/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаЭлемента/Form.form index ef5d3c0ef..1e2618698 100644 --- a/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаЭлемента/Form.form @@ -433,7 +433,7 @@ <id>20</id> <title> <key>ru</key> - <value>Переносы дней</value> + <value>Переносы выходных дней</value> true true diff --git a/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаЭлемента/Module.bsl index 3941b6cec..d0b3cee7b 100644 --- a/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаЭлемента/Module.bsl @@ -226,7 +226,7 @@ КонецЕсли; ПрочитатьДанныеПроизводственногоКалендаря(СсылкаНаКалендарь, НомерТекущегоГода); - + КонецПроцедуры &НаСервере @@ -417,9 +417,7 @@ // Перенос уже добавлен, пропускаем. Продолжить; КонецЕсли; - ВидДняИсточник = ПредставлениеВидаДняПереноса(Форма.ВидыДней.Получить(ДатаПриемник), ДатаИсточник); - ВидДняПриемник = ПредставлениеВидаДняПереноса(Форма.ВидыДней.Получить(ДатаИсточник), ДатаПриемник); - Форма.СписокПереносов.Добавить(ДатаИсточник, ПредставлениеПереноса(ДатаИсточник, ДатаПриемник, ВидДняИсточник, ВидДняПриемник)); + Форма.СписокПереносов.Добавить(ДатаИсточник, ПредставлениеПереноса(ДатаИсточник, ДатаПриемник)); КонецЦикла; Форма.СписокПереносов.СортироватьПоЗначению(); @@ -428,43 +426,14 @@ КонецПроцедуры &НаКлиентеНаСервереБезКонтекста -Функция ПредставлениеПереноса(ДатаИсточник, ДатаПриемник, ВидДняИсточник, ВидДняПриемник) +Функция ПредставлениеПереноса(ДатаИсточник, ДатаПриемник) - Представление = ""; - - ШаблонМР = НСтр("ru = '%1 %3 перенесен на %2 %4'"); - ШаблонСР = НСтр("ru = '%1 %3 перенесено на %2 %4'"); - ШаблонЖР = НСтр("ru = '%1 %3 перенесена на %2 %4'"); - - ДниЖР = Новый Соответствие; - ДниЖР.Вставить(НСтр("ru = 'среда'"), НСтр("ru = 'среду'")); - ДниЖР.Вставить(НСтр("ru = 'пятница'"), НСтр("ru = 'пятницу'")); - ДниЖР.Вставить(НСтр("ru = 'суббота'"), НСтр("ru = 'субботу'")); - - ДниСР = Новый Соответствие; - ДниСР.Вставить(НСтр("ru = 'воскресенье'"), Истина); - - Шаблон = ШаблонМР; - Если ДниЖР[ВидДняИсточник] <> Неопределено Тогда - Шаблон = ШаблонЖР; - КонецЕсли; - Если ДниСР[ВидДняИсточник] <> Неопределено Тогда - Шаблон = ШаблонСР; - КонецЕсли; - - ПредставлениеДняПриемника = ВидДняПриемник; - Если ДниЖР[ВидДняПриемник] <> Неопределено Тогда - ПредставлениеДняПриемника = ДниЖР[ВидДняПриемник]; - КонецЕсли; - - Представление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - Шаблон, - Формат(ДатаИсточник, "ДФ='д ММММ'"), - Формат(ДатаПриемник, "ДФ='д ММММ'"), - ВидДняИсточник, - ПредставлениеДняПриемника); - - Возврат Представление; + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'с %1 %2 на %3 %4'"), + ДеньНеделиВФормулировкеСКакогоПереносим(ДатаИсточник), + Формат(ДатаИсточник, "ДФ='д ММММ'"), + ДеньНеделиВФормулировкеНаКакойПереносим(ДатаПриемник), + Формат(ДатаПриемник, "ДФ='д ММММ'")); КонецФункции @@ -476,20 +445,6 @@ КонецПроцедуры -&НаКлиентеНаСервереБезКонтекста -Функция ПредставлениеВидаДняПереноса(ВидДня, Дата) - - // Если день является рабочим (или праздником), то в качестве представления выводим название дня недели. - - Если ВидДня = ПредопределенноеЗначение("Перечисление.ВидыДнейПроизводственногоКалендаря.Рабочий") - Или ВидДня = ПредопределенноеЗначение("Перечисление.ВидыДнейПроизводственногоКалендаря.Праздник") Тогда - ВидДня = Формат(Дата, "ДФ='дддд'"); - КонецЕсли; - - Возврат НРег(Строка(ВидДня)); - -КонецФункции - &НаСервере Процедура НастроитьПолеКалендаря() @@ -628,4 +583,46 @@ КонецФункции +&НаКлиентеНаСервереБезКонтекста +Функция ДеньНеделиВФормулировкеСКакогоПереносим(Дата) + + Соответствие = Новый Соответствие; + Соответствие.Вставить(1, НСтр("ru = 'понедельника'")); + Соответствие.Вставить(2, НСтр("ru = 'вторника'")); + Соответствие.Вставить(3, НСтр("ru = 'среды'")); + Соответствие.Вставить(4, НСтр("ru = 'четверга'")); + Соответствие.Вставить(5, НСтр("ru = 'пятницы'")); + Соответствие.Вставить(6, НСтр("ru = 'субботы'")); + Соответствие.Вставить(7, НСтр("ru = 'воскресенья'")); + + Представление = Соответствие[ДеньНедели(Дата)]; + Если Представление = Неопределено Тогда + Возврат Формат(Дата, "ДФ='дддд'"); + КонецЕсли; + + Возврат Представление; + +КонецФункции + +&НаКлиентеНаСервереБезКонтекста +Функция ДеньНеделиВФормулировкеНаКакойПереносим(Дата) + + Соответствие = Новый Соответствие; + Соответствие.Вставить(1, НСтр("ru = 'понедельник'")); + Соответствие.Вставить(2, НСтр("ru = 'вторник'")); + Соответствие.Вставить(3, НСтр("ru = 'среду'")); + Соответствие.Вставить(4, НСтр("ru = 'четверг'")); + Соответствие.Вставить(5, НСтр("ru = 'пятницу'")); + Соответствие.Вставить(6, НСтр("ru = 'субботу'")); + Соответствие.Вставить(7, НСтр("ru = 'воскресенье'")); + + Представление = Соответствие[ДеньНедели(Дата)]; + Если Представление = Неопределено Тогда + Возврат Формат(Дата, "ДФ='дддд'"); + КонецЕсли; + + Возврат Представление; + +КонецФункции + #КонецОбласти diff --git a/SSL/src/Catalogs/ПроизводственныеКалендари/ManagerModule.bsl b/SSL/src/Catalogs/ПроизводственныеКалендари/ManagerModule.bsl index f3f9f6a93..e2206ba0b 100644 --- a/SSL/src/Catalogs/ПроизводственныеКалендари/ManagerModule.bsl +++ b/SSL/src/Catalogs/ПроизводственныеКалендари/ManagerModule.bsl @@ -182,25 +182,30 @@ И СокрЛП(Выборка.КодБазового) = СокрЛП(Выборка.ПроизводственныйКалендарьКодБазового) Тогда Продолжить; КонецЕсли; - Если ЗначениеЗаполнено(Выборка.Ссылка) Тогда - СправочникОбъект = Выборка.Ссылка.ПолучитьОбъект(); - Иначе + Если Не ЗначениеЗаполнено(Выборка.Ссылка) Тогда Если Не ОбщегоНазначения.РазделениеВключено() И ЗначениеЗаполнено(Выборка.КодБазового) Тогда // Зависимые календари не создаем автоматически при обновлении в локальном режиме. Продолжить; КонецЕсли; - СправочникОбъект = СоздатьЭлемент(); КонецЕсли; - СправочникОбъект.Код = СокрЛП(Выборка.Код); - СправочникОбъект.Наименование = СокрЛП(Выборка.Наименование); - Если ЗначениеЗаполнено(Выборка.КодБазового) Тогда - СправочникОбъект.БазовыйКалендарь = НайтиПоКоду(Выборка.КодБазового); - КонецЕсли; - Если ОбновлениеИнформационнойБазы.ЭтоВызовИзОбработчикаОбновления() Тогда - ОбновлениеИнформационнойБазы.ЗаписатьОбъект(СправочникОбъект); - Продолжить; - КонецЕсли; - СправочникОбъект.Записать(); + НачатьТранзакцию(); + Попытка + Если Не ЗначениеЗаполнено(Выборка.Ссылка) Тогда + СправочникОбъект = СоздатьЭлемент(); + Иначе + БлокировкаДанных = Новый БлокировкаДанных; + ЭлементБлокировки = БлокировкаДанных.Добавить("Справочник.ПроизводственныеКалендари"); + ЭлементБлокировки.УстановитьЗначение("Ссылка", Выборка.Ссылка); + БлокировкаДанных.Заблокировать(); + СправочникОбъект = Выборка.Ссылка.ПолучитьОбъект(); + КонецЕсли; + ЗаполнитьПроизводственныйКалендарь(СправочникОбъект, Выборка); + ЗаписатьПроизводственныйКалендарь(СправочникОбъект); + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; КонецЦикла; КонецПроцедуры @@ -449,7 +454,7 @@ // Получает таблицу поставляемых в составе программы производственных календарей. // // Возвращаемое значение: -// ТаблицаЗначений. +// ТаблицаЗначений - . // Функция ПроизводственныеКалендариИзМакета() Экспорт @@ -643,7 +648,7 @@ // Определяет источник актуального перечня поддерживаемых производственных календарей (макет или поставка классификатора). // // Возвращаемое значение: -// ТаблицаЗначений. +// ТаблицаЗначений - . // Функция ПроизводственныеКалендариПоУмолчанию() @@ -753,7 +758,7 @@ КалендарныеГрафики.РаспространитьИзмененияДанныхПроизводственныхКалендарей(УсловияОбновления); КонецПроцедуры - + // Функция определяет соответствие видов дня производственного календаря и цвета оформления // этого дня в поле календаря. // @@ -852,7 +857,7 @@ Функция ДлинаСуток() Возврат 24 * 3600; КонецФункции - + Функция НовыеДанныеПроизводственныхКалендарей() ТаблицаДанных = Новый ТаблицаЗначений; @@ -1006,6 +1011,27 @@ КонецФункции +Процедура ЗаполнитьПроизводственныйКалендарь(СправочникОбъект, Выборка) + + СправочникОбъект.Код = СокрЛП(Выборка.Код); + СправочникОбъект.Наименование = СокрЛП(Выборка.Наименование); + Если ЗначениеЗаполнено(Выборка.КодБазового) Тогда + СправочникОбъект.БазовыйКалендарь = НайтиПоКоду(Выборка.КодБазового); + КонецЕсли; + +КонецПроцедуры + +Процедура ЗаписатьПроизводственныйКалендарь(СправочникОбъект) + + Если ОбновлениеИнформационнойБазы.ЭтоВызовИзОбработчикаОбновления() Тогда + ОбновлениеИнформационнойБазы.ЗаписатьОбъект(СправочникОбъект); + Возврат; + КонецЕсли; + + СправочникОбъект.Записать(); + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Печатная форма производственного календаря. diff --git a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаЭлемента/Form.form index 970ae99d1..4bfebdbd8 100644 --- a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаЭлемента/Form.form @@ -706,13 +706,6 @@ ru Виды доступа - - System.DefaultGUIFont - true - false - false - false - true true @@ -1139,6 +1132,43 @@ Normal
    + + ЗначенияДоступаВключаяНижестоящие + 397 + true + true + + true + + + Объект.ЗначенияДоступа.ВключаяНижестоящие + + None + + ЗначенияДоступаВключаяНижестоящиеРасширеннаяПодсказка + 399 + Label + true + true + + Left + + + + ЗначенияДоступаВключаяНижестоящиеКонтекстноеМеню + 398 + true + + CheckBoxField + Auto + true + + CommonPicture.ИерархическийСписок + + Left + true + + ЗначенияДоступаКоманднаяПанель 235 @@ -1250,6 +1280,7 @@ true true MultiRow +
    true
    1 1 AutoUse diff --git a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаЭлемента/Module.bsl index 1dafb24b9..82ec29156 100644 --- a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаЭлемента/Module.bsl @@ -193,7 +193,7 @@ СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Роль ""%1"" не найдена в метаданных.'"), Строка.Синоним), "Роли", ЭлементыДерева.Индекс(Строка), - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Роль ""%1"" в строке %%1 не найдена в метаданных.'"), Строка.Синоним)); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Роль ""%1"" в строке %2 не найдена в метаданных.'"), Строка.Синоним, "%1")); КонецЕсли; Если Строка.ЭтоНедоступнаяРоль Тогда ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Ошибки, @@ -201,7 +201,7 @@ СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Роль ""%1"" недоступна для назначения профиля.'"), Строка.Синоним), "Роли", ЭлементыДерева.Индекс(Строка), - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Роль ""%1"" в строке %%1 недоступна для назначения профиля.'"), Строка.Синоним)); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Роль ""%1"" в строке %2 недоступна для назначения профиля.'"), Строка.Синоним, "%1")); КонецЕсли; КонецЦикла; КонецЕсли; @@ -615,7 +615,7 @@ Если Справочники.ПрофилиГруппДоступа.ЕстьНачальноеЗаполнениеПрофиля(ТекущийОбъект.Ссылка) Тогда ОписаниеПоставляемогоПрофиля = - Справочники.ПрофилиГруппДоступа.ОписаниеПоставляемогоПрофиля(ТекущийОбъект.Ссылка); + Справочники.ПрофилиГруппДоступа.ПояснениеПоставляемогоПрофиля(ТекущийОбъект.Ссылка); Если Справочники.ПрофилиГруппДоступа.ПоставляемыйПрофильИзменен(ТекущийОбъект) Тогда // Определение прав восстановления по начальному заполнению. diff --git a/SSL/src/Catalogs/ПрофилиГруппДоступа/ManagerModule.bsl b/SSL/src/Catalogs/ПрофилиГруппДоступа/ManagerModule.bsl index 85669fd27..6ad4f8484 100644 --- a/SSL/src/Catalogs/ПрофилиГруппДоступа/ManagerModule.bsl +++ b/SSL/src/Catalogs/ПрофилиГруппДоступа/ManagerModule.bsl @@ -74,9 +74,9 @@ // Процедура Обновляет описание поставляемых профилей в // параметрах ограничения доступа при изменении конфигурации. -// +// // Параметры: -// ЕстьИзменения - Булево (возвращаемое значение) - если производилась запись, +// ЕстьИзменения - Булево - (возвращаемое значение) - если производилась запись, // устанавливается Истина, иначе не изменяется. // Процедура ОбновитьОписаниеПоставляемыхПрофилей(ЕстьИзменения = Неопределено) Экспорт @@ -109,9 +109,9 @@ // Процедура Обновляет состав предопределенных профилей в // параметрах ограничения доступа при изменении конфигурации. -// +// // Параметры: -// ЕстьИзменения - Булево (возвращаемое значение) - если производилась запись, +// ЕстьИзменения - Булево - (возвращаемое значение) - если производилась запись, // устанавливается Истина, иначе не изменяется. // Процедура ОбновитьСоставПредопределенныхПрофилей(ЕстьИзменения = Неопределено) Экспорт @@ -196,7 +196,7 @@ // общего модуля УправлениеДоступомПереопределяемый (см. комментарий к процедуре). // // Параметры: -// ЕстьИзменения - Булево (возвращаемое значение) - если производилась запись, +// ЕстьИзменения - Булево - (возвращаемое значение) - если производилась запись, // устанавливается Истина, иначе не изменяется. // Процедура ОбновитьПоставляемыеПрофили(ЕстьИзменения = Неопределено) Экспорт @@ -452,7 +452,7 @@ // с описанием в переопределяемом общем модуле). // // Возвращаемое значение: -// Булево. +// Булево - // Функция ПоставляемыйПрофильИзменен(Профиль) Экспорт @@ -531,9 +531,9 @@ // // Параметры: // Профиль - СправочникСсылка.ПрофилиГруппДоступа. -// +// // Возвращаемое значение: -// Булево. +// Булево - // Функция ЕстьНачальноеЗаполнениеПрофиля(Знач Профиль) Экспорт @@ -553,9 +553,9 @@ // Параметры: // Профиль - СправочникОбъект.ПрофилиГруппДоступа, // ДанныеФормыСтруктура созданные по объекту. -// +// // Возвращаемое значение: -// Булево. +// Булево - // Функция ЗапретИзмененияПрофиля(Знач Профиль) Экспорт @@ -583,20 +583,14 @@ // Возвращаемое значение: // Строка. // -Функция ОписаниеПоставляемогоПрофиля(Профиль) Экспорт +Функция ПояснениеПоставляемогоПрофиля(Профиль) Экспорт ИдентификаторПоставляемыхДанных = Строка(ОбщегоНазначения.ЗначениеРеквизитаОбъекта( Профиль, "ИдентификаторПоставляемыхДанных")); - ПоставляемыеПрофили = УправлениеДоступомСлужебныйПовтИсп.ОписаниеПоставляемыхПрофилей(); - СвойстваПрофиля = ПоставляемыеПрофили.ОписанияПрофилей.Получить(ИдентификаторПоставляемыхДанных); + ПояснениеПоставляемыхПрофилей = УправлениеДоступомСлужебныйПовтИсп.ПояснениеПоставляемыхПрофилей(); - Текст = ""; - Если СвойстваПрофиля <> Неопределено Тогда - Текст = СвойстваПрофиля.Описание; - КонецЕсли; - - Возврат Текст; + Возврат Строка(ПояснениеПоставляемыхПрофилей.Получить(ИдентификаторПоставляемыхДанных)); КонецФункции @@ -898,7 +892,7 @@ //////////////////////////////////////////////////////////////////////////////// // Вспомогательные процедуры и функции. -Функция ПоставляемыеПрофили() +Функция ЗаполненныеПоставляемыеПрофили() ПараметрыОбновления = Новый Структура; // Свойства обновления поставляемых профилей. @@ -916,6 +910,40 @@ УправлениеДоступомПереопределяемый.ПриЗаполненииПоставляемыхПрофилейГруппДоступа( ОписанияПрофилей, ПараметрыОбновления); + // Описание для заполнения предопределенного профиля "Администратор". + ОписаниеПрофиляАдминистратор = УправлениеДоступом.НовоеОписаниеПрофиляГруппДоступа(); + ОписаниеПрофиляАдминистратор.Имя = "Администратор"; + ОписаниеПрофиляАдминистратор.Идентификатор = ИдентификаторПрофиляАдминистратор(); + ОписаниеПрофиляАдминистратор.Наименование = НСтр("ru = 'Администратор'", ОбщегоНазначения.КодОсновногоЯзыка()); + ОписаниеПрофиляАдминистратор.Роли.Добавить("АдминистраторСистемы"); + ОписаниеПрофиляАдминистратор.Роли.Добавить("ПолныеПрава"); + + ОписаниеПрофиляАдминистратор.Описание = + НСтр("ru = 'Предназначен для: + |- настройки параметров работы и обслуживания информационной системы, + |- настройки прав доступа других пользователей, + |- удаления помеченных объектов, + |- в редких случаях для внесения изменений в конфигурацию. + | + |Рекомендуется не использовать для ""обычной"" работы в информационной системе.'"); + + ОписанияПрофилей.Добавить(ОписаниеПрофиляАдминистратор); + + Если Не ОбщегоНазначения.РазделениеВключено() Тогда + ОписанияПрофилей.Добавить( + УправлениеДоступомСлужебный.ОписаниеПрофиляОткрытиеВнешнихОтчетовИОбработок()); + КонецЕсли; + + Возврат Новый Структура("ОписанияПрофилей, ПараметрыОбновления", ОписанияПрофилей, ПараметрыОбновления); + +КонецФункции + +Функция ПоставляемыеПрофили() + + ЗаполненныеПоставляемыеПрофили = ЗаполненныеПоставляемыеПрофили(); + ПараметрыОбновления = ЗаполненныеПоставляемыеПрофили.ПараметрыОбновления; + ОписанияПрофилей = ЗаполненныеПоставляемыеПрофили.ОписанияПрофилей; + ЗаголовокОшибки = НСтр("ru = 'Заданы недопустимые значения в процедуре ПриЗаполненииПоставляемыхПрофилейГруппДоступа |общего модуля УправлениеДоступомПереопределяемый.'") @@ -932,31 +960,6 @@ |должно быть установлено Ложь.'"); КонецЕсли; - // Описание для заполнения предопределенного профиля "Администратор". - ОписаниеПрофиляАдминистратор = УправлениеДоступом.НовоеОписаниеПрофиляГруппДоступа(); - ОписаниеПрофиляАдминистратор.Имя = "Администратор"; - ОписаниеПрофиляАдминистратор.Идентификатор = ИдентификаторПрофиляАдминистратор(); - ОписаниеПрофиляАдминистратор.Наименование = НСтр("ru = 'Администратор'"); - ОписаниеПрофиляАдминистратор.Роли.Добавить("АдминистраторСистемы"); - ОписаниеПрофиляАдминистратор.Роли.Добавить("ПолныеПрава"); - - ОписаниеПрофиляАдминистратор.Описание = - НСтр("ru = 'Предназначен для: - |- настройки параметров работы и обслуживания информационной системы, - |- настройки прав доступа других пользователей, - |- удаления помеченных объектов, - |- в редких случаях для внесения изменений в конфигурацию. - | - |Рекомендуется не использовать для ""обычной"" работы в информационной системе.'") - + Символы.ПС; - - ОписанияПрофилей.Добавить(ОписаниеПрофиляАдминистратор); - - Если Не ОбщегоНазначения.РазделениеВключено() Тогда - ОписанияПрофилей.Добавить( - УправлениеДоступомСлужебный.ОписаниеПрофиляОткрытиеВнешнихОтчетовИОбработок()); - КонецЕсли; - ВсеРоли = ПользователиСлужебный.ВсеРоли().Соответствие; СвойстваВидовДоступа = УправлениеДоступомСлужебныйПовтИсп.СвойстваВидовДоступа(); @@ -966,6 +969,7 @@ СвойстваПрофилей = Новый Соответствие; ОписанияПрофилейМассив = Новый Массив; Для Каждого ОписаниеПрофиля Из ОписанияПрофилей Цикл + ОписаниеПрофиля.Удалить("Описание"); // Идентификатор профиля. Если Не ЗначениеЗаполнено(ОписаниеПрофиля.Идентификатор) Тогда ВызватьИсключение ЗаголовокОшибки + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( @@ -1233,6 +1237,20 @@ КонецФункции +Функция ПояснениеПоставляемыхПрофилей() Экспорт + + ОписанияПрофилей = ЗаполненныеПоставляемыеПрофили().ОписанияПрофилей; + + ПредставлениеВидовДоступа = Новый Соответствие; + + Для Каждого ОписаниеПрофиля Из ОписанияПрофилей Цикл + ПредставлениеВидовДоступа.Вставить(ОписаниеПрофиля.Идентификатор, ОписаниеПрофиля.Описание); + КонецЦикла; + + Возврат Новый ФиксированноеСоответствие(ПредставлениеВидовДоступа); + +КонецФункции + // Для процедуры ПоставляемыеПрофили. Функция ПредставлениеНазначенияПрофиля(НазначениеПрофиля) @@ -1274,9 +1292,9 @@ // Параметры: // СвойстваПрофиля - ФиксированнаяСтруктура - свойства профиля, как в структуре возвращаемой // функцией НовоеОписаниеПрофиляГруппДоступа общего модуля УправлениеДоступом. -// +// // Возвращаемое значение: -// Булево. Истина - профиль изменен. +// Булево - Истина - профиль изменен. // Функция ОбновитьПрофильГруппДоступа(СвойстваПрофиля, НеОбновлятьРолиПользователей = Ложь) diff --git a/SSL/src/Catalogs/ПрофилиГруппДоступа/ObjectModule.bsl b/SSL/src/Catalogs/ПрофилиГруппДоступа/ObjectModule.bsl index 5f5264eb4..6b1a2772c 100644 --- a/SSL/src/Catalogs/ПрофилиГруппДоступа/ObjectModule.bsl +++ b/SSL/src/Catalogs/ПрофилиГруппДоступа/ObjectModule.bsl @@ -63,16 +63,16 @@ Справочники.ПрофилиГруппДоступа.ПоставляемыйПрофильИзменен(ЭтотОбъект); КонецЕсли; + // Обновление наименования у персональных групп доступа этого профиля (если есть). ИнтерфейсУпрощенный = УправлениеДоступомСлужебный.УпрощенныйИнтерфейсНастройкиПравДоступа(); - Если ИнтерфейсУпрощенный Тогда - // Обновление наименования у персональных групп доступа этого профиля (если есть). + Запрос = Новый Запрос; Запрос.УстановитьПараметр("Профиль", Ссылка); Запрос.УстановитьПараметр("Наименование", Наименование); Запрос.Текст = "ВЫБРАТЬ - | ГруппыДоступа.Ссылка + | ГруппыДоступа.Ссылка КАК Ссылка |ИЗ | Справочник.ГруппыДоступа КАК ГруппыДоступа |ГДЕ @@ -81,17 +81,31 @@ | И ГруппыДоступа.Пользователь <> ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка) | И ГруппыДоступа.Пользователь <> ЗНАЧЕНИЕ(Справочник.ВнешниеПользователи.ПустаяСсылка) | И ГруппыДоступа.Наименование <> &Наименование"; - ИзмененныеГруппыДоступа = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); - Если ИзмененныеГруппыДоступа.Количество() > 0 Тогда - Для каждого ГруппаДоступаСсылка Из ИзмененныеГруппыДоступа Цикл - ПерсональнаяГруппаДоступаОбъект = ГруппаДоступаСсылка.ПолучитьОбъект(); - ПерсональнаяГруппаДоступаОбъект.Наименование = Наименование; - ПерсональнаяГруппаДоступаОбъект.ОбменДанными.Загрузка = Истина; - ПерсональнаяГруппаДоступаОбъект.Записать(); - КонецЦикла; - ДополнительныеСвойства.Вставить( - "ПерсональныеГруппыДоступаСОбновленнымНаименованием", ИзмененныеГруппыДоступа); - КонецЕсли; + + НачатьТранзакцию(); + Попытка + ИзмененныеГруппыДоступа = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); + + Если ИзмененныеГруппыДоступа.Количество() > 0 Тогда + Блокировка = Новый БлокировкаДанных; + Для каждого ГруппаДоступаСсылка Из ИзмененныеГруппыДоступа Цикл + ЭлементБлокировки = Блокировка.Добавить("Справочник.ГруппыДоступа"); + ЭлементБлокировки.УстановитьЗначение("Ссылка", ГруппаДоступаСсылка); + КонецЦикла; + Блокировка.Заблокировать(); + + Для каждого ГруппаДоступаСсылка Из ИзмененныеГруппыДоступа Цикл + ПерсональнаяГруппаДоступаОбъект = ГруппаДоступаСсылка.ПолучитьОбъект(); + ПерсональнаяГруппаДоступаОбъект.Наименование = Наименование; + ОбновлениеИнформационнойБазы.ЗаписатьДанные(ПерсональнаяГруппаДоступаОбъект); + КонецЦикла; + ДополнительныеСвойства.Вставить("ПерсональныеГруппыДоступаСОбновленнымНаименованием", ИзмененныеГруппыДоступа); + КонецЕсли; + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; КонецЕсли; КонецПроцедуры @@ -114,19 +128,36 @@ Запрос.УстановитьПараметр("Профиль", Ссылка); Запрос.Текст = "ВЫБРАТЬ - | ГруппыДоступа.Ссылка + | ГруппыДоступа.Ссылка КАК Ссылка |ИЗ | Справочник.ГруппыДоступа КАК ГруппыДоступа |ГДЕ | (НЕ ГруппыДоступа.ПометкаУдаления) | И ГруппыДоступа.Профиль = &Профиль"; - Выборка = Запрос.Выполнить().Выбрать(); - Пока Выборка.Следующий() Цикл - ЗаблокироватьДанныеДляРедактирования(Выборка.Ссылка); - ГруппаДоступаОбъект = Выборка.Ссылка.ПолучитьОбъект(); - ГруппаДоступаОбъект.ПометкаУдаления = Истина; - ГруппаДоступаОбъект.Записать(); - КонецЦикла; + + НачатьТранзакцию(); + Попытка + ИзмененныеГруппыДоступа = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); + Если ИзмененныеГруппыДоступа.Количество() > 0 Тогда + Блокировка = Новый БлокировкаДанных; + Для каждого ГруппаДоступаСсылка Из ИзмененныеГруппыДоступа Цикл + ЭлементБлокировки = Блокировка.Добавить("Справочник.ГруппыДоступа"); + ЭлементБлокировки.УстановитьЗначение("Ссылка", ГруппаДоступаСсылка); + ЗаблокироватьДанныеДляРедактирования(ГруппаДоступаСсылка); + КонецЦикла; + Блокировка.Заблокировать(); + + Для каждого ГруппаДоступаСсылка Из ИзмененныеГруппыДоступа Цикл + ГруппаДоступаОбъект = ГруппаДоступаСсылка.ПолучитьОбъект(); + ГруппаДоступаОбъект.ПометкаУдаления = Истина; + ГруппаДоступаОбъект.Записать(); + КонецЦикла; + КонецЕсли; + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; КонецЕсли; Если ДополнительныеСвойства.Свойство("ОбновитьГруппыДоступаПрофиля") Тогда diff --git a/SSL/src/Catalogs/ПрофилиГруппДоступа/ПрофилиГруппДоступа.mdo b/SSL/src/Catalogs/ПрофилиГруппДоступа/ПрофилиГруппДоступа.mdo index 0ee4f552b..5ffa799f8 100644 --- a/SSL/src/Catalogs/ПрофилиГруппДоступа/ПрофилиГруппДоступа.mdo +++ b/SSL/src/Catalogs/ПрофилиГруппДоступа/ПрофилиГруппДоступа.mdo @@ -376,6 +376,20 @@ Index Use + + ВключаяНижестоящие + + ru + Включая нижестоящие + + + Boolean + + + + Use + Use + diff --git a/SSL/src/Catalogs/ПрофилиКлючевыхОпераций/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ПрофилиКлючевыхОпераций/Forms/ФормаЭлемента/Form.form index 9bd38e195..75d34bee8 100644 --- a/SSL/src/Catalogs/ПрофилиКлючевыхОпераций/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ПрофилиКлючевыхОпераций/Forms/ФормаЭлемента/Form.form @@ -434,6 +434,10 @@ Left true
    + + OnCreateAtServer + ПриСозданииНаСервере + DontBlock true true @@ -464,6 +468,32 @@ + + ЕстьБазоваяФункциональность + 2 + + Boolean + + + true + + + true + + + + ЗаданВопросОбУстановкеРасширения + 3 + + Boolean + + + true + + + true + + ЗагрузитьПрофильКлючевыхОпераций diff --git a/SSL/src/Catalogs/ПрофилиКлючевыхОпераций/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ПрофилиКлючевыхОпераций/Forms/ФормаЭлемента/Module.bsl index 0fe4ac0e7..25c04f860 100644 --- a/SSL/src/Catalogs/ПрофилиКлючевыхОпераций/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ПрофилиКлючевыхОпераций/Forms/ФормаЭлемента/Module.bsl @@ -6,28 +6,70 @@ // https://creativecommons.org/licenses/by/4.0/legalcode /////////////////////////////////////////////////////////////////////////////////////////////////////// +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + ЕстьБазоваяФункциональность = ОценкаПроизводительностиСлужебный.ПодсистемаСуществует("СтандартныеПодсистемы.БазоваяФункциональность"); +КонецПроцедуры + +#КонецОбласти + #Область ОбработчикиКомандФормы &НаКлиенте Процедура ЗагрузитьПрофильКлючевыхОпераций(Команда) - ПараметрыЗагрузки = ФайловаяСистемаКлиент.ПараметрыЗагрузкиФайла(); - ПараметрыЗагрузки.Диалог.Заголовок = НСтр("ru = 'Выберите файл профиля ключевых операций'"); - ПараметрыЗагрузки.Диалог.Фильтр = "Файлы профиля ключевых операций (*.xml)|*.xml"; - - ОписаниеОповещения = Новый ОписаниеОповещения("ДиалогВыбораФайлаЗавершение", ЭтотОбъект, Неопределено); - ФайловаяСистемаКлиент.ЗагрузитьФайл(ОписаниеОповещения, ПараметрыЗагрузки); + Если ЕстьБазоваяФункциональность Тогда + МодульФайловаяСистемаКлиент = Вычислить("ФайловаяСистемаКлиент"); + Если ТипЗнч(МодульФайловаяСистемаКлиент) = Тип("ОбщийМодуль") Тогда + ПараметрыЗагрузки = МодульФайловаяСистемаКлиент.ПараметрыЗагрузкиФайла(); + ПараметрыЗагрузки.Диалог.Заголовок = НСтр("ru = 'Выберите файл профиля ключевых операций'"); + ПараметрыЗагрузки.Диалог.Фильтр = "Файлы профиля ключевых операций (*.xml)|*.xml"; + + ОписаниеОповещения = Новый ОписаниеОповещения("ДиалогВыбораФайлаЗавершение", ЭтотОбъект, Неопределено); + МодульФайловаяСистемаКлиент.ЗагрузитьФайл(ОписаниеОповещения, ПараметрыЗагрузки); + КонецЕсли; + Иначе + ДополнительныеПараметры = Новый Структура("Режим, Заголовок, ОповещениеОЗакрытии", + РежимДиалогаВыбораФайла.Открытие, + НСтр("ru = 'Выберите файл профиля ключевых операций'"), + Новый ОписаниеОповещения("ДиалогВыбораФайлаЗавершение", ЭтотОбъект, Неопределено)); + #Если ВебКлиент Тогда + Оповещение = Новый ОписаниеОповещения("НачатьПодключениеРасширенияРаботыСФайламиЗавершение", ЭтотОбъект, + Новый ОписаниеОповещения("ДиалогВыбораФайлаПоказать", ЭтотОбъект, ДополнительныеПараметры)); + НачатьПодключениеРасширенияРаботыСФайлами(Оповещение); + #Иначе + ДиалогВыбораФайлаПоказать(Истина, ДополнительныеПараметры); + #КонецЕсли + КонецЕсли; КонецПроцедуры &НаКлиенте Процедура СохранитьПрофильКлючевыхОпераций(Команда) - ПараметрыСохранения = ФайловаяСистемаКлиент.ПараметрыСохраненияФайла(); - ПараметрыСохранения.Диалог.Заголовок = НСтр("ru = 'Сохранить профиль ключевых операций в файл'"); - ПараметрыСохранения.Диалог.Фильтр = "Файлы профиля ключевых операций (*.xml)|*.xml"; - - ФайловаяСистемаКлиент.СохранитьФайл(Неопределено, СохранитьПрофильКлючевыхОперацийНаСервере(), "", ПараметрыСохранения); + Если ЕстьБазоваяФункциональность Тогда + МодульФайловаяСистемаКлиент = Вычислить("ФайловаяСистемаКлиент"); + Если ТипЗнч(МодульФайловаяСистемаКлиент) = Тип("ОбщийМодуль") Тогда + ПараметрыСохранения = МодульФайловаяСистемаКлиент.ПараметрыСохраненияФайла(); + ПараметрыСохранения.Диалог.Заголовок = НСтр("ru = 'Сохранить профиль ключевых операций в файл'"); + ПараметрыСохранения.Диалог.Фильтр = "Файлы профиля ключевых операций (*.xml)|*.xml"; + МодульФайловаяСистемаКлиент.СохранитьФайл(Новый ОписаниеОповещения("ДиалогСохраненияФайлаЗавершение", ЭтотОбъект, Неопределено), СохранитьПрофильКлючевыхОперацийНаСервере(), , ПараметрыСохранения); + КонецЕсли; + Иначе + ДополнительныеПараметры = Новый Структура("Режим, Заголовок, ОповещениеОЗакрытии", + РежимДиалогаВыбораФайла.Сохранение, + НСтр("ru = 'Сохранить профиль ключевых операций в файл'"), + Новый ОписаниеОповещения("ДиалогСохраненияФайлаЗавершение", ЭтотОбъект, Неопределено)); + #Если ВебКлиент Тогда + Оповещение = Новый ОписаниеОповещения("НачатьПодключениеРасширенияРаботыСФайламиЗавершение", ЭтотОбъект, + Новый ОписаниеОповещения("ДиалогВыбораФайлаПоказать", ЭтотОбъект, ДополнительныеПараметры)); + НачатьПодключениеРасширенияРаботыСФайлами(Оповещение); + #Иначе + ДиалогВыбораФайлаПоказать(Истина, ДополнительныеПараметры); + #КонецЕсли + КонецЕсли; КонецПроцедуры @@ -40,6 +82,25 @@ #Область СлужебныеПроцедурыИФункции +&НаКлиенте +Процедура ДиалогВыбораФайлаПоказать(Результат, ДополнительныеПараметры) Экспорт + Если Результат Тогда + ДиалогВыбора = Новый ДиалогВыбораФайла(ДополнительныеПараметры.Режим); + ДиалогВыбора.Заголовок = ДополнительныеПараметры.Заголовок; + ДиалогВыбора.Фильтр = "Файлы профиля ключевых операций (*.xml)|*.xml"; + Если ДополнительныеПараметры.Режим = РежимДиалогаВыбораФайла.Открытие Тогда + НачатьПомещениеФайлов(ДополнительныеПараметры.ОповещениеОЗакрытии,, ДиалогВыбора, Истина, ЭтотОбъект.УникальныйИдентификатор); + ИначеЕсли ДополнительныеПараметры.Режим = РежимДиалогаВыбораФайла.Сохранение Тогда + Получаемые = Новый Массив; + Получаемые.Добавить(Новый ОписаниеПередаваемогоФайла("", СохранитьПрофильКлючевыхОперацийНаСервере())); + НачатьПолучениеФайлов(ДополнительныеПараметры.ОповещениеОЗакрытии, Получаемые, ДиалогВыбора, Истина); + КонецЕсли; + + Иначе + СообщитьПользователю(НСтр("ru = 'Без расширения работы с файлами невозможно работать с файлами.'"), "Объект"); + КонецЕсли; +КонецПроцедуры + &НаКлиенте Процедура ДиалогВыбораФайлаЗавершение(ВыбранныйФайл, ДополнительныеПараметры) Экспорт @@ -47,11 +108,69 @@ Возврат; КонецЕсли; - ЗагрузитьПрофильКлючевыхОперацийНаСервере(ВыбранныйФайл.Хранение); + Если ЕстьБазоваяФункциональность Тогда + Если НЕ ЗначениеЗаполнено(Объект.Наименование) Тогда + ФайлИмя = Новый Файл(ВыбранныйФайл.Имя); + Объект.Наименование = ФайлИмя.ИмяБезРасширения; + КонецЕсли; + ЗагрузитьПрофильКлючевыхОперацийНаСервере(ВыбранныйФайл.Хранение); + Иначе + Если НЕ ЗначениеЗаполнено(Объект.Наименование) Тогда + ФайлИмя = Новый Файл(ВыбранныйФайл[0].Имя); + Объект.Наименование = ФайлИмя.ИмяБезРасширения; + КонецЕсли; + + ЗагрузитьПрофильКлючевыхОперацийНаСервере(ВыбранныйФайл[0].Хранение); + КонецЕсли; Модифицированность = Истина; КонецПроцедуры +&НаКлиенте +Процедура ДиалогСохраненияФайлаЗавершение(ВыбранныеФайлы, ДополнительныеПараметры) Экспорт + + Состояние(НСтр("ru = 'Сохранение файлов завершено.'")); + +КонецПроцедуры + +&НаКлиенте +Процедура НачатьПодключениеРасширенияРаботыСФайламиЗавершение(РасширениеПодключено, ДополнительныеПараметры) Экспорт + + Если РасширениеПодключено Тогда + ВыполнитьОбработкуОповещения(ДополнительныеПараметры, Истина); + Возврат; + КонецЕсли; + + Если Не ЗаданВопросОбУстановкеРасширения Тогда + ЗаданВопросОбУстановкеРасширения = Истина; + ОписаниеОповещенияВопрос = Новый ОписаниеОповещения("ВопросОбУстановкеРасширения", ЭтотОбъект, ДополнительныеПараметры); + НачатьУстановкуРасширенияРаботыСФайлами(ОписаниеОповещенияВопрос ); + Иначе + ВыполнитьОбработкуОповещения(ДополнительныеПараметры, РасширениеПодключено); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ВопросОбУстановкеРасширения(Оповещение) Экспорт + + ОповещениеПроверки = Новый ОписаниеОповещения("НачатьПодключениеРасширенияРаботыСФайламиЗавершение", ЭтотОбъект, + Новый ОписаниеОповещения("ДиалогВыбораФайлаПоказать", ЭтотОбъект, Оповещение)); + НачатьПодключениеРасширенияРаботыСФайлами(ОповещениеПроверки); + +КонецПроцедуры + +&НаКлиенте +Процедура СообщитьПользователю(ТекстСообщения, ПутьКДанным = "") + + Сообщение = Новый СообщениеПользователю; + Сообщение.Текст = ТекстСообщения; + Сообщение.ПутьКДанным = ПутьКДанным; + Сообщение.Сообщить(); + +КонецПроцедуры + + &НаСервере Функция СохранитьПрофильКлючевыхОперацийНаСервере() diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПолучателиРассылки/Form.form b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПолучателиРассылки/Form.form index e2c822847..10f53d7d8 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПолучателиРассылки/Form.form +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПолучателиРассылки/Form.form @@ -690,7 +690,7 @@ <name>ВидПочтовогоАдресаПолучателей</name> <title> <key>ru</key> - <value>Почтовый адрес</value> + <value>Электронная почта</value> 3 diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПолучателиРассылки/Module.bsl b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПолучателиРассылки/Module.bsl index 95607259e..25b572739 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПолучателиРассылки/Module.bsl +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПолучателиРассылки/Module.bsl @@ -144,9 +144,6 @@ #Область СлужебныеПроцедурыИФункции -//////////////////////////////////////////////////////////////////////////////// -// Клиент - &НаКлиенте Процедура ДобавитьПеретащитьПолучателя(ПолучательИлиНаборПолучателей) // Удаление пользователей, которые были удалены в форме подбора или которые уже есть в списке. @@ -244,9 +241,6 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Вызов сервера, Сервер - &НаСервере Процедура ЗаполнитьПочтовыеАдреса() НаборПараметров = "Ссылка, ВидПочтовогоАдресаПолучателей, Личная, Получатели, ТипПолучателейРассылки"; @@ -257,37 +251,25 @@ ПараметрыПолучателей.ТипПолучателейРассылки = ИдентификаторОбъектаМетаданных; ПараметрыПолучателей.Получатели = Получатели; - РезультатВыполнения = РассылкаОтчетовВызовСервера.СформироватьСписокПолучателейРассылки(ПараметрыПолучателей); - Если Не РезультатВыполнения.БылиКритичныеОшибки Тогда - Для каждого Строка Из Получатели Цикл - ПочтаПолучателя = РезультатВыполнения.Получатели.Получить(Строка.Получатель); - Если ПочтаПолучателя <> Неопределено Тогда - Строка.Адрес = ПочтаПолучателя; - Иначе - Строка.Адрес = ""; + ПолучателиРассылки = РассылкаОтчетов.СформироватьСписокПолучателейРассылки(ПараметрыПолучателей);; + Для каждого ПолучательРассылки Из Получатели Цикл + Если ПолучателиРассылки.Количество() = 0 Тогда + Если ПолучательРассылки.Получатель = Неопределено Тогда + Продолжить; КонецЕсли; - Если Строка.Получатель.ЭтоГруппа ИЛИ ТипЗнч(Строка.Получатель) = Тип("СправочникСсылка.ГруппыПользователей") Тогда - Строка.ИндексКартинки = 3; - Иначе - Строка.ИндексКартинки = 1; - КонецЕсли; - КонецЦикла; - Иначе - Для каждого Строка Из Получатели Цикл - Если Строка.Получатель <> Неопределено Тогда - Если Строка.Получатель.ЭтоГруппа ИЛИ ТипЗнч(Строка.Получатель) = Тип("СправочникСсылка.ГруппыПользователей") Тогда - Строка.ИндексКартинки = 3; - Иначе - Строка.ИндексКартинки = 1; - КонецЕсли; - КонецЕсли; - КонецЦикла; - КонецЕсли; + Иначе + ПочтаПолучателя = ПолучателиРассылки.Получить(ПолучательРассылки.Получатель); + ПолучательРассылки.Адрес = ?(ПочтаПолучателя <> Неопределено, ПочтаПолучателя, "") + КонецЕсли; + Если ПолучательРассылки.Получатель.ЭтоГруппа Или ТипЗнч(ПолучательРассылки.Получатель) = Тип("СправочникСсылка.ГруппыПользователей") Тогда + ПолучательРассылки.ИндексКартинки = 3; + Иначе + ПолучательРассылки.ИндексКартинки = 1; + КонецЕсли; + КонецЦикла; + КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Сервер - &НаСервере Процедура УстановитьУсловноеОформление() @@ -307,7 +289,7 @@ ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; ОтборЭлемента.ПравоеЗначение = Истина; - Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ПросроченныеДанныеЦвет); + Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", Метаданные.ЭлементыСтиля.ПросроченныеДанныеЦвет.Значение); КонецПроцедуры diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Help/ru.html index ca76160dd..1138dcd1b 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

    Основные сведения

    @@ -117,7 +117,12 @@
    • Нажмите Выполнить сейчас, для того чтобы выполнить рассылку от имени текущего пользователя. Рассылка будет выполнена, если у нее установлен флажок Подготовлена.

    Просмотр событий рассылки

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

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

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

    +
    +

    Для контроля результатов рассылки можно использовать:

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

    Работа в клиент-серверном режиме

    • При работе программы в клиент-серверном режиме необходимо иметь в виду, что рассылка выполняется на сервере 1С:Предприятия. diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Module.bsl index f370ef4e1..f4ad06cec 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Module.bsl @@ -232,7 +232,6 @@ ЗафиксироватьЗначенияРеквизитовДоИзменения(); - СтандартныеПодсистемыСервер.УстановитьОтображениеЗаголовковГрупп(ЭтотОбъект); Для Каждого Строка Из Объект.Отчеты Цикл Строка.НеОтправлятьПустой = Не Строка.ОтправлятьЕслиПустой; КонецЦикла; @@ -1753,9 +1752,11 @@ ПараметрыШаблона.Вставить("СформированныеОтчеты", СформированныеОтчеты); ПараметрыШаблона.Вставить("СпособДоставки", СпособДоставки); +#Если НЕ МобильныйКлиент Тогда ТекстовыйДокумент = Новый ТекстовыйДокумент; ТекстовыйДокумент.УстановитьТекст(РассылкаОтчетовКлиентСервер.ЗаполнитьШаблон(Шаблон, ПараметрыШаблона)); ТекстовыйДокумент.Показать(); +#КонецЕсли КонецПроцедуры &НаКлиенте @@ -3028,6 +3029,8 @@ УсловноеОформление.Элементы.Очистить(); + ЦветТекстаЗапрещеннойЯчейки = Метаданные.ЭлементыСтиля.ТекстЗапрещеннойЯчейкиЦвет.Значение; + // Элемент = УсловноеОформление.Элементы.Добавить(); @@ -3040,7 +3043,7 @@ ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; ОтборЭлемента.ПравоеЗначение = Ложь; - Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет); + Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветТекстаЗапрещеннойЯчейки); Элемент.Оформление.УстановитьЗначениеПараметра("Доступность", Ложь); // @@ -3057,7 +3060,7 @@ ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; ОтборЭлемента.ПравоеЗначение = Ложь; - Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет); + Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветТекстаЗапрещеннойЯчейки); Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина); // Оформление получателей рассылки @@ -3072,9 +3075,9 @@ ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("КомпоновщикНастроекКД.ПользовательскиеНастройки.Значение"); ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; - ОтборЭлемента.ПравоеЗначение = НСтр("ru='<Пустое значение>'"); + ОтборЭлемента.ПравоеЗначение = НСтр("ru = '<Пустое значение>'"); - Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru='[Получатель]'")); + Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = '[Получатель]'")); Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина); КонецПроцедуры @@ -3341,7 +3344,13 @@ И СтрокаОтчетыПараметры.ВариантСсылка <> Справочники.ВариантыОтчетов.ПустаяСсылка() Тогда ВариантСсылка = СтрокаОтчетыПараметры.ВариантСсылка; Иначе - ОтчетИнформация = ВариантыОтчетов.СформироватьИнформациюОбОтчетеПоПолномуИмени(СтрокаОтчетыПараметры.ОтчетПолноеИмя); + ОтчетИнформация = ВариантыОтчетов.ИнформацияОбОтчете(СтрокаОтчетыПараметры.ОтчетПолноеИмя); + Если Не ПустаяСтрока(ОтчетИнформация.ТекстОшибки) Тогда + Если Не ПустаяСтрока(ТекстВсплывающегоОповещенияПриОткрытии) Тогда + ТекстВсплывающегоОповещенияПриОткрытии = ТекстВсплывающегоОповещенияПриОткрытии + Символы.ПС; + КонецЕсли; + ТекстВсплывающегоОповещенияПриОткрытии = ТекстВсплывающегоОповещенияПриОткрытии + ОтчетИнформация.ТекстОшибки; + КонецЕсли; ВариантСсылка = ВариантыОтчетов.ВариантОтчета(ОтчетИнформация.Отчет, СтрокаОтчетыПараметры.КлючВарианта); КонецЕсли; @@ -3369,11 +3378,10 @@ ШаблонСтрокиСообщения = НСтр("ru = 'Добавлен отчет ""%1"".'"); КонецЕсли; ШаблонСтрокиСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСтрокиСообщения, Строка(ВариантСсылка)); - Если ТекстВсплывающегоОповещенияПриОткрытии = "" Тогда - ТекстВсплывающегоОповещенияПриОткрытии = ШаблонСтрокиСообщения; - Иначе - ТекстВсплывающегоОповещенияПриОткрытии = ТекстВсплывающегоОповещенияПриОткрытии + Символы.ПС + ШаблонСтрокиСообщения; + Если Не ПустаяСтрока(ТекстВсплывающегоОповещенияПриОткрытии) Тогда + ТекстВсплывающегоОповещенияПриОткрытии = ТекстВсплывающегоОповещенияПриОткрытии + Символы.ПС; КонецЕсли; + ТекстВсплывающегоОповещенияПриОткрытии = ТекстВсплывающегоОповещенияПриОткрытии + ШаблонСтрокиСообщения; ИндексСтроки = Объект.Отчеты.Индекс(СтрокаОтчеты); КонецЕсли; diff --git a/SSL/src/Catalogs/РассылкиОтчетов/ManagerModule.bsl b/SSL/src/Catalogs/РассылкиОтчетов/ManagerModule.bsl index a2feef17f..f4b947ec4 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/ManagerModule.bsl +++ b/SSL/src/Catalogs/РассылкиОтчетов/ManagerModule.bsl @@ -52,4 +52,41 @@ #КонецОбласти +#Область СлужебныеПроцедурыИФункции + +Процедура ПриНастройкеНачальногоЗаполненияЭлементов(Настройки) Экспорт + + Настройки.ПриНачальномЗаполненииЭлемента = Ложь; + +КонецПроцедуры + +// Вызывается при начальном заполнении справочника РолиИсполнителей. +// +// Параметры: +// КодыЯзыков - Массив - список языков конфигурации. Актуально для мультиязычных конфигураций. +// Элементы - ТаблицаЗначений - данные заполнения. Состав колонок соответствует набору реквизитов +// справочника РолиИсполнителей. +// +Процедура ПриНачальномЗаполненииЭлементов(КодыЯзыков, Элементы) Экспорт + + Элемент = Элементы.Добавить(); + Элемент.ИмяПредопределенныхДанных = "ЛичныеРассылки"; + Элемент.Наименование = НСтр("ru = 'Личные рассылки'", ОбщегоНазначения.КодОсновногоЯзыка()); + +КонецПроцедуры + +// Вызывается РолиИсполнителей при начальном заполнении создаваемой роли исполнителя. +// +// Параметры: +// Объект - СправочникОбъект.РолиИсполнителей - заполняемый объект. +// Данные - СтрокаТаблицыЗначений - данные заполнения. +// ДополнительныеПараметры - Структура - Дополнительные параметры. +// +Процедура ПриНачальномЗаполненииЭлемента(Объект, Данные, ДополнительныеПараметры) Экспорт + +КонецПроцедуры + +#КонецОбласти + #КонецЕсли + diff --git a/SSL/src/Catalogs/РассылкиОтчетов/РассылкиОтчетов.mdo b/SSL/src/Catalogs/РассылкиОтчетов/РассылкиОтчетов.mdo index 189d3e23e..1d32291c4 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/РассылкиОтчетов.mdo +++ b/SSL/src/Catalogs/РассылкиОтчетов/РассылкиОтчетов.mdo @@ -746,6 +746,7 @@ Кому + CatalogRef.ИдентификаторыОбъектовРасширений CatalogRef.ИдентификаторыОбъектовМетаданных diff --git a/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаВыбора/Help/ru.html b/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаВыбора/Help/ru.html index 0d5e883bc..e1b12496a 100644 --- a/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаВыбора/Help/ru.html +++ b/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаВыбора/Help/ru.html @@ -1,16 +1,20 @@

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

      Открывается по кнопке Выбрать из поля Роль исполнителя бизнес-процессов и окон подбора ролей исполнителей.

      -

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

      +

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

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

      Список ролей поставляется в составе программы, но может быть расширен при необходимости.

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

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

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

      Выбор роли исполнителя

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

    Выбор роли исполнителя

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

    Ввод новой роли

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

    • Нажмите Создать, заполните необходимые поля.

    См. также: 

    \ No newline at end of file diff --git a/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаВыбора/Module.bsl b/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаВыбора/Module.bsl index 4f66524b8..04ae36e03 100644 --- a/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаВыбора/Module.bsl +++ b/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаВыбора/Module.bsl @@ -40,6 +40,8 @@ СвойстваСписка.ТекстЗапроса = Список.ТекстЗапроса + СтрокаОтбораВТекстеЗапроса; ОбщегоНазначения.УстановитьСвойстваДинамическогоСписка(Элементы.Список, СвойстваСписка); + МультиязычностьСервер.ИзменениеТекстаЗапросаСпискаДляТекущегоЯзыка(ЭтотОбъект); + КонецПроцедуры #КонецОбласти diff --git a/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаСписка/Module.bsl index a04c94ba5..bf6cab1b1 100644 --- a/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаСписка/Module.bsl @@ -15,6 +15,8 @@ НастроитьОтображениеСпискаРолей(); + МультиязычностьСервер.ПриСозданииНаСервере(ЭтотОбъект); + КонецПроцедуры &НаКлиенте diff --git a/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаЭлемента/Form.form index e4517c2f3..c77276fc3 100644 --- a/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаЭлемента/Form.form @@ -711,6 +711,17 @@
    true
    true + + ПараметрыМультиязычныхРеквизитов + 2 + + + true + + + true + + ВыбратьНазначение @@ -742,5 +753,17 @@ <event>AfterWrite</event> <name>ПослеЗаписи</name> </handlers> + <handlers> + <event>AfterWriteAtServer</event> + <name>ПослеЗаписиНаСервере</name> + </handlers> + <handlers> + <event>OnReadAtServer</event> + <name>ПриЧтенииНаСервере</name> + </handlers> + <handlers> + <event>BeforeWriteAtServer</event> + <name>ПередЗаписьюНаСервере</name> + </handlers> </extInfo> </form:Form> diff --git a/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаЭлемента/Module.bsl index c2de9874d..6848210d9 100644 --- a/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаЭлемента/Module.bsl @@ -18,6 +18,23 @@ ОбновитьДоступность(); + МультиязычностьСервер.ПриСозданииНаСервере(ЭтотОбъект, Объект); + +КонецПроцедуры + +&НаСервере +Процедура ПриЧтенииНаСервере(ТекущийОбъект) + МультиязычностьСервер.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); +КонецПроцедуры + +&НаСервере +Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) + МультиязычностьСервер.ПередЗаписьюНаСервере(ТекущийОбъект); +КонецПроцедуры + +&НаСервере +Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи) + МультиязычностьСервер.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); КонецПроцедуры &НаКлиенте @@ -65,6 +82,11 @@ ОбщегоНазначенияКлиент.ПоказатьФормуРедактированияКомментария(Элемент.ТекстРедактирования, ЭтотОбъект); КонецПроцедуры +&НаКлиенте +Процедура Подключаемый_Открытие(Элемент, СтандартнаяОбработка) + МультиязычностьКлиент.ПриОткрытии(ЭтотОбъект, Объект, Элемент, СтандартнаяОбработка); +КонецПроцедуры + #КонецОбласти #Область ОбработчикиКомандФормы @@ -108,5 +130,4 @@ КонецЕсли; КонецПроцедуры - #КонецОбласти diff --git a/SSL/src/Catalogs/РолиИсполнителей/ManagerModule.bsl b/SSL/src/Catalogs/РолиИсполнителей/ManagerModule.bsl index 275869ced..2eec2468a 100644 --- a/SSL/src/Catalogs/РолиИсполнителей/ManagerModule.bsl +++ b/SSL/src/Catalogs/РолиИсполнителей/ManagerModule.bsl @@ -33,14 +33,20 @@ // Конец СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов +// Заполнение предопределенных элементов + #КонецОбласти #КонецОбласти +#КонецЕсли + #Область ОбработчикиСобытий -Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка) +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда +Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; Если Пользователи.ЭтоСеансВнешнегоПользователя() Тогда @@ -50,15 +56,35 @@ ОбъектАвторизации = Справочники.Пользователи.ПустаяСсылка(); КонецЕсли; - Запрос = Новый Запрос("ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 50 - | РолиИсполнителейНазначение.Ссылка КАК Ссылка - |ИЗ - | Справочник.РолиИсполнителей.Назначение КАК РолиИсполнителейНазначение - |ГДЕ - | РолиИсполнителейНазначение.ТипПользователей = &Тип - | И РолиИсполнителейНазначение.Ссылка.Наименование ПОДОБНО &СтрокаПоиска"); + ТекстПоискаДляДополнительныхЯзыков = ""; + Если МультиязычностьСервер.ИспользуетсяПервыйДополнительныйЯзык() Тогда + ТекстПоискаДляДополнительныхЯзыков = " ИЛИ РолиИсполнителей.НаименованиеЯзык1 ПОДОБНО &СтрокаПоиска"; + КонецЕсли; - Запрос.УстановитьПараметр("Тип", ОбъектАвторизации); + Если МультиязычностьСервер.ИспользуетсяПервыйДополнительныйЯзык() Тогда + ТекстПоискаДляДополнительныхЯзыков = ТекстПоискаДляДополнительныхЯзыков + + " ИЛИ РолиИсполнителей.НаименованиеЯзык2 ПОДОБНО &СтрокаПоиска"; + КонецЕсли; + + Если МультиязычностьСервер.ИспользуетсяВторойДополнительныйЯзык() Тогда + СуффиксЯзыка = МультиязычностьСервер.СуффиксТекущегоЯзыка(); + КонецЕсли; + + ТекстЗапроса = "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 20 + | РолиИсполнителей.Ссылка КАК Ссылка + |ИЗ + | Справочник.РолиИсполнителей.Назначение КАК РолиИсполнителейНазначение + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.РолиИсполнителей КАК РолиИсполнителей + | ПО РолиИсполнителейНазначение.Ссылка = РолиИсполнителей.Ссылка + |ГДЕ + | РолиИсполнителейНазначение.ТипПользователей = &Тип + | И (РолиИсполнителей.Наименование ПОДОБНО &СтрокаПоиска " + ТекстПоискаДляДополнительныхЯзыков + " + | ИЛИ РолиИсполнителей.Код ПОДОБНО &СтрокаПоиска) + | И НЕ РолиИсполнителей.Ссылка ЕСТЬ NULL"; + + Запрос = Новый Запрос(ТекстЗапроса); + + Запрос.УстановитьПараметр("Тип", ОбъектАвторизации); Запрос.УстановитьПараметр("СтрокаПоиска", "%" + Параметры.СтрокаПоиска + "%"); РезультатЗапроса = Запрос.Выполнить().Выбрать(); @@ -66,9 +92,72 @@ Пока РезультатЗапроса.Следующий() Цикл ДанныеВыбора.Добавить(РезультатЗапроса.Ссылка, РезультатЗапроса.Ссылка); КонецЦикла; + +КонецПроцедуры +#КонецЕсли + +Процедура ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка) + + МультиязычностьКлиентСервер.ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка); + +КонецПроцедуры + +Процедура ОбработкаПолученияПолейПредставления(Поля, СтандартнаяОбработка) + + МультиязычностьКлиентСервер.ОбработкаПолученияПолейПредставления(Поля, СтандартнаяОбработка); + КонецПроцедуры #КонецОбласти -#КонецЕсли \ No newline at end of file +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область СлужебныйПрограммныйИнтерфейс + +Процедура ПриНастройкеНачальногоЗаполненияЭлементов(Настройки) Экспорт + + Настройки.ПриНачальномЗаполненииЭлемента = Истина; + +КонецПроцедуры + +// Вызывается при начальном заполнении справочника РолиИсполнителей. +// +// Параметры: +// КодыЯзыков - Массив - список языков конфигурации. Актуально для мультиязычных конфигураций. +// Элементы - ТаблицаЗначений - данные заполнения. Состав колонок соответствует набору реквизитов +// справочника РолиИсполнителей. +// +Процедура ПриНачальномЗаполненииЭлементов(КодыЯзыков, Элементы) Экспорт + + Элемент = Элементы.Добавить(); + Элемент.ИмяПредопределенныхДанных = "ОтветственныйЗаКонтрольИсполнения"; + МультиязычностьСервер.ЗаполнитьМультиязычныйРеквизит(Элемент, "Наименование", + "ru='Координатор выполнения задач'", КодыЯзыков); // @НСтр + Элемент.ИспользуетсяБезОбъектовАдресации = Истина; + Элемент.ИспользуетсяСОбъектамиАдресации = Истина; + Элемент.ВнешняяРоль = Ложь; + Элемент.Код = "000000001"; + Элемент.КраткоеПредставление = НСтр("ru = '000000001'"); + Элемент.ТипыОсновногоОбъектаАдресации = ПланыВидовХарактеристик.ОбъектыАдресацииЗадач.ВсеОбъектыАдресации; + + БизнесПроцессыИЗадачиПереопределяемый.ПриНачальномЗаполненииРолейИсполнителей(КодыЯзыков, Элементы); + +КонецПроцедуры + +// Вызывается РолиИсполнителей при начальном заполнении создаваемой роли исполнителя. +// +// Параметры: +// Объект - СправочникОбъект.РолиИсполнителей - заполняемый объект. +// Данные - СтрокаТаблицыЗначений - данные заполнения. +// ДополнительныеПараметры - Структура - Дополнительные параметры. +// +Процедура ПриНачальномЗаполненииЭлемента(Объект, Данные, ДополнительныеПараметры) Экспорт + + БизнесПроцессыИЗадачиПереопределяемый.ПриНачальномЗаполненииРолиИсполнителя(Объект, Данные, ДополнительныеПараметры); + +КонецПроцедуры + +#КонецОбласти + +#КонецЕсли diff --git a/SSL/src/Catalogs/РолиИсполнителей/ObjectModule.bsl b/SSL/src/Catalogs/РолиИсполнителей/ObjectModule.bsl index 6803ad044..807e07acc 100644 --- a/SSL/src/Catalogs/РолиИсполнителей/ObjectModule.bsl +++ b/SSL/src/Catalogs/РолиИсполнителей/ObjectModule.bsl @@ -56,6 +56,16 @@ #КонецОбласти +#Область СлужебныеПроцедурыИФункции + +Процедура ПриЧтенииПредставленийНаСервере() Экспорт + + МультиязычностьСервер.ПриЧтенииПредставленийНаСервере(ЭтотОбъект); + +КонецПроцедуры + +#КонецОбласти + #Иначе ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ВыборСертификатаДляПодписанияИлиРасшифровки/Form.form b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ВыборСертификатаДляПодписанияИлиРасшифровки/Form.form index d2532ec1b..0631132fc 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ВыборСертификатаДляПодписанияИлиРасшифровки/Form.form +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ВыборСертификатаДляПодписанияИлиРасшифровки/Form.form @@ -781,13 +781,6 @@ <key>ru</key> <value>Личные сертификаты на компьютере</value> - - Style.NormalTextFont - true - false - false - false - ГруппаСертификатыРасширеннаяПодсказка 544 @@ -802,6 +795,7 @@ Vertical Auto + NormalSeparation true true auto @@ -1865,13 +1859,6 @@ ru Введите дополнительные сведения о сертификате - - Style.NormalTextFont - true - false - false - false - false true @@ -1888,6 +1875,7 @@ Vertical Auto + NormalSeparation true true auto @@ -2070,6 +2058,10 @@ OnOpen ПриОткрытии + + BeforeClose + ПередЗакрытием + OnCreateAtServer ПриСозданииНаСервере diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ВыборСертификатаДляПодписанияИлиРасшифровки/Module.bsl b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ВыборСертификатаДляПодписанияИлиРасшифровки/Module.bsl index 93d430d9c..7add87e7e 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ВыборСертификатаДляПодписанияИлиРасшифровки/Module.bsl +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ВыборСертификатаДляПодписанияИлиРасшифровки/Module.bsl @@ -144,6 +144,21 @@ КонецПроцедуры +&НаКлиенте +Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка) + + Если ЗавершениеРаботы Тогда + Возврат; + КонецЕсли; + + СтандартнаяОбработка = Ложь; + ВозвращаемоеЗначение = Новый Структура; + ВозвращаемоеЗначение.Вставить("Ссылка", Сертификат); + ВозвращаемоеЗначение.Вставить("Добавлен", ЗначениеЗаполнено(Сертификат)); + Закрыть(ВозвращаемоеЗначение); + +КонецПроцедуры + #КонецОбласти #Область ОбработчикиСобытийЭлементовШапкиФормы @@ -318,21 +333,25 @@ Возврат; КонецЕсли; - Контекст = Новый Структура; - Контекст.Вставить("ОшибкаНаСервере", Новый Структура); - Контекст.Вставить("ОшибкаНаКлиенте", Новый Структура); - - Если СертификатНаСервере - И ПроверитьСертификатИЗаписатьВСправочник(СвойстваПароля.Значение, Контекст.ОшибкаНаСервере) Тогда + Если СертификатВОблачномСервисе Тогда + + МодульСервисКриптографииКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("СервисКриптографииКлиент"); + МодульСервисКриптографииКлиент.ПроверитьСертификат( + Новый ОписаниеОповещения("ВыбратьПослеПроверкиСертификатаВМоделиСервиса", ЭтотОбъект, Неопределено), + ПолучитьИзВременногоХранилища(СертификатАдрес)); - ВыбратьПослеПроверкиСертификата(Контекст.ОшибкаНаКлиенте, Контекст); Иначе - Если СертификатВОблачномСервисе Тогда - Оповещение = Новый ОписаниеОповещения("ВыбратьПослеПроверкиСертификатаВМоделиСервиса", ЭтотОбъект, Контекст); - Иначе - Оповещение = Новый ОписаниеОповещения("ВыбратьПослеПроверкиСертификата", ЭтотОбъект, Контекст); - КонецЕсли; - ПроверитьСертификат(Оповещение); + + ПараметрыСертификата = ЭлектроннаяПодписьКлиент.ПараметрыЗаписиСертификата(); + ПараметрыСертификата.Наименование = СертификатНаименование; + ПараметрыСертификата.Пользователь = СертификатПользователь; + ПараметрыСертификата.Организация = СертификатОрганизация; + ПараметрыСертификата.УсиленнаяЗащитаЗакрытогоКлюча = СертификатУсиленнаяЗащитаЗакрытогоКлюча; + + ЭлектроннаяПодписьКлиент.ЗаписатьСертификатВСправочник( + Новый ОписаниеОповещения("ВыбратьПослеПроверкиСертификата", ЭтотОбъект, Неопределено), + СертификатАдрес, СвойстваПароля.Значение, ДляШифрованияИРасшифровки, ПараметрыСертификата); + КонецЕсли; КонецПроцедуры @@ -341,31 +360,17 @@ &НаКлиенте Процедура ВыбратьПослеПроверкиСертификата(Результат, Контекст) Экспорт - ДополнительныеПараметры = Новый Структура; - Если Результат.Свойство("Программа") Тогда - - Если Не ЗначениеЗаполнено(Сертификат) Тогда - ДополнительныеПараметры.Вставить("ЭтоНовый"); - КонецЕсли; - - ЗаписатьСертификатВСправочник(Результат.Программа); - - КонецЕсли; - - Если Результат.Свойство("ОписаниеОшибки") Тогда - ОшибкаНаКлиенте = Результат; - - Если ДляШифрованияИРасшифровки = Истина Тогда - ЗаголовокФормы = НСтр("ru = 'Проверка шифрования и расшифровки'"); - Иначе - ЗаголовокФормы = НСтр("ru = 'Проверка установки электронной подписи'"); - КонецЕсли; - ЭлектроннаяПодписьСлужебныйКлиент.ПоказатьОшибкуОбращенияКПрограмме( - ЗаголовокФормы, "", ОшибкаНаКлиенте, Контекст.ОшибкаНаСервере); - + Если Результат = Неопределено Тогда Возврат; КонецЕсли; + ДополнительныеПараметры = Новый Структура; + Если Не ЗначениеЗаполнено(Сертификат) Тогда + ДополнительныеПараметры.Вставить("ЭтоНовый"); + КонецЕсли; + + Сертификат = Результат; + ЭлектроннаяПодписьСлужебныйКлиент.ОбработатьПарольВФорме(ЭтотОбъект, ВнутренниеДанные, СвойстваПароля, Новый Структура("ПриУспешномВыполненииОперации", Истина)); @@ -374,11 +379,14 @@ ДополнительныеПараметры, Сертификат); Если ВернутьПароль Тогда + ВнутренниеДанные.Вставить("ВыбранныйСертификат", Сертификат); Если Не ЗапомнитьПароль Тогда ВнутренниеДанные.Вставить("ВыбранныйСертификатПароль", СвойстваПароля.Значение); КонецЕсли; + ОповеститьОВыборе(Истина); + Иначе ОповеститьОВыборе(Сертификат); КонецЕсли; @@ -389,29 +397,29 @@ Процедура ВыбратьПослеПроверкиСертификатаВМоделиСервиса(Результат, Контекст) Экспорт ДополнительныеПараметры = Новый Структура; - Если Результат.Свойство("Действителен") И Результат.Действителен Тогда - - Если Не ЗначениеЗаполнено(Сертификат) Тогда - ДополнительныеПараметры.Вставить("ЭтоНовый"); - КонецЕсли; - - ЗаписатьСертификатВСправочникВМоделиСервиса(); - + Если Не Результат.Выполнено Тогда + ОписаниеОшибки = КраткоеПредставлениеОшибки(Результат.ИнформацияОбОшибке); + ИначеЕсли Не Результат.Действителен Тогда + ОписаниеОшибки = ЭлектроннаяПодписьСлужебныйКлиентСервер.ТекстОшибкиСервисаСертификатНедействителен(); КонецЕсли; - Если Результат.Свойство("ИнформацияОбОшибке") Тогда - ОшибкаНаКлиенте = Результат.ИнформацияОбОшибке.Описание; - + Если ЗначениеЗаполнено(ОписаниеОшибки) Тогда Если ДляШифрованияИРасшифровки = Истина Тогда ЗаголовокФормы = НСтр("ru = 'Проверка шифрования и расшифровки'"); Иначе ЗаголовокФормы = НСтр("ru = 'Проверка установки электронной подписи'"); КонецЕсли; ЭлектроннаяПодписьСлужебныйКлиент.ПоказатьОшибкуОбращенияКПрограмме( - ЗаголовокФормы, "", ОшибкаНаКлиенте, Контекст.ОшибкаНаСервере); + ЗаголовокФормы, "", Новый Структура("ОписаниеОшибки", ОписаниеОшибки), Новый Структура); Возврат; КонецЕсли; + Если Не ЗначениеЗаполнено(Сертификат) Тогда + ДополнительныеПараметры.Вставить("ЭтоНовый"); + КонецЕсли; + + ЗаписатьСертификатВСправочникВМоделиСервиса(); + ОповеститьОбИзменении(Сертификат); Оповестить("Запись_СертификатыКлючейЭлектроннойПодписиИШифрования", ДополнительныеПараметры, Сертификат); @@ -746,399 +754,13 @@ КонецПроцедуры - -&НаКлиенте -Процедура ПроверитьСертификат(Оповещение) - - Контекст = Новый Структура; - Контекст.Вставить("Оповещение", Оповещение); - - Если СертификатВОблачномСервисе Тогда - МодульСервисКриптографииКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("СервисКриптографииКлиент"); - МодульСервисКриптографииКлиент.ПроверитьСертификат(Оповещение, ПолучитьИзВременногоХранилища(СертификатАдрес)); - Иначе - ЭлектроннаяПодписьСлужебныйКлиент.СоздатьМенеджерКриптографии(Новый ОписаниеОповещения( - "ПроверитьСертификатПослеСозданияМенеджераКриптографии", ЭтотОбъект, Контекст), "", Неопределено); - КонецЕсли; - -КонецПроцедуры - -// Продолжение процедуры ПроверитьСертификат. -&НаКлиенте -Процедура ПроверитьСертификатПослеСозданияМенеджераКриптографии(Результат, Контекст) Экспорт - - Если ТипЗнч(Результат) <> Тип("МенеджерКриптографии") - И Результат.Общая Тогда - - Если ДляШифрованияИРасшифровки = Истина Тогда - Результат.Вставить("ЗаголовокОшибки", НСтр("ru = 'Не удалось пройти проверку шифрования по причине:'")); - Иначе - Результат.Вставить("ЗаголовокОшибки", НСтр("ru = 'Не удалось пройти проверку подписания по причине:'")); - КонецЕсли; - ВыполнитьОбработкуОповещения(Контекст.Оповещение, Результат); - Возврат; - КонецЕсли; - - Контекст.Вставить("ДвоичныеДанныеСертификата", ПолучитьИзВременногоХранилища(СертификатАдрес)); - - СертификатКриптографии = Новый СертификатКриптографии; - СертификатКриптографии.НачатьИнициализацию(Новый ОписаниеОповещения( - "ПроверитьСертификатПослеИнициализацииСертификата", ЭтотОбъект, Контекст), - Контекст.ДвоичныеДанныеСертификата); - -КонецПроцедуры - -// Продолжение процедуры ПроверитьСертификат. -&НаКлиенте -Процедура ПроверитьСертификатПослеИнициализацииСертификата(СертификатКриптографии, Контекст) Экспорт - - Контекст.Вставить("СертификатКриптографии", СертификатКриптографии); - - Контекст.Вставить("ОписаниеОшибки", ""); - Контекст.Вставить("ОшибкаНаКлиенте", Новый Структура); - - Контекст.ОшибкаНаКлиенте.Вставить("ОписаниеОшибки", ""); - Контекст.ОшибкаНаКлиенте.Вставить("Ошибки", Новый Массив); - - Контекст.Вставить("ОписанияПрограмм", ЭлектроннаяПодписьКлиент.ОбщиеНастройки().ОписанияПрограмм); - Контекст.Вставить("Индекс", -1); - - ПроверитьСертификатЦиклНачало(Контекст); - -КонецПроцедуры - -// Продолжение процедуры ПроверитьСертификат. -&НаКлиенте -Процедура ПроверитьСертификатЦиклНачало(Контекст) - - Если Контекст.ОписанияПрограмм.Количество() <= Контекст.Индекс + 1 Тогда - Контекст.ОшибкаНаКлиенте.Вставить("ОписаниеОшибки", СокрЛП(Контекст.ОписаниеОшибки)); - ВыполнитьОбработкуОповещения(Контекст.Оповещение, Контекст.ОшибкаНаКлиенте); - Возврат; - КонецЕсли; - Контекст.Индекс = Контекст.Индекс + 1; - Контекст.Вставить("ОписаниеПрограммы", Контекст.ОписанияПрограмм[Контекст.Индекс]); - - ЭлектроннаяПодписьСлужебныйКлиент.СоздатьМенеджерКриптографии(Новый ОписаниеОповещения( - "ПроверитьСертификатЦиклПослеСозданияМенеджераКриптографии", ЭтотОбъект, Контекст), - "", Неопределено, Контекст.ОписаниеПрограммы.Ссылка, СертификатУсиленнаяЗащитаЗакрытогоКлюча); - -КонецПроцедуры - -// Продолжение процедуры ПроверитьСертификат. -&НаКлиенте -Процедура ПроверитьСертификатЦиклПослеСозданияМенеджераКриптографии(Результат, Контекст) Экспорт - - Если ТипЗнч(Результат) <> Тип("МенеджерКриптографии") Тогда - Если Результат.Ошибки.Количество() > 0 Тогда - Контекст.ОшибкаНаКлиенте.Ошибки.Добавить(Результат.Ошибки[0]); - КонецЕсли; - ПроверитьСертификатЦиклНачало(Контекст); - Возврат; - КонецЕсли; - Контекст.Вставить("МенеджерКриптографии", Результат); - - Если Не ЭлектроннаяПодписьСлужебныйКлиент.ИспользуетсяИнтерактивныйРежимКриптографии(Контекст.МенеджерКриптографии) Тогда - Контекст.МенеджерКриптографии.ПарольДоступаКЗакрытомуКлючу = СвойстваПароля.Значение; - КонецЕсли; - - Если ДляШифрованияИРасшифровки = Истина Тогда - Контекст.МенеджерКриптографии.НачатьШифрование(Новый ОписаниеОповещения( - "ПроверитьСертификатЦиклПослеШифрования", ЭтотОбъект, Контекст, - "ПроверитьСертификатЦиклПослеОшибкиШифрования", ЭтотОбъект), - Контекст.ДвоичныеДанныеСертификата, Контекст.СертификатКриптографии); - Иначе - Контекст.МенеджерКриптографии.НачатьПодписывание(Новый ОписаниеОповещения( - "ПроверитьСертификатЦиклПослеПодписания", ЭтотОбъект, Контекст, - "ПроверитьСертификатЦиклПослеОшибкиПодписания", ЭтотОбъект), - Контекст.ДвоичныеДанныеСертификата, Контекст.СертификатКриптографии); - КонецЕсли; - -КонецПроцедуры - -// Продолжение процедуры ПроверитьСертификат. -&НаКлиенте -Процедура ПроверитьСертификатЦиклПослеОшибкиПодписания(ИнформацияОбОшибке, СтандартнаяОбработка, Контекст) Экспорт - - СтандартнаяОбработка = Ложь; - - ЗаполнитьОшибкуПодписания(Контекст.ОшибкаНаКлиенте, Контекст.ОписаниеОшибки, Контекст.ОписаниеПрограммы, - КраткоеПредставлениеОшибки(ИнформацияОбОшибке), Ложь); - - ПроверитьСертификатЦиклНачало(Контекст); - -КонецПроцедуры - -// Продолжение процедуры ПроверитьСертификат. -&НаКлиенте -Процедура ПроверитьСертификатЦиклПослеПодписания(ДанныеПодписи, Контекст) Экспорт - - ПредставлениеОшибки = ""; - Попытка - ЭлектроннаяПодписьСлужебныйКлиентСервер.ПустыеДанныеПодписи(ДанныеПодписи, ПредставлениеОшибки); - Исключение - ИнформацияОбОшибке = ИнформацияОбОшибке(); - ПредставлениеОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке); - КонецПопытки; - - Если ЗначениеЗаполнено(ПредставлениеОшибки) Тогда - ЗаполнитьОшибкуПодписания(Контекст.ОшибкаНаКлиенте, Контекст.ОписаниеОшибки, Контекст.ОписаниеПрограммы, - ПредставлениеОшибки, ИнформацияОбОшибке = Неопределено); - ПроверитьСертификатЦиклНачало(Контекст); - Возврат; - КонецЕсли; - - Результат = Новый Структура("Программа", Контекст.ОписаниеПрограммы.Ссылка); - ВыполнитьОбработкуОповещения(Контекст.Оповещение, Результат); - -КонецПроцедуры - -// Продолжение процедуры ПроверитьСертификат. -&НаКлиенте -Процедура ПроверитьСертификатЦиклПослеОшибкиШифрования(ИнформацияОбОшибке, СтандартнаяОбработка, Контекст) Экспорт - - СтандартнаяОбработка = Ложь; - - ЗаполнитьОшибкуШифрования(Контекст.ОшибкаНаКлиенте, Контекст.ОписаниеОшибки, Контекст.ОписаниеПрограммы, - КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); - - ПроверитьСертификатЦиклНачало(Контекст); - -КонецПроцедуры - -// Продолжение процедуры ПроверитьСертификат. -&НаКлиенте -Процедура ПроверитьСертификатЦиклПослеШифрования(ЗашифрованныеДанные, Контекст) Экспорт - - Контекст.МенеджерКриптографии.НачатьРасшифровку(Новый ОписаниеОповещения( - "ПроверитьСертификатЦиклПослеРасшифровки", ЭтотОбъект, Контекст, - "ПроверитьСертификатЦиклПослеОшибкиРасшифровки", ЭтотОбъект), - ЗашифрованныеДанные); - -КонецПроцедуры - -// Продолжение процедуры ПроверитьСертификат. -&НаКлиенте -Процедура ПроверитьСертификатЦиклПослеОшибкиРасшифровки(ИнформацияОбОшибке, СтандартнаяОбработка, Контекст) Экспорт - - СтандартнаяОбработка = Ложь; - - ЗаполнитьОшибкуРасшифровки(Контекст.ОшибкаНаКлиенте, Контекст.ОписаниеОшибки, Контекст.ОписаниеПрограммы, - КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); - - ПроверитьСертификатЦиклНачало(Контекст); - -КонецПроцедуры - -// Продолжение процедуры ПроверитьСертификат. -&НаКлиенте -Процедура ПроверитьСертификатЦиклПослеРасшифровки(РасшифрованныеДанные, Контекст) Экспорт - - ПредставлениеОшибки = ""; - Попытка - ЭлектроннаяПодписьСлужебныйКлиентСервер.ПустыеРасшифрованныеДанные(РасшифрованныеДанные, ПредставлениеОшибки); - Исключение - ИнформацияОбОшибке = ИнформацияОбОшибке(); - ПредставлениеОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке); - КонецПопытки; - - Если ЗначениеЗаполнено(ПредставлениеОшибки) Тогда - ЗаполнитьОшибкуРасшифровки(Контекст.ОшибкаНаКлиенте, Контекст.ОписаниеОшибки, Контекст.ОписаниеПрограммы, - ПредставлениеОшибки); - ПроверитьСертификатЦиклНачало(Контекст); - Возврат; - КонецЕсли; - - Результат = Новый Структура("Программа", Контекст.ОписаниеПрограммы.Ссылка); - ВыполнитьОбработкуОповещения(Контекст.Оповещение, Результат); - -КонецПроцедуры - - -&НаСервере -Функция ПроверитьСертификатИЗаписатьВСправочник(Знач ЗначениеПароля, ОшибкаНаСервере) - - Если ЭлектроннаяПодписьСлужебный.МенеджерКриптографии("", Ложь, ОшибкаНаСервере) = Неопределено - И ОшибкаНаСервере.Общая Тогда - - Если ДляШифрованияИРасшифровки = Истина Тогда - ОшибкаНаСервере.Вставить("ЗаголовокОшибки", НСтр("ru = 'Не удалось пройти проверку шифрования по причине:'")); - Иначе - ОшибкаНаСервере.Вставить("ЗаголовокОшибки", НСтр("ru = 'Не удалось пройти проверку подписания по причине:'")); - КонецЕсли; - Возврат Ложь; - КонецЕсли; - - ДвоичныеДанныеСертификата = ПолучитьИзВременногоХранилища(СертификатАдрес); - СертификатКриптографии = Новый СертификатКриптографии(ДвоичныеДанныеСертификата); - - ОшибкаНаСервере = Новый Структура; - ОшибкаНаСервере.Вставить("ОписаниеОшибки", ""); - ОшибкаНаСервере.Вставить("Ошибки", Новый Массив); - - ОписаниеОшибки = ""; - - ОписанияПрограмм = ЭлектроннаяПодпись.ОбщиеНастройки().ОписанияПрограмм; - Для каждого ОписаниеПрограммы Из ОписанияПрограмм Цикл - ОшибкаМенеджера = Новый Структура; - - МенеджерКриптографии = ЭлектроннаяПодписьСлужебный.МенеджерКриптографии("", - Ложь, ОшибкаМенеджера, ОписаниеПрограммы.Ссылка); - - Если МенеджерКриптографии = Неопределено Тогда - Если ОшибкаМенеджера.Ошибки.Количество() > 0 Тогда - ОшибкаНаСервере.Ошибки.Добавить(ОшибкаМенеджера.Ошибки[0]); - КонецЕсли; - Продолжить; - КонецЕсли; - - МенеджерКриптографии.ПарольДоступаКЗакрытомуКлючу = ЗначениеПароля; - - Если ДляШифрованияИРасшифровки = Истина Тогда - Успех = ПроверитьШифрованиеИРасшифровкуНаСервере(МенеджерКриптографии, ДвоичныеДанныеСертификата, - СертификатКриптографии, ОписаниеПрограммы, ОшибкаНаСервере, ОписаниеОшибки); - Иначе - Успех = ПроверитьПодписаниеНаСервере(МенеджерКриптографии, ДвоичныеДанныеСертификата, - СертификатКриптографии, ОписаниеПрограммы, ОшибкаНаСервере, ОписаниеОшибки); - КонецЕсли; - - Если Успех Тогда - ЗаписатьСертификатВСправочник(ОписаниеПрограммы.Ссылка); - Возврат Истина; - КонецЕсли; - КонецЦикла; - - ОшибкаНаСервере.Вставить("ОписаниеОшибки", СокрЛП(ОписаниеОшибки)); - - Возврат Ложь; - -КонецФункции - -&НаСервере -Функция ПроверитьШифрованиеИРасшифровкуНаСервере(МенеджерКриптографии, ДвоичныеДанныеСертификата, - СертификатКриптографии, ОписаниеПрограммы, ОшибкаНаСервере, ОписаниеОшибки) - - ПредставлениеОшибки = ""; - Попытка - ЗашифрованныеДанные = МенеджерКриптографии.Зашифровать(ДвоичныеДанныеСертификата, СертификатКриптографии); - Исключение - ИнформацияОбОшибке = ИнформацияОбОшибке(); - ПредставлениеОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке); - КонецПопытки; - - Если ЗначениеЗаполнено(ПредставлениеОшибки) Тогда - ЗаполнитьОшибкуШифрования(ОшибкаНаСервере, ОписаниеОшибки, ОписаниеПрограммы, ПредставлениеОшибки); - Возврат Ложь; - КонецЕсли; - - ПредставлениеОшибки = ""; - Попытка - РасшифрованныеДанные = МенеджерКриптографии.Расшифровать(ЗашифрованныеДанные); - ЭлектроннаяПодписьСлужебныйКлиентСервер.ПустыеРасшифрованныеДанные(РасшифрованныеДанные, ПредставлениеОшибки); - Исключение - ИнформацияОбОшибке = ИнформацияОбОшибке(); - ПредставлениеОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке); - КонецПопытки; - - Если ЗначениеЗаполнено(ПредставлениеОшибки) Тогда - ЗаполнитьОшибкуРасшифровки(ОшибкаНаСервере, ОписаниеОшибки, ОписаниеПрограммы, ПредставлениеОшибки); - Возврат Ложь; - КонецЕсли; - - Возврат Истина; - -КонецФункции - -&НаСервере -Функция ПроверитьПодписаниеНаСервере(МенеджерКриптографии, ДвоичныеДанныеСертификата, - СертификатКриптографии, ОписаниеПрограммы, ОшибкаНаСервере, ОписаниеОшибки) - - ПредставлениеОшибки = ""; - Попытка - ДанныеПодписи = МенеджерКриптографии.Подписать(ДвоичныеДанныеСертификата, СертификатКриптографии); - ЭлектроннаяПодписьСлужебныйКлиентСервер.ПустыеДанныеПодписи(ДанныеПодписи, ПредставлениеОшибки); - Исключение - ИнформацияОбОшибке = ИнформацияОбОшибке(); - ПредставлениеОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке); - КонецПопытки; - Если ЗначениеЗаполнено(ПредставлениеОшибки) Тогда - ЗаполнитьОшибкуПодписания(ОшибкаНаСервере, ОписаниеОшибки, ОписаниеПрограммы, - ПредставлениеОшибки, ИнформацияОбОшибке <> Неопределено); - Возврат Ложь; - КонецЕсли; - - Возврат Истина; - -КонецФункции - -&НаСервере -Процедура ЗаписатьСертификатВСправочник(Программа) - - ЭлектроннаяПодписьСлужебный.ЗаписатьСертификатВСправочник(ЭтотОбъект, Программа); - -КонецПроцедуры - &НаСервере Процедура ЗаписатьСертификатВСправочникВМоделиСервиса() - ЭлектроннаяПодписьСлужебный.ЗаписатьСертификатВСправочник(ЭтотОбъект, , Истина); + ПрограммаОблачногоСервиса = ЭлектроннаяПодписьСлужебный.ПрограммаОблачногоСервиса(); + СертификатУсиленнаяЗащитаЗакрытогоКлюча = Ложь; -КонецПроцедуры - -&НаКлиентеНаСервереБезКонтекста -Процедура ЗаполнитьОшибкуШифрования(Ошибка, ОписаниеОшибки, ОписаниеПрограммы, ПредставлениеОшибки) - - ТекущаяОшибка = Новый Структура; - ТекущаяОшибка.Вставить("Описание", ПредставлениеОшибки); - ТекущаяОшибка.Вставить("Инструкция", Истина); - ТекущаяОшибка.Вставить("НастройкаПрограмм", Истина); - - Ошибка.Ошибки.Добавить(ТекущаяОшибка); - - ОписаниеОшибки = ОписаниеОшибки + Символы.ПС + Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не удалось пройти проверку шифрования с помощью программы %1 по причине: - |%2'"), - ОписаниеПрограммы.Наименование, - ПредставлениеОшибки); - -КонецПроцедуры - -&НаКлиентеНаСервереБезКонтекста -Процедура ЗаполнитьОшибкуРасшифровки(Ошибка, ОписаниеОшибки, ОписаниеПрограммы, ПредставлениеОшибки) - - ТекущаяОшибка = Новый Структура; - ТекущаяОшибка.Вставить("Описание", ПредставлениеОшибки); - ТекущаяОшибка.Вставить("Инструкция", Истина); - ТекущаяОшибка.Вставить("НастройкаПрограмм", Истина); - - Ошибка.Ошибки.Добавить(ТекущаяОшибка); - - ОписаниеОшибки = ОписаниеОшибки + Символы.ПС + Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не удалось пройти проверку расшифровки с помощью программы %1 по причине: - |%2'"), - ОписаниеПрограммы.Наименование, - ПредставлениеОшибки); - -КонецПроцедуры - -&НаКлиентеНаСервереБезКонтекста -Процедура ЗаполнитьОшибкуПодписания(Ошибка, ОписаниеОшибки, ОписаниеПрограммы, ПредставлениеОшибки, ПустыеДанные) - - ТекущаяОшибка = Новый Структура; - ТекущаяОшибка.Вставить("Описание", ПредставлениеОшибки); - - Если Не ПустыеДанные Тогда - ТекущаяОшибка.Вставить("НастройкаПрограмм", Истина); - ТекущаяОшибка.Вставить("Инструкция", Истина); - КонецЕсли; - - Ошибка.Ошибки.Добавить(ТекущаяОшибка); - - ОписаниеОшибки = ОписаниеОшибки + Символы.ПС + Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не удалось пройти проверку подписания с помощью программы %1 по причине: - |%2'"), - ОписаниеПрограммы.Наименование, - ПредставлениеОшибки); + ЭлектроннаяПодписьСлужебный.ЗаписатьСертификатВСправочник(ЭтотОбъект, ПрограммаОблачногоСервиса, Ложь); КонецПроцедуры diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ДобавлениеСертификатаДляШифрования/Form.form b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ДобавлениеСертификатаДляШифрования/Form.form index f2ada39c0..ae0a500d5 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ДобавлениеСертификатаДляШифрования/Form.form +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ДобавлениеСертификатаДляШифрования/Form.form @@ -782,13 +782,6 @@ ru Сертификаты на компьютере - - Style.NormalTextFont - true - false - false - false - ГруппаСертификатыРасширеннаяПодсказка 544 @@ -803,6 +796,7 @@ Vertical Auto + NormalSeparation true true auto @@ -1363,13 +1357,6 @@ ru Введите дополнительные сведения о сертификате - - Style.NormalTextFont - true - false - false - false - false true @@ -1386,6 +1373,7 @@ Vertical Auto + NormalSeparation true true auto @@ -1568,6 +1556,10 @@ OnOpen ПриОткрытии + + BeforeClose + ПередЗакрытием + OnCreateAtServer ПриСозданииНаСервере diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ДобавлениеСертификатаДляШифрования/Module.bsl b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ДобавлениеСертификатаДляШифрования/Module.bsl index 2fadb7732..a845381e7 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ДобавлениеСертификатаДляШифрования/Module.bsl +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ДобавлениеСертификатаДляШифрования/Module.bsl @@ -103,6 +103,21 @@ КонецПроцедуры +&НаКлиенте +Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка) + + Если ЗавершениеРаботы Тогда + Возврат; + КонецЕсли; + + СтандартнаяОбработка = Ложь; + ВозвращаемоеЗначение = Новый Структура; + ВозвращаемоеЗначение.Вставить("Ссылка", Сертификат); + ВозвращаемоеЗначение.Вставить("Добавлен", ЗначениеЗаполнено(Сертификат)); + Закрыть(ВозвращаемоеЗначение); + +КонецПроцедуры + #КонецОбласти #Область ОбработчикиСобытийЭлементовШапкиФормы diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ОповещениеОбОкончанииСрокаДействия/Module.bsl b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ОповещениеОбОкончанииСрокаДействия/Module.bsl index d1d23bc56..63a0d5846 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ОповещениеОбОкончанииСрокаДействия/Module.bsl +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ОповещениеОбОкончанииСрокаДействия/Module.bsl @@ -22,7 +22,7 @@ Возврат; КонецЕсли; Если БольшеНеНапоминать Тогда - УстановитьПометкуНаСервере(Сертификат); + УстановитьПометкуНаСервере(Сертификат, УникальныйИдентификатор); КонецЕсли; КонецПроцедуры @@ -32,11 +32,29 @@ #Область СлужебныеПроцедурыИФункции &НаСервереБезКонтекста -Процедура УстановитьПометкуНаСервере(Сертификат) +Процедура УстановитьПометкуНаСервере(Сертификат, Идентификатор) - СертификатОбъект = Сертификат.ПолучитьОбъект(); - СертификатОбъект.ПользовательОповещенОСрокеДействия = Истина; - СертификатОбъект.Записать(); + ЗаблокироватьДанныеДляРедактирования(Сертификат, , Идентификатор); + + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Справочник.СертификатыКлючейЭлектроннойПодписиИШифрования"); + ЭлементБлокировки.УстановитьЗначение("Ссылка", Сертификат); + + НачатьТранзакцию(); + Попытка + + Блокировка.Заблокировать(); + + СертификатОбъект = Сертификат.ПолучитьОбъект(); + СертификатОбъект.ПользовательОповещенОСрокеДействия = Истина; + СертификатОбъект.Записать(); + + ЗафиксироватьТранзакцию(); + + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; КонецПроцедуры diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПодписаниеДанных/Form.form b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПодписаниеДанных/Form.form index b9d30250c..c321f355e 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПодписаниеДанных/Form.form +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПодписаниеДанных/Form.form @@ -488,13 +488,6 @@ ru Введите пароль закрытого ключа сертификата - - Style.NormalTextFont - true - false - false - false - ГруппаПодписаниеРасширеннаяПодсказка 379 @@ -509,6 +502,7 @@ HorizontalIfPossible Auto + WeakSeparation true true auto diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПодписаниеДанных/Module.bsl b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПодписаниеДанных/Module.bsl index e89f04981..5607b95fb 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПодписаниеДанных/Module.bsl +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПодписаниеДанных/Module.bsl @@ -397,8 +397,7 @@ Контекст.ОшибкаНаКлиенте.Вставить("ОписаниеОшибки", НСтр("ru = 'У выбранного сертификата истек срок действия. |Выберите другой сертификат.'")); - ПоказатьОшибку(Контекст.ОшибкаНаКлиенте, Контекст.ОшибкаНаСервере); - ВыполнитьОбработкуОповещения(Контекст.Оповещение, Ложь); + ОбработатьОшибку(Контекст.Оповещение, Контекст.ОшибкаНаКлиенте, Контекст.ОшибкаНаСервере); Возврат; КонецЕсли; @@ -406,8 +405,7 @@ Контекст.ОшибкаНаКлиенте.Вставить("ОписаниеОшибки", НСтр("ru = 'У выбранного сертификата не указана программа для закрытого ключа. |Выберите другой сертификат.'")); - ПоказатьОшибку(Контекст.ОшибкаНаКлиенте, Контекст.ОшибкаНаСервере); - ВыполнитьОбработкуОповещения(Контекст.Оповещение, Ложь); + ОбработатьОшибку(Контекст.Оповещение, Контекст.ОшибкаНаКлиенте, Контекст.ОшибкаНаСервере); Возврат; КонецЕсли; @@ -437,7 +435,7 @@ Процедура ПодписатьДанныеПослеОбработкиПередВыполнением(Результат, Контекст) Экспорт Если Результат.Свойство("ОписаниеОшибки") Тогда - ПоказатьОшибку(Новый Структура("ОписаниеОшибки", Результат.ОписаниеОшибки), Новый Структура); + ОбработатьОшибку(Контекст.Оповещение, Новый Структура("ОписаниеОшибки", Результат.ОписаниеОшибки), Новый Структура); Возврат; КонецЕсли; @@ -520,12 +518,14 @@ ПодписатьДанныеПослеВыполнения(Результат); Если Результат.Свойство("Ошибка") Тогда + Контекст.ОшибкаНаКлиенте = Результат.Ошибка; НеподписанныеДанные = ЭлектроннаяПодписьСлужебныйКлиент.СвойстваТекущегоЭлементаДанных( Контекст.ПараметрыВыполнения); - ПоказатьОшибку(Контекст.ОшибкаНаКлиенте, Контекст.ОшибкаНаСервере, НеподписанныеДанные); - ВыполнитьОбработкуОповещения(Контекст.Оповещение, Ложь); + + ОбработатьОшибку(Контекст.Оповещение, Контекст.ОшибкаНаКлиенте, Контекст.ОшибкаНаСервере, НеподписанныеДанные); Возврат; + КонецЕсли; Если ЗначениеЗаполнено(ПредставлениеДанных) @@ -570,21 +570,41 @@ КонецПроцедуры &НаКлиенте -Процедура ПоказатьОшибку(ОшибкаНаКлиенте, ОшибкаНаСервере, НеподписанныеДанные = Неопределено) +Процедура ОбработатьОшибку(Оповещение, ОшибкаНаКлиенте, ОшибкаНаСервере, НеподписанныеДанные = Неопределено) - Если Не Открыта() И ОбработкаПослеПредупреждения = Неопределено Тогда - Открыть(); + Если ОписаниеДанных.Свойство("ПрекратитьВыполнение") Тогда + + Если Не ОписаниеДанных.Свойство("ОписаниеОшибки") Тогда + ОписаниеДанных.Вставить("ОписаниеОшибки"); + КонецЕсли; + + ОписаниеДанных.ОписаниеОшибки = ОшибкаНаКлиенте.ОписаниеОшибки; + + Если Открыта() Тогда + Закрыть(Ложь); + Иначе + ВыполнитьОбработкуОповещения(Оповещение, Ложь); + КонецЕсли; + + Иначе + + Если Не Открыта() И ОбработкаПослеПредупреждения = Неопределено Тогда + Открыть(); + КонецЕсли; + + ДополнительныеПараметры = Новый Структура; + Если НеподписанныеДанные <> Неопределено Тогда + ДополнительныеПараметры.Вставить("НеподписанныеДанные", НеподписанныеДанные); + КонецЕсли; + + ЭлектроннаяПодписьСлужебныйКлиент.ПоказатьОшибкуОбращенияКПрограмме( + НСтр("ru = 'Не удалось подписать данные'"), "", + ОшибкаНаКлиенте, ОшибкаНаСервере, ДополнительныеПараметры, ОбработкаПослеПредупреждения); + + ВыполнитьОбработкуОповещения(Оповещение, Ложь); + КонецЕсли; - ДополнительныеПараметры = Новый Структура; - Если НеподписанныеДанные <> Неопределено Тогда - ДополнительныеПараметры.Вставить("НеподписанныеДанные", НеподписанныеДанные); - КонецЕсли; - - ЭлектроннаяПодписьСлужебныйКлиент.ПоказатьОшибкуОбращенияКПрограмме( - НСтр("ru = 'Не удалось подписать данные'"), "", - ОшибкаНаКлиенте, ОшибкаНаСервере, ДополнительныеПараметры, ОбработкаПослеПредупреждения); - КонецПроцедуры #КонецОбласти diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПроверкаСертификата/Form.form b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПроверкаСертификата/Form.form index a259125de..0d91c3007 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПроверкаСертификата/Form.form +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПроверкаСертификата/Form.form @@ -1863,13 +1863,6 @@ ru Введите пароль закрытого ключа сертификата - - Style.NormalTextFont - true - false - false - false - ГруппаВводаПароляРасширеннаяПодсказка 143 @@ -1884,6 +1877,7 @@ HorizontalIfPossible Auto + WeakSeparation true true auto diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПроверкаСертификата/Module.bsl b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПроверкаСертификата/Module.bsl index f6981a83e..1e0bb4b0d 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПроверкаСертификата/Module.bsl +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПроверкаСертификата/Module.bsl @@ -9,7 +9,7 @@ #Область ОписаниеПеременных &НаКлиенте -Перем ВнутренниеДанные, КлиентскиеПараметры, СвойстваПароля; +Перем ВнутренниеДанные, КлиентскиеПараметры, СвойстваПароля, ПараметрыВыполненияКонтекста; #КонецОбласти @@ -21,10 +21,6 @@ ЭлектроннаяПодписьСлужебный.НастроитьПояснениеВводаПароля(ЭтотОбъект, , Элементы.ПояснениеУсиленногоПароля.Имя); - Если КлиентскоеПриложение.ТекущийВариантИнтерфейса() = ВариантИнтерфейсаКлиентскогоПриложения.Версия8_2 Тогда - Элементы.НаСервереКартинка.Высота = 2; - КонецЕсли; - Сертификат = Параметры.Сертификат; ПроверкаПриВыборе = Параметры.ПроверкаПриВыборе; @@ -257,6 +253,19 @@ КлиентскиеПараметры.Вставить("Результат"); ДополнительныеПараметры = Новый Структура; + Если КлиентскиеПараметры.Свойство("УказанКонтекстДругойОперации") Тогда + + СвойстваСертификата = ОбщиеВнутренниеДанные; + КлиентскиеПараметры.КонтекстОперации.ПродолжитьОткрытие(Неопределено, Неопределено, СвойстваСертификата); + Если СвойстваСертификата.Сертификат = Сертификат Тогда + СвойстваПароля = СвойстваСертификата.СвойстваПароля; + КонецЕсли; + + ДополнительныеПараметры.Вставить("ПарольУказан"); + ДополнительныеПараметры.Вставить("ПриУстановкеПароляИзДругойОперации", Истина); + + КонецЕсли; + ЭлектроннаяПодписьСлужебныйКлиент.ОбработатьПарольВФорме(ЭтотОбъект, ВнутренниеДанные, СвойстваПароля, ДополнительныеПараметры); @@ -295,7 +304,10 @@ Возврат; КонецЕсли; - Если Не Открыта() Тогда + Если Не Открыта() + И Не (КлиентскиеПараметры.Свойство("НеПоказыватьРезультаты") + И КлиентскиеПараметры.НеПоказыватьРезультаты) Тогда + Открыть(); КонецЕсли; @@ -943,7 +955,10 @@ ПараметрыВыполнения.Вставить("Оповещение", Новый ОписаниеОповещения( "ПроверитьНаСторонеКлиентаПослеДополнительнойПроверки", ЭтотОбъект, Контекст)); - Контекст.Вставить("ПараметрыВыполнения", ПараметрыВыполнения); + Если ТипЗнч(ПараметрыВыполненияКонтекста) <> Тип("Соответствие") Тогда + ПараметрыВыполненияКонтекста = Новый Соответствие; + КонецЕсли; + ПараметрыВыполненияКонтекста.Вставить(Контекст, ПараметрыВыполнения); Попытка ЭлектроннаяПодписьКлиентПереопределяемый.ПриДополнительнойПроверкеСертификата(ПараметрыВыполнения); @@ -963,9 +978,12 @@ &НаКлиенте Процедура ПроверитьНаСторонеКлиентаПослеДополнительнойПроверки(Неопределен, Контекст) Экспорт + ПараметрыВыполнения = ПараметрыВыполненияКонтекста.Получить(Контекст); + ПараметрыВыполненияКонтекста.Удалить(Контекст); + УстановитьЭлемент(ЭтотОбъект, Контекст.ЭлементСписка.Значение, Ложь, - Контекст.ПараметрыВыполнения.ОписаниеОшибки, - Контекст.ПараметрыВыполнения.ЭтоПредупреждение <> Истина); + ПараметрыВыполнения.ОписаниеОшибки, + ПараметрыВыполнения.ЭтоПредупреждение <> Истина); ПроверитьНаСторонеКлиентаЦиклНачало(Контекст); @@ -1134,15 +1152,17 @@ ЭлементКартинка.Картинка = Новый Картинка; ЭлементКартинка.Подсказка = НСтр("ru = 'Проверка не выполнялась.'"); Проверки.Вставить(НачалоЭлемента, Неопределено); - + Проверки.Вставить(НачалоЭлемента + "Ошибка", ""); ИначеЕсли ЗначениеЗаполнено(ОписаниеОшибки) Тогда ЭлементКартинка.Картинка = ?(ЭтоОшибка, БиблиотекаКартинок.Ошибка32, БиблиотекаКартинок.Предупреждение32); ЭлементКартинка.Подсказка = ОписаниеОшибки; Проверки.Вставить(НачалоЭлемента, Ложь); + Проверки.Вставить(НачалоЭлемента + "Ошибка", ОписаниеОшибки); Иначе ЭлементКартинка.Картинка = БиблиотекаКартинок.Успешно32; ЭлементКартинка.Подсказка = НСтр("ru = 'Проверка выполнена успешно.'");; Проверки.Вставить(НачалоЭлемента, Истина); + Проверки.Вставить(НачалоЭлемента + "Ошибка", ""); КонецЕсли; КонецПроцедуры diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/РасшифровкаДанных/Form.form b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/РасшифровкаДанных/Form.form index 2e507c02a..18bea74e4 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/РасшифровкаДанных/Form.form +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/РасшифровкаДанных/Form.form @@ -484,13 +484,6 @@ ru Введите пароль закрытого ключа сертификата - - Style.NormalTextFont - true - false - false - false - ГруппаРасшифровкаРасширеннаяПодсказка 379 @@ -505,6 +498,7 @@ HorizontalIfPossible Auto + WeakSeparation true true auto diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/РасшифровкаДанных/Module.bsl b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/РасшифровкаДанных/Module.bsl index 2160d1988..496120024 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/РасшифровкаДанных/Module.bsl +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/РасшифровкаДанных/Module.bsl @@ -435,8 +435,7 @@ НСтр("ru = 'У выбранного сертификата не указана программа для закрытого ключа. |Выберите сертификат повторно из полного списка или |откройте сертификат и укажите программу вручную.'")); - ПоказатьОшибку(Контекст.ОшибкаНаКлиенте, Контекст.ОшибкаНаСервере); - ВыполнитьОбработкуОповещения(Контекст.Оповещение, Ложь); + ОбработатьОшибку(Контекст.Оповещение, Контекст.ОшибкаНаКлиенте, Контекст.ОшибкаНаСервере); Возврат; КонецЕсли; @@ -466,7 +465,7 @@ Процедура РасшифроватьДанныеПослеОбработкиПередВыполнением(Результат, Контекст) Экспорт Если Результат.Свойство("ОписаниеОшибки") Тогда - ПоказатьОшибку(Новый Структура("ОписаниеОшибки", Результат.ОписаниеОшибки), Новый Структура); + ОбработатьОшибку(Контекст.Оповещение, Новый Структура("ОписаниеОшибки", Результат.ОписаниеОшибки), Новый Структура); Возврат; КонецЕсли; @@ -533,14 +532,12 @@ Если Результат.Свойство("Ошибка") Тогда Контекст.ОшибкаНаКлиенте = Результат.Ошибка; - ПоказатьОшибку(Контекст.ОшибкаНаКлиенте, Контекст.ОшибкаНаСервере); - ВыполнитьОбработкуОповещения(Контекст.Оповещение, Ложь); + ОбработатьОшибку(Контекст.Оповещение, Контекст.ОшибкаНаКлиенте, Контекст.ОшибкаНаСервере); Возврат; КонецЕсли; Если Не ЗаписатьСертификатыШифрования(Контекст.ИдентификаторФормы, Контекст.ОшибкаНаКлиенте) Тогда - ПоказатьОшибку(Контекст.ОшибкаНаКлиенте, Контекст.ОшибкаНаСервере); - ВыполнитьОбработкуОповещения(Контекст.Оповещение, Ложь); + ОбработатьОшибку(Контекст.Оповещение, Контекст.ОшибкаНаКлиенте, Контекст.ОшибкаНаСервере); Возврат; КонецЕсли; @@ -631,18 +628,37 @@ КонецПроцедуры - &НаКлиенте -Процедура ПоказатьОшибку(ОшибкаНаКлиенте, ОшибкаНаСервере) +Процедура ОбработатьОшибку(Оповещение, ОшибкаНаКлиенте, ОшибкаНаСервере) - Если Не Открыта() И ОбработкаПослеПредупреждения = Неопределено Тогда - Открыть(); + Если ОписаниеДанных.Свойство("ПрекратитьВыполнение") Тогда + + Если Не ОписаниеДанных.Свойство("ОписаниеОшибки") Тогда + ОписаниеДанных.Вставить("ОписаниеОшибки"); + КонецЕсли; + + ОписаниеДанных.ОписаниеОшибки = ОшибкаНаКлиенте.ОписаниеОшибки; + + Если Открыта() Тогда + Закрыть(Ложь); + Иначе + ВыполнитьОбработкуОповещения(Оповещение, Ложь); + КонецЕсли; + + Иначе + + Если Не Открыта() И ОбработкаПослеПредупреждения = Неопределено Тогда + Открыть(); + КонецЕсли; + + ЭлектроннаяПодписьСлужебныйКлиент.ПоказатьОшибкуОбращенияКПрограмме( + НСтр("ru = 'Не удалось расшифровать данные'"), "", + ОшибкаНаКлиенте, ОшибкаНаСервере, , ОбработкаПослеПредупреждения); + + ВыполнитьОбработкуОповещения(Оповещение, Ложь); + КонецЕсли; - ЭлектроннаяПодписьСлужебныйКлиент.ПоказатьОшибкуОбращенияКПрограмме( - НСтр("ru = 'Не удалось расшифровать данные'"), "", - ОшибкаНаКлиенте, ОшибкаНаСервере, , ОбработкаПослеПредупреждения); - КонецПроцедуры #КонецОбласти diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ФормаЭлемента/Form.form index 5df235fa9..44106586d 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ФормаЭлемента/Form.form @@ -948,6 +948,10 @@ Объект.Программа + + OnChange + ПрограммаПриИзменении + ПрограммаРасширеннаяПодсказка 131 @@ -1022,6 +1026,7 @@ ru Настройки закрытого ключа (для создания электронных подписей или расшифровки данных) + 60 ДляЭлектроннойПодписиИРасшифровкиРасширеннаяПодсказка 222 @@ -1051,14 +1056,15 @@ 65 ФормаСкопировать - 229 + 267 + true true true ФормаСкопироватьРасширеннаяПодсказка - 230 + 268 Label true true @@ -1066,7 +1072,7 @@ Left - Form.StandardCommand.Copy + Form.Command.Скопировать Normal Auto true @@ -1321,6 +1327,7 @@ FillCheckProcessingAtServer ОбработкаПроверкиЗаполненияНаСервере + Copy LockOwner true true @@ -1485,6 +1492,19 @@ true + + ПрограммаОблачногоСервиса + 2 + + CatalogRef.ПрограммыЭлектроннойПодписиИШифрования + + + true + + + true + + СертификатОтозван @@ -1610,6 +1630,33 @@ <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> + <formCommands> + <name>Скопировать</name> + <title> + <key>ru</key> + <value>Скопировать</value> + + 5 + + ru + Скопировать + + + true + + F9 + + StdPicture.CloneListItem + + + + Скопировать + + + Picture + Auto + Auto + diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ФормаЭлемента/Module.bsl index a11c3900c..fd4a028a3 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ФормаЭлемента/Module.bsl @@ -28,6 +28,9 @@ ВозможноОткрытьЗаявление = Истина; КонецЕсли; + ПрограммаОблачногоСервиса = ЭлектроннаяПодписьСлужебный.ПрограммаОблачногоСервиса(); + ОбновитьВидимостьЭлементаУсиленнаяЗащитаЗакрытогоКлюча(ЭтотОбъект); + ЕстьОрганизации = Не Метаданные.ОпределяемыеТипы.Организация.Тип.СодержитТип(Тип("Строка")); ПриСозданииНаСервереПриЧтенииНаСервере(); @@ -116,6 +119,17 @@ #КонецОбласти +#Область ОбработчикиСобытийЭлементовШапкиФормы + +&НаКлиенте +Процедура ПрограммаПриИзменении(Элемент) + + ОбновитьВидимостьЭлементаУсиленнаяЗащитаЗакрытогоКлюча(ЭтотОбъект); + +КонецПроцедуры + +#КонецОбласти + #Область ОбработчикиКомандФормы &НаКлиенте @@ -190,6 +204,17 @@ КонецПроцедуры +&НаКлиенте +Процедура Скопировать(Команда) + + ПараметрыСоздания = Новый Структура; + ПараметрыСоздания.Вставить("СоздатьЗаявление", Истина); + ПараметрыСоздания.Вставить("СертификатОснование", Объект.Ссылка); + + ЭлектроннаяПодписьСлужебныйКлиент.ДобавитьСертификат(ПараметрыСоздания); + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -331,4 +356,12 @@ КонецПроцедуры +&НаКлиентеНаСервереБезКонтекста +Процедура ОбновитьВидимостьЭлементаУсиленнаяЗащитаЗакрытогоКлюча(Форма) + + Форма.Элементы.УсиленнаяЗащитаЗакрытогоКлюча.Видимость = + Форма.Объект.Программа <> Форма.ПрограммаОблачногоСервиса; + +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ШифрованиеДанных/Form.form b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ШифрованиеДанных/Form.form index 43a90192f..8b67ae99d 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ШифрованиеДанных/Form.form +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ШифрованиеДанных/Form.form @@ -529,13 +529,6 @@ ru Сертификаты тех, кому разрешено расшифровывать данные, кроме Вас - - Style.NormalTextFont - true - false - false - false - ГруппаСертификатыШифрованияРасширеннаяПодсказка 490 @@ -550,6 +543,7 @@ Vertical Auto + WeakSeparation true true auto @@ -807,13 +801,6 @@ ru Сертификаты тех, кому разрешено расшифровывать данные - - Style.NormalTextFont - true - false - false - false - ГруппаУказанныйНаборСертификатовРасширеннаяПодсказка 523 diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ШифрованиеДанных/Module.bsl b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ШифрованиеДанных/Module.bsl index 904980e1b..b146cd10e 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ШифрованиеДанных/Module.bsl +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ШифрованиеДанных/Module.bsl @@ -751,8 +751,7 @@ Контекст.ОшибкаНаКлиенте.Вставить("ОписаниеОшибки", НСтр("ru = 'У выбранного личного сертификата истек срок действия. |Выберите другой сертификат.'")); - ПоказатьОшибку(Контекст.ОшибкаНаКлиенте, Контекст.ОшибкаНаСервере); - ВыполнитьОбработкуОповещения(Контекст.Оповещение, Ложь); + ОбработатьОшибку(Оповещение, Контекст.ОшибкаНаКлиенте, Контекст.ОшибкаНаСервере); Возврат; КонецЕсли; @@ -760,8 +759,7 @@ Контекст.ОшибкаНаКлиенте.Вставить("ОписаниеОшибки", НСтр("ru = 'У выбранного личного сертификата не указана программа для закрытого ключа. |Выберите другой сертификат.'")); - ПоказатьОшибку(Контекст.ОшибкаНаКлиенте, Контекст.ОшибкаНаСервере); - ВыполнитьОбработкуОповещения(Контекст.Оповещение, Ложь); + ОбработатьОшибку(Оповещение, Контекст.ОшибкаНаКлиенте, Контекст.ОшибкаНаСервере); Возврат; КонецЕсли; КонецЕсли; @@ -845,14 +843,12 @@ Если Результат.Свойство("Ошибка") Тогда Контекст.ОшибкаНаКлиенте = Результат.Ошибка; - ПоказатьОшибку(Контекст.ОшибкаНаКлиенте, Контекст.ОшибкаНаСервере); - ВыполнитьОбработкуОповещения(Контекст.Оповещение, Ложь); + ОбработатьОшибку(Контекст.Оповещение, Контекст.ОшибкаНаКлиенте, Контекст.ОшибкаНаСервере); Возврат; КонецЕсли; Если Не ЗаписатьСертификатыШифрования(Контекст.ИдентификаторФормы, Контекст.ОшибкаНаКлиенте) Тогда - ПоказатьОшибку(Контекст.ОшибкаНаКлиенте, Контекст.ОшибкаНаСервере); - ВыполнитьОбработкуОповещения(Контекст.Оповещение, Ложь); + ОбработатьОшибку(Контекст.Оповещение, Контекст.ОшибкаНаКлиенте, Контекст.ОшибкаНаСервере); Возврат; КонецЕсли; @@ -1004,18 +1000,37 @@ КонецПроцедуры - &НаКлиенте -Процедура ПоказатьОшибку(ОшибкаНаКлиенте, ОшибкаНаСервере) +Процедура ОбработатьОшибку(Оповещение, ОшибкаНаКлиенте, ОшибкаНаСервере) - Если Не Открыта() И ОбработкаПослеПредупреждения = Неопределено Тогда - Открыть(); + Если ОписаниеДанных.Свойство("ПрекратитьВыполнение") Тогда + + Если Не ОписаниеДанных.Свойство("ОписаниеОшибки") Тогда + ОписаниеДанных.Вставить("ОписаниеОшибки"); + КонецЕсли; + + ОписаниеДанных.ОписаниеОшибки = ОшибкаНаКлиенте.ОписаниеОшибки; + + Если Открыта() Тогда + Закрыть(Ложь); + Иначе + ВыполнитьОбработкуОповещения(Оповещение, Ложь); + КонецЕсли; + + Иначе + + Если Не Открыта() И ОбработкаПослеПредупреждения = Неопределено Тогда + Открыть(); + КонецЕсли; + + ЭлектроннаяПодписьСлужебныйКлиент.ПоказатьОшибкуОбращенияКПрограмме( + НСтр("ru = 'Не удалось зашифровать данные'"), "", + ОшибкаНаКлиенте, ОшибкаНаСервере, , ОбработкаПослеПредупреждения); + + ВыполнитьОбработкуОповещения(Оповещение, Ложь); + КонецЕсли; - ЭлектроннаяПодписьСлужебныйКлиент.ПоказатьОшибкуОбращенияКПрограмме( - НСтр("ru = 'Не удалось зашифровать данные'"), "", - ОшибкаНаКлиенте, ОшибкаНаСервере, , ОбработкаПослеПредупреждения); - КонецПроцедуры #КонецОбласти diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Templates/КомпонентаXMLDSIG/Template.addin b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Templates/КомпонентаXMLDSIG/Template.addin index 330438223..9898f5f88 100644 Binary files a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Templates/КомпонентаXMLDSIG/Template.addin and b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Templates/КомпонентаXMLDSIG/Template.addin differ diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Templates/Штамп/Template.mxlx b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Templates/Штамп/Template.mxlx index 68f5e476e..9c80ab236 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Templates/Штамп/Template.mxlx +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Templates/Штамп/Template.mxlx @@ -269,8 +269,8 @@ Rows 1 7 - -1 - -1 + 0 + 0 @@ -279,8 +279,8 @@ Rows 10 10 - -1 - -1 + 0 + 0 @@ -506,7 +506,7 @@ 0 - iVBORw0KGgoAAAANSUhEUgAAADAAAAAcCAYAAAAnbDzKAAAABGdBTUEAALGOfPtR + iVBORw0KGgoAAAANSUhEUgAAADAAAAAcCAYAAAAnbDzKAAAABGdBTUEAALGOfPtR kwAAACBjSFJNAACHDwAAjA8AAP1SAACBQAAAfXkAAOmLAAA85QAAGcxzPIV3AAAK OWlDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAEjHnZZ3VFTXFofPvXd6oc0wAlKG 3rvAANJ7k15FYZgZYCgDDjM0sSGiAhFFRJoiSFDEgNFQJFZEsRAUVLAHJAgoMRhF diff --git a/SSL/src/Catalogs/СообщениеSMSПрисоединенныеФайлы/СообщениеSMSПрисоединенныеФайлы.mdo b/SSL/src/Catalogs/СообщениеSMSПрисоединенныеФайлы/СообщениеSMSПрисоединенныеФайлы.mdo index a4a0844af..8e20f1603 100644 --- a/SSL/src/Catalogs/СообщениеSMSПрисоединенныеФайлы/СообщениеSMSПрисоединенныеФайлы.mdo +++ b/SSL/src/Catalogs/СообщениеSMSПрисоединенныеФайлы/СообщениеSMSПрисоединенныеФайлы.mdo @@ -95,6 +95,7 @@ DontUse + Catalog.СообщениеSMSПрисоединенныеФайлы.Attribute.ВладелецФайла Managed Use diff --git a/SSL/src/Catalogs/СтраныМира/Forms/Классификатор/Module.bsl b/SSL/src/Catalogs/СтраныМира/Forms/Классификатор/Module.bsl index 973dd0729..db2a0d149 100644 --- a/SSL/src/Catalogs/СтраныМира/Forms/Классификатор/Module.bsl +++ b/SSL/src/Catalogs/СтраныМира/Forms/Классификатор/Module.bsl @@ -23,14 +23,7 @@ // Служебные реквизиты ПоляКлассификатора = "Код, Наименование, НаименованиеПолное, КодАльфа2, КодАльфа3, УчастникЕАЭС, МеждународноеНаименование"; - Мета = Метаданные.Справочники.СтраныМира; - ПредставлениеОбъектаКлассификатора = Мета.РасширенноеПредставлениеОбъекта; - Если ПустаяСтрока(ПредставлениеОбъектаКлассификатора) Тогда - ПредставлениеОбъектаКлассификатора = Мета.ПредставлениеОбъекта; - КонецЕсли; - Если ПустаяСтрока(ПредставлениеОбъектаКлассификатора) Тогда - ПредставлениеОбъектаКлассификатора = Мета.Представление(); - КонецЕсли; + ПредставлениеОбъектаКлассификатора = ОбщегоНазначения.ПредставлениеОбъекта(Метаданные.Справочники.СтраныМира); Если Не ПустаяСтрока(ПредставлениеОбъектаКлассификатора) Тогда ПредставлениеОбъектаКлассификатора = " (" + ПредставлениеОбъектаКлассификатора + ")"; КонецЕсли; @@ -144,6 +137,7 @@ &НаКлиенте Процедура ОповеститьОВыбореЭлементаКлассификатора(ИдентификаторСтрокиВыбора) + ВсеДанныеСтроки = Классификатор.НайтиПоИдентификатору(ИдентификаторСтрокиВыбора); Если ВсеДанныеСтроки <> Неопределено Тогда ДанныеСтроки = Новый Структура(ПоляКлассификатора); @@ -152,10 +146,30 @@ ДанныеВыбора = ДанныеВыбораЭлементаКлассификатора(ДанныеСтроки); Если ДанныеВыбора.ЭтоНовый Тогда ОповеститьОСозданииЭлементов(ДанныеВыбора.Ссылка); + Иначе + ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("Ссылка", ДанныеВыбора.Ссылка); + ДополнительныеПараметры.Вставить("Данные", ДанныеСтроки); + + Оповещение = Новый ОписаниеОповещения("ПослеВопросаПроОбновление", ЭтотОбъект, ДополнительныеПараметры); + ПоказатьВопрос(Оповещение, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '%1 уже присутствует в списке стран. Перезаполнить?'"), ДанныеСтроки.Наименование), РежимДиалогаВопрос.ДаНет); + Возврат; КонецЕсли; ОповеститьОВыборе(ДанныеВыбора.Ссылка); КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПослеВопросаПроОбновление(Результат, ДополнительныеПараметры) Экспорт + + Если Результат = КодВозвратаДиалога.Да Тогда + ПерезаполнитьДанныеСтраны(ДополнительныеПараметры); + Оповестить("Справочник.СтраныМира.Изменение", ДополнительныеПараметры.Ссылка, ЭтотОбъект); + КонецЕсли; + КонецПроцедуры &НаКлиенте @@ -165,20 +179,49 @@ КонецПроцедуры &НаСервереБезКонтекста -Функция ДанныеВыбораЭлементаКлассификатора(Знач ДанныеСтраны) +Функция ДанныеВыбораЭлементаКлассификатора(Знач СведенияОСтране) // Ищем только по коду, так как в классификаторе все коды заданы. - Ссылка = Справочники.СтраныМира.НайтиПоКоду(ДанныеСтраны.Код); + Ссылка = Справочники.СтраныМира.НайтиПоКоду(СведенияОСтране.Код); ЭтоНовый = Не ЗначениеЗаполнено(Ссылка); Если ЭтоНовый Тогда Страна = Справочники.СтраныМира.СоздатьЭлемент(); - ЗаполнитьЗначенияСвойств(Страна, ДанныеСтраны); + ЗаполнитьЗначенияСвойств(Страна, СведенияОСтране); Страна.Записать(); Ссылка = Страна.Ссылка; КонецЕсли; - Возврат Новый Структура("Ссылка, ЭтоНовый, Код", Ссылка, ЭтоНовый, ДанныеСтраны.Код); + Возврат Новый Структура("Ссылка, ЭтоНовый, Код", Ссылка, ЭтоНовый, СведенияОСтране.Код); КонецФункции +&НаСервереБезКонтекста +Процедура ПерезаполнитьДанныеСтраны(Знач СведенияОСтране) + + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Справочник.СтраныМира"); + ЭлементБлокировки.УстановитьЗначение("Ссылка", СведенияОСтране.Ссылка); + + НачатьТранзакцию(); + Попытка + + Блокировка.Заблокировать(); + Страна = СведенияОСтране.Ссылка.ПолучитьОбъект(); + Если Страна = Неопределено Тогда // объект может быть уже удален в других сеансах + ОтменитьТранзакцию(); + Возврат; + КонецЕсли; + ЗаблокироватьДанныеДляРедактирования(СведенияОСтране.Ссылка); + + ЗаполнитьЗначенияСвойств(Страна, СведенияОСтране.Данные); + Страна.Записать(); + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + + КонецПопытки; + +КонецПроцедуры + &НаСервереБезКонтекста Функция СостояниеКлассификатора() diff --git a/SSL/src/Catalogs/СтраныМира/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/СтраныМира/Forms/ФормаСписка/Module.bsl index 821d2fb3f..3b47f99d7 100644 --- a/SSL/src/Catalogs/СтраныМира/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/СтраныМира/Forms/ФормаСписка/Module.bsl @@ -95,7 +95,7 @@ &НаКлиенте Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) - Если ИмяСобытия="Справочник.СтраныМира.Изменение" Тогда + Если ИмяСобытия = "Справочник.СтраныМира.Изменение" Тогда ОбновитьОтображениеСпискаСтран(); КонецЕсли; КонецПроцедуры @@ -106,10 +106,11 @@ &НаКлиенте Процедура СписокОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) + Если РежимВыбора Тогда - // Выбор из классификатора - ОповеститьОВыборе(ВыбранноеЗначение); + ОповеститьОВыборе(ВыбранноеЗначение); // Выбор из классификатора КонецЕсли; + КонецПроцедуры &НаКлиенте @@ -120,7 +121,6 @@ #КонецОбласти #Область ОбработчикиКомандФормы -// &НаКлиенте Процедура ОткрытьКлассификатор(Команда) @@ -167,7 +167,7 @@ &НаКлиенте Процедура ОбновитьОтображениеСпискаСтран() - Если ИдентификаторЭлементаОтбораСсылки<>Неопределено Тогда + Если ИдентификаторЭлементаОтбораСсылки <> Неопределено Тогда // Был наложен дополнительный отбор, который надо обновить. УстановитьОтборПересеченияСКлассификатором(); КонецЕсли; diff --git a/SSL/src/Catalogs/СтраныМира/ManagerModule.bsl b/SSL/src/Catalogs/СтраныМира/ManagerModule.bsl index 4ce6f6752..ae7bf8336 100644 --- a/SSL/src/Catalogs/СтраныМира/ManagerModule.bsl +++ b/SSL/src/Catalogs/СтраныМира/ManagerModule.bsl @@ -122,6 +122,33 @@ #Область СлужебныеПроцедурыИФункции +Процедура ПриНастройкеНачальногоЗаполненияЭлементов(Настройки) Экспорт + + Настройки.ПриНачальномЗаполненииЭлемента = Ложь; + +КонецПроцедуры + +// Вызывается при начальном заполнении справочника СтраныМира. +// +// Параметры: +// КодыЯзыков - Массив - список языков конфигурации. Актуально для мультиязычных конфигураций. +// Элементы - ТаблицаЗначений - данные заполнения. Состав колонок соответствует набору реквизитов +// справочника СтраныМира. +// +Процедура ПриНачальномЗаполненииЭлементов(КодыЯзыков, Элементы) Экспорт + + Элемент = Элементы.Добавить(); + Элемент.ИмяПредопределенныхДанных = "Россия"; + Элемент.Код = "643"; + Элемент.Наименование = НСтр("ru = 'РОССИЯ'", ОбщегоНазначения.КодОсновногоЯзыка()); + Элемент.НаименованиеПолное = НСтр("ru = 'Российская Федерация'", ОбщегоНазначения.КодОсновногоЯзыка()); + Элемент.КодАльфа2 = "RU"; + Элемент.КодАльфа3 = "RUS"; + Элемент.УчастникЕАЭС = Истина; + Элемент.МеждународноеНаименование = НСтр("ru = 'The Russian Federation'", ОбщегоНазначения.КодОсновногоЯзыка()); + +КонецПроцедуры + #Область ОбновлениеИнформационнойБазы // Регистрирует к обработке страны мира. @@ -132,16 +159,16 @@ НоваяСтрока = ЗначенияОКСМ.Добавить(); НоваяСтрока.Код = "203"; - НоваяСтрока.Наименование = НСтр("ru='ЧЕШСКАЯ РЕСПУБЛИКА'"); + НоваяСтрока.Наименование = НСтр("ru = 'ЧЕШСКАЯ РЕСПУБЛИКА'"); НоваяСтрока.КодАльфа2 = "CZ"; НоваяСтрока.КодАльфа3 = "CZE"; НоваяСтрока = ЗначенияОКСМ.Добавить(); НоваяСтрока.Код = "270"; - НоваяСтрока.Наименование = НСтр("ru='ГАМБИЯ'"); + НоваяСтрока.Наименование = НСтр("ru = 'ГАМБИЯ'"); НоваяСтрока.КодАльфа2 = "GM"; НоваяСтрока.КодАльфа3 = "GMB"; - НоваяСтрока.НаименованиеПолное = НСтр("ru='Республика Гамбия'"); + НоваяСтрока.НаименованиеПолное = НСтр("ru = 'Республика Гамбия'"); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ diff --git a/SSL/src/Catalogs/СтраныМира/ObjectModule.bsl b/SSL/src/Catalogs/СтраныМира/ObjectModule.bsl index 76aa46ddd..1487bb2b3 100644 --- a/SSL/src/Catalogs/СтраныМира/ObjectModule.bsl +++ b/SSL/src/Catalogs/СтраныМира/ObjectModule.bsl @@ -90,7 +90,7 @@ Выборка = РезультатЗапроса.Выбрать(); Если Выборка.Следующий() Тогда Результат = Новый Структура("ОписаниеОшибки", - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='С кодом %1 уже существует страна %2. Измените код или используйте уже существующие данные.'"), + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'С кодом %1 уже существует страна %2. Измените код или используйте уже существующие данные.'"), Код, Выборка.Наименование)); Для Каждого Поле Из РезультатЗапроса.Колонки Цикл diff --git a/SSL/src/Catalogs/СценарииОбменовДанными/Forms/НастройкаРасписанияОбменовДанными/Form.form b/SSL/src/Catalogs/СценарииОбменовДанными/Forms/НастройкаРасписанияОбменовДанными/Form.form index 5f248f43f..b3e6a24a4 100644 --- a/SSL/src/Catalogs/СценарииОбменовДанными/Forms/НастройкаРасписанияОбменовДанными/Form.form +++ b/SSL/src/Catalogs/СценарииОбменовДанными/Forms/НастройкаРасписанияОбменовДанными/Form.form @@ -177,6 +177,44 @@ true
    + + ИспользоватьРегламентноеЗадание + 69 + true + true + + true + + + Список.ИспользоватьРегламентноеЗадание + + None + + ИспользоватьРегламентноеЗаданиеРасширеннаяПодсказка + 71 + Label + true + true + + Left + + + + ИспользоватьРегламентноеЗаданиеКонтекстноеМеню + 70 + true + + CheckBoxField + true + Enter + true + + StdPicture.ScheduledJob + + Left + true + + None СписокКоманднаяПанель diff --git a/SSL/src/Catalogs/СценарииОбменовДанными/Forms/НастройкаРасписанияОбменовДанными/Module.bsl b/SSL/src/Catalogs/СценарииОбменовДанными/Forms/НастройкаРасписанияОбменовДанными/Module.bsl index acc658659..390c7208d 100644 --- a/SSL/src/Catalogs/СценарииОбменовДанными/Forms/НастройкаРасписанияОбменовДанными/Module.bsl +++ b/SSL/src/Catalogs/СценарииОбменовДанными/Forms/НастройкаРасписанияОбменовДанными/Module.bsl @@ -103,6 +103,8 @@ ВключитьОтключитьРегламентноеЗаданиеНаСервере(ТекущиеДанные.Ссылка); + Элементы.Список.Обновить(); + КонецПроцедуры &НаКлиенте @@ -173,15 +175,27 @@ #Область СлужебныеПроцедурыИФункции -&НаСервере +&НаСервереБезКонтекста Процедура ВключитьОтключитьРегламентноеЗаданиеНаСервере(Ссылка) - НастройкаОбъект = Ссылка.ПолучитьОбъект(); - НастройкаОбъект.ИспользоватьРегламентноеЗадание = Не НастройкаОбъект.ИспользоватьРегламентноеЗадание; - НастройкаОбъект.Записать(); - - // обновляем данные списка - Элементы.Список.Обновить(); + НачатьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Справочник.СценарииОбменовДанными"); + ЭлементБлокировки.УстановитьЗначение("Ссылка", Ссылка); + Блокировка.Заблокировать(); + + ЗаблокироватьДанныеДляРедактирования(Ссылка); + СценарийОбъект = Ссылка.ПолучитьОбъект(); + + СценарийОбъект.ИспользоватьРегламентноеЗадание = Не СценарийОбъект.ИспользоватьРегламентноеЗадание; + СценарийОбъект.Записать(); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; КонецПроцедуры @@ -233,22 +247,6 @@ УсловноеОформление.Элементы.Очистить(); - // - - Элемент = УсловноеОформление.Элементы.Добавить(); - - ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); - ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.Список.Имя); - - ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); - ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Список.ИспользоватьРегламентноеЗадание"); - ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; - ОтборЭлемента.ПравоеЗначение = Истина; - - Элемент.Оформление.УстановитьЗначениеПараметра("Шрифт", Новый Шрифт(WindowsШрифты.ШрифтДиалоговИМеню, , , Истина, Ложь, Ложь, Ложь)); - - // - Элемент = УсловноеОформление.Элементы.Добавить(); ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); diff --git a/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаСписка/Module.bsl index 59234b93a..2d5b621ed 100644 --- a/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаСписка/Module.bsl @@ -19,7 +19,21 @@ ТекущиеДанные = Элементы.Список.ТекущиеДанные; - ВключитьОтключитьРегламентноеЗаданиеНаСервере(ВыделенныеСтроки, Не ТекущиеДанные.ИспользоватьРегламентноеЗадание); + КоллекцияСценариев = Новый Массив; + Для Каждого ДанныеСтроки Из ВыделенныеСтроки Цикл + + Если ДанныеСтроки.ПометкаУдаления Тогда + Продолжить; + КонецЕсли; + + КоллекцияСценариев.Добавить(ДанныеСтроки.Ссылка); + + КонецЦикла; + + ВключитьОтключитьРегламентноеЗаданиеНаСервере(КоллекцияСценариев, Не ТекущиеДанные.ИспользоватьРегламентноеЗадание); + + // Обновляем данные списка. + Элементы.Список.Обновить(); КонецПроцедуры @@ -27,23 +41,30 @@ #Область СлужебныеПроцедурыИФункции -&НаСервере -Процедура ВключитьОтключитьРегламентноеЗаданиеНаСервере(ВыделенныеСтроки, ИспользоватьРегламентноеЗадание) +&НаСервереБезКонтекста +Процедура ВключитьОтключитьРегламентноеЗаданиеНаСервере(КоллекцияСценариев, ИспользоватьРегламентноеЗадание) - Для Каждого ДанныеСтроки Из ВыделенныеСтроки Цикл + НачатьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных; + Для Каждого Сценарий Из КоллекцияСценариев Цикл + ЭлементБлокировки = Блокировка.Добавить("Справочник.СценарииОбменовДанными"); + ЭлементБлокировки.УстановитьЗначение("Ссылка", Сценарий); + КонецЦикла; + Блокировка.Заблокировать(); - Если ДанныеСтроки.ПометкаУдаления Тогда - Продолжить; - КонецЕсли; + Для Каждого Сценарий Из КоллекцияСценариев Цикл + ЗаблокироватьДанныеДляРедактирования(Сценарий); + СценарийОбъект = Сценарий.ПолучитьОбъект(); + СценарийОбъект.ИспользоватьРегламентноеЗадание = ИспользоватьРегламентноеЗадание; + СценарийОбъект.Записать(); + КонецЦикла; - НастройкаОбъект = ДанныеСтроки.Ссылка.ПолучитьОбъект(); - НастройкаОбъект.ИспользоватьРегламентноеЗадание = ИспользоватьРегламентноеЗадание; - НастройкаОбъект.Записать(); - - КонецЦикла; - - // обновляем данные списка - Элементы.Список.Обновить(); + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; КонецПроцедуры diff --git a/SSL/src/Catalogs/СценарииОбменовДанными/ManagerModule.bsl b/SSL/src/Catalogs/СценарииОбменовДанными/ManagerModule.bsl index c11a48752..3e6aeaaa3 100644 --- a/SSL/src/Catalogs/СценарииОбменовДанными/ManagerModule.bsl +++ b/SSL/src/Catalogs/СценарииОбменовДанными/ManagerModule.bsl @@ -241,8 +241,6 @@ КонецФункции -// - // Удаляет узел из всех сценариев обменов данными. // Если после этого сценарий оказывается пустым, то такой сценарий удаляется. // @@ -253,40 +251,47 @@ Возврат; КонецЕсли; - ТекстЗапроса = " - |ВЫБРАТЬ РАЗЛИЧНЫЕ + Запрос = Новый Запрос( + "ВЫБРАТЬ РАЗЛИЧНЫЕ | СценарииОбменовДаннымиНастройкиОбмена.Ссылка КАК СценарийОбменаДанными |ИЗ | Справочник.СценарииОбменовДанными.НастройкиОбмена КАК СценарииОбменовДаннымиНастройкиОбмена |ГДЕ - | СценарииОбменовДаннымиНастройкиОбмена.УзелИнформационнойБазы = &УзелИнформационнойБазы - |"; - - Запрос = Новый Запрос; + | СценарииОбменовДаннымиНастройкиОбмена.УзелИнформационнойБазы = &УзелИнформационнойБазы"); Запрос.УстановитьПараметр("УзелИнформационнойБазы", УзелИнформационнойБазы); - Запрос.Текст = ТекстЗапроса; - Выборка = Запрос.Выполнить().Выбрать(); + ТаблицаСценарии = Запрос.Выполнить().Выгрузить(); - Пока Выборка.Следующий() Цикл + НачатьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Справочник.СценарииОбменовДанными"); + ЭлементБлокировки.ИсточникДанных = ТаблицаСценарии; + ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Ссылка", "СценарийОбменаДанными"); + Блокировка.Заблокировать(); - СценарийОбменаДанными = Выборка.СценарийОбменаДанными.ПолучитьОбъект(); + Для Каждого СтрокаСценарии Из ТаблицаСценарии Цикл + ЗаблокироватьДанныеДляРедактирования(СтрокаСценарии.СценарийОбменаДанными); + СценарийОбменаДанными = СтрокаСценарии.СценарийОбменаДанными.ПолучитьОбъект(); + + УдалитьВыгрузкуВСценарииОбменаДанными(СценарийОбменаДанными, УзелИнформационнойБазы); + УдалитьЗагрузкуВСценарииОбменаДанными(СценарийОбменаДанными, УзелИнформационнойБазы); + + СценарийОбменаДанными.Записать(); + + Если СценарийОбменаДанными.НастройкиОбмена.Количество() = 0 Тогда + СценарийОбменаДанными.Удалить(); + КонецЕсли; + КонецЦикла; - УдалитьВыгрузкуВСценарииОбменаДанными(СценарийОбменаДанными, УзелИнформационнойБазы); - УдалитьЗагрузкуВСценарииОбменаДанными(СценарийОбменаДанными, УзелИнформационнойБазы); - - СценарийОбменаДанными.Записать(); - - Если СценарийОбменаДанными.НастройкиОбмена.Количество() = 0 Тогда - СценарийОбменаДанными.Удалить(); - КонецЕсли; - - КонецЦикла; + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; КонецПроцедуры -// - Процедура УдалитьВыгрузкуВСценарииОбменаДанными(СценарийОбменаДанными, УзелИнформационнойБазы) Экспорт УдалитьСтрокуВСценарииОбменаДанными(СценарийОбменаДанными, УзелИнформационнойБазы, Перечисления.ДействияПриОбмене.ВыгрузкаДанных); @@ -301,157 +306,184 @@ Процедура ДобавитьВыгрузкуВСценарииОбменаДанными(СценарийОбменаДанными, УзелИнформационнойБазы) Экспорт - НадоЗаписатьОбъект = Ложь; - Если ТипЗнч(СценарийОбменаДанными) = Тип("СправочникСсылка.СценарииОбменовДанными") Тогда - - СценарийОбменаДанными = СценарийОбменаДанными.ПолучитьОбъект(); - - НадоЗаписатьОбъект = Истина; - - КонецЕсли; - - ВидТранспортаОбмена = РегистрыСведений.НастройкиТранспортаОбменаДанными.ВидТранспортаСообщенийОбменаПоУмолчанию(УзелИнформационнойБазы); - - НастройкиОбмена = СценарийОбменаДанными.НастройкиОбмена; - - // Добавляем выгрузку данных в цикле. - МаксимальныйИндекс = НастройкиОбмена.Количество() - 1; - - Для Индекс = 0 По МаксимальныйИндекс Цикл - - ОбратныйИндекс = МаксимальныйИндекс - Индекс; - - СтрокаТаблицы = НастройкиОбмена[ОбратныйИндекс]; - - // последняя строка выгрузки - Если СтрокаТаблицы.ВыполняемоеДействие = Перечисления.ДействияПриОбмене.ВыгрузкаДанных Тогда + НачатьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Справочник.СценарииОбменовДанными"); + ЭлементБлокировки.УстановитьЗначение("Ссылка", СценарийОбменаДанными); + Блокировка.Заблокировать(); + + ЗаблокироватьДанныеДляРедактирования(СценарийОбменаДанными); + СценарийОбъект = СценарийОбменаДанными.ПолучитьОбъект(); - НоваяСтрока = НастройкиОбмена.Вставить(ОбратныйИндекс + 1); - - НоваяСтрока.УзелИнформационнойБазы = УзелИнформационнойБазы; - НоваяСтрока.ВидТранспортаОбмена = ВидТранспортаОбмена; - НоваяСтрока.ВыполняемоеДействие = Перечисления.ДействияПриОбмене.ВыгрузкаДанных; - - Прервать; - КонецЕсли; - - КонецЦикла; - - // Если в цикле строка выгрузки не была добавлена, то вставляем строку в конец таблицы. - Отбор = Новый Структура("УзелИнформационнойБазы, ВыполняемоеДействие", УзелИнформационнойБазы, Перечисления.ДействияПриОбмене.ВыгрузкаДанных); - Если НастройкиОбмена.НайтиСтроки(Отбор).Количество() = 0 Тогда - - НоваяСтрока = НастройкиОбмена.Добавить(); - - НоваяСтрока.УзелИнформационнойБазы = УзелИнформационнойБазы; - НоваяСтрока.ВидТранспортаОбмена = ВидТранспортаОбмена; - НоваяСтрока.ВыполняемоеДействие = Перечисления.ДействияПриОбмене.ВыгрузкаДанных; - - КонецЕсли; - - Если НадоЗаписатьОбъект Тогда - - // Записываем изменения в объекте. - СценарийОбменаДанными.Записать(); - + ДобавитьСтрокиНастроекОбменаПоСценарию( + СценарийОбъект.НастройкиОбмена, УзелИнформационнойБазы, Перечисления.ДействияПриОбмене.ВыгрузкаДанных); + + СценарийОбъект.Записать(); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + Иначе + ДобавитьСтрокиНастроекОбменаПоСценарию( + СценарийОбменаДанными.НастройкиОбмена, УзелИнформационнойБазы, Перечисления.ДействияПриОбмене.ВыгрузкаДанных); КонецЕсли; КонецПроцедуры Процедура ДобавитьЗагрузкуВСценарииОбменаДанными(СценарийОбменаДанными, УзелИнформационнойБазы) Экспорт - НадоЗаписатьОбъект = Ложь; - Если ТипЗнч(СценарийОбменаДанными) = Тип("СправочникСсылка.СценарииОбменовДанными") Тогда - - СценарийОбменаДанными = СценарийОбменаДанными.ПолучитьОбъект(); - - НадоЗаписатьОбъект = Истина; - + НачатьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Справочник.СценарииОбменовДанными"); + ЭлементБлокировки.УстановитьЗначение("Ссылка", СценарийОбменаДанными); + Блокировка.Заблокировать(); + + ЗаблокироватьДанныеДляРедактирования(СценарийОбменаДанными); + СценарийОбъект = СценарийОбменаДанными.ПолучитьОбъект(); + + ДобавитьСтрокиНастроекОбменаПоСценарию( + СценарийОбъект.НастройкиОбмена, УзелИнформационнойБазы, Перечисления.ДействияПриОбмене.ЗагрузкаДанных); + + СценарийОбъект.Записать(); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + Иначе + ДобавитьСтрокиНастроекОбменаПоСценарию( + СценарийОбменаДанными.НастройкиОбмена, УзелИнформационнойБазы, Перечисления.ДействияПриОбмене.ЗагрузкаДанных); КонецЕсли; +КонецПроцедуры + +Процедура ДобавитьСтрокиНастроекОбменаПоСценарию( + НастройкиОбмена, УзелИнформационнойБазы, ВыполняемоеДействие) + ВидТранспортаОбмена = РегистрыСведений.НастройкиТранспортаОбменаДанными.ВидТранспортаСообщенийОбменаПоУмолчанию(УзелИнформационнойБазы); - НастройкиОбмена = СценарийОбменаДанными.НастройкиОбмена; - - // Добавляем загрузку данных в цикле. - Для каждого СтрокаТаблицы Из НастройкиОбмена Цикл + Если ВыполняемоеДействие = Перечисления.ДействияПриОбмене.ВыгрузкаДанных Тогда + // Добавляем выгрузку данных в цикле. + МаксимальныйИндекс = НастройкиОбмена.Количество() - 1; - Если СтрокаТаблицы.ВыполняемоеДействие = Перечисления.ДействияПриОбмене.ЗагрузкаДанных Тогда // первая строка загрузки + Для Индекс = 0 По МаксимальныйИндекс Цикл - НоваяСтрока = НастройкиОбмена.Вставить(НастройкиОбмена.Индекс(СтрокаТаблицы)); + ОбратныйИндекс = МаксимальныйИндекс - Индекс; + + СтрокаТаблицы = НастройкиОбмена[ОбратныйИндекс]; + + // последняя строка выгрузки + Если СтрокаТаблицы.ВыполняемоеДействие = ВыполняемоеДействие Тогда + + НоваяСтрока = НастройкиОбмена.Вставить(ОбратныйИндекс + 1); + + НоваяСтрока.УзелИнформационнойБазы = УзелИнформационнойБазы; + НоваяСтрока.ВидТранспортаОбмена = ВидТранспортаОбмена; + НоваяСтрока.ВыполняемоеДействие = ВыполняемоеДействие; + + Прервать; + КонецЕсли; + + КонецЦикла; + + // Если в цикле строка выгрузки не была добавлена, то вставляем строку в конец таблицы. + Отбор = Новый Структура("УзелИнформационнойБазы, ВыполняемоеДействие", УзелИнформационнойБазы, ВыполняемоеДействие); + Если НастройкиОбмена.НайтиСтроки(Отбор).Количество() = 0 Тогда + + НоваяСтрока = НастройкиОбмена.Добавить(); НоваяСтрока.УзелИнформационнойБазы = УзелИнформационнойБазы; НоваяСтрока.ВидТранспортаОбмена = ВидТранспортаОбмена; - НоваяСтрока.ВыполняемоеДействие = Перечисления.ДействияПриОбмене.ЗагрузкаДанных; + НоваяСтрока.ВыполняемоеДействие = ВыполняемоеДействие; - Прервать; КонецЕсли; + ИначеЕсли ВыполняемоеДействие = Перечисления.ДействияПриОбмене.ЗагрузкаДанных Тогда + // Добавляем загрузку данных в цикле. + Для каждого СтрокаТаблицы Из НастройкиОбмена Цикл + + Если СтрокаТаблицы.ВыполняемоеДействие = ВыполняемоеДействие Тогда // первая строка загрузки + + НоваяСтрока = НастройкиОбмена.Вставить(НастройкиОбмена.Индекс(СтрокаТаблицы)); + + НоваяСтрока.УзелИнформационнойБазы = УзелИнформационнойБазы; + НоваяСтрока.ВидТранспортаОбмена = ВидТранспортаОбмена; + НоваяСтрока.ВыполняемоеДействие = ВыполняемоеДействие; + + Прервать; + КонецЕсли; + + КонецЦикла; - КонецЦикла; - - // Если в цикле строка загрузки не была добавлена, то вставляем строку в начало таблицы. - Отбор = Новый Структура("УзелИнформационнойБазы, ВыполняемоеДействие", УзелИнформационнойБазы, Перечисления.ДействияПриОбмене.ЗагрузкаДанных); - Если НастройкиОбмена.НайтиСтроки(Отбор).Количество() = 0 Тогда - - НоваяСтрока = НастройкиОбмена.Вставить(0); - - НоваяСтрока.УзелИнформационнойБазы = УзелИнформационнойБазы; - НоваяСтрока.ВидТранспортаОбмена = ВидТранспортаОбмена; - НоваяСтрока.ВыполняемоеДействие = Перечисления.ДействияПриОбмене.ЗагрузкаДанных; - - КонецЕсли; - - Если НадоЗаписатьОбъект Тогда - - // Записываем изменения в объекте. - СценарийОбменаДанными.Записать(); - + // Если в цикле строка загрузки не была добавлена, то вставляем строку в начало таблицы. + Отбор = Новый Структура("УзелИнформационнойБазы, ВыполняемоеДействие", УзелИнформационнойБазы, ВыполняемоеДействие); + Если НастройкиОбмена.НайтиСтроки(Отбор).Количество() = 0 Тогда + + НоваяСтрока = НастройкиОбмена.Вставить(0); + + НоваяСтрока.УзелИнформационнойБазы = УзелИнформационнойБазы; + НоваяСтрока.ВидТранспортаОбмена = ВидТранспортаОбмена; + НоваяСтрока.ВыполняемоеДействие = ВыполняемоеДействие; + + КонецЕсли; КонецЕсли; КонецПроцедуры Процедура УдалитьСтрокуВСценарииОбменаДанными(СценарийОбменаДанными, УзелИнформационнойБазы, ДействиеПриОбмене) - НадоЗаписатьОбъект = Ложь; - Если ТипЗнч(СценарийОбменаДанными) = Тип("СправочникСсылка.СценарииОбменовДанными") Тогда - - СценарийОбменаДанными = СценарийОбменаДанными.ПолучитьОбъект(); - - НадоЗаписатьОбъект = Истина; - + НачатьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Справочник.СценарииОбменовДанными"); + ЭлементБлокировки.УстановитьЗначение("Ссылка", СценарийОбменаДанными); + Блокировка.Заблокировать(); + + ЗаблокироватьДанныеДляРедактирования(СценарийОбменаДанными); + СценарийОбъект = СценарийОбменаДанными.ПолучитьОбъект(); + + УдалитьСтрокиНастроекОбменаИзСценария(СценарийОбъект.НастройкиОбмена, УзелИнформационнойБазы, ДействиеПриОбмене); + + СценарийОбъект.Записать(); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + Иначе + УдалитьСтрокиНастроекОбменаИзСценария(СценарийОбменаДанными.НастройкиОбмена, УзелИнформационнойБазы, ДействиеПриОбмене) КонецЕсли; - НастройкиОбмена = СценарийОбменаДанными.НастройкиОбмена; +КонецПроцедуры + +Процедура УдалитьСтрокиНастроекОбменаИзСценария(НастройкиОбмена, УзелИнформационнойБазы, ДействиеПриОбмене) - МаксимальныйИндекс = НастройкиОбмена.Количество() - 1; - - Для Индекс = 0 По МаксимальныйИндекс Цикл + Сч = НастройкиОбмена.Количество() - 1; + Пока Сч >= 0 Цикл - ОбратныйИндекс = МаксимальныйИндекс - Индекс; + СтрокаТаблицы = НастройкиОбмена[Сч]; - СтрокаТаблицы = НастройкиОбмена[ОбратныйИндекс]; - - Если СтрокаТаблицы.УзелИнформационнойБазы = УзелИнформационнойБазы + Если СтрокаТаблицы.УзелИнформационнойБазы = УзелИнформационнойБазы И СтрокаТаблицы.ВыполняемоеДействие = ДействиеПриОбмене Тогда - НастройкиОбмена.Удалить(ОбратныйИндекс); + НастройкиОбмена.Удалить(Сч); КонецЕсли; + Сч = Сч - 1; + КонецЦикла; - Если НадоЗаписатьОбъект Тогда - - // Записываем изменения в объекте. - СценарийОбменаДанными.Записать(); - - КонецЕсли; - КонецПроцедуры #КонецОбласти -#КонецЕсли +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/УдалениеЛишнихФайловИзТома/Module.bsl b/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/УдалениеЛишнихФайловИзТома/Module.bsl index 51a8004f3..28ccc0b47 100644 --- a/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/УдалениеЛишнихФайловИзТома/Module.bsl +++ b/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/УдалениеЛишнихФайловИзТома/Module.bsl @@ -124,7 +124,7 @@ Процедура ПодключениеРасширенияРаботыСФайламиЗавершение(РасширениеПодключено, ДополнительныеПараметры) Экспорт Если Не РасширениеПодключено Тогда - ПоказатьПредупреждение(, НСтр("ru = 'Расширение работы с файлами не установлено. Работа с файлами с неустановленным расширением в веб клиенте невозможна.'")); + ПоказатьПредупреждение(, НСтр("ru = 'Не установлено расширение для работы с 1С:Предприятием. Действие не доступно.'")); Возврат; КонецЕсли; @@ -374,7 +374,7 @@ КолонкиТаблицы.Добавить("Отредактировал"); КолонкиТаблицы.Добавить("ДатаРедактирования"); - ПутьКТому = РаботаСФайламиСлужебный.ПолныйПутьТома(ТомХраненияФайлов); + ПутьКТому = СокрЛП(РаботаСФайламиВТомахСлужебный.ПолныйПутьТома(ТомХраненияФайлов)); МассивФайлов = НайтиФайлы(ПутьКТому,"*", Истина); Для Каждого Файл Из МассивФайлов Цикл @@ -395,7 +395,7 @@ КонецЦикла; - РаботаСФайламиСлужебный.ПроверитьЦелостностьФайлов(ТаблицаФайловНаДиске, ТомХраненияФайлов); + РаботаСФайламиВТомахСлужебный.ПроверитьЦелостностьФайлов(ТаблицаФайловНаДиске, ТомХраненияФайлов); ТаблицаФайловНаДиске.Индексы.Добавить("СтатусПроверки"); МассивЛишнихФайлов = ТаблицаФайловНаДиске.НайтиСтроки( Новый Структура("СтатусПроверки", НСтр("ru = 'Лишние файлы (есть на диске, но сведения о них отсутствуют)'"))); diff --git a/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаСписка/Form.form index 726dbfe0a..e090353a0 100644 --- a/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаСписка/Form.form @@ -211,7 +211,7 @@ Left - Form.Command.ПеренестиВсеФайлыВТома + Form.Command.ПеренестиФайлы Normal Auto true @@ -864,22 +864,22 @@ Auto - ПеренестиВсеФайлыВТома + ПеренестиФайлы <key>ru</key> - <value>Перенести все файлы в тома</value> + <value>Перенести файлы</value> 2 ru - Перенести все файлы в тома + Перенести файлы true - ПеренестиВсеФайлыВТома + ПеренестиФайлы DontUse diff --git a/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаСписка/Module.bsl index 2123a58b1..a7eb41bf6 100644 --- a/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаСписка/Module.bsl @@ -11,9 +11,6 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - Если КлиентскоеПриложение.ТекущийВариантИнтерфейса() = ВариантИнтерфейсаКлиентскогоПриложения.Версия8_2 Тогда - Элементы.ФормаУстановкаПометкиУдаления.ТолькоВоВсехДействиях = Ложь; - КонецЕсли; Элементы.ПеренестиВсеФайлыВТома.Видимость = ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами"); Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда @@ -39,9 +36,9 @@ КонецПроцедуры &НаКлиенте -Процедура ПеренестиВсеФайлыВТома(Команда) +Процедура ПеренестиФайлы(Команда) - РаботаСФайламиСлужебныйКлиент.ПеренестиВсеФайлыВТома(); + РаботаСФайламиСлужебныйКлиент.ПеренестиФайлы(); КонецПроцедуры @@ -87,11 +84,15 @@ ПодготовкаКУстановкеСнятиюПометкиУдаления(Том, ДополнительныеПараметры); + ОповещениеОПродолжении = Новый ОписаниеОповещения( + "ПродолжитьУстановкуСнятиеПометкиУдаления", ЭтотОбъект, ДополнительныеПараметры); + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПрофилиБезопасности") Тогда МодульРаботаВБезопасномРежимеКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаВБезопасномРежимеКлиент"); МодульРаботаВБезопасномРежимеКлиент.ПрименитьЗапросыНаИспользованиеВнешнихРесурсов( - ДополнительныеПараметры.Запросы, ЭтотОбъект, Новый ОписаниеОповещения( - "ПродолжитьУстановкуСнятиеПометкиУдаления", ЭтотОбъект, ДополнительныеПараметры)); + ДополнительныеПараметры.Запросы, ЭтотОбъект, ОповещениеОПродолжении); + Иначе + ВыполнитьОбработкуОповещения(ОповещениеОПродолжении, КодВозвратаДиалога.ОК); КонецЕсли; КонецПроцедуры @@ -127,10 +128,8 @@ Процедура ПродолжитьУстановкуСнятиеПометкиУдаления(Результат, ДополнительныеПараметры) Экспорт Если Результат = КодВозвратаДиалога.ОК Тогда - ЗавершитьУстановкуСнятиеПометкиУдаления(ДополнительныеПараметры); Элементы.Список.Обновить(); - КонецЕсли; КонецПроцедуры diff --git a/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаЭлемента/Module.bsl index f5e48cfbb..12ac588ae 100644 --- a/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаЭлемента/Module.bsl @@ -21,19 +21,20 @@ Если Объект.Ссылка.Пустая() Тогда Объект.ПорядокЗаполнения = НайтиМаксимальныйПорядок() + 1; Иначе + Элементы.ПолныйПутьLinux.ОтображениеПредупрежденияПриРедактировании = ОтображениеПредупрежденияПриРедактировании.Отображать; Элементы.ПолныйПутьWindows.ОтображениеПредупрежденияПриРедактировании = ОтображениеПредупрежденияПриРедактировании.Отображать; - ТекущийРазмерВБайтах = РаботаСФайламиСлужебный.ПодсчитатьРазмерФайловНаТоме( - Объект.Ссылка); + ТекущийРазмерВБайтах = РаботаСФайламиВТомахСлужебный.ОбъемТома(Объект.Ссылка); ТекущийРазмер = ТекущийРазмерВБайтах / (1024 * 1024); Если ТекущийРазмер = 0 И ТекущийРазмерВБайтах <> 0 Тогда ТекущийРазмер = 1; КонецЕсли; + КонецЕсли; Если ОбщегоНазначения.ЭтоWindowsСервер() Тогда @@ -248,16 +249,21 @@ &НаКлиенте Процедура РазрешитьВнешнийРесурсНачало() + ОповещениеОЗакрытии = Новый ОписаниеОповещения( + "РазрешитьВнешнийРесурсЗавершение", ЭтотОбъект, ТекущиеПараметрыЗаписи); + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПрофилиБезопасности") Тогда + ЗапросыВнешнихРесурсов = Новый Массив; Если Не ПроверитьЗаполнениеНаСервере(ЗапросыВнешнихРесурсов) Тогда Возврат; КонецЕсли; - ОповещениеОЗакрытии = Новый ОписаниеОповещения( - "РазрешитьВнешнийРесурсЗавершение", ЭтотОбъект, ТекущиеПараметрыЗаписи); МодульРаботаВБезопасномРежимеКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаВБезопасномРежимеКлиент"); МодульРаботаВБезопасномРежимеКлиент.ПрименитьЗапросыНаИспользованиеВнешнихРесурсов(ЗапросыВнешнихРесурсов, ЭтотОбъект, ОповещениеОЗакрытии); + + Иначе + ВыполнитьОбработкуОповещения(ОповещениеОЗакрытии, КодВозвратаДиалога.ОК); КонецЕсли; КонецПроцедуры diff --git a/SSL/src/Catalogs/ТомаХраненияФайлов/Help/ru.html b/SSL/src/Catalogs/ТомаХраненияФайлов/Help/ru.html index ce4980bf4..54533d630 100644 --- a/SSL/src/Catalogs/ТомаХраненияФайлов/Help/ru.html +++ b/SSL/src/Catalogs/ТомаХраненияФайлов/Help/ru.html @@ -22,7 +22,7 @@
  • Созданный том нельзя удалить до тех пор, пока на него ссылаются какие-либо версии файлов.
  • Ошибки доступа к томам помещаются в журнал регистрации и могут быть просмотрены администратором программы.
  • В каждом томе файлы хранятся в подкаталогах по дате так, что на каждый день создается свой подкаталог. Все файлы в томах хранятся с оригинальным именем и расширением, между которыми добавляется номер версии, например "Приказ.1.txt". -
  • После переключения режима хранения файлов (например, в значение В томах на диске) все ранее накопленные файлы не перемещаются в тома - только вновь добавленные файлы будут размещаться в соответствии с настройкой. Для того чтобы перенести ранее накопленные файлы из информационной базы в тома, воспользуйтесь командой Перенос файлов в тома. +
  • После переключения режима хранения файлов (например, в значение В томах на диске) все ранее накопленные файлы не перемещаются в тома - только вновь добавленные файлы будут размещаться в соответствии с настройкой. Для того чтобы перенести ранее накопленные файлы из информационной базы в тома, воспользуйтесь командой Перенос файлов в тома.
  • Если используется синхронизация данных между программой-источником и программой-приемником и при этом в программе-источнике используется хранение файлов в томах на дисках, то в процессе создания начального образа необходимо будет создать архивный файл с томами хранимых файлов.
  • В процессе получения начального образа в программу-приемник необходимо будет указать и расположение архивного файла с томами хранимых файлов. Для получения файлов в томах из архива выполните команду Разместить файлы начального образа.
  • Примечание
    Для использования томов, расположенных на сетевых дисках, сервер 1С:Предприятия 8 нужно запускать от лица доменного пользователя вида domain1\user1, имеющего права доступа к тому, указанному в виде UNC пути. Этот пользователь должен входить в группу Users локального компьютера,иметь права "Run as service" и "Run as batch job" и права на каталоги, в которых сервер 1С:Предприятия 8 хранит служебные файлы - журнал регистрации, каталог временных файлов и пр.

    См. также:

    diff --git a/SSL/src/Catalogs/ТомаХраненияФайлов/ObjectModule.bsl b/SSL/src/Catalogs/ТомаХраненияФайлов/ObjectModule.bsl index 05789600e..6d9db31ab 100644 --- a/SSL/src/Catalogs/ТомаХраненияФайлов/ObjectModule.bsl +++ b/SSL/src/Catalogs/ТомаХраненияФайлов/ObjectModule.bsl @@ -31,7 +31,7 @@ Если МаксимальныйРазмер <> 0 Тогда ТекущийРазмерВБайтах = 0; Если Не Ссылка.Пустая() Тогда - ТекущийРазмерВБайтах = РаботаСФайламиСлужебный.ПодсчитатьРазмерФайловНаТоме(Ссылка); + ТекущийРазмерВБайтах = РаботаСФайламиВТомахСлужебный.ОбъемТома(Ссылка); КонецЕсли; ТекущийРазмер = ТекущийРазмерВБайтах / (1024 * 1024); @@ -60,17 +60,17 @@ КонецЕсли; Если Не ДополнительныеСвойства.Свойство("ПропуститьПроверкуДоступаКПапке") Тогда - ИмяПоляСПолнымПутем = ""; - ПолныйПутьТома = ""; - Если ОбщегоНазначения.ЭтоWindowsСервер() Тогда - ПолныйПутьТома = ПолныйПутьWindows; - ИмяПоляСПолнымПутем = "ПолныйПутьWindows"; + ИмяПоляСПолнымПутем = ?(ОбщегоНазначения.ЭтоWindowsСервер(), "ПолныйПутьWindows", "ПолныйПутьLinux"); + Если ОбщегоНазначения.РазделениеВключено() Тогда + МодульРаботаВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("РаботаВМоделиСервиса"); + ЗначениеРазделителя = ?(МодульРаботаВМоделиСервиса.ИспользованиеРазделителяСеанса(), + МодульРаботаВМоделиСервиса.ЗначениеРазделителяСеанса(), ""); Иначе - ПолныйПутьТома = ПолныйПутьLinux; - ИмяПоляСПолнымПутем = "ПолныйПутьLinux"; + ЗначениеРазделителя = ""; КонецЕсли; + ПолныйПутьТома = СтрЗаменить(ЭтотОбъект[ИмяПоляСПолнымПутем], "%z", ЗначениеРазделителя); ИмяКаталогаТестовое = ПолныйПутьТома + "ПроверкаДоступа" + ПолучитьРазделительПути(); Попытка diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ПомощникНастройкиУчетнойЗаписи/Form.form b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ПомощникНастройкиУчетнойЗаписи/Form.form index 6d884020d..0a2a0f7c0 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ПомощникНастройкиУчетнойЗаписи/Form.form +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ПомощникНастройкиУчетнойЗаписи/Form.form @@ -224,10 +224,6 @@ true - - <key>ru</key> - <value>Сообщения об ошибках</value> - ГруппаСообщенияОбОшибкахРасширеннаяПодсказка 271 @@ -253,14 +249,6 @@ true - - <key>ru</key> - <value>Не удалось подключиться картинка и надпись</value> - - - ru - Учетная запись не настроена картинка и надпись - НеУдалосьПодключитьсяКартинкаИНадписьРасширеннаяПодсказка 159 @@ -273,7 +261,7 @@ UsualGroup - HorizontalIfPossible + AlwaysHorizontal Auto true true @@ -397,10 +385,6 @@ true - - <key>ru</key> - <value>Аутентификация</value> - АутентификацияРасширеннаяПодсказка 201 @@ -713,10 +697,6 @@ true - - <key>ru</key> - <value>Имя отправителя</value> - ИмяОтправителяРасширеннаяПодсказка 203 @@ -809,10 +789,6 @@ true - - <key>ru</key> - <value>Способ настройки учетной записи</value> - СпособНастройкиУчетнойЗаписиРасширеннаяПодсказка 155 @@ -1010,10 +986,6 @@ true - - <key>ru</key> - <value>Логин и пароль при отправке писем</value> - ЛогинИПарольПриОтправкеПисемРасширеннаяПодсказка 79 @@ -1139,10 +1111,6 @@ true - - <key>ru</key> - <value>Настройки сервера входящей почты</value> - НастройкиСервераИсходящейПочтыРасширеннаяПодсказка 90 @@ -1311,10 +1279,6 @@ true - - <key>ru</key> - <value>Длительность ожидания</value> - ДлительностьОжиданияИсходящейПочтыРасширеннаяПодсказка 180 @@ -1704,10 +1668,6 @@ true - - <key>ru</key> - <value>Протокол и порт сервера входящей почты</value> - ПротоколИПортСервераВходящейПочтыРасширеннаяПодсказка 115 @@ -1736,10 +1696,6 @@ true - - <key>ru</key> - <value>Тип соединения и длительность ожидания</value> - ТипСоединенияИДлительностьОжиданияРасширеннаяПодсказка 123 @@ -1822,10 +1778,6 @@ true - - <key>ru</key> - <value>Настройки сервера входящей почты</value> - НастройкиСервераВходящейПочтыРасширеннаяПодсказка 110 @@ -2019,10 +1971,6 @@ true - - <key>ru</key> - <value>Настройка удаления писем</value> - НастройкаУдаленияПисемРасширеннаяПодсказка 141 @@ -2048,10 +1996,6 @@ true - - <key>ru</key> - <value>Оставлять письма на сервере</value> - ОставлятьПисьмаНаСервереРасширеннаяПодсказка 136 @@ -2081,10 +2025,6 @@ ru Настройка сервера входящей почты - - ru - Страница настройка сервера исходящей почты - НастройкаСервераВходящейПочтыРасширеннаяПодсказка 41 @@ -2281,10 +2221,6 @@ true - - <key>ru</key> - <value>Длительность ожидания</value> - ДлительностьОжиданияРасширеннаяПодсказка 128 @@ -2315,10 +2251,6 @@ ru Дополнительные настройки - - ru - Страница настройка сервера исходящей почты - ДополнительныеНастройкиРасширеннаяПодсказка 43 @@ -2453,14 +2385,6 @@ true - - <key>ru</key> - <value>Проверка настроек учетной записи картинка и надпись</value> - - - ru - Учетная запись не настроена картинка и надпись - ПроверкаНастроекУчетнойЗаписиКартинкаИНадписьРасширеннаяПодсказка 54 @@ -2629,14 +2553,6 @@ vasyapupkin@example.com завершена. true - - <key>ru</key> - <value>Учетная запись успешно настроена картинка и надпись</value> - - - ru - Учетная запись не настроена картинка и надпись - УчетнаяЗаписьУспешноНастроенаКартинкаИНадписьРасширеннаяПодсказка 65 @@ -2688,10 +2604,6 @@ vasyapupkin@example.com завершена. true - - <key>ru</key> - <value>Страницы</value> - СтраницыРасширеннаяПодсказка 2 @@ -2770,10 +2682,6 @@ vasyapupkin@example.com завершена. true - - <key>ru</key> - <value>Командная панель левая часть</value> - КоманднаяПанельЛеваяЧастьРасширеннаяПодсказка 12 @@ -2904,10 +2812,6 @@ vasyapupkin@example.com завершена. true - - <key>ru</key> - <value>Командная панель правая часть</value> - КоманднаяПанельПраваяЧастьРасширеннаяПодсказка 31 @@ -2928,10 +2832,6 @@ vasyapupkin@example.com завершена. true - - <key>ru</key> - <value>Командная панель</value> - КоманднаяПанельРасширеннаяПодсказка 29 diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ПомощникНастройкиУчетнойЗаписи/Module.bsl b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ПомощникНастройкиУчетнойЗаписи/Module.bsl index dd5f20054..0dbcec90a 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ПомощникНастройкиУчетнойЗаписи/Module.bsl +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ПомощникНастройкиУчетнойЗаписи/Module.bsl @@ -639,38 +639,47 @@ Процедура СоздатьУчетнуюЗапись() СистемнаяУчетнаяЗапись = Справочники.УчетныеЗаписиЭлектроннойПочты.СистемнаяУчетнаяЗаписьЭлектроннойПочты; - Если КонтекстныйРежим - И ВидУчетнойЗаписи = "Общая" + НастроитьСистемнуюУчетнуюЗапись = КонтекстныйРежим И ВидУчетнойЗаписи = "Общая" И Не РаботаСПочтовымиСообщениями.УчетнаяЗаписьНастроена(СистемнаяУчетнаяЗапись) - И Справочники.УчетныеЗаписиЭлектроннойПочты.ИзменениеРазрешено(СистемнаяУчетнаяЗапись) Тогда + И Справочники.УчетныеЗаписиЭлектроннойПочты.ИзменениеРазрешено(СистемнаяУчетнаяЗапись); + + Если НастроитьСистемнуюУчетнуюЗапись Тогда + УчетнаяЗаписьСсылка = СистемнаяУчетнаяЗапись; + КонецЕсли; + + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Справочник.УчетныеЗаписиЭлектроннойПочты"); + Если Не УчетнаяЗаписьСсылка.Пустая() Тогда + ЭлементБлокировки.УстановитьЗначение("Ссылка", УчетнаяЗаписьСсылка); + КонецЕсли; + + НачатьТранзакцию(); + Попытка + Блокировка.Заблокировать(); - УчетнаяЗапись = СистемнаяУчетнаяЗапись.ПолучитьОбъект(); - Иначе Если УчетнаяЗаписьСсылка.Пустая() Тогда УчетнаяЗапись = Справочники.УчетныеЗаписиЭлектроннойПочты.СоздатьЭлемент(); УчетнаяЗапись.УстановитьСсылкуНового(СсылкаНовойУчетнойЗаписи); Иначе УчетнаяЗапись = УчетнаяЗаписьСсылка.ПолучитьОбъект(); КонецЕсли; - КонецЕсли; - ЗаполнитьЗначенияСвойств(УчетнаяЗапись, ЭтотОбъект); - УчетнаяЗапись.ИмяПользователя = ИмяОтправителяПисем; - УчетнаяЗапись.Пользователь = ИмяПользователяДляПолученияПисем; - УчетнаяЗапись.ПользовательSMTP = ИмяПользователяДляОтправкиПисем; - УчетнаяЗапись.ВремяОжидания = ДлительностьОжиданияСервера; - УчетнаяЗапись.ОставлятьКопииСообщенийНаСервере = ОставлятьКопииПисемНаСервере; - УчетнаяЗапись.ПериодХраненияСообщенийНаСервере = ?(ОставлятьКопииПисемНаСервере И УдалятьПисьмаССервера И Протокол = "POP", ПериодХраненияСообщенийНаСервере, 0); - УчетнаяЗапись.ПротоколВходящейПочты = Протокол; - УчетнаяЗапись.Наименование = НазваниеУчетнойЗаписи; - Если ВидУчетнойЗаписи = "Персональная" Тогда - УчетнаяЗапись.ВладелецУчетнойЗаписи = Пользователи.ТекущийПользователь(); - Иначе - УчетнаяЗапись.ВладелецУчетнойЗаписи = Справочники.Пользователи.ПустаяСсылка(); - КонецЕсли; - УчетнаяЗапись.ДополнительныеСвойства.Вставить("НеПроверятьИзменениеНастроек"); - - НачатьТранзакцию(); - Попытка + + ЗаполнитьЗначенияСвойств(УчетнаяЗапись, ЭтотОбъект); + УчетнаяЗапись.ИмяПользователя = ИмяОтправителяПисем; + УчетнаяЗапись.Пользователь = ИмяПользователяДляПолученияПисем; + УчетнаяЗапись.ПользовательSMTP = ИмяПользователяДляОтправкиПисем; + УчетнаяЗапись.ВремяОжидания = ДлительностьОжиданияСервера; + УчетнаяЗапись.ОставлятьКопииСообщенийНаСервере = ОставлятьКопииПисемНаСервере; + УчетнаяЗапись.ПериодХраненияСообщенийНаСервере = ?(ОставлятьКопииПисемНаСервере И УдалятьПисьмаССервера И Протокол = "POP", ПериодХраненияСообщенийНаСервере, 0); + УчетнаяЗапись.ПротоколВходящейПочты = Протокол; + УчетнаяЗапись.Наименование = НазваниеУчетнойЗаписи; + Если ВидУчетнойЗаписи = "Персональная" Тогда + УчетнаяЗапись.ВладелецУчетнойЗаписи = Пользователи.ТекущийПользователь(); + Иначе + УчетнаяЗапись.ВладелецУчетнойЗаписи = Справочники.Пользователи.ПустаяСсылка(); + КонецЕсли; + УчетнаяЗапись.ДополнительныеСвойства.Вставить("НеПроверятьИзменениеНастроек"); + УчетнаяЗапись.Записать(); УчетнаяЗаписьСсылка = УчетнаяЗапись.Ссылка; ТребуетсяПодтверждениеЗакрытияФормы = Ложь; @@ -679,7 +688,7 @@ ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(УчетнаяЗаписьСсылка, ПарольДляПолученияПисем); ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(УчетнаяЗаписьСсылка, ПарольДляОтправкиПисем, "ПарольSMTP"); УстановитьПривилегированныйРежим(Ложь); - + ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); @@ -739,37 +748,29 @@ ПроверкаЗавершиласьСОшибками = Ложь; - ДлительнаяОперация = ПодобратьНастройкиУчетнойЗаписи(); + ДлительнаяОперация = НачатьПоискНастроекУчетнойЗаписи(); ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект); ПараметрыОжидания.ВыводитьОкноОжидания = Ложь; - ОписаниеОповещения = Новый ОписаниеОповещения("ПриЗавершенииОперацииПодбора", ЭтотОбъект); + ОписаниеОповещения = Новый ОписаниеОповещения("ПриЗавершенииПоискаНастроек", ЭтотОбъект); ДлительныеОперацииКлиент.ОжидатьЗавершение(ДлительнаяОперация, ОписаниеОповещения, ПараметрыОжидания); КонецПроцедуры &НаСервере -Функция ПодобратьНастройкиУчетнойЗаписи() +Функция НачатьПоискНастроекУчетнойЗаписи() - НаименованиеЗадания = НСтр("ru = 'Поиск настроек почтового сервера'"); - ВыполняемыйМетод = "Справочники.УчетныеЗаписиЭлектроннойПочты.ОпределитьНастройкиУчетнойЗаписи"; + ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияФункции(УникальныйИдентификатор); + ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Поиск настроек почтового сервера'"); - СтруктураПараметров = Новый Структура; - СтруктураПараметров.Вставить("АдресЭлектроннойПочты", АдресЭлектроннойПочты); - СтруктураПараметров.Вставить("Пароль", ПарольДляПолученияПисем); - СтруктураПараметров.Вставить("ДляОтправки", ИспользоватьДляОтправки); - СтруктураПараметров.Вставить("ДляПолучения", ИспользоватьДляПолучения); - - ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор); - ПараметрыВыполнения.НаименованиеФоновогоЗадания = НаименованиеЗадания; - - Возврат ДлительныеОперации.ВыполнитьВФоне(ВыполняемыйМетод, СтруктураПараметров, ПараметрыВыполнения); + Возврат ДлительныеОперации.ВыполнитьФункцию(ПараметрыВыполнения, "Справочники.УчетныеЗаписиЭлектроннойПочты.ОпределитьНастройкиУчетнойЗаписи", + АдресЭлектроннойПочты, ПарольДляПолученияПисем, ИспользоватьДляОтправки, ИспользоватьДляПолучения); КонецФункции &НаКлиенте -Процедура ПриЗавершенииОперацииПодбора(Результат, ДополнительныеПараметры) Экспорт +Процедура ПриЗавершенииПоискаНастроек(Результат, ДополнительныеПараметры) Экспорт Если Результат = Неопределено Тогда Возврат; diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Module.bsl index 5fbfe27c3..9d804b570 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Module.bsl @@ -69,7 +69,6 @@ ТребуетсяАвторизацияПриОтправкеПисем = ЗначениеЗаполнено(Объект.ПользовательSMTP); Элементы.АвторизацияПриОтправкеПисем.Доступность = ТребуетсяАвторизацияПриОтправкеПисем; УстановитьВидГруппыТребуетсяАвторизация(ЭтотОбъект, ИспользуетсяПротоколPOP); - Элементы.ОтправлятьСкрытыеКопииПисемНаЭтотАдрес.Видимость = ИспользуетсяПротоколPOP; ШифрованиеПриОтправкеПочты = ?(Объект.ИспользоватьЗащищенноеСоединениеДляИсходящейПочты, "SSL", "Авто"); ШифрованиеПриПолученииПочты = ?(Объект.ИспользоватьЗащищенноеСоединениеДляВходящейПочты, "SSL", "Авто"); @@ -203,8 +202,6 @@ УстановитьПортВходящейПочты(); УстановитьВидНастройкиХраненияПисемНаСервере(); - Элементы.ОтправлятьСкрытыеКопииПисемНаЭтотАдрес.Видимость = ИспользуетсяПротоколPOP; - КонецПроцедуры &НаКлиентеНаСервереБезКонтекста diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/ManagerModule.bsl b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/ManagerModule.bsl index 4eb69ed4a..c2a8f4339 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/ManagerModule.bsl +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/ManagerModule.bsl @@ -125,6 +125,39 @@ КонецПроцедуры +// Начальное заполнение + +Процедура ПриНастройкеНачальногоЗаполненияЭлементов(Настройки) Экспорт + + Настройки.ПриНачальномЗаполненииЭлемента = Ложь; + +КонецПроцедуры + +// Вызывается при начальном заполнении справочника УчетныеЗаписиЭлектроннойПочты. +// +// Параметры: +// КодыЯзыков - Массив - список языков конфигурации. Актуально для мультиязычных конфигураций. +// Элементы - ТаблицаЗначений - данные заполнения. Состав колонок соответствует набору реквизитов +// справочника УчетныеЗаписиЭлектроннойПочты. +// +Процедура ПриНачальномЗаполненииЭлементов(КодыЯзыков, Элементы) Экспорт + + Элемент = Элементы.Добавить(); + Элемент.ИмяПредопределенныхДанных = "СистемнаяУчетнаяЗаписьЭлектроннойПочты"; + Элемент.Наименование = НСтр("ru = 'Системная учетная запись'", + ОбщегоНазначения.КодОсновногоЯзыка()); + Элемент.ИмяПользователя = НСтр("ru = '1С:Предприятие'"); + Элемент.ИспользоватьДляПолучения = Ложь; + Элемент.ИспользоватьДляОтправки = Ложь; + Элемент.ОставлятьКопииСообщенийНаСервере = Ложь; + Элемент.ПериодХраненияСообщенийНаСервере = 0; + Элемент.ВремяОжидания = 30; + Элемент.ПортСервераВходящейПочты = 110; + Элемент.ПортСервераИсходящейПочты = 25; + Элемент.ПротоколВходящейПочты = "POP"; + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -249,22 +282,19 @@ КонецФункции -Процедура ОпределитьНастройкиУчетнойЗаписи(Параметры, АдресРезультата) Экспорт - - АдресЭлектроннойПочты = Параметры.АдресЭлектроннойПочты; - Пароль = Параметры.Пароль; +Функция ОпределитьНастройкиУчетнойЗаписи(АдресЭлектроннойПочты, Пароль, ДляОтправки, ДляПолучения) Экспорт НайденныйПрофильSMTP = Неопределено; НайденныйПрофильIMAP = Неопределено; НайденныйПрофильPOP = Неопределено; - Если Параметры.ДляОтправки Тогда + Если ДляОтправки Тогда НайденныйПрофильSMTP = ОпределитьНастройкиSMTP(АдресЭлектроннойПочты, Пароль); КонецЕсли; - Если Параметры.ДляОтправки Или Параметры.ДляПолучения Тогда + Если ДляОтправки Или ДляПолучения Тогда НайденныйПрофильIMAP = ОпределитьНастройкиIMAP(АдресЭлектроннойПочты, Пароль); - Если НайденныйПрофильIMAP = Неопределено И Параметры.ДляПолучения Тогда + Если НайденныйПрофильIMAP = Неопределено И ДляПолучения Тогда НайденныйПрофильPOP = ОпределитьНастройкиPOP(АдресЭлектроннойПочты, Пароль); КонецЕсли; КонецЕсли; @@ -300,9 +330,9 @@ Результат.Вставить("ДляПолучения", НайденныйПрофильIMAP <> Неопределено Или НайденныйПрофильPOP <> Неопределено); Результат.Вставить("ДляОтправки", НайденныйПрофильSMTP <> Неопределено); - ПоместитьВоВременноеХранилище(Результат, АдресРезультата); + Возврат Результат; -КонецПроцедуры +КонецФункции Функция ОпределитьНастройкиPOP(АдресЭлектроннойПочты, Пароль) Для Каждого Профиль Из ПрофилиPOP(АдресЭлектроннойПочты, Пароль) Цикл diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/ObjectModule.bsl b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/ObjectModule.bsl index 8c489591b..b9b93703b 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/ObjectModule.bsl +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/ObjectModule.bsl @@ -86,7 +86,7 @@ #Область СлужебныеПроцедурыИФункции -Процедура ЗаполнитьОбъектЗначениямиПоУмолчанию() Экспорт +Процедура ЗаполнитьОбъектЗначениямиПоУмолчанию() ИмяПользователя = НСтр("ru = '1С:Предприятие'"); ИспользоватьДляПолучения = Ложь; diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/УчетныеЗаписиЭлектроннойПочты.mdo b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/УчетныеЗаписиЭлектроннойПочты.mdo index 2f8beb119..9d67ee507 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/УчетныеЗаписиЭлектроннойПочты.mdo +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/УчетныеЗаписиЭлектроннойПочты.mdo @@ -191,7 +191,7 @@
    ru - Адресат учетной записи. От его имени будут отсылаться почтовые сообщения. Например, "Иван Петров". + Имя отправителя почтовых сообщений. Например, "Иван Петров". @@ -358,7 +358,7 @@ ru - Имя пользователя для дополнительной аутентификации на SMTP сервере + Имя пользователя для доступа к почте (логин) diff --git a/SSL/src/Catalogs/Файлы/Forms/Файлы/Form.form b/SSL/src/Catalogs/Файлы/Forms/Файлы/Form.form index d4696305e..05c239b6f 100644 --- a/SSL/src/Catalogs/Файлы/Forms/Файлы/Form.form +++ b/SSL/src/Catalogs/Файлы/Forms/Файлы/Form.form @@ -3433,35 +3433,6 @@ ФормаГруппаДополнительно 315 Low - - ФормаИзменить82 - 327 - - <key>ru</key> - <value>Открыть карточку</value> - - true - - true - - - ФормаИзменить82РасширеннаяПодсказка - 328 - Label - true - true - - Left - - - Form.StandardCommand.Change - Normal - Auto - true - true - UserCmds - Auto - ФормаСкопировать 236 @@ -5295,6 +5266,7 @@ 0 + diff --git a/SSL/src/Catalogs/Файлы/Forms/Файлы/Module.bsl b/SSL/src/Catalogs/Файлы/Forms/Файлы/Module.bsl index d7ea65dec..b1e8aab96 100644 --- a/SSL/src/Catalogs/Файлы/Forms/Файлы/Module.bsl +++ b/SSL/src/Catalogs/Файлы/Forms/Файлы/Module.bsl @@ -69,11 +69,6 @@ ЗаполнитьЗначенияСвойств(ЭтотОбъект, НастройкиПравПапки(Элементы.Папки.ТекущаяСтрока)); - Если КлиентскоеПриложение.ТекущийВариантИнтерфейса() = ВариантИнтерфейсаКлиентскогоПриложения.Версия8_2 Тогда - Элементы.ФормаИзменить.Видимость = Ложь; - Элементы.ФормаИзменить82.Видимость = Истина; - КонецЕсли; - ИспользоватьПредпросмотр = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( "Файлы", "Предпросмотр"); @@ -804,7 +799,7 @@ ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); ДиалогОткрытияФайла.ПолноеИмяФайла = ""; - ДиалогОткрытияФайла.Фильтр = НСтр("ru = 'Все файлы(*.*)|*.*'"); + ДиалогОткрытияФайла.Фильтр = НСтр("ru = 'Все файлы (*.*)|*.*'"); ДиалогОткрытияФайла.МножественныйВыбор = Истина; ДиалогОткрытияФайла.Заголовок = НСтр("ru = 'Выберите файлы'"); Если Не ДиалогОткрытияФайла.Выбрать() Тогда @@ -833,7 +828,7 @@ ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.ВыборКаталога); ДиалогОткрытияФайла.ПолноеИмяФайла = ""; - ДиалогОткрытияФайла.Фильтр = НСтр("ru = 'Все файлы(*.*)|*.*'"); + ДиалогОткрытияФайла.Фильтр = НСтр("ru = 'Все файлы (*.*)|*.*'"); ДиалогОткрытияФайла.МножественныйВыбор = Ложь; ДиалогОткрытияФайла.Заголовок = НСтр("ru = 'Выберите каталог'"); Если Не ДиалогОткрытияФайла.Выбрать() Тогда @@ -1186,12 +1181,9 @@ АдресПапкиВОблачномСервисе = РаботаСФайламиСлужебныйКлиентСервер.АдресВОблачномСервисе( Элементы.Папки.ТекущиеДанные.УчетнаяЗаписьСервис, Элементы.Папки.ТекущиеДанные.Href); - ЧастиСтроки = Новый Массив; - ЧастиСтроки.Добавить(НСтр("ru = 'Работа с файлами этой папки ведется в облачном сервисе'")); - ЧастиСтроки.Добавить(" "); - ЧастиСтроки.Добавить(Новый ФорматированнаяСтрока(Элементы.Папки.ТекущиеДанные.УчетнаяЗаписьНаименование, , , , АдресПапкиВОблачномСервисе)); - ЧастиСтроки.Добавить(". "); - Элементы.ДекорацияПояснение.Заголовок = Новый ФорматированнаяСтрока(ЧастиСтроки); + Элементы.ДекорацияПояснение.Заголовок = СтроковыеФункцииКлиент.ФорматированнаяСтрока( + НСтр("ru = 'Работа с файлами ведется в облачном сервисе %2.'"), + АдресПапкиВОблачномСервисе, Элементы.Папки.ТекущиеДанные.УчетнаяЗаписьНаименование); СведенияОСинхронизации = СведенияОСинхронизации(Элементы.Папки.ТекущиеДанные.Ссылка); Если ЗначениеЗаполнено(СведенияОСинхронизации) Тогда @@ -1199,11 +1191,10 @@ Элементы.ДекорацияДатаСинхронизации.ОтображениеПодсказки = ?(СведенияОСинхронизации.Синхронизирован, ОтображениеПодсказки.Нет, ОтображениеПодсказки.Кнопка); Элементы.ДекорацияДатаСинхронизации.Видимость = Истина; - ЧастиСтроки.Очистить(); - ЧастиСтроки.Добавить(НСтр("ru = 'Синхронизировано'")); - ЧастиСтроки.Добавить(": "); - ЧастиСтроки.Добавить(Новый ФорматированнаяСтрока(Формат(СведенияОСинхронизации.ДатаСинхронизации, "ДЛФ=DD"),,,, "OpenJournal")); - Элементы.ДекорацияДатаСинхронизации.Заголовок = Новый ФорматированнаяСтрока(ЧастиСтроки); + Элементы.ДекорацияДатаСинхронизации.Заголовок = СтроковыеФункцииКлиент.ФорматированнаяСтрока( + НСтр("ru = 'Синхронизировано: %1'"), + Формат(СведенияОСинхронизации.ДатаСинхронизации, "ДЛФ=DD")); + Иначе Элементы.ДекорацияКартинкаОшибкаСинхронизации.Видимость = Ложь; diff --git a/SSL/src/Catalogs/Файлы/Forms/ФормаПодбора/Form.form b/SSL/src/Catalogs/Файлы/Forms/ФормаПодбора/Form.form index 7316caf5c..bc59899cd 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ФормаПодбора/Form.form +++ b/SSL/src/Catalogs/Файлы/Forms/ФормаПодбора/Form.form @@ -13,10 +13,6 @@ true - - <key>ru</key> - <value>Группа пользовательских настроек</value> - ГруппаПользовательскихНастроекРасширеннаяПодсказка 62 @@ -163,10 +159,6 @@ true - - <key>ru</key> - <value>Картинка и наименование папок</value> - КартинкаИНаименованиеПапокExtendedTooltip 47 @@ -360,10 +352,6 @@ Список 2 - - <key>ru</key> - <value>Список</value> - true true @@ -528,10 +516,6 @@ true - - <key>ru</key> - <value>Картинка и наименование</value> - КартинкаИНаименованиеExtendedTooltip 51 @@ -821,10 +805,6 @@ true - - <key>ru</key> - <value>Списки</value> - 10 ГруппаСпискиExtendedTooltip diff --git a/SSL/src/Catalogs/Файлы/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/Файлы/Forms/ФормаЭлемента/Module.bsl index f8bfd9d90..a3c981e7c 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/Файлы/Forms/ФормаЭлемента/Module.bsl @@ -173,17 +173,21 @@ Если ЗначениеЗаполнено(ЗначениеКопирования) Тогда ДвоичныеДанные = РаботаСФайлами.ДвоичныеДанныеФайла(ЗначениеКопирования); - Если РаботаСФайламиСлужебный.ТипХраненияФайлов() = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда + + ТипХраненияФайла = РаботаСФайламиСлужебный.ТипХраненияФайлов(); + Если ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда + ТекущийОбъект.ТипХраненияФайла = ТипХраненияФайла; РаботаСФайламиСлужебный.ЗаписатьФайлВИнформационнуюБазу(ТекущийОбъект.Ссылка, ДвоичныеДанные); Иначе - СведенияОФайле = РаботаСФайламиСлужебный.ДобавитьФайлВТом(ДвоичныеДанные, ТекущийОбъект.ДатаМодификацииУниверсальная, - ТекущийОбъект.Наименование, ТекущийОбъект.Расширение); - ТекущийОбъект.Том = СведенияОФайле.Том; - ТекущийОбъект.ПутьКФайлу = СведенияОФайле.ПутьКФайлу; + + ТекущийОбъект.Том = Неопределено; + ТекущийОбъект.ПутьКФайлу = Неопределено; + ТекущийОбъект.ТипХраненияФайла = Неопределено; + + РаботаСФайламиВТомахСлужебный.ДобавитьФайл(ТекущийОбъект, ДвоичныеДанные); + КонецЕсли; - ТекущийОбъект.ТипХраненияФайла = РаботаСФайламиСлужебный.ТипХраненияФайлов(); - РаботаСФайламиСлужебный.ПеренестиРезультатыПроверкиПодписей(ЭлектронныеПодписи, ЗначениеКопирования); Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда @@ -200,13 +204,12 @@ КонецЕсли; Если НаименованиеДоЗаписи <> ТекущийОбъект.Наименование Тогда + Если ТекущийОбъект.ТекущаяВерсия.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда - РаботаСФайламиСлужебный.ПереименоватьФайлВерсииНаДиске( - ТекущийОбъект.ТекущаяВерсия, - НаименованиеДоЗаписи, - ТекущийОбъект.Наименование, - УникальныйИдентификатор); + РаботаСФайламиВТомахСлужебный.ПереименоватьФайл(ТекущийОбъект.ТекущаяВерсия, + ТекущийОбъект.Наименование, НаименованиеДоЗаписи, УникальныйИдентификатор); КонецЕсли; + КонецЕсли; КонецПроцедуры @@ -1603,21 +1606,15 @@ АдресПапкиВОблачномСервисе = РаботаСФайламиСлужебныйКлиентСервер.АдресВОблачномСервисе( СведенияОСинхронизации.Сервис, СведенияОСинхронизации.Href); - ЧастиСтроки = Новый Массив; - ЧастиСтроки.Добавить(НСтр("ru = 'Файл доступен только для просмотра, работа с ним ведется в облачном сервисе'")); - ЧастиСтроки.Добавить(" "); - ЧастиСтроки.Добавить(Новый ФорматированнаяСтрока(СведенияОСинхронизации.УчетнаяЗаписьНаименование,,,, АдресПапкиВОблачномСервисе)); - ЧастиСтроки.Добавить(". "); - Элементы.ДекорацияПояснение.Заголовок = Новый ФорматированнаяСтрока(ЧастиСтроки); + Элементы.ДекорацияПояснение.Заголовок = СтроковыеФункции.ФорматированнаяСтрока( + НСтр("ru = 'Файл доступен только для просмотра, работа с ним ведется в облачном сервисе %2.'"), + АдресПапкиВОблачномСервисе, СведенияОСинхронизации.УчетнаяЗаписьНаименование); Элементы.ДекорацияКартинкаСтатусСинхронизации.Видимость = НЕ СведенияОСинхронизации.Синхронизирован; - - ЧастиСтроки.Очистить(); - ЧастиСтроки.Добавить(НСтр("ru = 'Синхронизирован'")); - ЧастиСтроки.Добавить(": "); - ЧастиСтроки.Добавить(Новый ФорматированнаяСтрока(Формат(СведенияОСинхронизации.ДатаСинхронизации, "ДЛФ=DD"),,,, "OpenJournal")); - Элементы.ДекорацияДатаСинхронизации.Заголовок = Новый ФорматированнаяСтрока(ЧастиСтроки); + Элементы.ДекорацияДатаСинхронизации.Заголовок = СтроковыеФункции.ФорматированнаяСтрока( + НСтр("ru = 'Синхронизирован: %1'"), + Формат(СведенияОСинхронизации.ДатаСинхронизации, "ДЛФ=DD")); КонецЕсли; diff --git a/SSL/src/Catalogs/Файлы/ManagerModule.bsl b/SSL/src/Catalogs/Файлы/ManagerModule.bsl index ab8269e58..12a6901d2 100644 --- a/SSL/src/Catalogs/Файлы/ManagerModule.bsl +++ b/SSL/src/Catalogs/Файлы/ManagerModule.bsl @@ -63,6 +63,40 @@ // Конец СтандартныеПодсистемы.УправлениеДоступом +// СтандартныеПодсистемы.ПодключаемыеКоманды + +// Определяет список команд создания на основании. +// +// Параметры: +// КомандыСозданияНаОсновании - ТаблицаЗначений - см. СозданиеНаОснованииПереопределяемый.ПередДобавлениемКомандСозданияНаОсновании. +// Параметры - Структура - см. СозданиеНаОснованииПереопределяемый.ПередДобавлениемКомандСозданияНаОсновании. +// +Процедура ДобавитьКомандыСозданияНаОсновании(КомандыСозданияНаОсновании, Параметры) Экспорт + +КонецПроцедуры + +// Для использования в процедуре ДобавитьКомандыСозданияНаОсновании других модулей менеджеров объектов. +// Добавляет в список команд создания на основании этот объект. +// +// Параметры: +// КомандыСозданияНаОсновании - ТаблицаЗначений - см. СозданиеНаОснованииПереопределяемый.ПередДобавлениемКомандСозданияНаОсновании. +// +// Возвращаемое значение: +// СтрокаТаблицыЗначений, Неопределено - описание добавленной команды. +// +Функция ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании) Экспорт + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда + МодульСозданиеНаОсновании = ОбщегоНазначения.ОбщийМодуль("СозданиеНаОсновании"); + Возврат МодульСозданиеНаОсновании.ДобавитьКомандуСозданияНаОсновании(КомандыСозданияНаОсновании, Метаданные.Справочники.Файлы); + КонецЕсли; + + Возврат Неопределено; + +КонецФункции + +// Конец СтандартныеПодсистемы.ПодключаемыеКоманды + #КонецОбласти #КонецОбласти @@ -191,7 +225,7 @@ Если ОбъектовОбработано = 0 И ПроблемныхОбъектов <> 0 Тогда ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Процедуре Справочники.Файлы.ОбработатьДанныеДляПереходаНаНовуюВерсию.ОбработатьДанныеДляПереходаНаНовуюВерсию не удалось обработать программы электронной подписи (пропущены): %1'"), + НСтр("ru = 'Процедуре Справочники.Файлы.ОбработатьДанныеДляПереходаНаНовуюВерсию не удалось обработать программы электронной подписи (пропущены): %1'"), ПроблемныхОбъектов); ВызватьИсключение ТекстСообщения; Иначе diff --git a/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаМастераКомплексныхВопросов/Form.form b/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаМастераКомплексныхВопросов/Form.form index eaed3b1c1..cd07e95c5 100644 --- a/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаМастераКомплексныхВопросов/Form.form +++ b/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаМастераКомплексныхВопросов/Form.form @@ -60,10 +60,6 @@ Вопросы 136 - - <key>ru</key> - <value>Вопросы</value> - true true @@ -367,10 +363,6 @@ true - - <key>ru</key> - <value>Подсказка</value> - ГруппаПодсказкаРасширеннаяПодсказка 242 diff --git a/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаМастераТабличныхВопросов/Form.form b/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаМастераТабличныхВопросов/Form.form index a789cc56e..3ee6648bc 100644 --- a/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаМастераТабличныхВопросов/Form.form +++ b/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаМастераТабличныхВопросов/Form.form @@ -444,10 +444,6 @@ true - - <key>ru</key> - <value>Страницы тип табличного вопроса картинки</value> - СтраницыТипТабличногоВопросаКартинкиExtendedTooltip 152 @@ -538,10 +534,6 @@ ОтветыКолонкиОтветыВСтрокахИКолонках 22 - - <key>ru</key> - <value>Ответы колонки ответы в строках и колонках</value> - true true @@ -759,10 +751,6 @@ true - - <key>ru</key> - <value>Состав колонок</value> - ГруппаСоставКолонокОтветыВСтрокахИКолонкахExtendedTooltip 165 @@ -830,10 +818,6 @@ ОтветыСтрокиОтветыВСтрокахИКолонках 27 - - <key>ru</key> - <value>Ответы строки ответы в строках и колонках</value> - true true @@ -1051,10 +1035,6 @@ true - - <key>ru</key> - <value>Состав строк</value> - ГруппаСоставСтрокОтветыВСтрокахИКолонкахExtendedTooltip 170 @@ -1080,10 +1060,6 @@ true - - <key>ru</key> - <value>Общая ответы в строках и колонках</value> - ГруппаОбщаяОтветыВСтрокахИКолонкахExtendedTooltip 164 @@ -1139,10 +1115,6 @@ Вопросы 136 - - <key>ru</key> - <value>Вопросы</value> - true true @@ -1333,10 +1305,6 @@ true - - <key>ru</key> - <value>Вопросы:</value> - ГруппаВопросыExtendedTooltip 176 @@ -1429,10 +1397,6 @@ ОтветыКолонкиОтветыВКолонках 42 - - <key>ru</key> - <value>Ответы колонки ответы в колонках</value> - true true @@ -1690,10 +1654,6 @@ true - - <key>ru</key> - <value>Состав колонок</value> - ГруппаСоставКолонокОтветыВКолонкахExtendedTooltip 180 @@ -1786,10 +1746,6 @@ ОтветыСтрокиОтветыВСтроках 54 - - <key>ru</key> - <value>Ответы строки ответы в строках</value> - true true @@ -2051,10 +2007,6 @@ true - - <key>ru</key> - <value>Состав строк:</value> - ГруппаСоставСтрокОтветыВСтрокахExtendedTooltip 187 @@ -2107,10 +2059,6 @@ РезультирующаяТаблица 76 - - <key>ru</key> - <value>Результирующая таблица</value> - true true @@ -2270,10 +2218,6 @@ true - - <key>ru</key> - <value>Страницы</value> - СтраницыExtendedTooltip 149 @@ -2413,10 +2357,6 @@ true - - <key>ru</key> - <value>Подсказка</value> - ГруппаПодсказкаРасширеннаяПодсказка 265 @@ -2472,14 +2412,6 @@ true true - - System.DefaultGUIFont - 10.0 - false - false - false - false - @@ -2620,10 +2552,6 @@ true - - <key>ru</key> - <value>Далее</value> - 1 Right @@ -2646,10 +2574,6 @@ true - - <key>ru</key> - <value>Кнопки</value> - false ГруппаКнопкиExtendedTooltip diff --git a/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаМастераТабличныхВопросов/Module.bsl b/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаМастераТабличныхВопросов/Module.bsl index 12af11c10..bd0bdd3bd 100644 --- a/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаМастераТабличныхВопросов/Module.bsl +++ b/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаМастераТабличныхВопросов/Module.bsl @@ -41,8 +41,6 @@ Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаРезультирующаяТаблица; КонецЕсли; - СтандартныеПодсистемыСервер.УстановитьОтображениеЗаголовковГрупп(ЭтотОбъект, "ГруппаОсновныеСтраницы"); - КонецПроцедуры &НаКлиенте @@ -298,28 +296,28 @@ ТекущаяСтраница = Элементы.Страницы.ТекущаяСтраница; Если ТекущаяСтраница = Элементы.СтраницаРезультирующаяТаблица Тогда - ИнформацияШапка = НСтр("ru='Результирующая таблица:'"); - ИнформацияПодвал = НСтр("ru='Нажмите Готово для окончания редактирования.'"); - Элементы.КнопкаВперед.Заголовок = НСтр("ru='Готово'"); + ИнформацияШапка = НСтр("ru = 'Результирующая таблица:'"); + ИнформацияПодвал = НСтр("ru = 'Нажмите Готово для окончания редактирования.'"); + Элементы.КнопкаВперед.Заголовок = НСтр("ru = 'Готово'"); Иначе - Элементы.КнопкаВперед.Заголовок = НСтр("ru='Далее>>'"); + Элементы.КнопкаВперед.Заголовок = НСтр("ru = 'Далее>>'"); Если ТекущаяСтраница = Элементы.СтраницаВопросы Тогда Если ТипТабличногоВопроса = ПредопределенноеЗначение("Перечисление.ТипыТабличныхВопросов.Составной") Тогда - ИнформацияШапка = НСтр("ru='Подбор вопросов. Укажите хотя бы один вопрос:'"); - ИнформацияПодвал = НСтр("ru='Нажмите Далее для просмотра получившейся таблицы.'"); + ИнформацияШапка = НСтр("ru = 'Подбор вопросов. Укажите хотя бы один вопрос:'"); + ИнформацияПодвал = НСтр("ru = 'Нажмите Далее для просмотра получившейся таблицы.'"); ИначеЕсли ТипТабличногоВопроса = ПредопределенноеЗначение("Перечисление.ТипыТабличныхВопросов.ПредопределенныеОтветыВСтрокахИКолонках") Тогда - ИнформацияШапка =НСтр("ru='Подбор вопросов. Укажите три вопроса:'"); - ИнформацияПодвал =НСтр("ru='Нажмите Далее для подбора предопределенных ответов.'"); + ИнформацияШапка =НСтр("ru = 'Подбор вопросов. Укажите три вопроса:'"); + ИнформацияПодвал =НСтр("ru = 'Нажмите Далее для подбора предопределенных ответов.'"); Иначе - ИнформацияШапка =НСтр("ru='Подбор вопросов. Укажите как минимум два вопроса:'"); - ИнформацияПодвал =НСтр("ru='Нажмите Далее для подбора предопределенных ответов.'"); + ИнформацияШапка =НСтр("ru = 'Подбор вопросов. Укажите как минимум два вопроса:'"); + ИнформацияПодвал =НСтр("ru = 'Нажмите Далее для подбора предопределенных ответов.'"); КонецЕсли; ИначеЕсли ТекущаяСтраница = Элементы.СтраницаТипТабличногоВопроса Тогда - ИнформацияШапка = НСтр("ru='Выбор типа табличного вопроса:'"); - ИнформацияПодвал = НСтр("ru='Нажмите Далее для подбора вопросов:'"); + ИнформацияШапка = НСтр("ru = 'Выбор типа табличного вопроса:'"); + ИнформацияПодвал = НСтр("ru = 'Нажмите Далее для подбора вопросов:'"); Иначе - ИнформацияШапка = НСтр("ru='Подбор предопределенных ответов:'"); - ИнформацияПодвал = НСтр("ru='Нажмите Далее для просмотра получившейся таблицы:'"); + ИнформацияШапка = НСтр("ru = 'Подбор предопределенных ответов:'"); + ИнформацияПодвал = НСтр("ru = 'Нажмите Далее для просмотра получившейся таблицы:'"); КонецЕсли; КонецЕсли; diff --git a/SSL/src/Catalogs/ШаблоныСообщений/Forms/ПроизвольныйПараметр/Module.bsl b/SSL/src/Catalogs/ШаблоныСообщений/Forms/ПроизвольныйПараметр/Module.bsl index a27482bdd..8ccf59dbc 100644 --- a/SSL/src/Catalogs/ШаблоныСообщений/Forms/ПроизвольныйПараметр/Module.bsl +++ b/SSL/src/Catalogs/ШаблоныСообщений/Forms/ПроизвольныйПараметр/Module.bsl @@ -42,9 +42,9 @@ &НаСервереБезКонтекста Функция ТипПараметраСтрокой(ПолноеИмяТипа) - Если СтрСравнить(ПолноеИмяТипа, НСтр("ru = 'Дата'")) = 0 Тогда + Если СтрСравнить(ПолноеИмяТипа, "Дата") = 0 Тогда Результат = Тип("Дата"); - ИначеЕсли СтрСравнить(ПолноеИмяТипа, НСтр("ru = 'Строка'")) = 0 Тогда + ИначеЕсли СтрСравнить(ПолноеИмяТипа, "Строка") = 0 Тогда Результат = Тип("Строка"); Иначе МенеджерОбъекта = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПолноеИмяТипа); @@ -82,27 +82,27 @@ Для Каждого ПараметрИзФормы Из СписокПараметров Цикл Если СтрСравнить(ПараметрИзФормы.Значение, ИмяПараметра) = 0 Тогда - ПоказатьПредупреждение(, НСтр("ru='Некорректное имя параметра. Параметр с таким именем уже был добавлен ранее.'")); + ПоказатьПредупреждение(, НСтр("ru = 'Некорректное имя параметра. Параметр с таким именем уже был добавлен ранее.'")); Возврат; КонецЕсли; Если СтрСравнить(ПараметрИзФормы.Представление, ПредставлениеПараметра) = 0 Тогда - ПоказатьПредупреждение(, НСтр("ru='Некорректное представление параметра. Параметр с таким представлением уже был добавлен ранее.'")); + ПоказатьПредупреждение(, НСтр("ru = 'Некорректное представление параметра. Параметр с таким представлением уже был добавлен ранее.'")); Возврат; КонецЕсли; КонецЦикла; Если НедопустимоеИмяПараметра(ИмяПараметра) ИЛИ ПустаяСтрока(ИмяПараметра) Тогда - ПоказатьПредупреждение(, НСтр("ru='Некорректное имя параметра. Нельзя использовать пробелы, знаки пунктуации и другие спец. символы.'")); + ПоказатьПредупреждение(, НСтр("ru = 'Некорректное имя параметра. Нельзя использовать пробелы, знаки пунктуации и другие спец. символы.'")); Возврат; КонецЕсли; Если ПустаяСтрока(ПредставлениеПараметра) Тогда - ПоказатьПредупреждение(, НСтр("ru='Некорректное представление параметра.'")); + ПоказатьПредупреждение(, НСтр("ru = 'Некорректное представление параметра.'")); Возврат; КонецЕсли; Если ПустаяСтрока(ТипСтрокой) Тогда - ПоказатьПредупреждение(, НСтр("ru='Некорректный тип параметра.'")); + ПоказатьПредупреждение(, НСтр("ru = 'Некорректный тип параметра.'")); Возврат; КонецЕсли; @@ -158,9 +158,9 @@ КонецЦикла; Если ТипПараметра = Тип("Строка") Тогда - ПредставлениеТипа = "Строка"; + ПредставлениеТипа = НСтр("ru = 'Строка'"); ИначеЕсли ТипПараметра = Тип("Дата") Тогда - ПредставлениеТипа = "Дата"; + ПредставлениеТипа = НСтр("ru = 'Дата'"); КонецЕсли; Элементы.ТипСтрокой.СписокВыбора.Вставить(0, "Дата", НСтр("ru = 'Дата'")); diff --git a/SSL/src/Catalogs/ШаблоныСообщений/Forms/СформироватьСообщение/Form.form b/SSL/src/Catalogs/ШаблоныСообщений/Forms/СформироватьСообщение/Form.form index c8121a8f1..53214da66 100644 --- a/SSL/src/Catalogs/ШаблоныСообщений/Forms/СформироватьСообщение/Form.form +++ b/SSL/src/Catalogs/ШаблоныСообщений/Forms/СформироватьСообщение/Form.form @@ -383,6 +383,445 @@ false + + СтраницаПечатныеФормы + 80 + + ВыберитеПечатныеФормы + 113 + + ПечатныеФормы + 82 + + <key>ru</key> + <value>Печатные формы</value> + + true + true + + true + + + ПечатныеФормы + + None + Add + Change + CheckAll + Copy + CopyToClipboard + Delete + EndEdit + MoveDown + MoveUp + Pickup + SelectAll + ShowMultipleSelection + ShowRowRearrangement + SortListAsc + SortListDesc + UncheckAll + + ПечатныеФормыПометка + 101 + true + true + + true + + + ПечатныеФормы.Check + + + ПечатныеФормыПометкаРасширеннаяПодсказка + 103 + Label + true + true + + Left + + + + ПечатныеФормыПометкаКонтекстноеМеню + 102 + true + + CheckBoxField + Auto + true + Left + true + + + + ПечатныеФормыПредставление + 98 + true + true + + true + + + ПечатныеФормы.Presentation + + + ПечатныеФормыПредставлениеРасширеннаяПодсказка + 100 + Label + true + true + + Left + + + + ПечатныеФормыПредставлениеКонтекстноеМеню + 99 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ПечатныеФормыКоманднаяПанель + 84 + Left + true + + + ПечатныеФормыСтрокаПоиска + 86 + + ПечатныеФормыСтрокаПоискаРасширеннаяПодсказка + 88 + Label + true + true + + Left + + + + ПечатныеФормыСтрокаПоискаКонтекстноеМеню + 87 + true + + ПечатныеФормы + + true + + + + ПечатныеФормыСостояниеПросмотра + 89 + + ПечатныеФормыСостояниеПросмотраРасширеннаяПодсказка + 91 + Label + true + true + + Left + + + + ПечатныеФормыСостояниеПросмотраКонтекстноеМеню + 90 + true + + ViewStatusAddition + ПечатныеФормы + + true + + + + ПечатныеФормыУправлениеПоиском + 92 + + ПечатныеФормыУправлениеПоискомРасширеннаяПодсказка + 94 + Label + true + true + + Left + + + + ПечатныеФормыУправлениеПоискомКонтекстноеМеню + 93 + true + + SearchControlAddition + ПечатныеФормы + + true + + + + ПечатныеФормыРасширеннаяПодсказка + 85 + Label + true + true + + Left + + + + ПечатныеФормыКонтекстноеМеню + 83 + true + + true + true + true + true + true + MultiRow + 1 + 1 + AutoUse + AutoUse + true + true + false + false + false + true + Auto + Auto + true + true + AsFileRef + + ПечатныеФормы.Picture + + true + + + ФорматВложений + 104 + true + true + + true + + + ФорматВложений + + + ФорматВложенийExtendedTooltip + 106 + Label + true + true + + Left + + + + ФорматВложенийКонтекстноеМеню + 105 + true + + LabelField + Enter + true + Left + true + + + Click + ФорматВложенийНажатие + + true + true + true + + + + УпаковатьВАрхив + 107 + + <key>ru</key> + <value>Дополнительно упаковать в архив (.zip)</value> + + true + true + + true + + + УпаковатьВАрхив + + Right + + УпаковатьВАрхивExtendedTooltip + 109 + Label + true + true + + Left + + + + УпаковатьВАрхивКонтекстноеМеню + 108 + true + + CheckBoxField + Enter + true + Left + true + + + + ПереводитьИменаФайловВТранслит + 110 + true + true + + true + + + ПереводитьИменаФайловВТранслит + + Right + + ru + Сохраненные файлы будут иметь имена, содержащие только латинские буквы и цифры, для возможности переноса между различными операционными системами. Например, файл "Документ.txt" будет сохранен с именем "Document.txt". + + Button + + ПереводитьИменаФайловВТранслитРасширеннаяПодсказка + 112 + Label + true + true + + Left + + + + ПереводитьИменаФайловВТранслитКонтекстноеМеню + 111 + true + + CheckBoxField + Enter + true + Left + true + + + + ПодписьИПечать + 115 + true + true + + true + + + ПодписьИПечать + + Right + + ПодписьИПечатьРасширеннаяПодсказка + 117 + Label + true + true + + Left + + + + ПодписьИПечатьКонтекстноеМеню + 116 + true + + CheckBoxField + Enter + true + Left + true + + + true + true + + true + + + <key>ru</key> + <value>Выберите печатные формы</value> + + + ВыберитеПечатныеФормыРасширеннаяПодсказка + 114 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + auto + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Страница печатные формы</value> + + + СтраницаПечатныеФормыРасширеннаяПодсказка + 81 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + true true @@ -610,6 +1049,7 @@ ПриСозданииНаСервере LockOwner + Use true true Vertical @@ -908,6 +1348,134 @@ true + + ПечатныеФормы + + <key>ru</key> + <value>Печатные формы</value> + + 15 + + ValueList + + + true + + + true + + + + + + + ФорматВложений + + <key>ru</key> + <value>Формат вложений</value> + + 16 + + String + + + + true + + + true + + + + УпаковатьВАрхив + + <key>ru</key> + <value>Упаковать в архив</value> + + 17 + + Boolean + + + true + + + true + + + УпаковатьВАрхив + + + + ПереводитьИменаФайловВТранслит + + <key>ru</key> + <value>Переводить имена файлов в транслит</value> + + 18 + + Boolean + + + true + + + true + + + ПереводитьИменаФайловВТранслит + + + + ВыбранныеФорматыСохранения + 19 + + ValueList + + + true + + + true + + + + + + + ПодписьИПечать + + <key>ru</key> + <value>Подпись и печать</value> + + 20 + + Boolean + + + true + + + true + + + ПодписьИПечать + + + + ИмяФормыИсточникаСообщения + 21 + + String + + + + true + + + true + + СформироватьИОтправить diff --git a/SSL/src/Catalogs/ШаблоныСообщений/Forms/СформироватьСообщение/Module.bsl b/SSL/src/Catalogs/ШаблоныСообщений/Forms/СформироватьСообщение/Module.bsl index 03d29d9c5..371e49851 100644 --- a/SSL/src/Catalogs/ШаблоныСообщений/Forms/СформироватьСообщение/Module.bsl +++ b/SSL/src/Catalogs/ШаблоныСообщений/Forms/СформироватьСообщение/Module.bsl @@ -18,6 +18,10 @@ ПараметрыСообщения = Параметры.ПараметрыСообщения; ПодготовитьШаблон = Параметры.ПодготовитьШаблон; + Если ТипЗнч(ПараметрыСообщения) = Тип("Структура") И ПараметрыСообщения.Свойство("ИмяФормыИсточникаСообщения") Тогда + ИмяФормыИсточникаСообщения = ПараметрыСообщения.ИмяФормыИсточникаСообщения; + КонецЕсли; + Если ЗначениеЗаполнено(Предмет) И ТипЗнч(Предмет) <> Тип("Строка") Тогда ПолноеИмяТипаОснования = Предмет.Метаданные().ПолноеИмя(); КонецЕсли; @@ -41,12 +45,21 @@ Если РежимВыбора Тогда Элементы.ФормаСформироватьИОтправить.Видимость = Ложь; - Элементы.ФормаСформировать.Заголовок = НСтр("ru='Выбрать'"); + Элементы.ФормаСформировать.Заголовок = НСтр("ru = 'Выбрать'"); ИначеЕсли ПодготовитьШаблон Тогда Элементы.ФормаСформироватьИОтправить.Видимость = Ложь; КонецЕсли; ЗаполнитьСписокДоступныхШаблонов(); + ЗаполнитьСписокПечатныхФорм(); + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Печать") Тогда + МодульУправлениеПечатью = ОбщегоНазначения.ОбщийМодуль("УправлениеПечатью"); + Для Каждого ФорматСохранения Из МодульУправлениеПечатью.НастройкиФорматовСохраненияТабличногоДокумента() Цикл + ВыбранныеФорматыСохранения.Добавить(Строка(ФорматСохранения.ТипФайлаТабличногоДокумента), Строка(ФорматСохранения.Ссылка), Ложь, ФорматСохранения.Картинка); + КонецЦикла; + Элементы.ПодписьИПечать.Видимость = МодульУправлениеПечатью.НастройкиПечати().ИспользоватьПодписиИПечати; + КонецЕсли; КонецПроцедуры @@ -68,7 +81,10 @@ &НаКлиенте Процедура ПриОткрытии(Отказ) - Если НЕ ПоказыватьФормуВыбораШаблонов Тогда + Если ПоказыватьФормуВыбораШаблонов Тогда + УстановитьВыборФормата(); + СформироватьПредставлениеВыбранныхФорматов(); + Иначе ПараметрыОтправки = КонструкторПараметровОтправки(); ПараметрыОтправки.ДополнительныеПараметры.ПреобразовыватьHTMLДляФорматированногоДокумента = Ложь; СформироватьСообщениеДляОтправки(ПараметрыОтправки); @@ -98,13 +114,18 @@ &НаКлиенте Процедура ШаблоныПриАктивизацииСтроки(Элемент) Если Элемент.ТекущиеДанные <> Неопределено Тогда - Элементы.ФормаСформироватьИОтправить.Доступность = (Элемент.ТекущиеДанные.Имя <> "<БезШаблона>"); - Если Элемент.ТекущиеДанные.ТипТекстаПисьма = ПредопределенноеЗначение("Перечисление.СпособыРедактированияЭлектронныхПисем.HTML") Тогда - Элементы.СтраницыПредпросмотра.ТекущаяСтраница = Элементы.СтраницаФорматированныйДокумент; - ПодключитьОбработчикОжидания("ОбновитьДанныеПредпросмотра", 0.2, Истина); + ШаблонВыбран = Элемент.ТекущиеДанные.Имя <> "<БезШаблона>"; + Элементы.ФормаСформироватьИОтправить.Доступность = ШаблонВыбран; + Если ШаблонВыбран Тогда + Если Элемент.ТекущиеДанные.ТипТекстаПисьма = ПредопределенноеЗначение("Перечисление.СпособыРедактированияЭлектронныхПисем.HTML") Тогда + Элементы.СтраницыПредпросмотра.ТекущаяСтраница = Элементы.СтраницаФорматированныйДокумент; + ПодключитьОбработчикОжидания("ОбновитьДанныеПредпросмотра", 0.2, Истина); + Иначе + Элементы.СтраницыПредпросмотра.ТекущаяСтраница = Элементы.СтраницаОбычныйТекст; + ПредпросмотрОбычныйТекст.УстановитьТекст(Элемент.ТекущиеДанные.ТекстШаблона); + КонецЕсли; Иначе - Элементы.СтраницыПредпросмотра.ТекущаяСтраница = Элементы.СтраницаОбычныйТекст; - ПредпросмотрОбычныйТекст.УстановитьТекст(Элемент.ТекущиеДанные.ТекстШаблона); + Элементы.СтраницыПредпросмотра.ТекущаяСтраница = Элементы.СтраницаПечатныеФормы; КонецЕсли; КонецЕсли; КонецПроцедуры @@ -126,6 +147,16 @@ КонецПроцедуры +&НаКлиенте +Процедура ФорматВложенийНажатие(Элемент, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + + ОписаниеОповещения = Новый ОписаниеОповещения("ПриВыбореФорматаВложений", ЭтотОбъект); + ОбщегоНазначенияКлиент.ПоказатьВыборФорматаВложений(ОписаниеОповещения, ВыбранныеНастройкиФормата(), ЭтотОбъект); + +КонецПроцедуры + #КонецОбласти #Область ОбработчикиКомандФормы @@ -201,6 +232,10 @@ &НаКлиенте Процедура СформироватьСообщениеДляОтправки(ПараметрыОтправки) + Если Не ЗначениеЗаполнено(ПараметрыОтправки.Шаблон) И ПечатныеФормы.Количество() > 0 Тогда + СохранитьВыборПечатныхФорм(); + КонецЕсли; + АдресВременногоХранилища = Неопределено; АдресВременногоХранилища = ПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификатор); @@ -357,6 +392,16 @@ ПараметрыОтправки.ДополнительныеПараметры.ВидСообщения = ВидСообщения; ПараметрыОтправки.ДополнительныеПараметры.ПараметрыСообщения = ПараметрыСообщения; + Если Не ЗначениеЗаполнено(Шаблон) Тогда + Для Каждого ПечатнаяФорма Из ПечатныеФормы Цикл + Если ПечатнаяФорма.Пометка Тогда + ПараметрыОтправки.ДополнительныеПараметры.ПечатныеФормы.Добавить(ПечатнаяФорма.Значение); + КонецЕсли; + КонецЦикла; + + ПараметрыОтправки.ДополнительныеПараметры.НастройкиСохранения = ВыбранныеНастройкиФормата(); + КонецЕсли; + Возврат ПараметрыОтправки; КонецФункции @@ -471,4 +516,144 @@ КонецПроцедуры +&НаКлиенте +Процедура УстановитьВыборФормата(Знач ФорматыСохранения = Неопределено) + + ЕстьВыбранныйФормат = Ложь; + Для Каждого ВыбранныйФормат Из ВыбранныеФорматыСохранения Цикл + Если ФорматыСохранения <> Неопределено Тогда + ВыбранныйФормат.Пометка = ФорматыСохранения.Найти(ВыбранныйФормат.Значение) <> Неопределено; + КонецЕсли; + + Если ВыбранныйФормат.Пометка Тогда + ЕстьВыбранныйФормат = Истина; + КонецЕсли; + КонецЦикла; + + Если Не ЕстьВыбранныйФормат Тогда + ВыбранныеФорматыСохранения[0].Пометка = Истина; // Выбор по умолчанию - первый в списке. + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура СформироватьПредставлениеВыбранныхФорматов() + + ФорматВложений = ""; + КоличествоФорматов = 0; + Для Каждого ВыбранныйФормат Из ВыбранныеФорматыСохранения Цикл + Если ВыбранныйФормат.Пометка Тогда + Если Не ПустаяСтрока(ФорматВложений) Тогда + ФорматВложений = ФорматВложений + ", "; + КонецЕсли; + ФорматВложений = ФорматВложений + ВыбранныйФормат.Представление; + КоличествоФорматов = КоличествоФорматов + 1; + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +&НаКлиенте +Функция ВыбранныеНастройкиФормата() + + Результат = Неопределено; + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Печать") Тогда + МодульУправлениеПечатьюКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеПечатьюКлиент"); + Результат = МодульУправлениеПечатьюКлиент.НастройкиСохранения(); + + Для Каждого ВыбранныйФормат Из ВыбранныеФорматыСохранения Цикл + Если ВыбранныйФормат.Пометка Тогда + Результат.ФорматыСохранения.Добавить(ВыбранныйФормат.Значение); + КонецЕсли; + КонецЦикла; + + Результат.УпаковатьВАрхив = УпаковатьВАрхив; + Результат.ПереводитьИменаФайловВТранслит = ПереводитьИменаФайловВТранслит; + Результат.ПодписьИПечать = ПодписьИПечать; + КонецЕсли; + + Возврат Результат; + +КонецФункции + +&НаКлиенте +Процедура ПриВыбореФорматаВложений(ВыбранноеЗначение, ДополнительныеПараметры) Экспорт + + Если ВыбранноеЗначение <> КодВозвратаДиалога.Отмена И ВыбранноеЗначение <> Неопределено Тогда + УстановитьВыборФормата(ВыбранноеЗначение.ФорматыСохранения); + УпаковатьВАрхив = ВыбранноеЗначение.УпаковатьВАрхив; + ПереводитьИменаФайловВТранслит = ВыбранноеЗначение.ПереводитьИменаФайловВТранслит; + СформироватьПредставлениеВыбранныхФорматов(); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ЗаполнитьСписокПечатныхФорм() + + Если ВидСообщения = "СообщениеSMS" Или РежимВыбора Или ПодготовитьШаблон + Или ТипЗнч(Предмет) = Тип("Строка") Или Не ЗначениеЗаполнено(Предмет) Тогда + Элементы.ВыберитеПечатныеФормы.Видимость = Ложь; + Возврат; + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Печать") Тогда + МодульУправлениеПечатью = ОбщегоНазначения.ОбщийМодуль("УправлениеПечатью"); + + КомандыПечати = Неопределено; + Если ЗначениеЗаполнено(ИмяФормыИсточникаСообщения) Тогда + КомандыПечати = ОбщегоНазначения.ТаблицаЗначенийВМассив(МодульУправлениеПечатью.КомандыПечатиФормы( + ИмяФормыИсточникаСообщения, ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Предмет.Метаданные()))); + КонецЕсли; + + Если Не ЗначениеЗаполнено(КомандыПечати) Тогда + Элементы.ВыберитеПечатныеФормы.Видимость = Ложь; + Возврат; + КонецЕсли; + + ВыбранныеРанееПечатныеФормы = ВыбранныеРанееПечатныеФормы(); + + Для Каждого КомандаПечати Из КомандыПечати Цикл + Пометка = ВыбранныеРанееПечатныеФормы.Найти(КомандаПечати.УникальныйИдентификатор) <> Неопределено; + ПечатныеФормы.Добавить(КомандаПечати, КомандаПечати.Представление, Пометка); + КонецЦикла; + + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура СохранитьВыборПечатныхФорм() + + Если Не ЗначениеЗаполнено(ИмяФормыИсточникаСообщения) Тогда + Возврат; + КонецЕсли; + + Идентификаторы = Новый Массив; + Для Каждого ПечатнаяФорма Из ПечатныеФормы Цикл + Если ПечатнаяФорма.Пометка Тогда + Идентификаторы.Добавить(ПечатнаяФорма.Значение.УникальныйИдентификатор); + КонецЕсли; + КонецЦикла; + + ОбщегоНазначения.ХранилищеОбщихНастроекСохранить( + "ОтправкаПечатныхФормБезШаблона", ИмяФормыИсточникаСообщения, Идентификаторы); + +КонецПроцедуры + +&НаСервере +Функция ВыбранныеРанееПечатныеФормы() + + Результат = Новый Массив; + + Если ЗначениеЗаполнено("ИмяФормыИсточникаСообщения") Тогда + Результат = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( + "ОтправкаПечатныхФормБезШаблона", ИмяФормыИсточникаСообщения, Новый Массив); + КонецЕсли; + + Возврат Результат; + +КонецФункции + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаСписка/Form.form index 710c5d59d..43296f887 100644 --- a/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаСписка/Form.form @@ -782,9 +782,9 @@ ИНАЧЕ &ЭлектроннаяПочта КОНЕЦ КАК ШаблонДля, ВЫБОР - КОГДА СправочникШаблоныСообщений.Назначение = "" + КОГДА СправочникШаблоныСообщений.ПолноеИмяТипаПараметраВводаНаОсновании = "" ТОГДА &Общий - ИНАЧЕ СправочникШаблоныСообщений.Назначение + ИНАЧЕ СправочникШаблоныСообщений.ПолноеИмяТипаПараметраВводаНаОсновании КОНЕЦ КАК Назначение, СправочникШаблоныСообщений.ВладелецШаблона Как ВладелецШаблона, 0 ЕстьФайлы diff --git a/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаСписка/Module.bsl index 8940ce837..744ae69c1 100644 --- a/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаСписка/Module.bsl @@ -45,8 +45,7 @@ &НаКлиенте Процедура НазначениеФильтрПриИзменении(Элемент) - ВыбранныйЭлемент = Элементы.НазначениеФильтр.СписокВыбора.НайтиПоЗначению(Назначение); - УстановитьФильтрНазначение(ВыбранныйЭлемент.Представление); + УстановитьФильтрНазначение(Назначение); КонецПроцедуры &НаКлиенте @@ -104,21 +103,6 @@ Список.Параметры.УстановитьЗначениеПараметра("ПоказыватьКонтекстныеШаблоны", Элементы.ФормаПоказыватьКонтекстныеШаблоны.Пометка); КонецПроцедуры -&НаСервере -Процедура УстановитьУсловноеОформление() - - Список.УсловноеОформление.Элементы.Очистить(); - Элемент = Список.УсловноеОформление.Элементы.Добавить(); - - ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); - ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Ссылка.ВладелецШаблона"); - ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено; - ОтборЭлемента.ПравоеЗначение = Истина; - - Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет); - -КонецПроцедуры - #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -164,10 +148,11 @@ Элементы.НазначениеФильтр.СписокВыбора.Добавить("", НСтр("ru = 'Все'")); - ОбщийПредставление = НСтр("ru = 'Общий'"); - Список.Параметры.УстановитьЗначениеПараметра("Общий", ОбщийПредставление); - Элементы.НазначениеФильтр.СписокВыбора.Добавить("Общий", ОбщийПредставление); - + Список.Параметры.УстановитьЗначениеПараметра(ШаблоныСообщенийКлиентСервер.ИдентификаторОбщий(), + ШаблоныСообщенийКлиентСервер.ИдентификаторОбщий()); + Элементы.НазначениеФильтр.СписокВыбора.Добавить(ШаблоныСообщенийКлиентСервер.ИдентификаторОбщий(), + ШаблоныСообщенийКлиентСервер.ОбщийПредставление()); + Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ @@ -185,11 +170,16 @@ |УПОРЯДОЧИТЬ ПО | Назначение"; - Запрос.УстановитьПараметр("Общий", ОбщийПредставление); + Запрос.УстановитьПараметр("Общий", ШаблоныСообщенийКлиентСервер.ИдентификаторОбщий()); РезультатЗапроса = Запрос.Выполнить().Выбрать(); + ПриОпределенииНастроек = ШаблоныСообщенийСлужебныйПовтИсп.ПриОпределенииНастроек(); + ПредметыШаблонов = ПриОпределенииНастроек.ПредметыШаблонов; Пока РезультатЗапроса.Следующий() Цикл - Элементы.НазначениеФильтр.СписокВыбора.Добавить(РезультатЗапроса.ПолноеИмяТипаПараметраВводаНаОсновании, РезультатЗапроса.Назначение); + НайденнаяСтрока = ПредметыШаблонов.Найти(РезультатЗапроса.ПолноеИмяТипаПараметраВводаНаОсновании, "Имя"); + Представление = ?( НайденнаяСтрока <> Неопределено, НайденнаяСтрока.Представление, РезультатЗапроса.Назначение); + + Элементы.НазначениеФильтр.СписокВыбора.Добавить(РезультатЗапроса.ПолноеИмяТипаПараметраВводаНаОсновании, Представление); КонецЦикла; Назначение = ""; @@ -197,4 +187,52 @@ КонецПроцедуры +&НаСервере +Процедура УстановитьУсловноеОформление() + + Список.УсловноеОформление.Элементы.Очистить(); + Элемент = Список.УсловноеОформление.Элементы.Добавить(); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Ссылка.ВладелецШаблона"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено; + ОтборЭлемента.ПравоеЗначение = Истина; + + Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет); + + // + Элемент = Список.УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.Назначение.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Назначение"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = ШаблоныСообщенийКлиентСервер.ИдентификаторОбщий(); + + Элемент.Оформление.УстановитьЗначениеПараметра("Текст", ШаблоныСообщенийКлиентСервер.ОбщийПредставление()); + + // + ПриОпределенииНастроек = ШаблоныСообщенийСлужебныйПовтИсп.ПриОпределенииНастроек(); + ПредметыШаблонов = ПриОпределенииНастроек.ПредметыШаблонов; + + Для каждого ПредметШаблона Из ПредметыШаблонов Цикл + + Элемент = Список.УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.Назначение.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Назначение"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = ПредметШаблона.Имя; + + Элемент.Оформление.УстановитьЗначениеПараметра("Текст", ПредметШаблона.Представление); + + КонецЦикла; + +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаЭлемента/Form.form index d7aab4351..68874d486 100644 --- a/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаЭлемента/Form.form @@ -783,7 +783,7 @@ <extInfo xsi:type="form:UsualGroupExtInfo"> <group>HorizontalIfPossible</group> <behavior>Auto</behavior> - <representation>WeakSeparation</representation> + <controlRepresentation>Button</controlRepresentation> <showLeftMargin>true</showLeftMargin> <united>true</united> <throughAlign>Auto</throughAlign> @@ -2776,7 +2776,7 @@ </contextMenu> <changeRowSet>true</changeRowSet> <autoMaxWidth>true</autoMaxWidth> - <height>7</height> + <height>4</height> <autoMaxHeight>true</autoMaxHeight> <autoMaxRowsCount>true</autoMaxRowsCount> <rowSelectionMode>Row</rowSelectionMode> diff --git a/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаЭлемента/Module.bsl index 3e8ca803a..a2bea78f6 100644 --- a/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаЭлемента/Module.bsl @@ -17,7 +17,8 @@ ПараметрыСообщения = Параметры.ПараметрыСообщения; КонецЕсли; - Элементы.ПолноеИмяТипаПараметраВводаНаОсновании.СписокВыбора.Добавить("Общий", НСтр("ru='Общий'")); + Элементы.ПолноеИмяТипаПараметраВводаНаОсновании.СписокВыбора.Добавить(ШаблоныСообщенийКлиентСервер.ИдентификаторОбщий(), + ШаблоныСообщенийКлиентСервер.ОбщийПредставление()); НастройкиШаблоновСообщений = ШаблоныСообщенийСлужебныйПовтИсп.ПриОпределенииНастроек(); Для каждого ПредметШаблона Из НастройкиШаблоновСообщений.ПредметыШаблонов Цикл Элементы.ПолноеИмяТипаПараметраВводаНаОсновании.СписокВыбора.Добавить(ПредметШаблона.Имя, ПредметШаблона.Представление); @@ -60,7 +61,6 @@ Если Параметры.Свойство("ВладелецШаблона") Тогда Элементы.ГруппаНазначение.Видимость = Ложь; - Элементы.ГруппаДоступ.Видимость = Ложь; Элементы.ФормаГруппаСообщениеФормируется.Видимость = Ложь; Элементы.Назначение.Видимость = Ложь; КонецЕсли; @@ -69,6 +69,11 @@ Элементы.ТемаПисьма.МногострочныйРежим = Истина; КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Печать") Тогда + МодульУправлениеПечатью = ОбщегоНазначения.ОбщийМодуль("УправлениеПечатью"); + Элементы.ПодписьИПечать.Видимость = МодульУправлениеПечатью.НастройкиПечати().ИспользоватьПодписиИПечати; + КонецЕсли; + КонецПроцедуры &НаСервере @@ -99,9 +104,9 @@ ЗаполнитьПроизвольныеПараметрыИзОбъекта(ТекущийОбъект); Если ПустаяСтрока(Объект.ПолноеИмяТипаПараметраВводаНаОсновании) Тогда - Объект.Назначение = НСтр("ru='Общий'"); + Объект.Назначение = ШаблоныСообщенийКлиентСервер.ОбщийПредставление(); Объект.ПредназначенДляВводаНаОсновании = Ложь; - Объект.ПолноеИмяТипаПараметраВводаНаОсновании = НСтр("ru='Общий'"); + Объект.ПолноеИмяТипаПараметраВводаНаОсновании = ШаблоныСообщенийКлиентСервер.ИдентификаторОбщий(); КонецЕсли; // СтандартныеПодсистемы.УправлениеДоступом @@ -120,7 +125,7 @@ Если Не Объект.ПредназначенДляВводаНаОсновании Тогда Объект.ПолноеИмяТипаПараметраВводаНаОсновании = ""; - Объект.Назначение = НСтр("ru='Общий'"); + Объект.Назначение = ШаблоныСообщенийКлиентСервер.ИдентификаторОбщий(); КонецЕсли; КонецПроцедуры @@ -130,7 +135,7 @@ РезультатПроверкиШаблоны = РезультатПроверкиШаблоны(); Если ЗначениеЗаполнено(РезультатПроверкиШаблоны) Тогда - ОбщегоНазначения.СообщитьПользователю(НСтр("ru='Шаблон сообщения не может быть записан.'") + ОбщегоНазначения.СообщитьПользователю(НСтр("ru = 'Шаблон сообщения не может быть записан.'") + Символы.ПС + РезультатПроверкиШаблоны); Отказ = Истина; Возврат; @@ -261,9 +266,9 @@ Оповестить("Запись_ШаблоныСообщений", Объект.Ссылка, ЭтотОбъект); Если ПустаяСтрока(Объект.ПолноеИмяТипаПараметраВводаНаОсновании) Тогда - Объект.Назначение = НСтр("ru='Общий'"); + Объект.Назначение = ШаблоныСообщенийКлиентСервер.ОбщийПредставление(); Объект.ПредназначенДляВводаНаОсновании = Ложь; - Объект.ПолноеИмяТипаПараметраВводаНаОсновании = НСтр("ru='Общий'"); + Объект.ПолноеИмяТипаПараметраВводаНаОсновании = ШаблоныСообщенийКлиентСервер.ИдентификаторОбщий(); КонецЕсли; КонецПроцедуры @@ -292,9 +297,9 @@ &НаКлиенте Процедура ПолноеИмяТипаПараметраВводаНаОснованииПриИзменении(Элемент) Если ПустаяСтрока(Объект.ПолноеИмяТипаПараметраВводаНаОсновании) Тогда - Объект.ПолноеИмяТипаПараметраВводаНаОсновании = "Общий"; + Объект.ПолноеИмяТипаПараметраВводаНаОсновании = ШаблоныСообщенийКлиентСервер.ИдентификаторОбщий(); КонецЕсли; - Объект.ПредназначенДляВводаНаОсновании = (Объект.ПолноеИмяТипаПараметраВводаНаОсновании <> "Общий"); + Объект.ПредназначенДляВводаНаОсновании = (Объект.ПолноеИмяТипаПараметраВводаНаОсновании <> ШаблоныСообщенийКлиентСервер.ИдентификаторОбщий()); Объект.Назначение = Элементы.ПолноеИмяТипаПараметраВводаНаОсновании.ТекстРедактирования; СформироватьСписокРеквизитовИПечатныхФорм(); КонецПроцедуры @@ -870,7 +875,7 @@ ИначеЕсли Параметры.Основание = Неопределено Тогда Объект.ПредназначенДляВводаНаОсновании = Ложь; - Объект.ПолноеИмяТипаПараметраВводаНаОсновании = "Общий"; + Объект.ПолноеИмяТипаПараметраВводаНаОсновании = ШаблоныСообщенийКлиентСервер.ИдентификаторОбщий(); КонецЕсли; @@ -887,18 +892,88 @@ Объект.ТолькоДляАвтора = Ложь; Иначе - Если Объект.ТипТекстаПисьма = Перечисления.СпособыРедактированияЭлектронныхПисем.HTML Тогда - СтруктураВложений = Новый Структура; - ТелоПисьмаВHTML.УстановитьHTML(Объект.ТекстШаблонаПисьмаHTML, СтруктураВложений); - Иначе - ТелоСообщенияОбычныйТекст.УстановитьТекст(Объект.ТекстШаблонаПисьма); + + ШаблонСформирован = Ложь; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Взаимодействия") Тогда + + МодульУправлениеЭлектроннойПочтой = ОбщегоНазначения.ОбщийМодуль("УправлениеЭлектроннойПочтой"); + Если МодульУправлениеЭлектроннойПочтой.ЯвляетсяПисьмомИлиСообщением(Параметры.Основание) Тогда + ШаблонНаОснованииДокументаВзаимодействия(); + ШаблонСформирован = Истина; + КонецЕсли; + КонецЕсли; + + Если Не ШаблонСформирован Тогда + + Если Объект.ТипТекстаПисьма = Перечисления.СпособыРедактированияЭлектронныхПисем.HTML Тогда + ТелоПисьмаВHTML.УстановитьHTML(Объект.ТекстШаблонаПисьмаHTML, Новый Структура); + Иначе + ТелоСообщенияОбычныйТекст.УстановитьТекст(Объект.ТекстШаблонаПисьма); + КонецЕсли; + + КонецЕсли; + КонецЕсли; Параметры.Свойство("ВладелецШаблона", Объект.ВладелецШаблона); КонецПроцедуры +&НаСервере +Процедура ШаблонНаОснованииДокументаВзаимодействия() + + Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Взаимодействия") + Или Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда + Возврат; + КонецЕсли; + + МодульУправлениеЭлектроннойПочтой = ОбщегоНазначения.ОбщийМодуль("УправлениеЭлектроннойПочтой"); + МодульРаботаСФайлами = ОбщегоНазначения.ОбщийМодуль("РаботаСФайлами"); + МодульРаботаСФайламиКлиентСервер = ОбщегоНазначения.ОбщийМодуль("РаботаСФайламиКлиентСервер"); + + ВложенияПисьма = МодульУправлениеЭлектроннойПочтой.ВложенияЭлектронногоПисьма(Параметры.Основание, УникальныйИдентификатор); + + ДополнительныеПараметрыФайла = МодульРаботаСФайламиКлиентСервер.ПараметрыДанныхФайла(); + ДополнительныеПараметрыФайла.ИдентификаторФормы = УникальныйИдентификатор; + ДополнительныеПараметрыФайла.ВызыватьИсключение = Ложь; + + Для каждого Вложение Из ВложенияПисьма Цикл + Если ПустаяСтрока(Вложение.ИДФайлаЭлектронногоПисьма) Тогда + + Расширение = ПолучитьРасширениеФайла(Вложение.Наименование); + НоваяСтрока = Вложения.Добавить(); + НоваяСтрока.Статус = "ВнешнийНовый"; + НоваяСтрока.Выбрано = 1; + НоваяСтрока.Представление = Вложение.Наименование; + НоваяСтрока.Идентификатор = Вложение.Наименование; + НоваяСтрока.ИндексКартинки = ПолучитьИндексПиктограммыФайла(Расширение); + НоваяСтрока.Имя = МодульРаботаСФайлами.ДанныеФайла(Вложение.Ссылка, + ДополнительныеПараметрыФайла).СсылкаНаДвоичныеДанныеФайла; + КонецЕсли; + КонецЦикла; + + Если Объект.ТипТекстаПисьма = Перечисления.СпособыРедактированияЭлектронныхПисем.HTML Тогда + + ПараметрШаблона = Новый Структура("Шаблон, УникальныйИдентификатор"); + ПараметрШаблона.Шаблон = Объект.Ссылка; + ПараметрШаблона.УникальныйИдентификатор = УникальныйИдентификатор; + Сообщение = ШаблоныСообщенийСлужебный.КонструкторСообщения(); + Сообщение.Текст = Объект.ТекстШаблонаПисьмаHTML; + ШаблоныСообщенийСлужебный.ОбработатьHTMLДляФорматированногоДокумента(ПараметрШаблона, Сообщение, Истина, ВложенияПисьма); + СтруктураВложений = Новый Структура(); + Для каждого ВложениеВHTML Из Сообщение.Вложения Цикл + Изображение = Новый Картинка(ПолучитьИзВременногоХранилища(ВложениеВHTML.АдресВоВременномХранилище)); + СтруктураВложений.Вставить(ВложениеВHTML.Представление, Изображение); + КонецЦикла; + ТелоПисьмаВHTML.УстановитьHTML(Сообщение.Текст, СтруктураВложений); + + Иначе + ТелоСообщенияОбычныйТекст.УстановитьТекст(Объект.ТекстШаблонаПисьма); + КонецЕсли; + +КонецПроцедуры + &НаСервере Процедура ИнициализироватьФорматыСохранения() @@ -1079,8 +1154,6 @@ &НаСервере Процедура СформироватьСписокПечатныхФорм(СведенияОШаблоне) - Перем Вложение, ВнутренниеВложение, ВыбранныеПечатныеФормыИВложения, Выбрано, НесохраненныеФайл, НесохраненныеФайлы, НоваяСтрока, Отбор, Расширение, ФайлВложение; - ВыбранныеПечатныеФормыИВложения = Объект.ПечатныеФормыИВложения.Выгрузить(, "Идентификатор").ВыгрузитьКолонку("Идентификатор"); Отбор = Новый Структура("Статус", "ВнешнийНовый"); @@ -1089,22 +1162,6 @@ Для каждого Вложение Из СведенияОШаблоне.Вложения Цикл - ВнутренниеВложение = Ложь; - Для каждого ФайлВложение Из НесохраненныеФайлы Цикл - Если ФайлВложение.Идентификатор = Вложение.Идентификатор Тогда - ВнутренниеВложение = Истина; - Расширение = ?(ПустаяСтрока(Вложение.ТипФайла), "mxl", Вложение.ТипФайла); - ФайлВложение.ИндексКартинки = ПолучитьИндексПиктограммыФайла(Расширение); - ФайлВложение.Реквизит = Вложение.Реквизит; - ФайлВложение.Выбрано = 1; - ФайлВложение.Представление = Вложение.Представление; - Прервать; - КонецЕсли; - КонецЦикла; - Если ВнутренниеВложение Тогда - Продолжить; - КонецЕсли; - Выбрано = 0; Если ВыбранныеПечатныеФормыИВложения.Найти(Вложение.Идентификатор) <> Неопределено Тогда Выбрано = 1; @@ -1122,10 +1179,12 @@ ЗаполнитьВложения(); Для каждого НесохраненныеФайл Из НесохраненныеФайлы Цикл - НоваяСтрока = Вложения.Добавить(); - ЗаполнитьЗначенияСвойств(НоваяСтрока, НесохраненныеФайл); + Если ВыбранныеПечатныеФормыИВложения.Найти(НесохраненныеФайл.Идентификатор) = Неопределено Тогда + НоваяСтрока = Вложения.Добавить(); + ЗаполнитьЗначенияСвойств(НоваяСтрока, НесохраненныеФайл); + КонецЕсли; КонецЦикла; - + КонецПроцедуры &НаСервере @@ -1438,7 +1497,7 @@ СписокФайлов = Новый Массив; СписокОшибок = Неопределено; - ОписаниеОшибки = НСтр("ru='Не удалось скопировать вложение по причине: %1'"); + ОписаниеОшибки = НСтр("ru = 'Не удалось скопировать вложение по причине: %1'"); Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда МодульРаботаСФайлами = ОбщегоНазначения.ОбщийМодуль("РаботаСФайлами"); @@ -1450,7 +1509,7 @@ Исключение ИнформацияОбОшибке = ИнформацияОбОшибке(); - ЗаписатьОшибкуВЖурналРегистрации(ИмяСобытияШаблоныСообщений(), ИнформацияОбОшибке, НСтр("ru='Не удалось извлечь и записать присоединенный файл для копирования'")); + ЗаписатьОшибкуВЖурналРегистрации(ИмяСобытияШаблоныСообщений(), ИнформацияОбОшибке, НСтр("ru = 'Не удалось извлечь и записать присоединенный файл для копирования'")); ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ОписаниеОшибки, КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(СписокОшибок, "Вложения", ТекстОшибки, "Вложения",, ТекстОшибки); Продолжить; @@ -1491,9 +1550,19 @@ &НаСервере Процедура УдалитьПрисоединенныйФайл(ПрисоединенныйФайл) - ОбъектВложение = ПрисоединенныйФайл.ПолучитьОбъект(); + УстановитьПривилегированныйРежим(Истина); + + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Справочник.ШаблоныСообщенийПрисоединенныеФайлы"); + ЭлементБлокировки.УстановитьЗначение("Ссылка", ПрисоединенныйФайл); + Блокировка.Заблокировать(); + + ОбъектВложение = ПрисоединенныйФайл.ПолучитьОбъект(); + ОбъектВложение.Заблокировать(); + ОбъектВложение.Удалить(); + КонецПроцедуры &НаСервере @@ -1538,9 +1607,18 @@ "_" + СтрЗаменить(Вложение.Представление, "-", "_"), ДвоичныеДанныеКартинки.Размер()); Если ПрисоединенныйФайл <> Неопределено Тогда + + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Справочник.ШаблоныСообщенийПрисоединенныеФайлы"); + ЭлементБлокировки.УстановитьЗначение("Ссылка", ПрисоединенныйФайл); + Блокировка.Заблокировать(); + ПрисоединенныйФайлОбъект = ПрисоединенныйФайл.ПолучитьОбъект(); + ПрисоединенныйФайлОбъект.Заблокировать(); + ПрисоединенныйФайлОбъект.ИДФайлаЭлектронногоПисьма = Вложение.Представление; ПрисоединенныйФайлОбъект.Записать(); + КонецЕсли; КонецЦикла; КонецЕсли; @@ -1566,13 +1644,10 @@ Лев(ИмяБезРасширения, СтрДлина(ИмяБезРасширения) - СтрДлина(РасширениеБезТочки) - 1)); КонецЕсли; - ПараметрыФайла = Новый Структура; - ПараметрыФайла.Вставить("ВладелецФайлов", Письмо); - ПараметрыФайла.Вставить("Автор", Неопределено); - ПараметрыФайла.Вставить("ИмяБезРасширения", ИмяБезРасширения); - ПараметрыФайла.Вставить("РасширениеБезТочки", РасширениеБезТочки); - ПараметрыФайла.Вставить("ВремяИзменения", Неопределено); - ПараметрыФайла.Вставить("ВремяИзмененияУниверсальное", Неопределено); + ПараметрыФайла = МодульРаботаСФайлами.ПараметрыДобавленияФайла(); + ПараметрыФайла.ВладелецФайлов = Письмо; + ПараметрыФайла.ИмяБезРасширения = ИмяБезРасширения; + ПараметрыФайла.РасширениеБезТочки = РасширениеБезТочки; Возврат МодульРаботаСФайлами.ДобавитьФайл(ПараметрыФайла, АдресВоВременномХранилище, ""); КонецЕсли; diff --git a/SSL/src/Catalogs/ШаблоныСообщений/ManagerModule.bsl b/SSL/src/Catalogs/ШаблоныСообщений/ManagerModule.bsl index 9b0e3d35f..aef0117d3 100644 --- a/SSL/src/Catalogs/ШаблоныСообщений/ManagerModule.bsl +++ b/SSL/src/Catalogs/ШаблоныСообщений/ManagerModule.bsl @@ -29,6 +29,40 @@ // Конец СтандартныеПодсистемы.УправлениеДоступом +// СтандартныеПодсистемы.ПодключаемыеКоманды + +// Определяет список команд создания на основании. +// +// Параметры: +// КомандыСозданияНаОсновании - ТаблицаЗначений - см. СозданиеНаОснованииПереопределяемый.ПередДобавлениемКомандСозданияНаОсновании. +// Параметры - Структура - см. СозданиеНаОснованииПереопределяемый.ПередДобавлениемКомандСозданияНаОсновании. +// +Процедура ДобавитьКомандыСозданияНаОсновании(КомандыСозданияНаОсновании, Параметры) Экспорт + +КонецПроцедуры + +// Для использования в процедуре ДобавитьКомандыСозданияНаОсновании других модулей менеджеров объектов. +// Добавляет в список команд создания на основании этот объект. +// +// Параметры: +// КомандыСозданияНаОсновании - ТаблицаЗначений - см. СозданиеНаОснованииПереопределяемый.ПередДобавлениемКомандСозданияНаОсновании. +// +// Возвращаемое значение: +// СтрокаТаблицыЗначений, Неопределено - описание добавленной команды. +// +Функция ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании) Экспорт + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда + МодульСозданиеНаОсновании = ОбщегоНазначения.ОбщийМодуль("СозданиеНаОсновании"); + Возврат МодульСозданиеНаОсновании.ДобавитьКомандуСозданияНаОсновании(КомандыСозданияНаОсновании, Метаданные.Справочники.ШаблоныСообщений); + КонецЕсли; + + Возврат Неопределено; + +КонецФункции + +// Конец СтандартныеПодсистемы.ПодключаемыеКоманды + #КонецОбласти #КонецОбласти diff --git a/SSL/src/Catalogs/ШаблоныСообщений/ObjectModule.bsl b/SSL/src/Catalogs/ШаблоныСообщений/ObjectModule.bsl index 63bbd11de..2f4c14ff4 100644 --- a/SSL/src/Catalogs/ШаблоныСообщений/ObjectModule.bsl +++ b/SSL/src/Catalogs/ШаблоныСообщений/ObjectModule.bsl @@ -36,7 +36,7 @@ Наименование = ДанныеЗаполнения.Тема; ПредназначенДляЭлектронныхПисем = Истина; ПредназначенДляSMS = Ложь; - ПолноеИмяТипаПараметраВводаНаОсновании = НСтр("ru='Общий'"); + ПолноеИмяТипаПараметраВводаНаОсновании = НСтр("ru = 'Общий'"); ТипТекстаПисьма = Перечисления.СпособыРедактированияЭлектронныхПисем.ОбычныйТекст; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСПочтовымиСообщениями") Тогда diff --git a/SSL/src/Catalogs/ЭлектронноеПисьмоВходящееПрисоединенныеФайлы/ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.mdo b/SSL/src/Catalogs/ЭлектронноеПисьмоВходящееПрисоединенныеФайлы/ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.mdo index 5e641c08f..41a55a305 100644 --- a/SSL/src/Catalogs/ЭлектронноеПисьмоВходящееПрисоединенныеФайлы/ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.mdo +++ b/SSL/src/Catalogs/ЭлектронноеПисьмоВходящееПрисоединенныеФайлы/ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.mdo @@ -95,6 +95,7 @@ <maxValue xsi:type="core:UndefinedValue"/> </standardAttributes> <createOnInput>DontUse</createOnInput> + <dataLockFields>Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.ВладелецФайла</dataLockFields> <dataLockControlMode>Managed</dataLockControlMode> <fullTextSearch>Use</fullTextSearch> <objectPresentation> diff --git a/SSL/src/Catalogs/ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы/ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.mdo b/SSL/src/Catalogs/ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы/ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.mdo index 738b3f2d8..1adcd3c9e 100644 --- a/SSL/src/Catalogs/ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы/ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.mdo +++ b/SSL/src/Catalogs/ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы/ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.mdo @@ -95,6 +95,7 @@ <maxValue xsi:type="core:UndefinedValue"/> </standardAttributes> <createOnInput>DontUse</createOnInput> + <dataLockFields>Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.ВладелецФайла</dataLockFields> <dataLockControlMode>Managed</dataLockControlMode> <fullTextSearch>Use</fullTextSearch> <objectPresentation> diff --git a/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/Forms/ФормаЭлемента/Form.form b/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/Forms/ФормаЭлемента/Form.form index 9d16c0dba..122fe7ece 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/Forms/ФормаЭлемента/Form.form @@ -1053,14 +1053,6 @@ <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> <horizontalStretch>false</horizontalStretch> - <font xsi:type="core:FontRef"> - <font>System.DefaultGUIFont</font> - <height>10.0</height> - <bold>false</bold> - <italic>false</italic> - <underline>false</underline> - <strikeout>false</strikeout> - </font> </extInfo> </items> <visible>true</visible> diff --git a/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/Forms/ФормаЭлемента/Module.bsl b/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/Forms/ФормаЭлемента/Module.bsl index d1703fed6..5b6cc9fdb 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/Forms/ФормаЭлемента/Module.bsl @@ -184,18 +184,23 @@ &НаКлиенте Процедура Подключаемый_ВыполнитьКоманду(Команда) Если СтрНачинаетсяС(Команда.Имя, "ВариантыОтветовАнкет") Тогда - ПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Элементы.ТаблицаВариантыОтветов); + ПодключаемыеКомандыКлиент.НачатьВыполнениеКоманды(ЭтотОбъект, Команда, Элементы.ТаблицаВариантыОтветов); Иначе - ПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Объект); + ПодключаемыеКомандыКлиент.НачатьВыполнениеКоманды(ЭтотОбъект, Команда, Объект); КонецЕсли; КонецПроцедуры +&НаКлиенте +Процедура Подключаемый_ПродолжитьВыполнениеКомандыНаСервере(ПараметрыВыполнения, ДополнительныеПараметры) Экспорт + ВыполнитьКомандуНаСервере(ПараметрыВыполнения); +КонецПроцедуры + &НаСервере -Процедура Подключаемый_ВыполнитьКомандуНаСервере(Контекст, Результат) Экспорт - Если СтрНачинаетсяС(Контекст.ИмяКомандыВФорме, "ВариантыОтветовАнкет") Тогда - ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, Контекст, Элементы.ТаблицаВариантыОтветов, Результат); +Процедура ВыполнитьКомандуНаСервере(ПараметрыВыполнения) + Если СтрНачинаетсяС(ПараметрыВыполнения.ИмяКомандыВФорме, "ВариантыОтветовАнкет") Тогда + ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, ПараметрыВыполнения, Элементы.ТаблицаВариантыОтветов); Иначе - ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, Контекст, Объект, Результат); + ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, ПараметрыВыполнения, Объект); КонецЕсли; КонецПроцедуры diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ЗависимостьРеквизитов/Form.form b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ЗависимостьРеквизитов/Form.form index afb5a2747..d40f5a2d9 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ЗависимостьРеквизитов/Form.form +++ b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ЗависимостьРеквизитов/Form.form @@ -606,6 +606,19 @@ <common>true</common> </edit> </columns> + <columns> + <name>НаборСвойств</name> + <id>8</id> + <valueType> + <types>CatalogRef.НаборыДополнительныхРеквизитовИСведений</types> + </valueType> + <view> + <common>true</common> + </view> + <edit> + <common>true</common> + </edit> + </columns> </attributes> <attributes> <name>РеквизитыОбъектаВХранилище</name> @@ -661,6 +674,19 @@ <common>true</common> </edit> </attributes> + <attributes> + <name>НаборСвойств</name> + <id>6</id> + <valueType> + <types>CatalogRef.НаборыДополнительныхРеквизитовИСведений</types> + </valueType> + <view> + <common>true</common> + </view> + <edit> + <common>true</common> + </edit> + </attributes> <formCommands> <name>КомандаОк</name> <title> diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ЗависимостьРеквизитов/Module.bsl b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ЗависимостьРеквизитов/Module.bsl index d77be2fcc..6f79239ec 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ЗависимостьРеквизитов/Module.bsl +++ b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ЗависимостьРеквизитов/Module.bsl @@ -33,16 +33,26 @@ КонецЕсли; НаборСвойств = Параметры.Набор; - Пока ЗначениеЗаполнено(НаборСвойств.Родитель) Цикл - НаборСвойств = НаборСвойств.Родитель; - КонецЦикла; - НаборДополнительныхРеквизитов = НаборСвойств.ДополнительныеРеквизиты; + Если Не ЗначениеЗаполнено(НаборСвойств) Тогда + ТекстИсключения = НСтр("ru = 'Настройка видимости, доступности и обязательности заполнения + |доступна только при открытии дополнительного реквизита + |из списка ""Дополнительные реквизиты"".'"); + ТекстИсключения = СтрЗаменить(ТекстИсключения, Символы.ПС, " "); + ВызватьИсключение ТекстИсключения; + КонецЕсли; + + Родитель = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(НаборСвойств, "Родитель"); + Если Не ЗначениеЗаполнено(Родитель) Тогда + Родитель = НаборСвойств; + КонецЕсли; + + НаборДополнительныхРеквизитов = Родитель.ДополнительныеРеквизиты; ПредопределенныеНаборыСвойств = УправлениеСвойствамиПовтИсп.ПредопределенныеНаборыСвойств(); - ОписаниеНабора = ПредопределенныеНаборыСвойств.Получить(НаборСвойств); + ОписаниеНабора = ПредопределенныеНаборыСвойств.Получить(Родитель); Если ОписаниеНабора = Неопределено Тогда - ИмяПредопределенныхДанных = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(НаборСвойств, "ИмяПредопределенныхДанных"); + ИмяПредопределенныхДанных = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Родитель, "ИмяПредопределенныхДанных"); Иначе ИмяПредопределенныхДанных = ОписаниеНабора.Имя; КонецЕсли; @@ -57,6 +67,9 @@ СтрокаОтбора = Неопределено; ЗависимостиДополнительныхРеквизитов = Параметры.ЗависимостиРеквизитов; Для Каждого СтрокаТабличнойЧасти Из ЗависимостиДополнительныхРеквизитов Цикл + Если СтрокаТабличнойЧасти.НаборСвойств <> НаборСвойств Тогда + Продолжить; + КонецЕсли; Если СтрокаТабличнойЧасти.ЗависимоеСвойство = НастраиваемоеСвойство Тогда УсловиеЧастями = СтрРазделить(СтрокаТабличнойЧасти.Условие, " "); НовоеУсловие = ""; @@ -114,6 +127,27 @@ КонецПроцедуры +&НаКлиенте +Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) + Если ИмяСобытия = "Свойства_ВыборРеквизитаОбъекта" Тогда + ТекущаяСтрока = ЗависимостиРеквизитов.НайтиПоИдентификатору(Элементы.ЗависимостиРеквизитов.ТекущаяСтрока); + ПараметрыОтбора = Новый Структура; + ПараметрыОтбора.Вставить("Реквизит", Параметр.Реквизит); + НайденныеСтроки = ЗависимостиРеквизитов.НайтиСтроки(ПараметрыОтбора); + Если НайденныеСтроки.Количество() > 0 Тогда + Элементы.ЗависимостиРеквизитов.ТекущаяСтрока = НайденныеСтроки[0].ПолучитьИдентификатор(); + ЗависимостиРеквизитов.Удалить(ТекущаяСтрока); + Возврат; + КонецЕсли; + ЗаполнитьЗначенияСвойств(ТекущаяСтрока, Параметр); + ТекущаяСтрока.НаборСвойств = НаборСвойств; + ЗависимостиРеквизитовУстановитьОграничениеТиповДляЗначения(); + ТекущаяСтрока.ЗависимоеСвойство = НастраиваемоеСвойство; + ТекущаяСтрока.Условие = "Равно"; + ТекущаяСтрока.Значение = ТекущаяСтрока.ТипЗначения.ПривестиЗначение(Неопределено); + КонецЕсли; +КонецПроцедуры + #КонецОбласти #Область ОбработчикиСобытийЭлементовШапкиФормы @@ -276,26 +310,6 @@ КонецЕсли; КонецПроцедуры -&НаКлиенте -Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) - Если ИмяСобытия = "Свойства_ВыборРеквизитаОбъекта" Тогда - ТекущаяСтрока = ЗависимостиРеквизитов.НайтиПоИдентификатору(Элементы.ЗависимостиРеквизитов.ТекущаяСтрока); - ПараметрыОтбора = Новый Структура; - ПараметрыОтбора.Вставить("Реквизит", Параметр.Реквизит); - НайденныеСтроки = ЗависимостиРеквизитов.НайтиСтроки(ПараметрыОтбора); - Если НайденныеСтроки.Количество() > 0 Тогда - Элементы.ЗависимостиРеквизитов.ТекущаяСтрока = НайденныеСтроки[0].ПолучитьИдентификатор(); - ЗависимостиРеквизитов.Удалить(ТекущаяСтрока); - Возврат; - КонецЕсли; - ЗаполнитьЗначенияСвойств(ТекущаяСтрока, Параметр); - ЗависимостиРеквизитовУстановитьОграничениеТиповДляЗначения(); - ТекущаяСтрока.ЗависимоеСвойство = НастраиваемоеСвойство; - ТекущаяСтрока.Условие = "Равно"; - ТекущаяСтрока.Значение = ТекущаяСтрока.ТипЗначения.ПривестиЗначение(Неопределено); - КонецЕсли; -КонецПроцедуры - &НаКлиенте Процедура ЗависимостиРеквизитовУстановитьОграничениеТиповДляЗначения() diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ИзменениеНастройкиСвойства/Form.form b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ИзменениеНастройкиСвойства/Form.form index da6b81091..56f1d7cc4 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ИзменениеНастройкиСвойства/Form.form +++ b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ИзменениеНастройкиСвойства/Form.form @@ -262,7 +262,7 @@ <id>12</id> <title> <key>ru</key> - <value>Данный реквизит входит только в один набор %1, и у него общий список значений с другими реквизитами, добавленными по образцу. С помощью этого варианта удобно выполнять централизованную настройку списка значений сразу для нескольких однотипных реквизитов (например, "Цвет одежды", "Цвет обуви" и пр.).</value> + <value>У данного реквизита общий список значений с другими реквизитами, добавленными по образцу. С помощью этого варианта удобно выполнять централизованную настройку списка значений сразу для нескольких однотипных реквизитов (например, "Цвет одежды", "Цвет обуви" и пр.).</value> true true @@ -743,7 +743,7 @@ 24 <key>ru</key> - <value>Данное сведение входит только в один набор %1, и у него общий список значений с другими сведениями, добавленными по образцу. С помощью этого варианта удобно выполнять централизованную настройку списка значений сразу для нескольких однотипных сведений (например, "Цвет одежды", "Цвет обуви" и пр.).</value> + <value>У этого сведения общий список значений с другими сведениями, добавленными по образцу. С помощью этого варианта удобно выполнять централизованную настройку списка значений сразу для нескольких однотипных сведений (например, "Цвет одежды", "Цвет обуви" и пр.).</value> true true diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ИзменениеНастройкиСвойства/Module.bsl b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ИзменениеНастройкиСвойства/Module.bsl index c67b11edb..734520111 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ИзменениеНастройкиСвойства/Module.bsl +++ b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ИзменениеНастройкиСвойства/Module.bsl @@ -18,19 +18,13 @@ Элементы.ТипыСвойства.ТекущаяСтраница = Элементы.ДополнительныйРеквизит; КонецЕсли; - Если ЗначениеЗаполнено(Параметры.НаборСвойств) Тогда + Если ЗначениеЗаполнено(Параметры.ВладелецДополнительныхЗначений) Тогда Элементы.ВидыРеквизита.ТекущаяСтраница = Элементы.ВидОбщиеЗначенияРеквизитов; Элементы.ВидыСведения.ТекущаяСтраница = Элементы.ВидОбщиеЗначенияСведений; - - Если ЗначениеЗаполнено(Параметры.ВладелецДополнительныхЗначений) Тогда - ОтдельноеСвойствоСОбщимСпискомЗначений = 1; - Иначе - ОтдельноеСвойствоСОтдельнымСпискомЗначений = 1; - КонецЕсли; + ОтдельноеСвойствоСОбщимСпискомЗначений = 1; Иначе Элементы.ВидыРеквизита.ТекущаяСтраница = Элементы.ВидОбщийРеквизит; Элементы.ВидыСведения.ТекущаяСтраница = Элементы.ВидОбщееСведение; - ОбщееСвойство = 1; КонецЕсли; diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаВыбора/Form.form b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаВыбора/Form.form deleted file mode 100644 index ce754dff7..000000000 --- a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаВыбора/Form.form +++ /dev/null @@ -1,755 +0,0 @@ - - - - Список - 1 - - <key>ru</key> - <value>Список</value> - - true - true - - true - - - Список - - true - None - Delete - - Представление - 4 - true - true - - true - - - Список.Заголовок - - true - - ПредставлениеExtendedTooltip - 33 - Label - true - true - - Left - - - - ПредставлениеКонтекстноеМеню - 5 - true - - LabelField - Enter - true - Left - true - - true - true - - - - Ссылка - 35 - true - true - - - Список.Ref - - - СсылкаРасширеннаяПодсказка - 37 - Label - true - true - - Left - - - - СсылкаКонтекстноеМеню - 36 - true - - LabelField - Enter - true - Left - true - - true - true - - - None - - СписокКоманднаяПанель - 3 - Left - - - ValueChoice - СписокВыборЗначения - - - BeforeAddRow - СписокПередНачаломДобавления - - - BeforeRowChange - СписокПередНачаломИзменения - - - СписокСтрокаПоиска - 38 - - СписокСтрокаПоискаРасширеннаяПодсказка - 40 - Label - true - true - - Left - - - - СписокСтрокаПоискаКонтекстноеМеню - 39 - true - - Список - - true - - - - СписокСостояниеПросмотра - 41 - - СписокСостояниеПросмотраРасширеннаяПодсказка - 43 - Label - true - true - - Left - - - - СписокСостояниеПросмотраКонтекстноеМеню - 42 - true - - ViewStatusAddition - Список - - true - - - - СписокУправлениеПоиском - 44 - - СписокУправлениеПоискомРасширеннаяПодсказка - 46 - Label - true - true - - Left - - - - СписокУправлениеПоискомКонтекстноеМеню - 45 - true - - SearchControlAddition - Список - - true - - - - СписокExtendedTooltip - 32 - Label - true - true - - Left - - - - СписокКонтекстноеМеню - 2 - - СписокКонтекстноеМенюСоздать - 14 - true - true - - true - - - СписокКонтекстноеМенюСоздатьExtendedTooltip - 26 - Label - true - true - - Left - - - Form.StandardCommand.Create - Normal - Auto - true - true - UserCmds - Auto - - - СписокКонтекстноеМенюСкопировать - 15 - true - true - - true - - - СписокКонтекстноеМенюСкопироватьExtendedTooltip - 27 - Label - true - true - - Left - - - Form.StandardCommand.Copy - Normal - Auto - true - true - UserCmds - Auto - - - СписокКонтекстноеМенюИзменить - 16 - true - true - - true - - - СписокКонтекстноеМенюИзменитьExtendedTooltip - 28 - Label - true - true - - Left - - - Form.StandardCommand.Change - Normal - Auto - true - true - UserCmds - Auto - - - СписокКонтекстноеМенюУстановитьПометкуУдаления - 17 - true - true - - true - - - СписокКонтекстноеМенюУстановитьПометкуУдаленияExtendedTooltip - 29 - Label - true - true - - Left - - - Form.StandardCommand.SetDeletionMark - Normal - Auto - true - true - UserCmds - Auto - - - СписокКонтекстноеМенюНайти - 18 - true - true - - true - - - СписокКонтекстноеМенюНайтиExtendedTooltip - 30 - Label - true - true - - Left - - - Form.StandardCommand.Find - Normal - Auto - true - true - UserCmds - Auto - - - СписокКонтекстноеМенюОтменитьПоиск - 19 - true - true - - true - - - СписокКонтекстноеМенюОтменитьПоискExtendedTooltip - 31 - Label - true - true - - Left - - - Form.StandardCommand.CancelSearch - Normal - Auto - true - true - UserCmds - Auto - - - Tree - true - true - true - true - true - true - MultiRow - 1 - 1 - AutoUse - AutoUse - true - true - Auto - Auto - ExpandTopLevel - true - true - true - true - - Список.НомерКартинки - - - CommonPicture.ДополнительныеРеквизитыСведения - - true - - 60 - - 0001-01-01T00:00:00 - 0001-01-01T00:00:00 - - - true - true - - - - Комментарий - 6 - true - true - - true - - - Items.Список.CurrentData.Комментарий - - - КомментарийExtendedTooltip - 34 - Label - true - true - - Left - - - - КомментарийКонтекстноеМеню - 7 - true - - InputField - Enter - true - Left - true - - true - 2 - true - true - true - true - true - true - Normal - - - - ФормаКоманднаяПанель - -1 - - ФормаСоздать - 11 - true - true - - true - - - ФормаСоздатьExtendedTooltip - 20 - Label - true - true - - Left - - - Form.StandardCommand.Create - Normal - Auto - true - true - UserCmds - Auto - - - ФормаСкопировать - 12 - true - true - - true - - - ФормаСкопироватьExtendedTooltip - 21 - Label - true - true - - Left - - - Form.StandardCommand.Copy - Normal - Auto - true - true - UserCmds - Auto - - - ФормаИзменить - 13 - true - true - - true - - - ФормаИзменитьExtendedTooltip - 22 - Label - true - true - - Left - - - Form.StandardCommand.Change - Normal - Auto - true - true - UserCmds - Auto - - - ФормаУстановитьПометкуУдаления - 10 - true - true - - true - - - ФормаУстановитьПометкуУдаленияExtendedTooltip - 23 - Label - true - true - - Left - - - Form.StandardCommand.SetDeletionMark - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - ФормаНайти - 8 - true - true - - true - - - ФормаНайтиExtendedTooltip - 24 - Label - true - true - - Left - - - Form.StandardCommand.Find - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - ФормаОтменитьПоиск - 9 - true - true - - true - - - ФормаОтменитьПоискExtendedTooltip - 25 - Label - true - true - - Left - - - Form.StandardCommand.CancelSearch - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - Left - true - - - OnCreateAtServer - ПриСозданииНаСервере - - LockOwner - true - true - true - Vertical - true - true - true - auto - true - - Список - 1 - - DynamicList - - - true - - - true - - - Список.Ref - -
    true
    - - ВЫБРАТЬ - СвойстваПереопределяемый.Ссылка, - СвойстваПереопределяемый.ВерсияДанных, - СвойстваПереопределяемый.ПометкаУдаления, - СвойстваПереопределяемый.Предопределенный, - СвойстваПереопределяемый.Заголовок, - ВЫБОР - КОГДА СвойстваПереопределяемый.НаборСвойств = ЗНАЧЕНИЕ(Справочник.НаборыДополнительныхРеквизитовИСведений.ПустаяСсылка) - ТОГДА &ПредставлениеГруппировкиОбщихСвойств - КОГДА СвойстваПереопределяемый.НаборСвойств.Родитель = ЗНАЧЕНИЕ(Справочник.НаборыДополнительныхРеквизитовИСведений.ПустаяСсылка) - ТОГДА СвойстваПереопределяемый.НаборСвойств - ИНАЧЕ СвойстваПереопределяемый.НаборСвойств.Родитель.Наименование + " (" + СвойстваПереопределяемый.НаборСвойств.Наименование + ")" - КОНЕЦ КАК НаборСвойствГруппировка, - СвойстваПереопределяемый.НаборСвойств, - СвойстваПереопределяемый.ДополнительныеЗначенияИспользуются, - СвойстваПереопределяемый.ВладелецДополнительныхЗначений, - СвойстваПереопределяемый.Наименование, - СвойстваПереопределяемый.ТипЗначения, - СвойстваПереопределяемый.ЭтоДополнительноеСведение, - СвойстваПереопределяемый.МногострочноеПолеВвода, - СвойстваПереопределяемый.ЗаполнятьОбязательно, - СвойстваПереопределяемый.ЗаголовокФормыЗначения, - СвойстваПереопределяемый.ЗаголовокФормыВыбораЗначения, - СвойстваПереопределяемый.ФорматСвойства, - СвойстваПереопределяемый.Комментарий, - СвойстваПереопределяемый.Подсказка, - ВЫБОР - КОГДА СвойстваПереопределяемый.ЭтоДополнительноеСведение - ТОГДА 2 - ИНАЧЕ 1 - КОНЕЦ + ВЫБОР - КОГДА СвойстваПереопределяемый.Предопределенный - ТОГДА 6 - КОГДА СвойстваПереопределяемый.ПометкаУдаления - ТОГДА 3 - ИНАЧЕ 0 - КОНЕЦ КАК НомерКартинки -ИЗ - ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК СвойстваПереопределяемый - ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения - true - true - true - true - true - -
    - - ЭтоДополнительноеСведение - 2 - - - true - - - true - - - - ВидВыбора - 3 - - String - - - - true - - - true - - - - СписокВыбранных - 4 - - ValueList - - - true - - - true - - - - - - - НаборСвойствОтбор - 5 - - CatalogRef.НаборыДополнительныхРеквизитовИСведений - - - true - - - true - - - - ВыборВладельцаДополнительныхЗначений - - Boolean - - - - ВыборОбщегоСвойства - - Boolean - - - - ЭтоДополнительноеСведение - - - - ОтображаемыеНаборыСвойств - - - - - - - -
    diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаВыбора/Help/ru.html b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаВыбора/Help/ru.html deleted file mode 100644 index b3dd8691e..000000000 --- a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаВыбора/Help/ru.html +++ /dev/null @@ -1,14 +0,0 @@ - -

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

    -

    Открывается из списка Дополнительные реквизиты (сведения) с помощью команд Добавить - По образцу или Добавить - Общее (Общий).

    -

    Добавление по образцу

    -

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

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

    Добавление общих дополнительных реквизитов (сведений)

    -

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

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

    См. также:

    - \ No newline at end of file diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаВыбора/Module.bsl b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаВыбора/Module.bsl deleted file mode 100644 index 551462de1..000000000 --- a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаВыбора/Module.bsl +++ /dev/null @@ -1,215 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2019, ООО 1С-Софт -// Все права защищены. Эта программа и сопроводительные материалы предоставляются -// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) -// Текст лицензии доступен по ссылке: -// https://creativecommons.org/licenses/by/4.0/legalcode -/////////////////////////////////////////////////////////////////////////////////////////////////////// - -#Область ОбработчикиСобытийФормы - -&НаСервере -Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - - Если Параметры.Свойство("ЭтоВыборЗначенияДоступа") Тогда - Параметры.ЭтоДополнительноеСведение = Истина; - КонецЕсли; - - Если Параметры.ЭтоДополнительноеСведение <> Неопределено Тогда - ЭтоДополнительноеСведение = Параметры.ЭтоДополнительноеСведение; - - ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( - Список, "ЭтоДополнительноеСведение", ЭтоДополнительноеСведение, , , Истина); - КонецЕсли; - - Если Параметры.ВыборОбщегоСвойства Тогда - - ВидВыбора = "ВыборОбщегоСвойства"; - - ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( - Список, "НаборСвойств", , ВидСравненияКомпоновкиДанных.НеЗаполнено, , Истина); - - Если ЭтоДополнительноеСведение = Истина Тогда - АвтоЗаголовок = Ложь; - Заголовок = НСтр("ru = 'Выбор общего дополнительного сведения'"); - ИначеЕсли ЭтоДополнительноеСведение = Ложь Тогда - АвтоЗаголовок = Ложь; - Заголовок = НСтр("ru = 'Выбор общего дополнительного реквизита'"); - КонецЕсли; - - ИначеЕсли Параметры.ВыборВладельцаДополнительныхЗначений Тогда - - ВидВыбора = "ВыборВладельцаДополнительныхЗначений"; - - ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( - Список, "НаборСвойств", , ВидСравненияКомпоновкиДанных.Заполнено, , Истина); - - ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( - Список, "ДополнительныеЗначенияИспользуются", Истина, , , Истина); - - ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( - Список, "ВладелецДополнительныхЗначений", , - ВидСравненияКомпоновкиДанных.НеЗаполнено, , Истина); - - АвтоЗаголовок = Ложь; - Заголовок = НСтр("ru = 'Выбор образца'"); - - Элементы.ФормаСоздать.Видимость = Ложь; - Элементы.ФормаСкопировать.Видимость = Ложь; - Элементы.ФормаИзменить.Видимость = Ложь; - Элементы.ФормаУстановитьПометкуУдаления.Видимость = Ложь; - - Элементы.СписокКонтекстноеМенюСоздать.Видимость = Ложь; - Элементы.СписокКонтекстноеМенюСкопировать.Видимость = Ложь; - Элементы.СписокКонтекстноеМенюИзменить.Видимость = Ложь; - Элементы.СписокКонтекстноеМенюУстановитьПометкуУдаления.Видимость = Ложь; - КонецЕсли; - ЗаполнитьВыбранныеЗначения(); - - ДобавитьФильтрПоНаборамСвойств(); - - ОбщегоНазначенияКлиентСервер.УстановитьПараметрДинамическогоСписка( - Список, - "ПредставлениеГруппировкиОбщихСвойств", - НСтр("ru = 'Общие (для нескольких наборов)'"), - Истина); - - // Группировка свойств по наборам. - ГруппировкаДанных = Список.КомпоновщикНастроек.Настройки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных")); - ГруппировкаДанных.ИдентификаторПользовательскойНастройки = "ГруппировкаСвойствПоНаборам"; - ГруппировкаДанных.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; - - ПоляГруппировки = ГруппировкаДанных.ПоляГруппировки; - - ЭлементГруппировкиДанных = ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных")); - ЭлементГруппировкиДанных.Поле = Новый ПолеКомпоновкиДанных("НаборСвойствГруппировка"); - ЭлементГруппировкиДанных.Использование = Истина; - - Параметры.Отбор.Свойство("НаборСвойств", НаборСвойствОтбор); -КонецПроцедуры - -&НаСервере -Процедура ДобавитьФильтрПоНаборамСвойств() - Если ТипЗнч(Параметры.ОтображаемыеНаборыСвойств) = Тип("Массив") - И Параметры.ОтображаемыеНаборыСвойств.Количество() <> 0 Тогда - УсловиеЗапроса = - " - |ГДЕ - | СвойстваПереопределяемый.НаборСвойств В (&Наборы)"; - - СвойстваСписка = ОбщегоНазначения.СтруктураСвойствДинамическогоСписка(); - СвойстваСписка.ТекстЗапроса = Список.ТекстЗапроса + УсловиеЗапроса; - ОбщегоНазначения.УстановитьСвойстваДинамическогоСписка(Элементы.Список, - СвойстваСписка); - - ОбщегоНазначенияКлиентСервер.УстановитьПараметрДинамическогоСписка( - Список, "Наборы", Параметры.ОтображаемыеНаборыСвойств, Истина); - КонецЕсли; -КонецПроцедуры - -#КонецОбласти - -#Область ОбработчикиСобытийЭлементовТаблицыФормыСписок - -&НаКлиенте -Процедура СписокВыборЗначения(Элемент, Значение, СтандартнаяОбработка) - - Если ВидВыбора = "ВыборОбщегоСвойства" Тогда - СтандартнаяОбработка = Ложь; - ОповеститьОВыборе(Новый Структура("ОбщееСвойство", Значение)); - - ИначеЕсли ВидВыбора = "ВыборВладельцаДополнительныхЗначений" Тогда - СтандартнаяОбработка = Ложь; - ОповеститьОВыборе(Новый Структура("ВладелецДополнительныхЗначений", Значение)); - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура СписокПередНачаломДобавления(Элемент, Отказ, Копирование) - - Отказ = Истина; - - Если НЕ Элементы.ФормаСоздать.Видимость Тогда - Возврат; - КонецЕсли; - - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("ЭтоДополнительноеСведение", ЭтоДополнительноеСведение); - - Если Элемент.ТекущиеДанные = Неопределено Тогда - НаборСвойств = НаборСвойствОтбор; - ИначеЕсли Элемент.ТекущиеДанные.Свойство("ГруппировкаСтроки") Тогда - НаборСвойств = Элемент.ТекущиеДанные.ГруппировкаСтроки.Ключ; - ИначеЕсли Элемент.ТекущиеДанные.Свойство("РодительскаяГруппировкаСтроки") Тогда - НаборСвойств = Элемент.ТекущиеДанные.РодительскаяГруппировкаСтроки.Ключ; - Иначе - НаборСвойств = НаборСвойствОтбор; - КонецЕсли; - - ПараметрыФормы.Вставить("НаборСвойств", НаборСвойств); - ПараметрыФормы.Вставить("ТекущийНаборСвойств", НаборСвойств); - - Если Копирование Тогда - ПараметрыФормы.Вставить("ЗначениеКопирования", Элемент.ТекущаяСтрока); - Иначе - ЗначенияЗаполнения = Новый Структура; - ПараметрыФормы.Вставить("ЗначенияЗаполнения", ЗначенияЗаполнения); - КонецЕсли; - - ОткрытьФорму("ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.ФормаОбъекта", ПараметрыФормы); - -КонецПроцедуры - -&НаКлиенте -Процедура СписокПередНачаломИзменения(Элемент, Отказ) - - Отказ = Истина; - - Если НЕ Элементы.ФормаСоздать.Видимость Тогда - Возврат; - КонецЕсли; - - Если Элемент.ТекущиеДанные <> Неопределено Тогда - - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("Ключ", Элемент.ТекущаяСтрока); - ПараметрыФормы.Вставить("ЭтоДополнительноеСведение", ЭтоДополнительноеСведение); - - ОткрытьФорму("ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.ФормаОбъекта", ПараметрыФормы); - КонецЕсли; - -КонецПроцедуры - -#КонецОбласти - -#Область СлужебныеПроцедурыИФункции - -&НаСервере -Процедура ЗаполнитьВыбранныеЗначения() - - Если Параметры.Свойство("ВыбранныеЗначения") - И ТипЗнч(Параметры.ВыбранныеЗначения) = Тип("Массив") Тогда - - СписокВыбранных.ЗагрузитьЗначения(Параметры.ВыбранныеЗначения); - КонецЕсли; - - ЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить(); - - ЭлементЦветаОформления = ЭлементУсловногоОформления.Оформление.Элементы.Найти("Font"); - ЭлементЦветаОформления.Значение = Новый Шрифт(, , Истина); - ЭлементЦветаОформления.Использование = Истина; - - ЭлементОтбораДанных = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); - ЭлементОтбораДанных.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Список.Ссылка"); - ЭлементОтбораДанных.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке; - ЭлементОтбораДанных.ПравоеЗначение = СписокВыбранных; - ЭлементОтбораДанных.Использование = Истина; - - ЭлементОформляемогоПоля = ЭлементУсловногоОформления.Поля.Элементы.Добавить(); - ЭлементОформляемогоПоля.Поле = Новый ПолеКомпоновкиДанных("Представление"); - ЭлементОформляемогоПоля.Использование = Истина; - -КонецПроцедуры - -#КонецОбласти diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаСписка/Form.form b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаСписка/Form.form index 5f55f2575..edae7680c 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаСписка/Form.form +++ b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаСписка/Form.form @@ -376,13 +376,10 @@ Свойства.Предопределенный, Свойства.Заголовок, ВЫБОР - КОГДА Свойства.НаборСвойств = ЗНАЧЕНИЕ(Справочник.НаборыДополнительныхРеквизитовИСведений.ПустаяСсылка) - ТОГДА &ПредставлениеГруппировкиОбщихСвойств - КОГДА Свойства.НаборСвойств.Родитель = ЗНАЧЕНИЕ(Справочник.НаборыДополнительныхРеквизитовИСведений.ПустаяСсылка) - ТОГДА Свойства.НаборСвойств - ИНАЧЕ Свойства.НаборСвойств.Родитель.Наименование + " (" + Свойства.НаборСвойств.Наименование + ")" + КОГДА Свойства.ЭтоДополнительноеСведение + ТОГДА &ПредставлениеДополнительныеСведения + ИНАЧЕ &ПредставлениеДополнительныеРеквизиты КОНЕЦ КАК НаборСвойствГруппировка, - Свойства.НаборСвойств, Свойства.ДополнительныеЗначенияИспользуются, Свойства.ВладелецДополнительныхЗначений, Свойства.Наименование, diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаСписка/Module.bsl b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаСписка/Module.bsl index 78eb99033..cbbc152d0 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаСписка/Module.bsl @@ -13,8 +13,14 @@ ОбщегоНазначенияКлиентСервер.УстановитьПараметрДинамическогоСписка( Список, - "ПредставлениеГруппировкиОбщихСвойств", - НСтр("ru = 'Общие (для нескольких наборов)'"), + "ПредставлениеДополнительныеСведения", + НСтр("ru = 'Дополнительные сведения'"), + Истина); + + ОбщегоНазначенияКлиентСервер.УстановитьПараметрДинамическогоСписка( + Список, + "ПредставлениеДополнительныеРеквизиты", + НСтр("ru = 'Дополнительные реквизиты'"), Истина); // Группировка свойств по наборам. diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Form.form b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Form.form index 52943fcd5..3993366ca 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Form.form @@ -49,7 +49,7 @@ ПодменюЕще 410 - ОбщиеРеквизитыНеВключенныеВНаборы + НеиспользуемыеРеквизиты 412 true true @@ -57,7 +57,7 @@ true
    - ОбщиеРеквизитыНеВключенныеВНаборыРасширеннаяПодсказка + НеиспользуемыеРеквизитыРасширеннаяПодсказка 413 Label true @@ -66,7 +66,7 @@ Left - Form.Command.ОбщиеРеквизитыНеВключенныеВНаборы + Form.Command.НеиспользуемыеРеквизиты Normal Auto true @@ -1353,10 +1353,6 @@ Left true - - Opening - ЗаголовокОткрытие - true true true @@ -1865,68 +1861,6 @@ ГруппаСвойстваИЗависимости 324 - - ГруппаСвойства - 326 - true - true - - true - - - <key>ru</key> - <value>Свойства</value> - - - ГруппаСвойстваРасширеннаяПодсказка - 327 - Label - true - true - - Left - - - UsualGroup - - AlwaysHorizontal - Auto - true - Auto - Auto - - - - ГруппаНастройкаЗависимостей - 328 - true - true - - true - - - <key>ru</key> - <value>Настройка зависимостей</value> - - - ГруппаНастройкаЗависимостейРасширеннаяПодсказка - 329 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - Auto - Auto - - ГруппаВиден 463 @@ -2313,10 +2247,6 @@ Left true - - Opening - ПодсказкаОткрытие - true true true @@ -2366,10 +2296,6 @@ Left true - - Opening - ЗаголовокФормыЗначенияОткрытие - 20 true true @@ -2417,10 +2343,6 @@ Left true - - Opening - ЗаголовокФормыВыбораЗначенияОткрытие - 20 true true @@ -4699,13 +4621,19 @@ КОГДА &ЭтоДополнительноеСведение ТОГДА ВЫБОР КОГДА Наборы.КоличествоСведений = "" - ТОГДА Наборы.Наименование - ИНАЧЕ Наборы.Наименование + " (" + Наборы.КоличествоСведений + ")" + ТОГДА ПРЕДСТАВЛЕНИЕ(Наборы.Ссылка) + КОГДА Наборы.КоличествоСведений <> "" + И &ЭтоОсновнойЯзык + ТОГДА Наборы.Наименование + " (" + Наборы.КоличествоСведений + ")" + ИНАЧЕ (ВЫРАЗИТЬ(ЕСТЬNULL(НаборыПредставления.Наименование, Наборы.Наименование) КАК СТРОКА(150))) + " (" + Наборы.КоличествоСведений + ")" КОНЕЦ ИНАЧЕ ВЫБОР КОГДА Наборы.КоличествоРеквизитов = "" - ТОГДА Наборы.Наименование - ИНАЧЕ Наборы.Наименование + " (" + Наборы.КоличествоРеквизитов + ")" + ТОГДА ПРЕДСТАВЛЕНИЕ(Наборы.Ссылка) + КОГДА Наборы.КоличествоСведений <> "" + И &ЭтоОсновнойЯзык + ТОГДА Наборы.Наименование + " (" + Наборы.КоличествоРеквизитов + ")" + ИНАЧЕ (ВЫРАЗИТЬ(ЕСТЬNULL(НаборыПредставления.Наименование, Наборы.Наименование) КАК СТРОКА(150))) + " (" + Наборы.КоличествоРеквизитов + ")" КОНЕЦ КОНЕЦ КАК Представление, ВЫБОР @@ -4719,6 +4647,9 @@ КОНЕЦ КАК НомерКартинки ИЗ Справочник.НаборыДополнительныхРеквизитовИСведений КАК Наборы + ЛЕВОЕ СОЕДИНЕНИЕ Справочник.НаборыДополнительныхРеквизитовИСведений.Представления КАК НаборыПредставления + ПО (НаборыПредставления.Ссылка = Наборы.Ссылка) + И (НаборыПредставления.КодЯзыка = &КодЯзыка) ГДЕ ВЫБОР КОГДА Наборы.Родитель = ЗНАЧЕНИЕ(Справочник.НаборыДополнительныхРеквизитовИСведений.ПустаяСсылка) @@ -5173,10 +5104,10 @@ Auto - ОбщиеРеквизитыНеВключенныеВНаборы + НеиспользуемыеРеквизиты <key>ru</key> - <value>Только общие дополнительные реквизиты</value> + <value>Неиспользуемые реквизиты</value> 9 @@ -5184,7 +5115,7 @@ - ОбщиеРеквизитыНеВключенныеВНаборы + ПоказатьНеиспользуемыеРеквизиты DontUse diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Help/ru.html index 56576b079..0bf60f159 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Help/ru.html @@ -4,106 +4,179 @@

    Назначение нового дополнительного реквизита (сведения) справочнику или документу

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

    Заполните необходимые поля:

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

    • Напишите краткое Наименование свойства, которое будет указываться в окнах объектов программы. -
    • Для того чтобы дополнительный реквизит при заполнении справочников или документов не оставался пустым, включите флажок Заполнять обязательно. Для дополнительных сведений флажок не предусмотрен. -
    • Заполните поля на вкладке Главное: +
    • +
    • Для того чтобы дополнительный реквизит при заполнении справочников или документов не оставался пустым, включите флажок Заполнять обязательно. Для дополнительных сведений флажок не предусмотрен. +
    • +
    • Заполните поля на вкладке Главное:
      •  Выберите из списка с помощью флажка Тип значения дополнительного реквизита (сведения); -
      • Для того чтобы уточнить формат дополнительных реквизитов типа Число, Дата, Булево, перейдите в Конструктор форматной строки по ссылке Формат по умолчанию (для дополнительных сведений не предусмотрено). +
      • +
      • Для того чтобы уточнить формат дополнительных реквизитов типа Число, Дата, Булево, перейдите в Конструктор форматной строки по ссылке Формат по умолчанию (для дополнительных сведений не предусмотрено).
        • Установите при необходимости значение в поле Язык (Страна), для того чтобы изменить стандартные настройки. -
        • Выберите необходимые параметры для установки форматов. -
        • В строке Пример для наглядности производятся соответствующие этим параметрам изменения. -
        • Для подтверждения выбранных параметров нажмите ОК. -
        • После уточнения формата ссылка меняет значение на Формат установлен. -
        • Подробнее о форматах см. ниже.
      • При необходимости включите флажок Выводить в виде гиперссылки - для размещения на карточке объекта (документа, списка) ссылок на внешние ресурсы или другие объекты программы (например, файлы). Доступно для строковых дополнительных реквизитов и для ссылочных объектов. -
      • Заполните поле Всплывающая подсказка, для того чтобы объяснить, как заполняется дополнительное сведение или реквизит. Содержимое поля будет выводиться на экран при наведении мыши на поле дополнительного реквизита (сведения). -
      • Только для дополнительных реквизитов: перейдите по ссылке в поле Виден, для того чтобы настроить видимость дополнительного реквизита. Видимость дополнительного реквизита может зависеть от некоторого условия (например, от заполнения другого реквизита). После того как условие задано, ссылка отображает заданное условие. По умолчанию отображается значение всегда. -
      • Только для дополнительных реквизитов: перейдите по ссылке в поле Доступен, для того чтобы настроить доступность дополнительного реквизита для заполнения. Доступность дополнительного реквизита может зависеть от некоторого условия (например, от заполнения другого реквизита). После того как условие задано, ссылка отображает заданное условие. По умолчанию отображается значение всегда. -
      • Только для дополнительных реквизитов: включите флажок Заполнять обязательно, для того чтобы дополнительный реквизит при заполнении списков или документов не оставался пустым. Может зависеть от некоторого условия (например, от заполнения другого реквизита). Для того чтобы задать условие, перейдите по ссылке. Ссылка по умолчанию принимает значение всегда.
    • Заполните поле Комментарий, для того чтобы при подборе дополнительного реквизита (сведения) в наборы в нижней части списка выбора выводилось его описание. Для заполнения перейдите на вкладку Комментарий.

    Добавление из другого набора

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

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

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

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

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

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

    Добавление общих дополнительных реквизитов (сведений)

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

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

    Типы значений дополнительных реквизитов и сведений

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

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

    • Строка - Определите Длину строки, выберите параметр Фиксированная или Переменная (если введенная строка получится меньше предполагаемой длины, то количество знаков, отведенное под это значение, будет автоматически уменьшено до фактической). Максимальная длина строки в этом случае 1024 символа. Также можно включить флажок Неограниченная, если планируется вводить большой объем текстовой информации. -
      • Для дополнительного реквизита типа Строка в программе предлагается возможность сделать поле многострочным. Для этого включите флажок Многострочное поле ввода и введите количество строк.
    • Число - выберите Длину числа и его Точность. По умолчанию программа предлагает длину числа 15 и точность 3. В зависимости от вводимых данных эти цифры могут меняться. Необходимо учитывать, что в количество знаков Длины числа входит количество знаков целой части, и десятичная точка, и количество знаков дробной части. При необходимости включите флажок Неотрицательное. +
      • Для дополнительного реквизита типа Строка в программе предлагается возможность сделать поле многострочным. Для этого включите флажок Многострочное поле ввода и введите количество строк.
    • +
    • Число - выберите Длину числа и его Точность. По умолчанию программа предлагает длину числа 15 и точность 3. В зависимости от вводимых данных эти цифры могут меняться. Необходимо учитывать, что в количество знаков Длины числа входит количество знаков целой части, и десятичная точка, и количество знаков дробной части. При необходимости включите флажок Неотрицательное.
      • При вводе дополнительного реквизита типа Число предусмотрена возможность более точного выбора формата числа.
        • При вводе значений в поля Длина и Точность в Конструкторе форматной строки число будет округляться до этого количества знаков. -
        • Можно выбрать Сдвиг. -
        • Можно поменять Разделитель дробной части (по умолчанию - запятая), определить Разделитель групп (по умолчанию пробел), также определить Группировку. -
        • Можно выбрать Представление нуля, например, для того чтобы напомнить о необходимости ввода значения в это поле. -
        • Также можно указать Представление отрицательных чисел. -
        • При необходимости включите флажок Выводить лидирующие нули. В этом случае при подгонке под указанную Длину числа, если число меньше, будут проставлены нули в разрядах.
      • Внимание! Некоторые настройки формата (например, представление пустого числа, длинная дата и некоторые другие) автоматически не применяются в большинстве мест и поддерживаются только там, где разработчик это предусмотрел (например, в печатных формах). -
        • В карточках объектов они неприменимы.
    • Дата - выберите состав даты: Дата, Время или Дата и Время. +
    • +
    • Можно выбрать Сдвиг. +
    • +
    • Можно поменять Разделитель дробной части (по умолчанию - запятая), определить Разделитель групп (по умолчанию пробел), также определить Группировку. +
    • +
    • Можно выбрать Представление нуля, например, для того чтобы напомнить о необходимости ввода значения в это поле. +
    • +
    • Также можно указать Представление отрицательных чисел. +
    • +
    • При необходимости включите флажок Выводить лидирующие нули. В этом случае при подгонке под указанную Длину числа, если число меньше, будут проставлены нули в разрядах.
    +
  • Внимание! Некоторые настройки формата (например, представление пустого числа, длинная дата и некоторые другие) автоматически не применяются в большинстве мест и поддерживаются только там, где разработчик это предусмотрел (например, в печатных формах). +
    • В карточках объектов они неприменимы.
  • +
  • Дата - выберите состав даты: Дата, Время или Дата и Время.
    • Для дополнительных реквизитов можно задать формат даты, для этого перейдите по ссылке Формат по умолчанию. Можно выбрать формат dd.mm.yyyyили yyyy-MM-dd, а также Локальный формат даты (например, 22 мая 2013), задать Представление пустой даты (в незаполненном поле появится предупреждение, например, Нет даты).
      • Внимание! Некоторые настройки формата (например, представление пустого числа, длинная дата и некоторые другие) автоматически не применяются в большинстве мест и поддерживаются только там, где разработчик это предусмотрел (например, в печатных формах). -
      • В карточках объектов они неприменимы.
  • Составной тип данных - этот тип значения предоставляет возможность окончательно выбрать тип данных уже при вводе информации в справочник. Включите флажок Составной тип данных, затем включите флажки для типов значений, из которых можно будет выбирать. +
  • +
  • В карточках объектов они неприменимы.
  • +
  • Составной тип данных - этот тип значения предоставляет возможность окончательно выбрать тип данных уже при вводе информации в справочник. Включите флажок Составной тип данных, затем включите флажки для типов значений, из которых можно будет выбирать.
    • Например, дату основания фирмы иногда невозможно указать точно. В этом случае можно предоставить возможность выбора типа данных (Дата или Строка) во время ввода. Если точная дата известна, то можно будет выбрать тип Дата и ввести, если неизвестна, то можно будет ввести дату в виде строки типа "Начало 19 в.". -
    • При этом для всех частей составного типа данных можно произвести их обычные настройки, например, настроить формат даты и определить параметры строки. -
    • При вводе значений дополнительных реквизитов (сведений) составного типа данных сначала предлагается выбрать тип данных.
  • Булево - обычно это значения типа Истина и Ложь, Да или Нет. +
  • +
  • При этом для всех частей составного типа данных можно произвести их обычные настройки, например, настроить формат даты и определить параметры строки. +
  • +
  • При вводе значений дополнительных реквизитов (сведений) составного типа данных сначала предлагается выбрать тип данных.
  • +
  • Булево - обычно это значения типа Истина и Ложь, Да или Нет.
    • Для дополнительных реквизитов в Конструкторе форматной строки можно установить другой формат этих значений. Можно написать Представления значения булево Ложь и булево Истина. В этом случае при вводе вместо обычного Да или Нет для выбора будут предложены значения, введенные при настройке дополнительного реквизита. -
      • Внимание! В списках и отчетах отбор для таких дополнительных реквизитов с условием Равно и Не равно не поддерживается.
  • Дополнительное значение - этот тип данных часто используется, при этом ввод информации сводится к выбору значений из списка. Предлагается программой по умолчанию. Применяется как обычный список значений, так и сгруппированный. С помощью дополнительных реквизитов (сведений) типа Дополнительное значение можно описывать различные свойства объектов программы. -
  • Дополнительное значение (иерархия) - такая структура списков также широко используется, ее называют иерархией элементов. Элементы в таком списке имеют одинаковые свойства, но могут иметь подчиненные элементы. При этом иерархия может быть довольно сложной. -
  • Пользователь - в программе предусмотрена возможность использования значений списка Пользователи (и других списков) в качестве дополнительного реквизита (сведения).
  • Особенности ввода дополнительных сведений типа Дополнительное значение или Дополнительное значение (иерархия)

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

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

    Изменение формата дополнительных реквизитов и сведений

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

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

    См. также:

    \ No newline at end of file diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Module.bsl b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Module.bsl index 2dffcf87f..86b038df9 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Module.bsl @@ -22,14 +22,6 @@ СоздатьСтруктуруПереданныхПараметров(); - Если ПереданныеПараметрыФормы.КопированиеСВопросом - И Не ПолучитьФункциональнуюОпцию("ИспользоватьОбщиеДополнительныеРеквизитыИСведения") - И (Не РеквизитСоСпискомДополнительныхЗначений() - Или Не ПолучитьФункциональнуюОпцию("ИспользоватьОбщиеДополнительныеЗначения")) Тогда - ПереданныеПараметрыФормы.КопированиеСВопросом = Ложь; - ПереданныеПараметрыФормы.ЗначениеКопирования = ПереданныеПараметрыФормы.ВладелецДополнительныхЗначений; - КонецЕсли; - Если ПереданныеПараметрыФормы.ВыборОбщегоСвойства Или ПереданныеПараметрыФормы.ВыборВладельцаДополнительныхЗначений Или ПереданныеПараметрыФормы.КопированиеСВопросом Тогда @@ -70,12 +62,7 @@ Элементы.ТипЗначенияРеквизита.ВыравниваниеЭлементовИЗаголовков = ВариантВыравниванияЭлементовИЗаголовков.ЭлементыПравоЗаголовкиЛево; КонецЕсли; - ЛокализуемыеЭлементы = Новый Массив; - ЛокализуемыеЭлементы.Добавить(Элементы.Заголовок); - ЛокализуемыеЭлементы.Добавить(Элементы.Подсказка); - ЛокализуемыеЭлементы.Добавить(Элементы.ЗаголовокФормыЗначения); - ЛокализуемыеЭлементы.Добавить(Элементы.ЗаголовокФормыВыбораЗначения); - ЛокализацияСервер.ПриСозданииНаСервере(ЛокализуемыеЭлементы); + МультиязычностьСервер.ПриСозданииНаСервере(ЭтотОбъект, Объект); КонецПроцедуры @@ -104,7 +91,7 @@ // Заполнение наименования по набору свойств // и проверка есть ли свойство с тем же наименованием. ТекстВопроса = НаименованиеУжеИспользуется( - Объект.Заголовок, Объект.Ссылка, Объект.НаборСвойств, Объект.Наименование, Объект.Представления); + Объект.Заголовок, Объект.Ссылка, ТекущийНаборСвойств, Объект.Наименование, Объект.Представления); Если ЗначениеЗаполнено(ТекстВопроса) Тогда Кнопки = Новый СписокЗначений; @@ -126,7 +113,7 @@ // Заполнение наименования по набору свойств // и проверка есть ли свойство с тем же наименованием. ТекстВопроса = ИмяУжеИспользуется( - Объект.Имя, Объект.Ссылка, Объект.НаборСвойств, Объект.Наименование); + Объект.Имя, Объект.Ссылка, Объект.Наименование); Если ЗначениеЗаполнено(ТекстВопроса) Тогда Кнопки = Новый СписокЗначений; @@ -197,23 +184,22 @@ ТекущийОбъект.Имя = ТекущийОбъект.Имя + "_" + СтрокаУИД; КонецЕсли; - ЛокализацияСервер.ПередЗаписьюНаСервере(ТекущийОбъект); + МультиязычностьСервер.ПередЗаписьюНаСервере(ТекущийОбъект); КонецПроцедуры &НаСервере Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) - Если ЗначениеЗаполнено(ТекущийОбъект.НаборСвойств) Тогда - ДобавитьВНабор = ТекущийОбъект.НаборСвойств; + Если ЗначениеЗаполнено(ТекущийНаборСвойств) Тогда Блокировка = Новый БлокировкаДанных; ЭлементБлокировки = Блокировка.Добавить("Справочник.НаборыДополнительныхРеквизитовИСведений"); - ЭлементБлокировки.УстановитьЗначение("Ссылка", ДобавитьВНабор); + ЭлементБлокировки.УстановитьЗначение("Ссылка", ТекущийНаборСвойств); Блокировка.Заблокировать(); - ЗаблокироватьДанныеДляРедактирования(ДобавитьВНабор); + ЗаблокироватьДанныеДляРедактирования(ТекущийНаборСвойств); - ОбъектНаборСвойств = ДобавитьВНабор.ПолучитьОбъект(); + ОбъектНаборСвойств = ТекущийНаборСвойств.ПолучитьОбъект(); Если ТекущийОбъект.ЭтоДополнительноеСведение Тогда ТабличнаяЧасть = ОбъектНаборСвойств.ДополнительныеСведения; Иначе @@ -224,7 +210,7 @@ НоваяСтрока = ТабличнаяЧасть.Добавить(); НоваяСтрока.Свойство = ТекущийОбъект.Ссылка; ОбъектНаборСвойств.Записать(); - ТекущийОбъект.ДополнительныеСвойства.Вставить("ИзмененныйНабор", ДобавитьВНабор); + ТекущийОбъект.ДополнительныеСвойства.Вставить("ИзмененныйНабор", ТекущийНаборСвойств); КонецЕсли; КонецЕсли; @@ -252,6 +238,8 @@ // Обработчик подсистемы запрета редактирования реквизитов объектов. ЗапретРедактированияРеквизитовОбъектов.ЗаблокироватьРеквизиты(ЭтотОбъект); + МультиязычностьСервер.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); + ОбновитьСоставЭлементовФормы(); Если ТекущийОбъект.ДополнительныеСвойства.Свойство("ИзмененныйНабор") Тогда @@ -325,7 +313,7 @@ КонецЕсли; // Конец СтандартныеПодсистемы.УправлениеДоступом - ЛокализацияСервер.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); + МультиязычностьСервер.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); КонецПроцедуры @@ -345,16 +333,16 @@ &НаКлиенте Процедура УточнениеСпискаЗначенийКомментарийНажатие(Элемент) - ЗаписатьОбъект("ПереходКСпискуЗначений", - "УточнениеСпискаЗначенийКомментарийНажатиеЗавершение"); + ОбработчикПродолжения = Новый ОписаниеОповещения("УточнениеСпискаЗначенийКомментарийНажатиеЗавершение", ЭтотОбъект); + ЗаписатьОбъект("ПереходКСпискуЗначений", ОбработчикПродолжения); КонецПроцедуры &НаКлиенте Процедура УточнениеНаборовКомментарийНажатие(Элемент) - ЗаписатьОбъект("ПереходКСпискуЗначений", - "УточнениеНаборовКомментарийНажатиеПродолжение"); + ОбработчикПродолжения = Новый ОписаниеОповещения("УточнениеНаборовКомментарийНажатиеПродолжение", ЭтотОбъект); + ЗаписатьОбъект("ПереходКСпискуЗначений", ОбработчикПродолжения); КонецПроцедуры @@ -389,8 +377,15 @@ Новый ОписаниеОповещения("ПослеПодтвержденияОчисткиВесовыхКоэффициентов", ЭтотОбъект), ТекстВопроса, Кнопки, , "ОчиститьИЗаписать"); Иначе - ЗаписатьОбъект("ИзменениеИспользованияВеса", - "ДополнительныеЗначенияСВесомПриИзмененииЗавершение"); + ТекстВопроса = НСтр("ru = 'Данные будут записаны.'"); + + Кнопки = Новый СписокЗначений; + Кнопки.Добавить("Записать", НСтр("ru = 'Записать'")); + Кнопки.Добавить("Отмена", НСтр("ru = 'Отмена'")); + + ПоказатьВопрос( + Новый ОписаниеОповещения("ПослеПодтвержденияВключенияВесовыхКоэффициентов", ЭтотОбъект), + ТекстВопроса, Кнопки, , "Записать"); КонецЕсли; КонецПроцедуры @@ -442,23 +437,8 @@ КонецПроцедуры &НаКлиенте -Процедура ЗаголовокОткрытие(Элемент, СтандартнаяОбработка) - ЛокализацияКлиент.ПриОткрытии(Объект, Элемент, "Заголовок", СтандартнаяОбработка); -КонецПроцедуры - -&НаКлиенте -Процедура ПодсказкаОткрытие(Элемент, СтандартнаяОбработка) - ЛокализацияКлиент.ПриОткрытии(Объект, Элемент, "Подсказка", СтандартнаяОбработка); -КонецПроцедуры - -&НаКлиенте -Процедура ЗаголовокФормыЗначенияОткрытие(Элемент, СтандартнаяОбработка) - ЛокализацияКлиент.ПриОткрытии(Объект, Элемент, "ЗаголовокФормыЗначения", СтандартнаяОбработка); -КонецПроцедуры - -&НаКлиенте -Процедура ЗаголовокФормыВыбораЗначенияОткрытие(Элемент, СтандартнаяОбработка) - ЛокализацияКлиент.ПриОткрытии(Объект, Элемент, "ЗаголовокФормыВыбораЗначения", СтандартнаяОбработка); +Процедура Подключаемый_Открытие(Элемент, СтандартнаяОбработка) + МультиязычностьКлиент.ПриОткрытии(ЭтотОбъект, Объект, Элемент, СтандартнаяОбработка); КонецПроцедуры #КонецОбласти @@ -519,8 +499,8 @@ ДополнительныеПараметры.Вставить("Родитель", Родитель); ДополнительныеПараметры.Вставить("Группа", Группа); - ЗаписатьОбъект("ПереходКСпискуЗначений", - "ЗначенияПередНачаломДобавленияЗавершение", ДополнительныеПараметры); + ОбработчикПродолжения = Новый ОписаниеОповещения("ЗначенияПередНачаломДобавленияЗавершение", ЭтотОбъект); + ЗаписатьОбъект("ПереходКСпискуЗначений", ОбработчикПродолжения, ДополнительныеПараметры); КонецПроцедуры @@ -528,13 +508,12 @@ Процедура ЗначенияПередНачаломИзменения(Элемент, Отказ) Отказ = Истина; - Если Элементы.ДополнительныеЗначения.ТолькоПросмотр Тогда Возврат; КонецЕсли; - ЗаписатьОбъект("ПереходКСпискуЗначений", - "ЗначенияПередНачаломИзмененияЗавершение"); + ОбработчикПродолжения = Новый ОписаниеОповещения("ЗначенияПередНачаломИзмененияЗавершение", ЭтотОбъект); + ЗаписатьОбъект("ПереходКСпискуЗначений", ОбработчикПродолжения); КонецПроцедуры @@ -551,17 +530,13 @@ КонецЕсли; #КонецЕсли - Если РежимДобавленияРеквизита = "СделатьОбщим" Тогда - КонвертироватьДополнительныйРеквизитВОбщий(); - КонецЕсли; - - Если РежимДобавленияРеквизита = "ДобавитьОбщийРеквизитВНабор" - Или РежимДобавленияРеквизита = "СделатьОбщим" Тогда + Если РежимДобавленияРеквизита = "ДобавитьОбщийРеквизитВНабор" Тогда Результат = Новый Структура; Результат.Вставить("ОбщееСвойство", ПереданныеПараметрыФормы.ВладелецДополнительныхЗначений); Если ПереданныеПараметрыФормы.Перетаскивание Тогда Результат.Вставить("Перетаскивание", Истина); КонецЕсли; + КонвертироватьДополнительныйРеквизитВОбщий(); ОповеститьОВыборе(Результат); Возврат; КонецЕсли; @@ -631,16 +606,16 @@ &НаКлиенте Процедура УточнениеСпискаЗначенийИзменить(Команда) - ЗаписатьОбъект("ИзменениеВидаРеквизита", - "УточнениеСпискаЗначенийИзменитьЗавершение"); + ОбработчикПродолжения = Новый ОписаниеОповещения("УточнениеСпискаЗначенийИзменитьЗавершение", ЭтотОбъект); + ЗаписатьОбъект("ИзменениеВидаРеквизита", ОбработчикПродолжения); КонецПроцедуры &НаКлиенте Процедура УточнениеНаборовИзменить(Команда) - ЗаписатьОбъект("ИзменениеВидаРеквизита", - "УточнениеНаборовИзменитьЗавершение"); + ОбработчикПродолжения = Новый ОписаниеОповещения("УточнениеНаборовИзменитьЗавершение", ЭтотОбъект); + ЗаписатьОбъект("ИзменениеВидаРеквизита", ОбработчикПродолжения); КонецПроцедуры @@ -687,29 +662,23 @@ КонецПроцедуры &НаКлиенте -Процедура ОбщиеРеквизитыНеВключенныеВНаборы(Команда) - НовоеЗначение = Не Элементы.ОбщиеРеквизитыНеВключенныеВНаборы.Пометка; - Элементы.ОбщиеРеквизитыНеВключенныеВНаборы.Пометка = НовоеЗначение; +Процедура ПоказатьНеиспользуемыеРеквизиты(Команда) + НовоеЗначение = Не Элементы.НеиспользуемыеРеквизиты.Пометка; + Элементы.НеиспользуемыеРеквизиты.Пометка = НовоеЗначение; Если НовоеЗначение Тогда Элементы.СтраницыНаборыСвойств.ТекущаяСтраница = Элементы.СтраницаОбщиеНаборы; Иначе Элементы.СтраницыНаборыСвойств.ТекущаяСтраница = Элементы.СтраницаВсеНаборы; КонецЕсли; - ОтобразитьПоказатьОбщиеРеквизитыБезНаборов(); - -КонецПроцедуры - -&НаСервере -Процедура ОтобразитьПоказатьОбщиеРеквизитыБезНаборов() - ОбновитьСписокСвойствТекущегоНабора(); КонецПроцедуры &НаКлиенте Процедура УстановитьСнятьПометкуУдаления(Команда) - ЗаписатьОбъект("ИзменениеПометкиУдаления", "УстановитьСнятьПометкуУдаленияПродолжение"); + ОбработчикПродолжения = Новый ОписаниеОповещения("УстановитьСнятьПометкуУдаленияПродолжение", ЭтотОбъект); + ЗаписатьОбъект("ИзменениеПометкиУдаления", ОбработчикПродолжения); КонецПроцедуры #КонецОбласти @@ -730,6 +699,7 @@ Для Каждого УсловиеЗависимости Из УсловияЗависимостиРеквизитов Цикл ОтборСтрок = Новый Структура; ОтборСтрок.Вставить("ЗависимоеСвойство", УсловиеЗависимости.Представление); + ОтборСтрок.Вставить("НаборСвойств", ТекущийНаборСвойств); МассивСтрок = ЗависимостиДополнительныхРеквизитов.НайтиСтроки(ОтборСтрок); Для Каждого СтрокаТабличнойЧасти Из МассивСтрок Цикл ЗависимостиДополнительныхРеквизитов.Удалить(СтрокаТабличнойЧасти); @@ -818,9 +788,9 @@ КонецЕсли; Если ЭтоДополнительноеСведение = 1 Тогда - Элементы.ОбщиеРеквизитыНеВключенныеВНаборы.Заголовок = НСтр("ru ='Только общие дополнительные сведения'"); + Элементы.НеиспользуемыеРеквизиты.Заголовок = НСтр("ru = 'Неиспользуемые дополнительные сведения'"); Иначе - Элементы.ОбщиеРеквизитыНеВключенныеВНаборы.Заголовок = НСтр("ru ='Только общие дополнительные реквизиты'"); + Элементы.НеиспользуемыеРеквизиты.Заголовок = НСтр("ru = 'Неиспользуемые дополнительные реквизиты'"); КонецЕсли; ОбщегоНазначенияКлиентСервер.УстановитьПараметрДинамическогоСписка( @@ -832,14 +802,20 @@ ОбщегоНазначенияКлиентСервер.УстановитьПараметрДинамическогоСписка( НаборыСвойств, "ЭтоДополнительноеСведение", (ЭтоДополнительноеСведение = 1), Истина); + ОбщегоНазначенияКлиентСервер.УстановитьПараметрДинамическогоСписка( + НаборыСвойств, "ЭтоОсновнойЯзык", ТекущийЯзык() = Метаданные.ОсновнойЯзык, Истина); + + ОбщегоНазначенияКлиентСервер.УстановитьПараметрДинамическогоСписка( + НаборыСвойств, "КодЯзыка", ТекущийЯзык().КодЯзыка, Истина); + ОбщегоНазначенияКлиентСервер.УстановитьПараметрДинамическогоСписка( ОбщиеНаборыСвойств, "ЭтоДополнительноеСведение", (ЭтоДополнительноеСведение = 1), Истина); ОбщегоНазначенияКлиентСервер.УстановитьПараметрДинамическогоСписка( - ОбщиеНаборыСвойств, "ОбщиеДополнительныеСведения", НСтр("ru = 'Общие дополнительные сведения'"), Истина); + ОбщиеНаборыСвойств, "ОбщиеДополнительныеСведения", НСтр("ru = 'Неиспользуемые дополнительные сведения'"), Истина); ОбщегоНазначенияКлиентСервер.УстановитьПараметрДинамическогоСписка( - ОбщиеНаборыСвойств, "ОбщиеДополнительныеРеквизиты", НСтр("ru = 'Общие дополнительные реквизиты'"), Истина); + ОбщиеНаборыСвойств, "ОбщиеДополнительныеРеквизиты", НСтр("ru = 'Неиспользуемые дополнительные реквизиты'"), Истина); УстановитьУсловноеОформлениеСписка(ДоступныеНаборы); @@ -917,9 +893,19 @@ &НаСервере Процедура КонвертироватьДополнительныйРеквизитВОбщий() + ВыбранныйРеквизит = ПереданныеПараметрыФормы.ВладелецДополнительныхЗначений; + НаборСвойств = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ВыбранныйРеквизит, "НаборСвойств"); + Если Не ЗначениеЗаполнено(НаборСвойств) Тогда + Возврат; + КонецЕсли; + НачатьТранзакцию(); Попытка - ВыбранныйРеквизит = ПереданныеПараметрыФормы.ВладелецДополнительныхЗначений; + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения"); + ЭлементБлокировки.УстановитьЗначение("Ссылка", ВыбранныйРеквизит); + Блокировка.Заблокировать(); + ВыбранныйРеквизитОбъект = ВыбранныйРеквизит.ПолучитьОбъект(); ВыбранныйРеквизитОбъект.НаборСвойств = Справочники.НаборыДополнительныхРеквизитовИСведений.ПустаяСсылка(); ВыбранныйРеквизитОбъект.Наименование = ВыбранныйРеквизитОбъект.Заголовок; @@ -1073,10 +1059,21 @@ ПараметрыЗаписи = Новый Структура; ПараметрыЗаписи.Вставить("ОчиститьВведенныеВесовыеКоэффициенты"); - ЗаписатьОбъект("ИзменениеИспользованияВеса", - "ДополнительныеЗначенияСВесомПриИзмененииЗавершение", - , - ПараметрыЗаписи); + ОбработчикПродолжения = Новый ОписаниеОповещения("ДополнительныеЗначенияСВесомПриИзмененииЗавершение", ЭтотОбъект); + ЗаписатьОбъект("ИзменениеИспользованияВеса", ОбработчикПродолжения,, ПараметрыЗаписи); + +КонецПроцедуры + +&НаКлиенте +Процедура ПослеПодтвержденияВключенияВесовыхКоэффициентов(Ответ, Контекст) Экспорт + + Если Ответ <> "Записать" Тогда + Объект.ДополнительныеЗначенияСВесом = НЕ Объект.ДополнительныеЗначенияСВесом; + Возврат; + КонецЕсли; + + ОбработчикПродолжения = Новый ОписаниеОповещения("ДополнительныеЗначенияСВесомПриИзмененииЗавершение", ЭтотОбъект); + ЗаписатьОбъект("ИзменениеИспользованияВеса", ОбработчикПродолжения); КонецПроцедуры @@ -1229,7 +1226,6 @@ ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("ТекущийНаборСвойств", ТекущийНаборСвойств); - ПараметрыФормы.Вставить("НаборСвойств", Объект.НаборСвойств); ПараметрыФормы.Вставить("Свойство", Объект.Ссылка); ПараметрыФормы.Вставить("ВладелецДополнительныхЗначений", Объект.ВладелецДополнительныхЗначений); ПараметрыФормы.Вставить("ЭтоДополнительноеСведение", Объект.ЭтоДополнительноеСведение); @@ -1249,7 +1245,6 @@ ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("ТекущийНаборСвойств", ТекущийНаборСвойств); ПараметрыФормы.Вставить("Свойство", Объект.Ссылка); - ПараметрыФормы.Вставить("НаборСвойств", Объект.НаборСвойств); ПараметрыФормы.Вставить("ВладелецДополнительныхЗначений", Объект.ВладелецДополнительныхЗначений); ПараметрыФормы.Вставить("ЭтоДополнительноеСведение", Объект.ЭтоДополнительноеСведение); @@ -1259,7 +1254,7 @@ КонецПроцедуры &НаКлиенте -Процедура ЗаписатьОбъект(ВариантТекстаВопроса, ИмяПроцедурыПродолжения, ДополнительныеПараметры = Неопределено, ПараметрыЗаписи = Неопределено) +Процедура ЗаписатьОбъект(ВариантТекстаВопроса, ОбработчикПродолжения, ДополнительныеПараметры = Неопределено, ПараметрыЗаписи = Неопределено) Если ПараметрыЗаписи = Неопределено Тогда ПараметрыЗаписи = Новый Структура; @@ -1267,13 +1262,11 @@ Если ВариантТекстаВопроса = "ИзменениеПометкиУдаления" Тогда Если Модифицированность Тогда - ТекстВопроса = НСтр("ru = 'Для %1 пометки удаления необходимо записать внесенные изменения. Записать данные?'"); Если Объект.ПометкаУдаления Тогда - Действие = НСтр("ru = 'снятия'"); + ТекстВопроса = НСтр("ru = 'Для снятия пометки удаления необходимо записать внесенные изменения. Записать данные?'"); Иначе - Действие = НСтр("ru = 'установки'"); + ТекстВопроса = НСтр("ru = 'Для установки пометки удаления необходимо записать внесенные изменения. Записать данные?'"); КонецЕсли; - ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстВопроса, Действие); Иначе ТекстВопроса = НСтр("ru = 'Пометить ""%1"" на удаление?'"); ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстВопроса, Объект.Наименование); @@ -1281,22 +1274,20 @@ ПоказатьВопрос( Новый ОписаниеОповещения( - ИмяПроцедурыПродолжения, ЭтотОбъект, ПараметрыЗаписи), + ОбработчикПродолжения.ИмяПроцедуры, ОбработчикПродолжения.Модуль, ПараметрыЗаписи), ТекстВопроса, РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Да); Возврат; КонецЕсли; Если ЗначениеЗаполнено(Объект.Ссылка) И НЕ Модифицированность Тогда - ВыполнитьОбработкуОповещения(Новый ОписаниеОповещения( - ИмяПроцедурыПродолжения, ЭтотОбъект, ДополнительныеПараметры), Ложь); + ОбработчикПродолжения.ИмяПроцедуры, ОбработчикПродолжения.Модуль, ДополнительныеПараметры), Ложь); Возврат; КонецЕсли; ОбработкаПродолжения = Новый Структура; - ОбработкаПродолжения.Вставить("ИмяПроцедуры", ИмяПроцедурыПродолжения); + ОбработкаПродолжения.Вставить("ИмяПроцедуры", ОбработчикПродолжения.ИмяПроцедуры); ОбработкаПродолжения.Вставить("Параметры", ДополнительныеПараметры); - ПараметрыЗаписи.Вставить("ОбработкаПродолжения", ОбработкаПродолжения); Если ЗначениеЗаполнено(Объект.Ссылка) Тогда @@ -1305,14 +1296,9 @@ КонецЕсли; Если ВариантТекстаВопроса = "ПереходКСпискуЗначений" Тогда - ТекстВопроса = - НСтр("ru = 'Переход к работе со списком значений - |возможен только после записи данных. - | - |Данные будут записаны.'"); + ТекстВопроса = НСтр("ru = 'Перед переходом к списку значений данные будут записаны.'"); Иначе - ТекстВопроса = - НСтр("ru = 'Данные будут записаны.'") + ТекстВопроса = НСтр("ru = 'Данные будут записаны.'") КонецЕсли; Кнопки = Новый СписокЗначений; @@ -1515,10 +1501,8 @@ Если ЗначениеЗаполнено(Объект.Ссылка) Тогда СтарыйТипЗначения = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.Ссылка, "ТипЗначения"); - МожноНастраиватьВидимостьДоступность = ЗначениеЗаполнено(Объект.НаборСвойств); Иначе СтарыйТипЗначения = Новый ОписаниеТипов; - МожноНастраиватьВидимостьДоступность = ЗначениеЗаполнено(ТекущийНаборСвойств); КонецЕсли; Если Объект.ЭтоДополнительноеСведение Тогда @@ -1530,19 +1514,10 @@ Элементы.ЗадатьУсловиеЗаполнения.Видимость = Не РеквизитБулево; Элементы.ГруппаСвойстваИЗависимости.Видимость = Истина; - Если МожноНастраиватьВидимостьДоступность Тогда - Элементы.ЗадатьУсловиеЗаполнения.Доступность = Объект.ЗаполнятьОбязательно; - Элементы.ЗадатьУсловиеДоступности.Доступность = Истина; - Элементы.ЗадатьУсловиеВидимости.Доступность = Истина; - Иначе - Элементы.ЗадатьУсловиеВидимости.Видимость = Ложь; - Элементы.ЗадатьУсловиеДоступности.Видимость = Ложь; - Элементы.ЗадатьУсловиеЗаполнения.Видимость = Ложь; - - Элементы.Виден.Видимость = Ложь; - Элементы.Доступен.Видимость = Ложь; - Элементы.ЗаполнятьОбязательно.Заголовок = НСтр("ru = 'Заполнять обязательно'"); - КонецЕсли; + Элементы.ЗадатьУсловиеЗаполнения.Доступность = Объект.ЗаполнятьОбязательно; + Элементы.ЗадатьУсловиеДоступности.Доступность = Истина; + Элементы.ЗадатьУсловиеВидимости.Доступность = Истина; + УстановитьЗаголовкиГиперссылок(); КонецЕсли; @@ -1599,7 +1574,7 @@ |так как дополнительные значения уже введены. |Сначала нужно удалить введенные дополнительные значения. | - |Удаленный тип восстановлен.'"), + |Удаление отменено.'"), Строка(Тип("СправочникСсылка.ЗначенияСвойствОбъектовИерархия")) ); Объект.ТипЗначения = Новый ОписаниеТипов( @@ -1615,7 +1590,7 @@ |так как дополнительные значения уже введены. |Сначала нужно удалить введенные дополнительные значения. | - |Удаленный тип восстановлен.'"), + |Удаление отменено.'"), Строка(Тип("СправочникСсылка.ЗначенияСвойствОбъектов")) ); Объект.ТипЗначения = Новый ОписаниеТипов( @@ -1760,7 +1735,7 @@ Элементы.УточнениеСпискаЗначенийИзменить.Доступность = ЗначениеЗаполнено(Объект.Ссылка); СвойстваВладельца = ОбщегоНазначения.ЗначенияРеквизитовОбъекта( - Объект.ВладелецДополнительныхЗначений, "НаборСвойств, Заголовок, ЭтоДополнительноеСведение"); + Объект.ВладелецДополнительныхЗначений, "Заголовок, ЭтоДополнительноеСведение"); Если СвойстваВладельца.ЭтоДополнительноеСведение <> Истина Тогда ШаблонУточнения = НСтр("ru = 'Список значений общий с реквизитом ""%1""'"); @@ -1768,23 +1743,13 @@ ШаблонУточнения = НСтр("ru = 'Список значений общий со сведением ""%1""'"); КонецЕсли; - Если ЗначениеЗаполнено(СвойстваВладельца.НаборСвойств) Тогда - ШаблонУточненияНабор = " " + НСтр("ru = 'набора ""%1""'"); - ШаблонУточненияНабор = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонУточненияНабор, Строка(СвойстваВладельца.НаборСвойств)); - Иначе - ШаблонУточненияНабор = ""; - КонецЕсли; - Элементы.УточнениеСпискаЗначенийКомментарий.Заголовок = - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонУточнения, СвойстваВладельца.Заголовок) - + ШаблонУточненияНабор + " "; + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонУточнения, СвойстваВладельца.Заголовок); КонецЕсли; ОбновитьСписокНаборов(); - Если НЕ ПоказатьУточнениеНабора - И ЗначениеЗаполнено(Объект.НаборСвойств) - И СписокНаборов.Количество() < 2 Тогда + Если НЕ ПоказатьУточнениеНабора И СписокНаборов.Количество() < 2 Тогда Элементы.УточнениеНаборов.Видимость = Ложь; Иначе @@ -1793,8 +1758,7 @@ Элементы.УточнениеНаборовИзменить.Доступность = ЗначениеЗаполнено(Объект.Ссылка); - Если ЗначениеЗаполнено(Объект.НаборСвойств) - И СписокНаборов.Количество() < 2 Тогда + Если СписокНаборов.Количество() < 2 Тогда Элементы.УточнениеНаборовИзменить.Видимость = Ложь; @@ -1804,56 +1768,33 @@ Элементы.УточнениеНаборовИзменить.Видимость = Ложь; КонецЕсли; - Если СписокНаборов.Количество() > 0 Тогда - - Если ЗначениеЗаполнено(Объект.НаборСвойств) - И СписокНаборов.Количество() < 2 Тогда - - Если Объект.ЭтоДополнительноеСведение Тогда - ШаблонУточнения = НСтр("ru = 'Сведение входит в набор: %1'"); - Иначе - ШаблонУточнения = НСтр("ru = 'Реквизит входит в набор: %1'"); - КонецЕсли; - ТекстКомментария = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонУточнения, СокрЛП(СписокНаборов[0].Представление)); - Иначе - Если СписокНаборов.Количество() > 1 Тогда - Если Объект.ЭтоДополнительноеСведение Тогда - ШаблонУточнения = НСтр("ru = 'Общее сведение входит в %1 %2'"); - Иначе - ШаблонУточнения = НСтр("ru = 'Общий реквизит входит в %1 %2'"); - КонецЕсли; - - СтрокаНаборы = ПользователиСлужебныйКлиентСервер.ПредметЦелогоЧисла(СписокНаборов.Количество(), - "", НСтр("ru = 'набор,набора,наборов,,,,,,0'")); - - ТекстКомментария = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонУточнения, Формат(СписокНаборов.Количество(), "ЧГ="), СтрокаНаборы); - Иначе - Если Объект.ЭтоДополнительноеСведение Тогда - ШаблонУточнения = НСтр("ru = 'Общее сведение входит в набор: %1'"); - Иначе - ШаблонУточнения = НСтр("ru = 'Общий реквизит входит в набор: %1'"); - КонецЕсли; - - ТекстКомментария = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонУточнения, СокрЛП(СписокНаборов[0].Представление)); - КонецЕсли; - КонецЕсли; - Иначе + Если СписокНаборов.Количество() = 0 Тогда Элементы.УточнениеНаборовКомментарий.Гиперссылка = Ложь; Элементы.УточнениеНаборовИзменить.Видимость = Ложь; - Если ЗначениеЗаполнено(Объект.НаборСвойств) Тогда - Если Объект.ЭтоДополнительноеСведение Тогда - ТекстКомментария = НСтр("ru = 'Сведение не входит в набор'"); - Иначе - ТекстКомментария = НСтр("ru = 'Реквизит не входит в набор'"); - КонецЕсли; + Если Объект.ЭтоДополнительноеСведение Тогда + ТекстКомментария = НСтр("ru = 'Сведение не входит в наборы'"); Иначе - Если Объект.ЭтоДополнительноеСведение Тогда - ТекстКомментария = НСтр("ru = 'Общее сведение не входит в наборы'"); - Иначе - ТекстКомментария = НСтр("ru = 'Общий реквизит не входит в наборы'"); - КонецЕсли; + ТекстКомментария = НСтр("ru = 'Реквизит не входит в наборы'"); КонецЕсли; + ИначеЕсли СписокНаборов.Количество() < 2 Тогда + Если Объект.ЭтоДополнительноеСведение Тогда + ШаблонУточнения = НСтр("ru = 'Сведение входит в набор: %1'"); + Иначе + ШаблонУточнения = НСтр("ru = 'Реквизит входит в набор: %1'"); + КонецЕсли; + ТекстКомментария = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонУточнения, СокрЛП(СписокНаборов[0].Представление)); + Иначе + Если Объект.ЭтоДополнительноеСведение Тогда + ШаблонУточнения = НСтр("ru = 'Сведение входит в %1 %2'"); + Иначе + ШаблонУточнения = НСтр("ru = 'Реквизит входит в %1 %2'"); + КонецЕсли; + + СтрокаНаборы = ПользователиСлужебныйКлиентСервер.ПредметЦелогоЧисла(СписокНаборов.Количество(), + "", НСтр("ru = 'набор,набора,наборов,,,,,,0'")); + + ТекстКомментария = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонУточнения, Формат(СписокНаборов.Количество(), "ЧГ="), СтрокаНаборы); КонецЕсли; Элементы.УточнениеНаборовКомментарий.Заголовок = ТекстКомментария + " "; @@ -1986,12 +1927,6 @@ КонецПроцедуры -&НаСервере -Функция ЭтоОбщийДополнительныйРеквизит(ВыбранныйЭлемент) - НаборСвойствРеквизита = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ВыбранныйЭлемент, "НаборСвойств"); - Возврат Не ЗначениеЗаполнено(НаборСвойствРеквизита.НаборСвойств); -КонецФункции - &НаСервере Функция РеквизитСоСпискомДополнительныхЗначений() @@ -2009,41 +1944,27 @@ &НаСервере Процедура ЗаполнитьСписокДействийПриДобавленииРеквизита() - ЭтоОбщийДополнительныйРеквизит = ЭтоОбщийДополнительныйРеквизит(ПереданныеПараметрыФормы.ВладелецДополнительныхЗначений); - ИспользоватьОбщиеДополнительныеЗначения = ПолучитьФункциональнуюОпцию("ИспользоватьОбщиеДополнительныеЗначения"); - ИспользоватьОбщиеДополнительныеРеквизитыИСведения = ПолучитьФункциональнуюОпцию("ИспользоватьОбщиеДополнительныеРеквизитыИСведения"); - РеквизитСоСпискомДополнительныхЗначений = РеквизитСоСпискомДополнительныхЗначений(); Если ПереданныеПараметрыФормы.ЭтоДополнительноеСведение Тогда - ДобавитьОбщий = НСтр("ru = 'Добавить общее сведение в набор (рекомендуется) + ДобавитьОбщий = НСтр("ru = 'Добавить сведение как есть (рекомендуется) | - |Выбранное сведение уже входит в несколько наборов, поэтому рекомендуется также включить его в этот набор ""как есть"". - |В этом случае будет возможно отбирать по нему данные разных типов в списках и отчетах.'"); - СделатьОбщим = НСтр("ru = 'Сделать дополнительное сведение общим и добавить в набор - | - |Этот вариант подходит для тех случаев, когда сведение должно быть одинаково для обоих наборов. |В этом случае будет возможно отбирать по нему данные разных типов в списках и отчетах.'"); СделатьПоОбразцу = НСтр("ru = 'Сделать копию сведения по образцу (с общим списком значений) | - |Список значений этого сведения будет одинаков для обоих наборов. + |Список значений этого сведения будет общим с исходным сведением. |С помощью этого варианта удобно выполнять централизованную настройку списка значений сразу для нескольких однотипных сведений. |При этом можно отредактировать наименование и ряд других свойств сведения.'"); СоздатьКопированием = НСтр("ru = 'Сделать копию сведения | |Будет создана копия сведения%1'"); Иначе - ДобавитьОбщий = НСтр("ru = 'Добавить общий реквизит в набор (рекомендуется) + ДобавитьОбщий = НСтр("ru = 'Добавить реквизит как есть (рекомендуется) | - |Выбранный реквизит уже входит в несколько наборов, поэтому рекомендуется также включить его в этот набор ""как есть"". - |В этом случае будет возможно отбирать по нему данные разных типов в списках и отчетах.'"); - СделатьОбщим = НСтр("ru = 'Сделать реквизит общим и добавить в набор - | - |Этот вариант подходит для тех случаев, когда реквизит должен быть одинаков для обоих наборов. |В этом случае будет возможно отбирать по нему данные разных типов в списках и отчетах.'"); СделатьПоОбразцу = НСтр("ru = 'Сделать копию реквизита по образцу (с общим списком значений) | - |Список значений этого реквизита будет одинаков для обоих наборов. + |Список значений этого реквизита будет общим с исходным реквизитом. |С помощью этого варианта удобно выполнять централизованную настройку списка значений сразу для нескольких однотипных реквизитов. |При этом можно отредактировать наименование и ряд других свойств реквизита.'"); СоздатьКопированием = НСтр("ru = 'Сделать копию реквизита @@ -2061,19 +1982,13 @@ КонецЕсли; СоздатьКопированием = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СоздатьКопированием, ШаблонВставки); - СписокВыбора.Добавить("СоздатьКопированием", СоздатьКопированием); - - Если ИспользоватьОбщиеДополнительныеЗначения И РеквизитСоСпискомДополнительныхЗначений Тогда + СписокВыбора.Добавить("ДобавитьОбщийРеквизитВНабор", ДобавитьОбщий); + Если РеквизитСоСпискомДополнительныхЗначений Тогда СписокВыбора.Добавить("СоздатьПоОбразцу", СделатьПоОбразцу); КонецЕсли; + СписокВыбора.Добавить("СоздатьКопированием", СоздатьКопированием); - Если ИспользоватьОбщиеДополнительныеРеквизитыИСведения И ЭтоОбщийДополнительныйРеквизит Тогда - СписокВыбора.Добавить("ДобавитьОбщийРеквизитВНабор", ДобавитьОбщий); - ИначеЕсли ИспользоватьОбщиеДополнительныеРеквизитыИСведения Тогда - СписокВыбора.Добавить("СделатьОбщим", СделатьОбщим); - КонецЕсли; - - РежимДобавленияРеквизита = "СоздатьКопированием"; + РежимДобавленияРеквизита = "ДобавитьОбщийРеквизитВНабор"; КонецПроцедуры @@ -2117,7 +2032,11 @@ ЗаданаЗависимостьВидимости = Ложь; ЗависимостиСвойств = Объект.ЗависимостиДополнительныхРеквизитов; - Для Каждого ЗависимостьСвойства Из ЗависимостиСвойств Цикл + ОтборПоНабору = Новый Структура; + ОтборПоНабору.Вставить("НаборСвойств", ТекущийНаборСвойств); + НайденныеЗависимости = Объект.ЗависимостиДополнительныхРеквизитов.НайтиСтроки(ОтборПоНабору); + + Для Каждого ЗависимостьСвойства Из НайденныеЗависимости Цикл Если ЗависимостьСвойства.ЗависимоеСвойство = "Доступен" Тогда ЗаданаЗависимостьДоступности = Истина; ИначеЕсли ЗависимостьСвойства.ЗависимоеСвойство = "ЗаполнятьОбязательно" Тогда @@ -2150,7 +2069,7 @@ ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("ДополнительныйРеквизит", Объект.Ссылка); ПараметрыФормы.Вставить("ЗависимостиРеквизитов", Объект.ЗависимостиДополнительныхРеквизитов); - ПараметрыФормы.Вставить("Набор", Объект.НаборСвойств); + ПараметрыФормы.Вставить("Набор", ТекущийНаборСвойств); ПараметрыФормы.Вставить("НастраиваемоеСвойство", НастраиваемоеСвойство); ОткрытьФорму("ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.Форма.ЗависимостьРеквизитов", ПараметрыФормы); @@ -2161,33 +2080,16 @@ Процедура УстановитьЗаголовокФормы() Если ЗначениеЗаполнено(Объект.Ссылка) Тогда - - Если ЗначениеЗаполнено(Объект.НаборСвойств) Тогда - Если Объект.ЭтоДополнительноеСведение Тогда - Заголовок = Строка(Объект.Заголовок) + " " + НСтр("ru = '(Дополнительное сведение)'"); - Иначе - Заголовок = Строка(Объект.Заголовок) + " " + НСтр("ru = '(Дополнительный реквизит)'"); - КонецЕсли; + Если Объект.ЭтоДополнительноеСведение Тогда + Заголовок = Строка(Объект.Заголовок) + " " + НСтр("ru = '(Дополнительное сведение)'"); Иначе - Если Объект.ЭтоДополнительноеСведение Тогда - Заголовок = Строка(Объект.Заголовок) + " " + НСтр("ru = '(Общее дополнительное сведение)'"); - Иначе - Заголовок = Строка(Объект.Заголовок) + " " + НСтр("ru = '(Общий дополнительный реквизит)'"); - КонецЕсли; + Заголовок = Строка(Объект.Заголовок) + " " + НСтр("ru = '(Дополнительный реквизит)'"); КонецЕсли; Иначе - Если ЗначениеЗаполнено(Объект.НаборСвойств) Тогда - Если Объект.ЭтоДополнительноеСведение Тогда - Заголовок = НСтр("ru = 'Дополнительное сведение (создание)'"); - Иначе - Заголовок = НСтр("ru = 'Дополнительный реквизит (создание)'"); - КонецЕсли; + Если Объект.ЭтоДополнительноеСведение Тогда + Заголовок = НСтр("ru = 'Дополнительное сведение (создание)'"); Иначе - Если Объект.ЭтоДополнительноеСведение Тогда - Заголовок = НСтр("ru = 'Общее дополнительное сведение (создание)'"); - Иначе - Заголовок = НСтр("ru = 'Общий дополнительный реквизит (создание)'"); - КонецЕсли; + Заголовок = НСтр("ru = 'Дополнительный реквизит (создание)'"); КонецЕсли; КонецЕсли; @@ -2227,7 +2129,7 @@ Запрос = Новый Запрос; - Если Не Элементы.ОбщиеРеквизитыНеВключенныеВНаборы.Пометка Тогда + Если Не Элементы.НеиспользуемыеРеквизиты.Пометка Тогда Запрос.УстановитьПараметр("Набор", ВыбранныйНаборСвойств); Запрос.Текст = "ВЫБРАТЬ @@ -2241,13 +2143,7 @@ | КОНЕЦ КАК Заголовок, | Свойства.ВладелецДополнительныхЗначений, | Свойства.ТипЗначения КАК ТипЗначения, - | ВЫБОР - | КОГДА Свойства.Ссылка ЕСТЬ NULL - | ТОГДА ИСТИНА - | КОГДА Свойства.НаборСвойств = ЗНАЧЕНИЕ(Справочник.НаборыДополнительныхРеквизитовИСведений.ПустаяСсылка) - | ТОГДА ИСТИНА - | ИНАЧЕ ЛОЖЬ - | КОНЕЦ КАК Общее, + | ИСТИНА КАК Общее, | ВЫБОР | КОГДА СвойстваНаборов.ПометкаУдаления = ИСТИНА | ТОГДА 4 @@ -2334,12 +2230,14 @@ |ИЗ | ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК Свойства | ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.Представления КАК СвойстваПредставления - | ПО Свойства.Свойство = СвойстваПредставления.Ссылка + | ПО Свойства.Ссылка = СвойстваПредставления.Ссылка | И СвойстваПредставления.КодЯзыка = &КодЯзыка + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.НаборыДополнительныхРеквизитовИСведений.[ИмяТаблицы] КАК СоставНабора + | ПО Свойства.Ссылка = СоставНабора.Свойство | |ГДЕ - | Свойства.НаборСвойств = ЗНАЧЕНИЕ(Справочник.НаборыДополнительныхРеквизитовИСведений.ПустаяСсылка) - | И Свойства.ЭтоДополнительноеСведение = &ЭтоДополнительноеСведение + | Свойства.ЭтоДополнительноеСведение = &ЭтоДополнительноеСведение + | И СоставНабора.Свойство ЕСТЬ NULL | |; | @@ -2347,6 +2245,8 @@ |ВЫБРАТЬ | ""ВерсияДанных"" КАК ВерсияДанных"; + Запрос.Текст = СтрЗаменить(Запрос.Текст, "[ИмяТаблицы]", + ?(ЭтоДополнительноеСведение, "ДополнительныеСведения", "ДополнительныеРеквизиты")); Запрос.УстановитьПараметр("ЭтоДополнительноеСведение", (ЭтоДополнительноеСведение = 1)); КонецЕсли; Запрос.УстановитьПараметр("ЭтоОсновнойЯзык", ТекущийЯзык() = Метаданные.ОсновнойЯзык); @@ -2489,36 +2389,47 @@ &НаСервереБезКонтекста Функция НаименованиеУжеИспользуется(Знач Заголовок, Знач ТекущееСвойство, Знач НаборСвойств, НовоеНаименование, Знач Представления) - Если ТекущийЯзык() <> Метаданные.ОсновнойЯзык Тогда + Если ТекущийЯзык() <> ОбщегоНазначения.КодОсновногоЯзыка() Тогда Отбор = Новый Структура(); - Отбор.Вставить("КодЯзыка", Метаданные.ОсновнойЯзык.КодЯзыка); + Отбор.Вставить("КодЯзыка", ОбщегоНазначения.КодОсновногоЯзыка()); НайденныеСтроки = Представления.НайтиСтроки(Отбор); Если НайденныеСтроки.Количество() > 0 Тогда Заголовок = НайденныеСтроки[0].Заголовок; КонецЕсли; КонецЕсли; - Если ЗначениеЗаполнено(НаборСвойств) Тогда - НаименованиеНабора = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(НаборСвойств, "Наименование"); - НовоеНаименование = Заголовок + " (" + НаименованиеНабора + ")"; - Иначе - НовоеНаименование = Заголовок; - КонецЕсли; + НовоеНаименование = Заголовок; Запрос = Новый Запрос; Запрос.Текст = - "ВЫБРАТЬ ПЕРВЫЕ 1 - | Свойства.ЭтоДополнительноеСведение, - | Свойства.НаборСвойств - |ИЗ - | ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК Свойства - |ГДЕ - | Свойства.Наименование = &Наименование - | И Свойства.Ссылка <> &Ссылка - | И Свойства.НаборСвойств = &Набор"; + "ВЫБРАТЬ ПЕРВЫЕ 1 + | СвойстваНабора.Свойство КАК Свойство, + | РеквизитыИСведения.ЭтоДополнительноеСведение КАК ЭтоДополнительноеСведение + |ИЗ + | Справочник.НаборыДополнительныхРеквизитовИСведений.ДополнительныеРеквизиты КАК СвойстваНабора + | ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК РеквизитыИСведения + | ПО (РеквизитыИСведения.Ссылка = СвойстваНабора.Свойство) + |ГДЕ + | РеквизитыИСведения.Заголовок = &Наименование + | И СвойстваНабора.Ссылка = &НаборСвойств + | И СвойстваНабора.Свойство <> &Ссылка + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ ПЕРВЫЕ 1 + | СвойстваНабора.Свойство КАК Свойство, + | РеквизитыИСведения.ЭтоДополнительноеСведение КАК ЭтоДополнительноеСведение + |ИЗ + | Справочник.НаборыДополнительныхРеквизитовИСведений.ДополнительныеСведения КАК СвойстваНабора + | ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК РеквизитыИСведения + | ПО (РеквизитыИСведения.Ссылка = СвойстваНабора.Свойство) + |ГДЕ + | РеквизитыИСведения.Заголовок = &Наименование + | И СвойстваНабора.Ссылка = &НаборСвойств + | И СвойстваНабора.Свойство <> &Ссылка"; Запрос.УстановитьПараметр("Ссылка", ТекущееСвойство); - Запрос.УстановитьПараметр("Набор", НаборСвойств); + Запрос.УстановитьПараметр("НаборСвойств", НаборСвойств); Запрос.УстановитьПараметр("Наименование", НовоеНаименование); НачатьТранзакцию(); @@ -2535,27 +2446,17 @@ Возврат ""; КонецЕсли; - Если ЗначениеЗаполнено(Выборка.НаборСвойств) Тогда - Если Выборка.ЭтоДополнительноеСведение Тогда - ТекстВопроса = НСтр("ru = 'Существует дополнительное сведение с наименованием - |""%1"".'"); - Иначе - ТекстВопроса = НСтр("ru = 'Существует дополнительный реквизит с наименованием - |""%1"".'"); - КонецЕсли; + Если Выборка.ЭтоДополнительноеСведение Тогда + ТекстВопроса = НСтр("ru = 'Существует дополнительное сведение с наименованием + |""%1"".'"); Иначе - Если Выборка.ЭтоДополнительноеСведение Тогда - ТекстВопроса = НСтр("ru = 'Существует общее дополнительное сведение с наименованием - |""%1"".'"); - Иначе - ТекстВопроса = НСтр("ru = 'Существует общий дополнительный реквизит с наименованием - |""%1"".'"); - КонецЕсли; + ТекстВопроса = НСтр("ru = 'Существует дополнительный реквизит с наименованием + |""%1"".'"); КонецЕсли; ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( ТекстВопроса + Символы.ПС + Символы.ПС - + НСтр("ru ='Рекомендуется использовать другое наименование, + + НСтр("ru = 'Рекомендуется использовать другое наименование, |иначе программа может работать некорректно.'"), НовоеНаименование); @@ -2564,13 +2465,12 @@ КонецФункции &НаСервереБезКонтекста -Функция ИмяУжеИспользуется(Знач Имя, Знач ТекущееСвойство, Знач НаборСвойств, НовоеНаименование) +Функция ИмяУжеИспользуется(Знач Имя, Знач ТекущееСвойство, НовоеНаименование) Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 - | Свойства.ЭтоДополнительноеСведение, - | Свойства.НаборСвойств + | Свойства.ЭтоДополнительноеСведение |ИЗ | ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК Свойства |ГДЕ diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/ManagerModule.bsl b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/ManagerModule.bsl index 34edacd20..8423fe2c7 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/ManagerModule.bsl +++ b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/ManagerModule.bsl @@ -96,7 +96,7 @@ КонецПроцедуры Процедура ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка) - ЛокализацияКлиентСервер.ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка, "Заголовок"); + МультиязычностьКлиентСервер.ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка, "Заголовок"); Если Не ЗначениеЗаполнено(Представление) Тогда Представление = Данные.Заголовок; КонецЕсли; @@ -148,10 +148,22 @@ Запрос.УстановитьПараметр("Владелец", Свойство); НовыйОбъект = СоздатьЭлемент(); ЗаполнитьЗначенияСвойств(НовыйОбъект, СвойствоОбъект, , "Родитель"); + + Отбор = Новый Структура; + Отбор.Вставить("НаборСвойств", ТекущийНаборСвойств); + ЗависимостиНабора = СвойствоОбъект.ЗависимостиДополнительныхРеквизитов.НайтиСтроки(Отбор); + Для Каждого Зависимость Из ЗависимостиНабора Цикл + ЗаполнитьЗначенияСвойств(НовыйОбъект.ЗависимостиДополнительныхРеквизитов.Добавить(), Зависимость); + КонецЦикла; + СвойствоОбъект = НовыйОбъект; - СвойствоОбъект.НаборСвойств = ТекущийНаборСвойств; Если ЗначениеЗаполнено(СвойствоОбъект.Имя) Тогда - СвойствоОбъект.Имя = СвойствоОбъект.Имя + "1"; + ИмяЧастями = СтрРазделить(СвойствоОбъект.Имя, "_"); + Имя = ИмяЧастями[0]; + + УИД = Новый УникальныйИдентификатор(); + СтрокаУИД = СтрЗаменить(Строка(УИД), "-", ""); + СвойствоОбъект.Имя = Имя + "_" + СтрокаУИД; КонецЕсли; СвойствоОбъект.Записать(); @@ -179,14 +191,14 @@ ОткрытьСвойство = СвойствоОбъект.Ссылка; МетаданныеВладельца = УправлениеСвойствамиСлужебный.МетаданныеВладельцаЗначенийСвойствНабора( - СвойствоОбъект.НаборСвойств, Ложь); + ТекущийНаборСвойств, Ложь); Если МетаданныеВладельца = Неопределено Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Ошибка при изменении настройки свойства %1. |Набор свойств %2 не связан ни с одним владельцем значений свойств.'"), Свойство, - СвойствоОбъект.НаборСвойств); + ТекущийНаборСвойств); КонецЕсли; ПолноеИмяВладельца = МетаданныеВладельца.ПолноеИмя(); @@ -284,7 +296,7 @@ Если ТребуетсяАнализНаборовКаждогоОбъектаВладельца Тогда ЗапросАнализа = Новый Запрос; ЗапросАнализа.УстановитьПараметр("ОбщееСвойство", Свойство); - ЗапросАнализа.УстановитьПараметр("НаборНовогоСвойства", СвойствоОбъект.НаборСвойств); + ЗапросАнализа.УстановитьПараметр("НаборНовогоСвойства", ТекущийНаборСвойств); ЗапросАнализа.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 | ИСТИНА КАК ЗначениеИстина @@ -415,7 +427,7 @@ Если ТребуетсяАнализНаборовКаждогоОбъектаВладельца Тогда ЗапросАнализа = Новый Запрос; ЗапросАнализа.УстановитьПараметр("ОбщееСвойство", Свойство); - ЗапросАнализа.УстановитьПараметр("НаборНовогоСвойства", СвойствоОбъект.НаборСвойств); + ЗапросАнализа.УстановитьПараметр("НаборНовогоСвойства", ТекущийНаборСвойств); ЗапросАнализа.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 | ИСТИНА КАК ЗначениеИстина @@ -550,8 +562,19 @@ |ИЗ | ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК ДополнительныеРеквизитыИСведения |ГДЕ - | ДополнительныеРеквизитыИСведения.Имя = &Имя"; + | ДополнительныеРеквизитыИСведения.Имя = &Имя + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | ЗависимостиДополнительныхРеквизитов.Ссылка КАК Ссылка + |ИЗ + | ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.ЗависимостиДополнительныхРеквизитов КАК ЗависимостиДополнительныхРеквизитов + |ГДЕ + | ЗависимостиДополнительныхРеквизитов.НаборСвойств = &НаборСвойств"; + Запрос.УстановитьПараметр("Имя", ""); + Запрос.УстановитьПараметр("НаборСвойств", Справочники.НаборыДополнительныхРеквизитовИСведений.ПустаяСсылка()); Результат = Запрос.Выполнить().Выгрузить(); МассивСсылок = Результат.ВыгрузитьКолонку("Ссылка"); @@ -567,6 +590,7 @@ ПроблемныхОбъектов = 0; ОбъектовОбработано = 0; + Пока Выборка.Следующий() Цикл НачатьТранзакцию(); @@ -579,20 +603,17 @@ Объект = Выборка.Ссылка.ПолучитьОбъект(); - ЗаголовокОбъекта = Объект.Заголовок; - УправлениеСвойствамиСлужебный.УдалитьНедопустимыеСимволы(ЗаголовокОбъекта); - ЗаголовокОбъектаЧастями = СтрРазделить(ЗаголовокОбъекта, " ", Ложь); - Для Каждого ЧастьЗаголовка Из ЗаголовокОбъектаЧастями Цикл - Объект.Имя = Объект.Имя + ВРег(Лев(ЧастьЗаголовка, 1)) + Сред(ЧастьЗаголовка, 2); - КонецЦикла; - - // Проверка уникальности имени. - Если ИмяИспользуется(Выборка.Ссылка, Объект.Имя) Тогда - УИД = Новый УникальныйИдентификатор(); - СтрокаУИД = СтрЗаменить(Строка(УИД), "-", ""); - Объект.Имя = Объект.Имя + "_" + СтрокаУИД; + Если Не ЗначениеЗаполнено(Объект.Имя) Тогда + УстановитьИмяРеквизита(Выборка, Объект); КонецЕсли; + Для Каждого Зависимость Из Объект.ЗависимостиДополнительныхРеквизитов Цикл + Если ЗначениеЗаполнено(Зависимость.НаборСвойств) Тогда + Продолжить; + КонецЕсли; + Зависимость.НаборСвойств = Объект.НаборСвойств; + КонецЦикла; + ОбновлениеИнформационнойБазы.ЗаписатьДанные(Объект); ОбъектовОбработано = ОбъектовОбработано + 1; @@ -626,13 +647,30 @@ КонецПроцедуры +Процедура УстановитьИмяРеквизита(Выборка, Объект) + + ЗаголовокОбъекта = Объект.Заголовок; + УправлениеСвойствамиСлужебный.УдалитьНедопустимыеСимволы(ЗаголовокОбъекта); + ЗаголовокОбъектаЧастями = СтрРазделить(ЗаголовокОбъекта, " ", Ложь); + Для Каждого ЧастьЗаголовка Из ЗаголовокОбъектаЧастями Цикл + Объект.Имя = Объект.Имя + ВРег(Лев(ЧастьЗаголовка, 1)) + Сред(ЧастьЗаголовка, 2); + КонецЦикла; + + // Проверка уникальности имени. + Если ИмяИспользуется(Выборка.Ссылка, Объект.Имя) Тогда + УИД = Новый УникальныйИдентификатор(); + СтрокаУИД = СтрЗаменить(Строка(УИД), "-", ""); + Объект.Имя = Объект.Имя + "_" + СтрокаУИД; + КонецЕсли; + +КонецПроцедуры + Функция ИмяИспользуется(Ссылка, Имя) Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 - | Свойства.ЭтоДополнительноеСведение, - | Свойства.НаборСвойств + | Свойства.ЭтоДополнительноеСведение |ИЗ | ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК Свойства |ГДЕ diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/ObjectModule.bsl b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/ObjectModule.bsl index 4cb54fe68..9088a6439 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/ObjectModule.bsl +++ b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/ObjectModule.bsl @@ -25,13 +25,6 @@ ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(ЭтотОбъект); - // Для общих реквизитов зависимости очищаются. - Если Не ЭтоДополнительноеСведение - И Не ЗначениеЗаполнено(НаборСвойств) - И ЗависимостиДополнительныхРеквизитов.Количество() > 0 Тогда - ЗависимостиДополнительныхРеквизитов.Очистить(); - КонецЕсли; - КонецПроцедуры Процедура ПриЗаписи(Отказ) @@ -76,6 +69,11 @@ КонецЕсли; Если НовыйТипЗначения <> Неопределено Тогда + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения"); + ЭлементБлокировки.УстановитьЗначение("Ссылка", Выборка.Ссылка); + Блокировка.Заблокировать(); + ТекущийОбъект = Выборка.Ссылка.ПолучитьОбъект(); ТекущийОбъект.ТипЗначения = НовыйТипЗначения; ТекущийОбъект.ОбменДанными.Загрузка = Истина; @@ -150,6 +148,11 @@ Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Справочник.НаборыДополнительныхРеквизитовИСведений"); + ЭлементБлокировки.УстановитьЗначение("Ссылка", Выборка.Ссылка); + Блокировка.Заблокировать(); + ТекущийОбъект = Выборка.Ссылка.ПолучитьОбъект(); // Удаление дополнительных реквизитов. Индекс = ТекущийОбъект.ДополнительныеРеквизиты.Количество()-1; @@ -180,7 +183,7 @@ #Область СлужебныйПрограммныйИнтерфейс Процедура ПриЧтенииПредставленийНаСервере() Экспорт - ЛокализацияСервер.ПриЧтенииПредставленийНаСервере(ЭтотОбъект); + МультиязычностьСервер.ПриЧтенииПредставленийНаСервере(ЭтотОбъект); КонецПроцедуры #КонецОбласти diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/ДополнительныеРеквизитыИСведения.mdo b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/ДополнительныеРеквизитыИСведения.mdo index 8ace381dd..c7520ebbf 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/ДополнительныеРеквизитыИСведения.mdo +++ b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/ДополнительныеРеквизитыИСведения.mdo @@ -138,7 +138,6 @@ BothWays ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.Form.ФормаЭлемента ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.Form.ФормаСписка - ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.Form.ФормаВыбора Виден @@ -402,25 +401,6 @@ Use Use - - НаборСвойств - - ru - Набор свойств - - - CatalogRef.НаборыДополнительныхРеквизитовИСведений - - - ru - Набор свойств, которому принадлежит уникальное свойство. Если не задан, значит свойство общее. - - - - - Use - Use - Подсказка @@ -480,6 +460,25 @@ Use Use + + НаборСвойств + + ru + Набор свойств + + + CatalogRef.НаборыДополнительныхРеквизитовИСведений + + + ru + Набор свойств, которому принадлежит уникальное свойство. Если не задан, значит свойство включено в несколько наборов. + + + + + Use + Use + @@ -517,6 +516,20 @@ Use Use + + НаборСвойств + + ru + Набор свойств + + + CatalogRef.НаборыДополнительныхРеквизитовИСведений + + + + Use + Use + Реквизит @@ -717,20 +730,6 @@ PersonalComputer MobileDevice - - ФормаВыбора - - ru - Форма выбора - - - - ru - - - PersonalComputer - MobileDevice - РазблокированиеРеквизитов diff --git a/SSL/src/ChartsOfCharacteristicTypes/ОбъектыАдресацииЗадач/Forms/ФормаСписка/Form.form b/SSL/src/ChartsOfCharacteristicTypes/ОбъектыАдресацииЗадач/Forms/ФормаСписка/Form.form index eca95d3a3..81d47b3ff 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ОбъектыАдресацииЗадач/Forms/ФормаСписка/Form.form +++ b/SSL/src/ChartsOfCharacteristicTypes/ОбъектыАдресацииЗадач/Forms/ФормаСписка/Form.form @@ -339,6 +339,10 @@ Left true + + OnCreateAtServer + ПриСозданииНаСервере + DontBlock true true diff --git a/SSL/src/ChartsOfCharacteristicTypes/ОбъектыАдресацииЗадач/Forms/ФормаСписка/Module.bsl b/SSL/src/ChartsOfCharacteristicTypes/ОбъектыАдресацииЗадач/Forms/ФормаСписка/Module.bsl new file mode 100644 index 000000000..9860b150d --- /dev/null +++ b/SSL/src/ChartsOfCharacteristicTypes/ОбъектыАдресацииЗадач/Forms/ФормаСписка/Module.bsl @@ -0,0 +1,18 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2019, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + МультиязычностьСервер.ПриСозданииНаСервере(ЭтотОбъект); + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/ChartsOfCharacteristicTypes/ОбъектыАдресацииЗадач/Forms/ФормаЭлемента/Form.form b/SSL/src/ChartsOfCharacteristicTypes/ОбъектыАдресацииЗадач/Forms/ФормаЭлемента/Form.form index aa388790d..be8fac9f6 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ОбъектыАдресацииЗадач/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/ChartsOfCharacteristicTypes/ОбъектыАдресацииЗадач/Forms/ФормаЭлемента/Form.form @@ -85,6 +85,10 @@ Left true + + OnCreateAtServer + ПриСозданииНаСервере + LockOwner true true @@ -110,9 +114,33 @@
    true
    true
    + + ПараметрыМультиязычныхРеквизитов + 2 + + + true + + + true + + - + + + AfterWriteAtServer + ПослеЗаписиНаСервере + + + OnReadAtServer + ПриЧтенииНаСервере + + + BeforeWriteAtServer + ПередЗаписьюНаСервере + + diff --git a/SSL/src/ChartsOfCharacteristicTypes/ОбъектыАдресацииЗадач/Forms/ФормаЭлемента/Module.bsl b/SSL/src/ChartsOfCharacteristicTypes/ОбъектыАдресацииЗадач/Forms/ФормаЭлемента/Module.bsl new file mode 100644 index 000000000..aad937afc --- /dev/null +++ b/SSL/src/ChartsOfCharacteristicTypes/ОбъектыАдресацииЗадач/Forms/ФормаЭлемента/Module.bsl @@ -0,0 +1,42 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2019, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + МультиязычностьСервер.ПриСозданииНаСервере(ЭтотОбъект, Объект); + +КонецПроцедуры + +&НаСервере +Процедура ПриЧтенииНаСервере(ТекущийОбъект) + МультиязычностьСервер.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); +КонецПроцедуры + +&НаСервере +Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) + МультиязычностьСервер.ПередЗаписьюНаСервере(ТекущийОбъект); +КонецПроцедуры + +&НаСервере +Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи) + МультиязычностьСервер.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы + +&НаКлиенте +Процедура Подключаемый_Открытие(Элемент, СтандартнаяОбработка) + МультиязычностьКлиент.ПриОткрытии(ЭтотОбъект, Объект, Элемент, СтандартнаяОбработка); +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/ChartsOfCharacteristicTypes/ОбъектыАдресацииЗадач/ManagerModule.bsl b/SSL/src/ChartsOfCharacteristicTypes/ОбъектыАдресацииЗадач/ManagerModule.bsl index e955b2652..c051b4f6e 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ОбъектыАдресацииЗадач/ManagerModule.bsl +++ b/SSL/src/ChartsOfCharacteristicTypes/ОбъектыАдресацииЗадач/ManagerModule.bsl @@ -34,3 +34,82 @@ #КонецОбласти #КонецЕсли + + +#Область ОбработчикиСобытий + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка) + + МультиязычностьСервер.ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка, Метаданные.ПланыВидовХарактеристик.ОбъектыАдресацииЗадач); + +КонецПроцедуры + +#КонецЕсли + +Процедура ОбработкаПолученияПолейПредставления(Поля, СтандартнаяОбработка) + + МультиязычностьКлиентСервер.ОбработкаПолученияПолейПредставления(Поля, СтандартнаяОбработка); + +КонецПроцедуры + +Процедура ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка) + + МультиязычностьКлиентСервер.ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка); + +КонецПроцедуры + +#КонецОбласти + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область СлужебныйПрограммныйИнтерфейс + +// Определяет настройки начального заполнения элементов +// +// Параметры: +// Настройки - Структура - настройки заполнения +// * ПриНачальномЗаполненииЭлемента - Булево - Если Истина, то для каждого элемента будет +// вызвана процедура индивидуального заполнения ПриНачальномЗаполненииЭлемента. +// +Процедура ПриНастройкеНачальногоЗаполненияЭлементов(Настройки) Экспорт + + Настройки.ПриНачальномЗаполненииЭлемента = Истина; + +КонецПроцедуры + +// Вызывается при начальном заполнении объектов адресации задач. +// Стандартный реквизит ТипЗначения заполняется в процедуре ПриНачальномЗаполненииЭлемента. +// +// Параметры: +// КодыЯзыков - Массив - список языков конфигурации. Актуально для мультиязычных конфигураций. +// Элементы - ТаблицаЗначений - данные заполнения. Состав колонок соответствует набору реквизитов объекта ПВХ ОбъектыАдресацииЗада. +// +Процедура ПриНачальномЗаполненииЭлементов(КодыЯзыков, Элементы) Экспорт + + Элемент = Элементы.Добавить(); + Элемент.ИмяПредопределенныхДанных = "ВсеОбъектыАдресации"; + МультиязычностьСервер.ЗаполнитьМультиязычныйРеквизит(Элемент, "Наименование", + "ru='Все объекты адресации'", КодыЯзыков); // @НСтр + + БизнесПроцессыИЗадачиПереопределяемый.ПриНачальномЗаполненииОбъектовАдресацииЗадач(КодыЯзыков, Элементы); + +КонецПроцедуры + +// Вызывается при начальном заполнении создаваемого объекта адресации задач. +// +// Параметры: +// Объект - ПланВидовХарактеристикОбъект.ОбъектыАдресацииЗадач - заполняемый объект. +// Данные - СтрокаТаблицыЗначений - данные заполнения. +// ДополнительныеПараметры - Структура - Дополнительные параметры. +// +Процедура ПриНачальномЗаполненииЭлемента(Объект, Данные, ДополнительныеПараметры) Экспорт + + БизнесПроцессыИЗадачиПереопределяемый.ПриНачальномЗаполненииЭлементаОбъектаАдресацииЗадачи(Объект, Данные, ДополнительныеПараметры); + +КонецПроцедуры + +#КонецОбласти + +#КонецЕсли diff --git a/SSL/src/ChartsOfCharacteristicTypes/ОбъектыАдресацииЗадач/ObjectModule.bsl b/SSL/src/ChartsOfCharacteristicTypes/ОбъектыАдресацииЗадач/ObjectModule.bsl index e69de29bb..1d7feed28 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ОбъектыАдресацииЗадач/ObjectModule.bsl +++ b/SSL/src/ChartsOfCharacteristicTypes/ОбъектыАдресацииЗадач/ObjectModule.bsl @@ -0,0 +1,23 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2019, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ОбработчикиСобытий + +Процедура ПриЧтенииПредставленийНаСервере() Экспорт + + МультиязычностьСервер.ПриЧтенииПредставленийНаСервере(ЭтотОбъект); + +КонецПроцедуры + +#КонецОбласти + +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/ChartsOfCharacteristicTypes/ОбъектыАдресацииЗадач/ОбъектыАдресацииЗадач.mdo b/SSL/src/ChartsOfCharacteristicTypes/ОбъектыАдресацииЗадач/ОбъектыАдресацииЗадач.mdo index fdfc66aae..a1fe61ccd 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ОбъектыАдресацииЗадач/ОбъектыАдресацииЗадач.mdo +++ b/SSL/src/ChartsOfCharacteristicTypes/ОбъектыАдресацииЗадач/ОбъектыАдресацииЗадач.mdo @@ -138,6 +138,7 @@ InDialog BothWays + DontUse ChartOfCharacteristicTypes.ОбъектыАдресацииЗадач.Form.ФормаЭлемента ChartOfCharacteristicTypes.ОбъектыАдресацииЗадач.Form.ФормаСписка diff --git a/SSL/src/ChartsOfCharacteristicTypes/РазделыДатЗапретаИзменения/ManagerModule.bsl b/SSL/src/ChartsOfCharacteristicTypes/РазделыДатЗапретаИзменения/ManagerModule.bsl index 3b952ba18..40b879275 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/РазделыДатЗапретаИзменения/ManagerModule.bsl +++ b/SSL/src/ChartsOfCharacteristicTypes/РазделыДатЗапретаИзменения/ManagerModule.bsl @@ -17,7 +17,7 @@ // Возвращает реквизиты справочника, которые образуют естественный ключ для элементов справочника. // // Возвращаемое значение: -// Массив(Строка) - массив имен реквизитов, образующих естественный ключ. +// Массив Из Строка - массив имен реквизитов, образующих естественный ключ. // Функция ПоляЕстественногоКлюча() Экспорт diff --git a/SSL/src/ChartsOfCharacteristicTypes/РазделыДатЗапретаИзменения/РазделыДатЗапретаИзменения.mdo b/SSL/src/ChartsOfCharacteristicTypes/РазделыДатЗапретаИзменения/РазделыДатЗапретаИзменения.mdo index a3a2a23d5..5a5eefab4 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/РазделыДатЗапретаИзменения/РазделыДатЗапретаИзменения.mdo +++ b/SSL/src/ChartsOfCharacteristicTypes/РазделыДатЗапретаИзменения/РазделыДатЗапретаИзменения.mdo @@ -13,6 +13,7 @@ ru Разделы дат запрета изменения + АПК:304 - №697.1.2 Обновление предопределенных данных вместо Авто требуется установить Не обновлять автоматически, так как предопределенные элементы более не используются, не должны создаваться и названы Удалить* ChartOfCharacteristicTypes.РазделыДатЗапретаИзменения.StandardAttribute.Description DontUse diff --git a/SSL/src/CommonAttributes/КомментарийЯзык1/КомментарийЯзык1.mdo b/SSL/src/CommonAttributes/КомментарийЯзык1/КомментарийЯзык1.mdo new file mode 100644 index 000000000..684755040 --- /dev/null +++ b/SSL/src/CommonAttributes/КомментарийЯзык1/КомментарийЯзык1.mdo @@ -0,0 +1,26 @@ + + + КомментарийЯзык1 + + ru + Комментарий (дополнительный язык) + + + String + + + + + Use + + + Catalog.РолиИсполнителей + Use + + DontUse + DontUse + DontUse + DontUse + DontUse + Use + diff --git a/SSL/src/CommonAttributes/КомментарийЯзык2/КомментарийЯзык2.mdo b/SSL/src/CommonAttributes/КомментарийЯзык2/КомментарийЯзык2.mdo new file mode 100644 index 000000000..9f4d399bc --- /dev/null +++ b/SSL/src/CommonAttributes/КомментарийЯзык2/КомментарийЯзык2.mdo @@ -0,0 +1,26 @@ + + + КомментарийЯзык2 + + ru + Комментарий (дополнительный язык 2) + + + String + + + + + Use + + + Catalog.РолиИсполнителей + Use + + DontUse + DontUse + DontUse + DontUse + DontUse + Use + diff --git a/SSL/src/CommonAttributes/НаименованиеЯзык1/НаименованиеЯзык1.mdo b/SSL/src/CommonAttributes/НаименованиеЯзык1/НаименованиеЯзык1.mdo new file mode 100644 index 000000000..9ceb781d1 --- /dev/null +++ b/SSL/src/CommonAttributes/НаименованиеЯзык1/НаименованиеЯзык1.mdo @@ -0,0 +1,33 @@ + + + НаименованиеЯзык1 + + ru + Наименование (дополнительный язык) + + + String + + 150 + + + + + Use + + + Catalog.РолиИсполнителей + Use + + + ChartOfCharacteristicTypes.ОбъектыАдресацииЗадач + Use + + DontUse + DontUse + DontUse + DontUse + DontUse + IndexWithAdditionalOrder + Use + diff --git a/SSL/src/CommonAttributes/НаименованиеЯзык2/НаименованиеЯзык2.mdo b/SSL/src/CommonAttributes/НаименованиеЯзык2/НаименованиеЯзык2.mdo new file mode 100644 index 000000000..79fa39430 --- /dev/null +++ b/SSL/src/CommonAttributes/НаименованиеЯзык2/НаименованиеЯзык2.mdo @@ -0,0 +1,33 @@ + + + НаименованиеЯзык2 + + ru + Наименование (дополнительный язык 2) + + + String + + 150 + + + + + Use + + + Catalog.РолиИсполнителей + Use + + + ChartOfCharacteristicTypes.ОбъектыАдресацииЗадач + Use + + DontUse + DontUse + DontUse + DontUse + DontUse + IndexWithAdditionalOrder + Use + diff --git a/SSL/src/CommonAttributes/ОбластьДанныхОсновныеДанные/ОбластьДанныхОсновныеДанные.mdo b/SSL/src/CommonAttributes/ОбластьДанныхОсновныеДанные/ОбластьДанныхОсновныеДанные.mdo index 672c1c939..ecdc5a34e 100644 --- a/SSL/src/CommonAttributes/ОбластьДанныхОсновныеДанные/ОбластьДанныхОсновныеДанные.mdo +++ b/SSL/src/CommonAttributes/ОбластьДанныхОсновныеДанные/ОбластьДанныхОсновныеДанные.mdo @@ -86,10 +86,18 @@ Constant.НастройкаПроксиСервера DontUse + + Constant.СоздаватьПодкаталогиСИменамиВладельцев + DontUse + InformationRegister.ДомаЗданияСтроения DontUse + + Constant.СпособХраненияФайлов + DontUse + InformationRegister.ЗависимостиПравДоступа DontUse @@ -222,6 +230,14 @@ Constant.ЗагрузитьСообщениеОбменаДанными DontUse + + Constant.ОсновнойЯзык + DontUse + + + Constant.ИспользоватьДополнительныйЯзык1 + DontUse + InformationRegister.ВерсииПодсистем DontUse @@ -243,7 +259,7 @@ DontUse - Constant.ИспользоватьПрофилиБезопасностиДляДОиО + Constant.ИспользоватьПрофилиБезопасностиДляДОО DontUse @@ -251,7 +267,7 @@ DontUse - Constant.РазрешитьВыполнениеДОИОРегламентнымиЗаданиямиВМоделиСервиса + Constant.РазрешитьВыполнениеДООРегламентнымиЗаданиямиВМоделиСервиса DontUse @@ -294,6 +310,10 @@ ScheduledJob.УдалениеУстаревшихПараметровРаботыВерсийРасширений DontUse + + Constant.ИспользоватьДополнительныйЯзык2 + DontUse + Catalog.ПроизводственныеКалендари DontUse @@ -354,6 +374,10 @@ Constant.ИспользоватьПолнотекстовыйПоиск DontUse + + Constant.ДополнительныйЯзык2 + DontUse + Constant.КаталогСообщенийОбменаДаннымиДляWindows DontUse @@ -570,6 +594,10 @@ ScheduledJob.СинхронизацияДанных DontUse + + Constant.ДополнительныйЯзык1 + DontUse + ScheduledJob.ПроверкаВеденияУчета DontUse @@ -598,6 +626,10 @@ InformationRegister.КомментарииСтатистики DontUse + + Constant.ПараметрыХраненияФайловВИБ + DontUse + InformationRegister.ОриентирыАдресныхОбъектов DontUse diff --git a/SSL/src/CommonCommands/ВремяТекущегоСеанса/CommandModule.bsl b/SSL/src/CommonCommands/ВремяТекущегоСеанса/CommandModule.bsl index ae1142b29..1a2c8cba3 100644 --- a/SSL/src/CommonCommands/ВремяТекущегоСеанса/CommandModule.bsl +++ b/SSL/src/CommonCommands/ВремяТекущегоСеанса/CommandModule.bsl @@ -11,6 +11,7 @@ &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) + ДополнительнаяИнформация = ДополнительнаяИнформация(); ПоказатьПредупреждение(, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Время сеанса: %1 @@ -18,10 +19,12 @@ |На клиенте: %3 | |Время сеанса - это время сервера, - |приведенное к часовому поясу клиента.'"), + |приведенное к часовому поясу: + |""%4"".'"), Формат(ОбщегоНазначенияКлиент.ДатаСеанса(), "ДЛФ=T"), - Формат(ДатаСервера(), "ДЛФ=T"), - Формат(ТекущаяДата(), "ДЛФ=T"))); + Формат(ДополнительнаяИнформация.ДатаСервера, "ДЛФ=T"), + Формат(ТекущаяДата(), "ДЛФ=T"), + ДополнительнаяИнформация.ПредставлениеЧасовогоПояса)); КонецПроцедуры @@ -30,10 +33,11 @@ #Область СлужебныеПроцедурыИФункции &НаСервере -Функция ДатаСервера() - - Возврат ТекущаяДата(); - +Функция ДополнительнаяИнформация() + Результат = Новый Структура; + Результат.Вставить("ПредставлениеЧасовогоПояса", ПредставлениеЧасовогоПояса(ЧасовойПоясСеанса())); + Результат.Вставить("ДатаСервера", ТекущаяДата()); + Возврат Результат; КонецФункции #КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonCommands/ЗадачиПоБизнесПроцессу/ЗадачиПоБизнесПроцессу.mdo b/SSL/src/CommonCommands/ЗадачиПоБизнесПроцессу/ЗадачиПоБизнесПроцессу.mdo index 4ca147e64..f7d41694e 100644 --- a/SSL/src/CommonCommands/ЗадачиПоБизнесПроцессу/ЗадачиПоБизнесПроцессу.mdo +++ b/SSL/src/CommonCommands/ЗадачиПоБизнесПроцессу/ЗадачиПоБизнесПроцессу.mdo @@ -5,12 +5,15 @@ ru Задачи - Задача выбранного бизнес-процесса - FormNavigationPanelGoTo + FormCommandBarImportant DefinedType.БизнесПроцесс - Auto + PictureAndText + + ru + Открыть задачи бизнес-процесса + StdPicture.Task diff --git a/SSL/src/CommonCommands/ИсторияИзменений/CommandModule.bsl b/SSL/src/CommonCommands/ИсторияИзменений/CommandModule.bsl index d9264b75e..d9413a0e3 100644 --- a/SSL/src/CommonCommands/ИсторияИзменений/CommandModule.bsl +++ b/SSL/src/CommonCommands/ИсторияИзменений/CommandModule.bsl @@ -24,15 +24,7 @@ СсылкаНаОбъект = ПараметрКоманды; КонецЕсли; - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("Ссылка", СсылкаНаОбъект); - ПараметрыФормы.Вставить("ТолькоПросмотр", ПараметрыВыполненияКоманды.Источник.ТолькоПросмотр); - - ОткрытьФорму("РегистрСведений.ВерсииОбъектов.Форма.ВыборХранимыхВерсий", - ПараметрыФормы, - ПараметрыВыполненияКоманды.Источник, - ПараметрыВыполненияКоманды.Уникальность, - ПараметрыВыполненияКоманды.Окно); + ВерсионированиеОбъектовКлиент.ПоказатьИсториюИзменений(СсылкаНаОбъект, ПараметрыВыполненияКоманды.Источник); КонецПроцедуры diff --git a/SSL/src/CommonCommands/ИсторияИзменений/ИсторияИзменений.mdo b/SSL/src/CommonCommands/ИсторияИзменений/ИсторияИзменений.mdo index 462f99b42..c00943018 100644 --- a/SSL/src/CommonCommands/ИсторияИзменений/ИсторияИзменений.mdo +++ b/SSL/src/CommonCommands/ИсторияИзменений/ИсторияИзменений.mdo @@ -5,16 +5,16 @@ ru История изменений - FormNavigationPanelSeeAlso + FormCommandBarImportant DefinedType.ВерсионируемыеДанные - PictureAndText + Picture ru - Перейти к отчету по версиям объекта + Перейти к истории изменений - CommonPicture.ИсторияВерсий + StdPicture.DataHistory diff --git a/SSL/src/CommonCommands/Обсуждения/CommandModule.bsl b/SSL/src/CommonCommands/Обсуждения/CommandModule.bsl index cf7719e86..3361e74d4 100644 --- a/SSL/src/CommonCommands/Обсуждения/CommandModule.bsl +++ b/SSL/src/CommonCommands/Обсуждения/CommandModule.bsl @@ -13,14 +13,17 @@ НовоеОбсуждение = НовоеОбсуждение(ПараметрКоманды); - Если НовоеОбсуждение = "Недоступно" Тогда + Если НовоеОбсуждение = "Недоступно" Или НовоеОбсуждение = "НеПодключеноНетПравНаПодключение" Тогда + ПоказатьПредупреждение(, НСтр("ru = 'Использование обсуждений недоступно. Обратитесь к администратору.'")); Возврат; - ИначеЕсли НовоеОбсуждение = "НеПодключено" Тогда + ИначеЕсли НовоеОбсуждение = "НеПодключеноВозможноПодключить" Тогда ПредлагатьОбсужденияТекст = НСтр("ru = 'Включить обсуждения? | - |С их помощью пользователи смогут отправлять друг другу текстовые сообщения и совершать видеозвонки, создавать тематические обсуждения и вести переписку по документам.'"); + |С их помощью пользователи смогут отправлять друг другу текстовые сообщения + |и совершать видеозвонки, создавать тематические обсуждения и вести переписку по документам.'"); ОповещениеОЗавершении = Новый ОписаниеОповещения("ПредлагатьОбсужденияЗавершение", ЭтотОбъект); + ПоказатьВопрос(ОповещениеОЗавершении, ПредлагатьОбсужденияТекст, РежимДиалогаВопрос.ДаНет); Возврат; КонецЕсли; @@ -48,11 +51,16 @@ Функция НовоеОбсуждение(ПользовательСсылка) Если Не ОбсужденияСлужебныйВызовСервера.Подключены() Тогда - Возврат "НеПодключено"; + Если ПравоДоступа("РегистрацияИнформационнойБазыСистемыВзаимодействия", Метаданные) Тогда + Возврат "НеПодключеноВозможноПодключить"; + Иначе + Возврат "НеПодключеноНетПравНаПодключение"; + КонецЕсли; КонецЕсли; УстановитьПривилегированныйРежим(Истина); - ИдентификаторПользователяИнформационнойБазы = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ПользовательСсылка, "ИдентификаторПользователяИБ"); + ИдентификаторПользователяИнформационнойБазы = ОбщегоНазначения.ЗначениеРеквизитаОбъекта( + ПользовательСсылка, "ИдентификаторПользователяИБ"); УстановитьПривилегированныйРежим(Ложь); Если Не ЗначениеЗаполнено(ИдентификаторПользователяИнформационнойБазы) Тогда @@ -60,7 +68,7 @@ КонецЕсли; Попытка - ИдентификаторПользователяСистемыВзаимодействия = СистемаВзаимодействия.ПолучитьИдентификаторПользователя( + ИдентификаторПользователяСВ = СистемаВзаимодействия.ПолучитьИдентификаторПользователя( ИдентификаторПользователяИнформационнойБазы); Исключение ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( @@ -69,14 +77,14 @@ ПользовательСсылка); КонецПопытки; - Если ИдентификаторПользователяСистемыВзаимодействия = СистемаВзаимодействия.ИдентификаторТекущегоПользователя() Тогда + Если ИдентификаторПользователяСВ = СистемаВзаимодействия.ИдентификаторТекущегоПользователя() Тогда ВызватьИсключение НСтр("ru = 'Для начала обсуждения выберите другого пользователя.'"); КонецЕсли; Обсуждение = СистемаВзаимодействия.СоздатьОбсуждение(); Обсуждение.Групповое = Ложь; Обсуждение.Участники.Добавить(СистемаВзаимодействия.ИдентификаторТекущегоПользователя()); - Обсуждение.Участники.Добавить(ИдентификаторПользователяСистемыВзаимодействия); + Обсуждение.Участники.Добавить(ИдентификаторПользователяСВ); Обсуждение.Записать(); Возврат ПолучитьНавигационнуюСсылку(Обсуждение.Идентификатор); diff --git a/SSL/src/CommonCommands/СтруктураПодчиненности/CommandModule.bsl b/SSL/src/CommonCommands/СвязанныеДокументы/CommandModule.bsl similarity index 63% rename from SSL/src/CommonCommands/СтруктураПодчиненности/CommandModule.bsl rename to SSL/src/CommonCommands/СвязанныеДокументы/CommandModule.bsl index b664b2391..cd97089d9 100644 --- a/SSL/src/CommonCommands/СтруктураПодчиненности/CommandModule.bsl +++ b/SSL/src/CommonCommands/СвязанныеДокументы/CommandModule.bsl @@ -11,14 +11,15 @@ &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) - Если ЗначениеЗаполнено(ПараметрКоманды) Тогда - - ОткрытьФорму("ОбщаяФорма.СтруктураПодчиненности",Новый Структура("ОбъектОтбора", ПараметрКоманды), - ПараметрыВыполненияКоманды.Источник, - ПараметрыВыполненияКоманды.Источник.КлючУникальности, - ПараметрыВыполненияКоманды.Окно); - + Если Не ЗначениеЗаполнено(ПараметрКоманды) Тогда + Возврат; КонецЕсли; + + ОткрытьФорму("ОбщаяФорма.СвязанныеДокументы", + Новый Структура("ОбъектОтбора", ПараметрКоманды), + ПараметрыВыполненияКоманды.Источник, + ПараметрыВыполненияКоманды.Источник.КлючУникальности, + ПараметрыВыполненияКоманды.Окно); КонецПроцедуры diff --git a/SSL/src/CommonCommands/СтруктураПодчиненности/СтруктураПодчиненности.mdo b/SSL/src/CommonCommands/СвязанныеДокументы/СвязанныеДокументы.mdo similarity index 89% rename from SSL/src/CommonCommands/СтруктураПодчиненности/СтруктураПодчиненности.mdo rename to SSL/src/CommonCommands/СвязанныеДокументы/СвязанныеДокументы.mdo index 0911b8d02..d1d4f1ba2 100644 --- a/SSL/src/CommonCommands/СтруктураПодчиненности/СтруктураПодчиненности.mdo +++ b/SSL/src/CommonCommands/СвязанныеДокументы/СвязанныеДокументы.mdo @@ -1,6 +1,6 @@ - СтруктураПодчиненности + СвязанныеДокументы ru Связанные документы diff --git a/SSL/src/CommonCommands/УстановитьРасширениеРаботыСФайлами/CommandModule.bsl b/SSL/src/CommonCommands/УстановитьРасширениеДляРаботыС1СПредприятием/CommandModule.bsl similarity index 100% rename from SSL/src/CommonCommands/УстановитьРасширениеРаботыСФайлами/CommandModule.bsl rename to SSL/src/CommonCommands/УстановитьРасширениеДляРаботыС1СПредприятием/CommandModule.bsl diff --git a/SSL/src/CommonCommands/УстановитьРасширениеДляРаботыС1СПредприятием/УстановитьРасширениеДляРаботыС1СПредприятием.mdo b/SSL/src/CommonCommands/УстановитьРасширениеДляРаботыС1СПредприятием/УстановитьРасширениеДляРаботыС1СПредприятием.mdo new file mode 100644 index 000000000..1c22724d3 --- /dev/null +++ b/SSL/src/CommonCommands/УстановитьРасширениеДляРаботыС1СПредприятием/УстановитьРасширениеДляРаботыС1СПредприятием.mdo @@ -0,0 +1,10 @@ + + + УстановитьРасширениеДляРаботыС1СПредприятием + + ru + Установить расширение для работы с 1С:Предприятием + + ActionsPanelTools + Auto + diff --git a/SSL/src/CommonCommands/УстановитьРасширениеРаботыСФайлами/УстановитьРасширениеРаботыСФайлами.mdo b/SSL/src/CommonCommands/УстановитьРасширениеРаботыСФайлами/УстановитьРасширениеРаботыСФайлами.mdo deleted file mode 100644 index 2688317bb..000000000 --- a/SSL/src/CommonCommands/УстановитьРасширениеРаботыСФайлами/УстановитьРасширениеРаботыСФайлами.mdo +++ /dev/null @@ -1,14 +0,0 @@ - - - УстановитьРасширениеРаботыСФайлами - - ru - Установить расширение для веб-клиента 1С:Предприятие - - ActionsPanelTools - Auto - - ru - расширение для веб-клиента 1С:Предприятие - - diff --git a/SSL/src/CommonForms/АвтономнаяРабота/Module.bsl b/SSL/src/CommonForms/АвтономнаяРабота/Module.bsl index 1287acc32..fc80e9a16 100644 --- a/SSL/src/CommonForms/АвтономнаяРабота/Module.bsl +++ b/SSL/src/CommonForms/АвтономнаяРабота/Module.bsl @@ -226,6 +226,8 @@ Элементы.ВариантРасписанияСинхронизацииДанных.Доступность = СинхронизироватьДанныеПоРасписанию; Элементы.ИзменитьРасписаниеСинхронизацииДанных.Доступность = СинхронизироватьДанныеПоРасписанию; + Элементы.ИзменитьРасписаниеСинхронизацииДанных.Видимость = Не ОбщегоНазначения.ЭтоМобильныйКлиент(); + УстановитьПривилегированныйРежим(Ложь); // Устанавливаем видимость по ролям diff --git a/SSL/src/CommonForms/АвтономнаяРаботаВМоделиСервиса/Form.form b/SSL/src/CommonForms/АвтономнаяРаботаВМоделиСервиса/Form.form index 6b3c8aa89..c95b335b0 100644 --- a/SSL/src/CommonForms/АвтономнаяРаботаВМоделиСервиса/Form.form +++ b/SSL/src/CommonForms/АвтономнаяРаботаВМоделиСервиса/Form.form @@ -408,13 +408,6 @@ true true - - System.DefaultGUIFont - true - false - false - false -
    true diff --git a/SSL/src/CommonForms/АдреснаяКнига/Form.form b/SSL/src/CommonForms/АдреснаяКнига/Form.form index 1468b0762..2bce9c2d6 100644 --- a/SSL/src/CommonForms/АдреснаяКнига/Form.form +++ b/SSL/src/CommonForms/АдреснаяКнига/Form.form @@ -146,7 +146,7 @@
    UsualGroup - HorizontalIfPossible + AlwaysHorizontal Auto true true @@ -1343,9 +1343,6 @@ Normal Auto UserCmds - - System.DefaultGUIFont - Auto
    @@ -1835,16 +1832,28 @@ true true + + ru + Кому + Кому + + ru + Копии + Копии + + ru + Скрытые + Скрытые @@ -1904,11 +1913,7 @@ Normal - System.DefaultGUIFont - false - false - true - false + 0 diff --git a/SSL/src/CommonForms/АдреснаяКнига/Module.bsl b/SSL/src/CommonForms/АдреснаяКнига/Module.bsl index b75e6147f..a1276878a 100644 --- a/SSL/src/CommonForms/АдреснаяКнига/Module.bsl +++ b/SSL/src/CommonForms/АдреснаяКнига/Module.bsl @@ -11,6 +11,8 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + УстановитьУсловноеОформление(); + Взаимодействия.ОбработатьНеобходимостьОтображенияГруппПользователей(ЭтотОбъект); Взаимодействия.ДобавитьСтраницыФормыПодбораКонтактов(ЭтотОбъект); @@ -707,4 +709,13 @@ КонецПроцедуры +&НаСервере +Процедура УстановитьУсловноеОформление() + + УсловноеОформление.Элементы.Очистить(); + + Взаимодействия.УстановитьУсловноеОформлениеСпискаВыбора(ЭтотОбъект, "Группа", "ПолучателиПисьма.Группа"); + +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/CommonForms/БлокировкаРаботыСВнешнимиРесурсами/Module.bsl b/SSL/src/CommonForms/БлокировкаРаботыСВнешнимиРесурсами/Module.bsl index 0c1a54c7a..f66bdd316 100644 --- a/SSL/src/CommonForms/БлокировкаРаботыСВнешнимиРесурсами/Module.bsl +++ b/SSL/src/CommonForms/БлокировкаРаботыСВнешнимиРесурсами/Module.bsl @@ -88,7 +88,7 @@ ТекстСнятияБлокировки); КонецЕсли; - Элементы.НадписьПредупреждение.Заголовок = СтроковыеФункцииКлиентСервер.ФорматированнаяСтрока(НадписьПредупреждение); + Элементы.НадписьПредупреждение.Заголовок = СтроковыеФункции.ФорматированнаяСтрока(НадписьПредупреждение); Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда Элементы.ФормаГруппаЕще.Видимость = Ложь; diff --git a/SSL/src/CommonForms/ВводНаРазныхЯзыках/Form.form b/SSL/src/CommonForms/ВводНаРазныхЯзыках/Form.form index 2c1f5749e..01dc01947 100644 --- a/SSL/src/CommonForms/ВводНаРазныхЯзыках/Form.form +++ b/SSL/src/CommonForms/ВводНаРазныхЯзыках/Form.form @@ -174,6 +174,35 @@ true + + Суффикс + 4 + + String + + 10 + + + + true + + + true + + + + + МультиязычныеСтрокиВРеквизитах + 2 + + Boolean + + + true + + + true + ОК @@ -234,6 +263,10 @@ Boolean + + ЗначенияРеквизитов + + diff --git a/SSL/src/CommonForms/ВводНаРазныхЯзыках/Module.bsl b/SSL/src/CommonForms/ВводНаРазныхЯзыках/Module.bsl index 52b88b5aa..c8f642b92 100644 --- a/SSL/src/CommonForms/ВводНаРазныхЯзыках/Module.bsl +++ b/SSL/src/CommonForms/ВводНаРазныхЯзыках/Module.bsl @@ -12,6 +12,7 @@ Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) ОбъектМетаданных = Параметры.Ссылка.Метаданные(); + МультиязычныеСтрокиВРеквизитах = МультиязычностьСервер.МультиязычныеСтрокиВРеквизитах(ОбъектМетаданных); Реквизит = ОбъектМетаданных.Реквизиты.Найти(Параметры.ИмяРеквизита); Если Реквизит = Неопределено Тогда Для каждого СтандартныйРеквизит Из ОбъектМетаданных.СтандартныеРеквизиты Цикл @@ -22,8 +23,65 @@ КонецЦикла; КонецЕсли; + СуффиксОсновногоЯзыка = ""; + СуффиксДополнительногоЯзыка1 = "Язык1"; + СуффиксДополнительногоЯзыка2 = "Язык2"; + + Если СтрСравнить(Константы.ОсновнойЯзык.Получить(), ТекущийЯзык().КодЯзыка) <> 0 Тогда + СуффиксОсновногоЯзыка = МультиязычностьСервер.СуффиксТекущегоЯзыка(); + Если СуффиксОсновногоЯзыка = "Язык1" Тогда + СуффиксДополнительногоЯзыка1 = ""; + ИначеЕсли СуффиксОсновногоЯзыка = "Язык2" Тогда + СуффиксДополнительногоЯзыка2 = ""; + КонецЕсли; + + КонецЕсли; + + НаборЯзыков = Новый ТаблицаЗначений; + НаборЯзыков.Колонки.Добавить("КодЯзыка", ОбщегоНазначения.ОписаниеТипаСтрока(10)); + НаборЯзыков.Колонки.Добавить("Представление", ОбщегоНазначения.ОписаниеТипаСтрока(150)); + НаборЯзыков.Колонки.Добавить("Суффикс", ОбщегоНазначения.ОписаниеТипаСтрока(50)); + + Если МультиязычныеСтрокиВРеквизитах Тогда + + ПредставленияЯзыков = Новый Соответствие; + Для Каждого ЯзыкКонфигурации Из Метаданные.Языки Цикл + ПредставленияЯзыков.Вставить(ЯзыкКонфигурации.КодЯзыка, ЯзыкКонфигурации.Представление()); + КонецЦикла; + + НовыйЯзык = НаборЯзыков.Добавить(); + НовыйЯзык.КодЯзыка = Константы.ОсновнойЯзык.Получить(); + НовыйЯзык.Представление = ПредставленияЯзыков[НовыйЯзык.КодЯзыка]; + НовыйЯзык.Суффикс = СуффиксОсновногоЯзыка; + + Если МультиязычностьСервер.ИспользуетсяПервыйДополнительныйЯзык() Тогда + НовыйЯзык = НаборЯзыков.Добавить(); + НовыйЯзык.КодЯзыка = МультиязычностьСервер.КодПервогоДополнительногоЯзыкаИнформационнойБазы(); + НовыйЯзык.Представление = ПредставленияЯзыков[НовыйЯзык.КодЯзыка]; + НовыйЯзык.Суффикс = СуффиксДополнительногоЯзыка1; + КонецЕсли; + + Если МультиязычностьСервер.ИспользуетсяВторойДополнительныйЯзык() Тогда + НовыйЯзык = НаборЯзыков.Добавить(); + НовыйЯзык.КодЯзыка = МультиязычностьСервер.КодВторогоДополнительногоЯзыкаИнформационнойБазы(); + НовыйЯзык.Представление = ПредставленияЯзыков[НовыйЯзык.КодЯзыка]; + НовыйЯзык.Суффикс = СуффиксДополнительногоЯзыка2; + КонецЕсли; + + Иначе + + Для Каждого ЯзыкКонфигурации Из Метаданные.Языки Цикл + + НовыйЯзык = НаборЯзыков.Добавить(); + НовыйЯзык.КодЯзыка = ЯзыкКонфигурации.КодЯзыка; + НовыйЯзык.Представление = ЯзыкКонфигурации.Представление(); + + КонецЦикла; + + КонецЕсли; + Если Реквизит = Неопределено Тогда - ШаблонОшибки = НСтр("ru='При открытии формы ВводНаРазныхЯзыках в параметре ИмяРеквизита указан не существующий реквизит %1'"); + ШаблонОшибки = НСтр("ru = 'При открытии формы ВводНаРазныхЯзыках в параметре ИмяРеквизита указан не существующий реквизит %1'"); ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонОшибки, Параметры.ИмяРеквизита); КонецЕсли; @@ -31,11 +89,10 @@ СтандартныеПодсистемыСервер.УстановитьКлючНазначенияФормы(ЭтотОбъект, "МногострочныйРежим"); КонецЕсли; - Для Каждого ЯзыкКонфигурации Из Метаданные.Языки Цикл + Для Каждого ЯзыкКонфигурации Из НаборЯзыков Цикл НоваяСтрока = Языки.Добавить(); - НоваяСтрока.КодЯзыка = ЯзыкКонфигурации.КодЯзыка; + ЗаполнитьЗначенияСвойств(НоваяСтрока, ЯзыкКонфигурации); НоваяСтрока.Имя = "_" + СтрЗаменить(Новый УникальныйИдентификатор, "-", ""); - НоваяСтрока.Представление = ЯзыкКонфигурации.Представление(); КонецЦикла; СформироватьПоляВводаНаРазныхЯзыках(Реквизит.МногострочныйРежим, Параметры.ТолькоПросмотр); @@ -44,28 +101,62 @@ Заголовок = Параметры.Заголовок; Иначе Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru='%1 на разных языках'"), Реквизит.Представление()); + НСтр("ru = '%1 на разных языках'; + |en = '%1'"), Реквизит.Представление()); + Если ПустаяСтрока(Заголовок) Тогда + Заголовок = Реквизит.Представление(); + КонецЕсли; КонецЕсли; - ОсновнойЯзык = Метаданные.ОсновнойЯзык.КодЯзыка; + ОсновнойЯзык = ОбщегоНазначения.КодОсновногоЯзыка(); ОписаниеЯзыка = ОписаниеЯзыка(ТекущийЯзык().КодЯзыка); Если ОписаниеЯзыка <> Неопределено Тогда ЭтотОбъект[ОписаниеЯзыка.Имя] = Параметры.ТекущиеЗначение; КонецЕсли; - Для каждого Представление Из Параметры.Представления Цикл + Если МультиязычныеСтрокиВРеквизитах Тогда - ОписаниеЯзыка = ОписаниеЯзыка(Представление.КодЯзыка); - Если ОписаниеЯзыка <> Неопределено Тогда - Если СтрСравнить(ОписаниеЯзыка.КодЯзыка, ТекущийЯзык().КодЯзыка) = 0 Тогда - ЭтотОбъект[ОписаниеЯзыка.Имя] = ?(ЗначениеЗаполнено(Параметры.ТекущиеЗначение), Параметры.ТекущиеЗначение, Представление[Параметры.ИмяРеквизита]); + ОписаниеЯзыка = ОписаниеЯзыка(Константы.ОсновнойЯзык.Получить()); + Если ПустаяСтрока(СуффиксОсновногоЯзыка) Тогда + ЭтотОбъект[ОписаниеЯзыка.Имя] = Параметры.ТекущиеЗначение; + Иначе + ЭтотОбъект[ОписаниеЯзыка.Имя] = Параметры.ЗначенияРеквизитов[Параметры.ИмяРеквизита + СуффиксОсновногоЯзыка]; + КонецЕсли; + + Если МультиязычностьСервер.ИспользуетсяПервыйДополнительныйЯзык() Тогда + ОписаниеЯзыка = ОписаниеЯзыка(Константы.ДополнительныйЯзык1.Получить()); + Если ПустаяСтрока(СуффиксДополнительногоЯзыка1) Тогда + ЭтотОбъект[ОписаниеЯзыка.Имя] = Параметры.ТекущиеЗначение; Иначе - ЭтотОбъект[ОписаниеЯзыка.Имя] = Представление[Параметры.ИмяРеквизита]; + ЭтотОбъект[ОписаниеЯзыка.Имя] = Параметры.ЗначенияРеквизитов[Параметры.ИмяРеквизита + СуффиксДополнительногоЯзыка1]; КонецЕсли; КонецЕсли; - КонецЦикла; + Если МультиязычностьСервер.ИспользуетсяВторойДополнительныйЯзык() Тогда + ОписаниеЯзыка = ОписаниеЯзыка(Константы.ДополнительныйЯзык2.Получить()); + Если ПустаяСтрока(СуффиксДополнительногоЯзыка2) Тогда + ЭтотОбъект[ОписаниеЯзыка.Имя] = Параметры.ТекущиеЗначение; + Иначе + ЭтотОбъект[ОписаниеЯзыка.Имя] = Параметры.ЗначенияРеквизитов[Параметры.ИмяРеквизита + СуффиксДополнительногоЯзыка2]; + КонецЕсли; + КонецЕсли; + + Иначе + + Для каждого Представление Из Параметры.Представления Цикл + + ОписаниеЯзыка = ОписаниеЯзыка(Представление.КодЯзыка); + Если ОписаниеЯзыка <> Неопределено Тогда + Если СтрСравнить(ОписаниеЯзыка.КодЯзыка, ТекущийЯзык().КодЯзыка) = 0 Тогда + ЭтотОбъект[ОписаниеЯзыка.Имя] = ?(ЗначениеЗаполнено(Параметры.ТекущиеЗначение), Параметры.ТекущиеЗначение, Представление[Параметры.ИмяРеквизита]); + Иначе + ЭтотОбъект[ОписаниеЯзыка.Имя] = Представление[Параметры.ИмяРеквизита]; + КонецЕсли; + КонецЕсли; + + КонецЦикла; + КонецЕсли; КонецПроцедуры @@ -78,6 +169,8 @@ Результат = Новый Структура("ОсновнойЯзык", ОсновнойЯзык); Результат.Вставить("ЗначенияНаРазныхЯзыках", Новый Массив); + Результат.Вставить("ХранениеВТабличнойЧасти", Не МультиязычныеСтрокиВРеквизитах); + Для каждого Язык Из Языки Цикл Если Язык.КодЯзыка = ТекущийЯзык() Тогда @@ -88,7 +181,12 @@ Продолжить; КонецЕсли; - Результат.ЗначенияНаРазныхЯзыках.Добавить(Новый Структура("КодЯзыка, ЗначениеРеквизита", Язык.КодЯзыка, ЭтотОбъект[Язык.Имя])); + Значения = Новый Структура; + Значения.Вставить("КодЯзыка", Язык.КодЯзыка); + Значения.Вставить("ЗначениеРеквизита", ЭтотОбъект[Язык.Имя]); + Значения.Вставить("Суффикс", Язык.Суффикс); + + Результат.ЗначенияНаРазныхЯзыках.Добавить(Значения); КонецЦикла; Закрыть(Результат); diff --git a/SSL/src/CommonForms/Вопрос/Module.bsl b/SSL/src/CommonForms/Вопрос/Module.bsl index 733281211..efa1b67e9 100644 --- a/SSL/src/CommonForms/Вопрос/Module.bsl +++ b/SSL/src/CommonForms/Вопрос/Module.bsl @@ -42,9 +42,7 @@ // Размещение текста. ТекстСообщения = Параметры.ТекстСообщения; - Если КлиентскоеПриложение.ТекущийВариантИнтерфейса() = ВариантИнтерфейсаКлиентскогоПриложения.Версия8_2 Тогда - Элементы.МногострочныйТекстСообщения.ЦветРамки = Новый Цвет; // Для платформы (при изменении цвета рамки появляется белый контур). - КонецЕсли; + МинимальнаяШиринаПоля = 50; ПримернаяВысотаПоля = ЧислоСтрок(Параметры.ТекстСообщения, МинимальнаяШиринаПоля); Элементы.МногострочныйТекстСообщения.Ширина = МинимальнаяШиринаПоля; @@ -118,11 +116,10 @@ Закрыть(Новый Структура("БольшеНеЗадаватьЭтотВопрос, Значение", Ложь, КодВозвратаДиалога.Таймаут)); Иначе Если ОжиданиеИмяКнопки <> "" Тогда - НовыйЗаголовок = ( - ОжиданиеЗаголовокКнопки - + " (" - + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'осталось %1 сек.'"), Строка(ОжиданиеСчетчик)) - + ")"); + НовыйЗаголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '%1 (осталось %2 сек.)'"), + ОжиданиеЗаголовокКнопки, + Строка(ОжиданиеСчетчик)); Элементы[ОжиданиеИмяКнопки].Заголовок = НовыйЗаголовок; КонецЕсли; @@ -287,14 +284,10 @@ КонецЦикла; ПримерноеЧислоСтрок = ЧислоСтрок + ЧислоПереносов; Если ПриводитьКРазмерамЭлементовФормы Тогда - Если КлиентскоеПриложение.ТекущийВариантИнтерфейса() = ВариантИнтерфейсаКлиентскогоПриложения.Версия8_2 Тогда - Коэффициент = 4/5; // В 8.2 в высоту 4 вмещается примерно 5 строк текста. - Иначе - Коэффициент = 2/3; // В такси в высоту 2 вмещается примерно 3 строки текста. - КонецЕсли; + Коэффициент = 2/3; // В такси в высоту 2 вмещается примерно 3 строки текста. ПримерноеЧислоСтрок = Цел((ПримерноеЧислоСтрок+1)*Коэффициент); КонецЕсли; - Если КлиентскоеПриложение.ТекущийВариантИнтерфейса() <> ВариантИнтерфейсаКлиентскогоПриложения.Версия8_2 И ПримерноеЧислоСтрок = 2 Тогда + Если ПримерноеЧислоСтрок = 2 Тогда ПримерноеЧислоСтрок = 3; КонецЕсли; Возврат ПримерноеЧислоСтрок; diff --git a/SSL/src/CommonForms/ВопросОбУстановкеРасширенияРаботыСФайлами/Form.form b/SSL/src/CommonForms/ВопросОбУстановкеРасширенияРаботыСФайлами/Form.form index 3691891bf..9e868717b 100644 --- a/SSL/src/CommonForms/ВопросОбУстановкеРасширенияРаботыСФайлами/Form.form +++ b/SSL/src/CommonForms/ВопросОбУстановкеРасширенияРаботыСФайлами/Form.form @@ -9,7 +9,7 @@ 6 <key>ru</key> - <value>Для удобной работы с программой предлагается установить расширение для веб-клиента 1С:Предприятие. + <value>Для удобной работы с программой предлагается установить расширение для работы с 1С:Предприятием. Установить?</value> true @@ -175,7 +175,7 @@ 1 ru - Установить расширение для веб-клиента 1С:Предприятие и продолжить + Установить расширение для работы с 1С:Предприятием и продолжить true diff --git a/SSL/src/CommonForms/ВопросОбУстановкеРасширенияРаботыСФайлами/Module.bsl b/SSL/src/CommonForms/ВопросОбУстановкеРасширенияРаботыСФайлами/Module.bsl index 0ade1c2c9..d0515bece 100644 --- a/SSL/src/CommonForms/ВопросОбУстановкеРасширенияРаботыСФайлами/Module.bsl +++ b/SSL/src/CommonForms/ВопросОбУстановкеРасширенияРаботыСФайлами/Module.bsl @@ -18,7 +18,7 @@ ИначеЕсли Не Параметры.ВозможноПродолжениеБезУстановки Тогда Элементы.ДекорацияПояснение.Заголовок = - НСтр("ru = 'Для выполнения действия требуется установить расширение для веб-клиента 1С:Предприятие. + НСтр("ru = 'Для выполнения действия требуется установить расширение для работы с 1С:Предприятием. |Установить?'"); КонецЕсли; @@ -75,9 +75,9 @@ Иначе Оповещение = Новый ОписаниеОповещения("УстановитьИПродолжитьПослеПредупреждениеОбОшибке", ЭтотОбъект); ПоказатьПредупреждение(Оповещение, - НСтр("ru = 'Не удалось установить расширение для работы с файлами. + НСтр("ru = 'Не удалось установить расширение для работы с 1С:Предприятием |по причине: - |Метод НачатьПодключениеРасширенияРаботыСФайлами вернул Ложь + |Метод НачатьПодключениеРасширенияРаботыСФайлами вернул Ложь. | |Обратитесь к администратору.'")); КонецЕсли; diff --git a/SSL/src/CommonForms/ВыборДействияПриОбнаруженииОтличийФайла/Module.bsl b/SSL/src/CommonForms/ВыборДействияПриОбнаруженииОтличийФайла/Module.bsl index 30b8ee531..4cdfc7851 100644 --- a/SSL/src/CommonForms/ВыборДействияПриОбнаруженииОтличийФайла/Module.bsl +++ b/SSL/src/CommonForms/ВыборДействияПриОбнаруженииОтличийФайла/Module.bsl @@ -22,7 +22,7 @@ |Сообщение, |Заголовок"); - ТестНовее = " (" + НСтр("ru='новее'") + ")"; + ТестНовее = " (" + НСтр("ru = 'новее'") + ")"; Если ДатаИзмененияВРабочемКаталоге > ДатаИзмененияВХранилищеФайлов Тогда ДатаИзмененияВРабочемКаталоге = Строка(ДатаИзмененияВРабочемКаталоге) + ТестНовее; Иначе diff --git a/SSL/src/CommonForms/ВыборИсполнителяБизнесПроцесса/Form.form b/SSL/src/CommonForms/ВыборИсполнителяБизнесПроцесса/Form.form index 2444affea..aa5cb5beb 100644 --- a/SSL/src/CommonForms/ВыборИсполнителяБизнесПроцесса/Form.form +++ b/SSL/src/CommonForms/ВыборИсполнителяБизнесПроцесса/Form.form @@ -14,10 +14,6 @@ true - - <key>ru</key> - <value>Командная панель пользователи</value> - КоманднаяПанельПользователиExtendedTooltip 58 @@ -37,10 +33,6 @@ СписокПользователи 1 - - <key>ru</key> - <value>Список пользователи</value> - true true @@ -298,10 +290,6 @@ СписокРоли 26 - - <key>ru</key> - <value>Список роли</value> - true true @@ -594,10 +582,6 @@ true - - <key>ru</key> - <value>Страницы</value> - СтраницыExtendedTooltip 56 diff --git a/SSL/src/CommonForms/ВыборКонтакта/Form.form b/SSL/src/CommonForms/ВыборКонтакта/Form.form index 083f5e004..8432a7113 100644 --- a/SSL/src/CommonForms/ВыборКонтакта/Form.form +++ b/SSL/src/CommonForms/ВыборКонтакта/Form.form @@ -134,10 +134,6 @@ true - - <key>ru</key> - <value>Строка поиска</value> - ГруппаСтрокаПоискаExtendedTooltip 108 @@ -161,10 +157,6 @@ НайденныеКонтакты 20 - - <key>ru</key> - <value>Найденные контакты</value> - true true @@ -436,10 +428,6 @@ КонтактыПоПредмету 71 - - <key>ru</key> - <value>Контакты по предмету</value> - true true @@ -664,10 +652,6 @@ ГруппыПользователей 100 - - <key>ru</key> - <value>Группы пользователей</value> - true true @@ -899,10 +883,6 @@ СписокПользователей 84 - - <key>ru</key> - <value>Список пользователей</value> - true true @@ -1158,10 +1138,6 @@ true - - <key>ru</key> - <value>Страницы списки</value> - СтраницыСпискиExtendedTooltip 106 diff --git a/SSL/src/CommonForms/ВыборОбъектовМетаданных/Form.form b/SSL/src/CommonForms/ВыборОбъектовМетаданных/Form.form index 4febfa17f..5a0a97fc0 100644 --- a/SSL/src/CommonForms/ВыборОбъектовМетаданных/Form.form +++ b/SSL/src/CommonForms/ВыборОбъектовМетаданных/Form.form @@ -3,10 +3,6 @@ ДеревоОбъектовМетаданных 1 - - <key>ru</key> - <value>Дерево объектов метаданных</value> - true true diff --git a/SSL/src/CommonForms/ВыборОбъектовМетаданных/Module.bsl b/SSL/src/CommonForms/ВыборОбъектовМетаданных/Module.bsl index 2b8ac952b..02cb6f756 100644 --- a/SSL/src/CommonForms/ВыборОбъектовМетаданных/Module.bsl +++ b/SSL/src/CommonForms/ВыборОбъектовМетаданных/Module.bsl @@ -362,7 +362,6 @@ ПараметрыЭлемента.Имя = ЭлементКоллекцииМетаданных.Имя; ПараметрыЭлемента.ПолноеИмя = ЭлементКоллекцииМетаданных.ПолноеИмя(); ПараметрыЭлемента.Синоним = ЭлементКоллекцииМетаданных.Синоним; - ПараметрыЭлемента.КартинкаОбъекта = ПараметрыЭлемента.КартинкаОбъекта; ПараметрыЭлемента.Родитель = НоваяСтрока; НоваяСтрокаДерева(ПараметрыЭлемента, Истина); КонецЦикла; @@ -388,8 +387,6 @@ ПараметрыЭлемента.Имя = ЭлементКоллекцииМетаданных.Имя; ПараметрыЭлемента.ПолноеИмя = ЭлементКоллекцииМетаданных.ПолноеИмя(); ПараметрыЭлемента.Синоним = ЭлементКоллекцииМетаданных.Синоним; - ПараметрыЭлемента.Картинка = ПараметрыЭлемента.Картинка; - ПараметрыЭлемента.КартинкаОбъекта = ПараметрыЭлемента.КартинкаОбъекта; ПараметрыЭлемента.Родитель = НоваяСтрока; ДобавитьЭлементДереваОбъектовМетаданных(ПараметрыЭлемента, ЭлементКоллекцииМетаданных.Подсистемы, Ложь); КонецЕсли; diff --git a/SSL/src/CommonForms/ВыборПутиКАрхивуФайловТомов/Module.bsl b/SSL/src/CommonForms/ВыборПутиКАрхивуФайловТомов/Module.bsl index 42e355d52..486c86b03 100644 --- a/SSL/src/CommonForms/ВыборПутиКАрхивуФайловТомов/Module.bsl +++ b/SSL/src/CommonForms/ВыборПутиКАрхивуФайловТомов/Module.bsl @@ -96,7 +96,7 @@ &НаСервере Процедура ДобавитьФайлыВТома() - РаботаСФайламиСлужебный.ДобавитьФайлыВТома(ПутьКАрхивуWindows, ПутьКАрхивуLinux); + РаботаСФайламиВТомахСлужебный.ДобавитьФайлыВТома(ПутьКАрхивуWindows, ПутьКАрхивуLinux); КонецПроцедуры diff --git a/SSL/src/CommonForms/ВыборФорматаВложений/Form.form b/SSL/src/CommonForms/ВыборФорматаВложений/Form.form index c5a97fe49..7e3dfaceb 100644 --- a/SSL/src/CommonForms/ВыборФорматаВложений/Form.form +++ b/SSL/src/CommonForms/ВыборФорматаВложений/Form.form @@ -6,10 +6,6 @@ ВыбранныеФорматы 32 - - <key>ru</key> - <value>Выбранные форматы</value> - true true @@ -225,10 +221,6 @@ true - - <key>ru</key> - <value>Формат вложений</value> - ГруппаВыборФорматовExtendedTooltip 44 @@ -335,10 +327,6 @@ true - - <key>ru</key> - <value>В форматах</value> - ГруппаДополнительныеПараметрыExtendedTooltip 48 diff --git a/SSL/src/CommonForms/ВыборФорматаВложений/Module.bsl b/SSL/src/CommonForms/ВыборФорматаВложений/Module.bsl index c36bacd10..51b72db26 100644 --- a/SSL/src/CommonForms/ВыборФорматаВложений/Module.bsl +++ b/SSL/src/CommonForms/ВыборФорматаВложений/Module.bsl @@ -23,7 +23,7 @@ Для Каждого ФорматСохранения Из СтандартныеПодсистемыСервер.НастройкиФорматовСохраненияТабличногоДокумента() Цикл Пометка = Ложь; Если Параметры.НастройкиФормата <> Неопределено Тогда - ПереданныйФормат = ПереданныйМассивФорматов.Найти(ФорматСохранения.ТипФайлаТабличногоДокумента); + ПереданныйФормат = ПереданныйМассивФорматов.Найти(Строка(ФорматСохранения.ТипФайлаТабличногоДокумента)); Если ПереданныйФормат <> Неопределено Тогда Пометка = Истина; КонецЕсли; diff --git a/SSL/src/CommonForms/ГруппыПользователей/Module.bsl b/SSL/src/CommonForms/ГруппыПользователей/Module.bsl index b67d278f0..1283e646f 100644 --- a/SSL/src/CommonForms/ГруппыПользователей/Module.bsl +++ b/SSL/src/CommonForms/ГруппыПользователей/Module.bsl @@ -171,8 +171,8 @@ Если УведомлениеПользователя.ПолныйТекстСообщения <> Неопределено Тогда ТекстВопроса = УведомлениеПользователя.Сообщение; КнопкиВопроса = Новый СписокЗначений; - КнопкиВопроса.Добавить("Ок", НСтр("ru='ОК'")); - КнопкиВопроса.Добавить("ПоказатьОтчет", НСтр("ru='Показать отчет'")); + КнопкиВопроса.Добавить("Ок", НСтр("ru = 'ОК'")); + КнопкиВопроса.Добавить("ПоказатьОтчет", НСтр("ru = 'Показать отчет'")); Оповещение = Новый ОписаниеОповещения("ЗаписатьИЗакрытьОбработкаВопроса", ЭтотОбъект, УведомлениеПользователя.ПолныйТекстСообщения); ПоказатьВопрос(Оповещение, ТекстВопроса, КнопкиВопроса,, КнопкиВопроса[0].Значение); diff --git a/SSL/src/CommonForms/ДлительнаяОперация/Module.bsl b/SSL/src/CommonForms/ДлительнаяОперация/Module.bsl index 14f8368ff..8f45dc79f 100644 --- a/SSL/src/CommonForms/ДлительнаяОперация/Module.bsl +++ b/SSL/src/CommonForms/ДлительнаяОперация/Module.bsl @@ -99,6 +99,7 @@ СообщениеПользователю.ИдентификаторНазначения = ИдентификаторНазначения; СообщениеПользователю.Сообщить(); КонецЦикла; + Задание.Сообщения = Новый ФиксированныйМассив(Новый Массив); КонецЕсли; Если Статус = "Выполнено" Тогда diff --git a/SSL/src/CommonForms/ДобавлениеЭлектроннойПодписиИзФайла/Module.bsl b/SSL/src/CommonForms/ДобавлениеЭлектроннойПодписиИзФайла/Module.bsl index 0a741c3cf..c674bc476 100644 --- a/SSL/src/CommonForms/ДобавлениеЭлектроннойПодписиИзФайла/Module.bsl +++ b/SSL/src/CommonForms/ДобавлениеЭлектроннойПодписиИзФайла/Module.bsl @@ -220,7 +220,7 @@ ПараметрыЗагрузки.ИдентификаторФормы = УникальныйИдентификатор; ПараметрыЗагрузки.Диалог.Заголовок = НСтр("ru = 'Выберите файл электронной подписи'"); ПараметрыЗагрузки.Диалог.Фильтр = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Файлы подписи (*.%1)|*.%1|Все файлы(*.*)|*.*'"), + НСтр("ru = 'Файлы подписи (*.%1)|*.%1|Все файлы (*.*)|*.*'"), ЭлектроннаяПодписьКлиент.ПерсональныеНастройки().РасширениеДляФайловПодписи); Если Не ДобавитьНовуюСтроку Тогда diff --git a/SSL/src/CommonForms/ДополнительныеОтчетыИОбработки/Form.form b/SSL/src/CommonForms/ДополнительныеОтчетыИОбработки/Form.form index dfc3be2a7..7e4390f73 100644 --- a/SSL/src/CommonForms/ДополнительныеОтчетыИОбработки/Form.form +++ b/SSL/src/CommonForms/ДополнительныеОтчетыИОбработки/Form.form @@ -9,10 +9,6 @@ ТаблицаКоманд 15 - - <key>ru</key> - <value>Таблица команд</value> - true true @@ -329,10 +325,6 @@ true - - <key>ru</key> - <value>Страницы</value> - СтраницыExtendedTooltip 54 @@ -442,10 +434,6 @@ true - - <key>ru</key> - <value>Командная панель страницы открыть обработку</value> - КоманднаяПанельСтраницыОткрытьОбработкуExtendedTooltip 64 @@ -466,10 +454,6 @@ true - - <key>ru</key> - <value>Подвал</value> - ПодвалРасширеннаяПодсказка 80 diff --git a/SSL/src/CommonForms/ДополнительныеПараметрыПроксиСервера/Module.bsl b/SSL/src/CommonForms/ДополнительныеПараметрыПроксиСервера/Module.bsl index 31bbc2f24..81af95a8d 100644 --- a/SSL/src/CommonForms/ДополнительныеПараметрыПроксиСервера/Module.bsl +++ b/SSL/src/CommonForms/ДополнительныеПараметрыПроксиСервера/Module.bsl @@ -33,8 +33,6 @@ СтрИсключения.АдресСервера = ЭлементСпискаИсключений.Значение; КонецЦикла; - СтандартныеПодсистемыСервер.УстановитьОтображениеЗаголовковГрупп(ЭтотОбъект); - КонецПроцедуры #КонецОбласти @@ -132,7 +130,8 @@ // Выполняет проверку корректности адресов серверов-исключений. // Также сообщает пользователю о некорректно заполненных адресах. // -// Возвращаемое значение: Булево - Истина, если адреса корректны, +// Возвращаемое значение: +// Булево - Истина, если адреса корректны, // Ложь в противном случае. // &НаКлиенте @@ -172,7 +171,8 @@ // символов. // ДопустимыеСимволы (Строка) - строка допустимых символов. // -// Возвращаемое значение: Строка - строка недопустимых символов. Пустая строка, если +// Возвращаемое значение: +// Строка - строка недопустимых символов. Пустая строка, если // в проверяемой строке недопустимые символы не обнаружены. // &НаКлиенте diff --git a/SSL/src/CommonForms/МастерАнкетыПоРазделам/Form.form b/SSL/src/CommonForms/МастерАнкетыПоРазделам/Form.form index 321ad2d08..6ba9add9f 100644 --- a/SSL/src/CommonForms/МастерАнкетыПоРазделам/Form.form +++ b/SSL/src/CommonForms/МастерАнкетыПоРазделам/Form.form @@ -159,18 +159,6 @@ true Right UserCmds - - 255 - 229 - 38 - - - Style.NormalTextFont - true - false - false - false - Auto @@ -904,18 +892,6 @@ true true UserCmds - - 255 - 230 - 43 - - - Style.NormalTextFont - true - false - false - false - Auto true diff --git a/SSL/src/CommonForms/МастерАнкетыПоРазделам/Module.bsl b/SSL/src/CommonForms/МастерАнкетыПоРазделам/Module.bsl index 19c075bca..cb1e3c414 100644 --- a/SSL/src/CommonForms/МастерАнкетыПоРазделам/Module.bsl +++ b/SSL/src/CommonForms/МастерАнкетыПоРазделам/Module.bsl @@ -21,9 +21,9 @@ КонецЕсли; УстановитьЗначенияРеквизитовФормыСогласноШаблонаАнкеты(); - Анкетирование.УстановитьЭлементДереваРазделовАнкетыВступлениеЗаключение(ДеревоРазделов,"Вступление"); + Анкетирование.УстановитьЭлементДереваРазделовАнкетыВступлениеЗаключение(ДеревоРазделов, НСтр("ru = 'Вступление'"), "Вступление"); Анкетирование.ЗаполнитьДеревоРазделов(ЭтотОбъект,ДеревоРазделов); - Анкетирование.УстановитьЭлементДереваРазделовАнкетыВступлениеЗаключение(ДеревоРазделов,"Заключение"); + Анкетирование.УстановитьЭлементДереваРазделовАнкетыВступлениеЗаключение(ДеревоРазделов, НСтр("ru = 'Заключение'"), "Заключение"); АнкетированиеКлиентСервер.СформироватьНумерациюДерева(ДеревоРазделов,Истина); Элементы.ДеревоРазделов.ТекущаяСтрока = 0; diff --git a/SSL/src/CommonForms/НастройкаКолонтитулов/Form.form b/SSL/src/CommonForms/НастройкаКолонтитулов/Form.form index 9e693ce8f..9f7e7507f 100644 --- a/SSL/src/CommonForms/НастройкаКолонтитулов/Form.form +++ b/SSL/src/CommonForms/НастройкаКолонтитулов/Form.form @@ -1398,7 +1398,7 @@ ТекстСправаСверху <key>ru</key> - <value>Текст слева сверху</value> + <value>Текст справа сверху</value> 3 @@ -1452,7 +1452,7 @@ ТекстСправаСнизу <key>ru</key> - <value>Текст слева снизу</value> + <value>Текст справа снизу</value> 6 diff --git a/SSL/src/CommonForms/НастройкаКомандПечати/Module.bsl b/SSL/src/CommonForms/НастройкаКомандПечати/Module.bsl index 179d16b4f..72f2a8681 100644 --- a/SSL/src/CommonForms/НастройкаКомандПечати/Module.bsl +++ b/SSL/src/CommonForms/НастройкаКомандПечати/Module.bsl @@ -108,20 +108,36 @@ &НаСервере Процедура ЗаписатьНастройкиКоманд() - НаборЗаписей = РегистрыСведений.НастройкиКомандПечати.СоздатьНаборЗаписей(); - Для Каждого НаборКоманд Из КомандыПечати.ПолучитьЭлементы() Цикл - НаборЗаписей.Отбор.Владелец.Установить(НаборКоманд.Владелец); - НаборЗаписей.Прочитать(); - НаборЗаписей.Очистить(); - ЗаписываемыеНастройки = НаборЗаписей.Выгрузить(); - Для Каждого Настройка Из НаборКоманд.ПолучитьЭлементы() Цикл - ЗаполнитьЗначенияСвойств(ЗаписываемыеНастройки.Добавить(), Настройка); + + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.НастройкиКомандПечати"); + + НачатьТранзакцию(); + Попытка + Блокировка.Заблокировать(); + + НаборЗаписей = РегистрыСведений.НастройкиКомандПечати.СоздатьНаборЗаписей(); + Для Каждого НаборКоманд Из КомандыПечати.ПолучитьЭлементы() Цикл + НаборЗаписей.Отбор.Владелец.Установить(НаборКоманд.Владелец); + НаборЗаписей.Прочитать(); + НаборЗаписей.Очистить(); + ЗаписываемыеНастройки = НаборЗаписей.Выгрузить(); + Для Каждого Настройка Из НаборКоманд.ПолучитьЭлементы() Цикл + ЗаполнитьЗначенияСвойств(ЗаписываемыеНастройки.Добавить(), Настройка); + КонецЦикла; + ЗаписываемыеНастройки.Свернуть("Владелец,УникальныйИдентификатор", "Видимость"); + НаборЗаписей.Загрузить(ЗаписываемыеНастройки); + НаборЗаписей.Записать(); КонецЦикла; - ЗаписываемыеНастройки.Свернуть("Владелец,УникальныйИдентификатор", "Видимость"); - НаборЗаписей.Загрузить(ЗаписываемыеНастройки); - НаборЗаписей.Записать(); - КонецЦикла; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + Модифицированность = Ложь; + КонецПроцедуры &НаКлиенте diff --git a/SSL/src/CommonForms/НастройкаОнлайнПоддержки/Form.form b/SSL/src/CommonForms/НастройкаОнлайнПоддержки/Form.form index a16869037..71a0bb46d 100644 --- a/SSL/src/CommonForms/НастройкаОнлайнПоддержки/Form.form +++ b/SSL/src/CommonForms/НастройкаОнлайнПоддержки/Form.form @@ -260,10 +260,6 @@ true - - <key>ru</key> - <value>Логин пароль</value> - ЛогинПарольExtendedTooltip 194 @@ -289,10 +285,6 @@ true - - <key>ru</key> - <value>Логин пароль</value> - ГруппаЛогинПарольРасширеннаяПодсказка 191 @@ -318,10 +310,6 @@ true - - <key>ru</key> - <value>Параметры запуска</value> - ГруппаПараметрыЗапускаРасширеннаяПодсказка 214 @@ -473,10 +461,6 @@ true - - <key>ru</key> - <value>Группы гиперссылки</value> - ГруппыГиперссылкиРасширеннаяПодсказка 202 @@ -502,10 +486,6 @@ true - - <key>ru</key> - <value>Информация о загрузке</value> - ГруппаИнформацияОЗагрузкеРасширеннаяПодсказка 216 diff --git a/SSL/src/CommonForms/НастройкиВходаПользователей/Form.form b/SSL/src/CommonForms/НастройкиВходаПользователей/Form.form index 2fe874983..6de0cae1f 100644 --- a/SSL/src/CommonForms/НастройкиВходаПользователей/Form.form +++ b/SSL/src/CommonForms/НастройкиВходаПользователей/Form.form @@ -626,39 +626,6 @@ Normal - - ПояснениеЗапретитьПовторениеПароляСредиПоследних - 40 - - <key>ru</key> - <value>знач.</value> - - true - true - - true - - - ПояснениеЗапретитьПовторениеПароляСредиПоследнихРасширеннаяПодсказка - 42 - Label - true - true - - Left - - - - ПояснениеЗапретитьПовторениеПароляСредиПоследнихКонтекстноеМеню - 41 - true - - Label - true - - Left - - true true diff --git a/SSL/src/CommonForms/НастройкиПравОбъектов/Module.bsl b/SSL/src/CommonForms/НастройкиПравОбъектов/Module.bsl index 2421fb5e2..796714de3 100644 --- a/SSL/src/CommonForms/НастройкиПравОбъектов/Module.bsl +++ b/SSL/src/CommonForms/НастройкиПравОбъектов/Module.bsl @@ -527,18 +527,20 @@ Процедура ДобавитьРеквизитыИлиЭлементыФормы(НовыеРеквизиты = Неопределено) Права = УправлениеДоступомСлужебныйПовтИсп.ВозможныеПраваДляНастройкиПравОбъектов(); - ОписанияВозможныхПрав = Права.ПоТипамСсылок.Получить(ТипЗнч(Параметры.СсылкаНаОбъект)); + ТипСсылкиВладельцаПрав = ТипЗнч(Параметры.СсылкаНаОбъект); + ОписанияВозможныхПрав = Права.ПоТипамСсылок.Получить(ТипСсылкиВладельцаПрав); ОписаниеТиповПсевдоФлажка = Новый ОписаниеТипов("Булево, Число", Новый КвалификаторыЧисла(1, 0, ДопустимыйЗнак.Неотрицательный)); // Добавление возможных прав, настраиваемых по владельцу (таблице значений доступа). - Для каждого ОписаниеПрава Из ОписанияВозможныхПрав Цикл + Для Каждого ОписаниеПрава Из ОписанияВозможныхПрав Цикл + ПредставленияПрава = РегистрыСведений.НастройкиПравОбъектов.ПредставлениеВозможногоПрава(ОписаниеПрава); Если НовыеРеквизиты <> Неопределено Тогда ДобавитьРеквизит(НовыеРеквизиты, Новый РеквизитФормы(ОписаниеПрава.Имя, ОписаниеТиповПсевдоФлажка, - "ГруппыПрав", ОписаниеПрава.Заголовок), ОписаниеПрава.НачальноеЗначение); + "ГруппыПрав", ПредставленияПрава.Заголовок), ОписаниеПрава.НачальноеЗначение); ВозможныеПрава.Вставить(ОписаниеПрава.Имя); @@ -571,20 +573,20 @@ Элемент.ГоризонтальноеПоложение = ГоризонтальноеПоложениеЭлемента.Центр; Элемент.ПутьКДанным = "ГруппыПрав." + ОписаниеПрава.Имя; - Элемент.Подсказка = ОписаниеПрава.Подсказка; + Элемент.Подсказка = ПредставленияПрава.Подсказка; // Расчет оптимальной ширины элемента. ШиринаЭлемента = 0; - Для НомерСтроки = 1 По СтрЧислоСтрок(ОписаниеПрава.Заголовок) Цикл - ШиринаЭлемента = Макс(ШиринаЭлемента, СтрДлина(СтрПолучитьСтроку(ОписаниеПрава.Заголовок, НомерСтроки))); + Для НомерСтроки = 1 По СтрЧислоСтрок(ПредставленияПрава.Заголовок) Цикл + ШиринаЭлемента = Макс(ШиринаЭлемента, СтрДлина(СтрПолучитьСтроку(ПредставленияПрава.Заголовок, НомерСтроки))); КонецЦикла; - Если СтрЧислоСтрок(ОписаниеПрава.Заголовок) = 1 Тогда + Если СтрЧислоСтрок(ПредставленияПрава.Заголовок) = 1 Тогда ШиринаЭлемента = ШиринаЭлемента + 1; КонецЕсли; Элемент.Ширина = ШиринаЭлемента; КонецЕсли; - Если Элементы.ГруппыПрав.ВысотаШапки < СтрЧислоСтрок(ОписаниеПрава.Заголовок) Тогда - Элементы.ГруппыПрав.ВысотаШапки = СтрЧислоСтрок(ОписаниеПрава.Заголовок); + Если Элементы.ГруппыПрав.ВысотаШапки < СтрЧислоСтрок(ПредставленияПрава.Заголовок) Тогда + Элементы.ГруппыПрав.ВысотаШапки = СтрЧислоСтрок(ПредставленияПрава.Заголовок); КонецЕсли; КонецЦикла; diff --git a/SSL/src/CommonForms/НастройкиЭлектроннойПодписиИШифрования/Form.form b/SSL/src/CommonForms/НастройкиЭлектроннойПодписиИШифрования/Form.form index d00b03650..9e93630ea 100644 --- a/SSL/src/CommonForms/НастройкиЭлектроннойПодписиИШифрования/Form.form +++ b/SSL/src/CommonForms/НастройкиЭлектроннойПодписиИШифрования/Form.form @@ -338,6 +338,32 @@ Normal + + Скопировать + 353 + true + true + + true + + + СкопироватьРасширеннаяПодсказка + 354 + Label + true + true + + Left + + + Form.Command.Скопировать + Normal + Auto + true + true + UserCmds + Auto + СертификатыСтандартныеКоманды 98 @@ -1542,13 +1568,6 @@ ru Путь к программе на компьютере ОС Linux - - Style.TextFont - true - false - false - false - true true @@ -1813,7 +1832,7 @@ для проверки электронных подписей и сертификатов. Важно: на каждый компьютер, где работает сервер 1С:Предприятия -или веб-сервер, использующий файловую информационную базу, +или веб-сервер, подключенный к файловой информационной базе, должна быть установлена хотя бы одна из программ в списке. Label @@ -1865,7 +1884,7 @@ на компьютер пользователя для подписания, шифрования и расшифровки. Важно: на каждый компьютер, где работает сервер 1С:Предприятия -или веб-сервер, использующий файловую информационную базу, +или веб-сервер, подключенный к файловой информационной базе, должна быть установлена программа и сертификат с закрытым ключом. Label @@ -2881,6 +2900,33 @@ DontUse Auto + + Скопировать + + <key>ru</key> + <value>Скопировать</value> + + 6 + + ru + Скопировать + + + true + + F9 + + StdPicture.CloneListItem + + + + Скопировать + + + Picture + Auto + Auto + diff --git a/SSL/src/CommonForms/НастройкиЭлектроннойПодписиИШифрования/Module.bsl b/SSL/src/CommonForms/НастройкиЭлектроннойПодписиИШифрования/Module.bsl index 063ea0e1c..6067d533b 100644 --- a/SSL/src/CommonForms/НастройкиЭлектроннойПодписиИШифрования/Module.bsl +++ b/SSL/src/CommonForms/НастройкиЭлектроннойПодписиИШифрования/Module.bsl @@ -404,6 +404,21 @@ КонецПроцедуры +&НаКлиенте +Процедура Скопировать(Команда) + + Если Элементы.Сертификаты.ТекущаяСтрока = Неопределено Тогда + Возврат; + КонецЕсли; + + ПараметрыСоздания = Новый Структура; + ПараметрыСоздания.Вставить("СоздатьЗаявление", Истина); + ПараметрыСоздания.Вставить("СертификатОснование", Элементы.Сертификаты.ТекущиеДанные.Ссылка); + + ЭлектроннаяПодписьСлужебныйКлиент.ДобавитьСертификат(ПараметрыСоздания); + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -486,11 +501,23 @@ ЗаблокироватьДанныеДляРедактирования(Программа, , УникальныйИдентификатор); + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Справочник.ПрограммыЭлектроннойПодписиИШифрования"); + ЭлементБлокировки.УстановитьЗначение("Ссылка", Программа); + + НачатьТранзакцию(); Попытка + + Блокировка.Заблокировать(); + Объект = Программа.ПолучитьОбъект(); Объект.ПометкаУдаления = Не Объект.ПометкаУдаления; Объект.Записать(); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); РазблокироватьДанныеДляРедактирования(Программа, УникальныйИдентификатор); ВызватьИсключение; КонецПопытки; @@ -556,7 +583,7 @@ |для проверки электронных подписей и сертификатов. | |Важно: на каждый компьютер, где работает сервер 1С:Предприятия - |или веб-сервер, использующий файловую информационную базу, + |или веб-сервер, подключенный к файловой информационной базе, |должна быть установлена хотя бы одна из программ в списке.'"); Элементы.РасширениеДляФайловПодписи.Видимость = Истина; Элементы.ДействияПриСохраненииДанныхСЭлектроннойПодписью.Видимость = Истина; @@ -567,7 +594,7 @@ |для проверки сертификатов. | |Важно: на каждый компьютер, где работает сервер 1С:Предприятия - |или веб-сервер, использующий файловую информационную базу, + |или веб-сервер, подключенный к файловой информационной базе, |должна быть установлена хотя бы одна из программ в списке.'"); Элементы.РасширениеДляФайловПодписи.Видимость = Ложь; Элементы.ДействияПриСохраненииДанныхСЭлектроннойПодписью.Видимость = Ложь; @@ -582,7 +609,7 @@ |на компьютер пользователя для шифрования и расшифровки. | |Важно: на каждый компьютер, где работает сервер 1С:Предприятия - |или веб-сервер, использующий файловую информационную базу, + |или веб-сервер, подключенный к файловой информационной базе, |должна быть установлена программа и сертификат с закрытым ключом.'"); ИначеЕсли Не Константы.ИспользоватьШифрование.Получить() Тогда ЗаголовокФлажка = НСтр("ru = 'Подписывать на сервере'"); @@ -591,7 +618,7 @@ |на компьютер пользователя для подписания. | |Важно: на каждый компьютер, где работает сервер 1С:Предприятия - |или веб-сервер, использующий файловую информационную базу, + |или веб-сервер, подключенный к файловой информационной базе, |должна быть установлена программа и сертификат с закрытым ключом.'"); Иначе ЗаголовокФлажка = НСтр("ru = 'Подписывать и шифровать на сервере'"); @@ -600,7 +627,7 @@ |на компьютер пользователя для подписания, шифрования и расшифровки. | |Важно: на каждый компьютер, где работает сервер 1С:Предприятия - |или веб-сервер, использующий файловую информационную базу, + |или веб-сервер, подключенный к файловой информационной базе, |должна быть установлена программа и сертификат с закрытым ключом.'"); КонецЕсли; Элементы.ПодписыватьНаСервере.Заголовок = ЗаголовокФлажка; @@ -722,7 +749,9 @@ ПараметрыВыполнения.Вставить("Оповещение", Новый ОписаниеОповещения( "ОбработчикОжиданияОпределитьУстановленныеПрограммыЦиклПродолжение", ЭтотОбъект, Контекст)); - Контекст.Вставить("ПараметрыВыполнения", ПараметрыВыполнения); + Контекст.Вставить("ПараметрыВыполнения", + Новый Структура("СвойстваОшибки", ПараметрыВыполнения.СвойстваОшибки)); + ЭлектроннаяПодписьСлужебныйКлиент.СоздатьМенеджерКриптографииЦиклНачало(ПараметрыВыполнения); КонецПроцедуры diff --git a/SSL/src/CommonForms/НовыйПароль/Module.bsl b/SSL/src/CommonForms/НовыйПароль/Module.bsl index 256eb2c9f..46d4e4751 100644 --- a/SSL/src/CommonForms/НовыйПароль/Module.bsl +++ b/SSL/src/CommonForms/НовыйПароль/Module.bsl @@ -11,25 +11,8 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - Если Параметры.ДляВнешнегоПользователя Тогда - НастройкиВхода = ПользователиСлужебныйПовтИсп.Настройки().ВнешниеПользователи; - Иначе - НастройкиВхода = ПользователиСлужебныйПовтИсп.Настройки().Пользователи; - КонецЕсли; - - МинимальнаяДлинаПароля = ПолучитьМинимальнуюДлинуПаролейПользователей(); - - Если МинимальнаяДлинаПароля < НастройкиВхода.МинимальнаяДлинаПароля Тогда - МинимальнаяДлинаПароля = НастройкиВхода.МинимальнаяДлинаПароля; - КонецЕсли; - - Если МинимальнаяДлинаПароля <= 8 Тогда - МинимальнаяДлинаПароля = 8; - КонецЕсли; - - ПараметрыПароля = ПользователиСлужебный.ПараметрыПароля(МинимальнаяДлинаПароля, Истина); - - НовыйПароль = ПользователиСлужебный.СоздатьПароль(ПараметрыПароля); + НовыйПароль = Пользователи.СоздатьПароль(8, Истина, ?(Параметры.ДляВнешнегоПользователя, + "ДляВнешнихПользователей", "ДляПользователей")); Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда Элементы.ФормаЗакрыть.Видимость = Ложь; diff --git a/SSL/src/CommonForms/ОтправкаSMS/Module.bsl b/SSL/src/CommonForms/ОтправкаSMS/Module.bsl index ddcd9cde1..f125844cd 100644 --- a/SSL/src/CommonForms/ОтправкаSMS/Module.bsl +++ b/SSL/src/CommonForms/ОтправкаSMS/Module.bsl @@ -31,9 +31,15 @@ Элементы.ГруппаНомерПолучателя.Видимость = Истина; КонецЕсли; - НомераПолучателей = " " + СтрСоединить(НомераТелефонов, ", "); + НомераПолучателей = СтрСоединить(НомераТелефонов, ", "); + + ШаблонЗаголовка = НСтр("ru = 'Отправка SMS на телефон %1'"); + Если НомераТелефонов.Количество() > 1 Тогда + ШаблонЗаголовка = НСтр("ru = 'Отправка SMS на телефоны: %1'"); + КонецЕсли; + + Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонЗаголовка, НомераПолучателей); - Заголовок = НСтр("ru = 'Отправка SMS на телефон'") + НомераПолучателей; КонецПроцедуры &НаКлиенте @@ -99,12 +105,11 @@ ИдентификаторСообщения = ""; // Подготовка номеров получателей. - МассивНомеров = СтрокиТекстаВМассив(НомераПолучателей); + МассивНомеров = СтрРазделить(НомераПолучателей, ", ", Ложь); // отправка РезультатОтправки = ОтправкаSMS.ОтправитьSMS(МассивНомеров, ТекстСообщения, ИмяОтправителя, ОтправлятьВТранслите); - // Вывод информации об ошибках в процессе отправки. Если ПустаяСтрока(РезультатОтправки.ОписаниеОшибки) Тогда // Проверка доставки для первого получателя. @@ -116,8 +121,7 @@ Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаСообщениеНеОтправлено; ШаблонСообщения = НСтр("ru = 'Отправка не выполнена: - |%1 - |Подробности см. в журнале регистрации.'"); + |%1.'"); Элементы.ТекстСообщениеНеОтправлено.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( ШаблонСообщения, РезультатОтправки.ОписаниеОшибки); @@ -183,25 +187,6 @@ КонецФункции -&НаСервере -Функция СтрокиТекстаВМассив(Текст) - - Результат = Новый Массив; - - ТекстовыйДокумент = Новый ТекстовыйДокумент; - ТекстовыйДокумент.УстановитьТекст(Текст); - - Для НомерСтроки = 1 По ТекстовыйДокумент.КоличествоСтрок() Цикл - Строка = ТекстовыйДокумент.ПолучитьСтроку(НомерСтроки); - Если Не ПустаяСтрока(Строка) Тогда - Результат.Добавить(Строка); - КонецЕсли; - КонецЦикла; - - Возврат Результат; - -КонецФункции - &НаКлиенте Процедура ТекстИзменениеТекстаРедактирования(Элемент, Текст, СтандартнаяОбработка) ДлинаСообщенияСимволов = СтрДлина(Текст); diff --git a/SSL/src/CommonForms/ОтправкаСообщения/Form.form b/SSL/src/CommonForms/ОтправкаСообщения/Form.form index ec12aeb3e..a555cafa9 100644 --- a/SSL/src/CommonForms/ОтправкаСообщения/Form.form +++ b/SSL/src/CommonForms/ОтправкаСообщения/Form.form @@ -73,7 +73,7 @@ VeryHigh <key>ru</key> - <value>Почтовый адреса получателей</value> + <value>Почтовые адреса получателей</value> true true @@ -1468,6 +1468,31 @@ true + + Предмет + 12 + + + true + + + true + + + + ОписаниеПолучателяВоВременномХранилище + 14 + + String + + + + true + + + true + + ОтправитьПисьмо @@ -1635,6 +1660,10 @@ <name>СкрытыеКопии</name> <valueType/> </parameters> + <parameters> + <name>Предмет</name> + <valueType/> + </parameters> <commandInterface> <navigationPanel/> <commandBar/> diff --git a/SSL/src/CommonForms/ОтправкаСообщения/Module.bsl b/SSL/src/CommonForms/ОтправкаСообщения/Module.bsl index 6b4d9648e..d37a9d76c 100644 --- a/SSL/src/CommonForms/ОтправкаСообщения/Module.bsl +++ b/SSL/src/CommonForms/ОтправкаСообщения/Module.bsl @@ -31,6 +31,7 @@ ТемаПисьма = Параметры.Тема; ТелоПисьма.УстановитьHTML(ТекстВHTML(Параметры.Текст), ВложенияДляПисьма); АдресОтвета = Параметры.АдресОтвета; + Предмет = Параметры.Предмет; Если НЕ ЗначениеЗаполнено(Параметры.Отправитель) Тогда // Учетная запись не передана - выбираем первую доступную. @@ -75,7 +76,7 @@ Для Каждого ЭлементПочтовыйАдрес Из Параметры.Получатель Цикл НовыйПолучатель = ПочтовыеАдресаПолучателей.Добавить(); - НовыйПолучатель.ВариантОтправки = НСтр("ru='Кому:'"); + НовыйПолучатель.ВариантОтправки = НСтр("ru = 'Кому:'"); Если ЗначениеЗаполнено(ЭлементПочтовыйАдрес.Представление) Тогда НовыйПолучатель.Представление = ЭлементПочтовыйАдрес.Представление + " <" @@ -88,7 +89,7 @@ ИначеЕсли ТипЗнч(Параметры.Получатель) = Тип("Строка") Тогда НовыйПолучатель = ПочтовыеАдресаПолучателей.Добавить(); - НовыйПолучатель.ВариантОтправки = НСтр("ru='Кому:'"); + НовыйПолучатель.ВариантОтправки = НСтр("ru = 'Кому:'"); НовыйПолучатель.Представление = Параметры.Получатель; ИначеЕсли ТипЗнч(Параметры.Получатель) = Тип("Массив") Тогда Для Каждого СтруктураПолучателя Из Параметры.Получатель Цикл @@ -100,7 +101,7 @@ КонецЕсли; Если (ЕстьСвойствоВыбран И СтруктураПолучателя.Выбран) ИЛИ (НЕ ЕстьСвойствоВыбран) Тогда НовыйПолучатель = ПочтовыеАдресаПолучателей.Добавить(); - НовыйПолучатель.ВариантОтправки = НСтр("ru='Кому:'"); + НовыйПолучатель.ВариантОтправки = НСтр("ru = 'Кому:'"); НовыйПолучатель.Представление = СтруктураПолучателя.Представление + " <" + СокрЛП(Адрес) + ">"; КонецЕсли; КонецЦикла; @@ -115,11 +116,15 @@ ИначеЕсли ТипЗнч(Параметры.Получатель) = Тип("Массив") Тогда ЗаполнитьТаблицуПолучателейИзМассиваСтруктур(Параметры.Получатель); КонецЕсли; + + ОписаниеПолучателяВоВременномХранилище = ПоместитьВоВременноеХранилище(Параметры.Получатель, УникальныйИдентификатор); + Иначе + ОписаниеПолучателяВоВременномХранилище = ПоместитьВоВременноеХранилище(Новый Массив, УникальныйИдентификатор); КонецЕсли; Если ПочтовыеАдресаПолучателей.Количество() = 0 Тогда НоваяСтрока = ПочтовыеАдресаПолучателей.Добавить(); - НоваяСтрока.ВариантОтправки = НСтр("ru='Кому:'"); + НоваяСтрока.ВариантОтправки = НСтр("ru = 'Кому:'"); НоваяСтрока.Представление = ""; КонецЕсли; @@ -159,7 +164,7 @@ МодульШаблоныСообщенийСлужебный = ОбщегоНазначения.ОбщийМодуль("ШаблоныСообщенийСлужебный"); Если МодульШаблоныСообщенийСлужебный.ИспользуютсяШаблоныСообщений() Тогда - Элементы.ФормаСформироватьПоШаблону.Видимость = МодульШаблоныСообщенийСлужебный.ЕстьДоступныеШаблоны("Письмо"); + Элементы.ФормаСформироватьПоШаблону.Видимость = МодульШаблоныСообщенийСлужебный.ЕстьДоступныеШаблоны("Письмо", Предмет); Элементы.ФормаСохранитьКакШаблон.Видимость = Истина; КонецЕсли; @@ -485,7 +490,8 @@ Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ШаблоныСообщений") Тогда МодульШаблоныСообщенийКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ШаблоныСообщенийКлиент"); Оповещение = Новый ОписаниеОповещения("ЗаполнитьПоШаблонуПослеВыбораШаблона", ЭтотОбъект); - МодульШаблоныСообщенийКлиент.ПодготовитьСообщениеПоШаблону("Общий", "Письмо", Оповещение); + ПредметСообщения = ?(ЗначениеЗаполнено(Предмет), Предмет, "Общий"); + МодульШаблоныСообщенийКлиент.ПодготовитьСообщениеПоШаблону(ПредметСообщения, "Письмо", Оповещение); КонецЕсли КонецПроцедуры @@ -498,13 +504,19 @@ &НаСервере Функция ОтправитьПочтовоеСообщение() + ПараметрыПисьма = СформироватьПараметрыПисьма(); Если ПараметрыПисьма = Неопределено Тогда Возврат Ложь; КонецЕсли; - РаботаСПочтовымиСообщениями.ОтправитьПочтовоеСообщение(УчетнаяЗапись, ПараметрыПисьма); + + Письмо = РаботаСПочтовымиСообщениями.ПодготовитьПисьмо(УчетнаяЗапись, ПараметрыПисьма); + РаботаСПочтовымиСообщениями.ОтправитьПисьмо(УчетнаяЗапись, Письмо); + РаботаСПочтовымиСообщениямиПереопределяемый.ПослеОтправкиПисьма(ПараметрыПисьма); + ДобавитьПолучателейВИсторию(ПараметрыПисьма.Кому); Возврат Истина; + КонецФункции &НаСервереБезКонтекста @@ -705,6 +717,10 @@ ПараметрыПисьма.Вставить("Тема", ТемаПисьма); КонецЕсли; + Если ЗначениеЗаполнено(ОписаниеПолучателяВоВременномХранилище) Тогда + ПараметрыПисьма.Вставить("ПолучателиСообщения", ПолучитьИзВременногоХранилища(ОписаниеПолучателяВоВременномХранилище)); + КонецЕсли; + ПараметрыПисьма.Вставить("Тело", ТелоПисьма); ПараметрыПисьма.Вставить("Вложения", Вложения()); @@ -924,7 +940,7 @@ Если ТипЗнч(Результат.Получатель) = Тип("СписокЗначений") Тогда Для Каждого Получатель Из Результат.Получатель Цикл АдресПолучателя = ПочтовыеАдресаПолучателей.Добавить(); - АдресПолучателя.ВариантОтправки = НСтр("ru='Кому:'"); + АдресПолучателя.ВариантОтправки = НСтр("ru = 'Кому:'"); АдресПолучателя.Представление = Получатель.Представление; КонецЦикла; КонецЕсли; diff --git a/SSL/src/CommonForms/ПанельОтчетов/Form.form b/SSL/src/CommonForms/ПанельОтчетов/Form.form index 0b0ecf4dd..52be1cfe2 100644 --- a/SSL/src/CommonForms/ПанельОтчетов/Form.form +++ b/SSL/src/CommonForms/ПанельОтчетов/Form.form @@ -627,7 +627,7 @@ <title> <key>ru</key> <value>Для перемещения отчета в эту группу нажмите на отчете правой кнопкой мыши и выберите "Переместить в быстрый доступ". -В быстрый доступ следует перемещать отчеты, которые используются постоянно. +В быстрый доступ рекомендуется помещать отчеты, которые используются постоянно. Отчеты, перемещенные в быстрый доступ, будут отображаться вверху панели отчетов, выше всех остальных отчетов. Это персональная настройка, у каждого пользователя свой быстрый доступ.</value> @@ -1498,7 +1498,7 @@ Vertical auto - true + false
    true diff --git a/SSL/src/CommonForms/ПанельОтчетов/Module.bsl b/SSL/src/CommonForms/ПанельОтчетов/Module.bsl index 2cbb2e842..d828ee2bc 100644 --- a/SSL/src/CommonForms/ПанельОтчетов/Module.bsl +++ b/SSL/src/CommonForms/ПанельОтчетов/Module.bsl @@ -25,26 +25,20 @@ ПараметрыКлиента.Вставить("ПутьКПодсистеме", Параметры.ПутьКПодсистеме); КартинкаБыстрыйДоступ = БиблиотекаКартинок.БыстрыйДоступ; - ЦветСкрытыхВариантов = ЦветаСтиля.СкрытыйВариантОтчетаЦвет; - ЦветВидимыхВариантов = ЦветаСтиля.ГиперссылкаЦвет; - ЦветПодсветкиНайденныхСлов = WebЦвета.Желтый; - ЦветПодсказки = ЦветаСтиля.ПоясняющийТекст; - Если КлиентскоеПриложение.ТекущийВариантИнтерфейса() = ВариантИнтерфейсаКлиентскогоПриложения.Версия8_2 Тогда - Элементы.КоманднаяПанель.Ширина = 25; - Элементы.СтрокаПоиска.Ширина = 35; - ЦветГруппыВариантовОтчетов = ЦветаСтиля.ГруппаВариантовОтчетовЦвет82; - ШрифтВажнойГруппы = Новый Шрифт("MS Shell Dlg", 10, Истина, Ложь, Ложь, Ложь, 100); - ШрифтОбычнойГруппы = Новый Шрифт("MS Shell Dlg", 8, Истина, Ложь, Ложь, Ложь, 100); - ШрифтРаздела = Новый Шрифт("MS Shell Dlg", 12, Истина, Ложь, Ложь, Ложь, 100); - ШрифтВажнойНадписи = Новый Шрифт(, , Истина); - Иначе // Такси. - ЦветГруппыВариантовОтчетов = ЦветаСтиля.ГруппаВариантовОтчетовЦвет; - ШрифтВажнойГруппы = Новый Шрифт("Arial", 12, Ложь, Ложь, Ложь, Ложь, 100); - ШрифтОбычнойГруппы = Новый Шрифт("Arial", 12, Ложь, Ложь, Ложь, Ложь, 90); - ШрифтРаздела = Новый Шрифт("Arial", 12, Истина, Ложь, Ложь, Ложь, 100); - ШрифтВажнойНадписи = Новый Шрифт("Arial", 10, Истина, Ложь, Ложь, Ложь, 100); - КонецЕсли; + ЭлементыСтиля = Метаданные.ЭлементыСтиля; + + ЦветСкрытыхВариантов = ЭлементыСтиля.СкрытыйВариантОтчетаЦвет.Значение; + ЦветВидимыхВариантов = ЭлементыСтиля.ГиперссылкаЦвет.Значение; + ЦветПодсветкиНайденныхСлов = ЭлементыСтиля.ФонРезультатовПоиска.Значение; + ЦветПодсказки = ЭлементыСтиля.ПоясняющийТекст.Значение; + ЦветГруппыВариантовОтчетов = ЭлементыСтиля.ГруппаВариантовОтчетовЦвет.Значение; + + ШрифтВажнойГруппы = ЭлементыСтиля.ГруппаВариантовОтчетовВажнаяШрифт.Значение; + ШрифтОбычнойГруппы = ЭлементыСтиля.ГруппаВариантовОтчетовОбычнаяШрифт.Значение; + ШрифтРаздела = ЭлементыСтиля.РазделВариантовОтчетовШрифт.Значение; + ШрифтВажнойНадписи = ЭлементыСтиля.ВажнаяНадписьШрифт.Значение; + Если Не ПравоДоступа("СохранениеДанныхПользователя", Метаданные) Тогда Элементы.Настроить.Видимость = Ложь; Элементы.СброситьМоиНастройки.Видимость = Ложь; @@ -62,10 +56,8 @@ ЦветРаздела = ЦветГруппыВариантовОтчетов; - Элементы.БыстрыйДоступШапкаНадпись.Шрифт = ШрифтВажнойГруппы; + Элементы.БыстрыйДоступШапкаНадпись.Шрифт = ШрифтВажнойГруппы; Элементы.БыстрыйДоступШапкаНадпись.ЦветТекста = ЦветГруппыВариантовОтчетов; - Элементы.СмТакже.ШрифтЗаголовка = ШрифтВажнойГруппы; - Элементы.СмТакже.ЦветТекстаЗаголовка = ЦветГруппыВариантовОтчетов; НаборРеквизитов = ПолучитьРеквизиты(); Для Каждого Реквизит Из НаборРеквизитов Цикл @@ -1719,15 +1711,17 @@ ВГруппу = ГруппаОтступа; ШрифтЗаголовка = ШрифтОбычнойГруппы; + ОтображениеГруппыПодсистемы = ОтображениеОбычнойГруппы.Нет; Иначе ШрифтЗаголовка = ШрифтВажнойГруппы; + ОтображениеГруппыПодсистемы = ОтображениеОбычнойГруппы.ОбычноеВыделение; КонецЕсли; ГруппаПодсистемы = Элементы.Вставить(ГруппаПодсистемыИмя, Тип("ГруппаФормы"), ВГруппу); ГруппаПодсистемы.Вид = ВидГруппыФормы.ОбычнаяГруппа; ГруппаПодсистемы.РастягиватьПоГоризонтали = Истина; ГруппаПодсистемы.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная; - ГруппаПодсистемы.Отображение = ОтображениеОбычнойГруппы.Нет; + ГруппаПодсистемы.Отображение = ОтображениеГруппыПодсистемы; ТребуетсяПодсветка = Ложь; Если ПараметрыЗаполнения.ИспользоватьПодсветку Тогда @@ -1754,9 +1748,9 @@ ФорматированнаяСтрока = СформироватьСтрокуСПодсветкой(ПодсветкаПредставления); ЗаголовокПодсистемы = Элементы.Вставить(ГруппаПодсистемы.Имя + "_РасширеннаяПодсказка", Тип("ДекорацияФормы"), ГруппаПодсистемы); - ЗаголовокПодсистемы.Заголовок = ФорматированнаяСтрока; + ЗаголовокПодсистемы.Заголовок = ФорматированнаяСтрока; ЗаголовокПодсистемы.ЦветТекста = ЦветГруппыВариантовОтчетов; - ЗаголовокПодсистемы.Шрифт = ШрифтЗаголовка; + ЗаголовокПодсистемы.Шрифт = ШрифтЗаголовка; ЗаголовокПодсистемы.РастягиватьПоГоризонтали = Истина; ЗаголовокПодсистемы.Высота = 1; @@ -1766,9 +1760,7 @@ КонецЕсли; ГруппаПодсистемы.ОтображатьЗаголовок = Истина; - ГруппаПодсистемы.Заголовок = ПодсистемаПредставление; - ГруппаПодсистемы.ЦветТекстаЗаголовка = ЦветГруппыВариантовОтчетов; - ГруппаПодсистемы.ШрифтЗаголовка = ШрифтЗаголовка; + ГруппаПодсистемы.Заголовок = ПодсистемаПредставление; КонецЕсли; СтрокаДерева.ГруппаФормы = ГруппаПодсистемы; diff --git a/SSL/src/CommonForms/ПараметрыПроксиСервера/Form.form b/SSL/src/CommonForms/ПараметрыПроксиСервера/Form.form index 5d0c055cc..98c774ede 100644 --- a/SSL/src/CommonForms/ПараметрыПроксиСервера/Form.form +++ b/SSL/src/CommonForms/ПараметрыПроксиСервера/Form.form @@ -177,10 +177,6 @@ true - - <key>ru</key> - <value>Адрес сервера</value> - ГруппаАдресСервераExtendedTooltip 47 @@ -368,10 +364,6 @@ true - - <key>ru</key> - <value>Аутентификация</value> - ГруппаАутентификацияРасширеннаяПодсказка 75 @@ -462,10 +454,6 @@ true - - <key>ru</key> - <value>Дополнительные параметры</value> - ГруппаДополнительныхПараметровExtendedTooltip 53 @@ -492,10 +480,6 @@ true - - <key>ru</key> - <value>Настройка прокси сервера</value> - ПараметрыПроксиExtendedTooltip 46 diff --git a/SSL/src/CommonForms/ПараметрыПроксиСервера/Module.bsl b/SSL/src/CommonForms/ПараметрыПроксиСервера/Module.bsl index 340f89e5c..a20597268 100644 --- a/SSL/src/CommonForms/ПараметрыПроксиСервера/Module.bsl +++ b/SSL/src/CommonForms/ПараметрыПроксиСервера/Module.bsl @@ -416,7 +416,8 @@ // Параметры: // АдресПроксиСервера (Строка) - нормализуемый адрес прокси-сервера. // -// Возвращаемое значение: Строка - нормализованный адрес прокси-сервера. +// Возвращаемое значение: +// Строка - нормализованный адрес прокси-сервера. // &НаКлиентеНаСервереБезКонтекста Функция НормализованныйАдресПроксиСервера(Знач АдресПроксиСервера) diff --git a/SSL/src/CommonForms/ПечатьДокументов/Form.form b/SSL/src/CommonForms/ПечатьДокументов/Form.form index e2b3562e4..acf53bf66 100644 --- a/SSL/src/CommonForms/ПечатьДокументов/Form.form +++ b/SSL/src/CommonForms/ПечатьДокументов/Form.form @@ -2909,8 +2909,8 @@ Number - 15 - 2 + 25 + 5 @@ -2948,8 +2948,8 @@ Number - 15 - 2 + 25 + 5 @@ -2969,8 +2969,8 @@ Number - 17 - 4 + 25 + 5 @@ -2990,8 +2990,8 @@ Number - 17 - 4 + 25 + 5 @@ -3011,8 +3011,8 @@ Number - 15 - 2 + 25 + 5 @@ -3032,8 +3032,8 @@ Number - 15 - 2 + 25 + 5 @@ -3090,6 +3090,41 @@ true + + ОсновнойПоказатель + 8 + + String + + 100 + + + + true + + + true + + + ОсновнойПоказатель + + + + РазвернутьОбластьПоказателей + 9 + + Boolean + + + true + + + true + + + РазвернутьОбластьПоказателей + + Отправить diff --git a/SSL/src/CommonForms/ПечатьДокументов/Module.bsl b/SSL/src/CommonForms/ПечатьДокументов/Module.bsl index b598fe1d8..dd819d72e 100644 --- a/SSL/src/CommonForms/ПечатьДокументов/Module.bsl +++ b/SSL/src/CommonForms/ПечатьДокументов/Module.bsl @@ -75,7 +75,7 @@ МодульЭлектронноеВзаимодействие.ПриВыводеНавигационнойСсылкиВФормеОбъектаИБ(ДополнительнаяИнформация, МассивСсылок); КонецЕсли; КонецЕсли; - Элементы.ДополнительнаяИнформация.Заголовок = СтроковыеФункцииКлиентСервер.ФорматированнаяСтрока(ДополнительнаяИнформация.Текст); + Элементы.ДополнительнаяИнформация.Заголовок = СтроковыеФункции.ФорматированнаяСтрока(ДополнительнаяИнформация.Текст); Элементы.КартинкаИнформации.Картинка = ДополнительнаяИнформация.Картинка; Элементы.ГруппаДополнительнаяИнформация.Видимость = Не ПустаяСтрока(Элементы.ДополнительнаяИнформация.Заголовок); Элементы.КартинкаИнформации.Видимость = Элементы.КартинкаИнформации.Картинка.Вид <> ВидКартинки.Пустая; @@ -141,7 +141,9 @@ ДобавитьУдалитьПодписьПечать(); КонецЕсли; УстановитьТекущуюСтраницу(); - РассчитатьПоказатели(); + + ОбщегоНазначенияСлужебныйКлиент.УстановитьВидимостьПанелиПоказателей(Элементы, РазвернутьОбластьПоказателей); + ОбщегоНазначенияСлужебныйКлиент.РассчитатьПоказатели(ЭтотОбъект, "ТекущаяПечатнаяФорма", ОсновнойПоказатель); ИнтеграцияПодсистемБСПКлиент.ПечатьДокументовПослеОткрытия(ЭтотОбъект); УправлениеПечатьюКлиентПереопределяемый.ПечатьДокументовПослеОткрытия(ЭтотОбъект); @@ -385,37 +387,38 @@ &НаКлиенте Процедура РассчитатьСумму(Команда) - РассчитатьПоказатели(Команда.Имя); + ОбщегоНазначенияСлужебныйКлиент.РассчитатьПоказатели(ЭтотОбъект, "ТекущаяПечатнаяФорма", Команда.Имя); КонецПроцедуры &НаКлиенте Процедура РассчитатьКоличество(Команда) - РассчитатьПоказатели(Команда.Имя); + ОбщегоНазначенияСлужебныйКлиент.РассчитатьПоказатели(ЭтотОбъект, "ТекущаяПечатнаяФорма", Команда.Имя); КонецПроцедуры &НаКлиенте Процедура РассчитатьСреднее(Команда) - РассчитатьПоказатели(Команда.Имя); + ОбщегоНазначенияСлужебныйКлиент.РассчитатьПоказатели(ЭтотОбъект, "ТекущаяПечатнаяФорма", Команда.Имя); КонецПроцедуры &НаКлиенте Процедура РассчитатьМинимум(Команда) - РассчитатьПоказатели(Команда.Имя); + ОбщегоНазначенияСлужебныйКлиент.РассчитатьПоказатели(ЭтотОбъект, "ТекущаяПечатнаяФорма", Команда.Имя); КонецПроцедуры &НаКлиенте Процедура РассчитатьМаксимум(Команда) - РассчитатьПоказатели(Команда.Имя); + ОбщегоНазначенияСлужебныйКлиент.РассчитатьПоказатели(ЭтотОбъект, "ТекущаяПечатнаяФорма", Команда.Имя); КонецПроцедуры &НаКлиенте Процедура РассчитатьВсеПоказатели(Команда) - УстановитьВидимостьПоказателей(Не Элементы.РассчитатьВсеПоказатели.Пометка); + ОбщегоНазначенияСлужебныйКлиент.УстановитьВидимостьПанелиПоказателей( + Элементы, Не Элементы.РассчитатьВсеПоказатели.Пометка); КонецПроцедуры &НаКлиенте Процедура СвернутьПоказатели(Команда) - УстановитьВидимостьПоказателей(Ложь); + ОбщегоНазначенияСлужебныйКлиент.УстановитьВидимостьПанелиПоказателей(Элементы); КонецПроцедуры &НаКлиенте @@ -736,21 +739,26 @@ Процедура УстановитьЗаголовокФормы() Перем ЗаголовокФормы; - Если ТипЗнч(Параметры.ПараметрыПечати) = Тип("Структура") Тогда + ПараметрыВывода.Свойство("ЗаголовокФормы", ЗаголовокФормы); + + Если Не ЗначениеЗаполнено(ЗаголовокФормы) И ТипЗнч(Параметры.ПараметрыПечати) = Тип("Структура") Тогда Параметры.ПараметрыПечати.Свойство("ЗаголовокФормы", ЗаголовокФормы); КонецЕсли; - Если ЗначениеЗаполнено(ЗаголовокФормы) Тогда - Заголовок = ЗаголовокФормы; - Иначе + Если Не ЗначениеЗаполнено(ЗаголовокФормы) Тогда Если ЭтоПечатьКомплекта() Тогда - Заголовок = НСтр("ru = 'Печать комплекта'"); - ИначеЕсли ТипЗнч(Параметры.ПараметрКоманды) <> Тип("Массив") Или Параметры.ПараметрКоманды.Количество() > 1 Тогда - Заголовок = НСтр("ru = 'Печать документов'"); + ЗаголовокФормы = НСтр("ru = 'Печать комплекта'"); + ИначеЕсли ОбъектыПечати.Количество() > 1 Тогда + ЗаголовокФормы = НСтр("ru = 'Печать документов'"); + ИначеЕсли ОбъектыПечати.Количество() = 1 И ОбщегоНазначения.ЭтоСсылка(ТипЗнч(ОбъектыПечати[0].Значение)) Тогда + ЗаголовокФормы = Строка(ОбъектыПечати[0].Значение); Иначе - Заголовок = НСтр("ru = 'Печать документа'"); + ЗаголовокФормы = НСтр("ru = 'Печать документа'"); КонецЕсли; КонецЕсли; + + Заголовок = ЗаголовокФормы; + КонецПроцедуры &НаКлиенте @@ -916,7 +924,7 @@ ИмяФайла = ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыВИмениФайла(ИмяФайла); Если ПереводитьИменаФайловВТранслит Тогда - ИмяФайла = СтроковыеФункцииКлиентСервер.СтрокаЛатиницей(ИмяФайла); + ИмяФайла = СтроковыеФункции.СтрокаЛатиницей(ИмяФайла); КонецЕсли; ИмяФайла = ИмяФайла + "." + НастройкиФормата.Расширение; @@ -991,7 +999,7 @@ КонецЦикла; Если ПереводитьИменаФайловВТранслит Тогда - Результат = СтроковыеФункцииКлиентСервер.СтрокаЛатиницей(Результат); + Результат = СтроковыеФункции.СтрокаЛатиницей(Результат); КонецЕсли; Возврат Результат + ".zip"; @@ -1056,13 +1064,9 @@ Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда МодульРаботаСФайлами = ОбщегоНазначения.ОбщийМодуль("РаботаСФайлами"); Для Каждого Файл Из ФайлыВоВременномХранилище Цикл - ПараметрыФайла = Новый Структура; - ПараметрыФайла.Вставить("ВладелецФайлов", ОбъектДляПрисоединения); - ПараметрыФайла.Вставить("Автор", Неопределено); - ПараметрыФайла.Вставить("ИмяБезРасширения", Файл.Представление); - ПараметрыФайла.Вставить("РасширениеБезТочки", Неопределено); - ПараметрыФайла.Вставить("ВремяИзменения", Неопределено); - ПараметрыФайла.Вставить("ВремяИзмененияУниверсальное", Неопределено); + ПараметрыФайла = МодульРаботаСФайлами.ПараметрыДобавленияФайла(); + ПараметрыФайла.ВладелецФайлов = ОбъектДляПрисоединения; + ПараметрыФайла.ИмяБезРасширения = Файл.Представление; Результат.Добавить(МодульРаботаСФайлами.ДобавитьФайл( ПараметрыФайла, Файл.АдресВоВременномХранилище, , НСтр("ru = 'Печатная форма'"))); КонецЦикла; @@ -1602,103 +1606,12 @@ КонецПроцедуры -#Область РасчетПоказателейВыделенныхЯчеек - // Выполняет расчет и вывод показателей выделенной области ячеек. // См. обработчик события ОтчетТабличныйДокументПриАктивизацииОбласти. // &НаКлиенте Процедура РассчитатьПоказателиДинамически() - Перем ТекущаяКоманда; - - КомандыПоказателей = КомандыПоказателей(); - Для Каждого Команда Из КомандыПоказателей Цикл - Если Элементы[Команда.Ключ].Пометка Тогда - ТекущаяКоманда = Команда.Ключ; - Прервать; - КонецЕсли; - КонецЦикла; - - РассчитатьПоказатели(ТекущаяКоманда); -КонецПроцедуры - -// Выполняет расчет и вывод показателей выделенных областей ячеек табличного документа. -// -// Параметры: -// ТекущаяКоманда - Строка - имя команды расчета показателя, например, "РассчитатьСумму". -// Определяет, какой показатель является основным. -// -&НаКлиенте -Процедура РассчитатьПоказатели(ТекущаяКоманда = "РассчитатьСумму") - // Расчет показателей. - ПараметрыРасчета = ОбщегоНазначенияСлужебныйКлиент.ПараметрыРасчетаПоказателейЯчеек(ТекущаяПечатнаяФорма); - Если ПараметрыРасчета.РассчитатьНаСервере Тогда - РасчетныеПоказатели = РасчетныеПоказателиСервер(ПараметрыРасчета); - Иначе - РасчетныеПоказатели = ОбщегоНазначенияСлужебныйКлиентСервер.РасчетныеПоказателиЯчеек( - ТекущаяПечатнаяФорма, ПараметрыРасчета.ВыделенныеОбласти); - КонецЕсли; - - // Установка значений показателей. - ЗаполнитьЗначенияСвойств(ЭтотОбъект, РасчетныеПоказатели); - - // Переключение и форматирование показателей. - КомандыПоказателей = КомандыПоказателей(); - Для Каждого Команда Из КомандыПоказателей Цикл - Элементы[Команда.Ключ].Пометка = Ложь; - - ЗначениеПоказателя = РасчетныеПоказатели[Команда.Значение]; - РазрядностьПоказателя = Мин(СтрДлина(Макс(ЗначениеПоказателя, -ЗначениеПоказателя) % 1) - 2, 4); - - Элементы[Команда.Значение].ФорматРедактирования = "ЧДЦ=" + РазрядностьПоказателя + "; ЧРГ=' '; ЧН=0"; - КонецЦикла; - Элементы[ТекущаяКоманда].Пометка = Истина; - - // Вывод основного показателя. - ТекущийПоказатель = КомандыПоказателей[ТекущаяКоманда]; - Показатель = ЭтотОбъект[ТекущийПоказатель]; - Элементы.Показатель.ФорматРедактирования = Элементы[ТекущийПоказатель].ФорматРедактирования; - Элементы.КомандыВидовПоказателей.Картинка = БиблиотекаКартинок[ТекущийПоказатель]; -КонецПроцедуры - -// Рассчитывает показатели числовых ячеек в табличном документе. -// см. ОтчетыКлиентСервер.РасчетныеПоказателиЯчеек. -// -&НаСервере -Функция РасчетныеПоказателиСервер(ПараметрыРасчета) - Возврат ОбщегоНазначенияСлужебныйКлиентСервер.РасчетныеПоказателиЯчеек(ТекущаяПечатнаяФорма, ПараметрыРасчета.ВыделенныеОбласти); -КонецФункции - -// Определяет соответствие между командами расчета показателей и показателями. -// -// Возвращаемое значение: -// Соответствие - Ключ - имя команды, Значение - имя показателя. -// -&НаКлиенте -Функция КомандыПоказателей() - КомандыПоказателей = Новый Соответствие(); - КомандыПоказателей.Вставить("РассчитатьСумму", "Сумма"); - КомандыПоказателей.Вставить("РассчитатьКоличество", "Количество"); - КомандыПоказателей.Вставить("РассчитатьСреднее", "Среднее"); - КомандыПоказателей.Вставить("РассчитатьМинимум", "Минимум"); - КомандыПоказателей.Вставить("РассчитатьМаксимум", "Максимум"); - - Возврат КомандыПоказателей; -КонецФункции - -// Управляет признаком видимости панели расчетных показателей. -// -// Параметры: -// Видимость - Булево - Признак включения / выключения видимости панели показателей. -// См. также Синтакс-помощник: ГруппаФормы.Видимость. -// -&НаКлиенте -Процедура УстановитьВидимостьПоказателей(Видимость) - Элементы.ОбластьПоказателей.Видимость = Видимость; - Элементы.РассчитатьВсеПоказатели.Пометка = Видимость; + ОбщегоНазначенияСлужебныйКлиент.РассчитатьПоказатели(ЭтотОбъект, "ТекущаяПечатнаяФорма"); КонецПроцедуры #КонецОбласти - -#КонецОбласти - diff --git a/SSL/src/CommonForms/ПодготовкаНовогоПисьма/Form.form b/SSL/src/CommonForms/ПодготовкаНовогоПисьма/Form.form index fa110cb1a..be5f13b22 100644 --- a/SSL/src/CommonForms/ПодготовкаНовогоПисьма/Form.form +++ b/SSL/src/CommonForms/ПодготовкаНовогоПисьма/Form.form @@ -157,10 +157,6 @@ <userVisible> <common>true</common> </userVisible> - <title> - <key>ru</key> - <value>Получатели группа представление</value> - ПолучателиГруппаПредставлениеExtendedTooltip 76 @@ -230,10 +226,6 @@ true - - <key>ru</key> - <value>Получатели группа пояснение</value> - ПолучателиГруппаПояснениеExtendedTooltip 79 @@ -256,10 +248,6 @@ true - - <key>ru</key> - <value>Получатели группа</value> - ПолучателиГруппаExtendedTooltip 75 @@ -430,10 +418,6 @@ true - - <key>ru</key> - <value>Получатели контекстное меню группа управление выбором</value> - ПолучателиКонтекстноеМенюГруппаУправлениеВыборомExtendedTooltip 69 @@ -504,10 +488,6 @@ ВыбранныеФорматыСохранения 32 - - <key>ru</key> - <value>Выбранные форматы сохранения</value> - true true @@ -873,10 +853,6 @@ true - - <key>ru</key> - <value>В форматах</value> - ГруппаДополнительныеПараметрыExtendedTooltip 85 diff --git a/SSL/src/CommonForms/ПоддерживаемыеКлиентскиеПриложения/Form.form b/SSL/src/CommonForms/ПоддерживаемыеКлиентскиеПриложения/Form.form index 31bf6b406..9104f8e36 100644 --- a/SSL/src/CommonForms/ПоддерживаемыеКлиентскиеПриложения/Form.form +++ b/SSL/src/CommonForms/ПоддерживаемыеКлиентскиеПриложения/Form.form @@ -965,7 +965,6 @@ ru Linux - true true ГруппаLinuxРасширеннаяПодсказка @@ -992,7 +991,7 @@ ГруппаMacOS 80 - MacOS + ЗаголовкиMacOS 153 MacOS1СПредприятие @@ -1070,10 +1069,10 @@ <key>ru</key> - <value>Mac OS</value> + <value>macOS</value> - MacOSРасширеннаяПодсказка + ЗаголовкиMacOSРасширеннаяПодсказка 154 Label true @@ -1088,6 +1087,7 @@ Auto true true + auto Auto Auto @@ -1197,7 +1197,6 @@ ru Mac OS - true true ГруппаMacOSРасширеннаяПодсказка diff --git a/SSL/src/CommonForms/ПоискИсполняемогоФайлаОнлайнПоддержки/Form.form b/SSL/src/CommonForms/ПоискИсполняемогоФайлаОнлайнПоддержки/Form.form index dc9528285..7e107c0b7 100644 --- a/SSL/src/CommonForms/ПоискИсполняемогоФайлаОнлайнПоддержки/Form.form +++ b/SSL/src/CommonForms/ПоискИсполняемогоФайлаОнлайнПоддержки/Form.form @@ -167,10 +167,6 @@ true - - <key>ru</key> - <value>Справочная информация</value> - ГруппаСправочнаяИнформацияРасширеннаяПодсказка 161 @@ -196,10 +192,6 @@ true - - <key>ru</key> - <value>Информация</value> - ГруппаИнформацияРасширеннаяПодсказка 135 diff --git a/SSL/src/CommonForms/ПраваДоступа/Module.bsl b/SSL/src/CommonForms/ПраваДоступа/Module.bsl index af664a750..ee82c1234 100644 --- a/SSL/src/CommonForms/ПраваДоступа/Module.bsl +++ b/SSL/src/CommonForms/ПраваДоступа/Module.bsl @@ -389,16 +389,12 @@ Если НЕ РазрешеноИзменениеСоставаПользователейГруппы(ГруппаДоступа) Тогда Если Добавить Тогда ОписаниеОшибки = - НСтр("ru = 'Невозможно включить пользователя в группу доступа, - |так как текущий пользователь - |не ответственный за участников группы доступа и - |не полноправный администратор.'"); + НСтр("ru = 'Недостаточно прав для включения пользователя в группу доступа, + |(не ответственный за участников группы доступа или нет прав администратора).'"); Иначе ОписаниеОшибки = - НСтр("ru = 'Невозможно исключить пользователя из группы доступа, - |так как текущий пользователь - |не ответственный за участников группы доступа и - |не полноправный администратор.'"); + НСтр("ru = 'Недостаточно прав для исключения пользователя из группы доступа, + |(не ответственный за участников группы доступа или нет прав администратора).'"); КонецЕсли; Возврат; КонецЕсли; @@ -419,51 +415,60 @@ Если НЕ ДействияСПользователемСервиса.ИзменениеАдминистративногоДоступа Тогда ВызватьИсключение - НСтр("ru = 'Не достаточно прав доступа для изменения состава администраторов.'"); + НСтр("ru = 'Недостаточно прав доступа для изменения состава администраторов.'"); КонецЕсли; КонецЕсли; УстановитьПривилегированныйРежим(Истина); - ГруппаДоступаОбъект = ГруппаДоступа.ПолучитьОбъект(); - ЗаблокироватьДанныеДляРедактирования(ГруппаДоступаОбъект.Ссылка, ГруппаДоступаОбъект.ВерсияДанных); - Если Добавить Тогда - Если ГруппаДоступаОбъект.Пользователи.Найти(Параметры.Пользователь, "Пользователь") = Неопределено Тогда - ГруппаДоступаОбъект.Пользователи.Добавить().Пользователь = Параметры.Пользователь; - КонецЕсли; - Иначе - СтрокаТЧ = ГруппаДоступаОбъект.Пользователи.Найти(Параметры.Пользователь, "Пользователь"); - Если СтрокаТЧ <> Неопределено Тогда - ГруппаДоступаОбъект.Пользователи.Удалить(СтрокаТЧ); - КонецЕсли; - КонецЕсли; - - Если ГруппаДоступаОбъект.Ссылка = Справочники.ГруппыДоступа.Администраторы Тогда + НачатьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Справочник.ГруппыДоступа"); + ЭлементБлокировки.УстановитьЗначение("Ссылка", ГруппаДоступа); + Блокировка.Заблокировать(); - Если ОбщегоНазначения.РазделениеВключено() Тогда - ГруппаДоступаОбъект.ДополнительныеСвойства.Вставить( - "ПарольПользователяСервиса", ПарольПользователяСервиса); + ГруппаДоступаОбъект = ГруппаДоступа.ПолучитьОбъект(); + ЗаблокироватьДанныеДляРедактирования(ГруппаДоступаОбъект.Ссылка, ГруппаДоступаОбъект.ВерсияДанных); + Если Добавить Тогда + Если ГруппаДоступаОбъект.Пользователи.Найти(Параметры.Пользователь, "Пользователь") = Неопределено Тогда + ГруппаДоступаОбъект.Пользователи.Добавить().Пользователь = Параметры.Пользователь; + КонецЕсли; Иначе - УправлениеДоступомСлужебный.ПроверитьНаличиеПользователяИБВГруппеДоступаАдминистраторы( - ГруппаДоступаОбъект.Пользователи, ОписаниеОшибки); - - Если ЗначениеЗаполнено(ОписаниеОшибки) Тогда - Возврат; + СтрокаТЧ = ГруппаДоступаОбъект.Пользователи.Найти(Параметры.Пользователь, "Пользователь"); + Если СтрокаТЧ <> Неопределено Тогда + ГруппаДоступаОбъект.Пользователи.Удалить(СтрокаТЧ); КонецЕсли; КонецЕсли; - КонецЕсли; - - Попытка + + Если ГруппаДоступаОбъект.Ссылка = Справочники.ГруппыДоступа.Администраторы Тогда + + Если ОбщегоНазначения.РазделениеВключено() Тогда + ГруппаДоступаОбъект.ДополнительныеСвойства.Вставить( + "ПарольПользователяСервиса", ПарольПользователяСервиса); + Иначе + УправлениеДоступомСлужебный.ПроверитьНаличиеПользователяИБВГруппеДоступаАдминистраторы( + ГруппаДоступаОбъект.Пользователи, ОписаниеОшибки); + + Если ЗначениеЗаполнено(ОписаниеОшибки) Тогда + ОтменитьТранзакцию(); + РазблокироватьДанныеДляРедактирования(ГруппаДоступаОбъект.Ссылка); + Возврат; + КонецЕсли; + КонецЕсли; + КонецЕсли; + ГруппаДоступаОбъект.Записать(); + ЗафиксироватьТранзакцию(); Исключение + ОтменитьТранзакцию(); + РазблокироватьДанныеДляРедактирования(ГруппаДоступаОбъект.Ссылка); ПарольПользователяСервиса = Неопределено; ВызватьИсключение; КонецПопытки; РазблокироватьДанныеДляРедактирования(ГруппаДоступаОбъект.Ссылка); - ТекущаяГруппаДоступа = ГруппаДоступаОбъект.Ссылка; - УправлениеДоступомСлужебный.ЗапуститьОбновлениеДоступа(); КонецПроцедуры diff --git a/SSL/src/CommonForms/ПраваДоступаУпрощенно/Form.form b/SSL/src/CommonForms/ПраваДоступаУпрощенно/Form.form index 9e0a2fa0c..91114c2bc 100644 --- a/SSL/src/CommonForms/ПраваДоступаУпрощенно/Form.form +++ b/SSL/src/CommonForms/ПраваДоступаУпрощенно/Form.form @@ -259,49 +259,6 @@ Доступ 11 - - НадписьПрофиль - 60 - true - - true - - - Items.Профили.CurrentData.ПрофильПредставление - - None - - НадписьПрофильExtendedTooltip - 83 - Label - true - true - - Left - - - - НадписьПрофильКонтекстноеМеню - 61 - true - - LabelField - Enter - true - Left - true - - true - true - - System.DefaultGUIFont - true - false - false - false - - - ВидыДоступа 12 diff --git a/SSL/src/CommonForms/ПраваДоступаУпрощенно/Module.bsl b/SSL/src/CommonForms/ПраваДоступаУпрощенно/Module.bsl index 07dc48ab5..a19301dcb 100644 --- a/SSL/src/CommonForms/ПраваДоступаУпрощенно/Module.bsl +++ b/SSL/src/CommonForms/ПраваДоступаУпрощенно/Module.bsl @@ -74,8 +74,6 @@ ЗапретИзмененияАдминистративногоДоступа = НЕ ДействияСПользователемСервиса.ИзменениеАдминистративногоДоступа; КонецЕсли; - СтандартныеПодсистемыСервер.УстановитьОтображениеЗаголовковГрупп(ЭтотОбъект, "Доступ"); - КонецПроцедуры &НаКлиенте @@ -595,14 +593,9 @@ // Получение списка изменений. Запрос = Новый Запрос; - Запрос.УстановитьПараметр("Пользователь", Параметры.Пользователь); - - Запрос.УстановитьПараметр( - "Профили", Профили.Выгрузить(, "Профиль, Пометка")); - - Запрос.УстановитьПараметр( - "ВидыДоступа", ВидыДоступа.Выгрузить(, "ГруппаДоступа, ВидДоступа, ВсеРазрешены")); + Запрос.УстановитьПараметр("Профили", Профили.Выгрузить(, "Профиль, Пометка")); + Запрос.УстановитьПараметр("ВидыДоступа", ВидыДоступа.Выгрузить(, "ГруппаДоступа, ВидДоступа, ВсеРазрешены")); ТаблицаЗначений = ЗначенияДоступа.Выгрузить(, "ГруппаДоступа, ВидДоступа, ЗначениеДоступа"); ТаблицаЗначений.Колонки.Добавить("НомерСтроки", Новый ОписаниеТипов("Число",,, @@ -783,38 +776,44 @@ НачатьТранзакцию(); Попытка - Выборка = Запрос.Выполнить().Выбрать(); - Пока Выборка.Следующий() Цикл - - Если ЗначениеЗаполнено(Выборка.ПерсональнаяГруппаДоступа) Тогда - ЗаблокироватьДанныеДляРедактирования(Выборка.ПерсональнаяГруппаДоступа); - ГруппаДоступаОбъект = Выборка.ПерсональнаяГруппаДоступа.ПолучитьОбъект(); + ИзмененияГруппДоступа = Запрос.Выполнить().Выгрузить(); + + Блокировка = Новый БлокировкаДанных; + Для каждого Изменение Из ИзмененияГруппДоступа Цикл + ЭлементБлокировки = Блокировка.Добавить("Справочник.ГруппыДоступа"); + Если ЗначениеЗаполнено(Изменение.ПерсональнаяГруппаДоступа) Тогда + ЭлементБлокировки.УстановитьЗначение("Ссылка", Изменение.ПерсональнаяГруппаДоступа); + ЗаблокироватьДанныеДляРедактирования(Изменение.ПерсональнаяГруппаДоступа); + КонецЕсли; + КонецЦикла; + Блокировка.Заблокировать(); + + Для каждого Изменение Из ИзмененияГруппДоступа Цикл + Если ЗначениеЗаполнено(Изменение.ПерсональнаяГруппаДоступа) Тогда + ГруппаДоступаОбъект = Изменение.ПерсональнаяГруппаДоступа.ПолучитьОбъект(); ГруппаДоступаОбъект.ПометкаУдаления = Ложь; Иначе // Создание персональной группы доступа. ГруппаДоступаОбъект = Справочники.ГруппыДоступа.СоздатьЭлемент(); ГруппаДоступаОбъект.Родитель = Справочники.ГруппыДоступа.РодительПерсональныхГруппДоступа(); - ГруппаДоступаОбъект.Наименование = Выборка.ПрофильНаименование; + ГруппаДоступаОбъект.Наименование = Изменение.ПрофильНаименование; ГруппаДоступаОбъект.Пользователь = Параметры.Пользователь; - ГруппаДоступаОбъект.Профиль = Выборка.Профиль; + ГруппаДоступаОбъект.Профиль = Изменение.Профиль; КонецЕсли; - Если Выборка.Профиль = Справочники.ПрофилиГруппДоступа.Администратор Тогда + Если Изменение.Профиль = Справочники.ПрофилиГруппДоступа.Администратор Тогда Если ТребуетсяСинхронизацияССервисом Тогда ГруппаДоступаОбъект.ДополнительныеСвойства.Вставить("ПарольПользователяСервиса", ПарольПользователяСервиса); КонецЕсли; - Если Выборка.Пометка Тогда - Если ГруппаДоступаОбъект.Пользователи.Найти( - Параметры.Пользователь, "Пользователь") = Неопределено Тогда - + Если Изменение.Пометка Тогда + Если ГруппаДоступаОбъект.Пользователи.Найти(Параметры.Пользователь, "Пользователь") = Неопределено Тогда ГруппаДоступаОбъект.Пользователи.Добавить().Пользователь = Параметры.Пользователь; КонецЕсли; Иначе ОписаниеПользователя = ГруппаДоступаОбъект.Пользователи.Найти( Параметры.Пользователь, "Пользователь"); - Если ОписаниеПользователя <> Неопределено Тогда ГруппаДоступаОбъект.Пользователи.Удалить(ОписаниеПользователя); @@ -836,33 +835,34 @@ КонецЕсли; Иначе ГруппаДоступаОбъект.Пользователи.Очистить(); - Если Выборка.Пометка Тогда + Если Изменение.Пометка Тогда ГруппаДоступаОбъект.Пользователи.Добавить().Пользователь = Параметры.Пользователь; КонецЕсли; - Отбор = Новый Структура("ГруппаДоступа", Выборка.Профиль); - - ГруппаДоступаОбъект.ВидыДоступа.Загрузить( - ВидыДоступа.Выгрузить(Отбор, "ВидДоступа, ВсеРазрешены")); - - ГруппаДоступаОбъект.ЗначенияДоступа.Загрузить( - ЗначенияДоступа.Выгрузить(Отбор, "ВидДоступа, ЗначениеДоступа")); + Отбор = Новый Структура("ГруппаДоступа", Изменение.Профиль); + ГруппаДоступаОбъект.ВидыДоступа.Загрузить(ВидыДоступа.Выгрузить(Отбор, "ВидДоступа, ВсеРазрешены")); + ГруппаДоступаОбъект.ЗначенияДоступа.Загрузить(ЗначенияДоступа.Выгрузить(Отбор, "ВидДоступа, ЗначениеДоступа")); КонецЕсли; - Попытка - ГруппаДоступаОбъект.Записать(); - Исключение - ПарольПользователяСервиса = Неопределено; - ВызватьИсключение; - КонецПопытки; + ГруппаДоступаОбъект.Записать(); - Если ЗначениеЗаполнено(Выборка.ПерсональнаяГруппаДоступа) Тогда - РазблокироватьДанныеДляРедактирования(Выборка.ПерсональнаяГруппаДоступа); - КонецЕсли; КонецЦикла; + + Для каждого Изменение Из ИзмененияГруппДоступа Цикл + Если ЗначениеЗаполнено(Изменение.ПерсональнаяГруппаДоступа) Тогда + РазблокироватьДанныеДляРедактирования(Изменение.ПерсональнаяГруппаДоступа); + КонецЕсли; + КонецЦикла; + ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); + Для каждого Изменение Из ИзмененияГруппДоступа Цикл + Если ЗначениеЗаполнено(Изменение.ПерсональнаяГруппаДоступа) Тогда + РазблокироватьДанныеДляРедактирования(Изменение.ПерсональнаяГруппаДоступа); + КонецЕсли; + КонецЦикла; + ПарольПользователяСервиса = Неопределено; ВызватьИсключение; КонецПопытки; diff --git a/SSL/src/CommonForms/ПредупреждениеБезопасности/Form.form b/SSL/src/CommonForms/ПредупреждениеБезопасности/Form.form index 9a810c0bf..4e14e2455 100644 --- a/SSL/src/CommonForms/ПредупреждениеБезопасности/Form.form +++ b/SSL/src/CommonForms/ПредупреждениеБезопасности/Form.form @@ -927,7 +927,7 @@ 126 <key>ru</key> - <value>Отключение данной настройки позволяет загружать потенциально опасные файлы в базу. + <value>Отключение данной настройки позволяет загружать потенциально опасные файлы в программу. При добавлении таких файлов следует обращать особое внимание на источник, из которого он был получен, и не загружать файлы, в которых вы не уверены. @@ -956,7 +956,6 @@ </contextMenu> <formatted>true</formatted> <type>Label</type> - <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> <horizontalStretch>false</horizontalStretch> <extInfo xsi:type="form:LabelDecorationExtInfo"> @@ -1072,7 +1071,7 @@ <name>ПередОткрытиемФайла</name> <id>137</id> <items xsi:type="form:Decoration"> - <name>ПредупрежденииПриОткрытииФайла</name> + <name>ПредупреждениеПриОткрытииФайла</name> <id>139</id> <title> <key>ru</key> @@ -1084,7 +1083,7 @@ <common>true</common> </userVisible> <extendedTooltip> - <name>ПредупрежденииПриОткрытииФайлаРасширеннаяПодсказка</name> + <name>ПредупреждениеПриОткрытииФайлаРасширеннаяПодсказка</name> <id>141</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> @@ -1094,7 +1093,7 @@ </extInfo> </extendedTooltip> <contextMenu> - <name>ПредупрежденииПриОткрытииФайлаКонтекстноеМеню</name> + <name>ПредупреждениеПриОткрытииФайлаКонтекстноеМеню</name> <id>140</id> <autoFill>true</autoFill> </contextMenu> @@ -1106,7 +1105,7 @@ </extInfo> </items> <items xsi:type="form:Decoration"> - <name>ПредупрежденииПриОткрытииФайлаПояснение</name> + <name>ПредупреждениеПриОткрытииФайлаПояснение</name> <id>142</id> <title> <key>ru</key> @@ -1122,7 +1121,7 @@ <common>true</common> </userVisible> <extendedTooltip> - <name>ПредупрежденииПриОткрытииФайлаПояснениеРасширеннаяПодсказка</name> + <name>ПредупреждениеПриОткрытииФайлаПояснениеРасширеннаяПодсказка</name> <id>144</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> @@ -1132,13 +1131,12 @@ </extInfo> </extendedTooltip> <contextMenu> - <name>ПредупрежденииПриОткрытииФайлаПояснениеКонтекстноеМеню</name> + <name>ПредупреждениеПриОткрытииФайлаПояснениеКонтекстноеМеню</name> <id>143</id> <autoFill>true</autoFill> </contextMenu> <formatted>true</formatted> <type>Label</type> - <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> <horizontalStretch>false</horizontalStretch> <extInfo xsi:type="form:LabelDecorationExtInfo"> @@ -1254,7 +1252,7 @@ <name>ПередДобавлениемВнешнейКомпоненты</name> <id>166</id> <items xsi:type="form:Decoration"> - <name>ПредупрежденииПриДобавленииВнешнейКомпоненты</name> + <name>ПредупреждениеПриДобавленииВнешнейКомпоненты</name> <id>168</id> <title> <key>ru</key> @@ -1272,7 +1270,7 @@ <common>true</common> </userVisible> <extendedTooltip> - <name>ПредупрежденииПриДобавленииВнешнейКомпонентыРасширеннаяПодсказка</name> + <name>ПредупреждениеПриДобавленииВнешнейКомпонентыРасширеннаяПодсказка</name> <id>170</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> @@ -1282,7 +1280,7 @@ </extInfo> </extendedTooltip> <contextMenu> - <name>ПредупрежденииПриДобавленииВнешнейКомпонентыКонтекстноеМеню</name> + <name>ПредупреждениеПриДобавленииВнешнейКомпонентыКонтекстноеМеню</name> <id>169</id> <autoFill>true</autoFill> </contextMenu> @@ -1403,7 +1401,7 @@ <name>ПередУдалениемРасширенияБезДанных</name> <id>211</id> <items xsi:type="form:Decoration"> - <name>ПредупрежденииПередУдалениемРасширенияБезДанных</name> + <name>ПредупреждениеПередУдалениемРасширенияБезДанных</name> <id>213</id> <title> <key>ru</key> @@ -1424,7 +1422,7 @@ </toolTip> <toolTipRepresentation>ShowBottom</toolTipRepresentation> <extendedTooltip> - <name>ПредупрежденииПередУдалениемРасширенияБезДанныхРасширеннаяПодсказка</name> + <name>ПредупреждениеПередУдалениемРасширенияБезДанныхРасширеннаяПодсказка</name> <id>215</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> @@ -1434,7 +1432,7 @@ </extInfo> </extendedTooltip> <contextMenu> - <name>ПредупрежденииПередУдалениемРасширенияБезДанныхКонтекстноеМеню</name> + <name>ПредупреждениеПередУдалениемРасширенияБезДанныхКонтекстноеМеню</name> <id>214</id> <autoFill>true</autoFill> </contextMenu> @@ -1558,7 +1556,7 @@ <name>ПередУдалениемРасширенияСДанными</name> <id>179</id> <items xsi:type="form:Decoration"> - <name>ПредупрежденииПередУдалениемРасширения</name> + <name>ПредупреждениеПередУдалениемРасширения</name> <id>228</id> <title> <key>ru</key> @@ -1577,7 +1575,7 @@ </toolTip> <toolTipRepresentation>ShowBottom</toolTipRepresentation> <extendedTooltip> - <name>ПредупрежденииПередУдалениемРасширенияРасширеннаяПодсказка</name> + <name>ПредупреждениеПередУдалениемРасширенияРасширеннаяПодсказка</name> <id>230</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> @@ -1587,7 +1585,7 @@ </extInfo> </extendedTooltip> <contextMenu> - <name>ПредупрежденииПередУдалениемРасширенияКонтекстноеМеню</name> + <name>ПредупреждениеПередУдалениемРасширенияКонтекстноеМеню</name> <id>229</id> <autoFill>true</autoFill> </contextMenu> @@ -1599,7 +1597,7 @@ </extInfo> </items> <items xsi:type="form:Decoration"> - <name>ПредупрежденииПередУдалениемРасширенияРезервноеКопирование</name> + <name>ПредупреждениеПередУдалениемРасширенияРезервноеКопирование</name> <id>205</id> <title> <key>ru</key> @@ -1612,7 +1610,7 @@ <common>true</common> </userVisible> <extendedTooltip> - <name>ПредупрежденииПередУдалениемРасширенияРезервноеКопированиеРасширеннаяПодсказка</name> + <name>ПредупреждениеПередУдалениемРасширенияРезервноеКопированиеРасширеннаяПодсказка</name> <id>207</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> @@ -1622,7 +1620,7 @@ </extInfo> </extendedTooltip> <contextMenu> - <name>ПредупрежденииПередУдалениемРасширенияРезервноеКопированиеКонтекстноеМеню</name> + <name>ПредупреждениеПередУдалениемРасширенияРезервноеКопированиеКонтекстноеМеню</name> <id>206</id> <autoFill>true</autoFill> </contextMenu> @@ -1632,13 +1630,13 @@ <extInfo xsi:type="form:LabelDecorationExtInfo"> <handlers> <event>URLProcessing</event> - <name>ПредупрежденииПередУдалениемРасширенияРезервноеКопированиеОбработкаНавигационнойСсылки</name> + <name>ПредупреждениеПередУдалениемРасширенияРезервноеКопированиеОбработкаНавигационнойСсылки</name> </handlers> <horizontalAlign>Left</horizontalAlign> </extInfo> </items> <items xsi:type="form:Decoration"> - <name>ПредупрежденииПередУдалениемРасширенияТекстУдалить</name> + <name>ПредупреждениеПередУдалениемРасширенияТекстУдалить</name> <id>208</id> <title> <key>ru</key> @@ -1651,7 +1649,7 @@ <common>true</common> </userVisible> <extendedTooltip> - <name>ПредупрежденииПередУдалениемРасширенияТекстУдалитьРасширеннаяПодсказка</name> + <name>ПредупреждениеПередУдалениемРасширенияТекстУдалитьРасширеннаяПодсказка</name> <id>210</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> @@ -1661,7 +1659,7 @@ </extInfo> </extendedTooltip> <contextMenu> - <name>ПредупрежденииПередУдалениемРасширенияТекстУдалитьКонтекстноеМеню</name> + <name>ПредупреждениеПередУдалениемРасширенияТекстУдалитьКонтекстноеМеню</name> <id>209</id> <autoFill>true</autoFill> </contextMenu> @@ -1786,7 +1784,7 @@ <name>ПередОтключениемРасширенияСДанными</name> <id>192</id> <items xsi:type="form:Decoration"> - <name>ПредупрежденииПередОтключениемРасширения</name> + <name>ПредупреждениеПередОтключениемРасширения</name> <id>194</id> <title> <key>ru</key> @@ -1806,7 +1804,7 @@ </toolTip> <toolTipRepresentation>ShowBottom</toolTipRepresentation> <extendedTooltip> - <name>ПредупрежденииПередОтключениемРасширенияРасширеннаяПодсказка</name> + <name>ПредупреждениеПередОтключениемРасширенияРасширеннаяПодсказка</name> <id>196</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> @@ -1816,7 +1814,7 @@ </extInfo> </extendedTooltip> <contextMenu> - <name>ПредупрежденииПередОтключениемРасширенияКонтекстноеМеню</name> + <name>ПредупреждениеПередОтключениемРасширенияКонтекстноеМеню</name> <id>195</id> <autoFill>true</autoFill> </contextMenu> @@ -1828,7 +1826,7 @@ </extInfo> </items> <items xsi:type="form:Decoration"> - <name>ПредупрежденииПередОтключениемРасширенияТекстОтключить</name> + <name>ПредупреждениеПередОтключениемРасширенияТекстОтключить</name> <id>231</id> <title> <key>ru</key> @@ -1840,7 +1838,7 @@ <common>true</common> </userVisible> <extendedTooltip> - <name>ПредупрежденииПередОтключениемРасширенияТекстОтключитьРасширеннаяПодсказка</name> + <name>ПредупреждениеПередОтключениемРасширенияТекстОтключитьРасширеннаяПодсказка</name> <id>233</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> @@ -1850,7 +1848,7 @@ </extInfo> </extendedTooltip> <contextMenu> - <name>ПредупрежденииПередОтключениемРасширенияТекстОтключитьКонтекстноеМеню</name> + <name>ПредупреждениеПередОтключениемРасширенияТекстОтключитьКонтекстноеМеню</name> <id>232</id> <autoFill>true</autoFill> </contextMenu> diff --git a/SSL/src/CommonForms/ПредупреждениеБезопасности/Module.bsl b/SSL/src/CommonForms/ПредупреждениеБезопасности/Module.bsl index 4b55d38e5..20bcc5b02 100644 --- a/SSL/src/CommonForms/ПредупреждениеБезопасности/Module.bsl +++ b/SSL/src/CommonForms/ПредупреждениеБезопасности/Module.bsl @@ -32,36 +32,25 @@ КлючСохраненияПоложенияОкна = Параметры.Ключ; Если Не ПустаяСтрока(Параметры.ИмяФайла) Тогда - Элементы.ПредупрежденииПриОткрытииФайла.Заголовок = + Элементы.ПредупреждениеПриОткрытииФайла.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - Элементы.ПредупрежденииПриОткрытииФайла.Заголовок, Параметры.ИмяФайла); + Элементы.ПредупреждениеПриОткрытииФайла.Заголовок, Параметры.ИмяФайла); КонецЕсли; Если ОбщегоНазначения.РазделениеВключено() Тогда - Элементы.ПредупрежденииПередУдалениемРасширенияРезервноеКопирование.Видимость = Ложь; - Иначе - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РезервноеКопированиеИБ") Тогда - - МодульРезервноеКопированиеИБСервер = ОбщегоНазначения.ОбщийМодуль("РезервноеКопированиеИБСервер"); - - РезервноеКопирование = Новый Массив; - РезервноеКопирование.Добавить(НСтр("ru = 'Перед удалением расширения рекомендуется'")); - РезервноеКопирование.Добавить(Символы.ПС); - РезервноеКопирование.Добавить(Новый ФорматированнаяСтрока( - НСтр("ru = 'выполнить резервное копирование информационной базы'"),,,, - МодульРезервноеКопированиеИБСервер.НавигационнаяСсылкаОбработкиРезервногоКопирования())); - РезервноеКопирование.Добавить("."); - - Элементы.ПредупрежденииПередУдалениемРасширенияРезервноеКопирование.Заголовок = - Новый ФорматированнаяСтрока(РезервноеКопирование); - - КонецЕсли; + Элементы.ПредупреждениеПередУдалениемРасширенияРезервноеКопирование.Видимость = Ложь; + ИначеЕсли ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РезервноеКопированиеИБ") Тогда + МодульРезервноеКопированиеИБСервер = ОбщегоНазначения.ОбщийМодуль("РезервноеКопированиеИБСервер"); + Элементы.ПредупреждениеПередУдалениемРасширенияРезервноеКопирование.Заголовок = + СтроковыеФункции.ФорматированнаяСтрока(НСтр("ru = 'Перед удалением расширения рекомендуется + |<a href=""%1"">выполнить резервное копирование информационной базы</a>.'"), + МодульРезервноеКопированиеИБСервер.НавигационнаяСсылкаОбработкиРезервногоКопирования()); КонецЕсли; Если Параметры.МножественныйВыбор Тогда - Элементы.ПредупрежденииПередУдалениемРасширенияТекстУдалить.Заголовок = НСтр("ru = 'Удалить выделенные расширения?'"); + Элементы.ПредупреждениеПередУдалениемРасширенияТекстУдалить.Заголовок = НСтр("ru = 'Удалить выделенные расширения?'"); Иначе - Элементы.ПредупрежденииПередУдалениемРасширенияТекстУдалить.Заголовок = НСтр("ru = 'Удалить расширение?'"); + Элементы.ПредупреждениеПередУдалениемРасширенияТекстУдалить.Заголовок = НСтр("ru = 'Удалить расширение?'"); КонецЕсли; Если ТекущаяСтраница = Элементы.ПередУдалениемРасширенияСДанными @@ -77,7 +66,7 @@ #Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте -Процедура ПредупрежденииПередУдалениемРасширенияРезервноеКопированиеОбработкаНавигационнойСсылки(Элемент, +Процедура ПредупреждениеПередУдалениемРасширенияРезервноеКопированиеОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка) Закрыть(КодВозвратаДиалога.Отмена); diff --git a/SSL/src/CommonForms/ПредупрежденияПриЗавершенииРаботы/Form.form b/SSL/src/CommonForms/ПредупрежденияПриЗавершенииРаботы/Form.form index ce487ae3b..10b1d358d 100644 --- a/SSL/src/CommonForms/ПредупрежденияПриЗавершенииРаботы/Form.form +++ b/SSL/src/CommonForms/ПредупрежденияПриЗавершенииРаботы/Form.form @@ -81,10 +81,6 @@ <userVisible> <common>true</common> </userVisible> - <title> - <key>ru</key> - <value>Верхняя группа</value> - ВерхняяГруппаExtendedTooltip 33 diff --git a/SSL/src/CommonForms/ПредупрежденияПриЗавершенииРаботы/Module.bsl b/SSL/src/CommonForms/ПредупрежденияПриЗавершенииРаботы/Module.bsl index 426bc6d4e..42e67e0cf 100644 --- a/SSL/src/CommonForms/ПредупрежденияПриЗавершенииРаботы/Module.bsl +++ b/SSL/src/CommonForms/ПредупрежденияПриЗавершенииРаботы/Module.bsl @@ -19,7 +19,6 @@ КлючСохраненияПоложенияОкна = "ПредупрежденияПриЗавершенииРаботы" + ОбщегоНазначения.КонтрольнаяСуммаСтрокой(Ключ); ИнициализироватьЭлементыВФорме(Параметры.Предупреждения); - СтандартныеПодсистемыСервер.УстановитьОтображениеЗаголовковГрупп(ЭтотОбъект); КонецПроцедуры diff --git a/SSL/src/CommonForms/Расширения/Module.bsl b/SSL/src/CommonForms/Расширения/Module.bsl index 9c774bce1..72ad8d619 100644 --- a/SSL/src/CommonForms/Расширения/Module.bsl +++ b/SSL/src/CommonForms/Расширения/Module.bsl @@ -47,7 +47,7 @@ Элементы.СписокРасширенийКонтекстноеМенюСохранитьКак.Видимость = Ложь; КонецЕсли; - Элементы.СписокРасширенийОбщее.Видимость = ОбщегоНазначения.РазделениеВключено(); + Элементы.СписокРасширенийОбщее.Видимость = ОбщегоНазначения.РазделениеВключено() И ПравоДоступа("Администрирование", Метаданные); Элементы.СписокРасширенийПолученоИзГлавногоУзлаРИБ.Видимость = ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ(); Элементы.СписокРасширенийПередаватьВПодчиненныеУзлыРИБ.Видимость = СтандартныеПодсистемыПовтИсп.ИспользуетсяРИБ(); @@ -179,15 +179,20 @@ &НаКлиенте Процедура СохранитьКак(Команда) - ТекущееРасширение = Элементы.СписокРасширений.ТекущиеДанные; + ВыделенныеСтроки = Элементы.СписокРасширений.ВыделенныеСтроки; + ОписаниеОповещения = Новый ОписаниеОповещения("СохранитьКакЗавершение", ЭтотОбъект, ВыделенныеСтроки); - Если ТекущееРасширение = Неопределено Тогда + Если ВыделенныеСтроки.Количество() = 0 Тогда + Возврат; + ИначеЕсли ВыделенныеСтроки.Количество() = 1 Тогда + СохраняемыеФайлы = СохранитьНаСервере(ВыделенныеСтроки); + Иначе + Заголовок = НСтр("ru = 'Выберите каталог для сохранения расширений конфигурации'"); + ФайловаяСистемаКлиент.ВыбратьКаталог(ОписаниеОповещения, Заголовок); Возврат; КонецЕсли; - Адрес = СохранитьНаСервере(ТекущееРасширение.ИдентификаторРасширения); - - Если Адрес = Неопределено Тогда + Если СохраняемыеФайлы.Количество() = 0 Тогда Возврат; КонецЕсли; @@ -195,8 +200,7 @@ ПараметрыСохранения.Диалог.Заголовок = НСтр("ru = 'Выберите файл для сохранения расширения конфигурации'"); ПараметрыСохранения.Диалог.Фильтр = НСтр("ru = 'Файлы расширений конфигурации (*.cfe)|*.cfe|Все файлы (*.*)|*.*'"); - ФайловаяСистемаКлиент.СохранитьФайл(Неопределено, Адрес, - ТекущееРасширение.Имя + "_" + ТекущееРасширение.Версия + ".cfe", ПараметрыСохранения); + ФайловаяСистемаКлиент.СохранитьФайлы(Неопределено, СохраняемыеФайлы, ПараметрыСохранения); КонецПроцедуры @@ -209,7 +213,7 @@ Возврат; КонецЕсли; - ЗагрузитьРасширение(ТекущееРасширение.ИдентификаторРасширения); + ЗагрузитьРасширение(Элементы.СписокРасширений.ВыделенныеСтроки); КонецПроцедуры @@ -277,28 +281,24 @@ ОтключенныеРасширения = ИдентификаторыРасширений(ИсточникРасширенийКонфигурации.СеансОтключенные); УстановитьПривилегированныйРежим(Ложь); + МодульОбновлениеКонфигурации = Неопределено; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбновлениеКонфигурации") Тогда - МодульОбновлениеКонфигурации = ОбщегоНазначения.ОбщийМодуль("ОбновлениеКонфигурации"); - - ИсключаемыеРасширения = Новый Массив; - - Для Каждого Расширение Из Расширения Цикл - Если МодульОбновлениеКонфигурации.ЭтоИсправление(Расширение) Тогда - ИсключаемыеРасширения.Добавить(Расширение); - КонецЕсли; - КонецЦикла; - - Для Каждого ИсключаемоеРасширение Из ИсключаемыеРасширения Цикл - Индекс = Расширения.Найти(ИсключаемоеРасширение); - Если Индекс <> Неопределено Тогда - Расширения.Удалить(Индекс); - КонецЕсли; - КонецЦикла; - КонецЕсли; + НеВыводитьОбщиеРасширения = ОбщегоНазначения.РазделениеВключено() И Не ПравоДоступа("Администрирование", Метаданные); + НомерПоПорядку = 1; Для Каждого Расширение Из Расширения Цикл + + Если НеВыводитьОбщиеРасширения + И (Расширение.ОбластьДействия = ОбластьДействияРасширенияКонфигурации.ИнформационнаяБаза) Тогда + Продолжить; + КонецЕсли; + + Если МодульОбновлениеКонфигурации <> Неопределено И МодульОбновлениеКонфигурации.ЭтоИсправление(Расширение) Тогда + Продолжить; + КонецЕсли; + ЭлементРасширения = СписокРасширений.Добавить(); ЭлементРасширения.ИдентификаторРасширения = Расширение.УникальныйИдентификатор; ЭлементРасширения.Имя = Расширение.Имя; @@ -310,7 +310,7 @@ ЭлементРасширения.Подключать = Расширение.Активно; ЭлементРасширения.ПолученоИзГлавногоУзлаРИБ = Расширение.ГлавныйУзел <> Неопределено; ЭлементРасширения.ПередаватьВПодчиненныеУзлыРИБ = Расширение.ИспользуетсяВРаспределеннойИнформационнойБазе; - ЭлементРасширения.НомерПоПорядку = Расширения.Найти(Расширение) + 1; + ЭлементРасширения.НомерПоПорядку = НомерПоПорядку; ЭлементРасширения.Общее = (Расширение.ОбластьДействия = ОбластьДействияРасширенияКонфигурации.ИнформационнаяБаза); @@ -339,6 +339,7 @@ Иначе ЭлементРасширения.БезопасныйРежимФлаг = Истина; КонецЕсли; + НомерПоПорядку = НомерПоПорядку + 1; КонецЦикла; СписокРасширений.Сортировать("ПолученоИзГлавногоУзлаРИБ УБЫВ, ПриоритетНазначения, Общее УБЫВ, НомерПоПорядку"); @@ -378,16 +379,45 @@ КонецФункции -&НаСервере -Функция СохранитьНаСервере(ИдентификаторРасширения) +&НаКлиенте +Процедура СохранитьКакЗавершение(ПутьККаталогу, ВыделенныеСтроки) Экспорт - Расширение = НайтиРасширение(ИдентификаторРасширения); + СохраняемыеФайлы = СохранитьНаСервере(ВыделенныеСтроки, ПутьККаталогу); - Если Расширение <> Неопределено Тогда - Возврат ПоместитьВоВременноеХранилище(Расширение.ПолучитьДанные(), ЭтотОбъект.УникальныйИдентификатор); + Если СохраняемыеФайлы.Количество() = 0 Тогда + Возврат; КонецЕсли; - Возврат Неопределено; + ПараметрыСохранения = ФайловаяСистемаКлиент.ПараметрыСохраненияФайла(); + ПараметрыСохранения.Интерактивно = Ложь; + + ФайловаяСистемаКлиент.СохранитьФайлы(Неопределено, СохраняемыеФайлы, ПараметрыСохранения); + +КонецПроцедуры + +&НаСервере +Функция СохранитьНаСервере(ИдентификаторыСтрок, ПутьККаталогу = "") + + СохраняемыеФайлы = Новый Массив; + Для Каждого ИдентификаторСтроки Из ИдентификаторыСтрок Цикл + СтрокаСписка = СписокРасширений.НайтиПоИдентификатору(ИдентификаторСтроки); + ИдентификаторРасширения = СтрокаСписка.ИдентификаторРасширения; + Расширение = НайтиРасширение(ИдентификаторРасширения); + + Если Расширение <> Неопределено Тогда + Если ЗначениеЗаполнено(ПутьККаталогу) Тогда + Префикс = ПутьККаталогу + ПолучитьРазделительПути(); + Иначе + Префикс = ""; + КонецЕсли; + Имя = Префикс + Расширение.Имя + "_" + Расширение.Версия + ".cfe"; + Хранение = ПоместитьВоВременноеХранилище(Расширение.ПолучитьДанные(), ЭтотОбъект.УникальныйИдентификатор); + ОписаниеПередаваемогоФайла = Новый ОписаниеПередаваемогоФайла(Имя, Хранение); + СохраняемыеФайлы.Добавить(ОписаниеПередаваемогоФайла); + КонецЕсли; + КонецЦикла; + + Возврат СохраняемыеФайлы; КонецФункции @@ -519,6 +549,7 @@ Справочники.ВерсииРасширений.УдалитьРасширения(ИдентификаторыРасширений, ТекстОшибки); Если ЗначениеЗаполнено(ТекстОшибки) Тогда + ОбновитьСписок(); ВызватьИсключение ТекстОшибки; КонецЕсли; @@ -575,6 +606,7 @@ Контекст = Новый Структура; Контекст.Вставить("ИдентификаторРасширения", ИдентификаторРасширения); Контекст.Вставить("МножественныйВыбор", МножественныйВыбор); + Контекст.Вставить("ВыделенныеСтроки", ИдентификаторРасширения); Оповещение = Новый ОписаниеОповещения("ЗагрузитьРасширениеПослеПодтверждения", ЭтотОбъект, Контекст); ПараметрыФормы = Новый Структура("Ключ", "ПередДобавлениемРасширений"); @@ -716,7 +748,7 @@ РасширенияИзменены = Ложь; Попытка ИзменитьРасширенияНаСервере(Контекст.ПомещенныеФайлы, - Контекст.ИдентификаторРасширения, НеподключенныеРасширения, РасширенияИзменены); + Контекст.ВыделенныеСтроки, НеподключенныеРасширения, РасширенияИзменены); Исключение ИнформацияОбОшибке = ИнформацияОбОшибке(); ПодключитьОбработчикОжидания("СкрытьДлительнуюОперацию", 0.1, Истина); @@ -759,56 +791,72 @@ КонецПроцедуры &НаСервере -Процедура ИзменитьРасширенияНаСервере(ПомещенныеФайлы, ИдентификаторРасширения, НеподключенныеРасширения, РасширенияИзменены) +Процедура ИзменитьРасширенияНаСервере(ПомещенныеФайлы, ИдентификаторыСтрок, НеподключенныеРасширения, РасширенияИзменены) Расширение = Неопределено; - Если ИдентификаторРасширения <> Неопределено Тогда - Расширение = НайтиРасширение(ИдентификаторРасширения); - Если Расширение = Неопределено Тогда - Возврат; - КонецЕсли; - ПрежнееИмяРасширения = Расширение.Имя; - ДанныеРасширения = Расширение.ПолучитьДанные(); + ВыделенныеРасширения = Новый Структура; + Если ИдентификаторыСтрок <> Неопределено Тогда + Для Каждого ПомещенныйФайл Из ПомещенныеФайлы Цикл + ДвоичныеДанные = ПолучитьИзВременногоХранилища(ПомещенныйФайл.Хранение); + ОписаниеРасширения = Новый ОписаниеКонфигурации(ДвоичныеДанные); + ВыделенныеРасширения.Вставить(ОписаниеРасширения.Имя, ДвоичныеДанные); + КонецЦикла; КонецЕсли; ПроверяемыеРасширения = Новый Соответствие; ДобавленныеРасширения = Новый Массив; + ИсходныеРасширения = Новый Соответствие; ТекстОшибки = ""; - НовыеДвоичныеДанныеЗаписаны = Ложь; ИмяФайлаДобавляемогоРасширения = Неопределено; Попытка - Если ИдентификаторРасширения <> Неопределено Тогда - ОтключитьПредупрежденияБезопасности(Расширение); - ОтключитьИспользованиеОсновныхРолейДляВсехПользователей(Расширение); - НовыеДвоичныеДанные = ПолучитьИзВременногоХранилища(ПомещенныеФайлы[0].Хранение); - Ошибки = Расширение.ПроверитьВозможностьПрименения(НовыеДвоичныеДанные, Ложь); - Для Каждого Ошибка Из Ошибки Цикл - Если Ошибка.Важность <> ВажностьПроблемыПримененияРасширенияКонфигурации.Критичная Тогда + Если ИдентификаторыСтрок <> Неопределено Тогда + Для Каждого ИдентификаторСтроки Из ИдентификаторыСтрок Цикл + СтрокаТаблицы = СписокРасширений.НайтиПоИдентификатору(ИдентификаторСтроки); + ИдентификаторРасширения = СтрокаТаблицы.ИдентификаторРасширения; + Расширение = НайтиРасширение(ИдентификаторРасширения); + Если Расширение = Неопределено Тогда Продолжить; КонецЕсли; - ТекстОшибки = ТекстОшибки + Символы.ПС + Ошибка.Описание; - КонецЦикла; - Если ЗначениеЗаполнено(ТекстОшибки) Тогда - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Новое расширение не может быть применено по причине: - |%1'"), - ТекстОшибки); - Иначе - ОписаниеРасширения = Новый ОписаниеКонфигурации(НовыеДвоичныеДанные); - Если ПрежнееИмяРасширения = ОписаниеРасширения.Имя Тогда + + ПрежнееИмяРасширения = Расширение.Имя; + Если Не ВыделенныеРасширения.Свойство(ПрежнееИмяРасширения) Тогда + Если ИдентификаторыСтрок.Количество() = 1 Тогда + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Нельзя заменить расширение ""%1"" на ""%2"".'"), + ПрежнееИмяРасширения, + ОписаниеРасширения.Имя); + КонецЕсли; + Продолжить; + КонецЕсли; + + ДанныеРасширения = Расширение.ПолучитьДанные(); + ИсходныеРасширения.Вставить(ПрежнееИмяРасширения, ДанныеРасширения); + + ОтключитьПредупрежденияБезопасности(Расширение); + ОтключитьИспользованиеОсновныхРолейДляВсехПользователей(Расширение); + НовыеДвоичныеДанные = ВыделенныеРасширения[ПрежнееИмяРасширения]; + Ошибки = Расширение.ПроверитьВозможностьПрименения(НовыеДвоичныеДанные, Ложь); + Для Каждого Ошибка Из Ошибки Цикл + Если Ошибка.Важность <> ВажностьПроблемыПримененияРасширенияКонфигурации.Критичная Тогда + Продолжить; + КонецЕсли; + ТекстОшибки = ТекстОшибки + Символы.ПС + Ошибка.Описание; + КонецЦикла; + + Если ЗначениеЗаполнено(ТекстОшибки) Тогда + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Новое расширение не может быть применено по причине: + |%1'"), + ТекстОшибки); + Прервать; + Иначе Расширение.Записать(НовыеДвоичныеДанные); - НовыеДвоичныеДанныеЗаписаны = Истина; Расширение = НайтиРасширение(ИдентификаторРасширения); ПроверяемыеРасширения.Вставить(Расширение.Имя, Расширение.Синоним); - Иначе - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Нельзя заменить расширение ""%1"" на ""%2"".'"), - ПрежнееИмяРасширения, - ОписаниеРасширения.Имя); КонецЕсли; - КонецЕсли; + КонецЦикла; Иначе ОписаниеНовыхРасширений = Новый СписокЗначений; Для Каждого ПомещенныйФайл Из ПомещенныеФайлы Цикл @@ -844,7 +892,7 @@ КонецЕсли; Исключение ИнформацияОбОшибке = ИнформацияОбОшибке(); - Если ИдентификаторРасширения <> Неопределено Тогда + Если ИдентификаторыСтрок <> Неопределено Тогда ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Не удалось обновить расширение по причине: | @@ -884,8 +932,9 @@ ИнформацияОбОшибкеВосстановления = Неопределено; ВосстановлениеВыполнялось = Ложь; Попытка - Если ИдентификаторРасширения <> Неопределено Тогда - Если НовыеДвоичныеДанныеЗаписаны Тогда + Если ИдентификаторыСтрок <> Неопределено Тогда + Для Каждого ПроверяемоеРасширение Из ПроверяемыеРасширения Цикл + ДанныеРасширения = ИсходныеРасширения[ПроверяемоеРасширение.Ключ]; Расширение = НайтиРасширение(ИдентификаторРасширения); Если Расширение = Неопределено Тогда Расширение = РасширенияКонфигурации.Создать(); @@ -893,7 +942,7 @@ ОтключитьПредупрежденияБезопасности(Расширение); ОтключитьИспользованиеОсновныхРолейДляВсехПользователей(Расширение); Расширение.Записать(ДанныеРасширения); - КонецЕсли; + КонецЦикла; ВосстановлениеВыполнялось = Истина; Иначе Для Каждого ДобавленноеРасширение Из ДобавленныеРасширения Цикл @@ -909,7 +958,7 @@ КонецЕсли; Исключение ИнформацияОбОшибкеВосстановления = ИнформацияОбОшибке(); - Если ИдентификаторРасширения <> Неопределено Тогда + Если ИдентификаторыСтрок <> Неопределено Тогда ТекстОшибки = ТекстОшибки + Символы.ПС + Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'При попытке восстановить измененное расширение произошла еще одна ошибка: @@ -924,8 +973,8 @@ Если ВосстановлениеВыполнялось И ИнформацияОбОшибкеВосстановления = Неопределено Тогда - Если ИдентификаторРасширения <> Неопределено Тогда - Если НовыеДвоичныеДанныеЗаписаны Тогда + Если ИдентификаторыСтрок <> Неопределено Тогда + Если ПроверяемыеРасширения.Количество() > 0 Тогда ТекстОшибки = ТекстОшибки + Символы.ПС + Символы.ПС + НСтр("ru = 'Измененное расширение было восстановлено.'"); Иначе @@ -1063,8 +1112,6 @@ СтрокаСписка.ПередаватьВПодчиненныеУзлыРИБ = Не СтрокаСписка.ПередаватьВПодчиненныеУзлыРИБ; ВызватьИсключение; КонецПопытки; - - СтрокаСписка.ПередаватьВПодчиненныеУзлыРИБ = СтрокаСписка.ПередаватьВПодчиненныеУзлыРИБ; КонецЕсли; КонецЕсли; @@ -1280,13 +1327,11 @@ Элементы.СписокРасширенийДобавить.Доступность = Истина; Элементы.СписокРасширенийУдалить.Доступность = РедактированиеДоступно; - Элементы.СписокРасширенийОбновитьИзФайла.Доступность = ВыбранаОднаСтрока И РедактированиеДоступно; - Элементы.СписокРасширенийСохранитьКак.Доступность = ВыбранаОднаСтрока; + Элементы.СписокРасширенийОбновитьИзФайла.Доступность = РедактированиеДоступно; Элементы.СписокРасширенийКонтекстноеМенюДобавить.Доступность = Истина; Элементы.СписокРасширенийКонтекстноеМенюУдалить.Доступность = РедактированиеДоступно; Элементы.СписокРасширенийКонтекстноеМенюОбновитьИзФайла.Доступность = ВыбранаОднаСтрока И РедактированиеДоступно; - Элементы.СписокРасширенийКонтекстноеМенюСохранитьКак.Доступность = ВыбранаОднаСтрока; КонецЕсли; diff --git a/SSL/src/CommonForms/РегиональныеНастройки/Form.form b/SSL/src/CommonForms/РегиональныеНастройки/Form.form new file mode 100644 index 000000000..9e53988e4 --- /dev/null +++ b/SSL/src/CommonForms/РегиональныеНастройки/Form.form @@ -0,0 +1,1018 @@ + + + + Страницы + 35 + + РегиональныеНастройки + 1 + + ГруппаЧасовойПоясПрограммы + 3 + + ЧасовойПоясПрограммы + 5 + true + true + + true + + + ЧасовойПоясПрограммы + + + ЧасовойПоясПрограммыExtendedTooltip + 7 + Label + true + true + + Left + + + + ЧасовойПоясПрограммыКонтекстноеМеню + 6 + true + + InputField + Enter + true + Left + true + + true + true + false + true + true + true + true + OnValueChange + Normal + + + + ВремяТекущегоСеанса + 8 + true + true + + true + + + ВремяТекущегоСеансаРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + Hyperlink + CommonCommand.ВремяТекущегоСеанса + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + ShowBottom + + ГруппаЧасовойПоясПрограммыExtendedTooltip + 4 + + <key>ru</key> + <value>Часовой пояс, в котором ведется учет в программе. Даты всех документов и других данных вводятся и хранятся в этом часовом поясе. </value> + + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + true + Auto + Auto + + + + ГруппаОсновнойЯзык + 10 + + ОсновнойЯзык + 12 + true + true + + true + + + ОсновнойЯзык + + + OnChange + ОсновнойЯзыкПриИзменении + + + ОсновнойЯзыкРасширеннаяПодсказка + 14 + Label + true + true + + Left + + + + ОсновнойЯзыкКонтекстноеМеню + 13 + true + + InputField + Enter + true + Left + true + + + StartChoice + ОсновнойЯзыкНачалоВыбора + + true + true + true + true + true + true + Normal + + + true + true + + true + + + ru + На выбранном языке ведется учет в программе, а также создаются автогенерируемые данные (предопределенные элементы, классификаторы, комментарии к проводкам, события журнала регистрации и т.п.). + + ShowBottom + + ГруппаОсновнойЯзыкРасширеннаяПодсказка + 11 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + true + Auto + Auto + + + + ГруппаДополнительныеЯзыки + 15 + + ГруппаДополнительныйЯзык1 + 17 + + ИспользоватьДополнительныйЯзык1 + 19 + true + true + + true + + + ИспользоватьДополнительныйЯзык1 + + None + + OnChange + ИспользоватьДополнительныйЯзык1ПриИзменении + + + ИспользоватьДополнительныйЯзык1РасширеннаяПодсказка + 21 + Label + true + true + + Left + + + + ИспользоватьДополнительныйЯзык1КонтекстноеМеню + 20 + true + + CheckBoxField + Enter + true + Left + true + + + + ДополнительныйЯзык1 + 22 + true + true + + true + + + ДополнительныйЯзык1 + + None + + OnChange + ДополнительныйЯзык1ПриИзменении + + + ДополнительныйЯзык1РасширеннаяПодсказка + 24 + Label + true + true + + Left + + + + ДополнительныйЯзык1КонтекстноеМеню + 23 + true + + InputField + Enter + true + Left + true + + + StartChoice + ДополнительныйЯзык1НачалоВыбора + + true + true + true + true + true + true + Normal + + + true + true + + true + + + ГруппаДополнительныйЯзык1РасширеннаяПодсказка + 18 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + true + Auto + Auto + + + + ГруппаДополнительныйЯзык2 + 25 + + ИспользоватьДополнительныйЯзык2 + 27 + true + true + + true + + + ИспользоватьДополнительныйЯзык2 + + None + + OnChange + ИспользоватьДополнительныйЯзык2ПриИзменении + + + ИспользоватьДополнительныйЯзык2РасширеннаяПодсказка + 29 + Label + true + true + + Left + + + + ИспользоватьДополнительныйЯзык2КонтекстноеМеню + 28 + true + + CheckBoxField + Enter + true + Left + true + + + + ДополнительныйЯзык2 + 30 + true + true + + true + + + ДополнительныйЯзык2 + + None + + OnChange + ДополнительныйЯзык2ПриИзменении + + + ДополнительныйЯзык2РасширеннаяПодсказка + 32 + Label + true + true + + Left + + + + ДополнительныйЯзык2КонтекстноеМеню + 31 + true + + InputField + Enter + true + Left + true + + + StartChoice + ДополнительныйЯзык2НачалоВыбора + + true + true + true + true + true + true + Normal + + + true + true + + true + + + ГруппаДополнительныйЯзык2РасширеннаяПодсказка + 26 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Дополнительные языки</value> + + + ru + Дополнительный язык отображения наименований видов контактной информации, дополнительных реквизитов и сведений, отчетов и т.п. + + + None + + ГруппаДополнительныеЯзыкиРасширеннаяПодсказка + 16 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + auto + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Региональные настройки</value> + + + РегиональныеНастройкиРасширеннаяПодсказка + 2 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + Ожидание + 53 + + ГруппаОписание + 55 + + КартинкаДлительнаяОперация + 57 + true + true + + true + + + КартинкаДлительнаяОперацияРасширеннаяПодсказка + 59 + Label + true + true + + Left + + + + КартинкаДлительнаяОперацияКонтекстноеМеню + 58 + true + + true + true + + + CommonPicture.ДлительнаяОперация48 + + + + + ДекорацияОписание + 77 + + <key>ru</key> + <value>Перезаполнение строк предопределенных элементов и классификаторов. + +</value> + + true + true + + true + + + ДекорацияОписаниеРасширеннаяПодсказка + 79 + Label + true + true + + Left + + + + ДекорацияОписаниеКонтекстноеМеню + 78 + true + + Label + 3 + true + + Left + Bottom + + + true + true + + true + + + ГруппаОписаниеРасширеннаяПодсказка + 56 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Ожидание</value> + + + ОжиданиеРасширеннаяПодсказка + 54 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + УспешноеЗавершение + 37 + + ГруппаЗавершение + 75 + + КартинкаУспешноеЗавершение + 41 + + <key>ru</key> + <value>Длительная операция</value> + + true + true + + true + + + КартинкаУспешноеЗавершениеРасширеннаяПодсказка + 43 + Label + true + true + + Left + + + + КартинкаУспешноеЗавершениеКонтекстноеМеню + 42 + true + + true + 2 + true + + + CommonPicture.Успешно32 + + + + + ДекорацияЗавершение + 72 + + <key>ru</key> + <value>Строки предопределенных элементов и классификаторов успешно перезаполнены. + +</value> + + true + true + + true + + + ДекорацияЗавершениеРасширеннаяПодсказка + 74 + Label + true + true + + Left + + + + ДекорацияЗавершениеКонтекстноеМеню + 73 + true + + Label + 3 + + Left + Bottom + + + true + true + + true + + + ГруппаЗавершениеРасширеннаяПодсказка + 76 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Успешное завершение</value> + + + УспешноеЗавершениеРасширеннаяПодсказка + 38 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + true + true + + true + + + СтраницыРасширеннаяПодсказка + 36 + Label + true + true + + Left + + + Pages + + Auto + + + Bottom + true + + ФормаКоманднаяПанель + -1 + + ОК + 33 + true + true + + true + + true + + ОКРасширеннаяПодсказка + 34 + Label + true + true + + Left + + + Form.Command.ОК + Auto + true + true + true + UserCmds + Auto + + + Закрыть + 80 + true + + true + + + ЗакрытьРасширеннаяПодсказка + 81 + Label + true + true + + Left + + + Form.StandardCommand.Close + Normal + Auto + true + true + UserCmds + Auto + + Right + + + OnOpen + ПриОткрытии + + + OnCreateAtServer + ПриСозданииНаСервере + + Abort + Cancel + CustomizeForm + Ignore + No + OK + RestoreValues + Retry + SaveValues + Yes + LockWholeInterface + true + true + true + Vertical + true + true + true + auto + true + + ОсновнойЯзык + + <key>ru</key> + <value>Основной язык</value> + + 1 + + String + + + + true + + + true + + ShowError + + + ИспользоватьДополнительныйЯзык1 + + <key>ru</key> + <value>Использовать дополнительный язык1</value> + + 2 + + Boolean + + + true + + + true + + + + ДополнительныйЯзык1 + + <key>ru</key> + <value>Дополнительный язык1</value> + + 3 + + String + + + + true + + + true + + + + ЧасовойПоясПрограммы + + <key>ru</key> + <value>Часовой пояс программы</value> + + 4 + + String + + + + true + + + true + + + + ДополнительныйЯзык2 + + <key>ru</key> + <value>Дополнительный язык1</value> + + 5 + + String + + + + true + + + true + + + + ИспользоватьДополнительныйЯзык2 + + <key>ru</key> + <value>Использовать дополнительный язык1</value> + + 6 + + Boolean + + + true + + + true + + + + Источник + 7 + + String + + + + true + + + true + + + + ИнформационнаяБазаФайловая + 8 + + Boolean + + + true + + + true + + + + ОК + + <key>ru</key> + <value>ОК</value> + + 1 + + ru + ОК + + + true + + + + ОК + + + Auto + Auto + + + Источник + + String + + + + + + + + diff --git a/SSL/src/CommonForms/РегиональныеНастройки/Module.bsl b/SSL/src/CommonForms/РегиональныеНастройки/Module.bsl new file mode 100644 index 000000000..aeb505f1f --- /dev/null +++ b/SSL/src/CommonForms/РегиональныеНастройки/Module.bsl @@ -0,0 +1,411 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2019, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ОписаниеПеременных + +&НаКлиенте +Перем ПредыдущийЯзык; + +#КонецОбласти + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если ОбщегоНазначения.РазделениеВключено() И ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда + Возврат; + КонецЕсли; + + ИнформационнаяБазаФайловая = ОбщегоНазначения.ИнформационнаяБазаФайловая(); + + Источник = Параметры.Источник; + Если Источник = "ПанельАдминистрированияБСП" Тогда + Элементы.ОК.Заголовок = НСтр("ru = 'Изменить'") + КонецЕсли; + + ЧасовойПоясПрограммы = ПолучитьЧасовойПоясИнформационнойБазы(); + Если ПустаяСтрока(ЧасовойПоясПрограммы) Тогда + ЧасовойПоясПрограммы = ЧасовойПояс(); + КонецЕсли; + Элементы.ЧасовойПоясПрограммы.СписокВыбора.ЗагрузитьЗначения(ПолучитьДопустимыеЧасовыеПояса()); + + УстановитьОсновнойЯзык(); + + Настройки = Новый Структура; + Настройки.Вставить("КодДополнительногоЯзыка1", ""); + Настройки.Вставить("КодДополнительногоЯзыка2", ""); + Настройки.Вставить("МультиязычныеДанные", Истина); + + МультиязычностьПереопределяемый.ПриОпределенииНастроек(Настройки); + + КоличествоЯзыков = Метаданные.Языки.Количество(); + Если Не Настройки.МультиязычныеДанные ИЛИ КоличествоЯзыков = 1 Тогда + Элементы.ГруппаДополнительныеЯзыки.Видимость = Ложь; + Элементы.ГруппаОсновнойЯзык.Видимость = Ложь; + Иначе + Если КоличествоЯзыков = 2 Тогда + Элементы.ГруппаДополнительныйЯзык2.Видимость = Ложь; + КонецЕсли; + ОтобразитьНастройкиДополнительныхЯзыков(Настройки, КоличествоЯзыков); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + Если ИнформационнаяБазаФайловая + И СтрНайти(ПараметрЗапуска, "ВыполнитьОбновлениеИЗавершитьРаботу") > 0 Тогда + ПодключитьОбработчикОжидания("УстановитьЗначенияПоУмолчанию", 0.1, Истина); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура УстановитьОсновнойЯзык() + + ОсновнойЯзык = Константы.ОсновнойЯзык.Получить(); + Для каждого Язык Из Метаданные.Языки Цикл + Элементы.ОсновнойЯзык.СписокВыбора.Добавить(Язык.КодЯзыка, Язык.Представление()); + КонецЦикла; + + Если ПустаяСтрока(ОсновнойЯзык) Тогда + ОсновнойЯзык = ТекущийЯзык().КодЯзыка; + КонецЕсли; + + Если ПустаяСтрока(ОсновнойЯзык) Или Элементы.ОсновнойЯзык.СписокВыбора.НайтиПоЗначению(ОсновнойЯзык) = Неопределено Тогда + ОсновнойЯзык = ОбщегоНазначения.КодОсновногоЯзыка(); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ОтобразитьНастройкиДополнительныхЯзыков(Настройки, КоличествоЯзыков) + + ДоступныеЯзыки = Новый Соответствие; + Для каждого ЯзыкКонфигурации Из Метаданные.Языки Цикл + Если СтрСравнить(ОсновнойЯзык, ЯзыкКонфигурации.КодЯзыка) = 0 Тогда + Продолжить; + КонецЕсли; + ДоступныеЯзыки.Вставить(ЯзыкКонфигурации.КодЯзыка, Истина); + КонецЦикла; + + Язык1ПоУмолчанию = ""; + Если ЗначениеЗаполнено(Настройки.КодДополнительногоЯзыка1) Тогда + Если ДоступныеЯзыки.Получить(Настройки.КодДополнительногоЯзыка1) = Истина Тогда + Язык1ПоУмолчанию = Настройки.КодДополнительногоЯзыка1; + КонецЕсли; + КонецЕсли; + + Язык2ПоУмолчанию = ""; + Если КоличествоЯзыков > 2 И ЗначениеЗаполнено(Настройки.КодДополнительногоЯзыка2) Тогда + Если ДоступныеЯзыки.Получить(Настройки.КодДополнительногоЯзыка2) = Истина Тогда + Язык2ПоУмолчанию = Настройки.КодДополнительногоЯзыка2; + КонецЕсли; + КонецЕсли; + + Для каждого Язык Из Метаданные.Языки Цикл + Если СтрСравнить(Язык.КодЯзыка, ОсновнойЯзык) <> 0 Тогда + Если ПустаяСтрока(Язык1ПоУмолчанию) Тогда + Язык1ПоУмолчанию = Язык.КодЯзыка; + ИначеЕсли ПустаяСтрока(Язык2ПоУмолчанию) И Язык.КодЯзыка <> Язык1ПоУмолчанию Тогда + Язык2ПоУмолчанию = Язык.КодЯзыка; + КонецЕсли; + КонецЕсли; + Элементы.ДополнительныйЯзык1.СписокВыбора.Добавить(Язык.КодЯзыка, Язык.Представление()); + Элементы.ДополнительныйЯзык2.СписокВыбора.Добавить(Язык.КодЯзыка, Язык.Представление()); + КонецЦикла; + + ИспользоватьДополнительныйЯзык1 = МультиязычностьСервер.ИспользуетсяПервыйДополнительныйЯзык(); + ИспользоватьДополнительныйЯзык2 = МультиязычностьСервер.ИспользуетсяВторойДополнительныйЯзык(); + + ДополнительныйЯзык1 = МультиязычностьСервер.КодПервогоДополнительногоЯзыкаИнформационнойБазы(); + ДополнительныйЯзык2 = МультиязычностьСервер.КодВторогоДополнительногоЯзыкаИнформационнойБазы(); + + Элементы.ДополнительныйЯзык1.Доступность = ИспользоватьДополнительныйЯзык1; + Элементы.ДополнительныйЯзык2.Доступность = ИспользоватьДополнительныйЯзык2; + + Если ПустаяСтрока(ДополнительныйЯзык1) Тогда + ДополнительныйЯзык1 = Язык1ПоУмолчанию; + КонецЕсли; + + Если КоличествоЯзыков > 2 И ПустаяСтрока(ДополнительныйЯзык2) Тогда + ДополнительныйЯзык2 = Язык2ПоУмолчанию; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы + +&НаКлиенте +Процедура ИспользоватьДополнительныйЯзык1ПриИзменении(Элемент) + Элементы.ДополнительныйЯзык1.Доступность = ИспользоватьДополнительныйЯзык1; +КонецПроцедуры + +&НаКлиенте +Процедура ИспользоватьДополнительныйЯзык2ПриИзменении(Элемент) + Элементы.ДополнительныйЯзык2.Доступность = ИспользоватьДополнительныйЯзык2; +КонецПроцедуры + +&НаКлиенте +Процедура ОсновнойЯзыкПриИзменении(Элемент) + + Если СтрСравнить(ПредыдущийЯзык, ОсновнойЯзык) <> 0 Тогда + Если СтрСравнить(ДополнительныйЯзык1, ОсновнойЯзык) = 0 Тогда + ДополнительныйЯзык1 = ПредыдущийЯзык; + ИначеЕсли СтрСравнить(ДополнительныйЯзык2, ОсновнойЯзык) = 0 Тогда + ДополнительныйЯзык2 = ПредыдущийЯзык; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ОсновнойЯзыкНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + ПредыдущийЯзык = ОсновнойЯзык; +КонецПроцедуры + +&НаКлиенте +Процедура ДополнительныйЯзык1ПриИзменении(Элемент) + + Если СтрСравнить(ПредыдущийЯзык, ДополнительныйЯзык1) <> 0 Тогда + Если СтрСравнить(ДополнительныйЯзык1, ОсновнойЯзык) = 0 Тогда + ОсновнойЯзык = ПредыдущийЯзык; + ИначеЕсли СтрСравнить(ДополнительныйЯзык1, ДополнительныйЯзык2) = 0 Тогда + ДополнительныйЯзык2 = ПредыдущийЯзык; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ДополнительныйЯзык2ПриИзменении(Элемент) + + Если СтрСравнить(ПредыдущийЯзык, ДополнительныйЯзык2) <> 0 Тогда + Если СтрСравнить(ДополнительныйЯзык2, ДополнительныйЯзык1) = 0 Тогда + ДополнительныйЯзык1 = ПредыдущийЯзык; + ИначеЕсли СтрСравнить(ДополнительныйЯзык2, ОсновнойЯзык) = 0 Тогда + ОсновнойЯзык = ПредыдущийЯзык; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ДополнительныйЯзык2НачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + ПредыдущийЯзык = ДополнительныйЯзык2; +КонецПроцедуры + +&НаКлиенте +Процедура ДополнительныйЯзык1НачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + ПредыдущийЯзык = ДополнительныйЯзык1; +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ОК(Команда) + + Если ДанныеКорректны() Тогда + + Если Источник = "ПанельАдминистрированияБСП" И ЗначенияКонстантИзменены() Тогда + ПерезаполнитьДанные(); + Иначе + ЗаписатьЗначенияКонстант(); + Закрыть(Новый Структура("Отказ", Ложь)); + КонецЕсли; + + Иначе + ПоказатьПредупреждение(Неопределено, НСтр("ru = 'Указаны некорректные значения региональных настроек'")); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаКлиенте +Процедура УстановитьЗначенияПоУмолчанию() + + ЗаписатьЗначенияКонстант(); + Закрыть(Новый Структура("Отказ", Ложь)); + +КонецПроцедуры + +&НаКлиенте +Процедура ПерезаполнитьДанные() + + ОчиститьСообщения(); + + Элементы.Страницы.ТекущаяСтраница = Элементы.Ожидание; + Элементы.ОК.Доступность = Ложь; + + ОповещениеОПрогрессеВыполнения = Новый ОписаниеОповещения("ПрогрессВыполнения", ЭтотОбъект); + + Задание = ЗапуститьФоновоеПерезаполнениеНаСервере(УникальныйИдентификатор); + ИдентификаторЗадания = Задание.ИдентификаторЗадания; + + НастройкиОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект); + НастройкиОжидания.ВыводитьОкноОжидания = Ложь; + НастройкиОжидания.ОповещениеОПрогрессеВыполнения = ОповещениеОПрогрессеВыполнения; + + Обработчик = Новый ОписаниеОповещения("ПослеФоновогоПерезаполнения", ЭтотОбъект); + ДлительныеОперацииКлиент.ОжидатьЗавершение(Задание, Обработчик, НастройкиОжидания); + +КонецПроцедуры + +&НаСервере +Функция ЗапуститьФоновоеПерезаполнениеНаСервере(Знач УникальныйИдентификатор) + + ЗаписатьЗначенияКонстант(); + ПараметрыМетода = Новый Структура; + + ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор); + ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Перезаполнение строк предопределенных элементов и классификаторов.'"); + + ФоновоеЗадание = ДлительныеОперации.ВыполнитьВФоне("МультиязычностьСервер.ПерезаполнитьМультиязычныеСтрокиВОбъектах", + ПараметрыМетода, ПараметрыВыполнения); + + Возврат ФоновоеЗадание; +КонецФункции + +&НаКлиенте +Процедура ПослеФоновогоПерезаполнения(Задание, ДополнительныеПараметры) Экспорт + + Если Задание = Неопределено Тогда + Возврат; + КонецЕсли; + + Если Задание.Статус = "Выполнено" Тогда + Элементы.Страницы.ТекущаяСтраница = Элементы.УспешноеЗавершение; + ОбновитьПовторноИспользуемыеЗначения(); + + Элементы.ОК.Видимость = Истина; + Элементы.Закрыть.Видимость = Истина; + Элементы.Закрыть.КнопкаПоУмолчанию = Истина; + ТекущийЭлемент = Элементы.Закрыть; + ИначеЕсли Задание.Статус = "Ошибка" Тогда + Элементы.Страницы.ТекущаяСтраница = Элементы.РегиональныеНастройки; + ТекстОшибки = НСтр("ru = 'Не удается перезаполнить строки предопределенных элементов и классификаторов.'"); + ТекстОшибки = ТекстОшибки + Символы.ПС + НСтр("ru = 'Техническая информация:'") + Задание.ПодробноеПредставлениеОшибки; + ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстОшибки); + КонецЕсли; + +КонецПроцедуры + +&НаСервереБезКонтекста +Функция ПрочитатьПрогресс(ИдентификаторЗадания) + Возврат ДлительныеОперации.ПрочитатьПрогресс(ИдентификаторЗадания); +КонецФункции + +&НаКлиенте +Процедура ПрогрессВыполнения(Результат, ДополнительныеПараметры) Экспорт + + Если Результат.Статус = "Выполняется" Тогда + Прогресс = ПрочитатьПрогресс(Результат.ИдентификаторЗадания); + Если Прогресс <> Неопределено Тогда + ТекстСостоянияОчистки = Прогресс.Текст; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Функция ДанныеКорректны() + + Если ПустаяСтрока(ОсновнойЯзык) Тогда + Возврат Ложь; + КонецЕсли; + + Если ПустаяСтрока(ЧасовойПоясПрограммы) Тогда + Возврат Ложь; + КонецЕсли; + + УстановленныеЯзыки = Новый Соответствие; + УстановленныеЯзыки.Вставить(ОсновнойЯзык, Истина); + + Если ИспользоватьДополнительныйЯзык1 Тогда + Если ОсновнойЯзык = ДополнительныйЯзык1 Или ДополнительныйЯзык1 = ДополнительныйЯзык2 Тогда + Возврат Ложь; + КонецЕсли; + КонецЕсли; + + Если ИспользоватьДополнительныйЯзык2 Тогда + Если ОсновнойЯзык = ДополнительныйЯзык2 Или ДополнительныйЯзык1 = ДополнительныйЯзык2 Тогда + Возврат Ложь; + КонецЕсли; + КонецЕсли; + + Возврат Истина; + +КонецФункции + +&НаСервере +Процедура ЗаписатьЗначенияКонстант() + + Если ЧасовойПоясПрограммы <> ПолучитьЧасовойПоясИнформационнойБазы() Тогда + УстановитьПривилегированныйРежим(Истина); + Попытка + УстановитьМонопольныйРежим(Истина); + УстановитьЧасовойПоясИнформационнойБазы(ЧасовойПоясПрограммы); + УстановитьМонопольныйРежим(Ложь); + Исключение + УстановитьМонопольныйРежим(Ложь); + ВызватьИсключение; + КонецПопытки; + УстановитьПривилегированныйРежим(Ложь); + УстановитьЧасовойПоясСеанса(ЧасовойПоясПрограммы); + КонецЕсли; + + Константы.ОсновнойЯзык.Установить(ОсновнойЯзык); + ПараметрыСеанса.ОсновнойЯзык = ОсновнойЯзык; + + КодЯзыка1 = ?(ИспользоватьДополнительныйЯзык1, ДополнительныйЯзык1, ""); + Константы.ДополнительныйЯзык1.Установить(КодЯзыка1); + Константы.ИспользоватьДополнительныйЯзык1.Установить(ИспользоватьДополнительныйЯзык1); + + КодЯзыка2 = ?(ИспользоватьДополнительныйЯзык2, ДополнительныйЯзык2, ""); + Константы.ДополнительныйЯзык2.Установить(КодЯзыка2); + + Константы.ИспользоватьДополнительныйЯзык2.Установить(ИспользоватьДополнительныйЯзык2); + +КонецПроцедуры + +&НаСервере +Функция ЗначенияКонстантИзменены() + + Если СтрСравнить(Константы.ОсновнойЯзык.Получить(), ОсновнойЯзык) <> 0 Тогда + Возврат Истина; + КонецЕсли; + + Если (Константы.ИспользоватьДополнительныйЯзык1.Получить() = Ложь И ИспользоватьДополнительныйЯзык1 = Истина) + Или (Константы.ИспользоватьДополнительныйЯзык2.Получить() = Ложь И ИспользоватьДополнительныйЯзык2 = Истина) Тогда + Возврат Истина; + КонецЕсли; + + Если ИспользоватьДополнительныйЯзык1 + И СтрСравнить(Константы.ДополнительныйЯзык1.Получить(), ДополнительныйЯзык1) <> 0 Тогда + Возврат Истина; + КонецЕсли; + + Если ИспользоватьДополнительныйЯзык2 + И СтрСравнить(Константы.ДополнительныйЯзык2.Получить(), ДополнительныйЯзык2) <> 0 Тогда + Возврат Истина; + КонецЕсли; + + Возврат Ложь; + +КонецФункции + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonForms/РегиональныеНастройки/РегиональныеНастройки.mdo b/SSL/src/CommonForms/РегиональныеНастройки/РегиональныеНастройки.mdo new file mode 100644 index 000000000..1ff480e27 --- /dev/null +++ b/SSL/src/CommonForms/РегиональныеНастройки/РегиональныеНастройки.mdo @@ -0,0 +1,10 @@ + + + РегиональныеНастройки + + ru + Региональные настройки + + PersonalComputer + MobileDevice + diff --git a/SSL/src/CommonForms/РедактированиеГиперссылки/Module.bsl b/SSL/src/CommonForms/РедактированиеГиперссылки/Module.bsl index d58a3f93f..add784c93 100644 --- a/SSL/src/CommonForms/РедактированиеГиперссылки/Module.bsl +++ b/SSL/src/CommonForms/РедактированиеГиперссылки/Module.bsl @@ -77,7 +77,7 @@ ВозвращаемоеЗначение.Вставить("ФорматированнаяСтрока", ПустаяФорматированнаяСтрока()); Иначе Значение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, Ссылка, Представление); - ВозвращаемоеЗначение.Вставить("ФорматированнаяСтрока", СтроковыеФункцииКлиентСервер.ФорматированнаяСтрока(Значение)); + ВозвращаемоеЗначение.Вставить("ФорматированнаяСтрока", СтроковыеФункцииКлиент.ФорматированнаяСтрока(Значение)); КонецЕсли; Иначе Значение = Ссылка; diff --git a/SSL/src/CommonForms/РедактированиеДополнительныхСведений/Module.bsl b/SSL/src/CommonForms/РедактированиеДополнительныхСведений/Module.bsl index d5bcbcb08..e56990758 100644 --- a/SSL/src/CommonForms/РедактированиеДополнительныхСведений/Module.bsl +++ b/SSL/src/CommonForms/РедактированиеДополнительныхСведений/Module.bsl @@ -196,14 +196,14 @@ РазрешенныеСвойства = МодульУправлениеДоступомСлужебный.РазрешенныеЗначенияДляДинамическогоСписка( ПроверяемаяТаблица, ЗначениеДоступа, - ПроверяемыеСвойства); + ПроверяемыеСвойства, , Истина); КонецЕсли; Для Каждого Строка Из Таблица Цикл ДоступноДляИзменения = Истина; Если ПроверятьПрава Тогда // Проверка на чтение свойства. - Если РазрешенныеСвойства.Найти(Строка.Свойство) = Неопределено Тогда + Если РазрешенныеСвойства <> Неопределено И РазрешенныеСвойства.Найти(Строка.Свойство) = Неопределено Тогда Продолжить; КонецЕсли; @@ -267,27 +267,39 @@ УстановитьПривилегированныйРежим(Истина); - Набор = РегистрыСведений.ДополнительныеСведения.СоздатьНаборЗаписей(); - Набор.Отбор.Объект.Установить(Ссылка); - Набор.Прочитать(); - ТекущиеЗначения = Набор.Выгрузить(); - Для Каждого Строка Из ЗначенияСвойств Цикл - Запись = ТекущиеЗначения.Найти(Строка.Свойство, "Свойство"); - Если Запись = Неопределено Тогда - Запись = ТекущиеЗначения.Добавить(); - Запись.Свойство = Строка.Свойство; - Запись.Значение = Строка.Значение; - Запись.Объект = Ссылка; - КонецЕсли; - Запись.Значение = Строка.Значение; + НачатьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ДополнительныеСведения"); + ЭлементБлокировки.УстановитьЗначение("Объект", Ссылка); + Блокировка.Заблокировать(); - Если Не ЗначениеЗаполнено(Запись.Значение) - Или Запись.Значение = Ложь Тогда - ТекущиеЗначения.Удалить(Запись); - КонецЕсли; - КонецЦикла; - Набор.Загрузить(ТекущиеЗначения); - Набор.Записать(); + Набор = РегистрыСведений.ДополнительныеСведения.СоздатьНаборЗаписей(); + Набор.Отбор.Объект.Установить(Ссылка); + Набор.Прочитать(); + ТекущиеЗначения = Набор.Выгрузить(); + Для Каждого Строка Из ЗначенияСвойств Цикл + Запись = ТекущиеЗначения.Найти(Строка.Свойство, "Свойство"); + Если Запись = Неопределено Тогда + Запись = ТекущиеЗначения.Добавить(); + Запись.Свойство = Строка.Свойство; + Запись.Значение = Строка.Значение; + Запись.Объект = Ссылка; + КонецЕсли; + Запись.Значение = Строка.Значение; + + Если Не ЗначениеЗаполнено(Запись.Значение) + Или Запись.Значение = Ложь Тогда + ТекущиеЗначения.Удалить(Запись); + КонецЕсли; + КонецЦикла; + Набор.Загрузить(ТекущиеЗначения); + Набор.Записать(); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + КонецПопытки; КонецПроцедуры diff --git a/SSL/src/CommonForms/РедактированиеТабличногоДокумента/Module.bsl b/SSL/src/CommonForms/РедактированиеТабличногоДокумента/Module.bsl index 922568e85..a453b3a62 100644 --- a/SSL/src/CommonForms/РедактированиеТабличногоДокумента/Module.bsl +++ b/SSL/src/CommonForms/РедактированиеТабличногоДокумента/Module.bsl @@ -60,9 +60,11 @@ Процедура ПриОткрытии(Отказ) Если Не ПустаяСтрока(Параметры.ПутьКФайлу) Тогда - ОписаниеОповещения = Новый ОписаниеОповещения("ПриЗавершенииИнициализацииФайла", ЭтотОбъект); - Файл = Новый Файл(); - Файл.НачатьИнициализацию(ОписаниеОповещения, Параметры.ПутьКФайлу); + Файл = Новый Файл(Параметры.ПутьКФайлу); + Если ПустаяСтрока(ИмяДокумента) Тогда + ИмяДокумента = Файл.ИмяБезРасширения; + КонецЕсли; + Файл.НачатьПолучениеТолькоЧтения(Новый ОписаниеОповещения("ПриЗавершенииПолученияТолькоЧтения", ЭтотОбъект)); Возврат; КонецЕсли; @@ -545,18 +547,6 @@ КонецПроцедуры -&НаКлиенте -Процедура ПриЗавершенииИнициализацииФайла(Файл, ДополнительныеПараметры) Экспорт - - Если ПустаяСтрока(ИмяДокумента) Тогда - ИмяДокумента = Файл.ИмяБезРасширения; - КонецЕсли; - - ОписаниеОповещения = Новый ОписаниеОповещения("ПриЗавершенииПолученияТолькоЧтения", ЭтотОбъект); - Файл.НачатьПолучениеТолькоЧтения(ОписаниеОповещения); - -КонецПроцедуры - &НаКлиенте Процедура ПриЗавершенииПолученияТолькоЧтения(ТолькоЧтение, ДополнительныеПараметры) Экспорт diff --git a/SSL/src/CommonForms/СтруктураПодчиненности/Form.form b/SSL/src/CommonForms/СвязанныеДокументы/Form.form similarity index 100% rename from SSL/src/CommonForms/СтруктураПодчиненности/Form.form rename to SSL/src/CommonForms/СвязанныеДокументы/Form.form diff --git a/SSL/src/CommonForms/СтруктураПодчиненности/Help/ru.html b/SSL/src/CommonForms/СвязанныеДокументы/Help/ru.html similarity index 100% rename from SSL/src/CommonForms/СтруктураПодчиненности/Help/ru.html rename to SSL/src/CommonForms/СвязанныеДокументы/Help/ru.html diff --git a/SSL/src/CommonForms/СтруктураПодчиненности/Module.bsl b/SSL/src/CommonForms/СвязанныеДокументы/Module.bsl similarity index 99% rename from SSL/src/CommonForms/СтруктураПодчиненности/Module.bsl rename to SSL/src/CommonForms/СвязанныеДокументы/Module.bsl index 6952d52cf..488a248cc 100644 --- a/SSL/src/CommonForms/СтруктураПодчиненности/Module.bsl +++ b/SSL/src/CommonForms/СвязанныеДокументы/Module.bsl @@ -310,7 +310,7 @@ Если ОбщегоНазначения.ЭтоДокумент(МетаданныеОбъекта) Тогда Если (Выборка.СуммаДокумента <> 0) И (Выборка.СуммаДокумента <> NULL) Тогда - ПредставлениеОбъекта = ПредставлениеОбъекта + " " + НСтр("ru='на сумму'") + " " + Выборка.СуммаДокумента + " " + Выборка.Валюта; + ПредставлениеОбъекта = ПредставлениеОбъекта + " " + НСтр("ru = 'на сумму'") + " " + Выборка.СуммаДокумента + " " + Выборка.Валюта; КонецЕсли; Иначе ПредставлениеОбъекта = ПредставлениеОбъекта + " (" + МетаданныеОбъекта.ПредставлениеОбъекта + ")"; @@ -434,7 +434,7 @@ // получаются запросом. // // Возвращаемое значение: -// ВыборкаИзРезультатаЗапроса +// ВыборкаИзРезультатаЗапроса - // &НаСервере Функция ПолучитьВыборкуПоРеквизитамОбъекта(ОбъектСсылка) @@ -617,7 +617,7 @@ // Определяет наличие документа среди родителей строки дерева, которая возможно будет добавлена. // // Параметры: -// СтрокаРодитель - ДанныеФормыДерево,ДанныеФормыЭлементДерева - родитель, для +// СтрокаРодитель - ДанныеФормыДерево, ДанныеФормыЭлементДерева - родитель, для // которого предполагается добавить строку дерева. // ИскомыйОбъект - Ссылка - ссылка на объект метаданных, на наличие которого выполняется проверка. // diff --git a/SSL/src/CommonForms/СтруктураПодчиненности/СтруктураПодчиненности.mdo b/SSL/src/CommonForms/СвязанныеДокументы/СвязанныеДокументы.mdo similarity index 87% rename from SSL/src/CommonForms/СтруктураПодчиненности/СтруктураПодчиненности.mdo rename to SSL/src/CommonForms/СвязанныеДокументы/СвязанныеДокументы.mdo index 8484dc2d9..192f8de86 100644 --- a/SSL/src/CommonForms/СтруктураПодчиненности/СтруктураПодчиненности.mdo +++ b/SSL/src/CommonForms/СвязанныеДокументы/СвязанныеДокументы.mdo @@ -1,6 +1,6 @@ - СтруктураПодчиненности + СвязанныеДокументы ru Связанные документы diff --git a/SSL/src/CommonForms/Сертификат/Module.bsl b/SSL/src/CommonForms/Сертификат/Module.bsl index 27bcdf704..03eafed85 100644 --- a/SSL/src/CommonForms/Сертификат/Module.bsl +++ b/SSL/src/CommonForms/Сертификат/Module.bsl @@ -138,11 +138,10 @@ ПредставленияСвойств["Подразделение"] = НСтр("ru = 'Подразделение'"); ПредставленияСвойств["ЭлектроннаяПочта"] = НСтр("ru = 'Электронная почта'"); - Если Метаданные.ОбщиеМодули.Найти("ЭлектроннаяПодписьЛокализацияКлиентСервер") <> Неопределено Тогда - МодульЭлектроннаяПодписьЛокализацияКлиентСервер = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодписьЛокализацияКлиентСервер"); + Если Метаданные.Обработки.Найти("ПрограммыЭлектроннойПодписиИШифрования") <> Неопределено Тогда ОбщегоНазначенияКлиентСервер.ДополнитьСоответствие(ПредставленияСвойств, - МодульЭлектроннаяПодписьЛокализацияКлиентСервер.ПредставленияСвойствСубъектаСертификата(), Истина); - КонецЕсли; + Обработки["ПрограммыЭлектроннойПодписиИШифрования"].ПредставленияСвойствСубъектаСертификата(), Истина); + КонецЕсли; Для каждого ЭлементСписка Из ПредставленияСвойств Цикл ЗначениеСвойства = Коллекция[ЭлементСписка.Ключ]; @@ -171,12 +170,11 @@ ПредставленияСвойств["Подразделение"] = НСтр("ru = 'Подразделение'"); ПредставленияСвойств["ЭлектроннаяПочта"] = НСтр("ru = 'Электронная почта'"); - Если Метаданные.ОбщиеМодули.Найти("ЭлектроннаяПодписьЛокализацияКлиентСервер") <> Неопределено Тогда - МодульЭлектроннаяПодписьЛокализацияКлиентСервер = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодписьЛокализацияКлиентСервер"); + Если Метаданные.Обработки.Найти("ПрограммыЭлектроннойПодписиИШифрования") <> Неопределено Тогда ОбщегоНазначенияКлиентСервер.ДополнитьСоответствие(ПредставленияСвойств, - МодульЭлектроннаяПодписьЛокализацияКлиентСервер.ПредставленияСвойствИздателяСертификата(), Истина); + Обработки["ПрограммыЭлектроннойПодписиИШифрования"].ПредставленияСвойствИздателяСертификата(), Истина); КонецЕсли; - + Для каждого ЭлементСписка Из ПредставленияСвойств Цикл ЗначениеСвойства = Коллекция[ЭлементСписка.Ключ]; Если Не ЗначениеЗаполнено(ЗначениеСвойства) Тогда diff --git a/SSL/src/CommonForms/СинхронизацияДанных/Module.bsl b/SSL/src/CommonForms/СинхронизацияДанных/Module.bsl index f79dae3c8..78a1573b3 100644 --- a/SSL/src/CommonForms/СинхронизацияДанных/Module.bsl +++ b/SSL/src/CommonForms/СинхронизацияДанных/Module.bsl @@ -722,10 +722,10 @@ Иначе ОбновитьСписокПриложений(); ВыполнитьПозиционированиеКурсора("СписокПриложений", ИндексСтрокиСписокПриложений); + + ПодключитьОбработчикОжидания("ОбновитьДанныеМонитораВФоне", 60, Истина); КонецЕсли; - ПодключитьОбработчикОжидания("ОбновитьДанныеМонитораВФоне", 60, Истина); - КонецПроцедуры &НаКлиенте @@ -741,10 +741,10 @@ ПриНачалеОбновленияДанныхМонитораВФоне(); Иначе ВыполнитьПозиционированиеКурсора("СписокПриложений", ИндексСтрокиСписокПриложений); + + ПодключитьОбработчикОжидания("ОбновитьДанныеМонитораВФоне", 60, Истина); КонецЕсли; - ПодключитьОбработчикОжидания("ОбновитьДанныеМонитораВФоне", 60, Истина); - КонецПроцедуры &НаКлиенте @@ -799,10 +799,13 @@ Процедура ПриЗавершенииОбновленияДанныхМонитора() ПриЗавершенииПолученияСпискаПриложенийНаСервере(); + ВыполнитьПозиционированиеКурсора("СписокПриложений", ИндексСтрокиСписокПриложений); Элементы.ПанельСписокПриложений.ТекущаяСтраница = Элементы.СтраницаСписокПриложений; Элементы.КоманднаяПанель.Доступность = Истина; + ПодключитьОбработчикОжидания("ОбновитьДанныеМонитораВФоне", 60, Истина); + КонецПроцедуры &НаКлиенте @@ -856,6 +859,8 @@ ПриЗавершенииПолученияСпискаПриложенийНаСервере(); ВыполнитьПозиционированиеКурсора("СписокПриложений", ИндексСтрокиСписокПриложений); + ПодключитьОбработчикОжидания("ОбновитьДанныеМонитораВФоне", 60, Истина); + КонецПроцедуры &НаСервереБезКонтекста @@ -941,8 +946,10 @@ Для Каждого СтрокаПриложение Из СписокПриложений Цикл + УстановитьПривилегированныйРежим(Истина); СтрокаПриложение.НаименованиеКорреспондента = ОбщегоНазначения.ЗначениеРеквизитаОбъекта( СтрокаПриложение.УзелИнформационнойБазы, "Наименование"); + УстановитьПривилегированныйРежим(Ложь); СтрокиПриложениеМоделиСервиса = ПриложенияМоделиСервиса.НайтиСтроки( Новый Структура("Корреспондент", СтрокаПриложение.УзелИнформационнойБазы)); @@ -964,7 +971,7 @@ ВидТранспорта = РегистрыСведений.НастройкиТранспортаОбменаДанными.ВидТранспортаСообщенийОбменаПоУмолчанию( СтрокаПриложение.УзелИнформационнойБазы); - + Если ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.WS Или ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.ВнешняяСистема Тогда СтрокаПриложение.РежимРаботыПриложения = 1; // сервис @@ -978,17 +985,18 @@ СтрокаПриложение.ЗапускОбменаИзКорреспондента = Истина; КонецЕсли; + СтрокаПриложение.ВнешняяСистема = (ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.ВнешняяСистема); + СтрокаПриложение.ДоступнаИнтерактивнаяОтправка = Не ОбменДаннымиПовтИсп.ЭтоПланОбменаРаспределеннойИнформационнойБазы(СтрокаПриложение.ИмяПланаОбмена) - И Не ОбменДаннымиПовтИсп.ЭтоУзелСтандартногоОбменаДанными(СтрокаПриложение.ИмяПланаОбмена); - - СтрокаПриложение.ВнешняяСистема = (ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.ВнешняяСистема); + И Не ОбменДаннымиПовтИсп.ЭтоУзелСтандартногоОбменаДанными(СтрокаПриложение.ИмяПланаОбмена) + И Не СтрокаПриложение.ВнешняяСистема; КонецЕсли; СтрокаПриложение.ДоступнаИнтерактивнаяОтправка = СтрокаПриложение.ДоступнаИнтерактивнаяОтправка И Не (СтрокаПриложение.ВариантОбменаДанными = "ТолькоПолучение"); - + СостояниеСинхронизации = СостояниеСинхронизацииДанных(СтрокаПриложение); СтрокаПриложение.СостояниеПредставление = СостояниеСинхронизации.Представление; СтрокаПриложение.СостояниеКартинка = СостояниеСинхронизации.Картинка; diff --git a/SSL/src/CommonForms/СменаПароля/Form.form b/SSL/src/CommonForms/СменаПароля/Form.form index 2d7267db7..36f2e8658 100644 --- a/SSL/src/CommonForms/СменаПароля/Form.form +++ b/SSL/src/CommonForms/СменаПароля/Form.form @@ -220,10 +220,6 @@ true - - <key>ru</key> - <value>Новый пароль</value> - ГруппаНовыйПарольРасширеннаяПодсказка 73 @@ -432,10 +428,6 @@ true - - <key>ru</key> - <value>Ошибки</value> - ГруппаОшибкиРасширеннаяПодсказка 82 @@ -456,10 +448,6 @@ true - - <key>ru</key> - <value>Подтверждение</value> - false ГруппаПодтверждениеРасширеннаяПодсказка @@ -527,10 +515,6 @@ true - - <key>ru</key> - <value>Показывать новый пароль</value> - ГруппаПоказыватьНовыйПарольРасширеннаяПодсказка 32 @@ -557,10 +541,6 @@ true - - <key>ru</key> - <value>Пароль</value> - ГруппаПарольРасширеннаяПодсказка 19 diff --git a/SSL/src/CommonForms/СохранениеВместеСЭлектроннойПодписью/Form.form b/SSL/src/CommonForms/СохранениеВместеСЭлектроннойПодписью/Form.form index 5cc90bf73..96f194005 100644 --- a/SSL/src/CommonForms/СохранениеВместеСЭлектроннойПодписью/Form.form +++ b/SSL/src/CommonForms/СохранениеВместеСЭлектроннойПодписью/Form.form @@ -390,13 +390,6 @@ ru Выберите подписи для сохранения: - - Style.NormalTextFont - true - false - false - false - ГруппаСохраняемыеПодписиРасширеннаяПодсказка 73 @@ -411,6 +404,7 @@ Vertical Auto + NormalSeparation true true auto diff --git a/SSL/src/CommonForms/СохранениеПечатнойФормы/Form.form b/SSL/src/CommonForms/СохранениеПечатнойФормы/Form.form index 20f3b377e..4606998d5 100644 --- a/SSL/src/CommonForms/СохранениеПечатнойФормы/Form.form +++ b/SSL/src/CommonForms/СохранениеПечатнойФормы/Form.form @@ -228,10 +228,6 @@ true - - <key>ru</key> - <value>Места сохранения</value> - ГруппаМестаСохраненияExtendedTooltip 84 @@ -252,10 +248,6 @@ true - - <key>ru</key> - <value>Выбор места сохранения файла</value> - ВыборМестаСохраненияФайлаExtendedTooltip 82 @@ -284,10 +276,6 @@ ВыбранныеФорматыСохранения 72 - - <key>ru</key> - <value>Выбранные форматы сохранения</value> - true true @@ -613,10 +601,6 @@ true - - <key>ru</key> - <value>В форматах</value> - ГруппаДополнительныеПараметрыExtendedTooltip 93 diff --git a/SSL/src/CommonForms/УстановкаВнешнейКомпонентыНевозможна/Module.bsl b/SSL/src/CommonForms/УстановкаВнешнейКомпонентыНевозможна/Module.bsl index 4f65763cd..b029b3cd3 100644 --- a/SSL/src/CommonForms/УстановкаВнешнейКомпонентыНевозможна/Module.bsl +++ b/SSL/src/CommonForms/УстановкаВнешнейКомпонентыНевозможна/Module.bsl @@ -17,15 +17,13 @@ ТекстПояснения = НСтр("ru = 'Установка внешней компоненты невозможна.'"); КонецЕсли; - Элементы.ДекорацияПояснение.Заголовок = СтроковыеФункцииКлиентСервер.ФорматированнаяСтрока( - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = '%1 + Элементы.ДекорацияПояснение.Заголовок = СтроковыеФункцииКлиент.ФорматированнаяСтрока(НСтр("ru = '%1 | |Не предусмотрена работа внешней компоненты |в клиентском приложении %2. |Используйте поддерживаемое клиентское приложение или обратитесь к разработчику внешней компоненты.'"), ТекстПояснения, - ПредставлениеТекущегоКлиента())); + ПредставлениеТекущегоКлиента()); КонецПроцедуры diff --git a/SSL/src/CommonForms/УстановленныеИсправления/Form.form b/SSL/src/CommonForms/УстановленныеИсправления/Form.form index a7b9ca2d6..64e3e8dad 100644 --- a/SSL/src/CommonForms/УстановленныеИсправления/Form.form +++ b/SSL/src/CommonForms/УстановленныеИсправления/Form.form @@ -484,6 +484,33 @@ UserCmds Auto + + УстановленныеИсправленияСохранитьКак + 104 + true + true + + true + + + УстановленныеИсправленияСохранитьКакРасширеннаяПодсказка + 105 + Label + true + true + + Left + + + Form.Command.СохранитьКак + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + Left @@ -1186,7 +1213,7 @@ - ОтображаемыеИсправления + Фильтр 3 @@ -1196,6 +1223,31 @@ true + + СохранитьКак + + <key>ru</key> + <value>Сохранить как...</value> + + 1 + + ru + Сохранить как + + + true + + + CommonPicture.СохранитьФайлКак + + + + СохранитьКак + + + DontUse + Auto + Исправления diff --git a/SSL/src/CommonForms/УстановленныеИсправления/Module.bsl b/SSL/src/CommonForms/УстановленныеИсправления/Module.bsl index abacbcbef..ddbb4aa7f 100644 --- a/SSL/src/CommonForms/УстановленныеИсправления/Module.bsl +++ b/SSL/src/CommonForms/УстановленныеИсправления/Module.bsl @@ -22,7 +22,7 @@ ВызватьИсключение НСтр("ru = 'Текущий режим работы не поддерживается.'"); КонецЕсли; - ОтображаемыеИсправления = Параметры.Исправления; + Фильтр = Параметры.Исправления; Если ОбщегоНазначения.ЭтоВебКлиент() Или ОбщегоНазначения.РазделениеВключено() @@ -72,6 +72,38 @@ #КонецОбласти +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура СохранитьКак(Команда) + + ВыделенныеСтроки = Элементы.УстановленныеИсправления.ВыделенныеСтроки; + ОписаниеОповещения = Новый ОписаниеОповещения("СохранитьКакЗавершение", ЭтотОбъект, ВыделенныеСтроки); + + Если ВыделенныеСтроки.Количество() = 0 Тогда + Возврат; + ИначеЕсли ВыделенныеСтроки.Количество() = 1 Тогда + СохраняемыеФайлы = СохранитьНаСервере(ВыделенныеСтроки); + Иначе + Заголовок = НСтр("ru = 'Выберите каталог для сохранения исправлений конфигурации'"); + ФайловаяСистемаКлиент.ВыбратьКаталог(ОписаниеОповещения, Заголовок); + Возврат; + КонецЕсли; + + Если СохраняемыеФайлы.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + ПараметрыСохранения = ФайловаяСистемаКлиент.ПараметрыСохраненияФайла(); + ПараметрыСохранения.Диалог.Заголовок = НСтр("ru = 'Выберите файл для сохранения исправления конфигурации'"); + ПараметрыСохранения.Диалог.Фильтр = НСтр("ru = 'Файлы исправлений конфигурации (*.cfe)|*.cfe|Все файлы (*.*)|*.*'"); + + ФайловаяСистемаКлиент.СохранитьФайлы(Неопределено, СохраняемыеФайлы, ПараметрыСохранения); + +КонецПроцедуры + +#КонецОбласти + #Область СлужебныеПроцедурыИФункции &НаСервере @@ -90,7 +122,7 @@ Продолжить; КонецЕсли; - Если ОтображаемыеИсправления <> Неопределено И ОтображаемыеИсправления.НайтиПоЗначению(Расширение.Имя) = Неопределено Тогда + Если Фильтр <> Неопределено И Фильтр.НайтиПоЗначению(Расширение.Имя) = Неопределено Тогда Продолжить; КонецЕсли; @@ -221,4 +253,53 @@ ОбновитьСписокИсправлений(); КонецПроцедуры +&НаКлиенте +Процедура СохранитьКакЗавершение(ПутьККаталогу, ВыделенныеСтроки) Экспорт + + СохраняемыеФайлы = СохранитьНаСервере(ВыделенныеСтроки, ПутьККаталогу); + + Если СохраняемыеФайлы.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + ПараметрыСохранения = ФайловаяСистемаКлиент.ПараметрыСохраненияФайла(); + ПараметрыСохранения.Интерактивно = Ложь; + + ФайловаяСистемаКлиент.СохранитьФайлы(Неопределено, СохраняемыеФайлы, ПараметрыСохранения); + +КонецПроцедуры + +&НаСервере +Функция СохранитьНаСервере(ИдентификаторыСтрок, ПутьККаталогу = "") + + СохраняемыеФайлы = Новый Массив; + Для Каждого ИдентификаторСтроки Из ИдентификаторыСтрок Цикл + СтрокаСписка = УстановленныеИсправления.НайтиПоИдентификатору(ИдентификаторСтроки); + ИдентификаторРасширения = СтрокаСписка.ИдентификаторРасширения; + Расширение = НайтиРасширение(ИдентификаторРасширения); + + Если Расширение <> Неопределено Тогда + Если ЗначениеЗаполнено(ПутьККаталогу) Тогда + Префикс = ПутьККаталогу + ПолучитьРазделительПути(); + Иначе + Префикс = ""; + КонецЕсли; + Имя = Префикс + Расширение.Имя + "_" + Расширение.Версия + ".cfe"; + Хранение = ПоместитьВоВременноеХранилище(Расширение.ПолучитьДанные(), ЭтотОбъект.УникальныйИдентификатор); + ОписаниеПередаваемогоФайла = Новый ОписаниеПередаваемогоФайла(Имя, Хранение); + СохраняемыеФайлы.Добавить(ОписаниеПередаваемогоФайла); + КонецЕсли; + КонецЦикла; + + Возврат СохраняемыеФайлы; + +КонецФункции + +&НаСервереБезКонтекста +Функция НайтиРасширение(ИдентификаторРасширения) + + Возврат Справочники.ВерсииРасширений.НайтиРасширение(ИдентификаторРасширения); + +КонецФункции + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonForms/УточнениеКонтактов/Module.bsl b/SSL/src/CommonForms/УточнениеКонтактов/Module.bsl index 7b47a6598..ecd890165 100644 --- a/SSL/src/CommonForms/УточнениеКонтактов/Module.bsl +++ b/SSL/src/CommonForms/УточнениеКонтактов/Module.bsl @@ -72,8 +72,8 @@ ТекущиеДанные = Элементы.ТаблицаКонтактов.ТекущиеДанные; ТекущиеДанные.Контакт = Параметр.ВыбранныйКонтакт; - УстановитьСнятьПризнакИзменятьЕслиНеобходимо(ТекущиеДанные); ЗаполнитьАдресаКонтакта(Элементы.ТаблицаКонтактов.ТекущаяСтрока); + УстановитьСнятьПризнакИзменятьЕслиНеобходимо(ТекущиеДанные); Модифицированность = Истина; КонецЕсли; @@ -635,14 +635,12 @@ |ГДЕ | ВсеКонтакты.Изменять"; - Запрос.УстановитьПараметр("ТаблицаКонтакты",ТаблицаКонтактов.Выгрузить()); - + Запрос.УстановитьПараметр("ТаблицаКонтакты", ТаблицаКонтактов.Выгрузить()); Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл НачатьТранзакцию(); - Попытка МетаданныеКонтакта = Выборка.Контакт.Метаданные(); @@ -765,7 +763,7 @@ ЭлементБлокировки = Блокировка.Добавить(МетаданныеВходящееПисьмо.ПолноеИмя()); ИсточникБлокировки = Новый ТаблицаЗначений; - ИсточникБлокировки.Колонки.Добавить("Письмо",Новый ОписаниеТипов("ДокументСсылка.ЭлектронноеПисьмоВходящее")); + ИсточникБлокировки.Колонки.Добавить("Письмо", Новый ОписаниеТипов("ДокументСсылка.ЭлектронноеПисьмоВходящее")); ИсточникБлокировки.ЗагрузитьКолонку(МассивВходящихПисем, "Письмо"); ЭлементБлокировки.ИсточникДанных = ИсточникБлокировки; @@ -781,7 +779,7 @@ ЭлементБлокировки = Блокировка.Добавить(МетаданныеИсходящееПисьмо.ПолноеИмя()); ИсточникБлокировки = Новый ТаблицаЗначений; - ИсточникБлокировки.Колонки.Добавить("Письмо",Новый ОписаниеТипов("ДокументСсылка.ЭлектронноеПисьмоИсходящее")); + ИсточникБлокировки.Колонки.Добавить("Письмо", Новый ОписаниеТипов("ДокументСсылка.ЭлектронноеПисьмоИсходящее")); ИсточникБлокировки.ЗагрузитьКолонку(МассивИсходящихПисем, "Письмо"); ЭлементБлокировки.ИсточникДанных = ИсточникБлокировки; @@ -803,7 +801,7 @@ ПисьмоОбъект.ОтправительКонтакт = КонтактОбъект.Ссылка; Иначе НайденныеСтроки = - ПисьмоОбъект[ВыборкаДеталиПисьма.ИмяТабличнойЧасти].НайтиСтроки(Новый Структура("Адрес",Выборка.Адрес)); + ПисьмоОбъект[ВыборкаДеталиПисьма.ИмяТабличнойЧасти].НайтиСтроки(Новый Структура("Адрес", Выборка.Адрес)); Для каждого НайденнаяСтрока Из НайденныеСтроки Цикл Если Не ЗначениеЗаполнено(НайденнаяСтрока.Контакт) Тогда НайденнаяСтрока.Контакт = КонтактОбъект.Ссылка; @@ -816,20 +814,19 @@ КонецЦикла; - ЗафиксироватьТранзакцию(); + ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Во время обновления контактной информации %1 произошла ошибка - |%2'", ОбщегоНазначения.КодОсновногоЯзыка()), - Выборка.Контакт,ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + НСтр("ru = 'Во время обновления контактной информации %1 произошла ошибка + |%2'", ОбщегоНазначения.КодОсновногоЯзыка()), + Выборка.Контакт, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ЗаписьЖурналаРегистрации(УправлениеЭлектроннойПочтой.СобытиеЖурналаРегистрации(), - УровеньЖурналаРегистрации.Ошибка, , , - ТекстСообщенияОбОшибке); + УровеньЖурналаРегистрации.Ошибка, , , ТекстСообщенияОбОшибке); Продолжить; КонецПопытки; diff --git a/SSL/src/CommonForms/ФормаВариантаОтчета/Module.bsl b/SSL/src/CommonForms/ФормаВариантаОтчета/Module.bsl index a29483fa1..0d49adc0d 100644 --- a/SSL/src/CommonForms/ФормаВариантаОтчета/Module.bsl +++ b/SSL/src/CommonForms/ФормаВариантаОтчета/Module.bsl @@ -10,7 +10,6 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - ОпределитьПоведениеВМобильномКлиенте(); ФормаПараметры = Новый Структура( @@ -45,11 +44,18 @@ КонецЕсли; Параметры.Свойство("ИдентификаторЭлементаСтруктурыНастроек", ИдентификаторЭлементаСтруктурыНастроек); + + ПутьКЭлементуСтруктурыНастроек = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры( + Параметры, "ПутьКЭлементуСтруктурыНастроек", ""); + + ЭлементСтруктуры = ОтчетыСервер.ЭлементНастроекПоПолномуПути(НастройкиКД, ПутьКЭлементуСтруктурыНастроек); + Если ЭлементСтруктуры <> Неопределено Тогда + ИдентификаторЭлементаСтруктурыНастроек = НастройкиКД.ПолучитьИдентификаторПоОбъекту(ЭлементСтруктуры); + КонецЕсли; КонецПроцедуры &НаСервере Процедура ПередЗагрузкойВариантаНаСервере(НовыеНастройкиКД) - Если ТипЗнч(ФормаПараметры.Отбор) = Тип("Структура") Тогда ОтчетыСервер.УстановитьФиксированныеОтборы(ФормаПараметры.Отбор, НовыеНастройкиКД, НастройкиОтчета); КонецЕсли; @@ -57,9 +63,9 @@ &НаСервере Процедура ПриЗагрузкеПользовательскихНастроекНаСервере(Настройки) - НовыеНастройкиКД = Отчет.КомпоновщикНастроек.ПолучитьНастройки(); + НовыеНастройки = Отчет.КомпоновщикНастроек.ПолучитьНастройки(); Отчет.КомпоновщикНастроек.ЗагрузитьФиксированныеНастройки(Новый НастройкиКомпоновкиДанных); - ОтчетыКлиентСервер.ЗагрузитьНастройки(Отчет.КомпоновщикНастроек, НовыеНастройкиКД); + ОтчетыКлиентСервер.ЗагрузитьНастройки(Отчет.КомпоновщикНастроек, НовыеНастройки); КонецПроцедуры &НаКлиенте diff --git a/SSL/src/CommonForms/ФормаНастроекОтчета/Form.form b/SSL/src/CommonForms/ФормаНастроекОтчета/Form.form index 2aebf597c..76568caf0 100644 --- a/SSL/src/CommonForms/ФормаНастроекОтчета/Form.form +++ b/SSL/src/CommonForms/ФормаНастроекОтчета/Form.form @@ -5880,15 +5880,6 @@ true true Normal - - System.DefaultGUIFont - Arial - 10.0 - true - false - false - false - @@ -9477,19 +9468,6 @@ true - - ШрифтОбычнойГруппы - 23 - - Font - - - true - - - true - - РасширенныйРежим @@ -10039,19 +10017,6 @@ </edit> </columns> </attributes> - <attributes> - <name>ЦветНеактивныхЗначенийТаблицы</name> - <id>27</id> - <valueType> - <types>Color</types> - </valueType> - <view> - <common>true</common> - </view> - <edit> - <common>true</common> - </edit> - </attributes> <attributes> <name>КомпоновщикНастроек</name> <id>22</id> diff --git a/SSL/src/CommonForms/ФормаНастроекОтчета/Module.bsl b/SSL/src/CommonForms/ФормаНастроекОтчета/Module.bsl index 68be25973..acdd8bb21 100644 --- a/SSL/src/CommonForms/ФормаНастроекОтчета/Module.bsl +++ b/SSL/src/CommonForms/ФормаНастроекОтчета/Module.bsl @@ -37,6 +37,7 @@ Если Не Параметры.Свойство("НастройкиОтчета", НастройкиОтчета) Тогда ВызватьИсключение НСтр("ru = 'Не передан служебный параметр ""НастройкиОтчета"".'"); КонецЕсли; + Если Не Параметры.Свойство("ВариантНаименование", ВариантНаименование) Тогда ВызватьИсключение НСтр("ru = 'Не передан служебный параметр ""ВариантНаименование"".'"); КонецЕсли; @@ -57,6 +58,14 @@ Высота = 0; КлючСохраненияПоложенияОкна = КлючСохраненияПоложенияОкна + ".Узел"; + ПутьКЭлементуСтруктурыНастроек = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры( + Параметры, "ПутьКЭлементуСтруктурыНастроек", ""); + + ЭлементСтруктуры = ОтчетыСервер.ЭлементНастроекПоПолномуПути(НастройкиКД, ПутьКЭлементуСтруктурыНастроек); + Если ЭлементСтруктуры <> Неопределено Тогда + ИдентификаторЭлементаСтруктурыНастроек = НастройкиКД.ПолучитьИдентификаторПоОбъекту(ЭлементСтруктуры); + КонецЕсли; + Если Не Параметры.Свойство("Заголовок", Заголовок) Тогда ВызватьИсключение НСтр("ru = 'Не передан служебный параметр ""Заголовок"".'"); КонецЕсли; @@ -68,6 +77,7 @@ Если Не ЗначениеЗаполнено(ВариантНаименование) Тогда ВариантНаименование = НастройкиОтчета.Наименование; КонецЕсли; + Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Настройки отчета ""%1""'"), ВариантНаименование); КонецЕсли; @@ -93,7 +103,8 @@ Отчет.КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(НастройкиОтчета.АдресСхемы)); КонецЕсли; - ЦветНеактивныхЗначенийТаблицы = ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет; + ШрифтВажнойНадписи = Метаданные.ЭлементыСтиля.ВажнаяНадписьШрифт; + Элементы.СтруктураВариантаЗаголовок.Шрифт = ШрифтВажнойНадписи.Значение; // Регистрация команд и реквизитов формы, которые не удаляются при перезаполнении быстрых настроек. НаборРеквизитов = ПолучитьРеквизиты(); @@ -2970,12 +2981,14 @@ ТекущееЗначение = Строка.ПравоеЗначение; КонецЕсли; + ЗначенияДляВыбора = ЗначенияДляВыбора(Строка); + ПараметрыОткрытия = Новый Структура; - ПараметрыОткрытия.Вставить("Отмеченные", ОтчетыКлиентСервер.ЗначенияСписком(ТекущееЗначение, Истина)); + ПараметрыОткрытия.Вставить("Отмеченные", ОтчетыКлиентСервер.ЗначенияСписком(ТекущееЗначение)); ПараметрыОткрытия.Вставить("ОписаниеТипов", Строка.ТипЗначения); - ПараметрыОткрытия.Вставить("ЗначенияДляВыбора", ЗначенияДляВыбора(Строка)); - ПараметрыОткрытия.Вставить("ЗначенияДляВыбораЗаполнены", Строка.ДоступныеЗначения <> Неопределено); - ПараметрыОткрытия.Вставить("ОграничиватьВыборУказаннымиЗначениями", ПараметрыОткрытия.ЗначенияДляВыбораЗаполнены); + ПараметрыОткрытия.Вставить("ЗначенияДляВыбора", ЗначенияДляВыбора); + ПараметрыОткрытия.Вставить("ЗначенияДляВыбораЗаполнены", ЗначенияДляВыбора.Количество() > 0); + ПараметрыОткрытия.Вставить("ОграничиватьВыборУказаннымиЗначениями", Строка.ДоступныеЗначения <> Неопределено); ПараметрыОткрытия.Вставить("Представление", Строка.ПредставлениеПользовательскойНастройки); ПараметрыОткрытия.Вставить("ПараметрыВыбора", Новый Массив(ПолеЗначения.ПараметрыВыбора)); ПараметрыОткрытия.Вставить("ВыборГруппИЭлементов", ПолеЗначения.ВыборГруппИЭлементов); @@ -2993,6 +3006,8 @@ ЗначенияДляВыбора = Новый СписокЗначений; КонецЕсли; + ЗначенияДляВыбора.ТипЗначения = Строка.ТипЗначения; + СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек( Отчет.КомпоновщикНастроек, ?(Строка.ЭтоПараметр, "ПараметрыДанных", "Отбор")); @@ -3009,7 +3024,7 @@ ЗначениеОтбора = КэшЗначенийОтборов.Получить(ЭлементНастройки.ИдентификаторПользовательскойНастройки); Если ЗначениеОтбора <> Неопределено Тогда - ЗначенияДляВыбора = ЗначениеОтбора; + ОтчетыКлиентСервер.ДополнитьСписок(ЗначенияДляВыбора, ЗначениеОтбора); КонецЕсли; Возврат ЗначенияДляВыбора; @@ -3232,7 +3247,9 @@ &НаКлиенте Функция НайтиПолеПорядка(СортировкаУзлаНастроек, Поле) Для Каждого ЭлементНастройки Из СортировкаУзлаНастроек.Элементы Цикл - Если ЭлементНастройки.Поле = Поле Тогда + Если ТипЗнч(ЭлементНастройки) <> Тип("АвтоЭлементПорядкаКомпоновкиДанных") + И ЭлементНастройки.Поле = Поле Тогда + Возврат Поле; КонецЕсли; КонецЦикла; @@ -3682,14 +3699,27 @@ ПользовательскиеНастройки = Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы; Коллекция = Узел[ИмяКоллекции]; + ТипКоллекции = ТипЗнч(Коллекция); + ИменаКоллекций = ИменаКоллекцийЭлементаСтруктуры(Коллекция); - // Добавление заголовка коллекции. - Если ИмяКоллекции <> "Структура" - И (ТипЗнч(Коллекция) = Тип("КоллекцияЭлементовСтруктурыТаблицыКомпоновкиДанных") - Или ТипЗнч(Коллекция) = Тип("КоллекцияЭлементовСтруктурыДиаграммыКомпоновкиДанных")) Тогда + Если ТипКоллекции = Тип("КоллекцияЭлементовСтруктурыНастроекКомпоновкиДанных") Тогда + + Если ЗначениеЗаполнено(Коллекция.ИдентификаторПользовательскойНастройки) Тогда + СодержитПользовательскиеЭлементыСтруктуры = Истина; + КонецЕсли; + + ИначеЕсли ИменаКоллекций.Найти(ИмяКоллекции) <> Неопределено + И (ТипКоллекции = Тип("КоллекцияЭлементовСтруктурыТаблицыКомпоновкиДанных") + Или ТипКоллекции = Тип("КоллекцияЭлементовСтруктурыДиаграммыКомпоновкиДанных")) Тогда + Строка = Строки.Добавить(); Строка.Идентификатор = СвойствоЭлементаСтруктуры.ПолучитьИдентификаторПоОбъекту(Коллекция); + Строка.Представление = ИмяКоллекции; + Если ЗначениеЗаполнено(Коллекция.ПредставлениеПользовательскойНастройки) Тогда + Строка.Представление = Коллекция.ПредставлениеПользовательскойНастройки; + КонецЕсли; + Строка.Картинка = -1; Строка.Тип = Коллекция; Строки = Строка.ПолучитьЭлементы(); @@ -3703,7 +3733,12 @@ ЭлементПользовательскойНастройки = ПользовательскиеНастройки.Найти(Элемент.ИдентификаторПользовательскойНастройки); Строка = Строки.Добавить(); - Строка.Использование = Истина; + + Если ЭлементПользовательскойНастройки = Неопределено Тогда + Строка.Использование = Элемент.Использование; + Иначе + Строка.Использование = ЭлементПользовательскойНастройки.Использование; + КонецЕсли; Если ТипЗнч(Элемент) = Тип("НастройкиВложенногоОбъектаКомпоновкиДанных") Тогда Узел = Элемент.Настройки; @@ -3743,8 +3778,9 @@ Или ТипЭлемента = Тип("ГруппировкаДиаграммыКомпоновкиДанных") Тогда СвойстваЭлемента.Представление = ПредставлениеПолейГруппировки(Элемент, СвойстваЭлемента.ПометкаУдаления); - ИменаКоллекций = "Структура"; + ИначеЕсли ТипЭлемента = Тип("НастройкиВложенногоОбъектаКомпоновкиДанных") Тогда + Объекты = ДоступныеОбъектыНастройки(Элемент); ОписаниеОбъекта = Объекты.Найти(Элемент.ИдентификаторОбъекта); @@ -3756,26 +3792,35 @@ Если Не ЗначениеЗаполнено(СвойстваЭлемента.Представление) Тогда СвойстваЭлемента.Представление = НСтр("ru = 'Вложенная группировка'"); КонецЕсли; - ИменаКоллекций = "Структура"; + ИначеЕсли ТипЭлемента = Тип("ТаблицаКомпоновкиДанных") Тогда + СвойстваЭлемента.Представление = НСтр("ru = 'Таблица'"); - ИменаКоллекций = "Строки, Колонки"; + Если ЗначениеЗаполнено(Элемент.ПредставлениеПользовательскойНастройки) Тогда + СвойстваЭлемента.Представление = Элемент.ПредставлениеПользовательскойНастройки; + КонецЕсли; + ИначеЕсли ТипЭлемента = Тип("ДиаграммаКомпоновкиДанных") Тогда + СвойстваЭлемента.Представление = НСтр("ru = 'Диаграмма'"); - ИменаКоллекций = "Точки, Серии"; + Если ЗначениеЗаполнено(Элемент.ПредставлениеПользовательскойНастройки) Тогда + СвойстваЭлемента.Представление = Элемент.ПредставлениеПользовательскойНастройки; + КонецЕсли; + Иначе СвойстваЭлемента.Представление = Строка(ТипЭлемента); - ИменаКоллекций = ""; КонецЕсли; Если ТипЭлемента <> Тип("НастройкиВложенногоОбъектаКомпоновкиДанных") Тогда + ЗаголовокЭлемента = Элемент.ПараметрыВывода.Элементы.Найти("Заголовок"); Если ЗаголовокЭлемента <> Неопределено Тогда СвойстваЭлемента.Заголовок = ЗаголовокЭлемента.Значение; КонецЕсли; + КонецЕсли; - СвойстваЭлемента.ИменаКоллекций = СтрРазделить(ИменаКоллекций, ", ", Ложь); + СвойстваЭлемента.ИменаКоллекций = ИменаКоллекцийЭлементаСтруктуры(Элемент); ПредставлениеТипаЭлемента = ОтчетыКлиентСервер.ТипНастройкиСтрокой(ТипЭлемента); СостояниеЭлемента = ?(СвойстваЭлемента.ПометкаУдаления, "ПометкаУдаления", Неопределено); @@ -4294,6 +4339,12 @@ ПредставлениеЭлемента = ПредставлениеЭлемента + " """ + Строка.Представление + """"; КонецЕсли; + СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек(Отчет.КомпоновщикНастроек, "Структура"); + ЭлементНастройки = ЭлементНастройки(СвойствоЭлементаСтруктуры, Строка); + + ПутьКЭлементуСтруктурыНастроек = ОтчетыКлиент.ПолныйПутьКЭлементуНастроек( + Отчет.КомпоновщикНастроек.Настройки, ЭлементНастройки); + ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("КлючВарианта", Строка(КлючТекущегоВарианта)); ПараметрыФормы.Вставить("Вариант", Отчет.КомпоновщикНастроек.Настройки); @@ -4301,6 +4352,7 @@ ПараметрыФормы.Вставить("НастройкиОтчета", НастройкиОтчета); ПараметрыФормы.Вставить("ВариантНаименование", ВариантНаименование); ПараметрыФормы.Вставить("ИдентификаторЭлементаСтруктурыНастроек", Строка.Идентификатор); + ПараметрыФормы.Вставить("ПутьКЭлементуСтруктурыНастроек", ПутьКЭлементуСтруктурыНастроек); ПараметрыФормы.Вставить("ТипЭлементаСтруктурыНастроек", Строка.Тип); ПараметрыФормы.Вставить("Заголовок", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( ШаблонЗаголовка, ПредставлениеЭлемента, ВариантНаименование)); @@ -4364,11 +4416,16 @@ Сведения = ОтчетыКлиент.СведенияОЭлементеНастройки(Отчет.КомпоновщикНастроек, ПараметрыЗаполнения.Индекс); + ВыборГруппИЭлементов = Неопределено; + Если Сведения.Описание <> Неопределено Тогда + ВыборГруппИЭлементов = Сведения.Описание.ВыборГруппИЭлементов; + КонецЕсли; + Условие = ОтчетыКлиентСервер.УсловиеЭлементаНастройки(Сведения.ЭлементПользовательскойНастройки, Сведения.Описание); ПолеЗначения.ВыборГруппИЭлементов = ОтчетыКлиентСервер.ЗначениеТипаГруппыИЭлементы( - Сведения.Описание.ВыборГруппИЭлементов, Условие); + ВыборГруппИЭлементов, Условие); ПараметрыЗаполнения.ВыборГруппИЭлементов = ОтчетыКлиент.ЗначениеТипаИспользованиеГруппИЭлементов( - Сведения.Описание.ВыборГруппИЭлементов, Условие); + ВыборГруппИЭлементов, Условие); РасширенноеОписаниеТипов = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры( Отчет.КомпоновщикНастроек.Настройки.ДополнительныеСвойства, "РасширенноеОписаниеТипов", Новый Соответствие); @@ -4590,6 +4647,9 @@ ИмяКоллекции = ИмяКоллекцииНастроекПоИдентификатору(Строка.Идентификатор); ЭлементыНастроек = ЭлементыНастроек(СвойствоЭлементаСтруктуры, РодительЭлементаНастройки, ИмяКоллекции); + Строка.Использование = Ложь; + ИзменитьИспользованиеСвязанныхЭлементовНастроек(Элемент.Имя, Строка, ЭлементНастройки); + ЭлементыНастроек.Удалить(ЭлементНастройки); Строки.Удалить(Строка); КонецЦикла; @@ -4638,6 +4698,12 @@ КомпоновщикНастроек, КлючСвойства, ИдентификаторЭлементаСтруктурыНастроек, РасширенныйРежим); ЭлементНастройки = ЭлементНастройки(СвойствоЭлементаСтруктуры, Строка); + РодительЭлементаНастройки = ПолучитьРодителяЭлементаНастройки(СвойствоЭлементаСтруктуры, ЭлементНастройки); + + Если ТипЗнч(РодительЭлементаНастройки) = Тип("НастройкиВложенногоОбъектаКомпоновкиДанных") Тогда + ЭлементНастройки = РодительЭлементаНастройки; + КонецЕсли; + ЭлементНастройки.Использование = Строка.Использование; Если Строка.Свойство("ЭтоПараметрВывода") @@ -4665,19 +4731,21 @@ &НаКлиенте Процедура ИзменитьИспользованиеСвязанныхЭлементовНастроек(ИмяКоллекции, Строка, ЭлементНастройки) Если ИмяКоллекции = "СоставГруппировки" Тогда - СвязаннаяКоллекция = "ВыбранныеПоля"; + СвязанныеКоллекции = СтрРазделить("ВыбранныеПоля, Сортировка", ", ", Ложь); ИначеЕсли ИмяКоллекции = "ВыбранныеПоля" Тогда - СвязаннаяКоллекция = "СоставГруппировки"; + СвязанныеКоллекции = СтрРазделить("СоставГруппировки, Сортировка", ", ", Ложь); Иначе - СвязаннаяКоллекция = Неопределено; + СвязанныеКоллекции = Новый Массив(1); КонецЕсли; - Если СвязаннаяКоллекция <> Неопределено И ЗначениеЗаполнено(Строка.Поле) Тогда - Условие = Новый Структура("Поле", Строка.Поле); - ИзменитьИспользованиеПоУсловию(СвязаннаяКоллекция, Условие, Строка.Использование); - ИначеЕсли Строка.Свойство("ЭтоПараметрВывода") И Строка.ЭтоПараметрВывода Тогда - СинхронизироватьПредопределенныеПараметрыВывода(Строка.Использование, ЭлементНастройки); - КонецЕсли; + Для Каждого СвязаннаяКоллекция Из СвязанныеКоллекции Цикл + Если СвязаннаяКоллекция <> Неопределено И ЗначениеЗаполнено(Строка.Поле) Тогда + Условие = Новый Структура("Поле", Строка.Поле); + ИзменитьИспользованиеПоУсловию(СвязаннаяКоллекция, Условие, Строка.Использование); + ИначеЕсли Строка.Свойство("ЭтоПараметрВывода") И Строка.ЭтоПараметрВывода Тогда + СинхронизироватьПредопределенныеПараметрыВывода(Строка.Использование, ЭлементНастройки); + КонецЕсли; + КонецЦикла; КонецПроцедуры &НаКлиенте @@ -5471,8 +5539,11 @@ #Область СвойстваЭлементовСтраницыСтруктураВарианта - ОтображатьСтруктуруВарианта = (СодержитПользовательскиеЭлементыСтруктуры Или ЭтоРасширенныйРежим) - И Не РежимИзмененияЭлементаСтруктурыНастроек; + ОтображатьСтруктуруВарианта = + НастройкиОтчета.РазрешеноИзменятьСтруктуру + И Не РежимИзмененияЭлементаСтруктурыНастроек + И (СодержитПользовательскиеЭлементыСтруктуры Или ЭтоРасширенныйРежим); + Элементы.СтраницаСтруктураВарианта.Видимость = ОтображатьСтруктуруВарианта; Элементы.КомандыСтруктурыВарианта_Добавление.Видимость = ЭтоРасширенныйРежим; @@ -5968,6 +6039,8 @@ // ЭтоПредопределенныйЗаголовок = Истина. // + ЦветТекстаЗапрещеннойЯчейки = Метаданные.ЭлементыСтиля.ТекстЗапрещеннойЯчейкиЦвет; + Элемент = УсловноеОформление.Элементы.Добавить(); ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); @@ -5975,7 +6048,7 @@ ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; ОтборЭлемента.ПравоеЗначение = Истина; - Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет); + Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветТекстаЗапрещеннойЯчейки.Значение); ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыПредставлениеПользовательскойНастройки.Имя); @@ -6100,6 +6173,8 @@ #Область УсловноеОформлениеТаблицыФормыСтруктураВарианта + ШрифтВажнойНадписи = Метаданные.ЭлементыСтиля.ВажнаяНадписьШрифт.Значение; + Элемент = УсловноеОформление.Элементы.Добавить(); ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); @@ -6107,7 +6182,7 @@ ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; ОтборЭлемента.ПравоеЗначение = Истина; - Элемент.Оформление.УстановитьЗначениеПараметра("Шрифт", Новый Шрифт(,, Истина)); + Элемент.Оформление.УстановитьЗначениеПараметра("Шрифт", ШрифтВажнойНадписи); ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СтруктураВариантаПредставление.Имя); @@ -6125,7 +6200,7 @@ ОтборЭлемента.ПравоеЗначение = 0; Элемент.Оформление.УстановитьЗначениеПараметра("Текст", Новый ПолеКомпоновкиДанных("СтруктураВарианта.Заголовок")); - Элемент.Оформление.УстановитьЗначениеПараметра("Шрифт", Новый Шрифт(,, Истина)); + Элемент.Оформление.УстановитьЗначениеПараметра("Шрифт", ШрифтВажнойНадписи); ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СтруктураВариантаПредставление.Имя); @@ -6151,6 +6226,11 @@ Процедура ЗагрузитьНастройкиВКомпоновщик(ПараметрыЗагрузки) ПроверитьПараметрыЗагрузки(ПараметрыЗагрузки); + ОтчетОбъект = ОтчетыСервер.ОтчетОбъект(ПараметрыЗагрузки.ОтчетОбъектИлиПолноеИмя); + Если НастройкиОтчета.События.ПередЗаполнениемПанелиБыстрыхНастроек Тогда + ОтчетОбъект.ПередЗаполнениемПанелиБыстрыхНастроек(ЭтотОбъект, ПараметрыЗагрузки); + КонецЕсли; + ДоступныеНастройки = ОтчетыСервер.ДоступныеНастройки(ПараметрыЗагрузки, НастройкиОтчета); ОбновитьНастройкиВарианта = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыЗагрузки, "ОбновитьНастройкиВарианта", Ложь); @@ -6162,7 +6242,6 @@ ОтчетыСервер.СброситьПользовательскиеНастройки(ДоступныеНастройки, ПараметрыЗагрузки); - ОтчетОбъект = ОтчетыСервер.ОтчетОбъект(ПараметрыЗагрузки.ОтчетОбъектИлиПолноеИмя); Если НастройкиОтчета.События.ПередЗагрузкойНастроекВКомпоновщик Тогда ОтчетОбъект.ПередЗагрузкойНастроекВКомпоновщик( ЭтотОбъект, @@ -6216,7 +6295,7 @@ &НаСервере Процедура ПроверитьПараметрыЗагрузки(ПараметрыЗагрузки) - Если ПараметрыЗагрузки = Неопределено Тогда + Если ТипЗнч(ПараметрыЗагрузки) <> Тип("Структура") Тогда ПараметрыЗагрузки = Новый Структура; КонецЕсли; @@ -6299,7 +6378,12 @@ ПутьКСписку = ПутьКДаннымЭлементов.ПоИндексу[Индекс]; Список = Элементы.Найти(ПутьКСписку); - Список.ЦветТекста = ?(ЭлементНастройки.Использование, Новый Цвет, ЦветНеактивныхЗначенийТаблицы); + Если ЭлементНастройки.Использование Тогда + Список.ЦветТекста = Новый Цвет; + Иначе + ПараметрКлиента = СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиента(); + Список.ЦветТекста = ПараметрКлиента.ЭлементыСтиля.ТекстЗапрещеннойЯчейкиЦвет; + КонецЕсли; КонецПроцедуры &НаСервере @@ -6546,13 +6630,21 @@ Если ТипЭлемента = Тип("ГруппировкаКомпоновкиДанных") Или ТипЭлемента = Тип("ГруппировкаТаблицыКомпоновкиДанных") Или ТипЭлемента = Тип("ГруппировкаДиаграммыКомпоновкиДанных") - Или ТипЭлемента = Тип("НастройкиВложенногоОбъектаКомпоновкиДанных") Тогда + Или ТипЭлемента = Тип("НастройкиВложенногоОбъектаКомпоновкиДанных") + Или ТипЭлемента = Тип("КоллекцияЭлементовСтруктурыНастроекКомпоновкиДанных") Тогда ИменаКоллекций = "Структура"; - ИначеЕсли ТипЭлемента = Тип("ТаблицаКомпоновкиДанных") Тогда + + ИначеЕсли ТипЭлемента = Тип("ТаблицаКомпоновкиДанных") + Или ТипЭлемента = Тип("КоллекцияЭлементовСтруктурыТаблицыКомпоновкиДанных") Тогда + ИменаКоллекций = "Строки, Колонки"; - ИначеЕсли ТипЭлемента = Тип("ДиаграммаКомпоновкиДанных") Тогда + + ИначеЕсли ТипЭлемента = Тип("ДиаграммаКомпоновкиДанных") + Или ТипЭлемента = Тип("КоллекцияЭлементовСтруктурыДиаграммыКомпоновкиДанных") Тогда + ИменаКоллекций = "Точки, Серии"; + КонецЕсли; Возврат СтрРазделить(ИменаКоллекций, ", ", Ложь); diff --git a/SSL/src/CommonForms/ФормаОтчета/Form.form b/SSL/src/CommonForms/ФормаОтчета/Form.form index 0d9100908..5e4ef7929 100644 --- a/SSL/src/CommonForms/ФормаОтчета/Form.form +++ b/SSL/src/CommonForms/ФормаОтчета/Form.form @@ -395,17 +395,75 @@ <items xsi:type="form:FormGroup"> <name>ГруппаВывод</name> <id>534</id> - <items xsi:type="form:Button"> - <name>Печать</name> - <id>52</id> + <items xsi:type="form:FormGroup"> + <name>ГруппаПечать</name> + <id>826</id> + <items xsi:type="form:Button"> + <name>Печать</name> + <id>52</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <extendedTooltip> + <name>ПечатьРасширеннаяПодсказка</name> + <id>138</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <commandName>Form.StandardCommand.Print</commandName> + <buttonImportance>Normal</buttonImportance> + <representation>Picture</representation> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <placementArea>UserCmds</placementArea> + <representationInContextMenu>Auto</representationInContextMenu> + <locationInCommandBar>InCommandBarAndInAdditionalSubmenu</locationInCommandBar> + </items> + <items xsi:type="form:Button"> + <name>ПредварительныйПросмотр</name> + <id>90</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <extendedTooltip> + <name>ПредварительныйПросмотрРасширеннаяПодсказка</name> + <id>139</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <commandName>Form.Item.ОтчетТабличныйДокумент.StandardCommand.Preview</commandName> + <buttonImportance>Normal</buttonImportance> + <representation>Picture</representation> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <placementArea>UserCmds</placementArea> + <representationInContextMenu>Auto</representationInContextMenu> + <locationInCommandBar>InCommandBarAndInAdditionalSubmenu</locationInCommandBar> + </items> <visible>true</visible> <enabled>true</enabled> <userVisible> <common>true</common> </userVisible> + <title> + <key>ru</key> + <value>Печать</value> + - ПечатьРасширеннаяПодсказка - 138 + ГруппаПечатьРасширеннаяПодсказка + 827 Label true true @@ -413,41 +471,9 @@ Left - Form.StandardCommand.Print - Normal - Picture - true - true - UserCmds - Auto - InCommandBarAndInAdditionalSubmenu - - - ПредварительныйПросмотр - 90 - true - true - - true - - - ПредварительныйПросмотрРасширеннаяПодсказка - 139 - Label - true - true - - Left - - - Form.Item.ОтчетТабличныйДокумент.StandardCommand.Preview - Normal - Picture - true - true - UserCmds - Auto - InCommandBarAndInAdditionalSubmenu + + Compact + Сохранить @@ -636,10 +662,10 @@ - ГруппаПоказатели + КомандыПоказателей 684 - ГруппаВидыПоказателей + КомандыВидовПоказателей 728 РассчитатьСумму @@ -792,7 +818,7 @@ Auto - ГруппаВсеПоказатели + ВсеПоказатели 686 РассчитатьВсеПоказатели @@ -835,7 +861,7 @@ true - ГруппаВсеПоказателиРасширеннаяПодсказка + ВсеПоказателиРасширеннаяПодсказка 687 Label true @@ -860,7 +886,7 @@ Расчет выбранного, либо всех доступных показателей - ГруппаВидыПоказателейРасширеннаяПодсказка + КомандыВидовПоказателейРасширеннаяПодсказка 729 Label true @@ -893,7 +919,7 @@ true - ГруппаПоказателиРасширеннаяПодсказка + КомандыПоказателейРасширеннаяПодсказка 685 Label true @@ -1110,6 +1136,10 @@ СохранитьВариантЕще 738 + + <key>ru</key> + <value>Сохранить...</value> + true true @@ -1189,6 +1219,84 @@ Auto InAdditionalSubmenu + + ГруппаОбменНастройкамиЕще + 820 + + СохранитьВариантОтчетаВФайл + 822 + true + true + + true + + + СохранитьВариантОтчетаВФайлРасширеннаяПодсказка + 823 + Label + true + true + + Left + + + Form.Command.СохранитьВариантОтчетаВФайл + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ОбновитьВариантОтчетаИзФайла + 824 + true + true + + true + + + ОбновитьВариантОтчетаИзФайлаРасширеннаяПодсказка + 825 + Label + true + true + + Left + + + Form.Command.ОбновитьВариантОтчетаИзФайла + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Обмен настройками</value> + + + ГруппаОбменНастройкамиЕщеРасширеннаяПодсказка + 821 + Label + true + true + + Left + + + + true true @@ -1365,6 +1473,33 @@ Auto InAdditionalSubmenu + + ПоделитьсяНастройками + 828 + true + true + + true + + + ПоделитьсяНастройкамиРасширеннаяПодсказка + 829 + Label + true + true + + Left + + + Form.Command.ПоделитьсяНастройками + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + true true @@ -1947,7 +2082,7 @@ - ГруппаВидыПоказателейЕще + КомандыВидовПоказателейЕще 760 РассчитатьСуммуЕще @@ -2105,7 +2240,7 @@ InAdditionalSubmenu - ГруппаВсеПоказателиЕще + ВсеПоказателиЕще 772 РассчитатьВсеПоказателиЕще @@ -2148,7 +2283,7 @@ Все показатели - ГруппаВсеПоказателиЕщеРасширеннаяПодсказка + ВсеПоказателиЕщеРасширеннаяПодсказка 773 Label true @@ -2173,7 +2308,7 @@ Расчет выбранного, либо всех доступных показателей - ГруппаВидыПоказателейЕщеРасширеннаяПодсказка + КомандыВидовПоказателейЕщеРасширеннаяПодсказка 761 Label true @@ -3352,6 +3487,7 @@ ReportSettings DontBlock + Use true Vertical true @@ -3392,7 +3528,7 @@ - ГруппаВидыПоказателейЕще + КомандыВидовПоказателейЕще @@ -3782,8 +3918,8 @@ Number - 15 - 2 + 25 + 5 @@ -3803,8 +3939,8 @@ Number - 15 - 2 + 25 + 5 @@ -3824,8 +3960,8 @@ Number - 17 - 4 + 25 + 5 @@ -3845,8 +3981,8 @@ Number - 15 - 2 + 25 + 5 @@ -3866,8 +4002,8 @@ Number - 15 - 2 + 25 + 5 @@ -3887,8 +4023,8 @@ Number - 17 - 4 + 25 + 5 @@ -3969,6 +4105,41 @@ true + + ОсновнойПоказатель + 8 + + String + + 100 + + + + true + + + true + + + ОсновнойПоказатель + + + + РазвернутьОбластьПоказателей + 9 + + Boolean + + + true + + + true + + + РазвернутьОбластьПоказателей + + ВсеНастройки @@ -4455,6 +4626,78 @@ <currentRowUse>Auto</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> + <formCommands> + <name>СохранитьВариантОтчетаВФайл</name> + <title> + <key>ru</key> + <value>Сохранить в файл...</value> + + 22 + + ru + Сохранить вариант отчета в файл + + + true + + + CommonPicture.СохранитьФайлКак + + + + СохранитьВариантОтчетаВФайл + + + Auto + Auto + + + ОбновитьВариантОтчетаИзФайла + + <key>ru</key> + <value>Обновить из файла...</value> + + 23 + + ru + Обновить вариант отчета из файла + + + true + + + CommonPicture.ОбновитьФайлИзФайлаНаДиске + + + + ОбновитьВариантОтчетаИзФайла + + + Auto + Auto + + + ПоделитьсяНастройками + + <key>ru</key> + <value>Поделиться настройками...</value> + + 24 + + ru + Поделиться настройками + + + true + + + + ПоделитьсяНастройками + + + Auto + Auto + Ссылка diff --git a/SSL/src/CommonForms/ФормаОтчета/Help/ru.html b/SSL/src/CommonForms/ФормаОтчета/Help/ru.html index 4a4a0062d..15680b809 100644 --- a/SSL/src/CommonForms/ФормаОтчета/Help/ru.html +++ b/SSL/src/CommonForms/ФормаОтчета/Help/ru.html @@ -2,62 +2,83 @@

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

    Режим формирования

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

    Варианты отчета

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

      Настройки

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

    Сохранение варианта отчета

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

    Сохранение варианта отчета в файл

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

    Загрузка варианта отчета из файла

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

    Настройки

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

    Изменение условий отборов

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

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

    Другие отчеты

    -

    -

    В окне размещен список похожих по смыслу отчетов.

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

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

    Печать отчета

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

    Отправка отчета по электронной почте

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

    С помощью кнопки  Отправить отчет по электронной почте можно:

    Выбор варианта отчета

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

    Изменение варианта отчета

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

    Сохранение варианта отчета

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

    Сброс настроек

    + +
  • Внесенные изменения можно сохранить в другой вариант отчета.
  • Сброс настроек

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

    Другие доступные действия

    • Для поиска в отчете воспользуйтесь командой Найти. -
    • С помощью кнопок  Свернуть все группы или  Развернуть все группы можно скрыть или показать группировку отчета. -
    • Для сохранения результата отчета в файл нажмите , укажите наименование файла и путь для сохранения. -
    • С помощью команд контекстного меню по правой кнопке мыши можно: +
    • +
    • С помощью кнопок  Свернуть все группы или  Развернуть все группы можно скрыть или показать группировку отчета. +
    • +
    • Для сохранения результата отчета в файл нажмите , укажите наименование файла и путь для сохранения. +
    • +
    • С помощью команд контекстного меню по правой кнопке мыши можно:
      • Открыть значение выделенной ячейки; -
      • Отфильтровать записи по значению выбранного поля; -
      • Упорядочить: +
      • +
      • Отфильтровать записи по значению выбранного поля; +
      • +
      • Упорядочить:
        • по значению выбранного поля (по умолчанию); -
        • Дополнительно - можно выбрать Поле для упорядочивания отчета, Тип упорядочивания - По возрастанию или По убыванию;
      • Сгруппировать: +
      • +
      • Дополнительно - можно выбрать Поле для упорядочивания отчета, Тип упорядочивания - По возрастанию или По убыванию;
    • +
    • Сгруппировать:
      • по значению выбранного поля (по умолчанию); -
      • Дополнительно - можно выбрать Поле для группировки; Тип группировки - Без иерархии, Иерархия, Только иерархия;
    • Оформить: +
    • +
    • Дополнительно - можно выбрать Поле для группировки; Тип группировки - Без иерархии, Иерархия, Только иерархия;
    +
  • Оформить:
  • \ No newline at end of file + +
  • Дополнительно - можно настроить оформление для любых полей отчета.
  • \ No newline at end of file diff --git a/SSL/src/CommonForms/ФормаОтчета/Module.bsl b/SSL/src/CommonForms/ФормаОтчета/Module.bsl index cf0514c6c..54d75e6cb 100644 --- a/SSL/src/CommonForms/ФормаОтчета/Module.bsl +++ b/SSL/src/CommonForms/ФормаОтчета/Module.bsl @@ -77,9 +77,9 @@ КонецЕсли; // Определение настроек отчета. - ТипОтчетаСтрокой = ВариантыОтчетов.ТипОтчета(Параметры.Отчет, Истина); + ТипОтчетаСтрокой = ВариантыОтчетов.ТипОтчетаСтрокой(Параметры.Отчет); Если ТипОтчетаСтрокой = Неопределено Тогда - Информация = ВариантыОтчетов.СформироватьИнформациюОбОтчетеПоПолномуИмени(ОтчетПолноеИмя); + Информация = ВариантыОтчетов.ИнформацияОбОтчете(ОтчетПолноеИмя, Истина); Параметры.Отчет = Информация.Отчет; КонецЕсли; НастройкиОтчета = ВариантыОтчетов.НастройкиФормыОтчета(Параметры.Отчет, КлючТекущегоВарианта, ОтчетОбъект); @@ -105,11 +105,15 @@ НастройкиОтчета.ПрочитатьФлажокФормироватьСразуИзПользовательскихНастроек = Ложь; КонецЕсли; + Если ОбщегоНазначения.ЭтоВебКлиент() Тогда + Элементы.ПредварительныйПросмотр.Видимость = Ложь; + КонецЕсли; + // Параметры по умолчанию. Если Не ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(НастройкиОтчета, "ВыводитьСуммуВыделенныхЯчеек", Истина) Тогда Элементы.ГруппаПоказатель.Видимость = Ложь; Элементы.ОбластьПоказателей.Видимость = Ложь; - Элементы.ГруппаВидыПоказателейЕще.Видимость = Ложь; + Элементы.КомандыВидовПоказателейЕще.Видимость = Ложь; Элементы.ОтчетТабличныйДокумент.УстановитьДействие("ПриАктивизацииОбласти", ""); КонецЕсли; @@ -204,16 +208,20 @@ &НаКлиенте Процедура ПриОткрытии(Отказ) ВыполнятьЗамеры = Ложь; + // В безопасном режиме доп. отчеты формируются непосредственно, // т.к. они не могут подключать себя и использовать собственные методы в фоновых заданиях. Непосредственно = НастройкиОтчета.Внешний Или НастройкиОтчета.Безопасный; ФормированиеПриОткрытии = Ложь; ИнтервалОжидания = ?(ПолучитьСкоростьКлиентскогоСоединения() = СкоростьКлиентскогоСоединения.Низкая, 1, 0.2); + Если Элементы.ФормироватьСразу.Пометка Тогда ФормированиеПриОткрытии = Истина; ПодключитьОбработчикОжидания("СФормировать", 0.1, Истина); КонецЕсли; - РассчитатьПоказатели(); + + ОбщегоНазначенияСлужебныйКлиент.УстановитьВидимостьПанелиПоказателей(Элементы, РазвернутьОбластьПоказателей); + ОбщегоНазначенияСлужебныйКлиент.РассчитатьПоказатели(ЭтотОбъект, "ОтчетТабличныйДокумент", ОсновнойПоказатель); КонецПроцедуры &НаКлиенте @@ -281,11 +289,34 @@ &НаКлиенте Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) ОповещениеОбработано = Ложь; - Если ИмяСобытия = ВариантыОтчетовКлиент.ИмяСобытияИзменениеВарианта() - Или ИмяСобытия = "Запись_НаборКонстант" Тогда + + Если ИмяСобытия = "Запись_НаборКонстант" Тогда + ОповещениеОбработано = Истина; - ВариантыПанелиКлючТекущегоВарианта = " - "; + ВариантыПанелиКлючТекущегоВарианта = ПустойКлючВарианта(); + + ИначеЕсли ИмяСобытия = ВариантыОтчетовКлиент.ИмяСобытияИзменениеВарианта() Тогда + + ОповещениеОбработано = Истина; + КлючВарианта = Неопределено; + + Если ТипЗнч(Параметр) = Тип("Структура") Тогда + Параметр.Свойство("КлючВарианта", КлючВарианта); + КонецЕсли; + + Если ЗначениеЗаполнено(КлючВарианта) Тогда + УстановитьТекущийВариант(КлючВарианта); + Иначе + ВариантыПанелиКлючТекущегоВарианта = ПустойКлючВарианта(); + КонецЕсли; + + ИначеЕсли ИмяСобытия = ВариантыОтчетовКлиентСервер.ИмяДействияПрименитьПереданныеНастройки() Тогда + + ОповещениеОбработано = Истина; + ПрименитьПереданныеНастройки(Параметр); + КонецЕсли; + ИнтеграцияПодсистемБСПКлиент.ПриОбработкеОповещения(ЭтотОбъект, ИмяСобытия, Параметр, Источник, ОповещениеОбработано); ОтчетыКлиентПереопределяемый.ОбработкаОповещения(ЭтотОбъект, ИмяСобытия, Параметр, Источник, ОповещениеОбработано); КонецПроцедуры @@ -317,7 +348,6 @@ &НаСервере Процедура ПриЗагрузкеВариантаНаСервере(НовыеНастройкиКД) - // Ничего не делать если отчет не на СКД и никаких настроек не загружено. Если Не РежимВариантаОтчета() И НовыеНастройкиКД = Неопределено Тогда Возврат; @@ -356,7 +386,6 @@ &НаСервере Процедура ПередЗагрузкойПользовательскихНастроекНаСервере(НовыеПользовательскиеНастройкиКД) - Если НастройкиОтчета.События.ПередЗагрузкойНастроекВКомпоновщик Тогда // Подготовка к переинициализации. Попытка @@ -440,7 +469,7 @@ ОтчетыКлиентСервер.ЗагрузитьНастройки(Отчет.КомпоновщикНастроек, НовыеНастройкиКД); НастройкиКД.ДополнительныеСвойства.Вставить("Адрес", ПоместитьВоВременноеХранилище(НовыеНастройкиКД)); НастройкиКД = НовыеНастройкиКД; - ВариантыПанелиКлючТекущегоВарианта = " - "; + ВариантыПанелиКлючТекущегоВарианта = ПустойКлючВарианта(); ОбновитьИнформациюОВариантеОтчета(); УстановитьВидимостьДоступность(Истина); КонецПроцедуры @@ -451,7 +480,7 @@ Возврат; КонецЕсли; ВариантыОтчетов.ПриСохраненииПользовательскихНастроекНаСервере(ЭтотОбъект, ПользовательскиеНастройкиКД); - ЗаполнитьКомандыВыбораВариантов(); + ОбновитьКомандыВыбораВариантов(); КонецПроцедуры #КонецОбласти @@ -713,7 +742,7 @@ Конструктор = Новый КонструкторСхемыКомпоновкиДанных(СхемаКомпоновкиДанных); Конструктор.Редактировать(ЭтотОбъект); #Иначе - ПоказатьПредупреждение(, (НСтр("ru='Для того чтобы редактировать схему компоновки, необходимо запустить приложение в режиме толстого клиента.'"))); + ПоказатьПредупреждение(, (НСтр("ru = 'Для того чтобы редактировать схему компоновки, необходимо запустить приложение в режиме толстого клиента.'"))); #КонецЕсли КонецПроцедуры @@ -737,42 +766,91 @@ ОбновитьЭлементыФормыНастроек(ПараметрыЗаполнения); КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// Обработчики команд обмена настройками (основными и пользовательскими). + +&НаКлиенте +Процедура СохранитьВариантОтчетаВФайл(Команда) + ПараметрыСохранения = Новый Структура(ВариантыОтчетовКлиентСервер.СвойстваСохраненияВариантаОтчета()); + ЗаполнитьЗначенияСвойств(ПараметрыСохранения, ЭтотОбъект); + + ПараметрыСохранения.ВариантОтчета = НастройкиОтчета.ВариантСсылка; + ПараметрыСохранения.ИмяОтчета = НастройкиОтчета.ПолноеИмя; + ПараметрыСохранения.НастройкиВариантаОтчета = Отчет.КомпоновщикНастроек.Настройки; + + ОткрытьФорму( + "ХранилищеНастроек.ХранилищеВариантовОтчетов.Форма.СохранениеВариантаОтчетаВФайл", + ПараметрыСохранения, + ЭтотОбъект); +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьВариантОтчетаИзФайла(Команда) + СвойстваВариантаОтчета = ВариантыОтчетовКлиент.СвойстваВариантаОтчетаОснования(); + СвойстваВариантаОтчета.Ссылка = НастройкиОтчета.ВариантСсылка; + СвойстваВариантаОтчета.ИмяОтчета = НастройкиОтчета.ПолноеИмя; + СвойстваВариантаОтчета.ПредставлениеВарианта = ПредставлениеТекущегоВарианта; + + Обработчик = Новый ОписаниеОповещения( + "ОбновитьВариантОтчетаИзФайла", ВариантыОтчетовКлиент, СвойстваВариантаОтчета); + + ПараметрыЗагрузки = ФайловаяСистемаКлиент.ПараметрыЗагрузкиФайла(); + ПараметрыЗагрузки.Диалог.Фильтр = НСтр("ru = 'Архив ZIP (*.zip)|*.zip'"); + ПараметрыЗагрузки.ИдентификаторФормы = УникальныйИдентификатор; + + ФайловаяСистемаКлиент.ЗагрузитьФайл(Обработчик, ПараметрыЗагрузки); +КонецПроцедуры + +&НаКлиенте +Процедура ПоделитьсяНастройками(Команда) + ОписаниеНастроек = Новый Структура(); + ОписаниеНастроек.Вставить("ВариантОтчета", НастройкиОтчета.ВариантСсылка); + ОписаниеНастроек.Вставить("КлючОбъекта", НастройкиОтчета.ПолноеИмя + "/" + КлючТекущегоВарианта); + ОписаниеНастроек.Вставить("КлючНастроек", КлючТекущихПользовательскихНастроек); + ОписаниеНастроек.Вставить("Представление", ПредставлениеТекущихПользовательскихНастроек); + ОписаниеНастроек.Вставить("Настройки", Отчет.КомпоновщикНастроек.ПользовательскиеНастройки); + ОписаниеНастроек.Вставить("ВариантМодифицирован", ВариантМодифицирован); + + ВариантыОтчетовКлиент.ПоделитьсяПользовательскимиНастройками(ОписаниеНастроек); +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Обработчики команд расчета показателей. &НаКлиенте Процедура РассчитатьСумму(Команда) - РассчитатьПоказатели(Команда.Имя); + ОбщегоНазначенияСлужебныйКлиент.РассчитатьПоказатели(ЭтотОбъект, "ОтчетТабличныйДокумент", Команда.Имя); КонецПроцедуры &НаКлиенте Процедура РассчитатьКоличество(Команда) - РассчитатьПоказатели(Команда.Имя); + ОбщегоНазначенияСлужебныйКлиент.РассчитатьПоказатели(ЭтотОбъект, "ОтчетТабличныйДокумент", Команда.Имя); КонецПроцедуры &НаКлиенте Процедура РассчитатьСреднее(Команда) - РассчитатьПоказатели(Команда.Имя); + ОбщегоНазначенияСлужебныйКлиент.РассчитатьПоказатели(ЭтотОбъект, "ОтчетТабличныйДокумент", Команда.Имя); КонецПроцедуры &НаКлиенте Процедура РассчитатьМинимум(Команда) - РассчитатьПоказатели(Команда.Имя); + ОбщегоНазначенияСлужебныйКлиент.РассчитатьПоказатели(ЭтотОбъект, "ОтчетТабличныйДокумент", Команда.Имя); КонецПроцедуры &НаКлиенте Процедура РассчитатьМаксимум(Команда) - РассчитатьПоказатели(Команда.Имя); + ОбщегоНазначенияСлужебныйКлиент.РассчитатьПоказатели(ЭтотОбъект, "ОтчетТабличныйДокумент", Команда.Имя); КонецПроцедуры &НаКлиенте Процедура РассчитатьВсеПоказатели(Команда) - УстановитьВидимостьПоказателей(Не Элементы.РассчитатьВсеПоказатели.Пометка); + ОбщегоНазначенияСлужебныйКлиент.УстановитьВидимостьПанелиПоказателей( + Элементы, Не Элементы.РассчитатьВсеПоказатели.Пометка); КонецПроцедуры &НаКлиенте Процедура СвернутьПоказатели(Команда) - УстановитьВидимостьПоказателей(Ложь); + ОбщегоНазначенияСлужебныйКлиент.УстановитьВидимостьПанелиПоказателей(Элементы); КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// @@ -892,6 +970,7 @@ Если Результат = Неопределено Тогда Возврат; КонецЕсли; + Если Результат.Статус <> "Выполняется" Тогда ПослеФормирования(Результат, Ложь); Возврат; @@ -907,13 +986,12 @@ &НаКлиенте Процедура ПослеФормирования(Результат, ЗагрузитьРезультатФормированияОтчета) Экспорт Если Результат = Неопределено Тогда - Возврат; - КонецЕсли; - - Если Результат.Статус = "Выполнено" Тогда + ПоказатьОшибкиФормирования(НСтр("ru = 'Формирование отчета прервано администратором'")); + ПоказатьОповещениеПользователя(НСтр("ru = 'Отчет не сформирован'"),, Заголовок); + ИначеЕсли Результат.Статус = "Выполнено" Тогда Если ЗагрузитьРезультатФормированияОтчета Тогда ЗагрузитьРезультатФормированияОтчета(); - КонецЕсли; + КонецЕсли; ПоказатьОповещениеПользователя(НСтр("ru = 'Отчет сформирован'"),, Заголовок); ИначеЕсли Результат.Статус = "Ошибка" Тогда ПоказатьОшибкиФормирования(Результат.КраткоеПредставлениеОшибки); @@ -928,8 +1006,10 @@ МодульОценкаПроизводительностиКлиент.ЗавершитьЗамерВремени(ИдентификаторЗамера); КонецЕсли; - ИнтеграцияПодсистемБСПКлиент.ПослеФормирования(ЭтотОбъект, Результат.Статус = "Выполнено"); - ОтчетыКлиентПереопределяемый.ПослеФормирования(ЭтотОбъект, Результат.Статус = "Выполнено"); + ОтчетСформирован = ?(Результат = Неопределено, Ложь, Результат.Статус = "Выполнено"); + + ИнтеграцияПодсистемБСПКлиент.ПослеФормирования(ЭтотОбъект, ОтчетСформирован); + ОтчетыКлиентПереопределяемый.ПослеФормирования(ЭтотОбъект, ОтчетСформирован); КонецПроцедуры &НаСервере @@ -1034,6 +1114,7 @@ &НаСервере Процедура ЗагрузитьРезультатФормированияОтчета() Если Не ЭтоАдресВременногоХранилища(ФоновоеЗаданиеАдресХранилища) Тогда + ПоказатьОшибкиФормирования(НСтр("ru = 'Не удалось сформировать отчет'")); Возврат; КонецЕсли; @@ -1044,6 +1125,7 @@ ФоновоеЗаданиеИдентификатор = Неопределено; Если Результат = Неопределено Тогда + ПоказатьОшибкиФормирования(НСтр("ru = 'Не удалось сформировать отчет (пустой результат)'")); Возврат; КонецЕсли; @@ -1103,13 +1185,15 @@ СтандартнаяОбработка = Ложь; Сведения = ОтчетыКлиент.СведенияОЭлементеНастройки(Отчет.КомпоновщикНастроек, Элемент.Имя); + ОписаниеНастроек = Сведения.Описание; + ПользовательскиеНастройки = Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы; ПараметрыВыбора = ОтчетыКлиентСервер.ПараметрыВыбора( Сведения.Настройки, ПользовательскиеНастройки, Сведения.Элемент); Элемент.ДоступныеТипы = ОтчетыКлиент.ТипЗначенияОграниченныйСвязьюПоТипу( - Сведения.Настройки, ПользовательскиеНастройки, Сведения.Элемент, Сведения.Описание); + Сведения.Настройки, ПользовательскиеНастройки, Сведения.Элемент, ОписаниеНастроек); Если ТипЗнч(Сведения.ЭлементПользовательскойНастройки) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда ТекущееЗначение = Сведения.ЭлементПользовательскойНастройки.Значение; @@ -1117,19 +1201,23 @@ ТекущееЗначение = Сведения.ЭлементПользовательскойНастройки.ПравоеЗначение; КонецЕсли; - Условие = ОтчетыКлиентСервер.УсловиеЭлементаНастройки(Сведения.ЭлементПользовательскойНастройки, Сведения.Описание); + ДоступныеЗначения = ?(ОписаниеНастроек = Неопределено, Неопределено, ОписаниеНастроек.ДоступныеЗначения); + + Условие = ОтчетыКлиентСервер.УсловиеЭлементаНастройки(Сведения.ЭлементПользовательскойНастройки, ОписаниеНастроек); ВыборГруппИЭлементов = ОтчетыКлиент.ЗначениеТипаИспользованиеГруппИЭлементов( - Сведения.Описание.ВыборГруппИЭлементов, Условие); + ?(ОписаниеНастроек = Неопределено, Неопределено, ОписаниеНастроек.ВыборГруппИЭлементов), Условие); ЗначенияДляВыбора = ЗначенияДляВыбора( - Элемент.СписокВыбора, Сведения.ЭлементПользовательскойНастройки.ИдентификаторПользовательскойНастройки); + Элемент.СписокВыбора, + Сведения.ЭлементПользовательскойНастройки.ИдентификаторПользовательскойНастройки, + Элемент.ДоступныеТипы); ПараметрыОткрытия = Новый Структура; ПараметрыОткрытия.Вставить("Отмеченные", ОтчетыКлиентСервер.ЗначенияСписком(ТекущееЗначение)); ПараметрыОткрытия.Вставить("ОписаниеТипов", Элемент.ДоступныеТипы); ПараметрыОткрытия.Вставить("ЗначенияДляВыбора", ЗначенияДляВыбора); ПараметрыОткрытия.Вставить("ЗначенияДляВыбораЗаполнены", Элемент.СписокВыбора.Количество() > 0); - ПараметрыОткрытия.Вставить("ОграничиватьВыборУказаннымиЗначениями", ПараметрыОткрытия.ЗначенияДляВыбораЗаполнены); + ПараметрыОткрытия.Вставить("ОграничиватьВыборУказаннымиЗначениями", ДоступныеЗначения <> Неопределено); ПараметрыОткрытия.Вставить("Представление", Элемент.Заголовок); ПараметрыОткрытия.Вставить("ПараметрыВыбора", Новый Массив(ПараметрыВыбора)); ПараметрыОткрытия.Вставить("ВыборГруппИЭлементов", ВыборГруппИЭлементов); @@ -1141,12 +1229,14 @@ КонецПроцедуры &НаКлиенте -Функция ЗначенияДляВыбора(СписокВыбора, ИдентификаторПользовательскойНастройки) +Функция ЗначенияДляВыбора(СписокВыбора, ИдентификаторПользовательскойНастройки, ТипЗначения) ЗначенияДляВыбора = СписокВыбора; Если Не ЗначениеЗаполнено(ИдентификаторПользовательскойНастройки) Тогда Возврат ЗначенияДляВыбора; КонецЕсли; + ЗначенияДляВыбора.ТипЗначения = ТипЗначения; + КэшЗначенийОтборов = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры( Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.ДополнительныеСвойства, "КэшЗначенийОтборов"); Если КэшЗначенийОтборов = Неопределено Тогда @@ -1155,7 +1245,7 @@ ЗначениеОтбора = КэшЗначенийОтборов.Получить(ИдентификаторПользовательскойНастройки); Если ЗначениеОтбора <> Неопределено Тогда - ЗначенияДляВыбора = ЗначениеОтбора; + ОтчетыКлиентСервер.ДополнитьСписок(ЗначенияДляВыбора, ЗначениеОтбора); КонецЕсли; Возврат ЗначенияДляВыбора; @@ -1221,105 +1311,29 @@ ОбновитьЭлементыФормыНастроек(ПараметрыЗаполнения); КонецПроцедуры -#Область РасчетПоказателейВыделенныхЯчеек +&НаКлиенте +Процедура ПрименитьПереданныеНастройки(ОписаниеНастроек) + Если ВариантМодифицирован Тогда + ПоказатьПредупреждение(, НСтр("ru = 'Вариант отчета был изменен. + |Сохраните изменения перед применением настроек.'")); + Возврат; + КонецЕсли; + + КлючТекущихПользовательскихНастроек = ОписаниеНастроек.КлючНастроек; + ПредставлениеТекущихПользовательскихНастроек = ОписаниеНастроек.Представление; + + Отчет.КомпоновщикНастроек.ЗагрузитьПользовательскиеНастройки(ОписаниеНастроек.Настройки); + Сформировать(); +КонецПроцедуры // Выполняет расчет и вывод показателей выделенной области ячеек. // См. обработчик события ОтчетТабличныйДокументПриАктивизацииОбласти. // &НаКлиенте Процедура РассчитатьПоказателиДинамически() - Перем ТекущаяКоманда; - - КомандыПоказателей = КомандыПоказателей(); - Для Каждого Команда Из КомандыПоказателей Цикл - Если Элементы[Команда.Ключ].Пометка Тогда - ТекущаяКоманда = Команда.Ключ; - Прервать; - КонецЕсли; - КонецЦикла; - - РассчитатьПоказатели(ТекущаяКоманда); + ОбщегоНазначенияСлужебныйКлиент.РассчитатьПоказатели(ЭтотОбъект, "ОтчетТабличныйДокумент"); КонецПроцедуры -// Выполняет расчет и вывод показателей выделенных областей ячеек табличного документа. -// -// Параметры: -// ТекущаяКоманда - Строка - имя команды расчета показателя, например, "РассчитатьСумму". -// Определяет, какой показатель является основным. -// -&НаКлиенте -Процедура РассчитатьПоказатели(ТекущаяКоманда = "РассчитатьСумму") - // Расчет показателей. - ПараметрыРасчета = ОбщегоНазначенияСлужебныйКлиент.ПараметрыРасчетаПоказателейЯчеек(ОтчетТабличныйДокумент); - Если ПараметрыРасчета.РассчитатьНаСервере Тогда - РасчетныеПоказатели = РасчетныеПоказателиСервер(ПараметрыРасчета); - Иначе - РасчетныеПоказатели = ОбщегоНазначенияСлужебныйКлиентСервер.РасчетныеПоказателиЯчеек( - ОтчетТабличныйДокумент, ПараметрыРасчета.ВыделенныеОбласти); - КонецЕсли; - - // Установка значений показателей. - ЗаполнитьЗначенияСвойств(ЭтотОбъект, РасчетныеПоказатели); - - // Переключение и форматирование показателей. - КомандыПоказателей = КомандыПоказателей(); - Для Каждого Команда Из КомандыПоказателей Цикл - Элементы[Команда.Ключ].Пометка = Ложь; - - ЗначениеПоказателя = РасчетныеПоказатели[Команда.Значение]; - РазрядностьПоказателя = Мин(СтрДлина(Макс(ЗначениеПоказателя, -ЗначениеПоказателя) % 1) - 2, 4); - - Элементы[Команда.Значение].ФорматРедактирования = "ЧДЦ=" + РазрядностьПоказателя + "; ЧРГ=' '; ЧН=0"; - КонецЦикла; - Элементы[ТекущаяКоманда].Пометка = Истина; - - // Вывод основного показателя. - ТекущийПоказатель = КомандыПоказателей[ТекущаяКоманда]; - Показатель = ЭтотОбъект[ТекущийПоказатель]; - Элементы.Показатель.ФорматРедактирования = Элементы[ТекущийПоказатель].ФорматРедактирования; - Элементы.ГруппаВидыПоказателей.Картинка = БиблиотекаКартинок[ТекущийПоказатель]; - Элементы.ГруппаВидыПоказателейЕще.Картинка = БиблиотекаКартинок[ТекущийПоказатель]; -КонецПроцедуры - -// Рассчитывает показатели числовых ячеек в табличном документе. -// см. ОтчетыКлиентСервер.РасчетныеПоказателиЯчеек. -// -&НаСервере -Функция РасчетныеПоказателиСервер(ПараметрыРасчета) - Возврат ОбщегоНазначенияСлужебныйКлиентСервер.РасчетныеПоказателиЯчеек(ОтчетТабличныйДокумент, ПараметрыРасчета.ВыделенныеОбласти); -КонецФункции - -// Определяет соответствие между командами расчета показателей и показателями. -// -// Возвращаемое значение: -// Соответствие - Ключ - имя команды, Значение - имя показателя. -// -&НаКлиенте -Функция КомандыПоказателей() - КомандыПоказателей = Новый Соответствие(); - КомандыПоказателей.Вставить("РассчитатьСумму", "Сумма"); - КомандыПоказателей.Вставить("РассчитатьКоличество", "Количество"); - КомандыПоказателей.Вставить("РассчитатьСреднее", "Среднее"); - КомандыПоказателей.Вставить("РассчитатьМинимум", "Минимум"); - КомандыПоказателей.Вставить("РассчитатьМаксимум", "Максимум"); - - Возврат КомандыПоказателей; -КонецФункции - -// Управляет признаком видимости панели расчетных показателей. -// -// Параметры: -// Видимость - Булево - Признак включения / выключения видимости панели показателей. -// См. также Синтакс-помощник: ГруппаФормы.Видимость. -// -&НаКлиенте -Процедура УстановитьВидимостьПоказателей(Видимость) - Элементы.ОбластьПоказателей.Видимость = Видимость; - Элементы.РассчитатьВсеПоказатели.Пометка = Видимость; -КонецПроцедуры - -#КонецОбласти - //////////////////////////////////////////////////////////////////////////////// // Вызов сервера @@ -1369,7 +1383,7 @@ ВариантыПанелиКлючТекущегоВарианта = КлючТекущегоВарианта; Если ПоказыватьКомандыВыбораВариантов Тогда - ЗаполнитьКомандыВыбораВариантов(); + ОбновитьКомандыВыбораВариантов(); КонецЕсли; Если ПравоВывода Тогда @@ -1415,6 +1429,7 @@ "", Отчет.КомпоновщикНастроек.ПользовательскиеНастройки); КонецЕсли; + РежимРасшифровки = Ложь; ВариантМодифицирован = Ложь; ПользовательскиеНастройкиМодифицированы = Ложь; @@ -1466,7 +1481,7 @@ &НаСервере Процедура УстановитьКлючТекущегоВарианта(ОтчетПолноеИмя, ПредопределенныеВарианты) - ВариантыПанелиКлючТекущегоВарианта = " - "; + ВариантыПанелиКлючТекущегоВарианта = ПустойКлючВарианта(); Если ЗначениеЗаполнено(Параметры.КлючВарианта) Тогда КлючТекущегоВарианта = Параметры.КлючВарианта; @@ -1524,6 +1539,11 @@ Процедура ЗагрузитьНастройкиВКомпоновщик(ПараметрыЗагрузки) ПроверитьПараметрыЗагрузки(ПараметрыЗагрузки); + ОтчетОбъект = РеквизитФормыВЗначение("Отчет"); + Если НастройкиОтчета.События.ПередЗаполнениемПанелиБыстрыхНастроек Тогда + ОтчетОбъект.ПередЗаполнениемПанелиБыстрыхНастроек(ЭтотОбъект, ПараметрыЗагрузки); + КонецЕсли; + ДоступныеНастройки = ОтчетыСервер.ДоступныеНастройки(ПараметрыЗагрузки, НастройкиОтчета); ПрименитьПредопределенныеНастройки(ДоступныеНастройки.Настройки); @@ -1536,7 +1556,6 @@ ОтчетыСервер.СброситьПользовательскиеНастройки(ДоступныеНастройки, ПараметрыЗагрузки); - ОтчетОбъект = РеквизитФормыВЗначение("Отчет"); Если НастройкиОтчета.События.ПередЗагрузкойНастроекВКомпоновщик Тогда ОтчетОбъект.ПередЗагрузкойНастроекВКомпоновщик( ЭтотОбъект, @@ -1603,7 +1622,7 @@ &НаСервере Процедура ПроверитьПараметрыЗагрузки(ПараметрыЗагрузки) - Если ПараметрыЗагрузки = Неопределено Тогда + Если ТипЗнч(ПараметрыЗагрузки) <> Тип("Структура") Тогда ПараметрыЗагрузки = Новый Структура; КонецЕсли; @@ -1664,7 +1683,7 @@ И ТипЗнч(ЭлементПользовательскойНастройки.ПравоеЗначение) <> Тип("СписокЗначений") Тогда ЭлементПользовательскойНастройки.ПравоеЗначение = ОтчетыКлиентСервер.ЗначенияСписком( - ЭлементПользовательскойНастройки.ПравоеЗначение, Истина); + ЭлементПользовательскойНастройки.ПравоеЗначение); КонецЕсли; ЭлементНастройки = ОтчетыКлиентСервер.ПолучитьОбъектПоПользовательскомуИдентификатору( @@ -1694,7 +1713,7 @@ КонецПроцедуры &НаСервере -Процедура ЗаполнитьКомандыВыбораВариантов() +Процедура ОбновитьКомандыВыбораВариантов() ВариантыФормы = РеквизитФормыВЗначение("ДобавленныеВарианты"); ВариантыФормы.Колонки.Добавить("Найден", Новый ОписаниеТипов("Булево")); АвторизованныйПользователь = Пользователи.АвторизованныйПользователь(); @@ -1836,4 +1855,9 @@ Возврат ТипЗнч(КлючТекущегоВарианта) = Тип("Строка") И Не ПустаяСтрока(КлючТекущегоВарианта); КонецФункции +&НаКлиентеНаСервереБезКонтекста +Функция ПустойКлючВарианта() + Возврат " - "; +КонецФункции + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonForms/ФормаПоиска/Form.form b/SSL/src/CommonForms/ФормаПоиска/Form.form index 163fd5f74..f7dde0e6c 100644 --- a/SSL/src/CommonForms/ФормаПоиска/Form.form +++ b/SSL/src/CommonForms/ФормаПоиска/Form.form @@ -525,7 +525,7 @@
    - HTMLСтраницаПредставление + РезультатыПоиска 39 VeryHigh true @@ -534,11 +534,11 @@ true
    - HTMLСтраницаПредставление + РезультатыПоиска None - HTMLСтраницаПредставлениеРасширеннаяПодсказка + РезультатыПоискаРасширеннаяПодсказка 61 Label true @@ -548,7 +548,7 @@ - HTMLСтраницаПредставлениеКонтекстноеМеню + РезультатыПоискаКонтекстноеМеню 40 true @@ -642,10 +642,10 @@ - HTMLСтраницаПредставление + РезультатыПоиска <key>ru</key> - <value>HTMLСтраница представление</value> + <value>Результаты поиска</value> 14 diff --git a/SSL/src/CommonForms/ФормаПоиска/Module.bsl b/SSL/src/CommonForms/ФормаПоиска/Module.bsl index e1c31960a..da83e322c 100644 --- a/SSL/src/CommonForms/ФормаПоиска/Module.bsl +++ b/SSL/src/CommonForms/ФормаПоиска/Module.bsl @@ -49,7 +49,7 @@ ОбластиПоискаПредставление = ПредставлениеОбластиПоиска(КонтейнерСостояний); ОбновитьДоступностьКнопокНавигации(Элементы.Следующие, Элементы.Предыдущие, КонтейнерСостояний); ИнформацияОНайденномПредставление = ПредставлениеИнформацииОНайденном(КонтейнерСостояний); - HTMLСтраницаПредставление = ПредставлениеHTMLСтраницы(СтрокаПоиска, КонтейнерСостояний); + РезультатыПоиска = СформироватьРезультатыПоиска(СтрокаПоиска, КонтейнерСостояний); СостояниеПоискаПредставление = ПредставлениеСостоянияПоиска(КонтейнерСостояний); ОбновитьВидимостьСостояниеПоиска(КонтейнерСостояний); @@ -194,7 +194,7 @@ КонецПроцедуры &НаСервереБезКонтекста -Процедура ПриВыполненииПоискаНаСервере(КонтейнерСостояний, СтрокаПоиска, НаправлениеПоиска = "ПерваяЧасть") +Процедура ПриВыполненииПоискаНаСервере(КонтейнерСостояний, Знач СтрокаПоиска, НаправлениеПоиска = "ПерваяЧасть") СохранитьСтрокуПоискаВИстории(СтрокаПоиска, КонтейнерСостояний.ИсторияПоиска); @@ -219,7 +219,7 @@ ОбновитьИсториюПоиска(Элементы.СтрокаПоиска, КонтейнерСостояний); ОбновитьДоступностьКнопокНавигации(Элементы.Следующие, Элементы.Предыдущие, КонтейнерСостояний); ИнформацияОНайденномПредставление = ПредставлениеИнформацииОНайденном(КонтейнерСостояний); - HTMLСтраницаПредставление = ПредставлениеHTMLСтраницы(СтрокаПоиска, КонтейнерСостояний); + РезультатыПоиска = СформироватьРезультатыПоиска(СтрокаПоиска, КонтейнерСостояний); СостояниеПоискаПредставление = ПредставлениеСостоянияПоиска(КонтейнерСостояний); ОбновитьВидимостьСостояниеПоиска(КонтейнерСостояний); @@ -265,7 +265,7 @@ ПредставлениеОбластиПоиска = ""; Для каждого Область Из ОбластиПоиска Цикл ОбъектМетаданных = ОбщегоНазначения.ОбъектМетаданныхПоИдентификатору(Область.Значение); - ПредставлениеОбластиПоиска = ПредставлениеОбластиПоиска + ПредставлениеФормыСписка(ОбъектМетаданных) + ", "; + ПредставлениеОбластиПоиска = ПредставлениеОбластиПоиска + ОбщегоНазначения.ПредставлениеСписка(ОбъектМетаданных) + ", "; КонецЦикла; Возврат Лев(ПредставлениеОбластиПоиска, СтрДлина(ПредставлениеОбластиПоиска) - 2); КонецЕсли; @@ -274,21 +274,6 @@ КонецФункции -&НаСервереБезКонтекста -Функция ПредставлениеФормыСписка(ОбъектМетаданных) - - Если Не ПустаяСтрока(ОбъектМетаданных.РасширенноеПредставлениеСписка) Тогда - Представление = ОбъектМетаданных.РасширенноеПредставлениеСписка; - ИначеЕсли Не ПустаяСтрока(ОбъектМетаданных.ПредставлениеСписка) Тогда - Представление = ОбъектМетаданных.ПредставлениеСписка; - Иначе - Представление = ОбъектМетаданных.Представление(); - КонецЕсли; - - Возврат Представление; - -КонецФункции - &НаКлиентеНаСервереБезКонтекста Процедура ОбновитьДоступностьКнопокНавигации(ЭлементКнопкиСледующие, ЭлементКнопкиПредыдущие, КонтейнерСостояний) @@ -332,7 +317,7 @@ КонецФункции &НаКлиентеНаСервереБезКонтекста -Функция ПредставлениеHTMLСтраницы(СтрокаПоиска, КонтейнерСостояний) +Функция СформироватьРезультатыПоиска(СтрокаПоиска, КонтейнерСостояний) КодОшибки = КонтейнерСостояний.КодОшибки; diff --git a/SSL/src/CommonModules/АвтономнаяРаботаСлужебный/Module.bsl b/SSL/src/CommonModules/АвтономнаяРаботаСлужебный/Module.bsl index 85e1d5290..e0eff834a 100644 --- a/SSL/src/CommonModules/АвтономнаяРаботаСлужебный/Module.bsl +++ b/SSL/src/CommonModules/АвтономнаяРаботаСлужебный/Module.bsl @@ -75,7 +75,12 @@ НачатьТранзакцию(); Попытка + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить(ОбщегоНазначения.ИмяТаблицыПоСсылке(Параметры.АвтономноеРабочееМесто)); + ЭлементБлокировки.УстановитьЗначение("Ссылка", Параметры.АвтономноеРабочееМесто); + Блокировка.Заблокировать(); + ЗаблокироватьДанныеДляРедактирования(Параметры.АвтономноеРабочееМесто); АвтономноеРабочееМестоОбъект = Параметры.АвтономноеРабочееМесто.ПолучитьОбъект(); Если АвтономноеРабочееМестоОбъект <> Неопределено Тогда @@ -474,8 +479,7 @@ Процедура ВыполнитьНастройкуАвтономногоРабочегоМестаПриПервомЗапуске() Экспорт Если Не ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда - ВызватьИсключение НСтр("ru = 'Первый запуск автономного рабочего места должен выполняться - |в файловом режиме работы информационной базы.'"); + ВызватьИсключение НСтр("ru = 'Первый запуск автономного рабочего места должен выполняться в файловой информационной базе.'"); КонецЕсли; УстановитьПривилегированныйРежим(Истина); @@ -731,6 +735,7 @@ Параметры = ПолучитьПараметрыИзНачальногоОбраза(); + ГлавныйУзелСсылка = ПланыОбмена.ГлавныйУзел(); Попытка ПланыОбмена.УстановитьГлавныйУзел(Неопределено); Исключение @@ -740,26 +745,44 @@ |Завершите работу конфигуратора и повторите запуск программы.'"); КонецПопытки; - // Создаем узлы плана обмена автономной работы в нулевой области данных - УзелАвтономногоРабочегоМеста = ПланыОбмена[ПланОбменаАвтономнойРаботы()].ЭтотУзел().ПолучитьОбъект(); - УзелАвтономногоРабочегоМеста.Код = Параметры.КодАвтономногоРабочегоМеста; - УзелАвтономногоРабочегоМеста.Наименование = Параметры.НаименованиеАвтономногоРабочегоМеста; - УзелАвтономногоРабочегоМеста.ДополнительныеСвойства.Вставить("ПолучениеСообщенияОбмена"); - УзелАвтономногоРабочегоМеста.Записать(); - - УзелПриложенияВСервисе = ПланыОбмена[ПланОбменаАвтономнойРаботы()].СоздатьУзел(); - УзелПриложенияВСервисе.Код = Параметры.КодПриложенияВСервисе; - УзелПриложенияВСервисе.Наименование = Параметры.НаименованиеПриложенияВСервисе; - УзелПриложенияВСервисе.ДополнительныеСвойства.Вставить("ПолучениеСообщенияОбмена"); - УзелПриложенияВСервисе.Записать(); + НачатьТранзакцию(); + Попытка + ИзменитьИспользованиеРазделения(Истина, Параметры.ОбластьДанных); + + ГлавныйУзелОбъект = ГлавныйУзелСсылка.ПолучитьОбъект(); + ГлавныйУзелОбъект.ОбменДанными.Загрузка = Истина; + ГлавныйУзелОбъект.Удалить(); + + ИзменитьИспользованиеРазделения(Ложь); + + // Создаем узлы плана обмена автономной работы в нулевой области данных. + УзелАвтономногоРабочегоМеста = ПланыОбмена[ПланОбменаАвтономнойРаботы()].ЭтотУзел().ПолучитьОбъект(); + УзелАвтономногоРабочегоМеста.Код = Параметры.КодАвтономногоРабочегоМеста; + УзелАвтономногоРабочегоМеста.Наименование = Параметры.НаименованиеАвтономногоРабочегоМеста; + УзелАвтономногоРабочегоМеста.ДополнительныеСвойства.Вставить("ПолучениеСообщенияОбмена"); + УзелАвтономногоРабочегоМеста.Записать(); + + УзелПриложенияВСервисе = ПланыОбмена[ПланОбменаАвтономнойРаботы()].СоздатьУзел(); + УзелПриложенияВСервисе.УстановитьСсылкуНового(ГлавныйУзелСсылка); + УзелПриложенияВСервисе.Код = Параметры.КодПриложенияВСервисе; + УзелПриложенияВСервисе.Наименование = Параметры.НаименованиеПриложенияВСервисе; + УзелПриложенияВСервисе.ДополнительныеСвойства.Вставить("ПолучениеСообщенияОбмена"); + УзелПриложенияВСервисе.Записать(); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииСозданиеАвтономногоРабочегоМеста(), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ВызватьИсключение; + КонецПопытки; // Назначение созданного узла главным. - ПланыОбмена.УстановитьГлавныйУзел(УзелПриложенияВСервисе.Ссылка); + ПланыОбмена.УстановитьГлавныйУзел(ГлавныйУзелСсылка); СтандартныеПодсистемыСервер.СохранитьГлавныйУзел(); НачатьТранзакцию(); Попытка - Константы.ИспользоватьСинхронизациюДанных.Установить(Истина); Константы.НастройкиПодчиненногоУзлаРИБ.Установить(""); Константы.ПрефиксУзлаРаспределеннойИнформационнойБазы.Установить(Параметры.Префикс); @@ -850,6 +873,25 @@ КонецПроцедуры +Функция ИзменитьИспользованиеРазделения(Использование, ОбластьДанных = 0) + + Если Не Использование Тогда + ПараметрыСеанса.ОбластьДанныхЗначение = ОбластьДанных; + ПараметрыСеанса.ОбластьДанныхИспользование = Использование; + КонецЕсли; + + МенеджерЗначения = Константы.ИспользоватьРазделениеПоОбластямДанных.СоздатьМенеджерЗначения(); + МенеджерЗначения.ОбменДанными.Загрузка = Истина; + МенеджерЗначения.Значение = Использование; + МенеджерЗначения.Записать(); + + Если Использование Тогда + ПараметрыСеанса.ОбластьДанныхЗначение = ОбластьДанных; + ПараметрыСеанса.ОбластьДанныхИспользование = Использование; + КонецЕсли; + +КонецФункции + // Для внутреннего использования // Процедура ЗагрузитьДанныеНачальногоОбраза() diff --git a/SSL/src/CommonModules/АдминистрированиеКластера/Module.bsl b/SSL/src/CommonModules/АдминистрированиеКластера/Module.bsl index 0b800f4de..9f6d3af88 100644 --- a/SSL/src/CommonModules/АдминистрированиеКластера/Module.bsl +++ b/SSL/src/CommonModules/АдминистрированиеКластера/Module.bsl @@ -1001,8 +1001,8 @@ // ПараметрыАдминистрированияКластера - Структура - см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера. // ИмяПрофиля - Строка - имя профиля безопасности, существование которого проверяется. // -// Возвращаемое значение: -// Булево +// Возвращаемое значение: +// Булево - // Функция ПрофильБезопасностиСуществует(Знач ПараметрыАдминистрированияКластера, Знач ИмяПрофиля) Экспорт @@ -1765,7 +1765,8 @@ // передаваться структуры с полями С и По, значения которых образуют интервал, с которым будет выполняться // соответствующее сравнение. // -// Возвращаемое значение: Булево, Истина если значение удовлетворяет условиям, Ложь - если не удовлетворяет. +// Возвращаемое значение: +// Булево, Истина если значение удовлетворяет условиям, Ложь - если не удовлетворяет. // Функция ПроверитьУсловиеФильтра(Знач ПроверяемоеЗначение, Знач ВидСравненияЗначений, Знач Значение) @@ -1844,7 +1845,8 @@ // ПараметрыАдминистрированияКластера - Структура - структура, описывающая параметры подключения к кластеру серверов, // описание см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера(). // -// Возвращаемое значение: ОбщийМодуль. +// Возвращаемое значение: +// ОбщийМодуль - . // Функция МенеджерАдминистрирования(Знач ПараметрыАдминистрирования) diff --git a/SSL/src/CommonModules/АдминистрированиеКластераCOM/Module.bsl b/SSL/src/CommonModules/АдминистрированиеКластераCOM/Module.bsl index 5d358f297..a990083ca 100644 --- a/SSL/src/CommonModules/АдминистрированиеКластераCOM/Module.bsl +++ b/SSL/src/CommonModules/АдминистрированиеКластераCOM/Module.bsl @@ -164,17 +164,13 @@ Исключение Если ОбщегоНазначения.ЭтоWindowsСервер() Тогда ТекстИсключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = '%1 - | - |Если компонента ""comcntr"" не зарегистрирована или ее версия не совпадает с требуемой, - |следует зарегистрировать ее на компьютере %2 выполнив команду cmd с повышением привилегий UAC - |для учетной записи ОС Windows, от имени которой выполняется 1С:Предприятие. - | - |Например: - |regsvr32.exe ""%3""'"), + НСтр("ru = 'Не удалось подключиться к кластеру серверов по причине: + |%1 + | + |Если в тексте ошибки указано, что ""класс не зарегистрирован"" или не совпадает версия компоненты ""comcntr"" с требуемой, + |то следует зарегистрировать ее на компьютере %2, для этого обратитесь к администратору.'"), КраткоеПредставлениеОшибки(ИнформацияОбОшибке()), - ИмяКомпьютера(), - КаталогПрограммы() + "comcntr.dll"); + ИмяКомпьютера()); Иначе ТекстИсключения = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); КонецЕсли; @@ -840,8 +836,8 @@ // описание см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера(). // ИмяПрофиля - Строка - имя профиля безопасности, существование которого проверяется. // -// Возвращаемое значение: -// Булево +// Возвращаемое значение: +// Булево - // Функция ПрофильБезопасностиСуществует(Знач ПараметрыАдминистрированияКластера, Знач ИмяПрофиля) Экспорт @@ -1041,8 +1037,8 @@ // Создает COM-объект V8*.ComConnector. // -// Возвращаемое значение: -// COMОбъект. +// Возвращаемое значение: +// COMОбъект - . // Функция COMСоединитель() @@ -1070,16 +1066,9 @@ // Функция СоединениеСАгентомСервера(COMСоединитель, Знач АдресАгентаСервера, Знач ПортАгентаСервера) - АдресИПорт = АдресАгентаСервера + ":" + Формат(ПортАгентаСервера, "ЧГ=0"); - Попытка - - СтрокаСоединенияСАгентомСервера = "tcp://" + АдресИПорт; - СоединениеСАгентомСервера = COMСоединитель.ConnectAgent(СтрокаСоединенияСАгентомСервера); - Возврат СоединениеСАгентомСервера; - - Исключение - ВызватьИсключение; - КонецПопытки; + СтрокаСоединенияСАгентомСервера = "tcp://" + АдресАгентаСервера + ":" + Формат(ПортАгентаСервера, "ЧГ=0"); + СоединениеСАгентомСервера = COMСоединитель.ConnectAgent(СтрокаСоединенияСАгентомСервера); + Возврат СоединениеСАгентомСервера; КонецФункции @@ -1098,12 +1087,8 @@ Для Каждого Кластер Из СоединениеСАгентомСервера.GetClusters() Цикл Если Кластер.MainPort = ПортКластера Тогда - Попытка - СоединениеСАгентомСервера.Authenticate(Кластер, ИмяАдминистратораКластера, ПарольАдминистратораКластера); - Возврат Кластер; - Исключение - ВызватьИсключение; - КонецПопытки; + СоединениеСАгентомСервера.Authenticate(Кластер, ИмяАдминистратораКластера, ПарольАдминистратораКластера); + Возврат Кластер; КонецЕсли; КонецЦикла; @@ -1151,13 +1136,9 @@ Функция ПолучитьОписаниеИБ(СоединениеСАгентомСервера, Кластер, Знач ИмяВКластере) Для Каждого ОписаниеИнформационнойБазы Из СоединениеСАгентомСервера.GetInfoBases(Кластер) Цикл - - Если ОписаниеИнформационнойБазы.Name = ИмяВКластере Тогда - + Если НРег(ОписаниеИнформационнойБазы.Name) = НРег(ИмяВКластере) Тогда Возврат ОписаниеИнформационнойБазы; - КонецЕсли; - КонецЦикла; ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'В кластере серверов %1:%2 не найдена информационная база ""%3""'"), @@ -1185,18 +1166,14 @@ Для Каждого ИнформационнаяБаза Из СоединениеСРабочимПроцессом.GetInfoBases() Цикл - Если ИнформационнаяБаза.Name = ИмяВКластере Тогда - + Если НРег(ИнформационнаяБаза.Name) = НРег(ИмяВКластере) Тогда Если Не ЗначениеЗаполнено(ИнформационнаяБаза.DBMS) Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Неправильные имя и пароль администратора информационной базы %1 в кластере серверов %2:%3 (имя: ""%4"").'"), ИмяВКластере, Кластер.HostName, Кластер.MainPort, ИмяАдминистратораИБ); - КонецЕсли; - Возврат ИнформационнаяБаза; КонецЕсли; @@ -1249,7 +1226,8 @@ // иначе - массив структур, описывающих свойства сеансов, // описание см. АдминистрированиеКластера.СвойстваСеанса(). // -// Возвращаемое значение: Массив(COMОбъект), Массив(Структура). +// Возвращаемое значение: +// Массив(COMОбъект), Массив(Структура). // Функция ПолучитьСеансы(СоединениеСАгентомСервера, Кластер, ИнформационнаяБаза, Знач Фильтр = Неопределено, Знач Описания = Ложь) @@ -1350,52 +1328,34 @@ Соединения = Новый Массив(); Словарь = СловарьСвойствСоединений(); - // Рабочие процессы, зарегистрированные в кластере. Для каждого РабочийПроцесс Из СоединениеСАгентомСервера.GetWorkingProcesses(Кластер) Цикл Если РабочийПроцесс.Running = 0 Тогда Продолжить; КонецЕсли; - // Административное соединение с рабочим процессом. СтрокаСоединенияСРабочимПроцессом = РабочийПроцесс.HostName + ":" + Формат(РабочийПроцесс.MainPort, "ЧГ="); СоединениеСРабочимПроцессом = COMСоединитель.ConnectWorkingProcess(СтрокаСоединенияСРабочимПроцессом); - // Получение информационных баз (аутентификация не требуется). Для каждого ИнформационнаяБаза Из СоединениеСРабочимПроцессом.GetInfoBases() Цикл - // Это требуемая информационная база. - Если ИнформационнаяБаза.Name = ИмяВКластере Тогда + Если НРег(ИнформационнаяБаза.Name) = НРег(ИмяВКластере) Тогда - // Для получение соединений с информационной базой требуется аутентификация. СоединениеСРабочимПроцессом.AddAuthentication(ИмяАдминистратораИБ, ПарольАдминистратораИБ); - - // Получение соединений с информационной базой. Для каждого Соединение Из СоединениеСРабочимПроцессом.GetInfoBaseConnections(ИнформационнаяБаза) Цикл ОписаниеСоединения = ОписаниеОбъектаОбъектнойМоделиCOMАдминистратора(Соединение, Словарь); - - // Проверка соединения на соответствие требуемым фильтрам. Если АдминистрированиеКластера.ПроверитьУсловияФильтра(ОписаниеСоединения, Фильтр) Тогда - Если Описания Тогда - Соединения.Добавить(ОписаниеСоединения); - Иначе - Соединения.Добавить(Новый Структура("СоединениеСРабочимПроцессом, Соединение", СоединениеСРабочимПроцессом, Соединение)); - КонецЕсли; - КонецЕсли; КонецЦикла; - КонецЕсли; - КонецЦикла; - КонецЦикла; Возврат Соединения; @@ -1415,11 +1375,9 @@ Функция ПолучитьПрофильБезопасности(СоединениеСАгентомСервера, Кластер, ИмяПрофиля) Для Каждого ПрофильБезопасности Из СоединениеСАгентомСервера.GetSecurityProfiles(Кластер) Цикл - - Если ПрофильБезопасности.Name = ИмяПрофиля Тогда + Если НРег(ПрофильБезопасности.Name) = НРег(ИмяПрофиля) Тогда Возврат ПрофильБезопасности; КонецЕсли; - КонецЦикла; ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'В кластере серверов %1:%2 не найден профиль безопасности ""%3""'"), @@ -1753,7 +1711,8 @@ // * Ключ - Имя свойства в описании, // * Значение - Имя свойства объекта. // -// Возвращаемое значение: Массив(Структура), описания объекта объектной модели COM-администратора +// Возвращаемое значение: +// Массив Из Структура, описания объекта объектной модели COM-администратора // по переданному словарю. // Функция ОписанияОбъектовОбъектнойМоделиCOMАдминистратора(Знач Объекты, Знач Словарь) diff --git a/SSL/src/CommonModules/АдминистрированиеКластераCOMКлиентСервер/Module.bsl b/SSL/src/CommonModules/АдминистрированиеКластераCOMКлиентСервер/Module.bsl index 903904a79..a7636562b 100644 --- a/SSL/src/CommonModules/АдминистрированиеКластераCOMКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/АдминистрированиеКластераCOMКлиентСервер/Module.bsl @@ -18,7 +18,8 @@ // ПараметрыАдминистрированияИБ - Структура, описывающая параметры подключения к информационной базе, // описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера(). // -// Возвращаемое значение: Структура, описывающая состояние блокировки сеансов и регламентных заданий, +// Возвращаемое значение: +// Структура - , описывающая состояние блокировки сеансов и регламентных заданий, // описание - см. АдминистрированиеКластераКлиентСервер.СвойстваБлокировкиСеансовИРегламентныхЗаданий(). // Функция БлокировкаСеансовИЗаданийИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ) Экспорт @@ -202,7 +203,8 @@ // ПараметрыАдминистрированияИБ - Структура, описывающая параметры подключения к информационной базе, // описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера(). // -// Возвращаемое значение: Булево. +// Возвращаемое значение: +// Булево - // Функция БлокировкаРегламентныхЗаданийИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ) Экспорт @@ -311,7 +313,8 @@ // выполняется сравнение. При использовании данного варианта описания фильтра сравнение всегда выполняется на // равенство. // -// Возвращаемое значение: Массив(Структура), массив структур, описывающих свойства сеансов. Описание структур - +// Возвращаемое значение: +// Массив Из Структура, массив структур, описывающих свойства сеансов. Описание структур - // см. АдминистрированиеКластераКлиентСервер.СвойстваСеанса(). // Функция СеансыИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ, Знач Фильтр = Неопределено) Экспорт @@ -480,7 +483,8 @@ // выполняется сравнение. При использовании данного варианта описания фильтра сравнение всегда выполняется на // равенство. // -// Возвращаемое значение: Массив(Структура), массив структур, описывающих свойства соединений. Описание структур - +// Возвращаемое значение: +// Массив Из Структура, массив структур, описывающих свойства соединений. Описание структур - // см. АдминистрированиеКластераКлиентСервер.СвойстваСоединения(). // Функция СоединенияСИнформационнойБазой(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ, Знач Фильтр = Неопределено) Экспорт @@ -634,7 +638,8 @@ // ПараметрыАдминистрированияИБ - Структура, описывающая параметры подключения к информационной базе, // описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера(). // -// Возвращаемое значение: Строка, имя профиля безопасности, назначенного для информационной базы. Если +// Возвращаемое значение: +// Строка - , имя профиля безопасности, назначенного для информационной базы. Если // для информационной базы не назначен профиль безопасности - возвращается пустая строка. // Функция ПрофильБезопасностиИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ) Экспорт @@ -686,7 +691,8 @@ // ПараметрыАдминистрированияИБ - Структура, описывающая параметры подключения к информационной базе, // описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера(). // -// Возвращаемое значение: Строка, имя профиля безопасности, назначенного для информационной базы в качестве профиля +// Возвращаемое значение: +// Строка - , имя профиля безопасности, назначенного для информационной базы в качестве профиля // безопасности безопасного режима. Если для информационной базы не назначен профиль безопасности - возвращается // пустая строка. // @@ -863,7 +869,8 @@ // описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), // ИмяПрофиля - Строка, имя профиля безопасности. // -// Возвращаемое значение: Структура, описывающая профиль безопасности, описание - см. +// Возвращаемое значение: +// Структура, описывающая профиль безопасности, описание - см. // АдминистрированиеКластераКлиентСервер.СвойстваПрофиляБезопасности(). // Функция ПрофильБезопасности(Знач ПараметрыАдминистрированияКластера, Знач ИмяПрофиля) Экспорт @@ -1026,7 +1033,8 @@ // Создает COM-объект V8*.ComConnector. // -// Возвращаемое значение: COMОбъект. +// Возвращаемое значение: +// COMОбъект - . // Функция COMСоединитель() @@ -1059,7 +1067,8 @@ // АдресАгентаСервера - Строка, сетевой адрес агента сервера, // ПортАгентаСервера - Число, сетевой порт агента сервера (типичное значение 1540). // -// Возвращаемое значение: COMОбъект, реализующий интерфейс IV8AgentConnection. +// Возвращаемое значение: +// COMОбъект - , реализующий интерфейс IV8AgentConnection. // Функция СоединениеСАгентомСервера(COMСоединитель, Знач АдресАгентаСервера, Знач ПортАгентаСервера) @@ -1077,7 +1086,8 @@ // ИмяАдминистратораКластера - Строка, имя учетной записи администратора кластера, // ПарольАдминистратораКластера - Строка, пароль учетной записи администратора кластера. // -// Возвращаемое значение: COMОбъект, реализующий интерфейс IClusterInfo. +// Возвращаемое значение: +// COMОбъект - , реализующий интерфейс IClusterInfo. // Функция ПолучитьКластер(СоединениеСАгентомСервера, Знач ПортКластера, Знач ИмяАдминистратораКластера, Знач ПарольАдминистратораКластера) @@ -1106,7 +1116,8 @@ // СоединениеСАгентомСервера - COMОбъект, реализующий интерфейс IV8AgentConnection, // Кластер - COMОбъект, реализующий интерфейс IClusterInfo. // -// Возвращаемое значение: COMОбъект, реализующий интерфейс IV8ServerConnection. +// Возвращаемое значение: +// COMОбъект - , реализующий интерфейс IV8ServerConnection. // Функция СоединениеСРабочимПроцессом(COMСоединитель, СоединениеСАгентомСервера, Кластер) @@ -1130,7 +1141,8 @@ // Кластер - COMОбъект, реализующий интерфейс IClusterInfo, // ИмяВКластере - Строка, имя информационной базы в кластере серверов. // -// Возвращаемое значение: COMОбъект, реализующий интерфейс IInfoBaseShort. +// Возвращаемое значение: +// COMОбъект - , реализующий интерфейс IInfoBaseShort. // Функция ПолучитьОписаниеИБ(СоединениеСАгентомСервера, Кластер, Знач ИмяВКластере) @@ -1160,7 +1172,8 @@ // ИмяАдминистратораИБ - Строка, имя администратора информационной базы, // ПарольАдминистратораИБ - Строка, пароль администратора информационной базы. // -// Возвращаемое значение: COMОбъект, реализующий интерфейс IInfoBaseInfo. +// Возвращаемое значение: +// COMОбъект - , реализующий интерфейс IInfoBaseInfo. // Функция ПолучитьИБ(СоединениеСРабочимПроцессом, Кластер, Знач ИмяВКластере, Знач ИмяАдминистратораИБ, Знач ПарольАдминистратораИБ) @@ -1232,7 +1245,8 @@ // иначе - массив структур, описывающих свойства сеансов (поля структур - см. возвращаемое значение функции. // АдминистрированиеКластераКлиентСервер.СвойстваСеанса()). // -// Возвращаемое значение: Массив(COMОбъект), Массив(Структура). +// Возвращаемое значение: +// Массив(COMОбъект), Массив(Структура). // Функция ПолучитьСеансы(СоединениеСАгентомСервера, Кластер, ИнформационнаяБаза, Знач Фильтр = Неопределено, Знач Описания = Ложь) @@ -1304,7 +1318,8 @@ // возвращаемое значение функции. // АдминистрированиеКластераКлиентСервер.СвойстваСоединения()). // -// Возвращаемое значение: Массив(COMОбъект), Массив(Структура). +// Возвращаемое значение: +// Массив(COMОбъект), Массив(Структура). // Функция ПолучитьСоединения(COMСоединитель, СоединениеСАгентомСервера, Кластер, ПараметрыАдминистрированияИБ, Знач Фильтр = Неопределено, Знач Описания = Ложь) @@ -1370,7 +1385,8 @@ // Кластер - COMОбъект, реализующий интерфейс IClusterInfo, // ИмяПрофиля - Строка, имя профиля безопасности. // -// Возвращаемое значение: COMОбъект, реализующий интерфейс ISecurityProfile. +// Возвращаемое значение: +// COMОбъект - , реализующий интерфейс ISecurityProfile. // Функция ПолучитьПрофильБезопасности(СоединениеСАгентомСервера, Кластер, ИмяПрофиля) @@ -1396,7 +1412,8 @@ // Кластер - COMОбъект, реализующий интерфейс IClusterInfo, // ИмяПрофиля - Строка, имя профиля безопасности. // -// Возвращаемое значение: Массив(COMОбъект) - массив COM-объектов, реализующих интерфейс +// Возвращаемое значение: +// Массив Из COMОбъект - массив COM-объектов, реализующих интерфейс // ISecurityProfileVirtualDirectory. // Функция ПолучитьВиртуальныеКаталоги(СоединениеСАгентомСервера, Кластер, ИмяПрофиля) @@ -1420,7 +1437,8 @@ // Кластер - COMОбъект, реализующий интерфейс IClusterInfo, // ИмяПрофиля - Строка, имя профиля безопасности. // -// Возвращаемое значение: Массив(COMОбъект) - массив COM-объектов, реализующих интерфейс ISecurityProfileCOMClass. +// Возвращаемое значение: +// Массив Из COMОбъект - массив COM-объектов, реализующих интерфейс ISecurityProfileCOMClass. // Функция ПолучитьCOMКлассы(СоединениеСАгентомСервера, Кластер, ИмяПрофиля) @@ -1443,7 +1461,8 @@ // Кластер - COMОбъект, реализующий интерфейс IClusterInfo, // ИмяПрофиля - Строка, имя профиля безопасности. // -// Возвращаемое значение: Массив(COMОбъект) - массив COM-объектов, реализующих интерфейс ISecurityProfileAddIn. +// Возвращаемое значение: +// Массив Из COMОбъект - массив COM-объектов, реализующих интерфейс ISecurityProfileAddIn. // Функция ПолучитьВнешниеКомпоненты(СоединениеСАгентомСервера, Кластер, ИмяПрофиля) @@ -1466,7 +1485,8 @@ // Кластер - COMОбъект, реализующий интерфейс IClusterInfo, // ИмяПрофиля - Строка, имя профиля безопасности. // -// Возвращаемое значение: Массив(COMОбъект) - массив COM-объектов, реализующих интерфейс ISecurityProfileExternalModule. +// Возвращаемое значение: +// Массив Из COMОбъект - массив COM-объектов, реализующих интерфейс ISecurityProfileExternalModule. // Функция ПолучитьВнешниеМодули(СоединениеСАгентомСервера, Кластер, ИмяПрофиля) @@ -1489,7 +1509,8 @@ // Кластер - COMОбъект, реализующий интерфейс IClusterInfo, // ИмяПрофиля - Строка, имя профиля безопасности. // -// Возвращаемое значение: Массив(COMОбъект) - массив COM-объектов, реализующих интерфейс ISecurityProfileApplication. +// Возвращаемое значение: +// Массив Из COMОбъект - массив COM-объектов, реализующих интерфейс ISecurityProfileApplication. // Функция ПолучитьПриложенияОС(СоединениеСАгентомСервера, Кластер, ИмяПрофиля) @@ -1512,7 +1533,8 @@ // Кластер - COMОбъект, реализующий интерфейс IClusterInfo, // ИмяПрофиля - Строка, имя профиля безопасности. // -// Возвращаемое значение: Массив(COMОбъект) - массив COM-объектов, реализующих интерфейс +// Возвращаемое значение: +// Массив Из COMОбъект - массив COM-объектов, реализующих интерфейс // ISecurityProfileInternetResource. // Функция ПолучитьИнтернетРесурсы(СоединениеСАгентомСервера, Кластер, ИмяПрофиля) @@ -1667,7 +1689,8 @@ // Ключ - Имя свойства в описании, // Значение - Имя свойства объекта. // -// Возвращаемое значение: Структура, описание объекта объектной модели COM-администратора +// Возвращаемое значение: +// Структура, описание объекта объектной модели COM-администратора // по переданному словарю. // Функция ОписаниеОбъектаОбъектнойМоделиCOMАдминистратора(Знач Объект, Знач Словарь) @@ -1688,12 +1711,13 @@ // Формирует описания объектов объектной модели COM-администратора. // // Параметры: -// Объекты - Массив(COMОбъект), +// Объекты - Массив Из COMОбъект, // Словарь - Соответствие, содержит соответствие свойств объекта и в описании: // Ключ - Имя свойства в описании, // Значение - Имя свойства объекта. // -// Возвращаемое значение: Массив(Структура), описания объекта объектной модели COM-администратора +// Возвращаемое значение: +// Массив Из Структура, описания объекта объектной модели COM-администратора // по переданному словарю. // Функция ОписанияОбъектовОбъектнойМоделиCOMАдминистратора(Знач Объекты, Знач Словарь) @@ -1735,7 +1759,8 @@ // блокировки сеансов и регламентных заданий, для структур, используемых в API и // объектов объектной модели COM-администратора. // -// Возвращаемое значение: ФиксированнаяСтруктура: +// Возвращаемое значение: +// ФиксированнаяСтруктура: // Ключ - Строка, имя свойства в API (см. // АдминистрированиеКластераКлиентСервер.СвойстваБлокировкиСеансовИРегламентныхЗаданий()), // Значение - Строка, имя свойства объекта. @@ -1759,7 +1784,8 @@ // Возвращает соответствие имен свойств сеансов информационной базы для структур, используемых в API и // объектов объектной модели COM-администратора. // -// Возвращаемое значение: ФиксированнаяСтруктура: +// Возвращаемое значение: +// ФиксированнаяСтруктура: // Ключ - Строка, имя свойства в API (см. АдминистрированиеКластераКлиентСервер.СвойстваСеанса()), // Значение - Строка, имя свойства объекта. // @@ -1799,7 +1825,8 @@ // Возвращает соответствие имен свойств соединений с информационной базой для структур, используемых в API и // объектов объектной модели COM-администратора. // -// Возвращаемое значение: ФиксированнаяСтруктура: +// Возвращаемое значение: +// ФиксированнаяСтруктура: // Ключ - Строка, имя свойства в API (см. АдминистрированиеКластераКлиентСервер.СвойстваСоединения()), // Значение - Строка, имя свойства объекта. // @@ -1838,7 +1865,8 @@ // Возвращает соответствие имен свойств профиля безопасности для структур, используемых в API и // объектов объектной модели COM-администратора. // -// Возвращаемое значение: ФиксированнаяСтруктура: +// Возвращаемое значение: +// ФиксированнаяСтруктура: // Ключ - Строка, имя свойства в API (см. АдминистрированиеКластераКлиентСервер.СвойстваПрофиляБезопасности()), // Значение - Строка, имя свойства объекта. // @@ -1865,7 +1893,8 @@ // Возвращает соответствие имен свойств виртуального каталога для структур, используемых в API и // объектов объектной модели COM-администратора. // -// Возвращаемое значение: ФиксированнаяСтруктура: +// Возвращаемое значение: +// ФиксированнаяСтруктура: // Ключ - Строка, имя свойства в API (см. АдминистрированиеКластераКлиентСервер.СвойстваВиртуальногоКаталога()), // Значение - Строка, имя свойства объекта. // @@ -1888,7 +1917,8 @@ // Возвращает соответствие имен свойств COM-класса для структур, используемых в API и // объектов объектной модели COM-администратора. // -// Возвращаемое значение: ФиксированнаяСтруктура: +// Возвращаемое значение: +// ФиксированнаяСтруктура: // Ключ - Строка, имя свойства в API (см. АдминистрированиеКластераКлиентСервер.СвойстваCOMКласса()), // Значение - Строка, имя свойства объекта. // @@ -1910,7 +1940,8 @@ // Возвращает соответствие имен свойств внешней компоненты для структур, используемых в API и // объектов объектной модели COM-администратора. // -// Возвращаемое значение: ФиксированнаяСтруктура: +// Возвращаемое значение: +// ФиксированнаяСтруктура: // Ключ - Строка, имя свойства в API (см. АдминистрированиеКластераКлиентСервер.СвойстваВнешнейКомпоненты()), // Значение - Строка, имя свойства объекта. // @@ -1930,7 +1961,8 @@ // Возвращает соответствие имен свойств внешнего модуля для структур, используемых в API и // объектов объектной модели COM-администратора. // -// Возвращаемое значение: ФиксированнаяСтруктура: +// Возвращаемое значение: +// ФиксированнаяСтруктура: // Ключ - Строка, имя свойства в API (см. АдминистрированиеКластераКлиентСервер.СвойстваВнешнегоМодуля()), // Значение - Строка, имя свойства объекта. // @@ -1950,7 +1982,8 @@ // Возвращает соответствие имен свойств приложения операционной системы для структур, используемых в API и // объектов объектной модели COM-администратора. // -// Возвращаемое значение: ФиксированнаяСтруктура: +// Возвращаемое значение: +// ФиксированнаяСтруктура: // Ключ - Строка, имя свойства в API (см. АдминистрированиеКластераКлиентСервер.СвойстваПриложенияОС()), // Значение - Строка, имя свойства объекта. // @@ -1970,7 +2003,8 @@ // Возвращает соответствие имен свойств Интернет-ресурса для структур, используемых в API и // объектов объектной модели COM-администратора. // -// Возвращаемое значение: ФиксированнаяСтруктура: +// Возвращаемое значение: +// ФиксированнаяСтруктура: // Ключ - Строка, имя свойства в API (см. АдминистрированиеКластераКлиентСервер.СвойстваИнтернетРесурса()), // Значение - Строка, имя свойства объекта. // diff --git a/SSL/src/CommonModules/АдминистрированиеКластераRAS/Module.bsl b/SSL/src/CommonModules/АдминистрированиеКластераRAS/Module.bsl index 31c529fa1..7cb77c83b 100644 --- a/SSL/src/CommonModules/АдминистрированиеКластераRAS/Module.bsl +++ b/SSL/src/CommonModules/АдминистрированиеКластераRAS/Module.bsl @@ -134,7 +134,8 @@ // ПараметрыАдминистрированияИБ - Структура - структура, описывающая параметры подключения к информационной базе, // описание см. АдминистрированиеКластера.ПараметрыАдминистрированияИнформационнойБазыКластера(). // -// Возвращаемое значение: Булево. +// Возвращаемое значение: +// Булево - // Функция БлокировкаРегламентныхЗаданийИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ) Экспорт @@ -416,7 +417,8 @@ // выполняется сравнение. При использовании данного варианта описания фильтра сравнение всегда выполняется на // равенство. // -// Возвращаемое значение: Массив(Структура), массив структур, описывающих свойства соединений. Описание структур - +// Возвращаемое значение: +// Массив Из Структура, массив структур, описывающих свойства соединений. Описание структур - // см. АдминистрированиеКластера.СвойстваСоединения(). // Функция СоединенияСИнформационнойБазой(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ, Знач Фильтр = Неопределено) Экспорт @@ -646,8 +648,8 @@ // описание см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера(). // ИмяПрофиля - Строка - имя профиля безопасности, существование которого проверяется. // -// Возвращаемое значение: -// Булево +// Возвращаемое значение: +// Булево - // Функция ПрофильБезопасностиСуществует(Знач ПараметрыАдминистрированияКластера, Знач ИмяПрофиля) Экспорт @@ -825,7 +827,8 @@ // описание см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера(). // Фильтр - Структура - параметры фильтрации информационных баз. // -// Возвращаемое значение: Массив(Структура). +// Возвращаемое значение: +// Массив(Структура). // Функция СвойстваИнформационныхБаз(Знач ИдентификаторКластера, Знач ПараметрыАдминистрированияКластера, Знач Фильтр = Неопределено) Экспорт @@ -1703,7 +1706,7 @@ // Строки, допускающие произвольные символы, выводятся в двойных кавычках, при этом двойные кавычки в самих строках дублируются. Цифры = "0123456789"; Латиница = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; - Кириллица = "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЫЪЬЭЮЯабвгдежзийклмнопрстуфхцчшщыъьэюя"; // АПК:1036 алфавит не проверять орфографически. + Кириллица = "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЫЪЬЭЮЯабвгдежзийклмнопрстуфхцчшщыъьэюя"; // АПК:1036 проверка орфографии не требуется. ДопустимыеСимволы = Цифры + Латиница + Кириллица + "-"; Если СтрокаСодержитТолькоДопустимыеСимволы(Значение, ДопустимыеСимволы) Тогда Возврат Значение; diff --git a/SSL/src/CommonModules/АдминистрированиеКластераRASКлиентСервер/Module.bsl b/SSL/src/CommonModules/АдминистрированиеКластераRASКлиентСервер/Module.bsl index b8f921209..21101e199 100644 --- a/SSL/src/CommonModules/АдминистрированиеКластераRASКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/АдминистрированиеКластераRASКлиентСервер/Module.bsl @@ -20,7 +20,8 @@ // ПараметрыАдминистрированияИБ - Структура, описывающая параметры подключения к информационной базе, // описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера(). // -// Возвращаемое значение: Структура, описывающая состояние блокировки сеансов и регламентных заданий, +// Возвращаемое значение: +// Структура - , описывающая состояние блокировки сеансов и регламентных заданий, // описание - см. АдминистрированиеКластераКлиентСервер.СвойстваБлокировкиСеансовИРегламентныхЗаданий(). // Функция БлокировкаСеансовИЗаданийИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ) Экспорт @@ -120,7 +121,8 @@ // ПараметрыАдминистрированияИБ - Структура, описывающая параметры подключения к информационной базе, // описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера(). // -// Возвращаемое значение: Булево. +// Возвращаемое значение: +// Булево - // Функция БлокировкаРегламентныхЗаданийИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ) Экспорт @@ -194,7 +196,8 @@ // выполняется сравнение. При использовании данного варианта описания фильтра сравнение всегда выполняется на // равенство. // -// Возвращаемое значение: Массив(Структура), массив структур, описывающих свойства сеансов. Описание структур - +// Возвращаемое значение: +// Массив Из Структура, массив структур, описывающих свойства сеансов. Описание структур - // см. АдминистрированиеКластераКлиентСервер.СвойстваСеанса(). // Функция СеансыИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ, Знач Фильтр = Неопределено) Экспорт @@ -340,7 +343,8 @@ // выполняется сравнение. При использовании данного варианта описания фильтра сравнение всегда выполняется на // равенство. // -// Возвращаемое значение: Массив(Структура), массив структур, описывающих свойства соединений. Описание структур - +// Возвращаемое значение: +// Массив Из Структура, массив структур, описывающих свойства соединений. Описание структур - // см. АдминистрированиеКластераКлиентСервер.СвойстваСоединения(). // Функция СоединенияСИнформационнойБазой(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ, Знач Фильтр = Неопределено) Экспорт @@ -472,7 +476,8 @@ // ПараметрыАдминистрированияИБ - Структура, описывающая параметры подключения к информационной базе, // описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера(). // -// Возвращаемое значение: Строка, имя профиля безопасности, назначенного для информационной базы. Если +// Возвращаемое значение: +// Строка - , имя профиля безопасности, назначенного для информационной базы. Если // для информационной базы не назначен профиль безопасности - возвращается пустая строка. // Функция ПрофильБезопасностиИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ) Экспорт @@ -498,7 +503,8 @@ // ПараметрыАдминистрированияИБ - Структура, описывающая параметры подключения к информационной базе, // описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера(). // -// Возвращаемое значение: Строка, имя профиля безопасности, назначенного для информационной базы в качестве профиля +// Возвращаемое значение: +// Строка - , имя профиля безопасности, назначенного для информационной базы в качестве профиля // безопасности безопасного режима. Если для информационной базы не назначен профиль безопасности - возвращается // пустая строка. // @@ -594,7 +600,8 @@ // описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), // ИмяПрофиля - Строка, имя профиля безопасности. // -// Возвращаемое значение: Структура, описывающая профиль безопасности, описание - см. +// Возвращаемое значение: +// Структура, описывающая профиль безопасности, описание - см. // АдминистрированиеКластераКлиентСервер.СвойстваПрофиляБезопасности(). // Функция ПрофильБезопасности(Знач ПараметрыАдминистрированияКластера, Знач ИмяПрофиля) Экспорт @@ -728,7 +735,8 @@ // ПараметрыАдминистрированияИнформационнойБазы - Структура, описывающая параметры подключения к информационной базе, // описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера(). // -// Возвращаемое значение: Строка, внутренний идентификатор информационной базы. +// Возвращаемое значение: +// Строка - , внутренний идентификатор информационной базы. // Функция ИдентификаторИнформационнойБазы(Знач ИдентификаторКластера, Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИнформационнойБазы) Экспорт @@ -752,7 +760,8 @@ // описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), // Фильтр - Структура, параметры фильтрации информационных баз. // -// Возвращаемое значение: Массив(Структура). +// Возвращаемое значение: +// Массив(Структура). // Функция СвойстваИнформационныхБаз(Знач ИдентификаторКластера, Знач ПараметрыАдминистрированияКластера, Знач Фильтр = Неопределено) Экспорт @@ -801,7 +810,8 @@ // описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), // Фильтр - Структура, параметры фильтрации кластеров серверов. // -// Возвращаемое значение: Массив(Структура). +// Возвращаемое значение: +// Массив(Структура). // Функция СвойстваКластеров(Знач ПараметрыАдминистрированияКластера, Знач Фильтр = Неопределено) Экспорт @@ -824,7 +834,8 @@ // описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), // Фильтр - Структура, параметры фильтрации рабочих процессов. // -// Возвращаемое значение: Массив(Структура). +// Возвращаемое значение: +// Массив(Структура). // Функция СвойстваРабочихПроцессов(Знач ИдентификаторКластера, Знач ПараметрыАдминистрированияКластера, Знач Фильтр = Неопределено) Экспорт @@ -858,7 +869,8 @@ // описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), // Фильтр - Структура, параметры фильтрации рабочих серверов. // -// Возвращаемое значение: Массив(Структура). +// Возвращаемое значение: +// Массив(Структура). // Функция СвойстваРабочихСерверов(Знач ИдентификаторКластера, Знач ПараметрыАдминистрированияКластера, Знач Фильтр = Неопределено) Экспорт @@ -918,7 +930,8 @@ // ИспользоватьСловарь - Булево, если Истина - возвращаемый результат будет заполнен с использован словаря, иначе - без // использования. // -// Возвращаемое значение: Массив(Структура), Массив(Соответствие) - массив структур, описывающих свойства сеансов +// Возвращаемое значение: +// Массив Из Структура, Массив Из Соответствие - массив структур, описывающих свойства сеансов // (описание структур - см. АдминистрированиеКластераКлиентСервер.СвойстваСеанса()) или массив соответствий, // описывающих свойства сеансов в нотации утилиты rac (при ИспользоватьСловарь = Ложь). // @@ -988,7 +1001,8 @@ // ИспользоватьСловарь - Булево, если Истина - возвращаемый результат будет заполнен с использован словаря, иначе - без // использования. // -// Возвращаемое значение: Массив(Структура), Массив(Соответствие) - массив структур, описывающих свойства соединений +// Возвращаемое значение: +// Массив Из Структура, Массив Из Соответствие - массив структур, описывающих свойства соединений // (описание структур - см. АдминистрированиеКластераКлиентСервер.СвойстваСоединения()) или массив соответствий, // описывающих свойства соединений в нотации утилиты rac (при ИспользоватьСловарь = Ложь). // @@ -1035,7 +1049,7 @@ // Возвращает путь к консольному клиенту сервера администрирования. // // Возвращаемое значение: -// Строка, путь к консольному клиенту сервера администрирования. +// Строка - , путь к консольному клиенту сервера администрирования. // Функция ПутьККлиентуСервераАдминистрирования() Экспорт @@ -1058,7 +1072,7 @@ // Возвращает каталог исполняемых файлов платформы. // // Возвращаемое значение: -// Строка, каталог исполняемых файлов платформы. +// Строка - , каталог исполняемых файлов платформы. // Функция КаталогИсполняемыхФайловПлатформы() @@ -1145,7 +1159,8 @@ // описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), // Фильтр - Структура, параметры фильтрации профилей безопасности. // -// Возвращаемое значение: Массив(Структура). +// Возвращаемое значение: +// Массив(Структура). // Функция ПолучитьПрофилиБезопасности(Знач ИдентификаторКластера, Знач ПараметрыАдминистрированияКластера, Знач Фильтр = Неопределено) @@ -1171,7 +1186,8 @@ // ИмяПрофиля - Строка, имя профиля безопасности, // Фильтр - Структура, параметры фильтрации виртуальных каталогов. // -// Возвращаемое значение: Массив(Структура). +// Возвращаемое значение: +// Массив(Структура). // Функция ПолучитьВиртуальныеКаталоги(Знач ИдентификаторКластера, Знач ПараметрыАдминистрированияКластера, Знач ИмяПрофиля, Знач Фильтр = Неопределено) @@ -1193,7 +1209,8 @@ // ИмяПрофиля - Строка, имя профиля безопасности, // Фильтр - Структура, параметры фильтрации COM-классов. // -// Возвращаемое значение: Массив(Структура). +// Возвращаемое значение: +// Массив(Структура). // Функция ПолучитьРазрешенныеCOMКлассы(Знач ИдентификаторКластера, Знач ПараметрыАдминистрированияКластера, Знач ИмяПрофиля, Знач Фильтр = Неопределено) @@ -1215,7 +1232,8 @@ // ИмяПрофиля - Строка, имя профиля безопасности, // Фильтр - Структура, параметры фильтрации внешних компонент. // -// Возвращаемое значение: Массив(Структура). +// Возвращаемое значение: +// Массив(Структура). // Функция ПолучитьРазрешенныеВнешниеКомпоненты(Знач ИдентификаторКластера, Знач ПараметрыАдминистрированияКластера, Знач ИмяПрофиля, Знач Фильтр = Неопределено) @@ -1237,7 +1255,8 @@ // ИмяПрофиля - Строка, имя профиля безопасности, // Фильтр - Структура, параметры фильтрации внешних модулей. // -// Возвращаемое значение: Массив(Структура). +// Возвращаемое значение: +// Массив(Структура). // Функция ПолучитьРазрешенныеВнешниеМодули(Знач ИдентификаторКластера, Знач ПараметрыАдминистрированияКластера, Знач ИмяПрофиля, Знач Фильтр = Неопределено) @@ -1259,7 +1278,8 @@ // ИмяПрофиля - Строка, имя профиля безопасности, // Фильтр - Структура, параметры фильтрации приложений ОС. // -// Возвращаемое значение: Массив(Структура). +// Возвращаемое значение: +// Массив(Структура). // Функция ПолучитьРазрешенныеПриложенияОС(Знач ИдентификаторКластера, Знач ПараметрыАдминистрированияКластера, Знач ИмяПрофиля, Знач Фильтр = Неопределено) @@ -1281,7 +1301,8 @@ // ИмяПрофиля - Строка, имя профиля безопасности, // Фильтр - Структура, параметры фильтрации Интернет-ресурсов. // -// Возвращаемое значение: Массив(Структура). +// Возвращаемое значение: +// Массив(Структура). // Функция ПолучитьРазрешенныеИнтернетРесурсы(Знач ИдентификаторКластера, Знач ПараметрыАдминистрированияКластера, Знач ИмяПрофиля, Знач Фильтр = Неопределено) @@ -1305,7 +1326,8 @@ // Словарь - Структура, соответствие имен свойств в потоке вывода утилиты rac и в требуемом описании, // Фильтр - Структура, параметры фильтрации элементов списка контроля доступа. // -// Возвращаемое значение: Массив(Структура). +// Возвращаемое значение: +// Массив(Структура). // Функция СпискиКонтроляДоступа(Знач ИдентификаторКластера, Знач ПараметрыАдминистрированияКластера, Знач ИмяПрофиля, Знач ИмяСписка, Знач Словарь, Знач Фильтр = Неопределено) @@ -1535,7 +1557,8 @@ // СтруктураОписание - Структура, содержащее описание объекта, полученное из потока вывода // утилиты rac. // -// Возвращаемое значение: Структура, в которой значения "full" и "list" преобразованы в Истина и Ложь. +// Возвращаемое значение: +// Структура - , в которой значения "full" и "list" преобразованы в Истина и Ложь. // Функция ПреобразоватьЗначенияСвойствИспользованияСписковДоступа(Знач СтруктураОписание) @@ -1578,7 +1601,7 @@ // Значение - произвольный, значение, которое необходимо преобразовать. // // Возвращаемое значение: -// Строка, значение, приведенное к нотации консольного клиента сервера администрирования. +// Строка - , значение, приведенное к нотации консольного клиента сервера администрирования. // Функция ПривестиЗначение(Знач Значение, Знач ИмяПараметра = "") @@ -1620,7 +1643,7 @@ // сервера администрирования. // // Возвращаемое значение: -// Произвольный, значение встроенного языка. +// Произвольный - , значение встроенного языка. // Функция ПривестиЭлементВывода(ЭлементВывода) @@ -1662,7 +1685,7 @@ // быть подставлены в шаблон. // // Возвращаемое значение: -// Строка, результат перенаправления стандартного потока вывода при запуске утилиты rac. +// Строка - , результат перенаправления стандартного потока вывода при запуске утилиты rac. // Функция ВыполнитьКоманду(Знач Шаблон, Знач ПараметрыАдминистрированияКластера, Знач ЗначенияПараметров = Неопределено) @@ -1841,7 +1864,8 @@ // Словарь - Структура, выступающая в качестве словаря сопоставления имен свойств объектов. // В нотации утилиты rac и в нотации API. // -// Возвращаемое значение: Структура, ключи - имена свойств в нотации API, значения - значения свойств +// Возвращаемое значение: +// Структура, ключи - имена свойств в нотации API, значения - значения свойств // из перенаправленного потока вывода. // Функция РазобратьЭлементВывода(Знач ЭлементВывода, Знач Словарь) @@ -1909,10 +1933,11 @@ // Преобразует фильтр в нотацию утилиты rac. // // Параметры: -// Фильтр - Структура, Массив(Структура), фильтр в нотации API, +// Фильтр - Структура, Массив Из Структура, фильтр в нотации API, // Словарь - Структура, описание соответствия имен свойств в нотации API и в нотации утилиты rac. // -// Возвращаемое значение: Структура, Массив(Структура) - фильтр в нотации утилиты rac. +// Возвращаемое значение: +// Структура, Массив Из Структура - фильтр в нотации утилиты rac. // Функция ФильтрВНотациюRac(Знач Фильтр, Знач Словарь) @@ -1948,7 +1973,8 @@ // блокировки сеансов и регламентных заданий, для структур, используемых в API и // описаний объектов в выводе rac'a. // -// Возвращаемое значение: ФиксированнаяСтруктура: +// Возвращаемое значение: +// ФиксированнаяСтруктура: // Ключ - Строка, имя свойства в API (см. // АдминистрированиеКластераКлиентСервер.СвойстваБлокировкиСеансовИРегламентныхЗаданий()), // Значение - Строка, имя свойства объекта. @@ -1972,7 +1998,8 @@ // Возвращает соответствие имен свойств сеансов информационной базы для структур, используемых в API и // описаний объектов в выводе rac'a. // -// Возвращаемое значение: ФиксированнаяСтруктура: +// Возвращаемое значение: +// ФиксированнаяСтруктура: // Ключ - Строка, имя свойства в API (см. АдминистрированиеКластераКлиентСервер.СвойстваСеанса()), // Значение - Строка, имя свойства объекта. // @@ -2012,7 +2039,8 @@ // Возвращает соответствие имен свойств соединений с информационной базой для структур, используемых в API и // описаний объектов в выводе rac'a. // -// Возвращаемое значение: ФиксированнаяСтруктура: +// Возвращаемое значение: +// ФиксированнаяСтруктура: // Ключ - Строка, имя свойства в API (см. АдминистрированиеКластераКлиентСервер.СвойстваСоединения()), // Значение - Строка, имя свойства объекта. // @@ -2051,7 +2079,8 @@ // Возвращает соответствие имен свойств профиля безопасности для структур, используемых в API и // описаний объектов в выводе rac'a. // -// Возвращаемое значение: ФиксированнаяСтруктура: +// Возвращаемое значение: +// ФиксированнаяСтруктура: // Ключ - Строка, имя свойства в API (см. АдминистрированиеКластераКлиентСервер.СвойстваПрофиляБезопасности()), // Значение - Строка, имя свойства объекта. // @@ -2081,7 +2110,8 @@ // Возвращает соответствие имен свойств профиля безопасности для структур, используемых в API и // описаний объектов в выводе rac'a. // -// Возвращаемое значение: ФиксированнаяСтруктура: +// Возвращаемое значение: +// ФиксированнаяСтруктура: // Ключ - Строка, имя свойства в API (см. АдминистрированиеКластераКлиентСервер.СвойстваПрофиляБезопасности()), // Значение - Строка, имя свойства объекта. // @@ -2103,7 +2133,8 @@ // Возвращает соответствие имен свойств виртуального каталога для структур, используемых в API и // описаний объектов в выводе rac'a. // -// Возвращаемое значение: ФиксированнаяСтруктура: +// Возвращаемое значение: +// ФиксированнаяСтруктура: // Ключ - Строка, имя свойства в API (см. АдминистрированиеКластераКлиентСервер.СвойстваВиртуальногоКаталога()), // Значение - Строка, имя свойства объекта. // @@ -2126,7 +2157,8 @@ // Возвращает соответствие имен свойств COM-класса для структур, используемых в API и // описаний объектов в выводе rac'a. // -// Возвращаемое значение: ФиксированнаяСтруктура: +// Возвращаемое значение: +// ФиксированнаяСтруктура: // Ключ - Строка, имя свойства в API (см. АдминистрированиеКластераКлиентСервер.СвойстваCOMКласса()), // Значение - Строка, имя свойства объекта. // @@ -2148,7 +2180,8 @@ // Возвращает соответствие имен свойств внешней компоненты для структур, используемых в API и // описаний объектов в выводе rac'a. // -// Возвращаемое значение: ФиксированнаяСтруктура: +// Возвращаемое значение: +// ФиксированнаяСтруктура: // Ключ - Строка, имя свойства в API (см. АдминистрированиеКластераКлиентСервер.СвойстваВнешнейКомпоненты()), // Значение - Строка, имя свойства объекта. // @@ -2168,7 +2201,8 @@ // Возвращает соответствие имен свойств внешнего модуля для структур, используемых в API и // описаний объектов в выводе rac'a. // -// Возвращаемое значение: ФиксированнаяСтруктура: +// Возвращаемое значение: +// ФиксированнаяСтруктура: // Ключ - Строка, имя свойства в API (см. АдминистрированиеКластераКлиентСервер.СвойстваВнешнегоМодуля()), // Значение - Строка, имя свойства объекта. // @@ -2188,7 +2222,8 @@ // Возвращает соответствие имен свойств приложения операционной системы для структур, используемых в API и // описаний объектов в выводе rac'a. // -// Возвращаемое значение: ФиксированнаяСтруктура: +// Возвращаемое значение: +// ФиксированнаяСтруктура: // Ключ - Строка, имя свойства в API (см. АдминистрированиеКластераКлиентСервер.СвойстваПриложенияОС()), // Значение - Строка, имя свойства объекта. // @@ -2208,7 +2243,8 @@ // Возвращает соответствие имен свойств Интернет-ресурса для структур, используемых в API и // описаний объектов в выводе rac'a. // -// Возвращаемое значение: ФиксированнаяСтруктура: +// Возвращаемое значение: +// ФиксированнаяСтруктура: // Ключ - Строка, имя свойства в API (см. АдминистрированиеКластераКлиентСервер.СвойстваИнтернетРесурса()), // Значение - Строка, имя свойства объекта. // @@ -2229,7 +2265,8 @@ // Возвращает имена ключевых свойств acl'ей (в нотации утилиты rac). // -// Возвращаемое значение: ФиксированнаяСтруктура: +// Возвращаемое значение: +// ФиксированнаяСтруктура: // Ключ - Строка, имя acl'a, // Значение - Строка, имя ключевого свойства. // @@ -2250,7 +2287,8 @@ // Возвращает правила форматирования булевых свойств в соответствии с нотацией // утилиты rac. // -// Возвращаемое значение: ФиксированноеСоответствие: +// Возвращаемое значение: +// ФиксированноеСоответствие: // Ключ - Строка, имя свойства, // Значение - Строка, форматная строка для значений свойства. // @@ -2283,7 +2321,8 @@ // Возвращает перечень свойств, значения которых экранируются кавычками // в потоке вывода утилиты rac. // -// Возвращаемое значение: Массив(Строка) - список имен свойств. +// Возвращаемое значение: +// Массив Из Строка - список имен свойств. // Функция СвойстваЭкранируемыеКавычками() diff --git a/SSL/src/CommonModules/АдминистрированиеКластераКлиентСервер/Module.bsl b/SSL/src/CommonModules/АдминистрированиеКластераКлиентСервер/Module.bsl index ffc502f2e..e58811dba 100644 --- a/SSL/src/CommonModules/АдминистрированиеКластераКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/АдминистрированиеКластераКлиентСервер/Module.bsl @@ -1168,7 +1168,7 @@ // использования. // // Возвращаемое значение: -// - Массив(Структура) - Массив - структур (см. АдминистрированиеКластераКлиентСервер.СвойстваСеанса), описывающих +// - Массив Из Структура - Массив - структур (см. АдминистрированиеКластераКлиентСервер.СвойстваСеанса), описывающих // свойства сеансов, // - Массив(Соответствие) - Массив - соответствий (см. АдминистрированиеКластераКлиентСервер.СвойстваСеанса), // описывающих свойства сеансов в нотации утилиты rac (при ИспользоватьСловарь = Ложь). @@ -1206,7 +1206,7 @@ // использования. // // Возвращаемое значение: -// - Массив(Структура) - Массив - структур (см. АдминистрированиеКластераКлиентСервер.СвойстваСоединений), описывающих +// - Массив Из Структура - Массив - структур (см. АдминистрированиеКластераКлиентСервер.СвойстваСоединений), описывающих // свойства соединений, // - Массив(Соответствие) - Массив - соответствий (см. АдминистрированиеКластераКлиентСервер.СвойстваСоединений), // описывающих свойства соединений в нотации утилиты rac (при ИспользоватьСловарь = Ложь). diff --git a/SSL/src/CommonModules/АдресныйКлассификатор/Module.bsl b/SSL/src/CommonModules/АдресныйКлассификатор/Module.bsl index ab585f0bb..b532c5168 100644 --- a/SSL/src/CommonModules/АдресныйКлассификатор/Module.bsl +++ b/SSL/src/CommonModules/АдресныйКлассификатор/Module.bsl @@ -310,6 +310,7 @@ // Возвращает коды адрес (ОКТМО, ОКАТО, налоговых инспекций ФНС и др.) и // уникальные идентификационные коды адресного объекта и дома. +// Кода не будут заполнены, если адрес не соответствует ФИАС или содержит адресные поля без идентификаторов. // // Параметры: // Адрес - Строка - адрес во внутреннем формате JSON или XML, соответствующий структуре XDTO-пакета Адрес. diff --git a/SSL/src/CommonModules/АдресныйКлассификаторКлиент/Module.bsl b/SSL/src/CommonModules/АдресныйКлассификаторКлиент/Module.bsl index 8dff05b8d..0d1e00f6d 100644 --- a/SSL/src/CommonModules/АдресныйКлассификаторКлиент/Module.bsl +++ b/SSL/src/CommonModules/АдресныйКлассификаторКлиент/Module.bsl @@ -70,19 +70,25 @@ ОткрытьФорму("РегистрСведений.АдресныеОбъекты.Форма.СведенияОбАдресномКлассификаторе", Параметры,,,,, ОписаниеОповещенияОЗакрытии); КонецПроцедуры -#КонецОбласти - -#Область СлужебныеПроцедурыИФункции - Процедура АвторизоватьНаСайтеПоддержкиПользователей(ОповещениеОЗакрытии, ВладелецФормы) Экспорт Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ИнтернетПоддержкаПользователей") Тогда + МодульИнтернетПоддержкаПользователейКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ИнтернетПоддержкаПользователейКлиент"); - МодульИнтернетПоддержкаПользователейКлиент.ПодключитьИнтернетПоддержкуПользователей(ОповещениеОЗакрытии, ВладелецФормы); + Если МодульИнтернетПоддержкаПользователейКлиент.ДоступноПодключениеИнтернетПоддержки() Тогда + МодульИнтернетПоддержкаПользователейКлиент.ПодключитьИнтернетПоддержкуПользователей(ОповещениеОЗакрытии, ВладелецФормы); + Иначе + ВыполнитьОбработкуОповещения(ОповещениеОЗакрытии, Неопределено); + КонецЕсли; + КонецЕсли; - + КонецПроцедуры +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + // Вызывает диалог выбора каталога. // // Параметры: @@ -161,18 +167,59 @@ Результат.Вставить("Ошибки", Неопределено); Результат.Вставить("ФайлыПоРегионам", Новый Соответствие); - ДополнительныеПараметры = Новый Структура; - ДополнительныеПараметры.Вставить("ОтсутствующиеФайлы", Новый Соответствие); - ДополнительныеПараметры.Вставить("ОписаниеЗавершения", ОписаниеЗавершения); - ДополнительныеПараметры.Вставить("Результат", Результат); - ДополнительныеПараметры.Вставить("РабочийКаталог", РабочийКаталог); - ДополнительныеПараметры.Вставить("ПолеОшибки", ПолеОшибки); + ДополнительныеПараметры = ПараметрыЗагрузки(); + ДополнительныеПараметры.ОписаниеЗавершения = ОписаниеЗавершения; + ДополнительныеПараметры.ПолеОшибки = ПолеОшибки; + ДополнительныеПараметры.РабочийКаталог = РабочийКаталог; + ДополнительныеПараметры.Результат.КодыРегионов = КодыРегионов; + ОписаниеОповещения = Новый ОписаниеОповещения("АнализДоступностиФайловКлассификатораВКаталогеЗавершение", ЭтотОбъект, ДополнительныеПараметры); ВыполнитьОбработкуОповещения(ОписаниеОповещения, 0); КонецПроцедуры +// Параметры загрузки файлов. +// +// Возвращаемое значение: +// Структура - Содержит: +// * ИндексРегиона - Неопределено - индекс региона; +// * ИмяФайла - Строка - Имя файла региона; +// * КодРегиона - Неопределено -цифровой код региона; +// * ПолеОшибки - Строка - элементы формы с ошибкой; +// * РабочийКаталог - Строка - каталог загрузки файлов адресных сведений; +// * Результат - Структура - Содержит: +// ** КодыРегионов - Массив -коды регионов; +// ** ЕстьВсеФайлы - Булево - признак наличия файлов; +// ** Ошибки - Массив - список ошибок; +// ** ФайлыПоРегионам - Соответствие - имя файла и путь к нему. +// * ОписаниеЗавершения - Строка - описание завершения; +// * ОтсутствующиеФайлы - Соответствие - Список отсутствующих файлов. +// +Функция ПараметрыЗагрузки() + + ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("ОтсутствующиеФайлы", Новый Соответствие); + ДополнительныеПараметры.Вставить("ОписаниеЗавершения", ""); + + ДополнительныеПараметры.Вставить("РабочийКаталог", ""); + ДополнительныеПараметры.Вставить("ПолеОшибки", ""); + + ДополнительныеПараметры.Вставить("КодРегиона", Неопределено); + ДополнительныеПараметры.Вставить("ИмяФайла", ""); + ДополнительныеПараметры.Вставить("ИндексРегиона", Неопределено); + + Результат = Новый Структура; + Результат.Вставить("КодыРегионов", Новый Массив); + Результат.Вставить("ЕстьВсеФайлы", Истина); + Результат.Вставить("Ошибки", Неопределено); + Результат.Вставить("ФайлыПоРегионам", Новый Соответствие); + ДополнительныеПараметры.Вставить("Результат", Результат); + + Возврат ДополнительныеПараметры + +КонецФункции + Процедура АнализДоступностиФайловКлассификатораВКаталогеЗавершение(ИндексРегиона, ДополнительныеПараметры) Экспорт Если ИндексРегиона <= ДополнительныеПараметры.Результат.КодыРегионов.Количество() - 1 Тогда @@ -182,8 +229,8 @@ ДополнительныеПараметры.Результат.ФайлыПоРегионам[КодРегиона.Значение] = Новый Массив; ИмяФайла = Формат(КодРегиона.Значение, "ЧЦ=2; ЧН=; ЧВН=; ЧГ=") + ".ZIP"; - ДополнительныеПараметры.Вставить("КодРегиона", КодРегиона.Значение); - ДополнительныеПараметры.Вставить("ИмяФайла", ИмяФайла); + ДополнительныеПараметры.Вставить("КодРегиона", КодРегиона.Значение); + ДополнительныеПараметры.Вставить("ИмяФайла", ИмяФайла); ДополнительныеПараметры.Вставить("ИндексРегиона", ИндексРегиона); ОписаниеОповещения = Новый ОписаниеОповещения("АнализДоступностиФайловКлассификатораВКаталогеПослеПоискаФайлов", ЭтотОбъект, ДополнительныеПараметры); НачатьПоискФайлов(ОписаниеОповещения, ДополнительныеПараметры.РабочийКаталог, МаскаФайла(ИмяФайла)); @@ -206,6 +253,13 @@ КонецПроцедуры + +// Обработчик оповещения после вызова метода НачатьПоискФайлов +// +// Параметры: +// НайденныеФайлы - Массив - файлы с адресными сведениями +// ДополнительныеПараметры- Структура - см. ПараметрыЗагрузки +// Процедура АнализДоступностиФайловКлассификатораВКаталогеПослеПоискаФайлов(НайденныеФайлы, ДополнительныеПараметры) Экспорт СтруктураФайла = Новый Структура("Существует, Имя, ИмяБезРасширения, ПолноеИмя, Путь, Расширение", Ложь); diff --git a/SSL/src/CommonModules/АдресныйКлассификаторСлужебный/Module.bsl b/SSL/src/CommonModules/АдресныйКлассификаторСлужебный/Module.bsl index c707cb1f9..177d9c497 100644 --- a/SSL/src/CommonModules/АдресныйКлассификаторСлужебный/Module.bsl +++ b/SSL/src/CommonModules/АдресныйКлассификаторСлужебный/Module.bsl @@ -1114,7 +1114,7 @@ ОсновныеКодыЗаполнены = Ложь; // Основные коды - Если ЗначениеЗаполнено(ИдентификаторАдресногоОбъекта) Тогда + Если ЗаполненыВсеИдентификаторыОбъекта(Адрес) И ЗначениеЗаполнено(ИдентификаторАдресногоОбъекта) Тогда СведенияОДоме = СведенияОДоме(); @@ -1129,7 +1129,7 @@ КонецЕсли; КодКЛАДРЗаполнены = Ложь; - Если ЗначениеЗаполнено(ИдентификаторАдресногоОбъекта) Тогда + Если ЗаполненыВсеИдентификаторыОбъекта(Адрес) И ЗначениеЗаполнено(ИдентификаторАдресногоОбъекта) Тогда // Основные КЛАДР Запрос = Новый Запрос("ВЫБРАТЬ ПЕРВЫЕ 1 | АдресныеОбъекты.КодКЛАДР КАК КодКЛАДР @@ -1168,12 +1168,12 @@ КонецЕсли; - // Получаем код КЛАДР из веб-сервиса. + // Получаем коды из веб-сервиса. Если ЗагруженныеАдресныеСведения["КлассификаторДоступен"] Или Источник = "Сервис1С" Тогда ИдентификаторОбъекта = ?(ЗначениеЗаполнено(Адрес.houseId), Адрес.houseId, ИдентификаторАдресногоОбъекта); - Если ЗначениеЗаполнено(ИдентификаторОбъекта) Тогда + Если ЗаполненыВсеИдентификаторыОбъекта(Адрес) И ЗначениеЗаполнено(ИдентификаторОбъекта) Тогда ТекстGETЗапроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("selectByCode?code=%1&codeType=ID", Строка(ИдентификаторОбъекта)); @@ -1364,10 +1364,10 @@ | ДОБАВИТЬКДАТЕ(ЗагруженныеВерсииАдресныхСведений.ДатаЗагрузки, МЕСЯЦ, 1) < &ТекущаяДата КАК Устарело |ИЗ | Классификатор КАК Классификатор - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗагруженныеВерсииАдресныхСведений КАК ЗагруженныеВерсииАдресныхСведений - | ПО (Классификатор.КодСубъектаРФ = ЗагруженныеВерсииАдресныхСведений.КодСубъектаРФ) | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъекты | ПО АдресныеОбъекты.КодСубъектаРФ = Классификатор.КодСубъектаРФ + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗагруженныеВерсииАдресныхСведений КАК ЗагруженныеВерсииАдресныхСведений + | ПО (Классификатор.КодСубъектаРФ = ЗагруженныеВерсииАдресныхСведений.КодСубъектаРФ) |ГДЕ | АдресныеОбъекты.Уровень = 1 |УПОРЯДОЧИТЬ ПО @@ -1546,7 +1546,6 @@ Возврат ПравоДоступа("Изменение", Метаданные.РегистрыСведений.АдресныеОбъекты); КонецФункции - #Область АдресныйКлассификаторВМоделиСервиса //////////////////////////////////////////////////////////////////////////////// @@ -1689,7 +1688,7 @@ Иначе Если РезультатВебСервис.Данные.status = "PARTIALLY_RECOGNIZED" И ВСтруктуру Тогда Адрес = АдресДляСохраненияВБазе(РезультатВебСервис.Данные.value, Ложь); - Адрес.comment = НСтр("ru='Нераспознанная часть адреса'") + ": " + РезультатВебСервис.Данные.unrecognizedPart; + Адрес.comment = НСтр("ru = 'Нераспознанная часть адреса'") + ": " + РезультатВебСервис.Данные.unrecognizedPart; Иначе Адрес = ОписаниеНовойКонтактнойИнформации(); Адрес.value = Представление; @@ -2088,7 +2087,7 @@ Запрос = Новый Запрос(); - Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 5000 + Запрос.Текст = "ВЫБРАТЬ | АдресныеОбъекты.Наименование КАК Наименование, | АдресныеОбъекты.Сокращение КАК Сокращение, | АдресныеОбъекты.Уровень КАК Уровень, @@ -2110,7 +2109,7 @@ | ; | | //////////////////////////////////////////////////////////////////////////////// - | ВЫБРАТЬ ПЕРВЫЕ 5000 + | ВЫБРАТЬ | АдресныеОбъекты.Наименование КАК Наименование, | АдресныеОбъекты.Сокращение КАК Сокращение, | АдресныеОбъекты.Уровень КАК Уровень, @@ -2131,7 +2130,7 @@ | ; | | //////////////////////////////////////////////////////////////////////////////// - | ВЫБРАТЬ ПЕРВЫЕ 5000 + | ВЫБРАТЬ | АдресныеОбъекты.Наименование КАК Наименование, | АдресныеОбъекты.Сокращение КАК Сокращение, | АдресныеОбъекты.Уровень КАК Уровень, @@ -2152,7 +2151,7 @@ | ; | | //////////////////////////////////////////////////////////////////////////////// - | ВЫБРАТЬ ПЕРВЫЕ 5000 + | ВЫБРАТЬ | АдресныеОбъекты.Наименование КАК Наименование, | АдресныеОбъекты.Сокращение КАК Сокращение, | АдресныеОбъекты.Уровень КАК Уровень, @@ -2173,7 +2172,7 @@ | ; | | //////////////////////////////////////////////////////////////////////////////// - | ВЫБРАТЬ ПЕРВЫЕ 5000 + | ВЫБРАТЬ | АдресныеОбъекты.Наименование КАК Наименование, | АдресныеОбъекты.Сокращение КАК Сокращение, | АдресныеОбъекты.Уровень КАК Уровень, @@ -2194,7 +2193,7 @@ | ; | | //////////////////////////////////////////////////////////////////////////////// - | ВЫБРАТЬ ПЕРВЫЕ 5000 + | ВЫБРАТЬ | АдресныеОбъекты.Наименование КАК Наименование, | АдресныеОбъекты.Сокращение КАК Сокращение, | АдресныеОбъекты.Уровень КАК Уровень, @@ -2314,6 +2313,7 @@ Запрос.УстановитьПараметр("Сокращение" + Строка(ИндексСчетчик), ""); КонецЦикла; + РезультатЗапроса = Запрос.ВыполнитьПакетСПромежуточнымиДанными(); Адреса = РезультатЗапроса[6]; Дома = РезультатЗапроса[7]; @@ -2715,7 +2715,7 @@ Запрос = Новый Запрос; Запрос.Текст = ТекстЗапроса; - Запрос.УстановитьПараметр("ПредставлениеМуниципальный", МуниципальныйАдрес()); + Запрос.УстановитьПараметр("ПредставлениеМуниципальный", МуниципальныйАдрес()); Запрос.УстановитьПараметр("ПредставлениеАдминистративный", АдминистративноТерриториальныйАдрес()); Запрос.УстановитьПараметр("Идентификатор", Новый УникальныйИдентификатор(Значение.Идентификатор)); @@ -3629,7 +3629,7 @@ Исключение Результат.Отказ = Истина; Результат.ПодробноеПредставлениеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - Результат.КраткоеПредставлениеОшибки = НСтр("ru='При получении данных из веб-сервиса возникли проблемы.'"); + Результат.КраткоеПредставлениеОшибки = НСтр("ru = 'При получении данных из веб-сервиса возникли проблемы.'"); ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка,,, Результат.ПодробноеПредставлениеОшибки); Возврат; КонецПопытки; @@ -3646,7 +3646,7 @@ Если РезультатПроверки.КодСостояния = 400 Тогда - ПредставлениеОшибки = НСтр("ru='Проверка адреса не выполнена. Некоторые поля адреса содержат некорректные сведения.'"); + ПредставлениеОшибки = НСтр("ru = 'Проверка адреса не выполнена. Некоторые поля адреса содержат некорректные сведения.'"); Иначе @@ -3803,11 +3803,11 @@ Если ФайлыСтарогоФИАС.Количество() > 0 Тогда - ТекстПричины = НСтр("ru='Не допускается загрузка адресных сведений без поддержки муниципальных адресов.'"); + ТекстПричины = НСтр("ru = 'Не допускается загрузка адресных сведений без поддержки муниципальных адресов.'"); Иначе - ТекстПричины = НСтр("ru='Файл не содержит адресных сведений ФИАС'"); + ТекстПричины = НСтр("ru = 'Файл не содержит адресных сведений ФИАС'"); КонецЕсли; @@ -4270,7 +4270,7 @@ ТаблицаСокращенийЗданий = НаборРезультатов[1].Выгрузить(); ТаблицаСокращенийЗданий.Индексы.Добавить("ТипАдрЭл"); - Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 5000 + Запрос.Текст = "ВЫБРАТЬ | АдресныеОбъекты.Наименование КАК Наименование, | АдресныеОбъекты.Сокращение КАК Сокращение, | АдресныеОбъекты.Уровень КАК Уровень, @@ -4292,7 +4292,7 @@ |; | |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ ПЕРВЫЕ 5000 + |ВЫБРАТЬ | АдресныеОбъекты.Наименование КАК Наименование, | АдресныеОбъекты.Сокращение КАК Сокращение, | АдресныеОбъекты.Уровень КАК Уровень, @@ -4313,7 +4313,7 @@ |; | |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ ПЕРВЫЕ 5000 + |ВЫБРАТЬ | АдресныеОбъекты.Наименование КАК Наименование, | АдресныеОбъекты.Сокращение КАК Сокращение, | АдресныеОбъекты.Уровень КАК Уровень, @@ -4334,7 +4334,7 @@ |; | |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ ПЕРВЫЕ 5000 + |ВЫБРАТЬ | АдресныеОбъекты.Наименование КАК Наименование, | АдресныеОбъекты.Сокращение КАК Сокращение, | АдресныеОбъекты.Уровень КАК Уровень, @@ -4355,7 +4355,7 @@ | ; | |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ ПЕРВЫЕ 5000 + |ВЫБРАТЬ | АдресныеОбъекты.Наименование КАК Наименование, | АдресныеОбъекты.Сокращение КАК Сокращение, | АдресныеОбъекты.Уровень КАК Уровень, @@ -4376,7 +4376,7 @@ |; | |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ ПЕРВЫЕ 5000 + |ВЫБРАТЬ | АдресныеОбъекты.Наименование КАК Наименование, | АдресныеОбъекты.Сокращение КАК Сокращение, | АдресныеОбъекты.Уровень КАК Уровень, @@ -4491,6 +4491,7 @@ | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДополнительныеАдресныеСведения КАК ДополнительныеСведения | ПО (ДополнительныеСведения.Идентификатор = АдресныйОбъект.ДополнительныеАдресныеСведения)"; + ИменаУровнейАдреса = ИменаУровнейАдреса(Адрес.AddressType, Истина); Счетчик = 0; КакиеУровниПроверять = Новый Соответствие; @@ -4530,7 +4531,6 @@ Дома = РезультатЗапроса[7]; ДополнительныеСведения = РезультатЗапроса[9]; - СписокКорректныхАдресов = Новый Массив; Для каждого АдресСтрока Из Адреса.Выгрузить() Цикл @@ -4540,39 +4540,39 @@ НСтр("ru = 'Район ""%1"" отсутствует в ФИАС'"), Адрес.District + " " + Адрес.DistrictType)); КонецЕсли; - Если НЕ ДанныеУровняКорректные(Адрес, "Area", НСтр("ru='Субъект РФ'"), АдресСтрока, КакиеУровниПроверять, ОшибкиПроверки) Тогда + Если НЕ ДанныеУровняКорректные(Адрес, "Area", НСтр("ru = 'Субъект РФ'"), АдресСтрока, КакиеУровниПроверять, ОшибкиПроверки) Тогда Продолжить; КонецЕсли; - Если НЕ ДанныеУровняКорректные(Адрес, "MunDistrict", НСтр("ru='Муниципальный район'"), АдресСтрока, КакиеУровниПроверять, ОшибкиПроверки) Тогда + Если НЕ ДанныеУровняКорректные(Адрес, "MunDistrict", НСтр("ru = 'Муниципальный район'"), АдресСтрока, КакиеУровниПроверять, ОшибкиПроверки) Тогда Продолжить; КонецЕсли; - Если НЕ ДанныеУровняКорректные(Адрес, "Distict", НСтр("ru='Район'"), АдресСтрока, КакиеУровниПроверять, ОшибкиПроверки) Тогда + Если НЕ ДанныеУровняКорректные(Адрес, "Distict", НСтр("ru = 'Район'"), АдресСтрока, КакиеУровниПроверять, ОшибкиПроверки) Тогда Продолжить; КонецЕсли; - Если НЕ ДанныеУровняКорректные(Адрес, "Settlement", НСтр("ru='Поселение'"), АдресСтрока, КакиеУровниПроверять, ОшибкиПроверки) Тогда + Если НЕ ДанныеУровняКорректные(Адрес, "Settlement", НСтр("ru = 'Поселение'"), АдресСтрока, КакиеУровниПроверять, ОшибкиПроверки) Тогда Продолжить; КонецЕсли; - Если НЕ ДанныеУровняКорректные(Адрес, "City", НСтр("ru='Город'"), АдресСтрока, КакиеУровниПроверять, ОшибкиПроверки) Тогда + Если НЕ ДанныеУровняКорректные(Адрес, "City", НСтр("ru = 'Город'"), АдресСтрока, КакиеУровниПроверять, ОшибкиПроверки) Тогда Продолжить; КонецЕсли; - Если НЕ ДанныеУровняКорректные(Адрес, "CityDistrict", НСтр("ru='Внутригородской район'"), АдресСтрока, КакиеУровниПроверять, ОшибкиПроверки) Тогда + Если НЕ ДанныеУровняКорректные(Адрес, "CityDistrict", НСтр("ru = 'Внутригородской район'"), АдресСтрока, КакиеУровниПроверять, ОшибкиПроверки) Тогда Продолжить; КонецЕсли; - Если НЕ ДанныеУровняКорректные(Адрес, "Territory", НСтр("ru='Территория'"), АдресСтрока, КакиеУровниПроверять, ОшибкиПроверки) Тогда + Если НЕ ДанныеУровняКорректные(Адрес, "Territory", НСтр("ru = 'Территория'"), АдресСтрока, КакиеУровниПроверять, ОшибкиПроверки) Тогда Продолжить; КонецЕсли; - Если НЕ ДанныеУровняКорректные(Адрес, "Locality", НСтр("ru='Населенный пункт'"), АдресСтрока, КакиеУровниПроверять, ОшибкиПроверки) Тогда + Если НЕ ДанныеУровняКорректные(Адрес, "Locality", НСтр("ru = 'Населенный пункт'"), АдресСтрока, КакиеУровниПроверять, ОшибкиПроверки) Тогда Продолжить; КонецЕсли; - Если НЕ ДанныеУровняКорректные(Адрес, "Street", НСтр("ru='Улица'"), АдресСтрока, КакиеУровниПроверять, ОшибкиПроверки) Тогда + Если НЕ ДанныеУровняКорректные(Адрес, "Street", НСтр("ru = 'Улица'"), АдресСтрока, КакиеУровниПроверять, ОшибкиПроверки) Тогда Продолжить; КонецЕсли; @@ -4658,11 +4658,13 @@ Если СведенияОДоме.Количество() > 1 Тогда Корпус = СведенияОДоме[1]; - Если СведенияОДоме.Количество() > 3 Тогда - Строение = СведенияОДоме[3]; - Если ЗначениеЗаполнено(Строение) Тогда - ВидСтроения = ТипЧисло.ПривестиЗначение(СведенияОДоме[2]); - НазваниеСтроения = НаименованиеЗданийИСтроений.Строения.Получить(ВидСтроения); + Если СведенияОДоме.Количество() > 2 Тогда + ВидСтроения = ТипЧисло.ПривестиЗначение(СведенияОДоме[2]); + Если СведенияОДоме.Количество() > 3 Тогда + Строение = СведенияОДоме[3]; + Если ЗначениеЗаполнено(Строение) Тогда + НазваниеСтроения = НаименованиеЗданийИСтроений.Строения.Получить(ВидСтроения); + КонецЕсли; КонецЕсли; КонецЕсли; КонецЕсли; @@ -4766,7 +4768,7 @@ ПочтовыйИндекс = Формат(ПочтовыйИндекс, "ЧГ=0"); Если СтрСравнить(ПочтовыйИндекс, Адрес.ZipCode) <> 0 Тогда - ДополнительныйТекст = ?(ЗначениеЗаполнено(ПочтовыйИндекс), " " + НСтр("ru='Возможно, правильный индекс'") + " " + ПочтовыйИндекс, ""); + ДополнительныйТекст = ?(ЗначениеЗаполнено(ПочтовыйИндекс), " " + НСтр("ru = 'Возможно, правильный индекс'") + " " + ПочтовыйИндекс, ""); ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, "Индекс", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Индекс ""%1"" не соответствует адресу.%2'"), Адрес.ZipCode, ДополнительныйТекст)); КонецЕсли; @@ -5500,13 +5502,13 @@ Разделитель = ?(ПустаяСтрока(ТекстПроСтроения), "", ", "); - Если ЗначениеЗаполнено(СтрокаПоиска) И СтрНачинаетсяС(ОписаниеДома.Строение, СтрокаПоиска) Тогда + Если ЗначениеЗаполнено(СтрокаПоиска) И СтрНачинаетсяС(ОписаниеДома.Строение, СтрокаПоиска) Тогда НайденныйФрагментСтроения = СтроковыеФункции.ФорматированнаяСтрока("%1 %2%3", Разделитель + НазваниеСтроения, СтрокаПоиска, Сред(ОписаниеДома.Строение, СтрДлина(СтрокаПоиска) + 1)); Иначе НайденныйФрагментСтроения = Разделитель + НазваниеСтроения + " " + ОписаниеДома.Строение; КонецЕсли; - + ТекстПроСтроения = Новый ФорматированнаяСтрока(ТекстПроСтроения, НайденныйФрагментСтроения); Строение = Новый Структура; @@ -5789,10 +5791,11 @@ КонецФункции + // Пространство имен для операций XDTO. // // Возвращаемое значение: -// Строка +// Строка - // Функция ПространствоИмен() @@ -6038,7 +6041,7 @@ ФайлЗагрузки = ФайлЗагрузкиСубъектаРФ(КодСубъектаРФ, КаталогФайлов, "ADDROBJ", "AddressObjects"); Если ФайлЗагрузки = Неопределено Тогда - ВызватьИсключение НСтр("ru='Загрузка адресных сведений прервана. В загружаемых файлах не найден файл с адресными сведениями.'"); + ВызватьИсключение НСтр("ru = 'Загрузка адресных сведений прервана. В загружаемых файлах не найден файл с адресными сведениями.'"); Возврат; КонецЕсли; @@ -6326,7 +6329,7 @@ ФайлЗагрузки = ФайлЗагрузкиСубъектаРФ(КодСубъектаРФ, КаталогФайлов, "ARCHOBJ", "ArchiveObjects"); Если ФайлЗагрузки = Неопределено Тогда - ВызватьИсключение НСтр("ru='Загрузка адресных сведений прервана. В загружаемых файлах не найден файл с адресными сведениями.'"); + ВызватьИсключение НСтр("ru = 'Загрузка адресных сведений прервана. В загружаемых файлах не найден файл с адресными сведениями.'"); Возврат; КонецЕсли; @@ -6587,9 +6590,24 @@ Возврат; КонецЕсли; - // Т.к. адресный классификатор не содержит сведений, то очищаем таблицу адресных сведений. - УровниСокращенийАдресныхСведений = РегистрыСведений.УровниСокращенийАдресныхСведений.СоздатьНаборЗаписей(); - УровниСокращенийАдресныхСведений.Записать(); + НачатьТранзакцию(); + + Попытка + + БлокировкаДанных = Новый БлокировкаДанных; + ЭлементБлокировкиДанных = БлокировкаДанных.Добавить("РегистрСведений.УровниСокращенийАдресныхСведений"); + БлокировкаДанных.Заблокировать(); + + // Т.к. адресный классификатор не содержит сведений, то очищаем таблицу адресных сведений. + УровниСокращенийАдресныхСведений = РегистрыСведений.УровниСокращенийАдресныхСведений.СоздатьНаборЗаписей(); + УровниСокращенийАдресныхСведений.Записать(); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Не удалось очистить регистр сведений Уровни сокращений адресных сведений.'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ВызватьИсключение; + КонецПопытки; КонецПроцедуры @@ -6881,7 +6899,7 @@ Процедура ЗаписатьОшибкуЗапросаКВебСервисуВЖурналРегистрации(ОтветОтСервераСтрокой, Результат, ТекстURL, КодСостояния) - ШаблонТекстОтветаСервера = НСтр("ru='%1 + ШаблонТекстОтветаСервера = НСтр("ru = '%1 |Техническая информация. При запросе: %2 |сервер вернул HTTP Код: %3 |с текстом: %4'"); @@ -7940,6 +7958,20 @@ КонецФункции +Функция ЗаполненыВсеИдентификаторыОбъекта(Адрес) + + Для каждого ИмяУровня Из ИменаУровнейАдреса(Адрес.Type, Истина) Цикл + + Если ЗначениеЗаполнено(Адрес[ИмяУровня]) И ПустаяСтрока(Адрес[ИмяУровня + "Id"]) Тогда + Возврат Ложь; + КонецЕсли; + + КонецЦикла; + + Возврат Истина; + +КонецФункции + Функция КонтактнаяИнформацияВФорматеКлючЗначениеВJSON(Адрес) Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда @@ -8317,4 +8349,3 @@ #КонецОбласти #КонецОбласти - diff --git a/SSL/src/CommonModules/Анкетирование/Module.bsl b/SSL/src/CommonModules/Анкетирование/Module.bsl index 99592e1a7..716cb92de 100644 --- a/SSL/src/CommonModules/Анкетирование/Module.bsl +++ b/SSL/src/CommonModules/Анкетирование/Module.bsl @@ -288,16 +288,17 @@ // Устанавливает для дерева разделов элементы вступление и заключение. // // Параметры: -// ДеревоАнкеты - ДанныеФормыДерево Дерево, в которое добавляется элемент вступления или заключения. -// Формулировка - Строка - тип элемента дерева - либо "вступление", либо "заключение". +// ДеревоАнкеты - ДанныеФормыДерево Дерево, в которое добавляется элемент вступления или заключения. +// Формулировка - Строка - локализуемое представление элемента дерева - либо "вступление", либо "заключение". +// ТипСтроки - Строка - тип элемента дерева - либо "вступление", либо "заключение". // -Процедура УстановитьЭлементДереваРазделовАнкетыВступлениеЗаключение(ДеревоАнкеты,Формулировка) Экспорт +Процедура УстановитьЭлементДереваРазделовАнкетыВступлениеЗаключение(ДеревоАнкеты, Формулировка, ТипСтроки) Экспорт ЭлементыДерева = ДеревоАнкеты.ПолучитьЭлементы(); НоваяСтрока = ЭлементыДерева.Добавить(); НоваяСтрока.Формулировка = Формулировка; - НоваяСтрока.ТипСтроки = Формулировка; + НоваяСтрока.ТипСтроки = ТипСтроки; НоваяСтрока.КодКартинки = АнкетированиеКлиентСервер.ПолучитьКодКартинкиШаблонаАнкеты(Ложь); КонецПроцедуры @@ -479,13 +480,8 @@ Если ТекущиеДанныеДеревоРазделов.ТипСтроки = "Раздел" Тогда Форма.Элементы.НадписьВступление.Заголовок = НСтр("ru = 'Раздел'") + " " + ТекущиеДанныеДеревоРазделов.Формулировка; - Если КлиентскоеПриложение.ТекущийВариантИнтерфейса() = ВариантИнтерфейсаКлиентскогоПриложения.Версия8_2 Тогда - Форма.Элементы.НадписьВступление.ЦветТекста = WebЦвета.НейтральноКоричневый; - Форма.Элементы.НадписьВступление.Шрифт = Новый Шрифт(, 8, Истина, , , ); - Иначе - Форма.Элементы.НадписьВступление.ЦветТекста = Новый Цвет(0, 150, 70); - Форма.Элементы.НадписьВступление.Шрифт = Новый Шрифт(, 12, Ложь, , , ); - КонецЕсли; + Форма.Элементы.НадписьВступление.ЦветТекста = ЦветаСтиля.ЦветРазделаПанелиФункций; + Форма.Элементы.НадписьВступление.Шрифт = ШрифтыСтиля.КрупныйШрифтТекста; Раздел = ТекущиеДанныеДеревоРазделов.Ссылка; ПолныйКодРаздела = ТекущиеДанныеДеревоРазделов.ПолныйКод; @@ -502,7 +498,7 @@ Форма.Элементы.НадписьВступление.Заголовок = ?(ТекущиеДанныеДеревоРазделов.ТипСтроки = "Вступление", Вступление, Заключение); Форма.Элементы.НадписьВступление.ЦветТекста = ЦветаСтиля.ЦветТекстаПоля; - Форма.Элементы.НадписьВступление.Шрифт = Новый Шрифт(, 8, Ложь, , , ); + Форма.Элементы.НадписьВступление.Шрифт = ШрифтыСтиля.МелкийШрифтТекста; КонецЕсли; @@ -1305,7 +1301,7 @@ Элемент.Заголовок = СтрокаКомплексногоВопроса.ЭлементарныйВопрос; Элемент.АвтоМаксимальнаяШирина = Ложь; Элемент.РастягиватьПоГоризонтали = (РеквизитыЭлементарногоВопроса.ТипОтвета <> Перечисления.ТипыОтветовНаВопрос.Булево); - Элемент.Шрифт = Новый Шрифт(Элемент.Шрифт, , 8); + Элемент.Шрифт = ШрифтыСтиля.МелкийШрифтТекста; Если РеквизитыЭлементарногоВопроса.ТипОтвета = Перечисления.ТипыОтветовНаВопрос.Строка Тогда @@ -1567,7 +1563,7 @@ Процедура ЗаполнитьДеревоРазделов(Форма,ДеревоРазделов) Экспорт ВыборкаРазделы = ПолучитьВыборкуРазделовПоШаблонуАнкеты(Форма.ШаблонАнкеты); - ДобавитьСтрокиВДеревоРазделов(ВыборкаРазделы,ДеревоРазделов); + ДобавитьСтрокиВДеревоРазделов(ВыборкаРазделы, ДеревоРазделов); КонецПроцедуры @@ -1624,7 +1620,7 @@ // // Параметры: // ВыборкаРазделы - ВыборкаИзРезультатаЗапроса - иерархическая выборка по разделам шаблона анкеты. -// Родитель - ДанныеФормыЭлементДерева - Родительский элемент дерева, для которого добавляются строки. +// Родитель - ДанныеФормыЭлементДерева - родительский элемент дерева, для которого добавляются строки. // Процедура ДобавитьСтрокиВДеревоРазделов(ВыборкаРазделы,Родитель) @@ -1638,7 +1634,8 @@ НовыйЭлементДерева.Ссылка = ВыборкаРазделы.Ссылка; НовыйЭлементДерева.КоличествоВопросов = ВыборкаРазделы.Количество; - ДобавитьСтрокиВДеревоРазделов(ВыборкаРазделы.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией),НовыйЭлементДерева); + ДобавитьСтрокиВДеревоРазделов(ВыборкаРазделы.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией), + НовыйЭлементДерева); КонецЦикла; @@ -1978,30 +1975,46 @@ УстановитьПривилегированныйРежим(Истина); - // Удалим старые вопросы шаблона. - Запрос = Новый Запрос; - Запрос.Текст = "ВЫБРАТЬ - | ВопросыШаблонаАнкеты.Ссылка - |ИЗ - | Справочник.ВопросыШаблонаАнкеты КАК ВопросыШаблонаАнкеты - |ГДЕ - | ВопросыШаблонаАнкеты.Владелец = &Владелец"; + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Справочник.ВопросыШаблонаАнкеты"); + ЭлементБлокировки.УстановитьЗначение("Владелец", СсылкаВладелец); - Запрос.УстановитьПараметр("Владелец",СсылкаВладелец); - - РезультатЗапроса = Запрос.Выполнить(); - Если Не РезультатЗапроса.Пустой() Тогда + НачатьТранзакцию(); + Попытка - МассивСсылок = РезультатЗапроса.Выгрузить().ВыгрузитьКолонку("Ссылка"); - Для каждого ЭлементМассива Из МассивСсылок Цикл + Блокировка.Заблокировать(); + + // Удалим старые вопросы шаблона. + Запрос = Новый Запрос; + Запрос.Текст = "ВЫБРАТЬ + | ВопросыШаблонаАнкеты.Ссылка + |ИЗ + | Справочник.ВопросыШаблонаАнкеты КАК ВопросыШаблонаАнкеты + |ГДЕ + | ВопросыШаблонаАнкеты.Владелец = &Владелец"; + + Запрос.УстановитьПараметр("Владелец",СсылкаВладелец); + + РезультатЗапроса = Запрос.Выполнить(); + Если Не РезультатЗапроса.Пустой() Тогда - СправочникОбъект = ЭлементМассива.ПолучитьОбъект(); - Если (НЕ СправочникОбъект = Неопределено) Тогда - СправочникОбъект.Удалить(); - КонецЕсли; - - КонецЦикла; - КонецЕсли; + МассивСсылок = РезультатЗапроса.Выгрузить().ВыгрузитьКолонку("Ссылка"); + Для каждого ЭлементМассива Из МассивСсылок Цикл + + СправочникОбъект = ЭлементМассива.ПолучитьОбъект(); + Если (НЕ СправочникОбъект = Неопределено) Тогда + СправочникОбъект.Удалить(); + КонецЕсли; + + КонецЦикла; + КонецЕсли; + + ЗафиксироватьТранзакцию(); + + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; УстановитьПривилегированныйРежим(Ложь); diff --git a/SSL/src/CommonModules/БизнесПроцессыИЗадачиВызовСервера/Module.bsl b/SSL/src/CommonModules/БизнесПроцессыИЗадачиВызовСервера/Module.bsl index c8c5f6fa7..fd65c1e87 100644 --- a/SSL/src/CommonModules/БизнесПроцессыИЗадачиВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/БизнесПроцессыИЗадачиВызовСервера/Module.bsl @@ -261,7 +261,7 @@ Объект.Заблокировать(); Объект.Состояние = Перечисления.СостоянияБизнесПроцессов.Активен; - Объект.Записать(); + Объект.Записать(); // АПК:1327 Блокировка установлена ранее в БизнесПроцессыИЗадачиСервер.ЗаблокироватьБизнесПроцессы. ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); @@ -325,7 +325,7 @@ Объект.Заблокировать(); Объект.Состояние = Перечисления.СостоянияБизнесПроцессов.Остановлен; - Объект.Записать(); + Объект.Записать(); // АПК:1327 Блокировка установлена ранее в БизнесПроцессыИЗадачиСервер.ЗаблокироватьБизнесПроцессы. ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); @@ -364,12 +364,12 @@ Если НЕ ЗначениеЗаполнено(ЗадачаОбъект.Исполнитель) Тогда ЗадачаОбъект.Исполнитель = Пользователи.АвторизованныйПользователь(); КонецЕсли; - ЗадачаОбъект.Записать(); + ЗадачаОбъект.Записать(); // АПК:1327 Блокировка установлена ранее в БизнесПроцессыИЗадачиСервер.ЗаблокироватьЗадачи. НовыйМассивЗадач.Добавить(Задача); КонецЦикла; - ЗафиксироватьТранзакцию(); + ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); ВызватьИсключение; @@ -409,7 +409,7 @@ Если Не ЗадачаОбъект.РольИсполнителя.Пустая() Тогда ЗадачаОбъект.Исполнитель = Справочники.Пользователи.ПустаяСсылка(); КонецЕсли; - ЗадачаОбъект.Записать(); + ЗадачаОбъект.Записать(); // АПК:1327 Блокировка установлена ранее в БизнесПроцессыИЗадачиСервер.ЗаблокироватьЗадачи. НовыйМассивЗадач.Добавить(Задача); @@ -544,10 +544,10 @@ Функция ПометитьНаУдалениеБизнесПроцессы(ВыделенныеСтроки) Экспорт Количество = 0; Для Каждого СтрокаТаблицы Из ВыделенныеСтроки Цикл - БизнесПроцессСсылка = СтрокаТаблицы.БизнесПроцесс; + БизнесПроцессСсылка = СтрокаТаблицы.Владелец; Если БизнесПроцессСсылка = Неопределено ИЛИ БизнесПроцессСсылка.Пустая() Тогда Продолжить; - КонецЕсли; + КонецЕсли; НачатьТранзакцию(); Попытка БизнесПроцессыИЗадачиСервер.ЗаблокироватьБизнесПроцессы(БизнесПроцессСсылка); @@ -561,7 +561,7 @@ Количество = Количество + 1; КонецЦикла; - Возврат ?(Количество = 1, ВыделенныеСтроки[0].БизнесПроцесс, Неопределено); + Возврат ?(Количество = 1, ВыделенныеСтроки[0].Владелец, Неопределено); КонецФункции Процедура ПриПеренаправленииЗадачи(ЗадачаОбъект, НоваяЗадачаОбъект) diff --git a/SSL/src/CommonModules/БизнесПроцессыИЗадачиКлиент/Module.bsl b/SSL/src/CommonModules/БизнесПроцессыИЗадачиКлиент/Module.bsl index 1fe0de495..bbf83553e 100644 --- a/SSL/src/CommonModules/БизнесПроцессыИЗадачиКлиент/Module.bsl +++ b/SSL/src/CommonModules/БизнесПроцессыИЗадачиКлиент/Module.bsl @@ -24,12 +24,12 @@ Если ТипЗнч(ПараметрКоманды) = Тип("Массив") Тогда Если ПараметрКоманды.Количество() = 0 Тогда - ПоказатьПредупреждение(,НСтр("ru= 'Не выбран ни один бизнес-процесс.'")); + ПоказатьПредупреждение(,НСтр("ru = 'Не выбран ни один бизнес-процесс.'")); Возврат; КонецЕсли; Если ПараметрКоманды.Количество() = 1 И ТипЗнч(ПараметрКоманды[0]) = Тип("СтрокаГруппировкиДинамическогоСписка") Тогда - ПоказатьПредупреждение(,НСтр("ru= 'Не выбран ни один бизнес-процесс.'")); + ПоказатьПредупреждение(,НСтр("ru = 'Не выбран ни один бизнес-процесс.'")); Возврат; КонецЕсли; @@ -53,7 +53,7 @@ Иначе Если ТипЗнч(ПараметрКоманды) = Тип("СтрокаГруппировкиДинамическогоСписка") Тогда - ПоказатьПредупреждение(,НСтр("ru= 'Не выбран ни один бизнес-процесс'")); + ПоказатьПредупреждение(,НСтр("ru = 'Не выбран ни один бизнес-процесс'")); Возврат; КонецЕсли; @@ -107,12 +107,12 @@ Если ТипЗнч(ПараметрКоманды) = Тип("Массив") Тогда Если ПараметрКоманды.Количество() = 0 Тогда - ПоказатьПредупреждение(,НСтр("ru= 'Не выбран ни один бизнес-процесс.'")); + ПоказатьПредупреждение(,НСтр("ru = 'Не выбран ни один бизнес-процесс.'")); Возврат; КонецЕсли; Если ПараметрКоманды.Количество() = 1 И ТипЗнч(ПараметрКоманды[0]) = Тип("СтрокаГруппировкиДинамическогоСписка") Тогда - ПоказатьПредупреждение(,НСтр("ru= 'Не выбран ни один бизнес-процесс.'")); + ПоказатьПредупреждение(,НСтр("ru = 'Не выбран ни один бизнес-процесс.'")); Возврат; КонецЕсли; @@ -130,7 +130,7 @@ Иначе Если ТипЗнч(ПараметрКоманды) = Тип("СтрокаГруппировкиДинамическогоСписка") Тогда - ПоказатьПредупреждение(,НСтр("ru= 'Не выбран ни один бизнес-процесс.'")); + ПоказатьПредупреждение(,НСтр("ru = 'Не выбран ни один бизнес-процесс.'")); Возврат; КонецЕсли; @@ -470,6 +470,16 @@ #КонецОбласти +#Область СлужебныйПрограммныйИнтерфейс + +Процедура ОткрытьСписокРолейИИсполнителейЗадач() Экспорт + + ОткрытьФорму("РегистрСведений.ИсполнителиЗадач.Форма.РолиИИсполнителиЗадач"); + +КонецПроцедуры + +#КонецОбласти + #Область СлужебныеПроцедурыИФункции Процедура ОткрытьБизнесПроцесс(Список) Экспорт diff --git a/SSL/src/CommonModules/БизнесПроцессыИЗадачиПереопределяемый/Module.bsl b/SSL/src/CommonModules/БизнесПроцессыИЗадачиПереопределяемый/Module.bsl index 3c36f3cf9..81fd17bdd 100644 --- a/SSL/src/CommonModules/БизнесПроцессыИЗадачиПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/БизнесПроцессыИЗадачиПереопределяемый/Module.bsl @@ -97,6 +97,62 @@ +КонецПроцедуры + +// Вызывается из модуля менеджера справочника РолиИсполнителей при начальном заполнении +// ролей исполнителей в прикладном решении. +// +// Параметры: +// КодыЯзыков - Массив - список языков конфигурации. Актуально для мультиязычных конфигураций. +// Элементы - ТаблицаЗначений - данные заполнения. Состав колонок соответствует набору реквизитов +// справочника РолиИсполнителей. +// +Процедура ПриНачальномЗаполненииРолейИсполнителей(КодыЯзыков, Элементы) Экспорт + + + +КонецПроцедуры + +// Вызывается из модуля менеджера справочника РолиИсполнителей при начальном заполнении +// элемента роль исполнителя в прикладном решении. +// +// Параметры: +// Объект - СправочникОбъект.РолиИсполнителей - заполняемый объект. +// Данные - СтрокаТаблицыЗначений - данные заполнения. +// ДополнительныеПараметры - Структура - Дополнительные параметры. +// +Процедура ПриНачальномЗаполненииРолиИсполнителя(Объект, Данные, ДополнительныеПараметры) Экспорт + + + +КонецПроцедуры + +// Вызывается из модуля менеджера ПВХ ОбъектыАдресацииЗадач при начальном заполнении +// объектов адресации задача в прикладном решении. +// Стандартный реквизит ТипЗначения следует заполнять в процедуре ПриНачальномЗаполненииЭлементаОбъектаАдресацииЗадачи. +// +// Параметры: +// КодыЯзыков - Массив - список языков конфигурации. Актуально для мультиязычных конфигураций. +// Элементы - ТаблицаЗначений - данные заполнения. Состав колонок соответствует набору реквизитов объекта ПВХ ОбъектыАдресацииЗада. +// +Процедура ПриНачальномЗаполненииОбъектовАдресацииЗадач(КодыЯзыков, Элементы) Экспорт + + + +КонецПроцедуры + +// Вызывается из модуля менеджера ПВХ ОбъектыАдресацииЗадач при начальном заполнении +// элемента адресации задача в прикладном решении. +// +// Параметры: +// Объект - ПланВидовХарактеристикОбъект.ОбъектыАдресацииЗадач - заполняемый объект. +// Данные - СтрокаТаблицыЗначений - данные заполнения. +// ДополнительныеПараметры - Структура - Дополнительные параметры. +// +Процедура ПриНачальномЗаполненииЭлементаОбъектаАдресацииЗадачи(Объект, Данные, ДополнительныеПараметры) Экспорт + + + КонецПроцедуры #КонецОбласти diff --git a/SSL/src/CommonModules/БизнесПроцессыИЗадачиСервер/Module.bsl b/SSL/src/CommonModules/БизнесПроцессыИЗадачиСервер/Module.bsl index 489f305eb..8c09cea1c 100644 --- a/SSL/src/CommonModules/БизнесПроцессыИЗадачиСервер/Module.bsl +++ b/SSL/src/CommonModules/БизнесПроцессыИЗадачиСервер/Module.bsl @@ -43,7 +43,7 @@ ИспользоватьДатуИВремяВСрокахЗадач = ПолучитьФункциональнуюОпцию("ИспользоватьДатуИВремяВСрокахЗадач"); ДатаИсполненияСтрокой = ?(ИспользоватьДатуИВремяВСрокахЗадач, Формат(ЗадачаОбъект.ДатаИсполнения, "ДЛФ=DT"), Формат(ЗадачаОбъект.ДатаИсполнения, "ДЛФ=D")); - Элемент.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru ='Задача выполнена %1 пользователем %2.'"), + Элемент.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Задача выполнена %1 пользователем %2.'"), ДатаИсполненияСтрокой, ИсполнительСтрокой(ЗадачаОбъект.Исполнитель, ЗадачаОбъект.РольИсполнителя, ЗадачаОбъект.ОсновнойОбъектАдресации, ЗадачаОбъект.ДополнительныйОбъектАдресации)); @@ -65,7 +65,7 @@ Если Элемент = Неопределено Тогда Элемент = ФормаЗадачи.Элементы.Добавить("__ВедущаяЗадача", Тип("ДекорацияФормы"), Родитель); Элемент.Вид = ВидДекорацииФормы.Надпись; - Элемент.Заголовок = НСтр("ru ='Это ведущая задача для вложенных бизнес-процессов. Она будет выполнена автоматически при их завершении.'"); + Элемент.Заголовок = НСтр("ru = 'Это ведущая задача для вложенных бизнес-процессов. Она будет выполнена автоматически при их завершении.'"); Элемент.Высота = 0; // автовысота Элемент.АвтоМаксимальнаяШирина = Ложь; КонецЕсли; @@ -415,6 +415,23 @@ Функция БизнесПроцессыГлавнойЗадачи(ЗадачаСсылка, ДляИзменения = Ложь) Экспорт Результат = Новый Массив; + Если ДляИзменения Тогда + Блокировка = Новый БлокировкаДанных; + Для Каждого МетаданныеБизнесПроцесса Из Метаданные.БизнесПроцессы Цикл + + // У бизнес-процесса может и не быть главной задачи. + РеквизитГлавнаяЗадача = МетаданныеБизнесПроцесса.Реквизиты.Найти("ГлавнаяЗадача"); + Если РеквизитГлавнаяЗадача = Неопределено Тогда + Продолжить; + КонецЕсли; + + ЭлементБлокировки = Блокировка.Добавить(МетаданныеБизнесПроцесса.ПолноеИмя()); + ЭлементБлокировки.УстановитьЗначение("ГлавнаяЗадача", ЗадачаСсылка); + + КонецЦикла; + Блокировка.Заблокировать(); + КонецЕсли; + Для Каждого МетаданныеБизнесПроцесса Из Метаданные.БизнесПроцессы Цикл // У бизнес-процесса может и не быть главной задачи. @@ -423,13 +440,6 @@ Продолжить; КонецЕсли; - Если ДляИзменения Тогда - Блокировка = Новый БлокировкаДанных; - ЭлементБлокировки = Блокировка.Добавить(МетаданныеБизнесПроцесса.ПолноеИмя()); - ЭлементБлокировки.УстановитьЗначение("ГлавнаяЗадача", ЗадачаСсылка); - Блокировка.Заблокировать(); - КонецЕсли; - ТекстЗапроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( "ВЫБРАТЬ РАЗРЕШЕННЫЕ | %1.Ссылка КАК Ссылка @@ -664,10 +674,10 @@ КонецЕсли; НаборЗаписей = РегистрыСведений.ПроцессыДляЗапуска.СоздатьНаборЗаписей(); - НаборЗаписей.Отбор.БизнесПроцесс.Установить(Процесс); + НаборЗаписей.Отбор.Владелец.Установить(Процесс); Запись = НаборЗаписей.Добавить(); - Запись.БизнесПроцесс = Процесс; + Запись.Владелец = Процесс; Запись.ДатаОтложенногоСтарта = ДатаСтарта; Запись.Состояние = Перечисления.СостоянияПроцессовДляЗапуска.ГотовКСтарту; @@ -690,7 +700,7 @@ Если НастройкаСтарта.Состояние = ПредопределенноеЗначение("Перечисление.СостоянияПроцессовДляЗапуска.ГотовКСтарту") Тогда НаборЗаписей = РегистрыСведений.ПроцессыДляЗапуска.СоздатьНаборЗаписей(); - НаборЗаписей.Отбор.БизнесПроцесс.Установить(Процесс); + НаборЗаписей.Отбор.Владелец.Установить(Процесс); НаборЗаписей.Записать(); КонецЕсли; @@ -762,20 +772,20 @@ Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ - | ПроцессыДляЗапуска.БизнесПроцесс, + | ПроцессыДляЗапуска.Владелец, | ПроцессыДляЗапуска.ДатаОтложенногоСтарта, | ПроцессыДляЗапуска.Состояние, | ПроцессыДляЗапуска.ПричинаОтменыСтарта |ИЗ | РегистрСведений.ПроцессыДляЗапуска КАК ПроцессыДляЗапуска |ГДЕ - | ПроцессыДляЗапуска.БизнесПроцесс = &БизнесПроцесс"; + | ПроцессыДляЗапуска.Владелец = &БизнесПроцесс"; Запрос.УстановитьПараметр("БизнесПроцесс", Процесс); Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Следующий() Тогда Результат = Новый Структура; - Результат.Вставить("БизнесПроцесс", Выборка.БизнесПроцесс); + Результат.Вставить("БизнесПроцесс", Выборка.Владелец); Результат.Вставить("ДатаОтложенногоСтарта", Выборка.ДатаОтложенногоСтарта); Результат.Вставить("Состояние", Выборка.Состояние); Результат.Вставить("ПричинаОтменыСтарта", Выборка.ПричинаОтменыСтарта); @@ -1288,6 +1298,37 @@ КонецПроцедуры +// См. ОбновлениеИнформационнойБазыПереопределяемый.ПриОпределенииНастроек +Процедура ПриОпределенииОбъектовСНачальнымЗаполнением(Объекты) Экспорт + + Объекты.Добавить(Метаданные.Справочники.РолиИсполнителей); + Объекты.Добавить(Метаданные.ПланыВидовХарактеристик.ОбъектыАдресацииЗадач); + +КонецПроцедуры + +// См. СозданиеНаОснованииПереопределяемый.ПриОпределенииОбъектовСКомандамиСозданияНаОсновании. +Процедура ПриОпределенииОбъектовСКомандамиСозданияНаОсновании(Объекты) Экспорт + + Объекты.Добавить(Метаданные.БизнесПроцессы.Задание); + Объекты.Добавить(Метаданные.Задачи.ЗадачаИсполнителя); + +КонецПроцедуры + +// См. СозданиеНаОснованииПереопределяемый.ПриДобавленииКомандСозданияНаОсновании. +Процедура ПриДобавленииКомандСозданияНаОсновании(Объект, КомандыСозданияНаОсновании, Параметры, СтандартнаяОбработка) Экспорт + + Если Объект = Метаданные.Справочники["Пользователи"] Тогда + БизнесПроцессы.Задание.ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании); + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда + Если Объект = Метаданные.Справочники["Файлы"] Тогда + БизнесПроцессы.Задание.ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -1569,8 +1610,9 @@ МодульРаботаСПочтовымиСообщениями = ОбщегоНазначения.ОбщийМодуль("РаботаСПочтовымиСообщениями"); Попытка - МодульРаботаСПочтовымиСообщениями.ОтправитьПочтовоеСообщение( - МодульРаботаСПочтовымиСообщениями.СистемнаяУчетнаяЗапись(), ПараметрыПисьма); + УчетнаяЗапись = МодульРаботаСПочтовымиСообщениями.СистемнаяУчетнаяЗапись(); + Письмо = МодульРаботаСПочтовымиСообщениями.ПодготовитьПисьмо(УчетнаяЗапись, ПараметрыПисьма); + МодульРаботаСПочтовымиСообщениями.ОтправитьПисьмо(УчетнаяЗапись, Письмо); Исключение ОписаниеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Ошибка при отправке уведомления о просроченных задачах: %1.'"), @@ -1682,8 +1724,9 @@ МодульРаботаСПочтовымиСообщениями = ОбщегоНазначения.ОбщийМодуль("РаботаСПочтовымиСообщениями"); Попытка - МодульРаботаСПочтовымиСообщениями.ОтправитьПочтовоеСообщение( - МодульРаботаСПочтовымиСообщениями.СистемнаяУчетнаяЗапись(), ПараметрыПисьма); + УчетнаяЗапись = МодульРаботаСПочтовымиСообщениями.СистемнаяУчетнаяЗапись(); + Письмо = МодульРаботаСПочтовымиСообщениями.ПодготовитьПисьмо(УчетнаяЗапись, ПараметрыПисьма); + МодульРаботаСПочтовымиСообщениями.ОтправитьПисьмо(УчетнаяЗапись, Письмо); Исключение ЗаписьЖурналаРегистрации(НСтр("ru = 'Бизнес-процессы и задачи.Уведомление о новых задачах'", ОбщегоНазначения.КодОсновногоЯзыка()), @@ -1707,7 +1750,7 @@ | |Крайний срок: %2'") + Символы.ПС, ЗадачаСтруктура.Ссылка, - Формат(ЗадачаСтруктура.СрокИсполнения, "ДЛФ=DD; ДП='не указан'")); + Формат(ЗадачаСтруктура.СрокИсполнения, НСтр("ru = 'ДЛФ=DD; ДП=''не указан'''"))); Если ЗначениеЗаполнено(ЗадачаСтруктура.Исполнитель) Тогда Результат = Результат + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Исполнитель: %1'"), ЗадачаСтруктура.Исполнитель) + Символы.ПС; КонецЕсли; @@ -1911,7 +1954,7 @@ // распространить это изменение состояния на невыполненные задачи этого // бизнес-процесса. // -Процедура ПриИзмененииСостоянияБизнесПроцесса(БизнесПроцесс, СтароеСостояние, НовоеСостояние) Экспорт +Процедура ПриИзмененииСостоянияБизнесПроцесса(БизнесПроцессОбъект, СтароеСостояние) Экспорт Запрос = Новый Запрос; Запрос.Текст = @@ -1923,27 +1966,49 @@ | ЗадачаИсполнителя.БизнесПроцесс = &БизнесПроцесс | И ЗадачаИсполнителя.Выполнена = ЛОЖЬ"; - Запрос.УстановитьПараметр("БизнесПроцесс", БизнесПроцесс.Ссылка); - - Результат = Запрос.Выполнить(); - - ВыборкаДетальныеЗаписи = Результат.Выбрать(); + Запрос.УстановитьПараметр("БизнесПроцесс", БизнесПроцессОбъект.Ссылка); + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Задача.ЗадачаИсполнителя"); + ЭлементБлокировки.УстановитьЗначение("БизнесПроцесс", БизнесПроцессОбъект.Ссылка); + Блокировка.Заблокировать(); + + ВыборкаДетальныеЗаписи = Запрос.Выполнить().Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл Задача = ВыборкаДетальныеЗаписи.Ссылка.ПолучитьОбъект(); Задача.Заблокировать(); - Задача.СостояниеБизнесПроцесса = НовоеСостояние; + Задача.СостояниеБизнесПроцесса = БизнесПроцессОбъект.Состояние; Задача.Записать(); - ПриИзмененииСостоянияЗадачи(Задача.Ссылка, СтароеСостояние, НовоеСостояние); + ПриИзмененииСостоянияЗадачи(Задача.Ссылка, СтароеСостояние, БизнесПроцессОбъект.Состояние); КонецЦикла; КонецПроцедуры Процедура ПриИзмененииСостоянияЗадачи(ЗадачаСсылка, СтароеСостояние, НовоеСостояние) - // Меняем состояние вложенных бизнес-процессов. + // Блокируем вложенные и подчиненные бизнес-процессы. + Блокировка = Новый БлокировкаДанных; + Для каждого МетаданныеБизнесПроцесса Из Метаданные.БизнесПроцессы Цикл + + Если Не ПравоДоступа("Изменение", МетаданныеБизнесПроцесса) Тогда + Продолжить; + КонецЕсли; + + ЭлементБлокировки = Блокировка.Добавить(МетаданныеБизнесПроцесса.ПолноеИмя()); + ЭлементБлокировки.УстановитьЗначение("ВедущаяЗадача", ЗадачаСсылка); + + РеквизитГлавнаяЗадача = МетаданныеБизнесПроцесса.Реквизиты.Найти("ГлавнаяЗадача"); + Если РеквизитГлавнаяЗадача <> Неопределено Тогда + ЭлементБлокировки = Блокировка.Добавить(МетаданныеБизнесПроцесса.ПолноеИмя()); + ЭлементБлокировки.УстановитьЗначение("ГлавнаяЗадача", ЗадачаСсылка); + КонецЕсли; + + КонецЦикла; + Блокировка.Заблокировать(); + + // Меняем состояние вложенных и подчиненных бизнес-процессов. Для каждого МетаданныеБизнесПроцесса Из Метаданные.БизнесПроцессы Цикл Если НЕ ПравоДоступа("Изменение", МетаданныеБизнесПроцесса) Тогда @@ -1955,25 +2020,20 @@ "ВЫБРАТЬ РАЗРЕШЕННЫЕ | БизнесПроцессы.Ссылка КАК Ссылка |ИЗ - | %1 КАК БизнесПроцессы + | &БизнесПроцессы КАК БизнесПроцессы |ГДЕ | БизнесПроцессы.ВедущаяЗадача = &ВедущаяЗадача | И БизнесПроцессы.ПометкаУдаления = ЛОЖЬ | И БизнесПроцессы.Завершен = ЛОЖЬ"; - Запрос.Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Запрос.Текст, МетаданныеБизнесПроцесса.ПолноеИмя()); + Запрос.Текст = СтрЗаменить(Запрос.Текст, "&БизнесПроцессы", МетаданныеБизнесПроцесса.ПолноеИмя()); Запрос.УстановитьПараметр("ВедущаяЗадача", ЗадачаСсылка); - Результат = Запрос.Выполнить(); - - ВыборкаДетальныеЗаписи = Результат.Выбрать(); - + ВыборкаДетальныеЗаписи = Запрос.Выполнить().Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл - БизнесПроцесс = ВыборкаДетальныеЗаписи.Ссылка.ПолучитьОбъект(); БизнесПроцесс.Состояние = НовоеСостояние; БизнесПроцесс.Записать(); - КонецЦикла; КонецЦикла; @@ -1981,7 +2041,7 @@ // Меняем состояние подчиненных бизнес-процессов. Для каждого МетаданныеБизнесПроцесса Из Метаданные.БизнесПроцессы Цикл - // У бизнес-процесса может и не быть главной задачи. + // У бизнес-процесса может не быть главной задачи. РеквизитГлавнаяЗадача = МетаданныеБизнесПроцесса.Реквизиты.Найти("ГлавнаяЗадача"); Если РеквизитГлавнаяЗадача = Неопределено Тогда Продолжить; @@ -1992,25 +2052,20 @@ "ВЫБРАТЬ РАЗРЕШЕННЫЕ | БизнесПроцессы.Ссылка КАК Ссылка |ИЗ - | %1 КАК БизнесПроцессы + | &БизнесПроцессы КАК БизнесПроцессы |ГДЕ | БизнесПроцессы.ГлавнаяЗадача = &ГлавнаяЗадача | И БизнесПроцессы.ПометкаУдаления = ЛОЖЬ | И БизнесПроцессы.Завершен = ЛОЖЬ"; - Запрос.Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Запрос.Текст, МетаданныеБизнесПроцесса.ПолноеИмя()); + Запрос.Текст = СтрЗаменить(Запрос.Текст, "&БизнесПроцессы", МетаданныеБизнесПроцесса.ПолноеИмя()); Запрос.УстановитьПараметр("ГлавнаяЗадача", ЗадачаСсылка); - Результат = Запрос.Выполнить(); - - ВыборкаДетальныеЗаписи = Результат.Выбрать(); - + ВыборкаДетальныеЗаписи = Запрос.Выполнить().Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл - БизнесПроцесс = ВыборкаДетальныеЗаписи.Ссылка.ПолучитьОбъект(); БизнесПроцесс.Состояние = НовоеСостояние; БизнесПроцесс.Записать(); - КонецЦикла; КонецЦикла; @@ -2269,7 +2324,7 @@ РольОбъект = Справочники.РолиИсполнителей.ОтветственныйЗаКонтрольИсполнения.ПолучитьОбъект(); ЗаблокироватьДанныеДляРедактирования(РольОбъект.Ссылка); - РольОбъект.Наименование = НСтр("ru='Координатор выполнения задач'"); + РольОбъект.Наименование = НСтр("ru = 'Координатор выполнения задач'"); РольОбъект.ИспользуетсяБезОбъектовАдресации = Истина; РольОбъект.ИспользуетсяСОбъектамиАдресации = Истина; РольОбъект.ТипыОсновногоОбъектаАдресации = ВсеОбъектыАдресации; @@ -2353,7 +2408,7 @@ Процедура ЗаполнитьНаименованиеПредопределенногоЭлементаВсеОбъектыАдресации() Экспорт ВсеОбъектыАдресации = ПланыВидовХарактеристик.ОбъектыАдресацииЗадач.ВсеОбъектыАдресации.ПолучитьОбъект(); - ВсеОбъектыАдресации.Наименование = НСтр("ru='Все объекты адресации'"); + ВсеОбъектыАдресации.Наименование = НСтр("ru = 'Все объекты адресации'"); ОбновлениеИнформационнойБазы.ЗаписатьОбъект(ВсеОбъектыАдресации); КонецПроцедуры diff --git a/SSL/src/CommonModules/БизнесПроцессыИЗадачиСобытия/Module.bsl b/SSL/src/CommonModules/БизнесПроцессыИЗадачиСобытия/Module.bsl index 8996c4649..df2ce9cd7 100644 --- a/SSL/src/CommonModules/БизнесПроцессыИЗадачиСобытия/Module.bsl +++ b/SSL/src/CommonModules/БизнесПроцессыИЗадачиСобытия/Module.bsl @@ -16,14 +16,24 @@ Процедура ЗаписатьВСписокБизнесПроцессов(Источник, Отказ) Экспорт Если Источник.ОбменДанными.Загрузка Тогда - Возврат; - КонецЕсли; + Возврат; + КонецЕсли; + + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ДанныеБизнесПроцессов"); + ЭлементБлокировки.УстановитьЗначение("Владелец", Источник.Ссылка); + Блокировка.Заблокировать(); + + СтароеСостояние = Неопределено; + Если Источник.ДополнительныеСвойства.Свойство("СтароеСостояние", СтароеСостояние) Тогда + БизнесПроцессыИЗадачиСервер.ПриИзмененииСостоянияБизнесПроцесса(Источник, СтароеСостояние); + КонецЕсли; НаборЗаписей = РегистрыСведений.ДанныеБизнесПроцессов.СоздатьНаборЗаписей(); - НаборЗаписей.Отбор.БизнесПроцесс.Значение = Источник.Ссылка; - НаборЗаписей.Отбор.БизнесПроцесс.Использование = Истина; + НаборЗаписей.Отбор.Владелец.Значение = Источник.Ссылка; + НаборЗаписей.Отбор.Владелец.Использование = Истина; Запись = НаборЗаписей.Добавить(); - Запись.БизнесПроцесс = Источник.Ссылка; + Запись.Владелец = Источник.Ссылка; СписокПолей = "Номер,Дата,Завершен,Стартован,Автор,ДатаЗавершения,Наименование,ПометкаУдаления"; ЗаполнитьЗначенияСвойств(Запись, Источник, СписокПолей); @@ -67,10 +77,9 @@ КонецЕсли; Если Не Источник.ЭтоНовый() Тогда - НовоеСостояние = Источник.Состояние; СтароеСостояние = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Источник.Ссылка, "Состояние"); - Если НовоеСостояние <> СтароеСостояние Тогда - БизнесПроцессыИЗадачиСервер.ПриИзмененииСостоянияБизнесПроцесса(Источник, СтароеСостояние, НовоеСостояние); + Если Источник.Состояние <> СтароеСостояние Тогда + Источник.ДополнительныеСвойства.Вставить("СтароеСостояние", СтароеСостояние); КонецЕсли; КонецЕсли; @@ -87,11 +96,11 @@ Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ - | ПроцессыДляЗапуска.БизнесПроцесс КАК БизнесПроцесс + | ПроцессыДляЗапуска.Владелец КАК БизнесПроцесс |ИЗ | РегистрСведений.ПроцессыДляЗапуска КАК ПроцессыДляЗапуска | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ДанныеБизнесПроцессов КАК ДанныеБизнесПроцессов - | ПО ПроцессыДляЗапуска.БизнесПроцесс = ДанныеБизнесПроцессов.БизнесПроцесс + | ПО ПроцессыДляЗапуска.Владелец = ДанныеБизнесПроцессов.Владелец |ГДЕ | ПроцессыДляЗапуска.Состояние = ЗНАЧЕНИЕ(Перечисление.СостоянияПроцессовДляЗапуска.ГотовКСтарту) | И ПроцессыДляЗапуска.ДатаОтложенногоСтарта <= &ТекущаяДата diff --git a/SSL/src/CommonModules/БлокировкаРаботыСВнешнимиРесурсами/Module.bsl b/SSL/src/CommonModules/БлокировкаРаботыСВнешнимиРесурсами/Module.bsl index 77ac883cc..ede8d3944 100644 --- a/SSL/src/CommonModules/БлокировкаРаботыСВнешнимиРесурсами/Module.bsl +++ b/SSL/src/CommonModules/БлокировкаРаботыСВнешнимиРесурсами/Module.bsl @@ -197,6 +197,8 @@ РегламентноеЗадание.Синоним); КонецЕсли; + РегламентныеЗаданияСервер.ОтменитьВыполнениеЗадания(РегламентноеЗадание, ТекстИсключения); + ВызватьИсключение ТекстИсключения; КонецПроцедуры @@ -461,8 +463,8 @@ |Одновременное использование двух копий информационной базы с одинаковым идентификатором может привести к конфликтам |при синхронизации данных, отправке почты и другой работе с внешними ресурсами. | - |Если файл отсутствует в каталоге с информационной базой, то программа запросит администратора, должна ли эта - |информационная база работать с внешними ресурсами.'"), + |Если файл отсутствует в каталоге с информационной базой, то программа запросит администратора, разрешено + |ли ей работать с внешними ресурсами.'"), ИдентификаторБазы, Метаданные.Синоним); @@ -647,10 +649,9 @@ ТекущийСеансИнформационнойБазы = ПолучитьТекущийСеансИнформационнойБазы(); ФоновоеЗадание = ТекущийСеансИнформационнойБазы.ПолучитьФоновоеЗадание(); + ЭтоСеансРегламентногоЗадания = ФоновоеЗадание <> Неопределено И ФоновоеЗадание.РегламентноеЗадание <> Неопределено; - Если ФоновоеЗадание <> Неопределено - И ФоновоеЗадание.РегламентноеЗадание <> Неопределено Тогда - + Если ЭтоСеансРегламентногоЗадания Тогда Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'при попытке выполнения регламентного задания %1'"), ФоновоеЗадание.РегламентноеЗадание.Наименование); diff --git a/SSL/src/CommonModules/ВариантыОтчетов/Module.bsl b/SSL/src/CommonModules/ВариантыОтчетов/Module.bsl index 32e26285d..ad56f54dd 100644 --- a/SSL/src/CommonModules/ВариантыОтчетов/Module.bsl +++ b/SSL/src/CommonModules/ВариантыОтчетов/Module.bsl @@ -28,13 +28,19 @@ Если ТипЗнч(Отчет) = Тип("СправочникСсылка.ИдентификаторыОбъектовРасширений") Тогда Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1 - | ВариантыОтчетов.Вариант КАК ВариантОтчета + | Отчеты.Ссылка КАК ВариантОтчета |ИЗ - | РегистрСведений.ПредопределенныеВариантыОтчетовВерсийРасширений КАК ВариантыОтчетов + | РегистрСведений.ПредопределенныеВариантыОтчетовВерсийРасширений КАК ОтчетыРасширений + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ВариантыОтчетов КАК Отчеты + | ПО Отчеты.ПредопределенныйВариант = ОтчетыРасширений.Вариант |ГДЕ - | ВариантыОтчетов.Отчет = &Отчет - | И ВариантыОтчетов.ВерсияРасширений = &ВерсияРасширений - | И ВариантыОтчетов.КлючВарианта = &КлючВарианта"; + | ОтчетыРасширений.Отчет = &Отчет + | И ОтчетыРасширений.ВерсияРасширений = &ВерсияРасширений + | И ОтчетыРасширений.КлючВарианта = &КлючВарианта + | + |УПОРЯДОЧИТЬ ПО + | Отчеты.ПометкаУдаления"; + Запрос.УстановитьПараметр("ВерсияРасширений", ПараметрыСеанса.ВерсияРасширений); Иначе Запрос.Текст = @@ -49,6 +55,7 @@ |УПОРЯДОЧИТЬ ПО | ВариантыОтчетов.ПометкаУдаления"; КонецЕсли; + Запрос.УстановитьПараметр("Отчет", Отчет); Запрос.УстановитьПараметр("КлючВарианта", КлючВарианта); @@ -413,7 +420,7 @@ РеквизитыФормы.КлючОбъекта = ОтчетМетаданные.ПолноеИмя(); КонецЕсли; Если Не ЗначениеЗаполнено(РеквизитыФормы.ВариантСсылка) Тогда - ОтчетИнформация = СформироватьИнформациюОбОтчетеПоПолномуИмени(РеквизитыФормы.КлючОбъекта); + ОтчетИнформация = ИнформацияОбОтчете(РеквизитыФормы.КлючОбъекта); Если НЕ ЗначениеЗаполнено(ОтчетИнформация.ТекстОшибки) Тогда ОтчетСсылка = ОтчетИнформация.Отчет; Иначе @@ -428,33 +435,20 @@ КоличествоНастроек = СписокНастроек.Количество(); ПользовательСсылка = Пользователи.АвторизованныйПользователь(); - ТекстЗапроса = - "ВЫБРАТЬ РАЗРЕШЕННЫЕ - | * - |ИЗ - | Справочник.ПользовательскиеНастройкиОтчетов КАК ПользовательскиеНастройкиОтчетов - |ГДЕ - | ПользовательскиеНастройкиОтчетов.Вариант = &ВариантСсылка - | И ПользовательскиеНастройкиОтчетов.Пользователь = &ПользовательСсылка - | - |УПОРЯДОЧИТЬ ПО - | ПользовательскиеНастройкиОтчетов.ПометкаУдаления"; + ПользовательскиеНастройки = ПользовательскиеНастройкиВариантаОтчета(РеквизитыФормы.ВариантСсылка, ПользовательСсылка); + Если ПользовательскиеНастройки = Неопределено Тогда + Возврат; + КонецЕсли; - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("ВариантСсылка", РеквизитыФормы.ВариантСсылка); - Запрос.УстановитьПараметр("ПользовательСсылка", ПользовательСсылка); - Запрос.Текст = ТекстЗапроса; - - Выборка = Запрос.Выполнить().Выбрать(); - Пока Выборка.Следующий() Цикл - - ЭлементСписка = СписокНастроек.НайтиПоЗначению(Выборка.КлючПользовательскойНастройки); + Для Каждого Настройка Из ПользовательскиеНастройки Цикл + ЭлементСписка = СписокНастроек.НайтиПоЗначению(Настройка.КлючПользовательскойНастройки); ПометкаУдаления = (ЭлементСписка = Неопределено); - Если ПометкаУдаления <> Выборка.ПометкаУдаления Тогда - НастройкаОбъект = Выборка.Ссылка.ПолучитьОбъект(); + Если ПометкаУдаления <> Настройка.ПометкаУдаления Тогда + НастройкаОбъект = Настройка.Ссылка.ПолучитьОбъект(); НастройкаОбъект.УстановитьПометкуУдаления(ПометкаУдаления); КонецЕсли; + Если ПометкаУдаления Тогда Если КоличествоНастроек = 0 Тогда Прервать; @@ -463,12 +457,13 @@ КонецЕсли; КонецЕсли; - Если Выборка.Наименование <> ЭлементСписка.Представление Тогда - НастройкаОбъект = Выборка.Ссылка.ПолучитьОбъект(); + Если Настройка.Наименование <> ЭлементСписка.Представление Тогда + НастройкаОбъект = Настройка.Ссылка.ПолучитьОбъект(); НастройкаОбъект.Наименование = ЭлементСписка.Представление; + // Блокировка не устанавливается, т.к. пользовательские настройки разрезаются по пользователям, // поэтому конкурентной работы не ожидается. - НастройкаОбъект.Записать(); + НастройкаОбъект.Записать(); // АПК:1327 КонецЕсли; СписокНастроек.Удалить(ЭлементСписка); @@ -481,9 +476,10 @@ НастройкаОбъект.КлючПользовательскойНастройки = ЭлементСписка.Значение; НастройкаОбъект.Вариант = РеквизитыФормы.ВариантСсылка; НастройкаОбъект.Пользователь = ПользовательСсылка; + // Блокировка не устанавливается, т.к. пользовательские настройки разрезаются по пользователям, // поэтому конкурентной работы не ожидается. - НастройкаОбъект.Записать(); + НастройкаОбъект.Записать(); // АПК:1327 КонецЦикла; КонецПроцедуры @@ -845,14 +841,15 @@ ПользовательскиеВарианты.Колонки.Добавить("Определен", Новый ОписаниеТипов("Булево")); ПользовательскиеВарианты.Колонки.Добавить("ТипОтчета", Метаданные.Справочники.ВариантыОтчетов.Реквизиты.ТипОтчета.Тип); Для Каждого ОписаниеВарианта Из ПользовательскиеВарианты Цикл - ИнформацияОбОтчете = СформироватьИнформациюОбОтчетеПоПолномуИмени(ОписаниеВарианта.ОтчетПолноеИмя); - Если ТипЗнч(ИнформацияОбОтчете.ТекстОшибки) = Тип("Строка") Тогда + ИнформацияОбОтчете = ИнформацияОбОтчете(ОписаниеВарианта.ОтчетПолноеИмя); + Если ЗначениеЗаполнено(ИнформацияОбОтчете.ТекстОшибки) Тогда ЗаписатьВЖурнал(УровеньЖурналаРегистрации.Ошибка, ИнформацияОбОтчете.ТекстОшибки); Продолжить; КонецЕсли; ОписаниеВарианта.Определен = Истина; - ЗаполнитьЗначенияСвойств(ОписаниеВарианта, ИнформацияОбОтчете, "Отчет, ТипОтчета"); + ОписаниеВарианта.Отчет = ИнформацияОбОтчете.Отчет; + ОписаниеВарианта.ТипОтчета = ИнформацияОбОтчете.ТипОтчета; КонецЦикла; ПользовательскиеВарианты.Сортировать("ОтчетПолноеИмя Возр, КлючВарианта Возр"); @@ -1189,7 +1186,7 @@ ВариантыДополнительногоОтчета = Запрос.Выполнить().Выгрузить(); Блокировка = Новый БлокировкаДанных; - ЭлементБлокировки = Блокировка.Добавить("Справочник.ВариантыОтчетов"); + ЭлементБлокировки = Блокировка.Добавить(Метаданные.Справочники.ВариантыОтчетов.ПолноеИмя()); ЭлементБлокировки.ИсточникДанных = ВариантыДополнительногоОтчета; ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Ссылка", "Ссылка"); Блокировка.Заблокировать(); @@ -1218,10 +1215,10 @@ ПредопределенныеВарианты.Удалить(ВариантОтчета.КлючВарианта); ВариантОбъект = ВариантОтчета.Ссылка.ПолучитьОбъект(); - ЛокализацияСервер.ПриЧтенииПредставленийНаСервере(ВариантОбъект); + МультиязычностьСервер.ПриЧтенииПредставленийНаСервере(ВариантОбъект); ВариантОбъект.Наименование = Представление; ВариантОбъект.ДополнительныеСвойства.Вставить("ОтчетОбъект", ВнешнийОбъект); - ЛокализацияСервер.ПередЗаписьюНаСервере(ВариантОбъект); + МультиязычностьСервер.ПередЗаписьюНаСервере(ВариантОбъект); ВариантОбъект.Записать(); КонецЕсли; КонецЦикла; @@ -1230,14 +1227,13 @@ // Зарегистрировать новые Для Каждого Представление Из ПредопределенныеВарианты Цикл ВариантОбъект = Справочники.ВариантыОтчетов.СоздатьЭлемент(); - ВариантОбъект.Отчет = ТекущийОбъект.Ссылка; - ВариантОбъект.ТипОтчета = Перечисления.ТипыОтчетов.Дополнительный; - ВариантОбъект.КлючВарианта = Представление.Ключ; - ВариантОбъект.Наименование = Представление.Значение; - ВариантОбъект.Пользовательский = Ложь; - ВариантОбъект.ВидимостьПоУмолчанию = Истина; + ВариантОбъект.Отчет = ТекущийОбъект.Ссылка; + ВариантОбъект.ТипОтчета = Перечисления.ТипыОтчетов.Дополнительный; + ВариантОбъект.КлючВарианта = Представление.Ключ; + ВариантОбъект.Наименование = Представление.Значение; + ВариантОбъект.Пользовательский = Ложь; ВариантОбъект.ДополнительныеСвойства.Вставить("ОтчетОбъект", ВнешнийОбъект); - ЛокализацияСервер.ПередЗаписьюНаСервере(ВариантОбъект); + МультиязычностьСервер.ПередЗаписьюНаСервере(ВариантОбъект); ВариантОбъект.Записать(); КонецЦикла; КонецЕсли; @@ -1742,7 +1738,7 @@ СтрокаТаблицы = Результат.Найти(Ссылка, "Ссылка"); ОтчетЗначение = ЗначенияОтчетов[Ссылка]; Если ОтчетЗначение = Неопределено Тогда - СтрокаТаблицы.Представление = НСтр("ru = '<Недостаточно прав для работы с вариантом отчета>'"); + СтрокаТаблицы.Представление = НСтр("ru = 'Недостаточно прав для работы с вариантом отчета.'"); Иначе СтрокаТаблицы.Отчет = ОтчетЗначение; СтрокаТаблицы.ТипОтчетаСтрокой = ВариантыОтчетовКлиентСервер.ТипОтчетаСтрокой(Неопределено, СтрокаТаблицы.Отчет); @@ -1780,24 +1776,29 @@ КонецФункции -// Формирует ссылку и тип отчета по полному имени. +// Возвращает информацию об отчете, включающую ссылку и тип отчета, по полному имени отчета. // // Параметры: -// ОтчетПолноеИмя - Строка - Полное имя отчета в формате -// "Отчет.<ИмяОтчета>" или "ВнешнийОтчет.<ИмяОтчета>". +// ОтчетПолноеИмя - Строка - полное имя отчета в формате "Отчет.<ИмяОтчета>" или "ВнешнийОтчет.<ИмяОтчета>". +// ВызыватьИсключение - Булево - если Истина, то вызвать исключение в случае ошибки. Возможные ошибки: +// Недостаточно прав доступа к отчету; +// Неизвестный тип отчета. // // Возвращаемое значение: -// Результат - Структура - -// * Отчет -// * ТипОтчета -// * ОтчетИмя -// * ОтчетМетаданные -// * ТекстОшибки - Строка, Неопределено - Текст ошибки. +// Структура - со свойствами: +// * Отчет - СправочникСсылка.ИдентификаторыОбъектовРасширений, Строка, +// СправочникСсылка.ДополнительныеОтчетыИОбработки, СправочникСсылка.ИдентификаторыОбъектовМетаданных +// * ТипОтчета - Перечисления.ТипыОтчетов +// * ОтчетИмя - Строка - например, "ДинамикаИзмененийФайлов". +// * ОтчетПолноеИмя - Строка - например, "Отчет.ДинамикаИзмененийФайлов". +// * ОтчетМетаданные - ОбъектМетаданных: Отчет +// * ТекстОшибки - Строка - текст ошибки. // -Функция СформироватьИнформациюОбОтчетеПоПолномуИмени(ОтчетПолноеИмя) Экспорт +Функция ИнформацияОбОтчете(Знач ОтчетПолноеИмя, Знач ВызыватьИсключение = Ложь) Экспорт Результат = Новый Структура("Отчет, ТипОтчета, ОтчетПолноеИмя, ОтчетИмя, ОтчетМетаданные, ТекстОшибки"); Результат.Отчет = ОтчетПолноеИмя; Результат.ОтчетПолноеИмя = ОтчетПолноеИмя; + Результат.ТекстОшибки = ""; ПозицияТочки = СтрНайти(ОтчетПолноеИмя, "."); Если ПозицияТочки = 0 Тогда @@ -1825,8 +1826,11 @@ // Получение метаданных и проверок не требуется. Иначе Результат.ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Для отчета ""%1"" невозможно определить тип (не установлен префикс).'"), + НСтр("ru = 'Неизвестный тип отчета ""%1"" (ожидался ""Отчет"" или ""ВнешнийОтчет"").'"), ОтчетПолноеИмя); + Если ВызыватьИсключение Тогда + ВызватьИсключение Результат.ТекстОшибки; + КонецЕсли; Возврат Результат; КонецЕсли; @@ -1850,12 +1854,13 @@ КонецЕсли; Иначе - Результат.Отчет = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Результат.ОтчетМетаданные); Результат.ТипОтчета = ТипОтчета(Результат.Отчет); - КонецЕсли; + Если ВызыватьИсключение И ЗначениеЗаполнено(Результат.ТекстОшибки) Тогда + ВызватьИсключение Результат.ТекстОшибки; + КонецЕсли; Возврат Результат; КонецФункции @@ -1959,7 +1964,7 @@ КонецЕсли; ОтчетСсылка = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ОтчетМетаданные); - ОтчетТип = ТипОтчета(ОтчетСсылка, Истина); + ОтчетТип = ТипОтчетаСтрокой(ОтчетСсылка); Если ТипОтчетов <> Неопределено И ТипОтчетов <> ОтчетТип Тогда Продолжить; КонецЕсли; @@ -2072,6 +2077,8 @@ КонецЕсли; КонецЦикла; + КэшРезультата = Результат.Скопировать(, "Отчет, Наименование"); + // Механизмы расширения. Если ТипОтчетов = Неопределено Или ТипОтчетов = "Внутренний" Тогда НастроитьОтчетВМодулеМенеджера(Результат, Метаданные.Отчеты.УниверсальныйОтчет); @@ -2079,6 +2086,8 @@ ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(Результат); КонецЕсли; + ЗаполнитьОчищенныеНаименования(Результат, КэшРезультата); + // Определение основных вариантов отчетов. Для Каждого ОписаниеОтчета Из Результат.НайтиСтроки(Новый Структура("ЭтоВариант", Ложь)) Цикл @@ -2241,7 +2250,22 @@ Обработчик.ПроцедураПроверки = "ОбновлениеИнформационнойБазы.ДанныеОбновленыНаНовуюВерсиюПрограммы"; Обработчик.Комментарий = НСтр("ru = 'Установка параметра ИсточникДанных в настройках вариантов универсального отчета. |После завершения обработки, переименование объектов метаданных не приведет к потере сохраненных вариантов отчетов'"); - + + // 3.5. Зарегистрировать настройки доступности вариантов отчетов в разрезе пользователей (групп пользователей). + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "3.1.2.64"; + Обработчик.Идентификатор = Новый УникальныйИдентификатор("eba9f8fb-2755-4d1a-99f5-cdd132e48cfc"); + Обработчик.РежимВыполнения = "Отложенно"; + Обработчик.ОчередьОтложеннойОбработки = 2; + Обработчик.ПроцедураЗаполненияДанныхОбновления = "РегистрыСведений.НастройкиВариантовОтчетов.ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию"; + Обработчик.Процедура = "РегистрыСведений.НастройкиВариантовОтчетов.ОбработатьДанныеДляПереходаНаНовуюВерсию"; + Обработчик.ЧитаемыеОбъекты = "Справочник.ВариантыОтчетов"; + Обработчик.ИзменяемыеОбъекты = "Справочник.ВариантыОтчетов"; + Обработчик.БлокируемыеОбъекты = "Справочник.ВариантыОтчетов, РегистрСведений.НастройкиВариантовОтчетов"; + Обработчик.ПроцедураПроверки = "ОбновлениеИнформационнойБазы.ДанныеОбновленыНаНовуюВерсиюПрограммы"; + Обработчик.Комментарий = НСтр("ru = 'Перенос всех настроек доступности вариантов отчетов в регистр сведений ""Настройки вариантов отчетов"". + |До завершения обработки, настройка доступности вариантов отчетов в разрезе пользователей (групп пользователей) будет работать некорректно.'"); + КонецПроцедуры // См. ОбщегоНазначенияПереопределяемый.ПриДобавленииИсключенийПоискаСсылок. @@ -2618,9 +2642,11 @@ ОписаниеВарианта.Размещение = ОбщегоНазначения.СкопироватьРекурсивно(ОписаниеОтчета.Размещение); ОписаниеВарианта.ФункциональныеОпции = ОбщегоНазначения.СкопироватьРекурсивно(ОписаниеОтчета.ФункциональныеОпции); ОписаниеВарианта.НастройкиДляПоиска = ОбщегоНазначения.СкопироватьРекурсивно(ОписаниеОтчета.НастройкиДляПоиска); - ОписаниеВарианта.КлючЗамеров = ОбщегоНазначения.СократитьСтрокуКонтрольнойСуммой("Отчет." + ОписаниеОтчета.Метаданные.Имя - + "." + ОписаниеВарианта.КлючВарианта, 135); + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОценкаПроизводительности") Тогда + ОписаниеВарианта.КлючЗамеров = ОбщегоНазначения.СократитьСтрокуКонтрольнойСуммой( + "Отчет." + ОписаниеОтчета.Метаданные.Имя + "." + ОписаниеВарианта.КлючВарианта, 135); + КонецЕсли; КонецПроцедуры // Панели отчетов. @@ -2740,8 +2766,8 @@ // Результат - Неопределено - Используется для рекурсии. // ПодсистемаРодитель - Неопределено - Используется для рекурсии. // -// Возвращаемое значение: -// Результат - ТаблицаЗначений - Настройки размещения отчетов по подсистемам. +// Возвращаемое значение: +// ТаблицаЗначений - Результат - ТаблицаЗначений - Настройки размещения отчетов по подсистемам. // * ОтчетМетаданные - ОбъектМетаданных: Отчет. // * ОтчетПолноеИмя - Строка. // * ПодсистемаМетаданные - ОбъектМетаданных: Подсистема. @@ -2801,15 +2827,13 @@ Возврат Ложь; КонецЕсли; + ВариантОбъект.Наименование = ОбщегоНазначения.ЗначениеРеквизитаОбъекта( + ВариантОбъект.ПредопределенныйВариант, "Наименование"); + ВариантОбъект.Автор = Неопределено; ВариантОбъект.ТолькоДляАвтора = Ложь; ВариантОбъект.Описание = ""; ВариантОбъект.Размещение.Очистить(); - ВариантОбъект.ВидимостьПоУмолчаниюПереопределена = Ложь; - Предопределенный = ОбщегоНазначения.ЗначенияРеквизитовОбъекта( - ВариантОбъект.ПредопределенныйВариант, - "Наименование, ВидимостьПоУмолчанию"); - ЗаполнитьЗначенияСвойств(ВариантОбъект, Предопределенный); Возврат Истина; КонецФункции @@ -2910,8 +2934,8 @@ Результат.Вставить("ВыводитьОтчетыВместоВариантов", Ложь); Результат.Вставить("ВыводитьОписания", Истина); Результат.Вставить("РазрешеноИзменятьВарианты", Истина); - Результат.Вставить("ВыводитьОбщиеНастройкиКолонтитулов", Ложь); - Результат.Вставить("ВыводитьИндивидуальныеНастройкиКолонтитулов", Ложь); + Результат.Вставить("ВыводитьОбщиеНастройкиКолонтитулов", Истина); + Результат.Вставить("ВыводитьИндивидуальныеНастройкиКолонтитулов", Истина); Результат.Вставить("Поиск", Новый Структура); Результат.Поиск.Вставить("ПодсказкаВвода", НСтр("ru = 'Наименование, поле или автор отчета'")); @@ -2989,6 +3013,27 @@ Возврат Ложь; КонецФункции +Процедура ЗаполнитьОчищенныеНаименования(СвойстваВариантовОтчетов, КэшСвойствВариантовОтчетов) + НайденныеСвойства = СвойстваВариантовОтчетов.НайтиСтроки(Новый Структура("Наименование", "")); + Если НайденныеСвойства.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + КэшСвойствВариантовОтчетов.Свернуть("Отчет, Наименование"); + КэшСвойствВариантовОтчетов.Индексы.Добавить("Отчет"); + + Для Каждого Свойства Из НайденныеСвойства Цикл + + КэшированныеСвойства = КэшСвойствВариантовОтчетов.Найти(Свойства.Отчет, "Отчет"); + + Если КэшированныеСвойства <> Неопределено + И ЗначениеЗаполнено(КэшированныеСвойства.Наименование) Тогда + + Свойства.Наименование = КэшированныеСвойства.Наименование; + КонецЕсли; + КонецЦикла; +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Журнал регистрации @@ -3161,7 +3206,7 @@ Результат.Вставить("ЕстьИзменения", Ложь); Результат.Вставить("ЕстьВажныеИзменения", Ложь); Результат.Вставить("ВариантыОтчетов", ПредопределенныеВариантыОтчетов(?(Результат.ОбновлятьКонфигурацию, "Внутренний", "Расширение"))); - Результат.Вставить("ОбновлятьЗамеры", Результат.ОбновлятьКонфигурацию И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОценкаПроизводительности")); + Результат.Вставить("ОбновлятьЗамеры", ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОценкаПроизводительности")); Результат.Вставить("ТаблицаЗамеров", ТаблицаЗамеров()); Результат.Вставить("МодельСервиса", ОбщегоНазначения.РазделениеВключено()); @@ -3605,7 +3650,7 @@ Или ИзменилисьКлючевыеНастройкиПредопределенного(ОписаниеВарианта, ВариантИзБазы) Тогда Результат.ЕстьВажныеИзменения = Истина; // Перезапись ключевых настроек (потребуется обновление разделенных данных). ИначеЕсли Не ИзменилисьВторостепенныеНастройкиПредопределенного(ОписаниеВарианта, ВариантИзБазы) Тогда - ОтменитьТранзакцию(); + ЗафиксироватьТранзакцию(); Возврат ВариантИзБазы.Ссылка; КонецЕсли; @@ -3752,9 +3797,7 @@ | ВариантыОтчетов.КлючВарианта, | ВариантыОтчетов.Наименование, | ВариантыОтчетов.ПредопределенныйВариант, - | ВариантыОтчетов.ВидимостьПоУмолчанию, - | ВариантыОтчетов.Родитель, - | ВариантыОтчетов.ВидимостьПоУмолчаниюПереопределена + | ВариантыОтчетов.Родитель |ПОМЕСТИТЬ втВариантыОтчетов |ИЗ | Справочник.ВариантыОтчетов КАК ВариантыОтчетов @@ -3786,19 +3829,13 @@ | ТОГДА НЕОПРЕДЕЛЕНО | ИНАЧЕ втПредопределенные.Родитель | КОНЕЦ КАК ПредопределенныйВариантРодитель, - | ВЫБОР - | КОГДА втВариантыОтчетов.ВидимостьПоУмолчаниюПереопределена - | ТОГДА втВариантыОтчетов.ВидимостьПоУмолчанию - | ИНАЧЕ втВариантыОтчетов.ВидимостьПоУмолчанию - | КОНЕЦ КАК ВидимостьПоУмолчанию, | втВариантыОтчетов.Ссылка КАК РеквизитСсылка, | втВариантыОтчетов.Родитель КАК РеквизитРодитель, | втВариантыОтчетов.Отчет КАК РеквизитОтчет, | втВариантыОтчетов.КлючВарианта КАК РеквизитКлючВарианта, | втВариантыОтчетов.Наименование КАК РеквизитНаименование, | втВариантыОтчетов.ПредопределенныйВариант КАК РеквизитПредопределенныйВариант, - | втВариантыОтчетов.ПометкаУдаления КАК РеквизитПометкаУдаления, - | втВариантыОтчетов.ВидимостьПоУмолчанию КАК РеквизитВидимостьПоУмолчанию + | втВариантыОтчетов.ПометкаУдаления КАК РеквизитПометкаУдаления |ИЗ | втВариантыОтчетов КАК втВариантыОтчетов | ПОЛНОЕ СОЕДИНЕНИЕ втПредопределенные КАК втПредопределенные @@ -3825,7 +3862,7 @@ Результат.ОсновныеВарианты.Колонки.Добавить("Вариант", Новый ОписаниеТипов("СправочникСсылка.ВариантыОтчетов")); ИзменяемыеРеквизиты = Новый Структура("ПометкаУдаления, Родитель, - |Наименование, Отчет, КлючВарианта, ПредопределенныйВариант, ВидимостьПоУмолчанию"); + |Наименование, Отчет, КлючВарианта, ПредопределенныйВариант"); СводнаяТаблицаПредопределенных = Запрос.Выполнить().Выгрузить(); СводнаяТаблицаПредопределенных.Колонки.Добавить("Обработана", Новый ОписаниеТипов("Булево")); @@ -3994,12 +4031,14 @@ ВариантОбъект = СтрокаТаблицы.РеквизитСсылка.ПолучитьОбъект(); КонецЕсли; - ИсключаяСвойства = ?(ВариантОбъект.ВидимостьПоУмолчаниюПереопределена, "ВидимостьПоУмолчанию", Неопределено); - ЗаполнитьЗначенияСвойств(ВариантОбъект, ИзменяемыеРеквизиты, , ИсключаяСвойства); + + ЗаполнитьЗначенияСвойств(ВариантОбъект, ИзменяемыеРеквизиты); + ТипОтчетаСтрокой = ВариантыОтчетовКлиентСервер.ТипОтчетаСтрокой(Неопределено, ВариантОбъект.Отчет); ВариантОбъект.ТипОтчета = Перечисления.ТипыОтчетов[ТипОтчетаСтрокой]; - ОбновлениеИнформационнойБазы.ЗаписатьОбъект(ВариантОбъект); + + РегистрыСведений.НастройкиВариантовОтчетов.ЗаписатьНастройкиДоступностиВариантаОтчета(ВариантОбъект.Ссылка, СтрокаТаблицы.СоздатьНовый); ЗафиксироватьТранзакцию(); Исключение @@ -4285,7 +4324,7 @@ Новый Структура("Метаданные", Метаданные.РегламентныеЗадания.ОбновлениеПредопределенныхВариантовОтчетов)); Для каждого ЗаполнениеПредставлений Из Задания Цикл ЗаполнениеПредставлений.Удалить(); - КонецЦикла; + КонецЦикла; КонецПроцедуры @@ -4294,7 +4333,7 @@ Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда Возврат; КонецЕсли; - + Если ОбщегоНазначения.РазделениеВключено() Тогда Возврат; КонецЕсли; @@ -4304,8 +4343,8 @@ Для каждого Язык Из Метаданные.Языки Цикл Если Язык <> ТекущийЯзык() Тогда КодыЯзыков.Добавить(Язык.КодЯзыка); - КонецЕсли; - КонецЦикла; + КонецЕсли; + КонецЦикла; КонецЕсли; Если ИндексЯзыка >= КодыЯзыков.Количество() Тогда @@ -4327,28 +4366,85 @@ ЗаполнениеПредставлений.Параметры.Добавить(КодыЯзыков); ЗаполнениеПредставлений.Параметры.Добавить(ИндексЯзыка); - ЗаполнениеПредставлений.Использование = Истина; - ЗаполнениеПредставлений.Расписание.ВремяНачала = ТекущаяДатаСеанса() + 60; + ЗаполнениеПредставлений.Использование = Истина; + ЗаполнениеПредставлений.Расписание.ВремяНачала = ТекущаяДатаСеанса() + 60; ЗаполнениеПредставлений.Записать(); КонецПроцедуры Функция СлужебныйПользователь(Знач КодЯзыка) - Результат = ПользователиИнформационнойБазы.НайтиПоИмени("СлужебныйПользовательДляОбновленияПредставлений"); - Если Результат = Неопределено Тогда + ИмяПользователя = "СлужебныйПользовательДляОбновленияПредставлений"; + + // Обновление пользователя информационной базы. + ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоИмени(ИмяПользователя); + + Если ПользовательИБ = Неопределено Тогда Если ПользователиИнформационнойБазы.ПолучитьПользователей().Количество() = 0 Тогда Возврат Неопределено; КонецЕсли; - Результат = ПользователиИнформационнойБазы.СоздатьПользователя(); - Результат.Имя = "СлужебныйПользовательДляОбновленияПредставлений"; - Результат.ЗапрещеноИзменятьПароль = Истина; - Результат.ПоказыватьВСпискеВыбора = Ложь; + ПользовательИБ = ПользователиИнформационнойБазы.СоздатьПользователя(); + ПользовательИБ.Имя = ИмяПользователя; + ПользовательИБ.ЗапрещеноИзменятьПароль = Истина; + ПользовательИБ.ПоказыватьВСпискеВыбора = Ложь; КонецЕсли; - Результат.Язык = ЛокализацияСервер.ЯзыкПоКоду(КодЯзыка); - Результат.Записать(); - Возврат Результат.Имя; + ПользовательИБ.Язык = МультиязычностьСервер.ЯзыкПоКоду(КодЯзыка); + ПользовательИБ.Записать(); + + // Обновление пользователя - элемента справочника Пользователи. + Роли = Новый Массив; + Роли.Добавить("ПолныеПрава"); + + ОписаниеПользователяИБ = Новый Структура; + ОписаниеПользователяИБ.Вставить("Действие", "Записать"); + ОписаниеПользователяИБ.Вставить("Имя", ПользовательИБ.Имя); + ОписаниеПользователяИБ.Вставить("Роли", Роли); + ОписаниеПользователяИБ.Вставить("АутентификацияСтандартная", Истина); + ОписаниеПользователяИБ.Вставить("ПоказыватьВСпискеВыбора", ПользовательИБ.ПоказыватьВСпискеВыбора); + ОписаниеПользователяИБ.Вставить("УникальныйИдентификатор", ПользовательИБ.УникальныйИдентификатор); + + Отбор = Новый Структура("ИдентификаторПользователяИБ", ПользовательИБ.УникальныйИдентификатор); + Выборка = Справочники.Пользователи.Выбрать(,, Отбор); + ЭтоНовый = Не Выборка.Следующий(); + + НачатьТранзакцию(); + + Попытка + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить(Метаданные.Справочники.Пользователи.ПолноеИмя()); + + Если Не ЭтоНовый Тогда + ЭлементБлокировки.УстановитьЗначение("Ссылка", Выборка.Ссылка); + КонецЕсли; + + Блокировка.Заблокировать(); + + Если ЭтоНовый Тогда + Пользователь = Справочники.Пользователи.СоздатьЭлемент(); + Иначе + Пользователь = Выборка.Ссылка.ПолучитьОбъект(); + КонецЕсли; + + Пользователь.Наименование = ПользовательИБ.Имя; + Пользователь.Служебный = Истина; + Пользователь.ДополнительныеСвойства.Вставить("ОписаниеПользователяИБ", ОписаниеПользователяИБ); + Пользователь.Записать(); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + + ЗаписьЖурналаРегистрации( + НСтр("ru = 'Варианты отчетов.Создание служебного пользователя'", ОбщегоНазначения.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, + Метаданные.Справочники.Пользователи,, + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + + Возврат Неопределено; + КонецПопытки; + + Возврат ПользовательИБ.Имя; КонецФункции Функция ПредставлениеРежима(Режим) @@ -4477,7 +4573,8 @@ // // Параметры: // ВариантОбъект - СправочникОбъект.ВариантыОтчетов, ДанныеФормыСтруктура - Объект варианта отчета. -// ИзмененныеПодсистемы - Массив - Массив из строк дерева значений, содержащий измененные настройки размещения. +// ИзмененныеПодсистемы - Массив из СтрокаДереваЗначений - Массив из строк дерева значений, содержащий измененные +// настройки размещения. // Процедура ДеревоПодсистемЗаписать(ВариантОбъект, ИзмененныеПодсистемы) Экспорт @@ -4527,20 +4624,32 @@ КонецФункции // Превращает тип отчета в строковый идентификатор. -Функция ТипОтчета(ОтчетСсылка, РезультатСтрокой = Ложь) Экспорт +Функция ТипОтчета(ОтчетСсылка) Экспорт ТипСсылки = ТипЗнч(ОтчетСсылка); Если ТипСсылки = Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных") Тогда - Ключ = "Внутренний"; + Возврат Перечисления.ТипыОтчетов.Внутренний; ИначеЕсли ТипСсылки = Тип("СправочникСсылка.ИдентификаторыОбъектовРасширений") Тогда - Ключ = "Расширение"; + Возврат Перечисления.ТипыОтчетов.Расширение; ИначеЕсли ТипСсылки = Тип("Строка") Тогда - Ключ = "Внешний"; + Возврат Перечисления.ТипыОтчетов.Внешний; ИначеЕсли ТипСсылки = ТипСсылкиДополнительногоОтчета() Тогда - Ключ = "Дополнительный"; - Иначе - Ключ = ?(РезультатСтрокой, Неопределено, "ПустаяСсылка"); + Возврат Перечисления.ТипыОтчетов.Дополнительный; КонецЕсли; - Возврат ?(РезультатСтрокой, Ключ, ПредопределенноеЗначение("Перечисление.ТипыОтчетов." + Ключ)); + Возврат Перечисления.ТипыОтчетов.ПустаяСсылка(); +КонецФункции + +Функция ТипОтчетаСтрокой(ОтчетСсылка) Экспорт + ТипСсылки = ТипЗнч(ОтчетСсылка); + Если ТипСсылки = Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных") Тогда + Возврат "Внутренний"; + ИначеЕсли ТипСсылки = Тип("СправочникСсылка.ИдентификаторыОбъектовРасширений") Тогда + Возврат "Расширение"; + ИначеЕсли ТипСсылки = Тип("Строка") Тогда + Возврат "Внешний"; + ИначеЕсли ТипСсылки = ТипСсылкиДополнительногоОтчета() Тогда + Возврат "Дополнительный"; + КонецЕсли; + Возврат Неопределено; КонецФункции // Возвращает тип ссылки дополнительного отчета. @@ -4553,6 +4662,143 @@ Возврат Неопределено; КонецФункции +//////////////////////////////////////////////////////////////////////////////// +// Работа со списком варианта отчета. + +Процедура УстановитьУсловноеОформлениеСпискаПользователейВариантаОтчета(Форма) Экспорт + + Элемент = Форма.УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Форма.Элементы.ПользователиВариантаЗначение.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ПользователиВарианта.Значение"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено; + + Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = 'Все пользователи'")); + + // + Элемент = Форма.УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Форма.Элементы.ПользователиВариантаЗначение.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ПользователиВарианта.Представление"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Содержит; + ОтборЭлемента.ПравоеЗначение = "[ЭтоТекущийПользователь]"; + + ШрифтВажнойНадписи = Метаданные.ЭлементыСтиля.ВажнаяНадписьШрифт; + Элемент.Оформление.УстановитьЗначениеПараметра("Шрифт", ШрифтВажнойНадписи.Значение); + Элемент.Оформление.УстановитьЗначениеПараметра("Текст", Новый ПолеКомпоновкиДанных("ПользователиВарианта.Значение")); + +КонецПроцедуры + +Процедура ОпределитьПоведениеСпискаПользователейВариантаОтчета(Форма) Экспорт + + Элементы = Форма.Элементы; + + НастройкаДоступностиРазрешена = Не Элементы.Доступен.ТолькоПросмотр + И ПравоДоступа("Чтение", Метаданные.Справочники.Пользователи); + + Элементы.ПользователиВариантаГруппаПодобрать.Видимость = Форма.ИспользоватьГруппыПользователей + И Форма.ИспользоватьВнешнихПользователей; + + Элементы.ПользователиВариантаПодобратьПользователей.Видимость = Форма.ИспользоватьГруппыПользователей + И Не Форма.ИспользоватьВнешнихПользователей; + + ГруппыИспользуются = Форма.ИспользоватьГруппыПользователей Или Форма.ИспользоватьВнешнихПользователей; + + Элементы.ПользователиВариантаУдалить.Видимость = ГруппыИспользуются; + Элементы.ПользователиВарианта.ИзменятьСоставСтрок = ГруппыИспользуются И НастройкаДоступностиРазрешена; + + Элементы.ПользователиВариантаПометка.Видимость = Не ГруппыИспользуются; + Элементы.ПользователиВариантаКонтекстноеМенюУстановитьФлажки.Видимость = Не ГруппыИспользуются; + Элементы.ПользователиВариантаКонтекстноеМенюСнятьФлажки.Видимость = Не ГруппыИспользуются; + + Элементы.ПользователиВарианта.ТолькоПросмотр = Не НастройкаДоступностиРазрешена; + + Если Элементы.ПользователиВариантаГруппаПодобрать.Видимость Тогда + + Элементы.ПользователиВариантаГруппаПодобрать.Доступность = НастройкаДоступностиРазрешена; + Элементы.ПользователиВариантаПодобратьПользователейГруппы.Доступность = НастройкаДоступностиРазрешена; + Элементы.ПользователиВариантаПодобратьГруппыВнешнихПользователей.Доступность = НастройкаДоступностиРазрешена; + + КонецЕсли; + + Если Элементы.ПользователиВариантаПодобратьПользователей.Видимость Тогда + Элементы.ПользователиВариантаПодобратьПользователей.Доступность = НастройкаДоступностиРазрешена; + КонецЕсли; + + Если Элементы.ПользователиВариантаУдалить.Видимость Тогда + Элементы.ПользователиВариантаУдалить.Доступность = НастройкаДоступностиРазрешена; + КонецЕсли; + +КонецПроцедуры + +Функция ПользовательскиеНастройкиВариантаОтчета(ВариантОтчета, Пользователь, КлючНастройки = Неопределено) + + Если ТипЗнч(ВариантОтчета) <> Тип("СправочникСсылка.ВариантыОтчетов") Тогда + Возврат Неопределено; + КонецЕсли; + + ПредставлениеВариантОтчета = Строка(ВариантОтчета); + + НачатьТранзакцию(); + + Попытка + + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить(Метаданные.Справочники.ПользовательскиеНастройкиОтчетов.ПолноеИмя()); + ЭлементБлокировки.УстановитьЗначение("Вариант", ВариантОтчета); + ЭлементБлокировки.УстановитьЗначение("Пользователь", Пользователь); + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Разделяемый; + Блокировка.Заблокировать(); + + Запрос = Новый Запрос( + "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | Настройки.* + |ИЗ + | Справочник.ПользовательскиеНастройкиОтчетов КАК Настройки + |ГДЕ + | Настройки.Вариант = &ВариантОтчета + | И Настройки.Пользователь = &Пользователь + | И (НЕ &КлючНастройкиОпределен + | ИЛИ Настройки.КлючПользовательскойНастройки = &КлючНастройки) + | + |УПОРЯДОЧИТЬ ПО + | Настройки.ПометкаУдаления"); + + Запрос.УстановитьПараметр("ВариантОтчета", ВариантОтчета); + Запрос.УстановитьПараметр("Пользователь", Пользователь); + Запрос.УстановитьПараметр("КлючНастройкиОпределен", КлючНастройки <> Неопределено); + Запрос.УстановитьПараметр("КлючНастройки", КлючНастройки); + + ПользовательскиеНастройки = Запрос.Выполнить().Выгрузить(); + + ЗафиксироватьТранзакцию(); + + Исключение + + ОтменитьТранзакцию(); + + ПользовательскиеНастройки = Неопределено; + + ЗаписьЖурналаРегистрации( + НСтр("ru = 'Чтение пользовательских настроек отчета'", ОбщегоНазначения.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка,, + ПредставлениеВариантОтчета, + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + + ВызватьИсключение; + + КонецПопытки; + + Возврат ПользовательскиеНастройки; + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Формирование представлений полей, параметров и отборов для поиска. @@ -5118,7 +5364,7 @@ Настройки = ПараметрыОбновленияНастроек(); Настройки.Отложенное = Истина; Обновить(Настройки); - КонецЕсли; + КонецЕсли; ЕстьСтрокаПоиска = ПараметрыПоиска.Свойство("СтрокаПоиска") И ЗначениеЗаполнено(ПараметрыПоиска.СтрокаПоиска); ЕстьОтборПоОтчетам = ПараметрыПоиска.Свойство("Отчеты") И ЗначениеЗаполнено(ПараметрыПоиска.Отчеты); @@ -5134,9 +5380,11 @@ Результат.Вставить("ПодсветкаПодсистем", Новый Соответствие); Результат.Вставить("ВариантыСвязанныеСПодсистемами", Новый Соответствие); Результат.Вставить("РодителиСвязанныеСВариантами", Новый Массив); + Если ПолучатьИтоговуюТаблицу Тогда Результат.Вставить("ТаблицаЗначений", Новый ТаблицаЗначений); КонецЕсли; + Если Не ЕстьОтборПоПодсистемам И Не ЕстьСтрокаПоиска И Не ЕстьОтборПоТипамОтчетов И Не ЕстьОтборПоОтчетам Тогда Возврат Результат; КонецЕсли; @@ -5144,6 +5392,7 @@ ЕстьОтборПоВидимости = ЕстьОтборПоПодсистемам И ПараметрыПоиска.Свойство("ТолькоВидимыеВПанелиОтчетов") И ПараметрыПоиска.ТолькоВидимыеВПанелиОтчетов = Истина; ТолькоНепомеченныеДляУдаления = ?(ПараметрыПоиска.Свойство("ПометкаУдаления"), ПараметрыПоиска.ПометкаУдаления, Истина); + Если ЕстьОтборПоОтчетам Тогда ОтборПоОтчетам = ПараметрыПоиска.Отчеты; ПараметрыПоиска.Вставить("ОтключенныеВариантыПрограммы", ОтключенныеВариантыОтчетов(ОтборПоОтчетам)); @@ -5156,9 +5405,10 @@ ЕстьПравоЧтенияАвторов = ПравоДоступа("Чтение", Метаданные.Справочники.Пользователи); ТекущийПользователь = Пользователи.АвторизованныйПользователь(); ПоказыватьЛичныеВариантыОтчетовДругихАвторов = Пользователи.ЭтоПолноправныйПользователь(); + Если ПараметрыПоиска.Свойство("ТолькоЛичные") Тогда ПоказыватьЛичныеВариантыОтчетовДругихАвторов = ПоказыватьЛичныеВариантыОтчетовДругихАвторов И ПараметрыПоиска.ТолькоЛичные; - КонецЕсли; + КонецЕсли; Запрос = Новый Запрос; Запрос.УстановитьПараметр("ТекущийПользователь", ТекущийПользователь); @@ -5172,19 +5422,37 @@ Запрос.УстановитьПараметр("ТипыОтчетов", ?(ЕстьОтборПоТипамОтчетов, ПараметрыПоиска.ТипыОтчетов, Новый Массив)); Запрос.УстановитьПараметр("НеПолучатьОписания", Не ЕстьСтрокаПоиска И Не ПолучатьИтоговуюТаблицу); Запрос.УстановитьПараметр("ПолучатьИтоговуюТаблицу", ПолучатьИтоговуюТаблицу); - Запрос.УстановитьПараметр("НаименованиеРабочегоСтола", НСтр("ru = 'Начальная страница'")); Запрос.УстановитьПараметр("ПоказыватьЛичныеВариантыОтчетовДругихАвторов", ПоказыватьЛичныеВариантыОтчетовДругихАвторов); Запрос.УстановитьПараметр("ЭтоОсновнойЯзык", ТекущийЯзык() = Метаданные.ОсновнойЯзык); Запрос.УстановитьПараметр("КодЯзыка", ТекущийЯзык().КодЯзыка); + Запрос.УстановитьПараметр("ПредставленияПодсистем", ВариантыОтчетовПовтИсп.ПредставленияПодсистем()); Если ЕстьОтборПоПодсистемам Или ЕстьСтрокаПоиска Тогда + + Если ЕстьОтборПоПодсистемам Тогда + Если ТипЗнч(ПараметрыПоиска.Подсистемы) = Тип("Массив") Тогда + ПодсистемыОтчетов = ПараметрыПоиска.Подсистемы; + Иначе + ПодсистемыОтчетов = Новый Массив; + ПодсистемыОтчетов.Добавить(ПараметрыПоиска.Подсистемы); + КонецЕсли; + Иначе + ПодсистемыОтчетов = Новый Массив; + КонецЕсли; + + ПодсистемыОтчетов.Добавить(Справочники.ИдентификаторыОбъектовМетаданных.ПустаяСсылка()); + + Запрос.УстановитьПараметр("ЕстьСтрокаПоиска", ЕстьСтрокаПоиска); + Запрос.УстановитьПараметр("ПолучатьИтоговуюТаблицу", ПолучатьИтоговуюТаблицу); + Запрос.УстановитьПараметр("ЕстьОтборПоВидимости", ЕстьОтборПоВидимости); + Запрос.УстановитьПараметр("ПодсистемыОтчетов", ПодсистемыОтчетов); + ТекстЗапроса = "ВЫБРАТЬ РАЗРЕШЕННЫЕ | ВариантыОтчетов.Ссылка КАК Ссылка, | ВариантыОтчетов.Родитель КАК Родитель, | ВЫБОР | КОГДА &ЕстьПравоЧтенияАвторов - | И &ПолучатьИтоговуюТаблицу | ТОГДА ВариантыОтчетов.Автор | ИНАЧЕ НЕОПРЕДЕЛЕНО | КОНЕЦ КАК Автор, @@ -5201,7 +5469,6 @@ | ТОГДА ДоступныеВариантыРасширений.Вариант ЕСТЬ NULL | ИНАЧЕ ЕСТЬNULL(ВариантыКонфигурации.ПометкаУдаления, ВариантыОтчетов.ПометкаУдаления) | КОНЕЦ КАК ПометкаУдаления, - | ВариантыОтчетов.ВидимостьПоУмолчанию КАК ВидимостьПоУмолчанию, | ВЫБОР | КОГДА &НеПолучатьОписания | ТОГДА НЕОПРЕДЕЛЕНО @@ -5256,33 +5523,45 @@ | ТОГДА ВЫРАЗИТЬ(ЕСТЬNULL(ВариантыКонфигурации.Описание, ВариантыРасширений.Описание) КАК СТРОКА(1000)) | ИНАЧЕ ВЫРАЗИТЬ(ЕСТЬNULL(ПредставленияВариантов.Описание, ВариантыОтчетов.Описание) КАК СТРОКА(1000)) | КОНЕЦ КАК Описание - |ПОМЕСТИТЬ Варианты + |ПОМЕСТИТЬ ВариантыОтчетов |ИЗ | Справочник.ВариантыОтчетов КАК ВариантыОтчетов | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПредопределенныеВариантыОтчетовВерсийРасширений КАК ДоступныеВариантыРасширений - | ПО ВариантыОтчетов.ПредопределенныйВариант = ДоступныеВариантыРасширений.Вариант - | И (ДоступныеВариантыРасширений.ВерсияРасширений = &ВерсияРасширений) + | ПО ВариантыОтчетов.ПредопределенныйВариант = ДоступныеВариантыРасширений.Вариант + | И ДоступныеВариантыРасширений.ВерсияРасширений = &ВерсияРасширений | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетов КАК ВариантыКонфигурации - | ПО ВариантыОтчетов.ПредопределенныйВариант = ВариантыКонфигурации.Ссылка + | ПО ВариантыОтчетов.ПредопределенныйВариант = ВариантыКонфигурации.Ссылка | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетовРасширений КАК ВариантыРасширений - | ПО ВариантыОтчетов.ПредопределенныйВариант = ВариантыРасширений.Ссылка + | ПО ВариантыОтчетов.ПредопределенныйВариант = ВариантыРасширений.Ссылка | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВариантыОтчетов.Представления КАК ПредставленияВариантов - | ПО ВариантыОтчетов.Ссылка = ПредставленияВариантов.Ссылка - | И (ПредставленияВариантов.КодЯзыка = &КодЯзыка) + | ПО ВариантыОтчетов.Ссылка = ПредставленияВариантов.Ссылка + | И ПредставленияВариантов.КодЯзыка = &КодЯзыка | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетов.Представления КАК ПредставленияИзКонфигурации - | ПО ВариантыОтчетов.ПредопределенныйВариант = ПредставленияИзКонфигурации.Ссылка - | И (ПредставленияИзКонфигурации.КодЯзыка = &КодЯзыка) + | ПО ВариантыОтчетов.ПредопределенныйВариант = ПредставленияИзКонфигурации.Ссылка + | И ПредставленияИзКонфигурации.КодЯзыка = &КодЯзыка | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетовРасширений.Представления КАК ПредставленияИзРасширений - | ПО ВариантыОтчетов.ПредопределенныйВариант = ПредставленияИзРасширений.Ссылка - | И (ПредставленияИзРасширений.КодЯзыка = &КодЯзыка) + | ПО ВариантыОтчетов.ПредопределенныйВариант = ПредставленияИзРасширений.Ссылка + | И ПредставленияИзРасширений.КодЯзыка = &КодЯзыка |ГДЕ | (НЕ &ЕстьОтборПоТипамОтчетов - | ИЛИ ВариантыОтчетов.ТипОтчета В (&ТипыОтчетов)) + | ИЛИ ВариантыОтчетов.ТипОтчета В (&ТипыОтчетов)) | И ВариантыОтчетов.Отчет В(&ОтчетыПользователя) | И НЕ ВариантыОтчетов.ПредопределенныйВариант В (&ОтключенныеВариантыПрограммы) | И (&ПоказыватьЛичныеВариантыОтчетовДругихАвторов - | ИЛИ ВариантыОтчетов.ТолькоДляАвтора = ЛОЖЬ - | ИЛИ ВариантыОтчетов.Автор = &ТекущийПользователь) + | ИЛИ ВариантыОтчетов.ТолькоДляАвтора = ЛОЖЬ + | ИЛИ ВариантыОтчетов.Автор = &ТекущийПользователь) + | + |ИНДЕКСИРОВАТЬ ПО + | Ссылка + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ПредставленияПодсистем.Ссылка КАК Ссылка, + | ПредставленияПодсистем.Представление КАК Представление + |ПОМЕСТИТЬ ПредставленияПодсистем + |ИЗ + | &ПредставленияПодсистем КАК ПредставленияПодсистем | |ИНДЕКСИРОВАТЬ ПО | Ссылка @@ -5291,97 +5570,40 @@ |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ РАЗРЕШЕННЫЕ | ВариантыОтчетов.Ссылка КАК Ссылка, - | РазмещениеКонфигурации.Подсистема КАК Подсистема, | ВЫБОР - | КОГДА &НеПолучатьОписания - | ТОГДА НЕОПРЕДЕЛЕНО - | КОГДА РазмещениеКонфигурации.Подсистема.ПолноеИмя = ""Подсистемы"" - | ТОГДА &НаименованиеРабочегоСтола - | ИНАЧЕ РазмещениеКонфигурации.Подсистема.Синоним - | КОНЕЦ КАК НаименованиеПодсистемы - |ПОМЕСТИТЬ РазмещениеПредопределенных + | КОГДА ВариантыОтчетов.Пользовательский + | ИЛИ ЕСТЬNULL(РазмещениеОтчетовКонфигурации.Подсистема, РазмещениеОтчетовРасширений.Подсистема) ЕСТЬ NULL + | ТОГДА РазмещениеОтчетов.Подсистема + | ИНАЧЕ ЕСТЬNULL(РазмещениеОтчетовКонфигурации.Подсистема, РазмещениеОтчетовРасширений.Подсистема) + | КОНЕЦ КАК Подсистема + |ПОМЕСТИТЬ РазмещениеВариантовОтчетов |ИЗ - | Варианты КАК ВариантыОтчетов - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетов.Размещение КАК РазмещениеКонфигурации - | ПО (ВариантыОтчетов.Пользовательский = ЛОЖЬ) - | И (&ПоказыватьЛичныеВариантыОтчетовДругихАвторов - | ИЛИ ВариантыОтчетов.ТолькоДляАвтора = ЛОЖЬ - | ИЛИ ВариантыОтчетов.Автор = &ТекущийПользователь) - | И (ВариантыОтчетов.ПометкаУдаления = ЛОЖЬ - | ИЛИ &НетОтбораПоПометкеУдаления) - | И ВариантыОтчетов.ПредопределенныйВариант = РазмещениеКонфигурации.Ссылка + | ВариантыОтчетов КАК ВариантыОтчетов + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПредопределенныеВариантыОтчетовВерсийРасширений КАК ДоступныеВариантыРасширений + | ПО ДоступныеВариантыРасширений.ВерсияРасширений = &ВерсияРасширений + | И ДоступныеВариантыРасширений.Вариант = ВариантыОтчетов.ПредопределенныйВариант + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВариантыОтчетов.Размещение КАК РазмещениеОтчетов + | ПО РазмещениеОтчетов.Ссылка = ВариантыОтчетов.Ссылка | И (НЕ &ЕстьОтборПоПодсистемам - | ИЛИ РазмещениеКонфигурации.Подсистема В (&ПодсистемыОтчетов)) - | - |ОБЪЕДИНИТЬ ВСЕ - | - |ВЫБРАТЬ - | ВариантыОтчетов.Ссылка, - | РазмещениеРасширений.Подсистема, - | ВЫБОР - | КОГДА &НеПолучатьОписания - | ТОГДА НЕОПРЕДЕЛЕНО - | КОГДА РазмещениеРасширений.Подсистема.ПолноеИмя = ""Подсистемы"" - | ТОГДА &НаименованиеРабочегоСтола - | ИНАЧЕ РазмещениеРасширений.Подсистема.Синоним - | КОНЕЦ - |ИЗ - | Варианты КАК ВариантыОтчетов - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетовРасширений.Размещение КАК РазмещениеРасширений - | ПО (ВариантыОтчетов.Пользовательский = ЛОЖЬ) - | И ВариантыОтчетов.ПредопределенныйВариант = РазмещениеРасширений.Ссылка + | ИЛИ РазмещениеОтчетов.Подсистема В (&ПодсистемыОтчетов)) + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетов.Размещение КАК РазмещениеОтчетовКонфигурации + | ПО РазмещениеОтчетовКонфигурации.Ссылка = ВариантыОтчетов.ПредопределенныйВариант | И (НЕ &ЕстьОтборПоПодсистемам - | ИЛИ РазмещениеРасширений.Подсистема В (&ПодсистемыОтчетов)) - | - |ИНДЕКСИРОВАТЬ ПО - | Ссылка - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ РАЗРЕШЕННЫЕ - | ВариантыОтчетов.Ссылка КАК Ссылка, - | ВариантыРазмещение.Использование КАК Использование, - | ВариантыРазмещение.Подсистема КАК Подсистема, - | ВЫБОР - | КОГДА &НеПолучатьОписания - | ТОГДА НЕОПРЕДЕЛЕНО - | КОГДА ВариантыРазмещение.Подсистема.ПолноеИмя = ""Подсистемы"" - | ТОГДА &НаименованиеРабочегоСтола - | ИНАЧЕ ВариантыРазмещение.Подсистема.Синоним - | КОНЕЦ КАК НаименованиеПодсистемы - |ПОМЕСТИТЬ РазмещениеВариантов - |ИЗ - | Варианты КАК ВариантыОтчетов - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ВариантыОтчетов.Размещение КАК ВариантыРазмещение - | ПО (ВариантыОтчетов.ПометкаУдаления = ЛОЖЬ - | ИЛИ &НетОтбораПоПометкеУдаления) - | И ВариантыОтчетов.Ссылка = ВариантыРазмещение.Ссылка + | ИЛИ РазмещениеОтчетовКонфигурации.Подсистема В (&ПодсистемыОтчетов)) + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетовРасширений.Размещение КАК РазмещениеОтчетовРасширений + | ПО РазмещениеОтчетовРасширений.Ссылка = ВариантыОтчетов.ПредопределенныйВариант | И (НЕ &ЕстьОтборПоПодсистемам - | ИЛИ ВариантыРазмещение.Подсистема В (&ПодсистемыОтчетов)) - | - |ИНДЕКСИРОВАТЬ ПО - | Ссылка - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | ЕСТЬNULL(РазмещениеВариантов.Ссылка, РазмещениеПредопределенных.Ссылка) КАК Ссылка, - | ЕСТЬNULL(РазмещениеВариантов.Подсистема, РазмещениеПредопределенных.Подсистема) КАК Подсистема, - | ЕСТЬNULL(РазмещениеВариантов.НаименованиеПодсистемы, РазмещениеПредопределенных.НаименованиеПодсистемы) КАК НаименованиеПодсистемы, - | ЕСТЬNULL(РазмещениеВариантов.Использование, ИСТИНА) КАК Использование, - | ВЫБОР - | КОГДА РазмещениеВариантов.Ссылка ЕСТЬ NULL - | ТОГДА ИСТИНА - | ИНАЧЕ ЛОЖЬ - | КОНЕЦ КАК ЭтоНастройкаРазработчика - |ПОМЕСТИТЬ РазмещениеВсех - |ИЗ - | РазмещениеПредопределенных КАК РазмещениеПредопределенных - | ПОЛНОЕ СОЕДИНЕНИЕ РазмещениеВариантов КАК РазмещениеВариантов - | ПО (РазмещениеВариантов.Ссылка = РазмещениеПредопределенных.Ссылка) - | И (РазмещениеВариантов.Подсистема = РазмещениеПредопределенных.Подсистема) + | ИЛИ РазмещениеОтчетовРасширений.Подсистема В (&ПодсистемыОтчетов)) |ГДЕ - | ЕСТЬNULL(РазмещениеВариантов.Использование, ИСТИНА) + | (&НетОтбораПоПометкеУдаления + | ИЛИ НЕ ВариантыОтчетов.ПометкаУдаления + | ИЛИ НЕ ДоступныеВариантыРасширений.Вариант ЕСТЬ NULL) + | И ЕСТЬNULL(РазмещениеОтчетов.Использование, ИСТИНА) + | И НЕ ЕСТЬNULL(РазмещениеОтчетов.Подсистема, + | ЕСТЬNULL(РазмещениеОтчетовКонфигурации.Подсистема, РазмещениеОтчетовРасширений.Подсистема)) ЕСТЬ NULL + | И (&ПоказыватьЛичныеВариантыОтчетовДругихАвторов + | ИЛИ НЕ ВариантыОтчетов.ТолькоДляАвтора + | ИЛИ ВариантыОтчетов.Автор = &ТекущийПользователь) | |ИНДЕКСИРОВАТЬ ПО | Ссылка @@ -5389,22 +5611,57 @@ | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ - | РазмещениеВсех.Ссылка КАК Ссылка, - | РазмещениеВсех.Подсистема КАК Подсистема, - | РазмещениеВсех.НаименованиеПодсистемы КАК НаименованиеПодсистемы - |ПОМЕСТИТЬ РазмещениеВидимых + | РазмещениеВариантовОтчетов.Ссылка КАК Ссылка, + | РазмещениеВариантовОтчетов.Подсистема, + | ДоступныеВариантыОтчетов.Видимость + |ПОМЕСТИТЬ НастройкиВариантовОтчетов |ИЗ - | РазмещениеВсех КАК РазмещениеВсех - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиВариантовОтчетов КАК ЛичныеНастройки - | ПО РазмещениеВсех.Подсистема = ЛичныеНастройки.Подсистема - | И РазмещениеВсех.Ссылка = ЛичныеНастройки.Вариант - | И (ЛичныеНастройки.Пользователь = &ТекущийПользователь) - | ЛЕВОЕ СОЕДИНЕНИЕ Варианты КАК Варианты - | ПО РазмещениеВсех.Ссылка = Варианты.Ссылка + | РазмещениеВариантовОтчетов КАК РазмещениеВариантовОтчетов + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + | ПО СоставыГруппПользователей.Пользователь = &ТекущийПользователь + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиВариантовОтчетов КАК ДоступныеВариантыОтчетов + | ПО ДоступныеВариантыОтчетов.Вариант = РазмещениеВариантовОтчетов.Ссылка + | И ДоступныеВариантыОтчетов.Подсистема В ( + | РазмещениеВариантовОтчетов.Подсистема, + | ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка)) + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиВариантовОтчетов КАК НедоступныеВариантыОтчетов + | ПО НедоступныеВариантыОтчетов.Вариант = РазмещениеВариантовОтчетов.Ссылка + | И НедоступныеВариантыОтчетов.Подсистема = РазмещениеВариантовОтчетов.Подсистема + | И (НедоступныеВариантыОтчетов.Пользователь В (&ТекущийПользователь, НЕОПРЕДЕЛЕНО) + | ИЛИ ТИПЗНАЧЕНИЯ(&ТекущийПользователь) = ТИП(Справочник.Пользователи) + | И НедоступныеВариантыОтчетов.Пользователь = ЗНАЧЕНИЕ(Справочник.ГруппыПользователей.ВсеПользователи) + | ИЛИ ТИПЗНАЧЕНИЯ(&ТекущийПользователь) = ТИП(Справочник.ВнешниеПользователи) + | И НедоступныеВариантыОтчетов.Пользователь = ЗНАЧЕНИЕ(Справочник.ГруппыВнешнихПользователей.ВсеВнешниеПользователи)) + | И НЕ НедоступныеВариантыОтчетов.Видимость |ГДЕ - | ЕСТЬNULL(ЛичныеНастройки.Видимость, Варианты.ВидимостьПоУмолчанию) - | И (Варианты.ПометкаУдаления = ЛОЖЬ - | ИЛИ &НетОтбораПоПометкеУдаления) + | &ЕстьОтборПоВидимости + | И ДоступныеВариантыОтчетов.Пользователь В (СоставыГруппПользователей.ГруппаПользователей, НЕОПРЕДЕЛЕНО) + | И ДоступныеВариантыОтчетов.Подсистема В (&ПодсистемыОтчетов) + | И ДоступныеВариантыОтчетов.Видимость + | И НедоступныеВариантыОтчетов.Вариант ЕСТЬ NULL + | + |ИНДЕКСИРОВАТЬ ПО + | Ссылка + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ РАЗЛИЧНЫЕ + | РазмещениеВариантовОтчетов.Ссылка КАК Ссылка, + | РазмещениеВариантовОтчетов.Подсистема, + | ЕСТЬNULL(ПредставленияПодсистем.Представление, """") КАК НаименованиеПодсистемы + |ПОМЕСТИТЬ РазмещениеСУчетомНастроек + |ИЗ + | РазмещениеВариантовОтчетов КАК РазмещениеВариантовОтчетов + | ЛЕВОЕ СОЕДИНЕНИЕ ПредставленияПодсистем КАК ПредставленияПодсистем + | ПО ПредставленияПодсистем.Ссылка = РазмещениеВариантовОтчетов.Подсистема + | ЛЕВОЕ СОЕДИНЕНИЕ НастройкиВариантовОтчетов КАК НастройкиВариантовОтчетов + | ПО НастройкиВариантовОтчетов.Ссылка = РазмещениеВариантовОтчетов.Ссылка + | И НастройкиВариантовОтчетов.Подсистема В ( + | РазмещениеВариантовОтчетов.Подсистема, + | ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка)) + |ГДЕ + | НЕ &ЕстьОтборПоВидимости + | ИЛИ НастройкиВариантовОтчетов.Видимость = ИСТИНА | |ИНДЕКСИРОВАТЬ ПО | Ссылка @@ -5418,13 +5675,11 @@ | ВариантыОтчетов.ТолькоДляАвтора КАК ТолькоДляАвтора, | ВЫБОР | КОГДА &ЕстьПравоЧтенияАвторов - | И &ПолучатьИтоговуюТаблицу | ТОГДА ВариантыОтчетов.Автор | ИНАЧЕ НЕОПРЕДЕЛЕНО | КОНЕЦ КАК Автор, | ВЫБОР | КОГДА &ЕстьПравоЧтенияАвторов - | И &ПолучатьИтоговуюТаблицу | ТОГДА ЕСТЬNULL(ВариантыОтчетов.Автор.Наименование, """") | ИНАЧЕ """" | КОНЕЦ КАК АвторПредставление, @@ -5448,19 +5703,19 @@ | НЕОПРЕДЕЛЕНО КАК ПредставлениеПользовательскойНастройки, | ВариантыОтчетов.ПометкаУдаления КАК ПометкаУдаления |ИЗ - | Варианты КАК ВариантыОтчетов - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РазмещениеВидимых КАК Размещение - | ПО ВариантыОтчетов.Ссылка = Размещение.Ссылка + | ВариантыОтчетов КАК ВариантыОтчетов + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РазмещениеСУчетомНастроек КАК Размещение + | ПО ВариантыОтчетов.Ссылка = Размещение.Ссылка |ГДЕ - | (ВариантыОтчетов.ПометкаУдаления = ЛОЖЬ - | ИЛИ &НетОтбораПоПометкеУдаления) + | (&НетОтбораПоПометкеУдаления + | ИЛИ НЕ ВариантыОтчетов.ПометкаУдаления) | И &ВариантыИПодсистемыПоСтрокеПоиска | |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ РАЗЛИЧНЫЕ | Пользовательские.Вариант, - | Варианты.Родитель, + | ВариантыОтчетов.Родитель, | НЕОПРЕДЕЛЕНО, | НЕОПРЕДЕЛЕНО, | НЕОПРЕДЕЛЕНО, @@ -5481,48 +5736,16 @@ | Пользовательские.Наименование, | НЕОПРЕДЕЛЕНО |ИЗ - | Варианты КАК Варианты + | ВариантыОтчетов КАК ВариантыОтчетов | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПользовательскиеНастройкиОтчетов КАК Пользовательские - | ПО Варианты.Ссылка = Пользовательские.Вариант + | ПО ВариантыОтчетов.Ссылка = Пользовательские.Вариант |ГДЕ - | Пользовательские.Пользователь = &ТекущийПользователь - | И &ПользовательскиеНастройкиПоСтрокеПоиска - | И (Пользовательские.ПометкаУдаления = ЛОЖЬ - | ИЛИ &НетОтбораПоПометкеУдаления) - | И (Варианты.ПометкаУдаления = ЛОЖЬ - | ИЛИ &НетОтбораПоПометкеУдаления)"; - - Если Не ЕстьОтборПоВидимости Тогда - // Удаление временной таблицы для фильтра по видимости. - УдалитьВременнуюТаблицу(ТекстЗапроса, "РазмещениеВидимых"); - // Подмена имени временной таблицы, из которой нужно делать выборку. - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "РазмещениеВидимых", "РазмещениеВсех"); - КонецЕсли; - - Если ЕстьОтборПоПодсистемам Тогда - Если ТипЗнч(ПараметрыПоиска.Подсистемы) = Тип("Массив") Тогда - ПодсистемыОтчетов = ПараметрыПоиска.Подсистемы; - Иначе - ПодсистемыОтчетов = Новый Массив; - ПодсистемыОтчетов.Добавить(ПараметрыПоиска.Подсистемы); - КонецЕсли; - Иначе - ПодсистемыОтчетов = Новый Массив; - КонецЕсли; - Запрос.УстановитьПараметр("ПодсистемыОтчетов", ПодсистемыОтчетов); - - Если ЕстьСтрокаПоиска И Не ЖесткийОтборПоПодсистемам Тогда - // Для поиска информация о размещении является дополнительной, а не ключевой. - Если ЕстьОтборПоВидимости Тогда - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, - "ВНУТРЕННЕЕ СОЕДИНЕНИЕ РазмещениеВидимых КАК Размещение", - "ЛЕВОЕ СОЕДИНЕНИЕ РазмещениеВидимых КАК Размещение"); - Иначе - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, - "ВНУТРЕННЕЕ СОЕДИНЕНИЕ РазмещениеВсех КАК Размещение", - "ЛЕВОЕ СОЕДИНЕНИЕ РазмещениеВсех КАК Размещение"); - КонецЕсли; - КонецЕсли; + | (&НетОтбораПоПометкеУдаления + | ИЛИ ВариантыОтчетов.ПометкаУдаления = ЛОЖЬ) + | И (&НетОтбораПоПометкеУдаления + | ИЛИ Пользовательские.ПометкаУдаления = ЛОЖЬ) + | И Пользовательские.Пользователь = &ТекущийПользователь + | И &ПользовательскиеНастройкиПоСтрокеПоиска"; СловаПоиска = ПодготовитьУсловиеПоискаПоСтроке(Запрос, ТекстЗапроса, ЕстьСтрокаПоиска, ПараметрыПоиска, ЕстьПравоЧтенияАвторов); @@ -5530,19 +5753,22 @@ ПодготовитьЗапросОтчетовСПростымиОтборами(Запрос, ТекстЗапроса, ЕстьОтборПоТипамОтчетов, ПараметрыПоиска); КонецЕсли; + УстановитьПривилегированныйРежим(Истина); + Запрос.Текст = ТекстЗапроса; ИсходнаяТаблица = Запрос.Выполнить().Выгрузить(); Если ПолучатьИтоговуюТаблицу Тогда Результат.ТаблицаЗначений = ИсходнаяТаблица; КонецЕсли; + Если ИсходнаяТаблица.Количество() = 0 Тогда Возврат Результат; КонецЕсли; Если ЕстьСтрокаПоиска И ПолучатьПодсветку Тогда СформироватьРезультатыПоиска(СловаПоиска, ИсходнаяТаблица, Результат); - Иначе + Иначе СформироватьСписокСсылок(ИсходнаяТаблица, Результат.Ссылки); КонецЕсли; @@ -5615,14 +5841,11 @@ | ВариантыОтчетов.ТолькоДляАвтора КАК ТолькоДляАвтора, | ВЫБОР | КОГДА &ЕстьПравоЧтенияАвторов - | И &ПолучатьИтоговуюТаблицу | ТОГДА ВариантыОтчетов.Автор | ИНАЧЕ НЕОПРЕДЕЛЕНО | КОНЕЦ КАК Автор, - | ВариантыОтчетов.ВидимостьПоУмолчанию, | ВЫБОР | КОГДА &ЕстьПравоЧтенияАвторов - | И &ПолучатьИтоговуюТаблицу | ТОГДА ПРЕДСТАВЛЕНИЕ(ВариантыОтчетов.Автор) | ИНАЧЕ """" | КОНЕЦ КАК АвторПредставление, @@ -5695,7 +5918,7 @@ СтрокаТаблицы = ИсходнаяТаблица[0]; ШаблонОбластиПоиска = Новый ФиксированнаяСтруктура("Значение, КоличествоНайденныхСлов, ПодсветкаСлов", "", 0, Новый СписокЗначений); - Вариант = СведенияОВариантеОтчета(СтрокаТаблицы.Ссылка, СтрокаТаблицы.Родитель, ШаблонОбластиПоиска); + Вариант = СведенияОВариантеОтчета(СтрокаТаблицы.Ссылка, СтрокаТаблицы.Родитель, ШаблонОбластиПоиска); РазделительПредставления = РазделительПредставления(); НайденныеСлова = Новый Соответствие; @@ -5757,6 +5980,7 @@ КонецЕсли; Результат.ПодсветкаПодсистем.Вставить(Подсистема.Ссылка, Подсистема); КонецЕсли; + НаименованияПодсистем = Вариант.НаименованияПодсистем.Значение; Вариант.НаименованияПодсистем.Значение = ?(ПустаяСтрока(НаименованияПодсистем), СтрокаТаблицы.НаименованиеПодсистемы, @@ -5816,7 +6040,7 @@ Прервать; КонецЕсли; - Вариант = СведенияОВариантеОтчета(СтрокаТаблицы.Ссылка, СтрокаТаблицы.Родитель, ШаблонОбластиПоиска); + Вариант = СведенияОВариантеОтчета(СтрокаТаблицы.Ссылка, СтрокаТаблицы.Родитель, ШаблонОбластиПоиска); КонецЕсли; КонецЦикла; @@ -5985,31 +6209,9 @@ Возврат Истина; КонецФункции -// Удаляет временную таблицу из текста запроса. -Процедура УдалитьВременнуюТаблицу(ТекстЗапроса, ИмяВременнойТаблицы) - ПозицияВременнойТаблицы = СтрНайти(ТекстЗапроса, "ПОМЕСТИТЬ " + ИмяВременнойТаблицы); // не локализуется (фрагмент запроса) - ЛеваяЧасть = ""; - ПраваяЧасть = ТекстЗапроса; - Пока Истина Цикл - ПозицияТочкиСЗапятой = СтрНайти(ПраваяЧасть, Символы.ПС + ";"); - Если ПозицияТочкиСЗапятой = 0 Тогда - Прервать; - ИначеЕсли ПозицияТочкиСЗапятой > ПозицияВременнойТаблицы Тогда - ПраваяЧасть = Сред(ПраваяЧасть, ПозицияТочкиСЗапятой + 2); - Прервать; - Иначе - ЛеваяЧасть = ЛеваяЧасть + Лев(ПраваяЧасть, ПозицияТочкиСЗапятой + 1); - ПраваяЧасть = Сред(ПраваяЧасть, ПозицияТочкиСЗапятой + 2); - ПозицияВременнойТаблицы = ПозицияВременнойТаблицы - ПозицияТочкиСЗапятой - 1; - КонецЕсли; - КонецЦикла; - ТекстЗапроса = ЛеваяЧасть + ПраваяЧасть; -КонецПроцедуры - Процедура НайтиВариантыОтчетовДляВывода(ПараметрыЗаполнения, АдресРезультата) Экспорт - Запрос = Новый Запрос; - Запрос.Текст = + Запрос = Новый Запрос( "ВЫБРАТЬ | Подсистемы.Ссылка КАК Подсистема, | Подсистемы.РазделСсылка КАК РазделСсылка, @@ -6044,20 +6246,15 @@ | ВариантыОтчетов.ТипОтчета КАК ТипОтчета, | ВариантыОтчетов.КлючВарианта КАК КлючВарианта, | ВариантыОтчетов.Автор КАК Автор, - | ВЫБОР - | КОГДА ВариантыОтчетов.ВидимостьПоУмолчаниюПереопределена - | ТОГДА ВариантыОтчетов.ВидимостьПоУмолчанию - | ИНАЧЕ ВариантыКонфигурации.ВидимостьПоУмолчанию - | КОНЕЦ КАК ВидимостьПоУмолчанию, | ВариантыОтчетов.Родитель КАК Родитель, | ВариантыОтчетов.ПредопределенныйВариант.КлючЗамеров КАК КлючЗамеров |ПОМЕСТИТЬ втПредопределенные |ИЗ | Справочник.ВариантыОтчетов КАК ВариантыОтчетов | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетов.Размещение КАК ПредопределенныеРазмещение - | ПО (ВариантыОтчетов.Ссылка В (&ВариантыНайденныеПоиском) + | ПО (ВариантыОтчетов.Ссылка В (&ВариантыНайденныеПоиском) | ИЛИ (&НетОтбораПоПодсистемамИОтчетам - | ИЛИ ПредопределенныеРазмещение.Подсистема В (&ПодсистемыНайденныеПоиском))) + | ИЛИ ПредопределенныеРазмещение.Подсистема В (&ПодсистемыНайденныеПоиском))) | И ВариантыОтчетов.ПредопределенныйВариант = ПредопределенныеРазмещение.Ссылка | И (ПредопределенныеРазмещение.Подсистема В (&МассивПодсистем)) | И (ВариантыОтчетов.ПометкаУдаления = ЛОЖЬ) @@ -6065,12 +6262,12 @@ | ИЛИ ВариантыОтчетов.Отчет В (&ОтчетыПользователя)) | И (НЕ ПредопределенныеРазмещение.Ссылка В (&ОтключенныеВариантыПрограммы)) | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетов КАК ВариантыКонфигурации - | ПО ВариантыОтчетов.ПредопределенныйВариант = ВариантыКонфигурации.Ссылка + | ПО ВариантыОтчетов.ПредопределенныйВариант = ВариантыКонфигурации.Ссылка | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетов.Представления КАК ПредставленияИзКонфигурации - | ПО ВариантыОтчетов.ПредопределенныйВариант = ПредставленияИзКонфигурации.Ссылка + | ПО ВариантыОтчетов.ПредопределенныйВариант = ПредставленияИзКонфигурации.Ссылка | И (ПредставленияИзКонфигурации.КодЯзыка = &КодЯзыка) | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВариантыОтчетов.Представления КАК ПредставленияВариантов - | ПО ВариантыОтчетов.Ссылка = ПредставленияВариантов.Ссылка + | ПО ВариантыОтчетов.Ссылка = ПредставленияВариантов.Ссылка | И (ПредставленияВариантов.КодЯзыка = &КодЯзыка) |ГДЕ | НЕ ВариантыОтчетов.ПометкаУдаления @@ -6097,57 +6294,56 @@ | ВариантыОтчетов.ТипОтчета, | ВариантыОтчетов.КлючВарианта, | ВариантыОтчетов.Автор, - | ВЫБОР - | КОГДА ВариантыОтчетов.ВидимостьПоУмолчаниюПереопределена - | ТОГДА ВариантыОтчетов.ВидимостьПоУмолчанию - | ИНАЧЕ ВариантыРасширений.ВидимостьПоУмолчанию - | КОНЕЦ, | ВариантыОтчетов.Родитель, | ВариантыОтчетов.ПредопределенныйВариант.КлючЗамеров |ИЗ | Справочник.ВариантыОтчетов КАК ВариантыОтчетов | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетовРасширений.Размещение КАК ПредопределенныеРазмещение - | ПО (ВариантыОтчетов.Ссылка В (&ВариантыНайденныеПоиском) + | ПО (ВариантыОтчетов.Ссылка В (&ВариантыНайденныеПоиском) | ИЛИ (&НетОтбораПоПодсистемамИОтчетам - | ИЛИ ПредопределенныеРазмещение.Подсистема В (&ПодсистемыНайденныеПоиском))) + | ИЛИ ПредопределенныеРазмещение.Подсистема В (&ПодсистемыНайденныеПоиском))) | И ВариантыОтчетов.ПредопределенныйВариант = ПредопределенныеРазмещение.Ссылка | И (ПредопределенныеРазмещение.Подсистема В (&МассивПодсистем)) | И (&НетОтбораПоПодсистемамИОтчетам | ИЛИ ВариантыОтчетов.Отчет В (&ОтчетыПользователя)) | И (НЕ ПредопределенныеРазмещение.Ссылка В (&ОтключенныеВариантыПрограммы)) + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПредопределенныеВариантыОтчетовВерсийРасширений КАК ДоступныеВариантыРасширений + | ПО ДоступныеВариантыРасширений.ВерсияРасширений = &ВерсияРасширений + | И ДоступныеВариантыРасширений.Вариант = ВариантыОтчетов.ПредопределенныйВариант | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетовРасширений КАК ВариантыРасширений - | ПО ВариантыОтчетов.ПредопределенныйВариант = ВариантыРасширений.Ссылка + | ПО ВариантыОтчетов.ПредопределенныйВариант = ВариантыРасширений.Ссылка | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетовРасширений.Представления КАК ПредставленияИзРасширений - | ПО ВариантыОтчетов.ПредопределенныйВариант = ПредставленияИзРасширений.Ссылка + | ПО ВариантыОтчетов.ПредопределенныйВариант = ПредставленияИзРасширений.Ссылка | И (ПредставленияИзРасширений.КодЯзыка = &КодЯзыка) | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВариантыОтчетов.Представления КАК ПредставленияВариантов - | ПО ВариантыОтчетов.Ссылка = ПредставленияВариантов.Ссылка + | ПО ВариантыОтчетов.Ссылка = ПредставленияВариантов.Ссылка | И (ПредставленияВариантов.КодЯзыка = &КодЯзыка) |ГДЕ | НЕ ВариантыОтчетов.ПометкаУдаления + | ИЛИ НЕ ДоступныеВариантыРасширений.Вариант ЕСТЬ NULL |; | |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ РАЗРЕШЕННЫЕ - | ВариантыРазмещение.Ссылка КАК Ссылка, - | ВариантыРазмещение.Подсистема КАК Подсистема, - | ВариантыРазмещение.Использование КАК Использование, - | ВариантыРазмещение.Важный КАК Важный, - | ВариантыРазмещение.СмТакже КАК СмТакже, + |ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ + | РазмещениеОтчетов.Ссылка КАК Ссылка, + | РазмещениеОтчетов.Подсистема КАК Подсистема, + | РазмещениеОтчетов.Использование КАК Использование, + | РазмещениеОтчетов.Важный КАК Важный, + | РазмещениеОтчетов.СмТакже КАК СмТакже, | ВЫБОР | КОГДА &ЭтоОсновнойЯзык - | ТОГДА ВЫРАЗИТЬ(ЕСТЬNULL(ЕСТЬNULL(ВариантыКонфигурации.Наименование, ВариантыРасширений.Наименование), ВариантыОтчетов.Наименование) КАК СТРОКА(1000)) - | ИНАЧЕ ВЫРАЗИТЬ(ЕСТЬNULL(ЕСТЬNULL(ПредставленияИзКонфигурации.Наименование, ПредставленияИзРасширений.Наименование), ВариантыПредставления.Наименование) КАК СТРОКА(1000)) + | ТОГДА ВЫРАЗИТЬ(ЕСТЬNULL(ЕСТЬNULL(ОтчетыКонфигурации.Наименование, ОтчетыРасширений.Наименование), ВариантыОтчетов.Наименование) КАК СТРОКА(1000)) + | ИНАЧЕ ВЫРАЗИТЬ(ЕСТЬNULL(ЕСТЬNULL(ПредставленияОтчетовКонфигурации.Наименование, ПредставленияОтчетовРасширений.Наименование), ПредставленияОтчетов.Наименование) КАК СТРОКА(1000)) | КОНЕЦ КАК Наименование, | ВЫБОР | КОГДА &ЭтоОсновнойЯзык - | ТОГДА ВЫРАЗИТЬ(ЕСТЬNULL(ЕСТЬNULL(ВариантыКонфигурации.Описание, ВариантыРасширений.Описание), ВариантыОтчетов.Описание) КАК СТРОКА(1000)) - | ИНАЧЕ ВЫРАЗИТЬ(ЕСТЬNULL(ЕСТЬNULL(ПредставленияИзКонфигурации.Описание, ПредставленияИзРасширений.Описание), ВариантыПредставления.Описание) КАК СТРОКА(1000)) + | ТОГДА ВЫРАЗИТЬ(ЕСТЬNULL(ЕСТЬNULL(ОтчетыКонфигурации.Описание, ОтчетыРасширений.Описание), ВариантыОтчетов.Описание) КАК СТРОКА(1000)) + | ИНАЧЕ ВЫРАЗИТЬ(ЕСТЬNULL(ЕСТЬNULL(ПредставленияОтчетовКонфигурации.Описание, ПредставленияОтчетовРасширений.Описание), ПредставленияОтчетов.Описание) КАК СТРОКА(1000)) | КОНЕЦ КАК Описание, - | ВариантыОтчетов.Отчет КАК Отчет, - | ВариантыОтчетов.ТипОтчета КАК ТипОтчета, - | ВариантыОтчетов.КлючВарианта КАК КлючВарианта, - | ВариантыОтчетов.Автор КАК Автор, + | ВариантыОтчетов.Отчет, + | ВариантыОтчетов.ТипОтчета, + | ВариантыОтчетов.КлючВарианта, + | ВариантыОтчетов.Автор, | ВЫБОР | КОГДА ВариантыОтчетов.Родитель = ЗНАЧЕНИЕ(Справочник.ВариантыОтчетов.ПустаяСсылка) | ТОГДА ЗНАЧЕНИЕ(Справочник.ВариантыОтчетов.ПустаяСсылка) @@ -6155,40 +6351,39 @@ | ТОГДА ВариантыОтчетов.Родитель | ИНАЧЕ ВариантыОтчетов.Родитель.Родитель | КОНЕЦ КАК Родитель, - | ВариантыОтчетов.ВидимостьПоУмолчанию КАК ВидимостьПоУмолчанию, | ВариантыОтчетов.ПредопределенныйВариант.КлючЗамеров КАК КлючЗамеров |ПОМЕСТИТЬ втВарианты |ИЗ - | Справочник.ВариантыОтчетов.Размещение КАК ВариантыРазмещение + | Справочник.ВариантыОтчетов.Размещение КАК РазмещениеОтчетов | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВариантыОтчетов КАК ВариантыОтчетов - | ПО (ВариантыОтчетов.Ссылка = ВариантыРазмещение.Ссылка) - | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВариантыОтчетов.Представления КАК ВариантыПредставления - | ПО (ВариантыОтчетов.Ссылка = ВариантыПредставления.Ссылка) - | И (ВариантыПредставления.КодЯзыка = &КодЯзыка) - | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетов КАК ВариантыКонфигурации - | ПО ВариантыОтчетов.ПредопределенныйВариант = ВариантыКонфигурации.Ссылка - | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетов.Представления КАК ПредставленияИзКонфигурации - | ПО (ВариантыОтчетов.ПредопределенныйВариант = ПредставленияИзКонфигурации.Ссылка) - | И (ПредставленияИзКонфигурации.КодЯзыка = &КодЯзыка) - | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетовРасширений КАК ВариантыРасширений - | ПО ВариантыОтчетов.ПредопределенныйВариант = ВариантыРасширений.Ссылка - | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетовРасширений.Представления КАК ПредставленияИзРасширений - | ПО (ВариантыОтчетов.ПредопределенныйВариант = ПредставленияИзРасширений.Ссылка) - | И (ПредставленияИзРасширений.КодЯзыка = &КодЯзыка) + | ПО ВариантыОтчетов.Ссылка = РазмещениеОтчетов.Ссылка + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВариантыОтчетов.Представления КАК ПредставленияОтчетов + | ПО ПредставленияОтчетов.Ссылка = ВариантыОтчетов.Ссылка + | И ПредставленияОтчетов.КодЯзыка = &КодЯзыка + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетов КАК ОтчетыКонфигурации + | ПО ОтчетыКонфигурации.Ссылка = ВариантыОтчетов.ПредопределенныйВариант + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетов.Представления КАК ПредставленияОтчетовКонфигурации + | ПО ПредставленияОтчетовКонфигурации.Ссылка = ВариантыОтчетов.ПредопределенныйВариант + | И ПредставленияОтчетовКонфигурации.КодЯзыка = &КодЯзыка + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетовРасширений КАК ОтчетыРасширений + | ПО ОтчетыРасширений.Ссылка = ВариантыОтчетов.ПредопределенныйВариант + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетовРасширений.Представления КАК ПредставленияОтчетовРасширений + | ПО ПредставленияОтчетовРасширений.Ссылка = ВариантыОтчетов.ПредопределенныйВариант + | И ПредставленияОтчетовРасширений.КодЯзыка = &КодЯзыка |ГДЕ - | (ВариантыРазмещение.Ссылка В (&ВариантыНайденныеПоиском) - | ИЛИ (&НетОтбораПоПодсистемамИОтчетам - | ИЛИ ВариантыРазмещение.Подсистема В (&ПодсистемыНайденныеПоиском))) + | (РазмещениеОтчетов.Ссылка В (&ВариантыНайденныеПоиском) + | ИЛИ (&НетОтбораПоПодсистемамИОтчетам + | ИЛИ РазмещениеОтчетов.Подсистема В (&ПодсистемыНайденныеПоиском))) + | И РазмещениеОтчетов.Подсистема В (&МассивПодсистем) | И (НЕ ВариантыОтчетов.ТолькоДляАвтора - | ИЛИ ВариантыОтчетов.Автор = &ТекущийПользователь) - | И ВариантыРазмещение.Подсистема В(&МассивПодсистем) + | ИЛИ ВариантыОтчетов.Автор = &ТекущийПользователь) | И (&НетОтбораПоПодсистемамИОтчетам - | ИЛИ ВариантыОтчетов.Отчет В (&ОтчетыПользователя)) + | ИЛИ ВариантыОтчетов.Отчет В (&ОтчетыПользователя)) | И НЕ ВариантыОтчетов.ПредопределенныйВариант В (&ОтключенныеВариантыПрограммы) | И (НЕ ВариантыОтчетов.Пользовательский - | ИЛИ НЕ ВариантыОтчетов.ИнтерактивнаяПометкаУдаления) + | ИЛИ НЕ ВариантыОтчетов.ИнтерактивнаяПометкаУдаления) | И (ВариантыОтчетов.Пользовательский - | ИЛИ НЕ ВариантыОтчетов.ПометкаУдаления) + | ИЛИ НЕ ВариантыОтчетов.ПометкаУдаления) |; | |//////////////////////////////////////////////////////////////////////////////// @@ -6203,11 +6398,10 @@ | ЕСТЬNULL(втВарианты.Отчет, втПредопределенные.Отчет) КАК Отчет, | ЕСТЬNULL(втВарианты.ТипОтчета, втПредопределенные.ТипОтчета) КАК ТипОтчета, | ЕСТЬNULL(втВарианты.КлючВарианта, втПредопределенные.КлючВарианта) КАК КлючВарианта, - | ЕСТЬNULL(втВарианты.ВидимостьПоУмолчанию, втПредопределенные.ВидимостьПоУмолчанию) КАК ВидимостьПоУмолчанию, | ЕСТЬNULL(втВарианты.Родитель, втПредопределенные.Родитель) КАК Родитель, | ВЫБОР | КОГДА ЕСТЬNULL(втВарианты.Родитель, втПредопределенные.Родитель) = ЗНАЧЕНИЕ(Справочник.ВариантыОтчетов.ПустаяСсылка) - | ТОГДА ИСТИНА + | ТОГДА ИСТИНА | ИНАЧЕ ЛОЖЬ | КОНЕЦ КАК ВерхнийУровень, | ЕСТЬNULL(втВарианты.КлючЗамеров, втПредопределенные.КлючЗамеров) КАК КлючЗамеров @@ -6215,7 +6409,7 @@ |ИЗ | втПредопределенные КАК втПредопределенные | ПОЛНОЕ СОЕДИНЕНИЕ втВарианты КАК втВарианты - | ПО втПредопределенные.Ссылка = втВарианты.Ссылка + | ПО втПредопределенные.Ссылка = втВарианты.Ссылка | И втПредопределенные.Подсистема = втВарианты.Подсистема |ГДЕ | ЕСТЬNULL(втВарианты.Использование, ИСТИНА) @@ -6230,19 +6424,19 @@ | втПодсистемы.РазделСсылка КАК РазделСсылка, | ВЫБОР | КОГДА втВсеВарианты.Подсистема = втПодсистемы.РазделСсылка - | И втВсеВарианты.СмТакже = ЛОЖЬ - | ТОГДА ИСТИНА + | И втВсеВарианты.СмТакже = ЛОЖЬ + | ТОГДА ИСТИНА | ИНАЧЕ ЛОЖЬ | КОНЕЦ КАК БезГруппы, | втВсеВарианты.Важный КАК Важный, | втВсеВарианты.СмТакже КАК СмТакже, | ВЫБОР | КОГДА втВсеВарианты.ТипОтчета = ЗНАЧЕНИЕ(Перечисление.ТипыОтчетов.Дополнительный) - | ТОГДА ИСТИНА + | ТОГДА ИСТИНА | ИНАЧЕ ЛОЖЬ | КОНЕЦ КАК Дополнительный, - | ЕСТЬNULL(ЛичныеНастройки.Видимость, втВсеВарианты.ВидимостьПоУмолчанию) КАК Видимость, - | ЕСТЬNULL(ЛичныеНастройки.БыстрыйДоступ, ЛОЖЬ) КАК БыстрыйДоступ, + | МАКСИМУМ(ЕСТЬNULL(НедоступныеВариантыОтчетов.Видимость, ЕСТЬNULL(ДоступныеВариантыОтчетов.Видимость, ЛОЖЬ))) КАК Видимость, + | МАКСИМУМ(ЕСТЬNULL(НедоступныеВариантыОтчетов.БыстрыйДоступ, ЕСТЬNULL(ДоступныеВариантыОтчетов.БыстрыйДоступ, ЛОЖЬ))) КАК БыстрыйДоступ, | ВЫБОР | КОГДА втВсеВарианты.ТипОтчета = ЗНАЧЕНИЕ(Перечисление.ТипыОтчетов.Внутренний) | ИЛИ втВсеВарианты.ТипОтчета = ЗНАЧЕНИЕ(Перечисление.ТипыОтчетов.Расширение) @@ -6263,18 +6457,69 @@ |ИЗ | втВсеВарианты КАК втВсеВарианты | ЛЕВОЕ СОЕДИНЕНИЕ втПодсистемы КАК втПодсистемы - | ПО втВсеВарианты.Подсистема = втПодсистемы.Подсистема - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиВариантовОтчетов КАК ЛичныеНастройки - | ПО втВсеВарианты.Подсистема = ЛичныеНастройки.Подсистема - | И втВсеВарианты.Ссылка = ЛичныеНастройки.Вариант - | И (ЛичныеНастройки.Пользователь = &ТекущийПользователь) + | ПО втВсеВарианты.Подсистема = втПодсистемы.Подсистема + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + | ПО СоставыГруппПользователей.Пользователь = &ТекущийПользователь + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиВариантовОтчетов КАК ДоступныеВариантыОтчетов + | ПО ДоступныеВариантыОтчетов.Вариант = втВсеВарианты.Ссылка + | И ДоступныеВариантыОтчетов.Подсистема В ( + | втВсеВарианты.Подсистема, + | ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка)) + | И ДоступныеВариантыОтчетов.Пользователь В (СоставыГруппПользователей.ГруппаПользователей, НЕОПРЕДЕЛЕНО) + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиВариантовОтчетов КАК НедоступныеВариантыОтчетов + | ПО НедоступныеВариантыОтчетов.Вариант = втВсеВарианты.Ссылка + | И НедоступныеВариантыОтчетов.Подсистема = втВсеВарианты.Подсистема + | И (НедоступныеВариантыОтчетов.Пользователь В (&ТекущийПользователь, НЕОПРЕДЕЛЕНО) + | ИЛИ ТИПЗНАЧЕНИЯ(&ТекущийПользователь) = ТИП(Справочник.Пользователи) + | И НедоступныеВариантыОтчетов.Пользователь = ЗНАЧЕНИЕ(Справочник.ГруппыПользователей.ВсеПользователи) + | ИЛИ ТИПЗНАЧЕНИЯ(&ТекущийПользователь) = ТИП(Справочник.ВнешниеПользователи) + | И НедоступныеВариантыОтчетов.Пользователь = ЗНАЧЕНИЕ(Справочник.ГруппыВнешнихПользователей.ВсеВнешниеПользователи)) + | И НЕ НедоступныеВариантыОтчетов.Видимость |ГДЕ | (&НетОтбораПоВидимости - | ИЛИ ЕСТЬNULL(ЛичныеНастройки.Видимость, втВсеВарианты.ВидимостьПоУмолчанию)) + | ИЛИ ДоступныеВариантыОтчетов.Видимость = ИСТИНА + | И НедоступныеВариантыОтчетов.Вариант ЕСТЬ NULL) + | + |СГРУППИРОВАТЬ ПО + | втВсеВарианты.Ссылка, + | втВсеВарианты.Подсистема, + | втПодсистемы.Представление, + | ЕСТЬNULL(втПодсистемы.Приоритет, """"), + | втПодсистемы.РазделСсылка, + | ВЫБОР + | КОГДА втВсеВарианты.Подсистема = втПодсистемы.РазделСсылка + | И втВсеВарианты.СмТакже = ЛОЖЬ + | ТОГДА ИСТИНА + | ИНАЧЕ ЛОЖЬ + | КОНЕЦ, + | втВсеВарианты.Важный, + | втВсеВарианты.СмТакже, + | ВЫБОР + | КОГДА втВсеВарианты.ТипОтчета = ЗНАЧЕНИЕ(Перечисление.ТипыОтчетов.Дополнительный) + | ТОГДА ИСТИНА + | ИНАЧЕ ЛОЖЬ + | КОНЕЦ, + | ВЫБОР + | КОГДА втВсеВарианты.ТипОтчета = ЗНАЧЕНИЕ(Перечисление.ТипыОтчетов.Внутренний) + | ИЛИ втВсеВарианты.ТипОтчета = ЗНАЧЕНИЕ(Перечисление.ТипыОтчетов.Расширение) + | ТОГДА втВсеВарианты.Отчет.Имя + | КОГДА втВсеВарианты.ТипОтчета = ЗНАЧЕНИЕ(Перечисление.ТипыОтчетов.Дополнительный) + | ТОГДА """" + | ИНАЧЕ ПОДСТРОКА(ВЫРАЗИТЬ(втВсеВарианты.Отчет КАК СТРОКА(150)), 14, 137) + | КОНЕЦ, + | ЕСТЬNULL(втВсеВарианты.Наименование, """"), + | втВсеВарианты.Описание, + | втВсеВарианты.Автор, + | втВсеВарианты.Отчет, + | втВсеВарианты.ТипОтчета, + | втВсеВарианты.КлючВарианта, + | втВсеВарианты.Родитель, + | втВсеВарианты.ВерхнийУровень, + | втВсеВарианты.КлючЗамеров | |УПОРЯДОЧИТЬ ПО | ПодсистемаПриоритет, - | Наименование"; + | Наименование"); ПоискПоСтроке = ЗначениеЗаполнено(ПараметрыЗаполнения.СтрокаПоиска); ТолькоТекущийРаздел = ПараметрыЗаполнения.РежимНастройки Или Не ПоискПоСтроке Или ПараметрыЗаполнения.ИскатьВоВсехРазделах = 0; @@ -6303,6 +6548,7 @@ Запрос.УстановитьПараметр("ОтключенныеВариантыПрограммы", ПараметрыПоиска.ОтключенныеВариантыПрограммы); Запрос.УстановитьПараметр("НетОтбораПоПодсистемамИОтчетам", Не ПоискПоСтроке И ПараметрыПоиска.Подсистемы.Количество() = 0); Запрос.УстановитьПараметр("НетОтбораПоВидимости", ПараметрыЗаполнения.РежимНастройки Или ПоискПоСтроке); + Запрос.УстановитьПараметр("ВерсияРасширений", ПараметрыСеанса.ВерсияРасширений); ТаблицаРезультат = Запрос.Выполнить().Выгрузить(); ЗаполнитьИменаОтчетов(ТаблицаРезультат); @@ -6579,4 +6825,860 @@ КонецЦикла; КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// Обмен настройками вариантов отчетов + +#Область ОбменНастройкамиМеждуИнформационнымиБазами + +Функция СвойстваВариантОтчетаИзФайла(ОписаниеФайла, ВариантОтчетаОснование) Экспорт + + ОписаниеВариантаОтчета = ОписаниеВариантаОтчета(ОписаниеФайла); + + Ссылка = ВариантОтчетаПоОписанию(ОписаниеВариантаОтчета, ВариантОтчетаОснование); + ОписаниеВариантаОтчета.Вставить("Ссылка", Ссылка); + + Возврат ОписаниеВариантаОтчета; + +КонецФункции + +Функция ОписаниеВариантаОтчета(ОписаниеФайла) + + ИмяКаталога = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ФайловаяСистема.СоздатьВременныйКаталог()); + ИмяФайлаАрхива = ПолучитьИмяВременногоФайла("zip"); // АПК:441 Временные файлы удаляются процедурой УдалитьФайлыОписанияВариантаОтчета; + + ДвоичныеДанные = ПолучитьИзВременногоХранилища(ОписаниеФайла.Хранение); + ДвоичныеДанные.Записать(ИмяФайлаАрхива); + + Архив = Новый ЧтениеZipФайла(ИмяФайлаАрхива); + Архив.ИзвлечьВсе(ИмяКаталога); + + ОписаниеВариантаОтчета = ОписаниеНастроекВариантаОтчета(ИмяКаталога); + + Если ЗначениеЗаполнено(ОписаниеВариантаОтчета.ОписаниеОшибки) Тогда + + УдалитьФайлыОписанияВариантаОтчета(ИмяКаталога, ИмяФайлаАрхива); + ВызватьИсключение ОписаниеВариантаОтчета.ОписаниеОшибки; + + КонецЕсли; + + ОписаниеВариантаОтчета.Настройки = ДесериализованныеНастройки(ИмяКаталога + "Settings.xml"); + + Счетчик = 0; + + Для Каждого ЭлементСписка Из ОписаниеВариантаОтчета.ПользовательскиеНастройки Цикл + + Счетчик = Счетчик + 1; + ИмяФайла = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ИмяКаталога + "UserSettings%1.xml", Счетчик); + + ОписаниеВариантаОтчета.ХранилищеПользовательскихНастроек.Вставить( + ЭлементСписка.Значение, ДесериализованныеНастройки(ИмяФайла)); + + КонецЦикла; + + УдалитьФайлыОписанияВариантаОтчета(ИмяКаталога, ИмяФайлаАрхива); + + Возврат ОписаниеВариантаОтчета; + +КонецФункции + +Функция ОписаниеНастроекВариантаОтчета(ИмяКаталога) + + #Область КонструкторОписанияНастроек + + ОписаниеНастроек = Новый Структура("ИмяОтчета, Настройки, + |КлючВарианта, ПредставлениеВарианта, + |КлючТекущихПользовательскихНастроек, ПредставлениеТекущихПользовательскихНастроек, + |ПользовательскиеНастройки, ХранилищеПользовательскихНастроек, + |ОписаниеОшибки"); + + ОписаниеНастроек.ПользовательскиеНастройки = Новый СписокЗначений; + ОписаниеНастроек.ХранилищеПользовательскихНастроек = Новый Соответствие; + + #КонецОбласти + + #Область ЧтениеФайлаОписанияНастроек + + ШаблонОписанияОшибки = НСтр("ru = 'Некорректный формат описания настроек: %1'"); + + ЧтениеXML = Новый ЧтениеXML; + + Попытка + ЧтениеXML.ОткрытьФайл(ИмяКаталога + "SettingsDescription.xml"); + Исключение + ОписаниеНастроек.ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ШаблонОписанияОшибки, НСтр("ru = 'отсутствует файл SettingsDescription.xml'")); + + Возврат ОписаниеНастроек; + КонецПопытки; + + ПостроительDOM = Новый ПостроительDOM; + ДокументDOM = ПостроительDOM.Прочитать(ЧтениеXML); + + ЧтениеXML.Закрыть(); + + #КонецОбласти + + #Область ЧтениеОбщегоОписанияНастроек + + Если ДокументDOM.ДочерниеУзлы.Количество() = 0 Тогда + ОписаниеНастроек.ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ШаблонОписанияОшибки, НСтр("ru = 'отсутствует элемент SettingsDescription'")); + + Возврат ОписаниеНастроек; + КонецЕсли; + + Элемент = ДокументDOM.ДочерниеУзлы.Элемент(0); + + ИмяОтчета = Элемент.Атрибуты.ПолучитьИменованныйЭлемент("ReportName"); + Если ИмяОтчета = Неопределено Тогда + ОписаниеНастроек.ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ШаблонОписанияОшибки, НСтр("ru = 'отсутствует атрибут ReportName'")); + + Возврат ОписаниеНастроек; + КонецЕсли; + + ОписаниеНастроек.ИмяОтчета = ИмяОтчета.Значение; + + Состав = Элемент.ДочерниеУзлы; + + #КонецОбласти + + #Область ЧтениеОписанияОсновныхНастроек + + Если Состав.Количество() = 0 Тогда + ОписаниеНастроек.ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ШаблонОписанияОшибки, НСтр("ru = 'отсутствует элемент Settings'")); + + Возврат ОписаниеНастроек; + КонецЕсли; + + Элемент = Состав.Элемент(0); + + КлючВарианта = Элемент.Атрибуты.ПолучитьИменованныйЭлемент("Key"); + Если КлючВарианта = Неопределено Тогда + ОписаниеНастроек.ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ШаблонОписанияОшибки, НСтр("ru = 'отсутствует атрибут Key элемента Settings'")); + + Возврат ОписаниеНастроек; + КонецЕсли; + + ОписаниеНастроек.КлючВарианта = КлючВарианта.Значение; + + ПредставлениеВарианта = Элемент.Атрибуты.ПолучитьИменованныйЭлемент("Presentation"); + Если ПредставлениеВарианта = Неопределено Тогда + ОписаниеНастроек.ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ШаблонОписанияОшибки, НСтр("ru = 'отсутствует атрибут Presentation элемента Settings'")); + + Возврат ОписаниеНастроек; + КонецЕсли; + + ОписаниеНастроек.ПредставлениеВарианта = ПредставлениеВарианта.Значение; + + #КонецОбласти + + #Область ЧтениеОписанияПользовательскихНастроек + + ГраницаСостава = Состав.Количество() - 1; + Если ГраницаСостава <= 0 Тогда + Возврат ОписаниеНастроек; + КонецЕсли; + + Для Индекс = 1 По ГраницаСостава Цикл + + Элемент = Состав.Элемент(Индекс); + + КлючНастроек = Элемент.Атрибуты.ПолучитьИменованныйЭлемент("Key"); + Если КлючНастроек = Неопределено Тогда + ОписаниеНастроек.ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ШаблонОписанияОшибки, НСтр("ru = 'отсутствует атрибут Key элемента UserSettings'")); + + Возврат ОписаниеНастроек; + КонецЕсли; + + ПредставлениеНастроек = Элемент.Атрибуты.ПолучитьИменованныйЭлемент("Presentation"); + Если ПредставлениеНастроек = Неопределено Тогда + ОписаниеНастроек.ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ШаблонОписанияОшибки, НСтр("ru = 'отсутствует атрибут Presentation элемента UserSettings'")); + + Возврат ОписаниеНастроек; + КонецЕсли; + + ЭтоТекущиеПредставление = Элемент.Атрибуты.ПолучитьИменованныйЭлемент("isCurrent"); + Если ЭтоТекущиеПредставление = Неопределено Тогда + ОписаниеНастроек.ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ШаблонОписанияОшибки, НСтр("ru = 'отсутствует атрибут isCurrent элемента UserSettings'")); + + Возврат ОписаниеНастроек; + КонецЕсли; + + ЭтоТекущие = XMLЗначение(Тип("Булево"), ЭтоТекущиеПредставление.Значение); + + ОписаниеНастроек.ПользовательскиеНастройки.Добавить( + КлючНастроек.Значение, ПредставлениеНастроек.Значение, ЭтоТекущие); + + Если ЭтоТекущие Тогда + + ОписаниеНастроек.КлючТекущихПользовательскихНастроек = КлючНастроек.Значение; + ОписаниеНастроек.ПредставлениеТекущихПользовательскихНастроек = ПредставлениеНастроек.Значение; + + КонецЕсли; + + КонецЦикла; + + #КонецОбласти + + Возврат ОписаниеНастроек; + +КонецФункции + +Функция ДесериализованныеНастройки(ИмяФайла) + + ЧтениеXML = Новый ЧтениеXML; + + Попытка + ЧтениеXML.ОткрытьФайл(ИмяФайла); + Исключение + ОписаниеИмениФайла = СтрРазделить(ИмяФайла, ПолучитьРазделительПути()); + + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Некорректный формат настроек: отсутствует файл %1'"), + ОписаниеИмениФайла[ОписаниеИмениФайла.ВГраница()]); + КонецПопытки; + + Возврат СериализаторXDTO.ПрочитатьXML(ЧтениеXML); + +КонецФункции + +Функция ВариантОтчетаПоОписанию(ОписаниеВариантаОтчета, ВариантОтчетаОснование) + + Если Не ВариантыОтчетовПовтИсп.ПравоДобавления() Тогда + ВызватьИсключение НСтр("ru = 'Недостаточно прав для выполнения операции'"); + КонецЕсли; + + Попытка + Отчет = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ОписаниеВариантаОтчета.ИмяОтчета); + Исключение + ВызватьИсключение НСтр("ru = 'Отчет отсутствует в программе'"); + КонецПопытки; + + Автор = Пользователи.АвторизованныйПользователь(); + + НачатьТранзакцию(); + + Попытка + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить(Метаданные.Справочники.ВариантыОтчетов.ПолноеИмя()); + Блокировка.Заблокировать(); + + ВариантОтчета = ПользовательскийВариантОтчета(Отчет, ОписаниеВариантаОтчета.КлючВарианта, Автор); + + Если ЗначениеЗаполнено(ВариантОтчета.Ссылка) Тогда + + #Область ОбновлениеСуществующегоВариантаОтчета + + Объект = ВариантОтчета.Ссылка.ПолучитьОбъект(); + Объект.Настройки = Новый ХранилищеЗначения(ОписаниеВариантаОтчета.Настройки); + + ПользователиВарианта = Новый СписокЗначений; + + РегистрыСведений.НастройкиВариантовОтчетов.ПрочитатьНастройкиДоступностиВариантаОтчета( + Объект.Ссылка, ПользователиВарианта); + + Если ПользователиВарианта.НайтиПоЗначению(Автор) = Неопределено Тогда + ПользователиВарианта.Добавить(Автор); + КонецЕсли; + + Объект.ДополнительныеСвойства.Вставить("ПользователиВарианта", ПользователиВарианта); + + #КонецОбласти + + Иначе + + #Область СозданиеНовогоВариантаОтчета + + Наименование = ДоступноеНаименованиеВариантаОтчета(Отчет, ОписаниеВариантаОтчета.ПредставлениеВарианта); + + Если ВариантОтчета.КлючВариантаЗанят Тогда + ОписаниеВариантаОтчета.КлючВарианта = Строка(Новый УникальныйИдентификатор()); + КонецЕсли; + + ДанныеЗаполнения = Новый Структура; + ДанныеЗаполнения.Вставить("Отчет", Отчет); + ДанныеЗаполнения.Вставить("КлючВарианта", ОписаниеВариантаОтчета.КлючВарианта); + ДанныеЗаполнения.Вставить("Настройки", ОписаниеВариантаОтчета.Настройки); + ДанныеЗаполнения.Вставить("Наименование", Наименование); + ДанныеЗаполнения.Вставить("Автор", Автор); + ДанныеЗаполнения.Вставить("Основание", ВариантОтчетаОснование); + + Объект = Справочники.ВариантыОтчетов.СоздатьЭлемент(); + Объект.Заполнить(ДанныеЗаполнения); + + #КонецОбласти + + КонецЕсли; + + Объект.Записать(); + + СохранитьПользовательскиеНастройкиИзФайла(Объект.Ссылка, ОписаниеВариантаОтчета); + + ЗафиксироватьТранзакцию(); + Исключение + + ОтменитьТранзакцию(); + ВызватьИсключение; + + КонецПопытки; + + Возврат Объект.Ссылка; + +КонецФункции + +Процедура СохранитьПользовательскиеНастройкиИзФайла(ВариантОтчета, ОписаниеВариантаОтчета) + + Если ОписаниеВариантаОтчета.ПользовательскиеНастройки.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + ШаблонОписанияНастроек = Новый Структура("КлючОбъекта, КлючНастроек, Представление, Пользователь"); + ШаблонОписанияНастроек.КлючОбъекта = ОписаниеВариантаОтчета.ИмяОтчета + "/" + ОписаниеВариантаОтчета.КлючВарианта; + ШаблонОписанияНастроек.Пользователь = ИмяПользователя(); + + Для Каждого ЭлементСписка Из ОписаниеВариантаОтчета.ПользовательскиеНастройки Цикл + + ОписаниеНастроек = Новый ОписаниеНастроек; + ЗаполнитьЗначенияСвойств(ОписаниеНастроек, ШаблонОписанияНастроек); + ОписаниеНастроек.КлючНастроек = ЭлементСписка.Значение; + ОписаниеНастроек.Представление = ЭлементСписка.Представление; + + Настройки = ОписаниеВариантаОтчета.ХранилищеПользовательскихНастроек[ОписаниеНастроек.КлючНастроек]; + + ХранилищеПользовательскихНастроекОтчетов.Сохранить( + ОписаниеНастроек.КлючОбъекта, + ОписаниеНастроек.КлючНастроек, + Настройки, + ОписаниеНастроек, + ОписаниеНастроек.Пользователь); + + КонецЦикла; + + Если Не ЗначениеЗаполнено(ОписаниеВариантаОтчета.КлючТекущихПользовательскихНастроек) Тогда + Возврат; + КонецЕсли; + + ОписаниеНастроек = Новый ОписаниеНастроек; + ЗаполнитьЗначенияСвойств(ОписаниеНастроек, ШаблонОписанияНастроек); + ОписаниеНастроек.КлючОбъекта = ОписаниеНастроек.КлючОбъекта + "/ТекущиеПользовательскиеНастройки"; + ОписаниеНастроек.КлючНастроек = ОписаниеВариантаОтчета.КлючТекущихПользовательскихНастроек; + ОписаниеНастроек.Представление = ОписаниеВариантаОтчета.ПредставлениеТекущихПользовательскихНастроек; + + Настройки = ОписаниеВариантаОтчета.ХранилищеПользовательскихНастроек[ОписаниеНастроек.КлючНастроек]; + + ОбщегоНазначения.ХранилищеСистемныхНастроекСохранить( + ОписаниеНастроек.КлючОбъекта, + ОписаниеНастроек.КлючНастроек, + Настройки, + ОписаниеНастроек, + ОписаниеНастроек.Пользователь); + +КонецПроцедуры + +Функция ПользовательскийВариантОтчета(Отчет, КлючВарианта, Автор) + + ВариантОтчета = Новый Структура("Ссылка, КлючВариантаЗанят"); + + #Область ЗапросПользовательскогоВариантаОтчета + + Запрос = Новый Запрос( + "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1 + | Отчеты.Ссылка, + | Отчеты.ПометкаУдаления + |ИЗ + | Справочник.ВариантыОтчетов КАК Отчеты + |ГДЕ + | ТИПЗНАЧЕНИЯ(&Отчет) <> ТИП(Справочник.ИдентификаторыОбъектовРасширений) + | И Отчеты.Отчет = &Отчет + | И Отчеты.КлючВарианта = &КлючВарианта + | И Отчеты.Автор = &Автор + | И Отчеты.Пользовательский + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ ПЕРВЫЕ 1 + | Отчеты.Ссылка, + | Отчеты.ПометкаУдаления + |ИЗ + | Справочник.ВариантыОтчетов КАК Отчеты + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПредопределенныеВариантыОтчетовВерсийРасширений КАК ОтчетыРасширений + | ПО ОтчетыРасширений.Вариант = Отчеты.ПредопределенныйВариант + | И ОтчетыРасширений.Отчет = Отчеты.Отчет + | И ОтчетыРасширений.КлючВарианта = Отчеты.КлючВарианта + |ГДЕ + | ТИПЗНАЧЕНИЯ(&Отчет) = ТИП(Справочник.ИдентификаторыОбъектовРасширений) + | И Отчеты.Отчет = &Отчет + | И Отчеты.КлючВарианта = &КлючВарианта + | И Отчеты.Автор = &Автор + | И Отчеты.Пользовательский + | И ОтчетыРасширений.ВерсияРасширений = &ВерсияРасширений + | + |УПОРЯДОЧИТЬ ПО + | Отчеты.ПометкаУдаления УБЫВ + |; + | + |ВЫБРАТЬ + | ИСТИНА В ( + | ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА + | ИЗ + | Справочник.ВариантыОтчетов КАК ОтчетыИдентичные + | ГДЕ + | ОтчетыИдентичные.Отчет = &Отчет + | И ОтчетыИдентичные.КлючВарианта = &КлючВарианта + | ) КАК КлючВариантаЗанят"); + + Запрос.УстановитьПараметр("Отчет", Отчет); + Запрос.УстановитьПараметр("КлючВарианта", КлючВарианта); + Запрос.УстановитьПараметр("Автор", Автор); + Запрос.УстановитьПараметр("ВерсияРасширений", ПараметрыСеанса.ВерсияРасширений); + + РезультатыЗапроса = Запрос.ВыполнитьПакет(); + + #КонецОбласти + + Для Каждого Результат Из РезультатыЗапроса Цикл + + Выборка = Результат.Выбрать(); + Выборка.Следующий(); + + ЗаполнитьЗначенияСвойств(ВариантОтчета, Выборка); + + КонецЦикла; + + Возврат ВариантОтчета; + +КонецФункции + +Функция ДоступноеНаименованиеВариантаОтчета(Отчет, Знач Наименование) + + Запрос = Новый Запрос( + "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | ВариантыОтчетов.Наименование + |ИЗ + | Справочник.ВариантыОтчетов КАК ВариантыОтчетов + |ГДЕ + | ВариантыОтчетов.Отчет = &Отчет + | И ВариантыОтчетов.Наименование ПОДОБНО &ШаблонНаименования"); + + Запрос.УстановитьПараметр("Отчет", Отчет); + Запрос.УстановитьПараметр("ШаблонНаименования", Наименование + "%"); + + Результат = Запрос.Выполнить(); + + Если Результат.Пустой() Тогда + Возврат Наименование; + КонецЕсли; + + НаименованияЗанятые = Результат.Выбрать(); + + Если Не НаименованияЗанятые.НайтиСледующий(Наименование, "Наименование") Тогда + Возврат Наименование; + КонецЕсли; + + НаименованияЗанятые.Сбросить(); + + ШаблонСчетчикаКопий = " (%1)"; + ШаблонНаименования = ШаблонНаименованияВариантаОтчета(НаименованияЗанятые, Наименование, ШаблонСчетчикаКопий); + + Если Не СтрЗаканчиваетсяНа(ШаблонНаименования, ШаблонСчетчикаКопий) Тогда + Возврат ШаблонНаименования; + КонецЕсли; + + МаксимальноеКоличествоКопий = НаименованияЗанятые.Количество(); + + Для НомерКопии = 1 По МаксимальноеКоличествоКопий Цикл + Наименование = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонНаименования, НомерКопии); + + Если Не НаименованияЗанятые.НайтиСледующий(Наименование, "Наименование") Тогда + Возврат Наименование; + КонецЕсли; + + НаименованияЗанятые.Сбросить(); + КонецЦикла; + + Возврат Наименование; + +КонецФункции + +Функция ШаблонНаименованияВариантаОтчета(НаименованияЗанятые, Знач Наименование, ШаблонСчетчикаКопий) + + ПризнакКопии = " - " + НСтр("ru = 'копия'"); + + Если СтрЗаканчиваетсяНа(Наименование, ПризнакКопии) Тогда + Возврат Наименование + ШаблонСчетчикаКопий; + КонецЕсли; + + ПозицияПризнакаКопии = СтрНайти(Наименование, ПризнакКопии); + + Если ПозицияПризнакаКопии > 0 Тогда + Возврат Сред(Наименование, 1, ПозицияПризнакаКопии - 1) + ШаблонСчетчикаКопий; + КонецЕсли; + + Наименование = Наименование + ПризнакКопии; + + Если Не НаименованияЗанятые.НайтиСледующий(Наименование, "Наименование") Тогда + Возврат Наименование; + КонецЕсли; + + НаименованияЗанятые.Сбросить(); + + Возврат Наименование + ШаблонСчетчикаКопий; + +КонецФункции + +Процедура УдалитьФайлыОписанияВариантаОтчета(ИмяКаталога, ИмяФайлаАрхива) + + ФайловаяСистема.УдалитьВременныйКаталог(ИмяКаталога); + ФайловаяСистема.УдалитьВременныйФайл(ИмяФайлаАрхива); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбменПользовательскимиНастройкамиВРамкахИнформационнойБазы + +Процедура ПоделитьсяПользовательскимиНастройками(ВыбранныеПользователи, ШаблонОписанияНастроек) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + ТекущийПользователь = Пользователи.АвторизованныйПользователь(); + СвойстваПользователей = СвойстваПользователейНастроек(ВыбранныеПользователи, ТекущийПользователь); + + Если СвойстваПользователей.Действительных.Количество() = 0 Тогда + + ШаблонОписанияНастроек.Вставить("Предупреждение", НСтр("ru = 'Выбранные пользователи недействительны'")); + Возврат; + + КонецЕсли; + + Если СвойстваПользователей.Недействительных.Количество() > 0 Тогда + + ШаблонПояснения = НСтр("ru = 'Некоторые из выбранных пользователей недействительны: %1'"); + + Пояснение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ШаблонПояснения, СтрСоединить(СвойстваПользователей.Недействительных, ", ")); + + ШаблонОписанияНастроек.Вставить("Пояснение", Пояснение); + + КонецЕсли; + + ПроверитьДоступностьВариантаОтчета(ШаблонОписанияНастроек.ВариантОтчета, ВыбранныеПользователи); + + НормализоватьШаблонОписанияНастроек(ШаблонОписанияНастроек, ТекущийПользователь); + + Для Каждого СвойстваПользователя Из СвойстваПользователей.Действительных Цикл + + ОписаниеНастроек = Новый ОписаниеНастроек; + ЗаполнитьЗначенияСвойств(ОписаниеНастроек, ШаблонОписанияНастроек); + ОписаниеНастроек.Пользователь = СвойстваПользователя.Имя; + + ХранилищеПользовательскихНастроекОтчетов.Сохранить( + ОписаниеНастроек.КлючОбъекта, + ОписаниеНастроек.КлючНастроек, + ШаблонОписанияНастроек.Настройки, + ОписаниеНастроек, + ОписаниеНастроек.Пользователь); + + ОбновитьСлужебнуюИнформациюПользовательскихНастроек(СвойстваПользователя.Ссылка, ШаблонОписанияНастроек); + + КонецЦикла; + + ОповеститьПользователейНастроекОтчета(СвойстваПользователей.Действительных, ШаблонОписанияНастроек); + +КонецПроцедуры + +Функция СвойстваПользователейНастроек(ВыбранныеПользователи, ТекущийПользователь) + + СвойстваПользователей = Новый Структура(); + СвойстваПользователей.Вставить("Действительных", Новый Массив); + СвойстваПользователей.Вставить("Недействительных", Новый Массив); + + #Область ЗапросПользователей + + ИспользоватьГруппыПользователей = ПолучитьФункциональнуюОпцию("ИспользоватьГруппыПользователей"); + + // АПК:96 -выкл результат должен содержать уникальные значения + + Запрос = Новый Запрос( + "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | Пользователи.Ссылка, + | Пользователи.Представление, + | Пользователи.ИдентификаторПользователяИБ + |ИЗ + | Справочник.Пользователи КАК Пользователи + |ГДЕ + | Пользователи.Ссылка В (&ВыбранныеПользователи) + | И Пользователи.Ссылка <> &ТекущийПользователь + | И НЕ Пользователи.ПометкаУдаления + | И НЕ Пользователи.Недействителен + | И НЕ Пользователи.Служебный + | + |ОБЪЕДИНИТЬ + | + |ВЫБРАТЬ + | Пользователи.Ссылка, + | Пользователи.Представление, + | Пользователи.ИдентификаторПользователяИБ + |ИЗ + | Справочник.ГруппыПользователей.Состав КАК СоставыГруппПользователей + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Пользователи КАК Пользователи + | ПО Пользователи.Ссылка = СоставыГруппПользователей.Пользователь + |ГДЕ + | &ИспользоватьГруппыПользователей + | И СоставыГруппПользователей.Ссылка В (&ВыбранныеПользователи) + | И Пользователи.Ссылка <> &ТекущийПользователь + | И НЕ Пользователи.ПометкаУдаления + | И НЕ Пользователи.Недействителен + | И НЕ Пользователи.Служебный"); + + // АПК:96 -вкл + + Запрос.УстановитьПараметр("ВыбранныеПользователи", ВыбранныеПользователи); + Запрос.УстановитьПараметр("ТекущийПользователь", ТекущийПользователь); + Запрос.УстановитьПараметр("ИспользоватьГруппыПользователей", ИспользоватьГруппыПользователей); + + Выборка = Запрос.Выполнить().Выбрать(); + + #КонецОбласти + + Пока Выборка.Следующий() Цикл + + ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору( + Выборка.ИдентификаторПользователяИБ); + + Если ПользовательИБ = Неопределено Тогда + + СвойстваПользователей.Недействительных.Добавить(Выборка.Представление); + Продолжить; + + КонецЕсли; + + СвойстваПользователя = Новый Структура(); + СвойстваПользователя.Вставить("Ссылка", Выборка.Ссылка); + СвойстваПользователя.Вставить("Имя", ПользовательИБ.Имя); + СвойстваПользователя.Вставить("ИдентификаторПользователяИБ", Выборка.ИдентификаторПользователяИБ); + + СвойстваПользователей.Действительных.Добавить(СвойстваПользователя); + + КонецЦикла; + + Возврат СвойстваПользователей; + +КонецФункции + +Процедура ПроверитьДоступностьВариантаОтчета(ВариантОтчета, ВыбранныеПользователи) + + ВыборкаПользователей = РегистрыСведений.НастройкиВариантовОтчетов.ПользователиВариантаОтчета( + ВариантОтчета, ВыбранныеПользователи); + + Пока ВыборкаПользователей.Следующий() Цикл + + НайденныйПользователь = ВыбранныеПользователи.Найти(ВыборкаПользователей.Ссылка); + Если НайденныйПользователь <> Неопределено Тогда + ВыбранныеПользователи.Удалить(НайденныйПользователь); + КонецЕсли; + + КонецЦикла; + + Если ВыбранныеПользователи.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + ПользователиВарианта = Новый СписокЗначений; + ПользователиВарианта.ЗагрузитьЗначения(ВыбранныеПользователи); + + РегистрыСведений.НастройкиВариантовОтчетов.ЗаписатьНастройкиДоступностиВариантаОтчета( + ВариантОтчета, Ложь, ПользователиВарианта); + +КонецПроцедуры + +Процедура НормализоватьШаблонОписанияНастроек(ШаблонОписанияНастроек, ТекущийПользователь) + + УстановитьПредставлениеПользовательскихНастроек(ШаблонОписанияНастроек, ТекущийПользователь); + + Если ЗначениеЗаполнено(ШаблонОписанияНастроек.КлючНастроек) Тогда + Возврат; + КонецЕсли; + + ШаблонОписанияНастроек.КлючНастроек = Строка(Новый УникальныйИдентификатор()); + + Если ШаблонОписанияНастроек.ВариантМодифицирован Тогда + Возврат; + КонецЕсли; + + ОбщегоНазначения.ХранилищеСистемныхНастроекСохранить( + ШаблонОписанияНастроек.КлючОбъекта + "/ТекущиеПользовательскиеНастройки", + "", + ШаблонОписанияНастроек.Настройки); + +КонецПроцедуры + +Процедура УстановитьПредставлениеПользовательскихНастроек(ШаблонОписанияНастроек, ТекущийПользователь) + + ПользовательскиеНастройки = ПользовательскиеНастройкиВариантаОтчета( + ШаблонОписанияНастроек.ВариантОтчета, ТекущийПользователь, ШаблонОписанияНастроек.КлючНастроек); + + Если ПользовательскиеНастройки <> Неопределено + И ПользовательскиеНастройки.Количество() > 0 Тогда + + ШаблонОписанияНастроек.Представление = ПользовательскиеНастройки[0].Наименование; + Возврат; + + КонецЕсли; + + ШаблонПредставления = НСтр("ru = 'Настройки %1'"); + ПредставлениеПользователя = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ТекущийПользователь, "Представление"); + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.СклонениеПредставленийОбъектов") Тогда + МодульСклонениеПредставленийОбъектов = ОбщегоНазначения.ОбщийМодуль("СклонениеПредставленийОбъектов"); + + ПредставлениеПользователя = МодульСклонениеПредставленийОбъектов.ПросклонятьПредставление( + ПредставлениеПользователя, 2, ТекущийПользователь); + КонецЕсли; + + ШаблонОписанияНастроек.Представление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ШаблонПредставления, ПредставлениеПользователя); + +КонецПроцедуры + +Процедура ОбновитьСлужебнуюИнформациюПользовательскихНастроек(Пользователь, ОписаниеНастроек) + + Элементы = ПользовательскиеНастройкиВариантаОтчета( + ОписаниеНастроек.ВариантОтчета, Пользователь, ОписаниеНастроек.КлючНастроек); + + Если Элементы = Неопределено + Или Элементы.Количество() = 0 Тогда + + Объект = Справочники.ПользовательскиеНастройкиОтчетов.СоздатьЭлемент(); + Объект.Наименование = ОписаниеНастроек.Представление; + Объект.КлючПользовательскойНастройки = ОписаниеНастроек.КлючНастроек; + Объект.Вариант = ОписаниеНастроек.ВариантОтчета; + Объект.Пользователь = Пользователь; + Объект.Записать(); // АПК:1327 + Возврат; + + КонецЕсли; + + Элемент = Элементы[0]; + + Если Не Элемент.ПометкаУдаления + И Элемент.Наименование = ОписаниеНастроек.Представление Тогда + + Возврат; + КонецЕсли; + + Объект = Элемент.Ссылка.ПолучитьОбъект(); + Объект.Наименование = ОписаниеНастроек.Представление; + + Если Элемент.ПометкаУдаления Тогда + Объект.УстановитьПометкуУдаления(Ложь); + Иначе + Объект.Записать(); // АПК:1327 + КонецЕсли; + +КонецПроцедуры + +Процедура ОповеститьПользователейНастроекОтчета(СвойстваПользователей, ОписаниеНастроек) + + #Область Проверка + + Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Обсуждения") Тогда + Возврат; + КонецЕсли; + + МодульОбсужденияСлужебный = ОбщегоНазначения.ОбщийМодуль("ОбсужденияСлужебный"); + + Если Не МодульОбсужденияСлужебный.Подключены() Тогда + Возврат; + КонецЕсли; + + #КонецОбласти + + #Область ОпределениеПолучателейСообщения + + Получатели = Новый Массив; + + Для Каждого СвойстваПользователя Из СвойстваПользователей Цикл + + Попытка + ИдентификаторПользователя = СистемаВзаимодействия.ПолучитьИдентификаторПользователя( + СвойстваПользователя.ИдентификаторПользователяИБ); + Исключение + Продолжить; + КонецПопытки; + + Получатели.Добавить(ИдентификаторПользователя); + + КонецЦикла; + + Если Получатели.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + #КонецОбласти + + #Область ГенерацияОповещенияНовыхПользователейНастроек + + ПредставлениеВариантаОтчета = Строка(ОписаниеНастроек.ВариантОтчета); + + ЗаголовокОбсуждения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Доступ к настройкам отчета ""%1""'"), ПредставлениеВариантаОтчета); + + Обсуждение = МодульОбсужденияСлужебный.ОбсуждениеКонтекстное( + ОписаниеНастроек.ВариантОтчета, ПредставлениеВариантаОтчета); + + Если СистемаВзаимодействия.ПолучитьРежимНаблюдения(Обсуждение.Идентификатор) Тогда + СистемаВзаимодействия.УстановитьРежимНаблюдения(Обсуждение.Идентификатор, Ложь); + КонецЕсли; + + Сообщение = СистемаВзаимодействия.СоздатьСообщение(Обсуждение.Идентификатор); + + Для Каждого Получатель Из Получатели Цикл + Сообщение.Получатели.Добавить(Получатель); + КонецЦикла; + + Сообщение.Автор = СистемаВзаимодействия.ИдентификаторТекущегоПользователя(); + + Если ЗначениеЗаполнено(ОписаниеНастроек.Представление) Тогда + + Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Предоставлены настройки отчета ""%1""'"), ОписаниеНастроек.Представление); + Иначе + Текст = НСтр("ru = 'Предоставлены настройки отчета'"); + КонецЕсли; + + ИмяДействия = ВариантыОтчетовКлиентСервер.ИмяДействияПрименитьПереданныеНастройки(); + + Сообщение.Текст = Текст; + Сообщение.Действия.Добавить(ИмяДействия, НСтр("ru = 'Применить настройки?'")); + Сообщение.Данные = ОписаниеНастроек; + + Попытка + Сообщение.Записать(); + Исключение + + КодОсновногоЯзыка = ОбщегоНазначения.КодОсновногоЯзыка(); + + ЗаписьЖурналаРегистрации( + НСтр("ru = 'Варианты отчетов.Оповещение о предоставлении доступа к настройкам отчета'", КодОсновногоЯзыка), + УровеньЖурналаРегистрации.Ошибка,, + ПредставлениеВариантаОтчета, + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + + КонецПопытки; + + #КонецОбласти + +КонецПроцедуры + +#КонецОбласти + #КонецОбласти diff --git a/SSL/src/CommonModules/ВариантыОтчетовВызовСервера/Module.bsl b/SSL/src/CommonModules/ВариантыОтчетовВызовСервера/Module.bsl index 1693dfdb4..401f4780f 100644 --- a/SSL/src/CommonModules/ВариантыОтчетовВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/ВариантыОтчетовВызовСервера/Module.bsl @@ -15,7 +15,9 @@ // КлючВарианта - Строка - Имя варианта дополнительного отчета. // Процедура ПриПодключенииОтчета(ПараметрыОткрытия) Экспорт + ВариантыОтчетов.ПриПодключенииОтчета(ПараметрыОткрытия); + КонецПроцедуры // Получает тип субконто счета по его номеру. @@ -29,31 +31,51 @@ // Неопределено - Если не удалось получить тип субконто (нет такого субконто или нет прав). // Функция ТипСубконто(Счет, НомерСубконто) Экспорт + Если Счет = Неопределено Тогда Возврат Неопределено; КонецЕсли; ОбъектМетаданных = Счет.Метаданные(); + Если Не Метаданные.ПланыСчетов.Содержит(ОбъектМетаданных) Тогда Возврат Неопределено; КонецЕсли; - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("Ссылка", Счет); - Запрос.УстановитьПараметр("НомерСтроки", НомерСубконто); - Запрос.Текст = " - |ВЫБРАТЬ РАЗРЕШЕННЫЕ + + Запрос = Новый Запрос( + "ВЫБРАТЬ РАЗРЕШЕННЫЕ | ПланСчетовВидыСубконто.ВидСубконто.ТипЗначения КАК Тип |ИЗ | &ПолноеИмяТаблицы КАК ПланСчетовВидыСубконто |ГДЕ | ПланСчетовВидыСубконто.Ссылка = &Ссылка - | И ПланСчетовВидыСубконто.НомерСтроки = &НомерСтроки"; + | И ПланСчетовВидыСубконто.НомерСтроки = &НомерСтроки"); + Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ПолноеИмяТаблицы", ОбъектМетаданных.ПолноеИмя() + ".ВидыСубконто"); + + Запрос.УстановитьПараметр("Ссылка", Счет); + Запрос.УстановитьПараметр("НомерСтроки", НомерСубконто); + Выборка = Запрос.Выполнить().Выбрать(); + Если Не Выборка.Следующий() Тогда Возврат Неопределено; КонецЕсли; + Возврат Выборка.Тип; + КонецФункции +Функция СвойстваВариантОтчетаИзФайла(ОписаниеФайла, ВариантОтчетаОснование) Экспорт + + Возврат ВариантыОтчетов.СвойстваВариантОтчетаИзФайла(ОписаниеФайла, ВариантОтчетаОснование); + +КонецФункции + +Процедура ПоделитьсяПользовательскимиНастройками(ВыбранныеПользователи, ОписаниеНастроек) Экспорт + + ВариантыОтчетов.ПоделитьсяПользовательскимиНастройками(ВыбранныеПользователи, ОписаниеНастроек); + +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/CommonModules/ВариантыОтчетовКлиент/Module.bsl b/SSL/src/CommonModules/ВариантыОтчетовКлиент/Module.bsl index dda8dcca6..46019c474 100644 --- a/SSL/src/CommonModules/ВариантыОтчетовКлиент/Module.bsl +++ b/SSL/src/CommonModules/ВариантыОтчетовКлиент/Module.bsl @@ -30,7 +30,7 @@ ОткрытьФорму("Справочник.ВариантыОтчетов.ФормаОбъекта", ПараметрыОткрытия, Неопределено, Истина); Возврат; Иначе - ПараметрыОткрытия = Новый Структура("Ссылка, Отчет, ТипОтчета, ИмяОтчета, КлючВарианта, КлючЗамеров"); + ПараметрыОткрытия = Новый Структура("Ссылка, Отчет, ТипОтчета, ПолноеИмяОтчета, ИмяОтчета, КлючВарианта, КлючЗамеров"); Если ТипЗнч(ФормаВладелец) = Тип("ФормаКлиентскогоПриложения") Тогда ЗаполнитьЗначенияСвойств(ПараметрыОткрытия, ФормаВладелец); КонецЕсли; @@ -76,7 +76,11 @@ ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не определено имя отчета в %1'"), "ВариантыОтчетовКлиент.ОткрытьФормуОтчета"); КонецЕсли; - ПолноеИмяОтчета = Вид + "." + ПараметрыОткрытия.ИмяОтчета; + ПолноеИмяОтчета = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыОткрытия, "ПолноеИмяОтчета"); + + Если Не ЗначениеЗаполнено(ПолноеИмяОтчета) Тогда + ПолноеИмяОтчета = Вид + "." + ПараметрыОткрытия.ИмяОтчета; + КонецЕсли; КлючУникальности = ОтчетыКлиентСервер.КлючУникальности(ПолноеИмяОтчета, ПараметрыОткрытия.КлючВарианта); ПараметрыОткрытия.Вставить("КлючПараметровПечати", КлючУникальности); @@ -144,6 +148,18 @@ #Область СлужебныйПрограммныйИнтерфейс +// См. ОбщегоНазначенияКлиентПереопределяемый.ПриНачалеРаботыСистемы. +Процедура ПриНачалеРаботыСистемы(Параметры) Экспорт + + Если Не СистемаВзаимодействия.ИспользованиеДоступно() Тогда + Возврат; + КонецЕсли; + + Обработчик = Новый ОписаниеОповещения("ОбработатьДействияСообщения", ВариантыОтчетовКлиент); + СистемаВзаимодействия.ПодключитьОбработчикДействияСообщения(Обработчик); + +КонецПроцедуры + // Открывает карточку варианта отчета с настройками размещения в программе. // // Параметры: @@ -178,6 +194,14 @@ #Область СлужебныеПроцедурыИФункции +Процедура ОбработатьДействияСообщения(Сообщение, Действие, ДополнительныеПараметры) Экспорт + + Если Действие = ВариантыОтчетовКлиентСервер.ИмяДействияПрименитьПереданныеНастройки() Тогда + Оповестить(Действие, Сообщение.Данные); + КонецЕсли; + +КонецПроцедуры + // Процедура обслуживает событие реквизита ДеревоПодсистем в формах редактирования. Процедура ДеревоПодсистемИспользованиеПриИзменении(Форма, Элемент) Экспорт СтрокаДерева = Форма.Элементы.ДеревоПодсистем.ТекущиеДанные; @@ -218,60 +242,6 @@ СтрокаДерева.Модифицированность = Истина; КонецПроцедуры -// Аналог ОбщегоНазначенияКлиент.ПоказатьФормуРедактированияМногострочногоТекста, работающий за 1 вызов. -// В отличие от ОбщегоНазначенияКлиент.ПоказатьФормуРедактированияКомментария позволяет устанавливать свой заголовок -// и работает с реквизитами таблиц. -// -Процедура РедактироватьМногострочныйТекст(ФормаИлиОбработчик, ТекстРедактирования, ВладелецРеквизита, ИмяРеквизита, Знач Заголовок = "") Экспорт - - Если ПустаяСтрока(Заголовок) Тогда - Заголовок = НСтр("ru = 'Комментарий'"); - КонецЕсли; - - ПараметрыИсточника = Новый Структура; - ПараметрыИсточника.Вставить("ФормаИлиОбработчик", ФормаИлиОбработчик); - ПараметрыИсточника.Вставить("ВладелецРеквизита", ВладелецРеквизита); - ПараметрыИсточника.Вставить("ИмяРеквизита", ИмяРеквизита); - Обработчик = Новый ОписаниеОповещения("РедактироватьМногострочныйТекстЗавершение", ЭтотОбъект, ПараметрыИсточника); - - ПоказатьВводСтроки(Обработчик, ТекстРедактирования, Заголовок, , Истина); - -КонецПроцедуры - -// Обработчик результата работы процедуры РедактироватьМногострочныйТекст. -Процедура РедактироватьМногострочныйТекстЗавершение(Текст, ПараметрыИсточника) Экспорт - - Если ТипЗнч(ПараметрыИсточника.ФормаИлиОбработчик) = Тип("ФормаКлиентскогоПриложения") Тогда - Форма = ПараметрыИсточника.ФормаИлиОбработчик; - Обработчик = Неопределено; - Иначе - Форма = Неопределено; - Обработчик = ПараметрыИсточника.ФормаИлиОбработчик; - КонецЕсли; - - Если Текст <> Неопределено Тогда - - Если ТипЗнч(ПараметрыИсточника.ВладелецРеквизита) = Тип("ДанныеФормыЭлементДерева") - Или ТипЗнч(ПараметрыИсточника.ВладелецРеквизита) = Тип("ДанныеФормыЭлементКоллекции") Тогда - ЗаполнитьЗначенияСвойств(ПараметрыИсточника.ВладелецРеквизита, Новый Структура(ПараметрыИсточника.ИмяРеквизита, Текст)); - Иначе - ПараметрыИсточника.ВладелецРеквизита[ПараметрыИсточника.ИмяРеквизита] = Текст; - КонецЕсли; - - Если Форма <> Неопределено Тогда - Если Не Форма.Модифицированность Тогда - Форма.Модифицированность = Истина; - КонецЕсли; - КонецЕсли; - - КонецЕсли; - - Если Обработчик <> Неопределено Тогда - ВыполнитьОбработкуОповещения(Обработчик, Текст); - КонецЕсли; - -КонецПроцедуры - Функция ПараметрыКлиента() Возврат ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры( СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиентаПриЗапуске(), @@ -298,4 +268,373 @@ Возврат Неопределено; КонецФункции +//////////////////////////////////////////////////////////////////////////////// +// Обработчики списка пользователей варианта отчета + +#Область ПараметрыПодбораПользователейВариантаОтчета + +Процедура ПодобратьПользователейВариантаОтчета(Форма, ПодборГруппВнешнихПользователей = Ложь) Экспорт + + ПараметрыПодбора = ПараметрыПодбораПользователейВариантаОтчета(Форма, ПодборГруппВнешнихПользователей); + + Если ПодборГруппВнешнихПользователей Тогда + + ИмяФормыПодбора = "Справочник.ГруппыВнешнихПользователей.ФормаВыбора"; + + Иначе + + ИмяФормыПодбора = "Справочник.Пользователи.ФормаВыбора"; + + КонецЕсли; + + ОткрытьФорму(ИмяФормыПодбора, ПараметрыПодбора, Форма.Элементы.ПользователиВарианта); + +КонецПроцедуры + +Функция ПараметрыПодбораПользователейВариантаОтчета(Форма, ПодборГруппВнешнихПользователей = Ложь) + + ТекущиеДанные = Форма.Элементы.ПользователиВарианта.ТекущиеДанные; + ВыбранныеПользователи = ВыбранныеПользователиВарианта(Форма.ПользователиВарианта, ПодборГруппВнешнихПользователей); + + ПараметрыПодбора = Новый Структура; + ПараметрыПодбора.Вставить("РежимВыбора", Истина); + ПараметрыПодбора.Вставить("ТекущаяСтрока", ?(ТекущиеДанные = Неопределено, Неопределено, ТекущиеДанные.Значение)); + ПараметрыПодбора.Вставить("ЗакрыватьПриВыборе", Ложь); + ПараметрыПодбора.Вставить("МножественныйВыбор", Истина); + ПараметрыПодбора.Вставить("РасширенныйПодбор", Истина); + ПараметрыПодбора.Вставить("ЗаголовокФормыПодбора", НСтр("ru = 'Подбор пользователей варианта отчета'")); + ПараметрыПодбора.Вставить("ВыбранныеПользователи", ВыбранныеПользователи); + + Возврат ПараметрыПодбора; + +КонецФункции + +Функция ВыбранныеПользователиВарианта(ПользователиВарианта, ПодборГруппВнешнихПользователей) + + ТипыВыбранныхПользователей = Новый ОписаниеТипов( + "СправочникСсылка.ГруппыПользователей, СправочникСсылка.Пользователи"); + + Если ПодборГруппВнешнихПользователей Тогда + ТипыВыбранныхПользователей = Новый ОписаниеТипов("СправочникСсылка.ГруппыВнешнихПользователей"); + КонецЕсли; + + ВыбранныеПользователи = Новый Массив; + + Для Каждого ЭлементСписка Из ПользователиВарианта Цикл + + Если ЭлементСписка.Пометка + И ТипыВыбранныхПользователей.СодержитТип(ТипЗнч(ЭлементСписка.Значение)) Тогда + + ВыбранныеПользователи.Добавить(ЭлементСписка.Значение); + + КонецЕсли; + + КонецЦикла; + + Если ВыбранныеПользователи.Количество() = 1 + И ВыбранныеПользователи[0] = Неопределено Тогда + + Если ПодборГруппВнешнихПользователей Тогда + ВыбранныеПользователи[0] = ПредопределенноеЗначение("Справочник.ГруппыВнешнихПользователей.ВсеВнешниеПользователи"); + Иначе + ВыбранныеПользователи[0] = ПредопределенноеЗначение("Справочник.ГруппыПользователей.ВсеПользователи"); + КонецЕсли; + + КонецЕсли; + + Возврат ВыбранныеПользователи; + +КонецФункции + +#КонецОбласти + +#Область ОбработкаВыбораПользователейВариантаОтчета + +Процедура ПользователиВариантаОтчетаОбработкаВыбора(Форма, ВыбранныеЗначения, СтандартнаяОбработка) Экспорт + + Если ТипЗнч(ВыбранныеЗначения) <> Тип("Массив") + Или ВыбранныеЗначения.Количество() = 0 Тогда + + Возврат; + + КонецЕсли; + + СтандартнаяОбработка = Ложь; + + ПользователиВарианта = Форма.ПользователиВарианта; + + ОбщаяГруппаПользователей = ПредопределенноеЗначение("Справочник.ГруппыПользователей.ВсеПользователи"); + ОбщаяГруппаВнешниеПользователи = ПредопределенноеЗначение("Справочник.ГруппыВнешнихПользователей.ВсеВнешниеПользователи"); + + Если ТипЗнч(ВыбранныеЗначения[0]) = Тип("СправочникСсылка.ГруппыВнешнихПользователей") Тогда + + ПодготовитьСписокКДобавлениюВнешнихПользователейВариантаОтчета( + ПользователиВарианта, ВыбранныеЗначения, ОбщаяГруппаВнешниеПользователи); + + Иначе + + ПодготовитьСписокКДобавлениюПользователейВариантаОтчета( + ПользователиВарианта, ВыбранныеЗначения, ОбщаяГруппаПользователей); + + КонецЕсли; + + Для Каждого Значение Из ВыбранныеЗначения Цикл + + Если ПользователиВарианта.НайтиПоЗначению(Значение) = Неопределено Тогда + ПользователиВарианта.Добавить(Значение,, Истина, КартинкаПользователяВариантаОтчета(Значение)); + КонецЕсли; + + КонецЦикла; + + Если ПользователиВарианта.НайтиПоЗначению(ОбщаяГруппаПользователей) <> Неопределено + И ПользователиВарианта.НайтиПоЗначению(ОбщаяГруппаВнешниеПользователи) <> Неопределено Тогда + + ПользователиВарианта.Очистить(); + ПользователиВарианта.Добавить(,, Истина, КартинкаПользователяВариантаОтчета()); + + КонецЕсли; + + ОформитьПользователейВариантаОтчета(Форма); + +КонецПроцедуры + +Процедура ПодготовитьСписокКДобавлениюПользователейВариантаОтчета(ПользователиВарианта, ВыбранныеЗначения, ОбщаяГруппаПользователей) + + Если ПользователиВарианта.НайтиПоЗначению(Неопределено) <> Неопределено Тогда + + ПользователиВарианта.Очистить(); + + Иначе + + ТипыПользователей = Новый ОписаниеТипов("СправочникСсылка.ГруппыПользователей, СправочникСсылка.Пользователи"); + УдалитьПользователейВариантаОтчетаУказанныхТипов(ПользователиВарианта, ТипыПользователей); + + КонецЕсли; + + Если ВыбранныеЗначения.Найти(ОбщаяГруппаПользователей) = Неопределено Тогда + Возврат; + КонецЕсли; + + ВыбранныеЗначения.Очистить(); + ВыбранныеЗначения.Добавить(ОбщаяГруппаПользователей); + +КонецПроцедуры + +Процедура ПодготовитьСписокКДобавлениюВнешнихПользователейВариантаОтчета(ПользователиВарианта, ВыбранныеЗначения, ОбщаяГруппаПользователей) + + Если ПользователиВарианта.НайтиПоЗначению(ОбщаяГруппаПользователей) <> Неопределено + Или ПользователиВарианта.НайтиПоЗначению(Неопределено) <> Неопределено Тогда + + ВыбранныеЗначения.Очистить(); + Возврат; + + КонецЕсли; + + Если ВыбранныеЗначения.Найти(ОбщаяГруппаПользователей) = Неопределено Тогда + Возврат; + КонецЕсли; + + ТипыПользователей = Новый ОписаниеТипов("СправочникСсылка.ГруппыВнешнихПользователей"); + УдалитьПользователейВариантаОтчетаУказанныхТипов(ПользователиВарианта, ТипыПользователей); + + ВыбранныеЗначения.Очистить(); + ВыбранныеЗначения.Добавить(ОбщаяГруппаПользователей); + +КонецПроцедуры + +Процедура УдалитьПользователейВариантаОтчетаУказанныхТипов(ПользователиВарианта, ТипыПользователей) + + ИндексЭлемента = ПользователиВарианта.Количество() - 1; + + Пока ИндексЭлемента >= 0 Цикл + + ЭлементСписка = ПользователиВарианта[ИндексЭлемента]; + + Если ТипыПользователей.СодержитТип(ТипЗнч(ЭлементСписка.Значение)) Тогда + + ПользователиВарианта.Удалить(ЭлементСписка); + + КонецЕсли; + + ИндексЭлемента = ИндексЭлемента - 1; + + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти + +#Область ПользователиВариантаОтчетаПрочее + +Функция КартинкаПользователяВариантаОтчета(Пользователь = Неопределено) + + Если ТипЗнч(Пользователь) = Тип("СправочникСсылка.Пользователи") Тогда + + Возврат БиблиотекаКартинок.СостояниеПользователя02; + + ИначеЕсли ТипЗнч(Пользователь) = Тип("СправочникСсылка.ГруппыВнешнихПользователей") Тогда + + Возврат БиблиотекаКартинок.СостояниеПользователя10; + + КонецЕсли; + + Возврат БиблиотекаКартинок.СостояниеПользователя04; + +КонецФункции + +Процедура ОформитьПользователейВариантаОтчета(Форма, СбрасыватьПризнакИспользования = Истина) Экспорт + + Элементы = Форма.Элементы; + Объект = Форма.Объект; + + ПараметрыКлиента = СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиента(); + ЦветНеактивныхЗначений = ПараметрыКлиента.ЭлементыСтиля.ТекстЗапрещеннойЯчейкиЦвет; + + Если Не СбрасыватьПризнакИспользования Тогда + + Элементы.ПользователиВарианта.ЦветТекста = ?(Объект.ТолькоДляАвтора, ЦветНеактивныхЗначений, Новый Цвет); + Возврат; + + КонецЕсли; + + КоличествоПомеченных = 0; + + Для Каждого Строка Из Форма.ПользователиВарианта Цикл + + КоличествоПомеченных = КоличествоПомеченных + Булево(Строка.Пометка); + + КонецЦикла; + + Объект.ТолькоДляАвтора = (КоличествоПомеченных = 0); + Форма.Доступен = ?(Объект.ТолькоДляАвтора, "ТолькоДляАвтора", "УказаннымПользователям"); + + Элементы.ПользователиВарианта.ЦветТекста = ?(Форма.Объект.ТолькоДляАвтора, ЦветНеактивныхЗначений, Новый Цвет); + +КонецПроцедуры + +#КонецОбласти + +//////////////////////////////////////////////////////////////////////////////// +// Обмен настройками вариантов отчетов + +#Область ОбновлениеВариантаОтчетаИзФайла + +Процедура ОбновитьВариантОтчетаИзФайла(ОписаниеФайла, СвойстваВариантаОтчетаОснования) Экспорт + + Если ОписаниеФайла = Неопределено Тогда + Возврат; + КонецЕсли; + + Если СвойстваВариантаОтчетаОснования = Неопределено Тогда + СвойстваВариантаОтчетаОснования = СвойстваВариантаОтчетаОснования(); + КонецЕсли; + + СвойстваВариантОтчета = ВариантыОтчетовВызовСервера.СвойстваВариантОтчетаИзФайла( + ОписаниеФайла, СвойстваВариантаОтчетаОснования.Ссылка); + + Если СвойстваВариантаОтчетаОснования.ИмяОтчета = СвойстваВариантОтчета.ИмяОтчета Тогда + + ПараметрыОбновленияФормы = Новый Структура("КлючВарианта"); + ЗаполнитьЗначенияСвойств(ПараметрыОбновленияФормы, СвойстваВариантОтчета); + + ОбновитьОткрытыеФормы(ПараметрыОбновленияФормы); + ПоказатьОповещениеПользователя(НСтр("ru = 'Вариант отчета обновлен из файла'")); + + ИначеЕсли СвойстваВариантаОтчетаОснования.ПредставлениеВарианта = СвойстваВариантОтчета.ПредставлениеВарианта Тогда + + ОткрытьФормуОтчета(Неопределено, СвойстваВариантОтчета.Ссылка); + ПоказатьОповещениеПользователя(НСтр("ru = 'Вариант отчета найден и обновлен из файла'")); + + Иначе + + Обработчик = Новый ОписаниеОповещения( + "ОткрытьФормуВыбранногоВариантаОтчета", ВариантыОтчетовКлиент, СвойстваВариантОтчета.Ссылка); + + ШаблонТекстаВопроса = НСтр("ru = 'Выбраны настройки варианта отчета ""%1"", + |которые не совпадают с ""%2"". + |Замена настроек выбранного варианта отчета невозможна. + | + |Создать новый вариант отчета (или обновить существующий при наличии)?'"); + + ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ШаблонТекстаВопроса, + СвойстваВариантОтчета.ПредставлениеВарианта, + СвойстваВариантаОтчетаОснования.ПредставлениеВарианта); + + ПоказатьВопрос(Обработчик, ТекстВопроса, РежимДиалогаВопрос.ДаНет,, КодВозвратаДиалога.Да); + + КонецЕсли; + +КонецПроцедуры + +Функция СвойстваВариантаОтчетаОснования() Экспорт + + Возврат Новый Структура("Ссылка, ИмяОтчета, ПредставлениеВарианта"); + +КонецФункции + +Процедура ОткрытьФормуВыбранногоВариантаОтчета(Ответ, ВариантОтчета) Экспорт + + Если Ответ = КодВозвратаДиалога.Да Тогда + ОткрытьФормуОтчета(Неопределено, ВариантОтчета); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбменПользовательскимиНастройками + +Процедура ПоделитьсяПользовательскимиНастройками(ОписаниеНастроек) Экспорт + + Если ОписаниеНастроек.Настройки.Элементы.Количество() = 0 Тогда + + ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Настройки (пользовательские) не установлены.'")); + Возврат; + + КонецЕсли; + + ПараметрыПодбора = Новый Структура; + ПараметрыПодбора.Вставить("РежимВыбора", Истина); + ПараметрыПодбора.Вставить("ЗакрыватьПриВыборе", Ложь); + ПараметрыПодбора.Вставить("МножественныйВыбор", Истина); + ПараметрыПодбора.Вставить("РасширенныйПодбор", Истина); + ПараметрыПодбора.Вставить("СкрытьПользователейБезПользователяИБ", Истина); + ПараметрыПодбора.Вставить("ВыбранныеПользователи", Новый Массив); + ПараметрыПодбора.Вставить("ЗаголовокФормыПодбора", НСтр("ru = 'Поделиться настройками отчета с пользователями'")); + ПараметрыПодбора.Вставить("ЗаголовокКнопкиЗавершенияПодбора", НСтр("ru = 'Поделиться'")); + + Обработчик = Новый ОписаниеОповещения( + "ПоделитьсяПользовательскимиНастройкамиПослеВыбораПользователей", ВариантыОтчетовКлиент, ОписаниеНастроек); + + ОткрытьФорму("Справочник.Пользователи.ФормаВыбора", ПараметрыПодбора,,,,, Обработчик); + +КонецПроцедуры + +Процедура ПоделитьсяПользовательскимиНастройкамиПослеВыбораПользователей(ВыбранныеПользователи, ОписаниеНастроек) Экспорт + + Если ВыбранныеПользователи = Неопределено + Или ВыбранныеПользователи.Количество() = 0 Тогда + + Возврат; + КонецЕсли; + + ВариантыОтчетовВызовСервера.ПоделитьсяПользовательскимиНастройками(ВыбранныеПользователи, ОписаниеНастроек); + + Предупреждение = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ОписаниеНастроек, "Предупреждение"); + + Если ЗначениеЗаполнено(Предупреждение) Тогда + + ПоказатьПредупреждение(, Предупреждение); + Возврат; + + КонецЕсли; + + Пояснение = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ОписаниеНастроек, "Пояснение", ""); + ПоказатьОповещениеПользователя(НСтр("ru = 'Настройки переданы'"),, Пояснение); + +КонецПроцедуры + +#КонецОбласти + #КонецОбласти diff --git a/SSL/src/CommonModules/ВариантыОтчетовКлиентСервер/Module.bsl b/SSL/src/CommonModules/ВариантыОтчетовКлиентСервер/Module.bsl index 3627b4968..d20e506ef 100644 --- a/SSL/src/CommonModules/ВариантыОтчетовКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ВариантыОтчетовКлиентСервер/Module.bsl @@ -116,4 +116,20 @@ КонецЕсли; КонецФункции +Функция СвойстваСохраненияВариантаОтчета() Экспорт + Возврат "ВариантОтчета, ИмяОтчета, НастройкиВариантаОтчета, + |КлючТекущегоВарианта, ПредставлениеТекущегоВарианта, + |КлючТекущихПользовательскихНастроек, ПредставлениеТекущихПользовательскихНастроек"; +КонецФункции + +#Область ОбменПользовательскимиНастройками + +Функция ИмяДействияПрименитьПереданныеНастройки() Экспорт + + Возврат "ПрименитьПереданныеНастройки"; + +КонецФункции + +#КонецОбласти + #КонецОбласти diff --git a/SSL/src/CommonModules/ВариантыОтчетовПереопределяемый/Module.bsl b/SSL/src/CommonModules/ВариантыОтчетовПереопределяемый/Module.bsl index 305279615..dfd14635a 100644 --- a/SSL/src/CommonModules/ВариантыОтчетовПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ВариантыОтчетовПереопределяемый/Module.bsl @@ -50,7 +50,7 @@ //////////////////////////////////////////////////////////////////////////////// // Настройки размещения отчетов -// Определяет разделы глобального командного интерфейса, в которых предусмотрены панели отчетов. +// Определяет разделы командного интерфейса, в которых предусмотрены панели отчетов. // В Разделы необходимо добавить метаданные тех подсистем первого уровня, // в которых размещены команды вызова панелей отчетов. // @@ -70,26 +70,36 @@ КонецПроцедуры -// Задает настройки размещения вариантов отчетов в панели отчетов. +// Задает расширенные настройки отчетов конфигурации, такие как: +// - описание отчета; +// - поля поиска: наименования полей, параметров и отборов (для отчетов не на базе СКД); +// - размещение в разделах командного интерфейса +// (начальная настройка размещения отчетов по подсистемам автоматически определяется из метаданных, +// ее дублирование не требуется); +// - признак Включен (для контекстных отчетов); +// - режима вывода в панелях отчетов (с группировкой по отчету или без); +// - и другие. +// +// В процедуре задаются только настройки отчетов (и вариантов отчетов) конфигурации. +// Для настройки отчетов из расширений конфигурации следует включать их в подсистему ПодключаемыеОтчетыИОбработки. +// +// Для задания настроек следует использовать следующие вспомогательные процедуры и функции: +// ВариантыОтчетов.ОписаниеОтчета, +// ВариантыОтчетов.ОписаниеВарианта, +// ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов, +// ВариантыОтчетов.НастроитьОтчетВМодулеМенеджера. +// // Изменяя настройки отчета, можно изменить настройки всех его вариантов. // Однако, если явно получить настройки варианта отчета, то они станут самостоятельными, // т.е. более не будут наследовать изменения настроек от отчета. // -// Начальная настройка размещения отчетов по подсистемам зачитывается из метаданных, -// ее дублирование в коде не требуется. -// // Функциональные опции предопределенного варианта отчета объединяются с функциональными опциями этого отчета по правилам: // (ФО1_Отчета ИЛИ ФО2_Отчета) И (ФО3_Варианта ИЛИ ФО4_Варианта). -// Для пользовательских вариантов отчета действуют только функциональные опции отчета +// При этом для пользовательских вариантов отчета действуют только функциональные опции отчета // - они отключаются только с отключением всего отчета. // // Параметры: // Настройки - Коллекция - настройки отчетов и вариантов отчетов конфигурации. -// Для их изменения предназначены следующие вспомогательные процедуры и функции: -// ВариантыОтчетов.ОписаниеОтчета, -// ВариантыОтчетов.ОписаниеВарианта, -// ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов, -// ВариантыОтчетов.НастроитьОтчетВМодулеМенеджера. // // Пример: // @@ -219,7 +229,7 @@ // Перед записью и проведением у пользователя запрашивается подтверждение. // Необязательный. Значение по умолчанию: "Записывать". // * ТребуетсяРаботаСФайлами - Булево - если Истина, то в веб-клиенте предлагается -// установить расширение работы с файлами. +// установить расширение для работы с 1С:Предприятием. // Необязательный. Значение по умолчанию: Ложь. // // Настройки обработчика: diff --git a/SSL/src/CommonModules/ВариантыОтчетовПовтИсп/Module.bsl b/SSL/src/CommonModules/ВариантыОтчетовПовтИсп/Module.bsl index 3b5c41bb9..8cc374d1f 100644 --- a/SSL/src/CommonModules/ВариантыОтчетовПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ВариантыОтчетовПовтИсп/Module.bsl @@ -17,6 +17,7 @@ // Тип элементов см. в реквизите Справочники.ВариантыОтчетов.Реквизиты.Отчет. // Функция ДоступныеОтчеты(ПроверятьФункциональныеОпции = Истина) Экспорт + Результат = Новый Массив; ПолныеИменаОтчетов = Новый Массив; @@ -39,6 +40,7 @@ КонецЦикла; Возврат Новый ФиксированныйМассив(Результат); + КонецФункции // Формирует список вариантов отчетов конфигурации, недоступных текущему пользователю по функциональным опциям. @@ -51,7 +53,9 @@ // СправочникСсылка.ПредопределенныеВариантыОтчетовРасширений. // Функция ОтключенныеВариантыПрограммы() Экспорт + Возврат Новый ФиксированныйМассив(ВариантыОтчетов.ОтключенныеВариантыОтчетов()); + КонецФункции #КонецОбласти @@ -60,8 +64,8 @@ // Формирует дерево подсистем, доступных текущему пользователю. // -// Возвращаемое значение: -// Результат - ДеревоЗначений - +// Возвращаемое значение: +// ДеревоЗначений -Результат - ДеревоЗначений - // * РазделСсылка - СправочникСсылка.ИдентификаторыОбъектовМетаданных - Ссылка раздела. // * Ссылка - СправочникСсылка.ИдентификаторыОбъектовМетаданных - Ссылка подсистемы. // * Имя - Строка - Имя подсистемы. @@ -71,16 +75,16 @@ // Функция ПодсистемыТекущегоПользователя() Экспорт - ОписаниеТиповИдентификатора = Новый ОписаниеТипов; - ОписаниеТиповИдентификатора.Типы().Добавить("СправочникСсылка.ИдентификаторыОбъектовМетаданных"); - ОписаниеТиповИдентификатора.Типы().Добавить("СправочникСсылка.ИдентификаторыОбъектовРасширений"); + ТипыИдентификатора = Новый Массив; + ТипыИдентификатора.Добавить(Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных")); + ТипыИдентификатора.Добавить(Тип("СправочникСсылка.ИдентификаторыОбъектовРасширений")); Результат = Новый ДеревоЗначений; - Результат.Колонки.Добавить("Ссылка", ОписаниеТиповИдентификатора); + Результат.Колонки.Добавить("Ссылка", Новый ОписаниеТипов(ТипыИдентификатора)); Результат.Колонки.Добавить("Имя", ВариантыОтчетов.ОписаниеТиповСтрока(150)); Результат.Колонки.Добавить("ПолноеИмя", ВариантыОтчетов.ОписаниеТиповСтрока(510)); Результат.Колонки.Добавить("Представление", ВариантыОтчетов.ОписаниеТиповСтрока(150)); - Результат.Колонки.Добавить("РазделСсылка", ОписаниеТиповИдентификатора); + Результат.Колонки.Добавить("РазделСсылка", Новый ОписаниеТипов(ТипыИдентификатора)); Результат.Колонки.Добавить("РазделПолноеИмя", ВариантыОтчетов.ОписаниеТиповСтрока(510)); Результат.Колонки.Добавить("Приоритет", ВариантыОтчетов.ОписаниеТиповСтрока(100)); Результат.Колонки.Добавить("ПолноеПредставление", ВариантыОтчетов.ОписаниеТиповСтрока(300)); @@ -102,7 +106,7 @@ Если НЕ (ТипЗнч(РазделМетаданные) = Тип("ОбъектМетаданных") И СтрНачинаетсяС(РазделМетаданные.ПолноеИмя(), "Подсистема")) И НЕ (ТипЗнч(РазделМетаданные) = Тип("Строка") И РазделМетаданные = ИдентификаторНачальнойСтраницы) Тогда - ВызватьИсключение НСтр("ru='Некорректно определены значения разделов в процедуре ВариантыОтчетовПереопределяемый.ОпределитьРазделыСВариантамиОтчетов'"); + ВызватьИсключение НСтр("ru = 'Некорректно определены значения разделов в процедуре ВариантыОтчетовПереопределяемый.ОпределитьРазделыСВариантамиОтчетов'"); КонецЕсли; @@ -111,6 +115,7 @@ Иначе ШаблонЗаголовка = НСтр("ru = 'Отчеты раздела ""%1""'"); КонецЕсли; + ЭтоНачальнаяСтраница = (РазделМетаданные = ИдентификаторНачальнойСтраницы); Если Не ЭтоНачальнаяСтраница @@ -123,18 +128,21 @@ Если ЭтоНачальнаяСтраница Тогда СтрокаДерева.Имя = ИдентификаторНачальнойСтраницы; СтрокаДерева.ПолноеИмя = ИдентификаторНачальнойСтраницы; - СтрокаДерева.Представление = НСтр("ru = 'Начальная страница'"); + СтрокаДерева.Представление = СтандартныеПодсистемыСервер.ПредставлениеНачальнойСтраницы(); Иначе СтрокаДерева.Имя = РазделМетаданные.Имя; СтрокаДерева.ПолноеИмя = РазделМетаданные.ПолноеИмя(); СтрокаДерева.Представление = РазделМетаданные.Представление(); КонецЕсли; + ПолныеИменаПодсистем.Добавить(СтрокаДерева.ПолноеИмя); + Если ПолныеИменаСтрокДерева[СтрокаДерева.ПолноеИмя] = Неопределено Тогда ПолныеИменаСтрокДерева.Вставить(СтрокаДерева.ПолноеИмя, СтрокаДерева); Иначе ПолныеИменаСтрокДерева.Вставить(СтрокаДерева.ПолноеИмя, Истина); // Требуется поиск по дереву. КонецЕсли; + СтрокаДерева.РазделПолноеИмя = СтрокаДерева.ПолноеИмя; СтрокаДерева.ПолноеПредставление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( ШаблонЗаголовка, @@ -161,13 +169,15 @@ СтрокаДерева.РазделСсылка = СсылкиПодсистем[СтрокаДерева.РазделПолноеИмя]; КонецЕсли; КонецЦикла; + ПолныеИменаСтрокДерева.Очистить(); Возврат Результат; + КонецФункции -// Добавляет подсистемы родителя с фильтром по правам доступа и функциональным опциям. Процедура ДобавитьПодсистемыТекущегоПользователя(СтрокаРодителя, МетаданныеРодителя, ПолныеИменаПодсистем, ПолныеИменаСтрокДерева) + ПриоритетРодителя = СтрокаРодителя.Приоритет; Приоритет = 0; @@ -201,16 +211,96 @@ ДобавитьПодсистемыТекущегоПользователя(СтрокаДерева, ПодсистемаМетаданные, ПолныеИменаПодсистем, ПолныеИменаСтрокДерева); КонецЦикла; + +КонецПроцедуры + +Функция ПредставленияПодсистем() Экспорт + + ТипыИдентификатора = Новый Массив; + ТипыИдентификатора.Добавить(Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных")); + ТипыИдентификатора.Добавить(Тип("СправочникСсылка.ИдентификаторыОбъектовРасширений")); + + Результат = Новый ТаблицаЗначений; + Результат.Колонки.Добавить("Ссылка", Новый ОписаниеТипов(ТипыИдентификатора)); + Результат.Колонки.Добавить("ПолноеИмя", ВариантыОтчетов.ОписаниеТиповСтрока(510)); + Результат.Колонки.Добавить("Представление", ВариантыОтчетов.ОписаниеТиповСтрока(150)); + + ИдентификаторНачальнойСтраницы = ВариантыОтчетовКлиентСервер.ИдентификаторНачальнойСтраницы(); + Для Каждого Раздел Из ВариантыОтчетов.СписокРазделов() Цикл + + РазделМетаданные = Раздел.Значение; + Если НЕ (ТипЗнч(РазделМетаданные) = Тип("ОбъектМетаданных") И СтрНачинаетсяС(РазделМетаданные.ПолноеИмя(), "Подсистема")) + И НЕ (ТипЗнч(РазделМетаданные) = Тип("Строка") И РазделМетаданные = ИдентификаторНачальнойСтраницы) Тогда + ВызватьИсключение НСтр("ru = 'Некорректно определены значения разделов в процедуре ВариантыОтчетовПереопределяемый.ОпределитьРазделыСВариантамиОтчетов'"); + КонецЕсли; + + ЭтоНачальнаяСтраница = (РазделМетаданные = ИдентификаторНачальнойСтраницы); + Если Не ЭтоНачальнаяСтраница + И (Не ПравоДоступа("Просмотр", РазделМетаданные) + Или Не ОбщегоНазначения.ОбъектМетаданныхДоступенПоФункциональнымОпциям(РазделМетаданные)) Тогда + Продолжить; + КонецЕсли; + + СтрокаТаблицы = Результат.Добавить(); + Если ЭтоНачальнаяСтраница Тогда + СтрокаТаблицы.ПолноеИмя = ИдентификаторНачальнойСтраницы; + СтрокаТаблицы.Представление = СтандартныеПодсистемыСервер.ПредставлениеНачальнойСтраницы(); + Иначе + СтрокаТаблицы.ПолноеИмя = РазделМетаданные.ПолноеИмя(); + СтрокаТаблицы.Представление = РазделМетаданные.Представление(); + КонецЕсли; + СтрокаТаблицы.Ссылка = Справочники.ИдентификаторыОбъектовМетаданных.ПустаяСсылка(); + Если Не ЭтоНачальнаяСтраница Тогда + ДобавитьПодсистемы(Результат, РазделМетаданные); + КонецЕсли; + КонецЦикла; + + Результат.Индексы.Добавить("ПолноеИмя"); + + СсылкиПодсистем = ОбщегоНазначения.ИдентификаторыОбъектовМетаданных(Результат.ВыгрузитьКолонку("ПолноеИмя"), Ложь); + Для Каждого СсылкаПодсистемы Из СсылкиПодсистем Цикл + СтрокаТаблицы = Результат.Найти(СсылкаПодсистемы.Ключ, "ПолноеИмя"); + Если СтрокаТаблицы <> Неопределено Тогда + СтрокаТаблицы.Ссылка = СсылкаПодсистемы.Значение; + КонецЕсли; + КонецЦикла; + + Возврат Результат; + +КонецФункции + +Процедура ДобавитьПодсистемы(ТаблицаПодсистем, МетаданныеРодителя) + + Для Каждого ПодсистемаМетаданные Из МетаданныеРодителя.Подсистемы Цикл + + Если Не ПодсистемаМетаданные.ВключатьВКомандныйИнтерфейс + Или Не ПравоДоступа("Просмотр", ПодсистемаМетаданные) + Или Не ОбщегоНазначения.ОбъектМетаданныхДоступенПоФункциональнымОпциям(ПодсистемаМетаданные) Тогда + Продолжить; + КонецЕсли; + + СтрокаТаблицы = ТаблицаПодсистем.Добавить(); + СтрокаТаблицы.ПолноеИмя = ПодсистемаМетаданные.ПолноеИмя(); + СтрокаТаблицы.Представление = ПодсистемаМетаданные.Представление(); + СтрокаТаблицы.Ссылка = Справочники.ИдентификаторыОбъектовМетаданных.ПустаяСсылка(); + ДобавитьПодсистемы(ТаблицаПодсистем, ПодсистемаМетаданные); + КонецЦикла; + КонецПроцедуры // Возвращает Истина если у пользователя есть право чтения вариантов отчетов. Функция ПравоЧтения() Экспорт + Возврат ПравоДоступа("Чтение", Метаданные.Справочники.ВариантыОтчетов); + КонецФункции // Возвращает Истина если у пользователя есть право на сохранение вариантов отчетов. Функция ПравоДобавления() Экспорт - Возврат ПравоДоступа("СохранениеДанныхПользователя", Метаданные) И ПравоДоступа("Добавление", Метаданные.Справочники.ВариантыОтчетов); + + Возврат ПравоДоступа("СохранениеДанныхПользователя", Метаданные) + И ПравоДоступа("Добавление", Метаданные.Справочники.ВариантыОтчетов); + КонецФункции // Параметры подсистемы, закэшированные при обновлении (см. ВариантыОтчетов.ЗаписатьПараметрыВариантовОтчетов). @@ -243,6 +333,7 @@ УстановитьОтключениеБезопасногоРежима(Ложь); ПараметрыРасширений = СтандартныеПодсистемыСервер.ПараметрРаботыРасширения(ПолноеИмяПодсистемы); КонецЕсли; + Если ПараметрыРасширений <> Неопределено Тогда ОбщегоНазначенияКлиентСервер.ДополнитьМассив(Параметры.ОтчетыСНастройками, ПараметрыРасширений.ОтчетыСНастройками); ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(Параметры.ТаблицаФункциональныхОпций, ПараметрыРасширений.ТаблицаФункциональныхОпций); @@ -255,6 +346,7 @@ КонецЕсли; Возврат Параметры; + КонецФункции #КонецОбласти diff --git a/SSL/src/CommonModules/ВерсионированиеОбъектов/Module.bsl b/SSL/src/CommonModules/ВерсионированиеОбъектов/Module.bsl index 66f1d5e9d..da07d9f10 100644 --- a/SSL/src/CommonModules/ВерсионированиеОбъектов/Module.bsl +++ b/SSL/src/CommonModules/ВерсионированиеОбъектов/Module.bsl @@ -8,61 +8,6 @@ #Область ПрограммныйИнтерфейс -// Выполняется при обновлении конфигурации. -// 1. Очищает настройки версионирования по объектам, для которых версионирование не применено. -// 2. Устанавливает настройки версионирования по умолчанию. -// -Процедура ОбновитьНастройкиВерсионированияОбъектов() Экспорт - - ВерсионируемыеОбъекты = ПолучитьВерсионируемыеОбъекты(); - - ВыборкаЗаписей = РегистрыСведений.НастройкиВерсионированияОбъектов.Выбрать(); - Пока ВыборкаЗаписей.Следующий() Цикл - Если ВерсионируемыеОбъекты.Найти(ВыборкаЗаписей.ТипОбъекта) = Неопределено Тогда - МенеджерЗаписи = ВыборкаЗаписей.ПолучитьМенеджерЗаписи(); - МенеджерЗаписи.Удалить(); - КонецЕсли; - КонецЦикла; - - ВерсионируемыеОбъектыТЗ = Новый ТаблицаЗначений; - ВерсионируемыеОбъектыТЗ.Колонки.Добавить("ТипОбъекта", Новый ОписаниеТипов("СправочникСсылка.ИдентификаторыОбъектовМетаданных")); - Для Каждого ТипОбъекта Из ВерсионируемыеОбъекты Цикл - ВерсионируемыеОбъектыТЗ.Добавить().ТипОбъекта = ТипОбъекта; - КонецЦикла; - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | ВерсионируемыеОбъекты.ТипОбъекта - |ПОМЕСТИТЬ ТаблицаВерсионируемыхОбъектов - |ИЗ - | &ВерсионируемыеОбъекты КАК ВерсионируемыеОбъекты - |; - |//////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | ТаблицаВерсионируемыхОбъектов.ТипОбъекта - |ИЗ - | ТаблицаВерсионируемыхОбъектов КАК ТаблицаВерсионируемыхОбъектов - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиВерсионированияОбъектов КАК НастройкиВерсионированияОбъектов - | ПО НастройкиВерсионированияОбъектов.ТипОбъекта = ТаблицаВерсионируемыхОбъектов.ТипОбъекта - |ГДЕ - | НастройкиВерсионированияОбъектов.Вариант ЕСТЬ NULL "; - - Запрос.Параметры.Вставить("ВерсионируемыеОбъекты", ВерсионируемыеОбъектыТЗ); - ВерсионируемыеОбъектыБезНастройки = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("ТипОбъекта"); - - НаборЗаписейНастроек = РегистрыСведений.НастройкиВерсионированияОбъектов.СоздатьНаборЗаписей(); - НаборЗаписейНастроек.Прочитать(); - Для Каждого ВерсионируемыйОбъект Из ВерсионируемыеОбъектыБезНастройки Цикл - НоваяЗапись = НаборЗаписейНастроек.Добавить(); - НоваяЗапись.ТипОбъекта = ВерсионируемыйОбъект; - НоваяЗапись.Вариант = Перечисления.ВариантыВерсионированияОбъектов.НеВерсионировать; - КонецЦикла; - - НаборЗаписейНастроек.Записать(Истина); - -КонецПроцедуры - // Записывает настройку версионирования объекта. // // Параметры: @@ -306,14 +251,14 @@ ТипВерсииОбъекта = Перечисления.ТипыВерсийОбъекта[СведенияОВерсииОбъекта.ТипВерсииОбъекта]; - НомерПоследнейВерсии = 0; Если СсылкаСуществует Тогда - Если ОбъектВерсионируется(Ссылка, НомерПоследнейВерсии) И РегистрВерсийВходитВСоставПланаОбмена(Отправитель) Тогда + Если ОбъектВерсионируется(Объект) И РегистрВерсийВходитВСоставПланаОбмена(Отправитель) Тогда Возврат; КонецЕсли; Иначе Ссылка = ОбщегоНазначения.МенеджерОбъектаПоСсылке(Ссылка).ПолучитьСсылку(Объект.ПолучитьСсылкуНового().УникальныйИдентификатор()); КонецЕсли; + НомерПоследнейВерсии = НомерПоследнейВерсии(Ссылка); СведенияОВерсииОбъекта.Вставить("Объект", Ссылка); СведенияОВерсииОбъекта.Вставить("НомерВерсии", Число(НомерПоследнейВерсии) + 1); @@ -343,13 +288,25 @@ НаборЗаписей = РегистрыСведений.ВерсииОбъектов.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Объект.Установить(Ссылка); НаборЗаписей.Отбор.НомерВерсии.Установить(НомерВерсии); - НаборЗаписей.Прочитать(); - Запись = НаборЗаписей[0]; + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ВерсииОбъектов"); + ЭлементБлокировки.УстановитьЗначение("Объект", Ссылка); + ЭлементБлокировки.УстановитьЗначение("НомерВерсии", НомерВерсии); - Запись.ВерсияПроигнорирована = Игнорировать; - - НаборЗаписей.Записать(); + НачатьТранзакцию(); + Попытка + Блокировка.Заблокировать(); + НаборЗаписей.Прочитать(); + Запись = НаборЗаписей[0]; + Запись.ВерсияПроигнорирована = Игнорировать; + НаборЗаписей.Записать(); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; КонецПроцедуры @@ -542,6 +499,24 @@ КонецПроцедуры +// Возвращает описание команды для добавления в отчете "Результаты проверки учета". +// +Функция КомандаИсторияИзменений(Форма) Экспорт + + Если Не ПолучитьФункциональнуюОпцию("ИспользоватьВерсионированиеОбъектов") Тогда + Возврат Неопределено; + КонецЕсли; + + Команда = Форма.Команды.Добавить("КонтрольВеденияУчетаИсторияИзмененийОбъекта"); + Команда.Действие = "Подключаемый_Команда"; + Команда.Заголовок = НСтр("ru = 'История изменений объекта'"); + Команда.Подсказка = НСтр("ru = 'История изменений объекта'"); + Команда.Картинка = БиблиотекаКартинок.ИсторияДанных; + + Возврат Команда; + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Обработчики событий подсистем конфигурации. @@ -555,13 +530,23 @@ // См. СтандартныеПодсистемыСервер.ПриПолученииДанныхОтПодчиненного. Процедура ПриПолученииДанныхОтПодчиненного(ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад, Отправитель) Экспорт - Если ТипЗнч(ЭлементДанных) = Тип("РегистрСведенийНаборЗаписей.ВерсииОбъектов") И ЭлементДанных.Количество() > 0 Тогда - ПрочитатьИнформациюОбУзле(ЭлементДанных[0]); - - Объект = ЭлементДанных.Отбор.Объект.Значение; - - ПорядковыйНомерСинхронизируемойВерсии = ЭлементДанных.Отбор.НомерВерсии.Значение - ЭлементДанных[0].Смещение; - ПорядковыйНомерВерсииВладельца = ЭлементДанных[0].ВерсияВладелец; + Если ТипЗнч(ЭлементДанных) <> Тип("РегистрСведенийНаборЗаписей.ВерсииОбъектов") Или ЭлементДанных.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + ПрочитатьИнформациюОбУзле(ЭлементДанных[0]); + Объект = ЭлементДанных.Отбор.Объект.Значение; + + ПорядковыйНомерСинхронизируемойВерсии = ЭлементДанных.Отбор.НомерВерсии.Значение - ЭлементДанных[0].Смещение; + ПорядковыйНомерВерсииВладельца = ЭлементДанных[0].ВерсияВладелец; + + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ВерсииОбъектов"); + ЭлементБлокировки.УстановитьЗначение("Объект", Объект); + + НачатьТранзакцию(); + Попытка + Блокировка.Заблокировать(); НомерВерсии = НомерВерсииВРегистре(Объект, ПорядковыйНомерСинхронизируемойВерсии); Если ЗначениеЗаполнено(ПорядковыйНомерВерсииВладельца) Тогда @@ -576,6 +561,8 @@ Если ОбщегоНазначения.ЗначениеВСтрокуXML(ЭлементДанных) = ОбщегоНазначения.ЗначениеВСтрокуXML(НаборЗаписей) Тогда // Считаем, что нет коллизии. ПолучениеЭлемента = ПолучениеЭлементаДанных.Игнорировать; + + ЗафиксироватьТранзакцию(); Возврат; КонецЕсли; @@ -602,6 +589,8 @@ Если Не ЕстьКоллизия Тогда ЗаписатьВерсиюСИзменениемНомера(ЭлементДанных, ПолучениеЭлемента, Отправитель, НомерВерсии); + + ЗафиксироватьТранзакцию(); Возврат; КонецЕсли; @@ -609,6 +598,8 @@ ВерсииКВыгрузке = ВерсииКВыгрузке(Объект, Отправитель.Ссылка); Если ВерсииКВыгрузке.Количество() = 0 Тогда ЗаписатьВерсиюСИзменениемНомера(ЭлементДанных, ПолучениеЭлемента, Отправитель, НомерВерсии); + + ЗафиксироватьТранзакцию(); Возврат; КонецЕсли; @@ -623,6 +614,8 @@ Если МинимальныйНомерВерсии > НомерВерсии Тогда ЗаписатьВерсиюСИзменениемНомера(ЭлементДанных, ПолучениеЭлемента, Отправитель, НомерВерсии); + + ЗафиксироватьТранзакцию(); Возврат; КонецЕсли; КонецЕсли; @@ -681,7 +674,12 @@ КонецЕсли; ПолучениеЭлемента = ПолучениеЭлементаДанных.Игнорировать; - КонецЕсли; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; КонецПроцедуры @@ -692,14 +690,24 @@ Возврат; КонецЕсли; - Если ТипЗнч(ЭлементДанных) = Тип("РегистрСведенийНаборЗаписей.ВерсииОбъектов") И ЭлементДанных.Количество() > 0 Тогда - ПрочитатьИнформациюОбУзле(ЭлементДанных[0]); - - Объект = ЭлементДанных.Отбор.Объект.Значение; - - // Сопоставляем входящие номера версии и владельца версии с номерами в этой ИБ. - ПорядковыйНомерСинхронизируемойВерсии = ЭлементДанных.Отбор.НомерВерсии.Значение - ЭлементДанных[0].Смещение; - ПорядковыйНомерВерсииВладельца = ЭлементДанных[0].ВерсияВладелец; + Если ТипЗнч(ЭлементДанных) <> Тип("РегистрСведенийНаборЗаписей.ВерсииОбъектов") Или ЭлементДанных.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + ПрочитатьИнформациюОбУзле(ЭлементДанных[0]); + Объект = ЭлементДанных.Отбор.Объект.Значение; + + // Сопоставляем входящие номера версии и владельца версии с номерами в этой ИБ. + ПорядковыйНомерСинхронизируемойВерсии = ЭлементДанных.Отбор.НомерВерсии.Значение - ЭлементДанных[0].Смещение; + ПорядковыйНомерВерсииВладельца = ЭлементДанных[0].ВерсияВладелец; + + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ВерсииОбъектов"); + ЭлементБлокировки.УстановитьЗначение("Объект", Объект); + + НачатьТранзакцию(); + Попытка + Блокировка.Заблокировать(); НомерВерсии = НомерВерсииВРегистре(Объект, ПорядковыйНомерСинхронизируемойВерсии); Если ЗначениеЗаполнено(ПорядковыйНомерВерсииВладельца) Тогда @@ -715,6 +723,8 @@ Если ОбщегоНазначения.ЗначениеВСтрокуXML(ЭлементДанных) = ОбщегоНазначения.ЗначениеВСтрокуXML(НаборЗаписей) Тогда // Считаем, что нет коллизии. ПолучениеЭлемента = ПолучениеЭлементаДанных.Игнорировать; + + ЗафиксироватьТранзакцию(); Возврат; КонецЕсли; @@ -754,6 +764,8 @@ НаборЗаписей.Записать(); ПланыОбмена.УдалитьРегистрациюИзменений(Отправитель.Ссылка, НаборЗаписей); ПолучениеЭлемента = ПолучениеЭлементаДанных.Игнорировать; + + ЗафиксироватьТранзакцию(); Возврат; КонецЕсли; @@ -770,6 +782,8 @@ Если ВерсииКВыгрузке.Количество() = 0 Тогда ЗаписатьВерсиюСИзменениемНомера(ЭлементДанных, ПолучениеЭлемента, Отправитель, НомерВерсии); + + ЗафиксироватьТранзакцию(); Возврат; КонецЕсли; @@ -805,6 +819,7 @@ НаборЗаписей = РегистрыСведений.ВерсииОбъектов.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Объект.Установить(Объект); НаборЗаписей.Прочитать(); + ВерсииОбъекта = НаборЗаписей.Выгрузить(); Для Каждого Версия Из ВерсииОбъекта Цикл НаборЗаписей.Отбор.НомерВерсии.Установить(Версия.НомерВерсии); @@ -843,7 +858,12 @@ КонецЕсли; ЗаписатьВерсиюСИзменениемНомера(ЭлементДанных, ПолучениеЭлемента, Отправитель, НомерВерсии); - КонецЕсли; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; КонецПроцедуры @@ -886,37 +906,51 @@ // Процедура ПриПереходеНаВерсиюОбъекта(СсылкаНаОбъект, Знач НомерВерсии) Экспорт - ПроверитьНаличиеПравНаИзменениеОбъекта(СсылкаНаОбъект.Метаданные()); + ОбъектМетаданных = СсылкаНаОбъект.Метаданные(); + ПроверитьНаличиеПравНаИзменениеОбъекта(ОбъектМетаданных); УстановитьПривилегированныйРежим(Истина); - НаборЗаписей = ЗаписьОВерсииОбъекта(СсылкаНаОбъект, НомерВерсии); - Запись = НаборЗаписей[0]; + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ВерсииОбъектов"); + ЭлементБлокировки.УстановитьЗначение("Объект", СсылкаНаОбъект); - Если Запись.ТипВерсииОбъекта = Перечисления.ТипыВерсийОбъекта.ПринятыеДанныеПоКоллизии Тогда + ЭлементБлокировки = Блокировка.Добавить(ОбъектМетаданных.ПолноеИмя()); + ЭлементБлокировки.УстановитьЗначение("Ссылка", СсылкаНаОбъект); + + НачатьТранзакцию(); + Попытка + Блокировка.Заблокировать(); + ЗаблокироватьДанныеДляРедактирования(СсылкаНаОбъект); - НомерВерсии = НомерВерсии - 1; + НаборЗаписей = ЗаписьОВерсииОбъекта(СсылкаНаОбъект, НомерВерсии); + Запись = НаборЗаписей[0]; - Если НомерВерсии <> 0 Тогда - - ПредыдущаяЗапись = ЗаписьОВерсииОбъекта(СсылкаНаОбъект, НомерВерсии)[0]; - НомерВерсии = ПредыдущаяЗапись.НомерВерсии; - + Если Запись.ТипВерсииОбъекта = Перечисления.ТипыВерсийОбъекта.ПринятыеДанныеПоКоллизии Тогда + НомерВерсии = НомерВерсии - 1; + Если НомерВерсии <> 0 Тогда + ПредыдущаяЗапись = ЗаписьОВерсииОбъекта(СсылкаНаОбъект, НомерВерсии)[0]; + НомерВерсии = ПредыдущаяЗапись.НомерВерсии; + КонецЕсли; + Иначе + НомерВерсии = Запись.НомерВерсии; КонецЕсли; - Иначе - НомерВерсии = Запись.НомерВерсии; - КонецЕсли; + ТекстСообщенияОбОшибке = ""; + ПерейтиНаВерсиюСервер(СсылкаНаОбъект, НомерВерсии, ТекстСообщенияОбОшибке); + + Если Не ПустаяСтрока(ТекстСообщенияОбОшибке) Тогда + ВызватьИсключение ТекстСообщенияОбОшибке; + КонецЕсли; + + Запись.ВерсияПроигнорирована = Истина; + НаборЗаписей.Записать(); - ТекстСообщенияОбОшибке = ""; - ПерейтиНаВерсиюСервер(СсылкаНаОбъект, НомерВерсии, ТекстСообщенияОбОшибке); - - Если Не ПустаяСтрока(ТекстСообщенияОбОшибке) Тогда - ВызватьИсключение ТекстСообщенияОбОшибке; - КонецЕсли; - - Запись.ВерсияПроигнорирована = Истина; - НаборЗаписей.Записать(); + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; КонецПроцедуры @@ -934,7 +968,7 @@ Разделы = МодульТекущиеДелаСервер.РазделыДляОбъекта(Метаданные.РегистрыСведений.НастройкиВерсионированияОбъектов.ПолноеИмя()); ИнформацияОбУстаревшихВерсиях = ИнформацияОбУстаревшихВерсиях(); - РазмерУстаревшихДанных = РазмерДанныхСтрокой(ИнформацияОбУстаревшихВерсиях.РазмерДанных); + РазмерУстаревшихДанных = ИнформацияОбУстаревшихВерсиях.РазмерДанныхСтрокой; Подсказка = НСтр("ru = 'Устаревших версий: %1 (%2)'"); Для Каждого Раздел Из Разделы Цикл @@ -1033,7 +1067,7 @@ Если Не Объект.ЭтоНовый() И (ИзмененаПроведенность И СведенияОВерсииОбъекта.НомерВерсии > 1 Или ВерсияОтличаетсяОтРанееЗаписанной(Объект)) Тогда // Если версионирование включено после создания объекта, создаем предыдущую запись о версии. Если СведенияОВерсииОбъекта.НомерВерсии = 1 Тогда - Если ОбъектВерсионируется(Объект.Ссылка, Ложь) Тогда + Если ОбъектВерсионируется(Объект.Ссылка) Тогда ПараметрыВерсии = Новый Структура; ПараметрыВерсии.Вставить("НомерВерсии", 1); ПараметрыВерсии.Вставить("Комментарий", НСтр("ru = 'Версия создана по уже имеющемуся объекту'")); @@ -1121,12 +1155,13 @@ // Процедура ПриСозданииВерсииОбъекта(Объект, РежимЗаписи) - Перем НомерПоследнейВерсии, Комментарий; + Перем Комментарий; - Если НЕ ОбъектВерсионируется(Объект, НомерПоследнейВерсии, РежимЗаписи = РежимЗаписиДокумента.Проведение + Если НЕ ОбъектВерсионируется(Объект, РежимЗаписи = РежимЗаписиДокумента.Проведение Или РежимЗаписи = РежимЗаписиДокумента.ОтменаПроведения) Тогда Возврат; КонецЕсли; + НомерПоследнейВерсии = НомерПоследнейВерсии(Объект.Ссылка); Если НЕ Объект.ДополнительныеСвойства.Свойство("ВерсионированиеОбъектовКомментарийКВерсии", Комментарий) Тогда Комментарий = ""; @@ -1145,29 +1180,45 @@ КонецПроцедуры Процедура ЗаписатьДанныеТекущейВерсии(Ссылка, ОбменДаннымиЗагрузка = Ложь) - Перем НомерПоследнейВерсии; УстановитьПривилегированныйРежим(Истина); - Если Не ОбъектВерсионируется(Ссылка, НомерПоследнейВерсии) Тогда + Если Не ОбъектВерсионируется(Ссылка) Тогда Возврат; КонецЕсли; - ВерсияОбъекта = Новый ХранилищеЗначения(ДанныеДляХранения(Ссылка), Новый СжатиеДанных(9)); + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ВерсииОбъектов"); + ЭлементБлокировки.УстановитьЗначение("Объект", Ссылка); - НаборЗаписей = РегистрыСведений.ВерсииОбъектов.СоздатьНаборЗаписей(); - НаборЗаписей.Отбор.Объект.Установить(Ссылка); - НаборЗаписей.Отбор.НомерВерсии.Установить(НомерПоследнейВерсии); - НаборЗаписей.Прочитать(); + НачатьТранзакцию(); + Попытка + Блокировка.Заблокировать(); - Для Каждого Запись Из НаборЗаписей Цикл - Запись.ВерсияОбъекта = ВерсияОбъекта; - КонецЦикла; + НомерПоследнейВерсии = НомерПоследнейВерсии(Ссылка); + + ВерсияОбъекта = Новый ХранилищеЗначения(ДанныеДляХранения(Ссылка), Новый СжатиеДанных(9)); + + НаборЗаписей = РегистрыСведений.ВерсииОбъектов.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.Объект.Установить(Ссылка); + НаборЗаписей.Отбор.НомерВерсии.Установить(НомерПоследнейВерсии); + НаборЗаписей.Прочитать(); + + Для Каждого Запись Из НаборЗаписей Цикл + Запись.ВерсияОбъекта = ВерсияОбъекта; + КонецЦикла; + + Если ОбменДаннымиЗагрузка Тогда + НаборЗаписей.ДополнительныеСвойства.Вставить("РегистрироватьНаУзлахПлановОбменаПриОбновленииИБ", Ложь); + КонецЕсли; + НаборЗаписей.Записать(); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; - Если ОбменДаннымиЗагрузка Тогда - НаборЗаписей.ДополнительныеСвойства.Вставить("РегистрироватьНаУзлахПлановОбменаПриОбновленииИБ", Ложь); - КонецЕсли; - НаборЗаписей.Записать(); КонецПроцедуры @@ -1322,23 +1373,6 @@ КонецФункции -// Возвращает полные имена объектов метаданных, для которых подключен механизм версионирования. -// -// Возвращаемое значение: -// Массив строк - имена объектов метаданных. -// -Функция ПолучитьВерсионируемыеОбъекты() - - Результат = Новый Массив; - - Для Каждого Тип Из Метаданные.ОбщиеКоманды.ИсторияИзменений.ТипПараметраКоманды.Типы() Цикл - Результат.Добавить(ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Тип)); - КонецЦикла; - - Возврат Результат; - -КонецФункции - // Возвращает вариант версионирования для указанного объекта метаданных. // // Параметры: @@ -1456,9 +1490,7 @@ // версионирование, то он версионируется в соответствии с правилами // версионирования "по умолчанию". // -Функция ОбъектВерсионируется(Знач Источник, НомерПоследнейВерсии, РежимЗаписиПроведение = Ложь) - - НомерПоследнейВерсии = НомерПоследнейВерсии(Источник.Ссылка); +Функция ОбъектВерсионируется(Знач Источник, РежимЗаписиПроведение = Ложь) // Проверяем, что подсистема версионирования включена. Если НЕ ПолучитьФункциональнуюОпцию("ИспользоватьВерсионированиеОбъектов") Тогда @@ -1470,8 +1502,7 @@ ВариантВерсионирования = Перечисления.ВариантыВерсионированияОбъектов.НеВерсионировать; КонецЕсли; - Возврат НомерПоследнейВерсии > 0 - Или ВариантВерсионирования = Перечисления.ВариантыВерсионированияОбъектов.ВерсионироватьПриЗаписи + Возврат ВариантВерсионирования = Перечисления.ВариантыВерсионированияОбъектов.ВерсионироватьПриЗаписи Или ВариантВерсионирования = Перечисления.ВариантыВерсионированияОбъектов.ВерсионироватьПриПроведении И (РежимЗаписиПроведение Или Источник.Проведен) Или ВариантВерсионирования = Перечисления.ВариантыВерсионированияОбъектов.ВерсионироватьПриСтарте И Источник.Стартован; @@ -1576,7 +1607,7 @@ КонецФункции // Только для служебного использования. -Процедура ОчиститьУстаревшиеВерсииОбъектов(Параметры = Неопределено, АдресРезультата = Неопределено) Экспорт +Процедура ОчиститьУстаревшиеВерсииОбъектов() Экспорт ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(Метаданные.РегламентныеЗадания.ОчисткаУстаревшихВерсийОбъектов); @@ -1681,8 +1712,8 @@ Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда ИмяПланаОбмена = Получатель.Метаданные().Имя; - МодульОбменДаннымиПовтИсп = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиПовтИсп"); - ОписаниеОбъектаМетаданных = МодульОбменДаннымиПовтИсп.СоставПланаОбмена(ИмяПланаОбмена).Найти(ТипЗнч(Запись.Объект), "Тип"); + МодульОбменДаннымиСлужебный = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиСлужебный"); + ОписаниеОбъектаМетаданных = МодульОбменДаннымиСлужебный.СоставПланаОбмена(ИмяПланаОбмена).Найти(ТипЗнч(Запись.Объект), "Тип"); Если ОписаниеОбъектаМетаданных = Неопределено Тогда ОтправкаЭлемента = ОтправкаЭлементаДанных.Игнорировать; @@ -1740,7 +1771,7 @@ КонецПроцедуры // Предоставляет информацию о количестве и объеме устаревших версий объектов. -Функция ИнформацияОбУстаревшихВерсиях() +Функция ИнформацияОбУстаревшихВерсиях() Экспорт УстановитьПривилегированныйРежим(Истина); @@ -1767,6 +1798,7 @@ Результат = Новый Структура; Результат.Вставить("КоличествоВерсий", КоличествоВерсий); Результат.Вставить("РазмерДанных", РазмерДанных); + Результат.Вставить("РазмерДанныхСтрокой", РазмерДанныхСтрокой(Результат.РазмерДанных)); Возврат Результат; @@ -1821,13 +1853,6 @@ КонецФункции -// См. ИнформацияОбУстаревшихВерсиях. -Процедура ИнформацияОбУстаревшихВерсияхВФоне(ДополнительныеПараметры, АдресВоВременномХранилище) Экспорт - Результат = ИнформацияОбУстаревшихВерсиях(); - Результат.Вставить("РазмерДанныхСтрокой", РазмерДанныхСтрокой(Результат.РазмерДанных)); - ПоместитьВоВременноеХранилище(Результат, АдресВоВременномХранилище); -КонецПроцедуры - // Строковое представление объемов данных. Например: "1,23 Гб". Функция РазмерДанныхСтрокой(Знач РазмерДанных) @@ -1880,10 +1905,10 @@ // Процедура считывает данные XML из файла и заполняет структуры данных. // // Возвращаемое значение: -// Структура, содержащая два соответствия: ТабличныеЧасти, Реквизиты. +// Структура - , содержащая два соответствия: ТабличныеЧасти, Реквизиты. // Структура хранения данных: // Соответствие ТабличныеЧасти, которое содержит в себе значения табличных частей -// формат: +// формат: // СоответствиеИмя1 -> ТаблицаЗначений1 // | | ... | // Поле1 Поле2 ПолеM1. @@ -2055,7 +2080,15 @@ КонецЕсли; КонецЕсли; ПоследняяСтрока = ТабличныеЧасти[ИмяТабличнойЧасти].Получить(ТабличныеЧасти[ИмяТабличнойЧасти].Количество()-1); - ПоследняяСтрока[ИмяПоляТЧ] = ?(ЗначениеЗаполнено(ТипЗначенияПоляТЧ), XMLЗначение(ТипЗначенияПоляТЧ, ЧтениеXML.Значение), ЧтениеXML.Значение); + Значение = ЧтениеXML.Значение; + Если ЗначениеЗаполнено(ТипЗначенияПоляТЧ) Тогда + Попытка + Значение = XMLЗначение(ТипЗначенияПоляТЧ, ЧтениеXML.Значение); + Исключение + Значение = ЧтениеXML.Значение; + КонецПопытки; + КонецЕсли; + ПоследняяСтрока[ИмяПоляТЧ] = Значение; КонецЕсли; КонецЕсли; КонецЕсли; @@ -2904,47 +2937,58 @@ ВызватьИсключение НСтр("ru = 'Недостаточно прав для выполнения операции.'"); КонецЕсли; - ПользовательскоеПредставлениеНомера = НомерВерсииВИерархии(Ссылка, НомерВерсии); - Информация = СведенияОВерсииОбъекта(Ссылка, НомерВерсии); + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ВерсииОбъектов"); + ЭлементБлокировки.УстановитьЗначение("Объект", Ссылка); - ДополнительныеРеквизиты = Неопределено; - Если ТипЗнч(Информация.ВерсияОбъекта) = Тип("Структура") Тогда - Если Информация.ВерсияОбъекта.Свойство("ДополнительныеРеквизиты", ДополнительныеРеквизиты) Тогда - НайденныеРеквизиты = ДополнительныеРеквизиты.НайтиСтроки(Новый Структура("Идентификатор", Неопределено)); - Для Каждого Реквизит Из НайденныеРеквизиты Цикл - ДополнительныеРеквизиты.Удалить(Реквизит); - КонецЦикла; - КонецЕсли; - КонецЕсли; - - ТекстСообщенияОбОшибке = ""; - Объект = ВосстановитьОбъектПоXML(Информация.ВерсияОбъекта, ТекстСообщенияОбОшибке); - - Если Не ПустаяСтрока(ТекстСообщенияОбОшибке) Тогда - Возврат "ОшибкаВосстановления"; - КонецЕсли; - - Объект.ДополнительныеСвойства.Вставить("ВерсионированиеОбъектовКомментарийКВерсии", - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Выполнен переход к версии №%1 от %2'"), - ПользовательскоеПредставлениеНомера, - Формат(Информация.ДатаВерсии, "ДЛФ=DT"))); - - - РежимЗаписи = Неопределено; - ИдентификаторОшибки = "ОшибкаВосстановления"; - - Если ОбщегоНазначения.ЭтоДокумент(Объект.Метаданные()) И Объект.Метаданные().Проведение = Метаданные.СвойстваОбъектов.Проведение.Разрешить Тогда - Если Объект.Проведен И Не ОтменаПроведения Тогда - РежимЗаписи = РежимЗаписиДокумента.Проведение; - Иначе - РежимЗаписи = РежимЗаписиДокумента.ОтменаПроведения; - КонецЕсли; - ИдентификаторОшибки = "ОшибкаПроведения"; - КонецЕсли; + ЭлементБлокировки = Блокировка.Добавить(Ссылка.Метаданные().ПолноеИмя()); + ЭлементБлокировки.УстановитьЗначение("Ссылка", Ссылка); НачатьТранзакцию(); Попытка + Блокировка.Заблокировать(); + ЗаблокироватьДанныеДляРедактирования(Ссылка); + + ПользовательскоеПредставлениеНомера = НомерВерсииВИерархии(Ссылка, НомерВерсии); + Информация = СведенияОВерсииОбъекта(Ссылка, НомерВерсии); + + ДополнительныеРеквизиты = Неопределено; + Если ТипЗнч(Информация.ВерсияОбъекта) = Тип("Структура") Тогда + Если Информация.ВерсияОбъекта.Свойство("ДополнительныеРеквизиты", ДополнительныеРеквизиты) Тогда + НайденныеРеквизиты = ДополнительныеРеквизиты.НайтиСтроки(Новый Структура("Идентификатор", Неопределено)); + Для Каждого Реквизит Из НайденныеРеквизиты Цикл + ДополнительныеРеквизиты.Удалить(Реквизит); + КонецЦикла; + КонецЕсли; + КонецЕсли; + + ТекстСообщенияОбОшибке = ""; + Объект = ВосстановитьОбъектПоXML(Информация.ВерсияОбъекта, ТекстСообщенияОбОшибке); + + Если Не ПустаяСтрока(ТекстСообщенияОбОшибке) Тогда + ОтменитьТранзакцию(); + Возврат "ОшибкаВосстановления"; + КонецЕсли; + + Объект.ДополнительныеСвойства.Вставить("ВерсионированиеОбъектовКомментарийКВерсии", + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Выполнен переход к версии №%1 от %2'"), + ПользовательскоеПредставлениеНомера, + Формат(Информация.ДатаВерсии, "ДЛФ=DT"))); + + РежимЗаписи = Неопределено; + ИдентификаторОшибки = "ОшибкаВосстановления"; + + Если ОбщегоНазначения.ЭтоДокумент(Объект.Метаданные()) И Объект.Метаданные().Проведение = Метаданные.СвойстваОбъектов.Проведение.Разрешить Тогда + Если Объект.Проведен И Не ОтменаПроведения Тогда + РежимЗаписи = РежимЗаписиДокумента.Проведение; + Иначе + РежимЗаписи = РежимЗаписиДокумента.ОтменаПроведения; + КонецЕсли; + ИдентификаторОшибки = "ОшибкаПроведения"; + КонецЕсли; + ЗаписатьДанныеТекущейВерсии(Ссылка); + ВыполняетсяЗаписьОбъекта(Истина); Если ЗначениеЗаполнено(РежимЗаписи) Тогда Объект.Записать(РежимЗаписи); @@ -2959,6 +3003,7 @@ ВерсионированиеОбъектовПереопределяемый.ПриВосстановленииВерсииОбъекта(Объект, ДополнительныеРеквизиты); КонецЕсли; ВыполняетсяЗаписьОбъекта(Ложь); + ЗаписатьВерсиюОбъекта(Объект); ЗафиксироватьТранзакцию(); Исключение @@ -3112,6 +3157,7 @@ КонецПроцедуры +// Для вызова из ПриПолученииДанныхОтГлавного и ПриПолученииДанныхОтПодчиненного. Процедура ЗаписатьВерсиюСИзменениемНомера(ЭлементДанных, ПолучениеЭлемента, Отправитель, НомерВерсии) Объект = ЭлементДанных.Отбор.Объект.Значение; @@ -3129,7 +3175,7 @@ Запись = НаборЗаписей[0]; КонецЕсли; ЗаполнитьЗначенияСвойств(Запись, ЭлементДанных[0], , "Объект,НомерВерсии"); - НаборЗаписей.Записать(); + НаборЗаписей.Записать(); // АПК:1327 блокировка не требуется, так как процедура вызывается в транзакции с уже установленной блокировкой. ПланыОбмена.УдалитьРегистрациюИзменений(Отправитель.Ссылка, НаборЗаписей); ПолучениеЭлемента = ПолучениеЭлементаДанных.Игнорировать; diff --git a/SSL/src/CommonModules/ВерсионированиеОбъектовКлиент/Module.bsl b/SSL/src/CommonModules/ВерсионированиеОбъектовКлиент/Module.bsl index 2478c23c4..106a9b4a7 100644 --- a/SSL/src/CommonModules/ВерсионированиеОбъектовКлиент/Module.bsl +++ b/SSL/src/CommonModules/ВерсионированиеОбъектовКлиент/Module.bsl @@ -120,4 +120,20 @@ КонецПроцедуры +// Открывает список версий объекта. +// +// Параметры: +// Ссылка - ЛюбаяСсылка - версионируемый объект; +// ФормаВладелец - ФормаКлиентскогоПриложения - форма, из которой открывается история изменений. +// +Процедура ПоказатьИсториюИзменений(Ссылка, ФормаВладелец) Экспорт + + ПараметрыОткрытия = Новый Структура; + ПараметрыОткрытия.Вставить("Ссылка", Ссылка); + ПараметрыОткрытия.Вставить("ТолькоПросмотр", ФормаВладелец.ТолькоПросмотр); + + ОткрытьФорму("РегистрСведений.ВерсииОбъектов.Форма.ВыборХранимыхВерсий", ПараметрыОткрытия, ФормаВладелец); + +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/CommonModules/Взаимодействия/Module.bsl b/SSL/src/CommonModules/Взаимодействия/Module.bsl index e4fb57c99..0a7948f02 100644 --- a/SSL/src/CommonModules/Взаимодействия/Module.bsl +++ b/SSL/src/CommonModules/Взаимодействия/Module.bsl @@ -131,24 +131,19 @@ // Получим список взаимодействий у которых нужно изменить предмет. Если ЗначениеЗаполнено(СтарыйПредмет) И ВзаимодействияКлиентСервер.ЯвляетсяВзаимодействием(СтарыйПредмет) Тогда - МассивЗаменить = ВзаимодействияИзЦепочки(СтарыйПредмет, Взаимодействие); + ВзаимодействияДляЗамены = ВзаимодействияИзЦепочки(СтарыйПредмет, Взаимодействие); Иначе - МассивЗаменить = Новый Массив; + ВзаимодействияДляЗамены = Новый Массив; КонецЕсли; - МассивЗаменить.Вставить(0, Взаимодействие); + ВзаимодействияДляЗамены.Вставить(0, Взаимодействие); // Заменим предмет во всех взаимодействиях. + Блокировка = Новый БлокировкаДанных; + РегистрыСведений.ПредметыПапкиВзаимодействий.ЗаблокироватьПредметыПапокВзаимодействий(Блокировка, ВзаимодействияДляЗамены); + Блокировка.Заблокировать(); - Для Каждого Элемент Из МассивЗаменить Цикл - Попытка - УстановитьПредмет(Элемент, Предмет); - Исключение - ПредставлениеОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); - ОбщегоНазначения.СообщитьПользователю(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка при замене предмета у %1: %2'"), Элемент, ПредставлениеОшибки), , , , Отказ); - Отказ = Истина; - Возврат; - КонецПопытки; + Для Каждого ВзаимодействиеСсылка Из ВзаимодействияДляЗамены Цикл + УстановитьПредмет(ВзаимодействиеСсылка, Предмет); КонецЦикла; КонецПроцедуры @@ -440,7 +435,7 @@ // Если у идентификатора не английские символы, то письмо может быть некорректно обработано. Если ЗначениеЗаполнено(Вложение.Идентификатор) Тогда - Идентификатор = СтроковыеФункцииКлиентСервер.СтрокаЛатиницей(Вложение.Идентификатор); + Идентификатор = СтроковыеФункции.СтрокаЛатиницей(Вложение.Идентификатор); Письмо.ТекстHTML = СтрЗаменить(Письмо.ТекстHTML, "cid:" + Вложение.Идентификатор, "cid:" + Идентификатор); Вложение.Идентификатор = Идентификатор; КонецЕсли; @@ -456,22 +451,21 @@ // Добавим вложения Для Каждого Вложение Из Сообщение.Вложения Цикл + ПараметрыВложения = Новый Структура; + ПараметрыВложения.Вставить("ИмяФайла", Вложение.Представление); + ПараметрыВложения.Вставить("Размер", РазмерыВложений[Вложение.АдресВоВременномХранилище]); + МодульУправлениеЭлектроннойПочтой = ОбщегоНазначения.ОбщийМодуль("УправлениеЭлектроннойПочтой"); Если ПустаяСтрока(Вложение.Идентификатор) Тогда МодульУправлениеЭлектроннойПочтой.ЗаписатьВложениеЭлектронногоПисьмаИзВременногоХранилища(Письмо.Ссылка, - Вложение.АдресВоВременномХранилище, Вложение.Представление, РазмерыВложений[Вложение.АдресВоВременномХранилище]); + Вложение.АдресВоВременномХранилище, ПараметрыВложения); ИначеЕсли ПисьмоHTML Тогда + ПараметрыВложения.Вставить("ИДФайлаЭлектронногоПисьма", Вложение.Идентификатор); ПрисоединенныйФайл = МодульУправлениеЭлектроннойПочтой.ЗаписатьВложениеЭлектронногоПисьмаИзВременногоХранилища(Письмо.Ссылка, - Вложение.АдресВоВременномХранилище, Вложение.Представление, РазмерыВложений[Вложение.АдресВоВременномХранилище]); - - Если ПрисоединенныйФайл <> Неопределено Тогда - ПрисоединенныйФайлОбъект = ПрисоединенныйФайл.ПолучитьОбъект(); - ПрисоединенныйФайлОбъект.ИДФайлаЭлектронногоПисьма = Вложение.Идентификатор; - ПрисоединенныйФайлОбъект.Записать(); - КонецЕсли; + Вложение.АдресВоВременномХранилище, ПараметрыВложения); КонецЕсли; @@ -495,7 +489,7 @@ ОтменитьТранзакцию(); ИнформацияОбОшибке = ИнформацияОбОшибке(); ШаблонТекстаСообщения = НСтр("ru = 'Не удалось сформировать письмо по причине: - |%1'"); + |%1'"); ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка,, Письмо, @@ -531,8 +525,7 @@ Письмо.ДатаОтправления = ТекущаяДатаСеанса(); Письмо.Записать(РежимЗаписиДокумента.Запись); - ВзаимодействияВызовСервера.УстановитьПапкуЭлектронногоПисьма( - Письмо.Ссылка, ОпределитьПапкуДляПисьма(Письмо.Ссылка)); + УстановитьПапкуЭлектронногоПисьма(Письмо.Ссылка, ОпределитьПапкуДляПисьма(Письмо.Ссылка)); Исключение ИнформацияОбОшибке = ИнформацияОбОшибке(); @@ -682,12 +675,12 @@ Зависимость = Зависимости.Добавить(); Зависимость.РегламентноеЗадание = Метаданные.РегламентныеЗадания.ОбновлениеСтатусовДоставкиSMS; - Зависимость.ФункциональнаяОпция = Метаданные.ФункциональныеОпции.ИспользоватьПочтовыйКлиент; + Зависимость.ФункциональнаяОпция = Метаданные.ФункциональныеОпции.ИспользоватьПрочиеВзаимодействия; Зависимость.РаботаетСВнешнимиРесурсами = Истина; Зависимость = Зависимости.Добавить(); Зависимость.РегламентноеЗадание = Метаданные.РегламентныеЗадания.ОтправкаSMS; - Зависимость.ФункциональнаяОпция = Метаданные.ФункциональныеОпции.ИспользоватьПочтовыйКлиент; + Зависимость.ФункциональнаяОпция = Метаданные.ФункциональныеОпции.ИспользоватьПрочиеВзаимодействия; Зависимость.РаботаетСВнешнимиРесурсами = Истина; Зависимость = Зависимости.Добавить(); @@ -889,11 +882,6 @@ Обработчик.ЧитаемыеОбъекты = "Документ.ЭлектронноеПисьмоИсходящее"; Обработчик.ИзменяемыеОбъекты = "Документ.ЭлектронноеПисьмоИсходящее"; Обработчик.БлокируемыеОбъекты = "Документ.ЭлектронноеПисьмоИсходящее"; - Обработчик.ПриоритетыВыполнения = ОбновлениеИнформационнойБазы.ПриоритетыВыполненияОбработчика(); - Приоритет = Обработчик.ПриоритетыВыполнения.Добавить(); - Приоритет.Процедура = "Документы.ЭлектронноеПисьмоВходящее.ЗаполнитьВзаимодействияОснованияУПодчиненныхПисем"; - Приоритет.Порядок = "Любой"; - Обработчик.ПроцедураПроверки = "ОбновлениеИнформационнойБазы.ДанныеОбновленыНаНовуюВерсиюПрограммы"; КонецПроцедуры @@ -941,6 +929,18 @@ Набор.Идентификатор = Новый УникальныйИдентификатор("123329af-4b94-4f47-9d39-e503190487bd"); КонецПроцедуры +// См. СозданиеНаОснованииПереопределяемый.ПриОпределенииОбъектовСКомандамиСозданияНаОсновании. +Процедура ПриОпределенииОбъектовСКомандамиСозданияНаОсновании(Объекты) Экспорт + + Объекты.Добавить(Метаданные.Документы.Встреча); + Объекты.Добавить(Метаданные.Документы.ЗапланированноеВзаимодействие); + Объекты.Добавить(Метаданные.Документы.СообщениеSMS); + Объекты.Добавить(Метаданные.Документы.ТелефонныйЗвонок); + Объекты.Добавить(Метаданные.Документы.ЭлектронноеПисьмоВходящее); + Объекты.Добавить(Метаданные.Документы.ЭлектронноеПисьмоИсходящее); + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -1102,7 +1102,7 @@ // Адрес - Строка - адрес контакта. // // Возвращаемое значение: -// СписокЗначений +// СписокЗначений - // Функция ПолучитьВариантыПоискаПоСтроке(Представление, Адрес) @@ -1110,13 +1110,15 @@ Возврат Адрес; ИначеЕсли ПустаяСтрока(Адрес) Тогда Возврат Представление; + ИначеЕсли СокрЛП(Представление) = СокрЛП(Адрес) Тогда + Возврат Адрес; КонецЕсли; ВариантыПоиска = Новый СписокЗначений; Представление = ДобавитьКавычкиКСтроке(Представление); Адрес = ДобавитьКавычкиКСтроке(Адрес); - ВариантыПоиска.Добавить(Представление + " ИЛИ " + Адрес); ВариантыПоиска.Добавить(Представление + " И " + Адрес); + ВариантыПоиска.Добавить(Представление + " ИЛИ " + Адрес); Возврат ВариантыПоиска; @@ -2328,11 +2330,15 @@ // Заполняет табличную часть участники у документов Встреча и Запланированное взаимодействие. // // Параметры: -// Контакты - Массив - массив, содержащий участников взаимодействия. -// Участники - ТабличнаяЧастьДокумента - табличная часть документа, которая будет заполнена -// на основании массива. +// Контакты - Массив - массив, содержащий участников взаимодействия. +// Участники - ТабличнаяЧастьДокумента - табличная часть документа, которая будет заполнена +// на основании массива, +// ТипКонтактнойИнформации - Перечисления.ТипыКонтактнойИнформации - если указано, +// то будет наложен отбор по данном типу контактной информации, +// РазбиватьПоКоличествуАдресов - Булево - Если истина, то для контакта будет создано столько строк в ТЧ "Участники", +// сколько для него получено различных видов заполненной контактной информации. // -Процедура ЗаполнитьКонтактыДляВстречи(Контакты, Участники, ТипКонтактнойИнформации = Неопределено) Экспорт +Процедура ЗаполнитьКонтактыДляВстречи(Контакты, Участники, ТипКонтактнойИнформации = Неопределено, РазбиватьПоКоличествуАдресов = Ложь) Экспорт Если Не КонтактыЗаполнены(Контакты) Тогда Возврат; @@ -2351,6 +2357,27 @@ ДозаполнитьПоляКонтактов(НоваяСтрока.Контакт, НоваяСтрока.ПредставлениеКонтакта, НоваяСтрока.КакСвязаться, ТипКонтактнойИнформации); + Если РазбиватьПоКоличествуАдресов Тогда + + МассивАдресов = СтрРазделить(НоваяСтрока.КакСвязаться, ";", Ложь); + + Если МассивАдресов.Количество() > 1 Тогда + + НоваяСтрока.КакСвязаться = МассивАдресов[0]; + + Для Инд = 1 По МассивАдресов.Количество() - 1 Цикл + + ДополнительнаяСтрока = Участники.Добавить(); + ДополнительнаяСтрока.Контакт = НоваяСтрока.Контакт; + ДополнительнаяСтрока.ПредставлениеКонтакта = НоваяСтрока.ПредставлениеКонтакта; + ДополнительнаяСтрока.КакСвязаться = МассивАдресов[инд]; + + КонецЦикла; + + КонецЕсли; + + КонецЕсли; + КонецЦикла; КонецПроцедуры @@ -2378,30 +2405,6 @@ КонецФункции -Функция РезультатФорматированияНомераДляОтправки(Номер) Экспорт - - Результат = ""; - ДопустимыеСимволы = "+1234567890"; - Для Позиция = 1 По СтрДлина(Номер) Цикл - Символ = Сред(Номер,Позиция,1); - Если СтрНайти(ДопустимыеСимволы, Символ) > 0 Тогда - Результат = Результат + Символ; - КонецЕсли; - КонецЦикла; - - Если СтрДлина(Результат) > 10 Тогда - ПервыйСимвол = Лев(Результат, 1); - Если ПервыйСимвол = "8" Тогда - Результат = "+7" + Сред(Результат, 2); - ИначеЕсли ПервыйСимвол <> "+" Тогда - Результат = "+" + Результат; - КонецЕсли; - КонецЕсли; - - Возврат Результат; - -КонецФункции - // Заполняет значения прочих полей в строках табличной части Участники документов взаимодействий. // // Параметры: @@ -2885,13 +2888,17 @@ ИдентификаторПисьма = РаботаСПочтовымиСообщениями.ОтправитьПочтовоеСообщение(Объект.УчетнаяЗапись, ПараметрыПисьма); - Если ПротоколПочты = "" Тогда - Объект.ИдентификаторСообщения = ПараметрыПисьма.ИдентификаторСообщения; - ИначеЕсли ПротоколПочты = "IMAP" Тогда - Объект.ИдентификаторСообщенияОтправкаIMAP = ПараметрыПисьма.ИдентификаторСообщенияОтправкаIMAP; - ИначеЕсли ПротоколПочты = "Все" Тогда - Объект.ИдентификаторСообщения = ПараметрыПисьма.ИдентификаторСообщения; - Объект.ИдентификаторСообщенияОтправкаIMAP = ПараметрыПисьма.ИдентификаторСообщенияОтправкаIMAP; + Если Не Объект.УдалятьПослеОтправки Тогда + + Если ПротоколПочты = "" Тогда + Объект.ИдентификаторСообщения = ПараметрыПисьма.ИдентификаторСообщения; + ИначеЕсли ПротоколПочты = "IMAP" Тогда + Объект.ИдентификаторСообщенияОтправкаIMAP = ПараметрыПисьма.ИдентификаторСообщенияОтправкаIMAP; + ИначеЕсли ПротоколПочты = "Все" Тогда + Объект.ИдентификаторСообщения = ПараметрыПисьма.ИдентификаторСообщения; + Объект.ИдентификаторСообщенияОтправкаIMAP = ПараметрыПисьма.ИдентификаторСообщенияОтправкаIMAP; + КонецЕсли; + КонецЕсли; Возврат ИдентификаторПисьма; @@ -3553,11 +3560,11 @@ Процедура ЗаполнитьСписокВыбораДляРассмотретьПосле(СписокВыбора) Экспорт СписокВыбора.Очистить(); - СписокВыбора.Добавить(15*60, НСтр("ru='Через 15 мин.'")); - СписокВыбора.Добавить(30*60, НСтр("ru='Через 30 мин.'")); - СписокВыбора.Добавить(60*60, НСтр("ru='Через 1 час'")); - СписокВыбора.Добавить(3*60*60, НСтр("ru='Через 3 часа'")); - СписокВыбора.Добавить(24*60*60, НСтр("ru='Завтра'")); + СписокВыбора.Добавить(15*60, НСтр("ru = 'Через 15 мин.'")); + СписокВыбора.Добавить(30*60, НСтр("ru = 'Через 30 мин.'")); + СписокВыбора.Добавить(60*60, НСтр("ru = 'Через 1 час'")); + СписокВыбора.Добавить(3*60*60, НСтр("ru = 'Через 3 часа'")); + СписокВыбора.Добавить(24*60*60, НСтр("ru = 'Завтра'")); КонецПроцедуры @@ -3572,10 +3579,13 @@ Форма.РассмотретьПосле = Дата(1,1,1); КонецЕсли; - Ссылка = ТекущийОбъект.Ссылка; + ВзаимодействиеСсылка = ТекущийОбъект.Ссылка; - СтарыеЗначенияРеквизитов = СтруктураРеквизитовВзаимодействия(Ссылка); + Блокировка = Новый БлокировкаДанных(); + РегистрыСведений.ПредметыПапкиВзаимодействий.ЗаблокироватьПредметыПапокВзаимодействий(Блокировка, ВзаимодействиеСсылка); + Блокировка.Заблокировать(); + СтарыеЗначенияРеквизитов = СтруктураРеквизитовВзаимодействия(ВзаимодействиеСсылка); Если СтарыеЗначенияРеквизитов.Предмет = Форма.Предмет И ЗначениеЗаполнено(Форма.Предмет) И СтарыеЗначенияРеквизитов.Рассмотрено = Форма.Рассмотрено И СтарыеЗначенияРеквизитов.РассмотретьПосле = Форма.РассмотретьПосле Тогда @@ -3591,9 +3601,9 @@ СтруктураДляЗаписи.РассмотретьПосле = Форма.РассмотретьПосле; СтруктураДляЗаписи.РассчитыватьРассмотрено = РассчитыватьРассмотрено; - // Если в качестве предмета устанавливается само взаимодействие то делать ничего не нужно. - Если Форма.Предмет = Ссылка Тогда - РегистрыСведений.ПредметыПапкиВзаимодействий.ЗаписатьПредметыПапкиВзаимодействий(Ссылка, СтруктураДляЗаписи); + // Если в качестве предмета устанавливается само взаимодействие, то делать ничего не нужно. + Если Форма.Предмет = ВзаимодействиеСсылка Тогда + РегистрыСведений.ПредметыПапкиВзаимодействий.ЗаписатьПредметыПапкиВзаимодействий(ВзаимодействиеСсылка, СтруктураДляЗаписи); РассчитатьРассмотреноПоКонтактамПриЗаписиИзФормы(ТекущийОбъект, Форма, СтарыеЗначенияРеквизитов); Возврат; КонецЕсли; @@ -3608,37 +3618,35 @@ // У предмета установим в качестве предмета ссылку на самого себя. СтруктураДляЗаписи.Предмет = Форма.Предмет; СтруктураДляЗаписи.РассчитыватьРассмотрено = Истина; - РегистрыСведений.ПредметыПапкиВзаимодействий.ЗаписатьПредметыПапкиВзаимодействий(Ссылка, СтруктураДляЗаписи); + РегистрыСведений.ПредметыПапкиВзаимодействий.ЗаписатьПредметыПапкиВзаимодействий(ВзаимодействиеСсылка, СтруктураДляЗаписи); Иначе СтруктураДляЗаписи.Предмет = ПредметПредмета; СтруктураДляЗаписи.РассчитыватьРассмотрено = Истина; Форма.Предмет = ПредметПредмета; - РегистрыСведений.ПредметыПапкиВзаимодействий.ЗаписатьПредметыПапкиВзаимодействий(Ссылка, СтруктураДляЗаписи); + РегистрыСведений.ПредметыПапкиВзаимодействий.ЗаписатьПредметыПапкиВзаимодействий(ВзаимодействиеСсылка, СтруктураДляЗаписи); КонецЕсли; Иначе - - РегистрыСведений.ПредметыПапкиВзаимодействий.ЗаписатьПредметыПапкиВзаимодействий(Ссылка, СтруктураДляЗаписи); - + РегистрыСведений.ПредметыПапкиВзаимодействий.ЗаписатьПредметыПапкиВзаимодействий(ВзаимодействиеСсылка, СтруктураДляЗаписи); КонецЕсли; Иначе - СтруктураДляЗаписи.Предмет = Ссылка; + СтруктураДляЗаписи.Предмет = ВзаимодействиеСсылка; СтруктураДляЗаписи.РассчитыватьРассмотрено = Истина; - Форма.Предмет = Ссылка; - РегистрыСведений.ПредметыПапкиВзаимодействий.ЗаписатьПредметыПапкиВзаимодействий(Ссылка, СтруктураДляЗаписи); + Форма.Предмет = ВзаимодействиеСсылка; + РегистрыСведений.ПредметыПапкиВзаимодействий.ЗаписатьПредметыПапкиВзаимодействий(ВзаимодействиеСсылка, СтруктураДляЗаписи); КонецЕсли; // Если предыдущим предметом было взаимодействие, то возможно нужно поменять предмет у всей цепочки. Если ЗначениеЗаполнено(СтарыеЗначенияРеквизитов.Предмет) И ВзаимодействияКлиентСервер.ЯвляетсяВзаимодействием(СтарыеЗначенияРеквизитов.Предмет) Тогда - Если НЕ (Ссылка <> СтарыеЗначенияРеквизитов.Предмет + Если НЕ (ВзаимодействиеСсылка <> СтарыеЗначенияРеквизитов.Предмет И (Не ЗначениеЗаполнено(Форма.Предмет) ИЛИ ВзаимодействияКлиентСервер.ЯвляетсяВзаимодействием(Форма.Предмет))) Тогда - ЗаменитьПредметВЦепочкеВзаимодействий(СтарыеЗначенияРеквизитов.Предмет, Форма.Предмет, Ссылка); + ЗаменитьПредметВЦепочкеВзаимодействий(СтарыеЗначенияРеквизитов.Предмет, Форма.Предмет, ВзаимодействиеСсылка); КонецЕсли; @@ -3651,7 +3659,7 @@ Процедура РассчитатьРассмотреноПоКонтактамПриЗаписиИзФормы(ТекущийОбъект, Форма, СтарыеЗначенияРеквизитов) Если (НеЗаписыватьКонтакты(ТекущийОбъект.ДополнительныеСвойства) - И СтарыеЗначенияРеквизитов.Рассмотрено <> Форма.Рассмотрено) + И СтарыеЗначенияРеквизитов.Рассмотрено <> Форма.Рассмотрено) ИЛИ Форма.Объект.Ссылка.Пустая() Тогда МассивВзаимодействий = Новый Массив; @@ -4215,7 +4223,12 @@ ТекстКОбработке = ТекстHTML; - Если СтрЧислоВхождений(НРег(ТекстКОбработке),"" + КонецЕсли; + Если НетЗаголовка Тогда ТекстКОбработке = "" + ТекстКОбработке + "" КонецЕсли; @@ -5830,7 +5843,7 @@ // МассивПисем - Массив - массив писем для которых будет установлена папка. // Папка - СправочникСсылка.ПапкиЭлектронныхПисем - папка, письма которой будут помечены на удаление. // -Процедура УстановитьПапкуДляМассиваПисем(МассивПисем,Папка) Экспорт +Процедура УстановитьПапкуДляМассиваПисем(МассивПисем, Папка) Экспорт Запрос = Новый Запрос; Запрос.Текст = " @@ -5860,35 +5873,48 @@ | ЭлектронноеПисьмоИсходящее.Ссылка В(&МассивПисем) | И ПредметыПапкиВзаимодействий.ПапкаЭлектронногоПисьма <> &Папка"; - Запрос.УстановитьПараметр("МассивПисем",МассивПисем); - Запрос.УстановитьПараметр("Папка",Папка); + Запрос.УстановитьПараметр("МассивПисем", МассивПисем); + Запрос.УстановитьПараметр("Папка", Папка); ЗначенияРеквизитовПапки = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Папка, "ПредопределеннаяПапка,Наименование"); Если ЗначенияРеквизитовПапки <> Неопределено И ЗначенияРеквизитовПапки.ПредопределеннаяПапка И ЗначенияРеквизитовПапки.Наименование = НСтр("ru = 'Удаленные'") Тогда - ПеремещениеВПапкуУдаленные = Истина; - Иначе - ПеремещениеВПапкуУдаленные = Ложь; - КонецЕсли; Выборка = Запрос.Выполнить().Выбрать(); - Пока Выборка.Следующий() Цикл - ВзаимодействияВызовСервера.УстановитьПапкуЭлектронногоПисьма(Выборка.Ссылка, Папка, Ложь); - Если ПеремещениеВПапкуУдаленные И НЕ Выборка.ПометкаУдаления Тогда - ПисьмоОбъект = Выборка.Ссылка.ПолучитьОбъект(); - ПисьмоОбъект.ДополнительныеСвойства.Вставить("ОбработаноИзменениеПометкиУдаления", Истина); - ПисьмоОбъект.УстановитьПометкуУдаления(Истина); - ИначеЕсли НЕ ПеремещениеВПапкуУдаленные И Выборка.ПометкаУдаления Тогда - ПисьмоОбъект = Выборка.Ссылка.ПолучитьОбъект(); - ПисьмоОбъект.ДополнительныеСвойства.Вставить("ОбработаноИзменениеПометкиУдаления", Истина); - ПисьмоОбъект.УстановитьПометкуУдаления(Ложь); - КонецЕсли; + + НачатьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить(Выборка.Ссылка.Метаданные().ПолноеИмя()); + ЭлементБлокировки.УстановитьЗначение("Ссылка", Выборка.Ссылка); + РегистрыСведений.ПредметыПапкиВзаимодействий.ЗаблокироватьПредметыПапокВзаимодействий(Блокировка, Выборка.Ссылка); + Блокировка.Заблокировать(); + + УстановитьПапкуЭлектронногоПисьма(Выборка.Ссылка, Папка, Ложь); + Если ПеремещениеВПапкуУдаленные И НЕ Выборка.ПометкаУдаления Тогда + ПометкаУдаления = Истина; + ИначеЕсли НЕ ПеремещениеВПапкуУдаленные И Выборка.ПометкаУдаления Тогда + ПометкаУдаления = Ложь; + Иначе + ПометкаУдаления = Неопределено; + КонецЕсли; + Если ПометкаУдаления <> Неопределено Тогда + ПисьмоОбъект = Выборка.Ссылка.ПолучитьОбъект(); + ПисьмоОбъект.ДополнительныеСвойства.Вставить("ОбработаноИзменениеПометкиУдаления", Истина); + ПисьмоОбъект.УстановитьПометкуУдаления(ПометкаУдаления); + КонецЕсли; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; КонецЦикла; Выборка.Сбросить(); @@ -5964,43 +5990,48 @@ Запрос.УстановитьПараметр("Папка", Папка); Запрос.УстановитьПараметр("Удаленные", НСтр("ru = 'Удаленные'")); - МассивРезультатовЗапроса = Запрос.ВыполнитьПакет(); - - Если МассивРезультатовЗапроса[0].Пустой() Или МассивРезультатовЗапроса[2].Пустой() Тогда + РезультатыЗапроса = Запрос.ВыполнитьПакет(); + Если РезультатыЗапроса[0].Пустой() Тогда Возврат; КонецЕсли; - ВыборкаПапкаУдаленные = МассивРезультатовЗапроса[0].Выбрать(); + ВыборкаПапкаУдаленные = РезультатыЗапроса[0].Выбрать(); ВыборкаПапкаУдаленные.Следующий(); ПапкаУдаленные = ВыборкаПапкаУдаленные.Ссылка; - ВыборкаПисьма = МассивРезультатовЗапроса[2].Выбрать(); - ВыборкаПапки = МассивРезультатовЗапроса[1].Выбрать(); + Письма = РезультатыЗапроса[2].Выгрузить(); + ПапкиПисем = РезультатыЗапроса[1].Выгрузить(); НачатьТранзакцию(); - Попытка - Пока ВыборкаПисьма.Следующий() Цикл + Блокировка = Новый БлокировкаДанных; + Для каждого Письмо Из Письма Цикл + ЭлементБлокировки = Блокировка.Добавить(Письмо.Ссылка.Метаданные().ПолноеИмя()); + ЭлементБлокировки.УстановитьЗначение("Ссылка", Письмо.Ссылка); + КонецЦикла; + ЭлементБлокировки = Блокировка.Добавить("Справочник.ПапкиЭлектронныхПисем"); + ЭлементБлокировки.ИсточникДанных = ПапкиПисем; + ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Ссылка", "Папка"); + РегистрыСведений.ПредметыПапкиВзаимодействий.ЗаблокироватьПредметыПапокВзаимодействий(Блокировка, Письма.ВыгрузитьКолонку("Ссылка")); + Блокировка.Заблокировать(); - ВзаимодействияВызовСервера.УстановитьПапкуЭлектронногоПисьма(ВыборкаПисьма.Ссылка, ПапкаУдаленные, Ложь); + Для каждого Письмо Из Письма Цикл - Если НЕ ВыборкаПисьма.ПометкаУдаления Тогда - ПисьмоОбъект = ВыборкаПисьма.Ссылка.ПолучитьОбъект(); + УстановитьПапкуЭлектронногоПисьма(Письмо.Ссылка, ПапкаУдаленные, Ложь); + Если НЕ Письмо.ПометкаУдаления Тогда + ПисьмоОбъект = Письмо.Ссылка.ПолучитьОбъект(); ПисьмоОбъект.УстановитьПометкуУдаления(Истина); КонецЕсли; КонецЦикла; - Пока ВыборкаПапки.Следующий() Цикл - - ПапкаОбъект = ВыборкаПапки.Папка.ПолучитьОбъект(); + Для каждого ПапкаПисем Из ПапкиПисем Цикл + ПапкаОбъект = ПапкаПисем.Папка.ПолучитьОбъект(); ПапкаОбъект.УстановитьПометкуУдаления(Истина); - КонецЦикла; - ВыборкаПапки.Сбросить(); - ТаблицаДляРасчета = ТаблицаДанныхДляРасчетаРассмотрено(ВыборкаПапки, "Папка"); + ТаблицаДляРасчета = ТаблицаДанныхДляРасчетаРассмотрено(ПапкиПисем, "Папка"); Если ТаблицаДляРасчета.Найти(ПапкаУдаленные, "ПоЧемуРассчитывать") = Неопределено Тогда НоваяСтрока = ТаблицаДляРасчета.Добавить(); НоваяСтрока.ПоЧемуРассчитывать = ПапкаУдаленные; @@ -6010,15 +6041,10 @@ ЗафиксироватьТранзакцию(); Исключение - ОтменитьТранзакцию(); - - ОписаниеОшибки = НСтр("ru = 'При удалении папки произошла ошибка. - |Удаление папки не выполнено. - |Дополнительное описание: - |%ДополнительноеОписание%'"); - ОписаниеОшибки = СтрЗаменить(ОписаниеОшибки, "%ДополнительноеОписание%", ИнформацияОбОшибке().Описание); - + ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Удаление папки не выполнено по причине: + |%1'"), КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); Возврат; КонецПопытки; @@ -6263,7 +6289,7 @@ КонецЕсли; - Запрос.УстановитьПараметр("Письмо",Письмо); + Запрос.УстановитьПараметр("Письмо", Письмо); УстановитьПараметрыЗапросаИменаПредопределенныеПапки(Запрос); Результат = Запрос.Выполнить(); @@ -6314,17 +6340,28 @@ Запрос.УстановитьПараметр("МассивПисем", МассивПисем); - МассивПапокДляРасчета = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Папка"); - + ПапкиДляРасчета = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Папка"); ТаблицаПапок = ОпределитьПапкиДляМассиваПисем(МассивПисем); - Для каждого СтрокаТаблицы Из ТаблицаПапок Цикл - ВзаимодействияВызовСервера.УстановитьПапкуЭлектронногоПисьма(СтрокаТаблицы.Письмо, СтрокаТаблицы.Папка, Ложь); - Если ЗначениеЗаполнено(СтрокаТаблицы.Папка) И МассивПапокДляРасчета.Найти(СтрокаТаблицы.Папка) = Неопределено Тогда - МассивПапокДляРасчета.Добавить(СтрокаТаблицы.Папка); - КонецЕсли; - КонецЦикла; + + НачатьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных; + РегистрыСведений.ПредметыПапкиВзаимодействий.ЗаблокироватьПредметыПапок(Блокировка, ТаблицаПапок, "Письмо"); + Блокировка.Заблокировать(); - РассчитатьРассмотреноПоПапкам(ТаблицаДанныхДляРасчетаРассмотрено(МассивПапокДляРасчета, "Папка")); + Для каждого СтрокаТаблицы Из ТаблицаПапок Цикл + УстановитьПапкуЭлектронногоПисьма(СтрокаТаблицы.Письмо, СтрокаТаблицы.Папка, Ложь); + Если ЗначениеЗаполнено(СтрокаТаблицы.Папка) И ПапкиДляРасчета.Найти(СтрокаТаблицы.Папка) = Неопределено Тогда + ПапкиДляРасчета.Добавить(СтрокаТаблицы.Папка); + КонецЕсли; + КонецЦикла; + + РассчитатьРассмотреноПоПапкам(ТаблицаДанныхДляРасчетаРассмотрено(ПапкиДляРасчета, "Папка")); + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; КонецПроцедуры @@ -6521,16 +6558,33 @@ // ДокументОбъект.ЭлектронноеПисьмоВходящее - письмо для которого выполняется процедура. Процедура ОтработатьПризнакИзмененияПометкиУдаленияПриЗаписиПисьма(ПисьмоОбъект) Экспорт - Если ПисьмоОбъект.ПометкаУдаления <> ПисьмоОбъект.ДополнительныеСвойства.ПометкаУдаления Тогда - Если НЕ ПисьмоОбъект.ДополнительныеСвойства.Свойство("ОбработаноИзменениеПометкиУдаления") Тогда - Если ПисьмоОбъект.ПометкаУдаления = Истина Тогда - Папка = ОпределитьПапкуДляПисьмаПоУмолчанию(ПисьмоОбъект.Ссылка); - Иначе - Папка = ОпределитьПапкуДляПисьма(ПисьмоОбъект.Ссылка); - КонецЕсли; - ВзаимодействияВызовСервера.УстановитьПапкуЭлектронногоПисьма(ПисьмоОбъект.Ссылка, Папка); - КонецЕсли; + Если ПисьмоОбъект.ПометкаУдаления = ПисьмоОбъект.ДополнительныеСвойства.ПометкаУдаления Тогда + Возврат; КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + Если НЕ ПисьмоОбъект.ДополнительныеСвойства.Свойство("ОбработаноИзменениеПометкиУдаления") Тогда + Если ПисьмоОбъект.ПометкаУдаления = Истина Тогда + Папка = ОпределитьПапкуДляПисьмаПоУмолчанию(ПисьмоОбъект.Ссылка); + Иначе + Папка = ОпределитьПапкуДляПисьма(ПисьмоОбъект.Ссылка); + КонецЕсли; + УстановитьПапкуЭлектронногоПисьма(ПисьмоОбъект.Ссылка, Папка); + КонецЕсли; + +КонецПроцедуры + +// Устанавливает папку электронного письма. +// Параметры: +// Ссылка - ссылка на письмо, +// Папка - устанавливаемая папка электронного письма. +// +Процедура УстановитьПапкуЭлектронногоПисьма(Ссылка, Папка, РассчитыватьРассмотрено = Истина) Экспорт + + СтруктураДляЗаписи = РегистрыСведений.ПредметыПапкиВзаимодействий.РеквизитыВзаимодействия(); + СтруктураДляЗаписи.Папка = Папка; + СтруктураДляЗаписи.РассчитыватьРассмотрено = РассчитыватьРассмотрено; + РегистрыСведений.ПредметыПапкиВзаимодействий.ЗаписатьПредметыПапкиВзаимодействий(Ссылка, СтруктураДляЗаписи); КонецПроцедуры @@ -6631,13 +6685,21 @@ КонецЕсли; - Выборка = Запрос.Выполнить().Выбрать(); - - Пока Выборка.Следующий() Цикл - - РегистрыСведений.СостоянияПапокПисем.ВыполнитьЗаписьВРегистр(Выборка.Папка, Выборка.НеРассмотрено); - - КонецЦикла; + ПапкиПисем = Запрос.Выполнить().Выгрузить(); + НачатьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных; + РегистрыСведений.СостоянияПапокПисем.ЗаблокироватьСостоянияПапокПисем(Блокировка, ПапкиПисем, "Папка"); + Блокировка.Заблокировать(); + + Для каждого ПапкаПисем Из ПапкиПисем Цикл + РегистрыСведений.СостоянияПапокПисем.ВыполнитьЗаписьВРегистр(ПапкаПисем.Папка, ПапкаПисем.НеРассмотрено); + КонецЦикла; + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; КонецПроцедуры @@ -6657,168 +6719,175 @@ Пока Истина Цикл - Запрос = Новый Запрос; - Запрос.Текст = " - |ВЫБРАТЬ РАЗЛИЧНЫЕ ПЕРВЫЕ 100 + Запрос = Новый Запрос; + Запрос.Текст = " + |ВЫБРАТЬ РАЗЛИЧНЫЕ ПЕРВЫЕ 1000 + | КонтактыВзаимодействий.Контакт + |ПОМЕСТИТЬ КонтактыДляРасчета + |ИЗ + | РегистрСведений.КонтактыВзаимодействий КАК КонтактыВзаимодействий + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СостоянияКонтактовВзаимодействий КАК СостоянияКонтактовВзаимодействий + | ПО КонтактыВзаимодействий.Контакт = СостоянияКонтактовВзаимодействий.Контакт + |ГДЕ + | СостоянияКонтактовВзаимодействий.Контакт ЕСТЬ NULL + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ РАЗЛИЧНЫЕ + | КонтактыВзаимодействий.Контакт, + | МАКСИМУМ(Взаимодействия.Дата) КАК ДатаПоследнегоВзаимодействия, + | СУММА(ВЫБОР + | КОГДА ПредметыПапкиВзаимодействий.Рассмотрено + | ТОГДА 0 + | ИНАЧЕ 1 + | КОНЕЦ) КАК КоличествоНеРассмотрено + |ИЗ + | КонтактыДляРасчета КАК КонтактыДляРасчета + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КонтактыВзаимодействий КАК КонтактыВзаимодействий + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ЖурналДокументов.Взаимодействия КАК Взаимодействия + | ПО КонтактыВзаимодействий.Взаимодействие = Взаимодействия.Ссылка + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ПредметыПапкиВзаимодействий КАК ПредметыПапкиВзаимодействий + | ПО КонтактыВзаимодействий.Взаимодействие = ПредметыПапкиВзаимодействий.Взаимодействие + | ПО КонтактыДляРасчета.Контакт = КонтактыВзаимодействий.Контакт + | + |СГРУППИРОВАТЬ ПО + | КонтактыВзаимодействий.Контакт"; + + Результат = Запрос.Выполнить(); + Если Результат.Пустой() Тогда + Возврат; + КонецЕсли; + + ОбновитьСостоянияКонтактовВзаимодействий(Результат.Выгрузить()); + + КонецЦикла; + Возврат; + + КонецЕсли; + + Запрос = Новый Запрос; + Если ТипЗнч(ДанныеДляРасчета) = Тип("ТаблицаЗначений") Тогда + + ТекстКонтактыДляРасчета = + "ВЫБРАТЬ + | КонтактыДляРасчета.ПоЧемуРассчитывать КАК Контакт + |ПОМЕСТИТЬ КонтактыДляРасчета + |ИЗ + | &КонтактыДляРасчета КАК КонтактыДляРасчета + | + |ИНДЕКСИРОВАТЬ ПО + | Контакт + |; + | + |////////////////////////////////////////////////////////////////////////////////"; + + Запрос.УстановитьПараметр("КонтактыДляРасчета", ДанныеДляРасчета); + + ИначеЕсли ТипЗнч(ДанныеДляРасчета) = Тип("ВыборкаИзРезультатаЗапроса") Тогда + + МассивВзаимодействий = Новый Массив; + Пока ДанныеДляРасчета.Следующий() Цикл + МассивВзаимодействий.Добавить(ДанныеДляРасчета.Взаимодействие); + КонецЦикла; + + ТекстКонтактыДляРасчета = + "ВЫБРАТЬ РАЗЛИЧНЫЕ | КонтактыВзаимодействий.Контакт |ПОМЕСТИТЬ КонтактыДляРасчета |ИЗ | РегистрСведений.КонтактыВзаимодействий КАК КонтактыВзаимодействий - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СостоянияКонтактовВзаимодействий КАК СостоянияКонтактовВзаимодействий - | ПО КонтактыВзаимодействий.Контакт = СостоянияКонтактовВзаимодействий.Контакт |ГДЕ - | СостоянияКонтактовВзаимодействий.Контакт ЕСТЬ NULL + | КонтактыВзаимодействий.Взаимодействие В(&МассивВзаимодействий) + | + |ИНДЕКСИРОВАТЬ ПО + | Контакт |; | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ РАЗЛИЧНЫЕ - | КонтактыВзаимодействий.Контакт, - | МАКСИМУМ(Взаимодействия.Дата) КАК ДатаПоследнегоВзаимодействия, - | СУММА(ВЫБОР - | КОГДА ПредметыПапкиВзаимодействий.Рассмотрено - | ТОГДА 0 - | ИНАЧЕ 1 - | КОНЕЦ) КАК КоличествоНеРассмотрено + |////////////////////////////////////////////////////////////////////////////////"; + + Запрос.УстановитьПараметр("МассивВзаимодействий", МассивВзаимодействий); + + ИначеЕсли ТипЗнч(ДанныеДляРасчета) = Тип("Массив") Тогда + + ТекстКонтактыДляРасчета = + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | КонтактыВзаимодействий.Контакт + |ПОМЕСТИТЬ КонтактыДляРасчета |ИЗ - | КонтактыДляРасчета КАК КонтактыДляРасчета - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КонтактыВзаимодействий КАК КонтактыВзаимодействий - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ЖурналДокументов.Взаимодействия КАК Взаимодействия - | ПО КонтактыВзаимодействий.Взаимодействие = Взаимодействия.Ссылка - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ПредметыПапкиВзаимодействий КАК ПредметыПапкиВзаимодействий - | ПО КонтактыВзаимодействий.Взаимодействие = ПредметыПапкиВзаимодействий.Взаимодействие - | ПО КонтактыДляРасчета.Контакт = КонтактыВзаимодействий.Контакт + | РегистрСведений.КонтактыВзаимодействий КАК КонтактыВзаимодействий + |ГДЕ + | КонтактыВзаимодействий.Взаимодействие В(&МассивВзаимодействий) | - |СГРУППИРОВАТЬ ПО - | КонтактыВзаимодействий.Контакт"; - - Результат = Запрос.Выполнить(); - Если Результат.Пустой() Тогда - Возврат; - КонецЕсли; - - Выборка = Результат.Выбрать(); - Пока Выборка.Следующий() Цикл - - РегистрыСведений.СостоянияКонтактовВзаимодействий.ВыполнитьЗаписьВРегистр(Выборка.Контакт, - Выборка.КоличествоНеРассмотрено, - Выборка.ДатаПоследнегоВзаимодействия); - КонецЦикла; - - КонецЦикла; - - Иначе - - Запрос = Новый Запрос; - - Если ТипЗнч(ДанныеДляРасчета) = Тип("ТаблицаЗначений") Тогда - - ТекстКонтактыДляРасчета = - "ВЫБРАТЬ - | КонтактыДляРасчета.ПоЧемуРассчитывать КАК Контакт - |ПОМЕСТИТЬ КонтактыДляРасчета - |ИЗ - | &КонтактыДляРасчета КАК КонтактыДляРасчета - | - |ИНДЕКСИРОВАТЬ ПО - | Контакт - |; - | - |////////////////////////////////////////////////////////////////////////////////"; - - Запрос.УстановитьПараметр("КонтактыДляРасчета", ДанныеДляРасчета); - - ИначеЕсли ТипЗнч(ДанныеДляРасчета) = Тип("ВыборкаИзРезультатаЗапроса") Тогда - - МассивВзаимодействий = Новый Массив; - Пока ДанныеДляРасчета.Следующий() Цикл - МассивВзаимодействий.Добавить(ДанныеДляРасчета.Взаимодействие); - КонецЦикла; - - ТекстКонтактыДляРасчета = - "ВЫБРАТЬ РАЗЛИЧНЫЕ - | КонтактыВзаимодействий.Контакт - |ПОМЕСТИТЬ КонтактыДляРасчета - |ИЗ - | РегистрСведений.КонтактыВзаимодействий КАК КонтактыВзаимодействий - |ГДЕ - | КонтактыВзаимодействий.Взаимодействие В(&МассивВзаимодействий) - | - |ИНДЕКСИРОВАТЬ ПО - | Контакт - |; - | - |////////////////////////////////////////////////////////////////////////////////"; - - Запрос.УстановитьПараметр("МассивВзаимодействий", МассивВзаимодействий); - - ИначеЕсли ТипЗнч(ДанныеДляРасчета) = Тип("Массив") Тогда - - ТекстКонтактыДляРасчета = - "ВЫБРАТЬ РАЗЛИЧНЫЕ - | КонтактыВзаимодействий.Контакт - |ПОМЕСТИТЬ КонтактыДляРасчета - |ИЗ - | РегистрСведений.КонтактыВзаимодействий КАК КонтактыВзаимодействий - |ГДЕ - | КонтактыВзаимодействий.Взаимодействие В(&МассивВзаимодействий) - | - |ИНДЕКСИРОВАТЬ ПО - | Контакт - |; - | - |////////////////////////////////////////////////////////////////////////////////"; - - Запрос.УстановитьПараметр("МассивВзаимодействий", ДанныеДляРасчета); - - Иначе - - Возврат; - - КонецЕсли; - - Запрос.Текст = ТекстКонтактыДляРасчета + " - |ВЫБРАТЬ - | ВложенныйЗапрос.Контакт, - | МАКСИМУМ(ВложенныйЗапрос.ДатаПоследнегоВзаимодействия) КАК ДатаПоследнегоВзаимодействия, - | СУММА(ВложенныйЗапрос.КоличествоНеРассмотрено) КАК КоличествоНеРассмотрено - |ИЗ - | (ВЫБРАТЬ РАЗЛИЧНЫЕ - | КонтактыВзаимодействий.Контакт КАК Контакт, - | Взаимодействия.Ссылка КАК Ссылка, - | ЕСТЬNULL(Взаимодействия.Дата, ДАТАВРЕМЯ(1, 1, 1)) КАК ДатаПоследнегоВзаимодействия, - | ВЫБОР - | КОГДА ЕСТЬNULL(ПредметыПапкиВзаимодействий.Рассмотрено, ИСТИНА) - | ТОГДА 0 - | ИНАЧЕ 1 - | КОНЕЦ КАК КоличествоНеРассмотрено - | ИЗ - | КонтактыДляРасчета КАК КонтактыДляРасчета - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактыВзаимодействий КАК КонтактыВзаимодействий - | ЛЕВОЕ СОЕДИНЕНИЕ ЖурналДокументов.Взаимодействия КАК Взаимодействия - | ПО КонтактыВзаимодействий.Взаимодействие = Взаимодействия.Ссылка - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПредметыПапкиВзаимодействий КАК ПредметыПапкиВзаимодействий - | ПО КонтактыВзаимодействий.Взаимодействие = ПредметыПапкиВзаимодействий.Взаимодействие - | ПО КонтактыДляРасчета.Контакт = КонтактыВзаимодействий.Контакт) КАК ВложенныйЗапрос + |ИНДЕКСИРОВАТЬ ПО + | Контакт + |; | - |СГРУППИРОВАТЬ ПО - | ВложенныйЗапрос.Контакт"; + |////////////////////////////////////////////////////////////////////////////////"; - Результат = Запрос.Выполнить(); - Выборка = Результат.Выбрать(); + Запрос.УстановитьПараметр("МассивВзаимодействий", ДанныеДляРасчета); - Пока Выборка.Следующий() Цикл + Иначе + Возврат; + КонецЕсли; + + Запрос.Текст = ТекстКонтактыДляРасчета + " + |ВЫБРАТЬ + | ВложенныйЗапрос.Контакт, + | МАКСИМУМ(ВложенныйЗапрос.ДатаПоследнегоВзаимодействия) КАК ДатаПоследнегоВзаимодействия, + | СУММА(ВложенныйЗапрос.КоличествоНеРассмотрено) КАК КоличествоНеРассмотрено + |ИЗ + | (ВЫБРАТЬ РАЗЛИЧНЫЕ + | КонтактыВзаимодействий.Контакт КАК Контакт, + | Взаимодействия.Ссылка КАК Ссылка, + | ЕСТЬNULL(Взаимодействия.Дата, ДАТАВРЕМЯ(1, 1, 1)) КАК ДатаПоследнегоВзаимодействия, + | ВЫБОР + | КОГДА ЕСТЬNULL(ПредметыПапкиВзаимодействий.Рассмотрено, ИСТИНА) + | ТОГДА 0 + | ИНАЧЕ 1 + | КОНЕЦ КАК КоличествоНеРассмотрено + | ИЗ + | КонтактыДляРасчета КАК КонтактыДляРасчета + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактыВзаимодействий КАК КонтактыВзаимодействий + | ЛЕВОЕ СОЕДИНЕНИЕ ЖурналДокументов.Взаимодействия КАК Взаимодействия + | ПО КонтактыВзаимодействий.Взаимодействие = Взаимодействия.Ссылка + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПредметыПапкиВзаимодействий КАК ПредметыПапкиВзаимодействий + | ПО КонтактыВзаимодействий.Взаимодействие = ПредметыПапкиВзаимодействий.Взаимодействие + | ПО КонтактыДляРасчета.Контакт = КонтактыВзаимодействий.Контакт) КАК ВложенныйЗапрос + | + |СГРУППИРОВАТЬ ПО + | ВложенныйЗапрос.Контакт"; + + Результат = Запрос.Выполнить(); + Если Результат.Пустой() Тогда + Возврат; + КонецЕсли; + + ОбновитьСостоянияКонтактовВзаимодействий(Результат.Выгрузить()); + +КонецПроцедуры + +Процедура ОбновитьСостоянияКонтактовВзаимодействий(СостоянияКонтактовВзаимодействий) + + НачатьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных; + РегистрыСведений.СостоянияКонтактовВзаимодействий.ЗаблокироватьСостоянияКонтактовВзаимодействий(Блокировка, + СостоянияКонтактовВзаимодействий, "Контакт"); + Блокировка.Заблокировать(); + Для каждого Выборка Из СостоянияКонтактовВзаимодействий Цикл Если Выборка.ДатаПоследнегоВзаимодействия = Дата(1, 1, 1) Тогда РегистрыСведений.СостоянияКонтактовВзаимодействий.УдалитьЗаписьИзРегистра(Выборка.Контакт); Иначе РегистрыСведений.СостоянияКонтактовВзаимодействий.ВыполнитьЗаписьВРегистр(Выборка.Контакт, - Выборка.КоличествоНеРассмотрено, - Выборка.ДатаПоследнегоВзаимодействия); + Выборка.КоличествоНеРассмотрено, Выборка.ДатаПоследнегоВзаимодействия); КонецЕсли; - КонецЦикла; - - КонецЕсли; + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; КонецПроцедуры @@ -6956,23 +7025,30 @@ КонецЕсли; - Выборка = Запрос.Выполнить().Выбрать(); - - Пока Выборка.Следующий() Цикл - - Если Выборка.ДатаПоследнегоВзаимодействия <> Дата(1,1,1) ИЛИ Выборка.Активен = Истина Тогда - РегистрыСведений.СостоянияПредметовВзаимодействий.ВыполнитьЗаписьВРегистр(Выборка.Предмет, - Выборка.КоличествоНеРассмотрено, - Выборка.ДатаПоследнегоВзаимодействия, - Выборка.Активен); - Иначе - - РегистрыСведений.СостоянияПредметовВзаимодействий.УдалитьЗаписьИзРегистра(Выборка.Предмет); - - КонецЕсли; + СостоянияПредметовВзаимодействий = Запрос.Выполнить().Выгрузить(); - КонецЦикла; + НачатьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных; + РегистрыСведений.СостоянияПредметовВзаимодействий.ЗаблокироватьСостоянияПредметовВзаимодействий(Блокировка, + СостоянияПредметовВзаимодействий, "Предмет"); + Блокировка.Заблокировать(); + Для каждого Выборка Из СостоянияПредметовВзаимодействий Цикл + Если Выборка.ДатаПоследнегоВзаимодействия <> Дата(1,1,1) ИЛИ Выборка.Активен = Истина Тогда + РегистрыСведений.СостоянияПредметовВзаимодействий.ВыполнитьЗаписьВРегистр(Выборка.Предмет, + Выборка.КоличествоНеРассмотрено, Выборка.ДатаПоследнегоВзаимодействия, Выборка.Активен); + Иначе + РегистрыСведений.СостоянияПредметовВзаимодействий.УдалитьЗаписьИзРегистра(Выборка.Предмет); + КонецЕсли; + КонецЦикла; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + КонецПроцедуры // Формирует таблицу данных для расчета состояний папок и предметов взаимодействий. @@ -7183,7 +7259,7 @@ Если НЕ ЗначениеЗаполнено(ВремяСписка) Тогда ПредставлениеВремени = "00:00"; Иначе - ПредставлениеВремени = Формат(ВремяСписка,"ДФ=ЧЧ:мм"); + ПредставлениеВремени = Формат(ВремяСписка, НСтр("ru = 'ДФ=ЧЧ:мм'")); КонецЕсли; СписокВремен.Добавить(ВремяСписка, ПредставлениеВремени); @@ -7332,8 +7408,7 @@ // Заполняет данные регистра сведений КонтактыВзаимодействий для переданного массива взаимодействий. // // Параметры: -// МассивВзаимодействий - Массив - массив для которого будут заполнены данные о контактах. -// РассчитыватьРассмотрено - Булево - признак необходимости расчета состояний контактов взаимодействий. +// ДокументОбъект - ДокументОбъект. - документ, для которого выполняется запись. // Процедура ПриЗаписиДокумента(ДокументОбъект) Экспорт @@ -7343,6 +7418,12 @@ Возврат; КонецЕсли; + БлокировкаДанных = Новый БлокировкаДанных; + ЭлементБлокировкиДанных = БлокировкаДанных.Добавить("РегистрСведений.КонтактыВзаимодействий"); + ЭлементБлокировкиДанных.УстановитьЗначение("Взаимодействие", ДокументОбъект.Ссылка); + ЭлементБлокировкиДанных.Режим = РежимБлокировкиДанных.Исключительный; + БлокировкаДанных.Заблокировать(); + НаборЗаписей = РегистрыСведений.КонтактыВзаимодействий.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Взаимодействие.Установить(ДокументОбъект.Ссылка); @@ -7756,7 +7837,6 @@ ЭлементКнопкаПодменю.Вид = ВидКнопкиФормы.КнопкаКоманднойПанели; ЭлементКнопкаПодменю.ИмяКоманды = НоваяКоманда.Имя; ЭлементКнопкаПодменю.Заголовок = Статус.Представление; - ЭлементКнопкаПодменю.ТолькоВоВсехДействиях = Истина; КонецЦикла; @@ -7783,7 +7863,6 @@ ЭлементКнопкаПодменю.Вид = ВидКнопкиФормы.КнопкаКоманднойПанели; ЭлементКнопкаПодменю.ИмяКоманды = НоваяКоманда.Имя; ЭлементКнопкаПодменю.Заголовок = Отбор.Представление; - ЭлементКнопкаПодменю.ТолькоВоВсехДействиях = Истина; КонецЦикла; @@ -7791,7 +7870,7 @@ Процедура ОбработатьПодменюОтборПоТипуВзаимодействий(Форма) Экспорт - ШаблонЗаголовка = НСтр("ru = 'Тип взаимодействий: %1'"); + ШаблонЗаголовка = НСтр("ru = 'Показывать: %1'"); ПредставлениеТипа = СписокОтборовПоТипуВзаимодействий(Форма.ТолькоПочта).НайтиПоЗначению(Форма.ТипВзаимодействия).Представление; Форма.Элементы.СписокТипВзаимодействия.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонЗаголовка, ПредставлениеТипа); Для Каждого ЭлементПодменю Из Форма.Элементы.СписокТипВзаимодействия.ПодчиненныеЭлементы Цикл @@ -8173,4 +8252,27 @@ Возврат Константы.ЗапретитьОтображениеНебезопасногоСодержимогоВПисьмах.Получить(); КонецФункции +Процедура УстановитьУсловноеОформлениеСпискаВыбора(Форма, ИмяЭлемента, ИмяПоляКомпоновкиДанных) Экспорт + + Элементы = Форма.Элементы; + УсловноеОформление = Форма.УсловноеОформление; + + Для каждого ЭлементВыбора Из Элементы[ИмяЭлемента].СписокВыбора Цикл + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы[ИмяЭлемента].Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(ИмяПоляКомпоновкиДанных); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = ЭлементВыбора.Значение; + + Элемент.Оформление.УстановитьЗначениеПараметра("Текст", ЭлементВыбора.Представление); + + КонецЦикла; + +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/CommonModules/ВзаимодействияВызовСервера/Module.bsl b/SSL/src/CommonModules/ВзаимодействияВызовСервера/Module.bsl index 85caac4ec..3a1e7009e 100644 --- a/SSL/src/CommonModules/ВзаимодействияВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/ВзаимодействияВызовСервера/Module.bsl @@ -269,48 +269,44 @@ КонецЕсли; - Если ТипЗнч(Предмет) = Тип("РегистрСведенийКлючЗаписи.СостоянияПредметовВзаимодействий") Тогда - Предмет = Предмет.Предмет; - КонецЕсли; - - Запрос = Новый Запрос; - Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ - | ПредметыПапкиВзаимодействий.Предмет - |ИЗ - | РегистрСведений.ПредметыПапкиВзаимодействий КАК ПредметыПапкиВзаимодействий - |ГДЕ - | ПредметыПапкиВзаимодействий.Взаимодействие В(&МассивВзаимодействий) - | - |ОБЪЕДИНИТЬ ВСЕ - | - |ВЫБРАТЬ - | &Предмет"; - - Запрос.УстановитьПараметр("Предмет", Предмет); - Запрос.УстановитьПараметр("МассивВзаимодействий", МассивВзаимодействий); - - ВыборкаПредметы = Запрос.Выполнить().Выбрать(); - - Для Каждого Взаимодействие Из МассивВзаимодействий Цикл - Взаимодействия.УстановитьПредмет(Взаимодействие, Предмет, Ложь); - КонецЦикла; - - Взаимодействия.РассчитатьРассмотреноПоПредметам(Взаимодействия.ТаблицаДанныхДляРасчетаРассмотрено(ВыборкаПредметы, "Предмет")); - -КонецПроцедуры - -// Устанавливает папку электронного письма. -// Параметры: -// Ссылка - ссылка на письмо, -// Папка - устанавливаемая папка электронного письма. -// -Процедура УстановитьПапкуЭлектронногоПисьма(Ссылка, Папка, РассчитыватьРассмотрено = Истина) Экспорт - - СтруктураДляЗаписи = РегистрыСведений.ПредметыПапкиВзаимодействий.РеквизитыВзаимодействия(); - СтруктураДляЗаписи.Папка = Папка; - СтруктураДляЗаписи.РассчитыватьРассмотрено = РассчитыватьРассмотрено; - РегистрыСведений.ПредметыПапкиВзаимодействий.ЗаписатьПредметыПапкиВзаимодействий(Ссылка, СтруктураДляЗаписи); - + НачатьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных; + РегистрыСведений.ПредметыПапкиВзаимодействий.ЗаблокироватьПредметыПапокВзаимодействий(Блокировка, МассивВзаимодействий); + Блокировка.Заблокировать(); + + Если ТипЗнч(Предмет) = Тип("РегистрСведенийКлючЗаписи.СостоянияПредметовВзаимодействий") Тогда + Предмет = Предмет.Предмет; + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ + | ПредметыПапкиВзаимодействий.Предмет + |ИЗ + | РегистрСведений.ПредметыПапкиВзаимодействий КАК ПредметыПапкиВзаимодействий + |ГДЕ + | ПредметыПапкиВзаимодействий.Взаимодействие В(&МассивВзаимодействий) + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | &Предмет"; + + Запрос.УстановитьПараметр("Предмет", Предмет); + Запрос.УстановитьПараметр("МассивВзаимодействий", МассивВзаимодействий); + + ВыборкаПредметы = Запрос.Выполнить().Выбрать(); + + Для Каждого Взаимодействие Из МассивВзаимодействий Цикл + Взаимодействия.УстановитьПредмет(Взаимодействие, Предмет, Ложь); + КонецЦикла; + + Взаимодействия.РассчитатьРассмотреноПоПредметам(Взаимодействия.ТаблицаДанныхДляРасчетаРассмотрено(ВыборкаПредметы, "Предмет")); + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; КонецПроцедуры // Преобразует письмо в двоичные данные и подготавливает к сохранению на диск. @@ -342,7 +338,7 @@ ПапкаДляСохранитьКак = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("НастройкиПрограммы", "ПапкаДляСохранитьКак"); ДанныеФайла.Вставить("ПапкаДляСохранитьКак", ПапкаДляСохранитьКак); ДанныеФайла.ДатаМодификацииУниверсальная = ТекущаяДатаСеанса(); - ДанныеФайла.ПолноеНаименованияВерсия = ДанныеФайла.ИмяФайла; + ДанныеФайла.ПолноеНаименованиеВерсии = ДанныеФайла.ИмяФайла; КонецЕсли; @@ -372,7 +368,7 @@ СтруктураДанныхФайла.Вставить("Зашифрован", Ложь); СтруктураДанныхФайла.Вставить("ФайлРедактируется", Ложь); СтруктураДанныхФайла.Вставить("ФайлРедактируетТекущийПользователь", Ложь); - СтруктураДанныхФайла.Вставить("ПолноеНаименованияВерсия", ""); + СтруктураДанныхФайла.Вставить("ПолноеНаименованиеВерсии", ""); Возврат СтруктураДанныхФайла; diff --git a/SSL/src/CommonModules/ВзаимодействияКлиент/Module.bsl b/SSL/src/CommonModules/ВзаимодействияКлиент/Module.bsl index 72886bb1c..cb5c831f7 100644 --- a/SSL/src/CommonModules/ВзаимодействияКлиент/Module.bsl +++ b/SSL/src/CommonModules/ВзаимодействияКлиент/Module.bsl @@ -558,7 +558,7 @@ Процедура ВопросПриИзмененииФорматаСообщенияНаОбычныйТекст(Форма, ДополнительныеПараметры = Неопределено) Экспорт ОбработчикОповещенияОЗакрытии = Новый ОписаниеОповещения("ВопросПриИзмененииФорматаПриЗакрытии", Форма, ДополнительныеПараметры); - ТекстСообщения = НСтр("ru='При преобразовании этого сообщения в обычный текст будут утеряны все элементы оформления, картинки и прочие вставленные элементы. Продолжить?'"); + ТекстСообщения = НСтр("ru = 'При преобразовании этого сообщения в обычный текст будут утеряны все элементы оформления, картинки и прочие вставленные элементы. Продолжить?'"); ПоказатьВопрос(ОбработчикОповещенияОЗакрытии, ТекстСообщения, РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Нет, НСтр("ru = 'Изменение формата письма'")); КонецПроцедуры diff --git a/SSL/src/CommonModules/ВзаимодействияКлиентСервер/Module.bsl b/SSL/src/CommonModules/ВзаимодействияКлиентСервер/Module.bsl index 504b759d4..2585edcd5 100644 --- a/SSL/src/CommonModules/ВзаимодействияКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ВзаимодействияКлиентСервер/Module.bsl @@ -334,7 +334,7 @@ // очистить связанные отборы ГруппаОтбора = ОбщегоНазначенияКлиентСервер.СоздатьГруппуЭлементовОтбора( - Отбор.Элементы,НСтр("ru = 'Отбор по типу взаимодействий'"),ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ); + Отбор.Элементы, НСтр("ru = 'Отбор по типу взаимодействий'"), ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ); // установить отборы для типа Если ТипВзаимодействия = "ВсеПисьма" Тогда diff --git a/SSL/src/CommonModules/ВзаимодействияЛокализация/Module.bsl b/SSL/src/CommonModules/ВзаимодействияЛокализация/Module.bsl new file mode 100644 index 000000000..26d8d1a15 --- /dev/null +++ b/SSL/src/CommonModules/ВзаимодействияЛокализация/Module.bsl @@ -0,0 +1,41 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2019, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область СлужебныйПрограммныйИнтерфейс + +// Преобразовывает указанный пользователем телефонный номер, в формат, который принимает провайдер отправки SMS/ +// +// Параметры: +// Номер - Строка - телефонный номер, указанный пользователем, +// НомерДляОтправки - Строка - в данный параметр помещается результат преобразования +// +Процедура ОтформатироватьТелефонныйНомерДляОтправки(Номер, НомерДляОтправки) Экспорт + + Результат = ""; + ДопустимыеСимволы = "+1234567890"; + Для Позиция = 1 По СтрДлина(Номер) Цикл + Символ = Сред(Номер,Позиция,1); + Если СтрНайти(ДопустимыеСимволы, Символ) > 0 Тогда + Результат = Результат + Символ; + КонецЕсли; + КонецЦикла; + + Если СтрДлина(Результат) > 10 Тогда + ПервыйСимвол = Лев(Результат, 1); + Если ПервыйСимвол = "8" Тогда + Результат = "+7" + Сред(Результат, 2); + ИначеЕсли ПервыйСимвол <> "+" Тогда + Результат = "+" + Результат; + КонецЕсли; + КонецЕсли; + + НомерДляОтправки = Результат; + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/ВзаимодействияЛокализация/ВзаимодействияЛокализация.mdo b/SSL/src/CommonModules/ВзаимодействияЛокализация/ВзаимодействияЛокализация.mdo new file mode 100644 index 000000000..f54b8fb2e --- /dev/null +++ b/SSL/src/CommonModules/ВзаимодействияЛокализация/ВзаимодействияЛокализация.mdo @@ -0,0 +1,11 @@ + + + ВзаимодействияЛокализация + + ru + Взаимодействия локализация + + true + true + true + diff --git a/SSL/src/CommonModules/ВзаимодействияСобытия/Module.bsl b/SSL/src/CommonModules/ВзаимодействияСобытия/Module.bsl index ea56b91c8..4886b4e08 100644 --- a/SSL/src/CommonModules/ВзаимодействияСобытия/Module.bsl +++ b/SSL/src/CommonModules/ВзаимодействияСобытия/Module.bsl @@ -85,7 +85,7 @@ | ДокументВзаимодействий.Тема ПОДОБНО &СтрокаПоиска | ИЛИ ДокументВзаимодействий.Номер ПОДОБНО &СтрокаПоиска"; - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "Документ.#ИмяДокумента", ИмяДокумента); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#ИмяДокумента", "Документ" + "." + ИмяДокумента); Запрос = Новый Запрос(ТекстЗапроса); Запрос.УстановитьПараметр("СтрокаПоиска", Параметры.СтрокаПоиска + "%"); diff --git a/SSL/src/CommonModules/ВнешниеКомпонентыВМоделиСервисаСлужебный/Module.bsl b/SSL/src/CommonModules/ВнешниеКомпонентыВМоделиСервисаСлужебный/Module.bsl index 11b7af2bd..a332125e1 100644 --- a/SSL/src/CommonModules/ВнешниеКомпонентыВМоделиСервисаСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ВнешниеКомпонентыВМоделиСервисаСлужебный/Module.bsl @@ -27,40 +27,53 @@ ВнешниеКомпонентыСлужебный.ПредставлениеКомпоненты( ОписаниеКомпоненты.Идентификатор, ОписаниеКомпоненты.Версия))); - - Ссылка = Справочники.ОбщиеВнешниеКомпоненты.НайтиПоИдентификатору( - ОписаниеКомпоненты.Идентификатор, - ОписаниеКомпоненты.Версия); - - Если Ссылка.Пустая() Тогда - ОбщаяКомпонента = Справочники.ОбщиеВнешниеКомпоненты.СоздатьЭлемент(); - Иначе - ОбщаяКомпонента = Ссылка.ПолучитьОбъект(); - КонецЕсли; - - ОбщаяКомпонента.Заполнить(Неопределено); // Конструктор по умолчанию. - - ДвоичныеДанныеКомпоненты = Новый ДвоичныеДанные(ОписаниеКомпоненты.ПутьКФайлу); - Информация = ВнешниеКомпонентыСлужебный.ИнформацияОКомпонентеИзФайла(ДвоичныеДанныеКомпоненты, Ложь); - - Если Не Информация.Разобрано Тогда - ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые внешние компоненты.Загрузка поставляемой компоненты'", - ОбщегоНазначения.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка, , , Информация.ОписаниеОшибки); - Возврат; - КонецЕсли; - - ЗаполнитьЗначенияСвойств(ОбщаяКомпонента, Информация.Реквизиты); // По данным манифеста. - ЗаполнитьЗначенияСвойств(ОбщаяКомпонента, ОписаниеКомпоненты); // По данным с сайта. - - ОбщаяКомпонента.ХранилищеКомпоненты = Новый ХранилищеЗначения(ДвоичныеДанныеКомпоненты); + НачатьТранзакцию(); Попытка + Ссылка = Справочники.ОбщиеВнешниеКомпоненты.НайтиПоИдентификатору( + ОписаниеКомпоненты.Идентификатор, + ОписаниеКомпоненты.Версия); + + Если Ссылка.Пустая() Тогда + ОбщаяКомпонента = Справочники.ОбщиеВнешниеКомпоненты.СоздатьЭлемент(); + Иначе + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Справочник.ОбщиеВнешниеКомпоненты"); + ЭлементБлокировки.УстановитьЗначение("Ссылка", Ссылка); + Блокировка.Заблокировать(); + + ОбщаяКомпонента = Ссылка.ПолучитьОбъект(); + ОбщаяКомпонента.Заблокировать(); + КонецЕсли; + + ОбщаяКомпонента.Заполнить(Неопределено); // Конструктор по умолчанию. + + ДвоичныеДанныеКомпоненты = Новый ДвоичныеДанные(ОписаниеКомпоненты.ПутьКФайлу); + Информация = ВнешниеКомпонентыСлужебный.ИнформацияОКомпонентеИзФайла(ДвоичныеДанныеКомпоненты, Ложь); + + Если Не Информация.Разобрано Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Поставляемую компоненту не удалось разобрать + |по причине: + |%1'"), + Информация.ОписаниеОшибки); + КонецЕсли; + + ЗаполнитьЗначенияСвойств(ОбщаяКомпонента, Информация.Реквизиты); // По данным манифеста. + ЗаполнитьЗначенияСвойств(ОбщаяКомпонента, ОписаниеКомпоненты); // По данным с сайта. + + ОбщаяКомпонента.ХранилищеКомпоненты = Новый ХранилищеЗначения(ДвоичныеДанныеКомпоненты); + ОбщаяКомпонента.Записать(); + + ЗафиксироватьТранзакцию(); Исключение - ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые внешние компоненты.Загрузка поставляемой компоненты'", + ОтменитьТранзакцию(); + ЗаписьЖурналаРегистрации( + НСтр("ru = 'Поставляемые внешние компоненты.Загрузка поставляемой компоненты'", ОбщегоНазначения.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + УровеньЖурналаРегистрации.Ошибка,,, + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; УстановитьПривилегированныйРежим(Ложь); diff --git a/SSL/src/CommonModules/ВнешниеКомпонентыСервер/Module.bsl b/SSL/src/CommonModules/ВнешниеКомпонентыСервер/Module.bsl index 1c7304607..b060c3716 100644 --- a/SSL/src/CommonModules/ВнешниеКомпонентыСервер/Module.bsl +++ b/SSL/src/CommonModules/ВнешниеКомпонентыСервер/Module.bsl @@ -77,7 +77,8 @@ Запрос.Текст = "ВЫБРАТЬ | ВнешниеКомпоненты.Ссылка КАК Ссылка, - | ВнешниеКомпоненты.Идентификатор КАК Идентификатор + | ВнешниеКомпоненты.Идентификатор КАК Идентификатор, + | ВнешниеКомпоненты.ДатаВерсии КАК ДатаВерсии |ИЗ | Справочник.ВнешниеКомпоненты КАК ВнешниеКомпоненты |ГДЕ @@ -145,29 +146,42 @@ Отбор = Новый Структура("Идентификатор", СтрокаРезультата.Идентификатор); Если Выборка.НайтиСледующий(Отбор) Тогда - Объект = Выборка.Ссылка.ПолучитьОбъект(); - // Когда уже загружена компонента по дате более свежая, чем на Портале 1С:ИТС, обновление не следует выполнять. - Если Объект.ДатаВерсии > СтрокаРезультата.ДатаВерсии Тогда + Если Выборка.ДатаВерсии > СтрокаРезультата.ДатаВерсии Тогда Продолжить; КонецЕсли; - ЗаполнитьЗначенияСвойств(Объект, Информация.Реквизиты); // По данным манифеста. - ЗаполнитьЗначенияСвойств(Объект, СтрокаРезультата); // По данным с сайта. - - Объект.ДополнительныеСвойства.Вставить("ДвоичныеДанныеКомпоненты", Информация.ДвоичныеДанные); - - Объект.ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Загружена с Портала 1С:ИТС. %1.'"), - ТекущаяДатаСеанса()); - + НачатьТранзакцию(); Попытка + + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Справочник.ВнешниеКомпоненты"); + ЭлементБлокировки.УстановитьЗначение("Ссылка", Выборка.Ссылка); + Блокировка.Заблокировать(); + + Объект = Выборка.Ссылка.ПолучитьОбъект(); + Объект.Заблокировать(); + + ЗаполнитьЗначенияСвойств(Объект, Информация.Реквизиты); // По данным манифеста. + ЗаполнитьЗначенияСвойств(Объект, СтрокаРезультата); // По данным с сайта. + + Объект.ДополнительныеСвойства.Вставить("ДвоичныеДанныеКомпоненты", Информация.ДвоичныеДанные); + + Объект.ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Загружена с Портала 1С:ИТС. %1.'"), + ТекущаяДатаСеанса()); + Объект.Записать(); - Результат = Результат - + ПредставлениеКомпоненты + " - " + НСтр("ru = 'Успешно обновлена.'") + Символы.ПС; + + Результат = Результат + ПредставлениеКомпоненты + + " - " + НСтр("ru = 'Успешно обновлена.'") + Символы.ПС; + + ЗафиксироватьТранзакцию(); Исключение - Результат = Результат - + ПредставлениеКомпоненты + " - " + КраткоеПредставлениеОшибки(ИнформацияОбОшибке()) + Символы.ПС; + ОтменитьТранзакцию(); + Результат = Результат + ПредставлениеКомпоненты + + " - " + КраткоеПредставлениеОшибки(ИнформацияОбОшибке()) + Символы.ПС; + ЗаписьЖурналаРегистрации(НСтр("ru = 'Обновление внешних компонент'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); diff --git a/SSL/src/CommonModules/ВнешниеКомпонентыСлужебныйВызовСервера/Module.bsl b/SSL/src/CommonModules/ВнешниеКомпонентыСлужебныйВызовСервера/Module.bsl index 0dd3ad3dc..f8d26acf4 100644 --- a/SSL/src/CommonModules/ВнешниеКомпонентыСлужебныйВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/ВнешниеКомпонентыСлужебныйВызовСервера/Module.bsl @@ -12,7 +12,24 @@ // Функция ИнформацияОСохраненнойКомпоненте(Идентификатор, Версия = Неопределено) Экспорт - Возврат ВнешниеКомпонентыСлужебный.ИнформацияОСохраненнойКомпоненте(Идентификатор, Версия); + Результат = ВнешниеКомпонентыСлужебный.ИнформацияОСохраненнойКомпоненте(Идентификатор, Версия); + Если Результат.Состояние = "НайденаВХранилище" Или Результат.Состояние = "НайденаВОбщемХранилище" Тогда + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Для идентификатора %1 (версия %2) получена внешняя компонента %3 (версия %4). + |Состояние: %5'"), + Идентификатор, ?(Версия <> Неопределено, Версия, НСтр("ru = 'не указана'")), Результат.Реквизиты.Наименование, + Результат.Реквизиты.Версия, Результат.Состояние); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Внешние компоненты'", ОбщегоНазначения.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Информация,, Результат.Ссылка, ТекстСообщения); + Иначе + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Для идентификатора %1 (версия %2) не удалось получить внешнюю компоненту. + |Состояние: %3'"), + Идентификатор, ?(Версия <> Неопределено, Версия, НСтр("ru = 'не указана'")), Результат.Состояние); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Внешние компоненты'", ОбщегоНазначения.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Предупреждение,,, ТекстСообщения); + КонецЕсли; + Возврат Результат; КонецФункции diff --git a/SSL/src/CommonModules/ВнешниеПользователи/Module.bsl b/SSL/src/CommonModules/ВнешниеПользователи/Module.bsl index 427682241..2c0b3d497 100644 --- a/SSL/src/CommonModules/ВнешниеПользователи/Module.bsl +++ b/SSL/src/CommonModules/ВнешниеПользователи/Module.bsl @@ -58,16 +58,14 @@ Если ЗначениеЗаполнено(ОбъектАвторизации) Тогда Если ПользователиСлужебный.ОбъектАвторизацииИспользуется(ОбъектАвторизации, ВнешнийПользователь) Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка в базе данных: - |Объект авторизации ""%1"" (%2) - |установлен для нескольких внешних пользователей.'"), + НСтр("ru = 'Объект авторизации ""%1"" (%2) + |установлен для нескольких внешних пользователей.'"), ОбъектАвторизации, ТипЗнч(ОбъектАвторизации)); КонецЕсли; Иначе ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка в базе данных: - |Для внешнего пользователя ""%1"" не задан объект авторизации.'"), + НСтр("ru = 'Для внешнего пользователя ""%1"" не задан объект авторизации.'"), ВнешнийПользователь); КонецЕсли; diff --git a/SSL/src/CommonModules/ВызовОнлайнПоддержкиКлиент/Module.bsl b/SSL/src/CommonModules/ВызовОнлайнПоддержкиКлиент/Module.bsl index f2161bad4..cfe46b902 100644 --- a/SSL/src/CommonModules/ВызовОнлайнПоддержкиКлиент/Module.bsl +++ b/SSL/src/CommonModules/ВызовОнлайнПоддержкиКлиент/Module.bsl @@ -25,6 +25,16 @@ #КонецОбласти +#Область СлужебныйПрограммныйИнтерфейс + +Процедура ОткрытьФормуНастройкаОнлайнПоддержки() Экспорт + + ОткрытьФорму("ОбщаяФорма.НастройкаОнлайнПоддержки"); + +КонецПроцедуры + +#КонецОбласти + #Область СлужебныеПроцедурыИФункции // Возвращает уникальный идентификатор клиента 1С (приложение). @@ -43,6 +53,9 @@ #Если ВебКлиент Тогда Возврат ""; #Иначе + Если Не ОбщегоНазначенияКлиент.ЭтоWindowsКлиент() Тогда + Возврат ""; + КонецЕсли; Значение = ""; @@ -100,18 +113,12 @@ // Булево - При значении Истина файл запустится по указанному пути. // Процедура НаличиеФайлаВызовОнлайнПоддержки(ОповещениеОЗакрытии, Путь) - Оповещение = Новый ОписаниеОповещения("НаличиеФайлаВызовОнлайнПоддержкиПослеИнициализацииФайла", ЭтотОбъект, ОповещениеОЗакрытии); - ПроверяемыйФайл = Новый Файл(); - ПроверяемыйФайл.НачатьИнициализацию(Оповещение, Путь); -КонецПроцедуры - -// Продолжение процедуры (см. выше). -Процедура НаличиеФайлаВызовОнлайнПоддержкиПослеИнициализацииФайла(Файл, ОповещениеОЗакрытии) Экспорт + ПроверяемыйФайл = Новый Файл(Путь); Оповещение = Новый ОписаниеОповещения("НаличиеФайлаВызовОнлайнПоддержкиПослеПроверкиСуществования", ЭтотОбъект, ОповещениеОЗакрытии); - Если НРег(Файл.Расширение) <> ".exe" Тогда + Если НРег(ПроверяемыйФайл.Расширение) <> ".exe" Тогда ВыполнитьОбработкуОповещения(ОповещениеОЗакрытии, Ложь); Иначе - Файл.НачатьПроверкуСуществования(Оповещение); + ПроверяемыйФайл.НачатьПроверкуСуществования(Оповещение); КонецЕсли; КонецПроцедуры @@ -131,7 +138,7 @@ КонецЕсли; Оповещение = Новый ОписаниеОповещения("ВызватьОнлайнПоддержкуПослеУстановкиРасширения", ЭтотОбъект); - ТекстСообщения = НСтр("ru = 'Для запуска приложения необходимо установить расширение работы с файлами.'"); + ТекстСообщения = НСтр("ru = 'Для запуска приложения необходимо установить расширение для работы с 1С:Предприятием.'"); ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботыСФайлами(Оповещение, ТекстСообщения, Ложь); КонецПроцедуры diff --git a/SSL/src/CommonModules/ГрафикиРаботы/Module.bsl b/SSL/src/CommonModules/ГрафикиРаботы/Module.bsl index dae84fd42..2bcee573e 100644 --- a/SSL/src/CommonModules/ГрафикиРаботы/Module.bsl +++ b/SSL/src/CommonModules/ГрафикиРаботы/Module.bsl @@ -398,6 +398,17 @@ КонецПроцедуры +// Добавляет в список изменяемых объектов регистр календарных графиков. +// +// Параметры: +// - ИзменяемыеОбъекты - массив, имена метаданных изменяемых объектов. +// +Процедура ЗаполнитьИзменяемыеОбъектыЗависимыеОтПроизводственныхКалендарей(ИзменяемыеОбъекты) Экспорт + + ИзменяемыеОбъекты.Добавить("РегистрСведений.КалендарныеГрафики"); + +КонецПроцедуры + // Создает временную таблицу ВТКалендарныеГрафики, содержащую данные графика ГрафикРаботы за годы, // приведенные в ВТРазличныеГодыГрафика. // @@ -465,7 +476,7 @@ КонецЕсли; Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "3.1.1.142"; + Обработчик.Версия = "3.1.2.78"; Обработчик.Процедура = "РегистрыСведений.КалендарныеГрафики.ОбработатьДанныеДляПереходаНаНовуюВерсию"; Обработчик.ОчередьОтложеннойОбработки = 2; Обработчик.ПроцедураЗаполненияДанныхОбновления = "РегистрыСведений.КалендарныеГрафики.ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию"; @@ -493,4 +504,4 @@ КонецПроцедуры -#КонецОбласти +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ДатыЗапретаИзменения/Module.bsl b/SSL/src/CommonModules/ДатыЗапретаИзменения/Module.bsl index d86ff27a5..76ceaba64 100644 --- a/SSL/src/CommonModules/ДатыЗапретаИзменения/Module.bsl +++ b/SSL/src/CommonModules/ДатыЗапретаИзменения/Module.bsl @@ -10,8 +10,6 @@ // Проверяет, запрещено ли изменение данных при интерактивном редактировании пользователем // или при программной загрузке данных из узла плана обмена УзелПроверкиЗапретаЗагрузки. -// Для корректной работы функции требуется предварительная настройка -// процедуры ЗаполнитьИсточникиДанныхДляПроверкиЗапретаИзменения модуля ДатыЗапретаИзмененияПереопределяемый. // // Параметры: // ДанныеИлиПолноеИмя - СправочникОбъект, @@ -112,10 +110,8 @@ КонецФункции -// Проверяет наличие запрета загрузки элемента данных или набор записей Данные. +// Проверяет наличие запрета загрузки объекта или набора записей Данные. // При этом выполняется проверка старой и новой версии данных. -// Для корректной работы требуется предварительная настройка -// процедуры ДанныеДляПроверкиЗапретаИзменения модуля ДатыЗапретаИзмененияПереопределяемый. // // Параметры: // Данные - СправочникОбъект, @@ -235,7 +231,7 @@ // Данные - ТаблицаЗначений - передается в процедуру ЗаполнитьИсточникиДанныхДляПроверкиЗапретаИзменения. // Таблица - Строка - полное имя объекта метаданных, например "Документ.ПриходнаяНакладная". // ПолеДаты - Строка - имя реквизита объекта или табличной части, например: "Дата", "Товары.ДатаОтгрузки". -// Раздел - Строка - имя предопределенного элемента ПланВидовХарактеристикСсылка.РазделыДатЗапрета. +// Раздел - Строка - имя предопределенного элемента ПланВидовХарактеристикСсылка.РазделыДатЗапретаИзменения. // ПолеОбъекта - Строка - имя реквизита объекта или реквизита табличной части, например: "Организация", "Товары.Склад". // Процедура ДобавитьСтроку(Данные, Таблица, ПолеДаты, Раздел = "", ПолеОбъекта = "") Экспорт diff --git a/SSL/src/CommonModules/ДатыЗапретаИзмененияПереопределяемый/Module.bsl b/SSL/src/CommonModules/ДатыЗапретаИзмененияПереопределяемый/Module.bsl index 739b9c693..c75d76c4a 100644 --- a/SSL/src/CommonModules/ДатыЗапретаИзмененияПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ДатыЗапретаИзмененияПереопределяемый/Module.bsl @@ -106,6 +106,81 @@ +КонецПроцедуры + +// Позволяет переопределить получение данных для проверки даты запрета старой (существующей) версии данных. +// +// Параметры: +// ОбъектМетаданных - ОбъектМетаданных - объект метаданных получаемых данных. +// ИдентификаторДанных - СправочникСсылка, +// ДокументСсылка, +// ПланВидовХарактеристикСсылка, +// ПланСчетовСсылка, +// ПланВидовРасчетаСсылка, +// БизнесПроцессСсылка, +// ЗадачаСсылка, +// ПланОбменаСсылка, +// Отбор - ссылка на элемент данных или отбор набора записей, который нужно проверить. +// При этом значение для проверки будет получено из базы данных. +// +// УзелПроверкиЗапретаЗагрузки - Неопределено, ПланыОбменаСсылка - если Неопределено, то проверить запрет +// изменения данных; иначе - загрузку данных из указанного узла плана обмена. +// +// ДанныеДляПроверки - ТаблицаЗначений - таблица для заполнения правил проверок и последующей передачи в +// функцию НайденЗапретИзмененияДанных общего модуля ДатыЗапретаИзменения. +// см. ДатыЗапретаИзменения.ШаблонДанныхДляПроверки. +// +// Пример: +// Если ТипЗнч(ИдентификаторДанных) = Тип("ДокументСсылка.Заказ") Тогда +// Данные = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ИдентификаторДанных, "Организация, ДатаОкончанияРабот, ЗаказНаряд"); +// Если Данные.ЗаказНаряд Тогда +// Проверка = ДанныеДляПроверки.Добавить(); +// Проверка.Раздел = "ЗаказНаряды"; +// Проверка.Объект = Данные.Организация; +// Проверка.Дата = Данные.ДатаОкончанияРабот; +// КонецЕсли; +// КонецЕсли; +// +Процедура ПередПроверкойСтаройВерсииДанных(ОбъектМетаданных, ИдентификаторДанных, УзелПроверкиЗапретаЗагрузки, ДанныеДляПроверки) Экспорт + +КонецПроцедуры + +// Позволяет переопределить получение данных для проверки даты запрета новой (будущей) версии данных. +// +// Параметры: +// ОбъектМетаданных - ОбъектМетаданных - объект метаданных получаемых данных. +// Данные - СправочникОбъект, +// ДокументОбъект, +// ПланВидовХарактеристикОбъект, +// ПланСчетовОбъект, +// ПланВидовРасчетаОбъект, +// БизнесПроцессОбъект, +// ЗадачаОбъект, +// ПланОбменаОбъект, +// РегистрСведенийНаборЗаписей, +// РегистрНакопленияНаборЗаписей, +// РегистрБухгалтерииНаборЗаписей, +// РегистрРасчетаНаборЗаписей - проверяемый элемент данных или набор записей. +// +// УзелПроверкиЗапретаЗагрузки - Неопределено, ПланыОбменаСсылка - если Неопределено, то проверить запрет +// изменения данных; иначе - загрузку данных из указанного узла плана обмена. +// +// ДанныеДляПроверки - ТаблицаЗначений - таблица для заполнения правил проверок и последующей передачи в +// функцию НайденЗапретИзмененияДанных общего модуля ДатыЗапретаИзменения. +// см. ДатыЗапретаИзменения.ШаблонДанныхДляПроверки. +// +// Пример: +// Если ТипЗнч(Данные) = Тип("ДокументОбъект.Заказ") И Данные.ЗаказНаряд Тогда +// +// Проверка = ДанныеДляПроверки.Добавить(); +// Проверка.Раздел = "ЗаказНаряды"; +// Проверка.Объект = Данные.Организация; +// Проверка.Дата = Данные.ДатаОкончанияРабот; +// +// КонецЕсли; +// +Процедура ПередПроверкойНовойВерсииДанных(ОбъектМетаданных, Данные, УзелПроверкиЗапретаЗагрузки, ДанныеДляПроверки) Экспорт + КонецПроцедуры #КонецОбласти diff --git a/SSL/src/CommonModules/ДатыЗапретаИзмененияСлужебный/Module.bsl b/SSL/src/CommonModules/ДатыЗапретаИзмененияСлужебный/Module.bsl index ce1e4c5cf..675cebb3b 100644 --- a/SSL/src/CommonModules/ДатыЗапретаИзмененияСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ДатыЗапретаИзмененияСлужебный/Module.bsl @@ -155,6 +155,15 @@ КонецПроцедуры +// Обработчики событий подсистемы Управление доступом. + +// См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа. +Процедура ПриЗаполненииСписковСОграничениемДоступа(Списки) Экспорт + + Списки.Вставить(Метаданные.РегистрыСведений.ДатыЗапретаИзменения, Истина); + +КонецПроцедуры + // Обработчики событий библиотеки ТехнологияСервиса. // См. ВыгрузкаЗагрузкаДанныхПереопределяемый.ПриЗаполненииТиповОбщихДанныхПоддерживающихСопоставлениеСсылокПриЗагрузке. @@ -483,10 +492,6 @@ ЗапретНайден = Ложь; ДействующиеДаты = ДействующиеДатыЗапрета(); - ДатыЗапретаПоОбъектамНеУказаны = ?(УзелПроверкиЗапретаЗагрузки = Неопределено, - ДействующиеДаты.ДляПользователей.ДатыЗапретаПоОбъектамНеУказаны, - ДействующиеДаты.ДляИнформационныхБаз.ДатыЗапретаПоОбъектамНеУказаны); - // Проверка старой версии объекта или набора записей. Если ИдентификаторДанных <> Неопределено Тогда ОписаниеДанных = Новый Структура; @@ -504,7 +509,7 @@ КонецЕсли; ДанныеДляПроверки = ДанныеДляПроверкиИзБазыДанных(Данные, - ИдентификаторДанных, ДействующиеДаты, ДатыЗапретаПоОбъектамНеУказаны); + ИдентификаторДанных, ДействующиеДаты, УзелПроверкиЗапретаЗагрузки); ДанныеИДаты = Новый Структура; ДанныеИДаты.Вставить("ДействующиеДаты", ДействующиеДаты); @@ -522,7 +527,7 @@ ОписаниеДанных.Вставить("Данные", Данные); ДанныеДляПроверки = ДанныеДляПроверкиИзОбъекта(Данные, - ДействующиеДаты, ДатыЗапретаПоОбъектамНеУказаны); + ДействующиеДаты, УзелПроверкиЗапретаЗагрузки); ДанныеИДаты = Новый Структура; ДанныеИДаты.Вставить("ДействующиеДаты", ДействующиеДаты); @@ -903,7 +908,7 @@ КонецФункции // Для функции ИзменениеИлиЗагрузкаЗапрещена. -Функция ДанныеДляПроверкиИзБазыДанных(Данные, ИдентификаторДанных, ДействующиеДаты, ДатыЗапретаПоОбъектамНеУказаны) +Функция ДанныеДляПроверкиИзБазыДанных(Данные, ИдентификаторДанных, ДействующиеДаты, УзелПроверкиЗапретаЗагрузки) Если ТипЗнч(ИдентификаторДанных) = Тип("Отбор") Тогда Если ТипЗнч(Данные) = Тип("Строка") Тогда @@ -916,6 +921,19 @@ КонецЕсли; Таблица = ОбъектМетаданных.ПолноеИмя(); + + ДанныеДляПроверки = ДатыЗапретаИзменения.ШаблонДанныхДляПроверки(); + ДатыЗапретаИзмененияПереопределяемый.ПередПроверкойСтаройВерсииДанных(ОбъектМетаданных, ИдентификаторДанных, + УзелПроверкиЗапретаЗагрузки, ДанныеДляПроверки); + + Если ДанныеДляПроверки.Количество() > 0 Тогда + Возврат ДанныеДляПроверки; + КонецЕсли; + + ДатыЗапретаПоОбъектамНеУказаны = ?(УзелПроверкиЗапретаЗагрузки = Неопределено, + ДействующиеДаты.ДляПользователей.ДатыЗапретаПоОбъектамНеУказаны, + ДействующиеДаты.ДляИнформационныхБаз.ДатыЗапретаПоОбъектамНеУказаны); + ИсточникиДанных = ПолучитьИсточникиДанных(ДействующиеДаты, Таблица); ДанныеДляПроверки = ДатыЗапретаИзменения.ШаблонДанныхДляПроверки(); @@ -961,7 +979,7 @@ // например, &УсловиеОтбора. // // Возвращаемое значение: -// Строка. +// Строка - . // Процедура ВставитьПараметрыИУсловиеОтбора(Запрос, Отбор, @@ -986,10 +1004,23 @@ КонецПроцедуры // Для функции ИзменениеИлиЗагрузкаЗапрещена. -Функция ДанныеДляПроверкиИзОбъекта(Данные, ДействующиеДаты, ДатыЗапретаПоОбъектамНеУказаны) +Функция ДанныеДляПроверкиИзОбъекта(Данные, ДействующиеДаты, УзелПроверкиЗапретаЗагрузки) ЗначенияПолей = Новый Структура; ОбъектМетаданных = Данные.Метаданные(); + + ДанныеДляПроверки = ДатыЗапретаИзменения.ШаблонДанныхДляПроверки(); + ДатыЗапретаИзмененияПереопределяемый.ПередПроверкойНовойВерсииДанных(ОбъектМетаданных, Данные, + УзелПроверкиЗапретаЗагрузки, ДанныеДляПроверки); + + Если ДанныеДляПроверки.Количество() > 0 Тогда + Возврат ДанныеДляПроверки; + КонецЕсли; + + ДатыЗапретаПоОбъектамНеУказаны = ?(УзелПроверкиЗапретаЗагрузки = Неопределено, + ДействующиеДаты.ДляПользователей.ДатыЗапретаПоОбъектамНеУказаны, + ДействующиеДаты.ДляИнформационныхБаз.ДатыЗапретаПоОбъектамНеУказаны); + Таблица = ОбъектМетаданных.ПолноеИмя(); ИсточникиДанных = ПолучитьИсточникиДанных(ДействующиеДаты, Таблица); @@ -1404,12 +1435,7 @@ Для Каждого Строка Из Таблицы Цикл ИсточникиТаблицы = Новый Структура; Попытка - ВРегИмяТаблица = ВРег(Строка.Таблица); - Если СтрНачинаетсяС(ВРегИмяТаблица, ВРег("РегистрСведений")) - Или СтрНачинаетсяС(ВРегИмяТаблица, ВРег("РегистрНакопления")) - Или СтрНачинаетсяС(ВРегИмяТаблица, ВРег("РегистрБухгалтерии")) - Или СтрНачинаетсяС(ВРегИмяТаблица, ВРег("РегистрРасчета")) Тогда - + Если СтандартныеПодсистемыСервер.ЭтоТаблицаРегистра(Строка.Таблица) Тогда ТипЭлемента = Тип(СтрЗаменить(Строка.Таблица, ".", "КлючЗаписи.")); ЭтоРегистр = Истина; Иначе @@ -1443,7 +1469,7 @@ Если СвойстваРаздела = Неопределено Тогда ВызватьИсключение ЗаголовокОшибки + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Для проверки запрета изменения в источнике данных указан несуществующий - |раздел ""%1"" для таблицы ""%2"".'"), + |раздел ""%1"" для таблицы ""%2"" (см. ДатыЗапретаИзмененияПереопределяемый.ЗаполнитьИсточникиДанныхДляПроверкиЗапретаИзменения).'"), Строка.Раздел, Строка.Таблица); КонецЕсли; Источник = Новый Структура; diff --git a/SSL/src/CommonModules/ДлительныеОперации/Module.bsl b/SSL/src/CommonModules/ДлительныеОперации/Module.bsl index 0927a7c07..9e0ef8e36 100644 --- a/SSL/src/CommonModules/ДлительныеОперации/Module.bsl +++ b/SSL/src/CommonModules/ДлительныеОперации/Module.bsl @@ -8,6 +8,245 @@ #Область ПрограммныйИнтерфейс +// Запустить выполнение функции в фоновом задании, если это возможно. +// +// При выполнении любого из следующих условий запуск выполняется не в фоне, а сразу в основном потоке: +// * если вызов выполняется в файловой базе во внешнем соединении (в этом режиме фоновые задания не поддерживаются); +// * если приложение запущено в режиме отладки (параметр /C РежимОтладки) - для упрощения отладки конфигурации; +// * если в файловой ИБ имеются активные фоновые задания - для снижения времени ожидания пользователя; +// * если выполняется функция модуля внешней обработки или внешнего отчета. +// +// Не следует использовать эту функцию, если необходимо безусловно запускать фоновое задание. +// Может применяться совместно с функцией ДлительныеОперацииКлиент.ОжидатьЗавершение. +// +// Вызываемая функция может быть с произвольным числом параметров, но не более 7. +// Значения передаваемых параметров функции, а также возвращаемое значение должны быть сериализуемыми. +// Параметры функции не должны быть возвращаемыми. +// +// Параметры: +// ИмяФункции - Строка - имя экспортной функции общего модуля, модуля менеджера объекта +// или модуля обработки, которую необходимо выполнить в фоне. +// Например, "МойОбщийМодуль.МояПроцедура", "Отчеты.ЗагруженныеДанные.Сформировать" +// или "Обработки.ЗагрузкаДанных.МодульОбъекта.Загрузить". +// +// ПараметрыВыполнения - Структура - см. ДлительныеОперации.ПараметрыВыполненияФункции; +// - ФормаКлиентскогоПриложения - форма, из которой из которой выполняется вызов; +// - УникальныйИдентификатор - идентификатор формы, из которой выполняется вызов. +// +// Параметр1...ПараметрN - Произвольный - произвольные параметры вызова функции. +// Количество параметров может быть от 0 до 7. +// +// Возвращаемое значение: +// Структура - параметры выполнения задания: +// * Статус - Строка - "Выполняется", если задание еще не завершилось; +// "Выполнено", если задание было успешно выполнено; +// "Ошибка", если задание завершено с ошибкой; +// "Отменено", если задание отменено пользователем или администратором. +// * ИдентификаторЗадания - УникальныйИдентификатор - если Статус = "Выполняется", то содержит +// идентификатор запущенного фонового задания. +// * АдресРезультата - Строка - адрес временного хранилища, в которое будет +// помещен результат работы функции. +// * КраткоеПредставлениеОшибки - Строка - краткая информация об исключении, если Статус = "Ошибка". +// * ПодробноеПредставлениеОшибки - Строка - подробная информация об исключении, если Статус = "Ошибка". +// +// Пример: +// В общем виде процесс запуска и обработки результата длительной операции в модуле формы выглядит следующим образом: +// +// 1) Функция, которая будет исполняться в фоне, располагается в модуле менеджера объекта или в серверном общем модуле: +// Функция РассчитатьЗначение(Знач МойПараметр1, Знач МойПараметр2) Экспорт +// ... +// Возврат Результат; +// КонецФункции +// +// 2) Запуск операции на сервере и подключение обработчика ожидания: +// &НаКлиенте +// Процедура РассчитатьЗначение() +// ДлительнаяОперация = НачатьВыполнениеНаСервере(); +// ОповещениеОЗавершении = Новый ОписаниеОповещения("ОбработатьРезультат", ЭтотОбъект); +// ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект); +// ДлительныеОперацииКлиент.ОжидатьЗавершение(ДлительнаяОперация, ОповещениеОЗавершении, ПараметрыОжидания); +// КонецПроцедуры +// +// &НаСервере +// Функция НачатьВыполнениеНаСервере() +// ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияФункции(УникальныйИдентификатор); +// Возврат ДлительныеОперации.ВыполнитьФункцию(ПараметрыВыполнения, "Обработки.МояОбработка.РассчитатьЗначение", +// МойПараметр1, МойПараметр2); +// КонецФункции +// +// 3) Обработка результата длительной операции: +// &НаКлиенте +// Процедура ОбработатьРезультат(Результат, ДополнительныеПараметры) Экспорт +// Если Результат = Неопределено Тогда +// Возврат; +// КонецЕсли; +// ВывестиРезультат(Результат.АдресРезультата); +// КонецПроцедуры +// +Функция ВыполнитьФункцию(Знач ПараметрыВыполнения, ИмяФункции, Знач Параметр1 = Неопределено, + Знач Параметр2 = Неопределено, Знач Параметр3 = Неопределено, Знач Параметр4 = Неопределено, + Знач Параметр5 = Неопределено, Знач Параметр6 = Неопределено, Знач Параметр7 = Неопределено) Экспорт + + ПараметрыВызова = СписокПараметров(Параметр1, Параметр2, Параметр3, Параметр4, + Параметр5, Параметр6, Параметр7); + + ПараметрыВыполнения = ПодготовитьПараметрыВыполнения(ПараметрыВыполнения, Истина); + + Возврат ВыполнитьВФоне(ИмяФункции, ПараметрыВызова, ПараметрыВыполнения); + +КонецФункции + +// Запустить выполнение процедуры в фоновом задании, если это возможно. +// +// При выполнении любого из следующих условий запуск выполняется не в фоне, а сразу в основном потоке: +// * если вызов выполняется в файловой базе во внешнем соединении (в этом режиме фоновые задания не поддерживаются); +// * если приложение запущено в режиме отладки (параметр /C РежимОтладки) - для упрощения отладки конфигурации; +// * если в файловой ИБ имеются активные фоновые задания - для снижения времени ожидания пользователя; +// * если выполняется процедура модуля внешней обработки или внешнего отчета. +// +// Не следует использовать эту функцию, если необходимо безусловно запускать фоновое задание. +// Может применяться совместно с функцией ДлительныеОперацииКлиент.ОжидатьЗавершение. +// +// Вызываемая процедура может быть с произвольным числом параметров, но не более 7. +// Значения передаваемых параметров процедуры, а также возвращаемое значение должны быть сериализуемыми. +// Параметры процедуры не должны быть возвращаемыми. +// +// Параметры: +// ИмяПроцедуры - Строка - имя экспортной процедуры общего модуля, модуля менеджера объекта +// или модуля обработки, которую необходимо выполнить в фоне. +// Например, "МойОбщийМодуль.МояПроцедура", "Отчеты.ЗагруженныеДанные.Сформировать" +// или "Обработки.ЗагрузкаДанных.МодульОбъекта.Загрузить". +// +// ПараметрыВыполнения - Структура - см. ДлительныеОперации.ПараметрыВыполненияПроцедуры. +// +// Параметр1...ПараметрN - Произвольный - произвольные параметры вызова процедуры. +// Количество параметров может быть от 0 до 7. +// Дополнительно последним параметром можно передать коллекцию +// ПараметрыВыполненияПроцедуры для настройки выполнения фонового задания +// (см. функцию ДлительныеОперации.ПараметрыВыполненияФункции). +// +// Возвращаемое значение: +// Структура - параметры выполнения задания: +// * Статус - Строка - "Выполняется", если задание еще не завершилось; +// "Выполнено", если задание было успешно выполнено; +// "Ошибка", если задание завершено с ошибкой; +// "Отменено", если задание отменено пользователем или администратором. +// * ИдентификаторЗадания - УникальныйИдентификатор - если Статус = "Выполняется", то содержит +// идентификатор запущенного фонового задания. +// * КраткоеПредставлениеОшибки - Строка - краткая информация об исключении, если Статус = "Ошибка". +// * ПодробноеПредставлениеОшибки - Строка - подробная информация об исключении, если Статус = "Ошибка". +// +// Пример: +// В общем виде процесс запуска и обработки результата длительной операции в модуле формы выглядит следующим образом: +// +// 1) Процедура, которая будет исполняться в фоне, располагается в модуле менеджера объекта или в серверном общем модуле: +// Процедура ВыполнитьРасчет(Знач МойПараметр1, Знач МойПараметр2) Экспорт +// ... +// КонецПроцедуры +// +// 2) Запуск операции на сервере и подключение обработчика ожидания (при необходимости): +// &НаКлиенте +// Процедура ВыполнитьРасчет() +// ДлительнаяОперация = НачатьВыполнениеНаСервере(); +// ОповещениеОЗавершении = Новый ОписаниеОповещения("ОбработатьРезультат", ЭтотОбъект); +// ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект); +// ДлительныеОперацииКлиент.ОжидатьЗавершение(ДлительнаяОперация, ОповещениеОЗавершении, ПараметрыОжидания); +// КонецПроцедуры +// +// &НаСервере +// Функция НачатьВыполнениеНаСервере() +// Возврат ДлительныеОперации.ВыполнитьПроцедуру(, "Обработки.МояОбработка.ВыполнитьРасчет", +// МойПараметр1, МойПараметр2); +// КонецФункции +// +// 3) Обработка результата длительной операции: +// &НаКлиенте +// Процедура ОбработатьРезультат(Результат, ДополнительныеПараметры) Экспорт +// Если Результат = Неопределено Тогда +// Возврат; +// КонецЕсли; +// ПриЗавершенииРасчета(); +// КонецПроцедуры +// +Функция ВыполнитьПроцедуру(Знач ПараметрыВыполнения = Неопределено, ИмяПроцедуры, Знач Параметр1 = Неопределено, + Знач Параметр2 = Неопределено, Знач Параметр3 = Неопределено, Знач Параметр4 = Неопределено, + Знач Параметр5 = Неопределено, Знач Параметр6 = Неопределено, Знач Параметр7 = Неопределено) Экспорт + + ПараметрыВызова = СписокПараметров(Параметр1, Параметр2, Параметр3, Параметр4, + Параметр5, Параметр6, Параметр7); + + ПараметрыВыполнения = ПодготовитьПараметрыВыполнения(ПараметрыВыполнения, Ложь); + + Возврат ВыполнитьВФоне(ИмяПроцедуры, ПараметрыВызова, ПараметрыВыполнения); + +КонецФункции + +// Конструктор коллекции ПараметрыВыполненияФункции для функции ВыполнитьФункцию. +// +// Параметры: +// ИдентификаторФормы - УникальныйИдентификатор - уникальный идентификатор формы, +// во временное хранилище которой надо поместить результат выполнения процедуры. +// +// Возвращаемое значение: +// Структура - параметры выполнения длительной операции: +// * ИдентификаторФормы - УникальныйИдентификатор - уникальный идентификатор формы, +// во временное хранилище которой надо поместить результат выполнения процедуры. +// * ОжидатьЗавершение - Число - таймаут в секундах ожидания завершения фонового задания. +// Если задано Неопределено, то ждать до момента завершения задания. +// Если задано 0, то ждать завершения задания не требуется. +// По умолчанию - 2 секунды; а для низкой скорости соединения - 4. +// * НаименованиеФоновогоЗадания - Строка - описание фонового задания. По умолчанию - имя процедуры. +// * КлючФоновогоЗадания - Строка - уникальный ключ для активных фоновых заданий, имеющих такое же имя процедуры. +// По умолчанию не задан. +// * АдресРезультата - Строка - адрес временного хранилища, в которое должен быть помещен результат +// работы процедуры. Если не задан, адрес формируется автоматически. +// * ЗапуститьВФоне - Булево - если Истина, то задание будет всегда выполняться в фоне, +// за исключением режима отладки. +// В файловом варианте при наличии ранее запущенных заданий, +// новое задание становится в очередь и начинает выполняться после завершения предыдущих. +// * ЗапуститьНеВФоне - Булево - если Истина, задание всегда будет запускаться непосредственно, +// без использования фонового задания. +// * БезРасширений - Булево - если Истина, то фоновое задание будет запущено без подключения +// расширений конфигурации. +// +Функция ПараметрыВыполненияФункции(Знач ИдентификаторФормы) Экспорт + + Результат = ОбщиеПараметрыВыполненияВФоне(); + ДобавитьПараметрыВыполненияДляВозвратаРезультата(Результат, ИдентификаторФормы); + + Возврат Результат; + +КонецФункции + +// Конструктор коллекции ПараметрыВыполненияПроцедуры для функции ВыполнитьПроцедуру. +// +// Возвращаемое значение: +// Структура - параметры выполнения длительной операции: +// * ОжидатьЗавершение - Число - таймаут в секундах ожидания завершения фонового задания. +// Если задано Неопределено, то ждать до момента завершения задания. +// Если задано 0, то ждать завершения задания не требуется. +// По умолчанию - 2 секунды; а для низкой скорости соединения - 4. +// * НаименованиеФоновогоЗадания - Строка - описание фонового задания. По умолчанию - имя процедуры. +// * КлючФоновогоЗадания - Строка - уникальный ключ для активных фоновых заданий, имеющих такое же имя процедуры. +// По умолчанию не задан. +// * ЗапуститьВФоне - Булево - если Истина, то задание будет всегда выполняться в фоне, +// за исключением режима отладки. +// В файловом варианте при наличии ранее запущенных заданий, +// новое задание становится в очередь и начинает выполняться +// после завершения предыдущих. +// * ЗапуститьНеВФоне - Булево - если Истина, задание всегда будет запускаться непосредственно, +// без использования фонового задания. +// * БезРасширений - Булево - если Истина, то фоновое задание будет запущено без подключения +// расширений конфигурации. +// +Функция ПараметрыВыполненияПроцедуры() Экспорт + + Возврат ОбщиеПараметрыВыполненияВФоне(); + +КонецФункции + +// Вместо этой функции рекомендуется использовать функции ВыполнитьФункцию и ВыполнитьПроцедуру. +// // Запустить выполнение процедуры в фоновом задании, если это возможно. // При выполнении любого из следующих условий запуск выполняется не в фоне, а сразу в основном потоке: // * если вызов выполняется в файловой базе во внешнем соединении (в этом режиме фоновые задания не поддерживаются); @@ -105,15 +344,19 @@ КонецЕсли; #КонецЕсли - АдресРезультата = ?(ПараметрыВыполнения.АдресРезультата <> Неопределено, - ПараметрыВыполнения.АдресРезультата, - ПоместитьВоВременноеХранилище(Неопределено, ПараметрыВыполнения.ИдентификаторФормы)); + Если ПараметрыВыполнения.Свойство("АдресРезультата") И ПараметрыВыполнения.АдресРезультата = Неопределено Тогда + ПараметрыВыполнения.АдресРезультата = ПоместитьВоВременноеХранилище(Неопределено, ПараметрыВыполнения.ИдентификаторФормы); + КонецЕсли; Результат = Новый Структура; Результат.Вставить("Статус", "Выполняется"); Результат.Вставить("ИдентификаторЗадания", Неопределено); - Результат.Вставить("АдресРезультата", АдресРезультата); - Результат.Вставить("АдресДополнительногоРезультата", ""); + Если ПараметрыВыполнения.Свойство("АдресРезультата") Тогда + Результат.Вставить("АдресРезультата", ПараметрыВыполнения.АдресРезультата); + КонецЕсли; + Если ПараметрыВыполнения.Свойство("ДополнительныйРезультат") Тогда + Результат.Вставить("АдресДополнительногоРезультата", ""); + КонецЕсли; Результат.Вставить("КраткоеПредставлениеОшибки", ""); Результат.Вставить("ПодробноеПредставлениеОшибки", ""); Результат.Вставить("Сообщения", Новый ФиксированныйМассив(Новый Массив)); @@ -122,11 +365,14 @@ ПараметрыВыполнения.БезРасширений = ЗначениеЗаполнено(ПараметрыСеанса.ПодключенныеРасширения); КонецЕсли; - ПараметрыЭкспортнойПроцедуры = Новый Массив; - ПараметрыЭкспортнойПроцедуры.Добавить(ПараметрыПроцедуры); - ПараметрыЭкспортнойПроцедуры.Добавить(АдресРезультата); + ПараметрыЭкспортнойПроцедуры = ПараметрыПроцедуры; + Если Не ПараметрыВыполнения.Свойство("ЭтоФункция") Тогда + ПараметрыЭкспортнойПроцедуры = Новый Массив; + ПараметрыЭкспортнойПроцедуры.Добавить(ПараметрыПроцедуры); + ПараметрыЭкспортнойПроцедуры.Добавить(ПараметрыВыполнения.АдресРезультата); + КонецЕсли; - Если ПараметрыВыполнения.ДополнительныйРезультат Тогда + Если ПараметрыВыполнения.Свойство("ДополнительныйРезультат") И ПараметрыВыполнения.ДополнительныйРезультат Тогда Результат.АдресДополнительногоРезультата = ПоместитьВоВременноеХранилище(Неопределено, ПараметрыВыполнения.ИдентификаторФормы); ПараметрыЭкспортнойПроцедуры.Добавить(Результат.АдресДополнительногоРезультата); КонецЕсли; @@ -146,7 +392,11 @@ // Выполнить в основном потоке. Если ВыполнитьБезФоновогоЗадания Тогда Попытка - ВыполнитьПроцедуру(ИмяПроцедуры, ПараметрыЭкспортнойПроцедуры); + Если ПараметрыВыполнения.Свойство("ЭтоФункция") И ПараметрыВыполнения.ЭтоФункция Тогда + ВызватьФункцию(ИмяПроцедуры, ПараметрыЭкспортнойПроцедуры, ПараметрыВыполнения.АдресРезультата); + Иначе + ВызватьПроцедуру(ИмяПроцедуры, ПараметрыЭкспортнойПроцедуры); + КонецЕсли; Результат.Статус = "Выполнено"; Исключение Результат.Статус = "Ошибка"; @@ -232,16 +482,10 @@ // Функция ПараметрыВыполненияВФоне(Знач ИдентификаторФормы) Экспорт - Результат = Новый Структура; - Результат.Вставить("ИдентификаторФормы", ИдентификаторФормы); + Результат = ОбщиеПараметрыВыполненияВФоне(); + ДобавитьПараметрыВыполненияДляВозвратаРезультата(Результат, ИдентификаторФормы); Результат.Вставить("ДополнительныйРезультат", Ложь); - Результат.Вставить("ОжидатьЗавершение", ?(ПолучитьСкоростьКлиентскогоСоединения() = СкоростьКлиентскогоСоединения.Низкая, 4, 0.8)); - Результат.Вставить("НаименованиеФоновогоЗадания", ""); - Результат.Вставить("КлючФоновогоЗадания", ""); - Результат.Вставить("АдресРезультата", Неопределено); - Результат.Вставить("ЗапуститьНеВФоне", Ложь); - Результат.Вставить("ЗапуститьВФоне", Ложь); - Результат.Вставить("БезРасширений", Ложь); + Возврат Результат; КонецФункции @@ -262,7 +506,7 @@ // Процедура СообщитьПрогресс(Знач Процент = Неопределено, Знач Текст = Неопределено, Знач ДополнительныеПараметры = Неопределено) Экспорт - Если ПолучитьТекущийСеансИнформационнойБазы().ПолучитьФоновоеЗадание() = Неопределено Тогда + Если Не СтандартныеПодсистемыПовтИсп.ЭтоФоновоеЗадание() Тогда Возврат; КонецЕсли; @@ -362,36 +606,34 @@ Возврат Ложь; КонецЕсли; - ОперацияНеВыполнена = Истина; - ПоказатьПолныйТекстОшибки = Ложь; + ТекстОшибки = НСтр("ru = 'Не удалось выполнить данную операцию. + |Технические подробности см. в журнале регистрации.'"); Если Задание = Неопределено Тогда ЗаписьЖурналаРегистрации(НСтр("ru = 'Длительные операции.Фоновое задание не найдено'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , Строка(ИдентификаторЗадания)); - Иначе - Если Задание.Состояние = СостояниеФоновогоЗадания.ЗавершеноАварийно Тогда - ОшибкаЗадания = Задание.ИнформацияОбОшибке; - Если ОшибкаЗадания <> Неопределено Тогда - ПоказатьПолныйТекстОшибки = Истина; - КонецЕсли; - ИначеЕсли Задание.Состояние = СостояниеФоновогоЗадания.Отменено Тогда - ЗаписьЖурналаРегистрации( - НСтр("ru = 'Длительные операции.Фоновое задание отменено администратором'", ОбщегоНазначения.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка, - , - , - НСтр("ru = 'Задание завершилось с неизвестной ошибкой.'")); - Иначе - Возврат Истина; + ИначеЕсли Задание.Состояние = СостояниеФоновогоЗадания.ЗавершеноАварийно Тогда + ОшибкаЗадания = Задание.ИнформацияОбОшибке; + Если ОшибкаЗадания <> Неопределено Тогда + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '%1 + | + |Технические подробности: + |Ошибка выполнения фонового задания %2 с идентификатором %3 по причине + |%4 + | + |См. также журнал регистрации.'"), + КраткоеПредставлениеОшибки(Задание.ИнформацияОбОшибке), Задание.ИмяМетода, + Строка(ИдентификаторЗадания), ПодробноеПредставлениеОшибки(Задание.ИнформацияОбОшибке)); КонецЕсли; + ИначеЕсли Задание.Состояние = СостояниеФоновогоЗадания.Отменено Тогда + ЗаписьЖурналаРегистрации( + НСтр("ru = 'Длительные операции.Фоновое задание отменено администратором'", ОбщегоНазначения.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, , , НСтр("ru = 'Задание завершилось с неизвестной ошибкой.'")); + Иначе + Возврат Истина; КонецЕсли; - Если ПоказатьПолныйТекстОшибки Тогда - ТекстОшибки = КраткоеПредставлениеОшибки(Задание.ИнформацияОбОшибке); - ВызватьИсключение(ТекстОшибки); - ИначеЕсли ОперацияНеВыполнена Тогда - ВызватьИсключение(НСтр("ru = 'Не удалось выполнить данную операцию. - |Подробности см. в Журнале регистрации.'")); - КонецЕсли; + ВызватьИсключение ТекстОшибки; КонецФункции @@ -690,6 +932,7 @@ ВсеПараметры.Вставить("ИмяПроцедуры", ИмяПроцедуры); ВсеПараметры.Вставить("ПараметрыПроцедуры", ПараметрыПроцедуры); ВсеПараметры.Вставить("ПараметрыКлиентаНаСервере", СтандартныеПодсистемыСервер.ПараметрыКлиентаНаСервере()); + ВсеПараметры.Вставить("ПараметрыВыполнения", ПараметрыВыполнения); ПараметрыПроцедурыФоновогоЗадания = Новый Массив; ПараметрыПроцедурыФоновогоЗадания.Добавить(ВсеПараметры); @@ -710,16 +953,20 @@ Справочники.ВерсииРасширений.ЗарегистрироватьИспользованиеВерсииРасширений(); УстановитьПривилегированныйРежим(Ложь); - ВыполнитьПроцедуру(ВсеПараметры.ИмяПроцедуры, ВсеПараметры.ПараметрыПроцедуры); + Если ВсеПараметры.ПараметрыВыполнения.Свойство("ЭтоФункция") И ВсеПараметры.ПараметрыВыполнения.ЭтоФункция Тогда + ВызватьФункцию(ВсеПараметры.ИмяПроцедуры, ВсеПараметры.ПараметрыПроцедуры, ВсеПараметры.ПараметрыВыполнения.АдресРезультата); + Иначе + ВызватьПроцедуру(ВсеПараметры.ИмяПроцедуры, ВсеПараметры.ПараметрыПроцедуры); + КонецЕсли; КонецПроцедуры -Процедура ВыполнитьПроцедуру(ИмяПроцедуры, ПараметрыПроцедуры) +Процедура ВызватьПроцедуру(ИмяПроцедуры, ПараметрыВызова) ЧастиИмени = СтрРазделить(ИмяПроцедуры, "."); ЭтоПроцедураМодуляОбработки = (ЧастиИмени.Количество() = 4) И ВРег(ЧастиИмени[2]) = "МОДУЛЬОБЪЕКТА"; Если Не ЭтоПроцедураМодуляОбработки Тогда - ОбщегоНазначения.ВыполнитьМетодКонфигурации(ИмяПроцедуры, ПараметрыПроцедуры); + ОбщегоНазначения.ВыполнитьМетодКонфигурации(ИмяПроцедуры, ПараметрыВызова); Возврат; КонецЕсли; @@ -728,7 +975,7 @@ Если ЭтоОбработка Или ЭтоОтчет Тогда МенеджерОбъекта = ?(ЭтоОтчет, Отчеты, Обработки); ОбработкаОтчетОбъект = МенеджерОбъекта[ЧастиИмени[1]].Создать(); - ОбщегоНазначения.ВыполнитьМетодОбъекта(ОбработкаОтчетОбъект, ЧастиИмени[3], ПараметрыПроцедуры); + ОбщегоНазначения.ВыполнитьМетодОбъекта(ОбработкаОтчетОбъект, ЧастиИмени[3], ПараметрыВызова); Возврат; КонецЕсли; @@ -738,7 +985,7 @@ ВыполнитьПроверкуПравДоступа("ИнтерактивноеОткрытиеВнешнихОбработок", Метаданные); МенеджерОбъекта = ?(ЭтоВнешнийОтчет, ВнешниеОтчеты, ВнешниеОбработки); ОбработкаОтчетОбъект = МенеджерОбъекта.Создать(ЧастиИмени[1], БезопасныйРежим()); - ОбщегоНазначения.ВыполнитьМетодОбъекта(ОбработкаОтчетОбъект, ЧастиИмени[3], ПараметрыПроцедуры); + ОбщегоНазначения.ВыполнитьМетодОбъекта(ОбработкаОтчетОбъект, ЧастиИмени[3], ПараметрыВызова); Возврат; КонецЕсли; @@ -747,6 +994,42 @@ КонецПроцедуры +Процедура ВызватьФункцию(ИмяФункции, ПараметрыПроцедуры, АдресРезультата) + + ЧастиИмени = СтрРазделить(ИмяФункции, "."); + ЭтоПроцедураМодуляОбработки = (ЧастиИмени.Количество() = 4) И ВРег(ЧастиИмени[2]) = "МОДУЛЬОБЪЕКТА"; + Если Не ЭтоПроцедураМодуляОбработки Тогда + Результат = ОбщегоНазначения.ВызватьФункциюКонфигурации(ИмяФункции, ПараметрыПроцедуры); + ПоместитьВоВременноеХранилище(Результат, АдресРезультата); + Возврат; + КонецЕсли; + + ЭтоОбработка = ВРег(ЧастиИмени[0]) = "ОБРАБОТКА"; + ЭтоОтчет = ВРег(ЧастиИмени[0]) = "ОТЧЕТ"; + Если ЭтоОбработка Или ЭтоОтчет Тогда + МенеджерОбъекта = ?(ЭтоОтчет, Отчеты, Обработки); + ОбработкаОтчетОбъект = МенеджерОбъекта[ЧастиИмени[1]].Создать(); + Результат = ОбщегоНазначения.ВызватьФункциюОбъекта(ОбработкаОтчетОбъект, ЧастиИмени[3], ПараметрыПроцедуры); + ПоместитьВоВременноеХранилище(Результат, АдресРезультата); + Возврат; + КонецЕсли; + + ЭтоВнешняяОбработка = ВРег(ЧастиИмени[0]) = "ВНЕШНЯЯОБРАБОТКА"; + ЭтоВнешнийОтчет = ВРег(ЧастиИмени[0]) = "ВНЕШНИЙОТЧЕТ"; + Если ЭтоВнешняяОбработка Или ЭтоВнешнийОтчет Тогда + ВыполнитьПроверкуПравДоступа("ИнтерактивноеОткрытиеВнешнихОбработок", Метаданные); + МенеджерОбъекта = ?(ЭтоВнешнийОтчет, ВнешниеОтчеты, ВнешниеОбработки); + ОбработкаОтчетОбъект = МенеджерОбъекта.Создать(ЧастиИмени[1], БезопасныйРежим()); + Результат = ОбщегоНазначения.ВызватьФункциюОбъекта(ОбработкаОтчетОбъект, ЧастиИмени[3], ПараметрыПроцедуры); + ПоместитьВоВременноеХранилище(Результат, АдресРезультата); + Возврат; + КонецЕсли; + + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Неверный формат параметра ИмяФункции (переданное значение: %1)'"), ИмяФункции); + +КонецПроцедуры + Функция НайтиЗаданиеПоИдентификатору(Знач ИдентификаторЗадания) Если ТипЗнч(ИдентификаторЗадания) = Тип("Строка") Тогда @@ -868,4 +1151,73 @@ КонецФункции +Функция СписокПараметров(Знач Параметр1, Знач Параметр2, Знач Параметр3, Знач Параметр4, + Знач Параметр5, Знач Параметр6, Знач Параметр7) + + ПереданныеПараметры = Новый Массив; + ПереданныеПараметры.Добавить(Параметр7); + ПереданныеПараметры.Добавить(Параметр6); + ПереданныеПараметры.Добавить(Параметр5); + ПереданныеПараметры.Добавить(Параметр4); + ПереданныеПараметры.Добавить(Параметр3); + ПереданныеПараметры.Добавить(Параметр2); + ПереданныеПараметры.Добавить(Параметр1); + + Результат = Новый Массив; + + Для Каждого Параметр Из ПереданныеПараметры Цикл + Если Результат.Количество() = 0 И Параметр = Неопределено Тогда + Продолжить; + КонецЕсли; + Результат.Вставить(0, Параметр); + КонецЦикла; + + Возврат Результат; + +КонецФункции + +Функция ПодготовитьПараметрыВыполнения(ПереданныйПараметр, ДляФункции) + + Результат = ОбщиеПараметрыВыполненияВФоне(); + + Если ЗначениеЗаполнено(ПереданныйПараметр) Тогда + Если ТипЗнч(ПереданныйПараметр) = Тип("Структура") Тогда + Результат = ПереданныйПараметр; + ИначеЕсли ДляФункции Тогда + Идентификатор = Неопределено; + Если ТипЗнч(ПереданныйПараметр) = Тип("ФормаКлиентскогоПриложения") Тогда + Идентификатор = ПереданныйПараметр.УникальныйИдентификатор; + ИначеЕсли ТипЗнч(ПереданныйПараметр) = Тип("УникальныйИдентификатор") Тогда + Идентификатор = ПереданныйПараметр; + КонецЕсли; + ДобавитьПараметрыВыполненияДляВозвратаРезультата(Результат, Идентификатор); + КонецЕсли; + КонецЕсли; + + Результат.Вставить("ЭтоФункция", ДляФункции); + Возврат Результат; + +КонецФункции + +Функция ОбщиеПараметрыВыполненияВФоне() + + Результат = Новый Структура; + Результат.Вставить("ОжидатьЗавершение", ?(ПолучитьСкоростьКлиентскогоСоединения() = СкоростьКлиентскогоСоединения.Низкая, 4, 0.8)); + Результат.Вставить("НаименованиеФоновогоЗадания", ""); + Результат.Вставить("КлючФоновогоЗадания", ""); + Результат.Вставить("ЗапуститьНеВФоне", Ложь); + Результат.Вставить("ЗапуститьВФоне", Ложь); + Результат.Вставить("БезРасширений", Ложь); + + Возврат Результат; + +КонецФункции + +Процедура ДобавитьПараметрыВыполненияДляВозвратаРезультата(Параметры, ИдентификаторФормы) + + Параметры.Вставить("ИдентификаторФормы", ИдентификаторФормы); + Параметры.Вставить("АдресРезультата", Неопределено); + +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/CommonModules/ДлительныеОперацииГлобальный/Module.bsl b/SSL/src/CommonModules/ДлительныеОперацииГлобальный/Module.bsl index 2f1d09955..bd1ac6eba 100644 --- a/SSL/src/CommonModules/ДлительныеОперацииГлобальный/Module.bsl +++ b/SSL/src/CommonModules/ДлительныеОперацииГлобальный/Module.bsl @@ -148,8 +148,12 @@ Иначе Результат = Новый Структура; Результат.Вставить("Статус", Статус.Статус); - Результат.Вставить("АдресРезультата", ДлительнаяОперация.АдресРезультата); - Результат.Вставить("АдресДополнительногоРезультата", ДлительнаяОперация.АдресДополнительногоРезультата); + Если ДлительнаяОперация.Свойство("АдресРезультата") Тогда + Результат.Вставить("АдресРезультата", ДлительнаяОперация.АдресРезультата); + КонецЕсли; + Если ДлительнаяОперация.Свойство("АдресДополнительногоРезультата") Тогда + Результат.Вставить("АдресДополнительногоРезультата", ДлительнаяОперация.АдресДополнительногоРезультата); + КонецЕсли; Результат.Вставить("КраткоеПредставлениеОшибки", Статус.КраткоеПредставлениеОшибки); Результат.Вставить("ПодробноеПредставлениеОшибки", Статус.ПодробноеПредставлениеОшибки); Результат.Вставить("Сообщения", Статус.Сообщения); diff --git a/SSL/src/CommonModules/ДлительныеОперацииКлиент/Module.bsl b/SSL/src/CommonModules/ДлительныеОперацииКлиент/Module.bsl index 6278fee6d..750b0be36 100644 --- a/SSL/src/CommonModules/ДлительныеОперацииКлиент/Module.bsl +++ b/SSL/src/CommonModules/ДлительныеОперацииКлиент/Module.bsl @@ -41,8 +41,12 @@ Если ДлительнаяОперация.Статус <> "Отменено" Тогда Результат = Новый Структура; Результат.Вставить("Статус", ДлительнаяОперация.Статус); - Результат.Вставить("АдресРезультата", ДлительнаяОперация.АдресРезультата); - Результат.Вставить("АдресДополнительногоРезультата", ДлительнаяОперация.АдресДополнительногоРезультата); + Если ДлительнаяОперация.Свойство("АдресРезультата") Тогда + Результат.Вставить("АдресРезультата", ДлительнаяОперация.АдресРезультата); + КонецЕсли; + Если ДлительнаяОперация.Свойство("АдресДополнительногоРезультата") Тогда + Результат.Вставить("АдресДополнительногоРезультата", ДлительнаяОперация.АдресДополнительногоРезультата); + КонецЕсли; Результат.Вставить("КраткоеПредставлениеОшибки", ДлительнаяОперация.КраткоеПредставлениеОшибки); Результат.Вставить("ПодробноеПредставлениеОшибки", ДлительнаяОперация.ПодробноеПредставлениеОшибки); Результат.Вставить("Сообщения", ?(ПараметрыОжидания <> Неопределено И ПараметрыОжидания.ВыводитьСообщения, @@ -63,8 +67,12 @@ Если ПараметрыОжидания <> Неопределено Тогда ЗаполнитьЗначенияСвойств(ПараметрыФормы, ПараметрыОжидания); КонецЕсли; - ПараметрыФормы.Вставить("АдресРезультата", ДлительнаяОперация.АдресРезультата); - ПараметрыФормы.Вставить("АдресДополнительногоРезультата", ДлительнаяОперация.АдресДополнительногоРезультата); + Если ДлительнаяОперация.Свойство("АдресРезультата") Тогда + ПараметрыФормы.Вставить("АдресРезультата", ДлительнаяОперация.АдресРезультата); + КонецЕсли; + Если ДлительнаяОперация.Свойство("АдресДополнительногоРезультата") Тогда + ПараметрыФормы.Вставить("АдресДополнительногоРезультата", ДлительнаяОперация.АдресДополнительногоРезультата); + КонецЕсли; ПараметрыФормы.Вставить("ИдентификаторЗадания", ДлительнаяОперация.ИдентификаторЗадания); Если ПараметрыФормы.ВыводитьОкноОжидания Тогда diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработки/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработки/Module.bsl index e1b6d74d4..a8d6c1c4e 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработки/Module.bsl +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработки/Module.bsl @@ -497,7 +497,7 @@ СтрокаТаблицы.ПолноеИмя = ДополнительныеОтчетыИОбработкиКлиентСервер.ИмяНачальнойСтраницы(); СтрокаТаблицы.Ссылка = Справочники.ИдентификаторыОбъектовМетаданных.ПустаяСсылка(); СтрокаТаблицы.Вид = "Подсистема"; - СтрокаТаблицы.Представление = НСтр("ru = 'Начальная страница'"); + СтрокаТаблицы.Представление = СтандартныеПодсистемыСервер.ПредставлениеНачальнойСтраницы(); Иначе СтрокаТаблицы.ПолноеИмя = ОбъектМетаданных.ПолноеИмя(); СтрокаТаблицы.Ссылка = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ОбъектМетаданных); @@ -764,7 +764,7 @@ Функция ПредставлениеРаздела(Раздел) Экспорт Если Раздел = ДополнительныеОтчетыИОбработкиКлиентСервер.ИмяНачальнойСтраницы() Или Раздел = Справочники.ИдентификаторыОбъектовМетаданных.ПустаяСсылка() Тогда - Возврат НСтр("ru = 'Начальная страница'"); + Возврат СтандартныеПодсистемыСервер.ПредставлениеНачальнойСтраницы(); КонецЕсли; Возврат ПредставлениеОбъектаМетаданных(Раздел); КонецФункции @@ -1214,7 +1214,7 @@ Если ТипыЗаполнениеОбъекта.Количество() > 0 Тогда Команда = Команды.Добавить(); - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЗаполнениеОбъектов") Тогда + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда Команда.Вид = "ЗаполнениеОбъектов"; Команда.Представление = НСтр("ru = 'Дополнительные обработки заполнения...'"); Команда.Важность = "СмТакже"; @@ -1550,15 +1550,15 @@ Для Каждого СтрокаТаблицы Из Найденные Цикл Если Не ПодсистемаВключена Тогда СтрокаТаблицы.Представление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = '<Отчет ""%1"" недоступен, т.к. дополнительные отчеты и обработки отключены в настройках программы.'"), + НСтр("ru = 'Отчет ""%1"" недоступен, т.к. дополнительные отчеты и обработки отключены в настройках программы.'"), СтрокаТаблицы.Представление); ИначеЕсли Не ЕстьПравоЧтения Тогда СтрокаТаблицы.Представление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = '<Отчет ""%1"" недоступен, т.к. отсутствует право чтения дополнительных отчетов и обработок.'"), + НСтр("ru = 'Отчет ""%1"" недоступен, т.к. отсутствует право чтения дополнительных отчетов и обработок.'"), СтрокаТаблицы.Представление); ИначеЕсли Не ЭтоПоставляемаяОбработка(Отчет) Тогда СтрокаТаблицы.Представление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = '<Отчет ""%1"" недоступен в модели сервиса.'"), + НСтр("ru = 'Отчет ""%1"" недоступен в модели сервиса.'"), СтрокаТаблицы.Представление); Иначе СтрокаТаблицы.Доступен = Истина; @@ -1670,6 +1670,14 @@ КонецПроцедуры +// См. ОбщегоНазначенияПереопределяемый.ПриДобавленииИсключенийПоискаСсылок. +Процедура ПриДобавленииИсключенийПоискаСсылок(Массив) Экспорт + + Массив.Добавить("Справочник.ДополнительныеОтчетыИОбработки.ТабличнаяЧасть.Разделы.Раздел.Значение"); + Массив.Добавить("Справочник.ДополнительныеОтчетыИОбработки.ТабличнаяЧасть.Назначение.ОбъектНазначения.Значение"); + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -1718,8 +1726,8 @@ // Параметры: // Вид - ПеречислениеСсылка.ВидыДополнительныхОтчетовИОбработок - Вид внешней обработки. // -// Возвращаемое значение: -// Истина - обработка относится к категории глобальных. +// Возвращаемое значение: +// Булево - Истина - обработка относится к категории глобальных. // Ложь - обработка относится к категории назначаемых. // Функция ПроверитьГлобальнаяОбработка(Вид) Экспорт @@ -1832,7 +1840,7 @@ // Обработка - СправочникСсылка.ДополнительныеОтчетыИОбработки. // // Возвращаемое значение: -// Булево +// Булево - // Функция ВозможнаВыгрузкаОбработкиВФайл(Знач Обработка) Экспорт @@ -1854,7 +1862,7 @@ // Обработка - СправочникСсылка.ДополнительныеОтчетыИОбработки. // // Возвращаемое значение: -// Булево +// Булево - // Функция ВозможнаЗагрузкаОбработкиИзФайла(Знач Обработка) Экспорт @@ -1876,7 +1884,7 @@ // Обработка - СправочникСсылка.ДополнительныеОтчетыИОбработки. // // Возвращаемое значение: -// Булево +// Булево - // Функция ОтображатьРасширеннуюИнформацию(Знач Обработка) Экспорт @@ -2610,9 +2618,22 @@ Если ПараметрыРегистрации.ОтключатьКонфликтующие Тогда Для Каждого ЭлементСписка Из ПараметрыРегистрации.Конфликтующие Цикл - КонфликтующийОбъект = ЭлементСписка.Значение.ПолучитьОбъект(); - ОтключитьКонфликтующую(КонфликтующийОбъект); - КонфликтующийОбъект.Записать(); + НачатьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Справочник.ДополнительныеОтчетыИОбработки"); + ЭлементБлокировки.УстановитьЗначение("Ссылка", ЭлементСписка.Значение); + Блокировка.Заблокировать(); + + КонфликтующийОбъект = ЭлементСписка.Значение.ПолучитьОбъект(); + ОтключитьКонфликтующую(КонфликтующийОбъект); + + КонфликтующийОбъект.Записать(); + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; КонецЦикла; ИначеЕсли ПараметрыРегистрации.ОтключатьПубликацию Тогда ОтключитьКонфликтующую(Объект); @@ -2688,7 +2709,7 @@ КонецЕсли; Если Не РегистрационныеДанные.БезопасныйРежим И Не Пользователи.ЭтоПолноправныйПользователь(, Истина) Тогда - Результат.ТекстОшибки = НСтр("ru = 'Для подключения обработки, запускаемой в небезопасном режиме, требуются административные права.'"); + Результат.ТекстОшибки = НСтр("ru = 'Для подключения обработки, запускаемой в небезопасном режиме, требуется роль ""Администратор системы"".'"); Возврат Результат; КонецЕсли; @@ -2870,10 +2891,10 @@ #КонецЕсли Если ИнформацияОбОшибке <> Неопределено Тогда Если ПараметрыРегистрации.ЭтоОтчет Тогда - ТекстОшибки = НСтр("ru='Невозможно подключить дополнительный отчет из файла. + ТекстОшибки = НСтр("ru = 'Невозможно подключить дополнительный отчет из файла. |Возможно, он не подходит для этой версии программы.'"); Иначе - ТекстОшибки = НСтр("ru='Невозможно подключить дополнительную обработку из файла. + ТекстОшибки = НСтр("ru = 'Невозможно подключить дополнительную обработку из файла. |Возможно, она не подходит для этой версии программы.'"); КонецЕсли; ТекстОшибки = ТекстОшибки + Символы.ПС + Символы.ПС + НСтр("ru = 'Техническая информация:'") + Символы.ПС; diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВАвтономномРежиме/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВАвтономномРежиме/Module.bsl index a69ed67a6..8fa446da3 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВАвтономномРежиме/Module.bsl +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВАвтономномРежиме/Module.bsl @@ -214,7 +214,7 @@ // в текущей модели информационной базы. // // Параметры: -// НедоступныеВидыПубликации - Массив строк. +// НедоступныеВидыПубликации - Массив Из Строка. // Процедура ПриЗаполненииНедоступныхВидовПубликации(Знач НедоступныеВидыПубликации) Экспорт @@ -288,7 +288,7 @@ // Ссылка - СправочникСсылка.ДополнительныеОтчетыИОбработки. // // Возвращаемое значение: -// Булево. +// Булево - // Функция ЭтоОбработкаСервиса(Ссылка) diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервиса/Module.bsl index d0c788e6d..c6ca8f522 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервиса/Module.bsl +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервиса/Module.bsl @@ -115,7 +115,7 @@ // в текущей модели информационной базы. // // Параметры: -// НедоступныеВидыПубликации - Массив строк. +// НедоступныеВидыПубликации - Массив Из Строка. // Процедура ПриЗаполненииНедоступныхВидовПубликации(Знач НедоступныеВидыПубликации) Экспорт @@ -332,7 +332,7 @@ КонецЕсли; - Если Константы.ИспользоватьПрофилиБезопасностиДляДОиО.Получить() И НЕ БезопасныйРежим Тогда + Если Константы.ИспользоватьПрофилиБезопасностиДляДОО.Получить() И НЕ БезопасныйРежим Тогда БезопасныйРежим = Строка(ПараметрыПодключения.ВерсияGUID); КонецЕсли; @@ -404,7 +404,7 @@ Возврат; КонецЕсли; - Если Не Константы.РазрешитьВыполнениеДОИОРегламентнымиЗаданиямиВМоделиСервиса.Получить() Тогда + Если Не Константы.РазрешитьВыполнениеДООРегламентнымиЗаданиямиВМоделиСервиса.Получить() Тогда ВызватьИсключение НСтр("ru = 'Периодическое выполнение команд дополнительных обработок в качестве заданий запрещено администратором сервиса.'"); КонецЕсли; @@ -461,7 +461,7 @@ // ИспользуемаяОбработка - СправочникСсылка.ДополнительныеОтчетыИОбработки - дополнительная обработка. // // Возвращаемое значение: -// Булево +// Булево - // Функция ЭтоПоставляемаяОбработка(ИспользуемаяОбработка) Экспорт @@ -470,6 +470,8 @@ КонецФункции +// АПК:134-выкл для обратной совместимости. + // Выполняет установку поставляемой дополнительной обработки в текущую область данных после получения поставляемых данных // и извещает менеджер сервиса в случае неудачи. // @@ -533,25 +535,38 @@ УстановитьПривилегированныйРежим(Истина); + ЗаписьЖурналаРегистрации( + НСтр("ru = 'Поставляемые дополнительные отчеты и обработки.Инициирована установка поставляемой обработки в область данных'", + ОбщегоНазначения.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Информация, + , + Строка(ОписаниеИнсталляции.Идентификатор), + Строка(ОписаниеИнсталляции.Инсталляция)); + НачатьТранзакцию(); - Попытка - - ЗаписьЖурналаРегистрации( - НСтр("ru = 'Поставляемые дополнительные отчеты и обработки.Инициирована установка поставляемой обработки в область данных'", - ОбщегоНазначения.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Информация, - , - Строка(ОписаниеИнсталляции.Идентификатор), - Строка(ОписаниеИнсталляции.Инсталляция)); - ПоставляемаяОбработка = Справочники.ПоставляемыеДополнительныеОтчетыИОбработки.ПолучитьСсылку(ОписаниеИнсталляции.Идентификатор); + ПоставляемаяОбработкаСуществует = ОбщегоНазначения.СсылкаСуществует(ПоставляемаяОбработка); + Блокировка = Новый БлокировкаДанных; + Если ПоставляемаяОбработкаСуществует Тогда + ИспользуемаяОбработкаСсылка = ИспользуемаяОбработка(ПоставляемаяОбработка); + Если ЗначениеЗаполнено(ИспользуемаяОбработкаСсылка) Тогда + ЭлементБлокировки = Блокировка.Добавить("Справочник.ДополнительныеОтчетыИОбработки"); + ЭлементБлокировки.УстановитьЗначение("ПоставляемаяОбработка", ПоставляемаяОбработка); + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ИспользованиеПоставляемыхДополнительныхОтчетовИОбработокВОбластяхДанных"); + ЭлементБлокировки.УстановитьЗначение("ПоставляемаяОбработка", ПоставляемаяОбработка); + КонецЕсли; + КонецЕсли; + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ОчередьИнсталляцииПоставляемыхДополнительныхОтчетовИОбработокВОбластиДанных"); + ЭлементБлокировки.УстановитьЗначение("ПоставляемаяОбработка", ПоставляемаяОбработка); + Блокировка.Заблокировать(); + Набор = РегистрыСведений.ОчередьИнсталляцииПоставляемыхДополнительныхОтчетовИОбработокВОбластиДанных.СоздатьНаборЗаписей(); Набор.Отбор.ПоставляемаяОбработка.Установить(ПоставляемаяОбработка); Набор.Записать(); - Если ОбщегоНазначения.СсылкаСуществует(ПоставляемаяОбработка) Тогда + Если ПоставляемаяОбработкаСуществует Тогда АктуальныеКоманды = ПоставляемаяОбработка.Команды.Выгрузить(); АктуальныеКоманды.Колонки.Добавить("РегламентноеЗаданиеРасписание", Новый ОписаниеТипов("СписокЗначений")); @@ -575,19 +590,15 @@ ИспользуемаяОбработка = Справочники.ДополнительныеОтчетыИОбработки.СоздатьЭлемент(); КонецЕсли; - ЗаполнитьНастройкиИспользуемойОбработки( - ИспользуемаяОбработка, ПоставляемаяОбработка); - + ЗаполнитьНастройкиИспользуемойОбработки(ИспользуемаяОбработка, ПоставляемаяОбработка); Если ЗначениеЗаполнено(Разделы) И Разделы.Количество() > 0 Тогда ИспользуемаяОбработка.Разделы.Загрузить(Разделы); КонецЕсли; Если ЗначениеЗаполнено(СправочникиИДокументы) И СправочникиИДокументы.Количество() > 0 Тогда - ИспользуемаяОбработка.Назначение.Загрузить(СправочникиИДокументы); ИспользуемаяОбработка.ИспользоватьДляФормыСписка = НастройкиРасположенияКоманд.ИспользоватьДляФормыСписка; ИспользуемаяОбработка.ИспользоватьДляФормыОбъекта = НастройкиРасположенияКоманд.ИспользоватьДляФормыОбъекта; - КонецЕсли; ИспользуемаяОбработка.Наименование = ОписаниеИнсталляции.Представление; @@ -597,9 +608,8 @@ ИспользуемаяОбработка.ДополнительныеСвойства.Вставить("АктуальныеКоманды", АктуальныеКоманды); Если ИспользуемаяОбработка.ЭтоНовый() Тогда - ИспользуемаяОбработка.УстановитьСсылкуНового( - Справочники.ДополнительныеОтчетыИОбработки.ПолучитьСсылку( - ОписаниеИнсталляции.Инсталляция)); + ИспользуемаяОбработка.УстановитьСсылкуНового(Справочники.ДополнительныеОтчетыИОбработки.ПолучитьСсылку( + ОписаниеИнсталляции.Инсталляция)); КонецЕсли; // Устанавливается связь между поставляемой и используемой обработкой @@ -617,39 +627,24 @@ ИспользуемаяОбработка.Записать(); // Размещение вариантов дополнительного отчета в разделах, которые выбрал пользователь - // при установке (или разработчик при создании манифеста, если пользователь не - // изменял настройки по-умолчанию. + // при установке (или разработчик при создании манифеста, если пользователь не изменял настройки по-умолчанию. Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВариантыОтчетов") Тогда МодульВариантыОтчетов = ОбщегоНазначения.ОбщийМодуль("ВариантыОтчетов"); - Для Каждого ВариантДополнительногоОтчета Из ВариантыДополнительногоОтчета Цикл - ВариантСсылка = МодульВариантыОтчетов.ВариантОтчета(ИспользуемаяОбработка.Ссылка, ВариантДополнительногоОтчета.Ключ); Если ВариантСсылка <> Неопределено Тогда - Вариант = ВариантСсылка.ПолучитьОбъект(); Вариант.Размещение.Очистить(); - Для Каждого ЭлементРазмещения Из ВариантДополнительногоОтчета.Размещение Цикл - РазмещениеВарианта = Вариант.Размещение.Добавить(); РазмещениеВарианта.Использование = Истина; - Если ОбщегоНазначенияКлиентСервер.СравнитьВерсии(СтандартныеПодсистемыСервер.ВерсияБиблиотеки(), "2.2.3.1") >= 0 Тогда - РазмещениеВарианта.Подсистема = ЭлементРазмещения.Раздел; - Иначе - РазмещениеВарианта.РазделИлиГруппа = ЭлементРазмещения.Раздел; - КонецЕсли; + РазмещениеВарианта.Подсистема = ЭлементРазмещения.Раздел; РазмещениеВарианта.Важный = ЭлементРазмещения.Важный; РазмещениеВарианта.СмТакже = ЭлементРазмещения.СмТакже; - КонецЦикла; - Вариант.Записать(); - КонецЕсли; - КонецЦикла; - КонецЕсли; МодульРаботаВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("РаботаВМоделиСервиса"); @@ -664,11 +659,8 @@ Сообщение.Body.Installation = ОписаниеИнсталляции.Инсталляция; МодульРаботаВМоделиСервисаБТСПовтИсп = ОбщегоНазначения.ОбщийМодуль("РаботаВМоделиСервисаБТСПовтИсп"); - - МодульСообщенияВМоделиСервиса.ОтправитьСообщение( - Сообщение, - МодульРаботаВМоделиСервисаБТСПовтИсп.КонечнаяТочкаМенеджераСервиса(), - Истина); + МодульСообщенияВМоделиСервиса.ОтправитьСообщение(Сообщение, + МодульРаботаВМоделиСервисаБТСПовтИсп.КонечнаяТочкаМенеджераСервиса(), Истина); ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые дополнительные отчеты и обработки.Установка в область данных'", ОбщегоНазначения.КодОсновногоЯзыка()), @@ -707,14 +699,11 @@ Строка(ОписаниеИнсталляции.Инсталляция)); КонецЕсли; - ЗафиксироватьТранзакцию(); Исключение - ОтменитьТранзакцию(); ВызватьИсключение; - КонецПопытки; МодульОбменСообщениями = ОбщегоНазначения.ОбщийМодуль("ОбменСообщениями"); @@ -722,6 +711,8 @@ КонецПроцедуры +// АПК:134-вкл. + // Выполняет удаление поставляемой дополнительной обработки из текущей области данных. // // Параметры: @@ -735,76 +726,70 @@ Возврат; КонецЕсли; + ТекстИсключения = ""; + УстановитьПривилегированныйРежим(Истина); НачатьТранзакцию(); - Попытка - УстановитьПривилегированныйРежим(Истина); + ИспользуемаяОбработка = Справочники.ДополнительныеОтчетыИОбработки.ПолучитьСсылку( + ИдентификаторИспользуемойОбработки); + + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Справочник.ДополнительныеОтчетыИОбработки"); + ЭлементБлокировки.УстановитьЗначение("Ссылка", ИспользуемаяОбработка); + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ИспользованиеПоставляемыхДополнительныхОтчетовИОбработокВОбластяхДанных"); + ЭлементБлокировки.УстановитьЗначение("ПоставляемаяОбработка", ПоставляемаяОбработка); + Блокировка.Заблокировать(); - Попытка - - ИспользуемаяОбработка = Справочники.ДополнительныеОтчетыИОбработки.ПолучитьСсылку( - ИдентификаторИспользуемойОбработки); - - // Очистим связь между поставляемой и используемой обработкой - НаборЗаписей = РегистрыСведений.ИспользованиеПоставляемыхДополнительныхОтчетовИОбработокВОбластяхДанных.СоздатьНаборЗаписей(); - НаборЗаписей.Отбор.ПоставляемаяОбработка.Установить(ПоставляемаяОбработка); - - // Удалим используемую обработку - ОбъектОбработки = ИспользуемаяОбработка.ПолучитьОбъект(); - Если ОбъектОбработки <> Неопределено Тогда - ОбъектОбработки.ОбменДанными.Загрузка = Истина; - ОбъектОбработки.Удалить(); - КонецЕсли; - - НаборЗаписей.Записать(); - - ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые дополнительные отчеты и обработки.Удаление из области данных'", - ОбщегоНазначения.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Информация, - , - ПоставляемаяОбработка, - Строка(ИдентификаторИспользуемойОбработки)); - - Исключение - - ТекстИсключения = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - - ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые дополнительные отчеты и обработки.Ошибка удаления из область данных'", - ОбщегоНазначения.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка, - , - ПоставляемаяОбработка, - Строка(ИдентификаторИспользуемойОбработки) + Символы.ПС + Символы.ВК + ТекстИсключения); - - МодульРаботаВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("РаботаВМоделиСервиса"); - МодульСообщенияВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("СообщенияВМоделиСервиса"); - - // Отправляется сообщение в МС об ошибке установки обработки в области данных - Сообщение = МодульСообщенияВМоделиСервиса.НовоеСообщение( - СообщенияКонтрольДополнительныхОтчетовИОбработокИнтерфейс.СообщениеОшибкаУдаленияДополнительногоОтчетаИлиОбработки()); - - Сообщение.Body.Zone = МодульРаботаВМоделиСервиса.ЗначениеРазделителяСеанса(); - Сообщение.Body.Extension = ПоставляемаяОбработка.УникальныйИдентификатор(); - Сообщение.Body.Installation = ИдентификаторИспользуемойОбработки; - Сообщение.Body.ErrorDescription = ТекстИсключения; - - МодульРаботаВМоделиСервисаБТСПовтИсп = ОбщегоНазначения.ОбщийМодуль("РаботаВМоделиСервисаБТСПовтИсп"); - - МодульСообщенияВМоделиСервиса.ОтправитьСообщение( - Сообщение, - МодульРаботаВМоделиСервисаБТСПовтИсп.КонечнаяТочкаМенеджераСервиса()); - - КонецПопытки; + // Очистим связь между поставляемой и используемой обработкой + НаборЗаписей = РегистрыСведений.ИспользованиеПоставляемыхДополнительныхОтчетовИОбработокВОбластяхДанных.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.ПоставляемаяОбработка.Установить(ПоставляемаяОбработка); + + // Удалим используемую обработку + ОбъектОбработки = ИспользуемаяОбработка.ПолучитьОбъект(); + Если ОбъектОбработки <> Неопределено Тогда + ОбъектОбработки.Удалить(); + КонецЕсли; + + НаборЗаписей.Записать(); + + ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые дополнительные отчеты и обработки.Удаление из области данных'", + ОбщегоНазначения.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Информация, + , + ПоставляемаяОбработка, + Строка(ИдентификаторИспользуемойОбработки)); ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); - ВызватьИсключение; - + ТекстИсключения = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); КонецПопытки; + + Если Не ПустаяСтрока(ТекстИсключения) Тогда + + ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые дополнительные отчеты и обработки.Ошибка удаления из область данных'", + ОбщегоНазначения.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, + , + ПоставляемаяОбработка, + Строка(ИдентификаторИспользуемойОбработки) + Символы.ПС + Символы.ВК + ТекстИсключения); + + МодульРаботаВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("РаботаВМоделиСервиса"); + МодульСообщенияВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("СообщенияВМоделиСервиса"); + МодульРаботаВМоделиСервисаБТСПовтИсп = ОбщегоНазначения.ОбщийМодуль("РаботаВМоделиСервисаБТСПовтИсп"); + + // Отправляется сообщение в МС об ошибке установки обработки в области данных + Сообщение = МодульСообщенияВМоделиСервиса.НовоеСообщение( + СообщенияКонтрольДополнительныхОтчетовИОбработокИнтерфейс.СообщениеОшибкаУдаленияДополнительногоОтчетаИлиОбработки()); + + Сообщение.Body.Zone = МодульРаботаВМоделиСервиса.ЗначениеРазделителяСеанса(); + Сообщение.Body.Extension = ПоставляемаяОбработка.УникальныйИдентификатор(); + Сообщение.Body.Installation = ИдентификаторИспользуемойОбработки; + Сообщение.Body.ErrorDescription = ТекстИсключения; + + МодульСообщенияВМоделиСервиса.ОтправитьСообщение(Сообщение, МодульРаботаВМоделиСервисаБТСПовтИсп.КонечнаяТочкаМенеджераСервиса()); + КонецЕсли; КонецПроцедуры @@ -821,8 +806,11 @@ КонецЕсли; НачатьТранзакцию(); - Попытка + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Справочник.ПоставляемыеДополнительныеОтчетыИОбработки"); + ЭлементБлокировки.УстановитьЗначение("Ссылка", ПоставляемаяОбработка); + Блокировка.Заблокировать(); Инсталляции = ПереченьИнсталляций(ПоставляемаяОбработка); Для Каждого Инсталляция Из Инсталляции Цикл @@ -847,12 +835,9 @@ ОбъектОбработки.Удалить(); ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); ВызватьИсключение; - КонецПопытки; КонецПроцедуры @@ -893,7 +878,6 @@ Сообщение.Body.ErrorDescription = ТекстИсключения; МодульРаботаВМоделиСервисаБТСПовтИсп = ОбщегоНазначения.ОбщийМодуль("РаботаВМоделиСервисаБТСПовтИсп"); - МодульСообщенияВМоделиСервиса.ОтправитьСообщение( Сообщение, МодульРаботаВМоделиСервисаБТСПовтИсп.КонечнаяТочкаМенеджераСервиса(), @@ -949,14 +933,14 @@ МодульРаботаВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("РаботаВМоделиСервиса"); МодульРаботаВМоделиСервиса.ДобавитьКонстантуВТаблицуПараметровИБ(ТаблицаПараметров, "ИспользованиеКаталогаДополнительныхОтчетовИОбработокВМоделиСервиса"); - МодульРаботаВМоделиСервиса.ДобавитьКонстантуВТаблицуПараметровИБ(ТаблицаПараметров, "ИспользоватьПрофилиБезопасностиДляДОиО"); + МодульРаботаВМоделиСервиса.ДобавитьКонстантуВТаблицуПараметровИБ(ТаблицаПараметров, "ИспользоватьПрофилиБезопасностиДляДОО"); МодульРаботаВМоделиСервиса.ДобавитьКонстантуВТаблицуПараметровИБ(ТаблицаПараметров, "МинимальныйИнтервалРегламентныхЗаданийДОИОВМоделиСервиса"); МодульРаботаВМоделиСервиса.ДобавитьКонстантуВТаблицуПараметровИБ(ТаблицаПараметров, "НезависимоеИспользованиеДополнительныхОтчетовИОбработокВМоделиСервиса"); - МодульРаботаВМоделиСервиса.ДобавитьКонстантуВТаблицуПараметровИБ(ТаблицаПараметров, "РазрешитьВыполнениеДОИОРегламентнымиЗаданиямиВМоделиСервиса"); + МодульРаботаВМоделиСервиса.ДобавитьКонстантуВТаблицуПараметровИБ(ТаблицаПараметров, "РазрешитьВыполнениеДООРегламентнымиЗаданиямиВМоделиСервиса"); // Константы были переименованы. Менеджер сервиса отправляет параметры со старыми именами констант. // Для поддержки совместимости добавляются параметры со старыми именами констант. - СтрокаПараметра = МодульРаботаВМоделиСервиса.ДобавитьКонстантуВТаблицуПараметровИБ(ТаблицаПараметров, "РазрешитьВыполнениеДОИОРегламентнымиЗаданиямиВМоделиСервиса"); + СтрокаПараметра = МодульРаботаВМоделиСервиса.ДобавитьКонстантуВТаблицуПараметровИБ(ТаблицаПараметров, "РазрешитьВыполнениеДООРегламентнымиЗаданиямиВМоделиСервиса"); СтрокаПараметра.Имя = "РазрешитьВыполнениеДополнительныхОтчетовИОбработокРегламентнымиЗаданиямиВМоделиСервиса"; СтрокаПараметра = МодульРаботаВМоделиСервиса.ДобавитьКонстантуВТаблицуПараметровИБ(ТаблицаПараметров, "МинимальныйИнтервалРегламентныхЗаданийДОИОВМоделиСервиса"); СтрокаПараметра.Имя = "МинимальныйИнтервалРегламентныхЗаданийДополнительныхОтчетовИОбработокВМоделиСервиса"; @@ -977,17 +961,25 @@ // Константы были переименованы. Менеджер сервиса отправляет параметры со старыми именами констант. // Для поддержки совместимости удаляются параметры со старыми именами констант и добавляются с новыми. - РазрешитьВыполнениеДОИОРегламентнымиЗаданиямиВМоделиСервиса = Неопределено; + РазрешитьВыполнениеДООРегламентнымиЗаданиямиВМоделиСервиса = Неопределено; МинимальныйИнтервалРегламентныхЗаданийДОИОВМоделиСервиса = Неопределено; Если ЗначенияПараметров.Свойство("РазрешитьВыполнениеДополнительныхОтчетовИОбработокРегламентнымиЗаданиямиВМоделиСервиса", - РазрешитьВыполнениеДОИОРегламентнымиЗаданиямиВМоделиСервиса) Тогда + РазрешитьВыполнениеДООРегламентнымиЗаданиямиВМоделиСервиса) Тогда - ЗначенияПараметров.Вставить("РазрешитьВыполнениеДОИОРегламентнымиЗаданиямиВМоделиСервиса", РазрешитьВыполнениеДОИОРегламентнымиЗаданиямиВМоделиСервиса); + ЗначенияПараметров.Вставить("РазрешитьВыполнениеДООРегламентнымиЗаданиямиВМоделиСервиса", РазрешитьВыполнениеДООРегламентнымиЗаданиямиВМоделиСервиса); ЗначенияПараметров.Удалить("РазрешитьВыполнениеДополнительныхОтчетовИОбработокРегламентнымиЗаданиямиВМоделиСервиса"); КонецЕсли; + Если ЗначенияПараметров.Свойство("РазрешитьВыполнениеДОИОРегламентнымиЗаданиямиВМоделиСервиса", + РазрешитьВыполнениеДООРегламентнымиЗаданиямиВМоделиСервиса) Тогда + + ЗначенияПараметров.Вставить("РазрешитьВыполнениеДООРегламентнымиЗаданиямиВМоделиСервиса", РазрешитьВыполнениеДООРегламентнымиЗаданиямиВМоделиСервиса); + ЗначенияПараметров.Удалить("РазрешитьВыполнениеДОИОРегламентнымиЗаданиямиВМоделиСервиса"); + + КонецЕсли; + Если ЗначенияПараметров.Свойство("МинимальныйИнтервалРегламентныхЗаданийДополнительныхОтчетовИОбработокВМоделиСервиса", МинимальныйИнтервалРегламентныхЗаданийДОИОВМоделиСервиса) Тогда @@ -1118,7 +1110,7 @@ // Заполняет массив типов, исключаемых из выгрузки и загрузки данных. // // Параметры: -// Типы - Массив(Типы). +// Типы - Массив Из Типы. // Процедура ПриЗаполненииТиповИсключаемыхИзВыгрузкиЗагрузки(Типы) Экспорт @@ -1143,18 +1135,32 @@ // Процедура АктуализацияНастроекИспользуемойОбработки(Знач Ссылка) Экспорт - ПоставляемаяОбработка = ПоставляемаяОбработка(Ссылка); - Если Не ЗначениеЗаполнено(ПоставляемаяОбработка) Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Дополнительная обработка с идентификатором %1 не является поставляемой.'"), - Строка(Ссылка.УникальныйИдентификатор())); - КонецЕсли; + НачатьТранзакцию(); + Попытка + ПоставляемаяОбработка = ПоставляемаяОбработка(Ссылка); + Если Не ЗначениеЗаполнено(ПоставляемаяОбработка) Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Дополнительная обработка с идентификатором %1 не является поставляемой.'"), + Строка(Ссылка.УникальныйИдентификатор())); + КонецЕсли; + + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Справочник.ПоставляемыеДополнительныеОтчетыИОбработки"); + ЭлементБлокировки.УстановитьЗначение("Ссылка", ПоставляемаяОбработка); + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Разделяемый; + ЭлементБлокировки = Блокировка.Добавить("Справочник.ДополнительныеОтчетыИОбработки"); + ЭлементБлокировки.УстановитьЗначение("Ссылка", Ссылка); + Блокировка.Заблокировать(); - ИспользуемаяОбработка = Ссылка.ПолучитьОбъект(); - ЗаполнитьНастройкиИспользуемойОбработки(ИспользуемаяОбработка, - ПоставляемаяОбработка.ПолучитьОбъект()); - ИспользуемаяОбработка.Записать(); - + ИспользуемаяОбработка = Ссылка.ПолучитьОбъект(); + ЗаполнитьНастройкиИспользуемойОбработки(ИспользуемаяОбработка, ПоставляемаяОбработка.ПолучитьОбъект()); + ИспользуемаяОбработка.Записать(); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; КонецПроцедуры #КонецОбласти @@ -1256,16 +1262,27 @@ | И ПоставляемыеДополнительныеОтчетыИОбработки.КонтролироватьСовместимостьСВерсиямиКонфигурации = ИСТИНА"; Запрос = Новый Запрос(ТекстЗапроса); Запрос.УстановитьПараметр("Версия", Метаданные.Версия); - БлокируемыеОбработки = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); - Для Каждого БлокируемаяОбработка Из БлокируемыеОбработки Цикл + НачатьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных; + Блокировка.Добавить("Справочник.ПоставляемыеДополнительныеОтчетыИОбработки"); + Блокировка.Заблокировать(); - ПоставляемаяОбработка = БлокируемаяОбработка.ПолучитьОбъект(); - ПоставляемаяОбработка.Публикация = Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.Отключена; - ПоставляемаяОбработка.ПричинаОтключения = Перечисления.ПричиныОтключенияДополнительныхОтчетовИОбработокВМоделиСервиса.ОбновлениеВерсииКонфигурации; - ПоставляемаяОбработка.Записать(); - - КонецЦикла; + БлокируемыеОбработки = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); + Для Каждого БлокируемаяОбработка Из БлокируемыеОбработки Цикл + + ПоставляемаяОбработка = БлокируемаяОбработка.ПолучитьОбъект(); + ПоставляемаяОбработка.Публикация = Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.Отключена; + ПоставляемаяОбработка.ПричинаОтключения = Перечисления.ПричиныОтключенияДополнительныхОтчетовИОбработокВМоделиСервиса.ОбновлениеВерсииКонфигурации; + ПоставляемаяОбработка.Записать(); + + КонецЦикла; + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; КонецПроцедуры @@ -1426,7 +1443,8 @@ // Возвращает идентификатор вида поставляемых данных для дополнительных отчетов // и обработок. // -// Возвращаемое значение: Строка. +// Возвращаемое значение: +// Строка - . Функция ИдентификаторВидаПоставляемыхДанных() Возврат "ДОиО"; // Не локализуется @@ -1503,27 +1521,37 @@ , НСтр("ru = 'Инициирована загрузка поставляемой обработки'") + Символы.ПС + Символы.ВК + ОписаниеПоставляемойОбработки.Манифест); - // Получим СправочникОбъект.ПоставляемыеДополнительныеОтчетыИОбработки - СсылкаПоставляемойОбработки = Справочники.ПоставляемыеДополнительныеОтчетыИОбработки.ПолучитьСсылку( - Новый УникальныйИдентификатор(ОписаниеПоставляемойОбработки.Идентификатор)); - Если ОбщегоНазначения.СсылкаСуществует(СсылкаПоставляемойОбработки) Тогда - ПоставляемаяОбработка = СсылкаПоставляемойОбработки.ПолучитьОбъект(); - Иначе - ПоставляемаяОбработка = Справочники.ПоставляемыеДополнительныеОтчетыИОбработки.СоздатьЭлемент(); - ПоставляемаяОбработка.УстановитьСсылкуНового(СсылкаПоставляемойОбработки); - КонецЕсли; - - Если ЗначениеЗаполнено(ПоставляемаяОбработка.ПричинаОтключения) Тогда - Если ПоставляемаяОбработка.ПричинаОтключения = Перечисления.ПричиныОтключенияДополнительныхОтчетовИОбработокВМоделиСервиса.ОбновлениеВерсииКонфигурации Тогда - ПоставляемаяОбработка.Публикация = Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.Используется; - ПоставляемаяОбработка.ПричинаОтключения = Перечисления.ПричиныОтключенияДополнительныхОтчетовИОбработокВМоделиСервиса.ПустаяСсылка(); + НачатьТранзакцию(); + Попытка + // Получим СправочникОбъект.ПоставляемыеДополнительныеОтчетыИОбработки + СсылкаПоставляемойОбработки = Справочники.ПоставляемыеДополнительныеОтчетыИОбработки.ПолучитьСсылку( + Новый УникальныйИдентификатор(ОписаниеПоставляемойОбработки.Идентификатор)); + Если ОбщегоНазначения.СсылкаСуществует(СсылкаПоставляемойОбработки) Тогда + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Справочник.ПоставляемыеДополнительныеОтчетыИОбработки"); + ЭлементБлокировки.УстановитьЗначение("Ссылка", СсылкаПоставляемойОбработки); + Блокировка.Заблокировать(); + + ПоставляемаяОбработка = СсылкаПоставляемойОбработки.ПолучитьОбъект(); + Иначе + ПоставляемаяОбработка = Справочники.ПоставляемыеДополнительныеОтчетыИОбработки.СоздатьЭлемент(); + ПоставляемаяОбработка.УстановитьСсылкуНового(СсылкаПоставляемойОбработки); КонецЕсли; - Иначе - ПоставляемаяОбработка.Публикация = Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.Используется; - КонецЕсли; - - Если ПоставляемаяОбработка.ВерсияGUID <> Новый УникальныйИдентификатор(ОписаниеПоставляемойОбработки.Версия) Тогда + Если ЗначениеЗаполнено(ПоставляемаяОбработка.ПричинаОтключения) Тогда + Если ПоставляемаяОбработка.ПричинаОтключения = Перечисления.ПричиныОтключенияДополнительныхОтчетовИОбработокВМоделиСервиса.ОбновлениеВерсииКонфигурации Тогда + ПоставляемаяОбработка.Публикация = Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.Используется; + ПоставляемаяОбработка.ПричинаОтключения = Перечисления.ПричиныОтключенияДополнительныхОтчетовИОбработокВМоделиСервиса.ПустаяСсылка(); + КонецЕсли; + Иначе + ПоставляемаяОбработка.Публикация = Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.Используется; + КонецЕсли; + + Если ПоставляемаяОбработка.ВерсияGUID = Новый УникальныйИдентификатор(ОписаниеПоставляемойОбработки.Версия) Тогда + ОтменитьТранзакцию(); + Возврат; + КонецЕсли; + // Заполним СправочникОбъект.ПоставляемыеДополнительныеОтчетыИОбработки ВариантыОтчетовПоставляемойОбработки = Неопределено; ДополнительныеОтчетыИОбработкиВМоделиСервисаМанифест.ПрочитатьМанифест( @@ -1539,105 +1567,99 @@ ПоставляемаяОбработка.КонтролироватьСовместимостьСВерсиямиКонфигурации = Истина; ПоставляемаяОбработка.Совместимость.Очистить(); Для Каждого ИнформацияОСовместимости Из ТаблицаСовместимости Цикл - Если ИнформацияОСовместимости.ConfigarationName = Метаданные.Имя Тогда - Если ПустаяСтрока(ИнформацияОСовместимости.VersionNumber) Тогда - ПоставляемаяОбработка.КонтролироватьСовместимостьСВерсиямиКонфигурации = Ложь; Прервать; - - Иначе - - СтрокаТЧ = ПоставляемаяОбработка.Совместимость.Добавить(); - СтрокаТЧ.Версия = ИнформацияОСовместимости.VersionNumber; - КонецЕсли; - + СтрокаТЧ = ПоставляемаяОбработка.Совместимость.Добавить(); + СтрокаТЧ.Версия = ИнформацияОСовместимости.VersionNumber; КонецЕсли; - КонецЦикла; // Запишем СправочникОбъект.ПоставляемыеДополнительныеОтчетыИОбработки ПоставляемаяОбработка.ВерсияGUID = Новый УникальныйИдентификатор(ОписаниеПоставляемойОбработки.Версия); ПоставляемаяОбработка.Записать(); + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + + ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые дополнительные отчеты и обработки.Загрузка поставляемой обработки завершена'", + ОбщегоНазначения.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Информация, + , + ПоставляемаяОбработка.Ссылка, + НСтр("ru = 'Завершена загрузка поставляемой обработки'") + Символы.ПС + Символы.ВК + ОписаниеПоставляемойОбработки.Манифест); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые дополнительные отчеты и обработки.Загрузка поставляемой обработки завершена'", + Если Не ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.ОчередьЗаданий") Тогда + Возврат; + КонецЕсли; + + МодульОчередьЗаданий = ОбщегоНазначения.ОбщийМодуль("ОчередьЗаданий"); + // Планирование актуализации настроек используемых обработок + ИспользуемыеОбработки = ПереченьИнсталляций(ПоставляемаяОбработка.Ссылка); + Для Каждого ИнсталляцияОбработки Из ИспользуемыеОбработки Цикл + + ПараметрыМетода = Новый Массив; + ПараметрыМетода.Добавить(ИнсталляцияОбработки.ИспользуемаяОбработка); + + ПараметрыЗадания = Новый Структура; + ПараметрыЗадания.Вставить("ИмяМетода" , "ДополнительныеОтчетыИОбработкиВМоделиСервиса.АктуализацияНастроекИспользуемойОбработки"); + ПараметрыЗадания.Вставить("Параметры" , ПараметрыМетода); + ПараметрыЗадания.Вставить("КоличествоПовторовПриАварийномЗавершении", 3); + ПараметрыЗадания.Вставить("ОбластьДанных", ИнсталляцияОбработки.ОбластьДанных); + + МодульОчередьЗаданий.ДобавитьЗадание(ПараметрыЗадания); + + ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые дополнительные отчеты и обработки.Запланирована актуализация настроек поставляемой обработки'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Информация, , ПоставляемаяОбработка.Ссылка, - НСтр("ru = 'Завершена загрузка поставляемой обработки'") + Символы.ПС + Символы.ВК + ОписаниеПоставляемойОбработки.Манифест); - - Если Не ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.ОчередьЗаданий") Тогда - Возврат; - КонецЕсли; + НСтр("ru = 'Область данных:'") + ИнсталляцияОбработки.ОбластьДанных); - МодульОчередьЗаданий = ОбщегоНазначения.ОбщийМодуль("ОчередьЗаданий"); - // Планирование актуализации настроек используемых обработок - ИспользуемыеОбработки = ПереченьИнсталляций(ПоставляемаяОбработка.Ссылка); - Для Каждого ИнсталляцияОбработки Из ИспользуемыеОбработки Цикл - - ПараметрыМетода = Новый Массив; - ПараметрыМетода.Добавить(ИнсталляцияОбработки.ИспользуемаяОбработка); - - ПараметрыЗадания = Новый Структура; - ПараметрыЗадания.Вставить("ИмяМетода" , "ДополнительныеОтчетыИОбработкиВМоделиСервиса.АктуализацияНастроекИспользуемойОбработки"); - ПараметрыЗадания.Вставить("Параметры" , ПараметрыМетода); - ПараметрыЗадания.Вставить("КоличествоПовторовПриАварийномЗавершении", 3); - ПараметрыЗадания.Вставить("ОбластьДанных", ИнсталляцияОбработки.ОбластьДанных); - - МодульОчередьЗаданий.ДобавитьЗадание(ПараметрыЗадания); - - ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые дополнительные отчеты и обработки.Запланирована актуализация настроек поставляемой обработки'", - ОбщегоНазначения.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Информация, - , - ПоставляемаяОбработка.Ссылка, - НСтр("ru = 'Область данных:'") + ИнсталляцияОбработки.ОбластьДанных); - - КонецЦикла; + КонецЦикла; + + // Планирование инсталляции поставляемой обработки в области, которые ее ожидают + ОчередьИнсталляций = ОчередьИнсталляций(ПоставляемаяОбработка.Ссылка); + Для Каждого ЭлементОчереди Из ОчередьИнсталляций Цикл - // Планирование инсталляции поставляемой обработки в области, которые ее ожидают - ОчередьИнсталляций = ОчередьИнсталляций(ПоставляемаяОбработка.Ссылка); - Для Каждого ЭлементОчереди Из ОчередьИнсталляций Цикл - - Контекст = ЭлементОчереди.ПараметрыИнсталляции.Получить(); - - ОписаниеИнсталляции = Новый Структура( - "Идентификатор,Представление,Инсталляция", - ПоставляемаяОбработка.Ссылка.УникальныйИдентификатор(), - Контекст.Представление, - Контекст.Инсталляция); - - ПараметрыМетода = Новый Массив; - ПараметрыМетода.Добавить(ОписаниеИнсталляции); - ПараметрыМетода.Добавить(Контекст.БыстрыйДоступ); - ПараметрыМетода.Добавить(Контекст.Задания); - ПараметрыМетода.Добавить(Контекст.Разделы); - ПараметрыМетода.Добавить(Контекст.СправочникиИДокументы); - ПараметрыМетода.Добавить(Контекст.НастройкиРасположенияКоманд); - ПараметрыМетода.Добавить(Контекст.ВариантыДополнительногоОтчета); - ПараметрыМетода.Добавить(Контекст.Ответственный); - - ПараметрыЗадания = Новый Структура; - ПараметрыЗадания.Вставить("ИмяМетода", "ДополнительныеОтчетыИОбработкиВМоделиСервиса.УстановитьПоставляемуюОбработкуПриПолучении"); - ПараметрыЗадания.Вставить("Параметры", ПараметрыМетода); - ПараметрыЗадания.Вставить("КоличествоПовторовПриАварийномЗавершении", 1); - ПараметрыЗадания.Вставить("ОбластьДанных", ЭлементОчереди.ОбластьДанных); - МодульОчередьЗаданий.ДобавитьЗадание(ПараметрыЗадания); - - ЗаписьЖурналаРегистрации( - НСтр("ru = 'Поставляемые дополнительные отчеты и обработки.Запланирована отложенная установка поставляемой обработки в область данных'", - ОбщегоНазначения.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Информация, - , - ПоставляемаяОбработка.Ссылка, - НСтр("ru = 'Область данных:'") + ЭлементОчереди.ОбластьДанных); - - КонецЦикла; + Контекст = ЭлементОчереди.ПараметрыИнсталляции.Получить(); - КонецЕсли; + ОписаниеИнсталляции = Новый Структура( + "Идентификатор,Представление,Инсталляция", + ПоставляемаяОбработка.Ссылка.УникальныйИдентификатор(), + Контекст.Представление, + Контекст.Инсталляция); + + ПараметрыМетода = Новый Массив; + ПараметрыМетода.Добавить(ОписаниеИнсталляции); + ПараметрыМетода.Добавить(Контекст.БыстрыйДоступ); + ПараметрыМетода.Добавить(Контекст.Задания); + ПараметрыМетода.Добавить(Контекст.Разделы); + ПараметрыМетода.Добавить(Контекст.СправочникиИДокументы); + ПараметрыМетода.Добавить(Контекст.НастройкиРасположенияКоманд); + ПараметрыМетода.Добавить(Контекст.ВариантыДополнительногоОтчета); + ПараметрыМетода.Добавить(Контекст.Ответственный); + + ПараметрыЗадания = Новый Структура; + ПараметрыЗадания.Вставить("ИмяМетода", "ДополнительныеОтчетыИОбработкиВМоделиСервиса.УстановитьПоставляемуюОбработкуПриПолучении"); + ПараметрыЗадания.Вставить("Параметры", ПараметрыМетода); + ПараметрыЗадания.Вставить("КоличествоПовторовПриАварийномЗавершении", 1); + ПараметрыЗадания.Вставить("ОбластьДанных", ЭлементОчереди.ОбластьДанных); + МодульОчередьЗаданий.ДобавитьЗадание(ПараметрыЗадания); + + ЗаписьЖурналаРегистрации( + НСтр("ru = 'Поставляемые дополнительные отчеты и обработки.Запланирована отложенная установка поставляемой обработки в область данных'", + ОбщегоНазначения.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Информация, + , + ПоставляемаяОбработка.Ссылка, + НСтр("ru = 'Область данных:'") + ЭлементОчереди.ОбластьДанных); + + КонецЦикла; КонецПроцедуры @@ -1739,10 +1761,10 @@ // и их версиями. // // Параметры: -// ТаблицаСовместимости - ОбъектXDTO {http://www.1c.ru/1cFresh/ApplicationExtensions/Compatibility/1.0.0.1}CompatibilityList. +// ТаблицаСовместимости - ОбъектXDTO - ОбъектXDTO {http://www.1c.ru/1cFresh/ApplicationExtensions/Compatibility/1.0.0.1}CompatibilityList. // // Возвращаемое значение: -// Таблица значений, колонки: +// ТаблицаЗначений - , колонки: // ConfigarationName - строка, имя конфигурации, // VersionNumber - строка, версия конфигурации. // diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервисаМанифест/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервисаМанифест/Module.bsl index 3f7956f36..abc274cf2 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервисаМанифест/Module.bsl +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервисаМанифест/Module.bsl @@ -10,7 +10,7 @@ // Формирует манифест дополнительного отчета или обработки. // Для вызова из внешней обработки ПодготовкаДополнительныхОтчетовИОбработокКПубликацииВМоделиСервиса.epf, -// входящей в комплект поставки Менеджера сервиса. +// входящей в комплект поставки Менеджера сервиса. // // Параметры: // ОбъектОбработки - СправочникОбъект.ДополнительныеОтчетыИОбработки - дополнительная обработка. @@ -23,10 +23,10 @@ // ** Важный - Булево - Истина, если выводится в группе важных. // ** СмТакже - Булево - Истина, если выводится в группе "См. также". // РасписанияКоманд - Структура - в ключах идентификаторы команд, а в значениях - расписание. -// РазрешенияОбработки - Массив - объекты ОбъектXDTO. +// РазрешенияОбработки - Массив - объекты ОбъектXDTO. // // Возвращаемое значение: -// ОбъектXDTO {http://www.1c.ru/1cFresh/ApplicationExtensions/Manifest/a.b.c.d}ExtensionManifest - +// ОбъектXDTO - ОбъектXDTO {http://www.1c.ru/1cFresh/ApplicationExtensions/Manifest/a.b.c.d}ExtensionManifest - // манифест дополнительного отчета или обработки. // Функция СформироватьМанифест(Знач ОбъектОбработки, Знач ОбъектВерсии, Знач ВариантыОтчета = Неопределено, @@ -277,11 +277,11 @@ КонецФункции -// Заполняет объекты ОбъектОбработки, ОбъектВерсии и ВариантыОтчета данными, считываемыми из манифеста +// Заполняет объекты ОбъектОбработки, ОбъектВерсии и ВариантыОтчета данными, считываемыми из манифеста // дополнительного отчета или обработки. // // Параметры: -// Манифест - ОбъектXDTO {http://www.1c.ru/1cFresh/ApplicationExtensions/Manifest/a.b.c.d}ExtensionManifest - манифест +// Манифест - ОбъектXDTO - ОбъектXDTO {http://www.1c.ru/1cFresh/ApplicationExtensions/Manifest/a.b.c.d}ExtensionManifest - манифест // дополнительного отчета или обработки. // ОбъектОбработки - СправочникОбъект.ДополнительныеОтчетыИОбработки - объект, значения свойств которого будет установлены // значениями свойств дополнительного отчета или обработки из манифеста. diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервисаМанифестИнтерфейс/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервисаМанифестИнтерфейс/Module.bsl index 6147a9080..1a3b08bda 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервисаМанифестИнтерфейс/Module.bsl +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервисаМанифестИнтерфейс/Module.bsl @@ -14,7 +14,7 @@ // Версия - Строка - если параметр задан, то в пространство имен включается указанная версия вместо текущей. // // Возвращаемое значение: -// Строка +// Строка - // Функция Пакет(Знач Версия = "") Экспорт @@ -29,7 +29,7 @@ // Возвращает текущую (используемую вызывающим кодом) версию интерфейса сообщений // // Возвращаемое значение: -// Строка +// Строка - // Функция Версия() Экспорт @@ -40,7 +40,7 @@ // Возвращает название программного интерфейса сообщений // // Возвращаемое значение: -// Строка +// Строка - // Функция ПрограммныйИнтерфейс() Экспорт @@ -64,7 +64,7 @@ // получается тип сообщения. // // Возвращаемое значение: -// ТипXDTO +// ОбъектXDTO - // Функция ТипОбъектНазначения(Знач ИспользуемыйПакет = Неопределено) Экспорт @@ -79,7 +79,7 @@ // получается тип сообщения. // // Возвращаемое значение: -// ТипОбъектаXDTO +// ТипОбъектаXDTO - // Функция ТипНазначениеРазделам(Знач ИспользуемыйПакет = Неопределено) Экспорт @@ -94,7 +94,7 @@ // получается тип сообщения. // // Возвращаемое значение: -// ТипОбъектаXDTO +// ТипОбъектаXDTO - // Функция ТипНазначениеСправочникамИДокументам(Знач ИспользуемыйПакет = Неопределено) Экспорт @@ -109,7 +109,7 @@ // получается тип сообщения. // // Возвращаемое значение: -// ТипОбъектаXDTO +// ТипОбъектаXDTO - // Функция ТипКоманда(Знач ИспользуемыйПакет = Неопределено) Экспорт @@ -124,7 +124,7 @@ // получается тип сообщения. // // Возвращаемое значение: -// ТипОбъектаXDTO +// ТипОбъектаXDTO - // Функция ТипНазначениеВариантаОтчета(Знач ИспользуемыйПакет = Неопределено) Экспорт @@ -139,7 +139,7 @@ // получается тип сообщения. // // Возвращаемое значение: -// ТипОбъектаXDTO +// ТипОбъектаXDTO - // Функция ТипВариантОтчета(Знач ИспользуемыйПакет = Неопределено) Экспорт @@ -154,7 +154,7 @@ // получается тип сообщения. // // Возвращаемое значение: -// ТипОбъектаXDTO +// ТипОбъектаXDTO - // Функция ТипНастройкиКоманды(Знач ИспользуемыйПакет = Неопределено) Экспорт @@ -169,7 +169,7 @@ // получается тип сообщения. // // Возвращаемое значение: -// ТипОбъектаXDTO +// ТипОбъектаXDTO - // Функция ТипМанифест(Знач ИспользуемыйПакет = Неопределено) Экспорт @@ -181,7 +181,7 @@ // значениям XDTO-типа {http://www.1c.ru/1cFresh/ApplicationExtensions/Core/a.b.c.d}ExtensionCategory // // Возвращаемое значение: -// Структура +// Структура - // Функция СловарьВидыДополнительныхОтчетовИОбработок() Экспорт @@ -204,7 +204,7 @@ // значениям XDTO-типа {http://www.1c.ru/1cFresh/ApplicationExtensions/Core/a.b.c.d}ExtensionStartupType // // Возвращаемое значение: -// Структура +// Структура - // Функция СловарьСпособыВызоваДополнительныхОтчетовИОбработок() Экспорт diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиКлиент/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиКлиент/Module.bsl index dd55ccf44..dcaa28731 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиКлиент/Module.bsl +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиКлиент/Module.bsl @@ -343,6 +343,12 @@ КонецПроцедуры +Процедура ОткрытьСписокДополнительныхОтчетовИОбработок() Экспорт + + ОткрытьФорму("Справочник.ДополнительныеОтчетыИОбработки.ФормаСписка"); + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -505,7 +511,7 @@ КонецЕсли; ПараметрыСохранения = ФайловаяСистемаКлиент.ПараметрыСохраненияФайла(); - ПараметрыСохранения.ТекстПредложения = НСтр("ru = 'Для выгрузки внешней обработки (отчета) в файл рекомендуется установить расширение для веб-клиента 1С:Предприятие.'"); + ПараметрыСохранения.ТекстПредложения = НСтр("ru = 'Для сохранения внешней обработки (отчета) в файл рекомендуется установить расширение для работы с 1С:Предприятием.'"); ПараметрыСохранения.Диалог.Фильтр = ДополнительныеОтчетыИОбработкиКлиентСервер.ФильтрДиалоговВыбораИСохранения(); ПараметрыСохранения.Диалог.Заголовок = НСтр("ru = 'Укажите файл'"); ПараметрыСохранения.Диалог.ИндексФильтра = ?(ПараметрыВыгрузки.ЭтоОтчет, 1, 2); diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиКлиентСервер/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиКлиентСервер/Module.bsl index 9977ed9b2..0f08d3684 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиКлиентСервер/Module.bsl @@ -431,7 +431,7 @@ // Имя раздела, соответствующего начальной странице. // // Возвращаемое значение: -// Строка +// Строка - // Функция ИдентификаторРабочегоСтола() Экспорт diff --git a/SSL/src/CommonModules/ЖурналРегистрации/Module.bsl b/SSL/src/CommonModules/ЖурналРегистрации/Module.bsl index 17e05c365..5f1adf7f7 100644 --- a/SSL/src/CommonModules/ЖурналРегистрации/Module.bsl +++ b/SSL/src/CommonModules/ЖурналРегистрации/Module.bsl @@ -99,9 +99,12 @@ // Проверяем параметры на корректность. ДатаНачала = Неопределено; ДатаОкончания = Неопределено; - ДатыОтбораУказаны = ОтборЖурналаНаКлиенте.Свойство("ДатаНачала", ДатаНачала) И ОтборЖурналаНаКлиенте.Свойство("ДатаОкончания", ДатаОкончания) + ДатыОтбораУказаны= ОтборЖурналаНаКлиенте.Свойство("ДатаНачала", ДатаНачала) И ОтборЖурналаНаКлиенте.Свойство("ДатаОкончания", ДатаОкончания) И ЗначениеЗаполнено(ДатаНачала) И ЗначениеЗаполнено(ОтборЖурналаНаКлиенте.ДатаОкончания); + Если ДатыОтбораУказаны И ДатаНачала > ДатаОкончания Тогда + ВызватьИсключение НСтр("ru = 'Некорректно заданы условия отбора журнала регистрации. Дата начала больше даты окончания.'"); + КонецЕсли; СмещениеВремениСервера = СмещениеВремениСервера(); // Подготовка отбора @@ -299,21 +302,15 @@ ДатаОкончанияИнтервала = Неопределено; Если Не ОтборЖурналаРегистрации.Свойство("ДатаНачала", ДатаНачалаИнтервала) Или ДатаНачалаИнтервала = Неопределено Тогда - ДатаНачалаИнтервала = Дата('00010101000000'); + ДатаНачалаИнтервала = '00010101000000'; КонецЕсли; Если Не ОтборЖурналаРегистрации.Свойство("ДатаОкончания", ДатаОкончанияИнтервала) Или ДатаОкончанияИнтервала = Неопределено Тогда - ДатаОкончанияИнтервала = Дата('00010101000000'); + ДатаОкончанияИнтервала = '00010101000000'; КонецЕсли; - Если ЗначениеЗаполнено(ДатаОкончанияИнтервала) И ДатаНачалаИнтервала > ДатаОкончанияИнтервала Тогда - ПромежуточноеПредставление = ПредставлениеПериода(ДатаОкончанияИнтервала, ДатаНачалаИнтервала); - ПредставлениеЧастями = СтрРазделить(ПромежуточноеПредставление, "-"); - Если ПредставлениеЧастями.Количество() = 2 Тогда - ПредставлениеОтбора = СокрЛП(ПредставлениеЧастями[1]) + " - " + СокрЛП(ПредставлениеЧастями[0]); - КонецЕсли; - ИначеЕсли ЗначениеЗаполнено(ДатаНачалаИнтервала) Или ЗначениеЗаполнено(ДатаОкончанияИнтервала) Тогда + Если Не (ДатаНачалаИнтервала = '00010101000000' И ДатаОкончанияИнтервала = '00010101000000') Тогда ПредставлениеОтбора = ПредставлениеПериода(ДатаНачалаИнтервала, ДатаОкончанияИнтервала); КонецЕсли; diff --git a/SSL/src/CommonModules/ЖурналРегистрацииКлиент/Module.bsl b/SSL/src/CommonModules/ЖурналРегистрацииКлиент/Module.bsl index 98c6eb0a5..5aef7c14b 100644 --- a/SSL/src/CommonModules/ЖурналРегистрацииКлиент/Module.bsl +++ b/SSL/src/CommonModules/ЖурналРегистрацииКлиент/Module.bsl @@ -93,7 +93,7 @@ // Открывает форму для просмотра дополнительных данных события. // // Параметры: -// ТекущиеДанные - Строка таблицы значений - строка журнала регистрации. +// ТекущиеДанные - СтрокаТаблицыЗначений - строка журнала регистрации. // Процедура ОткрытьДанныеДляПросмотра(ТекущиеДанные) Экспорт @@ -124,7 +124,7 @@ // для отображения в ней подробных данных выбранного события. // // Параметры: -// Данные - Строка таблицы значений - строка журнала регистрации. +// Данные - СтрокаТаблицыЗначений - строка журнала регистрации. // Процедура ПросмотрТекущегоСобытияВОтдельномОкне(Данные) Экспорт @@ -179,7 +179,7 @@ // Выполняет обработку выбора отдельного события в таблице событий. // // Параметры: -// ТекущиеДанные - Строка таблицы значений - строка журнала регистрации. +// ТекущиеДанные - СтрокаТаблицыЗначений - строка журнала регистрации. // Поле - Поле таблицы значений - поле. // ИнтервалДат - интервал. // ОтборЖурналаРегистрации - Отбор - отбор журнала регистрации. @@ -192,7 +192,6 @@ Если Поле.Имя = "Данные" Или Поле.Имя = "ПредставлениеДанных" Тогда Если ТекущиеДанные.Данные <> Неопределено - И Не ЗначениеЗаполнено(ТекущиеДанные.Комментарий) И (ТипЗнч(ТекущиеДанные.Данные) <> Тип("Строка") И ЗначениеЗаполнено(ТекущиеДанные.Данные)) Тогда @@ -213,7 +212,7 @@ // Заполняет отбор в соответствии с значением в текущей колонке событий. // // Параметры: -// ТекущиеДанные - Строка таблицы значений. +// ТекущиеДанные - СтрокаТаблицыЗначений. // ТекущийЭлемент - Текущий элемент строки таблицы значений. // ОтборЖурналаРегистрации - Структура - отбор журнала регистрации. // КолонкиИсключения - Список значений - колонки исключения. diff --git a/SSL/src/CommonModules/ЗагрузкаДанныхИзФайлаКлиент/Module.bsl b/SSL/src/CommonModules/ЗагрузкаДанныхИзФайлаКлиент/Module.bsl index 3ae11a706..cdfe31592 100644 --- a/SSL/src/CommonModules/ЗагрузкаДанныхИзФайлаКлиент/Module.bsl +++ b/SSL/src/CommonModules/ЗагрузкаДанныхИзФайлаКлиент/Module.bsl @@ -77,7 +77,7 @@ Процедура ДиалогЗагрузкиФайла(ОповещениеЗавершения , ИмяФайла = "") Экспорт ПараметрыЗагрузки = ФайловаяСистемаКлиент.ПараметрыЗагрузкиФайла(); - ПараметрыЗагрузки.Диалог.Фильтр = НСтр("ru='Все поддерживаемые форматы файлов(*.xls;*.xlsx;*.ods;*.mxl;*.csv)|*.xls;*.xlsx;*.ods;*.mxl;*.csv|Книга Excel 97 (*.xls)|*.xls|Книга Excel 2007 (*.xlsx)|*.xlsx|Электронная таблица OpenDocument (*.ods)|*.ods|Текстовый документ c разделителями (*.csv)|*.csv|Табличный документ (*.mxl)|*.mxl'"); + ПараметрыЗагрузки.Диалог.Фильтр = НСтр("ru = 'Все поддерживаемые форматы файлов(*.xls;*.xlsx;*.ods;*.mxl;*.csv)|*.xls;*.xlsx;*.ods;*.mxl;*.csv|Книга Excel 97 (*.xls)|*.xls|Книга Excel 2007 (*.xlsx)|*.xlsx|Электронная таблица OpenDocument (*.ods)|*.ods|Текстовый документ c разделителями (*.csv)|*.csv|Табличный документ (*.mxl)|*.mxl'"); ПараметрыЗагрузки.ИдентификаторФормы = ОповещениеЗавершения.Модуль.УникальныйИдентификатор; diff --git a/SSL/src/CommonModules/ЗаметкиПользователяСлужебный/Module.bsl b/SSL/src/CommonModules/ЗаметкиПользователяСлужебный/Module.bsl index f460a1975..f56979b40 100644 --- a/SSL/src/CommonModules/ЗаметкиПользователяСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ЗаметкиПользователяСлужебный/Module.bsl @@ -96,33 +96,47 @@ | Заметки.ПометкаУдаления = &ПометкаУдаления | И &ПолеВладельца = &Владелец"; - ПолеВладельца = "Заметки.Предмет"; + ПолеВладельца = "Предмет"; Если ТипЗнч(Источник) = Тип("СправочникОбъект.Пользователи") И (ПометкаУдаления Или Источник.ДополнительныеСвойства.Свойство("СнятаПометкаУдаления")) Тогда - ПолеВладельца = "Заметки.Автор"; + ПолеВладельца = "Автор"; КонецЕсли; - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПолеВладельца", ПолеВладельца); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПолеВладельца", "Заметки." + ПолеВладельца); Запрос = Новый Запрос(ТекстЗапроса); Запрос.УстановитьПараметр("Владелец", Источник.Ссылка); Запрос.УстановитьПараметр("ПометкаУдаления", Не ПометкаУдаления); + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Справочник.Заметки"); + ЭлементБлокировки.УстановитьЗначение(ПолеВладельца, Источник.Ссылка); + УстановитьПривилегированныйРежим(Истина); - Выборка = Запрос.Выполнить().Выбрать(); - Пока Выборка.Следующий() Цикл - ЗаметкаОбъект = Выборка.Ссылка.ПолучитьОбъект(); - ЗаметкаОбъект.УстановитьПометкуУдаления(ПометкаУдаления, Ложь); - ЗаметкаОбъект.ДополнительныеСвойства.Вставить("ПометкаУдаленияЗаметки", Истина); - Попытка - ЗаметкаОбъект.Записать(); - Исключение - ТекстОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Заметки пользователя.Изменение пометки удаления'", ОбщегоНазначения.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка, ЗаметкаОбъект.Метаданные(), ЗаметкаОбъект.Ссылка, ТекстОшибки); - КонецПопытки; - КонецЦикла; + НачатьТранзакцию(); + Попытка + Блокировка.Заблокировать(); + Выборка = Запрос.Выполнить().Выбрать(); + + Пока Выборка.Следующий() Цикл + ЗаметкаОбъект = Выборка.Ссылка.ПолучитьОбъект(); + ЗаметкаОбъект.УстановитьПометкуУдаления(ПометкаУдаления, Ложь); + ЗаметкаОбъект.ДополнительныеСвойства.Вставить("ПометкаУдаленияЗаметки", Истина); + Попытка + ЗаметкаОбъект.Записать(); + Исключение + ТекстОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Заметки пользователя.Изменение пометки удаления'", ОбщегоНазначения.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, ЗаметкаОбъект.Метаданные(), ЗаметкаОбъект.Ссылка, ТекстОшибки); + КонецПопытки; + КонецЦикла; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; КонецПроцедуры diff --git a/SSL/src/CommonModules/ЗаполнениеОбъектовПереопределяемый/Module.bsl b/SSL/src/CommonModules/ЗаполнениеОбъектовПереопределяемый/Module.bsl index 19b1c71e0..d91f57d00 100644 --- a/SSL/src/CommonModules/ЗаполнениеОбъектовПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ЗаполнениеОбъектовПереопределяемый/Module.bsl @@ -65,7 +65,7 @@ // Перед записью и проведением у пользователя запрашивается подтверждение. // Необязательный. Значение по умолчанию - "Записывать". // * ТребуетсяРаботаСФайлами - Булево - если Истина, то в веб-клиенте предлагается -// установить расширение работы с файлами. +// установить расширение для работы с 1С:Предприятием. // Необязательный. Значение по умолчанию - Ложь. // // Настройки обработчика: diff --git a/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектов/Module.bsl b/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектов/Module.bsl index 606b42ada..d921fcc54 100644 --- a/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектов/Module.bsl +++ b/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектов/Module.bsl @@ -68,4 +68,33 @@ КонецПроцедуры +// Возвращает список реквизитов объекта, по которым установлен запрет редактирования. +// +// Параметры: +// ИмяОбъекта - Строка - полное имя объекта метаданных. +// +// Возвращаемое значение: +// Массив - имена реквизитов и табличных частей, для которых установлен запрет редактирования. +// +Функция БлокируемыеРеквизитыОбъекта(ИмяОбъекта) Экспорт + + Результат = Новый Массив; + + Объекты = ЗапретРедактированияРеквизитовОбъектовСлужебный.ОбъектыСЗаблокированнымиРеквизитами(); + Если Объекты[ИмяОбъекта] = Неопределено Тогда + Возврат Результат; + КонецЕсли; + + ОписанияРеквизитов = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ИмяОбъекта).ПолучитьБлокируемыеРеквизитыОбъекта(); + + Для Каждого ОписаниеРеквизита Из ОписанияРеквизитов Цикл + ЧастиСтроки = СтрРазделить(ОписаниеРеквизита, ";", Ложь); + ИмяРеквизита = ЧастиСтроки[0]; + Результат.Добавить(ИмяРеквизита); + КонецЦикла; + + Возврат Результат; + +КонецФункции + #КонецОбласти diff --git a/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектовКлиент/Module.bsl b/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектовКлиент/Module.bsl index 44c9f1898..8a51cea3d 100644 --- a/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектовКлиент/Module.bsl +++ b/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектовКлиент/Module.bsl @@ -231,8 +231,7 @@ // ТолькоВидимые - Булево - чтобы получить и разблокировать все реквизиты объекта, нужно указать Ложь. // // Возвращаемое значение: -// Массив - значения: -// * Строка - имена реквизитов. +// Массив из Строка - имена реквизитов. // Функция Реквизиты(Знач Форма, Знач ТолькоЗаблокированные = Истина, ТолькоВидимые = Истина) Экспорт diff --git a/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектовСлужебный/Module.bsl b/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектовСлужебный/Module.bsl index d4b892ca0..98ed17616 100644 --- a/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектовСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектовСлужебный/Module.bsl @@ -11,25 +11,6 @@ // //////////////////////////////////////////////////////////////////////////////// -#Область СлужебныйПрограммныйИнтерфейс - -// Проверяет, что для объекта метаданных предусмотрен запрет редактирования реквизитов. -// -// Параметры: -// ПолноеИмя - Строка - полное имя объекта метаданных. -// -Функция ЗапретРедактированияПредусмотрен(ПолноеИмя) Экспорт - - Объекты = Новый Соответствие; - ИнтеграцияПодсистемБСП.ПриОпределенииОбъектовСЗаблокированнымиРеквизитами(Объекты); - ЗапретРедактированияРеквизитовОбъектовПереопределяемый.ПриОпределенииОбъектовСЗаблокированнымиРеквизитами(Объекты); - - Возврат Объекты[ПолноеИмя] <> Неопределено; - -КонецФункции - -#КонецОбласти - #Область СлужебныеПроцедурыИФункции // Настраивает форму объекта для работы подсистемы: @@ -186,4 +167,14 @@ КонецПроцедуры +Функция ОбъектыСЗаблокированнымиРеквизитами() Экспорт + + Объекты = Новый Соответствие; + ИнтеграцияПодсистемБСП.ПриОпределенииОбъектовСЗаблокированнымиРеквизитами(Объекты); + ЗапретРедактированияРеквизитовОбъектовПереопределяемый.ПриОпределенииОбъектовСЗаблокированнымиРеквизитами(Объекты); + + Возврат Объекты; + +КонецФункции + #КонецОбласти diff --git a/SSL/src/CommonModules/ЗащитаПерсональныхДанных/Module.bsl b/SSL/src/CommonModules/ЗащитаПерсональныхДанных/Module.bsl index fa99a0ae8..e9c5d1892 100644 --- a/SSL/src/CommonModules/ЗащитаПерсональныхДанных/Module.bsl +++ b/SSL/src/CommonModules/ЗащитаПерсональныхДанных/Module.bsl @@ -92,8 +92,9 @@ // журнала регистрации, контроль которого предусмотрен требованиями. // Федерального закона от 27.07.2006 N152-ФЗ "О персональных данных" // и подзаконных актов. -// Использование события устанавливается для областей персональных данных, -// сведения о которых заполняются в потребителе. +// Использование события "Доступ.Доступ" устанавливается для областей персональных данных, +// сведения о которых перечислены в методе ЗаполнитьСведенияОПерсональныхДанных +// общего модуля ЗащитаПерсональныхДанныхПереопределяемый. // // Параметры: // Использование - Булево - если Истина, то события будут регистрироваться. @@ -971,6 +972,27 @@ КонецПроцедуры +// См. СозданиеНаОснованииПереопределяемый.ПриОпределенииОбъектовСКомандамиСозданияНаОсновании. +Процедура ПриОпределенииОбъектовСКомандамиСозданияНаОсновании(Объекты) Экспорт + + Объекты.Добавить(Метаданные.Документы.ОтзывСогласияНаОбработкуПерсональныхДанных); + Объекты.Добавить(Метаданные.Документы.СогласиеНаОбработкуПерсональныхДанных); + +КонецПроцедуры + +// См. УправлениеСвойствамиПереопределяемый.ПриПолученииПредопределенныхНаборовСвойств. +Процедура ПриПолученииПредопределенныхНаборовСвойств(Наборы) Экспорт + + Набор = Наборы.Строки.Добавить(); + Набор.Имя = "Документ_СогласиеНаОбработкуПерсональныхДанных"; + Набор.Идентификатор = Новый УникальныйИдентификатор("e7e9e299-1adf-442a-929f-c04f042e631e"); + + Набор = Наборы.Строки.Добавить(); + Набор.Имя = "Документ_ОтзывСогласияНаОбработкуПерсональныхДанных"; + Набор.Идентификатор = Новый УникальныйИдентификатор("bb5807bf-0b0e-48a3-8853-3c346da51798"); + +КонецПроцедуры + #Область ОбменДанными // Проверяет необходимость регистрации объекта на узлах плана обмена. diff --git a/SSL/src/CommonModules/ЗащитаПерсональныхДанныхКлиент/Module.bsl b/SSL/src/CommonModules/ЗащитаПерсональныхДанныхКлиент/Module.bsl index e28a08bd4..832c0e53a 100644 --- a/SSL/src/CommonModules/ЗащитаПерсональныхДанныхКлиент/Module.bsl +++ b/SSL/src/CommonModules/ЗащитаПерсональныхДанныхКлиент/Module.bsl @@ -172,7 +172,7 @@ НаборКонстант.ДнейДоСкрытияПерсональныхДанныхСубъектов = СтарыеНастройкиСистемы.ДнейДоСкрытияПерсональныхДанных; Если ФоновоеЗадание <> Неопределено Тогда - ТекстОшибки = НСтр("ru='Не удалось изменить настройки скрытия персональных данных. + ТекстОшибки = НСтр("ru = 'Не удалось изменить настройки скрытия персональных данных. |См. подробности в журнале регистрации.'"); ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстОшибки); КонецЕсли; diff --git a/SSL/src/CommonModules/ИнтеграцияПодсистемБСП/Module.bsl b/SSL/src/CommonModules/ИнтеграцияПодсистемБСП/Module.bsl index 87db0753b..53c124077 100644 --- a/SSL/src/CommonModules/ИнтеграцияПодсистемБСП/Module.bsl +++ b/SSL/src/CommonModules/ИнтеграцияПодсистемБСП/Module.bsl @@ -676,11 +676,6 @@ // См. СтандартныеПодсистемыСервер.УстановкаПараметровСеанса. Процедура ПриУстановкеПараметровСеанса(Параметры) Экспорт - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ПользователиВМоделиСервиса") Тогда - МодульПользователиСлужебныйВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("ПользователиСлужебныйВМоделиСервиса"); - МодульПользователиСлужебныйВМоделиСервиса.ПриУстановкеПараметровСеанса(Параметры); - КонецЕсли; - Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиБТС().ПриУстановкеПараметровСеанса Тогда МодульИнтеграцияПодсистемБТС = ОбщегоНазначения.ОбщийМодуль("ИнтеграцияПодсистемБТС"); МодульИнтеграцияПодсистемБТС.ПриУстановкеПараметровСеанса(Параметры); @@ -709,6 +704,11 @@ МодульДатыЗапретаИзмененияСлужебный.ПриДобавленииОбработчиковУстановкиПараметровСеанса(Обработчики); КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда + МодульУправлениеКонтактнойИнформациейСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформациейСлужебный"); + МодульУправлениеКонтактнойИнформациейСлужебный.ПриДобавленииОбработчиковУстановкиПараметровСеанса(Обработчики); + КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОценкаПроизводительности") Тогда МодульОценкаПроизводительностиСлужебный = ОбщегоНазначения.ОбщийМодуль("ОценкаПроизводительностиСлужебный"); МодульОценкаПроизводительностиСлужебный.ПриДобавленииОбработчиковУстановкиПараметровСеанса(Обработчики); @@ -724,6 +724,11 @@ МодульБлокировкаРаботыСВнешнимиРесурсами.ПриДобавленииОбработчиковУстановкиПараметровСеанса(Обработчики); КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда + МодульУправлениеСвойствамиСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеСвойствамиСлужебный"); + МодульУправлениеСвойствамиСлужебный.ПриДобавленииОбработчиковУстановкиПараметровСеанса(Обработчики); + КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда МодульУправлениеДоступомСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступомСлужебный"); МодульУправлениеДоступомСлужебный.ПриДобавленииОбработчиковУстановкиПараметровСеанса(Обработчики); @@ -749,9 +754,9 @@ МодульБизнесПроцессыИЗадачиСервер.ПриДобавленииИсключенийПоискаСсылок(ИсключенияПоискаСсылок); КонецЕсли; - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВерсионированиеОбъектов") Тогда - МодульВерсионированиеОбъектов = ОбщегоНазначения.ОбщийМодуль("ВерсионированиеОбъектов"); - МодульВерсионированиеОбъектов.ПриДобавленииИсключенийПоискаСсылок(ИсключенияПоискаСсылок); + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Валюты") Тогда + МодульРаботаСКурсамиВалют = ОбщегоНазначения.ОбщийМодуль("РаботаСКурсамиВалют"); + МодульРаботаСКурсамиВалют.ПриДобавленииИсключенийПоискаСсылок(ИсключенияПоискаСсылок); КонецЕсли; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВариантыОтчетов") Тогда @@ -759,24 +764,29 @@ МодульВариантыОтчетов.ПриДобавленииИсключенийПоискаСсылок(ИсключенияПоискаСсылок); КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВерсионированиеОбъектов") Тогда + МодульВерсионированиеОбъектов = ОбщегоНазначения.ОбщийМодуль("ВерсионированиеОбъектов"); + МодульВерсионированиеОбъектов.ПриДобавленииИсключенийПоискаСсылок(ИсключенияПоискаСсылок); + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки") Тогда + МодульДополнительныеОтчетыИОбработки = ОбщегоНазначения.ОбщийМодуль("ДополнительныеОтчетыИОбработки"); + МодульДополнительныеОтчетыИОбработки.ПриДобавленииИсключенийПоискаСсылок(ИсключенияПоискаСсылок); + КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда МодульОбменДаннымиСервер = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиСервер"); МодульОбменДаннымиСервер.ПриДобавленииИсключенийПоискаСсылок(ИсключенияПоискаСсылок); КонецЕсли; - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Валюты") Тогда - МодульРаботаСКурсамиВалют = ОбщегоНазначения.ОбщийМодуль("РаботаСКурсамиВалют"); - МодульРаботаСКурсамиВалют.ПриДобавленииИсключенийПоискаСсылок(ИсключенияПоискаСсылок); - КонецЕсли; - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда МодульРаботаСФайламиСлужебный = ОбщегоНазначения.ОбщийМодуль("РаботаСФайламиСлужебный"); МодульРаботаСФайламиСлужебный.ПриДобавленииИсключенийПоискаСсылок(ИсключенияПоискаСсылок); КонецЕсли; - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда - МодульУправлениеДоступомСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступомСлужебный"); - МодульУправлениеДоступомСлужебный.ПриДобавленииИсключенийПоискаСсылок(ИсключенияПоискаСсылок); + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РассылкаОтчетов") Тогда + МодульРассылкаОтчетов = ОбщегоНазначения.ОбщийМодуль("РассылкаОтчетов"); + МодульРассылкаОтчетов.ПриДобавленииИсключенийПоискаСсылок(ИсключенияПоискаСсылок); КонецЕсли; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда @@ -784,16 +794,20 @@ МодульУправлениеСвойствамиСлужебный.ПриДобавленииИсключенийПоискаСсылок(ИсключенияПоискаСсылок); КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступомСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступомСлужебный"); + МодульУправлениеДоступомСлужебный.ПриДобавленииИсключенийПоискаСсылок(ИсключенияПоискаСсылок); + КонецЕсли; + ПользователиСлужебный.ПриДобавленииИсключенийПоискаСсылок(ИсключенияПоискаСсылок); + ОбновлениеИнформационнойБазыСлужебный.ПриДобавленииИсключенийПоискаСсылок(ИсключенияПоискаСсылок); + СтандартныеПодсистемыСервер.ПриДобавленииИсключенийПоискаСсылок(ИсключенияПоискаСсылок); Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиБТС().ПриДобавленииИсключенийПоискаСсылок Тогда МодульИнтеграцияПодсистемБТС = ОбщегоНазначения.ОбщийМодуль("ИнтеграцияПодсистемБТС"); МодульИнтеграцияПодсистемБТС.ПриДобавленииИсключенийПоискаСсылок(ИсключенияПоискаСсылок); КонецЕсли; - ОбновлениеИнформационнойБазыСлужебный.ПриДобавленииИсключенийПоискаСсылок(ИсключенияПоискаСсылок); - СтандартныеПодсистемыСервер.ПриДобавленииИсключенийПоискаСсылок(ИсключенияПоискаСсылок); - Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиБИП().ПриДобавленииИсключенийПоискаСсылок Тогда МодульИнтеграцияПодсистемБИП = ОбщегоНазначения.ОбщийМодуль("ИнтеграцияПодсистемБИП"); МодульИнтеграцияПодсистемБИП.ПриДобавленииИсключенийПоискаСсылок(ИсключенияПоискаСсылок); @@ -1253,6 +1267,11 @@ МодульИнформацияПриЗапуске.ПриДобавленииПараметровРаботыКлиентаПриЗапуске(Параметры); КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтрольВеденияУчета") Тогда + МодульКонтрольВеденияУчетаСлужебный = ОбщегоНазначения.ОбщийМодуль("КонтрольВеденияУчетаСлужебный"); + МодульКонтрольВеденияУчетаСлужебный.ПриДобавленииПараметровРаботыКлиентаПриЗапуске(Параметры); + КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.НапоминанияПользователя") Тогда МодульНапоминанияПользователяСлужебный = ОбщегоНазначения.ОбщийМодуль("НапоминанияПользователяСлужебный"); МодульНапоминанияПользователяСлужебный.ПриДобавленииПараметровРаботыКлиентаПриЗапуске(Параметры); @@ -1404,6 +1423,11 @@ // См. СтандартныеПодсистемыСервер.ПередЗапускомПрограммы Процедура ПередЗапускомПрограммы() Экспорт + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ПользователиВМоделиСервиса") Тогда + МодульПользователиСлужебныйВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("ПользователиСлужебныйВМоделиСервиса"); + МодульПользователиСлужебныйВМоделиСервиса.ПередЗапускомПрограммы(); + КонецЕсли; + Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиБТС().ПередЗапускомПрограммы Тогда МодульИнтеграцияПодсистемБТС = ОбщегоНазначения.ОбщийМодуль("ИнтеграцияПодсистемБТС"); МодульИнтеграцияПодсистемБТС.ПередЗапускомПрограммы(); @@ -1416,6 +1440,36 @@ КонецПроцедуры +// См. ОбновлениеИнформационнойБазыПереопределяемый.ПриОпределенииНастроек +Процедура ПриОпределенииОбъектовСНачальнымЗаполнением(Объекты) Экспорт + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.БизнесПроцессыИЗадачи") Тогда + МодульБизнесПроцессыИЗадачиСервер = ОбщегоНазначения.ОбщийМодуль("БизнесПроцессыИЗадачиСервер"); + МодульБизнесПроцессыИЗадачиСервер.ПриОпределенииОбъектовСНачальнымЗаполнением(Объекты); + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда + МодульУправлениеКонтактнойИнформациейСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформациейСлужебный"); + МодульУправлениеКонтактнойИнформациейСлужебный.ПриОпределенииОбъектовСНачальнымЗаполнением(Объекты); + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСПочтовымиСообщениями") Тогда + МодульРаботаСПочтовымиСообщениямиСлужебный = ОбщегоНазначения.ОбщийМодуль("РаботаСПочтовымиСообщениямиСлужебный"); + МодульРаботаСПочтовымиСообщениямиСлужебный.ПриОпределенииОбъектовСНачальнымЗаполнением(Объекты); + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда + МодульРаботаСФайламиСлужебный = ОбщегоНазначения.ОбщийМодуль("РаботаСФайламиСлужебный"); + МодульРаботаСФайламиСлужебный.ПриОпределенииОбъектовСНачальнымЗаполнением(Объекты); + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РассылкиОтчетов") Тогда + МодульРассылкаОтчетов = ОбщегоНазначения.ОбщийМодуль("РассылкаОтчетов"); + МодульРассылкаОтчетов.ПриОпределенииОбъектовСНачальнымЗаполнением(Объекты); + КонецЕсли; + +КонецПроцедуры + #КонецОбласти #Область ВариантыОтчетов @@ -1912,7 +1966,7 @@ // в текущей модели информационной базы. // // Параметры: -// НедоступныеВидыПубликации - Массив строк. +// НедоступныеВидыПубликации - Массив Из Строка. // Процедура ПриЗаполненииНедоступныхВидовПубликации(Знач НедоступныеВидыПубликации) Экспорт @@ -2181,6 +2235,21 @@ КонецПроцедуры +// Позволяет определить список объектов, которые нужно игнорировать при выполнении +// системных проверок. +// +// Параметры: +// Объекты - Массив - список объектов типа ОбъектМетаданных. +// +Процедура ПриОпределенииОбъектовИсключаемыхИзПроверки(Объекты) Экспорт + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступомСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступомСлужебный"); + МодульУправлениеДоступомСлужебный.ПриОпределенииОбъектовИсключаемыхИзПроверки(Объекты); + КонецЕсли; + +КонецПроцедуры + #КонецОбласти #Область НапоминанияПользователя @@ -2372,11 +2441,6 @@ МодульРаботаСФайламиСлужебный.ПриДобавленииОбработчиковОбновления(Обработчики); КонецЕсли; - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РассылкаОтчетов") Тогда - МодульРассылкаОтчетов = ОбщегоНазначения.ОбщийМодуль("РассылкаОтчетов"); - МодульРассылкаОтчетов.ПриДобавленииОбработчиковОбновления(Обработчики); - КонецЕсли; - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РегламентныеЗадания") Тогда МодульРегламентныеЗаданияСлужебный = ОбщегоНазначения.ОбщийМодуль("РегламентныеЗаданияСлужебный"); МодульРегламентныеЗаданияСлужебный.ПриДобавленииОбработчиковОбновления(Обработчики); @@ -2681,11 +2745,6 @@ МодульУправлениеПечатью.ПриОпределенииВидовПодключаемыхКоманд(ВидыПодключаемыхКоманд); КонецЕсли; - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЗаполнениеОбъектов") Тогда - МодульЗаполнениеОбъектов = ОбщегоНазначения.ОбщийМодуль("ЗаполнениеОбъектов"); - МодульЗаполнениеОбъектов.ПриОпределенииВидовПодключаемыхКоманд(ВидыПодключаемыхКоманд); - КонецЕсли; - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВариантыОтчетов") Тогда МодульВариантыОтчетов = ОбщегоНазначения.ОбщийМодуль("ВариантыОтчетов"); МодульВариантыОтчетов.ПриОпределенииВидовПодключаемыхКоманд(ВидыПодключаемыхКоманд); @@ -2721,11 +2780,6 @@ МодульУправлениеПечатью.ПриОпределенииСоставаНастроекПодключаемыхОбъектов(НастройкиПрограммногоИнтерфейса); КонецЕсли; - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЗаполнениеОбъектов") Тогда - МодульЗаполнениеОбъектов = ОбщегоНазначения.ОбщийМодуль("ЗаполнениеОбъектов"); - МодульЗаполнениеОбъектов.ПриОпределенииСоставаНастроекПодключаемыхОбъектов(НастройкиПрограммногоИнтерфейса); - КонецЕсли; - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВариантыОтчетов") Тогда МодульВариантыОтчетов = ОбщегоНазначения.ОбщийМодуль("ВариантыОтчетов"); МодульВариантыОтчетов.ПриОпределенииСоставаНастроекПодключаемыхОбъектов(НастройкиПрограммногоИнтерфейса); @@ -2751,11 +2805,6 @@ МодульУправлениеПечатью.ПриОпределенииКомандПодключенныхКОбъекту(НастройкиФормы, Источники, ПодключенныеОтчетыИОбработки, Команды); КонецЕсли; - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЗаполнениеОбъектов") Тогда - МодульЗаполнениеОбъектов = ОбщегоНазначения.ОбщийМодуль("ЗаполнениеОбъектов"); - МодульЗаполнениеОбъектов.ПриОпределенииКомандПодключенныхКОбъекту(НастройкиФормы, Источники, ПодключенныеОтчетыИОбработки, Команды); - КонецЕсли; - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВариантыОтчетов") Тогда МодульВариантыОтчетов = ОбщегоНазначения.ОбщийМодуль("ВариантыОтчетов"); МодульВариантыОтчетов.ПриОпределенииКомандПодключенныхКОбъекту(НастройкиФормы, Источники, ПодключенныеОтчетыИОбработки, Команды); @@ -2783,6 +2832,102 @@ КонецПроцедуры +// См. СозданиеНаОснованииПереопределяемый.ПриОпределенииОбъектовСКомандамиСозданияНаОсновании. +Процедура ПриОпределенииОбъектовСКомандамиСозданияНаОсновании(Объекты) Экспорт + + ПользователиСлужебный.ПриОпределенииОбъектовСКомандамиСозданияНаОсновании(Объекты); + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.БизнесПроцессыИЗадачи") Тогда + МодульБизнесПроцессыИЗадачиСервер = ОбщегоНазначения.ОбщийМодуль("БизнесПроцессыИЗадачиСервер"); + МодульБизнесПроцессыИЗадачиСервер.ПриОпределенииОбъектовСКомандамиСозданияНаОсновании(Объекты); + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Взаимодействия") Тогда + МодульВзаимодействия = ОбщегоНазначения.ОбщийМодуль("Взаимодействия"); + МодульВзаимодействия.ПриОпределенииОбъектовСКомандамиСозданияНаОсновании(Объекты); + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЗащитаПерсональныхДанных") Тогда + МодульЗащитаПерсональныхДанных = ОбщегоНазначения.ОбщийМодуль("ЗащитаПерсональныхДанных"); + МодульЗащитаПерсональныхДанных.ПриОпределенииОбъектовСКомандамиСозданияНаОсновании(Объекты); + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда + МодульРаботаСФайламиСлужебный = ОбщегоНазначения.ОбщийМодуль("РаботаСФайламиСлужебный"); + МодульРаботаСФайламиСлужебный.ПриОпределенииОбъектовСКомандамиСозданияНаОсновании(Объекты); + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ШаблоныСообщений") Тогда + МодульШаблоныСообщений = ОбщегоНазначения.ОбщийМодуль("ШаблоныСообщений"); + МодульШаблоныСообщений.ПриОпределенииОбъектовСКомандамиСозданияНаОсновании(Объекты); + КонецЕсли; + + Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиБТС().ПриОпределенииОбъектовСКомандамиСозданияНаОсновании Тогда + МодульИнтеграцияПодсистемБТС = ОбщегоНазначения.ОбщийМодуль("ИнтеграцияПодсистемБТС"); + МодульИнтеграцияПодсистемБТС.ПриОпределенииОбъектовСКомандамиСозданияНаОсновании(Объекты); + КонецЕсли; + + Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиБИП().ПриОпределенииОбъектовСКомандамиСозданияНаОсновании Тогда + МодульИнтеграцияПодсистемБИП = ОбщегоНазначения.ОбщийМодуль("ИнтеграцияПодсистемБИП"); + МодульИнтеграцияПодсистемБИП.ПриОпределенииОбъектовСКомандамиСозданияНаОсновании(Объекты); + КонецЕсли; + +КонецПроцедуры + +// См. СозданиеНаОснованииПереопределяемый.ПередДобавлениемКомандСозданияНаОсновании. +Процедура ПередДобавлениемКомандСозданияНаОсновании(КомандыСозданияНаОсновании, Параметры, СтандартнаяОбработка) Экспорт + + Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиБТС().ПередДобавлениемКомандСозданияНаОсновании Тогда + МодульИнтеграцияПодсистемБТС = ОбщегоНазначения.ОбщийМодуль("ИнтеграцияПодсистемБТС"); + МодульИнтеграцияПодсистемБТС.ПередДобавлениемКомандСозданияНаОсновании(КомандыСозданияНаОсновании, Параметры, СтандартнаяОбработка); + КонецЕсли; + + Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиБИП().ПередДобавлениемКомандСозданияНаОсновании Тогда + МодульИнтеграцияПодсистемБИП = ОбщегоНазначения.ОбщийМодуль("ИнтеграцияПодсистемБИП"); + МодульИнтеграцияПодсистемБИП.ПередДобавлениемКомандСозданияНаОсновании(КомандыСозданияНаОсновании, Параметры, СтандартнаяОбработка); + КонецЕсли; + +КонецПроцедуры + +// См. СозданиеНаОснованииПереопределяемый.ПриДобавленииКомандСозданияНаОсновании. +Процедура ПриДобавленииКомандСозданияНаОсновании(Объект, КомандыСозданияНаОсновании, Параметры, СтандартнаяОбработка) Экспорт + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.БизнесПроцессыИЗадачи") Тогда + МодульБизнесПроцессыИЗадачиСервер = ОбщегоНазначения.ОбщийМодуль("БизнесПроцессыИЗадачиСервер"); + МодульБизнесПроцессыИЗадачиСервер.ПриДобавленииКомандСозданияНаОсновании(Объект, КомандыСозданияНаОсновании, Параметры, СтандартнаяОбработка); + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ШаблоныСообщений") Тогда + МодульШаблоныСообщений = ОбщегоНазначения.ОбщийМодуль("ШаблоныСообщений"); + МодульШаблоныСообщений.ПриДобавленииКомандСозданияНаОсновании(Объект, КомандыСозданияНаОсновании, Параметры, СтандартнаяОбработка); + КонецЕсли; + + Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиБТС().ПриДобавленииКомандСозданияНаОсновании Тогда + МодульИнтеграцияПодсистемБТС = ОбщегоНазначения.ОбщийМодуль("ИнтеграцияПодсистемБТС"); + МодульИнтеграцияПодсистемБТС.ПриДобавленииКомандСозданияНаОсновании(Объект, КомандыСозданияНаОсновании, Параметры, СтандартнаяОбработка); + КонецЕсли; + + Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиБИП().ПриДобавленииКомандСозданияНаОсновании Тогда + МодульИнтеграцияПодсистемБИП = ОбщегоНазначения.ОбщийМодуль("ИнтеграцияПодсистемБИП"); + МодульИнтеграцияПодсистемБИП.ПриДобавленииКомандСозданияНаОсновании(Объект, КомандыСозданияНаОсновании, Параметры, СтандартнаяОбработка); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ПоискИУдалениеДублей + +// См. ПоискИУдалениеДублейПереопределяемый.ПриОпределенииОбъектовСПоискомДублей. +Процедура ПриОпределенииОбъектовСПоискомДублей(Объекты) Экспорт + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда + МодульУправлениеКонтактнойИнформациейСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформациейСлужебный"); + МодульУправлениеКонтактнойИнформациейСлужебный.ПриОпределенииОбъектовСПоискомДублей(Объекты); + КонецЕсли; + +КонецПроцедуры + #КонецОбласти #Область Пользователи @@ -3585,6 +3730,11 @@ МодульВзаимодействия.ПриПолученииПредопределенныхНаборовСвойств(ДеревоНаборов); КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЗащитаПерсональныхДанных") Тогда + МодульЗащитаПерсональныхДанных = ОбщегоНазначения.ОбщийМодуль("ЗащитаПерсональныхДанных"); + МодульЗащитаПерсональныхДанных.ПриПолученииПредопределенныхНаборовСвойств(ДеревоНаборов); + КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда МодульРаботаСФайламиСлужебный = ОбщегоНазначения.ОбщийМодуль("РаботаСФайламиСлужебный"); МодульРаботаСФайламиСлужебный.ПриПолученииПредопределенныхНаборовСвойств(ДеревоНаборов); @@ -3892,6 +4042,11 @@ МодульВзаимодействия.ПриЗаполненииСписковСОграничениемДоступа(Списки); КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДатыЗапретаИзменения") Тогда + МодульДатыЗапретаИзмененияСлужебный = ОбщегоНазначения.ОбщийМодуль("ДатыЗапретаИзмененияСлужебный"); + МодульДатыЗапретаИзмененияСлужебный.ПриЗаполненииСписковСОграничениемДоступа(Списки); + КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки") Тогда МодульДополнительныеОтчетыИОбработки = ОбщегоНазначения.ОбщийМодуль("ДополнительныеОтчетыИОбработки"); МодульДополнительныеОтчетыИОбработки.ПриЗаполненииСписковСОграничениемДоступа(Списки); @@ -4280,6 +4435,7 @@ События.Вставить("ПриПолученииПриоритетаОбновления", Ложь); // Печать + События.Вставить("ПриПодготовкеСпискаМакетовВФорматеОфисныхДокументовФормируемыхНаСервере", Ложь); События.Вставить("ПриОпределенииОбъектовСКомандамиПечати", Ложь); События.Вставить("ПередДобавлениемКомандПечати", Ложь); События.Вставить("ПриПолученииНастроекСпискаКомандПечати", Ложь); @@ -4295,6 +4451,9 @@ События.Вставить("ПриОпределенииВидовПодключаемыхКоманд", Ложь); События.Вставить("ПриОпределенииСоставаНастроекПодключаемыхОбъектов", Ложь); События.Вставить("ПриОпределенииКомандПодключенныхКОбъекту", Ложь); + События.Вставить("ПриОпределенииОбъектовСКомандамиСозданияНаОсновании", Ложь); + События.Вставить("ПередДобавлениемКомандСозданияНаОсновании", Ложь); + События.Вставить("ПриДобавленииКомандСозданияНаОсновании", Ложь); // Пользователи События.Вставить("ПриОпределенииНастроек", Ложь); diff --git a/SSL/src/CommonModules/ИнтеграцияПодсистемБСПКлиент/Module.bsl b/SSL/src/CommonModules/ИнтеграцияПодсистемБСПКлиент/Module.bsl index b30077d21..e5feeb293 100644 --- a/SSL/src/CommonModules/ИнтеграцияПодсистемБСПКлиент/Module.bsl +++ b/SSL/src/CommonModules/ИнтеграцияПодсистемБСПКлиент/Module.bsl @@ -83,6 +83,9 @@ // Проверка необходимости восстановления связи с главным узлом. Параметры.Модули.Добавить(Новый Структура("Модуль, Номер", СтандартныеПодсистемыКлиент, 3)); + // Проверка необходимости выбора начальных неизменяемых настроек ИБ (основной язык, часовой пояс). + Параметры.Модули.Добавить(Новый Структура("Модуль, Номер", СтандартныеПодсистемыКлиент, 4)); + // Подтверждение легальности перед началом обновления ИБ. Если ОбщегоНазначенияКлиент.ПодсистемаСуществует( "СтандартныеПодсистемы.ПроверкаЛегальностиПолученияОбновления") Тогда @@ -146,6 +149,11 @@ // См. ОбщегоНазначенияКлиентПереопределяемый.ПриНачалеРаботыСистемы. Процедура ПриНачалеРаботыСистемы(Параметры) Экспорт + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ВариантыОтчетов") Тогда + МодульВариантыОтчетовКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ВариантыОтчетовКлиент"); + Параметры.Модули.Добавить(МодульВариантыОтчетовКлиент); + КонецЕсли; + // Открытие помощника настройки подчиненного узла РИБ при первом запуске. Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда МодульОбменДаннымиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ОбменДаннымиКлиент"); @@ -221,6 +229,11 @@ МодульИнформацияПриЗапускеКлиент.ПослеНачалаРаботыСистемы(); КонецЕсли; + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.КонтрольВеденияУчета") Тогда + МодульКонтрольВеденияУчетаСлужебныйКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("КонтрольВеденияУчетаСлужебныйКлиент"); + МодульКонтрольВеденияУчетаСлужебныйКлиент.ПослеНачалаРаботыСистемы(); + КонецЕсли; + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.НапоминанияПользователя") Тогда МодульНапоминанияПользователяКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("НапоминанияПользователяКлиент"); МодульНапоминанияПользователяКлиент.ПослеНачалаРаботыСистемы(); @@ -333,6 +346,11 @@ // См. ОтчетыКлиентПереопределяемый.ОбработкаРасшифровки. Процедура ПриОбработкеРасшифровки(ФормаОтчета, Элемент, Расшифровка, СтандартнаяОбработка) Экспорт + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.КонтрольВеденияУчета") Тогда + МодульКонтрольВеденияУчетаСлужебныйКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("КонтрольВеденияУчетаСлужебныйКлиент"); + МодульКонтрольВеденияУчетаСлужебныйКлиент.ПриОбработкеРасшифровки(ФормаОтчета, Элемент, Расшифровка, СтандартнаяОбработка); + КонецЕсли; + Если ИнтеграцияПодсистемБСПКлиентПовтИсп.ПодпискиБТС().ПриОбработкеРасшифровки Тогда МодульИнтеграцияПодсистемБТСКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ИнтеграцияПодсистемБТСКлиент"); МодульИнтеграцияПодсистемБТСКлиент.ПриОбработкеРасшифровки(ФормаОтчета, Элемент, Расшифровка, СтандартнаяОбработка); @@ -363,6 +381,11 @@ // См. ОтчетыКлиентПереопределяемый.ОбработчикКоманды. Процедура ПриОбработкеКоманды(ФормаОтчета, Команда, Результат) Экспорт + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.КонтрольВеденияУчета") Тогда + МодульКонтрольВеденияУчетаСлужебныйКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("КонтрольВеденияУчетаСлужебныйКлиент"); + МодульКонтрольВеденияУчетаСлужебныйКлиент.ПриОбработкеКоманды(ФормаОтчета, Команда, Результат); + КонецЕсли; + Если ИнтеграцияПодсистемБСПКлиентПовтИсп.ПодпискиБТС().ПриОбработкеКоманды Тогда МодульИнтеграцияПодсистемБТСКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ИнтеграцияПодсистемБТСКлиент"); МодульИнтеграцияПодсистемБТСКлиент.ПриОбработкеКоманды(ФормаОтчета, Команда, Результат); @@ -450,10 +473,10 @@ #Область ЗавершениеРаботыПользователей // Вызывается при завершении сеанса средствами подсистемы ЗавершениеРаботыПользователей. -// +// // Параметры: // ФормаВладелец - ФормаКлиентскогоПриложения, из которой выполняется завершение сеанса, -// НомераСеансов - Число (8,0,+) - номер сеанса, который будет завершен, +// НомераСеансов - Число (8, 0, +) - номер сеанса, который будет завершен, // СтандартнаяОбработка - Булево, флаг выполнения стандартной обработки завершения сеанса // (подключение к агенту сервера через COM-соединение или сервер администрирования с // запросом параметров подключения к кластеру у текущего пользователя). Может быть @@ -562,7 +585,7 @@ // Проверяет возможность выполнения резервного копирования в пользовательском режиме. // // Параметры: -// Результат - Булево (возвращаемое значение). +// Результат - Булево - (возвращаемое значение). // Процедура ПриПроверкеВозможностиРезервногоКопированияВПользовательскомРежиме(Результат) Экспорт diff --git a/SSL/src/CommonModules/ИнтерфейсODataСлужебный/Module.bsl b/SSL/src/CommonModules/ИнтерфейсODataСлужебный/Module.bsl index aecd40b68..9b0688532 100644 --- a/SSL/src/CommonModules/ИнтерфейсODataСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ИнтерфейсODataСлужебный/Module.bsl @@ -13,7 +13,8 @@ // Параметры: // ТипСсылки - Тип, // -// Возвращаемое значение: ОбъектМетаданных. +// Возвращаемое значение: +// ОбъектМетаданных - . // Функция ОбъектМетаданныхПоТипуСсылки(Знач ТипСсылки) Экспорт @@ -35,7 +36,7 @@ // ПроверяемыйТип - Тип - проверяемый тип. // // Возвращаемое значение: -// Истина - если тип примитивный. +// Булево - Истина - если тип примитивный. // Функция ЭтоСсылочныйТип(Знач ПроверяемыйТип) Экспорт @@ -48,7 +49,8 @@ // Параметры: // ОписаниеТипов - ОписаниеТипов. // -// Возвращаемое значение: Булево. +// Возвращаемое значение: +// Булево - // Функция ЭтоНаборТиповСсылок(Знач ОписаниеТипов) Экспорт @@ -98,7 +100,8 @@ // Параметры: // ОбъектМетаданных - проверяемый объект метаданных. // -// Возвращаемое значение: Булево. +// Возвращаемое значение: +// Булево - // Функция ЭтоНаборЗаписейПоследовательности(Знач ОбъектМетаданных) Экспорт @@ -111,7 +114,8 @@ // Параметры: // ОбъектМетаданных - проверяемый объект метаданных. // -// Возвращаемое значение: Булево. +// Возвращаемое значение: +// Булево - // Функция ЭтоНаборЗаписейПерерасчета(Знач ОбъектМетаданных) Экспорт @@ -124,7 +128,8 @@ // Параметры: // ОбъектМетаданных - проверяемый объект метаданных. // -// Возвращаемое значение: Булево. +// Возвращаемое значение: +// Булево - // Функция ЭтоНаборЗаписей(Знач ОбъектМетаданных) Экспорт @@ -207,7 +212,8 @@ // Возвращает описание типов, содержащее все ссылочные типы объектов метаданных, существующих // в конфигурации. // -// Возвращаемое значение: ОписаниеТипов. +// Возвращаемое значение: +// ОписаниеТипов - . // Функция ОписаниеСсылочныхТипов() @@ -222,7 +228,8 @@ // Возвращает ссылки точек маршрута бизнес-процессов. // -// Возвращаемое значение: ФиксированноеСоответствие: +// Возвращаемое значение: +// ФиксированноеСоответствие: // * Ключ - Тип - тип ТочкаМаршрутаБизнесПроцессаСсылка, // * Значение - Строка - имя бизнес-процесса. // diff --git a/SSL/src/CommonModules/ИнформацияПриЗапуске/Module.bsl b/SSL/src/CommonModules/ИнформацияПриЗапуске/Module.bsl index 54b59f1bb..cea2f7e2a 100644 --- a/SSL/src/CommonModules/ИнформацияПриЗапуске/Module.bsl +++ b/SSL/src/CommonModules/ИнформацияПриЗапуске/Module.bsl @@ -340,7 +340,7 @@ ЛокализованноеИмяМакета = ИмяМакета + "_" + ТекущийЯзык().КодЯзыка; Макет = КоллекцияМакетов.Найти(ЛокализованноеИмяМакета); Если Макет = Неопределено Тогда - ЛокализованноеИмяМакета = ИмяМакета + "_" + Метаданные.ОсновнойЯзык.КодЯзыка; + ЛокализованноеИмяМакета = ИмяМакета + "_" + ОбщегоНазначения.КодОсновногоЯзыка(); Макет = КоллекцияМакетов.Найти(ЛокализованноеИмяМакета); КонецЕсли; diff --git a/SSL/src/CommonModules/КалендарныеГрафики/Module.bsl b/SSL/src/CommonModules/КалендарныеГрафики/Module.bsl index dcd558cd2..90ed44c30 100644 --- a/SSL/src/CommonModules/КалендарныеГрафики/Module.bsl +++ b/SSL/src/CommonModules/КалендарныеГрафики/Module.bsl @@ -737,7 +737,7 @@ Если ДанныеФайлов = Неопределено Тогда ТекстСообщения = НСтр("ru = 'Не удалось получить данные календаря. - |Работа с классификаторами не поддерживается или отсутствует.'"); + |Классификаторы не поддерживаются или подсистема «Работа с классификаторами» отсутствует.'"); ВызватьИсключение ТекстСообщения; КонецЕсли; @@ -830,28 +830,7 @@ Обработчик.РежимВыполнения = "Оперативно"; Обработчик.ОбщиеДанные = Истина; - Если Не ОбщегоНазначения.РазделениеВключено() Тогда - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = ВерсияОбновленияДанныхПроизводственныхКалендарей(); - Обработчик.Процедура = "КалендарныеГрафики.ОбновитьДанныеЗависимыеОтПроизводственныхКалендарей"; - Обработчик.ОчередьОтложеннойОбработки = 1; - Обработчик.ПроцедураЗаполненияДанныхОбновления = "КалендарныеГрафики.ЗаполнитьДанныеОбновленияДанныхЗависимыхОтПроизводственныхКалендарей"; - Обработчик.РежимВыполнения = "Отложенно"; - Обработчик.ЗапускатьИВПодчиненномУзлеРИБСФильтрами = Истина; - Обработчик.ЧитаемыеОбъекты = "РегистрСведений.ДанныеПроизводственногоКалендаря"; - Обработчик.ИзменяемыеОбъекты = "РегистрСведений.ДанныеПроизводственногоКалендаря"; - Обработчик.ПроцедураПроверки = "ОбновлениеИнформационнойБазы.ДанныеОбновленыНаНовуюВерсиюПрограммы"; - Обработчик.Идентификатор = Новый УникальныйИдентификатор("b1082291-b482-418f-82ab-3c96e93072cc"); - Обработчик.Комментарий = НСтр("ru = 'Обновление графиков работы и др. данных, зависимых от производственных календарей.'"); - ЗаполнитьБлокируемыеОбъектыЗависимыеОтПроизводственныхКалендарей(Обработчик); - Обработчик.ПриоритетыВыполнения = ОбновлениеИнформационнойБазы.ПриоритетыВыполненияОбработчика(); - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ГрафикиРаботы") Тогда - МодульГрафикиРаботы = ОбщегоНазначения.ОбщийМодуль("ГрафикиРаботы"); - Приоритет = Обработчик.ПриоритетыВыполнения.Добавить(); - Приоритет.Процедура = МодульГрафикиРаботы.ИмяПроцедурыОбновленияГрафиковРаботы(); - Приоритет.Порядок = "До"; - КонецЕсли; - КонецЕсли; + ДобавитьОбработчикДанныхЗависимыхОтПроизводственныхКалендарей(Обработчики); КонецПроцедуры @@ -1188,6 +1167,17 @@ КонецПроцедуры +Процедура ЗаполнитьИзменяемыеОбъектыЗависимыеОтПроизводственныхКалендарей(ИзменяемыеОбъекты) + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ГрафикиРаботы") Тогда + МодульГрафикиРаботы = ОбщегоНазначения.ОбщийМодуль("ГрафикиРаботы"); + МодульГрафикиРаботы.ЗаполнитьИзменяемыеОбъектыЗависимыеОтПроизводственныхКалендарей(ИзменяемыеОбъекты); + КонецЕсли; + + КалендарныеГрафикиПереопределяемый.ПриЗаполненииИзменяемыхОбъектовЗависимыхОтПроизводственныхКалендарей(ИзменяемыеОбъекты); + +КонецПроцедуры + // Процедура выполняет обновление данных, зависимых от производственных календарей, // по всем областям данных. // @@ -1240,4 +1230,41 @@ КонецПроцедуры +Процедура ДобавитьОбработчикДанныхЗависимыхОтПроизводственныхКалендарей(Обработчики) + + Если ОбщегоНазначения.РазделениеВключено() Тогда + // В режиме сервиса запускается с помощью альтернативной механики. + Возврат; + КонецЕсли; + + ИзменяемыеОбъекты = Новый Массив; + ЗаполнитьИзменяемыеОбъектыЗависимыеОтПроизводственныхКалендарей(ИзменяемыеОбъекты); + Если ИзменяемыеОбъекты.Количество() = 0 Тогда + // Не подключается никаких зависимых объектов. + Возврат; + КонецЕсли; + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = ВерсияОбновленияДанныхПроизводственныхКалендарей(); + Обработчик.Процедура = "КалендарныеГрафики.ОбновитьДанныеЗависимыеОтПроизводственныхКалендарей"; + Обработчик.ОчередьОтложеннойОбработки = 1; + Обработчик.ПроцедураЗаполненияДанныхОбновления = "КалендарныеГрафики.ЗаполнитьДанныеОбновленияДанныхЗависимыхОтПроизводственныхКалендарей"; + Обработчик.РежимВыполнения = "Отложенно"; + Обработчик.ЗапускатьИВПодчиненномУзлеРИБСФильтрами = Истина; + Обработчик.ЧитаемыеОбъекты = "РегистрСведений.ДанныеПроизводственногоКалендаря"; + Обработчик.ПроцедураПроверки = "ОбновлениеИнформационнойБазы.ДанныеОбновленыНаНовуюВерсиюПрограммы"; + Обработчик.Идентификатор = Новый УникальныйИдентификатор("b1082291-b482-418f-82ab-3c96e93072cc"); + Обработчик.Комментарий = НСтр("ru = 'Обновление графиков работы и др. данных, зависимых от производственных календарей.'"); + Обработчик.ИзменяемыеОбъекты = СтрСоединить(ИзменяемыеОбъекты, ","); + ЗаполнитьБлокируемыеОбъектыЗависимыеОтПроизводственныхКалендарей(Обработчик); + Обработчик.ПриоритетыВыполнения = ОбновлениеИнформационнойБазы.ПриоритетыВыполненияОбработчика(); + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ГрафикиРаботы") Тогда + МодульГрафикиРаботы = ОбщегоНазначения.ОбщийМодуль("ГрафикиРаботы"); + Приоритет = Обработчик.ПриоритетыВыполнения.Добавить(); + Приоритет.Процедура = МодульГрафикиРаботы.ИмяПроцедурыОбновленияГрафиковРаботы(); + Приоритет.Порядок = "До"; + КонецЕсли; + +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/CommonModules/КалендарныеГрафикиПереопределяемый/Module.bsl b/SSL/src/CommonModules/КалендарныеГрафикиПереопределяемый/Module.bsl index a4bcf8d00..5c1d5ae28 100644 --- a/SSL/src/CommonModules/КалендарныеГрафикиПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/КалендарныеГрафикиПереопределяемый/Module.bsl @@ -43,4 +43,15 @@ КонецПроцедуры +// Вызывается при регистрации отложенного обработчика обновления данных, зависимых от производственных календарей. +// В ИзменяемыеОбъекты следует добавить имена метаданных объектов, +// которые будут изменяться при обновлении производственных календарей. +// +// Параметры: +// ИзменяемыеОбъекты - Массив - имена метаданных изменяемых объектов. +// +Процедура ПриЗаполненииИзменяемыхОбъектовЗависимыхОтПроизводственныхКалендарей(ИзменяемыеОбъекты) Экспорт + +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/CommonModules/КонтрольВеденияУчета/Module.bsl b/SSL/src/CommonModules/КонтрольВеденияУчета/Module.bsl index 046956ad2..5a9c27ce0 100644 --- a/SSL/src/CommonModules/КонтрольВеденияУчета/Module.bsl +++ b/SSL/src/CommonModules/КонтрольВеденияУчета/Module.bsl @@ -25,6 +25,11 @@ // * Свойство3 - ЛюбаяСсылка, Булево, Число, Строка, Дата - третье значение параметра. // ... // - Массив - несколько параметров проверки (элементы массива типа Структура, как описано выше). +// ПроверяемыеОбъекты - ЛюбаяСсылка - если передано, то проверка будет выполнена только для данного объекта. +// Проверка должна поддерживать выборочную проверку и у нее должно быть +// установлено свойство ПоддерживаетВыборочнуюПроверку в значение Истина. +// см. КонтрольВеденияУчетаПереопределяемый.ПриОпределенииПроверок. +// - Массив - ссылки на объекты, которые требуется проверить. // // Пример: // 1. Проверка = КонтрольВеденияУчета.ПроверкаПоИдентификатору("ПроверитьСсылочнуюЦелостность"); @@ -36,7 +41,7 @@ // ПараметрыВыполненияПроверки.Добавить(Параметр2); // ВыполнитьПроверку("ПроверитьПроведениеДокументов", ПараметрыВыполненияПроверки); // -Процедура ВыполнитьПроверку(Знач Проверка, Знач ПараметрыВыполненияПроверки = Неопределено) Экспорт +Процедура ВыполнитьПроверку(Знач Проверка, Знач ПараметрыВыполненияПроверки = Неопределено, ПроверяемыеОбъекты = Неопределено) Экспорт Если ТипЗнч(Проверка) = Тип("Строка") Тогда ВыполняемаяПроверка = ПроверкаПоИдентификатору(Проверка); @@ -54,8 +59,8 @@ Если ПараметрыВыполненияПроверки <> Неопределено Тогда ПроверитьПараметрыВыполненияПроверки(ПараметрыВыполненияПроверки, "КонтрольВеденияУчета.ВыполнитьПроверку"); КонецЕсли; - - КонтрольВеденияУчетаСлужебный.ВыполнитьПроверку(ВыполняемаяПроверка, ПараметрыВыполненияПроверки); + + КонтрольВеденияУчетаСлужебный.ВыполнитьПроверку(ВыполняемаяПроверка, ПараметрыВыполненияПроверки, ПроверяемыеОбъекты); КонецПроцедуры @@ -95,6 +100,9 @@ // Неопределено (табличная часть дополнительных свойств должна быть пуста). // Если Ложь, то значения остальных свойств могут быть произвольными, главное // чтобы соответствующие свойства были равны свойствам структуры. По умолчанию Истина. +// УчитыватьОтветственного - Булево - если Истина, то учитываются только проблемы с незаполненным ответственным +// и те, за которые ответственный текущий пользователь. +// По умолчанию - Ложь. // // Возвращаемое значение: // Структура - сводка: @@ -109,13 +117,15 @@ // ВидПроверок.Добавить(МесяцЗакрытия); // Результат = СводнаяИнформацияПоВидамПроверок(ВидПроверок); // -Функция СводнаяИнформацияПоВидамПроверок(ВидПроверок, ПоискПоТочномуСоответствию = Истина) Экспорт +Функция СводнаяИнформацияПоВидамПроверок(ВидПроверок = Неопределено, ПоискПоТочномуСоответствию = Истина, УчитыватьОтветственного = Ложь) Экспорт ИмяПроцедуры = "КонтрольВеденияУчета.СводнаяИнформацияПоВидамПроверок"; - ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяПроцедуры, "ВидПроверок", ВидПроверок, КонтрольВеденияУчетаСлужебный.ОписаниеТипаВидПроверки()); + Если ВидПроверок <> Неопределено Тогда + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяПроцедуры, "ВидПроверок", ВидПроверок, КонтрольВеденияУчетаСлужебный.ОписаниеТипаВидПроверки()); + КонецЕсли; ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяПроцедуры, "ПоискПоТочномуСоответствию", ПоискПоТочномуСоответствию, Тип("Булево")); - Возврат КонтрольВеденияУчетаСлужебный.СводнаяИнформацияПоВидамПроверок(ВидПроверок, ПоискПоТочномуСоответствию); + Возврат КонтрольВеденияУчетаСлужебный.СводнаяИнформацияПоВидамПроверок(ВидПроверок, ПоискПоТочномуСоответствию, УчитыватьОтветственного); КонецФункции @@ -189,7 +199,7 @@ // ПроблемныйОбъект - ЛюбаяСсылка - объект, для которого нужно вычислить количество проблем. // // Возвращаемое значение: -// Число +// Число - // Функция КоличествоПроблемПоОбъекту(ПроблемныйОбъект) Экспорт @@ -219,7 +229,7 @@ // нужно вычислить количество проблем. // // Возвращаемое значение: -// Число +// Число - // Функция КоличествоПроблемПоПравилуПроверки(ПравилоПроверки) Экспорт @@ -513,7 +523,7 @@ КолонкаИндикаторОшибки.ПутьКДанным = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("%1.%2", ИмяСписка, ИмяКолонки); КолонкаИндикаторОшибки.ПоложениеЗаголовка = ПараметрыКолонкиИндикации.ПоложениеЗаголовка; КолонкаИндикаторОшибки.КартинкаШапки = ГлобальныеНастройки.КартинкаИндикатораПроблем; - КолонкаИндикаторОшибки.КартинкаЗначений = ГлобальныеНастройки.КартинкаИндикатораПроблем; + КолонкаИндикаторОшибки.КартинкаЗначений = БиблиотекаКартинок.КоллекцияВажностьПроблемВеденияУчета; КолонкаИндикаторОшибки.Заголовок = НСтр("ru = 'Индикатор ошибки'"); КолонкиСписка = ТаблицаФормы.ПодчиненныеЭлементы; @@ -563,35 +573,28 @@ Если ИмяКлючевогоПоля = "Ссылка" Тогда КлючиСтрок = Строки.ПолучитьКлючи(); + КлючСсылка = Истина; Иначе НачальныеКлючи = Строки.ПолучитьКлючи(); + КлючСсылка = ОбщегоНазначения.ЭтоСсылка(Тип(НачальныеКлючи[0])); КлючиСтрок = Новый Массив; Для Каждого НачальныйКлюч Из НачальныеКлючи Цикл КлючиСтрок.Добавить(НачальныйКлюч[ИмяКлючевогоПоля]); КонецЦикла; КонецЕсли; - ПроблемныеОбъекты = КонтрольВеденияУчетаСлужебный.ПроблемныеОбъекты(КлючиСтрок); + ПроблемныеОбъекты = КонтрольВеденияУчетаСлужебный.ПроблемныеОбъекты(КлючиСтрок, Истина); Для Каждого КлючСтроки Из КлючиСтрок Цикл - СтрокаСписка = Строки[КлючСтроки]; - Если Не СтрокаСписка.Данные.Свойство(КолонкаИндикатора) Тогда - Продолжить; - КонецЕсли; - - ТекстЯчейки = СтрокаСписка.Оформление.Получить(КолонкаИндикатора).НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Текст")); - - Если ПроблемныеОбъекты.Найти(КлючСтроки) = Неопределено Тогда - СтрокаСписка.Данные[КолонкаИндикатора] = 1; - Если ТекстЯчейки <> Неопределено Тогда - ТекстЯчейки.Значение = 0; - КонецЕсли; + Если КлючСсылка Тогда + КонтрольВеденияУчетаСлужебный.ЗаполнитьИндексКартинки(Строки, Строки[КлючСтроки], КлючСтроки, КолонкаИндикатора, ПроблемныеОбъекты); Иначе - СтрокаСписка.Данные[КолонкаИндикатора] = 0; - Если ТекстЯчейки <> Неопределено Тогда - ТекстЯчейки.Значение = 1; - КонецЕсли; + Для Каждого СтрокаСписка Из Строки Цикл + Если СтрокаСписка.Ключ[ИмяКлючевогоПоля] = КлючСтроки Тогда + КонтрольВеденияУчетаСлужебный.ЗаполнитьИндексКартинки(Строки, СтрокаСписка.Значение, КлючСтроки, КолонкаИндикатора, ПроблемныеОбъекты); + КонецЕсли; + КонецЦикла; КонецЕсли; КонецЦикла; @@ -621,33 +624,42 @@ Возврат; КонецЕсли; - ГлобальныеНастройки = КонтрольВеденияУчетаСлужебный.ГлобальныеНастройки(); + Настройки = КонтрольВеденияУчетаСлужебный.ГлобальныеНастройки(); + Настройки.Вставить("КоличествоПроблем", 0); + Настройки.Вставить("ТекстПроблемы", ""); + Настройки.Вставить("ВажностьПроблемы", Неопределено); + Настройки.Вставить("ДатаПоследнейПроверки", Неопределено); + Настройки.Вставить("ДетальныйВид", Ложь); + СсылкаНаОбъект = ТекущийОбъект.Ссылка; ЭлементыУправляемойФормы = Форма.Элементы; - КоличествоПроблемПоОбъекту = КоличествоПроблемПоОбъекту(СсылкаНаОбъект); + Настройки.КоличествоПроблем = КоличествоПроблемПоОбъекту(СсылкаНаОбъект); КлючУникальностиИмен = ОбщегоНазначения.КонтрольнаяСуммаСтрокой(СсылкаНаОбъект.Метаданные().ПолноеИмя() + ПолучитьРазделительПути() + Форма.ИмяФормы); ДекорацияГруппа = ЭлементыУправляемойФормы.Найти("ГруппаИндикатораОшибки_" + КлючУникальностиИмен); - - Если КоличествоПроблемПоОбъекту = 0 Тогда - - Если ДекорацияГруппа <> Неопределено Тогда - ЭлементыУправляемойФормы.Удалить(ДекорацияГруппа); - КонецЕсли; - Возврат; - КонецЕсли; ПараметрыГруппыИндикации = Новый Структура; КонтрольВеденияУчетаСлужебный.ПриОпределенииПараметровГруппыИндикации(ПараметрыГруппыИндикации, ТипЗнч(СсылкаНаОбъект)); КонтрольВеденияУчетаПереопределяемый.ПриОпределенииПараметровГруппыИндикации(ПараметрыГруппыИндикации, ТипЗнч(СсылкаНаОбъект)); + Если Настройки.КоличествоПроблем = 0 Тогда + Если ДекорацияГруппа <> Неопределено Тогда + ЭлементыУправляемойФормы.Удалить(ДекорацияГруппа); + КонецЕсли; + Возврат; + КонецЕсли; + Настройки.ДетальныйВид = ПараметрыГруппыИндикации.ДетальныйВид И Настройки.КоличествоПроблем = 1; + Если Настройки.ДетальныйВид Тогда + ЗаполнитьЗначенияСвойств(Настройки, КонтрольВеденияУчетаСлужебный.СведенияОПроблемеСОбъектом(СсылкаНаОбъект)); + КонецЕсли; + + Настройки.ДатаПоследнейПроверки = КонтрольВеденияУчетаСлужебный.ПоследняяПроверкаОбъекта(СсылкаНаОбъект); Если ДекорацияГруппа <> Неопределено Тогда ДекорацияНадпись = ЭлементыУправляемойФормы.Найти("ДекорацияНадпись_" + КлючУникальностиИмен); Если ДекорацияНадпись <> Неопределено Тогда - ДекорацияНадпись.Заголовок = КонтрольВеденияУчетаСлужебный.СформироватьОбщуюСтрокуИндикатор(Форма, СсылкаНаОбъект, КоличествоПроблемПоОбъекту, - ГлобальныеНастройки.ПояснениеИндикатораПроблем, ГлобальныеНастройки.ГиперссылкаИндикатораПроблем); + ДекорацияНадпись.Заголовок = КонтрольВеденияУчетаСлужебный.СформироватьОбщуюСтрокуИндикатор(Форма, СсылкаНаОбъект, Настройки); КонецЕсли; Иначе @@ -655,23 +667,52 @@ ГруппаИндикатораОшибки = КонтрольВеденияУчетаСлужебный.РазместитьГруппуИндикатораОшибки(Форма, КлючУникальностиИмен, ПараметрыГруппыИндикации.ИмяРодителяГруппы, ПараметрыГруппыИндикации.ВыводитьСнизу); - ОбщаяСтрокаИндикатор = КонтрольВеденияУчетаСлужебный.СформироватьОбщуюСтрокуИндикатор(Форма, СсылкаНаОбъект, КоличествоПроблемПоОбъекту, - ГлобальныеНастройки.ПояснениеИндикатораПроблем, ГлобальныеНастройки.ГиперссылкаИндикатораПроблем); + ОбщаяСтрокаИндикатор = КонтрольВеденияУчетаСлужебный.СформироватьОбщуюСтрокуИндикатор(Форма, СсылкаНаОбъект, Настройки); КонтрольВеденияУчетаСлужебный.ЗаполнитьГруппуИндикатораОшибки(Форма, ГруппаИндикатораОшибки, КлючУникальностиИмен, - ОбщаяСтрокаИндикатор, ГлобальныеНастройки.КартинкаИндикатораПроблем); + ОбщаяСтрокаИндикатор, Настройки); КонецЕсли; КонецПроцедуры +// Запускает фоновую проверку переданного объекта. +// Выполняются только те проверки, по которым ранее были найдены ошибки и у которых +// установлено свойство ПоддерживаетВыборочнуюПроверку в значение Истина. +// +// Параметры: +// ТекущийОбъект - Объект - <ВидОбъектаМетаданных>Объект.<ИмяОбъектаМетаданных>. +// +Процедура ПослеЗаписиНаСервере(ТекущийОбъект) Экспорт + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | РезультатыПроверкиУчета.ПравилоПроверки КАК ПравилоПроверки + |ИЗ + | РегистрСведений.РезультатыПроверкиУчета КАК РезультатыПроверкиУчета + |ГДЕ + | РезультатыПроверкиУчета.ПроблемныйОбъект = &ПроблемныйОбъект"; + Запрос.УстановитьПараметр("ПроблемныйОбъект", ТекущийОбъект.Ссылка); + + УстановитьПривилегированныйРежим(Истина); + Результат = Запрос.Выполнить().Выгрузить(); + УстановитьПривилегированныйРежим(Ложь); + + Проверки = Результат.ВыгрузитьКолонку("ПравилоПроверки"); + Если Проверки.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + ДлительныеОперации.ВыполнитьПроцедуру(, "КонтрольВеденияУчетаСлужебный.ПроверитьОбъект", ТекущийОбъект.Ссылка, Проверки); +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Прочие процедуры и функции. // Возвращает Истина, если есть права на просмотр проблем ведения учета. // // Возвращаемое значение: -// Булево +// Булево - // Функция ПодсистемаДоступна() Экспорт @@ -738,6 +779,16 @@ КонецФункции +// Принудительно обновляет состав проверок ведения учета при изменении метаданных +// или иных настроек. +// +Процедура ОбновитьПараметрыПроверокУчета() Экспорт + КонтрольВеденияУчетаСлужебный.ОбновитьПараметрыПроверокУчета(); + Если КонтрольВеденияУчетаСлужебный.ЕстьИзмененияПараметровПроверокУчета() Тогда + КонтрольВеденияУчетаСлужебный.ОбновитьВспомогательныеДанныеПоИзменениямКонфигурации(); + КонецЕсли; +КонецПроцедуры + #Область УстаревшиеПроцедурыИФункции // Устарела. Следует использовать функцию ПодробнаяИнформацияПоВидамПроверок. diff --git a/SSL/src/CommonModules/КонтрольВеденияУчетаВызовСервера/Module.bsl b/SSL/src/CommonModules/КонтрольВеденияУчетаВызовСервера/Module.bsl new file mode 100644 index 000000000..8e7464430 --- /dev/null +++ b/SSL/src/CommonModules/КонтрольВеденияУчетаВызовСервера/Module.bsl @@ -0,0 +1,122 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2019, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область СлужебныйПрограммныйИнтерфейс + +// Для вызова из команды отчета РезультатыПроверкиУчета. +// +Функция ИгнорироватьПроблему(ОтчетДанныеРасшифровки, ТабличныйДокумент, ИндексРасшифровки) Экспорт + Результат = РасшифровкаВыделеннойЯчейки(ОтчетДанныеРасшифровки, ТабличныйДокумент, ИндексРасшифровки); + Если Результат = Неопределено Тогда + Возврат Ложь; + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("ПроблемныйОбъект", Результат.ПроблемныйОбъект); + Запрос.УстановитьПараметр("ПравилоПроверки", Результат.ПравилоПроверки); + Запрос.УстановитьПараметр("ВидПроверки", Результат.ВидПроверки); + Запрос.Текст = + "ВЫБРАТЬ + | РезультатыПроверкиУчета.ИгнорироватьПроблему КАК ИгнорироватьПроблему + |ИЗ + | РегистрСведений.РезультатыПроверкиУчета КАК РезультатыПроверкиУчета + |ГДЕ + | РезультатыПроверкиУчета.ПроблемныйОбъект = &ПроблемныйОбъект + | И РезультатыПроверкиУчета.ПравилоПроверки = &ПравилоПроверки + | И РезультатыПроверкиУчета.ВидПроверки = &ВидПроверки"; + Значение = Запрос.Выполнить().Выгрузить()[0].ИгнорироватьПроблему; + + КонтрольВеденияУчета.ИгнорироватьПроблему(Результат, Не Значение); + + СтрокаНайдена = Ложь; + Для НомерСтроки = 1 По ТабличныйДокумент.ВысотаТаблицы Цикл + Для НомерКолонки = 1 По ТабличныйДокумент.ШиринаТаблицы Цикл + Область = ТабличныйДокумент.Область(НомерСтроки, НомерКолонки, НомерСтроки, НомерКолонки); + Если Область.Расшифровка <> ИндексРасшифровки Тогда + Продолжить; + КонецЕсли; + СтрокаНайдена = Истина; + Прервать; + КонецЦикла; + Если СтрокаНайдена Тогда + Прервать; + КонецЕсли; + КонецЦикла; + + Если СтрокаНайдена Тогда + Для НомерКолонки = 1 По ТабличныйДокумент.ШиринаТаблицы Цикл + Область = ТабличныйДокумент.Область(НомерСтроки, НомерКолонки, НомерСтроки, НомерКолонки); + Если Значение Тогда + ПоследняяСтрока = ТабличныйДокумент.ВысотаТаблицы; + ЦветТекста = ТабличныйДокумент.Область(ПоследняяСтрока, 1, ПоследняяСтрока, 1).ЦветТекста; + Если ЦветТекста <> Неопределено Тогда + Область.ЦветТекста = ЦветТекста; + КонецЕсли; + Иначе + Область.ЦветТекста = ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + Возврат Истина; +КонецФункции + +// Для вызова из команды отчета РезультатыПроверкиУчета. +// +Функция ДанныеДляИсторииИзмененийОбъекта(ОтчетДанныеРасшифровки, ТабличныйДокумент, ИндексРасшифровки) Экспорт + Расшифровка = РасшифровкаВыделеннойЯчейки(ОтчетДанныеРасшифровки, ТабличныйДокумент, ИндексРасшифровки); + Если Расшифровка = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + + Результат = Новый Структура; + Результат.Вставить("Ссылка", Расшифровка.ПроблемныйОбъект); + Результат.Вставить("Версионируется", Ложь); + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВерсионированиеОбъектов") Тогда + МодульВерсионированиеОбъектов = ОбщегоНазначения.ОбщийМодуль("ВерсионированиеОбъектов"); + Результат.Версионируется = МодульВерсионированиеОбъектов.ВключеноВерсионированиеОбъекта(Расшифровка.ПолноеИмяОбъекта); + КонецЕсли; + + Возврат Результат; +КонецФункции + +// Для вызова из отчета РезультатыПроверкиУчета. +// +Функция РасшифровкаВыделеннойЯчейки(ОтчетДанныеРасшифровки, ТабличныйДокумент, ИндексРасшифровки) Экспорт + Если ИндексРасшифровки = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + + Результат = Новый Структура; + Результат.Вставить("ПроблемныйОбъект"); + Результат.Вставить("ПравилоПроверки"); + Результат.Вставить("ВидПроверки"); + Результат.Вставить("УточнениеПроблемы"); + Результат.Вставить("ПолноеИмяОбъекта"); + + ДанныеРасшифровки = ПолучитьИзВременногоХранилища(ОтчетДанныеРасшифровки); + Расшифровка = ДанныеРасшифровки.Элементы[ИндексРасшифровки].ПолучитьПоля(); + Значение = Расшифровка[0].Значение; + ЗначениеЧастями = СтрРазделить(Значение, ";"); + + Если ЗначениеЧастями.Количество() <> 5 Тогда + Возврат Неопределено; + КонецЕсли; + + МенеджерОбъекта = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ЗначениеЧастями[0]); + Результат.ПроблемныйОбъект = МенеджерОбъекта.ПолучитьСсылку(Новый УникальныйИдентификатор(ЗначениеЧастями[1])); + Результат.ПравилоПроверки = Справочники.ПравилаПроверкиУчета.ПолучитьСсылку(Новый УникальныйИдентификатор(ЗначениеЧастями[2])); + Результат.ВидПроверки = Справочники.ВидыПроверок.ПолучитьСсылку(Новый УникальныйИдентификатор(ЗначениеЧастями[3])); + Результат.УточнениеПроблемы = ЗначениеЧастями[4]; + Результат.ПолноеИмяОбъекта = ЗначениеЧастями[0]; + + Возврат Результат; +КонецФункции + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/КонтрольВеденияУчетаВызовСервера/КонтрольВеденияУчетаВызовСервера.mdo b/SSL/src/CommonModules/КонтрольВеденияУчетаВызовСервера/КонтрольВеденияУчетаВызовСервера.mdo new file mode 100644 index 000000000..f5855e627 --- /dev/null +++ b/SSL/src/CommonModules/КонтрольВеденияУчетаВызовСервера/КонтрольВеденияУчетаВызовСервера.mdo @@ -0,0 +1,10 @@ + + + КонтрольВеденияУчетаВызовСервера + + ru + Контроль ведения учета вызов сервера + + true + true + diff --git a/SSL/src/CommonModules/КонтрольВеденияУчетаГлобальный/Module.bsl b/SSL/src/CommonModules/КонтрольВеденияУчетаГлобальный/Module.bsl new file mode 100644 index 000000000..fbec39086 --- /dev/null +++ b/SSL/src/CommonModules/КонтрольВеденияУчетаГлобальный/Module.bsl @@ -0,0 +1,18 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2019, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область СлужебныеПроцедурыИФункции + +// Выводит оповещение об имеющихся проблемах ведения учета +// при отсутствии подсистемы ТекущиеДела. +// +Процедура ОповеститьОПроблемахВеденияУчета() Экспорт + КонтрольВеденияУчетаСлужебныйКлиент.ОповеститьОНаличииПроблемВеденияУчета(); +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/КонтрольВеденияУчетаГлобальный/КонтрольВеденияУчетаГлобальный.mdo b/SSL/src/CommonModules/КонтрольВеденияУчетаГлобальный/КонтрольВеденияУчетаГлобальный.mdo new file mode 100644 index 000000000..53fc0d978 --- /dev/null +++ b/SSL/src/CommonModules/КонтрольВеденияУчетаГлобальный/КонтрольВеденияУчетаГлобальный.mdo @@ -0,0 +1,11 @@ + + + КонтрольВеденияУчетаГлобальный + + ru + Контроль ведения учета глобальный + + true + true + true + diff --git a/SSL/src/CommonModules/КонтрольВеденияУчетаКлиент/Module.bsl b/SSL/src/CommonModules/КонтрольВеденияУчетаКлиент/Module.bsl index efe4cfb66..1e9402dad 100644 --- a/SSL/src/CommonModules/КонтрольВеденияУчетаКлиент/Module.bsl +++ b/SSL/src/CommonModules/КонтрольВеденияУчетаКлиент/Module.bsl @@ -93,6 +93,11 @@ Если Поле.Имя <> ДополнительныеСвойства.КолонкаИндикатора Тогда СтандартнаяОбработка = Истина; Иначе + ТекущиеДанные = Форма.Элементы[ИмяСписка].ТекущиеДанные; + Если ТекущиеДанные[Поле.Имя] = 0 Тогда + Возврат; // Нет ошибок по объекту. + КонецЕсли; + СтандартнаяОбработка = Ложь; ДанныеКонтекста = Новый Структура; diff --git a/SSL/src/CommonModules/КонтрольВеденияУчетаПереопределяемый/Module.bsl b/SSL/src/CommonModules/КонтрольВеденияУчетаПереопределяемый/Module.bsl index 4884fa6d4..bd50e0565 100644 --- a/SSL/src/CommonModules/КонтрольВеденияУчетаПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/КонтрольВеденияУчетаПереопределяемый/Module.bsl @@ -89,6 +89,7 @@ // для программного использования. // * Комментарий - Строка - текстовый комментарий к проверке. // * Отключена - Булево - если Истина, то проверка не будет выполняться в фоне по расписанию. +// * ПоддерживаетВыборочнуюПроверку - Булево - если Истина, то проверку можно вызвать для проверки конкретного объекта. // // Пример: // 1) Добавление проверки @@ -109,8 +110,6 @@ // Процедура ПриОпределенииПроверок(ГруппыПроверок, Проверки) Экспорт - - КонецПроцедуры // Позволяет настроить положение индикатора о проблемах в формах объектов. @@ -123,13 +122,14 @@ // сразу под командной панелью формы объекта. // * ИмяРодителяГруппы - Строка - Определяет имя группы элементов формы объекта, внутри которой должна // располагаться группа индикации. +// * ДетальныйВид - Булево - если Истина и у объекта найдена только одна проблема, то в карточке будет +// сразу выводиться ее описание вместо гиперссылки с переходом к списку проблем. +// Значение по умолчанию - Ложь. // -// ТипСсылки - Тип - Тип ссылки, для которой переопределяются параметры группы индикации. +// ТипПроблемногоОбъекта - Тип - Тип ссылки, для которой переопределяются параметры группы индикации. // Например, Тип("ДокументСсылка.НачислениеЗарплаты"). // -Процедура ПриОпределенииПараметровГруппыИндикации(ПараметрыГруппыИндикации, Знач ТипСсылки) Экспорт - - +Процедура ПриОпределенииПараметровГруппыИндикации(ПараметрыГруппыИндикации, Знач ТипПроблемногоОбъекта) Экспорт КонецПроцедуры @@ -148,8 +148,6 @@ // Процедура ПриОпределенииПараметровКолонкиИндикации(ПараметрыКолонкиИндикации, ПолноеИмя) Экспорт - - КонецПроцедуры // Позволяет дозаполнить информацию о проблеме перед ее регистрацией. @@ -182,8 +180,6 @@ // Процедура ПередЗаписьюПроблемы(Проблема, СсылкаНаОбъект, Реквизиты) Экспорт - - КонецПроцедуры #Область УстаревшиеПроцедурыИФункции diff --git a/SSL/src/CommonModules/КонтрольВеденияУчетаСлужебный/Module.bsl b/SSL/src/CommonModules/КонтрольВеденияУчетаСлужебный/Module.bsl index e34e7f9fd..0720d4a58 100644 --- a/SSL/src/CommonModules/КонтрольВеденияУчетаСлужебный/Module.bsl +++ b/SSL/src/CommonModules/КонтрольВеденияУчетаСлужебный/Module.bsl @@ -15,6 +15,7 @@ Обработчик = Обработчики.Добавить(); Обработчик.Версия = "*"; Обработчик.РежимВыполнения = "Отложенно"; + Обработчик.Идентификатор = Новый УникальныйИдентификатор("c17ea385-6085-471f-ab94-219ec30a5a38"); Обработчик.Комментарий = НСтр("ru = 'Обновляются правила проверки учета в соответствие с изменениями в новой версии программы. |До завершения обработки часть проверок ведения учета будет недоступна.'"); Обработчик.Процедура = "КонтрольВеденияУчетаСлужебный.ОбновитьВспомогательныеДанныеПоИзменениямКонфигурации"; @@ -58,22 +59,58 @@ Возврат; КонецЕсли; + ВсеПроблемы = СводнаяИнформацияПоВидамПроверок(Неопределено, Истина, Истина); + ВидПроверки = ВидПроверки("СистемныеПроверки"); - Проблемы = СводнаяИнформацияПоВидамПроверок(ВидПроверки); + Проблемы = СводнаяИнформацияПоВидамПроверок(ВидПроверки, Истина, Истина); + + ИнформацияОПоследнейПроверке = ИнформацияОПоследнейПроверкеВеденияУчета(); МодульТекущиеДелаСервер = ОбщегоНазначения.ОбщийМодуль("ТекущиеДелаСервер"); Разделы = МодульТекущиеДелаСервер.РазделыДляОбъекта("Отчет.РезультатыПроверкиУчета"); + ПолноправныйПользователь = Пользователи.ЭтоПолноправныйПользователь(); Для Каждого Раздел Из Разделы Цикл + + ИдентификаторВладельца = "КонтрольВеденияУчета" + СтрЗаменить(Раздел.ПолноеИмя(), ".", "_"); + Если ПолноправныйПользователь Тогда + Дело = ТекущиеДела.Добавить(); + Дело.Идентификатор = ИдентификаторВладельца; + Дело.ЕстьДела = ВсеПроблемы.ЕстьОшибки; + Дело.Важное = Ложь; + Дело.Владелец = Раздел; + Дело.Представление = НСтр("ru = 'Проблемы ведения учета'"); + Дело.Количество = ВсеПроблемы.Количество; + Дело.ПараметрыФормы = Новый Структура; + Дело.Форма = "Отчет.РезультатыПроверкиУчета.Форма"; + КонецЕсли; + Дело = ТекущиеДела.Добавить(); - Дело.Идентификатор = "КонтрольВеденияУчета" + СтрЗаменить(Раздел.ПолноеИмя(), ".", "_"); - Дело.ЕстьДела = Проблемы.Количество > 0; - Дело.Важное = Проблемы.ЕстьОшибки; - Дело.Владелец = Раздел; + Дело.Идентификатор = "КонтрольВеденияУчетаНекорректныеДанные" + СтрЗаменить(Раздел.ПолноеИмя(), ".", "_"); + Дело.ЕстьДела = Проблемы.ЕстьОшибки; + Дело.Важное = Истина; + Дело.Владелец = ?(ПолноправныйПользователь, ИдентификаторВладельца, Раздел); Дело.Представление = НСтр("ru = 'Некорректные данные'"); Дело.Количество = Проблемы.Количество; Дело.ПараметрыФормы = Новый Структура("ВидПроверки", ВидПроверки); Дело.Форма = "Отчет.РезультатыПроверкиУчета.Форма"; + + + // Проверка давно не выполнялась. + Если ЗначениеЗаполнено(ИнформацияОПоследнейПроверке.ДатаПоследнейПроверки) Тогда + Подсказка = НСтр("ru = 'Последняя проверка выполнялась %1'"); + Подсказка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Подсказка, ИнформацияОПоследнейПроверке.ДатаПоследнейПроверки); + Иначе + Подсказка = ""; + КонецЕсли; + Дело = ТекущиеДела.Добавить(); + Дело.Идентификатор = "КонтрольВеденияУчетаТребуетсяПроверка" + СтрЗаменить(Раздел.ПолноеИмя(), ".", "_"); + Дело.ЕстьДела = ИнформацияОПоследнейПроверке.ПредупреждатьОНеобходимостиПовторнойПроверки; + Дело.Важное = Ложь; + Дело.Владелец = Раздел; + Дело.Представление = НСтр("ru = 'Проверка ведения учета давно не выполнялась'"); + Дело.Подсказка = Подсказка; + Дело.Форма = "Справочник.ПравилаПроверкиУчета.ФормаСписка"; КонецЦикла; КонецПроцедуры @@ -101,6 +138,22 @@ КонецПроцедуры +// См. ОбщегоНазначенияПереопределяемый.ПриДобавленииПараметровРаботыКлиентаПриЗапуске. +Процедура ПриДобавленииПараметровРаботыКлиентаПриЗапуске(Параметры) Экспорт + + ТекущиеДелаВстроены = ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ТекущиеДела"); + Количество = 0; + Если Не Пользователи.ЭтоСеансВнешнегоПользователя() И Не ТекущиеДелаВстроены Тогда + Количество = СводнаяИнформацияПоВидамПроверок(Неопределено, Истина, Истина).Количество; + КонецЕсли; + + Параметры.Вставить("КонтрольВеденияУчета", + Новый ФиксированнаяСтруктура("ОповещатьОПроблемахВеденияУчета, КоличествоПроблемВеденияУчета", + Не ТекущиеДелаВстроены, + Количество)); + +КонецПроцедуры + // Обновляет состав системных проверок ведения учета при изменении конфигурации. // // Параметры: @@ -144,12 +197,68 @@ КонецФункции +// Возвращает дату и время последней проверки, а так же необходимость показа предупреждения +// о повторной проверке. +// Учитываются только системные проверки. +// +Функция ИнформацияОПоследнейПроверкеВеденияУчета() Экспорт + + Результат = Новый Структура; + Результат.Вставить("ДатаПоследнейПроверки", Неопределено); + Результат.Вставить("ПредупреждатьОНеобходимостиПовторнойПроверки", Ложь); + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("КонтекстПроверокВеденияУчета", "СистемныеПроверки"); + Запрос.Текст = + "ВЫБРАТЬ + | ЕСТЬNULL(МАКСИМУМ(СостоянияПроверокВеденияУчета.ПоследнийЗапуск), Неопределено) КАК ПоследнийЗапуск + |ИЗ + | РегистрСведений.СостоянияПроверокВеденияУчета КАК СостоянияПроверокВеденияУчета + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПравилаПроверкиУчета КАК ПравилаПроверкиУчета + | ПО СостоянияПроверокВеденияУчета.Проверка = ПравилаПроверкиУчета.Ссылка + |ГДЕ + | ПравилаПроверкиУчета.КонтекстПроверокВеденияУчета = &КонтекстПроверокВеденияУчета"; + УстановитьПривилегированныйРежим(Истина); + РезультатЗапроса = Запрос.Выполнить().Выгрузить(); + УстановитьПривилегированныйРежим(Ложь); + + Результат.ДатаПоследнейПроверки = РезультатЗапроса[0].ПоследнийЗапуск; + Если Результат.ДатаПоследнейПроверки = Неопределено Тогда + Результат.ПредупреждатьОНеобходимостиПовторнойПроверки = Истина; + Иначе + ВремяСПоследнегоЗапуска = (ТекущаяДатаСеанса() - Результат.ДатаПоследнейПроверки) / (1000 * 60 * 60 * 30); + Результат.ПредупреждатьОНеобходимостиПовторнойПроверки = ВремяСПоследнегоЗапуска > 1; // Больше 1 месяца. + КонецЕсли; + + Возврат Результат; + +КонецФункции + +Функция ПоследняяПроверкаОбъекта(Ссылка) Экспорт + + УстановитьПривилегированныйРежим(Истина); + Набор = РегистрыСведений.РезультатыПроверкиУчета.СоздатьНаборЗаписей(); + Набор.Отбор.ПроблемныйОбъект.Установить(Ссылка); + Набор.Прочитать(); + УстановитьПривилегированныйРежим(Ложь); + + Данные = Набор.Выгрузить(, "Выявлено"); + Данные.Сортировать("Выявлено Убыв"); + + Если Данные.Количество() = 0 Тогда + Возврат Неопределено; + КонецЕсли; + + Возврат Данные[0].Выявлено; + +КонецФункции + #КонецОбласти #Область СлужебныеПроцедурыИФункции // См. КонтрольВеденияУчета.СводнаяИнформацияПоВидамПроверок. -Функция СводнаяИнформацияПоВидамПроверок(ВидПроверок, ПоискПоТочномуСоответствию = Истина) Экспорт +Функция СводнаяИнформацияПоВидамПроверок(ВидПроверок, ПоискПоТочномуСоответствию = Истина, УчитыватьОтветственного = Ложь) Экспорт СводнаяИнформация = Новый Структура; СводнаяИнформация.Вставить("Количество", 0); @@ -162,27 +271,36 @@ ИначеЕсли ТипЗнч(ВидПроверок) = Тип("Строка") Тогда ПараметрыВыполненияПроверки = ПараметрыВыполненияПроверки(ВидПроверок); ВидыПроверок = ВидыПроверок(ПараметрыВыполненияПроверки, ПоискПоТочномуСоответствию); - Иначе + ИначеЕсли ВидПроверок <> Неопределено Тогда ПараметрыВыполненияПроверки = ПараметрыВыполненияПроверкиИзМассива(ВидПроверок); ВидыПроверок = ВидыПроверок(ПараметрыВыполненияПроверки, ПоискПоТочномуСоответствию); КонецЕсли; - Запрос = Новый Запрос( - "ВЫБРАТЬ РАЗРЕШЕННЫЕ - | КОЛИЧЕСТВО(*) КАК Количество, - | ЕСТЬNULL(МАКСИМУМ(ВЫБОР - | КОГДА РезультатыПроверкиУчета.ВажностьПроблемы = ЗНАЧЕНИЕ(Перечисление.ВажностьПроблемыУчета.Ошибка) - | ТОГДА ИСТИНА - | ИНАЧЕ ЛОЖЬ - | КОНЕЦ), ЛОЖЬ) КАК ЕстьОшибки - |ИЗ - | РегистрСведений.РезультатыПроверкиУчета КАК РезультатыПроверкиУчета - |ГДЕ - | РезультатыПроверкиУчета.ПравилоПроверки.ПометкаУдаления = ЛОЖЬ - | И НЕ РезультатыПроверкиУчета.ИгнорироватьПроблему - | И РезультатыПроверкиУчета.ВидПроверки В (&ВидыПроверок)"); - - Запрос.УстановитьПараметр("ВидыПроверок", ВидыПроверок); + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | КОЛИЧЕСТВО(*) КАК Количество, + | ЕСТЬNULL(МАКСИМУМ(ВЫБОР + | КОГДА РезультатыПроверкиУчета.ВажностьПроблемы = ЗНАЧЕНИЕ(Перечисление.ВажностьПроблемыУчета.Ошибка) + | ТОГДА ИСТИНА + | ИНАЧЕ ЛОЖЬ + | КОНЕЦ), ЛОЖЬ) КАК ЕстьОшибки + |ИЗ + | РегистрСведений.РезультатыПроверкиУчета КАК РезультатыПроверкиУчета + |ГДЕ + | РезультатыПроверкиУчета.ПравилоПроверки.ПометкаУдаления = ЛОЖЬ + | И НЕ РезультатыПроверкиУчета.ИгнорироватьПроблему"; + Если ВидПроверок <> Неопределено Тогда + Запрос.Текст = Запрос.Текст + " И РезультатыПроверкиУчета.ВидПроверки В (&ВидыПроверок)"; + Запрос.УстановитьПараметр("ВидыПроверок", ВидыПроверок); + КонецЕсли; + Если УчитыватьОтветственного Тогда + Запрос.Текст = Запрос.Текст + " И РезультатыПроверкиУчета.Ответственный В (&Ответственный)"; + Ответственный = Новый Массив; + Ответственный.Добавить(Справочники.Пользователи.ПустаяСсылка()); + Ответственный.Добавить(Пользователи.ТекущийПользователь()); + Запрос.УстановитьПараметр("Ответственный", Ответственный); + КонецЕсли; Результат = Запрос.Выполнить().Выбрать(); Результат.Следующий(); @@ -584,25 +702,33 @@ // // Возвращаемое значение - Массив из ЛюбаяСсылка - массив проблемных объектов. // -Функция ПроблемныеОбъекты(КлючиСтрок) Экспорт +Функция ПроблемныеОбъекты(КлючиСтрок, ВключаяВажность = Ложь) Экспорт ТекущийПользовательПолноправный = Пользователи.ЭтоПолноправныйПользователь(); Запрос = Новый Запрос( "ВЫБРАТЬ РАЗЛИЧНЫЕ - | РезультатыПроверкиУчета.ПроблемныйОбъект КАК ПроблемныйОбъект + | РезультатыПроверкиУчета.ПроблемныйОбъект КАК ПроблемныйОбъект, + | МИНИМУМ(РезультатыПроверкиУчета.ВажностьПроблемы.Порядок) КАК ПорядокПроблемы |ИЗ | РегистрСведений.РезультатыПроверкиУчета КАК РезультатыПроверкиУчета |ГДЕ | РезультатыПроверкиУчета.ПроблемныйОбъект В(&СписокОбъектов) - | И НЕ РезультатыПроверкиУчета.ИгнорироватьПроблему"); + | И НЕ РезультатыПроверкиУчета.ИгнорироватьПроблему + | + |СГРУППИРОВАТЬ ПО + | РезультатыПроверкиУчета.ПроблемныйОбъект"); Запрос.УстановитьПараметр("СписокОбъектов", КлючиСтрок); Если Не ТекущийПользовательПолноправный Тогда УстановитьПривилегированныйРежим(Истина); КонецЕсли; - ПроблемныеОбъекты = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("ПроблемныйОбъект"); + Если ВключаяВажность Тогда + ПроблемныеОбъекты = Запрос.Выполнить().Выгрузить(); + Иначе + ПроблемныеОбъекты = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("ПроблемныйОбъект"); + КонецЕсли; Если Не ТекущийПользовательПолноправный Тогда УстановитьПривилегированныйРежим(Ложь); @@ -626,6 +752,7 @@ Результат.Вставить("Ответственный", Неопределено); Результат.Вставить("ВидПроверки", ?(ПараметрыПроверки.ПараметрыВыполненияПроверки.Количество() = 1, ВидПроверки(ПараметрыПроверки.ПараметрыВыполненияПроверки[0]), Неопределено)); + Возврат Результат; КонецФункции @@ -643,8 +770,16 @@ ОшибкаПроверки.ПравилоПроверки); КонецЕсли; - ПроблемныйОбъект = ОшибкаПроверки.ПроблемныйОбъект; - КоллекцияРеквизитов = ПроблемныйОбъект.Метаданные().Реквизиты; + ИсключаемыеОбъекты = КонтрольВеденияУчетаСлужебныйПовтИсп.ИсключаемыеИзПроверкиОбъекты(); + + ПроблемныйОбъект = ОшибкаПроверки.ПроблемныйОбъект; + ОбъектМетаданных = ПроблемныйОбъект.Метаданные(); + + Если ИсключаемыеОбъекты.Найти(ОбъектМетаданных.ПолноеИмя()) <> Неопределено Тогда + Возврат; + КонецЕсли; + + КоллекцияРеквизитов = ОбъектМетаданных.Реквизиты; КонтрольВеденияУчетаПереопределяемый.ПередЗаписьюПроблемы(ОшибкаПроверки, ПроблемныйОбъект, КоллекцияРеквизитов); @@ -663,7 +798,9 @@ НоваяЗапись = НаборЗаписей.Добавить(); ЗаполнитьЗначенияСвойств(НоваяЗапись, ОшибкаПроверки); + УстановитьПривилегированныйРежим(Истина); НаборЗаписей.Записать(); + УстановитьПривилегированныйРежим(Ложь); КонецПроцедуры @@ -776,6 +913,33 @@ КонецФункции +// Возвращает текст и важность проблемы ведения учета. +// +Функция СведенияОПроблемеСОбъектом(СсылкаНаОбъект) Экспорт + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("ПроблемныйОбъект", СсылкаНаОбъект); + Запрос.Текст = + "ВЫБРАТЬ + | РезультатыПроверкиУчета.УточнениеПроблемы КАК ТекстПроблемы, + | РезультатыПроверкиУчета.ВажностьПроблемы КАК ВажностьПроблемы + |ИЗ + | РегистрСведений.РезультатыПроверкиУчета КАК РезультатыПроверкиУчета + |ГДЕ + | РезультатыПроверкиУчета.ПроблемныйОбъект = &ПроблемныйОбъект"; + Результат = Запрос.Выполнить().Выгрузить(); + + Сведения = Новый Структура; + Сведения.Вставить("ТекстПроблемы", ""); + Сведения.Вставить("ВажностьПроблемы", Неопределено); + + Если Результат.Количество() = 0 Тогда + Возврат Сведения; + КонецЕсли; + ЗаполнитьЗначенияСвойств(Сведения, Результат[0]); + + Возврат Сведения; +КонецФункции + #Область ОбновлениеСправочникаПроверок // Обновляет вспомогательные данные, которые зависят от конфигурации частично. @@ -1117,14 +1281,40 @@ Возврат; КонецЕсли; + Если ПараметрыПроверки.Свойство("ПроверяемыеОбъекты") И ПараметрыПроверки.ПроверяемыеОбъекты <> Неопределено Тогда + Если ТипЗнч(ПараметрыПроверки.ПроверяемыеОбъекты) = Тип("Массив") Тогда + ОбъектМетаданных = ПараметрыПроверки.ПроверяемыеОбъекты[0].Метаданные(); + Иначе + ОбъектМетаданных = ПараметрыПроверки.ПроверяемыеОбъекты.Метаданные(); + КонецЕсли; + НайтиБитыеСсылки(ОбъектМетаданных, ПараметрыПроверки, ПроверенныеСсылки); + Возврат; + КонецЕсли; + + ИсключаемыеИзПроверкиОбъекты = КонтрольВеденияУчетаСлужебныйПовтИсп.ИсключаемыеИзПроверкиОбъекты(); + Для Каждого ВидМетаданных Из СсылочныеВидыОбъектовМетаданных() Цикл Для Каждого ОбъектМетаданных Из ВидМетаданных Цикл + ПолноеИмя = ОбъектМетаданных.ПолноеИмя(); + Если ЭтоНеразделенныйОбъектМетаданных(ПолноеИмя) Тогда + Продолжить; + КонецЕсли; + Если ИсключаемыеИзПроверкиОбъекты.Найти(ПолноеИмя) <> Неопределено Тогда + Продолжить; + КонецЕсли; НайтиБитыеСсылки(ОбъектМетаданных, ПараметрыПроверки, ПроверенныеСсылки); КонецЦикла; КонецЦикла; Для Каждого ВидМетаданных Из РегистрыКакОбъектыМетаданных() Цикл Для Каждого ОбъектМетаданных Из ВидМетаданных Цикл + ПолноеИмя = ОбъектМетаданных.ПолноеИмя(); + Если ЭтоНеразделенныйОбъектМетаданных(ПолноеИмя) Тогда + Продолжить; + КонецЕсли; + Если ИсключаемыеИзПроверкиОбъекты.Найти(ПолноеИмя) <> Неопределено Тогда + Продолжить; + КонецЕсли; НайтиБитыеСсылкиВРегистрах(ОбъектМетаданных, ПараметрыПроверки, ПроверенныеСсылки); КонецЦикла; КонецЦикла; @@ -1146,15 +1336,31 @@ Возврат; КонецЕсли; + Если ПараметрыПроверки.Свойство("ПроверяемыеОбъекты") И ПараметрыПроверки.ПроверяемыеОбъекты <> Неопределено Тогда + Если ТипЗнч(ПараметрыПроверки.ПроверяемыеОбъекты) = Тип("Массив") Тогда + ОбъектМетаданных = ПараметрыПроверки.ПроверяемыеОбъекты[0].Метаданные(); + Иначе + ОбъектМетаданных = ПараметрыПроверки.ПроверяемыеОбъекты.Метаданные(); + КонецЕсли; + НайтиНезаполненныеОбязательныеРеквизиты(ОбъектМетаданных, ПараметрыПроверки); + Возврат; + КонецЕсли; + + ИсключаемыеИзПроверкиОбъекты = КонтрольВеденияУчетаСлужебныйПовтИсп.ИсключаемыеИзПроверкиОбъекты(); + Для Каждого ВидМетаданных Из СсылочныеВидыОбъектовМетаданных() Цикл Для Каждого ОбъектМетаданных Из ВидМетаданных Цикл - Если ЭтоНеразделенныйОбъектМетаданных(ОбъектМетаданных.ПолноеИмя()) Тогда + ПолноеИмя = ОбъектМетаданных.ПолноеИмя(); + Если ЭтоНеразделенныйОбъектМетаданных(ПолноеИмя) Тогда Продолжить; КонецЕсли; Если Не ОбщегоНазначения.ОбъектМетаданныхДоступенПоФункциональнымОпциям(ОбъектМетаданных) Тогда Продолжить; КонецЕсли; + Если ИсключаемыеИзПроверкиОбъекты.Найти(ПолноеИмя) <> Неопределено Тогда + Продолжить; + КонецЕсли; НайтиНезаполненныеОбязательныеРеквизиты(ОбъектМетаданных, ПараметрыПроверки); КонецЦикла; @@ -1162,12 +1368,16 @@ Для Каждого ВидМетаданных Из РегистрыКакОбъектыМетаданных() Цикл Для Каждого ОбъектМетаданных Из ВидМетаданных Цикл - Если ЭтоНеразделенныйОбъектМетаданных(ОбъектМетаданных.ПолноеИмя()) Тогда + ПолноеИмя = ОбъектМетаданных.ПолноеИмя(); + Если ЭтоНеразделенныйОбъектМетаданных(ПолноеИмя) Тогда Продолжить; КонецЕсли; Если Не ОбщегоНазначения.ОбъектМетаданныхДоступенПоФункциональнымОпциям(ОбъектМетаданных) Тогда Продолжить; КонецЕсли; + Если ИсключаемыеИзПроверкиОбъекты.Найти(ПолноеИмя) <> Неопределено Тогда + Продолжить; + КонецЕсли; НайтиНезаполненныеОбязательныеРеквизитыВРегистрах(ОбъектМетаданных, ПараметрыПроверки); КонецЦикла; КонецЦикла; @@ -1218,6 +1428,9 @@ Для Каждого ВидМетаданных Из ВидыОбъектовМетаданных Цикл Для Каждого ОбъектМетаданных Из ВидМетаданных Цикл + Если ЭтоНеразделенныйОбъектМетаданных(ОбъектМетаданных.ПолноеИмя()) Тогда + Продолжить; + КонецЕсли; Если ОбъектМетаданных.ОбновлениеПредопределенныхДанных = Метаданные.СвойстваОбъектов.ОбновлениеПредопределенныхДанных.НеОбновлятьАвтоматически Тогда Продолжить; КонецЕсли; @@ -1256,6 +1469,9 @@ МетаданныеПланыОбмена = Метаданные.ПланыОбмена; Для Каждого МетаданныеПланОбмена Из МетаданныеПланыОбмена Цикл + Если ЭтоНеразделенныйОбъектМетаданных(МетаданныеПланОбмена.ПолноеИмя()) Тогда + Продолжить; + КонецЕсли; Если ПланыОбмена[МетаданныеПланОбмена.Имя].ЭтотУзел() <> Неопределено Тогда Продолжить; КонецЕсли; @@ -1339,13 +1555,17 @@ // поясняющего текста и гиперссылки открывающей отчет по проблемам объекта.. // Процедура ЗаполнитьГруппуИндикатораОшибки(Форма, ГруппаИндикатораОшибки, КлючУникальностиИмен, - ОбщаяСтрокаИндикатор, КартинкаИндикатораПроблем = Неопределено) Экспорт + ОбщаяСтрокаИндикатор, Настройки) Экспорт + + ДатаПоследнейПроверки = Настройки.ДатаПоследнейПроверки; + Подсказка = НСтр("ru = '(По состоянию на %1)'"); + Подсказка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Подсказка, ДатаПоследнейПроверки); ЭлементыУправляемойФормы = Форма.Элементы; КартинкаИндикаторОшибки = ЭлементыУправляемойФормы.Добавить("ДекорацияКартинка_" + КлючУникальностиИмен, Тип("ДекорацияФормы"), ГруппаИндикатораОшибки); КартинкаИндикаторОшибки.Вид = ВидДекорацииФормы.Картинка; - КартинкаИндикаторОшибки.Картинка = ?(КартинкаИндикатораПроблем = Неопределено, БиблиотекаКартинок.Предупреждение, КартинкаИндикатораПроблем); + КартинкаИндикаторОшибки.Картинка = КартинкаПроблемы(Настройки); КартинкаИндикаторОшибки.РазмерКартинки = РазмерКартинки.РеальныйРазмер; ДекорацияНадпись = ЭлементыУправляемойФормы.Добавить("ДекорацияНадпись_" + КлючУникальностиИмен, Тип("ДекорацияФормы"), ГруппаИндикатораОшибки); @@ -1353,6 +1573,10 @@ ДекорацияНадпись.Заголовок = ОбщаяСтрокаИндикатор; ДекорацияНадпись.ВертикальноеПоложение = ВертикальноеПоложениеЭлемента.Центр; ДекорацияНадпись.УстановитьДействие("ОбработкаНавигационнойСсылки", "Подключаемый_ОткрытьОтчетПоПроблемам"); + ДекорацияНадпись.ОтображениеПодсказки = ОтображениеПодсказки.ОтображатьСправа; + ДекорацияНадпись.АвтоМаксимальнаяШирина = Ложь; + ДекорацияНадпись.РасширеннаяПодсказка.Заголовок = Подсказка; + ДекорацияНадпись.РасширеннаяПодсказка.Высота = 1; КонецПроцедуры @@ -1368,21 +1592,27 @@ // ГиперссылкаИндикатораПроблем - Строка, Неопределено - Строка представляющая гиперссылку, при нажатии // на которую будет открыт и сформирован отчет по проблемам текущего объекта. // -Функция СформироватьОбщуюСтрокуИндикатор(Форма, СсылкаНаОбъект, КоличествоПроблемПоОбъекту, - ПояснениеИндикатораПроблем = Неопределено, ГиперссылкаИндикатораПроблем = Неопределено) Экспорт +Функция СформироватьОбщуюСтрокуИндикатор(Форма, СсылкаНаОбъект, Настройки) Экспорт + ПояснениеИндикатораПроблем = Настройки.ПояснениеИндикатораПроблем; + ГиперссылкаИндикатораПроблем = Настройки.ГиперссылкаИндикатораПроблем; + КоличествоПроблемПоОбъекту = Настройки.КоличествоПроблем; ТекстоваяСсылка = "Основной"; + Если Настройки.ДетальныйВид И ЗначениеЗаполнено(Настройки.ТекстПроблемы) Тогда + Возврат Настройки.ТекстПроблемы; + КонецЕсли; + Если ПояснениеИндикатораПроблем <> Неопределено Тогда ПоясняющаяНадпись = ПояснениеИндикатораПроблем Иначе - ПоясняющаяНадпись = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'С этим %1'"), ПредставлениеОбъектаПоТипу(СсылкаНаОбъект)); + ПоясняющаяНадпись = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'В этом %1'"), ПредставлениеОбъектаПоТипу(СсылкаНаОбъект)); КонецЕсли; Если ГиперссылкаИндикатораПроблем <> Неопределено Тогда Гиперссылка = ГиперссылкаИндикатораПроблем; Иначе - Гиперссылка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='есть проблемы (%1)'"), Формат(КоличествоПроблемПоОбъекту, "ЧГ=0")); + Гиперссылка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'найдены проблемы (%1)'"), Формат(КоличествоПроблемПоОбъекту, "ЧГ=0")); КонецЕсли; Возврат Новый ФорматированнаяСтрока(ПоясняющаяНадпись + " ", Новый ФорматированнаяСтрока(Гиперссылка, , , , ТекстоваяСсылка)); @@ -1394,6 +1624,7 @@ ПараметрыГруппыИндикации.Вставить("ИмяРодителяГруппы", Неопределено); ПараметрыГруппыИндикации.Вставить("ВыводитьСнизу", Ложь); + ПараметрыГруппыИндикации.Вставить("ДетальныйВид", Истина); КонецПроцедуры @@ -1411,7 +1642,7 @@ #Область ВыполнениеПроверок // См. КонтрольВеденияУчета.ВыполнитьПроверку. -Процедура ВыполнитьПроверку(Проверка, ПараметрыВыполненияПроверки = Неопределено) Экспорт +Процедура ВыполнитьПроверку(Проверка, ПараметрыВыполненияПроверки = Неопределено, ПроверяемыеОбъекты = Неопределено) Экспорт Если ТипЗнч(Проверка) = Тип("Строка") Тогда ВыполняемаяПроверка = КонтрольВеденияУчета.ПроверкаПоИдентификатору(Проверка); @@ -1429,6 +1660,10 @@ Возврат; КонецЕсли; + Если ЗначениеЗаполнено(ПроверяемыеОбъекты) И Не ПараметрыПроверки.ПоддерживаетВыборочнуюПроверку Тогда + Возврат; + КонецЕсли; + ПроверкиВеденияУчета = КонтрольВеденияУчетаСлужебныйПовтИсп.ПроверкиВеденияУчета(); Проверки = ПроверкиВеденияУчета.Проверки; СтрокаПроверки = Проверки.Найти(ПараметрыПроверки.Идентификатор, "Идентификатор"); @@ -1442,8 +1677,13 @@ Возврат; КонецЕсли; - Если Не ЗаданыПараметрыВыполненияПроверки Тогда - ОчиститьРезультатыПредыдущихПроверок(ВыполняемаяПроверка, ПараметрыПроверки.ПараметрыВыполненияПроверки); + ПараметрыПроверки.Вставить("ПроверяемыеОбъекты", ПроверяемыеОбъекты); + + РезультатПоследнейПроверки = Неопределено; + Если ЗначениеЗаполнено(ПроверяемыеОбъекты) Тогда + РезультатПоследнейПроверки = РезультатПоследнейПроверкиОбъекта(ПараметрыПроверки); + ИначеЕсли Не ЗаданыПараметрыВыполненияПроверки Тогда + ОчиститьРезультатыПередВыполнениемПроверки(ВыполняемаяПроверка); КонецЕсли; МодульОценкаПроизводительности = Неопределено; @@ -1452,17 +1692,48 @@ ОписаниеЗамера = МодульОценкаПроизводительности.НачатьЗамерДлительнойОперации(ПараметрыПроверки.Идентификатор); КонецЕсли; + УстановитьСостояниеПроверкиВеденияУчета(ВыполняемаяПроверка); + + ПараметрыСеанса.СчетчикПроблемВеденияУчета = 0; + ПараметрыОбработчика = Новый Массив; ПараметрыОбработчика.Добавить(ВыполняемаяПроверка); ПараметрыОбработчика.Добавить(ПараметрыПроверки); ОбщегоНазначения.ВыполнитьМетодКонфигурации(СтрокаПроверки.ОбработчикПроверки, ПараметрыОбработчика); + Если ПараметрыСеанса.СчетчикПроблемВеденияУчета > 0 + И ПараметрыПроверки.ВажностьПроблемы = Перечисления.ВажностьПроблемыУчета.Ошибка Тогда + Комментарий = НСтр("ru = 'При выполнении проверки ""%1"" обнаружены ошибки (%2)'"); + Комментарий = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Комментарий, + ПараметрыПроверки.Наименование, ПараметрыСеанса.СчетчикПроблемВеденияУчета); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Контроль ведения учета'", ОбщегоНазначения.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, + , + , + Комментарий); + + ПараметрыСеанса.СчетчикПроблемВеденияУчета = 0; + КонецЕсли; + + Если РезультатПоследнейПроверки <> Неопределено Тогда + УдалитьРезультатыПредыдущейПроверки(РезультатПоследнейПроверки); + КонецЕсли; + Если МодульОценкаПроизводительности <> Неопределено Тогда МодульОценкаПроизводительности.ЗакончитьЗамерДлительнойОперации(ОписаниеЗамера, 0); КонецЕсли; КонецПроцедуры +// Для вызова из процедуры КонтрольВеденияУчета.ПослеЗаписиНаСервере. +// Делает проверку переданных объектов. +// +Процедура ПроверитьОбъект(ПроверяемыеОбъекты, Проверки) Экспорт + Для Каждого Проверка Из Проверки Цикл + ВыполнитьПроверку(Проверка, , ПроверяемыеОбъекты); + КонецЦикла; +КонецПроцедуры + // Обработчик регламентного задания "ПроверкаВеденияУчета". Предназначен для обработки // фонового запуска проверок системы. // @@ -1509,9 +1780,9 @@ // Процедура ВыполнитьПроверкиВФоновомЗадании(Знач ПараметрыПроверки, АдресХранилища = Неопределено) Экспорт - МассивПараметров = ПараметрыПроверки.МассивПараметров; - Для Каждого ПараметрыПроверки Из МассивПараметров Цикл - ВыполнитьПроверку(ПараметрыПроверки.Идентификатор); + Проверки = ПараметрыПроверки.Проверки; + Для Каждого Проверка Из Проверки Цикл + ВыполнитьПроверку(Проверка); КонецЦикла; КонецПроцедуры @@ -1685,6 +1956,16 @@ КонецФункции +Процедура УстановитьСостояниеПроверкиВеденияУчета(Проверка) + + УстановитьПривилегированныйРежим(Истина); + МенеджерЗаписи = РегистрыСведений.СостоянияПроверокВеденияУчета.СоздатьМенеджерЗаписи(); + МенеджерЗаписи.Проверка = Проверка; + МенеджерЗаписи.ПоследнийЗапуск = ТекущаяДатаСеанса(); + МенеджерЗаписи.Записать(); + +КонецПроцедуры + #КонецОбласти #Область КонтрольСсылочнойЦелостности @@ -1710,7 +1991,7 @@ |ИЗ | &ОбъектМетаданных КАК ОбъектМетаданных |ГДЕ - | ОбъектМетаданных.Ссылка > &Ссылка + | &Условие | И ОбъектМетаданных.Дата > &ДатаНачалаПроверки | |УПОРЯДОЧИТЬ ПО @@ -1725,12 +2006,21 @@ |ИЗ | &ОбъектМетаданных КАК ОбъектМетаданных |ГДЕ - | ОбъектМетаданных.Ссылка > &Ссылка + | &Условие | |УПОРЯДОЧИТЬ ПО | ОбъектМетаданных.Ссылка"; КонецЕсли; + Если ПараметрыПроверки.Свойство("ПроверяемыеОбъекты") И ПараметрыПроверки.ПроверяемыеОбъекты <> Неопределено Тогда + Условие = "ОбъектМетаданных.Ссылка В (&Ссылка)"; + Запрос.УстановитьПараметр("Ссылка", ПараметрыПроверки.ПроверяемыеОбъекты); + Иначе + Условие = "ОбъектМетаданных.Ссылка > &Ссылка"; + Запрос.УстановитьПараметр("Ссылка", ""); + КонецЕсли; + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&Условие", Условие); ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ОбъектМетаданных", ОбъектМетаданных.ПолноеИмя()); ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&СсылочныеРеквизиты", СтрСоединить(СсылочныеРеквизиты, ",")); @@ -1758,7 +2048,6 @@ КонецЕсли; Запрос.Текст = ТекстЗапроса; - Запрос.УстановитьПараметр("Ссылка", ""); Результат = Запрос.Выполнить().Выгрузить(); МаксимальноеКоличество = МаксимальноеКоличествоПроверенныхСсылок(); @@ -1776,7 +2065,7 @@ Если ЭтоБитаяСсылка(ПроверяемаяСсылка, ПроверенныеСсылки) Тогда УточнениеПроблемы = УточнениеПроблемы + ?(ЗначениеЗаполнено(УточнениеПроблемы), Символы.ПС, "") + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru='У объекта ""%1"" в реквизите ""%2"" указана ссылка на несуществующий элемент: ""%3"".'"), + НСтр("ru = 'У объекта ""%1"" в реквизите ""%2"" указана ссылка на несуществующий элемент: ""%3"".'"), СсылкаНаОбъект, Результат.Колонки[Индекс].Имя, ПроверяемаяСсылка); @@ -1787,22 +2076,29 @@ ПроверенныеСсылки.Очистить(); КонецЕсли; + ЛимитПроблем = 1; + ЕщеПроблем = 0; Если РеквизитыТабличныхЧастейОбъекта.Количество() > 0 Тогда Для Каждого РеквизитыТабличнойЧасти Из РеквизитыТабличныхЧастейОбъекта Цикл ТабличнаяЧастьОбъекта = СтрокаРезультата[РеквизитыТабличнойЧасти.Ключ]; - ТекущийНомерСтроки = 1; + ТекущийНомерСтроки = 1; Для Каждого СтрокаТЧ Из ТабличнаяЧастьОбъекта Цикл Для Каждого ТекущаяКолонка Из ТабличнаяЧастьОбъекта.Колонки Цикл ИмяРеквизитаТЧ = ТекущаяКолонка.Имя; ПроверяемыеДанные = СтрокаТЧ[ИмяРеквизитаТЧ]; Если ЭтоБитаяСсылка(ПроверяемыеДанные, ПроверенныеСсылки) Тогда + Если ЛимитПроблем = 0 Тогда + ЕщеПроблем = ЕщеПроблем + 1; + Продолжить; + КонецЕсли; УточнениеПроблемы = УточнениеПроблемы + ?(ЗначениеЗаполнено(УточнениеПроблемы), Символы.ПС, "") + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'У объекта ""%1"" в реквизите ""%2"" табличной части ""%3"" (строка № %4) указана ссылка на несуществующий элемент: ""%5"".'"), СсылкаНаОбъект, ИмяРеквизитаТЧ, СтрЗаменить(РеквизитыТабличнойЧасти.Ключ, ИмяРеквизитаТЧ, ""), ТекущийНомерСтроки, ПроверяемыеДанные); + ЛимитПроблем = ЛимитПроблем - 1; КонецЕсли; КонецЦикла; ТекущийНомерСтроки = ТекущийНомерСтроки + 1; @@ -1815,6 +2111,10 @@ КонецЦикла; КонецЕсли; + Если ЕщеПроблем > 0 Тогда + УточнениеПроблемы = УточнениеПроблемы + Символы.ПС + НСтр("ru = 'и еще проблем'") + ": " + Строка(ЕщеПроблем); + КонецЕсли; + Если ПустаяСтрока(УточнениеПроблемы) Тогда Продолжить; КонецЕсли; @@ -1828,6 +2128,10 @@ КонецЦикла; + Если ПараметрыПроверки.Свойство("ПроверяемыеОбъекты") И ПараметрыПроверки.ПроверяемыеОбъекты <> Неопределено Тогда + Прервать; + КонецЕсли; + Запрос.УстановитьПараметр("Ссылка", СтрокаРезультата.ПроблемныйОбъект); Результат = Запрос.Выполнить().Выгрузить(); @@ -1929,6 +2233,11 @@ Возврат Ложь; КонецЕсли; + Если ТипЗнч(ПроверяемыеДанные) = Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных") + Или ТипЗнч(ПроверяемыеДанные) = Тип("СправочникСсылка.ИдентификаторыОбъектовРасширений") Тогда + Возврат Ложь; + КонецЕсли; + Если ЭтоБитаяСсылка = Неопределено Тогда ЭтоБитаяСсылка = Не ОбщегоНазначения.СсылкаСуществует(ПроверяемыеДанные); ПроверенныеСсылки[ПроверяемыеДанные] = ЭтоБитаяСсылка; @@ -2227,7 +2536,7 @@ Проблема = ОписаниеПроблемы(ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ОбъектМетаданных), ПараметрыПроверки); Проблема.УточнениеПроблемы = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru='У регистра сведений ""%1"" в %2, по комбинации измерений ""%3"" указана ссылка на несуществующий элемент: ""%4"".'"), + НСтр("ru = 'У регистра сведений ""%1"" в %2, по комбинации измерений ""%3"" указана ссылка на несуществующий элемент: ""%4"".'"), ОбъектМетаданных.Представление(), ИнформацияОРеквизите.ТипМетаданныхВТворительномПадеже, ПоляУпорядочивания, СтрокаРезультата[ИнформацияОРеквизите.ИмяМетаданных + ИнформацияОРеквизите.ТипМетаданныхВИменительномПадеже + "Представление"]); @@ -2323,7 +2632,7 @@ Проблема = ОписаниеПроблемы(ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ОбъектМетаданных), ПараметрыПроверки); Проблема.УточнениеПроблемы = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru='У регистра сведений ""%1"" в %2, по комбинации измерений ""%3"" указана ссылка на несуществующий элемент: ""%4"".'"), + НСтр("ru = 'У регистра сведений ""%1"" в %2, по комбинации измерений ""%3"" указана ссылка на несуществующий элемент: ""%4"".'"), ОбъектМетаданных.Представление(), ИнформацияОРеквизите.ТипМетаданныхВТворительномПадеже, ПоляУпорядочивания, СтрокаРезультата[ИнформацияОРеквизите.ИмяМетаданных + ИнформацияОРеквизите.ТипМетаданныхВИменительномПадеже + "Представление"]); @@ -2619,7 +2928,7 @@ Если ВидыСубконтоОМ = Неопределено Или Не СодержитСсылочныйТип(ВидыСубконтоОМ) Тогда Возврат Новый Массив; КонецЕсли; - + Запрос = Новый Запрос( "ВЫБРАТЬ | ПланВидовХарактеристик.Ссылка КАК ВидСубконто @@ -2696,21 +3005,32 @@ ПолноеИмя = ОбъектМетаданных.ПолноеИмя(); Реквизиты = ОбъектМетаданных.Реквизиты; + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("Ссылка", ""); + ТекстЗапроса = "ВЫБРАТЬ ПЕРВЫЕ 1000 | ОбъектМетаданных.Ссылка КАК ПроблемныйОбъект |ИЗ | &ОбъектМетаданных КАК ОбъектМетаданных |ГДЕ - | ОбъектМетаданных.Ссылка > &Ссылка + | &Условие | |УПОРЯДОЧИТЬ ПО | ОбъектМетаданных.Ссылка"; - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ОбъектМетаданных", ПолноеИмя); - Запрос = Новый Запрос(ТекстЗапроса); - Запрос.УстановитьПараметр("Ссылка", ""); + Если ПараметрыПроверки.Свойство("ПроверяемыеОбъекты") И ПараметрыПроверки.ПроверяемыеОбъекты <> Неопределено Тогда + Условие = "ОбъектМетаданных.Ссылка В (&Ссылка)"; + Запрос.УстановитьПараметр("Ссылка", ПараметрыПроверки.ПроверяемыеОбъекты); + Иначе + Условие = "ОбъектМетаданных.Ссылка > &Ссылка"; + Запрос.УстановитьПараметр("Ссылка", ""); + КонецЕсли; + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&Условие", Условие); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ОбъектМетаданных", ПолноеИмя); + + Запрос.Текст = ТекстЗапроса; Результат = Запрос.Выполнить().Выгрузить(); ОбщееКоличествоДанных = 0; @@ -2760,6 +3080,10 @@ МодульОценкаПроизводительности.ЗакончитьЗамерДлительнойОперации(ОписаниеЗамера, ОбщееКоличествоДанных); КонецЕсли; + Если ПараметрыПроверки.Свойство("ПроверяемыеОбъекты") И ПараметрыПроверки.ПроверяемыеОбъекты <> Неопределено Тогда + Прервать; + КонецЕсли; + Запрос.УстановитьПараметр("Ссылка", СтрокаРезультата.ПроблемныйОбъект); Результат = Запрос.Выполнить().Выгрузить(); @@ -2893,7 +3217,7 @@ Если ТекущийНаборЗаписей.ПроверитьЗаполнение() Тогда Продолжить; КонецЕсли; - + ДополнительнаяИнформация = Новый Структура; ДополнительнаяИнформация.Вставить("Регистратор", СтрокаРезультата.РегистраторРеквизитСсылка); @@ -3008,6 +3332,11 @@ ПоляУпорядочивания = ""; Измерения = ОбъектМетаданных.Измерения; + ЕстьОбязательныеРеквизиты = ЕстьОбязательныеРеквизиты(ОбъектМетаданных); + Если Не ЕстьОбязательныеРеквизиты Тогда + Возврат; + КонецЕсли; + Для Каждого Измерение Из Измерения Цикл УсловиеПоИзмерениям = УсловиеПоИзмерениям + ?(ЗначениеЗаполнено(УсловиеПоИзмерениям), " И ", "") + Измерение.Имя + " >= &" + Измерение.Имя; ПоляУпорядочивания = ПоляУпорядочивания + ?(ЗначениеЗаполнено(ПоляУпорядочивания), ", ", "") + Измерение.Имя; @@ -3166,11 +3495,11 @@ Если Не ЭтоПервыйПроход И Результат.Количество() = 1 Тогда Прервать; КонецЕсли; - + // Если МодульОценкаПроизводительности <> Неопределено Тогда ОписаниеЗамера = МодульОценкаПроизводительности.НачатьЗамерДлительнойОперации(ПараметрыПроверки.Идентификатор + "." + ПолноеИмя); КонецЕсли; - + // Для Каждого СтрокаРезультата Из Результат Цикл ТекущийНаборЗаписей = МенеджерРегистра.СоздатьНаборЗаписей(); @@ -3197,6 +3526,7 @@ Если ТекущийНаборЗаписей.ПроверитьЗаполнение() Тогда Продолжить; КонецЕсли; + УточнениеПроблемы = ОшибкиЗаполненияОбъекта(); СтруктураНабораЗаписей = Новый Структура; @@ -3280,9 +3610,8 @@ Если ПроверитьЗацикливаниеУровней(СсылкаНаОбъект, СтрокаРезультата.Родитель, ПроверяемыеЭлементы) Тогда Путь = ""; - Представления = ОбщегоНазначения.ЗначенияРеквизитовОбъектов(ПроверяемыеЭлементы, Новый Структура("Представление", "ПредставлениеСсылки(Ссылка)")); Для Каждого ЭлементЦикла Из ПроверяемыеЭлементы Цикл - Путь = Путь + ?(ЗначениеЗаполнено(Путь), " -> ", "") + Представления[ЭлементЦикла].Значение; + Путь = Путь + ?(ЗначениеЗаполнено(Путь), " -> ", "") + Строка(ЭлементЦикла); ПроверенныеЭлементы[ЭлементЦикла] = Истина; КонецЦикла; @@ -3321,7 +3650,7 @@ КонецЕсли; ВсеЭлементы.Добавить(ТекущийРодитель); ТекущийРодитель = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ТекущийРодитель, "Родитель"); - КонецЦикла; + КонецЦикла; Возврат Ложь; КонецФункции @@ -3355,37 +3684,55 @@ Запрос = Новый Запрос( "ВЫБРАТЬ - | РезультатыПроверкиУчета.ПроблемныйОбъект КАК ПроблемныйОбъект + | РезультатыПроверкиУчета.ПроблемныйОбъект КАК ПроблемныйОбъект, + | ТИПЗНАЧЕНИЯ(РезультатыПроверкиУчета.ПроблемныйОбъект) КАК ТипСсылки |ИЗ | РегистрСведений.РезультатыПроверкиУчета КАК РезультатыПроверкиУчета |ГДЕ | НЕ РезультатыПроверкиУчета.ИгнорироватьПроблему - | И РезультатыПроверкиУчета.ПравилоПроверки = &ПравилоПроверки"); + | И РезультатыПроверкиУчета.ПравилоПроверки = &ПравилоПроверки + |ИТОГИ ПО + | ТипСсылки"); Запрос.УстановитьПараметр("ПравилоПроверки", Проверка); - Результат = Запрос.Выполнить().Выбрать(); + Результат = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам); - Пока Результат.Следующий() Цикл - - ПроблемныйОбъектСсылка = Результат.ПроблемныйОбъект; - Родитель = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ПроблемныйОбъектСсылка, "Родитель"); - - ПроверяемыеЭлементы = Новый Массив; - Если Не ПроверитьЗацикливаниеУровней(ПроблемныйОбъектСсылка, Родитель, ПроверяемыеЭлементы) Тогда - Продолжить; - КонецЕсли; - - ПоследнийОбъектЦикла = ПроверяемыеЭлементы[ПроверяемыеЭлементы.Количество() - 1]; - - КоличествоДетейПервого = КоличествоДочернихЭлементов(ПроблемныйОбъектСсылка, Родитель); - КоличествоДетейВторого = КоличествоДочернихЭлементов(ПоследнийОбъектЦикла, Родитель); - - ПроблемныйОбъект = ?(КоличествоДетейПервого > КоличествоДетейВторого, ПроблемныйОбъектСсылка, ПоследнийОбъектЦикла); - ПроблемныйОбъект = ПроблемныйОбъект.ПолучитьОбъект(); - ПроблемныйОбъект.Родитель = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПроблемныйОбъектСсылка.Метаданные().ПолноеИмя()).ПустаяСсылка(); - ПроблемныйОбъект.ОбменДанными.Загрузка = Истина; - ПроблемныйОбъект.Записать(); - + Для Каждого СтрокаТипОбъекта Из Результат.Строки Цикл + ПолноеИмяТаблицы = Метаданные.НайтиПоТипу(СтрокаТипОбъекта.ТипСсылки).ПолноеИмя(); + Для Каждого СтрокаОбъект Из СтрокаТипОбъекта.Строки Цикл + НачатьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить(ПолноеИмяТаблицы); + ЭлементБлокировки.УстановитьЗначение("Ссылка", СтрокаОбъект.ПроблемныйОбъект); + Блокировка.Заблокировать(); + + ПроблемныйОбъектСсылка = СтрокаОбъект.ПроблемныйОбъект; + Родитель = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ПроблемныйОбъектСсылка, "Родитель"); + + ПроверяемыеЭлементы = Новый Массив; + Если Не ПроверитьЗацикливаниеУровней(ПроблемныйОбъектСсылка, Родитель, ПроверяемыеЭлементы) Тогда + ОтменитьТранзакцию(); + Продолжить; + КонецЕсли; + + ПоследнийОбъектЦикла = ПроверяемыеЭлементы[ПроверяемыеЭлементы.Количество() - 1]; + + КоличествоДетейПервого = КоличествоДочернихЭлементов(ПроблемныйОбъектСсылка, Родитель); + КоличествоДетейВторого = КоличествоДочернихЭлементов(ПоследнийОбъектЦикла, Родитель); + + ПроблемныйОбъект = ?(КоличествоДетейПервого > КоличествоДетейВторого, ПроблемныйОбъектСсылка, ПоследнийОбъектЦикла); + ПроблемныйОбъект = ПроблемныйОбъект.ПолучитьОбъект(); + ПроблемныйОбъект.Родитель = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПроблемныйОбъектСсылка.Метаданные().ПолноеИмя()).ПустаяСсылка(); + ПроблемныйОбъект.ОбменДанными.Загрузка = Истина; + ПроблемныйОбъект.Записать(); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + КонецЦикла; КонецЦикла; КонецПроцедуры @@ -3490,11 +3837,15 @@ Запрос = Новый Запрос; Для Каждого ОбъектМетаданных Из ВидМетаданных Цикл + ИмяТаблицы = ОбъектМетаданных.ПолноеИмя(); + Если ЭтоНеразделенныйОбъектМетаданных(ИмяТаблицы) Тогда + Продолжить; + КонецЕсли; + Если ОбъектМетаданных.ОбновлениеПредопределенныхДанных = Метаданные.СвойстваОбъектов.ОбновлениеПредопределенныхДанных.НеОбновлятьАвтоматически Тогда Продолжить; КонецЕсли; - ИмяТаблицы = ОбъектМетаданных.ПолноеИмя(); ИмяВременнойТаблицы = "ВТ_" + СтрЗаменить(ИмяТаблицы, ".", ""); ТекстЗапроса = СтрЗаменить(ШаблонВременнойТаблицы, "#ВременнаяТаблица", ИмяВременнойТаблицы); @@ -3557,6 +3908,36 @@ #Область Прочее +Функция ЕстьОбязательныеРеквизиты(ОбъектМетаданных) + + Для Каждого Измерение Из ОбъектМетаданных.Измерения Цикл + Если Измерение.ПроверкаЗаполнения = ПроверкаЗаполнения.ВыдаватьОшибку Тогда + Возврат Истина; + КонецЕсли; + КонецЦикла; + + Для Каждого Реквизит Из ОбъектМетаданных.Реквизиты Цикл + Если Реквизит.ПроверкаЗаполнения = ПроверкаЗаполнения.ВыдаватьОшибку Тогда + Возврат Истина; + КонецЕсли; + КонецЦикла; + + Для Каждого Ресурс Из ОбъектМетаданных.Ресурсы Цикл + Если Ресурс.ПроверкаЗаполнения = ПроверкаЗаполнения.ВыдаватьОшибку Тогда + Возврат Истина; + КонецЕсли; + КонецЦикла; + + Для Каждого СтандартныйРеквизит Из ОбъектМетаданных.СтандартныеРеквизиты Цикл + Если СтандартныйРеквизит.ПроверкаЗаполнения = ПроверкаЗаполнения.ВыдаватьОшибку Тогда + Возврат Истина; + КонецЕсли; + КонецЦикла; + + Возврат Ложь; + +КонецФункции + Функция ПрочитанныеПараметры(ПараметрыВыполненияПроверки) Результат = Новый Структура("ПолноеИмя, ОбъектМетаданных, ОбластьПроверки"); Если ПараметрыВыполненияПроверки.Количество() <> 1 Тогда @@ -3626,6 +4007,20 @@ КонецФункции +Функция РасшифровкаЯчейки(Ссылка, ПравилоПроверки, ВидПроверки, УточнениеПроблемы) Экспорт + Если Не ОбщегоНазначения.ЭтоСсылка(ТипЗнч(Ссылка)) Тогда + Возврат ""; + КонецЕсли; + + Расшифровка = Ссылка.Метаданные().ПолноеИмя() + ";" + + Ссылка.УникальныйИдентификатор() + ";" + + ПравилоПроверки.УникальныйИдентификатор() + ";" + + ВидПроверки.УникальныйИдентификатор() + ";" + + УточнениеПроблемы; + + Возврат Расшифровка; +КонецФункции + // См. КонтрольВеденияУчета.ПодсистемаДоступна. Функция ПодсистемаДоступна() Экспорт @@ -3635,6 +4030,10 @@ Функция ЭтоНеразделенныйОбъектМетаданных(ПолноеИмя) + Если Не ОбщегоНазначения.РазделениеВключено() Тогда + Возврат Ложь; + КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.БазоваяФункциональность") Тогда МодульРаботаВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("РаботаВМоделиСервиса"); @@ -3646,6 +4045,40 @@ КонецФункции +Процедура ЗаполнитьИндексКартинки(Строки, СтрокаСписка, КлючСтроки, КолонкаИндикатора, ПроблемныеОбъекты) Экспорт + + Если Не СтрокаСписка.Данные.Свойство(КолонкаИндикатора) Тогда + Возврат; + КонецЕсли; + + ТекстЯчейки = СтрокаСписка.Оформление.Получить(КолонкаИндикатора).НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Текст")); + + НайденнаяСтрока = ПроблемныеОбъекты.Найти(КлючСтроки, "ПроблемныйОбъект"); + Если НайденнаяСтрока = Неопределено Тогда + СтрокаСписка.Данные[КолонкаИндикатора] = 0; + Если ТекстЯчейки <> Неопределено Тогда + ТекстЯчейки.Значение = 0; + КонецЕсли; + Иначе + Если НайденнаяСтрока.ПорядокПроблемы = 0 + Или НайденнаяСтрока.ПорядокПроблемы = 1 Тогда + СтрокаСписка.Данные[КолонкаИндикатора] = 1 + ИначеЕсли НайденнаяСтрока.ПорядокПроблемы = 2 + Или НайденнаяСтрока.ПорядокПроблемы = 3 Тогда + СтрокаСписка.Данные[КолонкаИндикатора] = 2 + ИначеЕсли НайденнаяСтрока.ПорядокПроблемы = 4 Тогда + СтрокаСписка.Данные[КолонкаИндикатора] = 3 + Иначе + СтрокаСписка.Данные[КолонкаИндикатора] = 1 + КонецЕсли; + + Если ТекстЯчейки <> Неопределено Тогда + ТекстЯчейки.Значение = 1; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + Функция ОшибкиЗаполненияОбъекта() УточнениеПроблемы = ""; @@ -3697,9 +4130,15 @@ ПараметрыПроверки.Вставить("РучнойЗапуск", Истина); КонецЕсли; + ПроверкиВеденияУчета = КонтрольВеденияУчетаСлужебныйПовтИсп.ПроверкиВеденияУчета().Проверки; + ВсеСвойстваПроверки = ПроверкиВеденияУчета.Найти(ПараметрыПроверки.Идентификатор, "Идентификатор"); + ПараметрыПроверки.Вставить("Проверка", Проверка); ПараметрыПроверки.Вставить("ГлобальныеНастройки", ГлобальныеНастройки()); ПараметрыПроверки.Вставить("ИтерацияПроверки", 1); + Если ВсеСвойстваПроверки <> Неопределено Тогда + ПараметрыПроверки.Вставить("ПоддерживаетВыборочнуюПроверку", ВсеСвойстваПроверки.ПоддерживаетВыборочнуюПроверку); + КонецЕсли; Если ПараметрыВыполненияПроверки = Неопределено Тогда ГруппаПроверок = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Проверка, "Родитель"); @@ -3710,7 +4149,7 @@ КонецЕсли; ПараметрыВыполненияПроверки = Новый Массив; ПараметрыВыполненияПроверки.Добавить(ПараметрыВыполненияПроверки(ИдентификаторПроверки)); - КонецЕсли; + КонецЕсли; ПараметрыПроверки.Вставить("ПараметрыВыполненияПроверки", ПараметрыВыполненияПроверки); Возврат ПараметрыПроверки; @@ -3737,6 +4176,51 @@ КонецПроцедуры +Процедура ОчиститьРезультатыПередВыполнениемПроверки(Проверка) + Набор = РегистрыСведений.РезультатыПроверкиУчета.СоздатьНаборЗаписей(); + Набор.Отбор.ПравилоПроверки.Установить(Проверка); + Набор.Отбор.ИгнорироватьПроблему.Установить(Ложь); + Набор.Записать(); +КонецПроцедуры + +Функция РезультатПоследнейПроверкиОбъекта(ПараметрыВыполненияПроверки) + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("ПравилоПроверки", ПараметрыВыполненияПроверки.Проверка); + Запрос.УстановитьПараметр("ПроблемныеОбъекты", ПараметрыВыполненияПроверки.ПроверяемыеОбъекты); + Запрос.Текст = + "ВЫБРАТЬ + | РезультатыПроверкиУчета.ПроблемныйОбъект КАК ПроблемныйОбъект, + | РезультатыПроверкиУчета.ПравилоПроверки КАК ПравилоПроверки, + | РезультатыПроверкиУчета.ВидПроверки КАК ВидПроверки, + | РезультатыПроверкиУчета.КлючУникальности КАК КлючУникальности, + | РезультатыПроверкиУчета.ИгнорироватьПроблему КАК ИгнорироватьПроблему + |ИЗ + | РегистрСведений.РезультатыПроверкиУчета КАК РезультатыПроверкиУчета + |ГДЕ + | РезультатыПроверкиУчета.ПравилоПроверки = &ПравилоПроверки + | И РезультатыПроверкиУчета.ПроблемныйОбъект В (&ПроблемныеОбъекты) + | И РезультатыПроверкиУчета.ИгнорироватьПроблему = ЛОЖЬ"; + + Возврат Запрос.Выполнить().Выгрузить(); +КонецФункции + +Процедура УдалитьРезультатыПредыдущейПроверки(РезультатПоследнейПроверки) + + Для Каждого Строка Из РезультатПоследнейПроверки Цикл + Набор = РегистрыСведений.РезультатыПроверкиУчета.СоздатьНаборЗаписей(); + Набор.Отбор.ПроблемныйОбъект.Установить(Строка.ПроблемныйОбъект); + Набор.Отбор.ПравилоПроверки.Установить(Строка.ПравилоПроверки); + Набор.Отбор.ВидПроверки.Установить(Строка.ВидПроверки); + Набор.Отбор.КлючУникальности.Установить(Строка.КлючУникальности); + Набор.Отбор.ИгнорироватьПроблему.Установить(Строка.ИгнорироватьПроблему); + + УстановитьПривилегированныйРежим(Истина); + Набор.Записать(); + УстановитьПривилегированныйРежим(Ложь); + КонецЦикла; + +КонецПроцедуры + // Выполняет проверку превышения количества итераций проверки допустимого лимита. // // Параметры: @@ -3776,34 +4260,34 @@ Если Справочники.ТипВсеСсылки().СодержитТип(ТипОбъекта) Тогда - Возврат НСтр("ru = 'элементом справочника'"); + Возврат НСтр("ru = 'элементе справочника'"); ИначеЕсли Документы.ТипВсеСсылки().СодержитТип(ТипОбъекта) Тогда - Возврат НСтр("ru = 'документом'"); + Возврат НСтр("ru = 'документе'"); ИначеЕсли БизнесПроцессы.ТипВсеСсылки().СодержитТип(ТипОбъекта) Тогда - Возврат НСтр("ru = 'бизнес процессом'"); + Возврат НСтр("ru = 'бизнес процессе'"); ИначеЕсли ПланыВидовХарактеристик.ТипВсеСсылки().СодержитТип(ТипОбъекта) Тогда - Возврат НСтр("ru = 'планом видов характеристик'"); + Возврат НСтр("ru = 'плане видов характеристик'"); ИначеЕсли ПланыСчетов.ТипВсеСсылки().СодержитТип(ТипОбъекта) Тогда - Возврат НСтр("ru = 'планом счетов'"); + Возврат НСтр("ru = 'плане счетов'"); ИначеЕсли ПланыВидовРасчета.ТипВсеСсылки().СодержитТип(ТипОбъекта) Тогда - Возврат НСтр("ru = 'планом видов расчета'"); + Возврат НСтр("ru = 'плане видов расчета'"); ИначеЕсли Задачи.ТипВсеСсылки().СодержитТип(ТипОбъекта) Тогда - Возврат НСтр("ru = 'задачей'"); + Возврат НСтр("ru = 'задаче'"); ИначеЕсли ПланыОбмена.ТипВсеСсылки().СодержитТип(ТипОбъекта) Тогда - Возврат НСтр("ru = 'планом обмена'"); + Возврат НСтр("ru = 'плане обмена'"); ИначеЕсли Перечисления.ТипВсеСсылки().СодержитТип(ТипОбъекта) Тогда - Возврат НСтр("ru = 'перечислением'"); + Возврат НСтр("ru = 'перечислении'"); Иначе - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='Неверный тип значения параметра (%1)'"), Строка(ТипОбъекта)); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Неверный тип значения параметра (%1)'"), Строка(ТипОбъекта)); КонецЕсли; @@ -3943,6 +4427,27 @@ КонецФункции +Функция КартинкаПроблемы(Настройки) + КартинкаИндикатораПроблем = Настройки.КартинкаИндикатораПроблем; + ВажностьПроблемы = Настройки.ВажностьПроблемы; + + Если КартинкаИндикатораПроблем <> Неопределено И КартинкаИндикатораПроблем <> БиблиотекаКартинок.Предупреждение Тогда + Картинка = КартинкаИндикатораПроблем; + ИначеЕсли ВажностьПроблемы = Перечисления.ВажностьПроблемыУчета.Ошибка + Или ВажностьПроблемы = Перечисления.ВажностьПроблемыУчета.Предупреждение Тогда + Картинка = БиблиотекаКартинок.Предупреждение; + ИначеЕсли ВажностьПроблемы = Перечисления.ВажностьПроблемыУчета.ВажнаяИнформация + Или ВажностьПроблемы = Перечисления.ВажностьПроблемыУчета.Информация Тогда + Картинка = БиблиотекаКартинок.Информация; + ИначеЕсли ВажностьПроблемы = Перечисления.ВажностьПроблемыУчета.ПолезныйСовет Тогда + Картинка = БиблиотекаКартинок.ПолезныйСоветКонтрольВеденияУчета; + Иначе + Картинка = БиблиотекаКартинок.Предупреждение; + КонецЕсли; + + Возврат Картинка; +КонецФункции + #Область ИгнорированиеПроблемСлужебная // Формирует контрольную сумму измерений ПроблемныйОбъект, ПравилоПроверки, ВидПроверки diff --git a/SSL/src/CommonModules/КонтрольВеденияУчетаСлужебныйКлиент/Module.bsl b/SSL/src/CommonModules/КонтрольВеденияУчетаСлужебныйКлиент/Module.bsl index c5a518df4..d7575fc3f 100644 --- a/SSL/src/CommonModules/КонтрольВеденияУчетаСлужебныйКлиент/Module.bsl +++ b/SSL/src/CommonModules/КонтрольВеденияУчетаСлужебныйКлиент/Module.bsl @@ -67,6 +67,74 @@ КонецПроцедуры +// Открывает форму списка справочника ПравилаПроверкиУчета. +// +Процедура ОткрытьСписокПроверокВеденияУчета() Экспорт + ОткрытьФорму("Справочник.ПравилаПроверкиУчета.ФормаСписка"); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Обработчики событий подсистем конфигурации. + +// См. ОбщегоНазначенияКлиентПереопределяемый.ПослеНачалаРаботыСистемы. +Процедура ПослеНачалаРаботыСистемы() Экспорт + ПараметрыКлиента = СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиентаПриЗапуске(); + Если ПараметрыКлиента.Свойство("КонтрольВеденияУчета") + И ПараметрыКлиента.КонтрольВеденияУчета.ОповещатьОПроблемахВеденияУчета Тогда + ПодключитьОбработчикОжидания("ОповеститьОПроблемахВеденияУчета", 30, Истина); + КонецЕсли; +КонецПроцедуры + +// См. ОтчетыКлиентПереопределяемый.ОбработкаРасшифровки. +Процедура ПриОбработкеРасшифровки(ФормаОтчета, Элемент, Расшифровка, СтандартнаяОбработка) Экспорт + + Если ФормаОтчета.НастройкиОтчета.ПолноеИмя = "Отчет.РезультатыПроверкиУчета" Тогда + Расшифровка = ФормаОтчета.ОтчетТабличныйДокумент.ТекущаяОбласть.Расшифровка; + Результат = КонтрольВеденияУчетаВызовСервера.РасшифровкаВыделеннойЯчейки(ФормаОтчета.ОтчетДанныеРасшифровки, ФормаОтчета.ОтчетТабличныйДокумент, Расшифровка); + Если Результат <> Неопределено Тогда + СтандартнаяОбработка = Ложь; + ПоказатьЗначение(, Результат.ПроблемныйОбъект); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +// См. ОтчетыКлиентПереопределяемый.ОбработчикКоманды. +Процедура ПриОбработкеКоманды(ФормаОтчета, Команда, Результат) Экспорт + + Если ФормаОтчета.НастройкиОтчета.ПолноеИмя = "Отчет.РезультатыПроверкиУчета" Тогда + ТекстНеуспешногоДействия = НСтр("ru = 'Необходимо выбрать строку с проблемным объектом.'"); + Расшифровка = ФормаОтчета.ОтчетТабличныйДокумент.ТекущаяОбласть.Расшифровка; + Если Команда.Имя = "КонтрольВеденияУчетаИсторияИзмененийОбъекта" Тогда + Результат = КонтрольВеденияУчетаВызовСервера.ДанныеДляИсторииИзмененийОбъекта(ФормаОтчета.ОтчетДанныеРасшифровки, ФормаОтчета.ОтчетТабличныйДокумент, Расшифровка); + Если Результат <> Неопределено Тогда + Если Результат.Версионируется Тогда + МодульВерсионированиеОбъектовКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ВерсионированиеОбъектовКлиент"); + МодульВерсионированиеОбъектовКлиент.ПоказатьИсториюИзменений(Результат.Ссылка, ФормаОтчета); + Иначе + События = Новый Массив; + События.Добавить("_$Data$_.Delete"); + События.Добавить("_$Data$_.New"); + События.Добавить("_$Data$_.Update"); + Отбор = Новый Структура; + Отбор.Вставить("Данные", Результат.Ссылка); + Отбор.Вставить("СобытиеЖурналаРегистрации", События); + Отбор.Вставить("ДатаНачала", НачалоМесяца(ТекущаяДата())); + ЖурналРегистрацииКлиент.ОткрытьЖурналРегистрации(Отбор); + КонецЕсли; + Иначе + ПоказатьПредупреждение(, ТекстНеуспешногоДействия); + КонецЕсли; + ИначеЕсли Команда.Имя = "КонтрольВеденияУчетаИгнорироватьПроблему" Тогда + ПроблемаПроигнорирована = КонтрольВеденияУчетаВызовСервера.ИгнорироватьПроблему(ФормаОтчета.ОтчетДанныеРасшифровки, ФормаОтчета.ОтчетТабличныйДокумент, Расшифровка); + Если Не ПроблемаПроигнорирована Тогда + ПоказатьПредупреждение(, ТекстНеуспешногоДействия); + КонецЕсли; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -229,4 +297,19 @@ КонецФункции +Процедура ОповеститьОНаличииПроблемВеденияУчета() Экспорт + ПараметрыКлиента = СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиентаПриЗапуске(); + КоличествоПроблем = ПараметрыКлиента.КонтрольВеденияУчета.КоличествоПроблемВеденияУчета; + Если КоличествоПроблем = 0 Тогда + Возврат; + КонецЕсли; + ПоказатьОповещениеПользователя( + НСтр("ru = 'Проверка ведения учета'"), + "e1cib/app/Отчет.РезультатыПроверкиУчета", + НСтр("ru = 'Найдены проблемы ведения учета'") + " (" + КоличествоПроблем + ")", + БиблиотекаКартинок.Предупреждение32); +КонецПроцедуры + + + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/КонтрольВеденияУчетаСлужебныйПовтИсп/Module.bsl b/SSL/src/CommonModules/КонтрольВеденияУчетаСлужебныйПовтИсп/Module.bsl index 9dff8cc24..3114da484 100644 --- a/SSL/src/CommonModules/КонтрольВеденияУчетаСлужебныйПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/КонтрольВеденияУчетаСлужебныйПовтИсп/Module.bsl @@ -68,6 +68,20 @@ КонецФункции +Функция ИсключаемыеИзПроверкиОбъекты() Экспорт + + Объекты = Новый Массив; + ИнтеграцияПодсистемБСП.ПриОпределенииОбъектовИсключаемыхИзПроверки(Объекты); + + Имена = Новый Массив; + Для Каждого Объект Из Объекты Цикл + Имена.Добавить(Объект.ПолноеИмя()); + КонецЦикла; + + Возврат Новый ФиксированныйМассив(Имена); + +КонецФункции + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -76,33 +90,34 @@ Процедура ДобавитьСистемныеПроверкиВеденияУчета(ГруппыПроверок, Проверки) ГруппаПроверок = ГруппыПроверок.Добавить(); - ГруппаПроверок.Наименование = НСтр("ru='Системные проверки'"); + ГруппаПроверок.Наименование = НСтр("ru = 'Системные проверки'"); ГруппаПроверок.Идентификатор = "СистемныеПроверки"; ГруппаПроверок.КонтекстПроверокВеденияУчета = "СистемныеПроверки"; Проверка = Проверки.Добавить(); Проверка.ИдентификаторГруппы = ГруппаПроверок.Идентификатор; - Проверка.Наименование = НСтр("ru='Проверка незаполненных обязательных реквизитов'"); - Проверка.Причины = НСтр("ru='Некорректная синхронизация данных с другими программами или импорт данных.'"); - Проверка.Рекомендация = НСтр("ru='Перенастроить синхронизацию данных или заполнить обязательные реквизиты вручную. + Проверка.Наименование = НСтр("ru = 'Проверка незаполненных обязательных реквизитов'"); + Проверка.Причины = НСтр("ru = 'Некорректная синхронизация данных с другими программами или импорт данных.'"); + Проверка.Рекомендация = НСтр("ru = 'Перенастроить синхронизацию данных или заполнить обязательные реквизиты вручную. |Для этого можно также воспользоваться групповым изменением реквизитов (в разделе Администрирование). |В случае обнаружения незаполненных обязательных полей у регистров, то в большинстве |случаев, для устранения проблемы, достаточно заполнить соответствующие поля в документе-регистраторе.'"); Проверка.Идентификатор = "СтандартныеПодсистемы.ПроверкаНезаполненныхОбязательныхРеквизитов"; Проверка.ОбработчикПроверки = "КонтрольВеденияУчетаСлужебный.ПроверитьНезаполненныеОбязательныеРеквизиты"; Проверка.КонтекстПроверокВеденияУчета = "СистемныеПроверки"; - Проверка.Отключена = Истина; + Проверка.ПоддерживаетВыборочнуюПроверку = Истина; + Проверка.Отключена = Истина; Проверка = Проверки.Добавить(); Проверка.ИдентификаторГруппы = ГруппаПроверок.Идентификатор; - Проверка.Наименование = НСтр("ru='Проверка ссылочной целостности'"); - Проверка.Причины = НСтр("ru='Случайное или преднамеренное удаление данных без контроля ссылочной целостности, сбои в работе оборудования, некорректная синхронизация данных с другими программами или импорт данных, ошибки в сторонних инструментах (например, внешних обработках или расширениях).'"); - Проверка.Рекомендация = НСтр("ru='В зависимости от ситуации следует выбрать один из вариантов: + Проверка.Наименование = НСтр("ru = 'Проверка ссылочной целостности'"); + Проверка.Причины = НСтр("ru = 'Случайное или преднамеренное удаление данных без контроля ссылочной целостности, сбои в работе оборудования, некорректная синхронизация данных с другими программами или импорт данных, ошибки в сторонних инструментах (например, внешних обработках или расширениях).'"); + Проверка.Рекомендация = НСтр("ru = 'В зависимости от ситуации следует выбрать один из вариантов: |• восстановить удаленные данные из резервной копии, |• или очистить ссылки на удаленные данные (если они больше не требуются).'"); Если Не ОбщегоНазначения.РазделениеВключено() Тогда Проверка.Рекомендация = Проверка.Рекомендация + Символы.ПС + Символы.ПС - + НСтр("ru='Для очистки ссылок на удаленные данные следует: + + НСтр("ru = 'Для очистки ссылок на удаленные данные следует: |• Завершить работу всех пользователей, установить блокировку входа в программу и сделать резервную копию информационной базы; |• Запустить конфигуратор, меню Администрирование - Тестирования и исправление, включить два флажка для проверки логической и ссылочной целостности | См. подробнее на ИТС: https://its.1c.ru/db/v83doc#bookmark:adm:TI000000142 @@ -113,19 +128,19 @@ КонецЕсли; Проверка.Рекомендация = Проверка.Рекомендация + Символы.ПС - + НСтр("ru='В случае обнаружения битых ссылок в регистрах, то в большинстве случаев, для устранения проблемы + + НСтр("ru = 'В случае обнаружения битых ссылок в регистрах, то в большинстве случаев, для устранения проблемы |достаточно устранить соответствующие битые ссылки в документах-регистраторах.'"); - Проверка.Идентификатор = "СтандартныеПодсистемы.ПроверкаСсылочнойЦелостности"; Проверка.ОбработчикПроверки = "КонтрольВеденияУчетаСлужебный.ПроверитьСсылочнуюЦелостность"; Проверка.КонтекстПроверокВеденияУчета = "СистемныеПроверки"; - Проверка.Отключена = Истина; + Проверка.ПоддерживаетВыборочнуюПроверку = Истина; + Проверка.Отключена = Истина; Проверка = Проверки.Добавить(); Проверка.ИдентификаторГруппы = ГруппаПроверок.Идентификатор; - Проверка.Наименование = НСтр("ru='Проверка циклических ссылок'"); - Проверка.Причины = НСтр("ru='Некорректная синхронизация данных с другими программами или импорт данных.'"); - Проверка.Рекомендация = НСтр("ru='У одного из элементов очистить ссылку на родительский элемент (для автоматического исправления нажать ссылку ниже). + Проверка.Наименование = НСтр("ru = 'Проверка циклических ссылок'"); + Проверка.Причины = НСтр("ru = 'Некорректная синхронизация данных с другими программами или импорт данных.'"); + Проверка.Рекомендация = НСтр("ru = 'У одного из элементов очистить ссылку на родительский элемент (для автоматического исправления нажать ссылку ниже). |Если работа ведется в распределенной информационной базе (РИБ), то исправление следует запускать только в главном узле. |Затем выполнить синхронизацию с подчиненными узлами.'"); Проверка.Идентификатор = "СтандартныеПодсистемы.ПроверкаЦиклическихСсылок"; @@ -136,15 +151,15 @@ Проверка = Проверки.Добавить(); Проверка.ИдентификаторГруппы = ГруппаПроверок.Идентификатор; - Проверка.Наименование = НСтр("ru='Проверка отсутствующих предопределенных элементов'"); - Проверка.Причины = НСтр("ru='Некорректная синхронизация данных с другими программами или импорт данных, ошибки в сторонних инструментах (например, внешних обработках или расширениях).'"); - Проверка.Рекомендация = НСтр("ru='В зависимости от ситуации следует выбрать один из вариантов: + Проверка.Наименование = НСтр("ru = 'Проверка отсутствующих предопределенных элементов'"); + Проверка.Причины = НСтр("ru = 'Некорректная синхронизация данных с другими программами или импорт данных, ошибки в сторонних инструментах (например, внешних обработках или расширениях).'"); + Проверка.Рекомендация = НСтр("ru = 'В зависимости от ситуации следует выбрать один из вариантов: |• подобрать и указать в качестве предопределенного один из существующих элементов в списке; |• восстановить предопределенные элементы из резервной копии; |• создать отсутствующие предопределенные элементы заново (для этого нажмите ссылку ниже).'"); Если Не ОбщегоНазначения.РазделениеВключено() Тогда Проверка.Рекомендация = Проверка.Рекомендация + Символы.ПС - + НСтр("ru='Если работа ведется в распределенной информационной базе (РИБ), то исправление следует запускать только в главном узле. + + НСтр("ru = 'Если работа ведется в распределенной информационной базе (РИБ), то исправление следует запускать только в главном узле. |Затем выполнить синхронизацию с подчиненными узлами.'"); КонецЕсли; Проверка.Идентификатор = "СтандартныеПодсистемы.ПроверкаОтсутствующихПредопределенныхЭлементов"; @@ -155,12 +170,12 @@ Проверка = Проверки.Добавить(); Проверка.ИдентификаторГруппы = ГруппаПроверок.Идентификатор; - Проверка.Наименование = НСтр("ru='Проверка дублирования предопределенных элементов'"); - Проверка.Причины = НСтр("ru='Некорректная синхронизация данных с другими программами или импорт данных.'"); - Проверка.Рекомендация = НСтр("ru='Запустить поиск и удаление дублей (в разделе Администрирование).'"); + Проверка.Наименование = НСтр("ru = 'Проверка дублирования предопределенных элементов'"); + Проверка.Причины = НСтр("ru = 'Некорректная синхронизация данных с другими программами или импорт данных.'"); + Проверка.Рекомендация = НСтр("ru = 'Запустить поиск и удаление дублей (в разделе Администрирование).'"); Если Не ОбщегоНазначения.РазделениеВключено() Тогда Проверка.Рекомендация = Проверка.Рекомендация + Символы.ПС - + НСтр("ru='Если работа ведется в распределенной информационной базе (РИБ), то исправление следует запускать только в главном узле. + + НСтр("ru = 'Если работа ведется в распределенной информационной базе (РИБ), то исправление следует запускать только в главном узле. |Затем выполнить синхронизацию с подчиненными узлами.'"); КонецЕсли; Проверка.Идентификатор = "СтандартныеПодсистемы.ПроверкаДублированияПредопределенныхЭлементов"; @@ -170,12 +185,12 @@ Проверка = Проверки.Добавить(); Проверка.ИдентификаторГруппы = ГруппаПроверок.Идентификатор; - Проверка.Наименование = НСтр("ru='Проверка отсутствия предопределенных узлов плана обмена'"); - Проверка.Причины = НСтр("ru='Некорректное поведение программы при работе на устаревших версиях платформы 1С:Предприятие.'"); + Проверка.Наименование = НСтр("ru = 'Проверка отсутствия предопределенных узлов плана обмена'"); + Проверка.Причины = НСтр("ru = 'Некорректное поведение программы при работе на устаревших версиях платформы 1С:Предприятие.'"); Если ОбщегоНазначения.РазделениеВключено() Тогда - Проверка.Рекомендация = НСтр("ru='Обратиться в техническую поддержку сервиса.'"); + Проверка.Рекомендация = НСтр("ru = 'Обратиться в техническую поддержку сервиса.'"); Иначе - Проверка.Рекомендация = НСтр("ru='• Перейти на версию платформы 1С:Предприятие 8.3.9.2033 или выше; + Проверка.Рекомендация = НСтр("ru = '• Перейти на версию платформы 1С:Предприятие 8.3.9.2033 или выше; |• Завершить работу всех пользователей, установить блокировку входа в программу и сделать резервную копию информационной базы; |• Запустить конфигуратор, меню Администрирование - Тестирования и исправление, включить два флажка для проверки логической и ссылочной целостности | См. подробнее на ИТС: https://its.1c.ru/db/v83doc#bookmark:adm:TI000000142 @@ -281,6 +296,7 @@ КолонкиПроверок.Добавить("ИдентификаторРодителя", Новый ОписаниеТипов("Строка", , , , Новый КвалификаторыСтроки(256))); КолонкиПроверок.Добавить("Комментарий", Новый ОписаниеТипов("Строка", , , , Новый КвалификаторыСтроки(256))); КолонкиПроверок.Добавить("Отключена", Новый ОписаниеТипов("Булево")); + КолонкиПроверок.Добавить("ПоддерживаетВыборочнуюПроверку", Новый ОписаниеТипов("Булево")); Проверки.Индексы.Добавить("Идентификатор"); Возврат Проверки; diff --git a/SSL/src/CommonModules/ЛокализацияКлиент/Module.bsl b/SSL/src/CommonModules/ЛокализацияКлиент/Module.bsl deleted file mode 100644 index 8e3155e81..000000000 --- a/SSL/src/CommonModules/ЛокализацияКлиент/Module.bsl +++ /dev/null @@ -1,75 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2019, ООО 1С-Софт -// Все права защищены. Эта программа и сопроводительные материалы предоставляются -// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) -// Текст лицензии доступен по ссылке: -// https://creativecommons.org/licenses/by/4.0/legalcode -/////////////////////////////////////////////////////////////////////////////////////////////////////// - -#Область СлужебныйПрограммныйИнтерфейс - -// Обработчик события ПриОткрытии поля ввода формы для открытия формы ввода значения реквизита на разных языках. -// -// Параметры: -// Объект - ДанныеФормыКоллекция - Объект на форме. -// Элемент - ПолеФормы - Элемент формы, для которого будет открыта форма ввода на разных языках. -// ИмяРеквизита - Строка - Имя реквизита, для которого будет открыта форма ввода на разных языках. -// СтандартнаяОбработка - Булево - Признак выполнения стандартной (системной) обработки события. -// -Процедура ПриОткрытии(Объект, Элемент, ИмяРеквизита, СтандартнаяОбработка) Экспорт - - СтандартнаяОбработка = Ложь; - - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("Представления", Объект.Представления); - ПараметрыФормы.Вставить("Ссылка", Объект.Ссылка); - ПараметрыФормы.Вставить("ИмяРеквизита", ИмяРеквизита); - ПараметрыФормы.Вставить("ТекущиеЗначение", Элемент.ТекстРедактирования); - ПараметрыФормы.Вставить("ТолькоПросмотр", Элемент.ТолькоПросмотр); - - ДополнительныеПараметры = Новый Структура; - ДополнительныеПараметры.Вставить("Объект", Объект); - ДополнительныеПараметры.Вставить("ИмяРеквизита", ИмяРеквизита); - - Оповещение = Новый ОписаниеОповещения("ПослеВводаСтрокНаРазныхЯзыках", ЛокализацияКлиент, ДополнительныеПараметры); - ОткрытьФорму("ОбщаяФорма.ВводНаРазныхЯзыках", ПараметрыФормы,,,,, Оповещение); - -КонецПроцедуры - -#КонецОбласти - -#Область СлужебныеПроцедурыИФункции - -Процедура ПослеВводаСтрокНаРазныхЯзыках(Результат, ДополнительныеПараметры) Экспорт - - Если ТипЗнч(Результат) <> Тип("Структура") Тогда - Возврат; - КонецЕсли; - - Объект = ДополнительныеПараметры.Объект; - - Для каждого Представление Из Результат.ЗначенияНаРазныхЯзыках Цикл - Отбор = Новый Структура("КодЯзыка", Представление.КодЯзыка); - НайденныеСтроки = Объект.Представления.НайтиСтроки(Отбор); - Если НайденныеСтроки.Количество() > 0 Тогда - Если ПустаяСтрока(Представление.ЗначениеРеквизита) - И СтрСравнить(Результат.ОсновнойЯзык, Представление.КодЯзыка) <> 0 Тогда - Объект.Представления.Удалить(НайденныеСтроки[0]); - Продолжить; - КонецЕсли; - СтрокаПредставлений = НайденныеСтроки[0]; - Иначе - СтрокаПредставлений = Объект.Представления.Добавить(); - СтрокаПредставлений.КодЯзыка = Представление.КодЯзыка; - КонецЕсли; - СтрокаПредставлений[ДополнительныеПараметры.ИмяРеквизита] = Представление.ЗначениеРеквизита; - - КонецЦикла; - - Если Результат.Свойство("СтрокаНаТекущемЯзыке") Тогда - Объект[ДополнительныеПараметры.ИмяРеквизита] = Результат.СтрокаНаТекущемЯзыке; - КонецЕсли; - -КонецПроцедуры - -#КонецОбласти diff --git a/SSL/src/CommonModules/ЛокализацияКлиентСервер/Module.bsl b/SSL/src/CommonModules/ЛокализацияКлиентСервер/Module.bsl deleted file mode 100644 index 8f887cd17..000000000 --- a/SSL/src/CommonModules/ЛокализацияКлиентСервер/Module.bsl +++ /dev/null @@ -1,55 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2019, ООО 1С-Софт -// Все права защищены. Эта программа и сопроводительные материалы предоставляются -// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) -// Текст лицензии доступен по ссылке: -// https://creativecommons.org/licenses/by/4.0/legalcode -/////////////////////////////////////////////////////////////////////////////////////////////////////// - -#Область СлужебныйПрограммныйИнтерфейс - -// Вызывается при получении представления объекта или ссылки в зависимости от языка, -// используемого при работе пользователя. -// -// Параметры: -// Данные - Структура - Содержит значения полей, из которых формируется представление. -// Представление - Строка - В данный параметр нужно поместить сформированное представление. -// СтандартнаяОбработка - Булево - В данный параметр передается признак формирования стандартного представления. -// ИмяРеквизита - Строка - Указывает, в каком реквизите хранится представление на основном языке. -// -Процедура ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка, ИмяРеквизита = "Наименование") Экспорт - - #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ТолстыйКлиентУправляемоеПриложение Или ВнешнееСоединение Тогда - - Если ТекущийЯзык() = Метаданные.ОсновнойЯзык Или Не Данные.Свойство("Ссылка") Или Данные.Ссылка = Неопределено Тогда - Возврат; - КонецЕсли; - - ТекстЗапроса = - "ВЫБРАТЬ ПЕРВЫЕ 1 - | Представления.%2 КАК Наименование - |ИЗ - | %1.Представления КАК Представления - |ГДЕ - | Представления.КодЯзыка = &Язык - | И Представления.Ссылка = &Ссылка"; - - ТекстЗапроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстЗапроса, - Данные.Ссылка.Метаданные().ПолноеИмя(), ИмяРеквизита); - - Запрос = Новый Запрос(ТекстЗапроса); - - Запрос.УстановитьПараметр("Ссылка", Данные.Ссылка); - Запрос.УстановитьПараметр("Язык", ТекущийЯзык().КодЯзыка); - - РезультатЗапроса = Запрос.Выполнить(); - Если Не РезультатЗапроса.Пустой() Тогда - СтандартнаяОбработка = Ложь; - Представление = РезультатЗапроса.Выгрузить()[0].Наименование; - КонецЕсли; - -#КонецЕсли - -КонецПроцедуры - -#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ЛокализацияСервер/Module.bsl b/SSL/src/CommonModules/ЛокализацияСервер/Module.bsl deleted file mode 100644 index d33d11b7a..000000000 --- a/SSL/src/CommonModules/ЛокализацияСервер/Module.bsl +++ /dev/null @@ -1,157 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2019, ООО 1С-Софт -// Все права защищены. Эта программа и сопроводительные материалы предоставляются -// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) -// Текст лицензии доступен по ссылке: -// https://creativecommons.org/licenses/by/4.0/legalcode -/////////////////////////////////////////////////////////////////////////////////////////////////////// - -#Область СлужебныйПрограммныйИнтерфейс - -// Возвращает метаданные по коду языка конфигурации. -// -// Параметры: -// КодЯзыка - Строка - код языка, например "en" (как задано в свойстве КодЯзыка метаданных ОбъектМетаданных: Язык). -// -// Возвращаемое значение: -// ОбъектМетаданных: Язык - если найден по переданному коду языка, иначе Неопределено. -// -Функция ЯзыкПоКоду(Знач КодЯзыка) Экспорт - Для каждого Язык Из Метаданные.Языки Цикл - Если Язык.КодЯзыка = КодЯзыка Тогда - Возврат Язык; - КонецЕсли; - КонецЦикла; - Возврат Неопределено; -КонецФункции - -// Вызывается из обработчика ПриСозданииНаСервере формы объекта для отображения кнопки открытия для локализуемых элементов, -// нажатие на которую открывает форму ввода значения реквизита на разных языках. -// -// Параметры: -// ЛокализуемыеЭлементыФормы - ПолеВвода, Массив - Элементы формы, у которых необходимо вывести кнопку открытия. -// -Процедура ПриСозданииНаСервере(ЛокализуемыеЭлементыФормы) Экспорт - - Если Метаданные.Языки.Количество() < 2 Тогда - Возврат; - КонецЕсли; - - Если ТипЗнч(ЛокализуемыеЭлементыФормы) = Тип("Массив") Тогда - Для каждого ЛокализуемыйЭлемент Из ЛокализуемыеЭлементыФормы Цикл - ЛокализуемыйЭлемент.КнопкаОткрытия = Истина; - КонецЦикла; - Иначе - ЛокализуемыеЭлементыФормы.КнопкаОткрытия = Истина; - КонецЕсли; - -КонецПроцедуры - -// Вызывается из обработчика ПриЧтениеНаСервере формы объекта для заполнения значений реквизитов формы -// в зависимости от языка, используемого при работе пользователя. -// -// Параметры: -// Форма - ФормаКлиентскогоПриложения - Форма объекта. -// ТекущийОбъект - Произвольный - Объект, который был получен в обработчике формы ПриЧтенииНаСервере. -// -Процедура ПриЧтенииНаСервере(Форма, ТекущийОбъект) Экспорт - - ТекущийОбъект.ПриЧтенииПредставленийНаСервере(); - Форма.ЗначениеВРеквизитФормы(ТекущийОбъект, "Объект"); - -КонецПроцедуры - -// Вызывается из модуля объекта для установки значений у локализуемых реквизитов объекта -// в зависимости от языка, используемого при работе пользователя. -// -// Параметры: -// Объект - Произвольный - объект данных. -// -Процедура ПриЧтенииПредставленийНаСервере(Объект) Экспорт - - Если ТекущийЯзык() = Метаданные.ОсновнойЯзык Тогда - Возврат; - КонецЕсли; - - Для каждого Реквизит Из Объект.Метаданные().ТабличныеЧасти.Представления.Реквизиты Цикл - - Если СтрСравнить(Реквизит.Имя, "КодЯзыка") = 0 Тогда - Продолжить; - КонецЕсли; - - ИмяРеквизита = Реквизит.Имя; - - Отбор = Новый Структура(); - Отбор.Вставить("КодЯзыка", Метаданные.ОсновнойЯзык.КодЯзыка); - НайденныеСтроки = Объект.Представления.НайтиСтроки(Отбор); - - Если НайденныеСтроки.Количество() > 0 Тогда - Представление = НайденныеСтроки[0]; - Иначе - Представление = Объект.Представления.Добавить(); - Представление.КодЯзыка = Метаданные.ОсновнойЯзык.КодЯзыка; - КонецЕсли; - Представление[ИмяРеквизита] = Объект[ИмяРеквизита]; - - Отбор = Новый Структура(); - Отбор.Вставить("КодЯзыка", ТекущийЯзык().КодЯзыка); - НайденныеСтроки = Объект.Представления.НайтиСтроки(Отбор); - - Если НайденныеСтроки.Количество() > 0 И ЗначениеЗаполнено(НайденныеСтроки[0][ИмяРеквизита]) Тогда - Объект[ИмяРеквизита] = НайденныеСтроки[0][ИмяРеквизита]; - КонецЕсли; - - КонецЦикла; - -КонецПроцедуры - -// Вызывается из обработчика ПередЗаписьюНаСервере формы объекта или при программной записи объекта -// для установки значений реквизитов формы в зависимости от языка, используемого при работе пользователя. -// -// Параметры: -// ТекущийОбъект - Произвольный - Записываемый объект. -// -Процедура ПередЗаписьюНаСервере(ТекущийОбъект) Экспорт - - Если ТекущийЯзык() = Метаданные.ОсновнойЯзык Тогда - Возврат; - КонецЕсли; - - Реквизиты = Новый Массив; - Для каждого Реквизит Из ТекущийОбъект.Ссылка.Метаданные().ТабличныеЧасти.Представления.Реквизиты Цикл - Если СтрСравнить(Реквизит.Имя, "КодЯзыка") = 0 Тогда - Продолжить; - КонецЕсли; - - Реквизиты.Добавить(Реквизит.Имя); - КонецЦикла; - - Отбор = Новый Структура(); - Отбор.Вставить("КодЯзыка", ТекущийЯзык().КодЯзыка); - НайденныеСтроки = ТекущийОбъект.Представления.НайтиСтроки(Отбор); - - Если НайденныеСтроки.Количество() > 0 Тогда - Представление = НайденныеСтроки[0]; - Иначе - Представление = ТекущийОбъект.Представления.Добавить(); - Представление.КодЯзыка = ТекущийЯзык().КодЯзыка; - КонецЕсли; - - Для каждого ИмяРеквизита Из Реквизиты Цикл - Представление[ИмяРеквизита] = ТекущийОбъект[ИмяРеквизита]; - КонецЦикла; - - Отбор.КодЯзыка = Метаданные.ОсновнойЯзык.КодЯзыка; - НайденныеСтроки = ТекущийОбъект.Представления.НайтиСтроки(Отбор); - Если НайденныеСтроки.Количество() > 0 Тогда - Для каждого ИмяРеквизита Из Реквизиты Цикл - ТекущийОбъект[ИмяРеквизита] = НайденныеСтроки[0][ИмяРеквизита]; - КонецЦикла; - ТекущийОбъект.Представления.Удалить(НайденныеСтроки[0]); - КонецЕсли; - - ТекущийОбъект.Представления.Свернуть("КодЯзыка", СтрСоединить(Реквизиты, ",")); - -КонецПроцедуры - -#КонецОбласти \ 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..facb5c10d --- /dev/null +++ b/SSL/src/CommonModules/МультиязычностьКлиент/Module.bsl @@ -0,0 +1,99 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2019, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ПрограммныйИнтерфейс + +// Обработчик события ПриОткрытии поля ввода формы для открытия формы ввода значения реквизита на разных языках. +// +// Параметры: +// Форма - ФормаКлиентскогоПриложения - форма содержащая мультиязычные реквизиты. +// Объект - ДанныеФормыКоллекция - Объект на форме. +// Элемент - ПолеФормы - Элемент формы, для которого будет открыта форма ввода на разных языках. +// СтандартнаяОбработка - Булево - Признак выполнения стандартной (системной) обработки события. +// +Процедура ПриОткрытии(Форма, Объект, Элемент, СтандартнаяОбработка) Экспорт + + СтандартнаяОбработка = Ложь; + ПутьКДанным = Форма.ПараметрыМультиязычныхРеквизитов[Элемент.Имя]; + ИмяРеквизита = СтрЗаменить(ПутьКДанным, "Объект.", ""); + + ИмяЭлемента = Элемент.Имя; + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("Ссылка", Объект.Ссылка); + ПараметрыФормы.Вставить("ИмяРеквизита", ИмяРеквизита); + ПараметрыФормы.Вставить("ТекущиеЗначение", Элемент.ТекстРедактирования); + ПараметрыФормы.Вставить("ТолькоПросмотр", Элемент.ТолькоПросмотр); + + Если Объект.Свойство("Представления") Тогда + ПараметрыФормы.Вставить("Представления", Объект.Представления); + Иначе + Представления = Новый Структура(); + + Представления.Вставить(ИмяРеквизита, Объект[ИмяРеквизита]); + Представления.Вставить(ИмяРеквизита + "Язык1", Объект[ИмяРеквизита + "Язык1"]); + Представления.Вставить(ИмяРеквизита + "Язык2", Объект[ИмяРеквизита + "Язык2"]); + + ПараметрыФормы.Вставить("ЗначенияРеквизитов", Представления); + + КонецЕсли; + + ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("Объект", Объект); + ДополнительныеПараметры.Вставить("ИмяРеквизита", ИмяРеквизита); + + Оповещение = Новый ОписаниеОповещения("ПослеВводаСтрокНаРазныхЯзыках", МультиязычностьКлиент, ДополнительныеПараметры); + ОткрытьФорму("ОбщаяФорма.ВводНаРазныхЯзыках", ПараметрыФормы,,,,, Оповещение); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Процедура ПослеВводаСтрокНаРазныхЯзыках(Результат, ДополнительныеПараметры) Экспорт + + Если ТипЗнч(Результат) <> Тип("Структура") Тогда + Возврат; + КонецЕсли; + + Объект = ДополнительныеПараметры.Объект; + Если Результат.ХранениеВТабличнойЧасти Тогда + + Для каждого Представление Из Результат.ЗначенияНаРазныхЯзыках Цикл + Отбор = Новый Структура("КодЯзыка", Представление.КодЯзыка); + НайденныеСтроки = Объект.Представления.НайтиСтроки(Отбор); + Если НайденныеСтроки.Количество() > 0 Тогда + Если ПустаяСтрока(Представление.ЗначениеРеквизита) + И СтрСравнить(Результат.ОсновнойЯзык, Представление.КодЯзыка) <> 0 Тогда + Объект.Представления.Удалить(НайденныеСтроки[0]); + Продолжить; + КонецЕсли; + СтрокаПредставлений = НайденныеСтроки[0]; + Иначе + СтрокаПредставлений = Объект.Представления.Добавить(); + СтрокаПредставлений.КодЯзыка = Представление.КодЯзыка; + КонецЕсли; + СтрокаПредставлений[ДополнительныеПараметры.ИмяРеквизита] = Представление.ЗначениеРеквизита; + + КонецЦикла; + + Иначе + + Для каждого Представление Из Результат.ЗначенияНаРазныхЯзыках Цикл + Объект[ДополнительныеПараметры.ИмяРеквизита + Представление.Суффикс]= Представление.ЗначениеРеквизита; + КонецЦикла; + + КонецЕсли; + + Если Результат.Свойство("СтрокаНаТекущемЯзыке") Тогда + Объект[ДополнительныеПараметры.ИмяРеквизита] = Результат.СтрокаНаТекущемЯзыке; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/ЛокализацияКлиент/ЛокализацияКлиент.mdo b/SSL/src/CommonModules/МультиязычностьКлиент/МультиязычностьКлиент.mdo similarity index 74% rename from SSL/src/CommonModules/ЛокализацияКлиент/ЛокализацияКлиент.mdo rename to SSL/src/CommonModules/МультиязычностьКлиент/МультиязычностьКлиент.mdo index 8b2bdb210..56e8e5e91 100644 --- a/SSL/src/CommonModules/ЛокализацияКлиент/ЛокализацияКлиент.mdo +++ b/SSL/src/CommonModules/МультиязычностьКлиент/МультиязычностьКлиент.mdo @@ -1,9 +1,9 @@ - ЛокализацияКлиент + МультиязычностьКлиент ru - Локализация клиент + Мультиязычность клиент true true diff --git a/SSL/src/CommonModules/МультиязычностьКлиентСервер/Module.bsl b/SSL/src/CommonModules/МультиязычностьКлиентСервер/Module.bsl new file mode 100644 index 000000000..f0c6b1cb4 --- /dev/null +++ b/SSL/src/CommonModules/МультиязычностьКлиентСервер/Module.bsl @@ -0,0 +1,101 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2019, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ПрограммныйИнтерфейс + +// Вызывается при получении представления объекта или ссылки в зависимости от языка, +// используемого при работе пользователя. +// +// Параметры: +// Данные - Структура - Содержит значения полей, из которых формируется представление. +// Представление - Строка - В данный параметр нужно поместить сформированное представление. +// СтандартнаяОбработка - Булево - В данный параметр передается признак формирования стандартного представления. +// ИмяРеквизита - Строка - Указывает, в каком реквизите хранится представление на основном языке. +// +Процедура ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка, ИмяРеквизита = "Наименование") Экспорт + + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + + Если МультиязычностьСервер.ЭтоОсновнойЯзык() Тогда + Возврат; + КонецЕсли; + + Если МультиязычностьПовтИсп.ОбъектНеСодержитТЧПредставления(Данные.Ссылка) Тогда + + СуффиксЯзыка = МультиязычностьСервер.СуффиксТекущегоЯзыка(); + Если ЗначениеЗаполнено(СуффиксЯзыка) Тогда + СтандартнаяОбработка = Ложь; + Представление = Данные[ИмяРеквизита + СуффиксЯзыка]; + КонецЕсли; + + ИначеЕсли Данные.Свойство("Ссылка") Или Данные.Ссылка <> Неопределено Тогда + ТекстЗапроса = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | Представления.%2 КАК Наименование + |ИЗ + | %1.Представления КАК Представления + |ГДЕ + | Представления.КодЯзыка = &Язык + | И Представления.Ссылка = &Ссылка"; + + ТекстЗапроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстЗапроса, + Данные.Ссылка.Метаданные().ПолноеИмя(), ИмяРеквизита); + + Запрос = Новый Запрос(ТекстЗапроса); + + Запрос.УстановитьПараметр("Ссылка", Данные.Ссылка); + Запрос.УстановитьПараметр("Язык", ТекущийЯзык().КодЯзыка); + + РезультатЗапроса = Запрос.Выполнить(); + Если Не РезультатЗапроса.Пустой() Тогда + СтандартнаяОбработка = Ложь; + Представление = РезультатЗапроса.Выгрузить()[0].Наименование; + КонецЕсли; + + КонецЕсли; + + #КонецЕсли + +КонецПроцедуры + +// Вызывается для формирования состава полей, из которых формируется представление объекта или ссылки. +// Состав полей формируется с учетом текущего языка пользователя. +// +// Параметры: +// Поля - Массив - Массив, содержащий имена полей, которые нужны для формирования представления объекта +// или ссылки. +// СтандартнаяОбработка - Булево - В данный параметр передается признак выполнения стандартной (системной) обработки события. +// Если в теле процедуры-обработчика установить данному параметру значение Ложь, +// стандартная обработка события производиться не будет. +// ИмяРеквизита - Строка - Указывает, в каком реквизите хранится представление на основном языке. +// +Процедура ОбработкаПолученияПолейПредставления(Поля, СтандартнаяОбработка, ИмяРеквизита = "Наименование") Экспорт + + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + + Если МультиязычностьСервер.ЭтоОсновнойЯзык() Тогда + Возврат; + КонецЕсли; + + СтандартнаяОбработка = Ложь; + Поля.Добавить(ИмяРеквизита); + Поля.Добавить("Ссылка"); + + Если МультиязычностьСервер.ИспользуетсяПервыйДополнительныйЯзык() Тогда + Поля.Добавить(ИмяРеквизита + "Язык1"); + КонецЕсли; + + Если МультиязычностьСервер.ИспользуетсяВторойДополнительныйЯзык() Тогда + Поля.Добавить(ИмяРеквизита +"Язык2"); + КонецЕсли; + + #КонецЕсли + +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ЛокализацияКлиентСервер/ЛокализацияКлиентСервер.mdo b/SSL/src/CommonModules/МультиязычностьКлиентСервер/МультиязычностьКлиентСервер.mdo similarity index 74% rename from SSL/src/CommonModules/ЛокализацияКлиентСервер/ЛокализацияКлиентСервер.mdo rename to SSL/src/CommonModules/МультиязычностьКлиентСервер/МультиязычностьКлиентСервер.mdo index c0490a2b3..118f3f446 100644 --- a/SSL/src/CommonModules/ЛокализацияКлиентСервер/ЛокализацияКлиентСервер.mdo +++ b/SSL/src/CommonModules/МультиязычностьКлиентСервер/МультиязычностьКлиентСервер.mdo @@ -1,9 +1,9 @@ - ЛокализацияКлиентСервер + МультиязычностьКлиентСервер ru - Локализация клиент сервер + Мультиязычность клиент сервер true true diff --git a/SSL/src/CommonModules/МультиязычностьПереопределяемый/Module.bsl b/SSL/src/CommonModules/МультиязычностьПереопределяемый/Module.bsl new file mode 100644 index 000000000..cb611e921 --- /dev/null +++ b/SSL/src/CommonModules/МультиязычностьПереопределяемый/Module.bsl @@ -0,0 +1,28 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2019, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ПрограммныйИнтерфейс + +// Задает настройки мультиязычных данных. +// +// Параметры: +// Настройки - Структура - коллекция настроек подсистемы. Реквизиты: +// * КодДополнительногоЯзыка1 - Строка - Код первого дополнительного языка по умолчанию. +// * КодДополнительногоЯзыка2 - Строка - Код второго дополнительного языка по умолчанию. +// * Мультиязычные Данные - Булево - Если Истина, то у реквизитов поддерживающих возможность ввода данных на нескольких +// языках будет автоматически добавлен интерфейс ввода мультиязычных данных. +// +// Пример: +// Настройки.КодДополнительногоЯзыка1 = "en"; +// Настройки.КодДополнительногоЯзыка2 = "it"; +// +Процедура ПриОпределенииНастроек(Настройки) Экспорт + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/МультиязычностьПереопределяемый/МультиязычностьПереопределяемый.mdo b/SSL/src/CommonModules/МультиязычностьПереопределяемый/МультиязычностьПереопределяемый.mdo new file mode 100644 index 000000000..201af00c4 --- /dev/null +++ b/SSL/src/CommonModules/МультиязычностьПереопределяемый/МультиязычностьПереопределяемый.mdo @@ -0,0 +1,11 @@ + + + МультиязычностьПереопределяемый + + ru + Мультиязычность переопределяемый + + true + true + true + diff --git a/SSL/src/CommonModules/МультиязычностьПовтИсп/Module.bsl b/SSL/src/CommonModules/МультиязычностьПовтИсп/Module.bsl new file mode 100644 index 000000000..4942944ba --- /dev/null +++ b/SSL/src/CommonModules/МультиязычностьПовтИсп/Module.bsl @@ -0,0 +1,43 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2019, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область СлужебныеПроцедурыИФункции + +Функция ОпределитьТипФормы(ИмяФормы) Экспорт + + Возврат МультиязычностьСервер.ОпределитьТипФормы(ИмяФормы); + +КонецФункции + +Функция КонфигурацияИспользуетТолькоОдинЯзык(ПредставленияВТабличнойЧасти) Экспорт + + Если Метаданные.Языки.Количество() = 1 Тогда + Возврат Истина; + КонецЕсли; + + Если ПредставленияВТабличнойЧасти Тогда + Возврат Ложь; + КонецЕсли; + + Если МультиязычностьСервер.ИспользуетсяПервыйДополнительныйЯзык() + Или МультиязычностьСервер.ИспользуетсяПервыйДополнительныйЯзык() Тогда + Возврат Ложь; + КонецЕсли; + + Возврат Истина; + +КонецФункции + +Функция ОбъектНеСодержитТЧПредставления(Ссылка) Экспорт + + Возврат Ссылка.Метаданные().ТабличныеЧасти.Найти("Представления") = Неопределено; + +КонецФункции + +#КонецОбласти + diff --git a/SSL/src/CommonModules/МультиязычностьПовтИсп/МультиязычностьПовтИсп.mdo b/SSL/src/CommonModules/МультиязычностьПовтИсп/МультиязычностьПовтИсп.mdo new file mode 100644 index 000000000..7ef9c6844 --- /dev/null +++ b/SSL/src/CommonModules/МультиязычностьПовтИсп/МультиязычностьПовтИсп.mdo @@ -0,0 +1,12 @@ + + + МультиязычностьПовтИсп + + ru + Мультиязычность повт исп + + true + true + true + DuringSession + diff --git a/SSL/src/CommonModules/МультиязычностьСервер/Module.bsl b/SSL/src/CommonModules/МультиязычностьСервер/Module.bsl new file mode 100644 index 000000000..93a7b7585 --- /dev/null +++ b/SSL/src/CommonModules/МультиязычностьСервер/Module.bsl @@ -0,0 +1,717 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2019, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ПрограммныйИнтерфейс + +// Для вызова из обработчика ПриНачальномЗаполненииЭлементов. +// Заполняет колонки с именами ИмяРеквизита_<КодЯзыка> текстовыми значениями для указанных кодов языков. +// +// Параметры: +// Элемент - СтрокаТаблицыЗначений - заполняемая строка таблицы. С колонками ИмяРеквизита_КодЯзыка. +// ИмяРеквизита - Строка - имя реквизита. Например, "Наименование" +// ИсходнаяСтрока - Строка - строка в формате НСтр. Например, "ru = 'Сообщение на русском'; en = 'English message'". +// КодыЯзыков - Массив - коды языков, на которых нужно заполнить строки. +// +// Пример: +// +// МультиязычностьСервер.ЗаполнитьМультиязычныйРеквизит(Элемент, "Наименование", "ru = 'Сообщение на русском'; en = +// 'English message'", КодыЯзыков); +// +Процедура ЗаполнитьМультиязычныйРеквизит(Элемент, ИмяРеквизита, ИсходнаяСтрока, КодыЯзыков = Неопределено) Экспорт + + Для каждого КодЯзыка Из КодыЯзыков Цикл + Элемент[ИмяЛокализуемогоРеквизита(ИмяРеквизита, КодЯзыка)] = НСтр(ИсходнаяСтрока, КодЯзыка); + КонецЦикла; + +КонецПроцедуры + +// Вызывается из обработчика ПриСозданииНаСервере формы объекта для добавления кнопки открытия у поле мультиязычных реквизитов, +// нажатие на которую открывает форму ввода значений реквизита на используемых языках конфигурации. +// +// Параметры: +// Форма - ФормаКлиентскогоПриложения - форма содержащая мультиязычные реквизиты. +// Объект - Произвольный - Объект-владелец мультиязычных реквизитов. +// +Процедура ПриСозданииНаСервере(Форма, Объект = Неопределено) Экспорт + + Если Объект <> Неопределено И МультиязычностьПовтИсп.КонфигурацияИспользуетТолькоОдинЯзык(Объект.Свойство("Представления")) Тогда + Возврат; + КонецЕсли; + + ТипФормы = МультиязычностьПовтИсп.ОпределитьТипФормы(Форма.ИмяФормы); + + Если Объект = Неопределено Тогда + Если ТипФормы = "ОсновнаяФормаСписка" Или ТипФормы = "ОсновнаяФормаВыбора" Тогда + ИзменениеТекстаЗапросаСпискаДляТекущегоЯзыка(Форма); + КонецЕсли; + Возврат; + КонецЕсли; + + СписокРеквизитовФормы = Форма.ПолучитьРеквизиты(); + СоздатьПараметрыМультиязычныхРеквизитов = Истина; + Для Каждого Реквизит Из СписокРеквизитовФормы Цикл + Если Реквизит.Имя = "ПараметрыМультиязычныхРеквизитов" Тогда + СоздатьПараметрыМультиязычныхРеквизитов = Ложь; + КонецЕсли; + КонецЦикла; + + Если СоздатьПараметрыМультиязычныхРеквизитов Тогда + ДобавляемыеРеквизиты = Новый Массив; + ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("ПараметрыМультиязычныхРеквизитов", Новый ОписаниеТипов(),,, Истина)); + Форма.ИзменитьРеквизиты(ДобавляемыеРеквизиты); + КонецЕсли; + + Форма.ПараметрыМультиязычныхРеквизитов = Новый Структура; + + НаименованияРеквизитов = НаименованияЛокализуемыхРеквизитыОбъекта(Объект.Ссылка.Метаданные(), "Объект."); + + Для каждого Элемент Из Форма.Элементы Цикл + + Если ТипЗнч(Элемент) = Тип("ПолеФормы") И НаименованияРеквизитов[Элемент.ПутьКДанным] = Истина Тогда + Элемент.КнопкаОткрытия = Истина; + Элемент.УстановитьДействие("Открытие", "Подключаемый_Открытие"); + Форма.ПараметрыМультиязычныхРеквизитов.Вставить(Элемент.Имя, Элемент.ПутьКДанным); + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +// Вызывается из обработчика ПриЧтениеНаСервере формы объекта для заполнения значений мультиязычных +// реквизитов формы на текущем языке пользователя. +// +// Параметры: +// Форма - ФормаКлиентскогоПриложения - Форма объекта. +// ТекущийОбъект - Произвольный - Объект, который был получен в обработчике формы ПриЧтенииНаСервере. +// +Процедура ПриЧтенииНаСервере(Форма, ТекущийОбъект) Экспорт + + Если ЭтоОсновнойЯзык() Тогда + Возврат; + КонецЕсли; + + ТекущийОбъект.ПриЧтенииПредставленийНаСервере(); + Форма.ЗначениеВРеквизитФормы(ТекущийОбъект, "Объект"); + +КонецПроцедуры + +// Вызывается из обработчика ПередЗаписьюНаСервере формы объекта или при программной записи объекта +// для записи значений мультиязычных реквизитов в соответствии с текущим языком пользователя. +// +// Параметры: +// ТекущийОбъект - Произвольный - Записываемый объект. +// +Процедура ПередЗаписьюНаСервере(ТекущийОбъект) Экспорт + + Если ТекущийЯзык().КодЯзыка = ОбщегоНазначения.КодОсновногоЯзыка() Тогда + Возврат; + КонецЕсли; + + Если МультиязычныеСтрокиВРеквизитах(ТекущийОбъект.Метаданные()) Тогда + + СуффиксТекущегоЯзыка = ""; + + Если СтрСравнить(ОбщегоНазначения.КодОсновногоЯзыка(), ТекущийЯзык().КодЯзыка) <> 0 Тогда + СуффиксТекущегоЯзыка = СуффиксТекущегоЯзыка(); + КонецЕсли; + + ИменаЛокализуемыхРеквизитов = НаименованияЛокализуемыхРеквизитыОбъекта(ТекущийОбъект.Ссылка.Метаданные()); + + Для Каждого Реквизит Из ИменаЛокализуемыхРеквизитов Цикл + + Значение = ТекущийОбъект[Реквизит.Ключ]; + ТекущийОбъект[Реквизит.Ключ] = ТекущийОбъект[Реквизит.Ключ + СуффиксТекущегоЯзыка]; + ТекущийОбъект[Реквизит.Ключ + СуффиксТекущегоЯзыка] = Значение; + + КонецЦикла; + + Возврат; + КонецЕсли; + + Реквизиты = Новый Массив; + Для каждого Реквизит Из ТекущийОбъект.Ссылка.Метаданные().ТабличныеЧасти.Представления.Реквизиты Цикл + Если СтрСравнить(Реквизит.Имя, "КодЯзыка") = 0 Тогда + Продолжить; + КонецЕсли; + + Реквизиты.Добавить(Реквизит.Имя); + КонецЦикла; + + Отбор = Новый Структура(); + Отбор.Вставить("КодЯзыка", ТекущийЯзык().КодЯзыка); + НайденныеСтроки = ТекущийОбъект.Представления.НайтиСтроки(Отбор); + + Если НайденныеСтроки.Количество() > 0 Тогда + Представление = НайденныеСтроки[0]; + Иначе + Представление = ТекущийОбъект.Представления.Добавить(); + Представление.КодЯзыка = ТекущийЯзык().КодЯзыка; + КонецЕсли; + + Для каждого ИмяРеквизита Из Реквизиты Цикл + Представление[ИмяРеквизита] = ТекущийОбъект[ИмяРеквизита]; + КонецЦикла; + + Отбор.КодЯзыка = ОбщегоНазначения.КодОсновногоЯзыка(); + НайденныеСтроки = ТекущийОбъект.Представления.НайтиСтроки(Отбор); + Если НайденныеСтроки.Количество() > 0 Тогда + Для каждого ИмяРеквизита Из Реквизиты Цикл + ТекущийОбъект[ИмяРеквизита] = НайденныеСтроки[0][ИмяРеквизита]; + КонецЦикла; + ТекущийОбъект.Представления.Удалить(НайденныеСтроки[0]); + КонецЕсли; + + ТекущийОбъект.Представления.Свернуть("КодЯзыка", СтрСоединить(Реквизиты, ",")); + +КонецПроцедуры + +// Вызывается из модуля объекта для заполнения значений мультиязычных +// реквизитов объекта на текущем языке пользователя. +// +// Параметры: +// Объект - Произвольный - объект данных. +// +Процедура ПриЧтенииПредставленийНаСервере(Объект) Экспорт + + Если ЭтоОсновнойЯзык() Тогда + Возврат; + КонецЕсли; + + Если МультиязычныеСтрокиВРеквизитах(Объект.Метаданные()) Тогда + + СуффиксТекущегоЯзыка = ""; + + Если СтрСравнить(Константы.ОсновнойЯзык.Получить(), ТекущийЯзык().КодЯзыка) <> 0 Тогда + СуффиксТекущегоЯзыка = СуффиксТекущегоЯзыка(); + + КонецЕсли; + + ИменаЛокализуемыхРеквизитов = НаименованияЛокализуемыхРеквизитыОбъекта(Объект.Ссылка.Метаданные()); + + Для Каждого Реквизит Из ИменаЛокализуемыхРеквизитов Цикл + + Значение = Объект[Реквизит.Ключ]; + Объект[Реквизит.Ключ] = Объект[Реквизит.Ключ + СуффиксТекущегоЯзыка]; + Объект[Реквизит.Ключ + СуффиксТекущегоЯзыка] = Значение; + + Если ПустаяСтрока(Объект[Реквизит.Ключ]) Тогда + Объект[Реквизит.Ключ] = Значение; + КонецЕсли; + + КонецЦикла; + + Возврат; + + КонецЕсли; + + Для каждого Реквизит Из Объект.Метаданные().ТабличныеЧасти.Представления.Реквизиты Цикл + + Если СтрСравнить(Реквизит.Имя, "КодЯзыка") = 0 Тогда + Продолжить; + КонецЕсли; + + ИмяРеквизита = Реквизит.Имя; + + Отбор = Новый Структура(); + Отбор.Вставить("КодЯзыка", ОбщегоНазначения.КодОсновногоЯзыка()); + НайденныеСтроки = Объект.Представления.НайтиСтроки(Отбор); + + Если НайденныеСтроки.Количество() > 0 Тогда + Представление = НайденныеСтроки[0]; + Иначе + Представление = Объект.Представления.Добавить(); + Представление.КодЯзыка = ОбщегоНазначения.КодОсновногоЯзыка(); + КонецЕсли; + Представление[ИмяРеквизита] = Объект[ИмяРеквизита]; + + Отбор = Новый Структура(); + Отбор.Вставить("КодЯзыка", ТекущийЯзык().КодЯзыка); + НайденныеСтроки = Объект.Представления.НайтиСтроки(Отбор); + + Если НайденныеСтроки.Количество() > 0 И ЗначениеЗаполнено(НайденныеСтроки[0][ИмяРеквизита]) Тогда + Объект[ИмяРеквизита] = НайденныеСтроки[0][ИмяРеквизита]; + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +// Вызывается из обработчика ОбработкаПолученияДанныхВыбора для формирования списка при вводе по строке, +// автоподборе текста и быстром выбора, а также при выполнении метода ПолучитьДанныеВыбора. +// Список содержит варианты на всех языках с учетом реквизитов определенных в свойстве ВводПоСтроке. +// +// Параметры: +// ДанныеВыбора - СписокЗначений - данные для выбора. +// Параметры - Структура - содержит параметры выбора. +// СтандартнаяОбработка - Булево - данный параметр передается признак выполнения стандартной (системной) обработки события. +// ОбъектМетаданных - ОбъектМетаданных - объект метаданных, для которого формируется список выбора. +// +Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Знач Параметры, СтандартнаяОбработка, ОбъектМетаданных) Экспорт + + Если МультиязычностьПовтИсп.КонфигурацияИспользуетТолькоОдинЯзык(ОбъектМетаданных.ТабличныеЧасти.Найти("Представления") = Неопределено) Тогда + Возврат; + КонецЕсли; + + СтандартнаяОбработка = Ложь; + + ПоляВводаПоСтроке = ОбъектМетаданных.ВводПоСтроке; + Поля = Новый Массив; + + НаименованияЛокализуемыхРеквизитов = НаименованияЛокализуемыхРеквизитыОбъекта(ОбъектМетаданных); + Для каждого Поле Из ПоляВводаПоСтроке Цикл + Если НаименованияЛокализуемыхРеквизитов.Получить(Поле.Имя) = Истина Тогда + + Поля.Добавить("Таблица." + Поле.Имя + " ПОДОБНО &СтрокаПоиска"); + + Если ИспользуетсяПервыйДополнительныйЯзык() Тогда + Поля.Добавить("Таблица." + Поле.Имя + "Язык1 ПОДОБНО &СтрокаПоиска"); + КонецЕсли; + + Если ИспользуетсяВторойДополнительныйЯзык() Тогда + Поля.Добавить("Таблица." + Поле.Имя + "Язык2 ПОДОБНО &СтрокаПоиска"); + КонецЕсли; + + Иначе + Поля.Добавить("Таблица." + Поле.Имя + " ПОДОБНО &СтрокаПоиска"); + КонецЕсли; + КонецЦикла; + + ШаблонЗапроса = "ВЫБРАТЬ ПЕРВЫЕ 20 + | Таблица.Ссылка КАК Ссылка + |ИЗ + | &ИмяОбъекта КАК Таблица + |ГДЕ + | &УсловияОтбора"; + + ТекстЗапроса = СтрЗаменить(ШаблонЗапроса, "&ИмяОбъекта", ОбъектМетаданных.ПолноеИмя()); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&УсловияОтбора", СтрСоединить(Поля, " ИЛИ ")); + + Запрос = Новый Запрос(ТекстЗапроса); + + Запрос.УстановитьПараметр("СтрокаПоиска", "%" + Параметры.СтрокаПоиска +"%"); + + РезультатЗапроса = Запрос.Выполнить().Выбрать(); + + ДанныеВыбора = Новый СписокЗначений; + Пока РезультатЗапроса.Следующий() Цикл + ДанныеВыбора.Добавить(РезультатЗапроса.Ссылка, РезультатЗапроса.Ссылка); + КонецЦикла; + +КонецПроцедуры + +// Добавляет отложенный обработчик обновления, который обновляет значения у мультиязычных реквизитов объекта. +// Следует вызывать, если в процедурах ПриНачальномЗаполненииЭлементов у объектов были изменено содержимое +// строк заполнения этих реквизитов. Если пользователь интерактивно изменял значения этих реквизитов, +// то эти изменения будут утеряны. +// +// Параметры: +// Версия - Строка - см. ОбновлениеИнформационнойБазыБСП.ПриДобавленииОбработчиковОбновления. +// Обработчики - ТаблицаЗначений - см. ОбновлениеИнформационнойБазыБСП.ПриДобавленииОбработчиковОбновления. +// +// Возвращаемое значение: +// СтрокаТаблицыЗначений - см. ОбновлениеИнформационнойБазыБСП.ПриДобавленииОбработчиковОбновления. +// +// Пример: +// Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт +// МультиязычностьСервер.ДобавитьОбработчикОбновленияПредставленийПредопределенныхЭлементов("3.1.2.73", Обработчики); +// КонецПроцедуры +// +Функция ДобавитьОбработчикОбновленияПредставленийПредопределенныхЭлементов(Версия, Обработчики) Экспорт + + ОбъектыСПредопределеннымиЭлементами = ОбъектыСПредопределеннымиЭлементамиСтрокой(); + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = Версия; + Обработчик.Идентификатор = Новый УникальныйИдентификатор("d57859ca-1543-4c60-8427-5c2a41832831"); + Обработчик.Процедура = "МультиязычностьСервер.ОбновитьПредставленияПредопределенныхЭлементов"; + Обработчик.Комментарий = НСтр("ru = 'Обновление наименований предопределенных элементов. + |До завершения обработки наименования этих элементов в ряде случаев будет отображаться некорректно.'"); + Обработчик.РежимВыполнения = "Отложенно"; + Обработчик.ОчередьОтложеннойОбработки = 2; + Обработчик.ПроцедураЗаполненияДанныхОбновления = "МультиязычностьСервер.ЗарегистрироватьПредопределенныеЭлементыДляОбновления"; + Обработчик.ЧитаемыеОбъекты = ОбъектыСПредопределеннымиЭлементами; + Обработчик.ИзменяемыеОбъекты = ОбъектыСПредопределеннымиЭлементами; + Обработчик.ПроцедураПроверки = "ОбновлениеИнформационнойБазы.ДанныеОбновленыНаНовуюВерсиюПрограммы"; + Обработчик.БлокируемыеОбъекты = ОбъектыСПредопределеннымиЭлементами; + Обработчик.ПриоритетыВыполнения = ОбновлениеИнформационнойБазы.ПриоритетыВыполненияОбработчика(); + Приоритет = Обработчик.ПриоритетыВыполнения.Добавить(); + Приоритет.Процедура = "Справочники.СтраныМира.ОбновитьСтраныМираПоОКСМ"; + Приоритет.Порядок = "Любой"; + + Возврат Обработчик; + +КонецФункции + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +Процедура ИзменениеТекстаЗапросаСпискаДляТекущегоЯзыка(ЭтотОбъект, ИмяСписка = "Список") Экспорт + + СуффиксЯзыка = СуффиксТекущегоЯзыка(); + + Если ПустаяСтрока(СуффиксЯзыка) Тогда + Возврат; + КонецЕсли; + + Список = ЭтотОбъект[ИмяСписка]; + Если ПустаяСтрока(Список.ТекстЗапроса) Тогда + Возврат; + КонецЕсли; + + ДобавляемыеРеквизиты = Новый Массив; + НаборЧастейПутиОбъектаМетаданных = СтрРазделить(ЭтотОбъект.ИмяФормы, "."); + ИмяОбъектаМетаданных = НаборЧастейПутиОбъектаМетаданных[0] + "." + НаборЧастейПутиОбъектаМетаданных[1]; + ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ИмяОбъектаМетаданных); + + ЛокализуемыеРеквизиты = ЛокализуемыеРеквизитыОбъектаДляТекущегоЯзыка(ОбъектМетаданных); + РеквизитыДляДобавления = Новый Массив; + + ШаблонВыбора = "ВЫБОР + |КОГДА ЕСТЬNULL(Подстрока(%1.%2, 1, 1),"" "") <> "" "" ТОГДА %1.%2 + |ИНАЧЕ %1.%3 + |КОНЕЦ"; + + МодельЗапроса = Новый СхемаЗапроса; + МодельЗапроса.УстановитьТекстЗапроса(Список.ТекстЗапроса); + + Для Каждого ПакетЗапроса Из МодельЗапроса.ПакетЗапросов Цикл + Для Каждого ОператорЗапроса Из ПакетЗапроса.Операторы Цикл + Для Каждого ИсточникЗапроса Из ОператорЗапроса.Источники Цикл + Если СтрСравнить(ИсточникЗапроса.Источник.ИмяТаблицы, ИмяОбъектаМетаданных) = 0 Тогда + + Для каждого ОписаниеРеквизита Из ЛокализуемыеРеквизиты Цикл + + ИмяОсновногоРеквизита = Лев(ОписаниеРеквизита.Ключ, СтрДлина(ОписаниеРеквизита.Ключ) - 5); + ПолноеИмя = ИсточникЗапроса.Источник.Псевдоним + "."+ ИмяОсновногоРеквизита; + + Для Индекс = 0 По ОператорЗапроса.ВыбираемыеПоля.Количество() - 1 Цикл + + ВыбираемоеПоле = ОператорЗапроса.ВыбираемыеПоля.Получить(Индекс); + Псевдоним = ПакетЗапроса.Колонки[Индекс].Псевдоним + СуффиксЯзыка; + Позиция = СтрНайти(ВыбираемоеПоле, ПолноеИмя); + + Если Позиция = 0 Тогда + Продолжить; + КонецЕсли; + + ТекстВыбораПоля = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонВыбора, + ИсточникЗапроса.Источник.Псевдоним, ОписаниеРеквизита.Ключ, ИмяОсновногоРеквизита); + + Если СтрСравнить(ВыбираемоеПоле, ПолноеИмя) = 0 Тогда + + ВыбираемоеПоле = СтрЗаменить(ВыбираемоеПоле, ПолноеИмя, ТекстВыбораПоля); + + Иначе + + ВыбираемоеПоле = СтрЗаменить(ВыбираемоеПоле, ПолноеИмя + Символы.ПС, + ТекстВыбораПоля + Символы.ПС); + ВыбираемоеПоле = СтрЗаменить(ВыбираемоеПоле, ПолноеИмя + " ", + ТекстВыбораПоля + " " ); + ВыбираемоеПоле = СтрЗаменить(ВыбираемоеПоле, ПолноеИмя + ")", + ТекстВыбораПоля + ")" ); + + КонецЕсли; + + ОператорЗапроса.ВыбираемыеПоля.Установить(Индекс, Новый ВыражениеСхемыЗапроса(ВыбираемоеПоле)); + КонецЦикла; + + КонецЦикла; + + КонецЕсли; + КонецЦикла; + КонецЦикла; + КонецЦикла; + + Список.ТекстЗапроса = МодельЗапроса.ПолучитьТекстЗапроса(); + +КонецПроцедуры + +Функция СуффиксТекущегоЯзыка() Экспорт + + Возврат СуффиксЯзыка(ТекущийЯзык().КодЯзыка); + +КонецФункции + +Функция ИмяЛокализуемогоРеквизита(ИмяРеквизита, КодЯзыка) Экспорт + + Возврат ИмяРеквизита + "_" + КодЯзыка; + +КонецФункции + +// Возвращает метаданные по коду языка конфигурации. +// +// Параметры: +// КодЯзыка - Строка - код языка, например "en" (как задано в свойстве КодЯзыка метаданных ОбъектМетаданных: Язык). +// +// Возвращаемое значение: +// ОбъектМетаданных: Язык - если найден по переданному коду языка, иначе Неопределено. +// +Функция ЯзыкПоКоду(Знач КодЯзыка) Экспорт + Для каждого Язык Из Метаданные.Языки Цикл + Если Язык.КодЯзыка = КодЯзыка Тогда + Возврат Язык; + КонецЕсли; + КонецЦикла; + Возврат Неопределено; +КонецФункции + +Процедура ЗарегистрироватьПредопределенныеЭлементыДляОбновления(Параметры) Экспорт + СтандартныеПодсистемыСервер.ЗарегистрироватьПредопределенныеЭлементыДляОбновления(Параметры); +КонецПроцедуры + +Процедура ОбновитьПредставленияПредопределенныхЭлементов(Параметры) Экспорт + СтандартныеПодсистемыСервер.ОбновитьПредставленияПредопределенныхЭлементов(Параметры); +КонецПроцедуры + +Функция ИспользуетсяПервыйДополнительныйЯзык() Экспорт + + Возврат Константы.ИспользоватьДополнительныйЯзык1.Получить() = Истина; + +КонецФункции + +Функция ИспользуетсяВторойДополнительныйЯзык() Экспорт + + Возврат Константы.ИспользоватьДополнительныйЯзык2.Получить() = Истина; + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +// Код основного языка информационной базы +// +// Возвращаемое значение: +// Строка - код языка. Например, "ru". +// +Функция КодЯзыкаИнформационнойБазы() + + Если ЗначениеЗаполнено(Константы.ОсновнойЯзык.Получить()) Тогда + Возврат Константы.ОсновнойЯзык.Получить(); + КонецЕсли; + + Возврат Метаданные.ОсновнойЯзык.КодЯзыка; + +КонецФункции + +Функция ОпределитьТипФормы(ИмяФормы) Экспорт + + Результат = ""; + + ЧастиИмениФормы = СтрРазделить(ВРег(ИмяФормы), "."); + ОсновнаяФормаСписка = ОсновнаяФормаСписка(ЧастиИмениФормы); + ОсновнаяФормаВыбора = ОсновнаяФормаДляВыбора(ЧастиИмениФормы); + + НайденнаяФорма = Метаданные.НайтиПоПолномуИмени(ИмяФормы); + + Если ОсновнаяФормаСписка = НайденнаяФорма Тогда + Результат = "ОсновнаяФормаСписка"; + ИначеЕсли ОсновнаяФормаВыбора = НайденнаяФорма Тогда + Результат = "ОсновнаяФормаВыбора"; + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// См. ОбщегоНазначенияПереопределяемый.ПриДобавленииОбработчиковУстановкиПараметровСеанса. +Процедура УстановкаПараметровСеанса(Знач ИменаПараметровСеанса, УстановленныеПараметры) Экспорт + + Если ИменаПараметровСеанса = Неопределено + Или ИменаПараметровСеанса.Найти("ОсновнойЯзык") <> Неопределено Тогда + + ПараметрыСеанса.ОсновнойЯзык = КодЯзыкаИнформационнойБазы(); + УстановленныеПараметры.Добавить("ОсновнойЯзык"); + КонецЕсли; + +КонецПроцедуры + +Функция МультиязычныеСтрокиВРеквизитах(ОбъектМетаданных) Экспорт + Возврат ОбъектМетаданных.ТабличныеЧасти.Найти("Представления") = Неопределено; +КонецФункции + +Функция КодПервогоДополнительногоЯзыкаИнформационнойБазы() Экспорт + + Если Не ИспользуетсяПервыйДополнительныйЯзык() Тогда + Возврат ""; + КонецЕсли; + + Возврат Константы.ДополнительныйЯзык1.Получить(); + +КонецФункции + +Функция КодВторогоДополнительногоЯзыкаИнформационнойБазы() Экспорт + + Если Не ИспользуетсяВторойДополнительныйЯзык() Тогда + Возврат ""; + КонецЕсли; + + Возврат Константы.ДополнительныйЯзык2.Получить(); + +КонецФункции + +Функция ЛокализуемыеРеквизитыОбъектаДляТекущегоЯзыка(ОбъектМетаданных, Язык = Неопределено) + + СписокРеквизитов = Новый Соответствие; + + ПрефиксЯзыка = СуффиксТекущегоЯзыка(); + + СписокРеквизитовОбъекта = Новый Соответствие; + + Для Каждого Реквизит Из ОбъектМетаданных.Реквизиты Цикл + СписокРеквизитовОбъекта.Вставить(Реквизит.Имя, Реквизит); + КонецЦикла; + + Для Каждого Реквизит Из ОбъектМетаданных.СтандартныеРеквизиты Цикл + СписокРеквизитовОбъекта.Вставить(Реквизит.Имя, Реквизит); + КонецЦикла; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 0 + | * + |ИЗ + | " + ОбъектМетаданных.ПолноеИмя(); + + РезультатЗапроса = Запрос.Выполнить(); + + СписокРеквизитов = Новый Соответствие; + Для каждого Колонка Из РезультатЗапроса.Колонки Цикл + Если СтрЗаканчиваетсяНа(Колонка.Имя, ПрефиксЯзыка) Тогда + Реквизит = СписокРеквизитовОбъекта.Получить(Колонка.Имя); + Если Реквизит = Неопределено Тогда + Реквизит = Метаданные.ОбщиеРеквизиты.Найти(Колонка.Имя); + КонецЕсли; + СписокРеквизитов.Вставить(Колонка.Имя, Реквизит); + + КонецЕсли; + КонецЦикла; + + Возврат СписокРеквизитов; + +КонецФункции + +Функция НаименованияЛокализуемыхРеквизитыОбъекта(ОбъектМетаданных, Префикс = "") Экспорт + + СписокРеквизитовОбъекта = Новый Соответствие; + Если МультиязычныеСтрокиВРеквизитах(ОбъектМетаданных) Тогда + + ДлинаСуффиксаЯзыка = СтрДлина("Язык1"); + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 0 + | * + |ИЗ + | " + ОбъектМетаданных.ПолноеИмя(); + + РезультатЗапроса = Запрос.Выполнить(); + + СписокРеквизитов = Новый Соответствие; + Для каждого Колонка Из РезультатЗапроса.Колонки Цикл + Если СтрЗаканчиваетсяНа(Колонка.Имя, "Язык1") Или СтрЗаканчиваетсяНа(Колонка.Имя, "Язык2") Тогда + СписокРеквизитовОбъекта.Вставить(Префикс + Лев(Колонка.Имя, СтрДлина(Колонка.Имя) - ДлинаСуффиксаЯзыка), Истина); + КонецЕсли; + КонецЦикла; + Иначе + + Для каждого Реквизит Из ОбъектМетаданных.ТабличныеЧасти.Представления.Реквизиты Цикл + Если СтрСравнить(Реквизит.Имя, "КодЯзыка") = 0 Тогда + Продолжить; + КонецЕсли; + СписокРеквизитовОбъекта.Вставить(Префикс + Реквизит.Имя, Истина); + КонецЦикла; + + КонецЕсли; + + Возврат СписокРеквизитовОбъекта; + +КонецФункции + +Функция ОсновнаяФормаСписка(ЧастиИмениФормы) + + Если ЧастиИмениФормы[0]= "СПРАВОЧНИК" + Или ЧастиИмениФормы[0] = "ДОКУМЕНТ" + Или ЧастиИмениФормы[0] = "ПЕРЕЧИСЛЕНИЕ" + Или ЧастиИмениФормы[0] = "ПЛАНВИДОВХАРАКТЕРИСТИК" + Или ЧастиИмениФормы[0] = "ПЛАНСЧЕТОВ" + Или ЧастиИмениФормы[0] = "ПЛАНВИДОВРАСЧЕТА" + Или ЧастиИмениФормы[0] = "БИЗНЕСПРОЦЕСС" + Или ЧастиИмениФормы[0] = "ЗАДАЧА" + Или ЧастиИмениФормы[0] = "ЗАДАЧА" + Или ЧастиИмениФормы[0] = "РЕГИСТРЫБУХГАЛТЕРИИ" + Или ЧастиИмениФормы[0] = "РЕГИСТРЫНАКОПЛЕНИЯ" + Или ЧастиИмениФормы[0] = "РЕГИСТРЫРАСЧЕТА" + Или ЧастиИмениФормы[0] = "РЕГИСТРЫСВЕДЕНИЙ" + Или ЧастиИмениФормы[0] = "ПЛАНОБМЕНА" Тогда + Возврат Метаданные.НайтиПоПолномуИмени(ЧастиИмениФормы[0] + "." + ЧастиИмениФормы[1]).ОсновнаяФормаСписка; + КонецЕсли; + + Возврат Неопределено; + +КонецФункции + +Функция ОсновнаяФормаДляВыбора(ЧастиИмениФормы) + + Если ЧастиИмениФормы[0]= "СПРАВОЧНИК" + Или ЧастиИмениФормы[0] = "ДОКУМЕНТ" + Или ЧастиИмениФормы[0] = "ПЕРЕЧИСЛЕНИЕ" + Или ЧастиИмениФормы[0] = "ПЛАНВИДОВХАРАКТЕРИСТИК" + Или ЧастиИмениФормы[0] = "ПЛАНСЧЕТОВ" + Или ЧастиИмениФормы[0] = "БИЗНЕСПРОЦЕСС" + Или ЧастиИмениФормы[0] = "ЗАДАЧА" + Или ЧастиИмениФормы[0] = "ЗАДАЧА" + Или ЧастиИмениФормы[0] = "ПЛАНОБМЕНА" Тогда + Возврат Метаданные.НайтиПоПолномуИмени(ЧастиИмениФормы[0] + "." + ЧастиИмениФормы[1]).ОсновнаяФормаДляВыбора; + КонецЕсли; + + Возврат Неопределено; + +КонецФункции + +Процедура ПерезаполнитьМультиязычныеСтрокиВОбъектах(Параметры, Адрес) Экспорт + СтандартныеПодсистемыСервер.ЗаполнитьЭлементыНачальнымиДанными(Истина); +КонецПроцедуры + +Функция ЭтоОсновнойЯзык() Экспорт + + Возврат СтрСравнить(ОбщегоНазначения.КодОсновногоЯзыка(), ТекущийЯзык().КодЯзыка) = 0; + +КонецФункции + +// По коду языка возвращает суффикс "Язык1" или "Язык2". +// +Функция СуффиксЯзыка(Язык) + + Если Язык = Константы.ДополнительныйЯзык1.Получить() Тогда + Возврат "Язык1"; + КонецЕсли; + + Если Язык = Константы.ДополнительныйЯзык2.Получить() Тогда + Возврат "Язык2"; + КонецЕсли; + + Возврат ""; + +КонецФункции + +Функция ОбъектыСПредопределеннымиЭлементамиСтрокой() + + НастройкиПодсистемы = ОбновлениеИнформационнойБазыСлужебный.НастройкиПодсистемы(); + ОбъектыСНачальнымЗаполнением = НастройкиПодсистемы.ОбъектыСНачальнымЗаполнением; + Список = Новый Массив; + Для каждого ОбъектСПредопределеннымиЭлементами Из ОбъектыСНачальнымЗаполнением Цикл + Список.Добавить(ОбъектСПредопределеннымиЭлементами.ПолноеИмя()); + КонецЦикла; + + Возврат СтрСоединить(Список, ","); + +КонецФункции + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ЛокализацияСервер/ЛокализацияСервер.mdo b/SSL/src/CommonModules/МультиязычностьСервер/МультиязычностьСервер.mdo similarity index 74% rename from SSL/src/CommonModules/ЛокализацияСервер/ЛокализацияСервер.mdo rename to SSL/src/CommonModules/МультиязычностьСервер/МультиязычностьСервер.mdo index 4ef12730c..837387487 100644 --- a/SSL/src/CommonModules/ЛокализацияСервер/ЛокализацияСервер.mdo +++ b/SSL/src/CommonModules/МультиязычностьСервер/МультиязычностьСервер.mdo @@ -1,9 +1,9 @@ - ЛокализацияСервер + МультиязычностьСервер ru - Локализация сервер + Мультиязычность сервер true true diff --git a/SSL/src/CommonModules/НапоминанияПользователя/Module.bsl b/SSL/src/CommonModules/НапоминанияПользователя/Module.bsl index 185750903..2401071d7 100644 --- a/SSL/src/CommonModules/НапоминанияПользователя/Module.bsl +++ b/SSL/src/CommonModules/НапоминанияПользователя/Module.bsl @@ -78,4 +78,16 @@ НапоминанияПользователяСлужебный.ОтключитьНапоминание(Напоминание, Ложь); КонецПроцедуры +// Проверяет изменения реквизитов предметов, на которые есть пользовательская подписка, +// изменяет срок напоминания в случае необходимости. +// +// Параметры: +// Предметы - Массив - предметы, по которым необходимо обновить сроки напоминаний. +// +Процедура ОбновитьНапоминанияПоПредметам(Предметы) Экспорт + + НапоминанияПользователяСлужебный.ОбновитьНапоминанияПоПредметам(Предметы); + +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/CommonModules/НапоминанияПользователяКлиент/Module.bsl b/SSL/src/CommonModules/НапоминанияПользователяКлиент/Module.bsl index 0588609d9..9f9af0909 100644 --- a/SSL/src/CommonModules/НапоминанияПользователяКлиент/Module.bsl +++ b/SSL/src/CommonModules/НапоминанияПользователяКлиент/Module.bsl @@ -194,4 +194,204 @@ Возврат Неопределено; КонецФункции +// Получает из строки интервал времени и возвращает его текстовое представление. +// +// Параметры: +// ВремяСтрокой - Строка - текстовое описание времени, где числа записаны цифрами, +// а единицы измерения - строкой. +// +// Возвращаемое значение +// Строка - оформленное представление времени. +Функция ОформитьВремя(ВремяСтрокой) Экспорт + Возврат ПредставлениеВремени(ПолучитьИнтервалВремениИзСтроки(ВремяСтрокой)); +КонецФункции + +// Возвращает текстовое представление интервала времени, заданного в секундах. +// +// Параметры: +// +// Время - Число - интервал времени в секундах. +// +// ПолноеПредставление - Булево - кратное или полное представление времени. +// Например, интервал 1 000 000 секунд: +// - полное представление: 11 дней 13 часов 46 минут 40 секунд; +// - краткое представление: 11 дней 13 часов. +// +// Возвращаемое значение: +// Строка - представление интервала времени. +// +Функция ПредставлениеВремени(Знач Время, ПолноеПредставление = Истина, ВыводитьСекунды = Истина) Экспорт + Результат = ""; + + // Представление единиц измерения времени в винительном падеже для количеств: 1, 2-4, 5-20. + ПредставлениеНедель = НСтр("ru = ';%1 неделю;;%1 недели;%1 недель;%1 недели'"); + ПредставлениеДней = НСтр("ru = ';%1 день;;%1 дня;%1 дней;%1 дня'"); + ПредставлениеЧасов = НСтр("ru = ';%1 час;;%1 часа;%1 часов;%1 часа'"); + ПредставлениеМинут = НСтр("ru = ';%1 минуту;;%1 минуты;%1 минут;%1 минуты'"); + ПредставлениеСекунд = НСтр("ru = ';%1 секунду;;%1 секунды;%1 секунд;%1 секунды'"); + + Время = Число(Время); + + Если Время < 0 Тогда + Время = -Время; + КонецЕсли; + + КоличествоНедель = Цел(Время / 60/60/24/7); + КоличествоДней = Цел(Время / 60/60/24); + КоличествоЧасов = Цел(Время / 60/60); + КоличествоМинут = Цел(Время / 60); + КоличествоСекунд = Цел(Время); + + КоличествоСекунд = КоличествоСекунд - КоличествоМинут * 60; + КоличествоМинут = КоличествоМинут - КоличествоЧасов * 60; + КоличествоЧасов = КоличествоЧасов - КоличествоДней * 24; + КоличествоДней = КоличествоДней - КоличествоНедель * 7; + + Если Не ВыводитьСекунды Тогда + КоличествоСекунд = 0; + КонецЕсли; + + Если КоличествоНедель > 0 И КоличествоДней+КоличествоЧасов+КоличествоМинут+КоличествоСекунд=0 Тогда + Результат = СтроковыеФункцииКлиентСервер.СтрокаСЧисломДляЛюбогоЯзыка(ПредставлениеНедель, КоличествоНедель); + Иначе + КоличествоДней = КоличествоДней + КоличествоНедель * 7; + + Счетчик = 0; + Если КоличествоДней > 0 Тогда + Результат = Результат + СтроковыеФункцииКлиентСервер.СтрокаСЧисломДляЛюбогоЯзыка(ПредставлениеДней, КоличествоДней) + " "; + Счетчик = Счетчик + 1; + КонецЕсли; + + Если КоличествоЧасов > 0 Тогда + Результат = Результат + СтроковыеФункцииКлиентСервер.СтрокаСЧисломДляЛюбогоЯзыка(ПредставлениеЧасов, КоличествоЧасов) + " "; + Счетчик = Счетчик + 1; + КонецЕсли; + + Если (ПолноеПредставление Или Счетчик < 2) И КоличествоМинут > 0 Тогда + Результат = Результат + СтроковыеФункцииКлиентСервер.СтрокаСЧисломДляЛюбогоЯзыка(ПредставлениеМинут, КоличествоМинут) + " "; + Счетчик = Счетчик + 1; + КонецЕсли; + + Если (ПолноеПредставление Или Счетчик < 2) И (КоличествоСекунд > 0 Или КоличествоНедель+КоличествоДней+КоличествоЧасов+КоличествоМинут = 0) Тогда + Результат = Результат + СтроковыеФункцииКлиентСервер.СтрокаСЧисломДляЛюбогоЯзыка(ПредставлениеСекунд, КоличествоСекунд); + КонецЕсли; + + КонецЕсли; + + Возврат СокрП(Результат); + +КонецФункции + +// Получает из текстового описания интервал времени в секундах. +// +// Параметры: +// СтрокаСоВременем - Строка - текстовое описание времени, где числа записаны цифрами, +// а единицы измерения - строкой. +// +// Возвращаемое значение +// Число - интервал времени в секундах. +Функция ПолучитьИнтервалВремениИзСтроки(Знач СтрокаСоВременем) Экспорт + + Если ПустаяСтрока(СтрокаСоВременем) Тогда + Возврат 0; + КонецЕсли; + + СтрокаСоВременем = НРег(СтрокаСоВременем); + СтрокаСоВременем = СтрЗаменить(СтрокаСоВременем, Символы.НПП," "); + СтрокаСоВременем = СтрЗаменить(СтрокаСоВременем, ".",","); + СтрокаСоВременем = СтрЗаменить(СтрокаСоВременем, "+",""); + + ПодстрокаСЦифрами = ""; + ПодстрокаСБуквами = ""; + + ПредыдущийСимволЭтоЦифра = Ложь; + ЕстьДробнаяЧасть = Ложь; + + Результат = 0; + Для Позиция = 1 По СтрДлина(СтрокаСоВременем) Цикл + ТекущийКодСимвола = КодСимвола(СтрокаСоВременем,Позиция); + Символ = Сред(СтрокаСоВременем,Позиция,1); + Если (ТекущийКодСимвола >= КодСимвола("0") И ТекущийКодСимвола <= КодСимвола("9")) + ИЛИ (Символ="," И ПредыдущийСимволЭтоЦифра И Не ЕстьДробнаяЧасть) Тогда + Если Не ПустаяСтрока(ПодстрокаСБуквами) Тогда + ПодстрокаСЦифрами = СтрЗаменить(ПодстрокаСЦифрами,",","."); + Результат = Результат + ?(ПустаяСтрока(ПодстрокаСЦифрами), 1, Число(ПодстрокаСЦифрами)) + * ЗаменитьЕдиницуИзмеренияНаМножитель(ПодстрокаСБуквами); + + ПодстрокаСЦифрами = ""; + ПодстрокаСБуквами = ""; + + ПредыдущийСимволЭтоЦифра = Ложь; + ЕстьДробнаяЧасть = Ложь; + КонецЕсли; + + ПодстрокаСЦифрами = ПодстрокаСЦифрами + Сред(СтрокаСоВременем,Позиция,1); + + ПредыдущийСимволЭтоЦифра = Истина; + Если Символ = "," Тогда + ЕстьДробнаяЧасть = Истина; + КонецЕсли; + Иначе + Если Символ = " " И ЗаменитьЕдиницуИзмеренияНаМножитель(ПодстрокаСБуквами) = "0" Тогда + ПодстрокаСБуквами = ""; + КонецЕсли; + + ПодстрокаСБуквами = ПодстрокаСБуквами + Сред(СтрокаСоВременем,Позиция,1); + ПредыдущийСимволЭтоЦифра = Ложь; + КонецЕсли; + КонецЦикла; + + Если Не ПустаяСтрока(ПодстрокаСБуквами) Тогда + ПодстрокаСЦифрами = СтрЗаменить(ПодстрокаСЦифрами,",","."); + Результат = Результат + ?(ПустаяСтрока(ПодстрокаСЦифрами), 1, Число(ПодстрокаСЦифрами)) + * ЗаменитьЕдиницуИзмеренияНаМножитель(ПодстрокаСБуквами); + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Анализирует слово на предмет соответствия единице времени и, если соответствие установлено, +// возвращает количество секунд, содержащееся в единице времени. +// +// Параметры: +// Единица - Строка - анализируемое слово. +// +// Возвращаемое значение +// Число - количество секунд в Единице. Если единица не определена или пустая, то возвращается 0. +// +Функция ЗаменитьЕдиницуИзмеренияНаМножитель(Знач Единица) + + Результат = 0; + Единица = НРег(Единица); + + ДопустимыеСимволы = НСтр("ru = 'абвгдеёжзийклмнопрстуфхцчшщъыьэюя'"); // АПК:163; АПК:1036 (см. 456:1.1) символы, которые может вводить пользователь. + ПосторонниеСимволы = СтрСоединить(СтрРазделить(Единица, ДопустимыеСимволы, Ложь), ""); + Если ПосторонниеСимволы <> "" Тогда + Единица = СтрСоединить(СтрРазделить(Единица, ПосторонниеСимволы, Ложь), ""); + КонецЕсли; + + СловоформыНедели = СтрРазделить(НСтр("ru = 'нед,н'"), ",", Ложь); + СловоформыДня = СтрРазделить(НСтр("ru = 'ден,дне,дня,дн,д'"), ",", Ложь); + СловоформыЧаса = СтрРазделить(НСтр("ru = 'час,ч'"), ",", Ложь); + СловоформыМинуты = СтрРазделить(НСтр("ru = 'мин,м'"), ",", Ложь); + СловоформыСекунды = СтрРазделить(НСтр("ru = 'сек,с'"), ",", Ложь); + + ПервыеТриСимвола = Лев(Единица,3); + Если СловоформыНедели.Найти(ПервыеТриСимвола) <> Неопределено Тогда + Результат = 60*60*24*7; + ИначеЕсли СловоформыДня.Найти(ПервыеТриСимвола) <> Неопределено Тогда + Результат = 60*60*24; + ИначеЕсли СловоформыЧаса.Найти(ПервыеТриСимвола) <> Неопределено Тогда + Результат = 60*60; + ИначеЕсли СловоформыМинуты.Найти(ПервыеТриСимвола) <> Неопределено Тогда + Результат = 60; + ИначеЕсли СловоформыСекунды.Найти(ПервыеТриСимвола) <> Неопределено Тогда + Результат = 1; + КонецЕсли; + + Возврат Формат(Результат,"ЧН=0; ЧГ=0"); + +КонецФункции + #КонецОбласти diff --git a/SSL/src/CommonModules/НапоминанияПользователяКлиентСервер/Module.bsl b/SSL/src/CommonModules/НапоминанияПользователяКлиентСервер/Module.bsl index 3bbe8a849..5b31c9ae4 100644 --- a/SSL/src/CommonModules/НапоминанияПользователяКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/НапоминанияПользователяКлиентСервер/Module.bsl @@ -35,206 +35,6 @@ #Область СлужебныеПроцедурыИФункции -// Возвращает текстовое представление интервала времени, заданного в секундах. -// -// Параметры: -// -// Время - Число - интервал времени в секундах. -// -// ПолноеПредставление - Булево - кратное или полное представление времени. -// Например, интервал 1 000 000 секунд: -// - полное представление: 11 дней 13 часов 46 минут 40 секунд; -// - краткое представление: 11 дней 13 часов. -// -// Возвращаемое значение: -// Строка - представление интервала времени. -// -Функция ПредставлениеВремени(Знач Время, ПолноеПредставление = Истина, ВыводитьСекунды = Истина) Экспорт - Результат = ""; - - // Представление единиц измерения времени в винительном падеже для количеств: 1, 2-4, 5-20. - ПредставлениеНедель = НСтр("ru = ';%1 неделю;;%1 недели;%1 недель;%1 недели'"); - ПредставлениеДней = НСтр("ru = ';%1 день;;%1 дня;%1 дней;%1 дня'"); - ПредставлениеЧасов = НСтр("ru = ';%1 час;;%1 часа;%1 часов;%1 часа'"); - ПредставлениеМинут = НСтр("ru = ';%1 минуту;;%1 минуты;%1 минут;%1 минуты'"); - ПредставлениеСекунд = НСтр("ru = ';%1 секунду;;%1 секунды;%1 секунд;%1 секунды'"); - - Время = Число(Время); - - Если Время < 0 Тогда - Время = -Время; - КонецЕсли; - - КоличествоНедель = Цел(Время / 60/60/24/7); - КоличествоДней = Цел(Время / 60/60/24); - КоличествоЧасов = Цел(Время / 60/60); - КоличествоМинут = Цел(Время / 60); - КоличествоСекунд = Цел(Время); - - КоличествоСекунд = КоличествоСекунд - КоличествоМинут * 60; - КоличествоМинут = КоличествоМинут - КоличествоЧасов * 60; - КоличествоЧасов = КоличествоЧасов - КоличествоДней * 24; - КоличествоДней = КоличествоДней - КоличествоНедель * 7; - - Если Не ВыводитьСекунды Тогда - КоличествоСекунд = 0; - КонецЕсли; - - Если КоличествоНедель > 0 И КоличествоДней+КоличествоЧасов+КоличествоМинут+КоличествоСекунд=0 Тогда - Результат = СтроковыеФункцииКлиентСервер.СтрокаСЧисломДляЛюбогоЯзыка(ПредставлениеНедель, КоличествоНедель); - Иначе - КоличествоДней = КоличествоДней + КоличествоНедель * 7; - - Счетчик = 0; - Если КоличествоДней > 0 Тогда - Результат = Результат + СтроковыеФункцииКлиентСервер.СтрокаСЧисломДляЛюбогоЯзыка(ПредставлениеДней, КоличествоДней) + " "; - Счетчик = Счетчик + 1; - КонецЕсли; - - Если КоличествоЧасов > 0 Тогда - Результат = Результат + СтроковыеФункцииКлиентСервер.СтрокаСЧисломДляЛюбогоЯзыка(ПредставлениеЧасов, КоличествоЧасов) + " "; - Счетчик = Счетчик + 1; - КонецЕсли; - - Если (ПолноеПредставление Или Счетчик < 2) И КоличествоМинут > 0 Тогда - Результат = Результат + СтроковыеФункцииКлиентСервер.СтрокаСЧисломДляЛюбогоЯзыка(ПредставлениеМинут, КоличествоМинут) + " "; - Счетчик = Счетчик + 1; - КонецЕсли; - - Если (ПолноеПредставление Или Счетчик < 2) И (КоличествоСекунд > 0 Или КоличествоНедель+КоличествоДней+КоличествоЧасов+КоличествоМинут = 0) Тогда - Результат = Результат + СтроковыеФункцииКлиентСервер.СтрокаСЧисломДляЛюбогоЯзыка(ПредставлениеСекунд, КоличествоСекунд); - КонецЕсли; - - КонецЕсли; - - Возврат СокрП(Результат); - -КонецФункции - -// Получает из текстового описания интервал времени в секундах. -// -// Параметры: -// СтрокаСоВременем - Строка - текстовое описание времени, где числа записаны цифрами, -// а единицы измерения - строкой. -// -// Возвращаемое значение -// Число - интервал времени в секундах. -Функция ПолучитьИнтервалВремениИзСтроки(Знач СтрокаСоВременем) Экспорт - - Если ПустаяСтрока(СтрокаСоВременем) Тогда - Возврат 0; - КонецЕсли; - - СтрокаСоВременем = НРег(СтрокаСоВременем); - СтрокаСоВременем = СтрЗаменить(СтрокаСоВременем, Символы.НПП," "); - СтрокаСоВременем = СтрЗаменить(СтрокаСоВременем, ".",","); - СтрокаСоВременем = СтрЗаменить(СтрокаСоВременем, "+",""); - - ПодстрокаСЦифрами = ""; - ПодстрокаСБуквами = ""; - - ПредыдущийСимволЭтоЦифра = Ложь; - ЕстьДробнаяЧасть = Ложь; - - Результат = 0; - Для Позиция = 1 По СтрДлина(СтрокаСоВременем) Цикл - ТекущийКодСимвола = КодСимвола(СтрокаСоВременем,Позиция); - Символ = Сред(СтрокаСоВременем,Позиция,1); - Если (ТекущийКодСимвола >= КодСимвола("0") И ТекущийКодСимвола <= КодСимвола("9")) - ИЛИ (Символ="," И ПредыдущийСимволЭтоЦифра И Не ЕстьДробнаяЧасть) Тогда - Если Не ПустаяСтрока(ПодстрокаСБуквами) Тогда - ПодстрокаСЦифрами = СтрЗаменить(ПодстрокаСЦифрами,",","."); - Результат = Результат + ?(ПустаяСтрока(ПодстрокаСЦифрами), 1, Число(ПодстрокаСЦифрами)) - * ЗаменитьЕдиницуИзмеренияНаМножитель(ПодстрокаСБуквами); - - ПодстрокаСЦифрами = ""; - ПодстрокаСБуквами = ""; - - ПредыдущийСимволЭтоЦифра = Ложь; - ЕстьДробнаяЧасть = Ложь; - КонецЕсли; - - ПодстрокаСЦифрами = ПодстрокаСЦифрами + Сред(СтрокаСоВременем,Позиция,1); - - ПредыдущийСимволЭтоЦифра = Истина; - Если Символ = "," Тогда - ЕстьДробнаяЧасть = Истина; - КонецЕсли; - Иначе - Если Символ = " " И ЗаменитьЕдиницуИзмеренияНаМножитель(ПодстрокаСБуквами) = "0" Тогда - ПодстрокаСБуквами = ""; - КонецЕсли; - - ПодстрокаСБуквами = ПодстрокаСБуквами + Сред(СтрокаСоВременем,Позиция,1); - ПредыдущийСимволЭтоЦифра = Ложь; - КонецЕсли; - КонецЦикла; - - Если Не ПустаяСтрока(ПодстрокаСБуквами) Тогда - ПодстрокаСЦифрами = СтрЗаменить(ПодстрокаСЦифрами,",","."); - Результат = Результат + ?(ПустаяСтрока(ПодстрокаСЦифрами), 1, Число(ПодстрокаСЦифрами)) - * ЗаменитьЕдиницуИзмеренияНаМножитель(ПодстрокаСБуквами); - КонецЕсли; - - Возврат Результат; - -КонецФункции - -// Анализирует слово на предмет соответствия единице времени и, если соответствие установлено, -// возвращает количество секунд, содержащееся в единице времени. -// -// Параметры: -// Единица - Строка - анализируемое слово. -// -// Возвращаемое значение -// Число - количество секунд в Единице. Если единица не определена или пустая, то возвращается 0. -// -Функция ЗаменитьЕдиницуИзмеренияНаМножитель(Знач Единица) - - Результат = 0; - Единица = НРег(Единица); - - ДопустимыеСимволы = НСтр("ru = 'абвгдеёжзийклмнопрстуфхцчшщъыьэюя'"); - ПосторонниеСимволы = СтрСоединить(СтрРазделить(Единица, ДопустимыеСимволы, Ложь), ""); - Если ПосторонниеСимволы <> "" Тогда - Единица = СтрСоединить(СтрРазделить(Единица, ПосторонниеСимволы, Ложь), ""); - КонецЕсли; - - СловоформыНедели = СтрРазделить(НСтр("ru = 'нед,н'"), ",", Ложь); - СловоформыДня = СтрРазделить(НСтр("ru = 'ден,дне,дня,дн,д'"), ",", Ложь); - СловоформыЧаса = СтрРазделить(НСтр("ru = 'час,ч'"), ",", Ложь); - СловоформыМинуты = СтрРазделить(НСтр("ru = 'мин,м'"), ",", Ложь); - СловоформыСекунды = СтрРазделить(НСтр("ru = 'сек,с'"), ",", Ложь); - - ПервыеТриСимвола = Лев(Единица,3); - Если СловоформыНедели.Найти(ПервыеТриСимвола) <> Неопределено Тогда - Результат = 60*60*24*7; - ИначеЕсли СловоформыДня.Найти(ПервыеТриСимвола) <> Неопределено Тогда - Результат = 60*60*24; - ИначеЕсли СловоформыЧаса.Найти(ПервыеТриСимвола) <> Неопределено Тогда - Результат = 60*60; - ИначеЕсли СловоформыМинуты.Найти(ПервыеТриСимвола) <> Неопределено Тогда - Результат = 60; - ИначеЕсли СловоформыСекунды.Найти(ПервыеТриСимвола) <> Неопределено Тогда - Результат = 1; - КонецЕсли; - - Возврат Формат(Результат,"ЧН=0; ЧГ=0"); - -КонецФункции - -// Получает из строки интервал времени и возвращает его текстовое представление. -// -// Параметры: -// ВремяСтрокой - Строка - текстовое описание времени, где числа записаны цифрами, -// а единицы измерения - строкой. -// -// Возвращаемое значение -// Строка - оформленное представление времени. -Функция ОформитьВремя(ВремяСтрокой) Экспорт - Возврат ПредставлениеВремени(ПолучитьИнтервалВремениИзСтроки(ВремяСтрокой)); -КонецФункции - // Возвращает структуру напоминания с заполненными значениями. // // Параметры: diff --git a/SSL/src/CommonModules/НапоминанияПользователяСлужебный/Module.bsl b/SSL/src/CommonModules/НапоминанияПользователяСлужебный/Module.bsl index 94efb4e3e..4f94758d2 100644 --- a/SSL/src/CommonModules/НапоминанияПользователяСлужебный/Module.bsl +++ b/SSL/src/CommonModules/НапоминанияПользователяСлужебный/Module.bsl @@ -544,7 +544,7 @@ // Проверяет изменения реквизитов предметов, на которые есть пользовательская подписка, // изменяет срок напоминания в случае необходимости. -Процедура ПроверитьИзмененияДатВПредмете(Предмет) +Процедура ОбновитьНапоминанияПоПредметам(Предметы) Экспорт УстановитьПривилегированныйРежим(Истина); @@ -565,9 +565,9 @@ | РегистрСведений.НапоминанияПользователя КАК Напоминания |ГДЕ | Напоминания.СпособУстановкиВремениНапоминания = ЗНАЧЕНИЕ(Перечисление.СпособыУстановкиВремениНапоминания.ОтносительноВремениПредмета) - | И Напоминания.Источник = &Источник"; + | И Напоминания.Источник В(&Предметы)"; - Запрос.УстановитьПараметр("Источник", Предмет); + Запрос.УстановитьПараметр("Предметы", Предметы); ТаблицаРезультата = Запрос.Выполнить().Выгрузить(); @@ -587,6 +587,7 @@ ПодключитьНапоминание(Напоминание); КонецЕсли; КонецЦикла; + КонецПроцедуры // Обработчик подписки на событие ПриЗаписи объекта, по поводу которого можно создавать напоминания. @@ -601,7 +602,7 @@ КонецЕсли; Если ПолучитьФункциональнуюОпцию("ИспользоватьНапоминанияПользователя") Тогда - ПроверитьИзмененияДатВПредмете(Источник.Ссылка); + ОбновитьНапоминанияПоПредметам(ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Источник.Ссылка)); КонецЕсли; КонецПроцедуры @@ -613,37 +614,51 @@ НаборЗаписей.Отбор.Пользователь.Установить(ПараметрыНапоминания.Пользователь); НаборЗаписей.Отбор.Источник.Установить(ПараметрыНапоминания.Источник); + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.НапоминанияПользователя"); + ЭлементБлокировки.УстановитьЗначение("Пользователь", ПараметрыНапоминания.Пользователь); + ЭлементБлокировки.УстановитьЗначение("Источник", ПараметрыНапоминания.Источник); + Если ОбновитьСрокНапоминания Тогда НаборЗаписей.Отбор.ВремяСобытия.Установить(ПараметрыНапоминания.ВремяСобытия); - НаборЗаписей.Прочитать(); - Если НаборЗаписей.Количество() = 0 Тогда - Возврат; - КонецЕсли; - Для Каждого Запись Из НаборЗаписей Цикл - ЗаполнитьЗначенияСвойств(Запись, ПараметрыНапоминания); - КонецЦикла; - Иначе - НаборЗаписей.Прочитать(); - Если НаборЗаписей.Количество() > 0 Тогда - ЗанятоеВремя = НаборЗаписей.Выгрузить(,"ВремяСобытия").ВыгрузитьКолонку("ВремяСобытия"); - Пока ЗанятоеВремя.Найти(ПараметрыНапоминания.ВремяСобытия) <> Неопределено Цикл - ПараметрыНапоминания.ВремяСобытия = ПараметрыНапоминания.ВремяСобытия + 1; - КонецЦикла; - КонецЕсли; - НоваяЗапись = НаборЗаписей.Добавить(); - ЗаполнитьЗначенияСвойств(НоваяЗапись, ПараметрыНапоминания); + ЭлементБлокировки.УстановитьЗначение("ВремяСобытия", ПараметрыНапоминания.ВремяСобытия); КонецЕсли; - НаборЗаписей.Записать(); + НачатьТранзакцию(); + Попытка + Блокировка.Заблокировать(); + НаборЗаписей.Прочитать(); + + Если ОбновитьСрокНапоминания Тогда + Для Каждого Запись Из НаборЗаписей Цикл + ЗаполнитьЗначенияСвойств(Запись, ПараметрыНапоминания); + КонецЦикла; + Иначе + Если НаборЗаписей.Количество() > 0 Тогда + ЗанятоеВремя = НаборЗаписей.Выгрузить(,"ВремяСобытия").ВыгрузитьКолонку("ВремяСобытия"); + Пока ЗанятоеВремя.Найти(ПараметрыНапоминания.ВремяСобытия) <> Неопределено Цикл + ПараметрыНапоминания.ВремяСобытия = ПараметрыНапоминания.ВремяСобытия + 1; + КонецЦикла; + КонецЕсли; + НоваяЗапись = НаборЗаписей.Добавить(); + ЗаполнитьЗначенияСвойств(НоваяЗапись, ПараметрыНапоминания); + КонецЕсли; + + Если НаборЗаписей.Количество() > 0 Тогда + НаборЗаписей.Записать(); + КонецЕсли; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; КонецПроцедуры // Отключает напоминание, если оно есть. Если напоминание периодическое, подключает его на ближайшую дату по расписанию. Процедура ОтключитьНапоминание(ПараметрыНапоминания, ПодключатьПоРасписанию = Истина) Экспорт - // ищем существующую запись - Запрос = Новый Запрос; - ТекстЗапроса = "ВЫБРАТЬ | НапоминанияПользователя.Пользователь КАК Пользователь, @@ -663,45 +678,59 @@ | И НапоминанияПользователя.ВремяСобытия = &ВремяСобытия | И НапоминанияПользователя.Источник = &Источник"; + Запрос = Новый Запрос(ТекстЗапроса); Запрос.УстановитьПараметр("Пользователь", ПараметрыНапоминания.Пользователь); Запрос.УстановитьПараметр("ВремяСобытия", ПараметрыНапоминания.ВремяСобытия); Запрос.УстановитьПараметр("Источник", ПараметрыНапоминания.Источник); - Запрос.Текст = ТекстЗапроса; - РезультатЗапроса = Запрос.Выполнить().Выгрузить(); - Напоминание = Неопределено; - Если РезультатЗапроса.Количество() > 0 Тогда - Напоминание = РезультатЗапроса[0]; - КонецЕсли; + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.НапоминанияПользователя"); + ЭлементБлокировки.УстановитьЗначение("Пользователь", ПараметрыНапоминания.Пользователь); + ЭлементБлокировки.УстановитьЗначение("Источник", ПараметрыНапоминания.Источник); + ЭлементБлокировки.УстановитьЗначение("ВремяСобытия", ПараметрыНапоминания.ВремяСобытия); - // Удаляем существующую запись. - НаборЗаписей = РегистрыСведений.НапоминанияПользователя.СоздатьНаборЗаписей(); - НаборЗаписей.Отбор.Пользователь.Установить(ПараметрыНапоминания.Пользователь); - НаборЗаписей.Отбор.Источник.Установить(ПараметрыНапоминания.Источник); - НаборЗаписей.Отбор.ВремяСобытия.Установить(ПараметрыНапоминания.ВремяСобытия); - - НаборЗаписей.Очистить(); - НаборЗаписей.Записать(); - - СледующаяДатаПоРасписанию = Неопределено; - ОпределенаСледующаяДатаПоРасписанию = Ложь; - - // Подключаем следующее напоминание по расписанию. - Если ПодключатьПоРасписанию И Напоминание <> Неопределено Тогда - Расписание = Напоминание.Расписание.Получить(); - Если Расписание <> Неопределено Тогда - Если Расписание.ПериодПовтораДней > 0 Тогда - СледующаяДатаПоРасписанию = ПолучитьБлижайшуюДатуСобытияПоРасписанию(Расписание, ПараметрыНапоминания.ВремяСобытия + 1); - КонецЕсли; - ОпределенаСледующаяДатаПоРасписанию = СледующаяДатаПоРасписанию <> Неопределено; + НачатьТранзакцию(); + Попытка + Блокировка.Заблокировать(); + + РезультатЗапроса = Запрос.Выполнить().Выгрузить(); + Напоминание = Неопределено; + Если РезультатЗапроса.Количество() > 0 Тогда + Напоминание = РезультатЗапроса[0]; КонецЕсли; - Если ОпределенаСледующаяДатаПоРасписанию Тогда - Напоминание.ВремяСобытия = СледующаяДатаПоРасписанию; - Напоминание.СрокНапоминания = Напоминание.ВремяСобытия - Напоминание.ИнтервалВремениНапоминания; - ПодключитьНапоминание(Напоминание); + // Удаляем существующую запись. + НаборЗаписей = РегистрыСведений.НапоминанияПользователя.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.Пользователь.Установить(ПараметрыНапоминания.Пользователь); + НаборЗаписей.Отбор.Источник.Установить(ПараметрыНапоминания.Источник); + НаборЗаписей.Отбор.ВремяСобытия.Установить(ПараметрыНапоминания.ВремяСобытия); + НаборЗаписей.Записать(); + + // Подключаем следующее напоминание по расписанию. + СледующаяДатаПоРасписанию = Неопределено; + ОпределенаСледующаяДатаПоРасписанию = Ложь; + + Если ПодключатьПоРасписанию И Напоминание <> Неопределено Тогда + Расписание = Напоминание.Расписание.Получить(); + Если Расписание <> Неопределено Тогда + Если Расписание.ПериодПовтораДней > 0 Тогда + СледующаяДатаПоРасписанию = ПолучитьБлижайшуюДатуСобытияПоРасписанию(Расписание, ПараметрыНапоминания.ВремяСобытия + 1); + КонецЕсли; + ОпределенаСледующаяДатаПоРасписанию = СледующаяДатаПоРасписанию <> Неопределено; + КонецЕсли; + + Если ОпределенаСледующаяДатаПоРасписанию Тогда + Напоминание.ВремяСобытия = СледующаяДатаПоРасписанию; + Напоминание.СрокНапоминания = Напоминание.ВремяСобытия - Напоминание.ИнтервалВремениНапоминания; + ПодключитьНапоминание(Напоминание); + КонецЕсли; КонецЕсли; - КонецЕсли; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; КонецПроцедуры diff --git a/SSL/src/CommonModules/НастройкаПорядкаЭлементов/Module.bsl b/SSL/src/CommonModules/НастройкаПорядкаЭлементов/Module.bsl index a527f5ac8..9827c2941 100644 --- a/SSL/src/CommonModules/НастройкаПорядкаЭлементов/Module.bsl +++ b/SSL/src/CommonModules/НастройкаПорядкаЭлементов/Module.bsl @@ -11,41 +11,32 @@ // Заполняет значение реквизита дополнительного упорядочивания у объекта. // // Параметры: -// Источник - Объект - записываемый объект; -// Отказ - Булево - признак отказа от записи объекта. -Процедура ЗаполнитьЗначениеРеквизитаУпорядочивания(Источник, Отказ) Экспорт +// Объект - Объект - объект, у которого необходимо установить значение реквизита упорядочивания. +// +Процедура УстановитьЗначениеРеквизитаУпорядочивания(Объект) Экспорт - Если Источник.ОбменДанными.Загрузка Тогда - Возврат; - КонецЕсли; - - // Если в обработчике был установлен отказ новый порядок не вычисляем. - Если Отказ Тогда - Возврат; - КонецЕсли; - - Если СтандартныеПодсистемыСервер.ЭтоИдентификаторОбъектаМетаданных(Источник) Тогда + Если СтандартныеПодсистемыСервер.ЭтоИдентификаторОбъектаМетаданных(Объект) Тогда Возврат; КонецЕсли; // Проверим, есть ли у объекта реквизит доп. упорядочивания. - Информация = ПолучитьИнформациюДляПеремещения(Источник.Ссылка.Метаданные()); - Если Не УОбъектаЕстьРеквизитДопУпорядочивания(Источник, Информация) Тогда + Информация = ПолучитьИнформациюДляПеремещения(Объект.Ссылка.Метаданные()); + Если Не УОбъектаЕстьРеквизитДопУпорядочивания(Объект, Информация) Тогда Возврат; КонецЕсли; // При переносе элемента в другую группу порядок переназначается. - Если Информация.ЕстьРодитель И ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Источник.Ссылка, "Родитель") <> Источник.Родитель Тогда - Источник.РеквизитДопУпорядочивания = 0; + Если Информация.ЕстьРодитель И ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.Ссылка, "Родитель") <> Объект.Родитель Тогда + Объект.РеквизитДопУпорядочивания = 0; КонецЕсли; // Вычислим новое значение для порядка элемента. - Если Источник.РеквизитДопУпорядочивания = 0 Тогда - Источник.РеквизитДопУпорядочивания = + Если Объект.РеквизитДопУпорядочивания = 0 Тогда + Объект.РеквизитДопУпорядочивания = НастройкаПорядкаЭлементовСлужебный.ПолучитьНовоеЗначениеРеквизитаДопУпорядочивания( Информация, - ?(Информация.ЕстьРодитель, Источник.Родитель, Неопределено), - ?(Информация.ЕстьВладелец, Источник.Владелец, Неопределено)); + ?(Информация.ЕстьРодитель, Объект.Родитель, Неопределено), + ?(Информация.ЕстьВладелец, Объект.Владелец, Неопределено)); КонецЕсли; КонецПроцедуры @@ -203,4 +194,25 @@ КонецФункции +// Обработчик подписки на событие ЗаполнитьЗначениеРеквизитаУпорядочивания. +// Заполняет значение реквизита дополнительного упорядочивания у объекта. +// +// Параметры: +// Источник - Объект - записываемый объект; +// Отказ - Булево - признак отказа от записи объекта. +Процедура ЗаполнитьЗначениеРеквизитаУпорядочивания(Источник, Отказ) Экспорт + + Если Источник.ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + + // Если в обработчике был установлен отказ новый порядок не вычисляем. + Если Отказ Тогда + Возврат; + КонецЕсли; + + УстановитьЗначениеРеквизитаУпорядочивания(Источник); + +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/CommonModules/НастройкаПорядкаЭлементовСлужебный/Module.bsl b/SSL/src/CommonModules/НастройкаПорядкаЭлементовСлужебный/Module.bsl index 298850bb1..8d8840979 100644 --- a/SSL/src/CommonModules/НастройкаПорядкаЭлементовСлужебный/Module.bsl +++ b/SSL/src/CommonModules/НастройкаПорядкаЭлементовСлужебный/Module.bsl @@ -146,18 +146,23 @@ ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&Владелец", ПолеВладельца); Запрос = Новый Запрос(ТекстЗапроса); - РезультатЗапроса = Запрос.Выполнить(); - Если РезультатЗапроса.Пустой() Тогда - Возврат Ложь; - КонецЕсли; + Выборка = Запрос.Выполнить().Выбрать(); - Выборка = РезультатЗапроса.Выбрать(); Пока Выборка.Следующий() Цикл - Объект = Выборка.Ссылка.ПолучитьОбъект(); - Объект.РеквизитДопУпорядочивания = 0; + НачатьТранзакцию(); Попытка + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить(Информация.ПолноеИмя); + ЭлементБлокировки.УстановитьЗначение("Ссылка", Выборка.Ссылка); + Блокировка.Заблокировать(); + + Объект = Выборка.Ссылка.ПолучитьОбъект(); + Объект.РеквизитДопУпорядочивания = 0; Объект.Записать(); + + ЗафиксироватьТранзакцию(); Исключение + ОтменитьТранзакцию(); Продолжить; КонецПопытки; КонецЦикла; @@ -209,6 +214,9 @@ ПолеКомпоновкиДанных = ГруппировкаКомпоновкиДанных.Выбор.ДоступныеПоляВыбора.Элементы.Найти("Ссылка").Поле; ЕстьПолеСсылка = Ложь; Для Каждого ВыбранноеПолеКомпоновкиДанных Из ГруппировкаКомпоновкиДанных.Выбор.Элементы Цикл + Если ТипЗнч(ВыбранноеПолеКомпоновкиДанных) = Тип("АвтоВыбранноеПолеКомпоновкиДанных") Тогда + Продолжить; + КонецЕсли; Если ВыбранноеПолеКомпоновкиДанных.Поле = ПолеКомпоновкиДанных Тогда ЕстьПолеСсылка = Истина; Прервать; @@ -253,7 +261,7 @@ Элементы.Добавить(ТекущийЭлементСсылка); Элементы.Добавить(СоседнийЭлементСсылка); - ПоменятьЭлементыМестами(ТекущийЭлементСсылка, СоседнийЭлементСсылка); + ПоменятьЭлементыМестами(ТекущийЭлементСсылка, СоседнийЭлементСсылка, Информация.ПолноеИмя); КонецЕсли; Возврат ""; @@ -281,10 +289,17 @@ КонецФункции -Процедура ПоменятьЭлементыМестами(ПервыйЭлементСсылка, ВторойЭлементСсылка) +Процедура ПоменятьЭлементыМестами(ПервыйЭлементСсылка, ВторойЭлементСсылка, ИмяТаблицы) + + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить(ИмяТаблицы); + ЭлементБлокировки.УстановитьЗначение("Ссылка", ПервыйЭлементСсылка); + ЭлементБлокировки = Блокировка.Добавить(ИмяТаблицы); + ЭлементБлокировки.УстановитьЗначение("Ссылка", ВторойЭлементСсылка); НачатьТранзакцию(); Попытка + Блокировка.Заблокировать(); ЗаблокироватьДанныеДляРедактирования(ПервыйЭлементСсылка); ЗаблокироватьДанныеДляРедактирования(ВторойЭлементСсылка); diff --git a/SSL/src/CommonModules/НастройкаРазрешенийНаИспользованиеВнешнихРесурсовВызовСервера/Module.bsl b/SSL/src/CommonModules/НастройкаРазрешенийНаИспользованиеВнешнихРесурсовВызовСервера/Module.bsl index 6b977462d..06acfc876 100644 --- a/SSL/src/CommonModules/НастройкаРазрешенийНаИспользованиеВнешнихРесурсовВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/НастройкаРазрешенийНаИспользованиеВнешнихРесурсовВызовСервера/Module.bsl @@ -37,7 +37,7 @@ // Удаляет запросы на использование внешних ресурсов, если пользователь отказался от их применения. // // Параметры: -// ИдентификаторыЗапросов - Массив(УникальныйИдентификатор) - массив идентификаторов запросов на +// ИдентификаторыЗапросов - Массив Из УникальныйИдентификатор - массив идентификаторов запросов на // использование внешних ресурсов. // Процедура ОтменаПримененияЗапросовНаИспользованиеВнешнихРесурсов(Знач ИдентификаторыЗапросов) Экспорт diff --git a/SSL/src/CommonModules/НастройкаРазрешенийНаИспользованиеВнешнихРесурсовКлиент/Module.bsl b/SSL/src/CommonModules/НастройкаРазрешенийНаИспользованиеВнешнихРесурсовКлиент/Module.bsl index 5e0c57694..5d3d9b5c1 100644 --- a/SSL/src/CommonModules/НастройкаРазрешенийНаИспользованиеВнешнихРесурсовКлиент/Module.bsl +++ b/SSL/src/CommonModules/НастройкаРазрешенийНаИспользованиеВнешнихРесурсовКлиент/Module.bsl @@ -417,8 +417,8 @@ // Проверяет необходимость отображения помощника настройки разрешений на использование // внешних (относительно кластера серверов 1С:Предприятия) ресурсов. // -// Возвращаемое значение: -// Булево. +// Возвращаемое значение: +// Булево - // Функция ОтображатьПомощникНастройкиРазрешений() diff --git a/SSL/src/CommonModules/ОбменДаннымиXDTOСервер/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиXDTOСервер/Module.bsl index 6c3de7295..b2de59cc5 100644 --- a/SSL/src/CommonModules/ОбменДаннымиXDTOСервер/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиXDTOСервер/Module.bsl @@ -16,7 +16,7 @@ // ПравилаКонвертации - ТаблицаЗначений - таблица, содержащая правила конвертации объектов. // // Возвращаемое значение: -// СтрокаТаблицыЗначений - Строка таблицы значений правил конвертации. +// СтрокаТаблицыЗначений - СтрокаТаблицыЗначений правил конвертации. // Функция ИнициализироватьПравилоКонвертацииОбъекта(ПравилаКонвертации) Экспорт @@ -119,9 +119,7 @@ ДокументыДляОтложенногоПроведения = Новый ТаблицаЗначений; ДокументыДляОтложенногоПроведения.Колонки.Добавить("ДокументСсылка"); - ДокументыДляОтложенногоПроведения.Колонки.Добавить("ДатаДокумента", Новый ОписаниеТипов("Дата")); - ДокументыДляОтложенногоПроведения.Колонки.Добавить("ДокументПроведенУспешно", Новый ОписаниеТипов("Булево")); - ДокументыДляОтложенногоПроведения.Колонки.Добавить("ЭтоКоллизия", Новый ОписаниеТипов("Число")); + ДокументыДляОтложенногоПроведения.Колонки.Добавить("ДатаДокумента", Новый ОписаниеТипов("Дата")); КомпонентыОбмена.Вставить("ДокументыДляОтложенногоПроведения", ДокументыДляОтложенногоПроведения); ЗагруженныеОбъекты = Новый ТаблицаЗначений; @@ -359,7 +357,12 @@ КонецЕсли; - КомпонентыОбмена.СтрокаСообщенияОбОшибке = КраткоеПредставлениеОшибки; + Если ПустаяСтрока(КомпонентыОбмена.СтрокаСообщенияОбОшибке) Тогда + КомпонентыОбмена.СтрокаСообщенияОбОшибке = КраткоеПредставлениеОшибки; + Иначе + КомпонентыОбмена.СтрокаСообщенияОбОшибке = КомпонентыОбмена.СтрокаСообщенияОбОшибке + " + |" + КраткоеПредставлениеОшибки; + КонецЕсли; Если ВзвестиФлагОшибок Тогда @@ -539,10 +542,26 @@ ОбменДаннымиСервер.ВыбратьИзменения(УзелДляОбмена, НомерОтправленного, КомпонентыОбмена.ВыгруженныеПоСсылкеОбъекты); КонецЕсли; - Получатель = УзелДляОбмена.ПолучитьОбъект(); - Получатель.НомерОтправленного = НомерОтправленного; - Получатель.ОбменДанными.Загрузка = Истина; - Получатель.Записать(); + НачатьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить(ОбщегоНазначения.ИмяТаблицыПоСсылке(УзелДляОбмена)); + ЭлементБлокировки.УстановитьЗначение("Ссылка", УзелДляОбмена); + Блокировка.Заблокировать(); + + ЗаблокироватьДанныеДляРедактирования(УзелДляОбмена); + Получатель = УзелДляОбмена.ПолучитьОбъект(); + + Получатель.НомерОтправленного = НомерОтправленного; + Получатель.ОбменДанными.Загрузка = Истина; + + Получатель.Записать(); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; КонецЕсли; @@ -585,8 +604,8 @@ // Отработка ПОД ИспользованиеПКО = Новый Структура; - Для Каждого ТекущийПКО Из ПравилоОбработки.ИспользуемыеПКО Цикл - ИспользованиеПКО.Вставить(ТекущийПКО, Истина); + Для Каждого ТекущееПКО Из ПравилоОбработки.ИспользуемыеПКО Цикл + ИспользованиеПКО.Вставить(ТекущееПКО, Истина); КонецЦикла; ПрерватьОбработку = Ложь; @@ -1898,13 +1917,14 @@ ОбменДаннымиСлужебный.ОтключитьОбновлениеКлючейДоступа(Истина); Попытка ВыполнитьОтложенноеПроведениеДокументов(КомпонентыОбмена); - ВыполнитьОтложеннуюЗаписьОбъектов(КомпонентыОбмена); + ОбменДаннымиСервер.ВыполнитьОтложеннуюЗаписьОбъектов( + КомпонентыОбмена.ОбъектыДляОтложеннойЗаписи, КомпонентыОбмена.УзелКорреспондента); ОбменДаннымиСлужебный.ОтключитьОбновлениеКлючейДоступа(Ложь); Исключение ОбменДаннымиСлужебный.ОтключитьОбновлениеКлючейДоступа(Ложь); ВызватьИсключение; - КонецПопытки; + КонецПопытки; КонецЕсли; КонецЕсли; @@ -2315,39 +2335,9 @@ // Процедура ВыполнитьОтложенноеПроведениеДокументов(КомпонентыОбмена) Экспорт - ДокументыДляОтложенногоПроведения = КомпонентыОбмена.ДокументыДляОтложенногоПроведения; - Если ДокументыДляОтложенногоПроведения.Количество() = 0 Тогда - Возврат; // нет документов в очереди - КонецЕсли; - - // Сворачиваем таблицу по уникальным полям. - ДокументыДляОтложенногоПроведения.Свернуть("ДокументСсылка, ДатаДокумента, ДокументПроведенУспешно", "ЭтоКоллизия"); - - // Сортируем документы по возрастанию даты документов. - ОбъектСравнения = Новый СравнениеЗначений; - ДокументыДляОтложенногоПроведения.Сортировать("ДатаДокумента, ДокументСсылка", ОбъектСравнения); - - ОбменДаннымиСервер.ПропуститьПроверкуЗапретаИзменения(); - - Для Каждого СтрокаТаблицы Из ДокументыДляОтложенногоПроведения Цикл - - Если СтрокаТаблицы.ДокументСсылка.Пустая() Тогда - Продолжить; - КонецЕсли; - - Объект = СтрокаТаблицы.ДокументСсылка.ПолучитьОбъект(); - - Если Объект = Неопределено Тогда - Продолжить; - КонецЕсли; - - ВыполнитьПроведениеДокументаПриЗагрузке(КомпонентыОбмена, Объект, Истина); - - СтрокаТаблицы.ДокументПроведенУспешно = Объект.Проведен; - - КонецЦикла; - - ОбменДаннымиСервер.ПропуститьПроверкуЗапретаИзменения(Ложь); + ОбменДаннымиСервер.ВыполнитьОтложенноеПроведениеДокументов( + КомпонентыОбмена.ДокументыДляОтложенногоПроведения, + КомпонентыОбмена.УзелКорреспондента); КонецПроцедуры @@ -2363,48 +2353,10 @@ Объект, РегистрироватьПроблемыВРезультатахОбмена = Истина) Экспорт - ОписаниеОшибки = ""; - ДокументПроведенУспешно = Ложь; - - УзелКорреспондента = КомпонентыОбмена.УзелКорреспондента; - - // Устанавливаем узел-отправитель для предотвращения регистрации объекта на узле, для которого производим загрузку - // проведение выполняем не в режиме загрузки. - ОбменДаннымиСервер.УстановитьОбменДаннымиЗагрузка(Объект, Ложь, Ложь, УзелКорреспондента); - - Попытка - - Объект.ДополнительныеСвойства.Вставить("ОтложенноеПроведение"); - - Если Объект.ПроверитьЗаполнение() Тогда - - // При проведении документа снимаем запрет на выполнение ПРО, - // т.к. ПРО были проигнорированы при обычной записи документа с целью оптимизации скорости загрузки данных. - Если Объект.ДополнительныеСвойства.Свойство("ОтключитьМеханизмРегистрацииОбъектов") Тогда - Объект.ДополнительныеСвойства.Удалить("ОтключитьМеханизмРегистрацииОбъектов"); - КонецЕсли; - - Объект.ДополнительныеСвойства.Вставить("ПропуститьПроверкуЗапретаИзменения"); - - // Выполняем попытку проведения документа. - Объект.Записать(РежимЗаписиДокумента.Проведение); - - ДокументПроведенУспешно = Объект.Проведен; - - КонецЕсли; - - Исключение - - ОписаниеОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); - - КонецПопытки; - - Если Не ДокументПроведенУспешно Тогда - - ОбменДаннымиСервер.ЗарегистрироватьОшибкуПроведенияДокумента( - Объект, УзелКорреспондента, ОписаниеОшибки, РегистрироватьПроблемыВРезультатахОбмена); - - КонецЕсли; + ОбменДаннымиСервер.ВыполнитьПроведениеДокументаПриЗагрузке( + КомпонентыОбмена.УзелКорреспондента, + Объект.Ссылка, + РегистрироватьПроблемыВРезультатахОбмена); КонецПроцедуры @@ -2675,7 +2627,7 @@ // Создает таблицу значений для хранения заголовка пакета с данными. // // Возвращаемое значение: -// Таблица значений +// ТаблицаЗначений - // Функция НоваяТаблицаДанныхЗаголовкаПакета() Экспорт @@ -2702,7 +2654,7 @@ // Получает правила регистрации объектов для плана обмена. // // Возвращаемое значение: -// Таблица значений +// ТаблицаЗначений - // Функция ПравилаРегистрацииОбъектов(УзелПланаОбмена) Экспорт @@ -2783,6 +2735,101 @@ Возврат Истина; КонецФункции +Процедура ПослеОткрытияФайлаЗагрузки(КомпонентыОбмена, Отказ, ИнициализироватьТаблицыПравил = Истина) Экспорт + + Если КомпонентыОбмена.ФлагОшибки Тогда + ЗавершитьВедениеПротоколаОбмена(КомпонентыОбмена); + Если КомпонентыОбмена.Свойство("ФайлОбмена") Тогда + КомпонентыОбмена.ФайлОбмена.Закрыть(); + КонецЕсли; + Отказ = Истина; + Возврат; + КонецЕсли; + + Если КомпонентыОбмена.ЭтоОбменЧерезПланОбмена Тогда + + Если КомпонентыОбмена.ОбменДаннымиСВнешнейСистемой Тогда + ИзмененИдентификаторУзла = Ложь; + ИнформационноеСообщение = ""; + + НачатьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить(ОбщегоНазначения.ИмяТаблицыПоСсылке(КомпонентыОбмена.УзелКорреспондента)); + ЭлементБлокировки.УстановитьЗначение("Ссылка", КомпонентыОбмена.УзелКорреспондента); + Блокировка.Заблокировать(); + + КодУзлаКорреспондента = СокрЛП(ОбщегоНазначения.ЗначениеРеквизитаОбъекта(КомпонентыОбмена.УзелКорреспондента, "Код")); + Если ЗначениеЗаполнено(КомпонентыОбмена.ИдентификаторКорреспондента) + И Не КодУзлаКорреспондента = КомпонентыОбмена.ИдентификаторКорреспондента Тогда + УзелКорреспондентаОбъект = КомпонентыОбмена.УзелКорреспондента.ПолучитьОбъект(); + УзелКорреспондентаОбъект.Код = КомпонентыОбмена.ИдентификаторКорреспондента; + УзелКорреспондентаОбъект.ОбменДанными.Загрузка = Истина; + УзелКорреспондентаОбъект.Записать(); + + ИзмененИдентификаторУзла = Истина; + + ИнформационноеСообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Изменен идентификатор узла корреспондента (%1 -> %2).'"), + КодУзлаКорреспондента, + КомпонентыОбмена.ИдентификаторКорреспондента); + КонецЕсли; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + + Если ИзмененИдентификаторУзла Тогда + ЗаписатьВПротоколВыполнения(КомпонентыОбмена, ИнформационноеСообщение, , Ложь, , , Истина); + КонецЕсли; + + КонецЕсли; + + ОбновитьНастройкиXDTOКорреспондента(КомпонентыОбмена); + ОбновитьПрефиксКорреспондента(КомпонентыОбмена); + + Если Не КомпонентыОбмена.ТолькоНастройкиXDTO + И ИнициализироватьТаблицыПравил Тогда + ИнициализироватьТаблицыПравилОбмена(КомпонентыОбмена); + ЗаполнитьСтруктуруНастроекXDTO(КомпонентыОбмена); + ЗаполнитьПоддерживаемыеОбъектыXDTO(КомпонентыОбмена); + КонецЕсли; + КонецЕсли; + + Если КомпонентыОбмена.ТолькоНастройкиXDTO Тогда + Если КомпонентыОбмена.Свойство("ФайлОбмена") Тогда + КомпонентыОбмена.ФайлОбмена.Закрыть(); + КонецЕсли; + Отказ = Истина; + Возврат; + КонецЕсли; + + Если КомпонентыОбмена.ЭтоОбменЧерезПланОбмена Тогда + ИмяПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(КомпонентыОбмена.УзелКорреспондента); + + Если ОбменДаннымиСервер.ЕстьАлгоритмМенеджераПланаОбмена("ОбработчикПроверкиЗначенийПоУмолчанию", ИмяПланаОбмена) Тогда + + СообщениеОбОшибке = ""; + + ПараметрыОбработчика = Новый Структура; + ПараметрыОбработчика.Вставить("Корреспондент", КомпонентыОбмена.УзелКорреспондента); + ПараметрыОбработчика.Вставить("ПоддерживаемыеОбъектыXDTO", КомпонентыОбмена.ПоддерживаемыеОбъектыXDTO); + + ПланыОбмена[ИмяПланаОбмена].ОбработчикПроверкиЗначенийПоУмолчанию(Отказ, ПараметрыОбработчика, СообщениеОбОшибке); + + Если Отказ Тогда + ЗаписатьВПротоколВыполнения(КомпонентыОбмена, СообщениеОбОшибке); + ЗавершитьВедениеПротоколаОбмена(КомпонентыОбмена); + Возврат; + КонецЕсли; + + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + #КонецОбласти #Область ПроцедурыИФункцииВерсионированияФорматаОбмена @@ -4535,6 +4582,12 @@ Возврат; КонецЕсли; + Если ПКС.ИспользуетсяАлгоритмКонвертации + И Не ЗначениеЗаполнено(ПравилоКонвертацииСвойства) Тогда + // Конвертация будет выполняться по алгоритму. + Возврат; + КонецЕсли; + Если ПКС.ОбработкаКлючевогоСвойства И Не ДанныеXDTO.Свойство("ЭтоНаборКлючевыхСвойств") Тогда ИсточникДанных = ДанныеXDTO.КлючевыеСвойства; @@ -4934,133 +4987,61 @@ Продолжить; КонецЕсли; - Объект = СтрокаТаблицы.Объект.Ссылка.ПолучитьОбъект(); - - // Перенос дополнительных свойств. - Для Каждого Свойство Из СтрокаТаблицы.Объект.ДополнительныеСвойства Цикл - Объект.ДополнительныеСвойства.Вставить(Свойство.Ключ, Свойство.Значение); - КонецЦикла; - - ИмяОбработчика = СтрокаТаблицы.ИмяОбработчика; - - МенеджерОбмена = КомпонентыОбмена.МенеджерОбмена; - - СтруктураПараметров = Новый Структура; - СтруктураПараметров.Вставить("Объект", Объект); - СтруктураПараметров.Вставить("КомпонентыОбмена", КомпонентыОбмена); - СтруктураПараметров.Вставить("ОбъектМодифицирован", Истина); - - Попытка - МенеджерОбмена.ВыполнитьПроцедуруМодуляМенеджера(ИмяОбработчика, СтруктураПараметров); - Исключение - ТекстОшибки = Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Событие: %1. - |Обработчик: ОтложенноеЗаполнениеОбъектов. - |Объект: %2. - | - |Ошибка выполнения обработчика. - |%3.'"), - КомпонентыОбмена.НаправлениеОбмена, - ПредставлениеОбъектаДляПротокола(Объект.Ссылка), - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - ЗаписатьВПротоколВыполнения(КомпонентыОбмена, СокрЛП(ТекстОшибки),,,,, Истина); - Возврат; - КонецПопытки; - - ОбъектМодифицирован = СтруктураПараметров.ОбъектМодифицирован; - - Если ОбъектМодифицирован Тогда - ОбменДаннымиСервер.УстановитьОбменДаннымиЗагрузка(Объект, Истина, Ложь, КомпонентыОбмена.УзелКорреспондента); - Объект.ДополнительныеСвойства.Вставить("ПропуститьЗаписьВерсииОбъекта"); - Объект.Записать(); - КонецЕсли; - - КонецЦикла; - -КонецПроцедуры - -Процедура ВыполнитьОтложеннуюЗаписьОбъектов(КомпонентыОбмена) - - Если КомпонентыОбмена.ОбъектыДляОтложеннойЗаписи.Количество() = 0 Тогда - Возврат // Нет объектов в очереди - КонецЕсли; - - Для Каждого ОбъектСоответствия Из КомпонентыОбмена.ОбъектыДляОтложеннойЗаписи Цикл - - Если ОбъектСоответствия.Ключ.Пустая() Тогда - Продолжить; - КонецЕсли; - - Объект = ОбъектСоответствия.Ключ.ПолучитьОбъект(); - - Если Объект = Неопределено Тогда - Продолжить; - КонецЕсли; - - // Устанавливаем узел-отправитель для предотвращения регистрации объекта на узле, для которого производим загрузку - // проведение выполняем не в режиме загрузки. - ОбменДаннымиСервер.УстановитьОбменДаннымиЗагрузка(Объект, Ложь, Ложь, КомпонентыОбмена.УзелКорреспондента); - - ОписаниеОшибки = ""; - ОбъектЗаписанУспешно = Ложь; - + НачатьТранзакцию(); Попытка + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить(ОбщегоНазначения.ИмяТаблицыПоСсылке(СтрокаТаблицы.Объект.Ссылка)); + ЭлементБлокировки.УстановитьЗначение("Ссылка", СтрокаТаблицы.Объект.Ссылка); + Блокировка.Заблокировать(); + + ЗаблокироватьДанныеДляРедактирования(СтрокаТаблицы.Объект.Ссылка); + Объект = СтрокаТаблицы.Объект.Ссылка.ПолучитьОбъект(); - ДополнительныеСвойства = ОбъектСоответствия.Значение; - Для Каждого Свойство Из ДополнительныеСвойства Цикл - + // Перенос дополнительных свойств. + Для Каждого Свойство Из СтрокаТаблицы.Объект.ДополнительныеСвойства Цикл Объект.ДополнительныеСвойства.Вставить(Свойство.Ключ, Свойство.Значение); - КонецЦикла; - Объект.ДополнительныеСвойства.Вставить("ОтложеннаяЗапись"); + ИмяОбработчика = СтрокаТаблицы.ИмяОбработчика; - Если Объект.ПроверитьЗаполнение() Тогда - - // При проведении документа снимаем запрет на выполнение ПРО, - // т.к. ПРО были проигнорированы при обычной записи с целью оптимизации скорости загрузки данных. - Если Объект.ДополнительныеСвойства.Свойство("ОтключитьМеханизмРегистрацииОбъектов") Тогда - Объект.ДополнительныеСвойства.Удалить("ОтключитьМеханизмРегистрацииОбъектов"); - КонецЕсли; - - ОбменДаннымиСервер.ПропуститьПроверкуЗапретаИзменения(); - Объект.ДополнительныеСвойства.Вставить("ПропуститьПроверкуЗапретаИзменения"); - - // Выполняем попытку записи объекта. - СведенияОВерсииОбъекта = Неопределено; - Если Объект.ДополнительныеСвойства.Свойство("СведенияОВерсииОбъекта", СведенияОВерсииОбъекта) Тогда - ОбменДаннымиСобытия.ПриСозданииВерсииОбъекта(Объект, СведенияОВерсииОбъекта, Истина, КомпонентыОбмена.УзелКорреспондента); - КонецЕсли; + МенеджерОбмена = КомпонентыОбмена.МенеджерОбмена; + + СтруктураПараметров = Новый Структура; + СтруктураПараметров.Вставить("Объект", Объект); + СтруктураПараметров.Вставить("КомпонентыОбмена", КомпонентыОбмена); + СтруктураПараметров.Вставить("ОбъектМодифицирован", Истина); + + Попытка + МенеджерОбмена.ВыполнитьПроцедуруМодуляМенеджера(ИмяОбработчика, СтруктураПараметров); + Исключение + ТекстОшибки = Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Событие: %1. + |Обработчик: ОтложенноеЗаполнениеОбъектов. + |Объект: %2. + | + |Ошибка выполнения обработчика. + |%3.'"), + КомпонентыОбмена.НаправлениеОбмена, + ПредставлениеОбъектаДляПротокола(Объект.Ссылка), + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ЗаписатьВПротоколВыполнения(КомпонентыОбмена, СокрЛП(ТекстОшибки),,,,, Истина); + СтруктураПараметров.ОбъектМодифицирован = Ложь; + КонецПопытки; + + Если СтруктураПараметров.ОбъектМодифицирован Тогда + ОбменДаннымиСервер.УстановитьОбменДаннымиЗагрузка(Объект, Истина, Ложь, КомпонентыОбмена.УзелКорреспондента); + Объект.ДополнительныеСвойства.Вставить("ПропуститьЗаписьВерсииОбъекта"); Объект.Записать(); - - ОбъектЗаписанУспешно = Истина; - - Иначе - - ОбъектЗаписанУспешно = Ложь; - - ОписаниеОшибки = НСтр("ru = 'Ошибка проверки заполнения реквизитов'"); - КонецЕсли; - + + ЗафиксироватьТранзакцию(); Исключение - - ОписаниеОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); - - ОбъектЗаписанУспешно = Ложь; - + ОтменитьТранзакцию(); + ВызватьИсключение; КонецПопытки; - ОбменДаннымиСервер.ПропуститьПроверкуЗапретаИзменения(Ложь); - - Если Не ОбъектЗаписанУспешно Тогда - - ОбменДаннымиСервер.ЗарегистрироватьОшибкуЗаписиОбъекта(Объект, КомпонентыОбмена.УзелКорреспондента, ОписаниеОшибки); - - КонецЕсли; - КонецЦикла; - + КонецПроцедуры #КонецОбласти @@ -5706,7 +5687,7 @@ КонецФункции -Процедура ОбновитьПрефиксКорреспондента(КомпонентыОбмена) Экспорт +Процедура ОбновитьПрефиксКорреспондента(КомпонентыОбмена) Если ЗначениеЗаполнено(КомпонентыОбмена.ПрефиксКорреспондента) Тогда Префиксы = РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз.ПрефиксыУзла(КомпонентыОбмена.УзелКорреспондента); @@ -5718,7 +5699,7 @@ КонецПроцедуры -Процедура ОбновитьНастройкиXDTOКорреспондента(КомпонентыОбмена) Экспорт +Процедура ОбновитьНастройкиXDTOКорреспондента(КомпонентыОбмена) // Проверяем возможность увеличения версии в корреспонденте. НомерВерсииКорреспондента = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(КомпонентыОбмена.УзелКорреспондента, "ВерсияФорматаОбмена"); @@ -5727,9 +5708,26 @@ КомпонентыОбмена.НастройкиXDTOКорреспондента.ПоддерживаемыеВерсии); Если МаксимальнаяОбщаяВерсия <> НомерВерсииКорреспондента Тогда - УзелКорреспондентаОбъект = КомпонентыОбмена.УзелКорреспондента.ПолучитьОбъект(); - УзелКорреспондентаОбъект.ВерсияФорматаОбмена = МаксимальнаяОбщаяВерсия; - УзелКорреспондентаОбъект.Записать(); + НачатьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить(ОбщегоНазначения.ИмяТаблицыПоСсылке(КомпонентыОбмена.УзелКорреспондента)); + ЭлементБлокировки.УстановитьЗначение("Ссылка", КомпонентыОбмена.УзелКорреспондента); + Блокировка.Заблокировать(); + + ЗаблокироватьДанныеДляРедактирования(КомпонентыОбмена.УзелКорреспондента); + УзелКорреспондентаОбъект = КомпонентыОбмена.УзелКорреспондента.ПолучитьОбъект(); + + УзелКорреспондентаОбъект.ВерсияФорматаОбмена = МаксимальнаяОбщаяВерсия; + + УзелКорреспондентаОбъект.Записать(); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + ЗаписатьВПротоколВыполнения(КомпонентыОбмена, НСтр("ru = 'Изменен номер версии формата обмена.'"), , Ложь, , , Истина); КонецЕсли; @@ -6197,11 +6195,11 @@ // // Параметры: // ПолученныеДанные - Объект информационной базы, в который происходит загрузка данных. -// ДанныеИБ - Объект информационной базы, который найден при идентификации загружаемых данных. +// ДанныеИБ - Объект информационной базы, который найден при идентификации загружаемых данных. // Если объект соответствующий загружаемому не найден, ДанныеИБ = Неопределено. // КомпонентыОбмена - Структура - содержит все правила и параметры обмена. // ИмяОбработчика - Строка, имя процедуры-обработчика в модуле менеджера. -// КонвертацияСвойств - Таблица значений, правила конвертации свойств объекта. +// КонвертацияСвойств - ТаблицаЗначений, правила конвертации свойств объекта. // Используется для определения состава свойств, подлежащих переносу из ПолученныеДанные в // ДанныеИБ. // @@ -6250,30 +6248,33 @@ // СтрокаОшибки - Строка, содержит строку модуля где возникла ошибка. // // Возвращаемое значение: -// Объект типа структура -// +// структура - Объект типа структура +// Функция ЗаписьПротоколаОбмена(КСообщенияОбОшибках = "", Знач СтрокаОшибки = "") - СтруктураОшибки = Новый Структура(); - СтруктураОшибки.Вставить("ТипОбъекта"); - СтруктураОшибки.Вставить("Объект"); - СтруктураОшибки.Вставить("ОписаниеОшибки"); - СтруктураОшибки.Вставить("ПозицияМодуля"); - СтруктураОшибки.Вставить("КСообщенияОбОшибках"); + СтруктураОшибки = Новый Структура( + "ТипОбъекта, + |Объект, + |ОписаниеОшибки, + |ПозицияМодуля, + |КСообщенияОбОшибках"); - СтрокаМодуля = ОтделитьРазделителем(СтрокаОшибки, "{"); - ОписаниеОшибки = ОтделитьРазделителем(СтрокаМодуля, "}: "); + СтрокаМодуля = ОтделитьРазделителем(СтрокаОшибки, "{"); + Если ПустаяСтрока(СтрокаОшибки) Тогда + ОписаниеОшибки = СокрЛП(ОтделитьРазделителем(СтрокаМодуля, "}:")); + Иначе + ОписаниеОшибки = СтрокаОшибки; + СтрокаМодуля = "{" + СтрокаМодуля; + КонецЕсли; Если ОписаниеОшибки <> "" Тогда - - СтруктураОшибки.ОписаниеОшибки = ОписаниеОшибки; - СтруктураОшибки.ПозицияМодуля = СтрокаМодуля; - + СтруктураОшибки.ОписаниеОшибки = ОписаниеОшибки; + СтруктураОшибки.ПозицияМодуля = СтрокаМодуля; КонецЕсли; Если СтруктураОшибки.КСообщенияОбОшибках <> "" Тогда - СтруктураОшибки.КСообщенияОбОшибках = КСообщенияОбОшибках; + СтруктураОшибки.КСообщенияОбОшибках = КСообщенияОбОшибках; КонецЕсли; @@ -6375,10 +6376,12 @@ ЭлементыПредставления = Новый Массив; ЗначениеСвойства = Неопределено; + Если КоллекцияСвойств.Свойство("Наименование", ЗначениеСвойства) И ЗначениеЗаполнено(ЗначениеСвойства) Тогда ЭлементыПредставления.Добавить(СокрЛП(ЗначениеСвойства)); КонецЕсли; + Если КоллекцияСвойств.Свойство("Код", ЗначениеСвойства) И ЗначениеЗаполнено(ЗначениеСвойства) Тогда ЭлементыПредставления.Добавить("(" + СокрЛП(ЗначениеСвойства) + ")"); @@ -6386,13 +6389,26 @@ И ЗначениеЗаполнено(ЗначениеСвойства) Тогда ЭлементыПредставления.Добавить("(" + СокрЛП(ЗначениеСвойства) + ")"); КонецЕсли; + Если КоллекцияСвойств.Свойство("Номер", ЗначениеСвойства) И ЗначениеЗаполнено(ЗначениеСвойства) Тогда - ЭлементыПредставления.Добавить("№" + СокрЛП(ЗначениеСвойства)); - КонецЕсли; - Если КоллекцияСвойств.Свойство("Дата", ЗначениеСвойства) + + ЗначениеСвойстваДата = Неопределено; + Если КоллекцияСвойств.Свойство("Дата", ЗначениеСвойстваДата) + И ЗначениеЗаполнено(ЗначениеСвойстваДата) Тогда + ЭлементыПредставления.Добавить( + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '№%1 от %2'"), ЗначениеСвойства, Формат(ЗначениеСвойстваДата, "ДЛФ=D"))); + Иначе + ЭлементыПредставления.Добавить( + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '№%1'"), ЗначениеСвойства)); + КонецЕсли; + + ИначеЕсли КоллекцияСвойств.Свойство("Дата", ЗначениеСвойства) И ЗначениеЗаполнено(ЗначениеСвойства) Тогда - ЭлементыПредставления.Добавить(НСтр("ru = 'от'") + " " + Строка(ЗначениеСвойства)); + + ЭлементыПредставления.Добавить( + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'от %1'"), ЗначениеСвойства)); + КонецЕсли; Если ЭлементыПредставления.Количество() > 0 Тогда diff --git a/SSL/src/CommonModules/ОбменДаннымиВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиВМоделиСервиса/Module.bsl index 1497d129b..8d02541a0 100644 --- a/SSL/src/CommonModules/ОбменДаннымиВМоделиСервиса/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиВМоделиСервиса/Module.bsl @@ -362,18 +362,18 @@ // При получении уведомления о доступности новых общих данных, вызывается процедуры // ДоступныНовыеДанные модулей, зарегистрированных через ПолучитьОбработчикиПоставляемыхДанных. // В процедуру передается Дескриптор - ОбъектXDTO Descriptor. -// -// В случае, если ДоступныНовыеДанные устанавливает аргумент Загружать в значение Истина, -// данные загружаются, дескриптор и путь к файлу с данными передаются в процедуру +// +// В случае, если ДоступныНовыеДанные устанавливает аргумент Загружать в значение Истина, +// данные загружаются, дескриптор и путь к файлу с данными передаются в процедуру // ОбработатьНовыеДанные. Файл будет автоматически удален после завершения процедуры. // Если в менеджере сервиса не был указан файл - значение аргумента равно Неопределено. // -// Параметры: +// Параметры: // Обработчики - ТаблицаЗначений - таблица для добавления обработчиков. Колонки: // * ВидДанных - Строка - код вида данных, обрабатываемый обработчиком. -// * КодОбработчика - Строка(20) - будет использоваться при восстановлении обработки данных после сбоя. +// * КодОбработчика - Строка - Строка(20) - будет использоваться при восстановлении обработки данных после сбоя. // * Обработчик - ОбщийМодуль - модуль, содержащий следующие процедуры: -// ДоступныНовыеДанные(Дескриптор, Загружать) Экспорт +// ДоступныНовыеДанные(Дескриптор, Загружать) Экспорт // ОбработатьНовыеДанные(Дескриптор, ПутьКФайлу) Экспорт // ОбработкаДанныхОтменена(Дескриптор) Экспорт // @@ -562,15 +562,30 @@ ЭтотУзел = ПланыОбмена[ПланОбмена.Имя].ЭтотУзел(); - Если ПустаяСтрока(ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ЭтотУзел, "Код")) Тогда + НачатьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить(ОбщегоНазначения.ИмяТаблицыПоСсылке(ЭтотУзел)); + ЭлементБлокировки.УстановитьЗначение("Ссылка", ЭтотУзел); + Блокировка.Заблокировать(); - ЭтотУзелОбъект = ЭтотУзел.ПолучитьОбъект(); - ЭтотУзелОбъект.Код = КодУзлаПланаОбменаВСервисе(МодульРаботаВМоделиСервиса.ЗначениеРазделителяСеанса()); - ЭтотУзелОбъект.Наименование = СокрЛП(СформироватьНаименованиеПредопределенногоУзла()); - ЭтотУзелОбъект.ОбменДанными.Загрузка = Истина; - ЭтотУзелОбъект.Записать(); + Если ПустаяСтрока(ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ЭтотУзел, "Код")) Тогда - КонецЕсли; + ЗаблокироватьДанныеДляРедактирования(ЭтотУзел); + ЭтотУзелОбъект = ЭтотУзел.ПолучитьОбъект(); + + ЭтотУзелОбъект.Код = КодУзлаПланаОбменаВСервисе(МодульРаботаВМоделиСервиса.ЗначениеРазделителяСеанса()); + ЭтотУзелОбъект.Наименование = СокрЛП(СформироватьНаименованиеПредопределенногоУзла()); + ЭтотУзелОбъект.ОбменДанными.Загрузка = Истина; + ЭтотУзелОбъект.Записать(); + + КонецЕсли; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; КонецЕсли; @@ -623,8 +638,6 @@ КонецПроцедуры -// Прочее - // Для внутреннего использования // Процедура ПриОтправкеДанныхПодчиненному(ЭлементДанных, ОтправкаЭлемента, Знач СозданиеНачальногоОбраза, Получатель) Экспорт @@ -675,6 +688,8 @@ КонецПроцедуры +// + // Для внутреннего использования // Процедура ПриОтправкеДанныхГлавному(ЭлементДанных, ОтправкаЭлемента, Получатель) Экспорт @@ -743,7 +758,9 @@ КонецПроцедуры -// Формирует имя приложения в сервисе. +// + +// Формирует имя приложения в сервисе // Функция СформироватьНаименованиеПредопределенногоУзла() Экспорт @@ -760,6 +777,26 @@ Возврат ?(ПустаяСтрока(ИмяПриложения), ИмяПриложенияПоУмолчанию, ИмяПриложения); КонецФункции +// Генерирует код узла плана обмена для заданной области данных. +// +// Параметры: +// НомерОбласти - Число - Значение разделителя. +// +// Возвращаемое значение: +// Строка - Код узла плана обмена для заданной области. +// +Функция КодУзлаПланаОбменаВСервисе(Знач НомерОбласти) Экспорт + + Если ТипЗнч(НомерОбласти) <> Тип("Число") Тогда + ВызватьИсключение НСтр("ru = 'Неправильный тип параметра номер [1].'"); + КонецЕсли; + + Результат = "S0[НомерОбласти]"; + + Возврат СтрЗаменить(Результат, "[НомерОбласти]", Формат(НомерОбласти, "ЧЦ=7; ЧВН=; ЧГ=0")); + +КонецФункции + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -1105,30 +1142,38 @@ КонецЕсли; - // Удаляем узел корреспондента - Корреспондент.ПолучитьОбъект().Удалить(); + УдалитьУзелПланаОбмена(Корреспондент); КонецПроцедуры -// Генерирует код узла плана обмена для заданной области данных. -// -// Параметры: -// НомерОбласти - Число - Значение разделителя. -// -// Возвращаемое значение: -// Строка - Код узла плана обмена для заданной области. -// -Функция КодУзлаПланаОбменаВСервисе(Знач НомерОбласти) Экспорт +Процедура УдалитьУзелПланаОбмена(Ссылка) Экспорт - Если ТипЗнч(НомерОбласти) <> Тип("Число") Тогда - ВызватьИсключение НСтр("ru = 'Неправильный тип параметра номер [1].'"); + Если Ссылка = Неопределено Тогда + Возврат; КонецЕсли; - Результат = "S0[НомерОбласти]"; + УстановитьПривилегированныйРежим(Истина); + НачатьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить(ОбщегоНазначения.ИмяТаблицыПоСсылке(Ссылка)); + ЭлементБлокировки.УстановитьЗначение("Ссылка", Ссылка); + Блокировка.Заблокировать(); + + Объект = Ссылка.ПолучитьОбъект(); + + Если Объект <> Неопределено Тогда + Объект.Удалить(); + КонецЕсли; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииНастройкаСинхронизацииДанных(), + УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; - Возврат СтрЗаменить(Результат, "[НомерОбласти]", Формат(НомерОбласти, "ЧЦ=7; ЧВН=; ЧГ=0")); - -КонецФункции +КонецПроцедуры Функция ИмяКаталогаСообщенийОбмена(Знач Код1, Знач Код2) @@ -1210,7 +1255,8 @@ // Возвращает идентификатор вида поставляемых данных для правил обмена данными // -// Возвращаемое значение: Строка. +// Возвращаемое значение: +// Строка - . // Функция ИдентификаторВидаПоставляемыхДанных() @@ -1376,38 +1422,40 @@ ЭтоКорреспондент = Ложь, РежимСовместимостиСБСП_2_0_0 = Ложь, ПсевдонимЭтогоУзла = "") Экспорт + + КодЭтогоУзла = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ПланыОбмена[НастройкиПодключения.ИмяПланаОбмена].ЭтотУзел(), "Код"); + // Проверяем, что для текущего узла задан код + Если ПустаяСтрока(КодЭтогоУзла) Тогда + // Код узла задается в обработчике обновления ИБ + СтрокаСообщения = НСтр("ru = 'Для предопределенного узла плана обмена ""%1"" не задан код.'"); + СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, НастройкиПодключения.ИмяПланаОбмена); + ВызватьИсключение СтрокаСообщения; + КонецЕсли; + // Создаем/обновляем узел корреспондента + Корреспондент = ПланыОбмена[НастройкиПодключения.ИмяПланаОбмена].НайтиПоКоду(НастройкиПодключения.КодКорреспондента); + НачатьТранзакцию(); Попытка - - КодЭтогоУзла = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ПланыОбмена[НастройкиПодключения.ИмяПланаОбмена].ЭтотУзел(), "Код"); - - // Проверяем, что для текущего узла задан код - Если ПустаяСтрока(КодЭтогоУзла) Тогда - - // Код узла задается в обработчике обновления ИБ - СтрокаСообщения = НСтр("ru = 'Для предопределенного узла плана обмена ""%1"" не задан код.'"); - СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, НастройкиПодключения.ИмяПланаОбмена); - ВызватьИсключение СтрокаСообщения; + Если Не Корреспондент.Пустая() Тогда + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить(ОбщегоНазначения.ИмяТаблицыПоСсылке(Корреспондент)); + ЭлементБлокировки.УстановитьЗначение("Ссылка", Корреспондент); + Блокировка.Заблокировать(); КонецЕсли; // Проверяем префикс этой ИБ Если ПустаяСтрока(ПолучитьФункциональнуюОпцию("ПрефиксИнформационнойБазы")) Тогда - Если ПустаяСтрока(НастройкиПодключения.Префикс) Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Для продолжения настройки синхронизации данных необходимо |задать префикс информационной базы в приложении ""%1"".'"), Метаданные.Синоним); КонецЕсли; - + ОбменДаннымиСервер.УстановитьПрефиксИнформационнойБазы(НастройкиПодключения.Префикс); - КонецЕсли; - // Создаем/обновляем узел корреспондента - Корреспондент = ПланыОбмена[НастройкиПодключения.ИмяПланаОбмена].НайтиПоКоду(НастройкиПодключения.КодКорреспондента); - ПроверитьКод = Ложь; Если Корреспондент.Пустая() Тогда @@ -1415,6 +1463,7 @@ КорреспондентОбъект.Код = НастройкиПодключения.КодКорреспондента; ПроверитьКод = Истина; Иначе + ЗаблокироватьДанныеДляРедактирования(Корреспондент); КорреспондентОбъект = Корреспондент.ПолучитьОбъект(); КонецЕсли; @@ -1539,16 +1588,23 @@ НастройкиПодключения.Префикс = ОбменДаннымиСервер.ПрефиксИнформационнойБазы(); КонецЕсли; + // Создаем/обновляем узел корреспондента. + Корреспондент = ПланыОбмена[НастройкиПодключения.ИмяПланаОбмена].НайтиПоКоду( + НастройкиПодключения.ИдентификаторИнформационнойБазыПриемника); + НачатьТранзакцию(); Попытка + Если Не Корреспондент.Пустая() Тогда + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить(ОбщегоНазначения.ИмяТаблицыПоСсылке(Корреспондент)); + ЭлементБлокировки.УстановитьЗначение("Ссылка", Корреспондент); + Блокировка.Заблокировать(); + КонецЕсли; + Если УстановитьПрефикс Тогда ОбменДаннымиСервер.УстановитьПрефиксИнформационнойБазы(НастройкиПодключения.Префикс); КонецЕсли; - // Создаем/обновляем узел корреспондента. - Корреспондент = ПланыОбмена[НастройкиПодключения.ИмяПланаОбмена].НайтиПоКоду( - НастройкиПодключения.ИдентификаторИнформационнойБазыПриемника); - ПроверитьКод = Ложь; Если Корреспондент.Пустая() Тогда КорреспондентОбъект = ПланыОбмена[НастройкиПодключения.ИмяПланаОбмена].СоздатьУзел(); @@ -1561,6 +1617,7 @@ ПроверитьКод = Истина; Иначе + ЗаблокироватьДанныеДляРедактирования(Корреспондент); КорреспондентОбъект = Корреспондент.ПолучитьОбъект(); КонецЕсли; @@ -1773,13 +1830,27 @@ Знач Корреспондент, Знач ЗначенияПоУмолчаниюНаУзле) Экспорт - КорреспондентОбъект = Корреспондент.ПолучитьОбъект(); - - // установка значений по умолчанию - ОбменДаннымиСобытия.УстановитьЗначенияПоУмолчаниюНаУзле(КорреспондентОбъект, ЗначенияПоУмолчаниюНаУзле); - - КорреспондентОбъект.ДополнительныеСвойства.Вставить("ПолучениеСообщенияОбмена"); - КорреспондентОбъект.Записать(); + НачатьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить(ОбщегоНазначения.ИмяТаблицыПоСсылке(Корреспондент)); + ЭлементБлокировки.УстановитьЗначение("Ссылка", Корреспондент); + Блокировка.Заблокировать(); + + ЗаблокироватьДанныеДляРедактирования(Корреспондент); + КорреспондентОбъект = Корреспондент.ПолучитьОбъект(); + + // установка значений по умолчанию + ОбменДаннымиСобытия.УстановитьЗначенияПоУмолчаниюНаУзле(КорреспондентОбъект, ЗначенияПоУмолчаниюНаУзле); + + КорреспондентОбъект.ДополнительныеСвойства.Вставить("ПолучениеСообщенияОбмена"); + КорреспондентОбъект.Записать(); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; КонецПроцедуры @@ -2320,6 +2391,10 @@ Процедура ПередЗаписьюОбщихДанных(Объект, Отказ) + Если Объект.ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + ТолькоПросмотр = Ложь; АвтономнаяРаботаСлужебный.ОпределитьВозможностьИзмененияДанных(Объект.Метаданные(), ТолькоПросмотр); @@ -2346,10 +2421,6 @@ // Процедура АвтономнаяРаботаПроверитьВозможностьЗаписиОбщихДанных(Источник, Отказ) Экспорт - Если Источник.ОбменДанными.Загрузка Тогда - Возврат; - КонецЕсли; - ПередЗаписьюОбщихДанных(Источник, Отказ); КонецПроцедуры @@ -2359,10 +2430,6 @@ // Процедура АвтономнаяРаботаПроверитьВозможностьЗаписиОбщихДанныхДокумент(Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт - Если Источник.ОбменДанными.Загрузка Тогда - Возврат; - КонецЕсли; - ПередЗаписьюОбщихДанных(Источник, Отказ); КонецПроцедуры @@ -2372,10 +2439,6 @@ // Процедура АвтономнаяРаботаПроверитьВозможностьЗаписиОбщихДанныхКонстанта(Источник, Отказ) Экспорт - Если Источник.ОбменДанными.Загрузка Тогда - Возврат; - КонецЕсли; - ПередЗаписьюОбщихДанных(Источник, Отказ); КонецПроцедуры @@ -2385,10 +2448,6 @@ // Процедура АвтономнаяРаботаПроверитьВозможностьЗаписиОбщихДанныхНаборЗаписей(Источник, Отказ, Замещение) Экспорт - Если Источник.ОбменДанными.Загрузка Тогда - Возврат; - КонецЕсли; - ПередЗаписьюОбщихДанных(Источник, Отказ); КонецПроцедуры @@ -2398,10 +2457,6 @@ // Процедура АвтономнаяРаботаПроверитьВозможностьЗаписиОбщихДанныхНаборЗаписейРасчета(Источник, Отказ, Замещение, ТолькоЗапись, ЗаписьФактическогоПериодаДействия, ЗаписьПерерасчетов) Экспорт - Если Источник.ОбменДанными.Загрузка Тогда - Возврат; - КонецЕсли; - ПередЗаписьюОбщихДанных(Источник, Отказ); КонецПроцедуры @@ -2457,31 +2512,4 @@ КонецПроцедуры -// Возвращает данные первой записи результата запроса в виде структуры. -// -// Параметры: -// РезультатЗапроса - РезультатЗапроса - Результат запроса, содержащий данные для обработки. -// -// Возвращаемое значение: -// Структура - структура с результатом. -// -Функция РезультатЗапросаВСтруктуру(Знач РезультатЗапроса) Экспорт - - Результат = Новый Структура; - Для Каждого Колонка Из РезультатЗапроса.Колонки Цикл - Результат.Вставить(Колонка.Имя); - КонецЦикла; - - Если РезультатЗапроса.Пустой() Тогда - Возврат Результат; - КонецЕсли; - - Выборка = РезультатЗапроса.Выбрать(); - Выборка.Следующий(); - - ЗаполнитьЗначенияСвойств(Результат, Выборка); - - Возврат Результат; -КонецФункции - #КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ОбменДаннымиВМоделиСервисаПовтИсп/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиВМоделиСервисаПовтИсп/Module.bsl index fa3fa379c..e6226d3b8 100644 --- a/SSL/src/CommonModules/ОбменДаннымиВМоделиСервисаПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиВМоделиСервисаПовтИсп/Module.bsl @@ -50,7 +50,7 @@ // Возвращает ссылку на объект WSПрокси сервиса обмена версии 1.0.6.5. // // Возвращаемое значение: -// WSПрокси. +// WSПрокси - . // Функция ПолучитьWSПроксиСервисаОбмена() Экспорт @@ -87,7 +87,7 @@ // СтрокаСообщенияОбОшибке - Строка - Текст сообщения об ошибке. // // Возвращаемое значение: -// WSПрокси. +// WSПрокси - . // Функция ПолучитьWSПроксиКорреспондента(УзелИнформационнойБазы, СтрокаСообщенияОбОшибке = "") Экспорт @@ -107,7 +107,7 @@ // СтрокаСообщенияОбОшибке - Строка - Текст сообщения об ошибке. // // Возвращаемое значение: -// WSПрокси. +// WSПрокси - . // Функция ПолучитьWSПроксиКорреспондента_2_0_1_6(УзелИнформационнойБазы, СтрокаСообщенияОбОшибке = "") Экспорт diff --git a/SSL/src/CommonModules/ОбменДаннымиВызовСервера/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиВызовСервера/Module.bsl index 17e47c6f7..bdf94e4da 100644 --- a/SSL/src/CommonModules/ОбменДаннымиВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиВызовСервера/Module.bsl @@ -251,7 +251,7 @@ // УзелИнформационнойБазы - ПланОбменаСсылка - ссылка на анализируемый узел плана обмена. // // Возвращаемое значение: -// Массив, содержащий полные имена объектов метаданных. +// Массив - , содержащий полные имена объектов метаданных. // Функция ИменаМетаданныхНеВыгружаемыхОбъектовУзла(Знач УзелИнформационнойБазы) Экспорт Результат = Новый Массив; @@ -274,7 +274,7 @@ // который надо проверить является он главным или нет. // // Возвращаемое значение: -// Булево. +// Булево - // Функция УзелЯвляетсяГлавным(Знач УзелИнформационнойБазы) Экспорт diff --git a/SSL/src/CommonModules/ОбменДаннымиКлиент/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиКлиент/Module.bsl index 17390b0c5..0356ef84a 100644 --- a/SSL/src/CommonModules/ОбменДаннымиКлиент/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиКлиент/Module.bsl @@ -534,6 +534,32 @@ КонецПроцедуры +// Запускает получение файла с сервера интерактивно, без расширения для работы с файлами. +// +// Параметры: +// ПолучаемыйФайл - Структура - Описание файла для получения. Содержит свойства Имя и Хранение. +// ПараметрыДиалога - Структура - Необязательные дополнительные параметры диалога выбора файлов. +// +Процедура ВыбратьИСохранитьФайлНаКлиенте(Знач ПолучаемыйФайл, Знач ПараметрыДиалога = Неопределено) Экспорт + + ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("ПолучаемыйФайл", ПолучаемыйФайл); + ДополнительныеПараметры.Вставить("ПараметрыДиалога", ПараметрыДиалога); + + ОповещениеПодключенияРасширенияРаботыСФайлами = Новый ОписаниеОповещения( + "ВыбратьИСохранитьФайлНаКлиентеПослеПодключенияРасширенияРаботыСФайлами", + ЭтотОбъект, ДополнительныеПараметры); + + НачатьПодключениеРасширенияРаботыСФайлами(ОповещениеПодключенияРасширенияРаботыСФайлами); + +КонецПроцедуры + +Процедура ОткрытьНастройкиСинхронизацииДанных() Экспорт + + ОткрытьФорму("ОбщаяФорма.СинхронизацияДанных"); + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -745,7 +771,7 @@ УстановитьЗначенияСтруктурыПоУмолчанию(ПараметрыДиалога, УмолчанияДиалога); - ТекстПредупреждения = НСтр("ru = 'Для данной операции необходимо установить расширение для веб-клиента 1С:Предприятие.'"); + ТекстПредупреждения = НСтр("ru = 'Для данной операции необходимо установить расширение для работы с 1С:Предприятием.'"); ДополнительныеПараметры = Новый Структура; ДополнительныеПараметры.Вставить("Объект", Объект); @@ -827,7 +853,7 @@ УстановитьЗначенияСтруктурыПоУмолчанию(ПараметрыДиалога, УмолчанияДиалога); - ТекстПредупреждения = НСтр("ru = 'Для данной операции необходимо установить расширение для веб-клиента 1С:Предприятие.'"); + ТекстПредупреждения = НСтр("ru = 'Для данной операции необходимо установить расширение для работы с 1С:Предприятием.'"); ДополнительныеПараметры = Новый Структура; ДополнительныеПараметры.Вставить("Объект", Объект); @@ -1006,26 +1032,6 @@ КонецПроцедуры -// Запускает получение файла с сервера интерактивно, без расширения для работы с файлами. -// -// Параметры: -// ПолучаемыйФайл - Структура - Описание файла для получения. Содержит свойства Имя и Хранение. -// ПараметрыДиалога - Структура - Необязательные дополнительные параметры диалога выбора файлов. -// -Процедура ВыбратьИСохранитьФайлНаКлиенте(Знач ПолучаемыйФайл, Знач ПараметрыДиалога = Неопределено) Экспорт - - ДополнительныеПараметры = Новый Структура; - ДополнительныеПараметры.Вставить("ПолучаемыйФайл", ПолучаемыйФайл); - ДополнительныеПараметры.Вставить("ПараметрыДиалога", ПараметрыДиалога); - - ОповещениеПодключенияРасширенияРаботыСФайлами = Новый ОписаниеОповещения( - "ВыбратьИСохранитьФайлНаКлиентеПослеПодключенияРасширенияРаботыСФайлами", - ЭтотОбъект, ДополнительныеПараметры); - - НачатьПодключениеРасширенияРаботыСФайлами(ОповещениеПодключенияРасширенияРаботыСФайлами); - -КонецПроцедуры - // Продолжение процедуры (см. выше). // Процедура ВыбратьИСохранитьФайлНаКлиентеПослеПодключенияРасширенияРаботыСФайлами(Подключено, ДополнительныеПараметры) Экспорт @@ -1332,7 +1338,7 @@ Функция ОткрытьФормуДополненияВыгрузкиВсеДокументы(Знач ДополнениеВыгрузки, Знач Владелец=Неопределено, Знач Уникальность=Неопределено, Знач Окно=Неопределено) Экспорт ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("Заголовок", НСтр("ru='Добавление документов для отправки'") ); + ПараметрыФормы.Вставить("Заголовок", НСтр("ru = 'Добавление документов для отправки'") ); ПараметрыФормы.Вставить("ДействиеВыбора", 1); ПараметрыФормы.Вставить("ВыборПериода", Истина); diff --git a/SSL/src/CommonModules/ОбменДаннымиПовтИсп/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиПовтИсп/Module.bsl index 3a249eadd..8c413c936 100644 --- a/SSL/src/CommonModules/ОбменДаннымиПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиПовтИсп/Module.bsl @@ -30,7 +30,7 @@ КонецФункции -// Устарела. Следует использовать новую (см. ОбменДаннымиПовтИсп.УзелПланаОбменаПоКоду). +// Устарела. Следует использовать новую (см. ОбменДаннымиСервер.УзелПланаОбменаПоКоду). // Функция НайтиУзелПланаОбменаПоКоду(ИмяПланаОбмена, КодУзла) Экспорт ТекстЗапроса = @@ -78,7 +78,7 @@ // которого был получен объект. // // Возвращаемое значение: -// Булево. Истина - план обмена используется, Ложь - нет. +// Булево - Истина - план обмена используется, Ложь - нет. // Функция ОбменДаннымиВключен(Знач ИмяПланаОбмена, Знач Отправитель = Неопределено) Экспорт @@ -186,15 +186,15 @@ КонецФункции // Определяет, используется ли план обмена, идентифицируемый именем, в модели сервиса. -// Чтобы дать возможность это определить, все планы обмена на уровне модуля менеджера -// определяют функцию ПланОбменаИспользуетсяВМоделиСервиса(), +// Чтобы дать возможность это определить, все планы обмена на уровне модуля менеджера +// определяют функцию ПланОбменаИспользуетсяВМоделиСервиса(), // явно возвращающую значение Истина или Ложь. // // Параметры: // ИмяПланаОбмена - Строка. // // Возвращаемое значение: -// Булево. +// Булево - // Функция ПланОбменаИспользуетсяВМоделиСервиса(Знач ИмяПланаОбмена) Экспорт @@ -339,9 +339,9 @@ // Параметры: // ИмяПланаОбмена - Строка - имя плана обмена, как оно задано в конфигураторе. // ИмяМакета - Строка - имя макета, наличие которого следует определить. -// +// // Возвращаемое значение: -// Истина - план обмена содержит заданный макет, иначе Ложь. +// Булево - Истина - план обмена содержит заданный макет, иначе Ложь. // Функция ЕстьМакетПланаОбмена(Знач ИмяПланаОбмена, Знач ИмяМакета) Экспорт @@ -353,9 +353,9 @@ // // Параметры: // ИмяПланаОбмена - Строка - имя плана обмена, как оно задано в конфигураторе. -// +// // Возвращаемое значение: -// Истина - план обмена принадлежит плану обмена РИБ, иначе Ложь. +// Булево - Истина - план обмена принадлежит плану обмена РИБ, иначе Ложь. // Функция ЭтоПланОбменаРаспределеннойИнформационнойБазы(ИмяПланаОбмена) Экспорт @@ -406,14 +406,6 @@ КонецФункции -// См. ОбменДаннымиСервер.УзелПланаОбменаПоКоду. -// -Функция УзелПланаОбменаПоКоду(ИмяПланаОбмена, КодУзла) Экспорт - - Возврат ОбменДаннымиСервер.УзелПланаОбменаПоКоду(ИмяПланаОбмена, КодУзла); - -КонецФункции - // Получает имя плана обмена как объекта метаданного для заданного узла. // // Параметры: @@ -497,58 +489,6 @@ КонецФункции -// Возвращает таблицу состава узла (только ссылочные типы). -// -// Параметры: -// ИмяПланаОбмена - Строка - анализируемый план обмена. -// Периодические - флаг того, что надо включать в результат объекты с датой (документы и т.п.). -// Справочные - флаг того, что надо включать в результат нормативно-справочные объекты. -// -// Возвращаемое значение: -// ТаблицаЗначений - таблица с колонками: -// * ПолноеИмяМетаданных - Строка - полное имя метаданных (имя таблицы для запроса). -// * ПредставлениеСписка - Строка - представление списка для таблицы. -// * Представление - Строка - представление объекта для таблицы. -// * ИндексКартинки - Число - индекс картинки согласно "БиблиотекаКартинок.КоллекцияОбъектыМетаданных". -// * Тип - Тип - соответствующий тип. -// * ВыборПериода - Булево - флаг того, что к объекту можно применить выбор по периода. -// -Функция СоставПланаОбмена(ИмяПланаОбмена, Периодические = Истина, Справочные = Истина) Экспорт - - ТаблицаРезультата = Новый ТаблицаЗначений; - Для Каждого КлючЗначение Из (Новый Структура("ПолноеИмяМетаданных, Представление, ПредставлениеСписка, ИндексКартинки, Тип, ВыборПериода")) Цикл - ТаблицаРезультата.Колонки.Добавить(КлючЗначение.Ключ); - КонецЦикла; - Для Каждого КлючЗначение Из (Новый Структура("ПолноеИмяМетаданных, Представление, ПредставлениеСписка, Тип")) Цикл - ТаблицаРезультата.Индексы.Добавить(КлючЗначение.Ключ); - КонецЦикла; - - СоставПланаОбмена = Метаданные.ПланыОбмена.Найти(ИмяПланаОбмена).Состав; - Для Каждого ЭлементСостава Из СоставПланаОбмена Цикл - - МетаданныеОбъекта = ЭлементСостава.Метаданные; - Описание = ОписаниеОбъектаМетаданных(МетаданныеОбъекта); - Если Описание.ИндексКартинки >= 0 Тогда - Если Не Периодические И Описание.Периодический Тогда - Продолжить; - ИначеЕсли Не Справочные И Описание.Справочный Тогда - Продолжить; - КонецЕсли; - - Строка = ТаблицаРезультата.Добавить(); - ЗаполнитьЗначенияСвойств(Строка, Описание); - Строка.ВыборПериода = Описание.Периодический; - Строка.ПолноеИмяМетаданных = МетаданныеОбъекта.ПолноеИмя(); - Строка.ПредставлениеСписка = ОбменДаннымиСервер.ПредставлениеСпискаОбъектов(МетаданныеОбъекта); - Строка.Представление = ОбменДаннымиСервер.ПредставлениеОбъекта(МетаданныеОбъекта); - КонецЕсли; - КонецЦикла; - - ТаблицаРезультата.Сортировать("ПредставлениеСписка"); - Возврат ТаблицаРезультата; - -КонецФункции - #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -561,9 +501,9 @@ // Параметры: // ИмяПланаОбмена - Строка - имя плана обмена как оно задано в конфигураторе, // для которого необходимо получить правила регистрации. -// +// // Возвращаемое значение: -// Таблица значений - таблица правил регистрации для текущего плана обмена. +// ТаблицаЗначений - таблица правил регистрации для текущего плана обмена. // Функция ПравилаРегистрацииОбъектовПланаОбмена(Знач ИмяПланаОбмена) Экспорт @@ -578,9 +518,9 @@ // ИмяПланаОбмена - Строка - имя плана обмена как оно задано в конфигураторе. // ПолноеИмяОбъекта - Строка - полное имя объекта метаданных, // для которого необходимо получить правила регистрации. -// +// // Возвращаемое значение: -// Таблица значений - таблица правил регистрации объекта по заданному плану обмена. +// ТаблицаЗначений - таблица правил регистрации объекта по заданному плану обмена. // Функция ПравилаРегистрацииОбъекта(Знач ИмяПланаОбмена, Знач ПолноеИмяОбъекта) Экспорт @@ -596,9 +536,9 @@ // ИмяПланаОбмена - Строка - имя плана обмена как оно задано в конфигураторе. // ПолноеИмяОбъекта - Строка - полное имя объекта метаданных, // для которого необходимо определить признак наличия правил регистрации. -// +// // Возвращаемое значение: -// Истина - правила регистрации для объекта существуют; Ложь - нет. +// Булево - Истина - правила регистрации для объекта существуют; Ложь - нет. // Функция ПравилаРегистрацииОбъектаСуществуют(Знач ИмяПланаОбмена, Знач ПолноеИмяОбъекта) Экспорт @@ -614,7 +554,7 @@ // ПолноеИмяОбъекта - Строка - полное имя объекта метаданных, для которого требуется получить признак авторегистрации. // // Возвращаемое значение: -// Истина - объект метаданных имеет признак авторегистрации "Разрешена" в составе плана обмена; +// Булево - Истина - объект метаданных имеет признак авторегистрации "Разрешена" в составе плана обмена; // Ложь - объект метаданных имеет признак авторегистрации "Запрещена" в составе плана обмена // или объект метаданных не входит в состав плана обмена. // @@ -634,9 +574,9 @@ // Параметры: // ИмяПланаОбмена - Строка - имя плана обмена, как оно задано в конфигураторе. // ПолноеИмяОбъекта - Строка - полное имя объекта метаданных, для которого требуется получить признак. -// +// // Возвращаемое значение: -// Истина - объект входит в состав плана обмена; Ложь - не входит. +// Булево - Истина - объект входит в состав плана обмена; Ложь - не входит. // Функция ПланОбменаСодержитОбъект(Знач ИмяПланаОбмена, Знач ПолноеИмяОбъекта) Экспорт @@ -790,9 +730,9 @@ // // Параметры: // Нет. -// +// // Возвращаемое значение: -// Таблица значений - таблица реквизитов регистрации для всех объектов метаданных. +// ТаблицаЗначений - таблица реквизитов регистрации для всех объектов метаданных. // Функция ПолучитьПравилаВыборочнойРегистрацииОбъектовПС() Экспорт @@ -820,9 +760,9 @@ // // Параметры: // УзелИнформационнойБазы - ПланОбменаСсылка - узел плана обмена, для которого требуется получить значение функции. -// +// // Возвращаемое значение: -// Истина - узел принадлежит плану обмена РИБ, иначе Ложь. +// Булево - Истина - узел принадлежит плану обмена РИБ, иначе Ложь. // Функция ЭтоУзелРаспределеннойИнформационнойБазы(Знач УзелИнформационнойБазы) Экспорт @@ -834,9 +774,9 @@ // // Параметры: // ИмяПланаОбмена - Строка - имя плана обмена, для которого требуется получить значение функции. -// +// // Возвращаемое значение: -// Истина - узел принадлежит плану обмена стандартного обмена, иначе Ложь. +// Булево - Истина - узел принадлежит плану обмена стандартного обмена, иначе Ложь. // Функция ЭтоУзелСтандартногоОбменаДанными(ИмяПланаОбмена) Экспорт @@ -853,9 +793,9 @@ // // Параметры: // УзелИнформационнойБазы - ПланОбменаСсылка - узел плана обмена, для которого требуется получить значение функции. -// +// // Возвращаемое значение: -// Истина - узел принадлежит плану обмена универсального обмена, иначе Ложь. +// Булево - Истина - узел принадлежит плану обмена универсального обмена, иначе Ложь. // Функция ЭтоУзелУниверсальногоОбменаДанными(УзелИнформационнойБазы) Экспорт @@ -873,9 +813,9 @@ // Параметры: // УзелИнформационнойБазы - ПланОбменаСсылка, ПланОбменаОбъект - узел плана обмена, для которого требуется получить // значение функции. -// +// // Возвращаемое значение: -// Истина - узел принадлежит плану обмена, использующего функционал БСП, иначе Ложь. +// Булево - Истина - узел принадлежит плану обмена, использующего функционал БСП, иначе Ложь. // Функция ЭтоУзелОбменаДаннымиБСП(Знач УзелИнформационнойБазы) Экспорт @@ -887,9 +827,9 @@ // // Параметры: // УзелИнформационнойБазы - ПланОбменаСсылка - узел плана обмена, для которого требуется получить значение функции. -// +// // Возвращаемое значение: -// Истина - узел принадлежит разделенному плану обмена, использующего функционал БСП, иначе Ложь. +// Булево - Истина - узел принадлежит разделенному плану обмена, использующего функционал БСП, иначе Ложь. // Функция ЭтоУзелРазделенногоОбменаДаннымиБСП(УзелИнформационнойБазы) Экспорт @@ -901,9 +841,9 @@ // // Параметры: // УзелИнформационнойБазы - ПланОбменаСсылка - узел плана обмена, для которого требуется получить значение функции. -// +// // Возвращаемое значение: -// Истина - узел принадлежит плану обмена сообщениями, иначе Ложь. +// Булево - Истина - узел принадлежит плану обмена сообщениями, иначе Ложь. // Функция ЭтоУзелОбменаСообщениями(УзелИнформационнойБазы) Экспорт @@ -1174,6 +1114,20 @@ КонецЕсли; + // Обмен через электронную почту не поддерживается: + // - когда недоступна подсистема работы с почтовыми сообщениями; + // - когда в конфигурации недоступно получение писем. + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСПочтовымиСообщениями") Тогда + МодульРаботаСПочтовымиСообщениямиСлужебный = ОбщегоНазначения.ОбщийМодуль("РаботаСПочтовымиСообщениямиСлужебный"); + Если Не МодульРаботаСПочтовымиСообщениямиСлужебный.ДоступноПолучениеПисем() Тогда + ОбщегоНазначенияКлиентСервер.УдалитьЗначениеИзМассива(Результат, + Перечисления.ВидыТранспортаСообщенийОбмена.EMAIL); + КонецЕсли; + Иначе + ОбщегоНазначенияКлиентСервер.УдалитьЗначениеИзМассива(Результат, + Перечисления.ВидыТранспортаСообщенийОбмена.EMAIL); + КонецЕсли; + Возврат Результат; КонецФункции @@ -1228,7 +1182,7 @@ // ИмяПланаОбмена - Строка. Имя плана обмена, для которого необходимо вычислить признак использования. // // Возвращаемое значение: -// Истина - доступно использование плана обмена. +// Булево - Истина - доступно использование плана обмена. // Ложь - использование не доступно. // Функция ДоступноИспользованиеПланаОбмена(Знач ИмяПланаОбмена) Экспорт @@ -1401,6 +1355,58 @@ Возврат СписокПравил; КонецФункции +// Возвращает таблицу состава узла (только ссылочные типы). +// +// Параметры: +// ИмяПланаОбмена - Строка - анализируемый план обмена. +// Периодические - флаг того, что надо включать в результат объекты с датой (документы и т.п.). +// Справочные - флаг того, что надо включать в результат нормативно-справочные объекты. +// +// Возвращаемое значение: +// ТаблицаЗначений - таблица с колонками: +// * ПолноеИмяМетаданных - Строка - полное имя метаданных (имя таблицы для запроса). +// * ПредставлениеСписка - Строка - представление списка для таблицы. +// * Представление - Строка - представление объекта для таблицы. +// * ИндексКартинки - Число - индекс картинки согласно "БиблиотекаКартинок.КоллекцияОбъектыМетаданных". +// * Тип - Тип - соответствующий тип. +// * ВыборПериода - Булево - флаг того, что к объекту можно применить выбор по периода. +// +Функция СоставПланаОбмена(ИмяПланаОбмена, Периодические = Истина, Справочные = Истина) Экспорт + + ТаблицаРезультата = Новый ТаблицаЗначений; + Для Каждого КлючЗначение Из (Новый Структура("ПолноеИмяМетаданных, Представление, ПредставлениеСписка, ИндексКартинки, Тип, ВыборПериода")) Цикл + ТаблицаРезультата.Колонки.Добавить(КлючЗначение.Ключ); + КонецЦикла; + Для Каждого КлючЗначение Из (Новый Структура("ПолноеИмяМетаданных, Представление, ПредставлениеСписка, Тип")) Цикл + ТаблицаРезультата.Индексы.Добавить(КлючЗначение.Ключ); + КонецЦикла; + + СоставПланаОбмена = Метаданные.ПланыОбмена.Найти(ИмяПланаОбмена).Состав; + Для Каждого ЭлементСостава Из СоставПланаОбмена Цикл + + МетаданныеОбъекта = ЭлементСостава.Метаданные; + Описание = ОписаниеОбъектаМетаданных(МетаданныеОбъекта); + Если Описание.ИндексКартинки >= 0 Тогда + Если Не Периодические И Описание.Периодический Тогда + Продолжить; + ИначеЕсли Не Справочные И Описание.Справочный Тогда + Продолжить; + КонецЕсли; + + Строка = ТаблицаРезультата.Добавить(); + ЗаполнитьЗначенияСвойств(Строка, Описание); + Строка.ВыборПериода = Описание.Периодический; + Строка.ПолноеИмяМетаданных = МетаданныеОбъекта.ПолноеИмя(); + Строка.ПредставлениеСписка = ОбменДаннымиСервер.ПредставлениеСпискаОбъектов(МетаданныеОбъекта); + Строка.Представление = ОбменДаннымиСервер.ПредставлениеОбъекта(МетаданныеОбъекта); + КонецЕсли; + КонецЦикла; + + ТаблицаРезультата.Сортировать("ПредставлениеСписка"); + Возврат ТаблицаРезультата; + +КонецФункции + Функция ОписаниеОбъектаМетаданных(Мета) Результат = Новый Структура("ИндексКартинки, Периодический, Справочный, Тип", -1, Ложь, Ложь); diff --git a/SSL/src/CommonModules/ОбменДаннымиСервер/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиСервер/Module.bsl index 218b11314..cd14be1e4 100644 --- a/SSL/src/CommonModules/ОбменДаннымиСервер/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиСервер/Module.bsl @@ -255,11 +255,25 @@ Если ПараметрыРезервнойКопии.ВосстановленаРезервнаяКопия Тогда - // Устанавливаем в качестве номера отправленного сообщения в этой базе номер принятого сообщения в корреспонденте. - ОбъектУзла = ПараметрыРезервнойКопии.Отправитель.ПолучитьОбъект(); - ОбъектУзла.НомерОтправленного = ПараметрыРезервнойКопии.НомерПринятого; - ОбъектУзла.ОбменДанными.Загрузка = Истина; - ОбъектУзла.Записать(); + НачатьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить(ОбщегоНазначения.ИмяТаблицыПоСсылке(ПараметрыРезервнойКопии.Отправитель)); + ЭлементБлокировки.УстановитьЗначение("Ссылка", ПараметрыРезервнойКопии.Отправитель); + Блокировка.Заблокировать(); + + ЗаблокироватьДанныеДляРедактирования(ПараметрыРезервнойКопии.Отправитель); + ОтправительОбъект = ПараметрыРезервнойКопии.Отправитель.ПолучитьОбъект(); + + ОтправительОбъект.НомерОтправленного = ПараметрыРезервнойКопии.НомерПринятого; + ОтправительОбъект.ОбменДанными.Загрузка = Истина; + ОтправительОбъект.Записать(); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; КонецЕсли; @@ -849,6 +863,44 @@ КонецФункции +// Точка входа для выполнения итерации обмена данными (загрузки и выгрузки) с внешней системой по узлу плана обмена. +// +// Параметры: +// Корреспондент - ПланОбменаСсылка - узел плана обмена, соответствующий внешней системе. +// ПараметрыОбмена - Структура - должна содержать следующие параметры: +// * ВыполнятьЗагрузку - Булево - флаг необходимости выполнять загрузку данных. +// * ВыполнятьОтправкуНастроек - Булево - флаг необходимости выполнять отправку настроек XDTO. +// ФлагОшибка - Булево - Истина, в случае возникновения ошибки при выполнении обмена. +// Подробная информация об ошибке фиксируется в журнале регистрации. +// +Процедура ВыполнитьОбменДаннымиСВнешнейСистемой(Корреспондент, ПараметрыОбмена, ФлагОшибка) Экспорт + + ДополнительныеПараметры = Новый Структура; + + ДействиеЗагрузка = Перечисления.ДействияПриОбмене.ЗагрузкаДанных; + ДействиеВыгрузка = Перечисления.ДействияПриОбмене.ВыгрузкаДанных; + + ПроверитьВозможностьВыполненияОбменов(); + + ПроверитьИспользованиеОбменаДанными(); + + ТолькоПараметры = Ложь; + ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.ВнешняяСистема; + + ФлагОшибка = Ложь; + + Если ПараметрыОбмена.ВыполнятьЗагрузку Тогда + ВыполнитьДействиеОбменаДляУзлаИнформационнойБазы(ФлагОшибка, Корреспондент, + ДействиеЗагрузка, ВидТранспортаСообщенийОбмена, ТолькоПараметры, ДополнительныеПараметры); + КонецЕсли; + + Если ПараметрыОбмена.ВыполнятьОтправкуНастроек Тогда + ВыполнитьДействиеОбменаДляУзлаИнформационнойБазы(ФлагОшибка, Корреспондент, + ДействиеВыгрузка, ВидТранспортаСообщенийОбмена, ТолькоПараметры, ДополнительныеПараметры); + КонецЕсли; + +КонецПроцедуры + #Область НастройкиПодключенияКВнешнейСистеме // Сохраняет настройки подключения для обмена с внешней системой через EnterpriseData. @@ -951,13 +1003,19 @@ КонецЕсли; Если ЗначенияДляОбновления.Количество() > 0 Тогда + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить(ОбщегоНазначения.ИмяТаблицыПоСсылке(Корреспондент)); + ЭлементБлокировки.УстановитьЗначение("Ссылка", Корреспондент); + Блокировка.Заблокировать(); + + ЗаблокироватьДанныеДляРедактирования(Корреспондент); КорреспондентОбъект = Корреспондент.ПолучитьОбъект(); Для Каждого ЗначениеДляОбновления Из ЗначенияДляОбновления Цикл КорреспондентОбъект[ЗначениеДляОбновления.Ключ] = ЗначениеДляОбновления.Значение; КонецЦикла; - - КорреспондентОбъект.ОбменДанными.Загрузка = Истина; + + КорреспондентОбъект.ОбменДанными.Загрузка = Истина; КорреспондентОбъект.Записать(); КонецЕсли; Иначе @@ -1509,7 +1567,7 @@ #Область УстаревшиеПроцедурыИФункции -// Выполняет добавление информации об установленном в константе количестве элементов в транзакции +// Устарела. Выполняет добавление информации об установленном в константе количестве элементов в транзакции // в структуру, содержащую параметры транспорта сообщений обмена. // // Параметры: @@ -1517,12 +1575,11 @@ // Процедура ДополнитьНастройкиТранспортаКоличествомЭлементовВТранзакции(Результат) Экспорт - Результат.Вставить("КоличествоЭлементовВТранзакцииВыгрузкиДанных", КоличествоЭлементовВТранзакцииВыгрузкиДанных()); - Результат.Вставить("КоличествоЭлементовВТранзакцииЗагрузкиДанных", КоличествоЭлементовВТранзакцииЗагрузкиДанных()); + ОбменДаннымиСлужебный.ДополнитьНастройкиТранспортаКоличествомЭлементовВТранзакции(Результат); КонецПроцедуры -// Возвращает номер области по коду узла плана обмена (обмен сообщениями). +// Устарела. Возвращает номер области по коду узла плана обмена (обмен сообщениями). // // Параметры: // КодУзла - Строка - Код узла плана обмена. @@ -1532,16 +1589,11 @@ // Функция НомерОбластиИзКодаУзлаПланаОбмена(Знач КодУзла) Экспорт - Если ТипЗнч(КодУзла) <> Тип("Строка") Тогда - ВызватьИсключение НСтр("ru = 'Неправильный тип параметра номер [1].'"); - КонецЕсли; + Возврат ОбменДаннымиСлужебный.НомерОбластиИзКодаУзлаПланаОбмена(КодУзла); - Результат = СтрЗаменить(КодУзла, "S0", ""); - - Возврат Число(Результат); КонецФункции -// Возвращает данные первой записи результата запроса в виде структуры. +// Устарела. Возвращает данные первой записи результата запроса в виде структуры. // // Параметры: // РезультатЗапроса - РезультатЗапроса - Результат запроса, содержащий данные для обработки. @@ -1551,21 +1603,8 @@ // Функция РезультатЗапросаВСтруктуру(Знач РезультатЗапроса) Экспорт - Результат = Новый Структура; - Для Каждого Колонка Из РезультатЗапроса.Колонки Цикл - Результат.Вставить(Колонка.Имя); - КонецЦикла; + Возврат ОбменДаннымиСлужебный.РезультатЗапросаВСтруктуру(РезультатЗапроса); - Если РезультатЗапроса.Пустой() Тогда - Возврат Результат; - КонецЕсли; - - Выборка = РезультатЗапроса.Выбрать(); - Выборка.Следующий(); - - ЗаполнитьЗначенияСвойств(Результат, Выборка); - - Возврат Результат; КонецФункции // Устарела. Следует использовать функцию ЗначениеНастройкиПланаОбмена, @@ -1603,44 +1642,6 @@ #КонецОбласти -// Точка входа для выполнения итерации обмена данными (загрузки и выгрузки) с внешней системой по узлу плана обмена. -// -// Параметры: -// Корреспондент - ПланОбменаСсылка - узел плана обмена, соответствующий внешней системе. -// ПараметрыОбмена - Структура - должна содержать следующие параметры: -// * ВыполнятьЗагрузку - Булево - флаг необходимости выполнять загрузку данных. -// * ВыполнятьОтправкуНастроек - Булево - флаг необходимости выполнять отправку настроек XDTO. -// ФлагОшибка - Булево - Истина, в случае возникновения ошибки при выполнении обмена. -// Подробная информация об ошибке фиксируется в журнале регистрации. -// -Процедура ВыполнитьОбменДаннымиСВнешнейСистемой(Корреспондент, ПараметрыОбмена, ФлагОшибка) Экспорт - - ДополнительныеПараметры = Новый Структура; - - ДействиеЗагрузка = Перечисления.ДействияПриОбмене.ЗагрузкаДанных; - ДействиеВыгрузка = Перечисления.ДействияПриОбмене.ВыгрузкаДанных; - - ПроверитьВозможностьВыполненияОбменов(); - - ПроверитьИспользованиеОбменаДанными(); - - ТолькоПараметры = Ложь; - ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.ВнешняяСистема; - - ФлагОшибка = Ложь; - - Если ПараметрыОбмена.ВыполнятьЗагрузку Тогда - ВыполнитьДействиеОбменаДляУзлаИнформационнойБазы(ФлагОшибка, Корреспондент, - ДействиеЗагрузка, ВидТранспортаСообщенийОбмена, ТолькоПараметры, ДополнительныеПараметры); - КонецЕсли; - - Если ПараметрыОбмена.ВыполнятьОтправкуНастроек Тогда - ВыполнитьДействиеОбменаДляУзлаИнформационнойБазы(ФлагОшибка, Корреспондент, - ДействиеВыгрузка, ВидТранспортаСообщенийОбмена, ТолькоПараметры, ДополнительныеПараметры); - КонецЕсли; - -КонецПроцедуры - #КонецОбласти #Область СлужебныйПрограммныйИнтерфейс @@ -1701,6 +1702,19 @@ РегистрыСведений.УдалитьНастройкиТранспортаОбмена.ПеренестиНастройкиТранспортаОбменаДаннымиКорреспондента(УзелИнформационнойБазы); ВидТранспорта = РегистрыСведений.НастройкиТранспортаОбменаДанными.ВидТранспортаСообщенийОбменаПоУмолчанию(УзелИнформационнойБазы); + ИмяПараметра = "СтандартныеПодсистемы.ОбменДанными.ПравилаРегистрации." + + ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(УзелИнформационнойБазы); + ПравилаРегистрацииОбновлены = СтандартныеПодсистемыСервер.ПараметрРаботыПрограммы(ИмяПараметра); + Если ПравилаРегистрацииОбновлены = Неопределено Тогда + ВыполнитьОбновлениеПравилДляОбменаДанными(); + КонецЕсли; + ПравилаРегистрацииОбновлены = СтандартныеПодсистемыСервер.ПараметрРаботыПрограммы(ИмяПараметра); + Если ПравилаРегистрацииОбновлены = Неопределено Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не выполнено обновление кэша правил регистрации данных для плана обмена ""%1""'"), + ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(УзелИнформационнойБазы)); + КонецЕсли; + // Загрузка только параметров работы программы. ПараметрыОбмена = ПараметрыОбмена(); ПараметрыОбмена.ВидТранспортаСообщенийОбмена = ВидТранспорта; @@ -2125,7 +2139,7 @@ // Для сценария, когда в конфигурации был удален или переименован план обмена. УдалитьНеактуальныеЗаписиВРегистреПравилДляОбменаДанными(); - Если Не ПолучитьФункциональнуюОпцию("ИспользоватьСинхронизациюДанных") + Если Не Константы.ИспользоватьСинхронизациюДанных.Получить() И Не ОбщегоНазначения.РазделениеВключено() Тогда Возврат; КонецЕсли; @@ -3216,7 +3230,7 @@ КодУзла = СокрЛП(ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ПланыОбмена[ИмяПланаОбмена].ЭтотУзел(), "Код")); Если ОбменДаннымиПовтИсп.ЭтоУзелРазделенногоОбменаДаннымиБСП(УзелОбмена) Тогда - + ПрефиксыУзла = РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз.ПрефиксыУзла(УзелОбмена); ПрефиксЭтогоУзла = СокрЛП(ПрефиксыУзла.Префикс); @@ -3629,14 +3643,30 @@ ПроверитьВозможностьАдминистрированияОбменов(); - ОбъектУзла = УзелИнформационнойБазы.ПолучитьОбъект(); - Если ОбъектУзла = Неопределено Тогда + Если Не ОбщегоНазначения.СсылкаСуществует(УзелИнформационнойБазы) Тогда Возврат; КонецЕсли; УстановитьПривилегированныйРежим(Истина); - ОбщегоНазначения.УдалитьДанныеИзБезопасногоХранилища(УзелИнформационнойБазы); - ОбъектУзла.Удалить(); + + НачатьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить(ОбщегоНазначения.ИмяТаблицыПоСсылке(УзелИнформационнойБазы)); + ЭлементБлокировки.УстановитьЗначение("Ссылка", УзелИнформационнойБазы); + Блокировка.Заблокировать(); + + ОбщегоНазначения.УдалитьДанныеИзБезопасногоХранилища(УзелИнформационнойБазы); + + ЗаблокироватьДанныеДляРедактирования(УзелИнформационнойБазы); + ОбъектУзла = УзелИнформационнойБазы.ПолучитьОбъект(); + ОбъектУзла.Удалить(); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; КонецПроцедуры @@ -3923,10 +3953,12 @@ // См. РаботаВМоделиСервисаПереопределяемый.ПриВключенииРазделенияПоОбластямДанных. Процедура ПриВключенииРазделенияПоОбластямДанных() Экспорт - Если НЕ ПолучитьФункциональнуюОпцию("ИспользоватьСинхронизациюДанных") Тогда + Если Не Константы.ИспользоватьСинхронизациюДанных.Получить() Тогда Константы.ИспользоватьСинхронизациюДанных.Установить(Истина); КонецЕсли; + ВыполнитьОбновлениеПравилДляОбменаДанными(); + КонецПроцедуры // См. ОбщегоНазначенияПереопределяемый.ПриДобавленииОбработчиковУстановкиПараметровСеанса. @@ -4006,11 +4038,10 @@ ОписаниеПрофиля = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом").НовоеОписаниеПрофиляГруппДоступа(); ОписаниеПрофиля.Идентификатор = ПрофильДоступаСинхронизацияДанныхСДругимиПрограммами(); ОписаниеПрофиля.Наименование = - НСтр("ru = 'Синхронизация данных с другими программами'", Метаданные.ОсновнойЯзык.КодЯзыка); + НСтр("ru = 'Синхронизация данных с другими программами'", ОбщегоНазначения.КодОсновногоЯзыка()); ОписаниеПрофиля.Описание = НСтр("ru = 'Дополнительно назначается тем пользователям, которым должны быть доступны средства - |для мониторинга и синхронизации данных с другими программами.'", - Метаданные.ОсновнойЯзык.КодЯзыка); + |для мониторинга и синхронизации данных с другими программами.'"); // Основные возможности профиля. РолиПрофиля = СтрРазделить(РолиПрофиляДоступаСинхронизацияДанныхСДругимиПрограммами(), ","); @@ -4080,31 +4111,41 @@ Процедура УстановитьКодыПредопределенныхУзлов() Экспорт - НачатьТранзакцию(); - Попытка + КодИзМоделиСервиса = ""; + Если ОбщегоНазначения.РазделениеВключено() + И ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() + И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменДаннымиВМоделиСервиса") Тогда - КодИзМоделиСервиса = ""; - ВиртуальныеКоды = РегистрыСведений.ПсевдонимыПредопределенныхУзлов.СоздатьНаборЗаписей(); + МодульРаботаВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("РаботаВМоделиСервиса"); + МодульОбменДаннымиВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиВМоделиСервиса"); - Если ОбщегоНазначения.РазделениеВключено() - И ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() - И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменДаннымиВМоделиСервиса") Тогда - - МодульРаботаВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("РаботаВМоделиСервиса"); - МодульОбменДаннымиВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиВМоделиСервиса"); - - КодИзМоделиСервиса = СокрЛП(МодульОбменДаннымиВМоделиСервиса.КодУзлаПланаОбменаВСервисе(МодульРаботаВМоделиСервиса.ЗначениеРазделителяСеанса())); - + КодИзМоделиСервиса = СокрЛП(МодульОбменДаннымиВМоделиСервиса.КодУзлаПланаОбменаВСервисе(МодульРаботаВМоделиСервиса.ЗначениеРазделителяСеанса())); + КонецЕсли; + + КоллекцияУзлов = Новый Массив; + Для Каждого УзелСсылка Из ПредопределенныеУзлыПлановОбменаБСП() Цикл + Если Не ЭтоПланОбменаXDTO(УзелСсылка) Тогда + Продолжить; + ИначеЕсли Не ОбменДаннымиXDTOСервер.ПоддерживаетсяВерсияСИдентификаторомОбменаДанными(УзелСсылка) Тогда + Продолжить; КонецЕсли; - Для Каждого УзелСсылка Из ПредопределенныеУзлыПлановОбменаБСП() Цикл - - Если Не ЭтоПланОбменаXDTO(УзелСсылка) Тогда - Продолжить; - ИначеЕсли Не ОбменДаннымиXDTOСервер.ПоддерживаетсяВерсияСИдентификаторомОбменаДанными(УзелСсылка) Тогда - Продолжить; - КонецЕсли; + КоллекцияУзлов.Добавить(УзелСсылка); + КонецЦикла; + + НачатьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных; + Для Каждого УзелСсылка Из КоллекцияУзлов Цикл + ЭлементБлокировки = Блокировка.Добавить(ОбщегоНазначения.ИмяТаблицыПоСсылке(УзелСсылка)); + ЭлементБлокировки.УстановитьЗначение("Ссылка", УзелСсылка); + КонецЦикла; + Блокировка.Заблокировать(); + + ВиртуальныеКоды = РегистрыСведений.ПсевдонимыПредопределенныхУзлов.СоздатьНаборЗаписей(); + + Для Каждого УзелСсылка Из КоллекцияУзлов Цикл КодПредопределенногоУзла = СокрЛП(ОбщегоНазначения.ЗначениеРеквизитаОбъекта(УзелСсылка, "Код")); Если Не ЗначениеЗаполнено(КодПредопределенногоУзла) @@ -4115,7 +4156,9 @@ УникальныйИдентификаторОбменаДанными = Строка(Новый УникальныйИдентификатор); + ЗаблокироватьДанныеДляРедактирования(УзелСсылка); УзелОбъект = УзелСсылка.ПолучитьОбъект(); + УзелОбъект.Код = УникальныйИдентификаторОбменаДанными; УзелОбъект.ОбменДанными.Загрузка = Истина; УзелОбъект.Записать(); @@ -4152,7 +4195,6 @@ КонецЕсли; ЗафиксироватьТранзакцию(); - Исключение ОтменитьТранзакцию(); ВызватьИсключение; @@ -4312,7 +4354,7 @@ КонецФункции -Процедура ПропуститьПроверкуЗапретаИзменения(Пропустить = Истина) Экспорт +Процедура ПропуститьПроверкуЗапретаИзменения(Пропустить = Истина) Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДатыЗапретаИзменения") Тогда МодульДатыЗапретаИзмененияСлужебный = ОбщегоНазначения.ОбщийМодуль("ДатыЗапретаИзмененияСлужебный"); @@ -4430,6 +4472,198 @@ КонецПроцедуры +#Область ОбщиеПроцедурыМеханизмовКонвертацииДанных + +Процедура ВыполнитьОтложенноеПроведениеДокументов(ДокументыДляОтложенногоПроведения, УзелКорреспондента) Экспорт + + Если ДокументыДляОтложенногоПроведения.Количество() = 0 Тогда + Возврат; // нет документов в очереди + КонецЕсли; + + // Сворачиваем таблицу по уникальным полям. + ДокументыДляОтложенногоПроведения.Свернуть("ДокументСсылка, ДатаДокумента"); + + // Сортируем документы по возрастанию даты документов. + ОбъектСравнения = Новый СравнениеЗначений; + ДокументыДляОтложенногоПроведения.Сортировать("ДатаДокумента, ДокументСсылка", ОбъектСравнения); + + ПропуститьПроверкуЗапретаИзменения(); + + Для Каждого СтрокаТаблицы Из ДокументыДляОтложенногоПроведения Цикл + + Если СтрокаТаблицы.ДокументСсылка.Пустая() Тогда + Продолжить; + КонецЕсли; + + Если Не ОбщегоНазначения.СсылкаСуществует(СтрокаТаблицы.ДокументСсылка) Тогда + Продолжить; + КонецЕсли; + + ВыполнитьПроведениеДокументаПриЗагрузке(УзелКорреспондента, СтрокаТаблицы.ДокументСсылка, Истина); + + КонецЦикла; + + ПропуститьПроверкуЗапретаИзменения(Ложь); + +КонецПроцедуры + +Процедура ВыполнитьПроведениеДокументаПриЗагрузке( + УзелКорреспондента, + ДокументСсылка, + РегистрироватьПроблемыВРезультатахОбмена) Экспорт + + ОписаниеОшибки = ""; + ДокументПроведенУспешно = Ложь; + + НачатьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить(ОбщегоНазначения.ИмяТаблицыПоСсылке(ДокументСсылка)); + ЭлементБлокировки.УстановитьЗначение("Ссылка", ДокументСсылка); + Блокировка.Заблокировать(); + + ЗаблокироватьДанныеДляРедактирования(ДокументСсылка); + Объект = ДокументСсылка.ПолучитьОбъект(); + + // Устанавливаем узел-отправитель для предотвращения регистрации объекта на узле, для которого производим загрузку + // проведение выполняем не в режиме загрузки. + УстановитьОбменДаннымиЗагрузка(Объект, Ложь, Ложь, УзелКорреспондента); + + Объект.ДополнительныеСвойства.Вставить("ОтложенноеПроведение"); + + Если Объект.ПроверитьЗаполнение() Тогда + + // При проведении документа снимаем запрет на выполнение ПРО, + // т.к. ПРО были проигнорированы при обычной записи документа с целью оптимизации скорости загрузки данных. + Если Объект.ДополнительныеСвойства.Свойство("ОтключитьМеханизмРегистрацииОбъектов") Тогда + Объект.ДополнительныеСвойства.Удалить("ОтключитьМеханизмРегистрацииОбъектов"); + КонецЕсли; + + Объект.ДополнительныеСвойства.Вставить("ПропуститьПроверкуЗапретаИзменения"); + + // Выполняем попытку проведения документа. + Объект.Записать(РежимЗаписиДокумента.Проведение); + + ДокументПроведенУспешно = Объект.Проведен; + + КонецЕсли; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + + ОписаниеОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + ДокументПроведенУспешно = Ложь; + + КонецПопытки; + + Если Не ДокументПроведенУспешно Тогда + + ЗарегистрироватьОшибкуПроведенияДокумента( + Объект, УзелКорреспондента, ОписаниеОшибки, РегистрироватьПроблемыВРезультатахОбмена); + + КонецЕсли; + +КонецПроцедуры + +Процедура ВыполнитьОтложеннуюЗаписьОбъектов(ОбъектыДляОтложеннойЗаписи, УзелКорреспондента) Экспорт + + Если ОбъектыДляОтложеннойЗаписи.Количество() = 0 Тогда + Возврат; // Нет объектов в очереди + КонецЕсли; + + ПропуститьПроверкуЗапретаИзменения(); + + Для Каждого ОбъектСоответствия Из ОбъектыДляОтложеннойЗаписи Цикл + + Если ОбъектСоответствия.Ключ.Пустая() Тогда + Продолжить; + КонецЕсли; + + Если Не ОбщегоНазначения.СсылкаСуществует(ОбъектСоответствия.Ключ) Тогда + Продолжить; + КонецЕсли; + + ОписаниеОшибки = ""; + ОбъектЗаписанУспешно = Ложь; + + НачатьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить(ОбщегоНазначения.ИмяТаблицыПоСсылке(ОбъектСоответствия.Ключ)); + ЭлементБлокировки.УстановитьЗначение("Ссылка", ОбъектСоответствия.Ключ); + Блокировка.Заблокировать(); + + ЗаблокироватьДанныеДляРедактирования(ОбъектСоответствия.Ключ); + Объект = ОбъектСоответствия.Ключ.ПолучитьОбъект(); + + // Устанавливаем узел-отправитель для предотвращения регистрации объекта на узле, для которого производим загрузку + // проведение выполняем не в режиме загрузки. + УстановитьОбменДаннымиЗагрузка(Объект, Ложь, Ложь, УзелКорреспондента); + + ДополнительныеСвойства = ОбъектСоответствия.Значение; + + Для Каждого Свойство Из ДополнительныеСвойства Цикл + + Объект.ДополнительныеСвойства.Вставить(Свойство.Ключ, Свойство.Значение); + + КонецЦикла; + + Объект.ДополнительныеСвойства.Вставить("ОтложеннаяЗапись"); + + Если Объект.ПроверитьЗаполнение() Тогда + + // При проведении документа снимаем запрет на выполнение ПРО, + // т.к. ПРО были проигнорированы при обычной записи с целью оптимизации скорости загрузки данных. + Если Объект.ДополнительныеСвойства.Свойство("ОтключитьМеханизмРегистрацииОбъектов") Тогда + Объект.ДополнительныеСвойства.Удалить("ОтключитьМеханизмРегистрацииОбъектов"); + КонецЕсли; + + Объект.ДополнительныеСвойства.Вставить("ПропуститьПроверкуЗапретаИзменения"); + + // Выполняем попытку записи объекта. + СведенияОВерсииОбъекта = Неопределено; + Если Объект.ДополнительныеСвойства.Свойство("СведенияОВерсииОбъекта", СведенияОВерсииОбъекта) Тогда + ОбменДаннымиСобытия.ПриСозданииВерсииОбъекта(Объект, СведенияОВерсииОбъекта, Истина, УзелКорреспондента); + КонецЕсли; + Объект.Записать(); + + ОбъектЗаписанУспешно = Истина; + + Иначе + + ОбъектЗаписанУспешно = Ложь; + + ОписаниеОшибки = НСтр("ru = 'Ошибка проверки заполнения реквизитов'"); + + КонецЕсли; + + ЗафиксироватьТранзакцию(); + + Исключение + + ОтменитьТранзакцию(); + + ОписаниеОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + + ОбъектЗаписанУспешно = Ложь; + + КонецПопытки; + + Если Не ОбъектЗаписанУспешно Тогда + + ЗарегистрироватьОшибкуЗаписиОбъекта(Объект, УзелКорреспондента, ОписаниеОшибки); + + КонецЕсли; + + КонецЦикла; + + ПропуститьПроверкуЗапретаИзменения(Ложь); + +КонецПроцедуры + +#КонецОбласти + #Область ОбновлениеИнформационнойБазы // Удаляет роль НастройкаСинхронизацииДанных из всех профилей, в которые она входит. @@ -5431,7 +5665,7 @@ СтруктураПараметров.Вставить("ИмяПланаОбмена", ""); СтруктураПараметров.Вставить("КодУзлаИнформационнойБазы", ""); СтруктураПараметров.Вставить("СообщениеОбмена", ""); - СтруктураПараметров.Вставить("ДатаНачалаОперации", ""); + СтруктураПараметров.Вставить("ДатаНачалаОперации"); Возврат СтруктураПараметров; @@ -5493,6 +5727,10 @@ // ИНИЦИАЛИЗАЦИЯ ОБМЕНА ДАННЫМИ СтруктураНастроекОбмена = НастройкиОбменаДляУзлаИнформационнойБазы( ПараметрыОбмена.УзелИнформационнойБазы, ПараметрыОбмена.ДействиеПриОбмене, Неопределено, Ложь); + Если ЗначениеЗаполнено(ПараметрыОбмена.ДатаНачалаОперации) Тогда + СтруктураНастроекОбмена.ДатаНачала = ПараметрыОбмена.ДатаНачалаОперации; + КонецЕсли; + ЗафиксироватьНачалоОбменаВРегистреСведений(СтруктураНастроекОбмена); Если СтруктураНастроекОбмена.Отказ Тогда СтрокаСообщенияОбОшибке = НСтр("ru = 'Ошибка при инициализации процесса обмена данными.'"); @@ -5501,9 +5739,6 @@ КонецЕсли; СтруктураНастроекОбмена.РезультатВыполненияОбмена = Неопределено; - Если ПараметрыОбмена.ДатаНачалаОперации <> Неопределено Тогда - СтруктураНастроекОбмена.ДатаНачала = ПараметрыОбмена.ДатаНачалаОперации; - КонецЕсли; СтрокаСообщения = НСтр("ru = 'Начало процесса обмена данными для узла %1'", ОбщегоНазначения.КодОсновногоЯзыка()); СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, СтруктураНастроекОбмена.УзелИнформационнойБазыНаименование); @@ -5644,6 +5879,7 @@ // ИНИЦИАЛИЗАЦИЯ ОБМЕНА ДАННЫМИ СтруктураНастроекОбмена = НастройкиОбменаДляУзлаИнформационнойБазы( УзелИнформационнойБазы, ДействиеПриОбмене, Перечисления.ВидыТранспортаСообщенийОбмена.WS, Ложь); + ЗафиксироватьНачалоОбменаВРегистреСведений(СтруктураНастроекОбмена); Если СтруктураНастроекОбмена.Отказ Тогда // Если настройка содержит ошибки, то обмен не производим; статус "Отменено". @@ -6514,31 +6750,30 @@ Иначе // {Обработчик: ПриВыгрузкеДанных} Начало. Переопределение стандартной обработки выгрузки данных. - СтандартнаяОбработка = Истина; + СтандартнаяОбработка = Истина; КоличествоОбъектовОбработано = 0; Попытка - ОбработчикПриВыгрузкеДанныхБСП(СтандартнаяОбработка, - СтруктураНастроекОбмена.УзелИнформационнойБазы, - ИмяФайлаСообщенияОбмена, - СообщениеОбмена, - СтруктураНастроекОбмена.КоличествоЭлементовВТранзакции, - СтруктураНастроекОбмена.КлючСообщенияЖурналаРегистрации, - КоличествоОбъектовОбработано); - Если СтандартнаяОбработка = Истина Тогда - - КоличествоОбъектовОбработано = 0; - - ОбработчикПриВыгрузкеДанных(СтандартнаяОбработка, - СтруктураНастроекОбмена.УзелИнформационнойБазы, - ИмяФайлаСообщенияОбмена, - СообщениеОбмена, - СтруктураНастроекОбмена.КоличествоЭлементовВТранзакции, - СтруктураНастроекОбмена.КлючСообщенияЖурналаРегистрации, - КоличествоОбъектовОбработано); - + ПараметрыВыполнения = Новый Структура; + ПараметрыВыполнения.Вставить("УзелИнформационнойБазы", СтруктураНастроекОбмена.УзелИнформационнойБазы); + ПараметрыВыполнения.Вставить("КоличествоЭлементовВТранзакции", СтруктураНастроекОбмена.КоличествоЭлементовВТранзакции); + ПараметрыВыполнения.Вставить("КлючСообщенияЖурналаРегистрации", СтруктураНастроекОбмена.КлючСообщенияЖурналаРегистрации); + ПараметрыВыполнения.Вставить("ИмяФайлаСообщенияОбмена", ИмяФайлаСообщенияОбмена); + + Обработчики = Новый Массив; + Если ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.ОбменСообщениями") Тогда + МодульОбменСообщениямиВнутренний = ОбщегоНазначения.ОбщийМодуль("ОбменСообщениямиВнутренний"); + Обработчики.Добавить(МодульОбменСообщениямиВнутренний); КонецЕсли; + Обработчики.Добавить(ОбменДаннымиПереопределяемый); + + ОбработчикПриВыгрузкеДанныхБСП( + Обработчики, + ПараметрыВыполнения, + СтандартнаяОбработка, + СообщениеОбмена, + КоличествоОбъектовОбработано); Исключение @@ -6653,42 +6888,41 @@ // Устанавливаем имя файла сообщения обмена, который необходимо прочитать. ОбработкаОбменаДанными.УстановитьИмяФайлаСообщенияОбмена(ИмяФайлаСообщенияОбмена); - ОбработкаОбменаДанными.ВыполнитьЗагрузкуДанных(Отказ, ТолькоПараметры); + СообщениеОбОшибке = ""; + ОбработкаОбменаДанными.ВыполнитьЗагрузкуДанных(Отказ, ТолькоПараметры, СообщениеОбОшибке); Если Отказ Тогда - СтруктураНастроекОбмена.РезультатВыполненияОбмена = Перечисления.РезультатыВыполненияОбмена.Ошибка; - + СтруктураНастроекОбмена.СтрокаСообщенияОбОшибке = СообщениеОбОшибке; КонецЕсли; Иначе // {Обработчик: ПриЗагрузкеДанных} Начало. Переопределение стандартной обработки загрузки данных. - СтандартнаяОбработка = Истина; + СтандартнаяОбработка = Истина; КоличествоОбъектовОбработано = 0; Попытка - ОбработчикПриЗагрузкеДанныхБСП(СтандартнаяОбработка, - СтруктураНастроекОбмена.УзелИнформационнойБазы, - ИмяФайлаСообщенияОбмена, - СообщениеОбмена, - СтруктураНастроекОбмена.КоличествоЭлементовВТранзакции, - СтруктураНастроекОбмена.КлючСообщенияЖурналаРегистрации, - КоличествоОбъектовОбработано); - Если СтандартнаяОбработка = Истина Тогда - - КоличествоОбъектовОбработано = 0; - - ОбработчикПриЗагрузкеДанных(СтандартнаяОбработка, - СтруктураНастроекОбмена.УзелИнформационнойБазы, - ИмяФайлаСообщенияОбмена, - СообщениеОбмена, - СтруктураНастроекОбмена.КоличествоЭлементовВТранзакции, - СтруктураНастроекОбмена.КлючСообщенияЖурналаРегистрации, - КоличествоОбъектовОбработано); - + ПараметрыВыполнения = Новый Структура; + ПараметрыВыполнения.Вставить("УзелИнформационнойБазы", СтруктураНастроекОбмена.УзелИнформационнойБазы); + ПараметрыВыполнения.Вставить("КоличествоЭлементовВТранзакции", СтруктураНастроекОбмена.КоличествоЭлементовВТранзакции); + ПараметрыВыполнения.Вставить("КлючСообщенияЖурналаРегистрации", СтруктураНастроекОбмена.КлючСообщенияЖурналаРегистрации); + ПараметрыВыполнения.Вставить("ИмяФайлаСообщенияОбмена", ИмяФайлаСообщенияОбмена); + + Обработчики = Новый Массив; + Если ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.ОбменСообщениями") Тогда + МодульОбменСообщениямиВнутренний = ОбщегоНазначения.ОбщийМодуль("ОбменСообщениямиВнутренний"); + Обработчики.Добавить(МодульОбменСообщениямиВнутренний); КонецЕсли; + Обработчики.Добавить(ОбменДаннымиПереопределяемый); + + ОбработчикПриЗагрузкеДанныхБСП( + Обработчики, + ПараметрыВыполнения, + СтандартнаяОбработка, + СообщениеОбмена, + КоличествоОбъектовОбработано); Исключение СтрокаСообщенияОбОшибке = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); @@ -7488,7 +7722,7 @@ Функция ЭтоОшибкаНомерСообщенияМеньшеИлиРавенНомеруРанееПринятогоСообщения(ОписаниеОшибки) - Возврат СтрНайти(НРег(ОписаниеОшибки), НРег("ru = 'Номер сообщения меньше или равен'")) > 0; + Возврат СтрНайти(НРег(ОписаниеОшибки), НРег(НСтр("ru = 'Номер сообщения меньше или равен'"))) > 0; КонецФункции @@ -9841,47 +10075,13 @@ // Учитываем настройку транслитерации для узла плана обмена. Если Транслитерация Тогда - ИмяФайлаСообщения = СтроковыеФункцииКлиентСервер.СтрокаЛатиницей(ИмяФайлаСообщения); + ИмяФайлаСообщения = СтроковыеФункции.СтрокаЛатиницей(ИмяФайлаСообщения); КонецЕсли; Возврат ИмяФайлаСообщения; КонецФункции -Процедура ПроверитьКодыУзлов(РезультатАнализаДанныхКЗагрузке, УзелИнформационнойБазы) Экспорт - Если НЕ ЭтоПланОбменаXDTO(УзелИнформационнойБазы) Тогда - Возврат; - КонецЕсли; - - КодУзлаИБ = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(УзелИнформационнойБазы,"Код"); - Если ЗначениеЗаполнено(РезультатАнализаДанныхКЗагрузке.NewFrom) Тогда - УзелКорреспондентаПерекодирован = (КодУзлаИБ = РезультатАнализаДанныхКЗагрузке.NewFrom); - Если НЕ УзелКорреспондентаПерекодирован - И ОбменДаннымиXDTOСервер.ПоддерживаетсяВерсияСИдентификаторомОбменаДанными(УзелИнформационнойБазы) Тогда - УзелОбменаОбъект = УзелИнформационнойБазы.ПолучитьОбъект(); - УзелОбменаОбъект.Код = РезультатАнализаДанныхКЗагрузке.NewFrom; - УзелОбменаОбъект.ОбменДанными.Загрузка = Истина; - УзелОбменаОбъект.Записать(); - УзелКорреспондентаПерекодирован = Истина; - КонецЕсли; - Иначе - УзелКорреспондентаПерекодирован = Истина; - КонецЕсли; - Если УзелКорреспондентаПерекодирован Тогда - ПсевдонимПредопределенногоУзла = ПсевдонимПредопределенногоУзла(УзелИнформационнойБазы); - Если ЗначениеЗаполнено(ПсевдонимПредопределенногоУзла) - И РезультатАнализаДанныхКЗагрузке.КорреспондентПоддерживаетИдентификаторОбменаДанными Тогда - // Возможно, пора удалить запись. Проверка секции To. - ИмяПланаОбмена = УзелИнформационнойБазы.Метаданные().Имя; - КодПредопределенногоУзла = КодПредопределенногоУзлаПланаОбмена(ИмяПланаОбмена); - Если СокрЛП(КодПредопределенногоУзла) = РезультатАнализаДанныхКЗагрузке.To Тогда - ОбменДаннымиСлужебный.УдалитьНаборЗаписейВРегистреСведений(Новый Структура("Корреспондент", УзелИнформационнойБазы), - "ПсевдонимыПредопределенныхУзлов"); - КонецЕсли; - КонецЕсли; - КонецЕсли; -КонецПроцедуры - Процедура ВыполнитьИнициализациюОбработкиТранспортаСообщенийОбменаСВнешнейСистемой(СтруктураНастроекОбмена) Если ОбщегоНазначения.ПодсистемаСуществует("ИнтернетПоддержкаПользователей.ОбменДаннымиСВнешнимиСистемами") Тогда @@ -9989,7 +10189,7 @@ Объект, УзелОбмена, ТекстИсключения, - РегистрироватьПроблемыВРезультатахОбмена = Истина) Экспорт + РегистрироватьПроблемыВРезультатахОбмена = Истина) СообщенияПользователю = ПолучитьСообщенияПользователю(Истина); ТекстСообщения = ТекстИсключения; @@ -10053,7 +10253,10 @@ // // КонецПроцедуры; // -Процедура ЗарегистрироватьОшибкуЗаписиОбъекта(Объект, УзелОбмена, ТекстИсключения) Экспорт +Процедура ЗарегистрироватьОшибкуЗаписиОбъекта( + Объект, + УзелОбмена, + ТекстИсключения) СообщенияПользователю = ПолучитьСообщенияПользователю(Истина); ТекстСообщения = ТекстИсключения; @@ -11321,84 +11524,57 @@ Возврат ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ОбменДаннымиПовтИсп.ПолучитьЭтотУзелПланаОбмена(ИмяПланаОбмена), "Наименование"); КонецФункции -Процедура ОбработчикПриВыгрузкеДанныхБСП(СтандартнаяОбработка, - Знач Получатель, - Знач ИмяФайлаСообщения, - ДанныеСообщения, - Знач КоличествоЭлементовВТранзакции, - Знач ИмяСобытияЖурналаРегистрации, - КоличествоОтправленныхОбъектов) +Процедура ОбработчикПриВыгрузкеДанныхБСП( + Обработчики, + ПараметрыВыполнения, + СтандартнаяОбработка, + ДанныеСообщения, + КоличествоОтправленныхОбъектов) - Если ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.ОбменСообщениями") Тогда - МодульОбменСообщениямиВнутренний = ОбщегоНазначения.ОбщийМодуль("ОбменСообщениямиВнутренний"); - МодульОбменСообщениямиВнутренний.ПриВыгрузкеДанных( - СтандартнаяОбработка, - Получатель, - ИмяФайлаСообщения, + Для Каждого Обработчик Из Обработчики Цикл + + Если Не СтандартнаяОбработка Тогда + Прервать; + КонецЕсли; + + КоличествоОтправленныхОбъектов = 0; + + Обработчик.ПриВыгрузкеДанных(СтандартнаяОбработка, + ПараметрыВыполнения.УзелИнформационнойБазы, + ПараметрыВыполнения.ИмяФайлаСообщенияОбмена, ДанныеСообщения, - КоличествоЭлементовВТранзакции, - ИмяСобытияЖурналаРегистрации, + ПараметрыВыполнения.КоличествоЭлементовВТранзакции, + ПараметрыВыполнения.КлючСообщенияЖурналаРегистрации, КоличествоОтправленныхОбъектов); - КонецЕсли; + + КонецЦикла; КонецПроцедуры -Процедура ОбработчикПриВыгрузкеДанных(СтандартнаяОбработка, - Знач Получатель, - Знач ИмяФайлаСообщения, - ДанныеСообщения, - Знач КоличествоЭлементовВТранзакции, - Знач ИмяСобытияЖурналаРегистрации, - КоличествоОтправленныхОбъектов) +Процедура ОбработчикПриЗагрузкеДанныхБСП( + Обработчики, + ПараметрыВыполнения, + СтандартнаяОбработка, + ДанныеСообщения, + КоличествоПолученныхОбъектов) - ОбменДаннымиПереопределяемый.ПриВыгрузкеДанных(СтандартнаяОбработка, - Получатель, - ИмяФайлаСообщения, - ДанныеСообщения, - КоличествоЭлементовВТранзакции, - ИмяСобытияЖурналаРегистрации, - КоличествоОтправленныхОбъектов); - -КонецПроцедуры - -Процедура ОбработчикПриЗагрузкеДанныхБСП(СтандартнаяОбработка, - Знач Отправитель, - Знач ИмяФайлаСообщения, - ДанныеСообщения, - Знач КоличествоЭлементовВТранзакции, - Знач ИмяСобытияЖурналаРегистрации, - КоличествоПолученныхОбъектов) - - - Если ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.ОбменСообщениями") Тогда - МодульОбменСообщениямиВнутренний = ОбщегоНазначения.ОбщийМодуль("ОбменСообщениямиВнутренний"); - МодульОбменСообщениямиВнутренний.ПриЗагрузкеДанных( - СтандартнаяОбработка, - Отправитель, - ИмяФайлаСообщения, + Для Каждого Обработчик Из Обработчики Цикл + + Если Не СтандартнаяОбработка Тогда + Прервать; + КонецЕсли; + + КоличествоПолученныхОбъектов = 0; + + Обработчик.ПриЗагрузкеДанных(СтандартнаяОбработка, + ПараметрыВыполнения.УзелИнформационнойБазы, + ПараметрыВыполнения.ИмяФайлаСообщенияОбмена, ДанныеСообщения, - КоличествоЭлементовВТранзакции, - ИмяСобытияЖурналаРегистрации, + ПараметрыВыполнения.КоличествоЭлементовВТранзакции, + ПараметрыВыполнения.КлючСообщенияЖурналаРегистрации, КоличествоПолученныхОбъектов); - КонецЕсли; - -КонецПроцедуры - -Процедура ОбработчикПриЗагрузкеДанных(СтандартнаяОбработка, - Знач Отправитель, - Знач ИмяФайлаСообщения, - ДанныеСообщения, - Знач КоличествоЭлементовВТранзакции, - Знач ИмяСобытияЖурналаРегистрации, - КоличествоПолученныхОбъектов) - - ОбменДаннымиПереопределяемый.ПриЗагрузкеДанных(СтандартнаяОбработка, - Отправитель, - ИмяФайлаСообщения, - ДанныеСообщения, - КоличествоЭлементовВТранзакции, - ИмяСобытияЖурналаРегистрации, - КоличествоПолученныхОбъектов); + + КонецЦикла; КонецПроцедуры @@ -12096,7 +12272,7 @@ Если Не СостояниеНастройки.НастройкаСуществует Тогда Если ВКорреспондентеУстаревшийВариантНастроекОбмена( - Прокси, ПараметрыПрокси, СостояниеНастройки, СтруктураНастроек, ПсевдонимУзла, Отказ, СтрокаСообщенияОбОшибке) + Прокси, ПараметрыПрокси, СостояниеНастройки, СтруктураНастроек, ПсевдонимУзла, Отказ, СтрокаСообщенияОбОшибке) Или Отказ Тогда Возврат; КонецЕсли; @@ -12114,7 +12290,7 @@ Если Не СостояниеНастройки.НастройкаСуществует Тогда Если ВКорреспондентеУстаревшийВариантНастроекОбмена( - Прокси, ПараметрыПрокси, СтруктураНастроек, СостояниеНастройки, СтруктураНастроек.ТекущийУзелПланаОбменаКод, Отказ, СтрокаСообщенияОбОшибке) + Прокси, ПараметрыПрокси, СостояниеНастройки, СтруктураНастроек, СтруктураНастроек.ТекущийУзелПланаОбменаКод, Отказ, СтрокаСообщенияОбОшибке) Или Отказ Тогда Возврат; КонецЕсли; @@ -12465,33 +12641,57 @@ ИмяПланаОбмена = ЗаписьПланаОбмена.ИмяПланаОбмена; - Если ПравилаОбменаЗагруженныеИзФайла.Найти(ИмяПланаОбмена) = Неопределено - И ОбменДаннымиПовтИсп.ЕстьМакетПланаОбмена(ИмяПланаОбмена, "ПравилаОбмена") + Если ОбменДаннымиПовтИсп.ЕстьМакетПланаОбмена(ИмяПланаОбмена, "ПравилаОбмена") И ОбменДаннымиПовтИсп.ЕстьМакетПланаОбмена(ИмяПланаОбмена, "ПравилаОбменаКорреспондента") Тогда - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Выполняется обновление правил конвертации данных для плана обмена %1'"), ИмяПланаОбмена); - ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииОбменДанными(), - УровеньЖурналаРегистрации.Информация,,, ТекстСообщения); + Если ПравилаОбменаЗагруженныеИзФайла.Найти(ИмяПланаОбмена) = Неопределено Тогда - ЗагрузитьПравилаДляОбменаДанными(Отказ, ИмяПланаОбмена, Перечисления.ВидыПравилДляОбменаДанными.ПравилаКонвертацииОбъектов, - "ПравилаОбмена", "ПравилаОбменаКорреспондента"); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Выполняется обновление правил конвертации данных для плана обмена %1'"), ИмяПланаОбмена); + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииОбменДанными(), + УровеньЖурналаРегистрации.Информация,,, ТекстСообщения); - ВыполненоОбновлениеПравил = Истина; + ЗагрузитьПравилаДляОбменаДанными(Отказ, ИмяПланаОбмена, Перечисления.ВидыПравилДляОбменаДанными.ПравилаКонвертацииОбъектов, + "ПравилаОбмена", "ПравилаОбменаКорреспондента"); + + Если Не Отказ Тогда + ВыполненоОбновлениеПравил = Истина; + СтандартныеПодсистемыСервер.ОбновитьПараметрРаботыПрограммы( + "СтандартныеПодсистемы.ОбменДанными.ПравилаКонвертации." + ИмяПланаОбмена, Истина); + КонецЕсли; + + Иначе + + СтандартныеПодсистемыСервер.ОбновитьПараметрРаботыПрограммы( + "СтандартныеПодсистемы.ОбменДанными.ПравилаКонвертации." + ИмяПланаОбмена, Ложь); + + КонецЕсли; КонецЕсли; - Если ПравилаРегистрацииЗагруженныеИзФайла.Найти(ИмяПланаОбмена) = Неопределено - И ОбменДаннымиПовтИсп.ЕстьМакетПланаОбмена(ИмяПланаОбмена, "ПравилаРегистрации") Тогда + Если ОбменДаннымиПовтИсп.ЕстьМакетПланаОбмена(ИмяПланаОбмена, "ПравилаРегистрации") Тогда - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Выполняется обновление правил регистрации данных для плана обмена %1'"), ИмяПланаОбмена); - ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииОбменДанными(), - УровеньЖурналаРегистрации.Информация,,, ТекстСообщения); + Если ПравилаРегистрацииЗагруженныеИзФайла.Найти(ИмяПланаОбмена) = Неопределено Тогда - ЗагрузитьПравилаДляОбменаДанными(Отказ, ИмяПланаОбмена, Перечисления.ВидыПравилДляОбменаДанными.ПравилаРегистрацииОбъектов, "ПравилаРегистрации"); - - ВыполненоОбновлениеПравил = Истина; + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Выполняется обновление правил регистрации данных для плана обмена %1'"), ИмяПланаОбмена); + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииОбменДанными(), + УровеньЖурналаРегистрации.Информация,,, ТекстСообщения); + + ЗагрузитьПравилаДляОбменаДанными(Отказ, ИмяПланаОбмена, Перечисления.ВидыПравилДляОбменаДанными.ПравилаРегистрацииОбъектов, "ПравилаРегистрации"); + + Если Не Отказ Тогда + ВыполненоОбновлениеПравил = Истина; + СтандартныеПодсистемыСервер.ОбновитьПараметрРаботыПрограммы( + "СтандартныеПодсистемы.ОбменДанными.ПравилаРегистрации." + ИмяПланаОбмена, Истина); + КонецЕсли; + + Иначе + + СтандартныеПодсистемыСервер.ОбновитьПараметрРаботыПрограммы( + "СтандартныеПодсистемы.ОбменДанными.ПравилаРегистрации." + ИмяПланаОбмена, Ложь); + + КонецЕсли; КонецЕсли; diff --git a/SSL/src/CommonModules/ОбменДаннымиСлужебный/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиСлужебный/Module.bsl index 3a6edeba8..6a3b89352 100644 --- a/SSL/src/CommonModules/ОбменДаннымиСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиСлужебный/Module.bsl @@ -529,7 +529,8 @@ УстановитьПривилегированныйРежим(Истина); - КомпонентыОбмена = КомпонентыОбмена("Получение", ПараметрыWEBСервиса); + Отказ = Ложь; + КомпонентыОбмена = КомпонентыОбмена("Получение", ПараметрыWEBСервиса, Отказ); Если КомпонентыОбмена.ФлагОшибки Тогда СообщениеОбОшибке = КомпонентыОбмена.СтрокаСообщенияОбОшибке; @@ -538,33 +539,41 @@ СтруктураНастроекОбмена = СтруктураНастроекОбмена(КомпонентыОбмена, Перечисления.ДействияПриОбмене.ЗагрузкаДанных); - ОтключитьОбновлениеКлючейДоступа(Истина); - Попытка - ОбменДаннымиXDTOСервер.ПроизвестиЧтениеДанных(КомпонентыОбмена); - Исключение - Информация = ИнформацияОбОшибке(); - СообщениеОбОшибке = НСтр("ru = 'Ошибка при загрузке данных: %1'"); - СообщениеОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - СообщениеОбОшибке, - ПодробноеПредставлениеОшибки(Информация)); - ОбменДаннымиXDTOСервер.ЗаписатьВПротоколВыполнения(КомпонентыОбмена, СообщениеОбОшибке, , , , , Истина); + Если Не Отказ Тогда + ОтключитьОбновлениеКлючейДоступа(Истина); + Попытка + ОбменДаннымиXDTOСервер.ПроизвестиЧтениеДанных(КомпонентыОбмена); + ОтключитьОбновлениеКлючейДоступа(Ложь); + Исключение + ОтключитьОбновлениеКлючейДоступа(Ложь); + Информация = ИнформацияОбОшибке(); + СообщениеОбОшибке = НСтр("ru = 'Ошибка при загрузке данных: %1'"); + СообщениеОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + СообщениеОбОшибке, + ПодробноеПредставлениеОшибки(Информация)); + ОбменДаннымиXDTOСервер.ЗаписатьВПротоколВыполнения(КомпонентыОбмена, СообщениеОбОшибке, , , , , Истина); + КомпонентыОбмена.ФлагОшибки = Истина; + КонецПопытки; + + ОтключитьОбновлениеКлючейДоступа(Истина); + Попытка + ОбменДаннымиXDTOСервер.УдалитьВременныеОбъектыСозданныеПоСсылкам(КомпонентыОбмена); + ОтключитьОбновлениеКлючейДоступа(Ложь); + Исключение + ОтключитьОбновлениеКлючейДоступа(Ложь); + Информация = ИнформацияОбОшибке(); + СообщениеОбОшибке = НСтр("ru = 'Ошибка при удалении временных объектов, созданных по ссылкам: %1'"); + СообщениеОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + СообщениеОбОшибке, + ПодробноеПредставлениеОшибки(Информация)); + ОбменДаннымиXDTOСервер.ЗаписатьВПротоколВыполнения(КомпонентыОбмена, СообщениеОбОшибке, , , , , Истина); + КомпонентыОбмена.ФлагОшибки = Истина; + КонецПопытки; + + КомпонентыОбмена.ФайлОбмена.Закрыть(); + Иначе КомпонентыОбмена.ФлагОшибки = Истина; - КонецПопытки; - - Попытка - ОбменДаннымиXDTOСервер.УдалитьВременныеОбъектыСозданныеПоСсылкам(КомпонентыОбмена); - Исключение - Информация = ИнформацияОбОшибке(); - СообщениеОбОшибке = НСтр("ru = 'Ошибка при удалении временных объектов, созданных по ссылкам: %1'"); - СообщениеОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - СообщениеОбОшибке, - ПодробноеПредставлениеОшибки(Информация)); - ОбменДаннымиXDTOСервер.ЗаписатьВПротоколВыполнения(КомпонентыОбмена, СообщениеОбОшибке, , , , , Истина); - КомпонентыОбмена.ФлагОшибки = Истина; - КонецПопытки; - ОтключитьОбновлениеКлючейДоступа(Ложь); - - КомпонентыОбмена.ФайлОбмена.Закрыть(); + КонецЕсли; ЗафиксироватьЗавершениеОбмена(СтруктураНастроекОбмена, КомпонентыОбмена); @@ -577,10 +586,26 @@ И КомпонентыОбмена.ИспользоватьКвитирование Тогда // Запишем информацию о номере входящего сообщения. - ОбъектУзла = КомпонентыОбмена.УзелКорреспондента.ПолучитьОбъект(); - ОбъектУзла.НомерПринятого = КомпонентыОбмена.НомерВходящегоСообщения; - ОбъектУзла.ДополнительныеСвойства.Вставить("ПолучениеСообщенияОбмена"); - ОбъектУзла.Записать(); + НачатьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить(ОбщегоНазначения.ИмяТаблицыПоСсылке(КомпонентыОбмена.УзелКорреспондента)); + ЭлементБлокировки.УстановитьЗначение("Ссылка", КомпонентыОбмена.УзелКорреспондента); + Блокировка.Заблокировать(); + + ЗаблокироватьДанныеДляРедактирования(КомпонентыОбмена.УзелКорреспондента); + ОбъектУзла = КомпонентыОбмена.УзелКорреспондента.ПолучитьОбъект(); + + ОбъектУзла.НомерПринятого = КомпонентыОбмена.НомерВходящегоСообщения; + ОбъектУзла.ДополнительныеСвойства.Вставить("ПолучениеСообщенияОбмена"); + + ОбъектУзла.Записать(); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; КонецЕсли; @@ -908,6 +933,73 @@ #КонецОбласти +Функция СоставПланаОбмена(ИмяПланаОбмена, Периодические = Истина, Справочные = Истина) Экспорт + + Возврат ОбменДаннымиПовтИсп.СоставПланаОбмена(ИмяПланаОбмена, Периодические, Справочные); + +КонецФункции + +// Выполняет добавление информации об установленном в константе количестве элементов в транзакции +// в структуру, содержащую параметры транспорта сообщений обмена. +// +// Параметры: +// Результат - Структура - содержит параметры транспорта сообщений обмена. +// +Процедура ДополнитьНастройкиТранспортаКоличествомЭлементовВТранзакции(Результат) Экспорт + + Результат.Вставить("КоличествоЭлементовВТранзакцииВыгрузкиДанных", + ОбменДаннымиСервер.КоличествоЭлементовВТранзакцииВыгрузкиДанных()); + Результат.Вставить("КоличествоЭлементовВТранзакцииЗагрузкиДанных", + ОбменДаннымиСервер.КоличествоЭлементовВТранзакцииЗагрузкиДанных()); + +КонецПроцедуры + +// Возвращает номер области по коду узла плана обмена (обмен сообщениями). +// +// Параметры: +// КодУзла - Строка - Код узла плана обмена. +// +// Возвращаемое значение: +// Число - Номер области. +// +Функция НомерОбластиИзКодаУзлаПланаОбмена(Знач КодУзла) Экспорт + + Если ТипЗнч(КодУзла) <> Тип("Строка") Тогда + ВызватьИсключение НСтр("ru = 'Неправильный тип параметра номер [1].'"); + КонецЕсли; + + Результат = СтрЗаменить(КодУзла, "S0", ""); + + Возврат Число(Результат); +КонецФункции + +// Возвращает данные первой записи результата запроса в виде структуры. +// +// Параметры: +// РезультатЗапроса - РезультатЗапроса - Результат запроса, содержащий данные для обработки. +// +// Возвращаемое значение: +// Структура - структура с результатом. +// +Функция РезультатЗапросаВСтруктуру(Знач РезультатЗапроса) Экспорт + + Результат = Новый Структура; + Для Каждого Колонка Из РезультатЗапроса.Колонки Цикл + Результат.Вставить(Колонка.Имя); + КонецЦикла; + + Если РезультатЗапроса.Пустой() Тогда + Возврат Результат; + КонецЕсли; + + Выборка = РезультатЗапроса.Выбрать(); + Выборка.Следующий(); + + ЗаполнитьЗначенияСвойств(Результат, Выборка); + + Возврат Результат; +КонецФункции + #Область РаботаСРегистрамиСведений // Добавляет одну запись в регистр сведений по переданным значениям структуры. @@ -1022,7 +1114,7 @@ #Область СлужебныеПроцедурыИФункции -Функция КомпонентыОбмена(НаправлениеОбмена, ПараметрыWEBСервиса) +Функция КомпонентыОбмена(НаправлениеОбмена, ПараметрыWEBСервиса, Отказ = Ложь) КомпонентыОбмена = ОбменДаннымиXDTOСервер.ИнициализироватьКомпонентыОбмена(НаправлениеОбмена); @@ -1042,6 +1134,11 @@ ИмяФайла = ОбменДаннымиСервер.ПолучитьФайлИзХранилища(ПараметрыWEBСервиса.ИдентификаторФайлаВоВременномХранилище); ОбменДаннымиXDTOСервер.ОткрытьФайлЗагрузки(КомпонентыОбмена, ИмяФайла); + ОбменДаннымиXDTOСервер.ПослеОткрытияФайлаЗагрузки(КомпонентыОбмена, Отказ); + + Если Отказ Тогда + Возврат КомпонентыОбмена; + КонецЕсли; Иначе diff --git a/SSL/src/CommonModules/ОбменДаннымиСобытия/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиСобытия/Module.bsl index c4f9e7274..9bab9c9b5 100644 --- a/SSL/src/CommonModules/ОбменДаннымиСобытия/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиСобытия/Module.bsl @@ -3044,7 +3044,7 @@ // для всех свойств и табличных частей, исключая заданные свойства. // // Возвращаемое значение: -// Истина - если версии данных различаются, иначе Ложь. +// Булево - Истина - если версии данных различаются, иначе Ложь. // Функция ДанныеРазличаются(Данные1, Данные2, СписокСвойств = Неопределено, ИсключаяСвойства = Неопределено) Экспорт @@ -3265,13 +3265,13 @@ КонецПроцедуры // Получает текущее значение набора записей в информационной базе. -// +// // Параметры: // Данные - Набор записей регистров. -// +// // Возвращаемое значение: -// НаборЗаписей, содержащий текущее значение в информационной базе. -// +// НаборЗаписей - , содержащий текущее значение в информационной базе. +// Функция НаборЗаписей(Знач Данные) ОбъектМетаданных = Данные.Метаданные(); diff --git a/SSL/src/CommonModules/ОбновлениеИнформационнойБазы/Module.bsl b/SSL/src/CommonModules/ОбновлениеИнформационнойБазы/Module.bsl index b9853fe1f..44a317b11 100644 --- a/SSL/src/CommonModules/ОбновлениеИнформационнойБазы/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеИнформационнойБазы/Module.bsl @@ -261,15 +261,8 @@ Возврат Результат; КонецЕсли; - Если ПолучитьФункциональнуюОпцию("ОтложенноеОбновлениеЗавершеноУспешно") Тогда - - ЭтоПодчиненныйУзелРИБ = ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ(); - Если Не ЭтоПодчиненныйУзелРИБ Тогда - Возврат Результат; - ИначеЕсли ПолучитьФункциональнуюОпцию("ОтложенноеОбновлениеВГлавномУзлеЗавершеноУспешно") Тогда - Возврат Результат; - КонецЕсли; - + Если ОтложенноеОбновлениеЗавершено() Тогда + Возврат Результат; КонецЕсли; СведенияОБлокируемыхОбъектах = ОбновлениеИнформационнойБазыСлужебный.СведенияОБлокируемыхОбъектах(); @@ -432,6 +425,9 @@ И Не ОбщегоНазначения.ЭтоСсылка(ТипЗначенияОбъекта) И Данные.ЭтоНовый() Тогда + Возврат; + ИначеЕсли ОбщегоНазначения.ЭтоКонстанта(МетаданныеОбъекта) Тогда + Возврат; Иначе Набор = Данные; @@ -1848,13 +1844,8 @@ // Функция ЕстьДанныеДляОбработки(Очередь, ПолноеИмяМетаданныеОбъекта, Отбор = Неопределено) Экспорт - Если ПолучитьФункциональнуюОпцию("ОтложенноеОбновлениеЗавершеноУспешно") Тогда - ЭтоПодчиненныйУзелРИБ = ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ(); - Если Не ЭтоПодчиненныйУзелРИБ Тогда - Возврат Ложь; - ИначеЕсли ПолучитьФункциональнуюОпцию("ОтложенноеОбновлениеВГлавномУзлеЗавершеноУспешно") Тогда - Возврат Ложь; - КонецЕсли; + Если ОтложенноеОбновлениеЗавершено() Тогда + Возврат Ложь; КонецЕсли; Если ТипЗнч(ПолноеИмяМетаданныеОбъекта) = Тип("Строка") Тогда @@ -2084,12 +2075,8 @@ // Функция МожноЧитатьИМенять(Очередь, Данные, ДополнительныеПараметры = Неопределено, МетаданныеИОтбор = Неопределено) Экспорт - Если ПолучитьФункциональнуюОпцию("ОтложенноеОбновлениеЗавершеноУспешно") Тогда - Если Не ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ() Тогда - Возврат Истина; - ИначеЕсли ПолучитьФункциональнуюОпцию("ОтложенноеОбновлениеВГлавномУзлеЗавершеноУспешно") Тогда - Возврат Истина; - КонецЕсли; + Если ОтложенноеОбновлениеЗавершено() Тогда + Возврат Истина; КонецЕсли; Если МетаданныеИОтбор = Неопределено Тогда @@ -2655,6 +2642,54 @@ КонецФункции +// Возвращает признак завершения отложенного обновления. +// +// Параметры: +// ИменаПодсистем - Строка - Если передано, будет проверяться результат завершения +// обновления для переданной подсистемы, а не для всей конфигурации. +// - Массив - если требуется проверить завершение обновления сразу нескольких +// подсистем. +// +// Возвращаемое значение: +// Булево - Истина, если обновление завершено. +// +Функция ОтложенноеОбновлениеЗавершено(Знач ИменаПодсистем = Неопределено) Экспорт + + Если ПолучитьФункциональнуюОпцию("ОтложенноеОбновлениеЗавершеноУспешно") Тогда + ЭтоПодчиненныйУзелРИБ = ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ(); + Если Не ЭтоПодчиненныйУзелРИБ Тогда + Возврат Истина; + Иначе + Возврат ПолучитьФункциональнуюОпцию("ОтложенноеОбновлениеВГлавномУзлеЗавершеноУспешно"); + КонецЕсли; + КонецЕсли; + + Если Не ЗначениеЗаполнено(ИменаПодсистем) Тогда + Возврат Ложь; + КонецЕсли; + + Если ТипЗнч(ИменаПодсистем) = Тип("Строка") Тогда + ИменаПодсистем = СтрРазделить(ИменаПодсистем, ","); + КонецЕсли; + + Сведения = ОбновлениеИнформационнойБазыСлужебный.СведенияОбОбновленииИнформационнойБазы(); + Для Каждого Библиотека Из Сведения.ДеревоОбработчиков.Строки Цикл + Если ИменаПодсистем.Найти(Библиотека.ИмяБиблиотеки) = Неопределено Тогда + Продолжить; + КонецЕсли; + Для Каждого Версия Из Библиотека.Строки Цикл + Для Каждого Обработчик Из Версия.Строки Цикл + Если Обработчик.Статус <> "Выполнено" Тогда + Возврат Ложь; + КонецЕсли; + КонецЦикла; + КонецЦикла; + КонецЦикла; + + Возврат Истина; + +КонецФункции + // Возвращает Истина, если вызов функции выполняется из обработчика обновления. // Для любого вида обработчика обновления - монопольного, оперативного и отложенного. // @@ -2681,7 +2716,7 @@ КонецФункции -// Возвращает пустую таблицу обработчиков обновления и первоначального заполнения ИБ. +// Возвращает пустую таблицу обработчиков обновления и первоначального заполнения ИБ. // // Возвращаемое значение: // ТаблицаЗначений - таблица с колонками: @@ -3087,6 +3122,83 @@ КонецФункции + +// Возвращает текущее значение приоритета отложенной обработки данных. +// +// Возвращаемое значение: +// Строка - возможные значения - "ОбработкаДанных" и "РаботаПользователей". +// +Функция ПриоритетОтложеннойОбработки() Экспорт + СведенияОбОбновлении = ОбновлениеИнформационнойБазыСлужебный.СведенияОбОбновленииИнформационнойБазы(); + Если СведенияОбОбновлении.УправлениеОтложеннымОбновлением.Свойство("ФорсироватьОбновление") Тогда + Возврат "ОбработкаДанных"; + Иначе + Возврат "РаботаПользователей"; + КонецЕсли; +КонецФункции + +// Позволяет изменить приоритет отложенной обработки данных. +// +// Параметры: +// Приоритет - Строка - значение приоритета. Допустимые значения - "ОбработкаДанных" или "РаботаПользователей". +// +Процедура УстановитьПриоритетОтложеннойОбработки(Приоритет) Экспорт + + НачатьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных; + Блокировка.Добавить("Константа.СведенияОбОбновленииИБ"); + Блокировка.Заблокировать(); + + СведенияОбОбновлении = ОбновлениеИнформационнойБазыСлужебный.СведенияОбОбновленииИнформационнойБазы(); + Если Приоритет = "ОбработкаДанных" Тогда + СведенияОбОбновлении.УправлениеОтложеннымОбновлением.Вставить("ФорсироватьОбновление"); + Иначе + СведенияОбОбновлении.УправлениеОтложеннымОбновлением.Удалить("ФорсироватьОбновление"); + КонецЕсли; + + ОбновлениеИнформационнойБазыСлужебный.ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновлении); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +// Возвращает количество потоков обновления информационной базы. +// +// Если количество указано в параметре запуска "ЧислоПотоковОбновления", то возвращается оно. +// Иначе, если значение константы КоличествоПотоковОбновленияИнформационнойБазы установлено, то возвращается оно. +// Иначе возвращается значение по умолчанию (см. КоличествоПотоковОбновленияИнформационнойБазыПоУмолчанию()). +// +// Возвращаемое значение: +// Число - количество потоков. +// +Функция КоличествоПотоковОбновления() Экспорт + Возврат ОбновлениеИнформационнойБазыСлужебный.КоличествоПотоковОбновленияИнформационнойБазы(); +КонецФункции + +// Позволяет установить количество потоков отложенной обработки данных. +// +// Параметры: +// Количество - Число - число потоков. +// +Процедура УстановитьКоличествоПотоковОбновления(Количество) Экспорт + Константы.КоличествоПотоковОбновленияИнформационнойБазы.Установить(Количество); +КонецПроцедуры + +// Возвращает признак разрешения использования многопоточного обновления. +// Многопоточное обновление можно включить в ОбновлениеИнформационнойБазыПереопределяемый.ПриОпределенииНастроек(). +// +// Возвращаемое значение: +// Булево - если Истина, многопоточное обновление разрешено. По умолчанию - Ложь (для обратной совместимости). +// +Функция РазрешеноМногопоточноеОбновление() Экспорт + Возврат ОбновлениеИнформационнойБазыСлужебный.РазрешеноМногопоточноеОбновление(); +КонецФункции + #Область ДляВызоваИзДругихПодсистем // ИнтернетПоддержкаПользователей.ПолучениеОбновленийПрограммы diff --git a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыБСП/Module.bsl b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыБСП/Module.bsl index 11886303d..2c7950789 100644 --- a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыБСП/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыБСП/Module.bsl @@ -41,7 +41,7 @@ Процедура ПриДобавленииПодсистемы(Описание) Экспорт Описание.Имя = "СтандартныеПодсистемы"; - Описание.Версия = "3.1.1.151"; + Описание.Версия = "3.1.2.150"; Описание.ИдентификаторИнтернетПоддержки = "SSL"; Описание.РежимВыполненияОтложенныхОбработчиков = "Параллельно"; Описание.ПараллельноеОтложенноеОбновлениеСВерсии = "2.3.3.0"; diff --git a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыКлиент/Module.bsl b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыКлиент/Module.bsl index 121fca6a1..da5ed1848 100644 --- a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыКлиент/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыКлиент/Module.bsl @@ -39,6 +39,16 @@ КонецЕсли; Если ПараметрыКлиента.Свойство("ИнформационнаяБазаЗаблокированаДляОбновления") Тогда + Если Не ПараметрыКлиента.ЕстьДоступДляОбновленияВерсииПлатформы + И ПараметрыКлиента.РазделениеВключено + И ПараметрыКлиента.ДоступноИспользованиеРазделенныхДанных Тогда + Параметры.Отказ = Истина; + Параметры.ИнтерактивнаяОбработка = Новый ОписаниеОповещения( + "ИнициироватьОбновлениеОбласти", + ЭтотОбъект); + Возврат; + КонецЕсли; + Кнопки = Новый СписокЗначений(); Кнопки.Добавить("Перезапустить", НСтр("ru = 'Перезапустить'")); Кнопки.Добавить("Завершить", НСтр("ru = 'Завершить работу'")); @@ -272,4 +282,9 @@ Возврат "e1cib/app/Обработка.РезультатыОбновленияПрограммы"; КонецФункции +// Только для внутреннего использования. Продолжение процедуры ПередНачаломРаботыСистемы. +Процедура ИнициироватьОбновлениеОбласти(Параметры, ОписаниеПредупреждения) Экспорт + ОткрытьФорму("Обработка.РезультатыОбновленияПрограммы.Форма.ОбновлениеДляНеполноправногоПользователя"); +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыПереопределяемый/Module.bsl b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыПереопределяемый/Module.bsl index e27427d4e..3d0352ad7 100644 --- a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыПереопределяемый/Module.bsl @@ -8,7 +8,8 @@ #Область ПрограммныйИнтерфейс -// Позволяет переопределить различные сообщения, выводимые пользователю. +// Позволяет задать общие настройки подсистемы, в том числе, список объектов начального заполнения, тексты сообщений для +// пользователя и другое. // // Параметры: // Параметры - Структура - со свойствами: @@ -32,6 +33,8 @@ // * КоличествоПотоковОбновленияИнформационнойБазыПоУмолчанию - Строка - количество потоков отложенного обновления // используемое, когда не задано значение для константы // КоличествоПотоковОбновленияИнформационнойБазы. По умолчанию равно 1. +// * ОбъектыСНачальнымЗаполнением - Массив - объекты, содержащие в модуле менеджере код начального заполнения +// в процедуре ПриНачальномЗаполненииЭлементов. // Процедура ПриОпределенииНастроек(Параметры) Экспорт diff --git a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебный/Module.bsl b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебный/Module.bsl index f67e7ed21..5984ed068 100644 --- a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебный/Module.bsl @@ -1460,6 +1460,30 @@ КонецЕсли; КонецПроцедуры +Функция НастройкиПодсистемы() Экспорт + + ПараметрыСообщенияОНевыполненныхОтложенныхОбработчиках = Новый Структура; + ПараметрыСообщенияОНевыполненныхОтложенныхОбработчиках.Вставить("ТекстСообщения", ""); + ПараметрыСообщенияОНевыполненныхОтложенныхОбработчиках.Вставить("КартинкаСообщения", Неопределено); + ПараметрыСообщенияОНевыполненныхОтложенныхОбработчиках.Вставить("ЗапрещатьПродолжение", Ложь); + + + Настройки = Новый Структура; + Настройки.Вставить("ПоясненияДляРезультатовОбновления", ""); + Настройки.Вставить("РасположениеОписанияИзмененийПрограммы", ""); + Настройки.Вставить("ПараметрыСообщенияОНевыполненныхОтложенныхОбработчиках", ПараметрыСообщенияОНевыполненныхОтложенныхОбработчиках); + Настройки.Вставить("МногопоточноеОбновление", Ложь); + Настройки.Вставить("КоличествоПотоковОбновленияИнформационнойБазыПоУмолчанию", 1); + + Настройки.Вставить("ОбъектыСНачальнымЗаполнением", Новый Массив); + ИнтеграцияПодсистемБСП.ПриОпределенииОбъектовСНачальнымЗаполнением(Настройки.ОбъектыСНачальнымЗаполнением); + + ОбновлениеИнформационнойБазыПереопределяемый.ПриОпределенииНастроек(Настройки); + + Возврат Настройки; + +КонецФункции + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -1490,27 +1514,6 @@ КонецПроцедуры -Функция НастройкиПодсистемы() Экспорт - - ПараметрыСообщенияОНевыполненныхОтложенныхОбработчиках = Новый Структура; - ПараметрыСообщенияОНевыполненныхОтложенныхОбработчиках.Вставить("ТекстСообщения", ""); - ПараметрыСообщенияОНевыполненныхОтложенныхОбработчиках.Вставить("КартинкаСообщения", Неопределено); - ПараметрыСообщенияОНевыполненныхОтложенныхОбработчиках.Вставить("ЗапрещатьПродолжение", Ложь); - - - Настройки = Новый Структура; - Настройки.Вставить("ПоясненияДляРезультатовОбновления", ""); - Настройки.Вставить("РасположениеОписанияИзмененийПрограммы", ""); - Настройки.Вставить("ПараметрыСообщенияОНевыполненныхОтложенныхОбработчиках", ПараметрыСообщенияОНевыполненныхОтложенныхОбработчиках); - Настройки.Вставить("МногопоточноеОбновление", Ложь); - Настройки.Вставить("КоличествоПотоковОбновленияИнформационнойБазыПоУмолчанию", 1); - - ОбновлениеИнформационнойБазыПереопределяемый.ПриОпределенииНастроек(Настройки); - - Возврат Настройки; - -КонецФункции - // Возвращает числовой вес версии для сравнения версий между собой. // // Параметры: @@ -1627,8 +1630,6 @@ ВыполняемыеОбработчики = ОбработчикиОбновленияВИнтервале(ОбработчикиОбновления, ТекущаяВерсияИБ, ВерсияМетаданных); КонецЕсли; - ОтключитьОбработчикиОбновления(ИдентификаторБиблиотеки, ВыполняемыеОбработчики, ВерсияМетаданных, Параметры.ХодВыполненияОбработчиков); - ОбязательныеРазделенныеОбработчики = ОбновлениеИнформационнойБазы.НоваяТаблицаОбработчиковОбновления(); ИсходнаяВерсияИБ = ТекущаяВерсияИБ; ЗаписыватьВЖурнал = Константы.ДетализироватьОбновлениеИБВЖурналеРегистрации.Получить(); @@ -1842,6 +1843,29 @@ КонецПроцедуры +Функция ОбновлениеПодОграниченнымиПравами() Экспорт + Если Не ОбщегоНазначения.РазделениеВключено() + Или Не ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда + Возврат Ложь; + КонецЕсли; + + Результат = ""; + // АПК:280 -выкл ошибки пишутся в журнал регистрации, пользователю не показываются. + Попытка + УстановитьПривилегированныйРежим(Истина); + ОтметкаНачалаОбновления = ОтметкаНачалаОбновления(); + Если ОтметкаНачалаОбновления.МожноВыполнятьОбновление Тогда + Результат = ОбновлениеИнформационнойБазы.ВыполнитьОбновлениеИнформационнойБазы(); + КонецЕсли; + УстановитьПривилегированныйРежим(Ложь); + Исключение + // Обработка исключения не требуется. + КонецПопытки; + // АПК:280 -вкл. + + Возврат (Результат = "Успешно" Или Результат = "НеТребуется"); +КонецФункции + // Для внутреннего использования. // Функция ЗаблокироватьИБ(БлокировкаИБ, ИсключениеПриНевозможностиБлокировкиИБ) @@ -2171,7 +2195,7 @@ // Возвращает строковую константу для формирования сообщений журнала регистрации. // // Возвращаемое значение: -// Строка +// Строка - // Функция СобытиеЖурналаРегистрации() Экспорт @@ -2183,7 +2207,7 @@ // протоколирования хода выполнения обработчиков обновления. // // Возвращаемое значение: -// Строка +// Строка - // Функция СобытиеЖурналаРегистрацииПротокол() Экспорт @@ -2287,7 +2311,11 @@ СведенияОбОбновлении.Вставить("ВыводитьОписаниеОбновлений", Ложь); СведенияОбОбновлении.Вставить("ПриостановленныеПроцедурыОбновления", Новый Массив); СведенияОбОбновлении.Вставить("ЗапущенныеПроцедурыОбновления", Новый Массив); - СведенияОбОбновлении.Вставить("УправлениеОтложеннымОбновлением", Новый Структура); + Если СведенияОбОбновлении.УправлениеОтложеннымОбновлением.Свойство("ФорсироватьОбновление") Тогда + СведенияОбОбновлении.Вставить("УправлениеОтложеннымОбновлением", Новый Структура("ФорсироватьОбновление")); + Иначе + СведенияОбОбновлении.Вставить("УправлениеОтложеннымОбновлением", Новый Структура); + КонецЕсли; СведенияОбОбновлении.Вставить("ОбрабатываемыеДанные", Новый Соответствие); СведенияОбОбновлении.Вставить("ТекущаяИтерацияОбновления", 1); СведенияОбОбновлении.Вставить("ПланОтложенногоОбновления"); @@ -3231,7 +3259,12 @@ Функция ФорсироватьОбновление(СведенияОбОбновлении) Если Не ОбщегоНазначения.РазделениеВключено() Тогда - Возврат СведенияОбОбновлении.УправлениеОтложеннымОбновлением.Свойство("ФорсироватьОбновление"); + ПараметрЗапускаКлиента = ПараметрыСеанса.ПараметрыКлиентаНаСервере.Получить("ПараметрЗапуска"); + Если СтрНайти(НРег(ПараметрЗапускаКлиента), НРег("ФорсироватьОтложенноеОбновление")) > 0 Тогда + Возврат Истина; + Иначе + Возврат СведенияОбОбновлении.УправлениеОтложеннымОбновлением.Свойство("ФорсироватьОбновление"); + КонецЕсли; Иначе Приоритет = Неопределено; ИнтеграцияПодсистемБСП.ПриПолученииПриоритетаОбновления(Приоритет); @@ -4773,56 +4806,6 @@ КонецФункции -// Отключает обработчики обновления, заполненные в процедуре. -// ОбновлениеИнформационнойБазыПереопределяемый.ПриОтключенииОбработчиковОбновления. -// -// Параметры: -// ИдентификаторБиблиотеки - Строка - имя конфигурации или идентификатор библиотеки. -// ВыполняемыеОбработчики - ДеревоЗначений - обработчики обновления ИБ. -// ВерсияМетаданныхИБ - Строка - версия метаданных. Отключаются только те обработчики -// у которых версия совпадает с версией метаданных. -// -Процедура ОтключитьОбработчикиОбновления(ИдентификаторБиблиотеки, ВыполняемыеОбработчики, ВерсияМетаданных, ХодВыполненияОбработчиков) - - ОтключаемыеОбработчики = Новый ТаблицаЗначений; - ОтключаемыеОбработчики.Колонки.Добавить("ИдентификаторБиблиотеки"); - ОтключаемыеОбработчики.Колонки.Добавить("Процедура"); - ОтключаемыеОбработчики.Колонки.Добавить("Версия"); - - // Поиск строки дерева, содержащей обработчики обновления с версией "*". - ОбработчикиБиблиотеки = ВыполняемыеОбработчики.Строки.Найти("*", "Версия", Ложь); - - Для Каждого ОтключаемыйОбработчик Из ОтключаемыеОбработчики Цикл - - // Проверка того, что отключаемый обработчик принадлежит переданной библиотеке. - Если ИдентификаторБиблиотеки <> ОтключаемыйОбработчик.ИдентификаторБиблиотеки Тогда - Продолжить; - КонецЕсли; - - // Проверка, находится ли обработчик в списке исключения. - ВыполняемыйОбработчик = ВыполняемыеОбработчики.Строки.Найти(ОтключаемыйОбработчик.Процедура, "Процедура", Истина); - Если ВыполняемыйОбработчик <> Неопределено И ВыполняемыйОбработчик.Версия = "*" - И ОтключаемыйОбработчик.Версия = ВерсияМетаданных Тогда - ОбработчикиБиблиотеки.Строки.Удалить(ВыполняемыйОбработчик); - ХодВыполненияОбработчиков.ВсегоОбработчиковНаВерсию = ХодВыполненияОбработчиков.ВсегоОбработчиковНаВерсию - 1; - ИначеЕсли ВыполняемыйОбработчик <> Неопределено И ВыполняемыйОбработчик.Версия <> "*" - И ОтключаемыйОбработчик.Версия = ВерсияМетаданных Тогда - ТекстИсключения = НСтр("ru='Обработчик обновления %1 не может быть отключен, - |так как он выполняется только при переходе на версию %2'"); - ТекстИсключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстИсключения, ВыполняемыйОбработчик.Процедура, ВыполняемыйОбработчик.Версия); - - ВызватьИсключение ТекстИсключения; - ИначеЕсли ВыполняемыйОбработчик = Неопределено Тогда - ТекстИсключения = НСтр("ru='Отключаемый обработчик обновления %1 не существует'"); - ТекстИсключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстИсключения, ОтключаемыйОбработчик.Процедура); - - ВызватьИсключение ТекстИсключения; - КонецЕсли; - - КонецЦикла; - -КонецПроцедуры - Процедура ВыполнитьОбработчикОбновления(Обработчик, Параметры, ДополнительныеПараметры) ЗаписатьИнформациюОХодеОбновления(Обработчик, ДополнительныеПараметры.ХодВыполненияОбработчиков, ДополнительныеПараметры.ВФоне); @@ -6345,8 +6328,14 @@ |Выполнение прервано для предотвращения зацикливания механизма обработки данных.'"); КонецЕсли; - ОбработчикОбновления.ЧислоПопыток = МаксимумПопытокОбновления(СведенияОбОбновлении, ОбработчикОбновления); - ВызватьИсключение ТекстОшибки; + ПланОбновления = СведенияОбОбновлении.ПланОтложенногоОбновления; + МинимальнаяОчередь = МинимальнаяОчередьОтложеннойОбработки(ПланОбновления); + + Если Не ПараметрыОбновления.ПараллельныйРежим + Или МинимальнаяОчередь = ОбработчикОбновления.ОчередьОтложеннойОбработки Тогда + ОбработчикОбновления.ЧислоПопыток = МаксимумПопытокОбновления(СведенияОбОбновлении, ОбработчикОбновления); + ВызватьИсключение ТекстОшибки; + КонецЕсли; КонецЕсли; // Запуск отложенного обработчика обновления. @@ -6431,26 +6420,14 @@ МинимальнаяОчередь = 0; Если Не ЕстьОбработанныеОбъекты Тогда - Для Каждого ЦиклОбновления Из ПараметрыОбновления.ПланОбновления Цикл - Если ЦиклОбновления.Режим = "Последовательно" - Или ЦиклОбновления.ОчередьОбработчиков.Количество() = 0 Тогда - Продолжить; - КонецЕсли; - - Если МинимальнаяОчередь = 0 Тогда - МинимальнаяОчередь = ЦиклОбновления.ОчередьОбработчиков[0].Очередь; - Иначе - МинимальнаяОчередьЦикла = ЦиклОбновления.ОчередьОбработчиков[0].Очередь; - МинимальнаяОчередь = Мин(МинимальнаяОчередь, МинимальнаяОчередьЦикла); - КонецЕсли; - КонецЦикла; + МинимальнаяОчередь = МинимальнаяОчередьОтложеннойОбработки(ПараметрыОбновления.ПланОбновления); КонецЕсли; Если Не ЕстьОбработанныеОбъекты И ОчередьОбработчика = МинимальнаяОчередь Тогда ЧислоПопыток = ОбработчикОбновления.ЧислоПопыток; МаксимумПопыток = МаксимумПопытокОбновления(СведенияОбОбновлении, ОбработчикОбновления) - 1; - Если ЧислоПопыток >= МаксимумПопыток И ВсеОбработчикиЗациклились(СведенияОбОбновлении) Тогда + Если ЧислоПопыток >= МаксимумПопыток Тогда ТекстИсключения = НСтр("ru = 'Произошло зацикливание процедуры обработки данных. Выполнение прервано.'"); ВызватьИсключение ТекстИсключения; Иначе @@ -7383,4 +7360,25 @@ КонецФункции +Функция МинимальнаяОчередьОтложеннойОбработки(ПланОбновления) + + МинимальнаяОчередь = 0; + Для Каждого ЦиклОбновления Из ПланОбновления Цикл + Если ЦиклОбновления.Режим = "Последовательно" + Или ЦиклОбновления.ОчередьОбработчиков.Количество() = 0 Тогда + Продолжить; + КонецЕсли; + + Если МинимальнаяОчередь = 0 Тогда + МинимальнаяОчередь = ЦиклОбновления.ОчередьОбработчиков[0].Очередь; + Иначе + МинимальнаяОчередьЦикла = ЦиклОбновления.ОчередьОбработчиков[0].Очередь; + МинимальнаяОчередь = Мин(МинимальнаяОчередь, МинимальнаяОчередьЦикла); + КонецЕсли; + КонецЦикла; + + Возврат МинимальнаяОчередь; + +КонецФункции + #КонецОбласти diff --git a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса/Module.bsl index ae7d79178..39ca14b1f 100644 --- a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса/Module.bsl @@ -225,8 +225,8 @@ // Блокирует запись в регистре сведений ВерсииПодсистемОбластейДанных, которая соответствует текущей области данных, // и возвращает ключ этой записи. // -// Возвращаемое значение: -// РегистрСведенийКлючЗаписи. +// Возвращаемое значение: +// РегистрСведенийКлючЗаписи - . // Функция ЗаблокироватьВерсииОбластиДанных() Экспорт @@ -535,40 +535,39 @@ КонецЕсли; ПараметрыБлокировки.Установлена = Ложь; СоединенияИБ.УстановитьБлокировкуСеансовОбластиДанных(ПараметрыБлокировки); + Возврат; - Иначе + КонецЕсли; - СнятьМонопольныйРежим = Ложь; - Если Не МонопольныйРежим() Тогда + СнятьМонопольныйРежим = Ложь; + Если Не МонопольныйРежим() Тогда + + Попытка + УстановитьМонопольныйРежим(Истина); + СнятьМонопольныйРежим = Истина; + Исключение + // Обработка исключения не требуется. + // Ожидаемое исключение - ошибка установки монопольного режима из-за + // наличия других сеансов (например, при динамическом обновлении конфигурации). + // В этом случае планирование обновления областей будет выполняться с учетом + // возможной конкуренции при доступе к таблицам объектов метаданных, разделенных + // в режиме "Независимо и совместно" (что будет менее эффективно, нежели в + // выполнение в монопольном режиме). + СтрокаСообщения = НСтр("ru = 'Не удалось установить монопольный режим. Описание ошибки: %1'", ОбщегоНазначения.КодОсновногоЯзыка()); + СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - Попытка - УстановитьМонопольныйРежим(Истина); - СнятьМонопольныйРежим = Истина; - Исключение - // Обработка исключения не требуется. - // Ожидаемое исключение - ошибка установки монопольного режима из-за - // наличия других сеансов (например, при динамическом обновлении конфигурации). - // В этом случае планирование обновления областей будет выполняться с учетом - // возможной конкуренции при доступе к таблицам объектов метаданных, разделенных - // в режиме "Независимо и совместно" (что будет менее эффективно, нежели в - // выполнение в монопольном режиме). - СтрокаСообщения = НСтр("ru = 'Не удалось установить монопольный режим. Описание ошибки: %1'", ОбщегоНазначения.КодОсновногоЯзыка()); - СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - - ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), - УровеньЖурналаРегистрации.Предупреждение, , , СтрокаСообщения); - КонецПопытки; - - КонецЕсли; - - ЗапланироватьОбновлениеОбластейДанных(Истина); - - Если СнятьМонопольныйРежим Тогда - УстановитьМонопольныйРежим(Ложь); - КонецЕсли; + ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), + УровеньЖурналаРегистрации.Предупреждение, , , СтрокаСообщения); + КонецПопытки; КонецЕсли; + ЗапланироватьОбновлениеОбластейДанных(Истина); + + Если СнятьМонопольныйРежим Тогда + УстановитьМонопольныйРежим(Ложь); + КонецЕсли; + КонецПроцедуры // См. ВыгрузкаЗагрузкаДанныхПереопределяемый.ПослеЗагрузкиДанных. @@ -838,13 +837,26 @@ Продолжить; КонецЕсли; + + ЕстьРасширенияИзменяющиеСтруктуру = Ложь; + ПараметрыЗапускаЗадания = Новый Массив; + + Если ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.РасширенияВМоделиСервиса") Тогда + МодульРасширенияВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("РасширенияВМоделиСервиса"); + ИдентификаторыРасширений = МодульРасширенияВМоделиСервиса.АктивироватьОтключенныеРасширенияВОбласти(Выборка.ОбластьДанных, + ЕстьРасширенияИзменяющиеСтруктуру); + ПараметрыЗапускаЗадания.Добавить(ИдентификаторыРасширений); + КонецЕсли; + ПараметрыЗадания = Новый Структура; ПараметрыЗадания.Вставить("ИмяМетода" , "ОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса.ВыполнитьОбновлениеТекущейОбластиДанных"); - ПараметрыЗадания.Вставить("Параметры" , Новый Массив); + ПараметрыЗадания.Вставить("Параметры" , ПараметрыЗапускаЗадания); ПараметрыЗадания.Вставить("Ключ" , "1"); ПараметрыЗадания.Вставить("ОбластьДанных", Выборка.ОбластьДанных); ПараметрыЗадания.Вставить("ЭксклюзивноеВыполнение", Истина); ПараметрыЗадания.Вставить("КоличествоПовторовПриАварийномЗавершении", 3); + ПараметрыЗадания.Вставить("ВыполнятьЧерезРегламентноеЗадание", ЕстьРасширенияИзменяющиеСтруктуру); + ПараметрыЗадания.Вставить("ОжидатьЗавершенияВыполненияРегламентногоЗадания", ЕстьРасширенияИзменяющиеСтруктуру); МодульОчередьЗаданий.ДобавитьЗадание(ПараметрыЗадания); @@ -873,11 +885,37 @@ // и снимает блокировку сеансов в области, в случае если она была установлена // ранее. // -Процедура ВыполнитьОбновлениеТекущейОбластиДанных() Экспорт +Процедура ВыполнитьОбновлениеТекущейОбластиДанных(АктивированныеРасширения = Неопределено) Экспорт + Если АктивированныеРасширения = Неопределено Тогда + АктивированныеРасширения = Новый Массив; + КонецЕсли; + + ЕстьОшибка = Ложь; УстановитьПривилегированныйРежим(Истина); - ОбновлениеИнформационнойБазы.ВыполнитьОбновлениеИнформационнойБазы(); + Попытка + ОбновлениеИнформационнойБазы.ВыполнитьОбновлениеИнформационнойБазы(); + Исключение + ЕстьОшибка = Истина; + ТекстОшибки = ОписаниеОшибки(); + КонецПопытки; + + Для Каждого Идентификатор Из АктивированныеРасширения Цикл + + Расширения = РасширенияКонфигурации.Получить(Новый Структура("УникальныйИдентификатор", Идентификатор), ИсточникРасширенийКонфигурации.СеансАктивные); + Если Расширения.Количество() = 0 Тогда + Продолжить; + КонецЕсли; + + Расширения[0].Активно = Ложь; + Расширения[0].Записать(); + + КонецЦикла; + + Если ЕстьОшибка Тогда + ВызватьИсключение ТекстОшибки; + КонецЕсли; КонецПроцедуры diff --git a/SSL/src/CommonModules/ОбновлениеКонфигурации/Module.bsl b/SSL/src/CommonModules/ОбновлениеКонфигурации/Module.bsl index 2abf840af..46176985d 100644 --- a/SSL/src/CommonModules/ОбновлениеКонфигурации/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеКонфигурации/Module.bsl @@ -300,13 +300,18 @@ Прервать; КонецЕсли; КонецЦикла; - - Если ИсправлениеНайдено Тогда - ВременныйКаталог = ФайловаяСистема.СоздатьВременныйКаталог("Патчи"); - ЧтениеZip.Извлечь(ЭлементАрхива, ВременныйКаталог); - ЧтениеZip.Закрыть(); - ПолноеИмяИсправления = ВременныйКаталог + ЭлементАрхива.Имя; + Если Не ИсправлениеНайдено Тогда + ВызватьИсключение НСтр("ru = 'Исправление не найдено.'"); КонецЕсли; + + ВременныйКаталог = ФайловаяСистема.СоздатьВременныйКаталог("Патчи"); + ИсправлениеПрименимо = ИсправлениеПрименимо(ЧтениеZip, ВременныйКаталог); + Если Не ИсправлениеПрименимо Тогда + ВызватьИсключение НСтр("ru = 'Исправление не применимо для данной версии конфигурации.'"); + КонецЕсли; + ЧтениеZip.Извлечь(ЭлементАрхива, ВременныйКаталог); + ЧтениеZip.Закрыть(); + ПолноеИмяИсправления = ВременныйКаталог + ЭлементАрхива.Имя; ДвоичныеДанныеИсправления = Новый ДвоичныеДанные(ПолноеИмяИсправления); Расширение = РасширенияКонфигурации.Создать(); @@ -330,6 +335,9 @@ |%2'"), Расширение.Имя, КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); ЗаписьЖурналаРегистрации(НСтр("ru = 'Исправления.Установка'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка,,, ТекстОшибки); + + ФайловаяСистема.УдалитьВременныйФайл(ИмяАрхива); + ФайловаяСистема.УдалитьВременныйКаталог(ВременныйКаталог); КонецПопытки; КонецЦикла; @@ -720,8 +728,9 @@ ПараметрыПисьма.Вставить("Кому", АдресНазначения); МодульРаботаСПочтовымиСообщениями = ОбщегоНазначения.ОбщийМодуль("РаботаСПочтовымиСообщениями"); - МодульРаботаСПочтовымиСообщениями.ОтправитьПочтовоеСообщение( - МодульРаботаСПочтовымиСообщениями.СистемнаяУчетнаяЗапись(), ПараметрыПисьма); + УчетнаяЗапись = МодульРаботаСПочтовымиСообщениями.СистемнаяУчетнаяЗапись(); + Письмо = МодульРаботаСПочтовымиСообщениями.ПодготовитьПисьмо(УчетнаяЗапись, ПараметрыПисьма); + МодульРаботаСПочтовымиСообщениями.ОтправитьПисьмо(УчетнаяЗапись, Письмо); КонецПроцедуры @@ -781,13 +790,17 @@ Расширение.Удалить(); ВызватьИсключение НСтр("ru = 'Расширение не является патчем.'"); КонецЕсли; - УстановленоИсправлений = УстановленоИсправлений + 1; + Результат.УстановленоИсправлений = Результат.УстановленоИсправлений + 1; Исключение ИнформацияОбОшибке = ИнформацияОбОшибке(); - ЕстьОшибки = Истина; + Результат.ЕстьОшибки = Истина; - ОписаниеИсправления = Новый ОписаниеКонфигурации(Данные); - ИмяФайлаИсправления = ОписаниеИсправления.Имя; + Если Данные = Неопределено Тогда + ИмяФайлаИсправления = ФайлИсправления.Имя; + Иначе + ОписаниеИсправления = Новый ОписаниеКонфигурации(Данные); + ИмяФайлаИсправления = ОписаниеИсправления.Имя; + КонецЕсли; ТекстОшибки = НСтр("ru = 'При установке исправления %1 возникла ошибка: |%2'"); @@ -824,6 +837,13 @@ КонецЕсли; ВременныйКаталог = ФайловаяСистема.СоздатьВременныйКаталог("Патчи"); + + // Проверка применимости. + ИсправлениеПрименимо = ИсправлениеПрименимо(ЧтениеZip, ВременныйКаталог); + Если Не ИсправлениеПрименимо Тогда + ВызватьИсключение НСтр("ru = 'Исправление не применимо для данной версии конфигурации.'"); + КонецЕсли; + ЧтениеZip.Извлечь(ЭлементАрхива, ВременныйКаталог); ЧтениеZip.Закрыть(); @@ -835,10 +855,51 @@ Исключение ФайловаяСистема.УдалитьВременныйФайл(ИмяАрхива); ФайловаяСистема.УдалитьВременныйКаталог(ВременныйКаталог); + ВызватьИсключение; КонецПопытки; Возврат Данные; + +КонецФункции +Функция ИсправлениеПрименимо(ЧтениеZip, ВременныйКаталог) + ФайлМанифеста = ЧтениеZip.Элементы.Найти("Manifest.xml"); + Если ФайлМанифеста = Неопределено Тогда + Возврат Истина; + КонецЕсли; + + Если ОбщегоНазначения.РежимОтладки() Тогда + Возврат Истина; + КонецЕсли; + + Попытка + ЧтениеZip.Извлечь(ФайлМанифеста, ВременныйКаталог); + ТекстовыйДокумент = Новый ТекстовыйДокумент; + ТекстовыйДокумент.Прочитать(ВременныйКаталог + ФайлМанифеста.Имя); + + ЧтениеXML = Новый ЧтениеXML; + ЧтениеXML.УстановитьСтроку(ТекстовыйДокумент.ПолучитьТекст()); + Свойства = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML, ФабрикаXDTO.Тип("http://www.v8.1c.ru/ssl/patch", "Patch")); + Исключение + ТекстОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ВызватьИсключение НСтр("ru = 'Ошибка при чтении файла манифеста исправления'") + ":" + Символы.ПС + ТекстОшибки; + КонецПопытки; + + ОписанияПодсистем = СтандартныеПодсистемыПовтИсп.ОписанияПодсистем(); + + Для Каждого ИнформацияОПрименимости Из Свойства.AppliedFor Цикл + Если ИнформацияОПрименимости.ConfigurationName = "БиблиотекаСтандартныхПодсистем" Тогда + ИнформацияОПрименимости.ConfigurationName = "СтандартныеПодсистемы"; + КонецЕсли; + ВерсияБиблиотекиКонфигурации = ОписанияПодсистем.ПоИменам.Получить(ИнформацияОПрименимости.ConfigurationName); + + Если ВерсияБиблиотекиКонфигурации <> Неопределено + И СтрНайти(ИнформацияОПрименимости.Versions, ВерсияБиблиотекиКонфигурации.Версия) > 0 Тогда + Возврат Истина; + КонецЕсли; + КонецЦикла; + + Возврат Ложь; КонецФункции Функция РасширениеПоИдентификатору(Идентификатор) diff --git a/SSL/src/CommonModules/ОбновлениеКонфигурацииКлиент/Module.bsl b/SSL/src/CommonModules/ОбновлениеКонфигурацииКлиент/Module.bsl index 95e98f94d..ecb5645fe 100644 --- a/SSL/src/CommonModules/ОбновлениеКонфигурацииКлиент/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеКонфигурацииКлиент/Module.bsl @@ -35,7 +35,7 @@ Возврат Результат; КонецЕсли; - Если Не ПараметрыРаботыКлиента.ЭтоПолноправныйПользователь Тогда + Если Не ПараметрыРаботыКлиента.ЭтоАдминистраторСистемы Тогда Результат.ОписаниеОшибки = НСтр("ru = 'Для установки обновления требуются права администрирования.'"); Возврат Результат; КонецЕсли; @@ -161,7 +161,7 @@ // 0 - сейчас, 1 - при завершении работы, 2 - планирование обновления. // * ДатаВремяОбновления - Дата - Дата планируемого обновления. // * ВыслатьОтчетНаПочту - Булево - Признак необходимости отправки отчета на почту. -// * АдресЭлектроннойПочты - Строка - Адрес электронной почты для отправки обновления. +// * АдресЭлектроннойПочты - Строка - Адрес электронной почты для отправки отчета о результате обновления. // * КодЗадачиПланировщика - Число - Код задачи запланированного обновления. // * ИмяФайлаОбновления - Строка - Имя файла устанавливаемого обновления. // * СоздаватьРезервнуюКопию - Число - Признак необходимости создания резервной копии. @@ -179,7 +179,7 @@ // Процедура УстановитьОбновление(Форма, Параметры, ПараметрыАдминистрирования) Экспорт -#Если Не ВебКлиент И НЕ МобильныйКлиент Тогда +#Если Не ВебКлиент И Не МобильныйКлиент Тогда Если Не ВозможнаУстановкаОбновления(Параметры, ПараметрыАдминистрирования) Тогда Возврат; @@ -234,9 +234,12 @@ , Истина); +#Если Не ВебКлиент И Не МобильныйКлиент Тогда ПрочитатьДанныеВЖурналРегистрации(РезультатОбновления, КаталогСкрипта); +#КонецЕсли + КонецЕсли; - + КонецПроцедуры // Обновляет конфигурацию базы данных. @@ -257,14 +260,24 @@ Процедура ЗаписатьФайлПротоколаОшибкиИЗавершитьРаботу(КаталогСкрипта, ПодробноеПредставлениеОшибки) Экспорт #Если Не ВебКлиент Тогда - ФайлРегистрации = Новый ЗаписьТекста(КаталогСкрипта + "error.txt"); - ФайлРегистрации.Закрыть(); - ФайлЛога = Новый ЗаписьТекста(КаталогСкрипта + "templog.txt", КодировкаТекста.Системная); - ФайлЛога.Записать(ПодробноеПредставлениеОшибки); - ФайлЛога.Закрыть(); + Если СтрНайти(ПараметрЗапуска, "ВыполнитьОбновлениеИЗавершитьРаботу") Тогда + + ФайлИнфо = Новый Файл(КаталогСкрипта); + Если ФайлИнфо.Существует() Тогда // АПК:566 синхронные вызовы вне веб-клиента разрешены; + + ФайлРегистрации = Новый ЗаписьТекста(КаталогСкрипта + "error.txt"); + ФайлРегистрации.Закрыть(); + + ФайлЛога = Новый ЗаписьТекста(КаталогСкрипта + "templog.txt", КодировкаТекста.Системная); + ФайлЛога.Записать(ПодробноеПредставлениеОшибки); + ФайлЛога.Закрыть(); + + ПрекратитьРаботуСистемы(); + + КонецЕсли; + КонецЕсли; - ПрекратитьРаботуСистемы(); #КонецЕсли КонецПроцедуры @@ -337,29 +350,40 @@ Если ЭтоФайловаяБаза И Параметры.СоздаватьРезервнуюКопию = 2 Тогда Файл = Новый Файл(Параметры.ИмяКаталогаРезервнойКопииИБ); - Если Не Файл.Существует() Или Не Файл.ЭтоКаталог() Тогда - ПоказатьПредупреждение(, НСтр("ru = 'Укажите существующий каталог для сохранения резервной копии ИБ.'")); + Если Не Файл.Существует() Или Не Файл.ЭтоКаталог() Тогда // АПК:566 синхронные вызовы вне веб-клиента разрешены; + ПоказатьПредупреждение(, + НСтр("ru = 'Укажите существующий каталог для сохранения резервной копии ИБ.'")); Возврат Ложь; КонецЕсли; КонецЕсли; Если Параметры.РежимОбновления = 0 Тогда // Обновить сейчас ИмяПараметра = "СтандартныеПодсистемы.СообщенияДляЖурналаРегистрации"; - Если ЭтоФайловаяБаза И ОбновлениеКонфигурацииВызовСервера.НаличиеАктивныхСоединений(ПараметрыПриложения[ИмяПараметра]) Тогда - ПоказатьПредупреждение(, НСтр("ru = 'Невозможно продолжить обновление конфигурации, так как не завершены все соединения с информационной базой.'")); + Если ЭтоФайловаяБаза + И ОбновлениеКонфигурацииВызовСервера.НаличиеАктивныхСоединений(ПараметрыПриложения[ИмяПараметра]) Тогда + + ПоказатьПредупреждение(, + НСтр("ru = 'Невозможно продолжить обновление конфигурации, + |так как не завершены все соединения с информационной базой.'")); Возврат Ложь; КонецЕсли; ИначеЕсли Параметры.РежимОбновления = 2 Тогда Если Не ДатаОбновленияУказанаВерно(Параметры) Тогда Возврат Ложь; КонецЕсли; - Если Параметры.ВыслатьОтчетНаПочту - И Не ОбщегоНазначенияКлиентСервер.АдресЭлектроннойПочтыСоответствуетТребованиям(Параметры.АдресЭлектроннойПочты) Тогда - ПоказатьПредупреждение(, НСтр("ru = 'Укажите допустимый адрес электронной почты.'")); + + УказанНеДопустимыйАдресЭлектроннойПочты = Параметры.ВыслатьОтчетНаПочту + И Не ОбщегоНазначенияКлиентСервер.АдресЭлектроннойПочтыСоответствуетТребованиям(Параметры.АдресЭлектроннойПочты); + + Если УказанНеДопустимыйАдресЭлектроннойПочты Тогда + ПоказатьПредупреждение(, + НСтр("ru = 'Укажите допустимый адрес электронной почты.'")); Возврат Ложь; КонецЕсли; + Если Не ПоддерживаетсяПланировщикЗаданий() Тогда - ПоказатьПредупреждение(, НСтр("ru = 'Планировщик заданий поддерживается только начиная с операционной системы версии 6.0 Vista.'")); + ПоказатьПредупреждение(, + НСтр("ru = 'Планировщик заданий поддерживается только начиная с операционной системы версии 6.0 Vista.'")); Возврат Ложь; КонецЕсли; КонецЕсли; @@ -480,7 +504,7 @@ Возврат; КонецЕсли; -#Если НЕ ВебКлиент И НЕ МобильныйКлиент Тогда +#Если Не ВебКлиент И Не МобильныйКлиент Тогда ПараметрыРаботыКлиента = СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиентаПриЗапуске(); Если ПараметрыРаботыКлиента.РазделениеВключено Или Не ПараметрыРаботыКлиента.ДоступноИспользованиеРазделенныхДанных Тогда Возврат; @@ -510,6 +534,44 @@ КонецПроцедуры +Функция ПоддерживаетсяПланировщикЗаданий() + + // Планировщик заданий поддерживается начиная с версии 6.0 - Windows Vista. + + СистемнаяИнформация = Новый СистемнаяИнформация(); + + ПозицияТочки = СтрНайти(СистемнаяИнформация.ВерсияОС, "."); + Если ПозицияТочки < 2 Тогда + Возврат Ложь; + КонецЕсли; + + НомерВерсии = Сред(СистемнаяИнформация.ВерсияОС, ПозицияТочки - 2, 2); + + ОписаниеТипаЧисло = Новый ОписаниеТипов("Число"); + ВерсияВышеVista = ОписаниеТипаЧисло.ПривестиЗначение(НомерВерсии) >= 6; + + Возврат ВерсияВышеVista; + +КонецФункции + +Процедура ЗаписатьСобытияВЖурналРегистрации() Экспорт + + СобытияДляЖурналаРегистрации = ПараметрыПриложения["СтандартныеПодсистемы.СообщенияДляЖурналаРегистрации"]; + + Если ТипЗнч(СобытияДляЖурналаРегистрации) <> Тип("СписокЗначений") Тогда + Возврат; + КонецЕсли; + + Если СобытияДляЖурналаРегистрации.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + ЖурналРегистрацииВызовСервера.ЗаписатьСобытияВЖурналРегистрации(СобытияДляЖурналаРегистрации); + +КонецПроцедуры + +#Если Не ВебКлиент И Не МобильныйКлиент Тогда + Процедура ПрочитатьДанныеВЖурналРегистрации(РезультатОбновления, КаталогСкрипта) РезультатОбновления = Неопределено; @@ -543,12 +605,14 @@ ПредставлениеУровня = "Ошибка"; ПриОбновленииПроизошлаОшибка = Истина; КонецЕсли; - Комментарий = СокрЛП(Сред(ТекущаяСтрока, СтрНайти(ТекущаяСтрока, "}") + 2)); - Если Комментарий = "Обновление выполнено" Тогда // АПК:1297 не локализуется (фрагмент журнала) + Комментарий = СокрЛП(Сред(ТекущаяСтрока, СтрНайти(ТекущаяСтрока, "}") + 2)); + Если СтрНачинаетсяС(Комментарий, "ОбновлениеВыполненоУспешно") + Или Комментарий = "Обновление выполнено" Тогда // АПК:1297 не локализуется (фрагмент журнала), для совместимости РезультатОбновления = Истина; Продолжить; - ИначеЕсли Комментарий = "Обновление не выполнено" Тогда // АПК:1297 не локализуется (фрагмент журнала) + ИначеЕсли СтрНачинаетсяС(Комментарий, "ОбновлениеНеВыполнено") + Или Комментарий = "Обновление не выполнено" Тогда // АПК:1297 не локализуется (фрагмент журнала), для совместимости РезультатОбновления = Ложь; Продолжить; КонецЕсли; @@ -562,14 +626,10 @@ КонецЕсли; Комментарий = Комментарий + Символы.ПС + ТекущаяСтрока; - КонецЦикла; - ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации( - СобытиеЖурналаРегистрации(), - ПредставлениеУровня, - Комментарий, - ДатаСобытия); + ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(СобытиеЖурналаРегистрации(), + ПредставлениеУровня, Комментарий, ДатаСобытия); КонецЕсли; @@ -587,44 +647,6 @@ КонецПроцедуры -Процедура ЗаписатьСобытияВЖурналРегистрации() Экспорт - - СобытияДляЖурналаРегистрации = ПараметрыПриложения["СтандартныеПодсистемы.СообщенияДляЖурналаРегистрации"]; - - Если ТипЗнч(СобытияДляЖурналаРегистрации) <> Тип("СписокЗначений") Тогда - Возврат; - КонецЕсли; - - Если СобытияДляЖурналаРегистрации.Количество() = 0 Тогда - Возврат; - КонецЕсли; - - ЖурналРегистрацииВызовСервера.ЗаписатьСобытияВЖурналРегистрации(СобытияДляЖурналаРегистрации); - -КонецПроцедуры - -Функция ПоддерживаетсяПланировщикЗаданий() - - // Планировщик заданий поддерживается начиная с версии 6.0 - Windows Vista. - - СистемнаяИнформация = Новый СистемнаяИнформация(); - - ПозицияТочки = СтрНайти(СистемнаяИнформация.ВерсияОС, "."); - Если ПозицияТочки < 2 Тогда - Возврат Ложь; - КонецЕсли; - - НомерВерсии = Сред(СистемнаяИнформация.ВерсияОС, ПозицияТочки - 2, 2); - - ОписаниеТипаЧисло = Новый ОписаниеТипов("Число"); - ВерсияВышеVista = ОписаниеТипаЧисло.ПривестиЗначение(НомерВерсии) >= 6; - - Возврат ВерсияВышеVista; - -КонецФункции - -#Если Не ВебКлиент И НЕ МобильныйКлиент Тогда - Функция КодировкаФайловПрограммыОбновления() // wscript.exe может работать только с файлами в кодировке UTF-16 LE. @@ -928,9 +950,9 @@ #Если ВебКлиент Или МобильныйКлиент Тогда Возврат Ложь; #Иначе - Конфигуратор = КаталогПрограммы() + "1cv8.exe"; - ФайлИнфо = Новый Файл(Конфигуратор); - Возврат ФайлИнфо.Существует(); // АПК:566 синхронные вызовы вне веб-клиента разрешены; + Конфигуратор = КаталогПрограммы() + СтандартныеПодсистемыКлиент.ИмяИсполняемогоФайлаПриложения(Истина); + ФайлКонфигуратора = Новый Файл(Конфигуратор); + Возврат ФайлКонфигуратора.Существует(); // АПК:566 синхронные вызовы вне веб-клиента разрешены; #КонецЕсли КонецФункции diff --git a/SSL/src/CommonModules/ОбсужденияСлужебный/Module.bsl b/SSL/src/CommonModules/ОбсужденияСлужебный/Module.bsl index 5068705d1..c236de822 100644 --- a/SSL/src/CommonModules/ОбсужденияСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ОбсужденияСлужебный/Module.bsl @@ -8,6 +8,19 @@ #Область СлужебныйПрограммныйИнтерфейс +Функция Подключены() Экспорт + + Если Заблокированы() Тогда + Возврат Ложь; + КонецЕсли; + + // Вызов на сервере гарантирует получение корректного состояния в случае, + // когда данные регистрации информационной базы были изменены методом + // СистемаВзаимодействия.УстановитьДанныеРегистрацииИнформационнойБазы. + Возврат СистемаВзаимодействия.ИспользованиеДоступно(); + +КонецФункции + Функция Заблокированы() Экспорт УстановитьПривилегированныйРежим(Истина); @@ -89,4 +102,40 @@ КонецПроцедуры +Функция ОбсуждениеКонтекстное(Данные, Заголовок = Неопределено) Экспорт + + Обсуждение = Неопределено; + + УстановитьПривилегированныйРежим(Истина); + + КонтекстОбсуждения = Новый КонтекстОбсужденияСистемыВзаимодействия( + ПолучитьНавигационнуюСсылку(Данные)); + + ОтборОбсуждений = Новый ОтборОбсужденийСистемыВзаимодействия(); + ОтборОбсуждений.КонтекстноеОбсуждение = Истина; + ОтборОбсуждений.КонтекстОбсуждения = КонтекстОбсуждения; + + НайденноеОбсуждения = СистемаВзаимодействия.ПолучитьОбсуждения(ОтборОбсуждений); + + Если НайденноеОбсуждения.Количество() > 0 Тогда + Возврат НайденноеОбсуждения[0]; + КонецЕсли; + + Если Заголовок = Неопределено Тогда + + Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'История %1'"), Данные); + + КонецЕсли; + + Обсуждение = СистемаВзаимодействия.СоздатьОбсуждение(); + Обсуждение.Заголовок = Заголовок; + Обсуждение.КонтекстОбсуждения = КонтекстОбсуждения; + + Обсуждение.Записать(); + + Возврат Обсуждение; + +КонецФункции + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ОбсужденияСлужебныйВызовСервера/Module.bsl b/SSL/src/CommonModules/ОбсужденияСлужебныйВызовСервера/Module.bsl index 29da7c984..fd8007d14 100644 --- a/SSL/src/CommonModules/ОбсужденияСлужебныйВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/ОбсужденияСлужебныйВызовСервера/Module.bsl @@ -10,14 +10,7 @@ Функция Подключены() Экспорт - Если ОбсужденияСлужебный.Заблокированы() Тогда - Возврат Ложь; - КонецЕсли; - - // Вызов на сервере гарантирует получение корректного состояния в случае, - // когда данные регистрации информационной базы были изменены методом - // СистемаВзаимодействия.УстановитьДанныеРегистрацииИнформационнойБазы. - Возврат СистемаВзаимодействия.ИспользованиеДоступно(); + Возврат ОбсужденияСлужебный.Подключены(); КонецФункции diff --git a/SSL/src/CommonModules/ОбщегоНазначения/Module.bsl b/SSL/src/CommonModules/ОбщегоНазначения/Module.bsl index 349e5f0b5..d2b4e6dd4 100644 --- a/SSL/src/CommonModules/ОбщегоНазначения/Module.bsl +++ b/SSL/src/CommonModules/ОбщегоНазначения/Module.bsl @@ -81,17 +81,6 @@ // АПК:142-вкл -// Возвращает код основного языка конфигурации, например "ru". -// -// Возвращаемое значение: -// Строка - код языка. -// -Функция КодОсновногоЯзыка() Экспорт - - Возврат Метаданные.ОсновнойЯзык.КодЯзыка; - -КонецФункции - #КонецОбласти #Область ДанныеВБазе @@ -357,9 +346,8 @@ // то следует использовать предварительный переход в привилегированный режим. // // Параметры: -// Ссылки - Массив, ФиксированныйМассив - ссылки на объекты одного типа. -// Значения массива должны быть ссылками на объекты одного типа. -// если массив пуст, то результатом будет пустое соответствие. +// Ссылки - Массив, ФиксированныйМассив - ссылки на объекты. +// Если массив пуст, то результатом будет пустое соответствие. // Реквизиты - Строка - имена реквизитов перечисленные через запятую, в формате требований к свойствам // структуры. Например, "Код, Наименование, Родитель". // - Массив, ФиксированныйМассив - имена реквизитов в формате требований @@ -400,35 +388,60 @@ Возврат ЗначенияРеквизитов; КонецЕсли; - ПерваяСсылка = Ссылки[0]; + СсылкиПоТипам = Новый Соответствие; + Для Каждого Ссылка Из Ссылки Цикл + Тип = ТипЗнч(Ссылка); + Если СсылкиПоТипам[Тип] = Неопределено Тогда + СсылкиПоТипам[Тип] = Новый Массив; + КонецЕсли; + СсылкиПоТипам[Тип].Добавить(Ссылка); + КонецЦикла; - Попытка - ПолноеИмяОбъектаМетаданных = ПерваяСсылка.Метаданные().ПолноеИмя(); - Исключение - ВызватьИсключение - НСтр("ru = 'Неверный первый параметр Ссылки в функции ОбщегоНазначения.ЗначенияРеквизитовОбъектов: - |- Значения массива должны быть ссылками'"); - КонецПопытки; + ТекстыЗапросов = Новый Массив; + ПараметрыЗапроса = Новый Структура; - ТекстЗапроса = - "ВЫБРАТЬ РАЗРЕШЕННЫЕ - | Ссылка КАК Ссылка, - | &Реквизиты - |ИЗ - | &ПолноеИмяОбъектаМетаданных КАК Таблица - |ГДЕ - | Таблица.Ссылка В (&Ссылки)"; + ИменаОбъектовМетаданных = Новый Массив; - Если Не ВыбратьРазрешенные Тогда - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "РАЗРЕШЕННЫЕ", ""); - КонецЕсли; + Для Каждого СсылкиПоТипу Из СсылкиПоТипам Цикл + Тип = СсылкиПоТипу.Ключ; - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&Реквизиты", Реквизиты); - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПолноеИмяОбъектаМетаданных", ПолноеИмяОбъектаМетаданных); + Попытка + ПолноеИмяОбъектаМетаданных = Метаданные.НайтиПоТипу(Тип).ПолноеИмя(); + Исключение + ВызватьИсключение + НСтр("ru = 'Неверный первый параметр Ссылки в функции ОбщегоНазначения.ЗначенияРеквизитовОбъектов: + |- Значения массива должны быть ссылками'"); + КонецПопытки; + ИменаОбъектовМетаданных.Добавить(ПолноеИмяОбъектаМетаданных); + + ТекстЗапроса = + "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | Ссылка, + | &Реквизиты + |ИЗ + | &ПолноеИмяОбъектаМетаданных КАК Таблица + |ГДЕ + | Таблица.Ссылка В (&Ссылки)"; - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("Ссылки", Ссылки); - Запрос.Текст = ТекстЗапроса; + Если Не ВыбратьРазрешенные Тогда + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "РАЗРЕШЕННЫЕ", ""); + КонецЕсли; + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&Реквизиты", Реквизиты); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПолноеИмяОбъектаМетаданных", ПолноеИмяОбъектаМетаданных); + ИмяПараметра = "Ссылки" + СтрЗаменить(ПолноеИмяОбъектаМетаданных, ".", ""); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&Ссылки", "&" + ИмяПараметра); + ПараметрыЗапроса.Вставить(ИмяПараметра, СсылкиПоТипу.Значение); + + ТекстыЗапросов.Добавить(ТекстЗапроса); + КонецЦикла; + + ТекстЗапроса = СтрСоединить(ТекстыЗапросов, Символы.ПС + "ОБЪЕДИНИТЬ ВСЕ" + Символы.ПС); + + Запрос = Новый Запрос(ТекстЗапроса); + Для Каждого Параметр Из ПараметрыЗапроса Цикл + Запрос.УстановитьПараметр(Параметр.Ключ, Параметр.Значение); + КонецЦикла; Попытка Выборка = Запрос.Выполнить().Выбрать(); @@ -440,11 +453,18 @@ Реквизиты = СтрРазделить(Реквизиты, ","); // Поиск ошибки доступности полей. - Результат = НайтиОшибкуДоступностиРеквизитовОбъекта(ПолноеИмяОбъектаМетаданных, Реквизиты); - Если Результат.Ошибка Тогда + СписокОшибок = Новый Массив; + Для Каждого ПолноеИмяОбъектаМетаданных Из ИменаОбъектовМетаданных Цикл + Результат = НайтиОшибкуДоступностиРеквизитовОбъекта(ПолноеИмяОбъектаМетаданных, Реквизиты); + Если Результат.Ошибка Тогда + СписокОшибок.Добавить(Результат.ОписаниеОшибки); + КонецЕсли; + КонецЦикла; + + Если ЗначениеЗаполнено(СписокОшибок) Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Неверный второй параметр Реквизиты в функции ОбщегоНазначения.ЗначенияРеквизитовОбъектов: %1'"), - Результат.ОписаниеОшибки); + СтрСоединить(СписокОшибок, Символы.ПС)); КонецЕсли; // Не удалось распознать ошибку, проброс первичной ошибки. @@ -470,8 +490,7 @@ // то следует использовать предварительный переход в привилегированный режим. // // Параметры: -// МассивСсылок - Массив - массив ссылок на объекты одного типа. -// Значения массива должны быть ссылками на объекты одного типа. +// МассивСсылок - Массив - массив ссылок на объекты. // ИмяРеквизита - Строка - например, "Код". // ВыбратьРазрешенные - Булево - если Истина, то запрос к объектам выполняется с учетом прав пользователя; // если какой-либо объект будет исключен из выборки по правам, то этот объект @@ -500,6 +519,21 @@ КонецФункции +// Возвращает код основного языка информационной базы, например "ru". +// На котором программно записываются автогенерируемые строки в информационную базу. +// Например, при начальном заполнении информационной базы данными из макета, автогенерации комментария +// к проводке или определении значения параметра ИмяСобытия метода ЗаписьЖурналаРегистрации. +// +// Возвращаемое значение: +// Строка - код языка. +// +Функция КодОсновногоЯзыка() Экспорт + + УстановитьПривилегированныйРежим(Истина); + Возврат ПараметрыСеанса.ОсновнойЯзык; + +КонецФункции + // Возвращает ссылку предопределенного элемента по его полному имени. // Предопределенные элементы могут содержаться только в следующих объектах: // - справочники; @@ -703,45 +737,22 @@ // * Значение - ЛюбаяСсылка - на что заменяем (оригинал). // Ссылки сами на себя и пустые ссылки для поиска будут проигнорированы. // -// Параметры - Структура - Необязательный. Параметры замены. -// -// * СпособУдаления - Строка - необязательный. Что делать с дублем после успешной замены. -// "" - по умолчанию. Не предпринимать никаких действий. -// "Пометка" - помечать на удаление. -// "Непосредственно" - удалять непосредственно. -// -// * УчитыватьПрикладныеПравила - Булево - необязательный. Режим проверки параметра ПарыЗамен. -// Истина - по умолчанию. Проверять каждую пару "дубль-оригинал" (вызывается функция -// ВозможностьЗаменыЭлементов модуля менеджера). -// Ложь - отключить прикладные проверки пар. -// -// * ВключатьБизнесЛогику - Булево - необязательный. Режим записи мест использования при замене дублей на оригиналы. -// Истина - по умолчанию. Места использования дублей записываются в режиме ОбменДанными.Загрузка = Ложь. -// Ложь - запись ведется в режиме ОбменДанными.Загрузка = Истина. -// -// * ЗаменаПарыВТранзакции - Булево - необязательный. Определяет размер транзакции. -// Истина - по умолчанию. Транзакция охватывает все места использования одного дубля. Может быть очень ресурсоемко -// в случае большого количества мест использований. -// Ложь - замена каждого места использования выполняется в отдельной транзакции. -// -// * ПривилегированнаяЗапись - Булево - необязательный. Требуется ли устанавливать привилегированный режим перед запись. -// Ложь - по умолчанию. Записывать с текущими правами. -// Истина - записывать в привилегированном режиме. +// ПараметрыЗамены - Структура - см. ОбщегоНазначения.ПараметрыЗаменыСсылок. // // Возвращаемое значение: -// ТаблицаЗначений - неуспешные замены (ошибки). +// ТаблицаЗначений - неуспешные замены (ошибки): // * Ссылка - ЛюбаяСсылка - ссылка, которую заменяли. -// * ОбъектОшибки - Произвольный - объект - причина ошибки. +// * ОбъектОшибки - Произвольный - объект-причина ошибки. // * ПредставлениеОбъектаОшибки - Строка - строковое представление объекта ошибки. // * ТипОшибки - Строка - тип ошибки: // "ОшибкаБлокировки" - при обработке ссылки некоторые объекты были заблокированы. // "ДанныеИзменены" - в процессе обработки данные были изменены другим пользователем. // "ОшибкаЗаписи" - не смогли записать объект, или метод ВозможностьЗаменыЭлементов вернул отказ. // "ОшибкаУдаления" - не смогли удалить объект. -// "НеизвестныеДанные" - при обработке были найдены данные, которые не планировались к анализу, замена не реализована. +// "НеизвестныеДанные" - при обработке были найдены данные, которые не планировались к замене. // * ТекстОшибки - Строка - подробное описание ошибки. // -Функция ЗаменитьСсылки(Знач ПарыЗамен, Знач Параметры = Неопределено) Экспорт +Функция ЗаменитьСсылки(Знач ПарыЗамен, Знач ПараметрыЗамены = Неопределено) Экспорт ТипСтрока = Новый ОписаниеТипов("Строка"); @@ -759,17 +770,22 @@ Результат.Вставить("ЕстьОшибки", Ложь); Результат.Вставить("Ошибки", ОшибкиЗамены); - // Значения по умолчанию. - ПараметрыВыполнения = Новый Структура; - ПараметрыВыполнения.Вставить("УдалятьНепосредственно", Ложь); - ПараметрыВыполнения.Вставить("ПомечатьНаУдаление", Ложь); - ПараметрыВыполнения.Вставить("ВключатьБизнесЛогику", Истина); - ПараметрыВыполнения.Вставить("ПривилегированнаяЗапись", Ложь); - ПараметрыВыполнения.Вставить("УчитыватьПрикладныеПравила", Ложь); - ЗаменаПарыВТранзакции = Истина; + Если ПарыЗамен.Количество() = 0 Тогда + Возврат Результат.Ошибки; + КонецЕсли; - // Переданные значения. - ЗначениеПараметра = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "СпособУдаления"); + // Значения по умолчанию. + ПараметрыПоУмолчанию = ПараметрыЗаменыСсылок(); + ПараметрыВыполнения = Новый Структура; + ПараметрыВыполнения.Вставить("УдалятьНепосредственно", ПараметрыПоУмолчанию.СпособУдаления = "Непосредственно"); + ПараметрыВыполнения.Вставить("ПомечатьНаУдаление", ПараметрыПоУмолчанию.СпособУдаления = "Пометка"); + ПараметрыВыполнения.Вставить("ВключатьБизнесЛогику", ПараметрыПоУмолчанию.ВключатьБизнесЛогику); + ПараметрыВыполнения.Вставить("ПривилегированнаяЗапись", ПараметрыПоУмолчанию.ПривилегированнаяЗапись); + ПараметрыВыполнения.Вставить("УчитыватьПрикладныеПравила", ПараметрыПоУмолчанию.УчитыватьПрикладныеПравила); + ЗаменаПарыВТранзакции = ПараметрыПоУмолчанию.ЗаменаПарыВТранзакции; + + // Переданные параметры обрабатываются условно для обратной совместимости. + ЗначениеПараметра = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыЗамены, "СпособУдаления"); Если ЗначениеПараметра = "Непосредственно" Тогда ПараметрыВыполнения.УдалятьНепосредственно = Истина; ПараметрыВыполнения.ПомечатьНаУдаление = Ложь; @@ -778,30 +794,27 @@ ПараметрыВыполнения.ПомечатьНаУдаление = Истина; КонецЕсли; - ЗначениеПараметра = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "ВключатьБизнесЛогику"); + ЗначениеПараметра = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыЗамены, "ВключатьБизнесЛогику"); Если ТипЗнч(ЗначениеПараметра) = Тип("Булево") Тогда ПараметрыВыполнения.ВключатьБизнесЛогику = ЗначениеПараметра; КонецЕсли; - ЗначениеПараметра = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "ЗаменаПарыВТранзакции"); + ЗначениеПараметра = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыЗамены, "ЗаменаПарыВТранзакции"); Если ТипЗнч(ЗначениеПараметра) = Тип("Булево") Тогда ЗаменаПарыВТранзакции = ЗначениеПараметра; КонецЕсли; - ЗначениеПараметра = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "ПривилегированнаяЗапись"); + ЗначениеПараметра = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыЗамены, "ПривилегированнаяЗапись"); Если ТипЗнч(ЗначениеПараметра) = Тип("Булево") Тогда ПараметрыВыполнения.ПривилегированнаяЗапись = ЗначениеПараметра; КонецЕсли; - ЗначениеПараметра = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "УчитыватьПрикладныеПравила"); + ЗначениеПараметра = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыЗамены, "УчитыватьПрикладныеПравила"); Если ТипЗнч(ЗначениеПараметра) = Тип("Булево") Тогда ПараметрыВыполнения.УчитыватьПрикладныеПравила = ЗначениеПараметра; КонецЕсли; - Если ПарыЗамен.Количество() = 0 Тогда - Возврат Результат.Ошибки; - КонецЕсли; - + // Поиск дублей. Дубли = Новый Массив; Для Каждого КлючЗначение Из ПарыЗамен Цикл Дубль = КлючЗначение.Ключ; @@ -825,7 +838,7 @@ Если ПараметрыВыполнения.УчитыватьПрикладныеПравила И ПодсистемаСуществует("СтандартныеПодсистемы.ПоискИУдалениеДублей") Тогда МодульПоискИУдалениеДублей = ОбщийМодуль("ПоискИУдалениеДублей"); - Ошибки = МодульПоискИУдалениеДублей.ПроверитьВозможностьЗаменыЭлементов(ПарыЗамен, Параметры); + Ошибки = МодульПоискИУдалениеДублей.ПроверитьВозможностьЗаменыЭлементов(ПарыЗамен, ПараметрыЗамены); Для Каждого КлючЗначение Из Ошибки Цикл Дубль = КлючЗначение.Ключ; Оригинал = ПарыЗамен[Дубль]; @@ -852,7 +865,7 @@ ТаблицаПоиска.Колонки.Добавить("ЦелеваяСсылка"); ТаблицаПоиска.Колонки.Добавить("Обработано", Новый ОписаниеТипов("Булево")); - // Определяем порядок обработки и проверяем то, что мы можем обработать. + // Определяем порядок обработки и проверяем то, что можно обработать. Количество = Дубли.Количество(); Для Номер = 1 По Количество Цикл ОбратныйИндекс = Количество - Номер; @@ -869,13 +882,11 @@ КонецЕсли; КонецЦикла; + // Замена и удаление найденных дублей. ПараметрыВыполнения.Вставить("ПарыЗамен", ПарыЗамен); ПараметрыВыполнения.Вставить("УспешныеЗамены", Новый Соответствие); - Если ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда - МодульУправлениеДоступом = ОбщийМодуль("УправлениеДоступом"); - МодульУправлениеДоступом.ОтключитьОбновлениеКлючейДоступа(Истина); - КонецЕсли; + ОтключитьОбновлениеКлючейДоступа(Истина); Попытка Если ЗаменаПарыВТранзакции Тогда @@ -886,22 +897,47 @@ ЗаменитьСсылкиКороткимиТранзакциями(Результат, ПараметрыВыполнения, Дубли, ТаблицаПоиска); КонецЕсли; - Если ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда - МодульУправлениеДоступом = ОбщийМодуль("УправлениеДоступом"); - МодульУправлениеДоступом.ОтключитьОбновлениеКлючейДоступа(Ложь); - КонецЕсли; + ОтключитьОбновлениеКлючейДоступа(Ложь); Исключение - Если ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда - МодульУправлениеДоступом = ОбщийМодуль("УправлениеДоступом"); - МодульУправлениеДоступом.ОтключитьОбновлениеКлючейДоступа(Ложь); - КонецЕсли; + ОтключитьОбновлениеКлючейДоступа(Ложь); ВызватьИсключение; КонецПопытки; Возврат Результат.Ошибки; КонецФункции +// Конструктор структуры для параметра ПараметрыЗамены функции ОбщегоНазначения.ЗаменитьСсылки. +// +// Возвращаемое значение: +// Структура - со свойствами: +// * СпособУдаления - Строка - указывает, что делать с дублем после успешной замены: +// "" - не предпринимать никаких действий (по умолчанию); +// "Пометка" - помечать на удаление; +// "Непосредственно" - удалять непосредственно. +// * УчитыватьПрикладныеПравила - Булево - если Истина, то для каждой пары "дубль-оригинал" +// вызывается функция ВозможностьЗаменыЭлементов модуля менеджера +// (требуется подсистема "Поиск и удаление дублей"). По умолчанию, Ложь. +// * ВключатьБизнесЛогику - Булево - режим записи объектов при замене в них ссылок дублей на оригиналы. +// Если Истина (по умолчанию), то места использования дублей записываются в обычном режиме, +// иначе запись ведется в режиме ОбменДанными.Загрузка = Истина. +// * ЗаменаПарыВТранзакции - Булево - определяет размер транзакции при замене дублей. +// Если Истина (по умолчанию), то все места использования одного дубля заменяются в одной транзакции. +// Это может быть очень ресурсоемко в случае большого количества мест использований. +// Если Ложь, то замена в каждом месте использования выполняется в отдельной транзакции. +// * ПривилегированнаяЗапись - Булево - Если Истина, то устанавливать привилегированный режим перед запись +// объектов при замене в них ссылок дублей на оригиналы. По умолчанию Ложь. +// +Функция ПараметрыЗаменыСсылок() Экспорт + Результат = Новый Структура; + Результат.Вставить("СпособУдаления", ""); + Результат.Вставить("УчитыватьПрикладныеПравила", Ложь); + Результат.Вставить("ВключатьБизнесЛогику", Истина); + Результат.Вставить("ЗаменаПарыВТранзакции", Истина); + Результат.Вставить("ПривилегированнаяЗапись", Ложь); + Возврат Результат; +КонецФункции + // Получает все места использования ссылок. // Если какая-либо ссылка нигде не используется, то строк для нее в результирующей таблице не будет. // При вызове в неразделенном сеансе не выявляет ссылок в разделенных областях. @@ -1488,7 +1524,7 @@ // Возвращаемое значение: // Строка - адрес информационной базы, как он задан в настройке "Адрес в Интернете" в панели администрирования // (хранится в константе АдресПубликацииИнформационнойБазыВИнтернете). -// Например, "http://1c.ru/database". +// Например, "http://1c.com/database". // // Пример: // ОбщегоНазначения.АдресПубликацииИнформационнойБазыВЛокальнойСети() + "/" + e1cib/app/Обработка.ВыгрузкаДанныхПроекта"; @@ -1513,7 +1549,7 @@ // Например, "http://localserver/base". // // Пример: -// АдресПубликацииИнформационнойБазыВЛокальнойСети() + "/" + e1cib/app/Обработка.ВыгрузкаДанныхПроекта"; +// ОбщегоНазначения.АдресПубликацииИнформационнойБазыВЛокальнойСети() + "/" + e1cib/app/Обработка.ВыгрузкаДанныхПроекта"; // возвращает прямую ссылку для открытия обработки ВыгрузкаДанныхПроекта. // Функция АдресПубликацииИнформационнойБазыВЛокальнойСети() Экспорт @@ -2423,8 +2459,8 @@ Возврат Результат; КонецФункции -// Создает полную копию структуры, соответствия, массива, списка или таблицы значений, рекурсивно, -// с учетом типов дочерних элементов. При этом содержимое значений объектных типов +// Создает полную копию структуры, соответствия, массива, списка или таблицы значений, рекурсивно, +// с учетом типов дочерних элементов. При этом содержимое значений объектных типов // (СправочникОбъект, ДокументОбъект и т.п.) не копируются, а возвращаются ссылки на исходный объект. // // Параметры: @@ -2432,11 +2468,11 @@ // Соответствие, ФиксированноеСоответствие, // Массив, ФиксированныйМассив, // СписокЗначений - объект, который необходимо скопировать. -// ФиксироватьДанные - Булево, Неопределено - если Истина - фиксировать, +// ФиксироватьДанные - Булево, Неопределено - если Истина - фиксировать, // если Ложь - снять фиксацию, если Неопределено - не изменять. // // Возвращаемое значение: -// Структура, ФиксированнаяСтруктура, +// Структура - , ФиксированнаяСтруктура, // Соответствие, ФиксированноеСоответствие, // Массив, ФиксированныйМассив, // СписокЗначений - копия объекта, переданного в параметре Источник. @@ -3024,13 +3060,16 @@ // ПустаяСсылка = МенеджерСправочника.ПустаяСсылка(); // Функция МенеджерОбъектаПоПолномуИмени(ПолноеИмя) Экспорт + Перем КлассОМ, ИмяОМ, Менеджер; ЧастиИмени = СтрРазделить(ПолноеИмя, "."); Если ЧастиИмени.Количество() >= 2 Тогда КлассОМ = ЧастиИмени[0]; - ИмяОМ = ЧастиИмени[1]; + ИмяОМ = ЧастиИмени[1]; + Иначе + Менеджер = Неопределено; КонецЕсли; Если ВРег(КлассОМ) = "ПЛАНОБМЕНА" Тогда @@ -3073,21 +3112,24 @@ Менеджер = РегистрыБухгалтерии; ИначеЕсли ВРег(КлассОМ) = "РЕГИСТРРАСЧЕТА" Тогда - Если ЧастиИмени.Количество() = 2 Тогда - // Регистр расчета + + Если ЧастиИмени.Количество() = 2 Тогда Менеджер = РегистрыРасчета; - Иначе + + ИначеЕсли ЧастиИмени.Количество() = 4 Тогда КлассПодчиненногоОМ = ЧастиИмени[2]; ИмяПодчиненногоОМ = ЧастиИмени[3]; - Если ВРег(КлассПодчиненногоОМ) = "ПЕРЕРАСЧЕТ" Тогда - // Перерасчет - Попытка - Менеджер = РегистрыРасчета[ИмяОМ].Перерасчеты; - ИмяОм = ИмяПодчиненногоОМ; - Исключение - Менеджер = Неопределено; - КонецПопытки; + + Если ВРег(КлассПодчиненногоОМ) = "ПЕРЕРАСЧЕТ" Тогда + Менеджер = РегистрыРасчета[ИмяОМ].Перерасчеты; + ИмяОм = ИмяПодчиненногоОМ; + + Иначе + Менеджер = Неопределено; КонецЕсли; + + Иначе + Менеджер = Неопределено; КонецЕсли; ИначеЕсли ВРег(КлассОМ) = "БИЗНЕСПРОЦЕСС" Тогда @@ -3101,17 +3143,23 @@ ИначеЕсли ВРег(КлассОМ) = "ПОСЛЕДОВАТЕЛЬНОСТЬ" Тогда Менеджер = Последовательности; + + Иначе + Менеджер = Неопределено; КонецЕсли; - Если Менеджер <> Неопределено Тогда - Попытка - Возврат Менеджер[ИмяОМ]; - Исключение - Менеджер = Неопределено; - КонецПопытки; + Если Менеджер = Неопределено Тогда + ПроверитьОбъектМетаданныхСуществует(ПолноеИмя); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Объект метаданных ""%1"" не имеет менеджера объекта.'"), ПолноеИмя); КонецЕсли; - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Неизвестный тип объекта метаданных ""%1""'"), ПолноеИмя); + Попытка + Возврат Менеджер[ИмяОМ]; + Исключение + ПроверитьОбъектМетаданныхСуществует(ПолноеИмя); + ВызватьИсключение; + КонецПопытки; КонецФункции @@ -3268,7 +3316,7 @@ Возврат "Перечисление"; Иначе - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='Неверный тип значения параметра (%1)'"), Строка(ТипОбъекта)); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Неверный тип значения параметра (%1)'"), Строка(ТипОбъекта)); КонецЕсли; @@ -3787,6 +3835,60 @@ КонецФункции +// Возвращает строковое представление списка, заданное в свойствах объекта метаданных. +// В зависимости от того, какие свойства объекта метаданных заполнены, функция возвращают одно из них в указанном +// порядке: Расширенное представление списка, Представление списка, Синоним или Имя. +// +// Параметры: +// ОбъектМетаданных - ОбъектМетаданных - произвольный объект. +// +// Возвращаемое значение: +// Строка - представление списка. +// +Функция ПредставлениеСписка(ОбъектМетаданных) Экспорт + + СвойстваОбъекта = Новый Структура("РасширенноеПредставлениеСписка,ПредставлениеСписка"); + ЗаполнитьЗначенияСвойств(СвойстваОбъекта, ОбъектМетаданных); + + Если ЗначениеЗаполнено(СвойстваОбъекта.РасширенноеПредставлениеСписка) Тогда + Результат = СвойстваОбъекта.РасширенноеПредставлениеСписка; + ИначеЕсли ЗначениеЗаполнено(СвойстваОбъекта.ПредставлениеСписка) Тогда + Результат = СвойстваОбъекта.ПредставлениеСписка; + Иначе + Результат = ОбъектМетаданных.Представление(); + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Возвращает строковое представление объекта, заданное в свойствах объекта метаданных. +// В зависимости от того, какие свойства объекта метаданных заполнены, функция возвращают одно из них в указанном +// порядке: Расширенное представление объекта, Представление объекта, Синоним или Имя. +// +// Параметры: +// ОбъектМетаданных - ОбъектМетаданных - произвольный объект. +// +// Возвращаемое значение: +// Строка - представление объекта. +// +Функция ПредставлениеОбъекта(ОбъектМетаданных) Экспорт + + СвойстваОбъекта = Новый Структура("РасширенноеПредставлениеОбъекта,ПредставлениеОбъекта"); + ЗаполнитьЗначенияСвойств(СвойстваОбъекта, ОбъектМетаданных); + + Если ЗначениеЗаполнено(СвойстваОбъекта.РасширенноеПредставлениеОбъекта) Тогда + Результат = СвойстваОбъекта.РасширенноеПредставлениеОбъекта; + ИначеЕсли ЗначениеЗаполнено(СвойстваОбъекта.ПредставлениеОбъекта) Тогда + Результат = СвойстваОбъекта.ПредставлениеОбъекта; + Иначе + Результат = ОбъектМетаданных.Представление(); + КонецЕсли;; + + Возврат Результат; + +КонецФункции + #КонецОбласти #Область ХранилищеНастроек @@ -4260,7 +4362,7 @@ РезультатДиагностики.ОписаниеОшибки); КонецЕсли; - ЗаписьЖурналаРегистрации(НСтр("ru = 'WSПрокси'", КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(НСтр("ru = 'WSПрокси'", КодЛокализацииИнформационнойБазы()), УровеньЖурналаРегистрации.Ошибка,,, ТекстОшибки); ВызватьИсключение ТекстОшибки; КонецПопытки; @@ -4830,7 +4932,7 @@ КонецЕсли; Исключение ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru='Некорректное значение параметра ИмяМетода (%1) в ОбщегоНазначения.ВыполнитьМетодОбъекта'"), ИмяМетода); + НСтр("ru = 'Некорректное значение параметра ИмяМетода (%1) в ОбщегоНазначения.ВыполнитьМетодОбъекта'"), ИмяМетода); КонецПопытки; Если ПодсистемаСуществует("СтандартныеПодсистемы.ПрофилиБезопасности") Тогда @@ -5028,9 +5130,10 @@ УстановитьПривилегированныйРежим(Ложь); Если РегистрыСведений.ПараметрыРаботыПрограммы.НеобходимоОбновление() Тогда - ВызватьИсключение - НСтр("ru = 'Вход в программу временно невозможен в связи с обновлением на новую версию. - |Рекомендуется запрещать выполнение регламентных заданий на время обновления.'"); + Текст = НСтр("ru = 'Вход в программу временно невозможен в связи с обновлением на новую версию. + |Рекомендуется запрещать выполнение регламентных заданий на время обновления.'"); + РегламентныеЗаданияСервер.ОтменитьВыполнениеЗадания(РегламентноеЗадание, Текст); + ВызватьИсключение Текст; КонецЕсли; УстановитьПривилегированныйРежим(Истина); @@ -5038,10 +5141,11 @@ Если Не РазделениеВключено() И ПланыОбмена.ГлавныйУзел() = Неопределено И ЗначениеЗаполнено(Константы.ГлавныйУзел.Получить()) Тогда - - ВызватьИсключение - НСтр("ru = 'Вход в программу временно невозможен до восстановления связи с главным узлом. - |Рекомендуется запрещать выполнение регламентных заданий на время восстановления.'"); + + Текст = НСтр("ru = 'Вход в программу временно невозможен до восстановления связи с главным узлом. + |Рекомендуется запрещать выполнение регламентных заданий на время восстановления.'"); + РегламентныеЗаданияСервер.ОтменитьВыполнениеЗадания(РегламентноеЗадание, Текст); + ВызватьИсключение Текст; КонецЕсли; Если РегламентноеЗадание <> Неопределено @@ -5059,10 +5163,11 @@ РегламентныеЗаданияСервер.ИзменитьЗадание(Задание.УникальныйИдентификатор, Новый Структура("Использование", Ложь)); КонецЦикла; - ВызватьИсключение - НСтр("ru = 'Регламентное задание недоступно по функциональным опциям или - |не поддерживает работу в текущем режиме работы программы. - |Выполнение прервано. Задание отключено.'"); + Текст = НСтр("ru = 'Регламентное задание недоступно по функциональным опциям или + |не поддерживает работу в текущем режиме работы программы. + |Выполнение прервано. Задание отключено.'"); + РегламентныеЗаданияСервер.ОтменитьВыполнениеЗадания(РегламентноеЗадание, Текст); + ВызватьИсключение Текст; КонецЕсли; КонецЕсли; @@ -5092,6 +5197,11 @@ МассивПараметровДляОчистки.Удалить(Индекс); КонецЕсли; + Индекс = МассивПараметровДляОчистки.Найти("ОсновнойЯзык"); + Если Индекс <> Неопределено Тогда + МассивПараметровДляОчистки.Удалить(Индекс); + КонецЕсли; + Индекс = МассивПараметровДляОчистки.Найти("УстановленныеРасширения"); Если Индекс <> Неопределено Тогда МассивПараметровДляОчистки.Удалить(Индекс); @@ -5599,8 +5709,8 @@ Результат.ЕстьОшибки = Ложь; ФильтрСсылок.Ссылка = Дубль; - ФильтрСсылок.КлючЗамены = "Константа"; + МестаИспользования = ТаблицаПоиска.НайтиСтроки(ФильтрСсылок); Для Каждого МестоИспользования Из МестаИспользования Цикл ПроизвестиЗаменуВКонстанте(Результат, МестоИспользования, ПараметрыВыполнения, Истина); @@ -5637,15 +5747,11 @@ КонецЦикла; - // Окончательные действия Если ПараметрыВыполнения.УдалятьНепосредственно Тогда - УдалитьСсылкиНемонопольно(Результат, Дубли, ПараметрыВыполнения, Истина); - + УдалитьОбъектыНемонопольно(Результат, Дубли, ПараметрыВыполнения, Истина); ИначеЕсли ПараметрыВыполнения.ПомечатьНаУдаление Тогда - УдалитьСсылкиНемонопольно(Результат, Дубли, ПараметрыВыполнения, Ложь); - + УдалитьОбъектыНемонопольно(Результат, Дубли, ПараметрыВыполнения, Ложь); Иначе - // Поиск новых ТаблицаПовторногоПоиска = МестаИспользования(Дубли); ДобавитьРезультатыЗаменыИзмененныхОбъектов(Результат, ТаблицаПовторногоПоиска); КонецЕсли; @@ -5697,10 +5803,10 @@ ПроизводимыеЗамены.Добавить(Дубль); Если ПараметрыВыполнения.УдалятьНепосредственно Тогда - УдалитьСсылкиНемонопольно(Результат, ПроизводимыеЗамены, ПараметрыВыполнения, Истина); + УдалитьОбъектыНемонопольно(Результат, ПроизводимыеЗамены, ПараметрыВыполнения, Истина); ИначеЕсли ПараметрыВыполнения.ПомечатьНаУдаление Тогда - УдалитьСсылкиНемонопольно(Результат, ПроизводимыеЗамены, ПараметрыВыполнения, Ложь); + УдалитьОбъектыНемонопольно(Результат, ПроизводимыеЗамены, ПараметрыВыполнения, Ложь); Иначе // Поиск новых @@ -6369,92 +6475,99 @@ ВыполненныеЗамены.Добавить(ОписаниеЗамены); КонецПроцедуры -Процедура УдалитьСсылкиНемонопольно(Результат, Знач СписокСсылок, Знач ПараметрыВыполнения, Знач УдалятьНепосредственно) +Процедура УдалитьОбъектыНемонопольно(Результат, Знач УдаляемыеСсылки, Знач ПараметрыВыполнения, Знач УдалятьНепосредственно) УстановитьПривилегированныйРежим(Истина); - - Удаляемые = Новый Массив; - - ЛокальнаяТранзакция = Не ТранзакцияАктивна(); - Если ЛокальнаяТранзакция Тогда + ЕстьВнешняяТранзакция = ТранзакцияАктивна(); + ВсеМестаИспользования = МестаИспользования(УдаляемыеСсылки); + Для Каждого УдаляемаяСсылка Из УдаляемыеСсылки Цикл + Информация = ИнформацияОТипе(ТипЗнч(УдаляемаяСсылка), ПараметрыВыполнения); + Блокировка = Новый БлокировкаДанных; + Блокировка.Добавить(Информация.ПолноеИмя).УстановитьЗначение("Ссылка", УдаляемаяСсылка); + НачатьТранзакцию(); - КонецЕсли; - - Попытка - Для Каждого Ссылка Из СписокСсылок Цикл - Информация = ИнформацияОТипе(ТипЗнч(Ссылка), ПараметрыВыполнения); - Блокировка = Новый БлокировкаДанных; - Блокировка.Добавить(Информация.ПолноеИмя).УстановитьЗначение("Ссылка", Ссылка); - Попытка - Блокировка.Заблокировать(); - Удаляемые.Добавить(Ссылка); - Исключение - ЗарегистрироватьОшибкуВТаблицу(Результат, Ссылка, Неопределено, Ссылка, Информация, - "БлокировкаДляУдаленияДубля", ИнформацияОбОшибке()); - КонецПопытки; - КонецЦикла; - - ТаблицаПоиска = МестаИспользования(Удаляемые); - Фильтр = Новый Структура("Ссылка"); - - Для Каждого Ссылка Из Удаляемые Цикл - ПредставлениеСсылки = ПредметСтрокой(Ссылка); + Попытка + ЭтоОшибкаБлокировки = Истина; + Блокировка.Заблокировать(); - Фильтр.Ссылка = Ссылка; - МестаИспользования = ТаблицаПоиска.НайтиСтроки(Фильтр); - - Индекс = МестаИспользования.ВГраница(); - Пока Индекс >= 0 Цикл - Если МестаИспользования[Индекс].ВспомогательныеДанные Тогда - МестаИспользования.Удалить(Индекс); - КонецЕсли; - Индекс = Индекс - 1; - КонецЦикла; - - Если МестаИспользования.Количество() > 0 Тогда - ДобавитьРезультатыЗаменыИзмененныхОбъектов(Результат, МестаИспользования); - Продолжить; // Остались места использования, нельзя удалять. + ЭтоОшибкаБлокировки = Ложь; + Успешно = УдалитьОбъектНемонопольно(Результат, УдаляемаяСсылка, ВсеМестаИспользования, + ПараметрыВыполнения, УдалятьНепосредственно, ЕстьВнешняяТранзакция); + Если Не Успешно Тогда + ОтменитьТранзакцию(); + Продолжить; КонецЕсли; - - Объект = Ссылка.ПолучитьОбъект(); - Если Объект = Неопределено Тогда - Продолжить; // Уже удален. - КонецЕсли; - - Если Не ПараметрыВыполнения.ПривилегированнаяЗапись Тогда - УстановитьПривилегированныйРежим(Ложь); - КонецЕсли; - - Попытка - Если УдалятьНепосредственно Тогда - ОбработатьОбъектСПерехватомСообщений(Объект, "НепосредственноеУдаление", Неопределено, ПараметрыВыполнения); - Иначе - ОбработатьОбъектСПерехватомСообщений(Объект, "ПометкаУдаления", Неопределено, ПараметрыВыполнения); - КонецЕсли; - Исключение - ТекстОшибки = НСтр("ru = 'Ошибка удаления'") - + Символы.ПС - + СокрЛП(КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); - ОписаниеОшибки = ОписаниеОшибкиЗамены("ОшибкаУдаления", Ссылка, ПредставлениеСсылки, ТекстОшибки); - ЗарегистрироватьОшибкуЗамены(Результат, Ссылка, ОписаниеОшибки); - КонецПопытки; - - Если Не ПараметрыВыполнения.ПривилегированнаяЗапись Тогда - УстановитьПривилегированныйРежим(Истина); - КонецЕсли; - КонецЦикла; - - Если ЛокальнаяТранзакция Тогда ЗафиксироватьТранзакцию(); - КонецЕсли; - Исключение - Если ЛокальнаяТранзакция Тогда + Исключение ОтменитьТранзакцию(); - КонецЕсли; - КонецПопытки; + Если ЭтоОшибкаБлокировки Тогда + ЗарегистрироватьОшибкуВТаблицу(Результат, УдаляемаяСсылка, Неопределено, УдаляемаяСсылка, Информация, + "БлокировкаДляУдаленияДубля", ИнформацияОбОшибке()); + КонецЕсли; + Если ЕстьВнешняяТранзакция Тогда + ВызватьИсключение; + КонецЕсли; + КонецПопытки; + + КонецЦикла; КонецПроцедуры +Функция УдалитьОбъектНемонопольно(Результат, Знач УдаляемаяСсылка, Знач ВсеМестаИспользования, Знач ПараметрыВыполнения, + Знач УдалятьНепосредственно, ЕстьВнешняяТранзакция) + + УстановитьПривилегированныйРежим(Истина); + + ПредставлениеСсылки = ПредметСтрокой(УдаляемаяСсылка); + Фильтр = Новый Структура("Ссылка"); + Фильтр.Ссылка = УдаляемаяСсылка; + МестаИспользования = ВсеМестаИспользования.НайтиСтроки(Фильтр); + + Индекс = МестаИспользования.ВГраница(); + Пока Индекс >= 0 Цикл + Если МестаИспользования[Индекс].ВспомогательныеДанные Тогда + МестаИспользования.Удалить(Индекс); + КонецЕсли; + Индекс = Индекс - 1; + КонецЦикла; + + Если МестаИспользования.Количество() > 0 Тогда + ДобавитьРезультатыЗаменыИзмененныхОбъектов(Результат, МестаИспользования); + Возврат Ложь; // Остались места использования, нельзя удалять. + КонецЕсли; + + Объект = УдаляемаяСсылка.ПолучитьОбъект(); + Если Объект = Неопределено Тогда + Возврат Ложь; // Уже удален. + КонецЕсли; + + Если Не ПараметрыВыполнения.ПривилегированнаяЗапись Тогда + УстановитьПривилегированныйРежим(Ложь); + КонецЕсли; + + Успешно = Истина; + Попытка + ОбработатьОбъектСПерехватомСообщений(Объект, ?(УдалятьНепосредственно, "НепосредственноеУдаление", "ПометкаУдаления"), + Неопределено, ПараметрыВыполнения); + Исключение + Если УдалятьНепосредственно Тогда + ТекстОшибки = НСтр("ru = 'Элемент не был удален по причине:'"); + Иначе + ТекстОшибки = НСтр("ru = 'Элемент не был помечен на удаление по причине:'"); + КонецЕсли; + ТекстОшибки = ТекстОшибки + Символы.ПС + СокрЛП(КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); + ОписаниеОшибки = ОписаниеОшибкиЗамены("ОшибкаУдаления", УдаляемаяСсылка, ПредставлениеСсылки, ТекстОшибки); + ЗарегистрироватьОшибкуЗамены(Результат, УдаляемаяСсылка, ОписаниеОшибки); + Успешно = Ложь; + Если ЕстьВнешняяТранзакция Тогда + ВызватьИсключение; + КонецЕсли; + КонецПопытки; + + Возврат Успешно; + +КонецФункции + Процедура ДобавитьРезультатыЗаменыИзмененныхОбъектов(Результат, ТаблицаПовторногоПоиска) Фильтр = Новый Структура("ТипОшибки, Ссылка, ОбъектОшибки", ""); @@ -6551,6 +6664,16 @@ КонецПроцедуры +Процедура ОтключитьОбновлениеКлючейДоступа(Значение) + + Если ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + УстановитьПривилегированныйРежим(Истина); + МодульУправлениеДоступом = ОбщийМодуль("УправлениеДоступом"); + МодульУправлениеДоступом.ОтключитьОбновлениеКлючейДоступа(Значение); + КонецЕсли; + +КонецПроцедуры + Функция ОписаниеДвижений(Знач Мета) // можно закэшировать по Мета @@ -6821,7 +6944,6 @@ Попытка Объект.ОбменДанными.Загрузка = Не ПараметрыЗаписи.ВключатьБизнесЛогику; - Если Действие = "Запись" Тогда Если РежимЗаписи = Неопределено Тогда @@ -6833,22 +6955,16 @@ ИначеЕсли Действие = "ПометкаУдаления" Тогда МетаданныеОбъекта = Объект.Метаданные(); - Если ЭтоСправочник(МетаданныеОбъекта) Или ЭтоПланВидовХарактеристик(МетаданныеОбъекта) Или ЭтоПланСчетов(МетаданныеОбъекта) Тогда - Объект.УстановитьПометкуУдаления(Истина, Ложь); - Иначе Объект.УстановитьПометкуУдаления(Истина); - КонецЕсли; ИначеЕсли Действие = "НепосредственноеУдаление" Тогда - Объект.Удалить(); - КонецЕсли; Исключение @@ -6865,9 +6981,8 @@ Если ТекстИсключения = "" Тогда ВызватьИсключение; - Иначе - ВызватьИсключение СокрЛП(КраткоеПредставлениеОшибки(ИнформацияОбОшибке()) + Символы.ПС + СокрЛП(ТекстИсключения)); КонецЕсли; + ВызватьИсключение СокрЛП(КраткоеПредставлениеОшибки(ИнформацияОбОшибке()) + Символы.ПС + СокрЛП(ТекстИсключения)); КонецПопытки; Если СообщатьПовторно Тогда @@ -6929,7 +7044,7 @@ Функция СобытиеЖурналаРегистрацииЗаменыСсылок() - Возврат НСтр("ru='Поиск и удаление ссылок'", КодОсновногоЯзыка()); + Возврат НСтр("ru = 'Поиск и удаление ссылок'", КодОсновногоЯзыка()); КонецФункции @@ -7023,7 +7138,7 @@ КонецЕсли; КонецЕсли; - Информация = Новый Структура("ПолноеИмя, ПредставлениеЭлемента, ПредставлениеСписка, + Информация = Новый Структура("ПолноеИмя, ПредставлениеЭлемента, |Вид, Ссылочный, Технический, Разделенный, |Иерархический, |ЕстьПодчиненные, ИменаПодчиненных, @@ -7033,23 +7148,8 @@ // Заполнение базовой информации. Информация.ПолноеИмя = ПолноеИмя; - // Представления: элемента и списка. - СтандартныеСвойства = Новый Структура("ПредставлениеОбъекта, РасширенноеПредставлениеОбъекта, ПредставлениеСписка, РасширенноеПредставлениеСписка"); - ЗаполнитьЗначенияСвойств(СтандартныеСвойства, ОбъектМетаданных); - Если ЗначениеЗаполнено(СтандартныеСвойства.ПредставлениеОбъекта) Тогда - Информация.ПредставлениеЭлемента = СтандартныеСвойства.ПредставлениеОбъекта; - ИначеЕсли ЗначениеЗаполнено(СтандартныеСвойства.РасширенноеПредставлениеОбъекта) Тогда - Информация.ПредставлениеЭлемента = СтандартныеСвойства.РасширенноеПредставлениеОбъекта; - Иначе - Информация.ПредставлениеЭлемента = ОбъектМетаданных.Представление(); - КонецЕсли; - Если ЗначениеЗаполнено(СтандартныеСвойства.ПредставлениеСписка) Тогда - Информация.ПредставлениеСписка = СтандартныеСвойства.ПредставлениеСписка; - ИначеЕсли ЗначениеЗаполнено(СтандартныеСвойства.РасширенноеПредставлениеСписка) Тогда - Информация.ПредставлениеСписка = СтандартныеСвойства.РасширенноеПредставлениеСписка; - Иначе - Информация.ПредставлениеСписка = ОбъектМетаданных.Представление(); - КонецЕсли; + // Представление элемента. + Информация.ПредставлениеЭлемента = ПредставлениеОбъекта(ОбъектМетаданных); // Вид и его свойства. Информация.Вид = Лев(Информация.ПолноеИмя, СтрНайти(Информация.ПолноеИмя, ".")-1); @@ -7282,37 +7382,37 @@ Если МетаПериод = Периодичность.ПозицияРегистратора Тогда ДанныеИзмерения.Тип = Документы.ТипВсеСсылки(); - ДанныеИзмерения.Представление = НСтр("ru='Регистратор'"); + ДанныеИзмерения.Представление = НСтр("ru = 'Регистратор'"); ДанныеИзмерения.Ведущее = Истина; ОписаниеИзмерений.Вставить("Регистратор", ДанныеИзмерения); ИначеЕсли МетаПериод = Периодичность.Год Тогда ДанныеИзмерения.Тип = Новый ОписаниеТипов("Дата"); - ДанныеИзмерения.Представление = НСтр("ru='Период'"); + ДанныеИзмерения.Представление = НСтр("ru = 'Период'"); ДанныеИзмерения.Формат = НСтр("ru = 'ДФ=''yyyy ""г.""''; ДП=''Дата не задана'''"); ОписаниеИзмерений.Вставить("Период", ДанныеИзмерения); ИначеЕсли МетаПериод = Периодичность.День Тогда ДанныеИзмерения.Тип = Новый ОписаниеТипов("Дата"); - ДанныеИзмерения.Представление = НСтр("ru='Период'"); + ДанныеИзмерения.Представление = НСтр("ru = 'Период'"); ДанныеИзмерения.Формат = НСтр("ru = 'ДЛФ=D; ДП=''Дата не задана'''"); ОписаниеИзмерений.Вставить("Период", ДанныеИзмерения); ИначеЕсли МетаПериод = Периодичность.Квартал Тогда ДанныеИзмерения.Тип = Новый ОписаниеТипов("Дата"); - ДанныеИзмерения.Представление = НСтр("ru='Период'"); + ДанныеИзмерения.Представление = НСтр("ru = 'Период'"); ДанныеИзмерения.Формат = НСтр("ru = 'ДФ=''к """"квартал """"yyyy """"г.""""''; ДП=''Дата не задана'''"); ОписаниеИзмерений.Вставить("Период", ДанныеИзмерения); ИначеЕсли МетаПериод = Периодичность.Месяц Тогда ДанныеИзмерения.Тип = Новый ОписаниеТипов("Дата"); - ДанныеИзмерения.Представление = НСтр("ru='Период'"); + ДанныеИзмерения.Представление = НСтр("ru = 'Период'"); ДанныеИзмерения.Формат = НСтр("ru = 'ДФ=''ММММ yyyy """"г.""""''; ДП=''Дата не задана'''"); ОписаниеИзмерений.Вставить("Период", ДанныеИзмерения); ИначеЕсли МетаПериод = Периодичность.Секунда Тогда ДанныеИзмерения.Тип = Новый ОписаниеТипов("Дата"); - ДанныеИзмерения.Представление = НСтр("ru='Период'"); + ДанныеИзмерения.Представление = НСтр("ru = 'Период'"); ДанныеИзмерения.Формат = НСтр("ru = 'ДЛФ=DT; ДП=''Дата не задана'''"); ОписаниеИзмерений.Вставить("Период", ДанныеИзмерения); @@ -7320,7 +7420,7 @@ Иначе ДанныеИзмерения.Тип = Документы.ТипВсеСсылки(); - ДанныеИзмерения.Представление = НСтр("ru='Регистратор'"); + ДанныеИзмерения.Представление = НСтр("ru = 'Регистратор'"); ДанныеИзмерения.Ведущее = Истина; ОписаниеИзмерений.Вставить("Регистратор", ДанныеИзмерения); @@ -7768,33 +7868,16 @@ #КонецОбласти -#Область ВнешниеКомпоненты +#Область Метаданные -// Проверка существования макета по метаданным конфигурации и расширений. -// -// Параметры: -// ПолноеИмяМакета - Строка - полное имя макета. -// -// Возвращаемое значение: -// Булево - признак существования макета. -// -Функция МакетСуществует(ПолноеИмяМакета) +Процедура ПроверитьОбъектМетаданныхСуществует(ПолноеИмя) - Макет = Метаданные.НайтиПоПолномуИмени(ПолноеИмяМакета); - Если ТипЗнч(Макет) = Тип("ОбъектМетаданных") Тогда - - Шаблон = Новый Структура("ТипМакета"); - ЗаполнитьЗначенияСвойств(Шаблон, Макет); - ТипМакета = Неопределено; - Если Шаблон.Свойство("ТипМакета", ТипМакета) Тогда - Возврат ТипМакета <> Неопределено; - КонецЕсли; - + Если Метаданные.НайтиПоПолномуИмени(ПолноеИмя) = Неопределено Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Неизвестный тип объекта метаданных ""%1"".'"), ПолноеИмя); КонецЕсли; - Возврат Ложь; - -КонецФункции +КонецПроцедуры #КонецОбласти @@ -7830,7 +7913,7 @@ Результат = ЗначениеПоУмолчанию; Иначе УстановитьПривилегированныйРежим(Истина); - Если УдалитьБитыеСсылки(Результат) Тогда + Если ОчиститьНесуществующиеСсылки(Результат) Тогда Результат = ЗначениеПоУмолчанию; КонецЕсли; КонецЕсли; @@ -7839,20 +7922,19 @@ КонецФункции -// Удаляет битые ссылки из переменной. +// Удаляет из переданной коллекции ссылки, ссылающиеся на несуществующие данные в информационной базе, +// либо очищает переданное значение, если в нем передана несуществующая ссылка. // // Параметры: -// СсылкаИлиКоллекция - ЛюбаяСсылка, Произвольный - Проверяемый объект или очищаемая коллекция. +// Значение - ЛюбаяСсылка, Произвольный - Проверяемое значение или коллекция. // // Возвращаемое значение: -// Булево - -// * Истина - СсылкаИлиКоллекция ссылочного типа и объект не найден в базе данных. -// * Ложь - Когда СсылкаИлиКоллекция не ссылочного типа или объект найден в базе данных. +// Булево - Истина, если Значение ссылочного типа и объект не существует в информационной базе. +// Ложь, если Значение не ссылочного типа или объект существует. // -Функция УдалитьБитыеСсылки(СсылкаИлиКоллекция) - - Тип = ТипЗнч(СсылкаИлиКоллекция); +Функция ОчиститьНесуществующиеСсылки(Значение) + Тип = ТипЗнч(Значение); Если Тип = Тип("Неопределено") Или Тип = Тип("Булево") Или Тип = Тип("Строка") @@ -7863,12 +7945,11 @@ ИначеЕсли Тип = Тип("Массив") Тогда - Количество = СсылкаИлиКоллекция.Количество(); + Количество = Значение.Количество(); Для Номер = 1 По Количество Цикл ОбратныйИндекс = Количество - Номер; - Значение = СсылкаИлиКоллекция[ОбратныйИндекс]; - Если УдалитьБитыеСсылки(Значение) Тогда - СсылкаИлиКоллекция.Удалить(ОбратныйИндекс); + Если ОчиститьНесуществующиеСсылки(Значение[ОбратныйИндекс]) Тогда + Значение.Удалить(ОбратныйИндекс); КонецЕсли; КонецЦикла; @@ -7877,10 +7958,9 @@ ИначеЕсли Тип = Тип("Структура") Или Тип = Тип("Соответствие") Тогда - Для Каждого КлючИЗначение Из СсылкаИлиКоллекция Цикл - Значение = КлючИЗначение.Значение; - Если УдалитьБитыеСсылки(Значение) Тогда - СсылкаИлиКоллекция.Вставить(КлючИЗначение.Ключ, Неопределено); + Для Каждого КлючИЗначение Из Значение Цикл + Если ОчиститьНесуществующиеСсылки(КлючИЗначение.Значение) Тогда + Значение.Вставить(КлючИЗначение.Ключ, Неопределено); КонецЕсли; КонецЦикла; @@ -7897,10 +7977,10 @@ Или Задачи.ТипВсеСсылки().СодержитТип(Тип) Тогда // Ссылочный тип, исключая ТочкаМаршрутаБизнесПроцессаСсылка. - Если СсылкаИлиКоллекция.Пустая() Тогда + Если Значение.Пустая() Тогда Возврат Ложь; // Ссылка пустая. - ИначеЕсли ЗначениеРеквизитаОбъекта(СсылкаИлиКоллекция, "Ссылка") = Неопределено Тогда - СсылкаИлиКоллекция = Неопределено; + ИначеЕсли ЗначениеРеквизитаОбъекта(Значение, "Ссылка") = Неопределено Тогда + Значение = Неопределено; Возврат Истина; // "Битая" ссылка. Иначе Возврат Ложь; // Объект найден. @@ -8041,8 +8121,8 @@ // Имя - Строка - имя например, "Справочник", "Справочники", "Справочник.Организации". // // Возвращаемое значение: -// СправочникиМенеджер, СправочникМенеджер, ДокументыМенеджер, ДокументМенеджер, ... -// +// СправочникиМенеджер - , СправочникМенеджер, ДокументыМенеджер, ДокументМенеджер, ... +// Функция МенеджерОбъектаПоИмени(Имя) Перем КлассОМ, ИмяОМ, Менеджер; @@ -8169,6 +8249,141 @@ КонецФункции +// Вызвать экспортную функцию по имени с уровнем привилегий конфигурации. +// При включении профилей безопасности для вызова оператора Выполнить() используется +// переход в безопасный режим с профилем безопасности, используемом для информационной базы +// (если выше по стеку не был установлен другой безопасный режим). +// +// Параметры: +// ИмяМетода - Строка - имя экспортной функции в формате +// <имя объекта>.<имя процедуры>, где <имя объекта> - это +// общий модуль или модуль менеджера объекта. +// Параметры - Массив - параметры передаются в функцию <ИмяМетода> +// в порядке расположения элементов массива. +// +// Возвращаемое значение: +// Произвольный - результат вызываемой функции. +// +Функция ВызватьФункциюКонфигурации(Знач ИмяМетода, Знач Параметры = Неопределено) Экспорт + + ПроверитьИмяПроцедурыКонфигурации(ИмяМетода); + + Если ПодсистемаСуществует("СтандартныеПодсистемы.ПрофилиБезопасности") Тогда + МодульРаботаВБезопасномРежиме = ОбщийМодуль("РаботаВБезопасномРежиме"); + Если МодульРаботаВБезопасномРежиме.ИспользуютсяПрофилиБезопасности() + И Не МодульРаботаВБезопасномРежиме.УстановленБезопасныйРежим() Тогда + + ПрофильИнформационнойБазы = МодульРаботаВБезопасномРежиме.ПрофильБезопасностиИнформационнойБазы(); + Если ЗначениеЗаполнено(ПрофильИнформационнойБазы) Тогда + + УстановитьБезопасныйРежим(ПрофильИнформационнойБазы); + Если БезопасныйРежим() = Истина Тогда + УстановитьБезопасныйРежим(Ложь); + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + КонецЕсли; + + ПараметрыСтрока = ""; + Если Параметры <> Неопределено И Параметры.Количество() > 0 Тогда + Для Индекс = 0 По Параметры.ВГраница() Цикл + ПараметрыСтрока = ПараметрыСтрока + "Параметры[" + Индекс + "],"; + КонецЦикла; + ПараметрыСтрока = Сред(ПараметрыСтрока, 1, СтрДлина(ПараметрыСтрока) - 1); + КонецЕсли; + + Возврат Вычислить(ИмяМетода + "(" + ПараметрыСтрока + ")"); // АПК:488 Исполняемый код безопасен. + +КонецФункции + +// Вызвать экспортную функцию объекта встроенного языка по имени. +// При включении профилей безопасности для вызова оператора Выполнить() используется +// переход в безопасный режим с профилем безопасности, используемом для информационной базы +// (если выше по стеку не был установлен другой безопасный режим). +// +// Параметры: +// Объект - Произвольный - объект встроенного языка 1С:Предприятия, содержащий методы (например, ОбработкаОбъект). +// ИмяМетода - Строка - имя экспортной функции модуля объекта обработки. +// Параметры - Массив - параметры передаются в функцию <ИмяМетода> +// в порядке расположения элементов массива. +// +// Возвращаемое значение: +// Произвольный - результат вызываемой функции. +// +Функция ВызватьФункциюОбъекта(Знач Объект, Знач ИмяМетода, Знач Параметры = Неопределено) Экспорт + + // Проверка имени метода на корректность. + Попытка + Тест = Новый Структура(ИмяМетода, ИмяМетода); + Исключение + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Некорректное значение параметра ИмяМетода (%1) в ОбщегоНазначения.ВыполнитьМетодОбъекта'"), ИмяМетода); + КонецПопытки; + + Если ПодсистемаСуществует("СтандартныеПодсистемы.ПрофилиБезопасности") Тогда + МодульРаботаВБезопасномРежиме = ОбщийМодуль("РаботаВБезопасномРежиме"); + Если МодульРаботаВБезопасномРежиме.ИспользуютсяПрофилиБезопасности() + И Не МодульРаботаВБезопасномРежиме.УстановленБезопасныйРежим() Тогда + + МодульРаботаВБезопасномРежиме = ОбщийМодуль("РаботаВБезопасномРежиме"); + ПрофильИнформационнойБазы = МодульРаботаВБезопасномРежиме.ПрофильБезопасностиИнформационнойБазы(); + + Если ЗначениеЗаполнено(ПрофильИнформационнойБазы) Тогда + + УстановитьБезопасныйРежим(ПрофильИнформационнойБазы); + Если БезопасныйРежим() = Истина Тогда + УстановитьБезопасныйРежим(Ложь); + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + КонецЕсли; + + ПараметрыСтрока = ""; + Если Параметры <> Неопределено И Параметры.Количество() > 0 Тогда + Для Индекс = 0 По Параметры.ВГраница() Цикл + ПараметрыСтрока = ПараметрыСтрока + "Параметры[" + Индекс + "],"; + КонецЦикла; + ПараметрыСтрока = Сред(ПараметрыСтрока, 1, СтрДлина(ПараметрыСтрока) - 1); + КонецЕсли; + + Возврат Вычислить("Объект." + ИмяМетода + "(" + ПараметрыСтрока + ")"); // АПК:488 Исполняемый код безопасен. + +КонецФункции + +#КонецОбласти + +#Область Прочее_ПодключитьКомпонентуИзМакета + +// Проверка существования макета по метаданным конфигурации и расширений. +// +// Параметры: +// ПолноеИмяМакета - Строка - полное имя макета. +// +// Возвращаемое значение: +// Булево - признак существования макета. +// +Функция МакетСуществует(ПолноеИмяМакета) + + Макет = Метаданные.НайтиПоПолномуИмени(ПолноеИмяМакета); + Если ТипЗнч(Макет) = Тип("ОбъектМетаданных") Тогда + + Шаблон = Новый Структура("ТипМакета"); + ЗаполнитьЗначенияСвойств(Шаблон, Макет); + ТипМакета = Неопределено; + Если Шаблон.Свойство("ТипМакета", ТипМакета) Тогда + Возврат ТипМакета <> Неопределено; + КонецЕсли; + + КонецЕсли; + + Возврат Ложь; + +КонецФункции + #КонецОбласти #КонецОбласти diff --git a/SSL/src/CommonModules/ОбщегоНазначенияВызовСервера/Module.bsl b/SSL/src/CommonModules/ОбщегоНазначенияВызовСервера/Module.bsl index 85fc454ae..3b103c41a 100644 --- a/SSL/src/CommonModules/ОбщегоНазначенияВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/ОбщегоНазначенияВызовСервера/Module.bsl @@ -102,7 +102,8 @@ КлючНастроек, Настройки, ОписаниеНастроек, - ИмяПользователя); + ИмяПользователя, + ОбновитьПовторноИспользуемыеЗначения); КонецПроцедуры diff --git a/SSL/src/CommonModules/ОбщегоНазначенияКлиент/Module.bsl b/SSL/src/CommonModules/ОбщегоНазначенияКлиент/Module.bsl index 9bc88b593..b1581eec2 100644 --- a/SSL/src/CommonModules/ОбщегоНазначенияКлиент/Module.bsl +++ b/SSL/src/CommonModules/ОбщегоНазначенияКлиент/Module.bsl @@ -73,19 +73,6 @@ // АПК:142-вкл -// Возвращает код основного языка конфигурации, например "ru". -// -// См. ОбщегоНазначения.КодОсновногоЯзыка -// -// Возвращаемое значение: -// Строка - код языка. -// -Функция КодОсновногоЯзыка() Экспорт - - Возврат СтандартныеПодсистемыКлиент.ПараметрКлиента("КодОсновногоЯзыка"); - -КонецФункции - #КонецОбласти #Область ДанныеВБазе @@ -134,6 +121,20 @@ КонецФункции +// Возвращает код основного языка информационной базы, например "ru". +// На котором программно записываются автогенерируемые строки в информационную базу. +// Например, при начальном заполнении информационной базы данными из макета, автогенерации комментария +// к проводке или определении значения параметра ИмяСобытия метода ЗаписьЖурналаРегистрации. +// +// Возвращаемое значение: +// Строка - код языка. +// +Функция КодОсновногоЯзыка() Экспорт + + Возврат СтандартныеПодсистемыКлиент.ПараметрКлиента("КодОсновногоЯзыка"); + +КонецФункции + #КонецОбласти #Область УсловныеВызовы @@ -424,8 +425,8 @@ //////////////////////////////////////////////////////////////////////////////// // Общие процедуры и функции для работы с прикладными типами и коллекциями значений. -// Создает полную копию структуры, соответствия, массива, списка или таблицы значений, рекурсивно, -// с учетом типов дочерних элементов. При этом содержимое значений объектных типов +// Создает полную копию структуры, соответствия, массива, списка или таблицы значений, рекурсивно, +// с учетом типов дочерних элементов. При этом содержимое значений объектных типов // (СправочникОбъект, ДокументОбъект и т.п.) не копируются, а возвращаются ссылки на исходный объект. // // См. ОбщегоНазначения.СкопироватьРекурсивно @@ -435,11 +436,11 @@ // Соответствие, ФиксированноеСоответствие, // Массив, ФиксированныйМассив, // СписокЗначений - объект, который необходимо скопировать. -// ФиксироватьДанные - Булево, Неопределено - если Истина - фиксировать, +// ФиксироватьДанные - Булево, Неопределено - если Истина - фиксировать, // если Ложь - снять фиксацию, если Неопределено - не изменять. // // Возвращаемое значение: -// Структура, ФиксированнаяСтруктура, +// Структура - , ФиксированнаяСтруктура, // Соответствие, ФиксированноеСоответствие, // Массив, ФиксированныйМассив, // СписокЗначений - копия объекта, переданного в параметре Источник. @@ -719,6 +720,22 @@ КонецПроцедуры +// Открывает форму выбора формата вложений. +// +// Параметры: +// ОписаниеОповещения - ОписаниеОповещения - обработчик результата выбора. +// НастройкиФормата - Структура - настройки по умолчанию в форме: +// * УпаковатьВАрхив - Булево - признак необходимости упаковки вложений в архив. +// * ФорматыСохранения - Массив - список выбранных форматов вложений. +// * ПереводитьИменаФайловВТранслит - Булево - преобразовывать кириллические символы в латиницу. +// Владелец - ФормаКлиентскогоПриложения - форма, из которой вызывается форма выбора вложений. +// +Процедура ПоказатьВыборФорматаВложений(ОписаниеОповещения, НастройкиФормата, Владелец = Неопределено) Экспорт + ПараметрыФормы = Новый Структура("НастройкиФормата", НастройкиФормата); + ОткрытьФорму("ОбщаяФорма.ВыборФорматаВложений", ПараметрыФормы, , , , , + ОписаниеОповещения, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); +КонецПроцедуры + #КонецОбласти #Область ФормыРедактирования @@ -791,7 +808,7 @@ ОбщегоНазначенияСлужебныйКлиент, Контекст); - ЗаголовокФормы = ?(Заголовок <> Неопределено, Заголовок, НСтр("ru='Комментарий'")); + ЗаголовокФормы = ?(Заголовок <> Неопределено, Заголовок, НСтр("ru = 'Комментарий'")); ПоказатьФормуРедактированияМногострочногоТекста(Оповещение, МногострочныйТекст, ЗаголовокФормы); @@ -1096,17 +1113,16 @@ КонецПроцедуры -// Устанавливает внешнее соединение с информационной базой по переданным параметрам подключения и возвращает указатель -// на это соединение. +// Устанавливает внешнее соединение с информационной базой по переданным параметрам подключения и возвращает его. // -// См. ОбщегоНазначения.УстановитьВнешнееСоединениеСБазой +// См. ОбщегоНазначения.УстановитьВнешнееСоединениеСБазой. // // Параметры: // Параметры - Структура - См. ОбщегоНазначенияКлиентСервер.СтруктураПараметровДляУстановкиВнешнегоСоединения // // Возвращаемое значение: // Структура - информация о соединении: -// * Соединение - COMОбъект, Неопределено - указатель на COM-объект соединения или Неопределено в случае ошибки; +// * Соединение - COMОбъект, Неопределено - COM-объект соединения или Неопределено в случае ошибки; // * КраткоеОписаниеОшибки - Строка - краткое описание ошибки; // * ПодробноеОписаниеОшибки - Строка - подробное описание ошибки; // * ОшибкаПодключенияКомпоненты - Булево - флаг ошибки подключения COM. @@ -1175,7 +1191,7 @@ КонецПроцедуры // Устарела. Следует использовать ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботыСФайлами -// Предлагает пользователю установить расширение работы с файлами в веб-клиенте. +// Предлагает пользователю установить расширение для работы с 1С:Предприятием в веб-клиенте. // Предназначена для использования в начале участков кода, в которых ведется работа с файлами. // // Параметры: @@ -1191,7 +1207,7 @@ // Пример: // // Оповещение = Новый ОписаниеОповещения("ПечатьДокументаЗавершение", ЭтотОбъект); -// ТекстСообщения = НСтр("ru = 'Для печати документа необходимо установить расширение работы с файлами.'"); +// ТекстСообщения = НСтр("ru = 'Для печати документа необходимо установить расширение для работы с 1С:Предприятием.'"); // ОбщегоНазначенияКлиент.ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(Оповещение, ТекстСообщения); // // Процедура ПечатьДокументаЗавершение(РасширениеПодключено, ДополнительныеПараметры) Экспорт @@ -1215,7 +1231,7 @@ КонецПроцедуры // Устарела. Следует использовать ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботыСФайлами -// Предлагает пользователю подключить расширение работы с файлами в веб-клиенте, +// Предлагает пользователю подключить расширение для работы с 1С:Предприятием в веб-клиенте, // и в случае отказа выдает предупреждение о невозможности продолжения операции. // Предназначена для использования в начале участков кода, в которых ведется работа с файлами // только при подключенном расширении. @@ -1225,7 +1241,7 @@ // подключено со следующими параметрами: // Результат - Булево - всегда Истина. // ДополнительныеПараметры - Неопределено -// ТекстПредложения - Строка - текст с предложением подключить расширение работы с файлами. +// ТекстПредложения - Строка - текст с предложением подключить расширение для работы с 1С:Предприятием. // Если не указан, то выводится текст по умолчанию. // ТекстПредупреждения - Строка - текст предупреждения о невозможности продолжения операции. // Если не указан, то выводится текст по умолчанию. @@ -1236,7 +1252,7 @@ // Пример: // // Оповещение = Новый ОписаниеОповещения("ПечатьДокументаЗавершение", ЭтотОбъект); -// ТекстСообщения = НСтр("ru = 'Для печати документа необходимо установить расширение работы с файлами.'"); +// ТекстСообщения = НСтр("ru = 'Для печати документа необходимо установить расширение для работы с 1С:Предприятием.'"); // ОбщегоНазначенияКлиент.ПроверитьРасширениеРаботыСФайламиПодключено(Оповещение, ТекстСообщения); // // Процедура ПечатьДокументаЗавершение(Результат, ДополнительныеПараметры) Экспорт @@ -1335,8 +1351,8 @@ // Пример: // ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку("e1cib/navigationpoint/startpage"); // начальная страница. // ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку("v8help://1cv8/QueryLanguageFullTextSearchInData"); -// ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку("https://1c.ru"); -// ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку("mailto:help@1c.ru"); +// ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку("https://1c.com"); +// ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку("mailto:help@1c.com"); // ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку("skype:echo123?call"); // Процедура ОткрытьНавигационнуюСсылку(НавигационнаяСсылка, Знач Оповещение = Неопределено) Экспорт diff --git a/SSL/src/CommonModules/ОбщегоНазначенияКлиентПовтИсп/Module.bsl b/SSL/src/CommonModules/ОбщегоНазначенияКлиентПовтИсп/Module.bsl index 2ef5f3f51..d18032935 100644 --- a/SSL/src/CommonModules/ОбщегоНазначенияКлиентПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ОбщегоНазначенияКлиентПовтИсп/Module.bsl @@ -14,7 +14,7 @@ // ИмяЦветаСтиля - Строка - Имя элемента стиля. // // Возвращаемое значение: -// Цвет. +// Цвет - . // Функция ЦветСтиля(ИмяЦветаСтиля) Экспорт @@ -28,7 +28,7 @@ // ИмяШрифтаСтиля - Строка - Имя шрифта стиля. // // Возвращаемое значение: -// Шрифт. +// Шрифт - . // Функция ШрифтСтиля(ИмяШрифтаСтиля) Экспорт diff --git a/SSL/src/CommonModules/ОбщегоНазначенияКлиентСервер/Module.bsl b/SSL/src/CommonModules/ОбщегоНазначенияКлиентСервер/Module.bsl index 41722c6bb..b2134c4b3 100644 --- a/SSL/src/CommonModules/ОбщегоНазначенияКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ОбщегоНазначенияКлиентСервер/Module.bsl @@ -89,9 +89,8 @@ Если Ошибки = Неопределено Тогда Возврат; - Иначе - Отказ = Истина; КонецЕсли; + Отказ = Истина; Для каждого Ошибка Из Ошибки.СписокОшибок Цикл @@ -1004,7 +1003,9 @@ // Функция СоздатьГруппуЭлементовОтбора(Знач КоллекцияЭлементов, Представление, ТипГруппы) Экспорт - Если ТипЗнч(КоллекцияЭлементов) = Тип("ГруппаЭлементовОтбораКомпоновкиДанных") Тогда + Если ТипЗнч(КоллекцияЭлементов) = Тип("ГруппаЭлементовОтбораКомпоновкиДанных") + Или ТипЗнч(КоллекцияЭлементов) = Тип("ОтборКомпоновкиДанных") Тогда + КоллекцияЭлементов = КоллекцияЭлементов.Элементы; КонецЕсли; @@ -2335,7 +2336,7 @@ // Информация пользователя и имя сервера. СтрокаАвторизации = ""; ИмяСервера = СтрокаСоединения; - Позиция = СтрНайти(СтрокаСоединения, "@"); + Позиция = СтрНайти(СтрокаСоединения, "@", НаправлениеПоиска.СКонца); Если Позиция > 0 Тогда СтрокаАвторизации = Лев(СтрокаСоединения, Позиция - 1); ИмяСервера = Сред(СтрокаСоединения, Позиция + 1); @@ -2484,7 +2485,6 @@ Если ЭлементСписка <> Неопределено Тогда ЭлементСписокОтбора.ПравоеЗначение.Удалить(ЭлементСписка); КонецЕсли; - ЭлементСписокОтбора.ПравоеЗначение = ЭлементСписокОтбора.ПравоеЗначение; Возврат; КонецЕсли; КонецЦикла; @@ -3416,13 +3416,13 @@ #Если ВнешнееСоединение Тогда ВызватьИсключение НСтр("ru = 'Недопустимое значение параметра ПараметрыЗапускаПрограммы.ВыполнитьСНаивысшимиПравами. - |Повешение привилегий системы не доступно из внешнего соединения.'"); + |Повышение привилегий системы не доступно из внешнего соединения.'"); #КонецЕсли #Если Сервер Тогда ВызватьИсключение НСтр("ru = 'Недопустимое значение параметра ПараметрыЗапускаПрограммы.ВыполнитьСНаивысшимиПравами. - |Повешение привилегий системы не доступно на сервере.'"); + |Повышение привилегий системы не доступно на сервере.'"); #КонецЕсли КонецЕсли; @@ -3616,7 +3616,7 @@ // // Пример: // // Диагностика веб-сервиса адресного классификатора. -// Результат = ОбщегоНазначенияКлиентСервер.ДиагностикаСоединения("https://api.orgaddress.1c.ru/orgaddress/v1?wsdl"); +// Результат = ОбщегоНазначенияКлиентСервер.ДиагностикаСоединения("https://api.orgaddress.1c.com/orgaddress/v1?wsdl"); // // ОписаниеОшибки = Результат.ОписаниеОшибки; // ЖурналДиагностики = Результат.ЖурналДиагностики; @@ -3856,7 +3856,7 @@ Индекс = Индекс + 1; Если Индекс > 10 Тогда Результат = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru='%1,... (всего %2 типов)'"), + НСтр("ru = '%1,... (всего %2 типов)'"), Результат, ОжидаемыеТипы.Количество()); Прервать; @@ -3883,7 +3883,7 @@ Возврат ?(СтрДлина(ТипСтрокой) > 150, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru='%1,... (всего %2 типов)'"), + НСтр("ru = '%1,... (всего %2 типов)'"), Лев(ТипСтрокой, 150), Тип.Типы().Количество()), ТипСтрокой); @@ -4221,13 +4221,17 @@ // АПК:1297-вкл Доступен = Не ФактНедоступности И БезПотерь; - СостояниеДоступности = ?(Доступен, НСтр("ru = 'доступен'"), НСтр("ru = 'не доступен'")); Журнал = Новый Массив; - Журнал.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Удаленный сервер %1 %2:'"), - АдресСервера, - СостояниеДоступности)); + Если Доступен Тогда + Журнал.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Удаленный сервер %1 доступен:'"), + АдресСервера)); + Иначе + Журнал.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Удаленный сервер %1 не доступен:'"), + АдресСервера)); + КонецЕсли; Журнал.Добавить("> " + СтрокаКоманды); Журнал.Добавить(ЖурналДоступности); diff --git a/SSL/src/CommonModules/ОбщегоНазначенияСлужебныйКлиент/Module.bsl b/SSL/src/CommonModules/ОбщегоНазначенияСлужебныйКлиент/Module.bsl index 7487c1ef8..4aef82749 100644 --- a/SSL/src/CommonModules/ОбщегоНазначенияСлужебныйКлиент/Module.bsl +++ b/SSL/src/CommonModules/ОбщегоНазначенияСлужебныйКлиент/Module.bsl @@ -25,7 +25,7 @@ КонецФункции // Конвертирует параметры запуска текущего сеанса в передаваемые параметры в скрипт -// Например, на вход программа может быть запущена с ключем: +// Например, на вход программа может быть запущена с ключом: // /C "ПараметрыЗапускаИзВнешнейОперации=/TestClient -TPort 48050 /C РежимОтладки;РежимОтладки" // Пробросит в скрипт следует "/TestClient -TPort 48050 /C РежимОтладки" // @@ -207,50 +207,76 @@ //////////////////////////////////////////////////////////////////////////////// // Функции для работы с табличными документами. -// Формирует описание выделенных областей табличного документа. +// Выполняет расчет и вывод показателей выделенных областей ячеек табличного документа. // // Параметры: -// ТабличныйДокумент - ТабличныйДокумент - документ, значения ячеек которого участвуют в расчете. +// Форма - ФормаКлиентскогоПриложения - форма, в которой выводятся значения расчетных показателей. +// ИмяТабличногоДокумента - Строка - имя реквизита формы типа ТабличныйДокумент, показатели которого рассчитываются. +// ТекущаяКоманда - Строка - имя команды расчета показателя, например, "РассчитатьСумму". +// Определяет, какой показатель является основным. // -// Возвращаемое значение: -// Структура - содержит: -// * ВыделенныеОбласти - Массив - содержит структуры со свойствами: -// * Верх - Число - Номер строки верхней границы области. -// * Низ - Число - Номер строки нижней границы области. -// * Лево - Число - Номер колонки верхней границы области. -// * Право - Число - Номер колонки нижней границы области. -// * ТипОбласти - ТипОбластиЯчеекТабличногоДокумента - Колонки, Прямоугольник, Строки, Таблица. -// * РассчитатьНаСервере - Булево - признак того, что расчет должен выполняться на сервере. -// -Функция ПараметрыРасчетаПоказателейЯчеек(ТабличныйДокумент) Экспорт - ПараметрыРасчетаПоказателей = Новый Структура; - ПараметрыРасчетаПоказателей.Вставить("ВыделенныеОбласти", Новый Массив); - ПараметрыРасчетаПоказателей.Вставить("РассчитатьНаСервере", Ложь); +Процедура РассчитатьПоказатели(Форма, ИмяТабличногоДокумента, ТекущаяКоманда = "") Экспорт - ВыделенныеОбласти = ПараметрыРасчетаПоказателей.ВыделенныеОбласти; - Для Каждого ВыделеннаяОбласть Из ТабличныйДокумент.ВыделенныеОбласти Цикл - Если ТипЗнч(ВыделеннаяОбласть) <> Тип("ОбластьЯчеекТабличногоДокумента") Тогда - Продолжить; - КонецЕсли; - ГраницыОбласти = Новый Структура("Верх, Низ, Лево, Право, ТипОбласти"); - ЗаполнитьЗначенияСвойств(ГраницыОбласти, ВыделеннаяОбласть); - ВыделенныеОбласти.Добавить(ГраницыОбласти); - КонецЦикла; + Элементы = Форма.Элементы; + ТабличныйДокумент = Форма[ИмяТабличногоДокумента]; - ВыделеноВсе = Ложь; - Если ВыделенныеОбласти.Количество() = 1 Тогда - ВыделеннаяОбласть = ВыделенныеОбласти[0]; - ВыделеноВсе = Не Булево( - ВыделеннаяОбласть.Верх - + ВыделеннаяОбласть.Низ - + ВыделеннаяОбласть.Лево - + ВыделеннаяОбласть.Право); + Если Не ЗначениеЗаполнено(ТекущаяКоманда) Тогда + ТекущаяКоманда = ТекущаяКомандаРасчетаПоказателей(Элементы); КонецЕсли; - ПараметрыРасчетаПоказателей.РассчитатьНаСервере = (ВыделеноВсе Или ВыделенныеОбласти.Количество() >= 100); + // Расчет показателей. + ПараметрыРасчета = ПараметрыРасчетаПоказателейЯчеек(ТабличныйДокумент); - Возврат ПараметрыРасчетаПоказателей; -КонецФункции + Если ПараметрыРасчета.РассчитатьНаСервере Тогда + РасчетныеПоказатели = СтандартныеПодсистемыВызовСервера.РасчетныеПоказателиЯчеек( + ТабличныйДокумент, ПараметрыРасчета.ВыделенныеОбласти); + Иначе + РасчетныеПоказатели = ОбщегоНазначенияСлужебныйКлиентСервер.РасчетныеПоказателиЯчеек( + ТабличныйДокумент, ПараметрыРасчета.ВыделенныеОбласти); + КонецЕсли; + + // Установка значений показателей. + ЗаполнитьЗначенияСвойств(Форма, РасчетныеПоказатели); + + // Переключение и форматирование показателей. + КомандыПоказателей = КомандыПоказателей(); + + Для Каждого Команда Из КомандыПоказателей Цикл + ИзменитьСвойствоЭлементаРасчетаПоказателей(Элементы, Команда.Ключ, "Пометка", Ложь); + + ЗначениеПоказателя = РасчетныеПоказатели[Команда.Значение]; + Элементы[Команда.Значение].ФорматРедактирования = ФорматРедактированияПоказателя(ЗначениеПоказателя); + КонецЦикла; + + ИзменитьСвойствоЭлементаРасчетаПоказателей(Элементы, ТекущаяКоманда, "Пометка", Истина); + + // Вывод основного показателя. + ТекущийПоказатель = КомандыПоказателей[ТекущаяКоманда]; + + Форма.Показатель = Форма[ТекущийПоказатель]; + Элементы.Показатель.ФорматРедактирования = Элементы[ТекущийПоказатель].ФорматРедактирования; + + ИзменитьСвойствоЭлементаРасчетаПоказателей( + Элементы, "КомандыВидовПоказателей", "Картинка", БиблиотекаКартинок[ТекущийПоказатель]); + + // Кэширование состояния выбора показателей. + Форма.ОсновнойПоказатель = ТекущаяКоманда; + Форма.РазвернутьОбластьПоказателей = Элементы.РассчитатьВсеПоказатели.Пометка; + +КонецПроцедуры + +// Управляет признаком видимости панели расчетных показателей. +// +// Параметры: +// Видимость - Булево - Признак включения / выключения видимости панели показателей. +// См. также Синтакс-помощник: ГруппаФормы.Видимость. +// +Процедура УстановитьВидимостьПанелиПоказателей(ЭлементыФормы, Видимость = Ложь) Экспорт + + ЭлементыФормы.ОбластьПоказателей.Видимость = Видимость; + ИзменитьСвойствоЭлементаРасчетаПоказателей(ЭлементыФормы, "РассчитатьВсеПоказатели", "Пометка", Видимость); + +КонецПроцедуры #КонецОбласти @@ -503,7 +529,7 @@ |по причине: |Метод НачатьПодключениеВнешнейКомпоненты вернул Ложь.'"), Контекст.Идентификатор, - ПредставлениеМестоположенияКомпоненты(Контекст.Местоположение)); + Контекст.Местоположение); ПодключитьКомпонентуОповеститьОбОшибке(ТекстОшибки, Контекст); КонецЕсли; @@ -554,7 +580,7 @@ |по причине: |%3'"), Контекст.Идентификатор, - ПредставлениеМестоположенияКомпоненты(Контекст.Местоположение), + Контекст.Местоположение, КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); ПодключитьКомпонентуОповеститьОбОшибке(ТекстОшибки, Контекст); @@ -586,7 +612,7 @@ |по причине: |%3'"), Контекст.Идентификатор, - ПредставлениеМестоположенияКомпоненты(Контекст.Местоположение), + Контекст.Местоположение, ТекстОшибки); КонецЕсли; @@ -615,7 +641,7 @@ |%4'"), ИдентификаторОбъекта, Контекст.Идентификатор, - ПредставлениеМестоположенияКомпоненты(Контекст.Местоположение), + Контекст.Местоположение, ТекстОшибки); КонецЕсли; @@ -644,19 +670,6 @@ КонецФункции -// Продолжение процедуры ПодключитьКомпоненту. -Функция ПредставлениеМестоположенияКомпоненты(Местоположение) - - Если СтрНачинаетсяС(Местоположение, "e1cib/") Тогда - Возврат НСтр("ru = 'из хранилища внешних компонент'"); - Иначе - Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'из макета ""%1""'"), - Местоположение); - КонецЕсли; - -КонецФункции - #КонецОбласти #Область УстановкаВнешнейКомпоненты @@ -709,7 +722,7 @@ |по причине: |%3'"), Контекст.Идентификатор, - ПредставлениеМестоположенияКомпоненты(Контекст.Местоположение), + Контекст.Местоположение, КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); Результат = РезультатУстановкиКомпоненты(); @@ -894,8 +907,8 @@ КонецЕсли; ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации( - НСтр("ru = 'Регистрация компоненты comcntr'", ОбщегоНазначенияКлиент.КодОсновногоЯзыка()), - "Ошибка", + НСтр("ru = 'Регистрация компоненты comcntr'", ОбщегоНазначенияКлиент.КодОсновногоЯзыка()), + "Ошибка", ТекстСообщения,, Истина); @@ -948,6 +961,147 @@ #КонецОбласти +#Область ТабличныйДокумент + +Функция ТекущаяКомандаРасчетаПоказателей(ЭлементыФормы) + + Перем ТекущаяКоманда; + + КомандыПоказателей = КомандыПоказателей(); + Для Каждого Команда Из КомандыПоказателей Цикл + + Если ЭлементыФормы[Команда.Ключ].Пометка Тогда + + ТекущаяКоманда = Команда.Ключ; + Прервать; + + КонецЕсли; + + КонецЦикла; + + Если ТекущаяКоманда = Неопределено Тогда + ТекущаяКоманда = "РассчитатьСумму"; + КонецЕсли; + + Возврат ТекущаяКоманда; + +КонецФункции + +// Определяет соответствие между командами расчета показателей и показателями. +// +// Возвращаемое значение: +// Соответствие - Ключ - имя команды, Значение - имя показателя. +// +Функция КомандыПоказателей() + + КомандыПоказателей = Новый Соответствие(); + КомандыПоказателей.Вставить("РассчитатьСумму", "Сумма"); + КомандыПоказателей.Вставить("РассчитатьКоличество", "Количество"); + КомандыПоказателей.Вставить("РассчитатьСреднее", "Среднее"); + КомандыПоказателей.Вставить("РассчитатьМинимум", "Минимум"); + КомандыПоказателей.Вставить("РассчитатьМаксимум", "Максимум"); + + Возврат КомандыПоказателей; + +КонецФункции + +// Формирует описание выделенных областей табличного документа. +// +// Параметры: +// ТабличныйДокумент - ТабличныйДокумент - документ, значения ячеек которого участвуют в расчете. +// +// Возвращаемое значение: +// Структура - содержит: +// * ВыделенныеОбласти - Массив - содержит структуры со свойствами: +// * Верх - Число - Номер строки верхней границы области. +// * Низ - Число - Номер строки нижней границы области. +// * Лево - Число - Номер колонки верхней границы области. +// * Право - Число - Номер колонки нижней границы области. +// * ТипОбласти - ТипОбластиЯчеекТабличногоДокумента - Колонки, Прямоугольник, Строки, Таблица. +// * РассчитатьНаСервере - Булево - признак того, что расчет должен выполняться на сервере. +// +Функция ПараметрыРасчетаПоказателейЯчеек(ТабличныйДокумент) + + ПараметрыРасчетаПоказателей = Новый Структура; + ПараметрыРасчетаПоказателей.Вставить("ВыделенныеОбласти", Новый Массив); + ПараметрыРасчетаПоказателей.Вставить("РассчитатьНаСервере", Ложь); + + ВыделенныеОбласти = ПараметрыРасчетаПоказателей.ВыделенныеОбласти; + Для Каждого ВыделеннаяОбласть Из ТабличныйДокумент.ВыделенныеОбласти Цикл + + Если ТипЗнч(ВыделеннаяОбласть) <> Тип("ОбластьЯчеекТабличногоДокумента") Тогда + Продолжить; + КонецЕсли; + + ГраницыОбласти = Новый Структура("Верх, Низ, Лево, Право, ТипОбласти"); + ЗаполнитьЗначенияСвойств(ГраницыОбласти, ВыделеннаяОбласть); + ВыделенныеОбласти.Добавить(ГраницыОбласти); + + КонецЦикла; + + ВыделеноВсе = Ложь; + + Если ВыделенныеОбласти.Количество() = 1 Тогда + + ВыделеннаяОбласть = ВыделенныеОбласти[0]; + ВыделеноВсе = Не Булево( + ВыделеннаяОбласть.Верх + + ВыделеннаяОбласть.Низ + + ВыделеннаяОбласть.Лево + + ВыделеннаяОбласть.Право); + + КонецЕсли; + + ПараметрыРасчетаПоказателей.РассчитатьНаСервере = (ВыделеноВсе Или ВыделенныеОбласти.Количество() >= 100); + + Возврат ПараметрыРасчетаПоказателей; + +КонецФункции + +Функция ФорматРедактированияПоказателя(ЗначениеПоказателя) + + ШаблонФорматаРедактирования = "ЧДЦ=%1; ЧРГ=' '; ЧН=0"; + + ЗначениеДробнойЧасти = Макс(ЗначениеПоказателя, -ЗначениеПоказателя) % 1; + РазрядностьДробнойЧасти = Мин(?(ЗначениеДробнойЧасти = 0, 0, СтрДлина(ЗначениеДробнойЧасти) - 2), 5); + + ФорматРедактирования = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ШаблонФорматаРедактирования, РазрядностьДробнойЧасти); + + ПредставлениеПоказателя = Формат(ЗначениеПоказателя, ФорматРедактирования); + + Пока РазрядностьДробнойЧасти > 0 + И СтрЗаканчиваетсяНа(ПредставлениеПоказателя, "0") Цикл + + ПредставлениеПоказателя = Сред(ПредставлениеПоказателя, 1, СтрДлина(ПредставлениеПоказателя) - 1); + РазрядностьДробнойЧасти = РазрядностьДробнойЧасти - 1; + + КонецЦикла; + + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ШаблонФорматаРедактирования, РазрядностьДробнойЧасти); + +КонецФункции + +Процедура ИзменитьСвойствоЭлементаРасчетаПоказателей(ЭлементыФормы, ИмяЭлемента, ИмяСвойства, ЗначениеСвойства) + + СписокИменЭлементов = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("%1, %1%2", ИмяЭлемента, "Еще"); + ИменаЭлементов = СтрРазделить(СписокИменЭлементов, ", ", Ложь); + + Для Каждого Имя Из ИменаЭлементов Цикл + + НайденныйЭлемент = ЭлементыФормы.Найти(Имя); + + Если НайденныйЭлемент <> Неопределено Тогда + НайденныйЭлемент[ИмяСвойства] = ЗначениеСвойства; + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти + #Область УстаревшиеПроцедурыИФункции #Область РасширениеДляРаботыСФайлами @@ -962,7 +1116,7 @@ ТекстСообщения = ДополнительныеПараметры.ТекстПредупреждения; Если ПустаяСтрока(ТекстСообщения) Тогда - ТекстСообщения = НСтр("ru = 'Действие недоступно, так как не установлено расширение для веб-клиента 1С:Предприятие.'") + ТекстСообщения = НСтр("ru = 'Действие недоступно, так как не установлено расширение для работы с 1С:Предприятием.'") КонецЕсли; ПоказатьПредупреждение(, ТекстСообщения); diff --git a/SSL/src/CommonModules/ОбщегоНазначенияСлужебныйКлиентСервер/Module.bsl b/SSL/src/CommonModules/ОбщегоНазначенияСлужебныйКлиентСервер/Module.bsl index 37e5cc8af..855891a56 100644 --- a/SSL/src/CommonModules/ОбщегоНазначенияСлужебныйКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ОбщегоНазначенияСлужебныйКлиентСервер/Module.bsl @@ -40,7 +40,7 @@ |Недопустимая команда или путь к исполняемому файлу |%1 |по причине: - |Команды не должна содержать символы: ""$"", ""`"", ""|"", "";"", ""&"".'"), + |Команда не должна содержать символы: ""$"", ""`"", ""|"", "";"", ""&"".'"), КомандаЗапуска[0]); КонецЕсли; @@ -70,7 +70,8 @@ // Рассчитывает показатели числовых ячеек в табличном документе. // // Параметры: -// ПараметрыРасчета - структура - см. также ОбщегоНазначенияСлужебныйКлиент.ПараметрыРасчетаПоказателейЯчеек. +// ТабличныйДокумент - ТабличныйДокумент - ТабличныйДокумент, показатели которого рассчитываются. +// ВыделенныеОбласти - Структура - см. также ОбщегоНазначенияСлужебныйКлиент.ПараметрыРасчетаПоказателейЯчеек. // // Возвращаемое значение: // Структура - результаты расчета выделенных ячеек. @@ -82,6 +83,9 @@ // * Максимум - Число - Максимум выделенных ячеек с числами. // Функция РасчетныеПоказателиЯчеек(Знач ТабличныйДокумент, ВыделенныеОбласти) Экспорт + + #Область КонструкторРезультата + РасчетныеПоказатели = Новый Структура; РасчетныеПоказатели.Вставить("Количество", 0); РасчетныеПоказатели.Вставить("КоличествоНеПустых", 0); @@ -91,6 +95,8 @@ РасчетныеПоказатели.Вставить("Минимум", 0); РасчетныеПоказатели.Вставить("Максимум", 0); + #КонецОбласти + Если ВыделенныеОбласти = Неопределено Тогда ВыделенныеОбласти = ТабличныйДокумент.ВыделенныеОбласти; КонецЕсли; @@ -98,11 +104,14 @@ ПроверенныеЯчейки = Новый Соответствие; Для Каждого ВыделеннаяОбласть Из ВыделенныеОбласти Цикл + Если ТипЗнч(ВыделеннаяОбласть) <> Тип("ОбластьЯчеекТабличногоДокумента") И ТипЗнч(ВыделеннаяОбласть) <> Тип("Структура") Тогда Продолжить; КонецЕсли; + #Область ОпределениеГраницВыделеннойОбласти + ВыделеннаяОбластьВерх = ВыделеннаяОбласть.Верх; ВыделеннаяОбластьНиз = ВыделеннаяОбласть.Низ; ВыделеннаяОбластьЛево = ВыделеннаяОбласть.Лево; @@ -132,11 +141,16 @@ ВыделеннаяОбластьВысота = ВыделеннаяОбластьНиз - ВыделеннаяОбластьВерх + 1; ВыделеннаяОбластьШирина = ВыделеннаяОбластьПраво - ВыделеннаяОбластьЛево + 1; + #КонецОбласти + РасчетныеПоказатели.Количество = РасчетныеПоказатели.Количество + ВыделеннаяОбластьШирина * ВыделеннаяОбластьВысота; Для НомерКолонки = ВыделеннаяОбластьЛево По ВыделеннаяОбластьПраво Цикл + Для НомерСтроки = ВыделеннаяОбластьВерх По ВыделеннаяОбластьНиз Цикл + Ячейка = ТабличныйДокумент.Область(НомерСтроки, НомерКолонки, НомерСтроки, НомерКолонки); + Если ПроверенныеЯчейки.Получить(Ячейка.Имя) = Неопределено Тогда ПроверенныеЯчейки.Вставить(Ячейка.Имя, Истина); Иначе @@ -144,13 +158,20 @@ КонецЕсли; Если Ячейка.Видимость = Истина Тогда + + #Область ОпределениеЗначенияЯчейки + Если Ячейка.ТипОбласти <> ТипОбластиЯчеекТабличногоДокумента.Колонки И Ячейка.СодержитЗначение И ТипЗнч(Ячейка.Значение) = Тип("Число") Тогда + Число = Ячейка.Значение; + ИначеЕсли ЗначениеЗаполнено(Ячейка.Текст) Тогда + ОписаниеТипаЧисло = Новый ОписаниеТипов("Число"); - ТекстЯчейки = Ячейка.Текст; + ТекстЯчейки = СтрЗаменить(Ячейка.Текст, " ", ""); + Если СтрНачинаетсяС(ТекстЯчейки, "(") И СтрЗаканчиваетсяНа(ТекстЯчейки, ")") Тогда @@ -164,14 +185,22 @@ Иначе Число = ОписаниеТипаЧисло.ПривестиЗначение(ТекстЯчейки); КонецЕсли; + Иначе Продолжить; КонецЕсли; + #КонецОбласти + РасчетныеПоказатели.КоличествоНеПустых = РасчетныеПоказатели.КоличествоНеПустых + 1; + + #Область РасчетПоказателей + Если ТипЗнч(Число) = Тип("Число") Тогда + РасчетныеПоказатели.КоличествоЧисловых = РасчетныеПоказатели.КоличествоЧисловых + 1; РасчетныеПоказатели.Сумма = РасчетныеПоказатели.Сумма + Число; + Если РасчетныеПоказатели.КоличествоЧисловых = 1 Тогда РасчетныеПоказатели.Минимум = Число; РасчетныеПоказатели.Максимум = Число; @@ -179,10 +208,17 @@ РасчетныеПоказатели.Минимум = Мин(Число, РасчетныеПоказатели.Минимум); РасчетныеПоказатели.Максимум = Макс(Число, РасчетныеПоказатели.Максимум); КонецЕсли; + КонецЕсли; + + #КонецОбласти + КонецЕсли; + КонецЦикла; + КонецЦикла; + КонецЦикла; Если РасчетныеПоказатели.КоличествоЧисловых > 0 Тогда @@ -190,6 +226,7 @@ КонецЕсли; Возврат РасчетныеПоказатели; + КонецФункции #КонецОбласти @@ -509,6 +546,8 @@ #КонецОбласти +#Если Не ВебКлиент И Не МобильныйКлиент Тогда + Функция НовыйФайлЗапускаКомандыWindows(СтрокаКоманды, ТекущийКаталог, ДождатьсяЗавершения, КодировкаИсполнения) Экспорт ТекстовыйДокумент = Новый ТекстовыйДокумент; @@ -537,6 +576,50 @@ КонецФункции +#КонецЕсли + +#КонецОбласти + +#Область СтроковыеФункции + +Функция СтрокаЛатиницей(Знач Значение, ПравилаТранслитерации) Экспорт + + Результат = ""; + ТолькоЗаглавныеВСтроке = ТолькоЗаглавныеВСтроке(Значение); + + Для Позиция = 1 По СтрДлина(Значение) Цикл + Символ = Сред(Значение, Позиция, 1); + СимволЛатиницей = ПравилаТранслитерации[НРег(Символ)]; // Поиск соответствия без учета регистра. + Если СимволЛатиницей = Неопределено Тогда + // Другие символы остаются "как есть". + СимволЛатиницей = Символ; + Иначе + Если ТолькоЗаглавныеВСтроке Тогда + СимволЛатиницей = ВРег(СимволЛатиницей); // восстанавливаем регистр + ИначеЕсли Символ = ВРег(Символ) Тогда + СимволЛатиницей = ТРег(СимволЛатиницей); // восстанавливаем регистр + КонецЕсли; + КонецЕсли; + Результат = Результат + СимволЛатиницей; + КонецЦикла; + + Возврат Результат; + +КонецФункции + +Функция ТолькоЗаглавныеВСтроке(Значение) + + Для Позиция = 1 По СтрДлина(Значение) Цикл + Символ = Сред(Значение, Позиция, 1); + Если Символ <> ВРег(Символ) Тогда + Возврат Ложь; + КонецЕсли; + КонецЦикла; + + Возврат Истина; + +КонецФункции + #КонецОбласти #КонецОбласти diff --git a/SSL/src/CommonModules/ОрганизацииСервер/Module.bsl b/SSL/src/CommonModules/ОрганизацииСервер/Module.bsl index e4493ee1e..23c2b8187 100644 --- a/SSL/src/CommonModules/ОрганизацииСервер/Module.bsl +++ b/SSL/src/CommonModules/ОрганизацииСервер/Module.bsl @@ -70,7 +70,7 @@ СведенияОбОрганизации.Вставить(Элемент.Ключ, Элемент.Значение); Иначе ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Элемент с таким ключем ""%1"" уже определен.'"), Элемент.Ключ); + НСтр("ru = 'Элемент с таким ключом ""%1"" уже определен.'"), Элемент.Ключ); КонецЕсли; КонецЦикла; diff --git a/SSL/src/CommonModules/ОтправкаSMS/Module.bsl b/SSL/src/CommonModules/ОтправкаSMS/Module.bsl index 54ca76c37..2528e9098 100644 --- a/SSL/src/CommonModules/ОтправкаSMS/Module.bsl +++ b/SSL/src/CommonModules/ОтправкаSMS/Module.bsl @@ -30,7 +30,7 @@ Результат = Новый Структура("ОтправленныеСообщения,ОписаниеОшибки", Новый Массив, ""); Если ПеревестиВТранслит Тогда - Текст = СтроковыеФункцииКлиентСервер.СтрокаЛатиницей(Текст); + Текст = СтроковыеФункции.СтрокаЛатиницей(Текст); КонецЕсли; Если Не НастройкаОтправкиSMSВыполнена() Тогда diff --git a/SSL/src/CommonModules/ОтправкаSMSКлиент/Module.bsl b/SSL/src/CommonModules/ОтправкаSMSКлиент/Module.bsl index 6bf449a50..7375314b0 100644 --- a/SSL/src/CommonModules/ОтправкаSMSКлиент/Module.bsl +++ b/SSL/src/CommonModules/ОтправкаSMSКлиент/Module.bsl @@ -11,7 +11,11 @@ // Открывает форму для отправки нового SMS. // // Параметры: -// НомераПолучателей - Массив - номера получателей в формате +<КодСтраны><КодDEF><номер>(строкой); +// НомераПолучателей - Массив из Структура - содержит: +// * Телефон - Строка - номер получателя в формате +<КодСтраны><КодDEF><номер>; +// * Представление - Строка - представление номера телефона; +// * ИсточникКонтактнойИнформации - СправочникСсылка - владелец номера телефона. +// // Текст - Строка - текст сообщения, длиной не более 1000 символов; // ДополнительныеПараметры- Структура - дополнительные параметры отправки SMS. // * ИмяОтправителя - Строка - имя отправителя, которое будет отображаться вместо номера у получателей. diff --git a/SSL/src/CommonModules/ОтправкаSMSКлиент/ОтправкаSMSКлиент.mdo b/SSL/src/CommonModules/ОтправкаSMSКлиент/ОтправкаSMSКлиент.mdo index 147c7a89d..f2b3c66b0 100644 --- a/SSL/src/CommonModules/ОтправкаSMSКлиент/ОтправкаSMSКлиент.mdo +++ b/SSL/src/CommonModules/ОтправкаSMSКлиент/ОтправкаSMSКлиент.mdo @@ -3,7 +3,7 @@ ОтправкаSMSКлиент ru - Отправка SMSКлиент + Отправка SMS клиент true true diff --git a/SSL/src/CommonModules/ОтправкаSMSКлиентПереопределяемый/ОтправкаSMSКлиентПереопределяемый.mdo b/SSL/src/CommonModules/ОтправкаSMSКлиентПереопределяемый/ОтправкаSMSКлиентПереопределяемый.mdo index 25e522dd6..25aa9faef 100644 --- a/SSL/src/CommonModules/ОтправкаSMSКлиентПереопределяемый/ОтправкаSMSКлиентПереопределяемый.mdo +++ b/SSL/src/CommonModules/ОтправкаSMSКлиентПереопределяемый/ОтправкаSMSКлиентПереопределяемый.mdo @@ -3,7 +3,7 @@ ОтправкаSMSКлиентПереопределяемый ru - Отправка SMSКлиент переопределяемый + Отправка SMS клиент переопределяемый true true diff --git a/SSL/src/CommonModules/ОтправкаSMSЧерезGSMINFORM/Module.bsl b/SSL/src/CommonModules/ОтправкаSMSЧерезGSMINFORM/Module.bsl index 362b7d5f2..0fac9bd06 100644 --- a/SSL/src/CommonModules/ОтправкаSMSЧерезGSMINFORM/Module.bsl +++ b/SSL/src/CommonModules/ОтправкаSMSЧерезGSMINFORM/Module.bsl @@ -213,6 +213,14 @@ КонецПопытки; Если HTTPОтвет <> Неопределено Тогда + Если HTTPОтвет.КодСостояния <> 200 Тогда + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Запрос ""%1"" не выполнен. Код состояния: %2.'"), ПараметрыЗапроса["cmd"], HTTPОтвет.КодСостояния) + Символы.ПС + + HTTPОтвет.ПолучитьТелоКакСтроку(); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Отправка SMS'", ОбщегоНазначения.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, , , ТекстОшибки); + КонецЕсли; + Возврат HTTPОтвет.ПолучитьТелоКакСтроку(); КонецЕсли; @@ -252,7 +260,7 @@ // Возвращает список разрешений для отправки SMS с использованием всех доступных провайдеров. // // Возвращаемое значение: -// Массив. +// Массив - . // Функция Разрешения() Экспорт @@ -285,7 +293,7 @@ ПоляАвторизации.Добавить("Логин", НСтр("ru = 'ID кабинета'")); ПоляАвторизации.Добавить("Пароль", НСтр("ru = 'API-ключ'")); - СпособыАвторизации.Вставить("ПоКлючу", ПоляАвторизации); + СпособыАвторизации.Вставить("ПоЛогинуИПаролю", ПоляАвторизации); КонецПроцедуры diff --git a/SSL/src/CommonModules/ОтправкаSMSЧерезSMS4B/Module.bsl b/SSL/src/CommonModules/ОтправкаSMSЧерезSMS4B/Module.bsl index 5b62ccf27..b12168217 100644 --- a/SSL/src/CommonModules/ОтправкаSMSЧерезSMS4B/Module.bsl +++ b/SSL/src/CommonModules/ОтправкаSMSЧерезSMS4B/Module.bsl @@ -188,6 +188,14 @@ Результат = ""; Если HTTPОтвет <> Неопределено Тогда + Если HTTPОтвет.КодСостояния <> 200 Тогда + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Запрос ""%1"" не выполнен. Код состояния: %2.'"), ИмяМетода, HTTPОтвет.КодСостояния) + Символы.ПС + + HTTPОтвет.ПолучитьТелоКакСтроку(); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Отправка SMS'", ОбщегоНазначения.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, , , ТекстОшибки); + КонецЕсли; + ТекстОтвета = HTTPОтвет.ПолучитьТелоКакСтроку(); ЧтениеXML = Новый ЧтениеXML; ЧтениеXML.УстановитьСтроку(ТекстОтвета); @@ -220,7 +228,7 @@ // Возвращает список разрешений для отправки SMS с использованием всех доступных провайдеров. // // Возвращаемое значение: -// Массив. +// Массив - . // Функция Разрешения() Экспорт diff --git a/SSL/src/CommonModules/ОтправкаSMSЧерезSMSRU/Module.bsl b/SSL/src/CommonModules/ОтправкаSMSЧерезSMSRU/Module.bsl index c84df7d80..fa384463b 100644 --- a/SSL/src/CommonModules/ОтправкаSMSЧерезSMSRU/Module.bsl +++ b/SSL/src/CommonModules/ОтправкаSMSЧерезSMSRU/Module.bsl @@ -139,7 +139,7 @@ Функция ОписанияОшибок() ОписанияОшибок = Новый Соответствие; ОписанияОшибок.Вставить("200", НСтр("ru = 'Авторизация не выполнена: неверный api_id.'")); - ОписанияОшибок.Вставить("201", НСтр("ru = 'Не достаточно средств на лицевом счету.'")); + ОписанияОшибок.Вставить("201", НСтр("ru = 'Недостаточно средств на лицевом счету.'")); ОписанияОшибок.Вставить("202", НСтр("ru = 'Неправильно указан получатель.'")); ОписанияОшибок.Вставить("203", НСтр("ru = 'Нет текста сообщения.'")); ОписанияОшибок.Вставить("204", НСтр("ru = 'Имя отправителя не согласовано с провайдером (SMS.RU).'")); @@ -195,6 +195,14 @@ КонецПопытки; Если HTTPОтвет <> Неопределено Тогда + Если HTTPОтвет.КодСостояния <> 200 Тогда + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Запрос ""%1"" не выполнен. Код состояния: %2.'"), ИмяМетода, HTTPОтвет.КодСостояния) + Символы.ПС + + HTTPОтвет.ПолучитьТелоКакСтроку(); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Отправка SMS'", ОбщегоНазначения.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, , , ТекстОшибки); + КонецЕсли; + Возврат HTTPОтвет.ПолучитьТелоКакСтроку(); КонецЕсли; @@ -234,7 +242,7 @@ // Возвращает список разрешений для отправки SMS с использованием всех доступных провайдеров. // // Возвращаемое значение: -// Массив. +// Массив - . // Функция Разрешения() Экспорт diff --git a/SSL/src/CommonModules/ОтправкаSMSЧерезSMSЦЕНТР/Module.bsl b/SSL/src/CommonModules/ОтправкаSMSЧерезSMSЦЕНТР/Module.bsl index 2e68da814..a3c116e10 100644 --- a/SSL/src/CommonModules/ОтправкаSMSЧерезSMSЦЕНТР/Module.bsl +++ b/SSL/src/CommonModules/ОтправкаSMSЧерезSMSЦЕНТР/Module.bsl @@ -255,7 +255,7 @@ // Возвращает список разрешений для отправки SMS с использованием всех доступных провайдеров. // // Возвращаемое значение: -// Массив. +// Массив - . // Функция Разрешения() Экспорт diff --git a/SSL/src/CommonModules/ОтправкаSMSЧерезБилайн/Module.bsl b/SSL/src/CommonModules/ОтправкаSMSЧерезБилайн/Module.bsl index 763b28a4a..a57861d8f 100644 --- a/SSL/src/CommonModules/ОтправкаSMSЧерезБилайн/Module.bsl +++ b/SSL/src/CommonModules/ОтправкаSMSЧерезБилайн/Module.bsl @@ -166,6 +166,14 @@ КонецПопытки; Если HTTPОтвет <> Неопределено Тогда + Если HTTPОтвет.КодСостояния <> 200 Тогда + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Запрос ""%1"" не выполнен. Код состояния: %2.'"), ПараметрыЗапроса["action"], HTTPОтвет.КодСостояния) + Символы.ПС + + HTTPОтвет.ПолучитьТелоКакСтроку(); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Отправка SMS'", ОбщегоНазначения.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, , , ТекстОшибки); + КонецЕсли; + Возврат HTTPОтвет.ПолучитьТелоКакСтроку(); КонецЕсли; @@ -202,7 +210,7 @@ // Возвращает список разрешений для отправки SMS с использованием всех доступных провайдеров. // // Возвращаемое значение: -// Массив. +// Массив - . // Функция Разрешения() Экспорт diff --git a/SSL/src/CommonModules/ОтправкаSMSЧерезМТС/Module.bsl b/SSL/src/CommonModules/ОтправкаSMSЧерезМТС/Module.bsl index 57976ed2f..049a552b7 100644 --- a/SSL/src/CommonModules/ОтправкаSMSЧерезМТС/Module.bsl +++ b/SSL/src/CommonModules/ОтправкаSMSЧерезМТС/Module.bsl @@ -176,7 +176,7 @@ // Возвращает список разрешений для отправки SMS с использованием всех доступных провайдеров. // // Возвращаемое значение: -// Массив. +// Массив - . // Функция Разрешения() Экспорт Протокол = "HTTPS"; @@ -212,8 +212,18 @@ УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; - Результат.ЗапросВыполнен = HTTPОтвет.КодСостояния = 200; - Результат.ОтветСервера = HTTPОтвет.ПолучитьТелоКакСтроку(); + Если HTTPОтвет <> Неопределено Тогда + Если HTTPОтвет.КодСостояния <> 200 Тогда + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Запрос ""%1"" не выполнен. Код состояния: %2.'"), ИмяМетода, HTTPОтвет.КодСостояния) + Символы.ПС + + HTTPОтвет.ПолучитьТелоКакСтроку(); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Отправка SMS'", ОбщегоНазначения.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, , , ТекстОшибки); + КонецЕсли; + + Результат.ЗапросВыполнен = HTTPОтвет.КодСостояния = 200; + Результат.ОтветСервера = HTTPОтвет.ПолучитьТелоКакСтроку(); + КонецЕсли; Возврат Результат; diff --git a/SSL/src/CommonModules/ОтправкаSMSЧерезСМСУслуги/Module.bsl b/SSL/src/CommonModules/ОтправкаSMSЧерезСМСУслуги/Module.bsl index bde19285c..bc7081406 100644 --- a/SSL/src/CommonModules/ОтправкаSMSЧерезСМСУслуги/Module.bsl +++ b/SSL/src/CommonModules/ОтправкаSMSЧерезСМСУслуги/Module.bsl @@ -177,6 +177,14 @@ КонецПопытки; Если HTTPОтвет <> Неопределено Тогда + Если HTTPОтвет.КодСостояния <> 200 Тогда + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Запрос ""%1"" не выполнен. Код состояния: %2.'"), ИмяМетода, HTTPОтвет.КодСостояния) + Символы.ПС + + HTTPОтвет.ПолучитьТелоКакСтроку(); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Отправка SMS'", ОбщегоНазначения.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, , , ТекстОшибки); + КонецЕсли; + Возврат HTTPОтвет.ПолучитьТелоКакСтроку(); КонецЕсли; @@ -238,7 +246,7 @@ // Возвращает список разрешений для отправки SMS с использованием всех доступных провайдеров. // // Возвращаемое значение: -// Массив. +// Массив - . // Функция Разрешения() Экспорт diff --git a/SSL/src/CommonModules/ОтчетОДвиженияхДокументаСлужебныйКлиент/Module.bsl b/SSL/src/CommonModules/ОтчетОДвиженияхДокументаСлужебныйКлиент/Module.bsl index 298220e42..aae4d98c2 100644 --- a/SSL/src/CommonModules/ОтчетОДвиженияхДокументаСлужебныйКлиент/Module.bsl +++ b/SSL/src/CommonModules/ОтчетОДвиженияхДокументаСлужебныйКлиент/Module.bsl @@ -39,9 +39,9 @@ // Параметры: // ФормаОтчета - ФормаКлиентскогоПриложения - Форма отчета. // Расшифровка - Структура - Структура со свойствами. -// * ВидРегистра - Содержит вид регистра "Накопления", "Сведений", "Бухгалтерии" или "Расчета". -// * ИмяРегистра - Содержит имя регистра как объекта метаданных. -// * Регистратор - Содержит ссылку на документ регистратор, по которому нужно сделать отбор +// * ВидРегистра - Вид регистра "РегистрНакопления", "РегистрСведений", "РегистрБухгалтерии" или "РегистрРасчета". +// * ИмяРегистра - Имя регистра как объекта метаданных. +// * Регистратор - Ссылка на документ регистратор, по которому нужно сделать отбор // в открывшейся форме регистра. // СтандартнаяОбработка - Булево - Признак выполнения стандартной (системной) обработки события. // @@ -57,7 +57,7 @@ ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; ЭлементОтбора.Использование = Истина; - ИмяФормыРегистра = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("Регистр%1.%2.ФормаСписка", + ИмяФормыРегистра = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("%1.%2.ФормаСписка", Расшифровка.ВидРегистра, Расшифровка.ИмяРегистра); ФормаРегистра = ПолучитьФорму(ИмяФормыРегистра); diff --git a/SSL/src/CommonModules/ОтчетыКлиент/Module.bsl b/SSL/src/CommonModules/ОтчетыКлиент/Module.bsl index 471716b2a..c975cd843 100644 --- a/SSL/src/CommonModules/ОтчетыКлиент/Module.bsl +++ b/SSL/src/CommonModules/ОтчетыКлиент/Module.bsl @@ -272,13 +272,9 @@ #Область Прочее Функция ПриДобавленииВКоллекциюНужноУказыватьТипЭлемента(ТипКоллекции) Экспорт - Если ТипКоллекции = Тип("КоллекцияЭлементовСтруктурыТаблицыКомпоновкиДанных") - Или ТипКоллекции = Тип("КоллекцияЭлементовСтруктурыДиаграммыКомпоновкиДанных") - Или ТипКоллекции = Тип("КоллекцияЭлементовУсловногоОформленияКомпоновкиДанных") Тогда - Возврат Ложь; - Иначе - Возврат Истина; - КонецЕсли; + Возврат ТипКоллекции <> Тип("КоллекцияЭлементовСтруктурыТаблицыКомпоновкиДанных") + И ТипКоллекции <> Тип("КоллекцияЭлементовСтруктурыДиаграммыКомпоновкиДанных") + И ТипКоллекции <> Тип("КоллекцияЭлементовУсловногоОформленияКомпоновкиДанных"); КонецФункции Процедура КэшироватьЗначениеОтбора(ЗначениеОтбора, Идентификатор, КомпоновщикНастроек) Экспорт @@ -292,6 +288,65 @@ ДополнительныеСвойства.Вставить("КэшЗначенийОтборов", КэшЗначенийОтборов); КонецПроцедуры +// Определяет полный путь к элементу компоновки данных. +// +// Параметры: +// НастройкиКД - НастройкиКомпоновкиДанных - Корневой узел настроек, от которого строится полный путь. +// ЭлементКД - Произвольный - Узел настроек, к которому строится полный путь. +// +// Возвращаемое значение: +// Строка - полный путь к элементу. Может использоваться в функции НайтиЭлементПоПолномуПути(). +// Неопределено - если не удалось построить полный путь. +// +Функция ПолныйПутьКЭлементуНастроек(Знач Настройки, Знач ЭлементНастроек) Экспорт + Результат = Новый Массив; + РодительЭлементаНастроек = ЭлементНастроек; + + Пока РодительЭлементаНастроек <> Неопределено + И РодительЭлементаНастроек <> Настройки Цикл + + ЭлементНастроек = РодительЭлементаНастроек; + РодительЭлементаНастроек = РодительЭлементаНастроек.Родитель; + ТипРодителя = ТипЗнч(РодительЭлементаНастроек); + + Если ТипРодителя = Тип("ТаблицаКомпоновкиДанных") Тогда + Индекс = РодительЭлементаНастроек.Строки.Индекс(ЭлементНастроек); + Если Индекс = -1 Тогда + Индекс = РодительЭлементаНастроек.Колонки.Индекс(ЭлементНастроек); + ИмяКоллекции = "Колонки"; + Иначе + ИмяКоллекции = "Строки"; + КонецЕсли; + ИначеЕсли ТипРодителя = Тип("ДиаграммаКомпоновкиДанных") Тогда + Индекс = РодительЭлементаНастроек.Серии.Индекс(ЭлементНастроек); + Если Индекс = -1 Тогда + Индекс = РодительЭлементаНастроек.Точки.Индекс(ЭлементНастроек); + ИмяКоллекции = "Точки"; + Иначе + ИмяКоллекции = "Серии"; + КонецЕсли; + ИначеЕсли ТипРодителя = Тип("НастройкиВложенногоОбъектаКомпоновкиДанных") Тогда + ИмяКоллекции = "Настройки"; + Индекс = Неопределено; + Иначе + ИмяКоллекции = "Структура"; + Индекс = РодительЭлементаНастроек.Структура.Индекс(ЭлементНастроек); + КонецЕсли; + + Если Индекс = -1 Тогда + Возврат Неопределено; + КонецЕсли; + + Если Индекс <> Неопределено Тогда + Результат.Вставить(0, Индекс); + КонецЕсли; + + Результат.Вставить(0, ИмяКоллекции); + КонецЦикла; + + Возврат СтрСоединить(Результат, "/"); +КонецФункции + #КонецОбласти #КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ОтчетыКлиентСервер/Module.bsl b/SSL/src/CommonModules/ОтчетыКлиентСервер/Module.bsl index eabf68c27..a3958113a 100644 --- a/SSL/src/CommonModules/ОтчетыКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ОтчетыКлиентСервер/Module.bsl @@ -551,7 +551,7 @@ // НастройкиВложенногоОбъектаКомпоновкиДанных - Значение элемента настройки. // // Возвращаемое значение: -// ДоступноеПолеКомпоновкиДанных, ДоступныйПараметрКомпоновкиДанных, +// ДоступноеПолеКомпоновкиДанных - , ДоступныйПараметрКомпоновкиДанных, // ДоступныйОбъектНастройкиКомпоновкиДанных - Найденная доступная настройка. // Неопределено - Если доступная настройка не найдена. // @@ -1025,7 +1025,7 @@ И ЭлементАнализируемый.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно И ЗначениеЗаполнено(ЭлементАнализируемый.ПравоеЗначение) Тогда - Значение = Элемент.ПравоеЗначение; + Значение = ЭлементАнализируемый.ПравоеЗначение; Прервать; КонецЕсли; КонецЕсли; diff --git a/SSL/src/CommonModules/ОтчетыСервер/Module.bsl b/SSL/src/CommonModules/ОтчетыСервер/Module.bsl index cd15ef5ec..904eb3062 100644 --- a/SSL/src/CommonModules/ОтчетыСервер/Module.bsl +++ b/SSL/src/CommonModules/ОтчетыСервер/Module.bsl @@ -218,7 +218,7 @@ Процедура ВывестиГиперссылку(Ячейка, АдресСсылки, ПредставлениеСсылки = Неопределено) Экспорт Ячейка.Гиперссылка = Истина; Ячейка.Шрифт = Новый Шрифт(Ячейка.Шрифт, , , , , Истина); - Ячейка.ЦветТекста = ЦветаСтиля.ГиперссылкаЦвет; + Ячейка.ЦветТекста = Метаданные.ЭлементыСтиля.ГиперссылкаЦвет.Значение; Ячейка.Расшифровка = АдресСсылки; Ячейка.Текст = ?(ПредставлениеСсылки = Неопределено, АдресСсылки, ПредставлениеСсылки); КонецПроцедуры @@ -423,18 +423,20 @@ КонецЕсли; Если ДоступныеНастройки.ПользовательскиеНастройки = Неопределено Тогда - КэшЗначенийОтборов = Неопределено; + ДополнительныеСвойства = Неопределено; Иначе - КэшЗначенийОтборов = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры( - ДоступныеНастройки.ПользовательскиеНастройки.ДополнительныеСвойства, "КэшЗначенийОтборов"); + ДополнительныеСвойства = ДоступныеНастройки.ПользовательскиеНастройки.ДополнительныеСвойства; КонецЕсли; ДоступныеНастройки.ПользовательскиеНастройки = Новый ПользовательскиеНастройкиКомпоновкиДанных; - Если КэшЗначенийОтборов <> Неопределено Тогда - ДоступныеНастройки.ПользовательскиеНастройки.ДополнительныеСвойства.Вставить( - "КэшЗначенийОтборов", КэшЗначенийОтборов); + Если ДополнительныеСвойства = Неопределено Тогда + Возврат; КонецЕсли; + + Для Каждого Свойство Из ДополнительныеСвойства Цикл + ДоступныеНастройки.ПользовательскиеНастройки.ДополнительныеСвойства.Вставить(Свойство.Ключ, Свойство.Значение); + КонецЦикла; КонецПроцедуры Процедура ВосстановитьЗначенияОтборов(Форма) Экспорт @@ -481,46 +483,69 @@ Процедура УстановитьДоступныеЗначения(Отчет, Форма) Экспорт КомпоновщикНастроек = Форма.Отчет.КомпоновщикНастроек; - ПользовательскиеНастройки = КомпоновщикНастроек.ПользовательскиеНастройки; - Для Каждого ЭлементПользовательскойНастройки Из ПользовательскиеНастройки.Элементы Цикл - Если ТипЗнч(ЭлементПользовательскойНастройки) <> Тип("ЗначениеПараметраНастроекКомпоновкиДанных") - И ТипЗнч(ЭлементПользовательскойНастройки) <> Тип("ЭлементОтбораКомпоновкиДанных") Тогда - Продолжить; - КонецЕсли; + КоллекцииНастроек = Новый Массив; + КоллекцииНастроек.Добавить(КомпоновщикНастроек.ПользовательскиеНастройки); + КоллекцииНастроек.Добавить(КомпоновщикНастроек.Настройки.ПараметрыДанных); + КоллекцииНастроек.Добавить(КомпоновщикНастроек.Настройки.Отбор); + + Для Каждого КоллекцияНастроек Из КоллекцииНастроек Цикл + ЭтоПользовательскиеНастройки = (ТипЗнч(КоллекцияНастроек) = Тип("ПользовательскиеНастройкиКомпоновкиДанных")); - ЭлементНастройки = ОтчетыКлиентСервер.ПолучитьОбъектПоПользовательскомуИдентификатору( - КомпоновщикНастроек.Настройки, - ЭлементПользовательскойНастройки.ИдентификаторПользовательскойНастройки,, - ПользовательскиеНастройки); - - ОписаниеНастройки = ОтчетыКлиентСервер.НайтиДоступнуюНастройку(КомпоновщикНастроек.Настройки, ЭлементНастройки); - - СвойстваНастройки = СвойстваЭлементаПользовательскихНастроек( - КомпоновщикНастроек, ЭлементПользовательскойНастройки, ЭлементНастройки, ОписаниеНастройки); - - // Механизмы расширения. - ИнтеграцияПодсистемБСП.ПриОпределенииПараметровВыбораВариантыОтчетов(Неопределено, СвойстваНастройки); - // Глобальные настройки вывода типов. - ОтчетыПереопределяемый.ПриОпределенииПараметровВыбора(Неопределено, СвойстваНастройки); - // Локальное переопределение для отчета. - Если Форма.НастройкиОтчета.События.ПриОпределенииПараметровВыбора Тогда - Отчет.ПриОпределенииПараметровВыбора(Форма, СвойстваНастройки); - КонецЕсли; - - // Автоматическое заполнение. - Если СвойстваНастройки.ЗапросЗначенийВыбора.Текст <> "" Тогда - ДобавляемыеЗначения = СвойстваНастройки.ЗапросЗначенийВыбора.Выполнить().Выгрузить().ВыгрузитьКолонку(0); - Для Каждого Элемент Из ДобавляемыеЗначения Цикл - ОтчетыКлиентСервер.ДобавитьУникальноеЗначениеВСписок( - СвойстваНастройки.ЗначенияДляВыбора, Элемент, Неопределено, Ложь); - КонецЦикла; - СвойстваНастройки.ЗначенияДляВыбора.СортироватьПоПредставлению(НаправлениеСортировки.Возр); - КонецЕсли; - - Если ТипЗнч(СвойстваНастройки.ЗначенияДляВыбора) = Тип("СписокЗначений") - И СвойстваНастройки.ЗначенияДляВыбора.Количество() > 0 Тогда - ОписаниеНастройки.ДоступныеЗначения = СвойстваНастройки.ЗначенияДляВыбора; - КонецЕсли; + Для Каждого ЭлементНастройки Из КоллекцияНастроек.Элементы Цикл + Если ТипЗнч(ЭлементНастройки) <> Тип("ЗначениеПараметраНастроекКомпоновкиДанных") + И ТипЗнч(ЭлементНастройки) <> Тип("ЭлементОтбораКомпоновкиДанных") Тогда + Продолжить; + КонецЕсли; + + Если Не ЭтоПользовательскиеНастройки + И ЗначениеЗаполнено(ЭлементНастройки.ИдентификаторПользовательскойНастройки) Тогда + Продолжить; + КонецЕсли; + + Если ЭтоПользовательскиеНастройки Тогда + ЭлементПользовательскойНастройки = ЭлементНастройки; + + ЭлементОсновнойНастройки = ОтчетыКлиентСервер.ПолучитьОбъектПоПользовательскомуИдентификатору( + КомпоновщикНастроек.Настройки, + ЭлементПользовательскойНастройки.ИдентификаторПользовательскойНастройки,, + КоллекцияНастроек); + Иначе + ЭлементПользовательскойНастройки = ЭлементНастройки; + ЭлементОсновнойНастройки = ЭлементНастройки; + КонецЕсли; + + ОписаниеНастройки = ОтчетыКлиентСервер.НайтиДоступнуюНастройку( + КомпоновщикНастроек.Настройки, ЭлементОсновнойНастройки); + + СвойстваНастройки = СвойстваЭлементаПользовательскихНастроек( + КомпоновщикНастроек, ЭлементПользовательскойНастройки, ЭлементОсновнойНастройки, ОписаниеНастройки); + + // Механизмы расширения. + ИнтеграцияПодсистемБСП.ПриОпределенииПараметровВыбораВариантыОтчетов(Неопределено, СвойстваНастройки); + + // Глобальные настройки вывода типов. + ОтчетыПереопределяемый.ПриОпределенииПараметровВыбора(Неопределено, СвойстваНастройки); + + // Локальное переопределение для отчета. + Если Форма.НастройкиОтчета.События.ПриОпределенииПараметровВыбора Тогда + Отчет.ПриОпределенииПараметровВыбора(Форма, СвойстваНастройки); + КонецЕсли; + + // Автоматическое заполнение. + Если СвойстваНастройки.ЗапросЗначенийВыбора.Текст <> "" Тогда + ДобавляемыеЗначения = СвойстваНастройки.ЗапросЗначенийВыбора.Выполнить().Выгрузить().ВыгрузитьКолонку(0); + Для Каждого Элемент Из ДобавляемыеЗначения Цикл + ОтчетыКлиентСервер.ДобавитьУникальноеЗначениеВСписок( + СвойстваНастройки.ЗначенияДляВыбора, Элемент, Неопределено, Ложь); + КонецЦикла; + СвойстваНастройки.ЗначенияДляВыбора.СортироватьПоПредставлению(НаправлениеСортировки.Возр); + КонецЕсли; + + Если ТипЗнч(СвойстваНастройки.ЗначенияДляВыбора) = Тип("СписокЗначений") + И СвойстваНастройки.ЗначенияДляВыбора.Количество() > 0 Тогда + ОписаниеНастройки.ДоступныеЗначения = СвойстваНастройки.ЗначенияДляВыбора; + КонецЕсли; + КонецЦикла; КонецЦикла; КонецПроцедуры @@ -2619,10 +2644,19 @@ Если ЗначениеЗаполнено(Элемент.ИдентификаторПользовательскойНастройки) Тогда Описание = Неопределено; Если ТипЭлемента = Тип("ЭлементОтбораКомпоновкиДанных") Тогда - Описание = Настройки[ИдентификаторСвойства].ДоступныеПоляОтбора.НайтиПоле(Элемент.ЛевоеЗначение); + + ДоступныеПоля = Настройки[ИдентификаторСвойства].ДоступныеПоляОтбора; + Если ДоступныеПоля <> Неопределено Тогда + Описание = ДоступныеПоля.НайтиПоле(Элемент.ЛевоеЗначение); + КонецЕсли; + ИначеЕсли ТипЭлемента = Тип("ЗначениеПараметраКомпоновкиДанных") Или ТипЭлемента = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда - Описание = Настройки[ИдентификаторСвойства].ДоступныеПараметры.НайтиПараметр(Элемент.Параметр); + + ДоступныеПараметры = Настройки[ИдентификаторСвойства].ДоступныеПараметры; + Если ДоступныеПараметры <> Неопределено Тогда + Описание = ДоступныеПараметры.НайтиПараметр(Элемент.Параметр); + КонецЕсли; КонецЕсли; ВидыСведений = ВидыСведений(); @@ -3713,12 +3747,17 @@ ОтчетыКлиентСервер.ДополнитьСписок(ПолеЗначения.СписокВыбора, Поле.СписокВыбора, Ложь, Истина); - ПолеЗначения.БыстрыйВыбор = ОписаниеЭлементаНастройки.ОписаниеНастройки.БыстрыйВыбор; + ПараметрыРедактирования = Новый Структура("БыстрыйВыбор, ВыборГруппИЭлементов"); + Если ОписаниеЭлементаНастройки.ОписаниеНастройки <> Неопределено Тогда + ЗаполнитьЗначенияСвойств(ПараметрыРедактирования, ОписаниеЭлементаНастройки.ОписаниеНастройки); + КонецЕсли; + + ПолеЗначения.БыстрыйВыбор = ПараметрыРедактирования.БыстрыйВыбор; Условие = ОтчетыКлиентСервер.УсловиеЭлементаНастройки( ОписаниеЭлементаНастройки.ЭлементНастройки, ОписаниеЭлементаНастройки.ОписаниеНастройки); ПолеЗначения.ВыборГруппИЭлементов = ОтчетыКлиентСервер.ЗначениеТипаГруппыИЭлементы( - ОписаниеЭлементаНастройки.ОписаниеНастройки.ВыборГруппИЭлементов, Условие); + ПараметрыРедактирования.ВыборГруппИЭлементов, Условие); ПолеЗначения.ПараметрыВыбора = ОтчетыКлиентСервер.ПараметрыВыбора( ОписаниеЭлементаНастройки.Настройки, @@ -3818,11 +3857,11 @@ ИмяПоляЗначения = "Значение"; КонецЕсли; - ВыбранныеЗначения = ОтчетыКлиентСервер.ЗначенияСписком(ЭлементНастройки[ИмяПоляЗначения], Истина); + ВыбранныеЗначения = ОтчетыКлиентСервер.ЗначенияСписком(ЭлементНастройки[ИмяПоляЗначения]); Если ВыбранныеЗначения.Количество() > 0 Тогда ЭлементНастройки[ИмяПоляЗначения] = ВыбранныеЗначения; Иначе - ВыбранныеЗначения = ОтчетыКлиентСервер.ЗначенияСписком(ЭлементНастройки[ИмяПоляЗначения], Истина); + ВыбранныеЗначения = ОтчетыКлиентСервер.ЗначенияСписком(ЭлементНастройки[ИмяПоляЗначения]); Если ВыбранныеЗначения.Количество() > 0 Тогда // При выполнении метода СоздатьЭлементыФормыПользовательскихНастроек() // сбрасывается значение пользовательской настройки. @@ -3862,7 +3901,11 @@ КонецЦикла; ПолеСписка = Форма.Элементы[Путь]; - ПолеСписка.ЦветТекста = ?(ЭлементНастройки.Использование, Новый Цвет, ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет); + Если ЭлементНастройки.Использование Тогда + ПолеСписка.ЦветТекста = Новый Цвет; + Иначе + ПолеСписка.ЦветТекста = Метаданные.ЭлементыСтиля.ТекстЗапрещеннойЯчейкиЦвет.Значение; + КонецЕсли; КонецПроцедуры // Вывод значений как поля флажков. @@ -4070,7 +4113,8 @@ Если ТекущаяСтруктура.Свойство(Ключ) И ТипЗнч(ТекущаяСтруктура[Ключ]) = Тип("Структура") Тогда ТекущаяСтруктура = ТекущаяСтруктура[Ключ]; Иначе - ТекущаяСтруктура = ТекущаяСтруктура.Вставить(Ключ, Новый Структура); + ТекущаяСтруктура.Вставить(Ключ, Новый Структура); + ТекущаяСтруктура = ТекущаяСтруктура[Ключ]; КонецЕсли; КонецЦикла; КонецЕсли; @@ -4152,6 +4196,11 @@ МассивТипов = ИсходноеОписаниеТипов.Типы(); Для Каждого Тип Из МассивТипов Цикл + Если Тип = Тип("Null") Тогда + ВычитаемыеТипы.Добавить(Тип); + Продолжить; + КонецЕсли; + Если Тип = Тип("ПолеКомпоновкиДанных") Тогда Если ПривестиКФорме Тогда ВычитаемыеТипы.Добавить(Тип); @@ -4335,4 +4384,38 @@ Возврат ?(ЗначениеПоУмолчанию = Неопределено, ГруппыИЭлементы.Авто, ЗначениеПоУмолчанию); КонецФункции +// Находит элемент компоновки данных по полному пути. +// +// Параметры: +// НастройкиКД - НастройкиКомпоновкиДанных - Корневой узел настроек, в который вложен искомый элемент. +// ПолныйПутьКЭлементу - Строка - полный путь к элементу. Может быть получена в функции ПолныйПутьКЭлементу(). +// +// Возвращаемое значение: +// ЭлементКД - Произвольный - Найденный узел настроек. +// +Функция ЭлементНастроекПоПолномуПути(Знач Настройки, Знач ПолныйПутьКЭлементу) Экспорт + Индексы = СтрРазделить(ПолныйПутьКЭлементу, "/", Ложь); + ЭлементНастроек = Настройки; + + Для Каждого Индекс Из Индексы Цикл + Если Индекс = "Строки" Тогда + ЭлементНастроек = ЭлементНастроек.Строки; + ИначеЕсли Индекс = "Колонки" Тогда + ЭлементНастроек = ЭлементНастроек.Колонки; + ИначеЕсли Индекс = "Серии" Тогда + ЭлементНастроек = ЭлементНастроек.Серии; + ИначеЕсли Индекс = "Точки" Тогда + ЭлементНастроек = ЭлементНастроек.Точки; + ИначеЕсли Индекс = "Структура" Тогда + ЭлементНастроек = ЭлементНастроек.Структура; + ИначеЕсли Индекс = "Настройки" Тогда + ЭлементНастроек = ЭлементНастроек.Настройки; + Иначе + ЭлементНастроек = ЭлементНастроек[Число(Индекс)]; + КонецЕсли; + КонецЦикла; + + Возврат ЭлементНастроек; +КонецФункции + #КонецОбласти diff --git a/SSL/src/CommonModules/ОценкаПроизводительности/Module.bsl b/SSL/src/CommonModules/ОценкаПроизводительности/Module.bsl index 28cdf45cc..6073e3038 100644 --- a/SSL/src/CommonModules/ОценкаПроизводительности/Module.bsl +++ b/SSL/src/CommonModules/ОценкаПроизводительности/Module.bsl @@ -613,17 +613,17 @@ Длительная = Параметры.Длительная; ВыполненСОшибкой = Параметры.ВыполненСОшибкой; - КодОсновногоЯзыка = ОбщегоНазначения.КодОсновногоЯзыка(); - Если БезопасныйРежим() <> Ложь Тогда - ЗаписьЖурналаРегистрации(НСтр("ru = 'Работа подсистемы оценка производительности в безопасном режиме не поддерживается'", КодОсновногоЯзыка), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Работа подсистемы оценка производительности в безопасном режиме не поддерживается'", + ОценкаПроизводительностиСлужебный.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Информация,,,Строка(КлючеваяОперация)); Возврат; КонецЕсли; Если Не ЗначениеЗаполнено(ДатаНачалаКлючевойОперации) Тогда - ЗаписьЖурналаРегистрации(НСтр("ru = 'Невозможно зафиксировать замер с пустой датой начала'", КодОсновногоЯзыка), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Невозможно зафиксировать замер с пустой датой начала'", + ОценкаПроизводительностиСлужебный.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Информация,,,Строка(КлючеваяОперация)); Возврат; @@ -700,10 +700,9 @@ Возврат; КонецЕсли; - КодОсновногоЯзыка = ОбщегоНазначения.КодОсновногоЯзыка(); - Если БезопасныйРежим() <> Ложь Тогда - ЗаписьЖурналаРегистрации(НСтр("ru = 'Работа подсистемы оценка производительности в безопасном режиме не поддерживается'", КодОсновногоЯзыка), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Работа подсистемы оценка производительности в безопасном режиме не поддерживается'", + ОценкаПроизводительностиСлужебный.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Информация); Возврат; КонецЕсли; @@ -720,7 +719,8 @@ Для Каждого Замер Из МассивЗамеров Цикл Если Не ЗначениеЗаполнено(Замер.ДатаНачалаКлючевойОперации) Тогда - ЗаписьЖурналаРегистрации(НСтр("ru = 'Невозможно зафиксировать замер с пустой датой начала'", КодОсновногоЯзыка), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Невозможно зафиксировать замер с пустой датой начала'", + ОценкаПроизводительностиСлужебный.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Информация,,,Строка(Замер.КлючеваяОперация)); Возврат; КонецЕсли; @@ -772,7 +772,8 @@ Попытка НаборЗаписей.Записать(Ложь); Исключение - ЗаписьЖурналаРегистрации(НСтр("ru = 'Не удалось сохранить замеры производительности'", КодОсновногоЯзыка), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Не удалось сохранить замеры производительности'", + ОценкаПроизводительностиСлужебный.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка,,,ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; КонецЕсли; diff --git a/SSL/src/CommonModules/ОценкаПроизводительностиВызовСервера/Module.bsl b/SSL/src/CommonModules/ОценкаПроизводительностиВызовСервера/Module.bsl index f45cecbe0..a29ddf86e 100644 --- a/SSL/src/CommonModules/ОценкаПроизводительностиВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/ОценкаПроизводительностиВызовСервера/Module.bsl @@ -163,7 +163,8 @@ Попытка НаборЗаписей.Записать(Ложь); Исключение - ЗаписьЖурналаРегистрации(НСтр("ru = 'Не удалось сохранить замеры производительности'", Метаданные.ОсновнойЯзык.КодЯзыка), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Не удалось сохранить замеры производительности'", + ОценкаПроизводительностиСлужебный.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка,,,ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; КонецЕсли; @@ -172,7 +173,8 @@ Попытка НаборЗаписейТехнологический.Записать(Ложь); Исключение - ЗаписьЖурналаРегистрации(НСтр("ru = 'Не удалось сохранить технологические замеры производительности'", Метаданные.ОсновнойЯзык.КодЯзыка), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Не удалось сохранить технологические замеры производительности'", + ОценкаПроизводительностиСлужебный.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка,,,ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; КонецЕсли; diff --git a/SSL/src/CommonModules/ОценкаПроизводительностиПовтИсп/Module.bsl b/SSL/src/CommonModules/ОценкаПроизводительностиПовтИсп/Module.bsl index 2b2b604ce..6bc293694 100644 --- a/SSL/src/CommonModules/ОценкаПроизводительностиПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ОценкаПроизводительностиПовтИсп/Module.bsl @@ -99,7 +99,8 @@ // Возвращает массив существующих в конфигурации разделителей. // -// Возвращаемое значение: ФиксированныйМассив(Строка) - массив имен общих реквизитов, которые +// Возвращаемое значение: +// ФиксированныйМассив Из Строка - массив имен общих реквизитов, которые // являются разделителями. // Функция РазделителиКонфигурации() Экспорт diff --git a/SSL/src/CommonModules/ОценкаПроизводительностиСлужебный/Module.bsl b/SSL/src/CommonModules/ОценкаПроизводительностиСлужебный/Module.bsl index 38be54715..312785a16 100644 --- a/SSL/src/CommonModules/ОценкаПроизводительностиСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ОценкаПроизводительностиСлужебный/Module.bsl @@ -66,11 +66,13 @@ // См. РаботаВБезопасномРежимеПереопределяемый.ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам. Процедура ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам(ЗапросыРазрешений) Экспорт - Если ОбщегоНазначения.РазделениеВключено() - И ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда - Возврат; + Если ПодсистемаСуществует("ТехнологияСервиса.БазоваяФункциональность") Тогда + МодульРаботаВМоделиСервиса = ОбщийМодуль("РаботаВМоделиСервиса"); + Если МодульРаботаВМоделиСервиса.РазделениеВключено() И МодульРаботаВМоделиСервиса.ДоступноИспользованиеРазделенныхДанных() Тогда + Возврат; + КонецЕсли; КонецЕсли; - + КаталогиЭкспорта = КаталогиЭкспортаОценкиПроизводительности(); Если КаталогиЭкспорта = Неопределено Тогда Возврат; @@ -134,8 +136,11 @@ Процедура ПервоначальноеЗаполнение() Экспорт - Если ОбщегоНазначения.РазделениеВключено() Тогда - Возврат; + Если ПодсистемаСуществует("ТехнологияСервиса.БазоваяФункциональность") Тогда + МодульРаботаВМоделиСервиса = ОбщийМодуль("РаботаВМоделиСервиса"); + Если МодульРаботаВМоделиСервиса.РазделениеВключено() Тогда + Возврат; + КонецЕсли; КонецЕсли; Константы.КоличествоЗамеровВПакетеЭкспорта.Установить(1000); @@ -218,7 +223,7 @@ // Нет // // Возвращаемое значение: -// Структура +// Структура - // "ВыполнятьЭкспортНаFTP" - Булево - Признак выполнения экспорта на FTP // "FTPКаталогЭкспорта" - Строка - FTP-каталог экспорта // "ВыполнятьЭкспортВЛокальныйКаталог" - Булево - Признак выполнения экспорта в локальный каталог @@ -335,11 +340,11 @@ // Локальные служебные процедуры и функции. // Формирует массив разрешений для экспорта данных замеров. -// +// // Параметры - КаталогиЭкспорта - Структура // // Возвращаемое значение: -// Массив +// Массив - Функция РазрешенияНаРесурсыСервера(Каталоги) Разрешения = Новый Массив; @@ -395,7 +400,7 @@ // КонецЕсли; // // Возвращаемое значение: -// Булево. +// Булево - // Функция ПодсистемаСуществует(ПолноеИмяПодсистемы) Экспорт @@ -543,7 +548,7 @@ // "ОбщегоНазначенияКлиент". // // Возвращаемое значение: -// ОбщийМодуль. +// ОбщийМодуль - . // Функция ОбщийМодуль(Имя) Экспорт @@ -661,7 +666,7 @@ // Возвращает значение для идентификации общего типа "Регистры сведений". // // Возвращаемое значение: -// Строка. +// Строка - . // Функция ИмяТипаРегистрыСведений() @@ -672,7 +677,7 @@ // Возвращает значение для идентификации общего типа "Регистры накопления". // // Возвращаемое значение: -// Строка. +// Строка - . // Функция ИмяТипаРегистрыНакопления() @@ -683,7 +688,7 @@ // Возвращает значение для идентификации общего типа "Регистры бухгалтерии". // // Возвращаемое значение: -// Строка. +// Строка - . // Функция ИмяТипаРегистрыБухгалтерии() @@ -694,7 +699,7 @@ // Возвращает значение для идентификации общего типа "Регистры расчета". // // Возвращаемое значение: -// Строка. +// Строка - . // Функция ИмяТипаРегистрыРасчета() @@ -705,7 +710,7 @@ // Возвращает значение для идентификации общего типа "Документы". // // Возвращаемое значение: -// Строка. +// Строка - . // Функция ИмяТипаДокументы() @@ -716,7 +721,7 @@ // Возвращает значение для идентификации общего типа "Справочники". // // Возвращаемое значение: -// Строка. +// Строка - . // Функция ИмяТипаСправочники() @@ -727,7 +732,7 @@ // Возвращает значение для идентификации общего типа "Отчеты". // // Возвращаемое значение: -// Строка. +// Строка - . // Функция ИмяТипаОтчеты() @@ -738,7 +743,7 @@ // Возвращает значение для идентификации общего типа "Обработки". // // Возвращаемое значение: -// Строка. +// Строка - . // Функция ИмяТипаОбработки() @@ -749,7 +754,7 @@ // Возвращает значение для идентификации общего типа "ПланыОбмена". // // Возвращаемое значение: -// Строка. +// Строка - . // Функция ИмяТипаПланыОбмена() @@ -760,7 +765,7 @@ // Возвращает значение для идентификации общего типа "Планы видов характеристик". // // Возвращаемое значение: -// Строка. +// Строка - . // Функция ИмяТипаПланыВидовХарактеристик() @@ -771,7 +776,7 @@ // Возвращает значение для идентификации общего типа "Бизнес-процессы". // // Возвращаемое значение: -// Строка. +// Строка - . // Функция ИмяТипаБизнесПроцессы() @@ -782,7 +787,7 @@ // Возвращает значение для идентификации общего типа "Задачи". // // Возвращаемое значение: -// Строка. +// Строка - . // Функция ИмяТипаЗадачи() @@ -793,7 +798,7 @@ // Возвращает значение для идентификации общего типа "Планы счетов". // // Возвращаемое значение: -// Строка. +// Строка - . // Функция ИмяТипаПланыСчетов() @@ -804,7 +809,7 @@ // Возвращает значение для идентификации общего типа "Планы видов расчета". // // Возвращаемое значение: -// Строка. +// Строка - . // Функция ИмяТипаПланыВидовРасчета() @@ -815,7 +820,7 @@ // Возвращает значение для идентификации общего типа "Константы". // // Возвращаемое значение: -// Строка. +// Строка - . // Функция ИмяТипаКонстанты() @@ -826,7 +831,7 @@ // Возвращает значение для идентификации общего типа "Журналы документов". // // Возвращаемое значение: -// Строка. +// Строка - . // Функция ИмяТипаЖурналыДокументов() @@ -834,6 +839,14 @@ КонецФункции +Функция КодОсновногоЯзыка() Экспорт + Если ПодсистемаСуществует("СтандартныеПодсистемы.БазоваяФункциональность") Тогда + МодульОбщегоНазначения = ОбщийМодуль("ОбщегоНазначения"); + Возврат МодульОбщегоНазначения.КодОсновногоЯзыка(); + КонецЕсли; + Возврат Метаданные.ОсновнойЯзык.КодЯзыка; +КонецФункции + #КонецОбласти #Область РаботаВБезопасномРежимеКопия diff --git a/SSL/src/CommonModules/ПодключаемыеКоманды/Module.bsl b/SSL/src/CommonModules/ПодключаемыеКоманды/Module.bsl index cff5d00ab..80703a4ab 100644 --- a/SSL/src/CommonModules/ПодключаемыеКоманды/Module.bsl +++ b/SSL/src/CommonModules/ПодключаемыеКоманды/Module.bsl @@ -83,6 +83,7 @@ КэшФормы = ПодключаемыеКомандыПовтИсп.КэшФормы(ИмяФормы, ИсточникиЧерезЗапятую, ЭтоФормаОбъекта); ПараметрыРазмещения.Вставить("ЕстьУсловияВидимости", КэшФормы.ЕстьУсловияВидимости); ПараметрыРазмещения.Вставить("ЭтоФормаОбъекта", КэшФормы.ЭтоФормаОбъекта); + ПараметрыРазмещения.Вставить("ВводНаОснованииЧерезПодключаемыеКоманды", КэшФормы.ВводНаОснованииЧерезПодключаемыеКоманды); Если КэшФормы.ФункциональныеОпции.Количество() > 0 Тогда Форма.УстановитьПараметрыФункциональныхОпцийФормы(КэшФормы.ФункциональныеОпции); @@ -123,13 +124,14 @@ // Источник - ТаблицаФормы, ДанныеФормыСтруктура - объект или список формы с полем "Ссылка". // Результат - Структура - результат выполнения команды. // -Процедура ВыполнитьКоманду(Знач Форма, Знач ПараметрыВызова, Знач Источник, Результат) Экспорт +Процедура ВыполнитьКоманду(Знач Форма, Знач ПараметрыВызова, Знач Источник, Результат = Неопределено) Экспорт + Результат = Новый Структура; Результат.Вставить("Текст", Неопределено); Результат.Вставить("Подробно", Неопределено); Если ТипЗнч(ПараметрыВызова) <> Тип("Структура") - Или ПараметрыВызова.Количество() <> 2 + Или ПараметрыВызова.Количество() <> 3 Или ТипЗнч(Форма) <> Тип("ФормаКлиентскогоПриложения") Тогда Возврат; КонецЕсли; @@ -155,6 +157,9 @@ КонецЕсли; ОбщегоНазначения.ВыполнитьМетодКонфигурации(Обработчик, ПараметрыЭкспортнойПроцедуры); + + ПараметрыВызова.Результат = Результат; + КонецПроцедуры // Задает условия видимости команды на форме в зависимости от контекста. @@ -450,8 +455,9 @@ Настройка.ОписаниеТипов = Новый ОписаниеТипов("Массив"); Настройка.ВидыПодключаемыхОбъектов = "Отчет, Обработка"; + ЗаполнениеОбъектов.ПриОпределенииСоставаНастроекПодключаемыхОбъектов(Таблица); + СозданиеНаОсновании.ПриОпределенииСоставаНастроекПодключаемыхОбъектов(Таблица); ИнтеграцияПодсистемБСП.ПриОпределенииСоставаНастроекПодключаемыхОбъектов(Таблица); - ПодключаемыеКомандыПереопределяемый.ПриОпределенииСоставаНастроекПодключаемыхОбъектов(Таблица); Возврат Таблица; @@ -549,6 +555,12 @@ Контекст.Вставить("ЭтоФормаОбъекта", ЭтоФормаОбъекта); Контекст.Вставить("ФункциональныеОпции", КэшФормы.ФункциональныеОпции); + КэшФормы.Вставить("ВводНаОснованииЧерезПодключаемыеКоманды", СозданиеНаОсновании.ОбъектыПодключеныКПодсистеме(ТипыИсточников)); + Если КэшФормы.ВводНаОснованииЧерезПодключаемыеКоманды Тогда + СозданиеНаОсновании.ПриОпределенииКомандПодключенныхКОбъекту(Контекст, Источники, ПодключенныеОбъекты, Команды); + КонецЕсли; + + ЗаполнениеОбъектов.ПриОпределенииКомандПодключенныхКОбъекту(Контекст, Источники, ПодключенныеОбъекты, Команды); ИнтеграцияПодсистемБСП.ПриОпределенииКомандПодключенныхКОбъекту(Контекст, Источники, ПодключенныеОбъекты, Команды); ПодключаемыеКомандыПереопределяемый.ПриОпределенииКомандПодключенныхКОбъекту(Контекст, Источники, ПодключенныеОбъекты, Команды); @@ -643,8 +655,9 @@ Вид.ИмяПодменю = ""; Вид.Порядок = 90; + ЗаполнениеОбъектов.ПриОпределенииВидовПодключаемыхКоманд(Виды); + СозданиеНаОсновании.ПриОпределенииВидовПодключаемыхКоманд(Виды); ИнтеграцияПодсистемБСП.ПриОпределенииВидовПодключаемыхКоманд(Виды); - ПодключаемыеКомандыПереопределяемый.ПриОпределенииВидовПодключаемыхКоманд(Виды); Виды.Сортировать("Порядок Возр"); @@ -742,8 +755,8 @@ Для Каждого ВидКоманд Из ВидыКоманд Цикл ПроверитьИмяВидаКоманд(ВидКоманд.Имя); КомандыВида = Команды.НайтиСтроки(Новый Структура("Вид", ВидКоманд.Имя)); - Количество = КомандыВида.Количество(); - Если Количество = 0 Тогда + + Если КомандыВида.Количество() = 0 И ВидКоманд.Имя <> "СозданиеНаОсновании" Тогда Продолжить; КонецЕсли; @@ -804,6 +817,7 @@ КнопкаФормы = Элементы.Добавить(Команда.ИмяВФорме, Тип("КнопкаФормы"), ГруппаФормы); КнопкаФормы.Вид = ВидКнопкиФормы.КнопкаКоманднойПанели; КнопкаФормы.ИмяКоманды = Команда.ИмяВФорме; + КнопкаФормы.ТолькоВоВсехДействиях = Команда.ТолькоВоВсехДействиях; Если Команда.ИзменяетВыбранныеОбъекты И Форма.ТолькоПросмотр Тогда КнопкаФормы.Доступность = Ложь; @@ -820,6 +834,8 @@ СведенияОПодменюКоманды.ЕстьКомандыБезУсловийВидимости = Истина; КонецЕсли; КонецЦикла; + + СозданиеНаОсновании.ПриВыводеКоманд(Форма, ВидКоманд, СведенияОПодменюПоУмолчанию, ПараметрыРазмещения); КонецЦикла; // Команда-заглушка нужна всегда. @@ -921,6 +937,10 @@ КонецЦикла; КонецЕсли; + Если Подменю.Отображение = ОтображениеКнопки.Картинка И Не ЗначениеЗаполнено(Подменю.Подсказка) Тогда + Подменю.Подсказка = Подменю.Заголовок; + КонецЕсли; + Если Не Группы.Свойство("Важное") Тогда ГруппаВажное = Элементы.Добавить(ИмяПодменю + "Важное", Тип("ГруппаФормы"), Подменю); ГруппаВажное.Вид = ВидГруппыФормы.ГруппаКнопок; @@ -1210,6 +1230,7 @@ Таблица.Колонки.Добавить("Картинка"); // Картинка. Таблица.Колонки.Добавить("СочетаниеКлавиш"); // СочетаниеКлавиш. Таблица.Колонки.Добавить("ОтображениеКнопки"); + Таблица.Колонки.Добавить("ТолькоВоВсехДействиях", Новый ОписаниеТипов("Булево")); // Настройки видимости и доступность: Таблица.Колонки.Добавить("ТипПараметра"); // ОписаниеТипов. Таблица.Колонки.Добавить("ВидимостьВФормах", Новый ОписаниеТипов("Строка")); @@ -1232,6 +1253,7 @@ Таблица.Колонки.Добавить("ПорядокВажности", Новый ОписаниеТипов("Число")); Таблица.Колонки.Добавить("ИмяВФорме", Новый ОписаниеТипов("Строка")); Таблица.Колонки.Добавить("ЕстьУсловияВидимости", Новый ОписаниеТипов("Булево")); + Возврат Таблица; КонецФункции diff --git a/SSL/src/CommonModules/ПодключаемыеКомандыКлиент/Module.bsl b/SSL/src/CommonModules/ПодключаемыеКомандыКлиент/Module.bsl index 0734a62d1..28f8811e8 100644 --- a/SSL/src/CommonModules/ПодключаемыеКомандыКлиент/Module.bsl +++ b/SSL/src/CommonModules/ПодключаемыеКомандыКлиент/Module.bsl @@ -8,6 +8,32 @@ #Область ПрограммныйИнтерфейс +// Обработчик команды формы. +// +// Параметры: +// Форма - ФормаКлиентскогоПриложения - Форма, из которой выполняется команда. +// Команда - КомандаФормы - Выполняемая команда. +// Источник - ТаблицаФормы, ДанныеФормыСтруктура - Объект или список формы с полем "Ссылка". +// +Процедура НачатьВыполнениеКоманды(Форма, Команда, Источник) Экспорт + ИмяКоманды = Команда.Имя; + АдресНастроек = Форма.ПараметрыПодключаемыхКоманд.АдресТаблицыКоманд; + ОписаниеКоманды = ПодключаемыеКомандыКлиентПовтИсп.ОписаниеКоманды(ИмяКоманды, АдресНастроек); + + Контекст = ПодключаемыеКомандыКлиентСервер.ШаблонПараметровВыполненияКоманды(); + Контекст.ОписаниеКоманды = Новый Структура(ОписаниеКоманды); + Контекст.Форма = Форма; + Контекст.Источник = Источник; + Контекст.ЭтоФормаОбъекта = ТипЗнч(Источник) = Тип("ДанныеФормыСтруктура"); + + Контекст.Вставить("ТребуетсяЗапись", Контекст.ЭтоФормаОбъекта И ОписаниеКоманды.РежимЗаписи <> "НеЗаписывать"); + Контекст.Вставить("ТребуетсяПроведение", ОписаниеКоманды.РежимЗаписи = "Проводить"); + Контекст.Вставить("ТребуетсяРаботаСФайлами", ОписаниеКоманды.ТребуетсяРаботаСФайлами); + Контекст.Вставить("ВызовСервераЧерезОбработкуОповещения"); + + ПродолжитьВыполнениеКоманды(Контекст); +КонецПроцедуры + // Обработчик команды формы. // // Параметры: @@ -25,7 +51,7 @@ Контекст.Форма = Форма; Контекст.Источник = Источник; Контекст.ЭтоФормаОбъекта = ТипЗнч(Источник) = Тип("ДанныеФормыСтруктура"); - Контекст.Вставить("ТребуетсяОпределитьСсылки", Истина); + Контекст.Вставить("ТребуетсяЗапись", Контекст.ЭтоФормаОбъекта И ОписаниеКоманды.РежимЗаписи <> "НеЗаписывать"); Контекст.Вставить("ТребуетсяПроведение", ОписаниеКоманды.РежимЗаписи = "Проводить"); Контекст.Вставить("ТребуетсяРаботаСФайлами", ОписаниеКоманды.ТребуетсяРаботаСФайлами); @@ -56,7 +82,7 @@ Если Контекст.ТребуетсяРаботаСФайлами Тогда Контекст.ТребуетсяРаботаСФайлами = Ложь; Обработчик = Новый ОписаниеОповещения("ПродолжитьВыполнениеКомандыПослеУстановкиРасширенияРаботыСФайлами", ЭтотОбъект, Контекст); - ТекстСообщения = НСтр("ru = 'Для продолжения необходимо установить расширение для веб-клиента 1С:Предприятие.'"); + ТекстСообщения = НСтр("ru = 'Для продолжения необходимо установить расширение для работы с 1С:Предприятием.'"); ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботыСФайлами(Обработчик, ТекстСообщения); Возврат; КонецЕсли; @@ -66,34 +92,29 @@ Контекст.ТребуетсяЗапись = Ложь; Если Источник.Ссылка.Пустая() Или (ОписаниеКоманды.РежимЗаписи <> "ЗаписыватьТолькоНовые" И Контекст.Форма.Модифицированность) Тогда - ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Данные еще не записаны. - |Выполнение действия ""%1"" возможно только после записи данных. - |Данные будут записаны.'"), - ОписаниеКоманды.Представление); + + Кнопки = Новый СписокЗначений; + Если Контекст.ТребуетсяПроведение Тогда + ШаблонВопроса = НСтр("ru = 'Для выполнения команды ""%1"" + |документ будет проведен. Продолжить?'"); + Кнопки.Добавить(КодВозвратаДиалога.ОК, НСтр("ru = 'Провести и продолжить'")); + Иначе + ШаблонВопроса = НСтр("ru = 'Для выполнения команды ""%1"" + |данные будут записаны. Продолжить?'"); + Кнопки.Добавить(КодВозвратаДиалога.ОК, НСтр("ru = 'Записать и продолжить'")); + КонецЕсли; + Кнопки.Добавить(КодВозвратаДиалога.Отмена); + + ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонВопроса, ОписаниеКоманды.Представление); Обработчик = Новый ОписаниеОповещения("ПродолжитьВыполнениеКомандыПослеПодтвержденияЗаписи", ЭтотОбъект, Контекст); - ПоказатьВопрос(Обработчик, ТекстВопроса, РежимДиалогаВопрос.ОКОтмена); + + ПоказатьВопрос(Обработчик, ТекстВопроса, Кнопки); Возврат; КонецЕсли; КонецЕсли; - // Определение ссылок объектов. - Если Контекст.ТребуетсяОпределитьСсылки Тогда - Контекст.ТребуетсяОпределитьСсылки = Ложь; - МассивСсылок = Новый Массив; - Если Контекст.ЭтоФормаОбъекта Тогда - ДобавитьСсылкуВСписок(Источник, МассивСсылок, ОписаниеКоманды.ТипПараметра); - ИначеЕсли Не ОписаниеКоманды.МножественныйВыбор Тогда - ДобавитьСсылкуВСписок(Источник.ТекущиеДанные, МассивСсылок, ОписаниеКоманды.ТипПараметра); - Иначе - Для Каждого Идентификатор Из Источник.ВыделенныеСтроки Цикл - ДобавитьСсылкуВСписок(Источник.ДанныеСтроки(Идентификатор), МассивСсылок, ОписаниеКоманды.ТипПараметра); - КонецЦикла; - КонецЕсли; - Если МассивСсылок.Количество() = 0 И ОписаниеКоманды.РежимЗаписи <> "НеЗаписывать" Тогда - ВызватьИсключение НСтр("ru = 'Команда не может быть выполнена для указанного объекта.'"); - КонецЕсли; - Контекст.Вставить("МассивСсылок", МассивСсылок); + Если Не Контекст.Свойство("МассивСсылок") Тогда + Контекст.Вставить("МассивСсылок", ВыбранныеОбъекты(Источник, ОписаниеКоманды)); КонецЕсли; // Проведение документов. @@ -134,11 +155,20 @@ ПараметрКоманды = Контекст.МассивСсылок[0]; КонецЕсли; Если ОписаниеКоманды.Серверная Тогда + Результат = Новый Структура; + СерверныйКонтекст = Новый Структура; СерверныйКонтекст.Вставить("ПараметрКоманды", ПараметрКоманды); СерверныйКонтекст.Вставить("ИмяКомандыВФорме", ОписаниеКоманды.ИмяВФорме); - Результат = Новый Структура; - Контекст.Форма.Подключаемый_ВыполнитьКомандуНаСервере(СерверныйКонтекст, Результат); + СерверныйКонтекст.Вставить("Результат", Результат); + + Если Контекст.Свойство("ВызовСервераЧерезОбработкуОповещения") Тогда + ОписаниеОповещения = Новый ОписаниеОповещения("Подключаемый_ПродолжитьВыполнениеКомандыНаСервере", Контекст.Форма); + ВыполнитьОбработкуОповещения(ОписаниеОповещения, СерверныйКонтекст); + Результат = СерверныйКонтекст.Результат; + Иначе + Контекст.Форма.Подключаемый_ВыполнитьКомандуНаСервере(СерверныйКонтекст, Результат); + КонецЕсли; Если ЗначениеЗаполнено(Результат.Текст) Тогда ПоказатьПредупреждение(, Результат.Текст); Иначе @@ -168,7 +198,14 @@ Процедура ПродолжитьВыполнениеКомандыПослеПодтвержденияЗаписи(Ответ, Контекст) Экспорт Если Ответ = КодВозвратаДиалога.ОК Тогда ОчиститьСообщения(); - Контекст.Форма.Записать(); + + РежимЗаписи = РежимЗаписиДокумента.Запись; + Если Контекст.ТребуетсяПроведение Тогда + РежимЗаписи = РежимЗаписиДокумента.Проведение; + КонецЕсли; + + Контекст.Форма.Записать(Новый Структура("РежимЗаписи", РежимЗаписи)); + Если Контекст.Источник.Ссылка.Пустая() Или Контекст.Форма.Модифицированность Тогда Возврат; // Запись не удалась, сообщения о причинах выводит платформа. КонецЕсли; @@ -260,7 +297,7 @@ Ссылка = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ДанныеФормыСтруктура, "Ссылка"); Если ТипПараметра <> Неопределено И Не ТипПараметра.СодержитТип(ТипЗнч(Ссылка)) Тогда Возврат; - ИначеЕсли Ссылка = Неопределено Или ТипЗнч(Ссылка) = Тип("СтрокаГруппировкиДинамическогоСписка") Тогда + ИначеЕсли Не ЗначениеЗаполнено(Ссылка) Или ТипЗнч(Ссылка) = Тип("СтрокаГруппировкиДинамическогоСписка") Тогда Возврат; КонецЕсли; МассивСсылок.Добавить(Ссылка); @@ -316,4 +353,47 @@ Контекст.Форма.ОбновитьОтображениеДанных(); КонецПроцедуры +Функция ВыбранныеОбъекты(Источник, ОписаниеКоманды) + + Результат = Новый Массив; + ДопустимыеТипы = ОписаниеКоманды.ТипПараметра; + + Если ТипЗнч(Источник) = Тип("ДанныеФормыСтруктура") Тогда + ДобавитьСсылкуВСписок(Источник, Результат, ДопустимыеТипы); + ИначеЕсли ДопустимыеТипы <> Неопределено И ДопустимыеТипы.СодержитТип(ТипЗнч(Источник)) Тогда + Результат.Добавить(Источник); + ИначеЕсли ТипЗнч(Источник) = Тип("Массив") Тогда + Если ДопустимыеТипы = Неопределено Тогда + Результат = Источник; + Иначе + Для Каждого Ссылка Из Источник Цикл + Если ДопустимыеТипы.СодержитТип(ТипЗнч(Ссылка)) Тогда + Результат.Добавить(Ссылка); + КонецЕсли; + КонецЦикла; + КонецЕсли; + ИначеЕсли Не ОписаниеКоманды.МножественныйВыбор Тогда + Если ДопустимыеТипы <> Неопределено И ДопустимыеТипы.СодержитТип(ТипЗнч(Источник.ТекущаяСтрока)) Тогда + Результат.Добавить(Источник.ТекущаяСтрока); + Иначе + ДобавитьСсылкуВСписок(Источник.ТекущиеДанные, Результат, ДопустимыеТипы); + КонецЕсли; + Иначе + Для Каждого Идентификатор Из Источник.ВыделенныеСтроки Цикл + Если ДопустимыеТипы <> Неопределено И ДопустимыеТипы.СодержитТип(ТипЗнч(Идентификатор)) Тогда + Результат.Добавить(Идентификатор); + Иначе + ДобавитьСсылкуВСписок(Источник.ДанныеСтроки(Идентификатор), Результат, ДопустимыеТипы); + КонецЕсли; + КонецЦикла; + КонецЕсли; + + Если Не ЗначениеЗаполнено(Результат) И ОписаниеКоманды.РежимЗаписи <> "НеЗаписывать" Тогда + ВызватьИсключение НСтр("ru = 'Команда не может быть выполнена для указанного объекта.'"); + КонецЕсли; + + Возврат Результат; + +КонецФункции + #КонецОбласти diff --git a/SSL/src/CommonModules/ПодключаемыеКомандыКлиентСервер/Module.bsl b/SSL/src/CommonModules/ПодключаемыеКомандыКлиентСервер/Module.bsl index 864010273..3b74f4fda 100644 --- a/SSL/src/CommonModules/ПодключаемыеКомандыКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ПодключаемыеКомандыКлиентСервер/Module.bsl @@ -72,7 +72,7 @@ Для Каждого Команда Из КраткиеСведенияОПодменю.КомандыСУсловиямиВидимости Цикл КомандаЭлемент = Форма.Элементы[Команда.ИмяВФорме]; - Видимость = Истина; + Видимость = ВыбранныеОбъекты.Количество() > 0; Для Каждого Объект Из ВыбранныеОбъекты Цикл Если ПроверятьОписаниеТипов И ТипЗнч(Команда.ТипПараметра) = Тип("ОписаниеТипов") diff --git a/SSL/src/CommonModules/ПодключаемыеКомандыПереопределяемый/Module.bsl b/SSL/src/CommonModules/ПодключаемыеКомандыПереопределяемый/Module.bsl index 8dedd38c3..f4034939e 100644 --- a/SSL/src/CommonModules/ПодключаемыеКомандыПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ПодключаемыеКомандыПереопределяемый/Module.bsl @@ -148,6 +148,7 @@ // рабочее место. Допустимо задавать в диапазоне от 1 до 100. По умолчанию порядок 50. // * Картинка - Картинка - картинка команды. Необязательный. // * СочетаниеКлавиш - СочетаниеКлавиш - сочетание клавиш для быстрого вызова команды. Необязательный. +// * ТолькоВоВсехДействиях - Булево - отображать команду только в меню Еще. // // Настройки видимости и доступности: // * ТипПараметра - ОписаниеТипов - типы объектов, для которых предназначена эта команда. @@ -182,7 +183,7 @@ // Перед записью и проведением у пользователя запрашивается подтверждение. // Необязательный. Значение по умолчанию - "Записывать". // * ТребуетсяРаботаСФайлами - Булево - если Истина, то в веб-клиенте предлагается -// установить расширение работы с файлами. Необязательный. Значение по умолчанию - Ложь. +// установить расширение для работы с 1С:Предприятием. Необязательный. Значение по умолчанию - Ложь. // // Настройки обработчика: // * Менеджер - Строка - объект, отвечающий за выполнение команды. diff --git a/SSL/src/CommonModules/ПоискИУдалениеДублей/Module.bsl b/SSL/src/CommonModules/ПоискИУдалениеДублей/Module.bsl index 0b6c18def..174102d09 100644 --- a/SSL/src/CommonModules/ПоискИУдалениеДублей/Module.bsl +++ b/SSL/src/CommonModules/ПоискИУдалениеДублей/Module.bsl @@ -36,17 +36,20 @@ // См. Обработка.ПоискИУдалениеДублей ПараметрыПоискаДублей.КомпоновщикПредварительногоОтбора = Новый КомпоновщикНастроекКомпоновкиДанных; - МетаОбласть = Метаданные.НайтиПоПолномуИмени(ОбластьПоиска); - ДоступныеРеквизитыОтбора = ДоступныеИменаМетаРеквизитовОтбора(МетаОбласть.СтандартныеРеквизиты); + ОбластьПоискаМетаданные = Метаданные.НайтиПоПолномуИмени(ОбластьПоиска); + ДоступныеРеквизитыОтбора = ДоступныеИменаРеквизитовОтбора(ОбластьПоискаМетаданные.СтандартныеРеквизиты); ДоступныеРеквизитыОтбора = ?(ПустаяСтрока(ДоступныеРеквизитыОтбора), ",", ДоступныеРеквизитыОтбора) - + ДоступныеИменаМетаРеквизитовОтбора(МетаОбласть.Реквизиты); + + ДоступныеИменаРеквизитовОтбора(ОбластьПоискаМетаданные.Реквизиты); + ТекстЗапроса = "ВЫБРАТЬ * ИЗ #Таблица"; + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "*", Сред(ДоступныеРеквизитыОтбора, 2)); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#Таблица", ОбластьПоиска); СхемаКомпоновки = Новый СхемаКомпоновкиДанных; ИсточникДанных = СхемаКомпоновки.ИсточникиДанных.Добавить(); ИсточникДанных.ТипИсточникаДанных = "Local"; НаборДанных = СхемаКомпоновки.НаборыДанных.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных")); - НаборДанных.Запрос = "ВЫБРАТЬ " + Сред(ДоступныеРеквизитыОтбора, 2) + " ИЗ " + ОбластьПоиска; + НаборДанных.Запрос = ТекстЗапроса; НаборДанных.АвтоЗаполнениеДоступныхПолей = Истина; ПараметрыПоискаДублей.КомпоновщикПредварительногоОтбора.Инициализировать( Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновки) ); @@ -56,15 +59,9 @@ ИспользоватьПрикладныеПравила = ОбработкаПоиска.ЕстьПрикладныеПравилаОбластиПоискаДублей(ОбластьПоиска); Если ИспользоватьПрикладныеПравила Тогда - ПрикладныеПараметры = Новый Структура; - ПрикладныеПараметры.Вставить("ПравилаПоиска", ПараметрыПоискаДублей.ПравилаПоиска); - ПрикладныеПараметры.Вставить("КомпоновщикОтбора", ПараметрыПоискаДублей.КомпоновщикПредварительногоОтбора); - ПрикладныеПараметры.Вставить("ОграниченияСравнения", Новый Массив); - ПрикладныеПараметры.Вставить("КоличествоЭлементовДляСравнения", 1500); - + ПрикладныеПараметры = ПараметрыПоискаДублей(ПараметрыПоискаДублей.ПравилаПоиска, ПараметрыПоискаДублей.КомпоновщикПредварительногоОтбора); МенеджерОбластиПоиска = ОбработкаПоиска.МенеджерОбластиПоискаДублей(ОбластьПоиска); МенеджерОбластиПоиска.ПараметрыПоискаДублей(ПрикладныеПараметры, ДополнительныеПараметры); - ПараметрыПоискаДублей.Вставить("ДополнительныеПараметры", ДополнительныеПараметры); КонецЕсли; @@ -109,17 +106,17 @@ Прервать; КонецЦикла; - МодульМенеджера = ОбщегоНазначения.МенеджерОбъектаПоСсылке(ПервыйЭлемент); - - СписокОбъектов = Новый Соответствие; - ПоискИУдалениеДублейПереопределяемый.ПриОпределенииОбъектовСПоискомДублей(СписокОбъектов); - СведенияОбОбъекте = СписокОбъектов[ПервыйЭлемент.Метаданные().ПолноеИмя()]; + Результат = Новый Соответствие; + ИмяОбъектаМетаданных = ПервыйЭлемент.Метаданные().ПолноеИмя(); + СведенияОбОбъекте = ОбъектыСПоискомДублей()[ИмяОбъектаМетаданных]; Если СведенияОбОбъекте <> Неопределено И (СведенияОбОбъекте = "" Или СтрНайти(СведенияОбОбъекте, "ВозможностьЗаменыЭлементов") > 0) Тогда - Возврат МодульМенеджера.ВозможностьЗаменыЭлементов(ПарыЗамен, ПараметрыЗамены); + МодульМенеджера = ОбщегоНазначения.МенеджерОбъектаПоСсылке(ПервыйЭлемент); + Результат = МодульМенеджера.ВозможностьЗаменыЭлементов(ПарыЗамен, ПараметрыЗамены); КонецЕсли; - Возврат Новый Соответствие; + ПоискИУдалениеДублейПереопределяемый.ПриОпределенииВозможностиЗаменыЭлементов(ИмяОбъектаМетаданных, ПарыЗамен, ПараметрыЗамены, Результат); + Возврат Результат; КонецФункции @@ -137,14 +134,14 @@ #Область СлужебныеПроцедурыИФункции // См. Обработка.ПоискИУдалениеДублей -Функция ДоступныеИменаМетаРеквизитовОтбора(Знач МетаКоллекция) +Функция ДоступныеИменаРеквизитовОтбора(Знач КоллекцияМетаданных) Результат = ""; ТипХранилища = Тип("ХранилищеЗначения"); - Для Каждого МетаРеквизит Из МетаКоллекция Цикл - ЭтоХранилище = МетаРеквизит.Тип.СодержитТип(ТипХранилища); + Для Каждого Реквизит Из КоллекцияМетаданных Цикл + ЭтоХранилище = Реквизит.Тип.СодержитТип(ТипХранилища); Если Не ЭтоХранилище Тогда - Результат = Результат + "," + МетаРеквизит.Имя; + Результат = Результат + "," + Реквизит.Имя; КонецЕсли КонецЦикла; @@ -174,7 +171,7 @@ ПоместитьВоВременноеХранилище(Результат, АдресРезультата); КонецПроцедуры -// Производит замену ссылок во всех данных. +// Производит замену ссылок во всех данных информационной базы. // // Параметры: // Параметры - Структура - где: @@ -196,17 +193,17 @@ // "ОшибкаЗаписи" - не смогли записать объект // "НеизвестныеДанные" - при обработке были найдены данные, которые // не планировались к анализу, замена не реализована -// "ЗаменаЗапрещена" - метод ВозможностьЗаменыЭлементов вернул отказ. +// "ЗаменаЗапрещена" - обработчик ВозможностьЗаменыЭлементов вернул отказ. // * ТекстОшибки - Строка - Подробное описание ошибки. // Процедура ЗаменитьСсылки(Параметры, Знач АдресРезультата) Экспорт - ПараметрыМетода = Новый Структура; - ПараметрыМетода.Вставить("СпособУдаления", Параметры.СпособУдаления); - ПараметрыМетода.Вставить("ВключатьБизнесЛогику", Истина); - ПараметрыМетода.Вставить("ЗаменаПарыВТранзакции", Ложь); + ПараметрыЗаменыСсылок = ОбщегоНазначения.ПараметрыЗаменыСсылок(); + ПараметрыЗаменыСсылок.СпособУдаления = Параметры.СпособУдаления; + ПараметрыЗаменыСсылок.ВключатьБизнесЛогику = Истина; + ПараметрыЗаменыСсылок.ЗаменаПарыВТранзакции = Ложь; - Результат = ОбщегоНазначения.ЗаменитьСсылки(Параметры.ПарыЗамен, ПараметрыМетода); + Результат = ОбщегоНазначения.ЗаменитьСсылки(Параметры.ПарыЗамен, ПараметрыЗаменыСсылок); ПоместитьВоВременноеХранилище(Результат, АдресРезультата); КонецПроцедуры @@ -214,14 +211,14 @@ // Формирует таблицу обслуживаемых объектов метаданных и их общие настройки. // // Возвращаемое значение: -// ТаблицаЗначений - Заполняемый список, в котором устанавливаются: -// * ПолноеИмя - Строка - Полное имя метаданных объекта-таблицы. -// * ПредставлениеЭлемента - Строка - Представление элемента для пользователя. -// * ПредставлениеСписка - Строка - Представление списка для пользователя. -// * Удален - Булево - Флаг того, что объект метаданных с префиксом "Удалить". -// * СобытиеПараметрыПоискаДублей - Булево - Флаг подписки на соответствующее событие. -// * СобытиеПриПоискеДублей - Булево - Флаг подписки на соответствующее событие. -// * СобытиеВозможностьЗаменыЭлементов - Булево - Флаг подписки на соответствующее событие. +// ТаблицаЗначений - с колонками: +// * ПолноеИмя - Строка - полное имя метаданных объекта-таблицы. +// * ПредставлениеЭлемента - Строка - представление элемента для пользователя. +// * ПредставлениеСписка - Строка - представление списка для пользователя. +// * Удален - Булево - это объект метаданных с префиксом "Удалить". +// * СобытиеПараметрыПоискаДублей - Булево - в модуле менеджера определен обработчик ВозможностьЗаменыЭлементов. +// * СобытиеПриПоискеДублей - Булево - в модуле менеджера определен обработчик ПараметрыПоискаДублей. +// * СобытиеВозможностьЗаменыЭлементов - Булево - в модуле менеджера определен обработчик ПриПоискеДублей. // Функция НастройкиОбъектовМетаданных() Экспорт Настройки = Новый ТаблицаЗначений; @@ -234,13 +231,12 @@ Настройки.Колонки.Добавить("СобытиеПриПоискеДублей", Новый ОписаниеТипов("Булево")); Настройки.Колонки.Добавить("СобытиеВозможностьЗаменыЭлементов", Новый ОписаниеТипов("Булево")); - ВсеПодключенныеСобытия = Новый Соответствие; - ПоискИУдалениеДублейПереопределяемый.ПриОпределенииОбъектовСПоискомДублей(ВсеПодключенныеСобытия); - - ЗарегистрироватьКоллекциюМетаданных(Настройки, ВсеПодключенныеСобытия, Метаданные.Справочники, "Справочник"); - ЗарегистрироватьКоллекциюМетаданных(Настройки, ВсеПодключенныеСобытия, Метаданные.Документы, "Документ"); - ЗарегистрироватьКоллекциюМетаданных(Настройки, ВсеПодключенныеСобытия, Метаданные.ПланыСчетов, "ПланСчетов"); - ЗарегистрироватьКоллекциюМетаданных(Настройки, ВсеПодключенныеСобытия, Метаданные.ПланыВидовРасчета, "ПланВидовРасчета"); + СписокОбъектов = ОбъектыСПоискомДублей(); + ЗарегистрироватьКоллекциюМетаданных(Настройки, СписокОбъектов, Метаданные.Справочники, "Справочник"); + ЗарегистрироватьКоллекциюМетаданных(Настройки, СписокОбъектов, Метаданные.Документы, "Документ"); + ЗарегистрироватьКоллекциюМетаданных(Настройки, СписокОбъектов, Метаданные.ПланыСчетов, "ПланСчетов"); + ЗарегистрироватьКоллекциюМетаданных(Настройки, СписокОбъектов, Метаданные.ПланыВидовРасчета, "ПланВидовРасчета"); + ЗарегистрироватьКоллекциюМетаданных(Настройки, СписокОбъектов, Метаданные.ПланыВидовХарактеристик, "ПланВидовХарактеристик"); Результат = Настройки.Скопировать(Новый Структура("Удален", Ложь)); Результат.Сортировать("ПредставлениеСписка"); @@ -248,8 +244,16 @@ Возврат Результат; КонецФункции -Процедура ЗарегистрироватьКоллекциюМетаданных(Настройки, ВсеПодключенныеСобытия, КоллекцияМетаданных, Вид) - СтандартныеСвойства = Новый Структура("ПредставлениеОбъекта, РасширенноеПредставлениеОбъекта, ПредставлениеСписка, РасширенноеПредставлениеСписка"); +Функция ОбъектыСПоискомДублей() Экспорт + + СписокОбъектов = Новый Соответствие; + ИнтеграцияПодсистемБСП.ПриОпределенииОбъектовСПоискомДублей(СписокОбъектов); + ПоискИУдалениеДублейПереопределяемый.ПриОпределенииОбъектовСПоискомДублей(СписокОбъектов); + Возврат СписокОбъектов; + +КонецФункции + +Процедура ЗарегистрироватьКоллекциюМетаданных(Настройки, СписокОбъектов, КоллекцияМетаданных, Вид) Для Каждого ОбъектМетаданных Из КоллекцияМетаданных Цикл Если Не ПравоДоступа("Просмотр", ОбъектМетаданных) @@ -261,24 +265,10 @@ СтрокаТаблицы.Вид = Вид; СтрокаТаблицы.ПолноеИмя = ОбъектМетаданных.ПолноеИмя(); СтрокаТаблицы.Удален = СтрНачинаетсяС(ОбъектМетаданных.Имя, "Удалить"); + СтрокаТаблицы.ПредставлениеЭлемента = ОбщегоНазначения.ПредставлениеОбъекта(ОбъектМетаданных); + СтрокаТаблицы.ПредставлениеСписка = ОбщегоНазначения.ПредставлениеСписка(ОбъектМетаданных); - ЗаполнитьЗначенияСвойств(СтандартныеСвойства, ОбъектМетаданных); - Если ЗначениеЗаполнено(СтандартныеСвойства.ПредставлениеОбъекта) Тогда - СтрокаТаблицы.ПредставлениеЭлемента = СтандартныеСвойства.ПредставлениеОбъекта; - ИначеЕсли ЗначениеЗаполнено(СтандартныеСвойства.РасширенноеПредставлениеОбъекта) Тогда - СтрокаТаблицы.ПредставлениеЭлемента = СтандартныеСвойства.РасширенноеПредставлениеОбъекта; - Иначе - СтрокаТаблицы.ПредставлениеЭлемента = ОбъектМетаданных.Представление(); - КонецЕсли; - Если ЗначениеЗаполнено(СтандартныеСвойства.ПредставлениеСписка) Тогда - СтрокаТаблицы.ПредставлениеСписка = СтандартныеСвойства.ПредставлениеСписка; - ИначеЕсли ЗначениеЗаполнено(СтандартныеСвойства.РасширенноеПредставлениеСписка) Тогда - СтрокаТаблицы.ПредставлениеСписка = СтандартныеСвойства.РасширенноеПредставлениеСписка; - Иначе - СтрокаТаблицы.ПредставлениеСписка = ОбъектМетаданных.Представление(); - КонецЕсли; - - События = ВсеПодключенныеСобытия[СтрокаТаблицы.ПолноеИмя]; + События = СписокОбъектов[СтрокаТаблицы.ПолноеИмя]; Если ТипЗнч(События) = Тип("Строка") Тогда Если ПустаяСтрока(События) Тогда СтрокаТаблицы.СобытиеПараметрыПоискаДублей = Истина; @@ -299,4 +289,22 @@ Возврат НСтр("ru = 'Поиск и удаление дублей'", КодЯзыка); КонецФункции +Функция ПараметрыПоискаДублей(ПравилаПоиска, КомпоновщикПредварительногоОтбора) Экспорт + + СравнениеСтрокНаПодобие = Новый Структура; + СравнениеСтрокНаПодобие.Вставить("ПроцентСовпаденияСтрок", 90); + СравнениеСтрокНаПодобие.Вставить("ПроцентСовпаденияНебольшихСтрок", 80); + СравнениеСтрокНаПодобие.Вставить("ДлинаНебольшихСтрок", 30); + СравнениеСтрокНаПодобие.Вставить("СловаИсключения", Новый Массив); + + Результат = Новый Структура; + Результат.Вставить("ПравилаПоиска", ПравилаПоиска); + Результат.Вставить("СравнениеСтрокНаПодобие", СравнениеСтрокНаПодобие); + Результат.Вставить("КомпоновщикОтбора", КомпоновщикПредварительногоОтбора); + Результат.Вставить("ОграниченияСравнения", Новый Массив); + Результат.Вставить("КоличествоЭлементовДляСравнения", 1500); + Возврат Результат; + +КонецФункции + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ПоискИУдалениеДублейПереопределяемый/Module.bsl b/SSL/src/CommonModules/ПоискИУдалениеДублейПереопределяемый/Module.bsl index 78733ec2b..dec11c68c 100644 --- a/SSL/src/CommonModules/ПоискИУдалениеДублейПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ПоискИУдалениеДублейПереопределяемый/Module.bsl @@ -16,8 +16,7 @@ // Объекты - Соответствие - объекты, в модулях менеджеров которых размещены экспортные процедуры. // ** Ключ - Строка - полное имя объекта метаданных, подключенного к подсистеме "Поиск и удаление дублей". // Например, "Справочник.Контрагенты". -// ** Значение - Строка - имена экспортных процедур, определенных в модуле менеджера. -// Могут быть указаны: +// ** Значение - Строка - имена экспортных процедур-обработчиков, определенных в модуле менеджера: // "ПараметрыПоискаДублей", // "ПриПоискеДублей", // "ВозможностьЗаменыЭлементов". @@ -25,7 +24,7 @@ // Если указана пустая строка, то в модуле менеджера определены все процедуры. // // Пример: -// 1. В справочнике определены все процедуры: +// 1. В справочнике определены все процедуры-обработчики: // Объекты.Вставить(Метаданные.Справочники.Контрагенты.ПолноеИмя(), ""); // // 2. Определены только процедуры ПараметрыПоискаДублей и ПриПоискеДублей: @@ -36,6 +35,95 @@ +КонецПроцедуры + +// Позволяет реализовать дополнительные проверки для пар ссылок на возможность замены одной на другую. +// Например, можно запретить заменять друг на друга номенклатуру разных видов. +// Базовые проверки на запрет замены групп и ссылок разных типов производятся предварительно перед вызовом +// этого обработчика. +// +// Параметры: +// ИмяОбъектаМетаданных - Строка - полное имя ссылочного объекта метаданных, замена элементов которого производится. +// Например, "Справочник.Контрагенты". +// ПарыЗамен - Соответствие - Ключ - что будет заменено, значение - на что будет заменено. +// ПараметрыЗамены - Структура - действие с заменяемыми элементами: +// * СпособУдаления - Строка - может принимать значения: +// "Непосредственно" - Если после замены ссылка нигде не используется, +// то она будет удалена непосредственно; +// "Пометка" - Если после замены ссылка не используется, то +// она будет помечена на удаление. +// При других значениях заменяемая ссылка не будет изменена. +// НедопустимыеЗамены - Соответствие - выходной параметр. Ключ - заменяемая ссылка, значение - строковое описание, +// почему замена недопустима. Если все замены допустимы, то возвращается пустое соответствие. +// +Процедура ПриОпределенииВозможностиЗаменыЭлементов(Знач ИмяОбъектаМетаданных, Знач ПарыЗамен, Знач ПараметрыЗамены, НедопустимыеЗамены) Экспорт + +КонецПроцедуры + +// Вызывается для определения прикладных параметров поиска дублей. +// Например, для справочника номенклатуры можно запретить замену друг на друга номенклатуры разных видов. +// +// Параметры: +// ИмяОбъектаМетаданных - Строка - полное имя ссылочного объекта метаданных, замена элементов которого производится. +// Например, "Справочник.Контрагенты". +// ПараметрыПоиска - Структура - параметры поиска дублей (выходной параметр): +// * ПравилаПоиска - ТаблицаЗначений - правила сравнения для объектов: +// ** Реквизит - Строка - Имя реквизита для сравнения. +// ** Правило - Строка - Правило сравнения: "Равно" - на точное равенство, "Подобно" - подобные строки, +// "" - не сравнивать. +// * СравнениеСтрокНаПодобие - Структура - правила нечеткого поиска строк (сравнение строк на подобие): +// ** ПроцентСовпаденияСтрок - Число - минимальный процент совпадения для строк (от 0 до 100). +// Процент совпадения рассчитывается на основе расстояния Левенштейна-Дамерау с учетом распространенных +// видов ошибок: разный регистр символов, случайная вставка, удаление одного символа, +// замена одного символа на другой. Также порядок слов в строках не имеет значения, +// т.е. например строки "первое второе слово" и "слово второе первое" имеют 100% совпадение. +// По умолчанию, 90. +// ** ПроцентСовпаденияНебольшихСтрок - Число - минимальный процент совпадения для небольших строк (от 0 до 100). +// По умолчанию, 80. +// ** ДлинаНебольшихСтрок - Число - если длина строки меньше или равна заданной, то строка считается небольшой. +// По умолчанию, 30. +// ** СловаИсключения - Массив Из Строка - список слов, которые следует пропускать при сравнении на подобие. +// Например, для организаций и контрагентов это могут быть: ИП, ГУП, ООО, ОАО и т.д. +// * КомпоновщикОтбора - КомпоновщикНастроекКомпоновкиДанных - Инициализированный компоновщик для +// предварительного отбора. Может быть изменен, например, для усиления отборов. +// * ОграниченияСравнения - Массив Из Структура - описания прикладных правил-ограничений: +// ** Представление - Строка - текстовое описание правила-ограничения. +// ** ДополнительныеПоля - Строка - список реквизитов через запятую, значения которых +// необходимы для анализа в ПриПоискеДублей. +// * КоличествоЭлементовДляСравнения - Число - Количество кандидатов в дубли, передаваемых одним вызовом +// в параметр ТаблицаКандидатов обработчика ПриПоискеДублей. +// По умолчанию, 1500. +// ДополнительныеПараметры - Произвольный - Значение, переданное при вызове ОбщегоНазначения.НайтиДублиЭлементов. +// При вызове из обработки ПоискИУдалениеДублей равно Неопределено. +// СтандартнаяОбработка - Булево - указать Ложь, если заполнен выходной параметр ПараметрыПоиска и необходим вызов +// обработчика ПриПоискеДублей. По умолчанию Истина. +// +Процедура ПриОпределенииПараметровПоискаДублей(Знач ИмяОбъектаМетаданных, ПараметрыПоиска, Знач ДополнительныеПараметры, + СтандартнаяОбработка) Экспорт + + + +КонецПроцедуры + +// Вызывается при поиске дублей по правилам, заданным в ПриОпределенииПараметровПоискаДублей. +// +// Параметры: +// ИмяОбъектаМетаданных - Строка - полное имя ссылочного объекта метаданных, замена элементов которого производится. +// Например, "Справочник.Контрагенты". +// ТаблицаКандидатов - ТаблицаЗначений - сведения о найденных кандидатах в дубли согласно заданным правилам поиска: +// * Ссылка1 - ЛюбаяСсылка - ссылка на первый элемент. +// * Ссылка2 - ЛюбаяСсылка - ссылка на второй элемент. +// * ЭтоДубли - Булево - признак того, что кандидаты являются дублями. По умолчанию Ложь. +// Может быть установлено в Истина, чтобы отметить дубли. +// * Поля1 - Структура - содержит поля Код, Наименование и дополнительные поля первого элемента, +// указанные в параметре ПараметрыПоиска.ОграниченияСравнения.ДополнительныеПоля +// обработчика ПриОпределенииПараметровПоискаДублей. +// * Поля2 - Структура - содержит аналогичные поля второго элемента. +// ДополнительныеПараметры - Произвольный - значение, переданное при вызове ОбщегоНазначения.НайтиДублиЭлементов. +// При вызове из обработки ПоискИУдалениеДублей равно Неопределено. +// +Процедура ПриПоискеДублей(Знач ИмяОбъектаМетаданных, ТаблицаКандидатов, ДополнительныеПараметры) Экспорт + КонецПроцедуры #КонецОбласти diff --git a/SSL/src/CommonModules/ПолучениеФайловИзИнтернета/Module.bsl b/SSL/src/CommonModules/ПолучениеФайловИзИнтернета/Module.bsl index 09278e206..8457a3494 100644 --- a/SSL/src/CommonModules/ПолучениеФайловИзИнтернета/Module.bsl +++ b/SSL/src/CommonModules/ПолучениеФайловИзИнтернета/Module.bsl @@ -191,7 +191,7 @@ // // Пример: // // Диагностика веб-сервиса адресного классификатора. -// Результат = ОбщегоНазначенияКлиентСервер.ДиагностикаСоединения("https://api.orgaddress.1c.ru/orgaddress/v1?wsdl"); +// Результат = ОбщегоНазначенияКлиентСервер.ДиагностикаСоединения("https://api.orgaddress.1c.com/orgaddress/v1?wsdl"); // // ОписаниеОшибки = Результат.ОписаниеОшибки; // ЖурналДиагностики = Результат.ЖурналДиагностики; diff --git a/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаКлиентСервер/Module.bsl b/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаКлиентСервер/Module.bsl index 0798b0a2f..2506650f0 100644 --- a/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаКлиентСервер/Module.bsl @@ -69,7 +69,7 @@ Функция ПолучитьПрокси(Знач URLИлиПротокол) Экспорт #Если ВебКлиент Тогда - ВызватьИсключение НСтр("ru='Прокси не доступен в веб-клиенте.'"); + ВызватьИсключение НСтр("ru = 'Прокси не доступен в веб-клиенте.'"); #Иначе ДопустимыеПротоколы = Новый Соответствие(); @@ -207,10 +207,10 @@ // ИспользоватьАутентификациюОС - Булево - признак использования аутентификации средствами операционной системы. // Протокол - строка - протокол для которого устанавливаются параметры прокси сервера, например "http", "https", // "ftp". -// +// // Возвращаемое значение: -// ИнтернетПрокси -// +// ИнтернетПрокси - +// Функция НовыйИнтернетПрокси(НастройкаПроксиСервера, Протокол) Если НастройкаПроксиСервера = Неопределено Тогда diff --git a/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаСлужебный/Module.bsl b/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаСлужебный/Module.bsl index 51bdc3269..a17989011 100644 --- a/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаСлужебный/Module.bsl @@ -74,15 +74,15 @@ // // НастройкаСохранения - соответствие - содержит параметры для сохранения скачанного файла // ключи: -// МестоХранения - строка - может содержать +// МестоХранения - строка - может содержать // "Сервер" - сервер, // "ВременноеХранилище" - временное хранилище. -// Путь - строка (необязательный параметр) - +// Путь - строка (необязательный параметр) - // путь к каталогу на клиенте либо на сервере либо адрес во временном хранилище // если не задано будет сгенерировано автоматически. // // Возвращаемое значение: -// структура +// структура - // успех - булево - успех или неудача операции // строка - строка - в случае успеха либо строка-путь сохранения файла // либо адрес во временном хранилище @@ -132,14 +132,14 @@ // ИспользоватьАутентификациюОС - Булево - признак использования аутентификации средствами операционной системы. // // НастройкаСохранения - соответствие - содержит параметры для сохранения скачанного файла. -// МестоХранения - строка - может содержать +// МестоХранения - строка - может содержать // "Сервер" - сервер, // "ВременноеХранилище" - временное хранилище. -// Путь - строка (необязательный параметр) - путь к каталогу на клиенте либо на сервере, +// Путь - строка (необязательный параметр) - путь к каталогу на клиенте либо на сервере, // либо адрес во временном хранилище, если не задано будет сгенерировано автоматически. // // Возвращаемое значение: -// структура +// структура - // успех - булево - успех или неудача операции // строка - строка - в случае успеха либо строка-путь сохранения файла // либо адрес во временном хранилище @@ -598,7 +598,7 @@ ИначеЕсли КодСостояния = 409 Тогда // Conflict Расшифровка = НСтр("ru = 'Запрос не может быть выполнен из-за конфликтного обращения к ресурсу.'"); ИначеЕсли КодСостояния = 410 Тогда // Gone - Расшифровка = НСтр("ru = 'Ресурс на сервере был перемешен.'"); + Расшифровка = НСтр("ru = 'Ресурс на сервере был перемещен.'"); ИначеЕсли КодСостояния = 411 Тогда // Length Required Расшифровка = НСтр("ru = 'Сервер требует указание ""Content-length."" в заголовке запроса.'"); ИначеЕсли КодСостояния = 412 Тогда // Precondition Failed @@ -791,10 +791,10 @@ // ИспользоватьАутентификациюОС - Булево - признак использования аутентификации средствами операционной системы. // Протокол - строка - протокол для которого устанавливаются параметры прокси сервера, например "http", "https", // "ftp". -// +// // Возвращаемое значение: -// ИнтернетПрокси -// +// ИнтернетПрокси - +// Функция НовыйИнтернетПрокси(НастройкаПроксиСервера, Протокол) Экспорт Если НастройкаПроксиСервера = Неопределено Тогда @@ -925,15 +925,15 @@ Функция ПредставлениеМестаДиагностики() Экспорт Если ОбщегоНазначения.РазделениеВключено() Тогда - Возврат НСтр("ru = 'Подключение проводится на сервере 1С:Предприятия в интернете.'"); + Возврат НСтр("ru = 'Подключение проводится на сервере 1С:Предприятия в интернете (модель сервиса).'"); Иначе Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда Если ОбщегоНазначения.КлиентПодключенЧерезВебСервер() Тогда Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Подключение проводится из файловой базы на веб-сервере <%1>.'"), ИмяКомпьютера()); + НСтр("ru = 'Подключение проводится из файловой информационной базы на веб-сервере <%1>.'"), ИмяКомпьютера()); Иначе Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Подключение проводится из файловой базы на компьютере <%1>.'"), ИмяКомпьютера()); + НСтр("ru = 'Подключение проводится из файловой информационной базы на компьютере <%1>.'"), ИмяКомпьютера()); КонецЕсли; Иначе Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( @@ -975,13 +975,17 @@ КонецЕсли; Доступен = Не ФактНедоступности И БезПотерь; - СостояниеДоступности = ?(Доступен, НСтр("ru = 'доступен'"), НСтр("ru = 'не доступен'")); Журнал = Новый Массив; - Журнал.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Удаленный сервер %1 %2:'"), - АдресСервера, - СостояниеДоступности)); + Если Доступен Тогда + Журнал.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Удаленный сервер %1 доступен:'"), + АдресСервера)); + Иначе + Журнал.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Удаленный сервер %1 не доступен:'"), + АдресСервера)); + КонецЕсли; Журнал.Добавить("> " + СтрокаКоманды); Журнал.Добавить(ЖурналДоступности); diff --git a/SSL/src/CommonModules/Пользователи/Module.bsl b/SSL/src/CommonModules/Пользователи/Module.bsl index 201cae8a5..850bf3866 100644 --- a/SSL/src/CommonModules/Пользователи/Module.bsl +++ b/SSL/src/CommonModules/Пользователи/Module.bsl @@ -609,66 +609,68 @@ НайтиНеоднозначныхПользователейИБ(Неопределено, ПользовательИБ.УникальныйИдентификатор); КонецЕсли; - Если ПользователиСлужебный.ПользовательПоИдентификаторуСуществует( - ПользовательИБ.УникальныйИдентификатор) Тогда + НачатьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Справочник.Пользователи"); + ЭлементБлокировки.УстановитьЗначение("ИдентификаторПользователяИБ", ПользовательИБ.УникальныйИдентификатор); + ЭлементБлокировки = Блокировка.Добавить("Справочник.ВнешниеПользователи"); + ЭлементБлокировки.УстановитьЗначение("ИдентификаторПользователяИБ", ПользовательИБ.УникальныйИдентификатор); + ЭлементБлокировки = Блокировка.Добавить("Справочник.Пользователи"); + ЭлементБлокировки.УстановитьЗначение("Наименование", ПользовательИБ.ПолноеИмя); + Блокировка.Заблокировать(); - Пользователь = Справочники.Пользователи.НайтиПоРеквизиту( - "ИдентификаторПользователяИБ", ПользовательИБ.УникальныйИдентификатор); - - // Если администратор сопоставлен с внешним пользователем - это ошибка, - // требуется очистить сопоставление. - Если НЕ ЗначениеЗаполнено(Пользователь) Тогда - - ВнешнийПользователь = Справочники.ВнешниеПользователи.НайтиПоРеквизиту( - "ИдентификаторПользователяИБ", ПользовательИБ.УникальныйИдентификатор); - - ВнешнийПользовательОбъект = ВнешнийПользователь.ПолучитьОбъект(); + Пользователь = Неопределено; + ПользователиСлужебный.ПользовательПоИдентификаторуСуществует(ПользовательИБ.УникальныйИдентификатор,, Пользователь); + Если ТипЗнч(Пользователь) = Тип("СправочникСсылка.ВнешниеПользователи") Тогда + ВнешнийПользовательОбъект = Пользователь.ПолучитьОбъект(); ВнешнийПользовательОбъект.ИдентификаторПользователяИБ = Неопределено; - ВнешнийПользовательОбъект.ОбменДанными.Загрузка = Истина; - ВнешнийПользовательОбъект.Записать(); - КонецЕсли; - КонецЕсли; - - Если НЕ ЗначениеЗаполнено(Пользователь) Тогда - Пользователь = Справочники.Пользователи.НайтиПоНаименованию(ПользовательИБ.ПолноеИмя); - - Если ЗначениеЗаполнено(Пользователь) - И ЗначениеЗаполнено(Пользователь.ИдентификаторПользователяИБ) - И Пользователь.ИдентификаторПользователяИБ <> ПользовательИБ.УникальныйИдентификатор - И ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору( - Пользователь.ИдентификаторПользователяИБ) <> Неопределено Тогда - + ОбновлениеИнформационнойБазы.ЗаписатьДанные(ВнешнийПользовательОбъект); Пользователь = Неопределено; КонецЕсли; - КонецЕсли; - - Если НЕ ЗначениеЗаполнено(Пользователь) Тогда - Пользователь = Справочники.Пользователи.СоздатьЭлемент(); - ПользовательСоздан = Истина; - Иначе - Пользователь = Пользователь.ПолучитьОбъект(); - ПользовательСоздан = Ложь; - КонецЕсли; - - Пользователь.Наименование = ПользовательИБ.ПолноеИмя; - - ОписаниеПользователяИБ = Новый Структура; - ОписаниеПользователяИБ.Вставить("Действие", "Записать"); - ОписаниеПользователяИБ.Вставить( - "УникальныйИдентификатор", ПользовательИБ.УникальныйИдентификатор); - - Пользователь.ДополнительныеСвойства.Вставить( - "ОписаниеПользователяИБ", ОписаниеПользователяИБ); - - Пользователь.ДополнительныеСвойства.Вставить("СозданиеАдминистратора", - ?(ПользовательИБ = Неопределено, - НСтр("ru = 'Выполнено создание первого администратора.'"), - ?(ПользовательСоздан, - НСтр("ru = 'Администратор сопоставлен с новым пользователем справочника.'"), - НСтр("ru = 'Администратор сопоставлен с существующим пользователем справочника.'")) ) ); + + Если НЕ ЗначениеЗаполнено(Пользователь) Тогда + Пользователь = Справочники.Пользователи.НайтиПоНаименованию(ПользовательИБ.ПолноеИмя); + + Если ЗначениеЗаполнено(Пользователь) + И ЗначениеЗаполнено(Пользователь.ИдентификаторПользователяИБ) + И Пользователь.ИдентификаторПользователяИБ <> ПользовательИБ.УникальныйИдентификатор + И ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору( + Пользователь.ИдентификаторПользователяИБ) <> Неопределено Тогда + + Пользователь = Неопределено; + КонецЕсли; + КонецЕсли; - Пользователь.Записать(); + Если НЕ ЗначениеЗаполнено(Пользователь) Тогда + Пользователь = Справочники.Пользователи.СоздатьЭлемент(); + ПользовательСоздан = Истина; + Иначе + Пользователь = Пользователь.ПолучитьОбъект(); + ПользовательСоздан = Ложь; + КонецЕсли; + + Пользователь.Наименование = ПользовательИБ.ПолноеИмя; + + ОписаниеПользователяИБ = Новый Структура; + ОписаниеПользователяИБ.Вставить("Действие", "Записать"); + ОписаниеПользователяИБ.Вставить("УникальныйИдентификатор", ПользовательИБ.УникальныйИдентификатор); + Пользователь.ДополнительныеСвойства.Вставить( + "ОписаниеПользователяИБ", ОписаниеПользователяИБ); + Пользователь.ДополнительныеСвойства.Вставить("СозданиеАдминистратора", + ?(ПользовательИБ = Неопределено, + НСтр("ru = 'Выполнено создание первого администратора.'"), + ?(ПользовательСоздан, + НСтр("ru = 'Администратор сопоставлен с новым пользователем справочника.'"), + НСтр("ru = 'Администратор сопоставлен с существующим пользователем справочника.'")) ) ); + + Пользователь.Записать(); + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; Возврат Пользователь.Ссылка; КонецФункции @@ -982,7 +984,8 @@ Продолжить; КонецЕсли; Если ОбновляемыеСвойства.Свойство("СохраняемоеЗначениеПароля") - И ОбновляемыеСвойства.СохраняемоеЗначениеПароля <> Неопределено Тогда + И ОбновляемыеСвойства.СохраняемоеЗначениеПароля <> Неопределено + Или СтандартныеПодсистемыСервер.ЭтоУчебнаяПлатформа() Тогда Продолжить; КонецЕсли; Настройки = ПользователиСлужебныйПовтИсп.Настройки(); @@ -1559,7 +1562,7 @@ Выгрузка = Запрос.Выполнить().Выгрузить(); - ОписаниеОшибки = НСтр("ru = 'Ошибка в базе данных.'") + Символы.ПС; + ОписаниеОшибки = ""; ТекущийНеоднозначныйИдентификатор = Неопределено; Для Каждого Строка Из Выгрузка Цикл @@ -1583,7 +1586,6 @@ ИмяДляВхода = ТекущийПользовательИБ.Имя; КонецЕсли; - ОписаниеОшибки = ОписаниеОшибки + Символы.ПС; Если ИдентификаторПользователяСервиса Тогда ОписаниеОшибки = ОписаниеОшибки + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Пользователю сервиса с идентификатором ""%1"" @@ -1631,6 +1633,59 @@ КонецФункции +// Создает новый пароль, соответствующий заданным правилам проверки сложности. +// Для облегчения запоминания, пароль формируется из слогов (согласная-гласная). +// +// Параметры: +// НаименьшаяДлина - Число - наименьшая длина пароля. +// +// Сложный - Булево - учитывать требования сложности пароля. +// +// УчестьНастройки - Строка - +// "НеУчитыватьНастройки" - не учитывать настройки администратора, +// "ДляПользователей" - учесть настройки для пользователей (по умолчанию), +// "ДляВнешнихПользователей" - учесть настройки для внешних пользователей. +// Если настройки администратора учитываются, тогда указанные параметры +// длины и сложности пароля будут увеличены до значений, указанных в настройках. +// +// Возвращаемое значение: +// Строка - новый пароль. +// +Функция СоздатьПароль(НаименьшаяДлина = 7, Сложный = Ложь, УчестьНастройки = "ДляПользователей") Экспорт + + + Если УчестьНастройки = "ДляВнешнихПользователей" Тогда + НастройкиВхода = ПользователиСлужебныйПовтИсп.Настройки().ВнешниеПользователи; + ИначеЕсли УчестьНастройки = "ДляПользователей" Тогда + НастройкиВхода = ПользователиСлужебныйПовтИсп.Настройки().Пользователи; + Иначе + НастройкиВхода = Неопределено; + КонецЕсли; + + МинимальнаяДлинаПароля = НаименьшаяДлина; + СложныйПароль = Сложный; + + Если НастройкиВхода <> Неопределено Тогда + МинимальнаяДлинаПароляИБ = ПолучитьМинимальнуюДлинуПаролейПользователей(); + Если МинимальнаяДлинаПароля < МинимальнаяДлинаПароляИБ Тогда + МинимальнаяДлинаПароля = МинимальнаяДлинаПароляИБ; + КонецЕсли; + Если МинимальнаяДлинаПароля < НастройкиВхода.МинимальнаяДлинаПароля Тогда + МинимальнаяДлинаПароля = НастройкиВхода.МинимальнаяДлинаПароля; + КонецЕсли; + + СложныйПарольИБ = ПолучитьПроверкуСложностиПаролейПользователей(); + Если СложныйПарольИБ Или НастройкиВхода.ПарольДолженОтвечатьТребованиямСложности Тогда + СложныйПароль = Истина; + КонецЕсли; + КонецЕсли; + + ПараметрыПароля = ПользователиСлужебный.ПараметрыПароля(МинимальнаяДлинаПароля, СложныйПароль); + + Возврат ПользователиСлужебный.СоздатьПароль(ПараметрыПароля); + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Прочие процедуры и функции. @@ -1748,7 +1803,7 @@ КонецЕсли; ОписаниеНастроек = Новый ОписаниеНастроек; - ОписаниеНастроек.Представление = НСтр("ru ='Предупреждение безопасности'"); + ОписаниеНастроек.Представление = НСтр("ru = 'Предупреждение безопасности'"); ОбщегоНазначения.ХранилищеОбщихНастроекСохранить( "ПредупреждениеБезопасности", "ПользовательОзнакомлен", diff --git a/SSL/src/CommonModules/ПользователиСлужебный/Module.bsl b/SSL/src/CommonModules/ПользователиСлужебный/Module.bsl index 33ab77276..3601916be 100644 --- a/SSL/src/CommonModules/ПользователиСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ПользователиСлужебный/Module.bsl @@ -156,34 +156,23 @@ // Процедура УстановитьНачальныеНастройки(Знач ИмяПользователя, ЭтоВнешнийПользователь = Ложь) Экспорт - ТекущийРежим = Метаданные.РежимСовместимостиИнтерфейса; - Такси = (ТекущийРежим = Метаданные.СвойстваОбъектов.РежимСовместимостиИнтерфейса.Такси - ИЛИ ТекущийРежим = Метаданные.СвойстваОбъектов.РежимСовместимостиИнтерфейса.ТаксиРазрешитьВерсия8_2); - НастройкиКлиента = Новый НастройкиКлиентскогоПриложения; НастройкиКлиента.ОтображатьПанелиНавигацииИДействий = Ложь; НастройкиКлиента.ОтображатьПанельРазделов = Истина; НастройкиКлиента.РежимОткрытияФормПриложения = РежимОткрытияФормПриложения.Закладки; + НастройкиКлиента.ВариантИнтерфейсаКлиентскогоПриложения = ВариантИнтерфейсаКлиентскогоПриложения.Такси; - НастройкиТакси = Неопределено; НастройкиИнтерфейса = Новый НастройкиКомандногоИнтерфейса; + НастройкиИнтерфейса.ОтображениеПанелиРазделов = ОтображениеПанелиРазделов.КартинкаИТекст; - Если Такси Тогда - НастройкиКлиента.ВариантИнтерфейсаКлиентскогоПриложения = ВариантИнтерфейсаКлиентскогоПриложения.Такси; - - НастройкиИнтерфейса.ОтображениеПанелиРазделов = ОтображениеПанелиРазделов.КартинкаИТекст; - - НастройкиТакси = Новый НастройкиИнтерфейсаКлиентскогоПриложения; - НастройкиСостава = Новый НастройкиСоставаИнтерфейсаКлиентскогоПриложения; - ГруппаСлева = Новый ГруппаНастройкиСоставаИнтерфейсаКлиентскогоПриложения; - ГруппаСлева.Добавить(Новый ЭлементНастройкиСоставаИнтерфейсаКлиентскогоПриложения("ПанельИнструментов")); - ГруппаСлева.Добавить(Новый ЭлементНастройкиСоставаИнтерфейсаКлиентскогоПриложения("ПанельРазделов")); - НастройкиСостава.Лево.Добавить(ГруппаСлева); - НастройкиТакси.УстановитьСостав(НастройкиСостава); - Иначе - НастройкиИнтерфейса.ОтображениеПанелиРазделов = ОтображениеПанелиРазделов.Текст; - КонецЕсли; - + НастройкиТакси = Новый НастройкиИнтерфейсаКлиентскогоПриложения; + НастройкиСостава = Новый НастройкиСоставаИнтерфейсаКлиентскогоПриложения; + ГруппаСлева = Новый ГруппаНастройкиСоставаИнтерфейсаКлиентскогоПриложения; + ГруппаСлева.Добавить(Новый ЭлементНастройкиСоставаИнтерфейсаКлиентскогоПриложения("ПанельИнструментов")); + ГруппаСлева.Добавить(Новый ЭлементНастройкиСоставаИнтерфейсаКлиентскогоПриложения("ПанельРазделов")); + НастройкиСостава.Лево.Добавить(ГруппаСлева); + НастройкиТакси.УстановитьСостав(НастройкиСостава); + НачальныеНастройки = Новый Структура; НачальныеНастройки.Вставить("НастройкиКлиента", НастройкиКлиента); НачальныеНастройки.Вставить("НастройкиИнтерфейса", НастройкиИнтерфейса); @@ -206,7 +195,7 @@ ХранилищеСистемныхНастроек.Сохранить("Общее/НастройкиИнтерфейсаКлиентскогоПриложения", "", НачальныеНастройки.НастройкиТакси, , ИмяПользователя); КонецЕсли; - + КонецПроцедуры // Возвращает текст ошибки, если у текущего пользователя нет ни роли базовые права, ни ролей администратора. @@ -425,7 +414,7 @@ // Истина - проверять ИдентификаторПользователяСервиса. // // Возвращаемое значение: -// Булево. +// Булево - // Функция ПользовательПоИдентификаторуСуществует(УникальныйИдентификатор, СсылкаНаТекущего = Неопределено, @@ -816,6 +805,7 @@ Списки.Вставить(Метаданные.Справочники.ВнешниеПользователи, Истина); Списки.Вставить(Метаданные.Справочники.ГруппыВнешнихПользователей, Истина); Списки.Вставить(Метаданные.Справочники.Пользователи, Истина); + Списки.Вставить(Метаданные.РегистрыСведений.СоставыГруппПользователей, Истина); КонецПроцедуры @@ -980,6 +970,8 @@ КонецЕсли; КонецЕсли; + АвторизоватьТекущегоПользователя(); + КонецПроцедуры // См. ОбновлениеИнформационнойБазыБСП.ПриДобавленииОбработчиковОбновления. @@ -1027,6 +1019,7 @@ Процедура ПриДобавленииПараметровРаботыКлиента(Параметры) Экспорт Параметры.Вставить("ЭтоПолноправныйПользователь", Пользователи.ЭтоПолноправныйПользователь()); + Параметры.Вставить("ЭтоАдминистраторСистемы", Пользователи.ЭтоПолноправныйПользователь(, Истина)); КонецПроцедуры @@ -1163,6 +1156,15 @@ КонецПроцедуры +// Обработчики событий подсистемы ПодключаемыеКоманды. + +// См. СозданиеНаОснованииПереопределяемый.ПриОпределенииОбъектовСКомандамиСозданияНаОсновании. +Процедура ПриОпределенииОбъектовСКомандамиСозданияНаОсновании(Объекты) Экспорт + + Объекты.Добавить(Метаданные.Справочники.Пользователи); + +КонецПроцедуры + // Обработчики событий подсистемы Пользователи. // См. процедуру ИзменитьДействияВФорме в общем модуле ПользователиПереопределяемый. @@ -1994,40 +1996,41 @@ ЭтоПолноправныйПользователь = Пользователи.ЭтоПолноправныйПользователь(, Ложь); - Подсказка = Новый Массив; - Подсказка.Добавить(НСтр("ru = 'Требования к длине и сложности пароля задаются отдельно.'")); - Подсказка.Добавить(Символы.ПС); - Если Не ЭтоПолноправныйПользователь Тогда - Подсказка.Добавить(НСтр("ru = 'За подробностями обратитесь к администратору.'")); + Подсказка = НСтр("ru = 'Требования к длине и сложности пароля задаются отдельно. + |За подробностями обратитесь к администратору.'"); Возврат Новый ФорматированнаяСтрока(Подсказка); КонецЕсли; - Подсказка.Добавить(НСтр("ru = 'См.'")); - Подсказка.Добавить(" "); - Если Не ПользователиСлужебныйПовтИсп.Настройки().ОбщиеНастройкиВхода Тогда - Подсказка.Добавить(НСтр("ru = 'Параметры информационной базы в конфигураторе в меню Администрирование.'")); + Подсказка = НСтр("ru = 'Требования к длине и сложности пароля задаются отдельно. + |См. Параметры информационной базы в конфигураторе в меню Администрирование.'"); Возврат Новый ФорматированнаяСтрока(Подсказка); КонецЕсли; + ЕстьРазделАдминистрирование = Метаданные.Подсистемы.Найти("Администрирование") <> Неопределено; + Если ДляВнешнихПользователей Тогда - Ссылка = НСтр("ru = 'Настройки входа внешних пользователей'"); + Если ЕстьРазделАдминистрирование Тогда + Подсказка = НСтр("ru = 'Требования к длине и сложности пароля задаются отдельно. + |См. Настройки входа внешних пользователей в разделе Администрирование, + |пункт Настройки пользователей и прав.'"); + Иначе + Подсказка = НСтр("ru = 'Требования к длине и сложности пароля задаются отдельно. + |См. Настройки входа внешних пользователей.'"); + КонецЕсли; Иначе - Ссылка = НСтр("ru = 'Настройки входа пользователей'"); + Если ЕстьРазделАдминистрирование Тогда + Подсказка = НСтр("ru = 'Требования к длине и сложности пароля задаются отдельно. + |См. Настройки входа пользователей в разделе Администрирование, + |пункт Настройки пользователей и прав.'"); + Иначе + Подсказка = НСтр("ru = 'Требования к длине и сложности пароля задаются отдельно. + |См. Настройки входа пользователей.'"); + КонецЕсли; КонецЕсли; - Подсказка.Добавить(Новый ФорматированнаяСтрока(Ссылка,,,, "НастройкиВходаПользователей")); - - Если Метаданные.Подсистемы.Найти("Администрирование") <> Неопределено Тогда - Подсказка.Добавить(" "); - Подсказка.Добавить(НСтр("ru = 'в разделе Администрирование, - |пункт Настройки прав и пользователей.'")); - Иначе - Подсказка.Добавить("."); - КонецЕсли; - - Возврат Новый ФорматированнаяСтрока(Подсказка); + Возврат СтроковыеФункции.ФорматированнаяСтрока(Подсказка); КонецФункции @@ -2602,7 +2605,7 @@ КонецПроцедуры // Вызывается при обработке свойства СвойстваПользователяИБ пользователя в справочнике. -// +// // Параметры: // ОписаниеПользователя - СправочникОбъект.Пользователи, СправочникОбъект.ВнешниеПользователи, // ДанныеФормыСтруктура, содержит свойство СвойстваПользователяИБ. @@ -2612,7 +2615,7 @@ // аутентификации безусловно Ложь, т.к. были сняты в конфигураторе. // // Возвращаемое значение: -// Структура. +// Структура - . // Функция ХранимыеСвойстваПользователяИБ(ОписаниеПользователя, ВходВПрограммуРазрешен = Ложь) Экспорт @@ -2806,29 +2809,53 @@ ОбщегоНазначения.СообщитьПользователю( ТекстОшибки, , "Имя", , Отказ); - - ИначеЕсли Не ОписаниеПользователяИБ.Свойство("Пароль") - Или Не ЗначениеЗаполнено(ОписаниеПользователяИБ.Пароль) Тогда - - Если ЭтоВнешнийПользователь Тогда - НастройкиВхода = ПользователиСлужебныйПовтИсп.Настройки().ВнешниеПользователи; - Иначе - НастройкиВхода = ПользователиСлужебныйПовтИсп.Настройки().Пользователи; - КонецЕсли; - Если ЗначениеЗаполнено(НастройкиВхода.МинимальнаяДлинаПароля) Тогда - Если ЗначениеЗаполнено(ОписаниеПользователяИБ.ИдентификаторПользователяИБ) Тогда - УстановитьПривилегированныйРежим(Истина); - ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору( - ОписаниеПользователяИБ.ИдентификаторПользователяИБ); - УстановитьПривилегированныйРежим(Ложь); - Иначе - ПользовательИБ = Неопределено; - КонецЕсли; - Если ПользовательИБ = Неопределено Тогда - ОбщегоНазначения.СообщитьПользователю( - НСтр("ru = 'Требуется установить пароль.'"),, "СменитьПароль",, Отказ); - КонецЕсли; - КонецЕсли; + КонецЕсли; + КонецЕсли; + КонецЕсли; + Если Отказ Тогда + Возврат Ложь; + КонецЕсли; + + Если Не ОписаниеПользователяИБ.Свойство("Пароль") + Или Не ЗначениеЗаполнено(ОписаниеПользователяИБ.Пароль) Тогда + + Если ЭтоВнешнийПользователь Тогда + НастройкиВхода = ПользователиСлужебныйПовтИсп.Настройки().ВнешниеПользователи; + Иначе + НастройкиВхода = ПользователиСлужебныйПовтИсп.Настройки().Пользователи; + КонецЕсли; + Если ЗначениеЗаполнено(НастройкиВхода.МинимальнаяДлинаПароля) Тогда + Если ЗначениеЗаполнено(ОписаниеПользователяИБ.ИдентификаторПользователяИБ) Тогда + УстановитьПривилегированныйРежим(Истина); + ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору( + ОписаниеПользователяИБ.ИдентификаторПользователяИБ); + УстановитьПривилегированныйРежим(Ложь); + Иначе + ПользовательИБ = Неопределено; + КонецЕсли; + + ПарольЗадан = ОписаниеПользователяИБ.Свойство("Пароль") + И ОписаниеПользователяИБ.Пароль <> Неопределено; + + АутентификацияСтандартнаяСтарая = ПользовательИБ <> Неопределено + И ПользовательИБ.АутентификацияСтандартная; + + Если ОписаниеПользователяИБ.Свойство("АутентификацияСтандартная") Тогда + АутентификацияСтандартнаяНовая = ОписаниеПользователяИБ.АутентификацияСтандартная; + Иначе + АутентификацияСтандартнаяНовая = АутентификацияСтандартнаяСтарая; + КонецЕсли; + ПроверитьПустойПароль = + Не АутентификацияСтандартнаяСтарая + И АутентификацияСтандартнаяНовая + И ( ПользовательИБ = Неопределено + И Не ПарольЗадан + Или ПользовательИБ <> Неопределено + И Не ПользовательИБ.ПарольУстановлен); + + Если ПарольЗадан Или ПроверитьПустойПароль Тогда + ОбщегоНазначения.СообщитьПользователю( + НСтр("ru = 'Требуется установить пароль.'"),, "СменитьПароль",, Отказ); КонецЕсли; КонецЕсли; КонецЕсли; @@ -2874,11 +2901,11 @@ // - СправочникСсылка.Пользователи - для указанного пользователя. // // УчастникиИзменений - Неопределено - никаких действий. -// - Массив (возвращаемое значение) - заполняет массив пользователями +// - Массив Из возвращаемое значение - заполняет массив пользователями // для которых есть изменения. // // ИзмененныеГруппы - Неопределено - никаких действий. -// - Массив (возвращаемое значение) - заполняет массив группами пользователей +// - Массив Из возвращаемое значение - заполняет массив группами пользователей // для которых есть изменения. // Процедура ОбновитьСоставыГруппПользователей(Знач ГруппаПользователей, @@ -2945,10 +2972,10 @@ // - СправочникСсылка.ГруппыПользователей, // - СправочникСсылка.ГруппыВнешнихПользователей. // -// УчастникиИзменений - Массив (возвращаемое значение) - заполняет массив пользователями или +// УчастникиИзменений - Массив Из возвращаемое значение - заполняет массив пользователями или // внешними пользователями, для которых есть изменения. // -// ИзмененныеГруппы - Массив (возвращаемое значение) - заполняет массив группами пользователей или +// ИзмененныеГруппы - Массив Из возвращаемое значение - заполняет массив группами пользователей или // группами внешних пользователей, для которых есть изменения. // Процедура ОбновитьИспользуемостьСоставовГруппПользователей(Знач ПользовательИлиГруппа, @@ -2986,12 +3013,17 @@ | ИНАЧЕ ИСТИНА | КОНЕЦ <> СоставыГруппПользователей.Используется"; + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.СоставыГруппПользователей"); + Если ТипЗнч(ПользовательИлиГруппа) = Тип("СправочникСсылка.Пользователи") ИЛИ ТипЗнч(ПользовательИлиГруппа) = Тип("СправочникСсылка.ВнешниеПользователи") Тогда + ЭлементБлокировки.УстановитьЗначение("Пользователь", ПользовательИлиГруппа); Запрос.Текст = СтрЗаменить(Запрос.Текст, "&Отбор", "СоставыГруппПользователей.Пользователь = &ПользовательИлиГруппа"); Иначе + ЭлементБлокировки.УстановитьЗначение("ГруппаПользователей", ПользовательИлиГруппа); Запрос.Текст = СтрЗаменить(Запрос.Текст, "&Отбор", "СоставыГруппПользователей.ГруппаПользователей = &ПользовательИлиГруппа"); КонецЕсли; @@ -3001,6 +3033,7 @@ НачатьТранзакцию(); Попытка + Блокировка.Заблокировать(); Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл @@ -3068,11 +3101,11 @@ // - СправочникСсылка.ВнешниеПользователи - для указанного внешнего пользователя. // // УчастникиИзменений - Неопределено - никаких действий. -// - Массив (возвращаемое значение) - заполняет массив внешними +// - Массив Из возвращаемое значение - заполняет массив внешними // пользователями для которых есть изменения. // // ИзмененныеГруппы - Неопределено - никаких действий. -// - Массив (возвращаемое значение) - заполняет массив группами внешних +// - Массив Из возвращаемое значение - заполняет массив группами внешних // пользователей для которых есть изменения. // Процедура ОбновитьСоставыГруппВнешнихПользователей(Знач ГруппаВнешнихПользователей, @@ -3286,7 +3319,8 @@ Запрос.УстановитьПараметр("СтарыеРолиВнешнихПользователей", СтарыеРолиВнешнихПользователей); Запрос.УстановитьПараметр("ИспользоватьВнешнихПользователей", ПолучитьФункциональнуюОпцию("ИспользоватьВнешнихПользователей")); - // АПК:96-выкл: допустимо, так как строки не должны повторятся и объем данных небольшой (от единиц до тысяч). + // АПК:96-выкл - №434 Использование ОБЪЕДИНИТЬ допустимо, так как + // строки не должны повторятся и объем данных небольшой (от единиц до тысяч). Запрос.Текст = "ВЫБРАТЬ | СтарыеРолиВнешнихПользователей.ВнешнийПользователь, @@ -3367,14 +3401,14 @@ | ВсеРоли КАК ВсеРоли | ГДЕ | ВсеРоли.Имя = ВсеНовыеРолиВнешнихПользователей.Роль)"; - // АПК:96-вкл: допустимо, так как строки не должны повторятся и объем данных небольшой (от единиц до тысяч). + // АПК:96-вкл. // Регистрация ошибок имен ролей в профилях групп доступа. Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru= 'При обновлении ролей внешнего пользователя + НСтр("ru = 'При обновлении ролей внешнего пользователя |""%1"" |роль ""%2"" |группы внешних пользователей ""%3"" @@ -3666,19 +3700,19 @@ КонецФункции -// Добавляет пользователя в группу. -// -// Параметры: -// ГруппаПриемник - СправочникСсылка.ГруппыПользователей - группа, в которую переносится -// пользователь. -// ПользовательСсылка - СправочникСсылка.Пользователь - пользователь, которого необходимо -// добавить в группу. -// ТипПользователя - Строка - ВнешнийПользователь или Пользователь. -// Процедура ДобавитьПользователяВГруппу(ГруппаПриемник, ПользовательСсылка, ТипПользователя) Экспорт НачатьТранзакцию(); Попытка + Блокировка = Новый БлокировкаДанных; + Если ТипПользователя = "ВнешнийПользователь" Тогда + ИмяТаблицы = "Справочник.ГруппыВнешнихПользователей"; + Иначе + ИмяТаблицы = "Справочник.ГруппыПользователей"; + КонецЕсли; + ЭлементБлокировки = Блокировка.Добавить(ИмяТаблицы); + ЭлементБлокировки.УстановитьЗначение("Ссылка", ГруппаПриемник); + Блокировка.Заблокировать(); ГруппаПриемникОбъект = ГруппаПриемник.ПолучитьОбъект(); СтрокаСостава = ГруппаПриемникОбъект.Состав.Добавить(); @@ -3698,19 +3732,19 @@ КонецПроцедуры -// Удаляет пользователя из группы. -// -// Параметры: -// ГруппаПриемник - СправочникСсылка.ГруппыПользователей - группа, из которой удаляется -// пользователь. -// ПользовательСсылка - СправочникСсылка.Пользователь - пользователь, которого необходимо -// добавить в группу. -// ТипПользователя - Строка - ВнешнийПользователь или Пользователь. -// Процедура УдалитьПользователяИзГруппы(ГруппаВладелец, ПользовательСсылка, ТипПользователя) Экспорт НачатьТранзакцию(); Попытка + Блокировка = Новый БлокировкаДанных; + Если ТипПользователя = "ВнешнийПользователь" Тогда + ИмяТаблицы = "Справочник.ГруппыВнешнихПользователей"; + Иначе + ИмяТаблицы = "Справочник.ГруппыПользователей"; + КонецЕсли; + ЭлементБлокировки = Блокировка.Добавить(ИмяТаблицы); + ЭлементБлокировки.УстановитьЗначение("Ссылка", ГруппаВладелец); + Блокировка.Заблокировать(); ГруппаВладелецОбъект = ГруппаВладелец.ПолучитьОбъект(); Если ГруппаВладелецОбъект.Состав.Количество() <> 0 Тогда @@ -3822,17 +3856,15 @@ Если ГруппаПриемник = Справочники.ГруппыПользователей.ВсеПользователи Или ГруппаПриемник = Справочники.ГруппыВнешнихПользователей.ВсеВнешниеПользователи Тогда - СтрокаДействие = НСтр("ru = 'исключен из группы'"); + СообщениеПользователю = НСтр("ru = '""%1"" исключен из группы ""%2""'"); НаименованиеГруппы = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ГруппаИсточник, "Наименование"); ИначеЕсли Перемещение Тогда - СтрокаДействие = НСтр("ru = 'перемещен в группу'"); + СообщениеПользователю = НСтр("ru = '""%1"" перемещен в группу ""%2""'"); Иначе - СтрокаДействие = НСтр("ru = 'включен в группу'"); + СообщениеПользователю = НСтр("ru = '""%1"" включен в группу ""%2""'"); КонецЕсли; - СообщениеПользователю = НСтр("ru = '""%1"" %2 ""%3""'"); - ИначеЕсли КоличествоПользователей > 1 Тогда СтрокаОбъект = Формат(КоличествоПользователей, "ЧДЦ=0") + " " @@ -3840,20 +3872,20 @@ "", НСтр("ru = 'пользователь,пользователя,пользователей,,,,,,0'")); Если ГруппаПриемник = Справочники.ГруппыПользователей.ВсеПользователи Тогда - СтрокаДействие = НСтр("ru = 'исключены из группы'"); + СообщениеПользователю = НСтр("ru = '%1 исключены из группы ""%2""'"); НаименованиеГруппы = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ГруппаИсточник, "Наименование"); ИначеЕсли Перемещение Тогда - СтрокаДействие = НСтр("ru = 'перемещены в группу'"); + СообщениеПользователю = НСтр("ru = '%1 перемещены в группу ""%2""'"); Иначе - СтрокаДействие = НСтр("ru = 'включены в группу'"); + СообщениеПользователю = НСтр("ru = '%1 включены в группу ""%2""'"); КонецЕсли; - СообщениеПользователю = НСтр("ru = '%1 %2 ""%3""'"); + КонецЕсли; Если СообщениеПользователю <> Неопределено Тогда СообщениеПользователю = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СообщениеПользователю, - СтрокаОбъект, СтрокаДействие, НаименованиеГруппы); + СтрокаОбъект, НаименованиеГруппы); КонецЕсли; УведомлениеПользователя.Сообщение = СообщениеПользователю; @@ -4082,11 +4114,11 @@ Процедура ЗаполнитьНаименованиеПредопределенныхГруппПользователей() Экспорт ГруппаПользователейОбъект = Справочники.ГруппыПользователей.ВсеПользователи.ПолучитьОбъект(); - ГруппаПользователейОбъект.Наименование = НСтр("ru='Все пользователи'"); + ГруппаПользователейОбъект.Наименование = НСтр("ru = 'Все пользователи'"); ОбновлениеИнформационнойБазы.ЗаписатьОбъект(ГруппаПользователейОбъект); ГруппыВнешнихПользователейОбъект = Справочники.ГруппыВнешнихПользователей.ВсеВнешниеПользователи.ПолучитьОбъект(); - ГруппыВнешнихПользователейОбъект.Наименование = НСтр("ru='Все внешние пользователи'"); + ГруппыВнешнихПользователейОбъект.Наименование = НСтр("ru = 'Все внешние пользователи'"); ОбновлениеИнформационнойБазы.ЗаписатьОбъект(ГруппыВнешнихПользователейОбъект); КонецПроцедуры @@ -4220,6 +4252,11 @@ Выборка = РезультатЗапроса.Выбрать(); Выборка.Следующий(); + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Справочник.ВнешниеПользователи"); + ЭлементБлокировки.УстановитьЗначение("Ссылка", Выборка.Ссылка); + Блокировка.Заблокировать(); + ВнешнийПользовательОбъект = Выборка.Ссылка.ПолучитьОбъект(); ВнешнийПользовательОбъект.Наименование = Строка(СсылкаНаОбъектАвторизации); ВнешнийПользовательОбъект.Записать(); @@ -4684,9 +4721,17 @@ |ГДЕ | СоставыГруппПользователей.Пользователь ЕСТЬ NULL "; + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.СоставыГруппПользователей"); + ЭлементБлокировки.УстановитьЗначение("ГруппаПользователей", ГруппаВсеПользователи); + Если ОбновитьГруппуВнешнихПользователей Тогда + ЭлементБлокировки = Блокировка.Добавить("Справочник.ВнешниеПользователи"); Запрос.Текст = СтрЗаменить(Запрос.Текст, "Справочник.Пользователи", "Справочник.ВнешниеПользователи"); + Иначе + ЭлементБлокировки = Блокировка.Добавить("Справочник.Пользователи"); КонецЕсли; + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Разделяемый; Если Пользователь = Неопределено Тогда Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ОтборПользователя", "ИСТИНА"); @@ -4696,28 +4741,37 @@ Запрос.Текст, "&ОтборПользователя", "Пользователи.Ссылка В (&Пользователь)"); КонецЕсли; - РезультатЗапроса = Запрос.Выполнить(); - - Если НЕ РезультатЗапроса.Пустой() Тогда - НаборЗаписей = РегистрыСведений.СоставыГруппПользователей.СоздатьНаборЗаписей(); - Запись = НаборЗаписей.Добавить(); - Выборка = РезультатЗапроса.Выбрать(); + НачатьТранзакцию(); + Попытка + Блокировка.Заблокировать(); + РезультатЗапроса = Запрос.Выполнить(); - Пока Выборка.Следующий() Цикл - НаборЗаписей.Отбор.ГруппаПользователей.Установить(Выборка.ГруппаПользователей); - НаборЗаписей.Отбор.Пользователь.Установить(Выборка.Пользователь); - ЗаполнитьЗначенияСвойств(Запись, Выборка); - НаборЗаписей.Записать(); // Добавление недостающих записей о связях. + Если Не РезультатЗапроса.Пустой() Тогда + НаборЗаписей = РегистрыСведений.СоставыГруппПользователей.СоздатьНаборЗаписей(); + Запись = НаборЗаписей.Добавить(); + Выборка = РезультатЗапроса.Выбрать(); - Если УчастникиИзменений <> Неопределено Тогда - УчастникиИзменений.Вставить(Выборка.Пользователь); + Пока Выборка.Следующий() Цикл + НаборЗаписей.Отбор.ГруппаПользователей.Установить(Выборка.ГруппаПользователей); + НаборЗаписей.Отбор.Пользователь.Установить(Выборка.Пользователь); + ЗаполнитьЗначенияСвойств(Запись, Выборка); + НаборЗаписей.Записать(); // Добавление недостающих записей о связях. + + Если УчастникиИзменений <> Неопределено Тогда + УчастникиИзменений.Вставить(Выборка.Пользователь); + КонецЕсли; + КонецЦикла; + + Если ИзмененныеГруппы <> Неопределено Тогда + ИзмененныеГруппы.Вставить(ГруппаВсеПользователи); КонецЕсли; - КонецЦикла; - - Если ИзмененныеГруппы <> Неопределено Тогда - ИзмененныеГруппы.Вставить(ГруппаВсеПользователи); КонецЕсли; - КонецЕсли; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; КонецПроцедуры @@ -4893,11 +4947,8 @@ "Справочник.ГруппыВнешнихПользователей", "Справочник.ГруппыПользователей") )); - Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; - Запрос.Выполнить(); - // Подготовка запроса для цикла. - Запрос.Текст = + ТекстЗапроса = "ВЫБРАТЬ | СоставыГруппПользователей.Пользователь, | СоставыГруппПользователей.Используется @@ -4990,77 +5041,99 @@ ОтборПользователяВСправочнике = "ГруппыПользователейСостав.Пользователь В (&Пользователь)"; КонецЕсли; - Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ОтборПользователяВРегистре", ОтборПользователяВРегистре); - Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ОтборПользователяВСправочнике", ОтборПользователяВСправочнике); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ОтборПользователяВРегистре", ОтборПользователяВРегистре); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ОтборПользователяВСправочнике", ОтборПользователяВСправочнике); + + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.СоставыГруппПользователей"); + ЭлементБлокировки.УстановитьЗначение("ГруппаПользователей", ГруппаПользователей); Если ОбновитьГруппыВнешнихПользователей Тогда - Запрос.Текст = СтрЗаменить( - Запрос.Текст, + ТекстЗапроса = СтрЗаменить( + ТекстЗапроса, "Справочник.ГруппыПользователей", "Справочник.ГруппыВнешнихПользователей"); - Запрос.Текст = СтрЗаменить( - Запрос.Текст, + ТекстЗапроса = СтрЗаменить( + ТекстЗапроса, "ГруппыПользователейСостав.Пользователь", "ГруппыПользователейСостав.ВнешнийПользователь"); + + ЭлементБлокировки = Блокировка.Добавить("Справочник.ГруппыВнешнихПользователей"); + Иначе + ЭлементБлокировки = Блокировка.Добавить("Справочник.ГруппыПользователей"); КонецЕсли; + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Разделяемый; + Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; - // Выполнение для текущий группы пользователей и каждой группы-родителя. - Пока ЗначениеЗаполнено(ГруппаПользователей) Цикл - - Запрос.УстановитьПараметр("ГруппаПользователей", ГруппаПользователей); - - РезультатыЗапроса = Запрос.ВыполнитьПакет(); - - Если НЕ РезультатыЗапроса[2].Пустой() Тогда - НаборЗаписей = РегистрыСведений.СоставыГруппПользователей.СоздатьНаборЗаписей(); - Выборка = РезультатыЗапроса[2].Выбрать(); + НачатьТранзакцию(); + Попытка + Блокировка.Заблокировать(); + Запрос.Выполнить(); + Запрос.Текст = ТекстЗапроса; + + // Выполнение для текущий группы пользователей и каждой группы-родителя. + Пока ЗначениеЗаполнено(ГруппаПользователей) Цикл - Пока Выборка.Следующий() Цикл - НаборЗаписей.Отбор.Пользователь.Установить(Выборка.Пользователь); - НаборЗаписей.Отбор.ГруппаПользователей.Установить(ГруппаПользователей); - НаборЗаписей.Записать(); // Удаление лишних записей о связях. - - Если УчастникиИзменений <> Неопределено Тогда - УчастникиИзменений.Вставить(Выборка.Пользователь); - КонецЕсли; - - Если ИзмененныеГруппы <> Неопределено Тогда - ИзмененныеГруппы.Вставить(ГруппаПользователей); - КонецЕсли; - КонецЦикла; - КонецЕсли; - - Если НЕ РезультатыЗапроса[3].Пустой() Тогда - НаборЗаписей = РегистрыСведений.СоставыГруппПользователей.СоздатьНаборЗаписей(); - Запись = НаборЗаписей.Добавить(); - Выборка = РезультатыЗапроса[3].Выбрать(); + Запрос.УстановитьПараметр("ГруппаПользователей", ГруппаПользователей); - Пока Выборка.Следующий() Цикл - НаборЗаписей.Отбор.Пользователь.Установить(Выборка.Пользователь); - НаборЗаписей.Отбор.ГруппаПользователей.Установить(Выборка.ГруппаПользователей); - ЗаполнитьЗначенияСвойств(Запись, Выборка); - НаборЗаписей.Записать(); // Добавление недостающих записей о связях. + РезультатыЗапроса = Запрос.ВыполнитьПакет(); + + Если НЕ РезультатыЗапроса[2].Пустой() Тогда + НаборЗаписей = РегистрыСведений.СоставыГруппПользователей.СоздатьНаборЗаписей(); + Выборка = РезультатыЗапроса[2].Выбрать(); - Если УчастникиИзменений <> Неопределено Тогда - УчастникиИзменений.Вставить(Выборка.Пользователь); - КонецЕсли; + Пока Выборка.Следующий() Цикл + НаборЗаписей.Отбор.Пользователь.Установить(Выборка.Пользователь); + НаборЗаписей.Отбор.ГруппаПользователей.Установить(ГруппаПользователей); + НаборЗаписей.Записать(); // Удаление лишних записей о связях. + + Если УчастникиИзменений <> Неопределено Тогда + УчастникиИзменений.Вставить(Выборка.Пользователь); + КонецЕсли; + + Если ИзмененныеГруппы <> Неопределено Тогда + ИзмененныеГруппы.Вставить(ГруппаПользователей); + КонецЕсли; + КонецЦикла; + КонецЕсли; + + Если НЕ РезультатыЗапроса[3].Пустой() Тогда + НаборЗаписей = РегистрыСведений.СоставыГруппПользователей.СоздатьНаборЗаписей(); + Запись = НаборЗаписей.Добавить(); + Выборка = РезультатыЗапроса[3].Выбрать(); - Если ИзмененныеГруппы <> Неопределено Тогда - ИзмененныеГруппы.Вставить(Выборка.ГруппаПользователей); - КонецЕсли; - КонецЦикла; - КонецЕсли; + Пока Выборка.Следующий() Цикл + НаборЗаписей.Отбор.Пользователь.Установить(Выборка.Пользователь); + НаборЗаписей.Отбор.ГруппаПользователей.Установить(Выборка.ГруппаПользователей); + ЗаполнитьЗначенияСвойств(Запись, Выборка); + НаборЗаписей.Записать(); // Добавление недостающих записей о связях. + + Если УчастникиИзменений <> Неопределено Тогда + УчастникиИзменений.Вставить(Выборка.Пользователь); + КонецЕсли; + + Если ИзмененныеГруппы <> Неопределено Тогда + ИзмененныеГруппы.Вставить(Выборка.ГруппаПользователей); + КонецЕсли; + КонецЦикла; + КонецЕсли; + + Если НЕ РезультатыЗапроса[4].Пустой() Тогда + Выборка = РезультатыЗапроса[4].Выбрать(); + Выборка.Следующий(); + ГруппаПользователей = Выборка.Родитель; + Иначе + ГруппаПользователей = Неопределено; + КонецЕсли; + КонецЦикла; - Если НЕ РезультатыЗапроса[4].Пустой() Тогда - Выборка = РезультатыЗапроса[4].Выбрать(); - Выборка.Следующий(); - ГруппаПользователей = Выборка.Родитель; - Иначе - ГруппаПользователей = Неопределено; - КонецЕсли; - КонецЦикла; + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; КонецПроцедуры @@ -5912,6 +5985,15 @@ Возврат; КонецЕсли; + Если ОписаниеПользователяИБ.Свойство("ПотребоватьСменуПароляПриВходе") Тогда + ЗаписатьСвойствоПотребоватьСменуПароляПриВходе(СсылкаОбъекта(ПользовательОбъект), + ОписаниеПользователяИБ.ПотребоватьСменуПароляПриВходе); + + Если ОписаниеПользователяИБ.Количество() = 2 Тогда + Возврат; + КонецЕсли; + КонецЕсли; + СоздатьНовогоПользователяИБ = Ложь; Если ОписаниеПользователяИБ.Свойство("УникальныйИдентификатор") @@ -6026,7 +6108,15 @@ ХешПароляЗадан = ОписаниеПользователяИБ.Свойство("СохраняемоеЗначениеПароля") И ОписаниеПользователяИБ.СохраняемоеЗначениеПароля <> Неопределено; - Если ПарольЗадан Или СоздатьНовогоПользователяИБ И Не ХешПароляЗадан Тогда + ПроверитьПустойПароль = + Не СтараяАутентификация.АутентификацияСтандартная + И ХранимыеСвойства.АутентификацияСтандартная + И ( СоздатьНовогоПользователяИБ + И Не ПарольЗадан + Или ПараметрыОбработки.СтарыйПользовательИБСуществует + И Не ПараметрыОбработки.ОписаниеСтарогоПользователяИБ.ПарольУстановлен); + + Если ПарольЗадан Или Не ХешПароляЗадан И ПроверитьПустойПароль Тогда ПараметрыВыполнения = Новый Структура; ПараметрыВыполнения.Вставить("Пользователь", ПользовательОбъект); ПараметрыВыполнения.Вставить("НовыйПароль", ?(ПарольЗадан, ОписаниеПользователяИБ.Пароль, "")); @@ -6105,6 +6195,33 @@ КонецПроцедуры +Процедура ЗаписатьСвойствоПотребоватьСменуПароляПриВходе(Пользователь, Значение) + + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.СведенияОПользователях"); + ЭлементБлокировки.УстановитьЗначение("Пользователь", Пользователь); + НачатьТранзакцию(); + Попытка + Блокировка.Заблокировать(); + НаборЗаписей = РегистрыСведений.СведенияОПользователях.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.Пользователь.Установить(Пользователь); + НаборЗаписей.Прочитать(); + Если НаборЗаписей.Количество() = 0 Тогда + СведенияОПользователе = НаборЗаписей.Добавить(); + СведенияОПользователе.Пользователь = Пользователь; + Иначе + СведенияОПользователе = НаборЗаписей[0]; + КонецЕсли; + СведенияОПользователе.ПотребоватьСменуПароляПриВходе = Значение; + НаборЗаписей.Записать(); + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Для процедуры ЗавершитьОбработкуПользователяИБ. diff --git a/SSL/src/CommonModules/ПользователиСлужебныйВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/ПользователиСлужебныйВМоделиСервиса/Module.bsl index 7799a9997..44b21ad53 100644 --- a/SSL/src/CommonModules/ПользователиСлужебныйВМоделиСервиса/Module.bsl +++ b/SSL/src/CommonModules/ПользователиСлужебныйВМоделиСервиса/Module.bsl @@ -173,17 +173,12 @@ #Область РаботаСНеразделеннымиПользователямиИнформационнойБазы -// Вызывается при установке параметров сеанса. +// Вызывается перед запуском программы до вызова всех остальных обработчиков. // -// Параметры: -// ИменаПараметровСеанса - Массив, Неопределено. -// -Процедура ПриУстановкеПараметровСеанса(ИменаПараметровСеанса) Экспорт +Процедура ПередЗапускомПрограммы() Экспорт - Если ИменаПараметровСеанса = Неопределено Тогда - Если ЭтоНеразделенныйПользовательИБ() Тогда - ЗарегистрироватьНеразделенногоПользователяВРегистре(); - КонецЕсли; + Если ЭтоНеразделенныйПользовательИБ() Тогда + ЗарегистрироватьНеразделенногоПользователяВРегистре(); КонецЕсли; КонецПроцедуры @@ -540,7 +535,7 @@ // ссылок в файлах выгрузки. // // Параметры: -// Типы - Массив(ОбъектМетаданных). +// Типы - Массив Из ОбъектМетаданных. // Процедура ПриЗаполненииТиповТребующихАннотациюСсылокПриВыгрузке(Типы) Экспорт @@ -551,7 +546,8 @@ // Вызывается при регистрации произвольных обработчиков выгрузки данных. // -// Параметры: ТаблицаОбработчиков - ТаблицаЗначений, в данной процедуре требуется +// Параметры: +// ТаблицаОбработчиков - ТаблицаЗначений, в данной процедуре требуется // дополнить эту таблицу значений информацией о регистрируемых произвольных // обработчиках выгрузки данных. Колонки: // ОбъектМетаданных - ОбъектМетаданных, при выгрузке данных которого должен @@ -608,7 +604,7 @@ // Объект может быть модифицировано внутри обработчика ПередВыгрузкойОбъекта(), при // этом внесенные изменения будут отражены в сериализации объекта в файлах выгрузки, но // не будут зафиксированы в информационной базе -// Артефакты - Массив(ОбъектXDTO) - набор дополнительной информации, логически неразрывно +// Артефакты - Массив Из ОбъектXDTO - набор дополнительной информации, логически неразрывно // связанной с объектом, но не являющейся его частью (артефакты объекта). Артефакты должны // сформированы внутри обработчика ПередВыгрузкойОбъекта() и добавлены в массив, переданный // в качестве значения параметра Артефакты. Каждый артефакт должен являться XDTO-объектом, @@ -645,7 +641,8 @@ // Вызывается при регистрации произвольных обработчиков загрузки данных. // -// Параметры: ТаблицаОбработчиков - ТаблицаЗначений, в данной процедуре требуется +// Параметры: +// ТаблицаОбработчиков - ТаблицаЗначений, в данной процедуре требуется // дополнить эту таблицу значений информацией о регистрируемых произвольных // обработчиках загрузки данных. Колонки: // ОбъектМетаданных - ОбъектМетаданных, при загрузке данных которого должен @@ -719,7 +716,7 @@ // объект данных информационной базы, перед загрузкой которого был вызван обработчик. // Значение, переданное в процедуру ПередЗагрузкойОбъекта() в качестве значения параметра // Объект может быть модифицировано внутри процедуры обработчика ПередЗагрузкойОбъекта(). -// Артефакты - Массив(ОбъектXDTO) - дополнительные данные, логически неразрывно связанные +// Артефакты - Массив Из ОбъектXDTO - дополнительные данные, логически неразрывно связанные // с объектом данных, но не являющиеся его частью. Сформированы в экспортируемых процедурах // ПередВыгрузкойОбъекта() обработчиков выгрузки данных (см. комментарий к процедуре // ПриРегистрацииОбработчиковВыгрузкиДанных(). Каждый артефакт должен являться XDTO-объектом, @@ -742,7 +739,7 @@ // РегистрНакопленияНаборЗаписей.*, РегистрБухгалтерииНаборЗаписей.*, // РегистрРасчетаНаборЗаписей.*, ПоследовательностьНаборЗаписей.*, ПерерасчетНаборЗаписей.* - // объект данных информационной базы, после загрузки которого был вызван обработчик. -// Артефакты - Массив(ОбъектXDTO) - дополнительные данные, логически неразрывно связанные +// Артефакты - Массив Из ОбъектXDTO - дополнительные данные, логически неразрывно связанные // с объектом данных, но не являющиеся его частью. Сформированы в экспортируемых процедурах // ПередВыгрузкойОбъекта() обработчиков выгрузки данных (см. комментарий к процедуре // ПриРегистрацииОбработчиковВыгрузкиДанных(). Каждый артефакт должен являться XDTO-объектом, @@ -773,7 +770,7 @@ // Контейнер - ОбработкаОбъект.ВыгрузкаЗагрузкаДанныхМенеджерКонтейнера - менеджер // контейнера, используемый в процессе загрузки данных. Подробнее см. комментарий // к программному интерфейсу обработки ВыгрузкаЗагрузкаДанныхМенеджерКонтейнера, -// Сериализация - ОбъектXDTO {http://www.1c.ru/1cFresh/Data/Dump/1.0.2.1}InfoBaseUser, +// Сериализация - ОбъектXDTO - ОбъектXDTO {http://www.1c.ru/1cFresh/Data/Dump/1.0.2.1}InfoBaseUser, // сериализация пользователя информационной базы, // ПользовательИБ - ПользовательИнформационнойБазы, десериализованный из выгрузки, // Отказ - Булево, при установке значения данного параметры внутри этой процедуры в @@ -801,7 +798,7 @@ // Контейнер - ОбработкаОбъект.ВыгрузкаЗагрузкаДанныхМенеджерКонтейнера - менеджер // контейнера, используемый в процессе загрузки данных. Подробнее см. комментарий // к программному интерфейсу обработки ВыгрузкаЗагрузкаДанныхМенеджерКонтейнера, -// Сериализация - ОбъектXDTO {http://www.1c.ru/1cFresh/Data/Dump/1.0.2.1}InfoBaseUser, +// Сериализация - ОбъектXDTO - ОбъектXDTO {http://www.1c.ru/1cFresh/Data/Dump/1.0.2.1}InfoBaseUser, // сериализация пользователя информационной базы, // ПользовательИБ - ПользовательИнформационнойБазы, десериализованный из выгрузки. // @@ -1132,7 +1129,8 @@ // Параметры: // Пользователь - СправочникСсылка.Пользователи; // -// Возвращаемое значение: Булево. +// Возвращаемое значение: +// Булево - // Функция ЭтоСуществующийПользовательТекущейОбластиДанных(Знач Пользователь) @@ -1305,7 +1303,7 @@ // Идентификатор - уникальный идентификатор пользователя ИБ или СправочникСсылка.Пользователи. // // Возвращаемое значение: -// Строка +// Строка - // Функция ПолноеИмяСлужебногоПользователя(Знач Идентификатор = Неопределено) Экспорт @@ -1328,7 +1326,8 @@ // Проверяет, является ли текущий пользователь ИБ неразделенным. // -// Возвращаемое значение: Булево. +// Возвращаемое значение: +// Булево - // Функция ЭтоНеразделенныйПользовательИБ() @@ -1419,26 +1418,36 @@ // Процедура ОбновитьИдентификаторыПользователейИБ(Знач СоответствиеИдентификаторов) - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | Пользователи.Ссылка КАК Ссылка, - | Пользователи.ИдентификаторПользователяИБ КАК ИдентификаторПользователяИБ - |ИЗ - | Справочник.Пользователи КАК Пользователи - |ГДЕ - | Пользователи.ИдентификаторПользователяИБ <> &ПустойИдентификатор"; - Запрос.УстановитьПараметр("ПустойИдентификатор", Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")); - Результат = Запрос.Выполнить(); - Выборка = Результат.Выбрать(); - Пока Выборка.Следующий() Цикл - ПользовательОбъект = Выборка.Ссылка.ПолучитьОбъект(); - ПользовательОбъект.ОбменДанными.Загрузка = Истина; - ПользовательОбъект.ИдентификаторПользователяСервиса = Неопределено; - ПользовательОбъект.ИдентификаторПользователяИБ - = СоответствиеИдентификаторов[Выборка.ИдентификаторПользователяИБ]; - ПользовательОбъект.Записать(); - КонецЦикла; + НачатьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных; + Блокировка.Добавить("Справочник.Пользователи"); + Блокировка.Заблокировать(); + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | Пользователи.Ссылка КАК Ссылка, + | Пользователи.ИдентификаторПользователяИБ КАК ИдентификаторПользователяИБ + |ИЗ + | Справочник.Пользователи КАК Пользователи + |ГДЕ + | Пользователи.ИдентификаторПользователяИБ <> &ПустойИдентификатор"; + Запрос.УстановитьПараметр("ПустойИдентификатор", Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")); + Результат = Запрос.Выполнить(); + Выборка = Результат.Выбрать(); + Пока Выборка.Следующий() Цикл + ПользовательОбъект = Выборка.Ссылка.ПолучитьОбъект(); + ПользовательОбъект.ИдентификаторПользователяСервиса = Неопределено; + ПользовательОбъект.ИдентификаторПользователяИБ + = СоответствиеИдентификаторов[Выборка.ИдентификаторПользователяИБ]; + ОбновлениеИнформационнойБазы.ЗаписатьДанные(ПользовательОбъект); + КонецЦикла; + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; КонецПроцедуры diff --git a/SSL/src/CommonModules/ПользователиСлужебныйВМоделиСервисаПовтИсп/Module.bsl b/SSL/src/CommonModules/ПользователиСлужебныйВМоделиСервисаПовтИсп/Module.bsl index 8a6fce58c..35e117216 100644 --- a/SSL/src/CommonModules/ПользователиСлужебныйВМоделиСервисаПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ПользователиСлужебныйВМоделиСервисаПовтИсп/Module.bsl @@ -31,7 +31,8 @@ // Возвращает наборы записей, содержащие полей, для которых в качестве типа значения установлен // тип СправочникСсылка.Пользователи. // -// Возвращаемое значение: ТаблицаЗначений: +// Возвращаемое значение: +// ТаблицаЗначений: // * Коллекция - Строка - имя коллекции метаданных, // * Объект - Строка - имя объекта метаданных, // * Измерения - Массив(Строка) - имена измерений. diff --git a/SSL/src/CommonModules/ПользователиСлужебныйКлиентСервер/Module.bsl b/SSL/src/CommonModules/ПользователиСлужебныйКлиентСервер/Module.bsl index 0cd3fa834..8606eae0f 100644 --- a/SSL/src/CommonModules/ПользователиСлужебныйКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ПользователиСлужебныйКлиентСервер/Module.bsl @@ -18,7 +18,7 @@ // например: НСтр("ru = 'день,дня,дней,,,,,,0'"). // // Возвращаемое значение: -// Строка. +// Строка - . // Функция ПредметЦелогоЧисла(Число, ФорматнаяСтрока, ПараметрыПредметаИсчисления) Экспорт diff --git a/SSL/src/CommonModules/ПрефиксацияОбъектовСлужебный/Module.bsl b/SSL/src/CommonModules/ПрефиксацияОбъектовСлужебный/Module.bsl index b5fbfca53..7ba4238c1 100644 --- a/SSL/src/CommonModules/ПрефиксацияОбъектовСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ПрефиксацияОбъектовСлужебный/Module.bsl @@ -74,9 +74,9 @@ // Ссылка - ссылка на объект ИБ. // ДатаПослеИзменения - дата объекта после изменения. // ОрганизацияПослеИзменения - организация объекта после изменения. -// +// // Возвращаемое значение: -// Истина - организация объекта была изменена или новая дата объекта +// Булево - Истина - организация объекта была изменена или новая дата объекта // задана в другом интервале периодичности по сравнению с предыдущим значением даты. // Ложь - организация и дата документа не были изменены. // @@ -121,7 +121,7 @@ // ОрганизацияПослеИзменения - организация объекта после изменения. // // Возвращаемое значение: -// Истина - организация объекта была изменена. Ложь - организация не была изменена. +// Булево - Истина - организация объекта была изменена. Ложь - организация не была изменена. // Функция ОрганизацияОбъектаИзменена(Ссылка, Знач ОрганизацияПослеИзменения) Экспорт @@ -162,9 +162,9 @@ // Дата1 - первая дата для сравнения; // Дата2 - вторая дата для сравнения; // МетаданныеОбъекта - метаданные объекта, для которого необходимо получить значение функции. -// +// // Возвращаемое значение: -// Истина - даты объекта одного периода; Ложь - даты объекта разных периодов. +// Булево - Истина - даты объекта одного периода; Ложь - даты объекта разных периодов. // Функция ДатыОбъектаОдногоПериода(Знач Дата1, Знач Дата2, Ссылка) Экспорт diff --git a/SSL/src/CommonModules/ПрефиксацияОбъектовСобытия/Module.bsl b/SSL/src/CommonModules/ПрефиксацияОбъектовСобытия/Module.bsl index 3f554cee4..568d49918 100644 --- a/SSL/src/CommonModules/ПрефиксацияОбъектовСобытия/Module.bsl +++ b/SSL/src/CommonModules/ПрефиксацияОбъектовСобытия/Module.bsl @@ -68,10 +68,6 @@ // Процедура ПроверитьКодСправочникаПоОрганизации(Источник, Отказ) Экспорт - Если Источник.ОбменДанными.Загрузка Тогда - Возврат; - КонецЕсли; - ПроверитьКодОбъектаПоОрганизации(Источник); КонецПроцедуры @@ -89,10 +85,6 @@ // Процедура ПроверитьНомерБизнесПроцессаПоДате(Источник, Отказ) Экспорт - Если Источник.ОбменДанными.Загрузка Тогда - Возврат; - КонецЕсли; - ПроверитьНомерОбъектаПоДате(Источник); КонецПроцедуры @@ -142,10 +134,6 @@ // Процедура ПроверитьНомерДокументаПоДатеИОрганизации(Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт - Если Источник.ОбменДанными.Загрузка Тогда - Возврат; - КонецЕсли; - ПроверитьНомерОбъектаПоДатеИОрганизации(Источник); КонецПроцедуры @@ -243,7 +231,9 @@ Процедура ПроверитьНомерОбъектаПоДате(Объект) - Если Объект.ЭтоНовый() Тогда + Если Объект.ОбменДанными.Загрузка Тогда + Возврат; + ИначеЕсли Объект.ЭтоНовый() Тогда Возврат; КонецЕсли; @@ -272,7 +262,9 @@ Процедура ПроверитьНомерОбъектаПоДатеИОрганизации(Объект) - Если Объект.ЭтоНовый() Тогда + Если Объект.ОбменДанными.Загрузка Тогда + Возврат; + ИначеЕсли Объект.ЭтоНовый() Тогда Возврат; КонецЕсли; @@ -287,7 +279,9 @@ Процедура ПроверитьКодОбъектаПоОрганизации(Объект) - Если Объект.ЭтоНовый() Тогда + Если Объект.ОбменДанными.Загрузка Тогда + Возврат; + ИначеЕсли Объект.ЭтоНовый() Тогда Возврат; ИначеЕсли Не РеквизитОрганизацияДоступен(Объект) Тогда Возврат; diff --git a/SSL/src/CommonModules/РаботаВБезопасномРежиме/Module.bsl b/SSL/src/CommonModules/РаботаВБезопасномРежиме/Module.bsl index 4c1fd5922..c225f8c27 100644 --- a/SSL/src/CommonModules/РаботаВБезопасномРежиме/Module.bsl +++ b/SSL/src/CommonModules/РаботаВБезопасномРежиме/Module.bsl @@ -439,7 +439,8 @@ // Возвращает имя профиля безопасности, предоставляющего привилегии кода конфигурации. // -// Возвращаемое значение: Строка - имя профиля безопасности. +// Возвращаемое значение: +// Строка - имя профиля безопасности. // Функция ПрофильБезопасностиИнформационнойБазы(ПроверкаИспользования = Ложь) Экспорт @@ -449,7 +450,13 @@ УстановитьПривилегированныйРежим(Истина); - Возврат Константы.ПрофильБезопасностиИнформационнойБазы.Получить(); + ПрофильБезопасности = Константы.ПрофильБезопасностиИнформационнойБазы.Получить(); + + Если ПрофильБезопасности = Ложь Тогда + Возврат ""; + КонецЕсли; + + Возврат ПрофильБезопасности; КонецФункции @@ -459,7 +466,8 @@ // Проверяет возможность перехода в привилегированный режим из текущего безопасного режима. // -// Возвращаемое значение: Булево. +// Возвращаемое значение: +// Булево - // Функция ДоступенПереходВПривилегированныйРежим() @@ -470,7 +478,8 @@ // Возвращает "предопределенный" псевдоним (alias) для каталога программы. // -// Возвращаемое значение: Строка. +// Возвращаемое значение: +// Строка - . // Функция ПсевдонимКаталогаПрограммы() @@ -490,7 +499,8 @@ // есть во встроенном языке 1С:Предприятия. Используется для определения сетевого порта в тех // случаях, когда из прикладного кода запрашивается разрешение без указания сетевого порта. // -// Возвращаемое значение: ФиксированнаяСтруктура: +// Возвращаемое значение: +// ФиксированнаяСтруктура: // * Ключ - Строка, имя Интернет-протокола, // * Значение - Число, номер сетевого порта. // diff --git a/SSL/src/CommonModules/РаботаВБезопасномРежимеСлужебный/Module.bsl b/SSL/src/CommonModules/РаботаВБезопасномРежимеСлужебный/Module.bsl index 74c2944ce..63b1e000d 100644 --- a/SSL/src/CommonModules/РаботаВБезопасномРежимеСлужебный/Module.bsl +++ b/SSL/src/CommonModules/РаботаВБезопасномРежимеСлужебный/Module.bsl @@ -44,7 +44,8 @@ // ВнешнийМодуль - ЛюбаяСсылка, ссылка, соответствующая внешнему модулю, для которого запрашиваются // режим подключения. // -// Возвращаемое значение: Строка - имя профиля безопасности, который должен использоваться для подключения +// Возвращаемое значение: +// Строка - имя профиля безопасности, который должен использоваться для подключения // внешнего модуля. Если для внешнего модуля не зарегистрирован режим подключения - возвращается Неопределено. // Функция РежимПодключенияВнешнегоМодуля(Знач ВнешнийМодуль) Экспорт @@ -60,7 +61,8 @@ // Возвращает URI пространства имен XDTO-пакета, который используется для описания разрешений // в профилях безопасности. // -// Возвращаемое значение: Строка, URI пространства имен XDTO-пакета. +// Возвращаемое значение: +// Строка, URI пространства имен XDTO-пакета. // Функция Пакет() Экспорт @@ -76,12 +78,12 @@ // // Параметры: // ВнешнийМодуль - ЛюбаяСсылка - ссылка, соответствующая внешнему модулю, для которого запрашиваются разрешения, -// НовыеРазрешения - Массив(ОбъектXDTO) - массив ОбъектовXDTO, соответствующих внутренним описаниям +// НовыеРазрешения - Массив Из ОбъектXDTO - массив ОбъектовXDTO, соответствующих внутренним описаниям // запрашиваемых разрешений на доступ к внешним ресурсам. Предполагается, что все ОбъектыXDTO, передаваемые // в качестве параметра, сформированы с помощью вызова функций РаботаВБезопасномРежиме.Разрешение*(). // При запросе разрешений для внешних модулей добавление разрешений всегда выполняется в режиме замещения. // -// Возвращаемое значение - Массив(УникальныйИдентификатор) - идентификаторы созданных запросов. +// Возвращаемое значение - Массив Из УникальныйИдентификатор - идентификаторы созданных запросов. // Функция ЗапросРазрешенийДляВнешнегоМодуля(Знач ПрограммныйМодуль, Знач НовыеРазрешения = Неопределено) Экспорт @@ -133,7 +135,8 @@ // Параметры: // Ссылка - ЛюбаяСсылка. // -// Возвращаемое значение: Структура: +// Возвращаемое значение: +// Структура: // * Тип - СправочникСсылка.ИдентификаторыОбъектовМетаданных, // * Идентификатор - УникальныйИдентификатор - уникальный // идентификатор ссылки. @@ -168,7 +171,8 @@ // Таблицы - Структура - таблицы разрешений, для которых формируется представление // (см. ТаблицыРазрешений()). // -// Возвращаемое значение: ТабличныйДокумент, представление разрешений на использование внешних ресурсов. +// Возвращаемое значение: +// ТабличныйДокумент - , представление разрешений на использование внешних ресурсов. // Функция ПредставлениеРазрешенийНаИспользованиеВнешнихРесурсов(Знач ТипПрограммногоМодуля, Знач ИдентификаторПрограммногоМодуля, Знач ТипВладельца, Знач ИдентификаторВладельца, Знач Разрешения) Экспорт @@ -285,7 +289,8 @@ // Проверяет возможность использования профилей безопасности для текущей информационной базы. // -// Возвращаемое значение: Булево. +// Возвращаемое значение: +// Булево - // Функция ВозможноИспользованиеПрофилейБезопасности() Экспорт @@ -413,7 +418,8 @@ // Тип - СправочникСсылка.ИдентификаторОбъектаМетаданных, // Идентификатор - УникальныйИдентификатор - уникальный идентификатор ссылки. // -// Возвращаемое значение: ЛюбаяСсылка. +// Возвращаемое значение: +// ЛюбаяСсылка - . // Функция СсылкаИзРегистраРазрешений(Знач Тип, Знач Идентификатор) Экспорт @@ -443,10 +449,10 @@ // Владелец - ЛюбаяСсылка - владелец разрешений на использование внешних ресурсов. // (Неопределено при запросе разрешений для конфигурации, а не для объектов конфигурации), // РежимЗамещения - Булево - режим замещения ранее предоставленных для владельца разрешений, -// ДобавляемыеРазрешения - Массив(ОбъектXDTO) - массив ОбъектовXDTO, соответствующих внутренним описаниям +// ДобавляемыеРазрешения - Массив Из ОбъектXDTO - массив ОбъектовXDTO, соответствующих внутренним описаниям // запрашиваемых разрешений на доступ к внешним ресурсам. Предполагается, что все ОбъектыXDTO, передаваемые // в качестве параметра, сформированы с помощью вызова функций РаботаВБезопасномРежиме.Разрешение*(), -// УдаляемыеРазрешения - Массив(ОбъектXDTO) - массив ОбъектовXDTO, соответствующих внутренним описаниям +// УдаляемыеРазрешения - Массив Из ОбъектXDTO - массив ОбъектовXDTO, соответствующих внутренним описаниям // отменяемых разрешений на доступ к внешним ресурсам. Предполагается, что все ОбъектыXDTO, передаваемые // в качестве параметра, сформированы с помощью вызова функций РаботаВБезопасномРежиме.Разрешение*(), // ВнешнийМодуль - ЛюбаяСсылка - ссылка, соответствующая внешнему модулю, для которого запрашиваются @@ -567,7 +573,8 @@ // ВнешнийМодуль - ЛюбаяСсылка, ссылка, соответствующая внешнему модулю, для которого запрашиваются // менеджер. // -// Возвращаемое значение: ОбщийМодуль. +// Возвращаемое значение: +// ОбщийМодуль - . // Функция МенеджерВнешнегоМодуля(Знач ВнешнийМодуль) Экспорт @@ -608,7 +615,8 @@ // Проверяет, требуется ли использовать интерактивный режим запроса разрешений. // -// Возвращаемое значение: Булево. +// Возвращаемое значение: +// Булево - // Функция ИспользуетсяИнтерактивныйРежимЗапросаРазрешений() @@ -626,7 +634,8 @@ // Возвращает массив менеджеров справочников, которые являются контейнерами внешних модулей. // -// Возвращаемое значение: Массив(СправочникМенеджер). +// Возвращаемое значение: +// Массив(СправочникМенеджер). // Функция МенеджерыВнешнихМодулей() diff --git a/SSL/src/CommonModules/РаботаСАдресами/Module.bsl b/SSL/src/CommonModules/РаботаСАдресами/Module.bsl index ed491b45f..197de0724 100644 --- a/SSL/src/CommonModules/РаботаСАдресами/Module.bsl +++ b/SSL/src/CommonModules/РаботаСАдресами/Module.bsl @@ -980,7 +980,6 @@ Возврат РасширенныйТекстПреобразования; КонецФункции - #Область ДляВызоваИзДругихПодсистем // ИнтернетПоддержкаПользователей.РаботаСКлассификаторами @@ -1018,11 +1017,6 @@ #Область СлужебныеПроцедурыИФункции -// Определяет внутренний идентификатор классификатора для подсистемы РаботаСКлассификаторами. -// -// Возвращаемое значение: -// Строка - идентификатор классификатора. -// Функция ИдентификаторКлассификатора() Возврат "Countries"; КонецФункции @@ -1189,10 +1183,10 @@ Процедура ОбработкаЧастыхСокращенийВАдресах(Знач ДанныеАнализа) Экспорт СубъектРФ = Новый Соответствие(); - СубъектРФ.Вставить(НСтр("ru='САНКТ-ПЕТЕРБУРГ'"), "Санкт-Петербург"); - СубъектРФ.Вставить(НСтр("ru='МОСКВА'"), "Москва"); - СубъектРФ.Вставить(НСтр("ru='МСК'"), "Москва"); - СубъектРФ.Вставить(НСтр("ru='СПБ'"), "Санкт-Петербург"); + СубъектРФ.Вставить(НСтр("ru = 'САНКТ-ПЕТЕРБУРГ'"), "Санкт-Петербург"); + СубъектРФ.Вставить(НСтр("ru = 'МОСКВА'"), "Москва"); + СубъектРФ.Вставить(НСтр("ru = 'МСК'"), "Москва"); + СубъектРФ.Вставить(НСтр("ru = 'СПБ'"), "Санкт-Петербург"); Для каждого ЧастьАдреса Из ДанныеАнализа Цикл Наименование = ВРег(ЧастьАдреса.Наименование); @@ -2002,12 +1996,12 @@ КодМуниципальногоРайона = ""; - Если СтрСравнить(ТипМуниципальногоРайона, НСтр("ru='м.р-н'")) = 0 Тогда + Если СтрСравнить(ТипМуниципальногоРайона, НСтр("ru = 'м.р-н'")) = 0 Тогда КодМуниципальногоРайона = "1"; - ИначеЕсли СтрСравнить(ТипМуниципальногоРайона, НСтр("ru='г.о.'")) = 0 Тогда + ИначеЕсли СтрСравнить(ТипМуниципальногоРайона, НСтр("ru = 'г.о.'")) = 0 Тогда КодМуниципальногоРайона = "2"; - ИначеЕсли СтрСравнить(ТипМуниципальногоРайона, НСтр("ru='вн.тер.'")) = 0 - Или СтрСравнить(ТипМуниципальногоРайона, НСтр("ru='вн.тер. г.'")) = 0 Тогда + ИначеЕсли СтрСравнить(ТипМуниципальногоРайона, НСтр("ru = 'вн.тер.'")) = 0 + Или СтрСравнить(ТипМуниципальногоРайона, НСтр("ru = 'вн.тер. г.'")) = 0 Тогда КодМуниципальногоРайона = "3"; КонецЕсли; @@ -2019,13 +2013,13 @@ КодПоселения = ""; - Если СтрСравнить(ТипПоселения, НСтр("ru='г. п.'")) = 0 Тогда + Если СтрСравнить(ТипПоселения, НСтр("ru = 'г. п.'")) = 0 Тогда КодПоселения = "1"; - ИначеЕсли СтрСравнить(ТипПоселения, НСтр("ru='с.п.'")) = 0 Тогда + ИначеЕсли СтрСравнить(ТипПоселения, НСтр("ru = 'с.п.'")) = 0 Тогда КодПоселения = "2"; - ИначеЕсли СтрСравнить(ТипПоселения, НСтр("ru='меж.тер.'")) = 0 Тогда + ИначеЕсли СтрСравнить(ТипПоселения, НСтр("ru = 'меж.тер.'")) = 0 Тогда КодПоселения = "3"; - ИначеЕсли СтрСравнить(ТипПоселения, НСтр("ru='вн.р-н'")) = 0 Тогда + ИначеЕсли СтрСравнить(ТипПоселения, НСтр("ru = 'вн.р-н'")) = 0 Тогда КодПоселения = "4"; КонецЕсли; @@ -2153,13 +2147,16 @@ Если КонтактнаяИнформация.Свойство("Корпус")И ЗначениеЗаполнено(КонтактнаяИнформация.Корпус) Тогда - ТипКорпуса = ?(КонтактнаяИнформация.Свойство("ТипКорпуса"), КонтактнаяИнформация.ТипКорпуса, "Корпус"); // Тип владения не локализуется ОписаниеКонтактнойИнформации.buildings.Добавить(УправлениеКонтактнойИнформациейКлиентСервер.ЗначениеСтроенияИлиПомещения(ТипКорпуса, КонтактнаяИнформация.Корпус)); + ИначеЕсли КонтактнаяИнформация.Свойство("Корпуса")И ТипЗнч(КонтактнаяИнформация.Корпуса) = Тип("Массив") Тогда Для каждого Корпус Из КонтактнаяИнформация.Корпуса Цикл + + ТипКорпуса = ?(Корпус.Свойство("ТипКорпуса"), Корпус.ТипКорпуса, Корпус.Тип); ОписаниеКонтактнойИнформации.buildings.Добавить( - УправлениеКонтактнойИнформациейКлиентСервер.ЗначениеСтроенияИлиПомещения(Корпус.Тип, Корпус.Номер)); + УправлениеКонтактнойИнформациейКлиентСервер.ЗначениеСтроенияИлиПомещения(ТипКорпуса, Корпус.Номер)); + КонецЦикла; КонецЕсли; @@ -2172,8 +2169,10 @@ ИначеЕсли КонтактнаяИнформация.Свойство("Помещения")И ТипЗнч(КонтактнаяИнформация.Помещения) = Тип("Массив") Тогда Для каждого Помещение Из КонтактнаяИнформация.Помещения Цикл + + ТипПомещения = ?(Помещение.Свойство("ТипПомещения"), Помещение.ТипПомещения, Помещение.Тип); ОписаниеКонтактнойИнформации.apartments.Добавить( - УправлениеКонтактнойИнформациейКлиентСервер.ЗначениеСтроенияИлиПомещения(Помещение.Тип, Помещение.Номер)); + УправлениеКонтактнойИнформациейКлиентСервер.ЗначениеСтроенияИлиПомещения(ТипПомещения, Помещение.Номер)); КонецЦикла; КонецЕсли; @@ -2621,7 +2620,7 @@ РезультатВыбора, Выборка.ПометкаУдаления, Неопределено); КонецЕсли; - ВыделенныйТекст = Новый ФорматированнаяСтрока(Лев(Выборка.Представление, ДлинаСтрокиПоиска), Новый Шрифт(,, Истина), ЦветаСтиля.РезультатУспехЦвет); + ВыделенныйТекст = Новый ФорматированнаяСтрока(Лев(Выборка.Представление, ДлинаСтрокиПоиска), ШрифтыСтиля.ВажнаяНадписьШрифт, ЦветаСтиля.РезультатУспехЦвет); Представление = Новый ФорматированнаяСтрока(ВыделенныйТекст, Сред(Выборка.Представление, ДлинаСтрокиПоиска + 1)); ДанныеВыбора.Добавить(ЭлементВыбора, Представление); diff --git a/SSL/src/CommonModules/РаботаСАдресамиКлиентСервер/Module.bsl b/SSL/src/CommonModules/РаботаСАдресамиКлиентСервер/Module.bsl index 4a27aa6c6..8ca49dc27 100644 --- a/SSL/src/CommonModules/РаботаСАдресамиКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/РаботаСАдресамиКлиентСервер/Module.bsl @@ -361,7 +361,8 @@ Возврат Уровни[ИмяУровня]; КонецФункции -Функция ИменаУровнейАдреса(ТипАдреса, ВключатьУлицу) Экспорт +Функция ИменаУровнейАдреса(ТипАдреса, ВключатьУровеньУлицы, ВключатьУровеньДома = Ложь) Экспорт + Уровни = Новый Массив; Если ТипАдреса = УправлениеКонтактнойИнформациейКлиентСервер.ИностранныйАдрес() Тогда @@ -402,9 +403,14 @@ КонецЕсли; - Если ВключатьУлицу Тогда - Уровни.Добавить("Street"); - КонецЕсли; + Если ВключатьУровеньУлицы Тогда + Уровни.Добавить("Street"); + КонецЕсли; + + Если ВключатьУровеньДома Тогда + Уровни.Добавить("house"); + КонецЕсли; + Возврат Уровни; КонецФункции @@ -419,7 +425,7 @@ Функция ПредставлениеАдреса(Адрес, ВключатьСтрануВПредставление, ТипАдреса = Неопределено) Экспорт Если ТипЗнч(Адрес) <> Тип("Структура") Тогда - ВызватьИсключение НСтр("ru='Для формирования представления адреса передан некорректный тип адреса'"); + ВызватьИсключение НСтр("ru = 'Для формирования представления адреса передан некорректный тип адреса'"); КонецЕсли; Если ТипАдреса = Неопределено Тогда @@ -471,7 +477,7 @@ И ЭтоМуниципальныйАдрес(Адрес.AddressType) И ЗначениеЗаполнено(Адрес.city) И ПустаяСтрока(Адрес.locality) Тогда - СписокЗаполненныхУровней.Добавить(Адрес["city"] + " " + Адрес["cityType"]); + СписокЗаполненныхУровней.Добавить(СокрЛП(Адрес["city"] + " " + Адрес["cityType"])); ИначеЕсли Адрес.Свойство(ИмяУровня) И НЕ ПустаяСтрока(Адрес[ИмяУровня]) Тогда Если НЕ ПредставлениеУровняБезСокращения(ИмяУровня) Тогда @@ -529,7 +535,8 @@ Функция ПредставлениеУровняБезСокращения(ИмяУровня) Экспорт - Если ИмяУровня = "MunDistrict" ИЛИ ИмяУровня = "Settlement" Тогда + Если СтрСравнить(ИмяУровня, "MunDistrict") = 0 + Или СтрСравнить(ИмяУровня, "Settlement") = 0 Тогда Возврат Истина; КонецЕсли; diff --git a/SSL/src/CommonModules/РаботаСБанками/Module.bsl b/SSL/src/CommonModules/РаботаСБанками/Module.bsl index b0a73f779..8002b75d0 100644 --- a/SSL/src/CommonModules/РаботаСБанками/Module.bsl +++ b/SSL/src/CommonModules/РаботаСБанками/Module.bsl @@ -86,7 +86,7 @@ Результат = НСтр("ru = 'Деятельность банка прекращена'"); КонецЕсли; - Возврат СтроковыеФункцииКлиентСервер.ФорматированнаяСтрока(Результат); + Возврат СтроковыеФункции.ФорматированнаяСтрока(Результат); КонецФункции diff --git a/SSL/src/CommonModules/РаботаСКурсамиВалют/Module.bsl b/SSL/src/CommonModules/РаботаСКурсамиВалют/Module.bsl index b163bb734..032e94ea9 100644 --- a/SSL/src/CommonModules/РаботаСКурсамиВалют/Module.bsl +++ b/SSL/src/CommonModules/РаботаСКурсамиВалют/Module.bsl @@ -9,6 +9,8 @@ #Область ПрограммныйИнтерфейс // Добавляет в справочник валют валюты из классификатора. +// При отсутствии обработки ЗагрузкаКурсовВалют валюты добавляются с наименованием "Валюта", +// символьный код соответствует цифровому. // // Параметры: // Коды - Массив - цифровые коды добавляемых валют. @@ -18,10 +20,23 @@ // Функция ДобавитьВалютыПоКоду(Знач Коды) Экспорт + Результат = Новый Массив(); Если Метаданные.Обработки.Найти("ЗагрузкаКурсовВалют") <> Неопределено Тогда Результат = Обработки["ЗагрузкаКурсовВалют"].ДобавитьВалютыПоКоду(Коды); Иначе - Результат = Новый Массив(); + Для Каждого Код Из Коды Цикл + ВалютаСсылка = Справочники.Валюты.НайтиПоКоду(Код); + Если ВалютаСсылка.Пустая() Тогда + ВалютаОбъект = Справочники.Валюты.СоздатьЭлемент(); + ВалютаОбъект.Код = Код; + ВалютаОбъект.Наименование = Код; + ВалютаОбъект.НаименованиеПолное = НСтр("ru = 'Валюта'"); + ВалютаОбъект.СпособУстановкиКурса = Перечисления.СпособыУстановкиКурсаВалюты.РучнойВвод; + ВалютаОбъект.Записать(); + ВалютаСсылка = ВалютаОбъект.Ссылка; + КонецЕсли; + Результат.Добавить(ВалютаСсылка); + КонецЦикла; КонецЕсли; Возврат Результат; @@ -57,15 +72,15 @@ // Параметры: // СуммаЧислом - Число - сумма, которую надо представить прописью. // Валюта - СправочникСсылка.Валюты - валюта, в которой нужно представить сумму. -// ВыводитьСуммуБезКопеек - Булево - признак представления суммы без копеек. +// БезДробнойЧасти - Булево - указать Истина, если требуется получить сумму без дробной части (без копеек). // // Возвращаемое значение: // Строка - сумма прописью. // -Функция СформироватьСуммуПрописью(СуммаЧислом, Валюта, ВыводитьСуммуБезКопеек = Ложь) Экспорт +Функция СформироватьСуммуПрописью(СуммаЧислом, Валюта, БезДробнойЧасти = Ложь) Экспорт Если Метаданные.Обработки.Найти("ЗагрузкаКурсовВалют") <> Неопределено Тогда - Результат = Обработки["ЗагрузкаКурсовВалют"].СформироватьСуммуПрописью(СуммаЧислом, Валюта, ВыводитьСуммуБезКопеек); + Результат = Обработки["ЗагрузкаКурсовВалют"].СформироватьСуммуПрописью(СуммаЧислом, Валюта, БезДробнойЧасти); Иначе Результат = ""; КонецЕсли; @@ -285,10 +300,10 @@ КонецПроцедуры -// Возвращает список разрешений для загрузки курсов валют с сайта 1С. +// Возвращает список разрешений для загрузки курсов валют из внешних ресурсов. // // Возвращаемое значение: -// Массив. +// Массив - . // Функция Разрешения() @@ -305,7 +320,7 @@ //////////////////////////////////////////////////////////////////////////////// // Экспортные служебные процедуры и функции. -// Возвращает массив валют, курсы которых загружаются с сайта 1С. +// Возвращает массив валют, курсы которых загружаются из внешних ресурсов. // Функция ЗагружаемыеВалюты() Экспорт diff --git a/SSL/src/CommonModules/РаботаСКурсамиВалютСлужебный/Module.bsl b/SSL/src/CommonModules/РаботаСКурсамиВалютСлужебный/Module.bsl index 20a43b745..634086de7 100644 --- a/SSL/src/CommonModules/РаботаСКурсамиВалютСлужебный/Module.bsl +++ b/SSL/src/CommonModules/РаботаСКурсамиВалютСлужебный/Module.bsl @@ -599,7 +599,7 @@ |ГДЕ | Валюты.СпособУстановкиКурса = ЗНАЧЕНИЕ(Перечисление.СпособыУстановкиКурсаВалюты.ЗагрузкаИзИнтернета)"; - ВыборкаВалюты = ЗапросВалюты.Выполнить().Выбрать(); + ВыборкаВалюты = ЗапросВалюты.Выполнить().Выбрать(); // АПК:1328 - блокировка не требуется. Пока ВыборкаВалюты.Следующий() Цикл diff --git a/SSL/src/CommonModules/РаботаСПочтовымиСообщениями/Module.bsl b/SSL/src/CommonModules/РаботаСПочтовымиСообщениями/Module.bsl index 37b30ea63..1e201f227 100644 --- a/SSL/src/CommonModules/РаботаСПочтовымиСообщениями/Module.bsl +++ b/SSL/src/CommonModules/РаботаСПочтовымиСообщениями/Module.bsl @@ -12,9 +12,54 @@ // Функция может вызвать исключение, которое требуется обработать. // // Параметры: +// УчетнаяЗапись - СправочникСсылка.УчетныеЗаписиЭлектроннойПочты - почтовый ящик, с которого необходимо +// выполнить отправку. +// Письмо - ИнтернетПочтовоеСообщение - отправляемое письмо. +// +// Возвращаемое значение: +// Структура - результат отправки письма: +// * ОшибочныеПолучатели - Соответствие - адреса получателей с ошибками: +// ** Ключ - Строка - адрес получателя; +// ** Значение - Строка - текст ошибки. +// * ИдентификаторПисьмаSMTP - Строка - уникальный идентификатор письма, присвоенный при отправке по протоколу SMTP. +// * ИдентификаторПисьмаIMAP - Строка - уникальный идентификатор письма, присвоенный при отправке по протоколу IMAP. +// +Функция ОтправитьПисьмо(УчетнаяЗапись, Письмо) Экспорт + + Возврат РаботаСПочтовымиСообщениямиСлужебный.ОтправитьПисьмо(УчетнаяЗапись, Письмо); + +КонецФункции + +// Выполняет отправку почтовых сообщений. +// Функция может вызвать исключение, которое требуется обработать. +// +// Параметры: +// УчетнаяЗапись - СправочникСсылка.УчетныеЗаписиЭлектроннойПочты - почтовый ящик, с которого необходимо +// выполнить отправку. +// Письма - Массив - коллекция почтовых сообщений. Элемент коллекции - ИнтернетПочтовоеСообщение. +// +// Возвращаемое значение: +// Соответствие - результаты отправки писем: +// * Ключ - ИнтернетПочтовоеСообщение - отправляемое письмо; +// * Значение - Структура - результат отправки письма: +// ** ОшибочныеПолучатели - Соответствие - адреса получателей с ошибками: +// *** Ключ - Строка - адрес получателя; +// *** Значение - Строка - текст ошибки. +// ** ИдентификаторПисьмаSMTP - Строка - уникальный идентификатор письма, присвоенный при отправке по протоколу SMTP. +// ** ИдентификаторПисьмаIMAP - Строка - уникальный идентификатор письма, присвоенный при отправке по протоколу IMAP. +// +Функция ОтправитьПисьма(УчетнаяЗапись, Письма) Экспорт + + Возврат РаботаСПочтовымиСообщениямиСлужебный.ОтправитьПисьма(УчетнаяЗапись, Письма); + +КонецФункции + +// Формирует письмо по переданным параметрам. +// +// Параметры: // УчетнаяЗапись - СправочникСсылка.УчетныеЗаписиЭлектроннойПочты - ссылка на // учетную запись электронной почты. -// ПараметрыОтправки - Структура - содержит всю необходимую информацию о письме: +// ПараметрыПисьма - Структура - содержит всю необходимую информацию о письме: // // * Кому - Массив, Строка - интернет адреса получателей письма. // - Массив - коллекция структур адресов: @@ -53,90 +98,52 @@ // умолчанию). // РазмеченныйТекст/ТипыТекстовЭлектронныхПисем.РазмеченныйТекст - текст почтового сообщения в формате // Rich Text. -// * Соединение - ИнтернетПочта - существующее соединение с почтовым сервером. Если не указано, то создается новое. -// * ПротоколПочты - Строка - если указано значение "IMAP", то письмо будет передано по протоколу IMAP, если по -// указано значение "Все", то по протоколу SMTP и по протоколу IMAP, если ничего не указано -// то по протоколу SMTP. Параметр имеет смысл, только наличии действующего соединения, -// указанного в параметр Соединение. В противном случае протокол будет определен -// автоматически при установке соединения. -// * ИдентификаторСообщения - Строка - (возвращаемый параметр) идентификатор отправленного почтового сообщения на SMTP-сервере; -// * ИдентификаторСообщенияОтправкаIMAP - Строка - (возвращаемый параметр) идентификатор отправленного почтового -// сообщения на IMAP сервере; -// * ОшибочныеПолучатели - Соответствие - (возвращаемый параметр) список адресов, по которым отправка не выполнена. -// См. возвращаемое значение метода ИнтернетПочта.Послать() в синтакс-помощнике. -// -// УдалитьСоединение - ИнтернетПочта - параметр устарел, см. параметр ПараметрыОтправки.Соединение. -// УдалитьПротоколПочты - Строка - параметр устарел, см. параметр ПараметрыОтправки.ПротоколПочты. // // Возвращаемое значение: -// Строка - идентификатор отправленного сообщения. +// ИнтернетПочтовоеСообщение - подготовленное письмо. // -Функция ОтправитьПочтовоеСообщение(Знач УчетнаяЗапись, Знач ПараметрыОтправки, - Знач УдалитьСоединение = Неопределено, УдалитьПротоколПочты = "") Экспорт - - Если УдалитьСоединение <> Неопределено Тогда - ПараметрыОтправки.Вставить("Соединение", УдалитьСоединение); - КонецЕсли; - - Если Не ПустаяСтрока(УдалитьПротоколПочты) Тогда - ПараметрыОтправки.Вставить("ПротоколПочты", УдалитьПротоколПочты); - КонецЕсли; +Функция ПодготовитьПисьмо(УчетнаяЗапись, ПараметрыПисьма) Экспорт Если ТипЗнч(УчетнаяЗапись) <> Тип("СправочникСсылка.УчетныеЗаписиЭлектроннойПочты") Или НЕ ЗначениеЗаполнено(УчетнаяЗапись) Тогда ВызватьИсключение НСтр("ru = 'Учетная запись не заполнена или заполнена неправильно.'"); КонецЕсли; - Если ПараметрыОтправки = Неопределено Тогда + Если ПараметрыПисьма = Неопределено Тогда ВызватьИсключение НСтр("ru = 'Не заданы параметры отправки.'"); КонецЕсли; - ТипЗнчКому = ?(ПараметрыОтправки.Свойство("Кому"), ТипЗнч(ПараметрыОтправки.Кому), Неопределено); - ТипЗнчКопии = ?(ПараметрыОтправки.Свойство("Копии"), ТипЗнч(ПараметрыОтправки.Копии), Неопределено); - СкрытыеКопии = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыОтправки, "СкрытыеКопии"); - Если СкрытыеКопии = Неопределено Тогда - СкрытыеКопии = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыОтправки, "СлепыеКопии"); - КонецЕсли; + ТипЗнчКому = ?(ПараметрыПисьма.Свойство("Кому"), ТипЗнч(ПараметрыПисьма.Кому), Неопределено); + ТипЗнчКопии = ?(ПараметрыПисьма.Свойство("Копии"), ТипЗнч(ПараметрыПисьма.Копии), Неопределено); + СкрытыеКопии = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыПисьма, "СкрытыеКопии"); Если ТипЗнчКому = Неопределено И ТипЗнчКопии = Неопределено И СкрытыеКопии = Неопределено Тогда ВызватьИсключение НСтр("ru = 'Не указано ни одного получателя.'"); КонецЕсли; Если ТипЗнчКому = Тип("Строка") Тогда - ПараметрыОтправки.Кому = ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(ПараметрыОтправки.Кому); + ПараметрыПисьма.Кому = ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(ПараметрыПисьма.Кому); ИначеЕсли ТипЗнчКому <> Тип("Массив") Тогда - ПараметрыОтправки.Вставить("Кому", Новый Массив); + ПараметрыПисьма.Вставить("Кому", Новый Массив); КонецЕсли; Если ТипЗнчКопии = Тип("Строка") Тогда - ПараметрыОтправки.Копии = ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(ПараметрыОтправки.Копии); + ПараметрыПисьма.Копии = ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(ПараметрыПисьма.Копии); ИначеЕсли ТипЗнчКопии <> Тип("Массив") Тогда - ПараметрыОтправки.Вставить("Копии", Новый Массив); + ПараметрыПисьма.Вставить("Копии", Новый Массив); КонецЕсли; Если ТипЗнч(СкрытыеКопии) = Тип("Строка") Тогда - ПараметрыОтправки.СкрытыеКопии = ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(СкрытыеКопии); + ПараметрыПисьма.СкрытыеКопии = ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(СкрытыеКопии); ИначеЕсли ТипЗнч(СкрытыеКопии) <> Тип("Массив") Тогда - ПараметрыОтправки.Вставить("СкрытыеКопии", Новый Массив); + ПараметрыПисьма.Вставить("СкрытыеКопии", Новый Массив); КонецЕсли; - Если ПараметрыОтправки.Свойство("АдресОтвета") И ТипЗнч(ПараметрыОтправки.АдресОтвета) = Тип("Строка") Тогда - ПараметрыОтправки.АдресОтвета = ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(ПараметрыОтправки.АдресОтвета); + Если ПараметрыПисьма.Свойство("АдресОтвета") И ТипЗнч(ПараметрыПисьма.АдресОтвета) = Тип("Строка") Тогда + ПараметрыПисьма.АдресОтвета = ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(ПараметрыПисьма.АдресОтвета); КонецЕсли; - РаботаСПочтовымиСообщениямиСлужебный.ОтправитьСообщение(УчетнаяЗапись, ПараметрыОтправки); - РаботаСПочтовымиСообщениямиПереопределяемый.ПослеОтправкиПисьма(ПараметрыОтправки); - - Если ПараметрыОтправки.ОшибочныеПолучатели.Количество() > 0 Тогда - ТекстОшибки = НСтр("ru = 'Следующие почтовые адреса не были приняты почтовым сервером:'"); - Для Каждого ОшибочныйПолучатель Из ПараметрыОтправки.ОшибочныеПолучатели Цикл - ТекстОшибки = ТекстОшибки + Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("%1: %2", - ОшибочныйПолучатель.Ключ, ОшибочныйПолучатель.Значение); - КонецЦикла; - ВызватьИсключение ТекстОшибки; - КонецЕсли; - - Возврат ПараметрыОтправки.ИдентификаторСообщения; + Возврат РаботаСПочтовымиСообщениямиСлужебный.ПодготовитьПисьмо(УчетнаяЗапись, ПараметрыПисьма); КонецФункции @@ -394,4 +401,137 @@ КонецПроцедуры +#Область УстаревшиеПроцедурыИФункции + +// Выполняет отправку почтовых сообщений. +// Функция может вызвать исключение, которое требуется обработать. +// +// Параметры: +// УчетнаяЗапись - СправочникСсылка.УчетныеЗаписиЭлектроннойПочты - ссылка на +// учетную запись электронной почты. +// ПараметрыОтправки - Структура - содержит всю необходимую информацию о письме: +// +// * Кому - Массив, Строка - интернет адреса получателей письма. +// - Массив - коллекция структур адресов: +// * Адрес - Строка - почтовый адрес (должно быть обязательно заполнено). +// * Представление - Строка - имя адресата. +// - Строка - интернет-адреса получателей письма, разделитель - ";". +// +// * ПолучателиСообщения - Массив - массив структур, описывающий получателей: +// ** Адрес - Строка - почтовый адрес получателя сообщения. +// ** Представление - Строка - представление адресата. +// +// * Копии - Массив, Строка - адреса получателей копий письма. См. описание поля Кому. +// +// * СкрытыеКопии - Массив, Строка - адреса получателей скрытых копий письма. См. описание поля Кому. +// +// * Тема - Строка - (обязательный) тема почтового сообщения. +// * Тело - Строка - (обязательный) текст почтового сообщения (простой текст в кодировке win-1251). +// * Важность - ВажностьИнтернетПочтовогоСообщения. +// +// * Вложения - Массив - файлы, которые необходимо приложить к письму (описания в виде структур): +// ** Представление - Строка - имя файла вложения; +// ** АдресВоВременномХранилище - Строка - адрес двоичных данных вложения во временном хранилище. +// ** Кодировка - Строка - кодировка вложения (используется, если отличается от кодировки письма). +// ** Идентификатор - Строка - (необязательный) используется для отметки картинок, отображаемых в теле письма. +// +// * АдресОтвета - Соответствие - см. описание поля Кому. +// * ИдентификаторыОснований - Строка - идентификаторы оснований данного письма. +// * ОбрабатыватьТексты - Булево - необходимость обрабатывать тексты письма при отправке. +// * УведомитьОДоставке - Булево - необходимость запроса уведомления о доставке. +// * УведомитьОПрочтении - Булево - необходимость запроса уведомления о прочтении. +// * ТипТекста - Строка, Перечисление.ТипыТекстовЭлектронныхПисем, ТипТекстаПочтовогоСообщения - определяет тип +// переданного теста допустимые значения: +// HTML/ТипыТекстовЭлектронныхПисем.HTML - текст почтового сообщения в формате HTML. +// ПростойТекст/ТипыТекстовЭлектронныхПисем.ПростойТекст - простой текст почтового сообщения. +// Отображается "как есть" (значение по +// умолчанию). +// РазмеченныйТекст/ТипыТекстовЭлектронныхПисем.РазмеченныйТекст - текст почтового сообщения в формате +// Rich Text. +// * Соединение - ИнтернетПочта - существующее соединение с почтовым сервером. Если не указано, то создается новое. +// * ПротоколПочты - Строка - если указано значение "IMAP", то письмо будет передано по протоколу IMAP, если по +// указано значение "Все", то по протоколу SMTP и по протоколу IMAP, если ничего не указано +// то по протоколу SMTP. Параметр имеет смысл, только наличии действующего соединения, +// указанного в параметр Соединение. В противном случае протокол будет определен +// автоматически при установке соединения. +// * ИдентификаторСообщения - Строка - (возвращаемый параметр) идентификатор отправленного почтового сообщения на SMTP-сервере; +// * ИдентификаторСообщенияОтправкаIMAP - Строка - (возвращаемый параметр) идентификатор отправленного почтового +// сообщения на IMAP сервере; +// * ОшибочныеПолучатели - Соответствие - (возвращаемый параметр) список адресов, по которым отправка не выполнена. +// См. возвращаемое значение метода ИнтернетПочта.Послать() в синтакс-помощнике. +// +// УдалитьСоединение - ИнтернетПочта - параметр устарел, см. параметр ПараметрыОтправки.Соединение. +// УдалитьПротоколПочты - Строка - параметр устарел, см. параметр ПараметрыОтправки.ПротоколПочты. +// +// Возвращаемое значение: +// Строка - идентификатор отправленного сообщения. +// +Функция ОтправитьПочтовоеСообщение(Знач УчетнаяЗапись, Знач ПараметрыОтправки, + Знач УдалитьСоединение = Неопределено, УдалитьПротоколПочты = "") Экспорт + + Если УдалитьСоединение <> Неопределено Тогда + ПараметрыОтправки.Вставить("Соединение", УдалитьСоединение); + КонецЕсли; + + Если Не ПустаяСтрока(УдалитьПротоколПочты) Тогда + ПараметрыОтправки.Вставить("ПротоколПочты", УдалитьПротоколПочты); + КонецЕсли; + + Если ТипЗнч(УчетнаяЗапись) <> Тип("СправочникСсылка.УчетныеЗаписиЭлектроннойПочты") + Или НЕ ЗначениеЗаполнено(УчетнаяЗапись) Тогда + ВызватьИсключение НСтр("ru = 'Учетная запись не заполнена или заполнена неправильно.'"); + КонецЕсли; + + Если ПараметрыОтправки = Неопределено Тогда + ВызватьИсключение НСтр("ru = 'Не заданы параметры отправки.'"); + КонецЕсли; + + ТипЗнчКому = ?(ПараметрыОтправки.Свойство("Кому"), ТипЗнч(ПараметрыОтправки.Кому), Неопределено); + ТипЗнчКопии = ?(ПараметрыОтправки.Свойство("Копии"), ТипЗнч(ПараметрыОтправки.Копии), Неопределено); + СкрытыеКопии = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыОтправки, "СкрытыеКопии"); + + Если ТипЗнчКому = Неопределено И ТипЗнчКопии = Неопределено И СкрытыеКопии = Неопределено Тогда + ВызватьИсключение НСтр("ru = 'Не указано ни одного получателя.'"); + КонецЕсли; + + Если ТипЗнчКому = Тип("Строка") Тогда + ПараметрыОтправки.Кому = ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(ПараметрыОтправки.Кому); + ИначеЕсли ТипЗнчКому <> Тип("Массив") Тогда + ПараметрыОтправки.Вставить("Кому", Новый Массив); + КонецЕсли; + + Если ТипЗнчКопии = Тип("Строка") Тогда + ПараметрыОтправки.Копии = ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(ПараметрыОтправки.Копии); + ИначеЕсли ТипЗнчКопии <> Тип("Массив") Тогда + ПараметрыОтправки.Вставить("Копии", Новый Массив); + КонецЕсли; + + Если ТипЗнч(СкрытыеКопии) = Тип("Строка") Тогда + ПараметрыОтправки.СкрытыеКопии = ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(СкрытыеКопии); + ИначеЕсли ТипЗнч(СкрытыеКопии) <> Тип("Массив") Тогда + ПараметрыОтправки.Вставить("СкрытыеКопии", Новый Массив); + КонецЕсли; + + Если ПараметрыОтправки.Свойство("АдресОтвета") И ТипЗнч(ПараметрыОтправки.АдресОтвета) = Тип("Строка") Тогда + ПараметрыОтправки.АдресОтвета = ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(ПараметрыОтправки.АдресОтвета); + КонецЕсли; + + РаботаСПочтовымиСообщениямиСлужебный.ОтправитьСообщение(УчетнаяЗапись, ПараметрыОтправки); + РаботаСПочтовымиСообщениямиПереопределяемый.ПослеОтправкиПисьма(ПараметрыОтправки); + + Если ПараметрыОтправки.ОшибочныеПолучатели.Количество() > 0 Тогда + ТекстОшибки = НСтр("ru = 'Следующие почтовые адреса не были приняты почтовым сервером:'"); + Для Каждого ОшибочныйПолучатель Из ПараметрыОтправки.ОшибочныеПолучатели Цикл + ТекстОшибки = ТекстОшибки + Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("%1: %2", + ОшибочныйПолучатель.Ключ, ОшибочныйПолучатель.Значение); + КонецЦикла; + ВызватьИсключение ТекстОшибки; + КонецЕсли; + + Возврат ПараметрыОтправки.ИдентификаторСообщения; + +КонецФункции + +#КонецОбласти + #КонецОбласти diff --git a/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиКлиент/Module.bsl b/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиКлиент/Module.bsl index 11c1a3835..1064691d1 100644 --- a/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиКлиент/Module.bsl +++ b/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиКлиент/Module.bsl @@ -226,7 +226,7 @@ Процедура ПерейтиКДокументацииПоВводуУчетнойЗаписиЭлектроннойПочты() Экспорт - ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку("https://its.1c.ru/db/translate?db=bspdoc&path=src/5.48 работа с почтовыми сообщениями.htm&anchor=issogl1_ввод_учетной_записи_электронной_почты"); + ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку("https://its.1c.ru/bmk/bsp_email_account"); КонецПроцедуры diff --git a/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиСлужебный/Module.bsl b/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиСлужебный/Module.bsl index d1273007c..f220a5852 100644 --- a/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиСлужебный/Module.bsl +++ b/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиСлужебный/Module.bsl @@ -103,31 +103,43 @@ // Функция УчетнаяЗаписьЭтойБазыПоДаннымУчетнойЗаписиКорреспондента(УчетнаяЗаписьКорреспондента) Экспорт - УчетнаяЗаписьЭтойБазы = Неопределено; - // Для предопределенной записи - перезаписываем предопределенный элемент текущей ИБ. - Если УчетнаяЗаписьКорреспондента.Предопределенный Тогда - УчетнаяЗаписьЭтойБазы = Справочники.УчетныеЗаписиЭлектроннойПочты[УчетнаяЗаписьКорреспондента.ИмяПредопределенныхДанных].ПолучитьОбъект(); - Иначе - // Для обычной записи ищем существующую запись с тем же адресом. - Запрос = Новый Запрос; - Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 - | Ссылка - |ИЗ Справочник.УчетныеЗаписиЭлектроннойПочты - |ГДЕ АдресЭлектроннойПочты = &АдресЭлектроннойПочты"; - Запрос.УстановитьПараметр("АдресЭлектроннойПочты", УчетнаяЗаписьКорреспондента.АдресЭлектроннойПочты); - Выборка = Запрос.Выполнить().Выбрать(); - Если Выборка.Следующий() Тогда - УчетнаяЗаписьЭтойБазы = Выборка.Ссылка.ПолучитьОбъект(); + НачатьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Справочник.УчетныеЗаписиЭлектроннойПочты"); + Блокировка.Заблокировать(); + + УчетнаяЗаписьЭтойБазы = Неопределено; + // Для предопределенной записи - перезаписываем предопределенный элемент текущей ИБ. + Если УчетнаяЗаписьКорреспондента.Предопределенный Тогда + УчетнаяЗаписьЭтойБазы = Справочники.УчетныеЗаписиЭлектроннойПочты[УчетнаяЗаписьКорреспондента.ИмяПредопределенныхДанных].ПолучитьОбъект(); + Иначе + // Для обычной записи ищем существующую запись с тем же адресом. + Запрос = Новый Запрос; + Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 + | Ссылка + |ИЗ Справочник.УчетныеЗаписиЭлектроннойПочты + |ГДЕ АдресЭлектроннойПочты = &АдресЭлектроннойПочты"; + Запрос.УстановитьПараметр("АдресЭлектроннойПочты", УчетнаяЗаписьКорреспондента.АдресЭлектроннойПочты); + Выборка = Запрос.Выполнить().Выбрать(); + Если Выборка.Следующий() Тогда + УчетнаяЗаписьЭтойБазы = Выборка.Ссылка.ПолучитьОбъект(); + КонецЕсли; КонецЕсли; - КонецЕсли; + + Если УчетнаяЗаписьЭтойБазы <> Неопределено Тогда + ЗаполнитьЗначенияСвойств(УчетнаяЗаписьЭтойБазы, УчетнаяЗаписьКорреспондента,,"ИмяПредопределенныхДанных, Родитель, Владелец, Ссылка"); + Иначе + УчетнаяЗаписьЭтойБазы = УчетнаяЗаписьКорреспондента; + КонецЕсли; + + УчетнаяЗаписьЭтойБазы.Записать(); - Если УчетнаяЗаписьЭтойБазы <> Неопределено Тогда - ЗаполнитьЗначенияСвойств(УчетнаяЗаписьЭтойБазы, УчетнаяЗаписьКорреспондента,,"ИмяПредопределенныхДанных, Родитель, Владелец, Ссылка"); - Иначе - УчетнаяЗаписьЭтойБазы = УчетнаяЗаписьКорреспондента; - КонецЕсли; - - УчетнаяЗаписьЭтойБазы.Записать(); + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; Возврат УчетнаяЗаписьЭтойБазы; @@ -141,6 +153,17 @@ КонецФункции +// Определяет, предусмотрено ли в программе получение писем. +// +// Возвращаемое значение: +// Булево - Истина, если предусмотрено. +// +Функция ДоступноПолучениеПисем() Экспорт + + Возврат НастройкиПодсистемы().ДоступноПолучениеПисем; + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Обработчики событий подсистем конфигурации. @@ -190,11 +213,6 @@ // См. ОбновлениеИнформационнойБазыБСП.ПриДобавленииОбработчиковОбновления. Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт - Обработчик = Обработчики.Добавить(); - Обработчик.НачальноеЗаполнение = Истина; - Обработчик.Процедура = "РаботаСПочтовымиСообщениямиСлужебный.ЗаполнитьСистемнуюУчетнуюЗапись"; - Обработчик.РежимВыполнения = "Оперативно"; - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Взаимодействия") Тогда Обработчик = Обработчики.Добавить(); Обработчик.Версия = "2.4.1.1"; @@ -270,6 +288,13 @@ КонецПроцедуры +// См. ОбновлениеИнформационнойБазыПереопределяемый.ПриОпределенииНастроек +Процедура ПриОпределенииОбъектовСНачальнымЗаполнением(Объекты) Экспорт + + Объекты.Добавить(Метаданные.Справочники.УчетныеЗаписиЭлектроннойПочты); + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -303,281 +328,54 @@ КонецФункции Процедура ОтправитьСообщение(Знач УчетнаяЗапись, Знач ПараметрыОтправки) Экспорт - Перем Кому, Тема, Тело, Вложения, АдресОтвета, ТипТекста, Копии, СкрытыеКопии, ПротоколПочты, Соединение; + Перем ПротоколПочты, Соединение; + + Письмо = ПодготовитьПисьмо(УчетнаяЗапись, ПараметрыОтправки); + РеквизитыОтправителя = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(УчетнаяЗапись, "ИмяПользователя,АдресЭлектроннойПочты,ОтправлятьСкрытыеКопииПисемНаЭтотАдрес"); ПараметрыОтправки.Свойство("Соединение", Соединение); ПараметрыОтправки.Свойство("ПротоколПочты", ПротоколПочты); + ПараметрыОтправки.Вставить("ИдентификаторСообщения", ""); + ПараметрыОтправки.Вставить("ИдентификаторСообщенияОтправкаIMAP", ""); ПараметрыОтправки.Вставить("ОшибочныеПолучатели", Новый Соответствие); - Если Не ПараметрыОтправки.Свойство("Тема", Тема) Тогда - Тема = ""; - КонецЕсли; - - Если Не ПараметрыОтправки.Свойство("Тело", Тело) Тогда - Тело = ""; - КонецЕсли; - - Кому = ПараметрыОтправки.Кому; - - Если ТипЗнч(Кому) = Тип("Строка") Тогда - Кому = ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(Кому); - КонецЕсли; - - ПараметрыОтправки.Свойство("Вложения", Вложения); - - Письмо = Новый ИнтернетПочтовоеСообщение; - Письмо.Тема = Тема; - - // Формируем адрес получателя. - Для Каждого ПочтовыйАдресПолучателя Из Кому Цикл - Получатель = Письмо.Получатели.Добавить(ПочтовыйАдресПолучателя.Адрес); - Получатель.ОтображаемоеИмя = ПочтовыйАдресПолучателя.Представление; - КонецЦикла; - - // Формируем адрес получателя поля Копии. - Если ПараметрыОтправки.Свойство("Копии", Копии) Тогда - Для Каждого ПочтовыйАдресПолучателяКопии Из Копии Цикл - Получатель = Письмо.Копии.Добавить(ПочтовыйАдресПолучателяКопии.Адрес); - Получатель.ОтображаемоеИмя = ПочтовыйАдресПолучателяКопии.Представление; - КонецЦикла; - КонецЕсли; - - // Формируем адрес получателя поля СкрытыеКопии. - Если ПараметрыОтправки.Свойство("СкрытыеКопии", СкрытыеКопии) Тогда - Для Каждого СведенияОПолучателе Из СкрытыеКопии Цикл - Получатель = Письмо.СлепыеКопии.Добавить(СведенияОПолучателе.Адрес); - Получатель.ОтображаемоеИмя = СведенияОПолучателе.Представление; - КонецЦикла; - КонецЕсли; - - // Формируем адрес ответа, если необходимо. - Если ПараметрыОтправки.Свойство("АдресОтвета", АдресОтвета) Тогда - Для Каждого ПочтовыйАдресОтвета Из АдресОтвета Цикл - ПочтовыйАдресОбратный = Письмо.ОбратныйАдрес.Добавить(ПочтовыйАдресОтвета.Адрес); - ПочтовыйАдресОбратный.ОтображаемоеИмя = ПочтовыйАдресОтвета.Представление; - КонецЦикла; - КонецЕсли; - - // Получение реквизитов отправителя. - РеквизитыОтправителя = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(УчетнаяЗапись, "ИмяПользователя,АдресЭлектроннойПочты,ОтправлятьСкрытыеКопииПисемНаЭтотАдрес,ИспользоватьДляПолучения"); - - // Добавляем к письму имя отправителя. - Письмо.ИмяОтправителя = РеквизитыОтправителя.ИмяПользователя; - Письмо.Отправитель.ОтображаемоеИмя = РеквизитыОтправителя.ИмяПользователя; - Письмо.Отправитель.Адрес = РеквизитыОтправителя.АдресЭлектроннойПочты; - - // Добавляем вложения к письму. - Если Вложения <> Неопределено Тогда - Для Каждого Вложение Из Вложения Цикл - Если ТипЗнч(Вложение) = Тип("Структура") Тогда - ДанныеФайла = Неопределено; - Если ЭтоАдресВременногоХранилища(Вложение.АдресВоВременномХранилище) Тогда - ДанныеФайла = ПолучитьИзВременногоХранилища(Вложение.АдресВоВременномХранилище); - Иначе - ДанныеФайла = Вложение.АдресВоВременномХранилище; - КонецЕсли; - НовоеВложение = Письмо.Вложения.Добавить(ДанныеФайла, Вложение.Представление); - Если Вложение.Свойство("Кодировка") И Не ПустаяСтрока(Вложение.Кодировка) Тогда - НовоеВложение.Кодировка = Вложение.Кодировка; - КонецЕсли; - Если Вложение.Свойство("Идентификатор") Тогда - НовоеВложение.Идентификатор = Вложение.Идентификатор; - КонецЕсли; - Иначе // Поддержка обратной совместимости с 2.2.1. - Если ТипЗнч(Вложение.Значение) = Тип("Структура") Тогда - НовоеВложение = Письмо.Вложения.Добавить(Вложение.Значение.ДвоичныеДанные, Вложение.Ключ); - Если Вложение.Значение.Свойство("Идентификатор") Тогда - НовоеВложение.Идентификатор = Вложение.Значение.Идентификатор; - КонецЕсли; - Если Вложение.Значение.Свойство("Кодировка") Тогда - НовоеВложение.Кодировка = Вложение.Значение.Кодировка; - КонецЕсли; - Если Вложение.Значение.Свойство("ТипСодержимого") Тогда - НовоеВложение.ТипСодержимого = Вложение.Значение.ТипСодержимого; - КонецЕсли; - Если Вложение.Значение.Свойство("Имя") Тогда - НовоеВложение.Имя = Вложение.Значение.Имя; - КонецЕсли; - Иначе - ИнтернетПочтовоеВложение = Письмо.Вложения.Добавить(Вложение.Значение, Вложение.Ключ); - Если ТипЗнч(Вложение.Значение) = Тип("ИнтернетПочтовоеСообщение") Тогда - ИнтернетПочтовоеВложение.ТипСодержимого = "message/rfc822"; - КонецЕсли; - КонецЕсли; - КонецЕсли; - КонецЦикла; - КонецЕсли; - - Для Каждого Вложение Из Письмо.Вложения Цикл - Если Не ЗначениеЗаполнено(Вложение.ТипСодержимого) Тогда - ТипСодержимого = ОпределитьТипСодержимогоПоИмениФайла(Вложение.Имя); - Если ЗначениеЗаполнено(ТипСодержимого) Тогда - Вложение.ТипСодержимого = ТипСодержимого; - КонецЕсли; - КонецЕсли; - КонецЦикла; - - Если ПараметрыОтправки.Свойство("ИдентификаторыОснований") Тогда - Письмо.УстановитьПолеЗаголовка("References", ПараметрыОтправки.ИдентификаторыОснований); - КонецЕсли; - - ТипТекста = Неопределено; - Если ТипЗнч(Тело) = Тип("ФорматированныйДокумент") Тогда - СодержимоеПисьма = ПолучитьHTMLФорматированногоДокументаДляПисьма(Тело); - Тело = СодержимоеПисьма.ТекстHTML; - Картинки = СодержимоеПисьма.Картинки; - ТипТекста = ТипТекстаПочтовогоСообщения.HTML; - - Для Каждого Картинка Из Картинки Цикл - ИмяКартинки = Картинка.Ключ; - ДанныеКартинки = Картинка.Значение; - Вложение = Письмо.Вложения.Добавить(ДанныеКартинки.ПолучитьДвоичныеДанные(), ИмяКартинки); - Вложение.Идентификатор = ИмяКартинки; - КонецЦикла; - КонецЕсли; - Текст = Письмо.Тексты.Добавить(Тело); - Если ЗначениеЗаполнено(ТипТекста) Тогда - Текст.ТипТекста = ТипТекста; - КонецЕсли; - - Если ТипТекста = Неопределено Тогда - Если ПараметрыОтправки.Свойство("ТипТекста", ТипТекста) Тогда - Если ТипЗнч(ТипТекста) = Тип("Строка") Тогда - Если ТипТекста = "HTML" Тогда - Текст.ТипТекста = ТипТекстаПочтовогоСообщения.HTML; - ИначеЕсли ТипТекста = "RichText" Тогда - Текст.ТипТекста = ТипТекстаПочтовогоСообщения.РазмеченныйТекст; - Иначе - Текст.ТипТекста = ТипТекстаПочтовогоСообщения.ПростойТекст; - КонецЕсли; - ИначеЕсли ТипЗнч(ТипТекста) = Тип("ПеречислениеСсылка.ТипыТекстовЭлектронныхПисем") Тогда - Если ТипТекста = Перечисления.ТипыТекстовЭлектронныхПисем.HTML - ИЛИ ТипТекста = Перечисления.ТипыТекстовЭлектронныхПисем.HTMLСКартинками Тогда - Текст.ТипТекста = ТипТекстаПочтовогоСообщения.HTML; - ИначеЕсли ТипТекста = Перечисления.ТипыТекстовЭлектронныхПисем.РазмеченныйТекст Тогда - Текст.ТипТекста = ТипТекстаПочтовогоСообщения.РазмеченныйТекст; - Иначе - Текст.ТипТекста = ТипТекстаПочтовогоСообщения.ПростойТекст; - КонецЕсли; - Иначе - Текст.ТипТекста = ТипТекста; - КонецЕсли; - Иначе - Текст.ТипТекста = ТипТекстаПочтовогоСообщения.ПростойТекст; - КонецЕсли; - КонецЕсли; - - Важность = Неопределено; - Если ПараметрыОтправки.Свойство("Важность", Важность) Тогда - Письмо.Важность = Важность; - КонецЕсли; - - Кодировка = Неопределено; - Если ПараметрыОтправки.Свойство("Кодировка", Кодировка) Тогда - Письмо.Кодировка = Кодировка; - КонецЕсли; - - Если ПараметрыОтправки.Свойство("ОбрабатыватьТексты") И НЕ ПараметрыОтправки.ОбрабатыватьТексты Тогда - ОбрабатыватьТекстСообщения = ОбработкаТекстаИнтернетПочтовогоСообщения.НеОбрабатывать; - Иначе - ОбрабатыватьТекстСообщения = ОбработкаТекстаИнтернетПочтовогоСообщения.Обрабатывать; - КонецЕсли; - - Если ПараметрыОтправки.Свойство("УведомитьОДоставке") Тогда - Письмо.УведомитьОДоставке = ПараметрыОтправки.УведомитьОДоставке; - КонецЕсли; - - Если ПараметрыОтправки.Свойство("УведомитьОПрочтении") Тогда - Письмо.УведомитьОПрочтении = ПараметрыОтправки.УведомитьОПрочтении; - Письмо.АдресаУведомленияОПрочтении.Добавить(РеквизитыОтправителя.АдресЭлектроннойПочты); - КонецЕсли; - СоздаватьСоединение = ТипЗнч(Соединение) <> Тип("ИнтернетПочта"); + Если СоздаватьСоединение Тогда + РезультатОтправки = ОтправитьПисьмо(УчетнаяЗапись, Письмо); + ПараметрыОтправки.ОшибочныеПолучатели = РезультатОтправки.ОшибочныеПолучатели; + ПараметрыОтправки.ИдентификаторСообщения = РезультатОтправки.ИдентификаторПисьмаSMTP; + ПараметрыОтправки.ИдентификаторСообщенияОтправкаIMAP = РезультатОтправки.ИдентификаторПисьмаIMAP; + Возврат; + КонецЕсли; + + Если РеквизитыОтправителя.ОтправлятьСкрытыеКопииПисемНаЭтотАдрес Тогда + Получатель = Письмо.СлепыеКопии.Добавить(РеквизитыОтправителя.АдресЭлектроннойПочты); + Получатель.ОтображаемоеИмя = РеквизитыОтправителя.ИмяПользователя; + КонецЕсли; + УстановитьОтключениеБезопасногоРежима(Истина); Профиль = ИнтернетПочтовыйПрофиль(УчетнаяЗапись); УстановитьОтключениеБезопасногоРежима(Ложь); - ПротоколПолученияПочты = ПротоколИнтернетПочты.POP3; - Если ИспользоватьIMAPПриОтправкеПисем(Профиль) Тогда - ПротоколПолученияПочты = ПротоколИнтернетПочты.IMAP; - КонецЕсли; - - Если СоздаватьСоединение Тогда - - УстановитьОтключениеБезопасногоРежима(Истина); - Если ПротоколПолученияПочты = ПротоколИнтернетПочты.POP3 Тогда - ПротоколПочты = ""; - Иначе - ПротоколПочты = "Все"; - КонецЕсли; - - Попытка - Соединение = Новый ИнтернетПочта; - Соединение.Подключиться(Профиль, ПротоколПолученияПочты); - Если ПротоколПолученияПочты = ПротоколИнтернетПочты.IMAP Тогда - ОпределитьПапкуОтправленные(Соединение); - КонецЕсли; - Исключение - Если ПротоколПолученияПочты = ПротоколИнтернетПочты.IMAP И Не РеквизитыОтправителя.ИспользоватьДляПолучения Тогда - ТекстОшибки = НСтр("ru = 'Не удалось подключиться к серверу IMAP. Проверьте настройки учетной записи.'", ОбщегоНазначения.КодОсновногоЯзыка()); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Работа с почтовыми сообщениями.Отправка почты'", ОбщегоНазначения.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка, Метаданные.Справочники.УчетныеЗаписиЭлектроннойПочты, УчетнаяЗапись, - ТекстОшибки + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - ПротоколПолученияПочты = ПротоколИнтернетПочты.POP3; - Соединение.Подключиться(Профиль, ПротоколПолученияПочты); - Иначе - ВызватьИсключение; - КонецЕсли; - КонецПопытки; - - КонецЕсли; - - // Добавляем скрытую копию на адрес отправителя. - Если РеквизитыОтправителя.ОтправлятьСкрытыеКопииПисемНаЭтотАдрес И ПротоколПолученияПочты = ПротоколИнтернетПочты.POP3 Тогда - Получатель = Письмо.СлепыеКопии.Добавить(РеквизитыОтправителя.АдресЭлектроннойПочты); - Получатель.ОтображаемоеИмя = РеквизитыОтправителя.ИмяПользователя; - КонецЕсли; - - Попытка - - Если ПротоколПочты = "" Или ПротоколПочты = "Все" Тогда - ОшибочныеПолучатели = Соединение.Послать(Письмо, ОбрабатыватьТекстСообщения, ПротоколИнтернетПочты.SMTP); - ПараметрыОтправки.Вставить("ИдентификаторСообщения", Письмо.ИдентификаторСообщения); - ПараметрыОтправки.Вставить("ОшибочныеПолучатели", ОшибочныеПолучатели); - ПараметрыОтправки.Вставить("ИдентификаторСообщенияОтправкаIMAP", ""); - КонецЕсли; - - Если (ПротоколПочты = "IMAP" Или ПротоколПочты = "Все") И ПротоколПолученияПочты = ПротоколИнтернетПочты.IMAP Тогда - Соединение.Послать(Письмо, ОбрабатыватьТекстСообщения, ПротоколИнтернетПочты.IMAP); - ПараметрыОтправки.Вставить("ИдентификаторСообщенияОтправкаIMAP", Письмо.ИдентификаторСообщения); + Если Не ЗначениеЗаполнено(ПротоколПочты) Или ПротоколПочты = "Все" Тогда + ОшибочныеПолучатели = Соединение.Послать(Письмо, ОбработкаТекстаИнтернетПочтовогоСообщения.НеОбрабатывать, + ПротоколИнтернетПочты.SMTP); - ФлагиПисьма = Новый ФлагиИнтернетПочтовогоСообщения; - ФлагиПисьма.Прочитанное = Истина; - ФлагиПисем = Новый Соответствие; - ФлагиПисем.Вставить(Письмо.ИдентификаторСообщения, ФлагиПисьма); - Соединение.УстановитьФлагиСообщений(ФлагиПисем); - КонецЕсли; - - Исключение + ПараметрыОтправкиИдентификаторСообщения = Письмо.ИдентификаторСообщения; + ПараметрыОтправки.ОшибочныеПолучатели = ОшибочныеПолучатели; + КонецЕсли; + + Если ПротоколПочты = "IMAP" Или ПротоколПочты = "Все" И Не ПочтовыйСерверХранитПисьмаОтправленныеПоSMTP(Профиль) Тогда + Соединение.Послать(Письмо, ОбработкаТекстаИнтернетПочтовогоСообщения.НеОбрабатывать, ПротоколИнтернетПочты.IMAP); + ПараметрыОтправки.ИдентификаторСообщенияОтправкаIMAP = Письмо.ИдентификаторСообщения; - Если СоздаватьСоединение Тогда - Попытка - Соединение.Отключиться(); - Исключение - // Обработка и журналирование исключения не требуется, т.к. - // в вызывающий код передается исходное исключение, которое будет там обработано. - КонецПопытки; - КонецЕсли; - - ВызватьИсключение; - - КонецПопытки; - - Если СоздаватьСоединение Тогда - Соединение.Отключиться(); - УстановитьОтключениеБезопасногоРежима(Ложь); + ФлагиПисьма = Новый ФлагиИнтернетПочтовогоСообщения; + ФлагиПисьма.Прочитанное = Истина; + ФлагиПисем = Новый Соответствие; + ФлагиПисем.Вставить(Письмо.ИдентификаторСообщения, ФлагиПисьма); + Соединение.УстановитьФлагиСообщений(ФлагиПисем); КонецЕсли; КонецПроцедуры @@ -873,16 +671,6 @@ КонецФункции -// Выполняет заполнение системной учетной записи значениями по умолчанию. -// -Процедура ЗаполнитьСистемнуюУчетнуюЗапись() Экспорт - - УчетнаяЗапись = РаботаСПочтовымиСообщениями.СистемнаяУчетнаяЗапись().ПолучитьОбъект(); - УчетнаяЗапись.ЗаполнитьОбъектЗначениямиПоУмолчанию(); - ОбновлениеИнформационнойБазы.ЗаписатьДанные(УчетнаяЗапись); - -КонецПроцедуры - // Служебная функция используется для проверки учетной записи электронной почты. // Процедура ПроверитьВозможностьОтправкиИПолученияЭлектроннойПочты(УчетнаяЗапись, СообщениеОбОшибке, ДополнительноеСообщение) Экспорт @@ -972,7 +760,7 @@ УчетнаяЗапись.ИспользоватьДляОтправки = Ложь; УчетнаяЗапись.ИспользоватьДляПолучения = Ложь; УчетнаяЗапись.ОбменДанными.Загрузка = Истина; - УчетнаяЗапись.Записать(); + УчетнаяЗапись.Записать(); // АПК:1327 блокировка данных не требуется при выполнении начальной настройки узла РИБ. КонецЦикла; КонецПроцедуры @@ -982,7 +770,7 @@ // // Параметры: // см. описание соответствующих обработчиков событий в синтакс-помощнике. -// +// Процедура ПриПолученииДанных(ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад, Отправитель) Если ТипЗнч(ЭлементДанных) = Тип("СправочникОбъект.УчетныеЗаписиЭлектроннойПочты") Тогда @@ -1051,7 +839,7 @@ ИмяФайла = ИмяФайла + "." + НастройкиФормата.Расширение; Если НастройкиСохранения.ПереводитьИменаФайловВТранслит Тогда - ИмяФайла = СтроковыеФункцииКлиентСервер.СтрокаЛатиницей(ИмяФайла); + ИмяФайла = СтроковыеФункции.СтрокаЛатиницей(ИмяФайла); КонецЕсли; ПолноеИмяФайла = УникальноеИмяФайла(ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ИмяВременнойПапки) + ИмяФайла); @@ -1317,7 +1105,8 @@ Функция ПочтовыйСерверХранитПисьмаОтправленныеПоSMTP(ИнтернетПочтовыйПрофиль) - Возврат НРег(ИнтернетПочтовыйПрофиль.АдресСервераSMTP) = "smtp.gmail.com"; + Возврат НРег(ИнтернетПочтовыйПрофиль.АдресСервераSMTP) = "smtp.gmail.com" + Или СтрЗаканчиваетсяНа(НРег(ИнтернетПочтовыйПрофиль.АдресСервераSMTP), ".outlook.com") > 0; КонецФункции @@ -1424,4 +1213,278 @@ КонецФункции +// См. РаботаСПочтовымиСообщениями.ОтправитьПисьмо. +Функция ОтправитьПисьмо(УчетнаяЗапись, Письмо) Экспорт + + Письма = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Письмо); + Возврат ОтправитьПисьма(УчетнаяЗапись, Письма)[Письмо]; + +КонецФункции + +// См. РаботаСПочтовымиСообщениями.ОтправитьПисьма. +Функция ОтправитьПисьма(УчетнаяЗапись, Письма) Экспорт + + РеквизитыОтправителя = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(УчетнаяЗапись, "ИмяПользователя,АдресЭлектроннойПочты,ОтправлятьСкрытыеКопииПисемНаЭтотАдрес,ИспользоватьДляПолучения"); + + УстановитьОтключениеБезопасногоРежима(Истина); + Профиль = ИнтернетПочтовыйПрофиль(УчетнаяЗапись); + УстановитьОтключениеБезопасногоРежима(Ложь); + + УстановитьОтключениеБезопасногоРежима(Истина); + + ПротоколПолученияПочты = ПротоколИнтернетПочты.POP3; + Если ИспользоватьIMAPПриОтправкеПисем(Профиль) Тогда + ПротоколПолученияПочты = ПротоколИнтернетПочты.IMAP; + КонецЕсли; + + ТекстОшибки = ""; + Попытка + Соединение = Новый ИнтернетПочта; + Соединение.Подключиться(Профиль, ПротоколПолученияПочты); + Если ПротоколПолученияПочты = ПротоколИнтернетПочты.IMAP Тогда + ОпределитьПапкуОтправленные(Соединение); + КонецЕсли; + Исключение + Если ПротоколПолученияПочты = ПротоколИнтернетПочты.IMAP И Не РеквизитыОтправителя.ИспользоватьДляПолучения Тогда + ТекстОшибки = НСтр("ru = 'Не удалось подключиться к серверу IMAP. Проверьте настройки учетной записи.'", ОбщегоНазначения.КодОсновногоЯзыка()); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Работа с почтовыми сообщениями.Отправка почты'", ОбщегоНазначения.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, Метаданные.Справочники.УчетныеЗаписиЭлектроннойПочты, УчетнаяЗапись, + ТекстОшибки + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ПротоколПолученияПочты = ПротоколИнтернетПочты.POP3; + Соединение.Подключиться(Профиль, ПротоколПолученияПочты); + Иначе + ВызватьИсключение; + КонецЕсли; + КонецПопытки; + + РезультатыОтправкиПисем = Новый Соответствие; + + ОбрабатыватьТексты = ОбработкаТекстаИнтернетПочтовогоСообщения.НеОбрабатывать; + + Попытка + Для Каждого Письмо Из Письма Цикл + Письмо.ИмяОтправителя = РеквизитыОтправителя.ИмяПользователя; + Письмо.Отправитель.ОтображаемоеИмя = РеквизитыОтправителя.ИмяПользователя; + Письмо.Отправитель.Адрес = РеквизитыОтправителя.АдресЭлектроннойПочты; + + Если РеквизитыОтправителя.ОтправлятьСкрытыеКопииПисемНаЭтотАдрес Тогда + Получатель = Письмо.СлепыеКопии.Добавить(РеквизитыОтправителя.АдресЭлектроннойПочты); + Получатель.ОтображаемоеИмя = РеквизитыОтправителя.ИмяПользователя; + КонецЕсли; + + РезультатОтправкиПисьма = Новый Структура; + РезультатОтправкиПисьма.Вставить("ОшибочныеПолучатели", Новый Соответствие); + РезультатОтправкиПисьма.Вставить("ИдентификаторПисьмаSMTP", ""); + РезультатОтправкиПисьма.Вставить("ИдентификаторПисьмаIMAP", ""); + + ОшибочныеПолучатели = Соединение.Послать(Письмо, ОбрабатыватьТексты, ПротоколИнтернетПочты.SMTP); + РезультатОтправкиПисьма.Вставить("ОшибочныеПолучатели", ОшибочныеПолучатели); + РезультатОтправкиПисьма.Вставить("ИдентификаторПисьмаSMTP", Письмо.ИдентификаторСообщения); + + Если ПротоколПолученияПочты = ПротоколИнтернетПочты.IMAP Тогда + Соединение.Послать(Письмо, ОбрабатыватьТексты, ПротоколИнтернетПочты.IMAP); + РезультатОтправкиПисьма.Вставить("ИдентификаторПисьмаIMAP", Письмо.ИдентификаторСообщения); + + ФлагиПисьма = Новый ФлагиИнтернетПочтовогоСообщения; + ФлагиПисьма.Прочитанное = Истина; + ФлагиПисем = Новый Соответствие; + ФлагиПисем.Вставить(Письмо.ИдентификаторСообщения, ФлагиПисьма); + Соединение.УстановитьФлагиСообщений(ФлагиПисем); + КонецЕсли; + + РезультатыОтправкиПисем.Вставить(Письмо, РезультатОтправкиПисьма); + КонецЦикла; + Исключение + Попытка + Соединение.Отключиться(); + Исключение + // Обработка и журналирование исключения не требуется, т.к. + // в вызывающий код передается исходное исключение, которое будет там обработано. + КонецПопытки; + + ВызватьИсключение; + КонецПопытки; + + Соединение.Отключиться(); + УстановитьОтключениеБезопасногоРежима(Ложь); + + Возврат РезультатыОтправкиПисем; + +КонецФункции + +Функция ПодготовитьПисьмо(УчетнаяЗапись, ПараметрыПисьма) Экспорт + + Письмо = Новый ИнтернетПочтовоеСообщение; + + РеквизитыОтправителя = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(УчетнаяЗапись, "ИмяПользователя,АдресЭлектроннойПочты"); + Письмо.ИмяОтправителя = РеквизитыОтправителя.ИмяПользователя; + Письмо.Отправитель.ОтображаемоеИмя = РеквизитыОтправителя.ИмяПользователя; + Письмо.Отправитель.Адрес = РеквизитыОтправителя.АдресЭлектроннойПочты; + + Если ПараметрыПисьма.Свойство("Тема") Тогда + Письмо.Тема = ПараметрыПисьма.Тема; + КонецЕсли; + + Кому = ПараметрыПисьма.Кому; + Если ТипЗнч(Кому) = Тип("Строка") Тогда + Кому = ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(Кому); + КонецЕсли; + Для Каждого ПочтовыйАдресПолучателя Из Кому Цикл + Получатель = Письмо.Получатели.Добавить(ПочтовыйАдресПолучателя.Адрес); + Получатель.ОтображаемоеИмя = ПочтовыйАдресПолучателя.Представление; + КонецЦикла; + + Если ПараметрыПисьма.Свойство("Копии") Тогда + Для Каждого ПочтовыйАдресПолучателяКопии Из ПараметрыПисьма.Копии Цикл + Получатель = Письмо.Копии.Добавить(ПочтовыйАдресПолучателяКопии.Адрес); + Получатель.ОтображаемоеИмя = ПочтовыйАдресПолучателяКопии.Представление; + КонецЦикла; + КонецЕсли; + + Если ПараметрыПисьма.Свойство("СкрытыеКопии") Тогда + Для Каждого СведенияОПолучателе Из ПараметрыПисьма.СкрытыеКопии Цикл + Получатель = Письмо.СлепыеКопии.Добавить(СведенияОПолучателе.Адрес); + Получатель.ОтображаемоеИмя = СведенияОПолучателе.Представление; + КонецЦикла; + КонецЕсли; + + Если ПараметрыПисьма.Свойство("АдресОтвета") Тогда + Для Каждого ПочтовыйАдресОтвета Из ПараметрыПисьма.АдресОтвета Цикл + ПочтовыйАдресОбратный = Письмо.ОбратныйАдрес.Добавить(ПочтовыйАдресОтвета.Адрес); + ПочтовыйАдресОбратный.ОтображаемоеИмя = ПочтовыйАдресОтвета.Представление; + КонецЦикла; + КонецЕсли; + + Вложения = Неопределено; + ПараметрыПисьма.Свойство("Вложения", Вложения); + Если Вложения <> Неопределено Тогда + Для Каждого Вложение Из Вложения Цикл + Если ТипЗнч(Вложение) = Тип("Структура") Тогда + ДанныеФайла = Неопределено; + Если ЭтоАдресВременногоХранилища(Вложение.АдресВоВременномХранилище) Тогда + ДанныеФайла = ПолучитьИзВременногоХранилища(Вложение.АдресВоВременномХранилище); + Иначе + ДанныеФайла = Вложение.АдресВоВременномХранилище; + КонецЕсли; + НовоеВложение = Письмо.Вложения.Добавить(ДанныеФайла, Вложение.Представление); + Если Вложение.Свойство("Кодировка") И Не ПустаяСтрока(Вложение.Кодировка) Тогда + НовоеВложение.Кодировка = Вложение.Кодировка; + КонецЕсли; + Если Вложение.Свойство("Идентификатор") Тогда + НовоеВложение.Идентификатор = Вложение.Идентификатор; + КонецЕсли; + Иначе // Поддержка обратной совместимости с 2.2.1. + Если ТипЗнч(Вложение.Значение) = Тип("Структура") Тогда + НовоеВложение = Письмо.Вложения.Добавить(Вложение.Значение.ДвоичныеДанные, Вложение.Ключ); + Если Вложение.Значение.Свойство("Идентификатор") Тогда + НовоеВложение.Идентификатор = Вложение.Значение.Идентификатор; + КонецЕсли; + Если Вложение.Значение.Свойство("Кодировка") Тогда + НовоеВложение.Кодировка = Вложение.Значение.Кодировка; + КонецЕсли; + Если Вложение.Значение.Свойство("ТипСодержимого") Тогда + НовоеВложение.ТипСодержимого = Вложение.Значение.ТипСодержимого; + КонецЕсли; + Если Вложение.Значение.Свойство("Имя") Тогда + НовоеВложение.Имя = Вложение.Значение.Имя; + КонецЕсли; + Иначе + ИнтернетПочтовоеВложение = Письмо.Вложения.Добавить(Вложение.Значение, Вложение.Ключ); + Если ТипЗнч(Вложение.Значение) = Тип("ИнтернетПочтовоеСообщение") Тогда + ИнтернетПочтовоеВложение.ТипСодержимого = "message/rfc822"; + КонецЕсли; + КонецЕсли; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + Для Каждого Вложение Из Письмо.Вложения Цикл + Если Не ЗначениеЗаполнено(Вложение.ТипСодержимого) Тогда + ТипСодержимого = ОпределитьТипСодержимогоПоИмениФайла(Вложение.Имя); + Если ЗначениеЗаполнено(ТипСодержимого) Тогда + Вложение.ТипСодержимого = ТипСодержимого; + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Если ПараметрыПисьма.Свойство("ИдентификаторыОснований") Тогда + Письмо.УстановитьПолеЗаголовка("References", ПараметрыПисьма.ИдентификаторыОснований); + КонецЕсли; + + Тело = ""; + ПараметрыПисьма.Свойство("Тело", Тело); + + ТипТекста = Неопределено; + Если ТипЗнч(Тело) = Тип("ФорматированныйДокумент") Тогда + СодержимоеПисьма = ПолучитьHTMLФорматированногоДокументаДляПисьма(Тело); + Тело = СодержимоеПисьма.ТекстHTML; + Картинки = СодержимоеПисьма.Картинки; + ТипТекста = ТипТекстаПочтовогоСообщения.HTML; + + Для Каждого Картинка Из Картинки Цикл + ИмяКартинки = Картинка.Ключ; + ДанныеКартинки = Картинка.Значение; + Вложение = Письмо.Вложения.Добавить(ДанныеКартинки.ПолучитьДвоичныеДанные(), ИмяКартинки); + Вложение.Идентификатор = ИмяКартинки; + КонецЦикла; + КонецЕсли; + Текст = Письмо.Тексты.Добавить(Тело); + Если ЗначениеЗаполнено(ТипТекста) Тогда + Текст.ТипТекста = ТипТекста; + КонецЕсли; + + Если ТипТекста = Неопределено Тогда + Если ПараметрыПисьма.Свойство("ТипТекста", ТипТекста) Тогда + Если ТипЗнч(ТипТекста) = Тип("Строка") Тогда + Если ТипТекста = "HTML" Тогда + Текст.ТипТекста = ТипТекстаПочтовогоСообщения.HTML; + ИначеЕсли ТипТекста = "RichText" Тогда + Текст.ТипТекста = ТипТекстаПочтовогоСообщения.РазмеченныйТекст; + Иначе + Текст.ТипТекста = ТипТекстаПочтовогоСообщения.ПростойТекст; + КонецЕсли; + ИначеЕсли ТипЗнч(ТипТекста) = Тип("ПеречислениеСсылка.ТипыТекстовЭлектронныхПисем") Тогда + Если ТипТекста = Перечисления.ТипыТекстовЭлектронныхПисем.HTML + ИЛИ ТипТекста = Перечисления.ТипыТекстовЭлектронныхПисем.HTMLСКартинками Тогда + Текст.ТипТекста = ТипТекстаПочтовогоСообщения.HTML; + ИначеЕсли ТипТекста = Перечисления.ТипыТекстовЭлектронныхПисем.РазмеченныйТекст Тогда + Текст.ТипТекста = ТипТекстаПочтовогоСообщения.РазмеченныйТекст; + Иначе + Текст.ТипТекста = ТипТекстаПочтовогоСообщения.ПростойТекст; + КонецЕсли; + Иначе + Текст.ТипТекста = ТипТекста; + КонецЕсли; + Иначе + Текст.ТипТекста = ТипТекстаПочтовогоСообщения.ПростойТекст; + КонецЕсли; + КонецЕсли; + + Важность = Неопределено; + Если ПараметрыПисьма.Свойство("Важность", Важность) Тогда + Письмо.Важность = Важность; + КонецЕсли; + + Кодировка = Неопределено; + Если ПараметрыПисьма.Свойство("Кодировка", Кодировка) Тогда + Письмо.Кодировка = Кодировка; + КонецЕсли; + + Если ПараметрыПисьма.Свойство("УведомитьОДоставке") Тогда + Письмо.УведомитьОДоставке = ПараметрыПисьма.УведомитьОДоставке; + КонецЕсли; + + Если ПараметрыПисьма.Свойство("УведомитьОПрочтении") Тогда + Письмо.УведомитьОПрочтении = ПараметрыПисьма.УведомитьОПрочтении; + Письмо.АдресаУведомленияОПрочтении.Добавить(РеквизитыОтправителя.АдресЭлектроннойПочты); + КонецЕсли; + + Если Не ПараметрыПисьма.Свойство("ОбрабатыватьТексты") Или ПараметрыПисьма.ОбрабатыватьТексты Тогда + Письмо.ОбработатьТексты(); + КонецЕсли; + + Возврат Письмо; + +КонецФункции + #КонецОбласти diff --git a/SSL/src/CommonModules/РаботаСФайлами/Module.bsl b/SSL/src/CommonModules/РаботаСФайлами/Module.bsl index 297e7467d..55850646d 100644 --- a/SSL/src/CommonModules/РаботаСФайлами/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайлами/Module.bsl @@ -27,6 +27,13 @@ // найдены и параметр ВызыватьИсключение принимает значение Ложь, тогда // возвращаемое значение - Неопределено. // +// Пример: +// 1. Сохранение данных файла на сервере: +// ДанныеФайла = РаботаСФайлами.ДвоичныеДанныеФайла(Файл, Ложь); +// Если ДанныеФайла <> Неопределено Тогда +// ДанныеФайла.Записать(ПутьКФайлу); +// КонецЕсли; +// Функция ДвоичныеДанныеФайла(Знач ПрисоединенныйФайл, Знач ВызыватьИсключение = Истина) Экспорт ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("РаботаСФайлами.ДвоичныеДанныеФайла", "ПрисоединенныйФайл", @@ -38,7 +45,9 @@ Возврат Неопределено; КонецЕсли; + УстановитьОтключениеБезопасногоРежима(Истина); УстановитьПривилегированныйРежим(Истина); + Если ФайлОбъект.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда Результат = ХранилищеФайлаИзИнформационнойБазы(ФайлОбъект.Ссылка); @@ -50,9 +59,8 @@ // Запись в журнал регистрации. СообщениеОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Двоичные данные файла отсутствуют в регистре ДвоичныеДанныеФайла - | - |Ссылка на файл: ""%1"".'"), + НСтр("ru = 'Двоичные данные файла отсутствуют в регистре ДвоичныеДанныеФайлов. + |Файл: ""%1"".'"), ПолучитьНавигационнуюСсылку(ПрисоединенныйФайл)); ЗаписьЖурналаРегистрации(НСтр("ru = 'Файлы.Открытие файла'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, @@ -70,35 +78,7 @@ Ложь, ПредставлениеВладельцаФайла); Иначе - ПолныйПуть = РаботаСФайламиСлужебный.ПолныйПутьТома(ФайлОбъект.Том) + ФайлОбъект.ПутьКФайлу; - - Попытка - Возврат Новый ДвоичныеДанные(ПолныйПуть); - Исключение - - Если Не ВызыватьИсключение Тогда - Возврат Неопределено; - КонецЕсли; - - // Запись в журнал регистрации. - СообщениеОбОшибке = ТекстОшибкиПриПолученииФайла(ИнформацияОбОшибке(), ПрисоединенныйФайл); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Файлы.Получение файла из тома'", ОбщегоНазначения.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка, - Метаданные.Справочники[ПрисоединенныйФайл.Метаданные().Имя], - ПрисоединенныйФайл, - СообщениеОбОшибке); - - ПредставлениеВладельцаФайла = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Присоединен к %1 : %2'"), - Строка(ТипЗнч(ФайлОбъект.ВладелецФайла)), - ФайлОбъект.ВладелецФайла); - - ВызватьИсключение РаботаСФайламиСлужебный.ОшибкаФайлНеНайденВХранилищеФайлов( - ФайлОбъект.Наименование + "." + ФайлОбъект.Расширение, - , - ПредставлениеВладельцаФайла); - - КонецПопытки; + Возврат РаботаСФайламиВТомахСлужебный.ДанныеФайла(ПрисоединенныйФайл, ВызыватьИсключение); КонецЕсли; КонецФункции @@ -448,42 +428,6 @@ КонецФункции -// Обработчик подписки на событие ОбработкаПолученияФормы для переопределения формы файла. -// -// Параметры: -// Источник - СправочникМенеджер - менеджер справочника с именем "*ПрисоединенныеФайлы". -// ВидФормы - Строка - имя стандартной формы. -// Параметры - Структура - параметры формы. -// ВыбраннаяФорма - Строка - имя или объект метаданных открываемой формы. -// ДополнительнаяИнформация - Структура - дополнительная информация открытия формы. -// СтандартнаяОбработка - Булево - признак выполнения стандартной (системной) обработки события. -// -Процедура ОпределитьФормуПрисоединенногоФайла(Источник, ВидФормы, Параметры, - ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка) Экспорт - - ЭтоФормаВерсии = Ложь; - - Если Источник <> Неопределено Тогда - ЭтоФормаВерсии = ОбщегоНазначения.ЕстьРеквизитОбъекта("РодительскаяВерсия", Метаданные.НайтиПоТипу(ТипЗнч(Источник))); - КонецЕсли; - - Если ВидФормы = "ФормаГруппы" Тогда - ВыбраннаяФорма = "Обработка.РаботаСФайлами.Форма.ГруппаФайлов"; - СтандартнаяОбработка = Ложь; - ИначеЕсли ВидФормы = "ФормаОбъекта" Тогда - Если Не ЭтоФормаВерсии Тогда - ВыбраннаяФорма = "Обработка.РаботаСФайлами.Форма.ПрисоединенныйФайл"; - СтандартнаяОбработка = Ложь; - КонецЕсли; - ИначеЕсли ВидФормы = "ФормаСписка" Тогда - Если Не ЭтоФормаВерсии Тогда - ВыбраннаяФорма = "Обработка.РаботаСФайлами.Форма.ПрисоединенныеФайлы"; - СтандартнаяОбработка = Ложь; - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - // Обработчик события ПередЗаписью объектов-владельцев файлов. // Определен только для объектов Документ. // @@ -529,42 +473,72 @@ КонецПроцедуры +// Инициализирует структуру параметров для добавления файла. +// Для использования в РаботаСФайлами.ДобавитьВФайл. +// +// Параметры: +// ДополнительныеРеквизиты - Строка, Массив - имена реквизитов присоединенного файла, перечисленные через +// запятую, или массив имен реквизитов. +// - Структура - коллекция дополнительных реквизитов. Стандартные свойства будут +// вставлены в коллекцию в случае отсутствия. +// +// Возвращаемое значение: +// Структура - со свойствами: +// * Автор - СправочникСсылка.Пользователи, СправочникСсылка.ВнешниеПользователи, +// СправочникСсылка.УчетныеЗаписиСинхронизацииФайлов - пользователь или +// учетная запись синхронизации файлов, от имени которого создается файл. +// Значение по умолчанию - Неопределено. +// * ВладелецФайлов - ОпределяемыйТип.ВладелецПрисоединенныхФайлов - папка файлов или объект, к которому +// требуется прикрепить добавляемый файл. +// Значение по умолчанию - Неопределено. +// * ИмяБезРасширения - Строка - имя файла без расширения. +// Значение по умолчанию - "". +// * РасширениеБезТочки - Строка - расширение файла (без точки вначале). +// Значение по умолчанию - "". +// * ВремяИзмененияУниверсальное - Дата - дата и время изменения файла (UTC+0:00). Если параметр принимает значение +// Неопределено, при добавлении файла время изменения будет установлено равным +// результату выполнения функции ТекущаяУниверсальнаяДата(). +// Значение по умолчанию - Неопределено. +// * ГруппаФайлов - ОпределяемыйТип.ПрисоединенныйФайл - группа справочника с файлами, в которую +// будет добавлен новый файл. +// Значение по умолчанию - Неопределено. +// * Служебный - Булево - если Истина, тогда файл будет скрыт от пользователей. +// Значение по умолчанию - Ложь. +// * <Имя реквизита> - Произвольный - значение произвольного реквизита присоединенного файла, указанного +// в параметре ДополнительныеРеквизиты. +// Значение по умолчанию - Неопределено. +// +Функция ПараметрыДобавленияФайла(ДополнительныеРеквизиты = Неопределено) Экспорт + + Возврат РаботаСФайламиСлужебныйКлиентСервер.ПараметрыДобавленияФайла(ДополнительныеРеквизиты); + +КонецФункции + // Создает объект в справочнике для хранения файла и заполняет его реквизиты переданными свойствами. // // Параметры: -// ПараметрыФайла - Структура - параметры с данными файла. -// * Автор - Ссылка - пользователь, создавший файл. -// * ВладелецФайлов - ОпределяемыйТип.ВладелецПрисоединенныхФайлов - папка файлов или объект, к которому -// требуется прикрепить добавляемый файл. -// * ИмяБезРасширения - Строка - имя файла без расширения. -// * РасширениеБезТочки - Строка - расширение файла (без точки вначале). -// * ВремяИзмененияУниверсальное - Дата - дата и время изменения файла (UTC+0:00), -// если не указана, тогда используется ТекущаяУниверсальнаяДата(). -// * ГруппаФайлов - Ссылка - группа справочника с файлами, в которую будет добавлен новый файл. -// * Служебный - Булево - если Истина, тогда файл будет скрыт от пользователей. -// Значение по умолчанию - Ложь. -// АдресФайлаВоВременномХранилище - Строка - адрес, указывающий на двоичные данные во временном хранилище. -// АдресВременногоХранилищаТекста - Строка - адрес, указывающий на извлеченный текст из файла во временном хранилище. -// Описание - Строка - текстовое описание файла. -// -// НоваяСсылкаНаФайл - Неопределено - создать новую ссылку на файл в стандартном справочнике -// или в нестандартном, но единственном справочнике. Когда у владельца файла несколько -// справочников, требуется обязательно передать ссылку, иначе будет вызвано -// исключение. -// - Ссылка - ссылка на элемент справочника хранения файлов, -// которую следует использовать для добавляемого файла. -// Должна соответствовать одному из типов справочников хранения файлов владельца -// файлов. Ссылка может быть получена функцией НоваяСсылкаНаФайл. +// ПараметрыФайла - Структура - См. РаботаСФайлами.ПараметрыДобавленияФайла. +// АдресФайлаВоВременномХранилище - Строка - адрес, указывающий на двоичные данные во временном хранилище. +// АдресВременногоХранилищаТекста - Строка - адрес, указывающий на извлеченный текст из файла во временном хранилище. +// Описание - Строка - текстовое описание файла. +// НоваяСсылкаНаФайл - Неопределено - создать новую ссылку на файл в стандартном справочнике +// или в нестандартном, но единственном справочнике. Когда у владельца файла несколько +// справочников, требуется обязательно передать ссылку, иначе будет вызвано +// исключение. +// - Ссылка - ссылка на элемент справочника хранения файлов, +// которую следует использовать для добавляемого файла. +// Должна соответствовать одному из типов справочников хранения файлов владельца +// файлов. Ссылка может быть получена функцией НоваяСсылкаНаФайл. +// // Возвращаемое значение: -// ОпределяемыйТип.ПрисоединенныйФайл - ссылка на созданный присоединенный файл. +// ОпределяемыйТип.ПрисоединенныйФайл - ссылка на созданный присоединенный файл. // Функция ДобавитьФайл(ПараметрыФайла, Знач АдресФайлаВоВременномХранилище, Знач АдресВременногоХранилищаТекста = "", Знач Описание = "", Знач НоваяСсылкаНаФайл = Неопределено) Экспорт - - Автор = ПараметрыФайла.Автор; + ВладелецФайлов = ПараметрыФайла.ВладелецФайлов; ИмяБезРасширения = ПараметрыФайла.ИмяБезРасширения; РасширениеБезТочки = ПараметрыФайла.РасширениеБезТочки; @@ -573,15 +547,19 @@ ВызватьИсключение НСтр("ru = 'Не задано значение параметра ПараметрыФайла.ВладелецФайлов в РаботаСФайлами.ДобавитьФайл.'"); КонецЕсли; + ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресФайлаВоВременномХранилище); + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("РаботаСФайлами.ДобавитьФайл", + "АдресФайлаВоВременномХранилище", ДвоичныеДанные, Тип("ДвоичныеДанные")); + ГруппаФайлов = Неопределено; Если ПараметрыФайла.Свойство("ГруппаФайлов") И ЗначениеЗаполнено(ПараметрыФайла.ГруппаФайлов) И Не РаботаСФайламиСлужебный.ЭтоПапкаФайлов(ВладелецФайлов) Тогда + ГруппаФайлов = ПараметрыФайла.ГруппаФайлов; КонецЕсли; - ВремяИзмененияУниверсальное = ПараметрыФайла.ВремяИзмененияУниверсальное; - - Если РасширениеБезТочки = Неопределено Тогда + + Если Не ЗначениеЗаполнено(РасширениеБезТочки) Тогда ЧастиИмениФайла = СтрРазделить(ИмяБезРасширения, ".", Ложь); Если ЧастиИмениФайла.Количество() > 1 Тогда РасширениеБезТочки = ЧастиИмениФайла[ЧастиИмениФайла.Количество()-1]; @@ -589,13 +567,12 @@ КонецЕсли; КонецЕсли; + ВремяИзмененияУниверсальное = ПараметрыФайла.ВремяИзмененияУниверсальное; Если Не ЗначениеЗаполнено(ВремяИзмененияУниверсальное) Или ВремяИзмененияУниверсальное > ТекущаяУниверсальнаяДата() Тогда ВремяИзмененияУниверсальное = ТекущаяУниверсальнаяДата(); КонецЕсли; - ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресФайлаВоВременномХранилище); - ЗаголовокОшибки = НСтр("ru = 'Ошибка при добавлении присоединенного файла.'"); Если НоваяСсылкаНаФайл = Неопределено Тогда @@ -604,6 +581,7 @@ НоваяСсылкаНаФайл = Справочники[ИмяСправочника].ПолучитьСсылку(); Иначе + Если Не Справочники.ТипВсеСсылки().СодержитТип(ТипЗнч(НоваяСсылкаНаФайл)) Или Не ЗначениеЗаполнено(НоваяСсылкаНаФайл) Тогда @@ -613,13 +591,6 @@ ИмяСправочника = РаботаСФайламиСлужебный.ИмяСправочникаХраненияФайлов( ВладелецФайлов, НоваяСсылкаНаФайл.Метаданные().Имя, ЗаголовокОшибки); - КонецЕсли; - - Служебный = Неопределено; - Если ПараметрыФайла.Свойство("Служебный") - И РаботаСФайламиСлужебный.ЕстьРеквизитСлужебный(ИмяСправочника) Тогда - - Служебный = ПараметрыФайла.Служебный; КонецЕсли; @@ -634,20 +605,21 @@ ПрисоединенныйФайл.Расширение = РасширениеБезТочки; ПрисоединенныйФайл.ТипХраненияФайла = РаботаСФайламиСлужебный.ТипХраненияФайлов(); ПрисоединенныйФайл.Размер = ДвоичныеДанные.Размер(); - ПрисоединенныйФайл.Автор = Автор; - ПрисоединенныйФайл.Изменил = Автор; + ПрисоединенныйФайл.Изменил = ПараметрыФайла.Автор; Если ГруппаФайлов <> Неопределено Тогда ПрисоединенныйФайл.Родитель = ГруппаФайлов; КонецЕсли; - Если Служебный <> Неопределено Тогда - ПрисоединенныйФайл.Служебный = Служебный; - КонецЕсли; + + ЗаполнитьЗначенияСвойств(ПрисоединенныйФайл, ПараметрыФайла); ИспользованиеПолнотекстовогоПоиска = Метаданные.СвойстваОбъектов.ИспользованиеПолнотекстовогоПоиска.Использовать; ИзвлекатьТекст = Метаданные.Справочники[ИмяСправочника].ПолнотекстовыйПоиск = ИспользованиеПолнотекстовогоПоиска; Если ПрисоединенныйФайл.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда + НачатьТранзакцию(); + Попытка + РаботаСФайламиСлужебный.ЗаписатьФайлВИнформационнуюБазу(НоваяСсылкаНаФайл, ДвоичныеДанные); ПрисоединенныйФайл.Том = Справочники.ТомаХраненияФайлов.ПустаяСсылка(); ПрисоединенныйФайл.ПутьКФайлу = ""; @@ -672,6 +644,7 @@ ЗафиксироватьТранзакцию(); Исключение + ОтменитьТранзакцию(); ИнформацияОбОшибке = ИнформацияОбОшибке(); @@ -694,15 +667,14 @@ ШаблонСообщения, ИмяБезРасширения + "." + РасширениеБезТочки, КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); - КонецПопытки; - Иначе - Попытка - // Добавление в один из томов (где есть свободное место). - СведенияОФайле = РаботаСФайламиСлужебный.ДобавитьФайлВТом(ДвоичныеДанные, ВремяИзмененияУниверсальное, - ИмяБезРасширения, РасширениеБезТочки, , ПрисоединенныйФайл.Зашифрован); - ПрисоединенныйФайл.Том = СведенияОФайле.Том; - ПрисоединенныйФайл.ПутьКФайлу = СведенияОФайле.ПутьКФайлу; + КонецПопытки; + + Иначе + + Попытка + + РаботаСФайламиВТомахСлужебный.ДобавитьФайл(ПрисоединенныйФайл, ДвоичныеДанные); Если ИзвлекатьТекст Тогда РезультатИзвлеченияТекста = РаботаСФайламиСлужебный.ИзвлечьТекст(АдресВременногоХранилищаТекста, ДвоичныеДанные, ПрисоединенныйФайл.Расширение); @@ -717,7 +689,9 @@ Если Не ЗначениеЗаполнено(ПрисоединенныйФайл.Изменил) Тогда ПрисоединенныйФайл.Изменил = Пользователи.АвторизованныйПользователь(); КонецЕсли; + ПрисоединенныйФайл.Записать(); + Если РаботаСФайламиСлужебныйВызовСервера.ЭтоСправочникФайлы(ВладелецФайлов) Тогда СведенияОФайле = РаботаСФайламиКлиентСервер.СведенияОФайле("ФайлСВерсией"); @@ -733,6 +707,7 @@ КонецЕсли; Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); ШаблонСообщения = НСтр("ru = 'Ошибка при добавлении присоединенного файла ""%1"": @@ -754,7 +729,9 @@ ШаблонСообщения, ИмяБезРасширения + "." + РасширениеБезТочки, КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); + КонецПопытки; + КонецЕсли; Возврат ПрисоединенныйФайл.Ссылка; @@ -1518,7 +1495,7 @@ // Значение по умолчанию - 0. // * ФильтрДиалогаВыбора - Строка - фильтр, устанавливаемый в диалог выбора при добавлении файла. // Формат см. в свойстве Фильтр объекта ДиалогВыбораФайла в синтакс-помощнике. -// Значение по умолчанию - "Все файлы(*.*)|*.*" +// Значение по умолчанию - "Все файлы (*.*)|*.*" // Функция ПолеФайла() Экспорт @@ -1539,14 +1516,12 @@ ПараметрыПоля.Вставить("РедактироватьФайл", "ВФорме"); ПараметрыПоля.Вставить("ОчищатьФайл", Истина); ПараметрыПоля.Вставить("МаксимальныйРазмер", 0); - ПараметрыПоля.Вставить("ФильтрДиалогаВыбора", НСтр("ru = 'Все файлы(*.*)|*.*'")); + ПараметрыПоля.Вставить("ФильтрДиалогаВыбора", НСтр("ru = 'Все файлы (*.*)|*.*'")); Возврат ПараметрыПоля; КонецФункции -#Область РаботаСТомамиФайлов - // Определяет наличие активных томов хранения файлов. // Если есть хоть один том хранения файлов, то будет возвращена Истина. // @@ -1555,18 +1530,7 @@ // Функция ЕстьТомаХраненияФайлов() Экспорт - УстановитьПривилегированныйРежим(Истина); - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ ПЕРВЫЕ 1 - | ИСТИНА КАК ЗначениеИстина - |ИЗ - | Справочник.ТомаХраненияФайлов КАК ТомаХраненияФайлов - |ГДЕ - | ТомаХраненияФайлов.ПометкаУдаления = ЛОЖЬ"; - - Возврат НЕ Запрос.Выполнить().Пустой(); + Возврат РаботаСФайламиВТомахСлужебный.ЕстьТомаХраненияФайлов(); КонецФункции @@ -1629,6 +1593,40 @@ КонецПроцедуры +// При программном копировании Источника создает у Получателя копии всех +// присоединенных файлов. Для интерактивного копирования необходимо использовать +// процедуру РаботаСФайлами.ПриЗаписиНаСервере. +// Источник и Получатель должны быть объектами одного типа. +// +// Параметры: +// Источник - Ссылка - объект, имеющий присоединенные файлы для копирования. +// Получатель - Ссылка - объект, к которому копируются присоединенные файлы. +// +Процедура СкопироватьПрисоединенныеФайлы(Знач Источник, Знач Получатель) Экспорт + + РаботаСФайламиСлужебный.СкопироватьПрисоединенныеФайлы(Источник, Получатель); + +КонецПроцедуры + +#Область ДляВызоваИзДругихПодсистем + +// ЭлектронноеВзаимодействие + +// Следующие процедуры и функции предназначены для интеграции с 1С:Библиотека электронных документов. + +// Переносит сведения об электронных подписях файла из табличной части файла в регистр сведений. +// +// Параметры: +// Параметры - Структура - параметры выполнения отложенного обработчика обновления. +// +Процедура ПеренестиЭлектронныеПодписиИСертификатыШифрованияВРегистрыСведений(Параметры) Экспорт + + РаботаСФайламиСлужебный.ПеренестиЭлектронныеПодписиИСертификатыШифрованияВРегистрыСведений(Параметры); + +КонецПроцедуры + +// Конец ЭлектронноеВзаимодействие + #КонецОбласти #Область УстаревшиеПроцедурыИФункции @@ -1652,6 +1650,25 @@ КонецФункции +// Устарела. Следует использовать РаботаСФайламиКлиентСервер.ОпределитьФормуПрисоединенногоФайла. +// Обработчик подписки на событие ОбработкаПолученияФормы для переопределения формы файла. +// +// Параметры: +// Источник - СправочникМенеджер - менеджер справочника с именем "*ПрисоединенныеФайлы". +// ВидФормы - Строка - имя стандартной формы. +// Параметры - Структура - параметры формы. +// ВыбраннаяФорма - Строка - имя или объект метаданных открываемой формы. +// ДополнительнаяИнформация - Структура - дополнительная информация открытия формы. +// СтандартнаяОбработка - Булево - признак выполнения стандартной (системной) обработки события. +// +Процедура ОпределитьФормуПрисоединенногоФайла(Источник, ВидФормы, Параметры, + ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка) Экспорт + + РаботаСФайламиКлиентСервер.ОпределитьФормуПрисоединенногоФайла( + Источник, ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка); + +КонецПроцедуры + #КонецОбласти #КонецОбласти @@ -2019,26 +2036,6 @@ КонецПроцедуры -// Возвращает текст сообщения об ошибке, добавляя к нему ссылку на элемент -// справочника хранимого файла. -// -Функция ТекстОшибкиПриПолученииФайла(Знач ИнформацияОбОшибке, Знач Файл) - - СообщениеОбОшибке = КраткоеПредставлениеОшибки(ИнформацияОбОшибке); - - Если Файл <> Неопределено Тогда - СообщениеОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = '%1 - | - |Ссылка на файл: ""%2"".'"), - СообщениеОбОшибке, - ПолучитьНавигационнуюСсылку(Файл) ); - КонецЕсли; - - Возврат СообщениеОбОшибке; - -КонецФункции - // Возвращает идентификатор владельца присоединенного файла. Функция ПолучитьИдентификаторОбъекта(Знач ВладелецФайлов) diff --git a/SSL/src/CommonModules/РаботаСФайламиВТомахСлужебный/Module.bsl b/SSL/src/CommonModules/РаботаСФайламиВТомахСлужебный/Module.bsl new file mode 100644 index 000000000..450a1dfbe --- /dev/null +++ b/SSL/src/CommonModules/РаботаСФайламиВТомахСлужебный/Module.bsl @@ -0,0 +1,1443 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2019, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область СлужебныйПрограммныйИнтерфейс + +// Определяет наличие активных томов хранения файлов. +// Если есть хоть один том хранения файлов, то будет возвращена Истина. +// +// Возвращаемое значение: +// Булево - если Истина, тогда существует хотя бы один работающий том. +// +Функция ЕстьТомаХраненияФайлов() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА КАК ЗначениеИстина + |ИЗ + | Справочник.ТомаХраненияФайлов КАК ТомаХраненияФайлов + |ГДЕ + | ТомаХраненияФайлов.ПометкаУдаления = ЛОЖЬ"; + + Возврат НЕ Запрос.Выполнить().Пустой(); + +КонецФункции + +// Возвращает двоичные данные файла. +// +// Параметры: +// ПрисоединенныйФайл - ОпределяемыйТип.ПрисоединенныйФайл - ссылка на элемент справочника с файлом. +// ВызыватьИсключение - Булево - если указать Ложь, то функция будет возвращать Неопределено +// вместо вызова исключений. Значение по умолчанию - Истина. +// +// Возвращаемое значение: +// ДвоичныеДанные, Неопределено - двоичные данные присоединенного файла. Если двоичные данные файла не найдены +// в информационной базе или в томах, вызывает исключение. Если двоичные данные не +// найдены и параметр ВызыватьИсключение принимает значение Ложь, тогда +// возвращаемое значение - Неопределено. +// +Функция ДанныеФайла(ПрисоединенныйФайл, Знач ВызыватьИсключение = Истина) Экспорт + + СвойстваФайла = СвойстваФайлаВТоме(ПрисоединенныйФайл); + Попытка + Возврат Новый ДвоичныеДанные(ПолноеИмяФайлаВТоме(СвойстваФайла)); + Исключение + + Если Не ВызыватьИсключение Тогда + Возврат Неопределено; + КонецЕсли; + + СообщениеОбОшибке = ТекстОшибкиПриПолученииФайла(ИнформацияОбОшибке(), ПрисоединенныйФайл); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Файлы.Получение файла из тома'", ОбщегоНазначения.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, + Метаданные.Справочники[ПрисоединенныйФайл.Метаданные().Имя], + ПрисоединенныйФайл, + СообщениеОбОшибке); + + ПредставлениеВладельцаФайла = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Присоединен к %1 : %2'"), + Строка(ТипЗнч(СвойстваФайла.ВладелецФайла)), + СвойстваФайла.ВладелецФайла); + + ТекстОшибки = НСтр("ru = 'Не удалось открыть файл: + |%1 + |который присоединен к: + |%2 + |по причине: двоичные данные файла были удалены. Возможно, файл очищен как ненужный или удален антивирусной программой. + |Обратитесь к администратору.'"); + + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ТекстОшибки, + СвойстваФайла.Наименование + "." + СвойстваФайла.Расширение, + ПредставлениеВладельцаФайла); + + КонецПопытки; + +КонецФункции + +// Конструктор структуры данных присоединенного файла. Подробнее см. ДобавитьФайл. +// +// Возвращаемое значение: +// ПараметрыФайла - Структура. +// Перед добавлением файла должны быть заполнены свойства: +// * Ссылка - ОпределяемыйТип.ПрисоединенныйФайл - ссылка на элемент справочника с файлами. +// * Наименование - Строка - наименование добавляемого файла. +// * Расширение - Строка - расширение добавляемого файла. +// * ВладелецФайла - ОпределяемыйТип.ВладелецПрисоединенныхФайлов - ссылка на владельца файла. +// * ДатаМодификацииУниверсальная - Дата - дата изменения файла. +// После добавления можно анализировать свойства: +// * ТипХраненияФайла - Перечисления.ТипыХраненияФайлов - тип хранения данных файла. +// * Том - СправочникСсылка.ТомаХраненияФайлов - том, в который был добавлен файл. +// * ПутьКФайлу - Строка - путь в томе, по которому был размещен файл. +// * ХранимыйФайл - ХранилищеЗначения - данные добавленного файла. +// +Функция ПараметрыДобавленияФайла() Экспорт + + ПараметрыФайла = Новый Структура; + ПараметрыФайла.Вставить("Ссылка", Неопределено); + ПараметрыФайла.Вставить("Том", Справочники.ТомаХраненияФайлов.ПустаяСсылка()); + ПараметрыФайла.Вставить("ПутьКФайлу", ""); + ПараметрыФайла.Вставить("Расширение", Неопределено); + ПараметрыФайла.Вставить("Наименование", ""); + ПараметрыФайла.Вставить("ХранимыйФайл", Неопределено); + ПараметрыФайла.Вставить("ВладелецФайла", Неопределено); + ПараметрыФайла.Вставить("ТипХраненияФайла", Неопределено); + ПараметрыФайла.Вставить("ДатаМодификацииУниверсальная", Неопределено); + + Возврат ПараметрыФайла; + +КонецФункции + +// Добавляет файл в один из томов (где есть свободное место) или в информационную базу, если +// способ хранения файлов в настройках указан "ВИнформационнойБазеИТомахНаДиске" и файл соответствует +// параметрам хранения в информационной базе. +// +// Параметры: +// ПрисоединенныйФайл - ОпределяемыйТип.ПрисоединенныйФайлОбъект, Структура - элемент +// справочника присоединенных файлов, данные которого сохраняются +// в том, или структура со свойствами, необходимыми для сохранения +// данных в том. +// Свойства структуры: См. РаботаСФайламиВТомахСлужебный.ПараметрыДобавленияФайла. +// ДвоичныеДанныеИлиПуть - ДвоичныеДанные, Строка - двоичные данные файла или полный путь +// к файлу на диске. +// ДатаДляРазмещенияВТоме - Дата - если не указано, то используется текущее время сеанса. +// ЗаполнятьСлужебныйРеквизитХранилище - Булево - если параметр принимает значение Истина, двоичные данные +// файла будут дополнительно помещены в служебный реквизит ФайлХранилище. +// ТомДляРазмещения - СправочникСсылка.ТомаХраненияФайлов, Неопределено - если параметр +// заполнен, файлы будут принудительно помещаться в указанный том, +// иначе - том будет выбран автоматически. +// +Процедура ДобавитьФайл(ПрисоединенныйФайл, + ДвоичныеДанныеИлиПуть, + ДатаДляРазмещенияВТоме = Неопределено, + ЗаполнятьСлужебныйРеквизитХранилище = Ложь, + ТомДляРазмещенияДанных = Неопределено) Экспорт + + ОжидаемыеТипы = Новый Массив; + ОжидаемыеТипы.Добавить(Тип("ДвоичныеДанные")); + ОжидаемыеТипы.Добавить(Тип("Строка")); + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("РаботаСФайламиСлужебный.ДобавитьФайлВТом", + "ДвоичныеДанныеИлиПуть", ДвоичныеДанныеИлиПуть, Новый ОписаниеТипов(ОжидаемыеТипы)); + + Если ТипЗнч(ПрисоединенныйФайл) = Тип("Структура") + И Не ЗначениеЗаполнено(ПрисоединенныйФайл.Ссылка) Тогда + + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не заполнено значение свойства %1 в параметре %2 (Структура) в процедуре %3.'"), + "Ссылка", + "ПрисоединенныйФайл", + "РаботаСФайламиВТомахСлужебный.ДобавитьФайл"); + + КонецЕсли; + + Если ТипЗнч(ДвоичныеДанныеИлиПуть) = Тип("Строка") Тогда + + ФайлНаДиске = Новый Файл(ДвоичныеДанныеИлиПуть); + Если ФайлНаДиске.Существует() Тогда + РазмерФайла = ФайлНаДиске.Размер(); + РасширениеФайла = СтрЗаменить(ФайлНаДиске.Расширение, ".", ""); + Иначе + + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось добавить файл ""%1"" ни в один из томов, т.к. он отсутствует. + |Возможно, файл удален антивирусной программой. + |Обратитесь к администратору.'"), + ПрисоединенныйФайл.Наименование + "." + ПрисоединенныйФайл.Расширение); + + ВызватьИсключение ТекстОшибки; + + КонецЕсли; + + Иначе + РазмерФайла = ДвоичныеДанныеИлиПуть.Размер(); + РасширениеФайла = СтрЗаменить(ПрисоединенныйФайл.Расширение, ".", ""); + КонецЕсли; + + Если ТипХраненияФайла(РасширениеФайла, РазмерФайла) = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда + + СсылкаНаФайл = ПрисоединенныйФайл.Ссылка; + Если Не ЗначениеЗаполнено(СсылкаНаФайл) Тогда + СсылкаНаФайл = Справочники[ПрисоединенныйФайл.Метаданные().Имя].ПолучитьСсылку(); + ПрисоединенныйФайл.УстановитьСсылкуНового(СсылкаНаФайл); + КонецЕсли; + + ДанныеФайла = ?(ТипЗнч(ДвоичныеДанныеИлиПуть) = Тип("Строка"), + Новый ДвоичныеДанные(ДвоичныеДанныеИлиПуть), ДвоичныеДанныеИлиПуть); + РаботаСФайламиСлужебный.ЗаписатьФайлВИнформационнуюБазу(СсылкаНаФайл, ДанныеФайла); + + ПрисоединенныйФайл.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе; + ПрисоединенныйФайл.Том = Неопределено; + ПрисоединенныйФайл.ПутьКФайлу = ""; + + Если ЗаполнятьСлужебныйРеквизитХранилище Тогда + ПрисоединенныйФайл.ФайлХранилище = Новый ХранилищеЗначения(ДанныеФайла); + КонецЕсли; + + Возврат; + + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + + Если ЗначениеЗаполнено(ПрисоединенныйФайл.Ссылка) Тогда + РаботаСФайламиСлужебный.УдалитьЗаписьИзРегистраДвоичныеДанныеФайлов(ПрисоединенныйФайл.Ссылка); + КонецЕсли; + + ТомХранения = ?(ТомДляРазмещенияДанных = Неопределено, СвободныйТом(РазмерФайла), ТомДляРазмещенияДанных); + Если ТомХранения = Неопределено Тогда + + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось добавить файл ""%1"" ни в один из томов, т.к. в томах недостаточно места.'"), + ПрисоединенныйФайл.Наименование + "." + ПрисоединенныйФайл.Расширение); + + ВызватьИсключение ТекстОшибки; + + КонецЕсли; + + ПрисоединенныйФайл.Том = ТомХранения; + ПрисоединенныйФайл.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске; + + СвойстваФайла = СвойстваФайлаВТоме(); + ЗаполнитьЗначенияСвойств(СвойстваФайла, ПрисоединенныйФайл); + Если ТипЗнч(ПрисоединенныйФайл) = Тип("СправочникОбъект.ВерсииФайлов") Тогда + СвойстваФайла.ВладелецФайла = ОбщегоНазначения.ЗначениеРеквизитаОбъекта( + ПрисоединенныйФайл.Владелец, "ВладелецФайла"); + КонецЕсли; + + ПутьКТому = ПолныйПутьТома(ТомХранения); + ПутьКФайлу = ПолноеИмяФайлаВТоме(СвойстваФайла, ДатаДляРазмещенияВТоме); + + Попытка + + Если ТипЗнч(ДвоичныеДанныеИлиПуть) = Тип("Строка") Тогда + КопироватьФайл(ДвоичныеДанныеИлиПуть, ПутьКФайлу); + Иначе + ДвоичныеДанныеИлиПуть.Записать(ПутьКФайлу); + КонецЕсли; + + ФайлНаДиске = Новый Файл(ПутьКФайлу); + ФайлНаДиске.УстановитьУниверсальноеВремяИзменения(ПрисоединенныйФайл.ДатаМодификацииУниверсальная); + ФайлНаДиске.УстановитьТолькоЧтение(Истина); + + Исключение + + ШаблонОписанияОшибки = НСтр("ru = 'Ошибка при добавлении файла ""%1"" + |в том ""%2"" (%3): + |""%4"".'"); + + ЗаписьЖурналаРегистрации(НСтр("ru = 'Файлы.Добавление файла'", ОбщегоНазначения.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка,,, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ШаблонОписанияОшибки, + ПрисоединенныйФайл.Наименование + "." + ПрисоединенныйФайл.Расширение, + Строка(ТомХранения), + ПутьКТому, + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()))); + + Если Пользователи.ЭтоПолноправныйПользователь() Тогда + + СтрокаИсключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ШаблонОписанияОшибки, + ПрисоединенныйФайл.Наименование + "." + ПрисоединенныйФайл.Расширение, + Строка(ТомХранения), + ПутьКТому, + КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); + + Иначе + + // Сообщение обычному пользователю. + СтрокаИсключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось добавить файл: + |""%1.%2"". + | + |Обратитесь к администратору.'"), + ПрисоединенныйФайл.Наименование, + ПрисоединенныйФайл.Расширение); + + КонецЕсли; + + ВызватьИсключение СтрокаИсключения; + + КонецПопытки; + + ПрисоединенныйФайл.ПутьКФайлу = Сред(ПутьКФайлу, СтрДлина(ПутьКТому) + 1); + + Если ЗаполнятьСлужебныйРеквизитХранилище Тогда + ПрисоединенныйФайл.ФайлХранилище = Новый ХранилищеЗначения(Неопределено); + КонецЕсли; + +КонецПроцедуры + +// Копирует данные присоединенного файла по указанному пути. +// +// Параметры: +// ПрисоединенныйФайл - ОпределяемыйТип.ПрисоединенныйФайл - ссылка на элемент справочника с файлом. +// ВызыватьИсключение - Путь - полный путь (включая имя файла), куда будет скопирован файл из тома. +// +Процедура СкопироватьФайл(ПрисоединенныйФайл, Путь) Экспорт + + СвойстваФайла = СвойстваФайлаВТоме(ПрисоединенныйФайл); + КопироватьФайл(ПолноеИмяФайлаВТоме(СвойстваФайла), Путь); + + // Исходному файлу мог быть установлен атрибут "Только чтение". + // Унаследованный при копировании атрибут снимается, чтобы файл можно было удалить. + СвойстваФайла = Новый Файл(Путь); + Если СвойстваФайла.Существует() + И СвойстваФайла.ПолучитьТолькоЧтение() Тогда + + СвойстваФайла.УстановитьТолькоЧтение(Ложь); + КонецЕсли; + +КонецПроцедуры + +// Обновляет данные файла в томе. +// +// Параметры: +// ПрисоединенныйФайлОбъект - ОпределяемыйТип.ПрисоединенныйФайлОбъект - элемент справочника с файлом. +// ДвоичныеДанные - данные, которые будут помещены в том. +// +Процедура ОбновитьФайл(ПрисоединенныйФайлОбъект, ДвоичныеДанные) Экспорт + + Попытка + + СвойстваФайла = СвойстваФайлаВТоме(); + ЗаполнитьЗначенияСвойств(СвойстваФайла, ПрисоединенныйФайлОбъект); + + ПутьКФайлу = ПолноеИмяФайлаВТоме(СвойстваФайла); + УдалитьФайл(ПутьКФайлу); + + ДобавитьФайл(ПрисоединенныйФайлОбъект, ДвоичныеДанные); + ПрисоединенныйФайлОбъект.Записать(); + + Исключение + + ПрисоединенныйФайлСсылка = ПрисоединенныйФайлОбъект.Ссылка; + ТекстОшибки = НСтр("ru = 'Ошибка, при сохранении файла в томе: + |""%1"". + | + |Ссылка на файл: ""%2"".'"); + + ИнформацияОбОшибке = ИнформацияОбОшибке(); + ЗаписьЖурналаРегистрации( + НСтр("ru = 'Файлы.Запись файла на диск'", ОбщегоНазначения.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, + Метаданные.Справочники[ПрисоединенныйФайлСсылка.Метаданные().Имя], + ПрисоединенныйФайлСсылка, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ТекстОшибки, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке), ПрисоединенныйФайлСсылка)); + + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ТекстОшибки, КраткоеПредставлениеОшибки(ИнформацияОбОшибке), ПрисоединенныйФайлСсылка); + + КонецПопытки; + +КонецПроцедуры + +// Удаляет файл из тома и обновляет информацию о хранении файла в информационной базе. +// +// Параметры: +// ПрисоединенныйФайлОбъект - ОпределяемыйТип.ПрисоединенныйФайлОбъект - элемент справочника с файлом. +// ТекстКомментария - Строка - комментарий, который будет помещен в элемент справочника, данные +// которого удаляются из тома. +// +Процедура УдалитьДанныеФайла(ПрисоединенныйФайлОбъект, ТекстКомментария = "") Экспорт + + ПрисоединенныйФайлОбъект.Том = Справочники.ТомаХраненияФайлов.ПустаяСсылка(); + ПрисоединенныйФайлОбъект.ПутьКФайлу = ""; + ПрисоединенныйФайлОбъект.ПометкаУдаления = Истина; + Если ТипЗнч(ПрисоединенныйФайлОбъект) = Тип("СправочникОбъект.ВерсииФайлов") Тогда + ПрисоединенныйФайлОбъект.Комментарий = ТекстКомментария + ПрисоединенныйФайлОбъект.Комментарий; + Иначе + ПрисоединенныйФайлОбъект.Описание = ТекстКомментария + ПрисоединенныйФайлОбъект.Описание; + КонецЕсли; + ПрисоединенныйФайлОбъект.Записать(); + + СвойстваФайла = СвойстваФайлаВТоме(); + ЗаполнитьЗначенияСвойств(СвойстваФайла, ПрисоединенныйФайлОбъект); + УдалитьФайл(ПолноеИмяФайлаВТоме(СвойстваФайла)); + +КонецПроцедуры + +// Удаляет файл из тома. +// +// Параметры: +// ПутьКФайлу - Строка - путь к удаляемому файлу. +// +Процедура УдалитьФайл(ПутьКФайлу) Экспорт + + ФайлНаДиске = Новый Файл(ПутьКФайлу); + Если ФайлНаДиске.Существует() Тогда + + КаталогФайла = ФайлНаДиске.Путь; + ФайлНаДиске.УстановитьТолькоЧтение(Ложь); + + Попытка + + УдалитьФайлы(ПутьКФайлу); + + // Удаляем каталог файла, если после удаления файла каталог стал пустым. + ФайлыВКаталоге = НайтиФайлы(КаталогФайла, ПолучитьМаскуВсеФайлы()); + Если ФайлыВКаталоге.Количество() = 0 Тогда + УдалитьФайлы(КаталогФайла); + КонецЕсли; + + Исключение + + ЗаписьЖурналаРегистрации( + НСтр("ru = 'Файлы.Удаление файлов в томе'", ОбщегоНазначения.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, + , + , + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + + КонецПопытки; + + КонецЕсли; + +КонецПроцедуры + +// Переименовывает файл в томе. +// +// Параметры: +// ПрисоединенныйФайл - ОпределяемыйТип.ПрисоединенныйФайл - ссылка на элемент справочника с файлом. +// НовоеИмя - Строка - имя, которое будет установлено файлу в томе. +// СтароеИмя - Строка - текущее имя файла в томе. Если параметр не заполнен, текущим +// именем будет считаться наименование присоединенного файла. +// УникальныйИдентификатор - УникальныйИдентификатор - идентификатор формы для блокировки присоединенного +// файла при записи нового пути к файлу в томе. +// +Процедура ПереименоватьФайл(ПрисоединенныйФайл, НовоеИмя, + СтароеИмя = "", УникальныйИдентификатор = Неопределено) Экспорт + + НачатьТранзакцию(); + Попытка + + БлокировкаДанных = Новый БлокировкаДанных; + ЭлементБлокировкиДанных = БлокировкаДанных.Добавить( + Метаданные.НайтиПоТипу(ТипЗнч(ПрисоединенныйФайл)).ПолноеИмя()); + ЭлементБлокировкиДанных.УстановитьЗначение("Ссылка", ПрисоединенныйФайл); + БлокировкаДанных.Заблокировать(); + + ПрисоединенныйФайлОбъект = ПрисоединенныйФайл.ПолучитьОбъект(); + ЗаблокироватьДанныеДляРедактирования(ПрисоединенныйФайл, , УникальныйИдентификатор); + + СвойстваФайла = СвойстваФайлаВТоме(); + ЗаполнитьЗначенияСвойств(СвойстваФайла, ПрисоединенныйФайлОбъект); + + ПутьКТому = ПолныйПутьТома(ПрисоединенныйФайлОбъект.Том); + ТекущийПутьКФайлу = ПолноеИмяФайлаВТоме(СвойстваФайла); + + ФайлНаДиске = Новый Файл(ТекущийПутьКФайлу); + ИмяДляЗамены = ?(ПустаяСтрока(СтароеИмя), ПрисоединенныйФайлОбъект.Наименование, СтароеИмя); + НовыйПутьКФайлу = ФайлНаДиске.Путь + + СтрЗаменить(ФайлНаДиске.ИмяБезРасширения, ИмяДляЗамены, НовоеИмя) + + ФайлНаДиске.Расширение; + + ПереместитьФайл(ТекущийПутьКФайлу, НовыйПутьКФайлу); + + ПрисоединенныйФайлОбъект.ПутьКФайлу = СтрЗаменить(НовыйПутьКФайлу, ПутьКТому, ""); + ПрисоединенныйФайлОбъект.Записать(); + + РазблокироватьДанныеДляРедактирования(ПрисоединенныйФайл, УникальныйИдентификатор); + ЗафиксироватьТранзакцию(); + + Исключение + ОтменитьТранзакцию(); + РазблокироватьДанныеДляРедактирования(ПрисоединенныйФайл, УникальныйИдентификатор); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +// Инициализирует структуру свойств файла для получения полного пути к файлу в томе. +// +// Параметры: +// Файл - ОпределяемыйТип.ПрисоединенныйФайл, Неопределено - если значение параметра заполнено, свойства +// заполняются значениями одноименных реквизитов файла, иначе - свойства принимают значение Неопределено. +// +// Возвращаемое значение: +// СвойстваФайла - Структура со свойствами: +// * Том - СправочникСсылка.ТомаХраненияФайлов, Неопределено - том, в котором хранится файл. +// * ПутьКФайлу - Строка - путь к файлу в томе. +// * ВладелецФайла - ОпределяемыйТип.ВладелецПрисоединенныхФайлов, ОпределяемыйТип.ВладелецФайлов, +// Неопределено - владелец файла. +// * Наименование - Строка - наименование файла. +// * Расширение - Строка - расширение файла. +// +Функция СвойстваФайлаВТоме(Файл = Неопределено) Экспорт + + ИменаРеквизитов = "Том, ПутьКФайлу, Наименование, Расширение, ВладелецФайла"; + + СвойстваФайла = Новый Структура(ИменаРеквизитов); + Если ЗначениеЗаполнено(Файл) Тогда + + Если ТипЗнч(Файл) = Тип("СправочникСсылка.ВерсииФайлов") Тогда + ИменаРеквизитов = СтрЗаменить(ИменаРеквизитов, "ВладелецФайла", "Владелец") + ", НомерВерсии"; + КонецЕсли; + + РеквизитыФайла = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Файл, ИменаРеквизитов); + ЗаполнитьЗначенияСвойств(СвойстваФайла, РеквизитыФайла); + + Если РеквизитыФайла.Свойство("Владелец") Тогда + СвойстваФайла.ВладелецФайла = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(РеквизитыФайла.Владелец, "ВладелецФайла"); + КонецЕсли; + + КонецЕсли; + + Если Не СвойстваФайла.Свойство("НомерВерсии") Тогда + СвойстваФайла.Вставить("НомерВерсии", ""); + КонецЕсли; + + Возврат СвойстваФайла; + +КонецФункции + +// Возвращает полное имя для файла в томе с учетом настроек +// хранения файлов в томах и значений разделителя. +// +// Параметры: +// СвойстваФайла - Структура - См. СвойстваФайлаВТоме. +// +Функция ПолноеИмяФайлаВТоме(СвойстваФайла, ДатаДляРазмещенияВТоме = Неопределено) Экспорт + + Разделитель = ПолучитьРазделительПути(); + + КорневойКаталог = ПолныйПутьТома(СвойстваФайла.Том); + Если Не ПустаяСтрока(СвойстваФайла.ПутьКФайлу) Тогда + Возврат КорневойКаталог + СвойстваФайла.ПутьКФайлу; + КонецЕсли; + + КорневойКаталог = КорневойКаталог + ?(Прав(КорневойКаталог, 1) = Разделитель, "", Разделитель); + Если СоздаватьПодкаталогиСИменамиВладельцев() Тогда + КорневойКаталог = КорневойКаталог + ИмяКаталогаВладельцаФайла(СвойстваФайла.ВладелецФайла) + Разделитель; + КонецЕсли; + + ДатаРазмещения = ?(ЗначениеЗаполнено(ДатаДляРазмещенияВТоме), ДатаДляРазмещенияВТоме, ТекущаяДатаСеанса()); + КорневойКаталог = КорневойКаталог + Формат(ДатаРазмещения, "ДФ=ггггММдд") + Разделитель; + + ИмяФайла = СвойстваФайла.Наименование + + ?(ЗначениеЗаполнено(СвойстваФайла.НомерВерсии), "." + СвойстваФайла.НомерВерсии, "") + + ?(СтрНайти(СвойстваФайла.Расширение, ".") > 0, СвойстваФайла.Расширение, "." + СвойстваФайла.Расширение); + + Возврат КорневойКаталог + + РаботаСФайламиСлужебныйКлиентСервер.ПолучитьУникальноеИмяСПутем(КорневойКаталог, ИмяФайла); + +КонецФункции + +// Возвращает полный путь к корневому каталогу тома хранения файлов. +// +// Параметры: +// Том - СправочникСсылка.ТомаХраненияФайлов - том, путь к корневому каталогу которого необходимо получить. +// +// Возвращаемое значение: +// КорневойКаталог - Строка - полный путь к корневому каталогу тома. +// +Функция ПолныйПутьТома(Том) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + КорневойКаталог = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Том, + ?(ОбщегоНазначения.ЭтоWindowsСервер(), "ПолныйПутьWindows", "ПолныйПутьLinux")); + + Если ОбщегоНазначения.РазделениеВключено() Тогда + МодульРаботаВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("РаботаВМоделиСервиса"); + ЗначениеРазделителя = ?(МодульРаботаВМоделиСервиса.ИспользованиеРазделителяСеанса(), + МодульРаботаВМоделиСервиса.ЗначениеРазделителяСеанса(), ""); + Иначе + ЗначениеРазделителя = ""; + КонецЕсли; + + Возврат СтрЗаменить(КорневойКаталог, "%z", ЗначениеРазделителя); + +КонецФункции + +// Возвращает суммарный размер всех файлов в томе в байтах. +// +// Параметры: +// Том - СправочникСсылка.ТомаХраненияФайлов - том, размер которого необходимо посчитать. +// +// Возвращаемое значение: +// РазмерФайловВТоме - Число - суммарный размер файлов в томе. +// +Функция ОбъемТома(Том) Экспорт + + ОбъемТома = 0; + Если Не ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда + Возврат ОбъемТома; + КонецЕсли; + + Запрос = Новый Запрос; + ВсеИменаСправочников = Новый Соответствие; + ТипыПрисоединенныхФайлов = Метаданные.ОпределяемыеТипы.ПрисоединенныйФайл.Тип.Типы(); + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ЕСТЬNULL(СУММА(ПрисоединенныеФайлы.Размер), 0) КАК РазмерФайлов + |ИЗ + | Справочник.Файлы КАК ПрисоединенныеФайлы + |ГДЕ + | ПрисоединенныеФайлы.Том = &Том + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | ЕСТЬNULL(СУММА(Версии.Размер), 0) + |ИЗ + | Справочник.ВерсииФайлов КАК Версии + |ГДЕ + | Версии.Том = &Том"; + + Для Каждого Тип Из ТипыПрисоединенныхФайлов Цикл + + Если Тип = Тип("СправочникСсылка.Файлы") + Или Тип = Тип("СправочникСсылка.ВерсииФайлов") + Или Тип = Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных") Тогда + + Продолжить; + КонецЕсли; + + ТекстЗапросаПоСправочнику = "ВЫБРАТЬ + | ЕСТЬNULL(СУММА(ПрисоединенныеФайлы.Размер), 0) + |ИЗ + | &ИмяСправочника КАК ПрисоединенныеФайлы + |ГДЕ + | ПрисоединенныеФайлы.Том = &Том"; + + Запрос.Текст = Запрос.Текст + " + | + |ОБЪЕДИНИТЬ ВСЕ + | + |" + СтрЗаменить(ТекстЗапросаПоСправочнику, "&ИмяСправочника", + Метаданные.НайтиПоТипу(Тип).ПолноеИмя()); + + КонецЦикла; + + Запрос.Параметры.Вставить("Том", Том); + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + ОбъемТома = ОбъемТома + Выборка.РазмерФайлов; + КонецЦикла; + + Возврат ОбъемТома; + +КонецФункции + +#Область КонтрольВеденияУчета + +// См. КонтрольВеденияУчетаПереопределяемый.ПриОпределенииПроверок +Процедура ПриОпределенииПроверок(ГруппыПроверок, Проверки) Экспорт + + Проверка = Проверки.Добавить(); + Проверка.ИдентификаторГруппы = "СистемныеПроверки"; + Проверка.Наименование = НСтр("ru = 'Поиск ссылок на несуществующие файлы в томах хранения'"); + Проверка.Причины = НСтр("ru = 'Файл был физически удален или перемещен на диске вследствие работы антивирусных программ, + |непреднамеренных действий администратора и.т.д.'"); + Проверка.Рекомендация = НСтр("ru = '• Пометить файл в программе на удаление; + |• Или восстановить файл на диске в томе из резервной копии.'"); + Проверка.Идентификатор = "СтандартныеПодсистемы.ПроверкаСсылокНаНесуществующиеФайлыВТоме"; + Проверка.ОбработчикПроверки = "РаботаСФайламиВТомахСлужебный.ПроверкаСсылокНаНесуществующиеФайлыВТоме"; + Проверка.КонтекстПроверокВеденияУчета = "СистемныеПроверки"; + Проверка.Отключена = Истина; + +КонецПроцедуры + +// Исполняет проверку несуществующих файлов на диске, в случае когда присоединенные файлы хранятся в томах. +// +Процедура ПроверкаСсылокНаНесуществующиеФайлыВТоме(Проверка, ПараметрыПроверки) Экспорт + + Если ОбщегоНазначения.РазделениеВключено() + Или Не ХранитьФайлыВТомахНаДиске() Тогда + Возврат; + КонецЕсли; + + ДоступныеТома = ДоступныеТома(ПараметрыПроверки); + Если ДоступныеТома.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + МодульРаботаВМоделиСервиса = Неопределено; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса") Тогда + МодульРаботаВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("РаботаВМоделиСервиса"); + КонецЕсли; + + ВидыОбъектовМетаданных = Новый Массив; + ВидыОбъектовМетаданных.Добавить(Метаданные.Справочники); + ВидыОбъектовМетаданных.Добавить(Метаданные.Документы); + ВидыОбъектовМетаданных.Добавить(Метаданные.ПланыСчетов); + ВидыОбъектовМетаданных.Добавить(Метаданные.ПланыВидовХарактеристик); + ВидыОбъектовМетаданных.Добавить(Метаданные.Задачи); + + Для Каждого ВидОбъектаМетаданных Из ВидыОбъектовМетаданных Цикл + Для Каждого ОбъектМетаданных Из ВидОбъектаМетаданных Цикл + Если МодульРаботаВМоделиСервиса <> Неопределено + И Не МодульРаботаВМоделиСервиса.ЭтоРазделенныйОбъектМетаданных(ОбъектМетаданных.ПолноеИмя()) Тогда + Продолжить; + КонецЕсли; + Если Не ПроверитьОбъектПрисоединенныхФайлов(ОбъектМетаданных) Тогда + Продолжить; + КонецЕсли; + ПоискСсылокНаНесуществующиеФайлыВТомах(ОбъектМетаданных, ПараметрыПроверки, ДоступныеТома); + КонецЦикла; + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти + +#Область ПараметрыХранения + +// Возвращает признак того, что файлы могут храниться в томах на диске. +// +// Возвращаемое значение: +// Булево - Истина, если указано хранить файлы в томах на диске, иначе - Ложь. +// +Функция ХранитьФайлыВТомахНаДиске() Экспорт + + УстановитьПривилегированныйРежим(Истина); + СпособХраненияФайлов = Константы.СпособХраненияФайлов.Получить(); + Возврат СпособХраненияФайлов = "ВТомахНаДиске" + Или СпособХраненияФайлов = "ВИнформационнойБазеИТомахНаДиске"; + +КонецФункции + +// Возвращает информацию о настройках хранения файлов в информационной базе. +// Имеет смысл в случае хранения файлов в томах и информационной базе. +// +// Возвращаемое значение: +// Структура - настройки хранения файлов в ИБ. Свойства: +// * РасширенияФайлов - Строка - расширения файлов, которые хранятся в ИБ. +// Разделены пробелом. +// * МаксимальныйРазмер - Число - максимальный размер файла, сохраняемого +// в ИБ, в байтах. +// +Функция ПараметрыХраненияФайловВИнформационнойБазе() Экспорт + + УстановитьПривилегированныйРежим(Истина); + Возврат Константы.ПараметрыХраненияФайловВИБ.Получить().Получить(); + +КонецФункции + +// Устанавливает настройки хранения файлов в информационной базе. +// Имеет смысл в случае хранения файлов в томах и информационной базе. +// +// Параметры: +// ПараметрыХранения - Структура - настройки хранения файлов в ИБ. Свойства: +// * РасширенияФайлов - Строка - расширения файлов, которые хранятся в ИБ. +// Разделены пробелом. +// * МаксимальныйРазмер - Число - максимальный размер файла, сохраняемого +// в ИБ, в байтах. +// +Процедура УстановитьПараметрыХраненияФайловВИнформационнойБазе(ПараметрыХранения) Экспорт + + ХранилищеПараметров = Новый ХранилищеЗначения(ПараметрыХранения); + Константы.ПараметрыХраненияФайловВИБ.Установить(ХранилищеПараметров); + +КонецПроцедуры + +#КонецОбласти + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +#Область НастройкиХраненияФайловВТомах + +// Возвращает признак того, что файлы могут храниться и в томах на диске и в информационной базе. +// +// Возвращаемое значение: +// Булево - Истина, если файлы могут храниться и в томах на диске и в информационной базе, иначе - Ложь. +// +Функция ХранитьФайлыВТомахНаДискеИИнформационнойБазе() + + УстановитьПривилегированныйРежим(Истина); + Возврат Константы.СпособХраненияФайлов.Получить() = "ВИнформационнойБазеИТомахНаДиске"; + +КонецФункции + +// Возвращает признак того, что файлы в томах хранятся в подкаталогах с именем владельца. +// +// Возвращаемое значение: +// Булево - Истина, если файлы в томе хранятся в подкаталогах с именем объекта-владельца, иначе - Ложь. +// +Функция СоздаватьПодкаталогиСИменамиВладельцев() + + УстановитьПривилегированныйРежим(Истина); + Возврат Константы.СоздаватьПодкаталогиСИменамиВладельцев.Получить(); + +КонецФункции + +#КонецОбласти + +#Область ОбменДанными + +// Помещает двоичные данные файла из тома в служебный реквизит ФайлХранилище. +// +Процедура ПоместитьФайлВРеквизитСправочника(ЭлементДанных) Экспорт + + Попытка + ДанныеФайла = ДанныеФайла(ЭлементДанных.Ссылка); + Исключение + + ДанныеФайла = Неопределено; + ЗаписьЖурналаРегистрации( + НСтр("ru = 'Файлы.Не удалось отправить файл при обмене данными'", ОбщегоНазначения.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка,,, + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + + КонецПопытки; + + ЭлементДанных.Том = Справочники.ТомаХраненияФайлов.ПустаяСсылка(); + ЭлементДанных.ПутьКФайлу = ""; + ЭлементДанных.ФайлХранилище = Новый ХранилищеЗначения(ДанныеФайла); + ЭлементДанных.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе; + +КонецПроцедуры + +// Размещает файлы в томах, устанавливая ссылки в ВерсииФайла. +// +Процедура ДобавитьФайлыВТома(ПутьКАрхивуWindows, ПутьКАрхивуLinux) Экспорт + + ПолноеИмяФайлаZip = ""; + Если ОбщегоНазначения.ЭтоWindowsСервер() Тогда + ПолноеИмяФайлаZip = ПутьКАрхивуWindows; + Иначе + ПолноеИмяФайлаZip = ПутьКАрхивуLinux; + КонецЕсли; + + ИмяКаталога = ФайловаяСистема.СоздатьВременныйКаталог(); + СоздатьКаталог(ИмяКаталога); + + ZIP = Новый ЧтениеZipФайла(ПолноеИмяФайлаZip); + ZIP.ИзвлечьВсе(ИмяКаталога, РежимВосстановленияПутейФайловZIP.НеВосстанавливать); + + СоответствиеПутейФайлов = Новый Соответствие; + + Для Каждого ZIPЭлемент Из ZIP.Элементы Цикл + ПолныйПутьФайла = ИмяКаталога + "\" + ZIPЭлемент.Имя; + УникальныйИдентификатор = ZIPЭлемент.ИмяБезРасширения; + + СоответствиеПутейФайлов.Вставить(УникальныйИдентификатор, ПолныйПутьФайла); + КонецЦикла; + + НачатьТранзакцию(); + Попытка + ДобавитьФайлыВТомаПриРазмещении(СоответствиеПутейФайлов, РаботаСФайламиСлужебный.ТипХраненияФайлов()); + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + + ФайловаяСистема.УдалитьВременныйКаталог(ИмяКаталога); + +КонецПроцедуры + +// Добавляет файл в тома при выполнении команды "разместить файлы начального образа". +// Параметры: +// СоответствиеПутейФайлов - Соответствие - соответствие УникальногоИдентификатора файла и пути на диске к файлу. +// ТипХраненияФайла - Перечисления.ТипыХраненияФайлов - тип хранения файлов. +Процедура ДобавитьФайлыВТомаПриРазмещении(СоответствиеПутейФайлов, ТипХраненияФайла) + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ВерсииФайлов.Ссылка КАК Ссылка + |ИЗ + | Справочник.ВерсииФайлов КАК ВерсииФайлов + |ГДЕ + | ВерсииФайлов.ТипХраненияФайла = ЗНАЧЕНИЕ(Перечисление.ТипыХраненияФайлов.ВТомахНаДиске)"; + ВерсииФайлов = Запрос.Выполнить().Выгрузить(); + + БлокировкаДанных = Новый БлокировкаДанных; + ЭлементБлокировкиДанных = БлокировкаДанных.Добавить("Справочник.ВерсииФайлов"); + ЭлементБлокировкиДанных.ИсточникДанных = ВерсииФайлов; + ЭлементБлокировкиДанных.ИспользоватьИзИсточникаДанных("Ссылка", "Ссылка"); + БлокировкаДанных.Заблокировать(); + + Для Каждого Версия Из ВерсииФайлов Цикл + + Объект = Версия.Ссылка.ПолучитьОбъект(); + Объект.Заблокировать(); + + УникальныйИдентификатор = Строка(Объект.Ссылка.УникальныйИдентификатор()); + + ПолныйПутьНовый = ""; + ПолныйПутьФайлаНаДиске = СоответствиеПутейФайлов.Получить(УникальныйИдентификатор); + Если ПолныйПутьФайлаНаДиске = Неопределено Тогда + Продолжить; + КонецЕсли; + + ХранилищеФайла = Неопределено; + Если ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда + + // В базе-приемнике файлы должны храниться в информационной базе - значит там их и разместим (даже если в исходной + // базе они были в томах). + + Объект.Том = Справочники.ТомаХраненияФайлов.ПустаяСсылка(); + Объект.ПутьКФайлу = ""; + Объект.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе; + + ДвоичныеДанные = Новый ДвоичныеДанные(ПолныйПутьФайлаНаДиске); + ХранилищеФайла = Новый ХранилищеЗначения(ДвоичныеДанные); + + Иначе + + // В базе-приемнике файлы должны храниться в томах на диске - переместим разархивированный файл на том. + ФайлИсходный = Новый Файл(ПолныйПутьФайлаНаДиске); + ПолныйПутьНовый = ФайлИсходный.Путь + Объект.Наименование + "." + Объект.Расширение; + ПереместитьФайл(ПолныйПутьФайлаНаДиске, ПолныйПутьНовый); + + ДобавитьФайл(Объект, ПолныйПутьНовый); + + КонецЕсли; + + Объект.ДополнительныеСвойства.Вставить("РазмещениеФайловВТомах", Истина); // Чтобы прошла запись подписанных файлов. + ОбновлениеИнформационнойБазы.ЗаписатьОбъект(Объект); + + Если ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда + РаботаСФайламиСлужебный.ЗаписатьФайлВИнформационнуюБазу(Объект.Ссылка, ХранилищеФайла); + КонецЕсли; + + Если Не ПустаяСтрока(ПолныйПутьНовый) Тогда + УдалитьФайлы(ПолныйПутьНовый); + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти + +#Область ОчисткаНенужныхФайлов + +Процедура ПроверитьЦелостностьФайлов(ТаблицаФайловНаДиске, Том) Экспорт + + ТипыФайлов = Метаданные.ОпределяемыеТипы.ПрисоединенныйФайл.Тип.Типы(); + + Запрос = Новый Запрос; + ДобавитьПсевдонимПоля = Истина; + Для Каждого СправочникФайлов Из ТипыФайлов Цикл + + МетаданныеСправочника = Метаданные.НайтиПоТипу(СправочникФайлов); + Если МетаданныеСправочника.Реквизиты.Найти("ВладелецФайла") <> Неопределено Тогда + + ЕстьВозможностьХранитьВерсии = ОбщегоНазначения.ЕстьРеквизитОбъекта("ТекущаяВерсия", МетаданныеСправочника); + + Запрос.Текст = Запрос.Текст + ?(ПустаяСтрока(Запрос.Текст),"", " ОБЪЕДИНИТЬ ВСЕ") + " + | + |ВЫБРАТЬ + | СправочникПрисоединенныеФайлы.Ссылка " + ?(ДобавитьПсевдонимПоля, "КАК Ссылка,",",") + " + | СправочникПрисоединенныеФайлы.ВладелецФайла " + ?(ДобавитьПсевдонимПоля, "КАК ВладелецФайла,",",") + " + | СправочникПрисоединенныеФайлы.Расширение " + ?(ДобавитьПсевдонимПоля, "КАК Расширение,",",") + " + | СправочникПрисоединенныеФайлы.Наименование " + ?(ДобавитьПсевдонимПоля, "КАК Наименование,",",") + " + | СправочникПрисоединенныеФайлы.Том " + ?(ДобавитьПсевдонимПоля, "КАК Том,",",") + " + | СправочникПрисоединенныеФайлы.Изменил " + ?(ДобавитьПсевдонимПоля, "КАК Отредактировал,",",") + " + | СправочникПрисоединенныеФайлы.ДатаМодификацииУниверсальная " + ?(ДобавитьПсевдонимПоля, "КАК ДатаМодификацииФайла,",",") + " + | СправочникПрисоединенныеФайлы.ПутьКФайлу " + ?(ДобавитьПсевдонимПоля, "КАК ПутьКФайлу","") + " + |ИЗ + | Справочник." + МетаданныеСправочника.Имя + " КАК СправочникПрисоединенныеФайлы + |ГДЕ + | СправочникПрисоединенныеФайлы.Том = &Том + | И СправочникПрисоединенныеФайлы.ТипХраненияФайла = ЗНАЧЕНИЕ(Перечисление.ТипыХраненияФайлов.ВТомахНаДиске) + | И НЕ СправочникПрисоединенныеФайлы.ПометкаУдаления"; + + Если ЕстьВозможностьХранитьВерсии Тогда + СправочникВерсийФайлов = Метаданные.НайтиПоТипу(МетаданныеСправочника.Реквизиты.ТекущаяВерсия.Тип.Типы()[0]); + Запрос.Текст = Запрос.Текст + " + | И СправочникПрисоединенныеФайлы.ТекущаяВерсия = ЗНАЧЕНИЕ(Справочник." + СправочникВерсийФайлов.Имя + ".ПустаяСсылка)"; + КонецЕсли; + + Если ДобавитьПсевдонимПоля Тогда + ДобавитьПсевдонимПоля = Ложь; + КонецЕсли; + + ИначеЕсли МетаданныеСправочника.Реквизиты.Найти("РодительскаяВерсия") <> Неопределено Тогда + + Запрос.Текст = Запрос.Текст + ?(ПустаяСтрока(Запрос.Текст),"", " ОБЪЕДИНИТЬ ВСЕ") + " + | + |ВЫБРАТЬ + | СправочникПрисоединенныеФайлы.Ссылка " + ?(ДобавитьПсевдонимПоля, "КАК Ссылка,",",") + " + | СправочникПрисоединенныеФайлы.Владелец.ВладелецФайла " + ?(ДобавитьПсевдонимПоля, "КАК ВладелецФайла,",",") + " + | СправочникПрисоединенныеФайлы.Расширение " + ?(ДобавитьПсевдонимПоля, "КАК Расширение,",",") + " + | СправочникПрисоединенныеФайлы.Наименование " + ?(ДобавитьПсевдонимПоля, "КАК Наименование,",",") + " + | СправочникПрисоединенныеФайлы.Том " + ?(ДобавитьПсевдонимПоля, "КАК Том,",",") + " + | СправочникПрисоединенныеФайлы.Автор " + ?(ДобавитьПсевдонимПоля, "КАК Отредактировал,",",") + " + | СправочникПрисоединенныеФайлы.ДатаМодификацииУниверсальная " + ?(ДобавитьПсевдонимПоля, "КАК ДатаМодификацииФайла,",",") + " + | СправочникПрисоединенныеФайлы.ПутьКФайлу " + ?(ДобавитьПсевдонимПоля, "КАК ПутьКФайлу","") + " + |ИЗ + | Справочник." + МетаданныеСправочника.Имя + " КАК СправочникПрисоединенныеФайлы + |ГДЕ + | СправочникПрисоединенныеФайлы.Том = &Том + | И СправочникПрисоединенныеФайлы.ТипХраненияФайла = ЗНАЧЕНИЕ(Перечисление.ТипыХраненияФайлов.ВТомахНаДиске) + | И НЕ СправочникПрисоединенныеФайлы.ПометкаУдаления"; + + Если ДобавитьПсевдонимПоля Тогда + ДобавитьПсевдонимПоля = Ложь; + КонецЕсли; + + КонецЕсли; + + КонецЦикла; + + Запрос.УстановитьПараметр("Том", Том); + Выборка = Запрос.Выполнить().Выбрать(); + + СвойстваФайла = СвойстваФайлаВТоме(); + СвойстваФайла.Том = Том; + + Пока Выборка.Следующий() Цикл + + ВерсияСсылка = Выборка.Ссылка; + ПутьКФайлу = Выборка.ПутьКФайлу; + + Если ЗначениеЗаполнено(Выборка.ПутьКФайлу) + И ЗначениеЗаполнено(Выборка.Том) Тогда + + СвойстваФайла.ПутьКФайлу = ПутьКФайлу; + + ПолныйПутьФайла = ПолноеИмяФайлаВТоме(СвойстваФайла); + СуществующийФайл = ТаблицаФайловНаДиске.НайтиСтроки(Новый Структура("ПолноеИмя", ПолныйПутьФайла)); + Если СуществующийФайл.Количество() = 0 Тогда + + НесуществующийФайл = ТаблицаФайловНаДиске.Добавить(); + НесуществующийФайл.СтатусПроверки = НСтр("ru = 'Отсутствуют данные в томе на диске'"); + НесуществующийФайл.Файл = ВерсияСсылка; + НесуществующийФайл.ПолноеИмя = ПолныйПутьФайла; + НесуществующийФайл.Расширение = ВерсияСсылка.Расширение; + НесуществующийФайл.Имя = ВерсияСсылка.Наименование; + НесуществующийФайл.Том = Том; + НесуществующийФайл.Отредактировал = Выборка.Отредактировал; + НесуществующийФайл.ДатаРедактирования = Выборка.ДатаМодификацииФайла; + НесуществующийФайл.Количество = 1; + + Иначе + + СуществующийФайл[0].Файл = ВерсияСсылка; + СуществующийФайл[0].СтатусПроверки = НСтр("ru = 'Целостные данные'"); + + КонецЕсли; + + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти + +#Область КонтрольВеденияУчета + +Функция ДоступныеТома(ПараметрыПроверки) + + Запрос = Новый Запрос( + "ВЫБРАТЬ + | ТомаХраненияФайлов.Ссылка КАК СсылкаНаТом, + | ТомаХраненияФайлов.Наименование КАК ПредставлениеТома, + | ВЫБОР + | КОГДА &ЭтоWindowsСервер + | ТОГДА ТомаХраненияФайлов.ПолныйПутьWindows + | ИНАЧЕ ТомаХраненияФайлов.ПолныйПутьLinux + | КОНЕЦ КАК ПолныйПуть + |ИЗ + | Справочник.ТомаХраненияФайлов КАК ТомаХраненияФайлов"); + Запрос.УстановитьПараметр("ЭтоWindowsСервер", ОбщегоНазначения.ЭтоWindowsСервер()); + Результат = Запрос.Выполнить().Выбрать(); + + ДоступныеТома = Новый Массив; + Пока Результат.Следующий() Цикл + + Если ТомДоступен(Результат.СсылкаНаТом, Результат.ПредставлениеТома, Результат.ПолныйПуть, ПараметрыПроверки) Тогда + ДоступныеТома.Добавить(Результат.СсылкаНаТом); + КонецЕсли; + + КонецЦикла; + + Возврат ДоступныеТома; + +КонецФункции + +Функция ТомДоступен(Том, ПредставлениеТома, Путь, ПараметрыПроверки) + + Если ПустаяСтрока(Путь) Тогда + + УточнениеПроблемы = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'У тома хранения файлов ""%1"" не задан путь к сетевому каталогу. Сохранение файлов в него невозможно.'"), + ПредставлениеТома); + ЗафиксироватьПроблемуСТомом(Том, УточнениеПроблемы, ПараметрыПроверки); + Возврат Ложь; + + КонецЕсли; + + ИмяКаталогаТестовое = Путь + "ПроверкаДоступа" + ПолучитьРазделительПути(); + + Попытка + СоздатьКаталог(ИмяКаталогаТестовое); + УдалитьФайлы(ИмяКаталогаТестовое); + Исключение + + УточнениеПроблемы = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Том хранения файлов ""%1"" недоступен по причине: + |%2 + | + |Указанный сетевой каталог мог быть отключен или к нему отсутствуют права доступа. + |Невозможна работа со всеми файлами, хранящимися в этом томе.'"), + Путь, КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); + УточнениеПроблемы = УточнениеПроблемы + Символы.ПС; + ЗафиксироватьПроблемуСТомом(Том, УточнениеПроблемы, ПараметрыПроверки); + Возврат Ложь; + + КонецПопытки; + + Возврат Истина; + +КонецФункции + +Процедура ЗафиксироватьПроблемуСТомом(Том, УточнениеПроблемы, ПараметрыПроверки) + + МодульКонтрольВеденияУчета = ОбщегоНазначения.ОбщийМодуль("КонтрольВеденияУчета"); + + Проблема = МодульКонтрольВеденияУчета.ОписаниеПроблемы(Том, ПараметрыПроверки); + Проблема.УточнениеПроблемы = УточнениеПроблемы; + МодульКонтрольВеденияУчета.ЗаписатьПроблему(Проблема, ПараметрыПроверки); + +КонецПроцедуры + +Процедура ПоискСсылокНаНесуществующиеФайлыВТомах(ОбъектМетаданных, ПараметрыПроверки, ДоступныеТома) + + МодульКонтрольВеденияУчета = ОбщегоНазначения.ОбщийМодуль("КонтрольВеденияУчета"); + + ТекстЗапроса = + "ВЫБРАТЬ ПЕРВЫЕ 1000 + | ОбъектМетаданных.Ссылка КАК ПроблемныйОбъект, + | &ПолеВладельца КАК Владелец, + | ПРЕДСТАВЛЕНИЕССЫЛКИ(ОбъектМетаданных.Ссылка) КАК Файл, + | ПРЕДСТАВЛЕНИЕССЫЛКИ(ОбъектМетаданных.Том) КАК Том, + | ОбъектМетаданных.ПутьКФайлу КАК ПутьКФайлу, + | ОбъектМетаданных.Том КАК ТомСсылка + |ИЗ + | &ОбъектМетаданных КАК ОбъектМетаданных + |ГДЕ + | ОбъектМетаданных.Ссылка > &Ссылка + | И ОбъектМетаданных.ТипХраненияФайла = ЗНАЧЕНИЕ(Перечисление.ТипыХраненияФайлов.ВТомахНаДиске) + | И ОбъектМетаданных.Том В(&ДоступныеТома) + | + |УПОРЯДОЧИТЬ ПО + | ОбъектМетаданных.Ссылка"; + + ПолноеИмя = ОбъектМетаданных.ПолноеИмя(); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ОбъектМетаданных", ПолноеИмя); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПолеВладельца", + ?(ПолноеИмя = "Справочник.ВерсииФайлов", "ПРЕДСТАВЛЕНИЕССЫЛКИ(ОбъектМетаданных.Владелец) ", "Неопределено ")); + + Запрос = Новый Запрос(ТекстЗапроса); + Запрос.УстановитьПараметр("Ссылка", Справочники.ТомаХраненияФайлов.ПустаяСсылка()); + Запрос.УстановитьПараметр("ДоступныеТома", ДоступныеТома); + Результат = Запрос.Выполнить().Выгрузить(); + Пока Результат.Количество() > 0 Цикл + + Для Каждого СтрокаРезультата Из Результат Цикл + + СвойстваФайлаВТоме = Новый Структура("Том, ПутьКФайлу", + СтрокаРезультата.ТомСсылка, СтрокаРезультата.ПутьКФайлу); + + ПутьКФайлу = ПолноеИмяФайлаВТоме(СвойстваФайлаВТоме); + Если Не ЗначениеЗаполнено(ПутьКФайлу) Тогда + Продолжить; + КонецЕсли; + + ПроверяемыйФайл = Новый Файл(ПутьКФайлу); + Если ПроверяемыйФайл.Существует() Тогда + Продолжить; + КонецЕсли; + + СсылкаНаОбъект = СтрокаРезультата.ПроблемныйОбъект; + Если СтрокаРезультата.Владелец <> Неопределено Тогда + УточнениеПроблемы = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Версия ""%1"" файла ""%2"" не существует в томе ""%3"".'"), + СтрокаРезультата.Файл, СтрокаРезультата.Владелец, СтрокаРезультата.Том); + Иначе + УточнениеПроблемы = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Файл ""%1"" не существует в томе ""%2"".'"), + СтрокаРезультата.Файл, СтрокаРезультата.Том); + КонецЕсли; + + Проблема = МодульКонтрольВеденияУчета.ОписаниеПроблемы(СсылкаНаОбъект, ПараметрыПроверки); + + Проблема.УточнениеПроблемы = УточнениеПроблемы; + Если ОбъектМетаданных.Реквизиты.Найти("Ответственный") <> Неопределено Тогда + Проблема.Вставить("Ответственный", ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СсылкаНаОбъект, "Ответственный")); + КонецЕсли; + + МодульКонтрольВеденияУчета.ЗаписатьПроблему(Проблема, ПараметрыПроверки); + + КонецЦикла; + + Запрос.УстановитьПараметр("Ссылка", СтрокаРезультата.ПроблемныйОбъект); + Результат = Запрос.Выполнить().Выгрузить(); + + КонецЦикла; + +КонецПроцедуры + +Функция ПроверитьОбъектПрисоединенныхФайлов(ОбъектМетаданных) + + Если СтрЗаканчиваетсяНа(ОбъектМетаданных.Имя, "ПрисоединенныеФайлы") + Или ОбъектМетаданных.ПолноеИмя() = "Справочник.ВерсииФайлов" Тогда + + Возврат ОбъектМетаданных.Реквизиты.Найти("ПутьКФайлу") <> Неопределено + И ОбъектМетаданных.Реквизиты.Найти("Том") <> Неопределено; + + Иначе + Возврат Ложь; + КонецЕсли; + +КонецФункции + +#КонецОбласти + +#Область ОбновлениеИнформационнойБазы + +// См. ОбновлениеИнформационнойБазыБСП.ПриДобавленииОбработчиковОбновления. +Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "2.4.1.1"; + Обработчик.ОбщиеДанные = Истина; + Обработчик.Процедура = "РаботаСФайламиВТомахСлужебный.ОбновитьПутьТомаLinux"; + Обработчик.РежимВыполнения = "Оперативно"; + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "3.1.2.65"; + Обработчик.ОбщиеДанные = Истина; + Обработчик.Процедура = "РаботаСФайламиВТомахСлужебный.ЗаполнитьНастройкиХраненияФайлов"; + Обработчик.РежимВыполнения = "Оперативно"; + +КонецПроцедуры + +// Устанавливает значение константы СпособХраненияФайлов в зависимости от значения +// константы ХранитьФайлыВТомахНаДиске и инициализирует константу ПараметрыХраненияФайловВИБ. +// +Процедура ЗаполнитьНастройкиХраненияФайлов() Экспорт + + Константы.СпособХраненияФайлов.Установить( + ?(Константы.ХранитьФайлыВТомахНаДиске.Получить(), + "ВТомахНаДиске", "ВИнформационнойБазе")); + + УстановитьПараметрыХраненияФайловВИнформационнойБазе( + Новый Структура("РасширенияФайлов, МаксимальныйРазмер", "", 0)); + +КонецПроцедуры + +Процедура ОбновитьПутьТомаLinux() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ТомаХраненияФайлов.Ссылка + |ИЗ + | Справочник.ТомаХраненияФайлов КАК ТомаХраненияФайлов + |ГДЕ + | ТомаХраненияФайлов.ПолныйПутьLinux ПОДОБНО ""%/\"""; + + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + + НачатьТранзакцию(); + Попытка + + БлокировкаДанных = Новый БлокировкаДанных; + ЭлементБлокировкиДанных = БлокировкаДанных.Добавить("Справочник.ТомаХраненияФайлов"); + ЭлементБлокировкиДанных.УстановитьЗначение("Ссылка", Выборка.Ссылка); + БлокировкаДанных.Заблокировать(); + + Том = Выборка.Ссылка.ПолучитьОбъект(); + Том.ПолныйПутьLinux = СтрЗаменить(Том.ПолныйПутьLinux , "/\", "/"); + Том.Записать(); + + ЗафиксироватьТранзакцию(); + + Исключение + + ОтменитьТранзакцию(); + + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось обработать том хранения файлов: %1 по причине: + |%2'"), + Выборка.Ссылка, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + + ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Предупреждение, + Выборка.Ссылка.Метаданные(), Выборка.Ссылка, ТекстСообщения); + + КонецПопытки; + + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти + +#Область ВспомогательныеПроцедурыИФункции + +// Возвращает имя подкаталога в томе по типу владельца файла. +// Имя подкаталога формируется как конкатенация 30 первых символов имени +// объекта метаданных владельца файла + хеш CRC32 от остатка. +// +// Параметры: +// ВладелецФайла - ОпределяемыйТип.ВладелецПрисоединенныхФайлов, ОпределяемыйТип.ВладелецФайлов - ссылка на +// владельца файла, от метаданных которого необходимо образовать имя подкаталога. +// +// Возвращаемое значение: +// Строка - имя каталога. +// +Функция ИмяКаталогаВладельцаФайла(ВладелецФайла) + + Если Не ЗначениеЗаполнено(ВладелецФайла) Тогда + Возврат ""; + КонецЕсли; + + ИмяОбъектаМетаданных = ВладелецФайла.Метаданные().Имя; + Если СтрДлина(ИмяОбъектаМетаданных) > 30 Тогда + ХешОстатка = Новый ХешированиеДанных("CRC32"); + ХешОстатка.Добавить(Сред(ИмяОбъектаМетаданных, 31)); + ХешСуммаОстатка = ХешОстатка.ХешСумма; + Иначе + ХешСуммаОстатка = ""; + КонецЕсли; + + Возврат Лев(ИмяОбъектаМетаданных, 30) + ХешСуммаОстатка; + +КонецФункции + +// Возвращает текст сообщения об ошибке, добавляя к нему ссылку на элемент +// справочника хранимого файла. +// +Функция ТекстОшибкиПриПолученииФайла(Знач ИнформацияОбОшибке, Знач Файл) + + СообщениеОбОшибке = КраткоеПредставлениеОшибки(ИнформацияОбОшибке); + + Если Файл <> Неопределено Тогда + СообщениеОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '%1 + | + |Ссылка на файл: ""%2"".'"), + СообщениеОбОшибке, + ПолучитьНавигационнуюСсылку(Файл) ); + КонецЕсли; + + Возврат СообщениеОбОшибке; + +КонецФункции + +// Возвращает тип хранения добавляемого файла в зависимости от расширения и размера. +// +// Параметры: +// Расширение - Строка - расширение добавляемого файла. +// Размер - Число - размер добавляемого файла в байтах. +// +// Возвращаемое значение: +// ТипХранения - ПеречислениеСсылка.ТипыХраненияФайлов - если способ хранения файлов в настройках +// указан "ВТомахНаДиске", всегда возвращает значение "ВТомахНаДиске". Если способ хранения +// файлов указан "ВИнформационнойБазеИТомахНаДиске", возвращает "ВИнформационнойБазе", если +// файл соответствует параметрам хранения в информационной базе и "ВТомахНаДиске", если нет. +// +Функция ТипХраненияФайла(Расширение, Размер) + + ТипХранения = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске; + Если ХранитьФайлыВТомахНаДискеИИнформационнойБазе() Тогда + + ПараметрыХранения = ПараметрыХраненияФайловВИнформационнойБазе(); + Если Размер <= ПараметрыХранения.МаксимальныйРазмер + И СтрНайти(НРег(ПараметрыХранения.РасширенияФайлов), НРег(Расширение)) > 0 Тогда + + ТипХранения = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе; + + КонецЕсли; + + КонецЕсли; + + Возврат ТипХранения; + +КонецФункции + +// Возвращает первый том по порядку заполнения, в который можно поместить файл указанного размера. +// +// Параметры: +// РазмерФайла - Число - размер помещаемого файла в байтах. +// +// Возвращаемое значение: +// СправочникСсылка.ТомаХраненияФайлов - том, в который можно поместить файл. +// +Функция СвободныйТом(РазмерФайла) + + УстановитьПривилегированныйРежим(Истина); + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ТомаХраненияФайлов.Ссылка КАК Ссылка, + | ТомаХраненияФайлов.МаксимальныйРазмер КАК МаксимальныйРазмер + |ИЗ + | Справочник.ТомаХраненияФайлов КАК ТомаХраненияФайлов + |ГДЕ + | ТомаХраненияФайлов.ПометкаУдаления = ЛОЖЬ + | + |УПОРЯДОЧИТЬ ПО + | ТомаХраненияФайлов.ПорядокЗаполнения"; + Результат = Запрос.Выполнить(); + + Если Результат.Пустой() Тогда + ВызватьИсключение НСтр("ru = 'Нет ни одного тома для размещения файла.'"); + КонецЕсли; + + ВыборкаТомов = Результат.Выбрать(); + Пока ВыборкаТомов.Следующий() Цикл + + Если ВыборкаТомов.МаксимальныйРазмер = 0 Тогда + Возврат ВыборкаТомов.Ссылка; + Иначе + + ОбъемТома = ОбъемТома(ВыборкаТомов.Ссылка); + Если ОбъемТома + РазмерФайла <= ВыборкаТомов.МаксимальныйРазмер * 1024 * 1024 Тогда + Возврат ВыборкаТомов.Ссылка; + КонецЕсли; + + КонецЕсли; + + КонецЦикла; + + Возврат Неопределено; + +КонецФункции + +#КонецОбласти + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/РаботаСФайламиВТомахСлужебный/РаботаСФайламиВТомахСлужебный.mdo b/SSL/src/CommonModules/РаботаСФайламиВТомахСлужебный/РаботаСФайламиВТомахСлужебный.mdo new file mode 100644 index 000000000..13f7edfef --- /dev/null +++ b/SSL/src/CommonModules/РаботаСФайламиВТомахСлужебный/РаботаСФайламиВТомахСлужебный.mdo @@ -0,0 +1,11 @@ + + + РаботаСФайламиВТомахСлужебный + + ru + Работа с файлами в томах служебный + + true + true + true + diff --git a/SSL/src/CommonModules/РаботаСФайламиКлиент/Module.bsl b/SSL/src/CommonModules/РаботаСФайламиКлиент/Module.bsl index 463a8bec2..53fdfabb9 100644 --- a/SSL/src/CommonModules/РаботаСФайламиКлиент/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайламиКлиент/Module.bsl @@ -131,7 +131,7 @@ ПараметрыВыполнения.Вставить("МаксимальныйРазмер" , 0); ПараметрыВыполнения.Вставить("НеОткрыватьКарточку", ?(ПараметрыДобавления = Неопределено, Ложь, ПараметрыДобавления)); - ПараметрыВыполнения.Вставить("ФильтрДиалогаВыбора", НСтр("ru = 'Все файлы(*.*)|*.*'")); + ПараметрыВыполнения.Вставить("ФильтрДиалогаВыбора", НСтр("ru = 'Все файлы (*.*)|*.*'")); Иначе ПараметрыВыполнения.Вставить("МаксимальныйРазмер" , ПараметрыДобавления.МаксимальныйРазмер); @@ -297,11 +297,18 @@ // Открывает диалог сохранения файл, где пользователь может определить путь и имя для сохранения файла. // // Параметры: -// ДанныеФайла - Структура - данные файла. Описание см. РаботаСФайлами.ДанныеФайла. +// ДанныеФайла - Структура - данные файла. Описание см. РаботаСФайлами.ДанныеФайла. +// ОбработчикЗавершения - ОписаниеОповещения, Неопределено - содержит описание процедуры, которая +// будет вызвана после завершения со следующими параметрами: +// * ПутьКФайлу - Строка - полный путь к сохраненному файлу. +// * ДополнительныеПараметры - Произвольный - значение, которое было указано при создании объекта ОписаниеОповещения. // -Процедура СохранитьФайлКак(Знач ДанныеФайла) Экспорт +Процедура СохранитьФайлКак(Знач ДанныеФайла, ОбработчикЗавершения = Неопределено) Экспорт - РаботаСФайламиСлужебныйКлиент.СохранитьКак(Неопределено, ДанныеФайла, Неопределено); + Оповещение = Новый ОписаниеОповещения("СохранитьФайлКакПослеСохранения", + РаботаСФайламиСлужебныйКлиент, ОбработчикЗавершения); + + РаботаСФайламиСлужебныйКлиент.СохранитьКак(Оповещение, ДанныеФайла, Неопределено); КонецПроцедуры @@ -784,7 +791,7 @@ Процедура НапечататьФайлПриложением(ДанныеФайла, ИмяОткрываемогоФайла) #Если МобильныйКлиент Тогда - ПоказатьПредупреждение(, НСтр("ru='Печать файлов данного типа не поддерживается в мобильном клиенте.'")); + ПоказатьПредупреждение(, НСтр("ru = 'Печать файлов данного типа не поддерживается в мобильном клиенте.'")); Возврат; #Иначе @@ -798,7 +805,7 @@ Расширение = НРег(ДанныеФайла.Расширение); Если СтрНайти(РасширенияИсключения, " " + Расширение + ",") > 0 Тогда - ПоказатьПредупреждение(, НСтр("ru='Печать файлов данного типа не поддерживается.'")); + ПоказатьПредупреждение(, НСтр("ru = 'Печать файлов данного типа не поддерживается.'")); Возврат; ИначеЕсли Расширение = "grs" Тогда Схема = Новый ГрафическаяСхема; diff --git a/SSL/src/CommonModules/РаботаСФайламиКлиентСервер/Module.bsl b/SSL/src/CommonModules/РаботаСФайламиКлиентСервер/Module.bsl index cf861f58e..28c584a5c 100644 --- a/SSL/src/CommonModules/РаботаСФайламиКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайламиКлиентСервер/Module.bsl @@ -39,11 +39,6 @@ КонецФункции -#Область УстаревшиеПроцедурыИФункции -//////////////////////////////////////////////////////////////////////////////// -// Обработчики подписок на события. - -// Устарела. Следует использовать РаботаСФайлами.ОпределитьФормуПрисоединенногоФайла. // Обработчик подписки на событие ОбработкаПолученияФормы для переопределения формы файла. // // Параметры: @@ -54,12 +49,8 @@ // ДополнительнаяИнформация - Структура - дополнительная информация открытия формы. // СтандартнаяОбработка - Булево - признак выполнения стандартной (системной) обработки события. // -Процедура ОпределитьФормуПрисоединенногоФайла(Источник, - ВидФормы, - Параметры, - ВыбраннаяФорма, - ДополнительнаяИнформация, - СтандартнаяОбработка) Экспорт +Процедура ОпределитьФормуПрисоединенногоФайла(Источник, ВидФормы, Параметры, + ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка) Экспорт РаботаСФайламиСлужебныйВызовСервера.ОпределитьФормуПрисоединенногоФайла( Источник, @@ -73,8 +64,6 @@ #КонецОбласти -#КонецОбласти - #Область СлужебныйПрограммныйИнтерфейс // Инициализирует структуру со сведениями о файле. @@ -173,7 +162,7 @@ Если Не Результат Тогда ДатаЗаема = ?(ЗначениеЗаполнено(ДанныеФайла.ДатаЗаема), - " " + НСтр("ru='с'") + " " + Формат(ДанныеФайла.ДатаЗаема, "ДЛФ=ДВ"), ""); + " " + НСтр("ru = 'с'") + " " + Формат(ДанныеФайла.ДатаЗаема, "ДЛФ=ДВ"), ""); СтрокаОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Файл ""%1"" diff --git a/SSL/src/CommonModules/РаботаСФайламиСлужебный/Module.bsl b/SSL/src/CommonModules/РаботаСФайламиСлужебный/Module.bsl index 831df982e..ff959a1a8 100644 --- a/SSL/src/CommonModules/РаботаСФайламиСлужебный/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайламиСлужебный/Module.bsl @@ -8,6 +8,13 @@ #Область СлужебныйПрограммныйИнтерфейс +// См. СозданиеНаОснованииПереопределяемый.ПриОпределенииОбъектовСКомандамиСозданияНаОсновании. +Процедура ПриОпределенииОбъектовСКомандамиСозданияНаОсновании(Объекты) Экспорт + + Объекты.Добавить(Метаданные.Справочники.Файлы); + +КонецПроцедуры + // См. ЗапретРедактированияРеквизитовОбъектовПереопределяемый.ПриОпределенииОбъектовСЗаблокированнымиРеквизитами. Процедура ПриОпределенииОбъектовСЗаблокированнымиРеквизитами(Объекты) Экспорт Объекты.Вставить(Метаданные.Справочники.УчетныеЗаписиСинхронизацииФайлов.ПолноеИмя(), ""); @@ -18,29 +25,14 @@ Процедура ВыгрузитьФайл(Знач ОбъектФайла, Знач ИмяНовогоФайла) Экспорт Если ОбъектФайла.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда - - ПолныйПуть = ПолныйПутьТома(ОбъектФайла.Том) + ОбъектФайла.ПутьКФайлу; - КопироватьФайл(ПолныйПуть, ИмяНовогоФайла); - - // Исходному файлу мог быть установлен атрибут "Только чтение". - // Унаследованный при копировании атрибут снимается, чтобы файл можно было удалить. - СвойстваФайла = Новый Файл(ИмяНовогоФайла); - - Если СвойстваФайла.Существует() И СвойстваФайла.ПолучитьТолькоЧтение() Тогда - - СвойстваФайла.УстановитьТолькоЧтение(Ложь); - - КонецЕсли; - - Иначе // Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе + РаботаСФайламиВТомахСлужебный.СкопироватьФайл(ОбъектФайла.Ссылка, ИмяНовогоФайла); + Иначе ДвоичныеДанныеФайла = РаботаСФайлами.ДвоичныеДанныеФайла(ОбъектФайла.Ссылка); ДвоичныеДанныеФайла.Записать(ИмяНовогоФайла); КонецЕсли; - ЗаполнитьПутьКФайлуПриОтправке(ОбъектФайла); - КонецПроцедуры // Используется при загрузке файлов для переходе в сервис (БТС). @@ -57,15 +49,7 @@ НомерВерсии = ""; КонецЕсли; - // Добавление файла в один из томов (где есть свободное место). - СведенияОФайле = ДобавитьФайлВТом(ДвоичныеДанные, - ОбъектФайла.ДатаМодификацииУниверсальная, ОбъектФайла.Наименование, ОбъектФайла.Расширение, - НомерВерсии, ПутьКФайлуПриПолученииСодержитПризнакЗашифрован(ОбъектФайла)); - - ОбъектФайла.Том = СведенияОФайле.Том; - ОбъектФайла.ПутьКФайлу = СведенияОФайле.ПутьКФайлу; - ОбъектФайла.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске; - ОбъектФайла.ФайлХранилище = Новый ХранилищеЗначения(Неопределено); + РаботаСФайламиВТомахСлужебный.ДобавитьФайл(ОбъектФайла, ДвоичныеДанные, , Истина); Иначе @@ -197,72 +181,6 @@ КонецПроцедуры -// Вернет размер файлов на томе - в байтах. -Функция ПодсчитатьРазмерФайловНаТоме(СсылкаТома) Экспорт - - Если Не ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда - Возврат 0; - КонецЕсли; - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | ЕСТЬNULL(СУММА(Версии.Размер), 0) КАК РазмерФайлов - |ИЗ - | Справочник.ВерсииФайлов КАК Версии - |ГДЕ - | Версии.Том = &Том"; - - Запрос.Параметры.Вставить("Том", СсылкаТома); - - Выборка = Запрос.Выполнить().Выбрать(); - - Если Выборка.Следующий() Тогда - РазмерФайловВТоме = Число(Выборка.РазмерФайлов); - КонецЕсли; - - ТипыВладельцев = Метаданные.РегистрыСведений.НаличиеФайлов.Измерения.ОбъектСФайлами.Тип.Типы(); - ВсеИменаСправочников = Новый Соответствие; - - Запрос = Новый Запрос; - Запрос.Параметры.Вставить("Том", СсылкаТома); - - Для Каждого Тип Из ТипыВладельцев Цикл - - Если Тип = Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных") Тогда - Продолжить; - КонецЕсли; - - ИменаСправочников = ИменаСправочниковХраненияФайлов(Тип, Истина); - - Для каждого КлючИЗначение Из ИменаСправочников Цикл - Если ВсеИменаСправочников[КлючИЗначение.Ключ] <> Неопределено Тогда - Продолжить; - КонецЕсли; - ИмяСправочникаПрисоединенныхФайлов = КлючИЗначение.Ключ; - ВсеИменаСправочников.Вставить(КлючИЗначение.Ключ, Истина); - - Запрос.Текст = - "ВЫБРАТЬ - | ЕСТЬNULL(СУММА(ПрисоединенныеФайлы.Размер), 0) КАК РазмерФайлов - |ИЗ - | &ИмяСправочника КАК ПрисоединенныеФайлы - |ГДЕ - | ПрисоединенныеФайлы.Том = &Том"; - Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ИмяСправочника", - "Справочник." + ИмяСправочникаПрисоединенныхФайлов); - - Выборка = Запрос.Выполнить().Выбрать(); - Если Выборка.Следующий() Тогда - РазмерФайловВТоме = РазмерФайловВТоме + Выборка.РазмерФайлов; - КонецЕсли - КонецЦикла; - КонецЦикла; - - Возврат РазмерФайловВТоме; - -КонецФункции - // Читает кодировку версии файла. // // Параметры: @@ -331,12 +249,12 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Процедуры используемые при обмене данными. +#Область ПроцедурыОбменаДанными // Возвращает массив справочников, выступающих в роли владельцев файлов. // -// Возвращаемое значение: Массив(ОбъектМетаданных). +// Возвращаемое значение: +// Массив(ОбъектМетаданных). // Функция СправочникиФайлов() Экспорт @@ -377,7 +295,8 @@ // Возвращает массив объектов метаданных, которые используются для хранения // двоичных данных файлов в информационной базе. // -// Возвращаемое значение: Массив(ОбъектМетаданных). +// Возвращаемое значение: +// Массив(ОбъектМетаданных). // Функция ОбъектыХраненияФайловИнформационнойБазе() Экспорт @@ -451,8 +370,9 @@ КонецФункции // Записывает вложения в папку. -// -// Параметры: см. описание процедуры "ВыполнитьДоставку" модуля "РассылкаОтчетов". +// +// Параметры: +// см. описание процедуры "ВыполнитьДоставку" модуля "РассылкаОтчетов". // Процедура ПриВыполненииДоставкиВПапку(ПараметрыДоставки, Вложения) Экспорт @@ -498,8 +418,8 @@ КонецЦикла; Комментарий = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Рассылка отчетов %1 от %2'"), - "'"+ ПараметрыДоставки.Рассылка +"'", + НСтр("ru = 'Рассылка отчетов ''%1'' от %2'"), + ПараметрыДоставки.Рассылка, Формат(ПараметрыДоставки.ДатаВыполнения, "ДЛФ=DT")); Для Каждого Вложение Из ТаблицаВложений Цикл @@ -701,16 +621,19 @@ КопияФайла.ФайлХранилище = КопируемыйФайл.ФайлХранилище; ДвоичныеДанные = РаботаСФайлами.ДвоичныеДанныеФайла(КопируемыйФайл); - КопияФайла.ТипХраненияФайла = ТипХраненияФайлов(); - Если ТипХраненияФайлов() = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда + ТипХраненияФайла = ТипХраненияФайлов(); + Если ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда + КопияФайла.ТипХраненияФайла = ТипХраненияФайла; ЗаписатьФайлВИнформационнуюБазу(КопияФайлаСсылка, ДвоичныеДанные); Иначе - // Добавить в один из томов (где есть свободное место). - СведенияОФайле = ДобавитьФайлВТом(ДвоичныеДанные, КопияФайла.ДатаМодификацииУниверсальная, - КопияФайла.Наименование, КопияФайла.Расширение); - КопияФайла.ПутьКФайлу = СведенияОФайле.ПутьКФайлу; - КопияФайла.Том = СведенияОФайле.Том; + + КопияФайла.Том = Неопределено; + КопияФайла.ПутьКФайлу = Неопределено; + КопияФайла.ТипХраненияФайла = Неопределено; + + РаботаСФайламиВТомахСлужебный.ДобавитьФайл(КопияФайла, ДвоичныеДанные); + КонецЕсли; КопияФайла.Записать(); @@ -762,8 +685,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Очистка ненужных файлов +#КонецОбласти + +#Область ОчисткаНенужныхФайлов Функция ТекстЗапросаДляОчисткиФайлов(ВладелецФайла, Настройка, МассивИсключений, ЭлементИсключение, ДанныеДляОтчета = Ложь) Экспорт @@ -997,134 +921,9 @@ КонецФункции -Процедура ПроверитьЦелостностьФайлов(ТаблицаФайловНаДиске, Том) Экспорт - - Запрос = Новый Запрос; - ТипыФайлов = Метаданные.ОпределяемыеТипы.ПрисоединенныйФайл.Тип.Типы(); - - ДобавитьПсевдонимПоля = Истина; - - Для Каждого СправочникФайлов Из ТипыФайлов Цикл - МетаданныеСправочника = Метаданные.НайтиПоТипу(СправочникФайлов); - Если МетаданныеСправочника.Реквизиты.Найти("ВладелецФайла") <> Неопределено Тогда - ЕстьВозможностьХранитьВерсии = ОбщегоНазначения.ЕстьРеквизитОбъекта("ТекущаяВерсия", МетаданныеСправочника); - - Запрос.Текст = Запрос.Текст + ?(ПустаяСтрока(Запрос.Текст),"", " ОБЪЕДИНИТЬ ВСЕ") + " - | - |ВЫБРАТЬ - | СправочникПрисоединенныеФайлы.Ссылка " + ?(ДобавитьПсевдонимПоля, "КАК Ссылка,",",") + " - | СправочникПрисоединенныеФайлы.Расширение " + ?(ДобавитьПсевдонимПоля, "КАК Расширение,",",") + " - | СправочникПрисоединенныеФайлы.Наименование " + ?(ДобавитьПсевдонимПоля, "КАК Наименование,",",") + " - | СправочникПрисоединенныеФайлы.Том " + ?(ДобавитьПсевдонимПоля, "КАК Том,",",") + " - | СправочникПрисоединенныеФайлы.Изменил " + ?(ДобавитьПсевдонимПоля, "КАК Отредактировал,",",") + " - | СправочникПрисоединенныеФайлы.ДатаМодификацииУниверсальная " + ?(ДобавитьПсевдонимПоля, "КАК ДатаМодификацииФайла,",",") + " - | СправочникПрисоединенныеФайлы.ПутьКФайлу " + ?(ДобавитьПсевдонимПоля, "КАК ПутьКФайлу","") + " - |ИЗ - | Справочник." + МетаданныеСправочника.Имя + " КАК СправочникПрисоединенныеФайлы - |ГДЕ - | СправочникПрисоединенныеФайлы.Том = &Том - | И СправочникПрисоединенныеФайлы.ТипХраненияФайла = ЗНАЧЕНИЕ(Перечисление.ТипыХраненияФайлов.ВТомахНаДиске) - | И НЕ СправочникПрисоединенныеФайлы.ПометкаУдаления"; - Если ЕстьВозможностьХранитьВерсии Тогда - СправочникВерсийФайлов = Метаданные.НайтиПоТипу(МетаданныеСправочника.Реквизиты.ТекущаяВерсия.Тип.Типы()[0]); - Запрос.Текст = Запрос.Текст + " - | И СправочникПрисоединенныеФайлы.ТекущаяВерсия = ЗНАЧЕНИЕ(Справочник." + СправочникВерсийФайлов.Имя + ".ПустаяСсылка)"; - КонецЕсли; - - Если ДобавитьПсевдонимПоля Тогда - ДобавитьПсевдонимПоля = Ложь; - КонецЕсли; - ИначеЕсли МетаданныеСправочника.Реквизиты.Найти("РодительскаяВерсия") <> Неопределено Тогда - Запрос.Текст = Запрос.Текст + ?(ПустаяСтрока(Запрос.Текст),"", " ОБЪЕДИНИТЬ ВСЕ") + " - | - |ВЫБРАТЬ - | СправочникПрисоединенныеФайлы.Ссылка " + ?(ДобавитьПсевдонимПоля, "КАК Ссылка,",",") + " - | СправочникПрисоединенныеФайлы.Расширение " + ?(ДобавитьПсевдонимПоля, "КАК Расширение,",",") + " - | СправочникПрисоединенныеФайлы.Наименование " + ?(ДобавитьПсевдонимПоля, "КАК Наименование,",",") + " - | СправочникПрисоединенныеФайлы.Том " + ?(ДобавитьПсевдонимПоля, "КАК Том,",",") + " - | СправочникПрисоединенныеФайлы.Автор " + ?(ДобавитьПсевдонимПоля, "КАК Отредактировал,",",") + " - | СправочникПрисоединенныеФайлы.ДатаМодификацииУниверсальная " + ?(ДобавитьПсевдонимПоля, "КАК ДатаМодификацииФайла,",",") + " - | СправочникПрисоединенныеФайлы.ПутьКФайлу " + ?(ДобавитьПсевдонимПоля, "КАК ПутьКФайлу","") + " - |ИЗ - | Справочник." + МетаданныеСправочника.Имя + " КАК СправочникПрисоединенныеФайлы - |ГДЕ - | СправочникПрисоединенныеФайлы.Том = &Том - | И СправочникПрисоединенныеФайлы.ТипХраненияФайла = ЗНАЧЕНИЕ(Перечисление.ТипыХраненияФайлов.ВТомахНаДиске) - | И НЕ СправочникПрисоединенныеФайлы.ПометкаУдаления"; - - Если ДобавитьПсевдонимПоля Тогда - ДобавитьПсевдонимПоля = Ложь; - КонецЕсли; - - КонецЕсли; - КонецЦикла; +#КонецОбласти - Запрос.УстановитьПараметр("Том", Том); - - РезультатЗапроса = Запрос.Выполнить(); - - Выборка = РезультатЗапроса.Выбрать(); - - ПолныйПутьТома = ПолныйПутьТома(Том); - - Пока Выборка.Следующий() Цикл - - ВерсияСсылка = Выборка.Ссылка; - ПутьКФайлу = Выборка.ПутьКФайлу; - - Если ЗначениеЗаполнено(Выборка.ПутьКФайлу) И ЗначениеЗаполнено(Выборка.Том) Тогда - - // Удаляем лишнюю точку, если у файла нет расширения. - Если ВерсияСсылка.Расширение = "" И СтрЗаканчиваетсяНа(ПутьКФайлу, ".") Тогда - ПутьКФайлу = Лев(ПутьКФайлу, СтрДлина(ПутьКФайлу) - 1); - КонецЕсли; - - ПолныйПутьФайла = ПолныйПутьТома + ПутьКФайлу; - СуществующийФайл = ТаблицаФайловНаДиске.НайтиСтроки(Новый Структура("ПолноеИмя", ПолныйПутьФайла)); - - Если СуществующийФайл.Количество() = 0 Тогда - - НесуществующийФайл = ТаблицаФайловНаДиске.Добавить(); - НесуществующийФайл.СтатусПроверки = НСтр("ru = 'Отсутствуют данные в томе на диске'"); - НесуществующийФайл.Файл = ВерсияСсылка; - НесуществующийФайл.ПолноеИмя = ПолныйПутьФайла; - НесуществующийФайл.Расширение = ВерсияСсылка.Расширение; - НесуществующийФайл.Имя = ВерсияСсылка.Наименование; - НесуществующийФайл.Том = Том; - НесуществующийФайл.Отредактировал = Выборка.Отредактировал; - НесуществующийФайл.ДатаРедактирования = Выборка.ДатаМодификацииФайла; - НесуществующийФайл.Количество = 1; - - Иначе - - СуществующийФайл[0].Файл = ВерсияСсылка; - СуществующийФайл[0].СтатусПроверки = НСтр("ru = 'Целостные данные'"); - - КонецЕсли; - - КонецЕсли; - - КонецЦикла; - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// Работа с томами файлов - -// Возвращает тип хранения файлов. -// -// Возвращаемое значение: -// Булево. Истина, если указано хранить файлы в томах на диске. -// -Функция ХранениеФайловВТомахНаДиске() Экспорт - - УстановитьПривилегированныйРежим(Истина); - - ХранитьФайлыВТомахНаДиске = Константы.ХранитьФайлыВТомахНаДиске.Получить(); - - Возврат ХранитьФайлыВТомахНаДиске; - -КонецФункции +#Область РаботаСТомамиФайлов // Возвращает тип хранения файлов с учетом наличия томов. // Если томов хранения файлов нет, тогда хранение в ИБ. @@ -1134,18 +933,10 @@ // Функция ТипХраненияФайлов() Экспорт - УстановитьПривилегированныйРежим(Истина); - - ХранитьФайлыВТомахНаДиске = Константы.ХранитьФайлыВТомахНаДиске.Получить(); - - Если ХранитьФайлыВТомахНаДиске Тогда - - Если РаботаСФайлами.ЕстьТомаХраненияФайлов() Тогда - Возврат Перечисления.ТипыХраненияФайлов.ВТомахНаДиске; - Иначе - Возврат Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе; - КонецЕсли; + Если РаботаСФайламиВТомахСлужебный.ХранитьФайлыВТомахНаДиске() + И РаботаСФайламиВТомахСлужебный.ЕстьТомаХраненияФайлов() Тогда + Возврат Перечисления.ТипыХраненияФайлов.ВТомахНаДиске; Иначе Возврат Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе; КонецЕсли; @@ -1155,7 +946,7 @@ // Проверяет, что хотя бы в одном томе есть хотя бы один файл. // // Возвращаемое значение: -// Булево. +// Булево - // Функция ЕстьФайлыВТомах() Экспорт @@ -1172,223 +963,9 @@ КонецФункции -// Возвращает полный путь тома - в зависимости от ОС. -Функция ПолныйПутьТома(СсылкаНаТом) Экспорт - - УстановитьПривилегированныйРежим(Истина); - Если ОбщегоНазначения.ЭтоWindowsСервер() Тогда - - Возврат СсылкаНаТом.ПолныйПутьWindows; - Иначе - Возврат СсылкаНаТом.ПолныйПутьLinux; - КонецЕсли; - -КонецФункции +#КонецОбласти -// Добавляет файл в один из томов (где есть свободное место). -// -// Параметры: -// ДвоичныеДанныеИлиПуть - ДвоичныеДанные, Строка - двоичные данные файла или полный путь к файлу на диске. -// ВремяИзмененияУниверсальное - Дата - универсальное время, которое будет установлено файлу как время последнего -// изменения. -// ИмяБезРасширения - Строка - имя файла без расширения. -// Расширение - Строка - расширение файла без точки. -// НомерВерсии - Строка - номер версии файла. Если указан, то имя файла для хранения на диске формируется -// как: -// ИмяБезРасширения + "." + НомерВерсии + "." + Расширение -// в противном случае, ИмяБезРасширения + "." + Расширение. -// Зашифрован - Булево - если Истина, то к полному имени файла будет добавлено расширение ".p7m". -// ДатаДляРазмещенияВТоме - Дата - если не указано, то используется текущее время сеанса. -// -// Возвращаемое значение: -// Структура - со свойствами: -// * Том - СправочникСсылка.ТомаХраненияФайлов - том, в котором был размещен файл. -// * ПутьКФайлу - Строка - путь, по которому был размещен файл в томе. -// -Функция ДобавитьФайлВТом(ДвоичныеДанныеИлиПуть, ВремяИзмененияУниверсальное, ИмяБезРасширения, Расширение, - НомерВерсии = "", Зашифрован = Ложь, ДатаДляРазмещенияВТоме = Неопределено) Экспорт - - ОжидаемыеТипы = Новый Массив; - ОжидаемыеТипы.Добавить(Тип("ДвоичныеДанные")); - ОжидаемыеТипы.Добавить(Тип("Строка")); - ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("РаботаСФайламиСлужебный.ДобавитьФайлВТом", "ДвоичныеДанныеИлиПуть", ДвоичныеДанныеИлиПуть, - Новый ОписаниеТипов(ОжидаемыеТипы)); - - УстановитьПривилегированныйРежим(Истина); - - СсылкаНаТом = Справочники.ТомаХраненияФайлов.ПустаяСсылка(); - - КраткоеОписаниеВсехОшибок = ""; // Ошибки со всех томов. - ПодробноеОписаниеВсехОшибок = ""; // Для журнала регистрации. - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | ТомаХраненияФайлов.Ссылка - |ИЗ - | Справочник.ТомаХраненияФайлов КАК ТомаХраненияФайлов - |ГДЕ - | ТомаХраненияФайлов.ПометкаУдаления = ЛОЖЬ - | - |УПОРЯДОЧИТЬ ПО - | ТомаХраненияФайлов.ПорядокЗаполнения"; - - Выборка = Запрос.Выполнить().Выбрать(); - - Если Выборка.Количество() = 0 Тогда - ВызватьИсключение НСтр("ru = 'Нет ни одного тома для размещения файла.'"); - КонецЕсли; - - Пока Выборка.Следующий() Цикл - - СсылкаНаТом = Выборка.Ссылка; - - ПутьКТому = ПолныйПутьТома(СсылкаНаТом); - // Добавляем слэш в конце, если его нет. - ПутьКТому = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ПутьКТому); - - // Имя файла для хранения на диске формировать следующим образом - // - имя файла.номер версии.расширение файла. - Если ПустаяСтрока(НомерВерсии) Тогда - ИмяФайла = ИмяБезРасширения + "." + Расширение; - Иначе - ИмяФайла = ИмяБезРасширения + "." + НомерВерсии + "." + Расширение; - КонецЕсли; - - Если Зашифрован Тогда - ИмяФайла = ИмяФайла + "." + "p7m"; - КонецЕсли; - - Попытка - - Если ТипЗнч(ДвоичныеДанныеИлиПуть) = Тип("ДвоичныеДанные") Тогда - РазмерФайла = ДвоичныеДанныеИлиПуть.Размер(); - Иначе // Считаем, что иначе это путь к файлу на диске. - ФайлИсточник = Новый Файл(ДвоичныеДанныеИлиПуть); - Если ФайлИсточник.Существует() Тогда - РазмерФайла = ФайлИсточник.Размер(); - Иначе - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не удалось добавить файл ""%1"" ни в один из томов, т.к. он отсутствует. - |Возможно, файл удален антивирусной программой. - |Обратитесь к администратору.'"), - ИмяФайла); - - ВызватьИсключение ТекстОшибки; - - КонецЕсли; - КонецЕсли; - - // Если МаксимальныйРазмер = 0 - нет ограничения на размер файлов на томе. - Если СсылкаНаТом.МаксимальныйРазмер <> 0 Тогда - - ТекущийРазмерВБайтах = ПодсчитатьРазмерФайловНаТоме(СсылкаНаТом.Ссылка); - - НовыйРазмерВБайтах = ТекущийРазмерВБайтах + РазмерФайла; - НовыйРазмер = НовыйРазмерВБайтах / (1024 * 1024); - - Если НовыйРазмер > СсылкаНаТом.МаксимальныйРазмер Тогда - - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Превышен максимальный размер тома (%1 Мб).'"), - СсылкаНаТом.МаксимальныйРазмер); - КонецЕсли; - КонецЕсли; - - Дата = ТекущаяДатаСеанса(); - Если ДатаДляРазмещенияВТоме <> Неопределено Тогда - Дата = ДатаДляРазмещенияВТоме; - КонецЕсли; - - // Использование абсолютного формата даты "ДФ" в следующей строке - // является правильным, так как дата используется не для просмотра пользователем. - ПутьДня = Формат(Дата, "ДФ=ггггММдд") + ПолучитьРазделительПути(); - - ПутьКТому = ПутьКТому + ПутьДня; - - ИмяФайлаСПутем = РаботаСФайламиСлужебныйКлиентСервер.ПолучитьУникальноеИмяСПутем(ПутьКТому, ИмяФайла); - ПолноеИмяФайлаСПутем = ПутьКТому + ИмяФайлаСПутем; - - Если ТипЗнч(ДвоичныеДанныеИлиПуть) = Тип("ДвоичныеДанные") Тогда - ДвоичныеДанныеИлиПуть.Записать(ПолноеИмяФайлаСПутем); - Иначе // Считаем, что иначе это путь к файлу на диске. - КопироватьФайл(ДвоичныеДанныеИлиПуть, ПолноеИмяФайлаСПутем); - КонецЕсли; - - // Установка времени изменения файла таким, как оно стоит в текущей версии. - ФайлНаДиске = Новый Файл(ПолноеИмяФайлаСПутем); - ФайлНаДиске.УстановитьУниверсальноеВремяИзменения(ВремяИзмененияУниверсальное); - ФайлНаДиске.УстановитьТолькоЧтение(Истина); - - Возврат Новый Структура("Том,ПутьКФайлу", СсылкаНаТом, ПутьДня + ИмяФайлаСПутем); - - Исключение - ИнформацияОбОшибке = ИнформацияОбОшибке(); - - Если ПодробноеОписаниеВсехОшибок <> "" Тогда - ПодробноеОписаниеВсехОшибок = ПодробноеОписаниеВсехОшибок + Символы.ПС + Символы.ПС; - КраткоеОписаниеВсехОшибок = КраткоеОписаниеВсехОшибок + Символы.ПС + Символы.ПС; - КонецЕсли; - - ШаблонОписанияОшибки = - НСтр("ru = 'Ошибка при добавлении файла ""%1"" - |в том ""%2"" (%3): - |""%4"".'"); - - ПодробноеОписаниеВсехОшибок = ПодробноеОписаниеВсехОшибок - + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ШаблонОписанияОшибки, - ИмяФайла, - Строка(СсылкаНаТом), - ПутьКТому, - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); - - КраткоеОписаниеВсехОшибок = КраткоеОписаниеВсехОшибок - + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ШаблонОписанияОшибки, - ИмяФайла, - Строка(СсылкаНаТом), - ПутьКТому, - КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); - - // Надо переходить к следующему тому. - Продолжить; - КонецПопытки; - - КонецЦикла; - - УстановитьПривилегированныйРежим(Ложь); - - // Запись в журнал регистрации для администратора - // здесь выдадим ошибки со всех томов. - ШаблонСообщенияОбОшибке = НСтр("ru = 'Не удалось добавить файл ни в один из томов. - |Список ошибок: - | - |%1'"); - - ЗаписьЖурналаРегистрации( - НСтр("ru = 'Файлы.Добавление файла'", ОбщегоНазначения.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка,,, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщенияОбОшибке, ПодробноеОписаниеВсехОшибок)); - - Если Пользователи.ЭтоПолноправныйПользователь() Тогда - СтрокаИсключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщенияОбОшибке, КраткоеОписаниеВсехОшибок); - Иначе - // Сообщение обычному пользователю. - СтрокаИсключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не удалось добавить файл: - |""%1.%2"". - | - |Обратитесь к администратору.'"), - ИмяБезРасширения, Расширение); - КонецЕсли; - - ВызватьИсключение СтрокаИсключения; - -КонецФункции - -//////////////////////////////////////////////////////////////////////////////// -// Управление доступом. +#Область УправлениеДоступом Функция ЭтоСправочникФайловИлиВерсийФайлов(ПолноеИмя) Экспорт @@ -1413,8 +990,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Электронная подпись и шифрование для файлов. +#КонецОбласти + +#Область ЭлектроннаяПодписьИШифрование Функция ДоступнаЭлектроннаяПодпись(ТипФайла) Экспорт @@ -1710,74 +1288,25 @@ Процедура ПроверитьФайлОбработан(ФайлСсылка, ИмяПроцедуры) Экспорт ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(ФайлСсылка,, - "РаботаСФайламиСлужебный.ПеренестиЭлектронныеПодписиИСертификатыШифрованияВРегистрыСведений", + "РаботаСФайлами.ПеренестиЭлектронныеПодписиИСертификатыШифрованияВРегистрыСведений", ИмяПроцедуры); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Контроль ведения учета. +#КонецОбласти + +#Область КонтрольВеденияУчета // См. КонтрольВеденияУчетаПереопределяемый.ПриОпределенииПроверок Процедура ПриОпределенииПроверок(ГруппыПроверок, Проверки) Экспорт - Проверка = Проверки.Добавить(); - Проверка.ИдентификаторГруппы = "СистемныеПроверки"; - Проверка.Наименование = НСтр("ru='Поиск ссылок на несуществующие файлы в томах хранения'"); - Проверка.Причины = НСтр("ru='Файл был физически удален или перемещен на диске вследствие работы антивирусных программ, - |непреднамеренных действий администратора и.т.д.'"); - Проверка.Рекомендация = НСтр("ru='• Пометить файл в программе на удаление; - |• Или восстановить файл на диске в томе из резервной копии.'"); - Проверка.Идентификатор = "СтандартныеПодсистемы.ПроверкаСсылокНаНесуществующиеФайлыВТоме"; - Проверка.ОбработчикПроверки = "РаботаСФайламиСлужебный.ПроверкаСсылокНаНесуществующиеФайлыВТоме"; - Проверка.КонтекстПроверокВеденияУчета = "СистемныеПроверки"; - Проверка.Отключена = Истина; + РаботаСФайламиВТомахСлужебный.ПриОпределенииПроверок(ГруппыПроверок, Проверки); КонецПроцедуры -// Исполняет проверку несуществующих файлов на диске, в случае когда присоединенные файлы хранятся в томах. -// -Процедура ПроверкаСсылокНаНесуществующиеФайлыВТоме(Проверка, ПараметрыПроверки) Экспорт - - Если ОбщегоНазначения.РазделениеВключено() - Или Не ПолучитьФункциональнуюОпцию("ХранитьФайлыВТомахНаДиске") Тогда - Возврат; - КонецЕсли; - - ДоступныеТома = ДоступныеТома(ПараметрыПроверки); - Если ДоступныеТома.Количество() = 0 Тогда - Возврат; - КонецЕсли; - - МодульРаботаВМоделиСервиса = Неопределено; - Если ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.БазоваяФункциональность") Тогда - МодульРаботаВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("РаботаВМоделиСервиса"); - КонецЕсли; - - ВидыОбъектовМетаданных = Новый Массив; - ВидыОбъектовМетаданных.Добавить(Метаданные.Справочники); - ВидыОбъектовМетаданных.Добавить(Метаданные.Документы); - ВидыОбъектовМетаданных.Добавить(Метаданные.ПланыСчетов); - ВидыОбъектовМетаданных.Добавить(Метаданные.ПланыВидовХарактеристик); - ВидыОбъектовМетаданных.Добавить(Метаданные.Задачи); - - Для Каждого ВидОбъектаМетаданных Из ВидыОбъектовМетаданных Цикл - Для Каждого ОбъектМетаданных Из ВидОбъектаМетаданных Цикл - Если МодульРаботаВМоделиСервиса <> Неопределено - И Не МодульРаботаВМоделиСервиса.ЭтоРазделенныйОбъектМетаданных(ОбъектМетаданных.ПолноеИмя()) Тогда - Продолжить; - КонецЕсли; - Если Не ПроверитьОбъектПрисоединенныхФайлов(ОбъектМетаданных) Тогда - Продолжить; - КонецЕсли; - ПоискСсылокНаНесуществующиеФайлыВТомах(ОбъектМетаданных, ПараметрыПроверки, ДоступныеТома); - КонецЦикла; - КонецЦикла; - -КонецПроцедуры +#КонецОбласти -//////////////////////////////////////////////////////////////////////////////// -// Извлечение текста для полнотекстового поиска. +#Область ИзвлечениеТекстаДляПолнотекстовогоПоиска Процедура ИзвлечьТекстИзФайлов() Экспорт @@ -1852,7 +1381,7 @@ // Возвращает Истина, если текст из файлов извлекается на сервере, а не на клиенте. // // Возвращаемое значение: -// Булево. Ложь - если текст не извлекается на сервере, +// Булево - Ложь - если текст не извлекается на сервере, // т.е. может и должен быть извлечен на клиенте. // Функция ИзвлекатьТекстыФайловНаСервере() Экспорт @@ -1919,8 +1448,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Прочие функции. +#КонецОбласти + +#Область ПрочиеФункции Функция СписокРасширенийДляПредпросмотра() Экспорт @@ -2034,8 +1564,24 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обмен файлами. +// Заполняет список указанными типами файлов. Значение элемента списка +// используется в функции РаботаСФайламиСлужебныйКлиент.РасширенияПоТипуФайла +// для сопоставления возможных расширений известному типу файлов. +// +// Параметры +// Список - СписокЗначений - список, в который будут добавлены поддерживаемые +// типы файлов. +// +Процедура ЗаполнитьСписокТипамиФайлов(Список) Экспорт + + Список.Добавить("Изображения", НСтр("ru = 'Изображения (JPG, JPEG, PNG ...)'")); + Список.Добавить("ОфисныеДокументы", НСтр("ru = 'Офисные документы (DOC, DOCX, XLS ...)'")); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбменФайлами // Подготовка параметров и предварительные проверки перед созданием файлового начального образа. // @@ -2067,7 +1613,7 @@ ИЛИ СтрНайти(ПутьКАрхивуСФайламиТомов, ":") <> 0) Тогда ОбщегоНазначения.СообщитьПользователю( - НСтр("ru = 'Путь к архиву с файлами томов должен быть + НСтр("ru = 'Путь к архиву с файлами томов должен быть задан |в формате UNC (\\servername\resource)'"), , "ПутьКАрхивуСФайламиТомовWindows"); @@ -2075,7 +1621,7 @@ КонецЕсли; Если Не ПустаяСтрока(ПолноеИмяФайловойБазы) И (Лев(ПолноеИмяФайловойБазы, 2) <> "\\" ИЛИ СтрНайти(ПолноеИмяФайловойБазы, ":") <> 0) Тогда ОбщегоНазначения.СообщитьПользователю( - НСтр("ru = 'Путь к файловой базе должен быть + НСтр("ru = 'Путь к файловой информационной базе должен быть задан |в формате UNC (\\servername\resource)'"), , "ПолноеИмяФайловойБазыWindows"); @@ -2308,65 +1854,9 @@ КонецПроцедуры -// Размещает файлы в томах, устанавливая ссылки в ВерсииФайла. -// -Процедура ДобавитьФайлыВТома(ПутьКАрхивуWindows, ПутьКАрхивуLinux) Экспорт - - ПолноеИмяФайлаZip = ""; - Если ОбщегоНазначения.ЭтоWindowsСервер() Тогда - ПолноеИмяФайлаZip = ПутьКАрхивуWindows; - Иначе - ПолноеИмяФайлаZip = ПутьКАрхивуLinux; - КонецЕсли; - - ИмяКаталога = ПолучитьИмяВременногоФайла(); - СоздатьКаталог(ИмяКаталога); - - ZIP = Новый ЧтениеZipФайла(ПолноеИмяФайлаZip); - ZIP.ИзвлечьВсе(ИмяКаталога, РежимВосстановленияПутейФайловZIP.НеВосстанавливать); - - СоответствиеПутейФайлов = Новый Соответствие; - - Для Каждого ZIPЭлемент Из ZIP.Элементы Цикл - ПолныйПутьФайла = ИмяКаталога + "\" + ZIPЭлемент.Имя; - УникальныйИдентификатор = ZIPЭлемент.ИмяБезРасширения; - - СоответствиеПутейФайлов.Вставить(УникальныйИдентификатор, ПолныйПутьФайла); - КонецЦикла; - - ТипХраненияФайлов = ТипХраненияФайлов(); - НачатьТранзакцию(); - Попытка - ДобавитьФайлыВТомаПриРазмещении(СоответствиеПутейФайлов, ТипХраненияФайлов); - - ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); - ВызватьИсключение; - КонецПопытки; - - // Очистим регистрацию изменений, которые мы только что сделали. - Для Каждого ПланОбмена Из Метаданные.ПланыОбмена Цикл - ИмяПланаОбмена = ПланОбмена.Имя; - МенеджерПланаОбмена = ПланыОбмена[ИмяПланаОбмена]; - - ЭтотУзел = МенеджерПланаОбмена.ЭтотУзел(); - Выборка = МенеджерПланаОбмена.Выбрать(); - - Пока Выборка.Следующий() Цикл - - ПланОбменаОбъект = Выборка.ПолучитьОбъект(); - Если ПланОбменаОбъект.Ссылка <> ЭтотУзел Тогда - УдалитьРегистрациюИзменений(ПланОбменаОбъект.Ссылка); - КонецЕсли; - КонецЦикла; - - КонецЦикла; - -КонецПроцедуры +#КонецОбласти -//////////////////////////////////////////////////////////////////////////////// -// Обработчики регламентных заданий. +#Область ОбработчикиРегламентныхЗаданий // Обработчик регламентного задания ИзвлечениеТекста. // Извлекает текст из файлов на диске. @@ -2379,8 +1869,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Извлечение текста. +#КонецОбласти + +#Область ИзвлечениеТекста // Возвращает текст запроса для получения файлов у которых не извлечен текст. // @@ -2430,8 +1921,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Сканирование +#КонецОбласти + +#Область Сканирование Функция ПараметрыСканераВПеречисления(РазрешениеЧисло, ЦветностьЧисло, ПоворотЧисло, РазмерБумагиЧисло) Экспорт @@ -2500,8 +1992,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Очистка ненужных файлов +#КонецОбласти + +#Область ОчисткаНенужныхФайлов Процедура ОчиститьНенужныеФайлы(Параметры = Неопределено, АдресРезультата = Неопределено) Экспорт @@ -2539,8 +2032,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Обработчики событий подсистем конфигурации. +#КонецОбласти + +#Область ОбработчикиСобытийПодсистемКонфигурации // См. СтандартныеПодсистемыСервер.ПриОтправкеДанныхПодчиненному. Процедура ПриОтправкеДанныхПодчиненному(ЭлементДанных, ОтправкаЭлемента, СозданиеНачальногоОбраза, Получатель) Экспорт @@ -2788,7 +2282,7 @@ НСтр("ru = 'Перенос электронных подписей и сертификатов шифрования |из табличных частей в регистры сведений.'"); Обработчик.Идентификатор = Новый УникальныйИдентификатор("d70f378a-41f5-4b0a-a1a7-f4ba27c7f91b"); - Обработчик.Процедура = "РаботаСФайламиСлужебный.ПеренестиЭлектронныеПодписиИСертификатыШифрованияВРегистрыСведений"; + Обработчик.Процедура = "РаботаСФайлами.ПеренестиЭлектронныеПодписиИСертификатыШифрованияВРегистрыСведений"; Обработчик.РежимВыполнения = "Отложенно"; Обработчик.ОчередьОтложеннойОбработки = 1; Обработчик.ПроцедураЗаполненияДанныхОбновления = "РаботаСФайламиСлужебный.ЗарегистрироватьОбъектыДляПереносаЭлектронныхПодписейИСертификатовШифрования"; @@ -2826,7 +2320,7 @@ Обработчик.ПроцедураПроверки = "ОбновлениеИнформационнойБазы.ДанныеОбновленыНаНовуюВерсиюПрограммы"; Обработчик.ПриоритетыВыполнения = ОбновлениеИнформационнойБазы.ПриоритетыВыполненияОбработчика(); Приоритет = Обработчик.ПриоритетыВыполнения.Добавить(); - Приоритет.Процедура = "РаботаСФайламиСлужебный.ПеренестиЭлектронныеПодписиИСертификатыШифрованияВРегистрыСведений"; + Приоритет.Процедура = "РаботаСФайлами.ПеренестиЭлектронныеПодписиИСертификатыШифрованияВРегистрыСведений"; Приоритет.Порядок = "После"; Обработчик = Обработчики.Добавить(); @@ -2844,7 +2338,7 @@ Обработчик.ПроцедураПроверки = "ОбновлениеИнформационнойБазы.ДанныеОбновленыНаНовуюВерсиюПрограммы"; Обработчик.ПриоритетыВыполнения = ОбновлениеИнформационнойБазы.ПриоритетыВыполненияОбработчика(); Приоритет = Обработчик.ПриоритетыВыполнения.Добавить(); - Приоритет.Процедура = "РаботаСФайламиСлужебный.ПеренестиЭлектронныеПодписиИСертификатыШифрованияВРегистрыСведений"; + Приоритет.Процедура = "РаботаСФайлами.ПеренестиЭлектронныеПодписиИСертификатыШифрованияВРегистрыСведений"; Приоритет.Порядок = "Любой"; Приоритет = Обработчик.ПриоритетыВыполнения.Добавить(); Приоритет.Процедура = "РегистрыСведений.СведенияОФайлах.ОбработатьДанныеДляПереходаНаНовуюВерсию"; @@ -2868,7 +2362,7 @@ Обработчик.ПроцедураПроверки = "ОбновлениеИнформационнойБазы.ДанныеОбновленыНаНовуюВерсиюПрограммы"; Обработчик.ПриоритетыВыполнения = ОбновлениеИнформационнойБазы.ПриоритетыВыполненияОбработчика(); Приоритет = Обработчик.ПриоритетыВыполнения.Добавить(); - Приоритет.Процедура = "РаботаСФайламиСлужебный.ПеренестиЭлектронныеПодписиИСертификатыШифрованияВРегистрыСведений"; + Приоритет.Процедура = "РаботаСФайлами.ПеренестиЭлектронныеПодписиИСертификатыШифрованияВРегистрыСведений"; Приоритет.Порядок = "Любой"; Приоритет = Обработчик.ПриоритетыВыполнения.Добавить(); Приоритет.Процедура = "РегистрыСведений.НаличиеФайлов.ОбработатьДанныеДляПереходаНаНовуюВерсию"; @@ -2877,12 +2371,6 @@ Приоритет.Процедура = "РегистрыСведений.СведенияОФайлах.ОбработатьДанныеДляПереходаНаНовуюВерсию"; Приоритет.Порядок = "Любой"; - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "2.4.1.1"; - Обработчик.ОбщиеДанные = Истина; - Обработчик.Процедура = "РаботаСФайламиСлужебный.ОбновитьПутьТомаLinux"; - Обработчик.РежимВыполнения = "Оперативно"; - Обработчик = Обработчики.Добавить(); Обработчик.Версия = "3.0.2.46"; Обработчик.Комментарий = @@ -2898,7 +2386,7 @@ Обработчик.ПроцедураПроверки = "ОбновлениеИнформационнойБазы.ДанныеОбновленыНаНовуюВерсиюПрограммы"; Обработчик.ПриоритетыВыполнения = ОбновлениеИнформационнойБазы.ПриоритетыВыполненияОбработчика(); Приоритет = Обработчик.ПриоритетыВыполнения.Добавить(); - Приоритет.Процедура = "РаботаСФайламиСлужебный.ПеренестиЭлектронныеПодписиИСертификатыШифрованияВРегистрыСведений"; + Приоритет.Процедура = "РаботаСФайлами.ПеренестиЭлектронныеПодписиИСертификатыШифрованияВРегистрыСведений"; Приоритет.Порядок = "Любой"; Приоритет = Обработчик.ПриоритетыВыполнения.Добавить(); Приоритет.Процедура = "РегистрыСведений.НаличиеФайлов.ОбработатьДанныеДляПереходаНаНовуюВерсию"; @@ -2907,10 +2395,7 @@ Приоритет.Процедура = "Справочники.Файлы.ОбработатьДанныеДляПереходаНаНовуюВерсию"; Приоритет.Порядок = "Любой"; - Обработчик = Обработчики.Добавить(); - Обработчик.Процедура = "РаботаСФайламиСлужебный.НачальноеЗаполнение"; - Обработчик.НачальноеЗаполнение = Истина; - Обработчик.РежимВыполнения = "Оперативно"; + РаботаСФайламиВТомахСлужебный.ПриДобавленииОбработчиковОбновления(Обработчики); КонецПроцедуры @@ -3058,6 +2543,15 @@ КонецПроцедуры +// См. ОбновлениеИнформационнойБазыПереопределяемый.ПриОпределенииНастроек +Процедура ПриОпределенииОбъектовСНачальнымЗаполнением(Объекты) Экспорт + + Объекты.Добавить(Метаданные.Справочники.ПапкиФайлов); + +КонецПроцедуры + +#КонецОбласти + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -3152,37 +2646,6 @@ КонецПроцедуры -// Служебная функция используется при создании начального образа. -// Выполняется всегда на сервере. -// -Процедура СкопироватьФайлПриСозданииНачальногоОбраза(ПолныйПуть, НовыйПутьФайла) - - Попытка - // Если файл в томе - скопируем его во временный каталог (при создании начального образа). - КопироватьФайл(ПолныйПуть, НовыйПутьФайла); - ФайлВременный = Новый Файл(НовыйПутьФайла); - ФайлВременный.УстановитьТолькоЧтение(Ложь); - Исключение - // Не регистрируется, возможно файл не найден. - // Отсутствующий файл может быть восстановлен позже, - // поэтому исключение игнорируется, чтобы не останавливать создание начального образа. - КонецПопытки; - -КонецПроцедуры - -// Служебная функция используется для помещения двоичных данных файла в томе -// в хранилище значения. -// -Функция ПоместитьДвоичныеДанныеВХранилище(Том, ПутьКФайлу, УникальныйИдентификатор) - - ПолныйПуть = ПолныйПутьТома(Том) + ПутьКФайлу; - УникальныйИдентификатор = УникальныйИдентификатор; - - ДвоичныеДанные = Новый ДвоичныеДанные(ПолныйПуть); - Возврат Новый ХранилищеЗначения(ДвоичныеДанные); - -КонецФункции - Процедура ВыполнитьОчисткуДанныхОВерсии(ФайлСсылка) ИмяФайлаСПутем = ""; @@ -3203,21 +2666,7 @@ + " " + Формат(ТекущаяДатаСеанса(),"ДЛФ=D") + Символы.ПС; Если ФайлОбъект.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда - ИмяФайлаСПутем = ПолныйПутьТома(ФайлОбъект.Том) + ФайлОбъект.ПутьКФайлу; - ИмяФайлаСПутемДляУдаления = ИмяФайлаСПутем + ".del"; - ФайлНаДиске = Новый Файл(ИмяФайлаСПутем); - Если ФайлНаДиске.Существует() Тогда - ФайлНаДиске.УстановитьТолькоЧтение(Ложь); - // Переместим файл во временный. - ПереместитьФайл(ИмяФайлаСПутем, ИмяФайлаСПутемДляУдаления); - ФайлОбъект.Том = Справочники.ТомаХраненияФайлов.ПустаяСсылка(); - ФайлОбъект.ПутьКФайлу = ""; - ФайлОбъект.Комментарий = ТекстКомментария + ФайлОбъект.Комментарий; - ФайлОбъект.Записать(); - ФайлОбъект.УстановитьПометкуУдаления(Истина); - // Удалим временный файл, т.к. успешно обновили данные о файле. - УдалитьФайлы(ИмяФайлаСПутемДляУдаления); - КонецЕсли; + РаботаСФайламиВТомахСлужебный.УдалитьДанныеФайла(ФайлОбъект, ТекстКомментария); Иначе УстановитьПривилегированныйРежим(Истина); @@ -3281,21 +2730,7 @@ + " " + Формат(ТекущаяДатаСеанса(),"ДЛФ=D") + Символы.ПС; Если ФайлОбъект.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда - ИмяФайлаСПутем = ПолныйПутьТома(ФайлОбъект.Том) + ФайлОбъект.ПутьКФайлу; - ИмяФайлаСПутемДляУдаления = ИмяФайлаСПутем + ".del"; - ФайлНаДиске = Новый Файл(ИмяФайлаСПутем); - Если ФайлНаДиске.Существует() Тогда - ФайлНаДиске.УстановитьТолькоЧтение(Ложь); - // Переместим файл во временный. - ПереместитьФайл(ИмяФайлаСПутем, ИмяФайлаСПутемДляУдаления); - ФайлОбъект.Том = Справочники.ТомаХраненияФайлов.ПустаяСсылка(); - ФайлОбъект.ПутьКФайлу = ""; - ФайлОбъект.Описание = ТекстОписания + ФайлОбъект.Описание; - ФайлОбъект.Записать(); - ФайлОбъект.УстановитьПометкуУдаления(Истина); - // Удалим временный файл, т.к. успешно обновили данные о файле. - УдалитьФайлы(ИмяФайлаСПутемДляУдаления); - КонецЕсли; + РаботаСФайламиВТомахСлужебный.УдалитьДанныеФайла(ФайлОбъект, ТекстОписания); Иначе УдалитьЗаписьИзРегистраДвоичныеДанныеФайлов(ФайлСсылка); ФайлОбъект.Описание = ТекстОписания + ФайлОбъект.Описание; @@ -3360,21 +2795,15 @@ И Получатель.ДополнительныеСвойства.Свойство("РазмещатьФайлыВНачальномОбразе") Тогда // Помещаем данные файла из тома на диске в служебный реквизит справочника. - ПоместитьФайлВРеквизитСправочника(ЭлементДанных); - + РаботаСФайламиВТомахСлужебный.ПоместитьФайлВРеквизитСправочника(ЭлементДанных); Иначе // Копируем файл из тома на диске в каталог создания начального образа. - ИмяКаталогаФайлов = Строка(ХранилищеОбщихНастроек.Загрузить("ОбменФайлами", "ВременныйКаталог")); - - ПолныйПуть = ПолныйПутьТома(ЭлементДанных.Том) + ЭлементДанных.ПутьКФайлу; - УникальныйИдентификатор = ЭлементДанных.Ссылка.УникальныйИдентификатор(); - НовыйПутьФайла = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла( - ИмяКаталогаФайлов, - УникальныйИдентификатор); - - СкопироватьФайлПриСозданииНачальногоОбраза(ПолныйПуть, НовыйПутьФайла); + Строка(ХранилищеОбщихНастроек.Загрузить("ОбменФайлами", "ВременныйКаталог")), + ЭлементДанных.Ссылка.УникальныйИдентификатор()); + + РаботаСФайламиВТомахСлужебный.СкопироватьФайл(ЭлементДанных.Ссылка, НовыйПутьФайла); КонецЕсли; @@ -3387,7 +2816,6 @@ Иначе ОбработатьОтправкуФайлаПоТипуХранения(ЭлементДанных); - ЗаполнитьПутьКФайлуПриОтправке(ЭлементДанных); КонецЕсли; ИначеЕсли ТипЗнч(ЭлементДанных) = Тип("РегистрСведенийНаборЗаписей.ДвоичныеДанныеФайлов") @@ -3447,18 +2875,10 @@ // Для существующих файлов, размещенных в томах, выполняем их удаление из томов, // т.к. при получении нового файла он будет заново размещен в томе или информационной базе. - Если НЕ ЭлементДанных.ЭтоНовый() Тогда - - ВерсияФайла = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ЭлементДанных.Ссылка, "ТипХраненияФайла, Том, ПутьКФайлу"); - - Если ВерсияФайла.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда - - ПрежнийПутьНаТоме = ПолныйПутьТома(ВерсияФайла.Том) + ВерсияФайла.ПутьКФайлу; - - УдалитьФайлВТоме(ПрежнийПутьНаТоме); - - КонецЕсли; + Если Не ЭлементДанных.ЭтоНовый() + И ЭлементДанных.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда + РаботаСФайламиВТомахСлужебный.УдалитьДанныеФайла(ЭлементДанных); КонецЕсли; ДвоичныеДанные = ЭлементДанных.ФайлХранилище.Получить(); @@ -3490,18 +2910,9 @@ УровеньЖурналаРегистрации.Ошибка, ТипМетаданных, ЭлементДанных.Ссылка, ТекстОшибки); Иначе - - СведенияОФайле = ДобавитьФайлВТом(ДвоичныеДанные, - ЭлементДанных.ДатаМодификацииУниверсальная, ЭлементДанных.Наименование, ЭлементДанных.Расширение, - НомерВерсии, ПутьКФайлуПриПолученииСодержитПризнакЗашифрован(ЭлементДанных)); - ЭлементДанных.Том = СведенияОФайле.Том; - ЭлементДанных.ПутьКФайлу = СведенияОФайле.ПутьКФайлу; - + РаботаСФайламиВТомахСлужебный.ДобавитьФайл(ЭлементДанных, ДвоичныеДанные, , Истина); КонецЕсли; - ЭлементДанных.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске; - ЭлементДанных.ФайлХранилище = Новый ХранилищеЗначения(Неопределено); - Иначе Если ТипЗнч(ДвоичныеДанные) = Тип("ДвоичныеДанные") Тогда @@ -3519,28 +2930,6 @@ КонецПроцедуры -Процедура ЗаполнитьПутьКФайлуПриОтправке(ЭлементДанных) - - Если ТипЗнч(ЭлементДанных) <> Тип("СправочникОбъект.ВерсииФайлов") Тогда - ЭлементДанных.ПутьКФайлу = ""; - Возврат; - КонецЕсли; - - ДанныеЗашифрованы = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ЭлементДанных.Владелец, "Зашифрован"); - ЭлементДанных.ПутьКФайлу = ?(ДанныеЗашифрованы, ".p7m", ""); - -КонецПроцедуры - -Функция ПутьКФайлуПриПолученииСодержитПризнакЗашифрован(ЭлементДанных) - - Если ТипЗнч(ЭлементДанных) <> Тип("СправочникОбъект.ВерсииФайлов") Тогда - Возврат ЭлементДанных.Зашифрован; - КонецЕсли; - - Возврат СтрЗаканчиваетсяНа(ЭлементДанных.ПутьКФайлу, ".p7m"); - -КонецФункции - // Возвращает Истина, если это элемент данных, относящийся к подсистеме РаботаСФайлами. // Функция ЭтоЭлементРаботаСФайлами(ЭлементДанных) @@ -3581,7 +2970,7 @@ // на одну единицу и возвращает полученный результат. // // Возвращаемое значение: -// Строка (10) - новый идентификатор объекта. +// Строка - Строка (10) - новый идентификатор объекта. // Функция ПолучитьОчереднойИдентификаторОбъекта() Экспорт @@ -3656,8 +3045,7 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Другие процедуры и функции. +#Область ДругиеПроцедурыИФункции Процедура ОбновитьСписокЗапрещенныхРасширений() Экспорт @@ -4318,33 +3706,12 @@ // Возвращаемое значение: // Строка - навигационная ссылка. Функция ПолучитьНавигационнуюСсылкуВоВременномХранилище(ВерсияСсылка, ИдентификаторФормы = Неопределено) Экспорт + Адрес = ""; - - ТипХраненияФайла = ВерсияСсылка.ТипХраненияФайла; - + ТипХраненияФайла = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ВерсияСсылка, "ТипХраненияФайла"); Если ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда - Если НЕ ВерсияСсылка.Том.Пустая() Тогда - ПолныйПуть = ПолныйПутьТома(ВерсияСсылка.Том) + ВерсияСсылка.ПутьКФайлу; - Попытка - ДвоичныеДанные = Новый ДвоичныеДанные(ПолныйПуть); - Адрес = ПоместитьВоВременноеХранилище(ДвоичныеДанные, ИдентификаторФормы); - Исключение - // Запись в журнал регистрации. - СообщениеОбОшибке = СформироватьТекстОшибкиПолученияФайлСТомаДляАдминистратора( - ИнформацияОбОшибке(), ВерсияСсылка.Владелец); - - ЗаписьЖурналаРегистрации( - НСтр("ru = 'Файлы.Открытие файла'", - ОбщегоНазначения.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка, - Метаданные.Справочники.Файлы, - ВерсияСсылка.Владелец, - СообщениеОбОшибке); - - ВызватьИсключение ОшибкаФайлНеНайденВХранилищеФайлов( - ВерсияСсылка.ПолноеНаименование + "." + ВерсияСсылка.Расширение); - КонецПопытки; - КонецЕсли; + ДвоичныеДанные = РаботаСФайламиВТомахСлужебный.ДанныеФайла(ВерсияСсылка); + Адрес = ПоместитьВоВременноеХранилище(ДвоичныеДанные, ИдентификаторФормы); Иначе ХранилищеФайла = РаботаСФайлами.ХранилищеФайлаИзИнформационнойБазы(ВерсияСсылка); ДвоичныеДанные = ХранилищеФайла.Получить(); @@ -4355,24 +3722,6 @@ КонецФункции -// Формирует текст ошибки для помещения в журнал регистрации. -// Параметры: -// ИнформацияОбОшибкеФункции - ИнформацияОбОшибке -// ФайлСсылка - СправочникСсылка.Файлы - файл. -// -// Возвращаемое значение: -// Строка - описание ошибки -// -Функция СформироватьТекстОшибкиПолученияФайлСТомаДляАдминистратора(ИнформацияОбОшибкеФункции, ФайлСсылка) Экспорт - - Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ссылка на файл: ""%1"". - |""%2"".'"), - ПолучитьНавигационнуюСсылку(ФайлСсылка), - ПодробноеПредставлениеОшибки(ИнформацияОбОшибкеФункции)); - -КонецФункции - // Получает значение настройки ПоказыватьКолонкуРазмер. // Возвращаемое значение: // Булево - Показывать колонку размер. @@ -4434,6 +3783,7 @@ НачатьТранзакцию(); Попытка + Блокировка = Новый БлокировкаДанных; ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.НомераОтсканированныхФайлов"); ЭлементБлокировки.УстановитьЗначение("Владелец", Владелец); @@ -4464,6 +3814,7 @@ УстановитьОтключениеБезопасногоРежима(Ложь); ЗафиксироватьТранзакцию(); + Исключение ОтменитьТранзакцию(); ВызватьИсключение; @@ -4526,8 +3877,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Пользовательские настройки +#КонецОбласти + +#Область ПользовательскиеНастройки // Считаем ДействиеПоДвойномуЩелчкуМыши - если первый раз - поставим правильное значение. // @@ -4592,130 +3944,9 @@ Возврат СпрашиватьРежимРедактированияПриОткрытииФайла; КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Поддержка обмена файлами +#КонецОбласти -// Служебная функции. Используется для удаления файла на сервере. -// -Процедура УдалитьФайлВТоме(ИмяУдаляемогоФайла) - - // Удаляем файл. - ФайлВременный = Новый Файл(ИмяУдаляемогоФайла); - Если ФайлВременный.Существует() Тогда - - Попытка - ФайлВременный.УстановитьТолькоЧтение(Ложь); - УдалитьФайлы(ИмяУдаляемогоФайла); - Исключение - ЗаписьЖурналаРегистрации( - НСтр("ru = 'Файлы.Удаление файлов в томе'", - ОбщегоНазначения.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка, - , - , - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - КонецПопытки; - - КонецЕсли; - - // Удаляем каталог файла, если после удаления файла каталог стал пустым. - Попытка - МассивФайловВКаталоге = НайтиФайлы(ФайлВременный.Путь, ПолучитьМаскуВсеФайлы()); - Если МассивФайловВКаталоге.Количество() = 0 Тогда - УдалитьФайлы(ФайлВременный.Путь); - КонецЕсли; - Исключение - ЗаписьЖурналаРегистрации( - НСтр("ru = 'Файлы.Удаление файлов в томе'", - ОбщегоНазначения.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка, - , - , - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - КонецПопытки; - -КонецПроцедуры - -// Добавляет файл в тома при выполнении команды "разместить файлы начального образа". -// Параметры: -// СоответствиеПутейФайлов - Соответствие - соответствие УникальногоИдентификатора файла и пути на диске к файлу. -// ТипХраненияФайла - Перечисления.ТипыХраненияФайлов - тип хранения файлов. -Процедура ДобавитьФайлыВТомаПриРазмещении(СоответствиеПутейФайлов, ТипХраненияФайла) - - Выборка = Справочники.ВерсииФайлов.Выбрать(); - - Пока Выборка.Следующий() Цикл - - Объект = Выборка.ПолучитьОбъект(); - - Если Объект.ТипХраненияФайла <> Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда - Продолжить; - КонецЕсли; - - УникальныйИдентификатор = Строка(Объект.Ссылка.УникальныйИдентификатор()); - - ПолныйПутьФайлаНаДиске = СоответствиеПутейФайлов.Получить(УникальныйИдентификатор); - ПолныйПутьНовый = ""; - - Если ПолныйПутьФайлаНаДиске = Неопределено Тогда - Продолжить; - КонецЕсли; - - ХранилищеФайла = Неопределено; - - // В базе-приемнике файлы должны храниться в информационной базе - значит там их и разместим (даже если в исходной - // базе они были в томах). - Если ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда - - Объект.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе; - Объект.ПутьКФайлу = ""; - Объект.Том = Справочники.ТомаХраненияФайлов.ПустаяСсылка(); - - ДвоичныеДанные = Новый ДвоичныеДанные(ПолныйПутьФайлаНаДиске); - ХранилищеФайла = Новый ХранилищеЗначения(ДвоичныеДанные); - - Иначе // В базе-приемнике файлы должны храниться в томах на диске - переместим разархивированный файл на том. - - ФайлИсходный = Новый Файл(ПолныйПутьФайлаНаДиске); - ПолныйПутьНовый = ФайлИсходный.Путь + Объект.Наименование + "." + Объект.Расширение; - ПереместитьФайл(ПолныйПутьФайлаНаДиске, ПолныйПутьНовый); - - // Добавить в один из томов (где есть свободное место). - СведенияОФайле = ДобавитьФайлВТом(ПолныйПутьНовый, Объект.ДатаМодификацииУниверсальная, - Объект.Наименование, Объект.Расширение, Объект.НомерВерсии, Объект.Владелец.Зашифрован); - Объект.Том = СведенияОФайле.Том; - Объект.ПутьКФайлу = СведенияОФайле.ПутьКФайлу; - - КонецЕсли; - - Объект.ДополнительныеСвойства.Вставить("РазмещениеФайловВТомах", Истина); // Чтобы прошла запись подписанных файлов. - Объект.Записать(); - - Если ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда - ЗаписатьФайлВИнформационнуюБазу(Объект.Ссылка, ХранилищеФайла); - КонецЕсли; - - Если НЕ ПустаяСтрока(ПолныйПутьНовый) Тогда - УдалитьФайлы(ПолныйПутьНовый); - КонецЕсли; - - КонецЦикла; - -КонецПроцедуры - -// Удаляет регистрацию изменений - после размещения в томах. -// Параметры: -// ПланОбменаСсылка - ПланОбмена.Ссылка - план обмена. -Процедура УдалитьРегистрациюИзменений(ПланОбменаСсылка) - - ПланыОбмена.УдалитьРегистрациюИзменений(ПланОбменаСсылка, Метаданные.Справочники.ВерсииФайлов); - ПланыОбмена.УдалитьРегистрациюИзменений(ПланОбменаСсылка, Метаданные.Справочники.Файлы); - ПланыОбмена.УдалитьРегистрациюИзменений(ПланОбменаСсылка, Метаданные.РегистрыСведений.ДвоичныеДанныеФайлов); - -КонецПроцедуры - -///////////////////////////////////////////////////////////////////////////////////////// -// Работа с кодировками +#Область РаботаСКодировками // Функция возвращает таблицу имен кодировок. // Возвращаемое значение: @@ -4753,8 +3984,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Вспомогательные процедуры и функции. +#КонецОбласти + +#Область ВспомогательныеПроцедурыИФункции // Отмечает файл, как редактируемый. // @@ -4830,7 +4062,7 @@ Если ЭлементДанных.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда // Помещаем данные файла из тома на диске в служебный реквизит справочника. - ПоместитьФайлВРеквизитСправочника(ЭлементДанных); + РаботаСФайламиВТомахСлужебный.ПоместитьФайлВРеквизитСправочника(ЭлементДанных); Иначе // Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе @@ -4859,23 +4091,6 @@ КонецПроцедуры -Процедура ПоместитьФайлВРеквизитСправочника(ЭлементДанных) - - Попытка - // Помещаем данные файла из тома на диске в служебный реквизит справочника. - ЭлементДанных.ФайлХранилище = ПоместитьДвоичныеДанныеВХранилище(ЭлементДанных.Том, ЭлементДанных.ПутьКФайлу, ЭлементДанных.Ссылка.УникальныйИдентификатор()); - Исключение - // Возможно, файл не был найден. Отправку данных не прерываем. - ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииДляОбмена(), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - ЭлементДанных.ФайлХранилище = Новый ХранилищеЗначения(Неопределено); - КонецПопытки; - - ЭлементДанных.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе; - ЭлементДанных.ПутьКФайлу = ""; - ЭлементДанных.Том = Справочники.ТомаХраненияФайлов.ПустаяСсылка(); - -КонецПроцедуры - // Возвращает массив присоединенных файлов для указанного владельца. // // Параметры: @@ -4919,7 +4134,7 @@ // Возвращает строковую константу для формирования сообщений журнала регистрации. // // Возвращаемое значение: -// Строка +// Строка - // Функция СобытиеЖурналаРегистрацииДляОбмена() @@ -4974,7 +4189,7 @@ КонецПопытки; Если Не ЭтоФайлВБазе Тогда - ОбновитьДвоичныеДанныеФайлаВТоме(ФайлОбъект, ФайлСсылка, ДвоичныеДанные); + РаботаСФайламиВТомахСлужебный.ОбновитьФайл(ФайлОбъект, ДвоичныеДанные); КонецЕсли; КонецПроцедуры @@ -5009,42 +4224,6 @@ КонецПроцедуры -Процедура ОбновитьДвоичныеДанныеФайлаВТоме(ФайлОбъект, ФайлСсылка, ДвоичныеДанные) - - Попытка - - ПолныйПуть = ПолныйПутьТома(ФайлОбъект.Том) + ФайлОбъект.ПутьКФайлу; - Если Не ПустаяСтрока(ПолныйПуть) Тогда - - ФайлНаДиске = Новый Файл(ПолныйПуть); - Если ФайлНаДиске.Существует() Тогда - ФайлНаДиске.УстановитьТолькоЧтение(Ложь); - УдалитьФайлы(ПолныйПуть); - КонецЕсли; - - КонецЕсли; - - СведенияОФайле = ДобавитьФайлВТом(ДвоичныеДанные, ФайлОбъект.ДатаМодификацииУниверсальная, - ФайлОбъект.Наименование, ФайлОбъект.Расширение,, ФайлОбъект.Зашифрован); - ФайлОбъект.ПутьКФайлу = СведенияОФайле.ПутьКФайлу; - ФайлОбъект.Том = СведенияОФайле.Том; - ФайлОбъект.Размер = ДвоичныеДанные.Размер(); - ФайлОбъект.Записать(); - - Исключение - ИнформацияОбОшибке = ИнформацияОбОшибке(); - ЗаписьЖурналаРегистрации( - НСтр("ru = 'Файлы.Запись файла на диск'", ОбщегоНазначения.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка, - Метаданные.Справочники[ФайлСсылка.Метаданные().Имя], - ФайлСсылка, - ТекстОшибкиПриСохраненииФайлаВТоме(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке), ФайлСсылка)); - - ВызватьИсключение ТекстОшибкиПриСохраненииФайлаВТоме(КраткоеПредставлениеОшибки(ИнформацияОбОшибке), ФайлСсылка); - КонецПопытки; - -КонецПроцедуры - // Создает версию сохраняемого файла для сохранения в ИБ. // // Параметры: @@ -5103,9 +4282,10 @@ Версия.ДатаСоздания = СведенияОФайле.НоваяВерсияДатаСоздания; КонецЕсли; - Версия.ПолноеНаименование = СведенияОФайле.ИмяБезРасширения; Версия.Размер = СведенияОФайле.Размер; Версия.Расширение = ОбщегоНазначенияКлиентСервер.РасширениеБезТочки(СведенияОФайле.РасширениеБезТочки); + Версия.Наименование = СведенияОФайле.ИмяБезРасширения; + Версия.ПолноеНаименование = Версия.Наименование; ТипХраненияФайлов = ТипХраненияФайлов(); Версия.ТипХраненияФайла = ТипХраненияФайлов; @@ -5113,39 +4293,36 @@ Если СведенияОФайле.СсылкаНаВерсиюИсточник <> Неопределено Тогда // создание Файла из шаблона ТипХраненияФайловШаблона = СведенияОФайле.СсылкаНаВерсиюИсточник.ТипХраненияФайла; - - Если ТипХраненияФайловШаблона = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе И ТипХраненияФайлов = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда + Если ТипХраненияФайловШаблона = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе + И ТипХраненияФайлов = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда + // И шаблон, и новый Файл - в базе. // При создании Файла из шаблона хранилище значения копируется напрямую. ДвоичныеДанные = СведенияОФайле.АдресВременногоХранилищаФайла.Получить(); - ИначеЕсли ТипХраненияФайловШаблона = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске И ТипХраненияФайлов = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда - // И шаблон, и новый Файл - на диске - просто копируем файл. + ИначеЕсли ТипХраненияФайловШаблона = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске + И ТипХраненияФайлов = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда + // И шаблон, и новый Файл - на диске - просто копируем файл. Если Не СведенияОФайле.СсылкаНаВерсиюИсточник.Том.Пустая() Тогда - ПолныйПутьФайлаШаблона = ПолныйПутьТома(СведенияОФайле.СсылкаНаВерсиюИсточник.Том) - + СведенияОФайле.СсылкаНаВерсиюИсточник.ПутьКФайлу; - - Сведения = ДобавитьФайлВТом(ПолныйПутьФайлаШаблона, СведенияОФайле.ВремяИзмененияУниверсальное, - СведенияОФайле.ИмяБезРасширения, СведенияОФайле.РасширениеБезТочки, Версия.НомерВерсии, СведенияОФайле.Зашифрован); - Версия.Том = Сведения.Том; - Версия.ПутьКФайлу = Сведения.ПутьКФайлу; + ПолныйПутьФайлаШаблона = РаботаСФайламиВТомахСлужебный.ПолноеИмяФайлаВТоме( + РаботаСФайламиВТомахСлужебный.СвойстваФайлаВТоме(СведенияОФайле.СсылкаНаВерсиюИсточник)); + РаботаСФайламиВТомахСлужебный.ДобавитьФайл(Версия, ПолныйПутьФайлаШаблона); КонецЕсли; - ИначеЕсли ТипХраненияФайловШаблона = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе И ТипХраненияФайлов = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда + ИначеЕсли ТипХраненияФайловШаблона = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе + И ТипХраненияФайлов = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда + // Шаблон в базе, новый Файл - на диске. // В этом случае в АдресВременногоХранилищаФайла находится ХранилищеЗначения с файлом. - Сведения = ДобавитьФайлВТом(СведенияОФайле.АдресВременногоХранилищаФайла.Получить(), - СведенияОФайле.ВремяИзмененияУниверсальное, СведенияОФайле.ИмяБезРасширения, СведенияОФайле.РасширениеБезТочки, - Версия.НомерВерсии, СведенияОФайле.Зашифрован); - Версия.Том = Сведения.Том; - Версия.ПутьКФайлу = Сведения.ПутьКФайлу; + РаботаСФайламиВТомахСлужебный.ДобавитьФайл(Версия, СведенияОФайле.АдресВременногоХранилищаФайла.Получить()); + + ИначеЕсли ТипХраненияФайловШаблона = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске + И ТипХраненияФайлов = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда - ИначеЕсли ТипХраненияФайловШаблона = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске И ТипХраненияФайлов = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда // Шаблон на диске, новый Файл - в базе. Если Не СведенияОФайле.СсылкаНаВерсиюИсточник.Том.Пустая() Тогда - ПолныйПутьФайлаШаблона = ПолныйПутьТома(СведенияОФайле.СсылкаНаВерсиюИсточник.Том) + СведенияОФайле.СсылкаНаВерсиюИсточник.ПутьКФайлу; - ДвоичныеДанные = Новый ДвоичныеДанные(ПолныйПутьФайлаШаблона); + ДвоичныеДанные = РаботаСФайламиВТомахСлужебный.ДанныеФайла(СведенияОФайле.СсылкаНаВерсиюИсточник); КонецЕсли; КонецЕсли; @@ -5159,13 +4336,7 @@ КонецЕсли; Если ТипХраненияФайлов = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда - - Сведения = ДобавитьФайлВТом(ДвоичныеДанные, - СведенияОФайле.ВремяИзмененияУниверсальное, СведенияОФайле.ИмяБезРасширения, СведенияОФайле.РасширениеБезТочки, - Версия.НомерВерсии); - Версия.Том = Сведения.Том; - Версия.ПутьКФайлу = Сведения.ПутьКФайлу; - + РаботаСФайламиВТомахСлужебный.ДобавитьФайл(Версия, ДвоичныеДанные); КонецЕсли; КонецЕсли; @@ -5195,50 +4366,6 @@ КонецФункции -// Для справочника ВерсииФайлов переименует файл на диске, если ТипХраненияФайла = ВТомахНаДиске. -Процедура ПереименоватьФайлВерсииНаДиске(Версия, СтароеНаименование, НовоеНаименование, - УникальныйИдентификатор = Неопределено) Экспорт - - Если Версия.Том.Пустая() Тогда - Возврат; - КонецЕсли; - - НачатьТранзакцию(); - Попытка - - БлокировкаДанных = Новый БлокировкаДанных; - ЭлементБлокировкиДанных = БлокировкаДанных.Добавить(Метаданные.НайтиПоТипу(ТипЗнч(Версия)).ПолноеИмя()); - ЭлементБлокировкиДанных.УстановитьЗначение("Ссылка", Версия); - БлокировкаДанных.Заблокировать(); - - ВерсияОбъект = Версия.ПолучитьОбъект(); - ЗаблокироватьДанныеДляРедактирования(Версия, , УникальныйИдентификатор); - - СтарыйПолныйПуть = ПолныйПутьТома(Версия.Том) + Версия.ПутьКФайлу; - - ФайлНаДиске = Новый Файл(СтарыйПолныйПуть); - ПолныйПуть = ФайлНаДиске.Путь; - ИмяБезРасширения = ФайлНаДиске.ИмяБезРасширения; - Расширение = ФайлНаДиске.Расширение; - НовоеИмяБезРасширения = СтрЗаменить(ИмяБезРасширения, СтароеНаименование, НовоеНаименование); - - НовыйПолныйПуть = ПолныйПуть + НовоеИмяБезРасширения + Расширение; - ПолныйПутьКТому = ПолныйПутьТома(Версия.Том); - НовыйЧастичныйПуть = Прав(НовыйПолныйПуть, СтрДлина(НовыйПолныйПуть) - СтрДлина(ПолныйПутьКТому)); - - ПереместитьФайл(СтарыйПолныйПуть, НовыйПолныйПуть); - ВерсияОбъект.ПутьКФайлу = НовыйЧастичныйПуть; - ВерсияОбъект.Записать(); - РазблокироватьДанныеДляРедактирования(Версия, УникальныйИдентификатор); - ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); - РазблокироватьДанныеДляРедактирования(Версия, УникальныйИдентификатор); - ВызватьИсключение; - КонецПопытки; - -КонецПроцедуры - // Обновляет свойства файла БЕЗ учета версий - двоичные данные, текст, дату изменения, // а также другие необязательные свойства. // @@ -5338,11 +4465,7 @@ ПроверитьРасширениеФайлаДляЗагрузки(СведенияОФайле.РасширениеБезТочки); - ТекущаяВерсияРазмер = 0; ДвоичныеДанные = Неопределено; - ТекущаяВерсияТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе; - ТекущаяВерсияТом = Неопределено; - ТекущаяВерсияПутьКФайлу = Неопределено; МетаданныеОбъекта = Метаданные.НайтиПоТипу(ТипЗнч(ФайлСсылка)); ВозможностьХранитьВерсии = ОбщегоНазначения.ЕстьРеквизитОбъекта("ТекущаяВерсия", МетаданныеОбъекта); ИспользованиеПолнотекстовогоПоиска = Метаданные.СвойстваОбъектов.ИспользованиеПолнотекстовогоПоиска.Использовать; @@ -5360,20 +4483,12 @@ СтруктураРеквизитов = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ВерсияСсылкаДляСравненияРазмера, "Размер, ТипХраненияФайла, Том, ПутьКФайлу"); - ТекущаяВерсияРазмер = СтруктураРеквизитов.Размер; - ТекущаяВерсияТипХраненияФайла = СтруктураРеквизитов.ТипХраненияФайла; - ТекущаяВерсияТом = СтруктураРеквизитов.Том; - ТекущаяВерсияПутьКФайлу = СтруктураРеквизитов.ПутьКФайлу; ХранилищеФайла = Неопределено; - Если СведенияОФайле.Размер = ТекущаяВерсияРазмер Тогда - ДвоичныеДанныеПредыдущейВерсии = Неопределено; + Если СведенияОФайле.Размер = СтруктураРеквизитов.Размер Тогда - Если ТекущаяВерсияТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда - Если НЕ ТекущаяВерсияТом.Пустая() Тогда - ПолныйПуть = ПолныйПутьТома(ТекущаяВерсияТом) + ТекущаяВерсияПутьКФайлу; - ДвоичныеДанныеПредыдущейВерсии = Новый ДвоичныеДанные(ПолныйПуть); - КонецЕсли; + Если СтруктураРеквизитов.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда + ДвоичныеДанныеПредыдущейВерсии = РаботаСФайламиВТомахСлужебный.ДанныеФайла(ВерсияСсылкаДляСравненияРазмера); Иначе ХранилищеФайла = РаботаСФайлами.ХранилищеФайлаИзИнформационнойБазы(ВерсияСсылкаДляСравненияРазмера); ДвоичныеДанныеПредыдущейВерсии = ХранилищеФайла.Получить(); @@ -5384,112 +4499,116 @@ Если ДвоичныеДанныеПредыдущейВерсии = ДвоичныеДанные Тогда Возврат Неопределено; // Файл бинарно не изменен - вернем Ложь. КонецЕсли; + КонецЕсли; ВерсияЗаблокирована = Ложь; Версия = Неопределено; - Если СведенияОФайле.ХранитьВерсии Тогда - ЗаголовокОшибки = НСтр("ru = 'Ошибка при записи новой версии присоединенных файлов.'"); - ОкончаниеОшибки = НСтр("ru = 'В этом случае запись версии файла невозможна.'"); - - ИмяСправочникаХранилищаВерсийФайлов = ИмяСправочникаХраненияВерсийФайлов( - ТипЗнч(ФайлСсылка.ВладелецФайла), "", ЗаголовокОшибки, ОкончаниеОшибки); + НачатьТранзакцию(); + Попытка + + Если СведенияОФайле.ХранитьВерсии Тогда + + ЗаголовокОшибки = НСтр("ru = 'Ошибка при записи новой версии присоединенных файлов.'"); + ОкончаниеОшибки = НСтр("ru = 'В этом случае запись версии файла невозможна.'"); + + ИмяСправочникаХранилищаВерсийФайлов = ИмяСправочникаХраненияВерсийФайлов( + ТипЗнч(ФайлСсылка.ВладелецФайла), "", ЗаголовокОшибки, ОкончаниеОшибки); + + Версия = Справочники[ИмяСправочникаХранилищаВерсийФайлов].СоздатьЭлемент(); + Версия.РодительскаяВерсия = ФайлСсылка.ТекущаяВерсия; + Версия.НомерВерсии = НайтиМаксимальныйНомерВерсии(ФайлСсылка) + 1; - Версия = Справочники[ИмяСправочникаХранилищаВерсийФайлов].СоздатьЭлемент(); - Версия.РодительскаяВерсия = ФайлСсылка.ТекущаяВерсия; - Версия.НомерВерсии = НайтиМаксимальныйНомерВерсии(ФайлСсылка) + 1; - Иначе - - Если ВерсияСсылка = Неопределено Тогда - Версия = ФайлСсылка.ТекущаяВерсия.ПолучитьОбъект(); Иначе - Версия = ВерсияСсылка.ПолучитьОбъект(); - КонецЕсли; - - ЗаблокироватьДанныеДляРедактирования(Версия.Ссылка, , УникальныйИдентификаторФормы); - ВерсияЗаблокирована = Истина; - - // Удалим файл с диска - мы заместим его новым. - Если Версия.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда - Если НЕ Версия.Том.Пустая() Тогда - ПолныйПуть = ПолныйПутьТома(Версия.Том) + Версия.ПутьКФайлу; - ФайлНаДиске = Новый Файл(ПолныйПуть); - Если ФайлНаДиске.Существует() Тогда - ФайлНаДиске.УстановитьТолькоЧтение(Ложь); - УдалитьФайлы(ПолныйПуть); - КонецЕсли; - ПутьСПодкаталогом = ФайлНаДиске.Путь; - МассивФайловВКаталоге = НайтиФайлы(ПутьСПодкаталогом, ПолучитьМаскуВсеФайлы()); - Если МассивФайловВКаталоге.Количество() = 0 Тогда - УдалитьФайлы(ПутьСПодкаталогом); - КонецЕсли; + + СсылкаНаВерсию = ?(ВерсияСсылка = Неопределено, ФайлСсылка.ТекущаяВерсия, ВерсияСсылка); + + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить(СсылкаНаВерсию.Метаданные().ПолноеИмя()); + ЭлементБлокировки.УстановитьЗначение("Ссылка", СсылкаНаВерсию); + Блокировка.Заблокировать(); + + Версия = СсылкаНаВерсию.ПолучитьОбъект(); + ЗаблокироватьДанныеДляРедактирования(Версия.Ссылка, , УникальныйИдентификаторФормы); + ВерсияЗаблокирована = Истина; + + // Удалим файл с диска - мы заместим его новым. + Если Версия.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда + + СвойстваВерсии = РаботаСФайламиВТомахСлужебный.СвойстваФайлаВТоме(); + ЗаполнитьЗначенияСвойств(СвойстваВерсии, Версия); + + РаботаСФайламиВТомахСлужебный.УдалитьФайл(РаботаСФайламиВТомахСлужебный.ПолноеИмяФайлаВТоме(СвойстваВерсии)); + КонецЕсли; + КонецЕсли; - КонецЕсли; - - Версия.Владелец = ФайлСсылка; - Если Пользователь = Неопределено Тогда - Версия.Автор = Пользователи.АвторизованныйПользователь(); - Иначе - Версия.Автор = Пользователь; - КонецЕсли; - Версия.ДатаМодификацииУниверсальная = ВремяИзмененияУниверсальное; - Версия.ДатаМодификацииФайла = ВремяИзменения; - Версия.ДатаСоздания = ТекущаяДатаСеанса(); - Версия.Размер = СведенияОФайле.Размер; - Версия.ПолноеНаименование = СведенияОФайле.ИмяБезРасширения; - Версия.Наименование = СведенияОФайле.ИмяБезРасширения; - Версия.Комментарий = СведенияОФайле.Комментарий; - Версия.Расширение = ОбщегоНазначенияКлиентСервер.РасширениеБезТочки(СведенияОФайле.РасширениеБезТочки); - - ТипХраненияФайлов = ТипХраненияФайлов(); - Версия.ТипХраненияФайла = ТипХраненияФайлов; - - Если ДвоичныеДанные = Неопределено Тогда - ДвоичныеДанные = ПолучитьИзВременногоХранилища(СведенияОФайле.АдресВременногоХранилищаФайла); - КонецЕсли; - - Если Версия.Размер = 0 Тогда - Версия.Размер = ДвоичныеДанные.Размер(); - ПроверитьРазмерФайлаДляЗагрузки(Версия); - КонецЕсли; + Версия.Владелец = ФайлСсылка; + Если Пользователь = Неопределено Тогда + Версия.Автор = Пользователи.АвторизованныйПользователь(); + Иначе + Версия.Автор = Пользователь; + КонецЕсли; + Версия.ДатаМодификацииУниверсальная = ВремяИзмененияУниверсальное; + Версия.ДатаМодификацииФайла = ВремяИзменения; + Версия.ДатаСоздания = ТекущаяДатаСеанса(); + Версия.Размер = СведенияОФайле.Размер; + Версия.ПолноеНаименование = СведенияОФайле.ИмяБезРасширения; + Версия.Наименование = СведенияОФайле.ИмяБезРасширения; + Версия.Комментарий = СведенияОФайле.Комментарий; + Версия.Расширение = ОбщегоНазначенияКлиентСервер.РасширениеБезТочки(СведенияОФайле.РасширениеБезТочки); - Если ТипХраненияФайлов = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда + ТипХраненияФайлов = ТипХраненияФайлов(); + Версия.ТипХраненияФайла = ТипХраненияФайлов; - // очистим поля - Версия.ПутьКФайлу = ""; - Версия.Том = Справочники.ТомаХраненияФайлов.ПустаяСсылка(); - Иначе // хранение на диске - - ФайлЗашифрован = Ложь; - Если СведенияОФайле.Зашифрован <> Неопределено Тогда - ФайлЗашифрован = СведенияОФайле.Зашифрован; + Если ДвоичныеДанные = Неопределено Тогда + ДвоичныеДанные = ПолучитьИзВременногоХранилища(СведенияОФайле.АдресВременногоХранилищаФайла); КонецЕсли; - Сведения = ДобавитьФайлВТом(ДвоичныеДанные, - ВремяИзмененияУниверсальное, СведенияОФайле.ИмяБезРасширения, Версия.Расширение, - Версия.НомерВерсии, ФайлЗашифрован); - Версия.Том = Сведения.Том; - Версия.ПутьКФайлу = Сведения.ПутьКФайлу; - - КонецЕсли; - - Если МетаданныеОбъекта.ПолнотекстовыйПоиск = ИспользованиеПолнотекстовогоПоиска Тогда - РезультатИзвлеченияТекста = ИзвлечьТекст(СведенияОФайле.АдресВременногоХранилищаТекста); - Версия.ТекстХранилище = РезультатИзвлеченияТекста.ТекстХранилище; - Версия.СтатусИзвлеченияТекста = РезультатИзвлеченияТекста.СтатусИзвлеченияТекста; - Если СведенияОФайле.НовыйСтатусИзвлеченияТекста <> Неопределено Тогда - Версия.СтатусИзвлеченияТекста = СведенияОФайле.НовыйСтатусИзвлеченияТекста; + Если Версия.Размер = 0 Тогда + Версия.Размер = ДвоичныеДанные.Размер(); + ПроверитьРазмерФайлаДляЗагрузки(Версия); КонецЕсли; - Иначе - Версия.ТекстХранилище = Новый ХранилищеЗначения(""); - Версия.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен; - КонецЕсли; - - Версия.Заполнить(Неопределено); - Версия.Записать(); + + Если ТипХраненияФайлов = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда + + // очистим поля + Версия.ПутьКФайлу = ""; + Версия.Том = Справочники.ТомаХраненияФайлов.ПустаяСсылка(); + Иначе // хранение на диске + + ФайлЗашифрован = Ложь; + Если СведенияОФайле.Зашифрован <> Неопределено Тогда + ФайлЗашифрован = СведенияОФайле.Зашифрован; + КонецЕсли; + + РаботаСФайламиВТомахСлужебный.ДобавитьФайл(Версия, ДвоичныеДанные); + + КонецЕсли; + + Если МетаданныеОбъекта.ПолнотекстовыйПоиск = ИспользованиеПолнотекстовогоПоиска Тогда + РезультатИзвлеченияТекста = ИзвлечьТекст(СведенияОФайле.АдресВременногоХранилищаТекста); + Версия.ТекстХранилище = РезультатИзвлеченияТекста.ТекстХранилище; + Версия.СтатусИзвлеченияТекста = РезультатИзвлеченияТекста.СтатусИзвлеченияТекста; + Если СведенияОФайле.НовыйСтатусИзвлеченияТекста <> Неопределено Тогда + Версия.СтатусИзвлеченияТекста = СведенияОФайле.НовыйСтатусИзвлеченияТекста; + КонецЕсли; + Иначе + Версия.ТекстХранилище = Новый ХранилищеЗначения(""); + Версия.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен; + КонецЕсли; + + Версия.Заполнить(Неопределено); + Версия.Записать(); + + ЗафиксироватьТранзакцию(); + + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; Если ТипХраненияФайлов = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда ЗаписатьФайлВИнформационнуюБазу(Версия.Ссылка, ДвоичныеДанные); @@ -5599,21 +4718,6 @@ Возврат 0; КонецФункции -// Возвращает текст сообщения об ошибке, добавляя к нему ссылку на элемент -// справочника хранимого файла. -// -Функция ТекстОшибкиПриСохраненииФайлаВТоме(Знач СообщениеОбОшибке, Знач Файл) - - Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка, при сохранении файла в томе: - |""%1"". - | - |Ссылка на файл: ""%2"".'"), - СообщениеОбОшибке, - ПолучитьНавигационнуюСсылку(Файл) ); - -КонецФункции - // Вызывает исключение, если файл имеет недопустимый размер для загрузки. Процедура ПроверитьРазмерФайлаДляЗагрузки(Файл) Экспорт @@ -5647,8 +4751,9 @@ КонецПроцедуры -///////////////////////////////////////////////////////////////////////////////////// -// Обработчики событий формы элемента файла. +#КонецОбласти + +#Область ОбработчикиСобытийФормыЭлементаФайла Процедура ФормаЭлементаПриСозданииНаСервере(Контекст, Отказ, СтандартнаяОбработка, Параметры, ТолькоПросмотр, НастраиватьОбъектФормы = Ложь) Экспорт @@ -6091,9 +5196,9 @@ КонецФункции +#КонецОбласти -///////////////////////////////////////////////////////////////////////////////////// -// Очистка ненужных файлов. +#Область ОчисткаНенужныхФайлов Процедура ОчиститьДанныеНенужныхФайлов(НастройкаОчистки, МассивИсключений = Неопределено) @@ -6238,8 +5343,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Синхронизация файлов +#КонецОбласти + +#Область СинхронизацияФайлов Процедура УстановитьПараметрРегламентногоЗаданияСинхронизацииФайлов(Знач ИмяПараметра, Знач ЗначениеПараметра) Экспорт @@ -6795,22 +5901,18 @@ Если СсылкаСуществующегоФайла = Неопределено Тогда - ПараметрыДобавляемогоФайла = Новый Структура; - + ПараметрыДобавляемогоФайла = РаботаСФайлами.ПараметрыДобавленияФайла(); Если СтрНачинаетсяС(ОбъектВладелец.Метаданные().ПолноеИмя(), "Справочник") И ОбъектВладелец.ЭтоГруппа Тогда - ПараметрыДобавляемогоФайла.Вставить("ГруппаФайлов", ОбъектВладелец); - ВладелецФайла = ОбъектВладелец.ВладелецФайла; + ПараметрыДобавляемогоФайла.ГруппаФайлов = ОбъектВладелец; + ПараметрыДобавляемогоФайла.ВладелецФайлов = ОбъектВладелец.ВладелецФайла; Иначе - ВладелецФайла = ОбъектВладелец; + ПараметрыДобавляемогоФайла.ВладелецФайлов = ОбъектВладелец; КонецЕсли; - ПараметрыДобавляемогоФайла.Вставить("ВладелецФайлов", ВладелецФайла); - - ПараметрыДобавляемогоФайла.Вставить("Автор", ПараметрыСинхронизации.АвторФайлов); - ПараметрыДобавляемогоФайла.Вставить("ИмяБезРасширения", СтруктураИмениФайла.ИмяБезРасширения); - ПараметрыДобавляемогоФайла.Вставить("РасширениеБезТочки", ОбщегоНазначенияКлиентСервер.РасширениеБезТочки(СтруктураИмениФайла.Расширение)); - ПараметрыДобавляемогоФайла.Вставить("ВремяИзменения", МестноеВремя(ДатаМодификацииФайла, ЧасовойПоясСеанса())); - ПараметрыДобавляемогоФайла.Вставить("ВремяИзмененияУниверсальное", ДатаМодификацииФайла); + ПараметрыДобавляемогоФайла.Автор = ПараметрыСинхронизации.АвторФайлов; + ПараметрыДобавляемогоФайла.ИмяБезРасширения = СтруктураИмениФайла.ИмяБезРасширения; + ПараметрыДобавляемогоФайла.РасширениеБезТочки = ОбщегоНазначенияКлиентСервер.РасширениеБезТочки(СтруктураИмениФайла.Расширение); + ПараметрыДобавляемогоФайла.ВремяИзмененияУниверсальное = ДатаМодификацииФайла; НовыйФайл = РаботаСФайлами.ДобавитьФайл(ПараметрыДобавляемогоФайла, АдресЗагруженногоФайла); @@ -6920,11 +6022,29 @@ , РезультатПроверки.РезультатПротокол); Если Результат.Успешно = Ложь Тогда + + РезультатСозданияКорневойПапки = ВызватьМетодMKCOL(АдресСервера, СтруктураОбмена); + Если РезультатСозданияКорневойПапки.Успешно = Истина Тогда + + Результат = ВыполнитьМетодWebdav("PROPFIND", АдресСервера, ЗаголовкиHTTP, СтруктураОбмена, + " + | + | + |" + , РезультатПроверки.РезультатПротокол); + + КонецЕсли; + + КонецЕсли; + + Если Результат.Успешно = Ложь Тогда + РезультатПроверки.Отказ = Истина; РезультатПроверки.КодОшибки = Результат.КодОшибки; РезультатПроверки.РезультатТекст = Результат.ТекстОшибки; ЗаписатьВЖурналСобытийСинхронизацииФайлов(Результат.ТекстОшибки, СтруктураОбмена.УчетнаяЗапись, УровеньЖурналаРегистрации.Ошибка); Возврат; + КонецЕсли; КонтекстДокументаXML = ОпределитьКонтекстXML(СтруктураОбмена.Ответ.ПолучитьТелоКакСтроку()); @@ -7194,13 +6314,17 @@ // Возвращает Href, рассчитанный для строки из таблицы файлов, методом поиска всех родителей. Функция РассчитатьHref(СтрокаФайлов,ТаблицаФайлов) + // Рекурсивно собираем наименования. НайденыСтрокиФайлов = ТаблицаФайлов.Найти(СтрокаФайлов.Родитель,"ФайлСсылка"); Если НайденыСтрокиФайлов = Неопределено Тогда - Возврат ?(ЗначениеЗаполнено(СтрокаФайлов.Наименование), СтрокаФайлов.Наименование +"/",""); + Возврат ?(ЗначениеЗаполнено(СтрокаФайлов.Наименование), + ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыВИмениФайла(СтрокаФайлов.Наименование, "-") + "/",""); Иначе - Возврат РассчитатьHref(НайденыСтрокиФайлов,ТаблицаФайлов) + СтрокаФайлов.Наименование +"/"; - КонецЕсли; + Возврат РассчитатьHref(НайденыСтрокиФайлов,ТаблицаФайлов) + + ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыВИмениФайла(СтрокаФайлов.Наименование, "-") +"/"; + КонецЕсли; + КонецФункции // Возвращает строку таблицы файлов по URI, при этом, учитывается возможное различное написание URI @@ -7728,6 +6852,21 @@ ДеревоФайловСервера = СформироватьСтруктуруДереваФайловСервера(); АдресСервера = КодироватьURIПоСтруктуре(ПараметрыСинхронизации.СтруктураАдресаСервера); + Если Не ПустаяСтрока(ПараметрыСинхронизации.КорневаяПапка) Тогда + + ЗаголовкиHTTP = Новый Соответствие; + ЗаголовкиHTTP["User-Agent"] = "1C Enterprise 8.3"; + ЗаголовкиHTTP["Content-type"] = "text/xml"; + ЗаголовкиHTTP["Accept"] = "text/xml"; + ЗаголовкиHTTP["Depth"] = "0"; + + Результат = ВыполнитьМетодWebdav("PROPFIND", АдресСервера, ЗаголовкиHTTP, ПараметрыСинхронизации); + Если Не Результат.Успешно Тогда + ВызватьМетодMKCOL(АдресСервера, ПараметрыСинхронизации); + КонецЕсли; + + КонецЕсли; + Отказ = Ложь; СинхронизацияВыполнена = Истина; @@ -7828,7 +6967,7 @@ УстановитьСтатусСинхронизации(СтрокаТаблицы, ПараметрыСинхронизации.УчетнаяЗапись); СинхронизацияВыполнена = Ложь; - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='Не удалось синхронизировать файл ""%1"" по причине:'"), Строка(СтрокаТаблицы.ФайлСсылка)) + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не удалось синхронизировать файл ""%1"" по причине:'"), Строка(СтрокаТаблицы.ФайлСсылка)) + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); ЗаписатьВЖурналСобытийСинхронизацииФайлов(ТекстОшибки, ПараметрыСинхронизации.УчетнаяЗапись, УровеньЖурналаРегистрации.Ошибка); КонецПопытки; @@ -7839,17 +6978,36 @@ Процедура ЗаписатьРезультатСинхронизации(УчетнаяЗапись, Знач СинхронизацияВыполнена) - НаборЗаписей = РегистрыСведений.СтатусыСинхронизацииФайловСОблачнымСервисом.СоздатьНаборЗаписей(); - НаборЗаписей.Отбор.Файл.Установить("", Истина); - НаборЗаписей.Отбор.УчетнаяЗапись.Установить(УчетнаяЗапись, Истина); - НаборЗаписей.Прочитать(); - Если НаборЗаписей.Количество() > 0 Тогда - Запись = НаборЗаписей.Получить(0); - Запись.ДатаСинхронизацииЗавершение = ТекущаяДатаСеанса(); - Запись.Синхронизирован = СинхронизацияВыполнена; - НаборЗаписей.Записать(); - КонецЕсли; - + БлокировкаДанных = Новый БлокировкаДанных; + ЭлементБлокировкиДанных = БлокировкаДанных.Добавить("РегистрСведений.СтатусыСинхронизацииФайловСОблачнымСервисом"); + ЭлементБлокировкиДанных.УстановитьЗначение("Файл", ""); + ЭлементБлокировкиДанных = БлокировкаДанных.Добавить("РегистрСведений.СтатусыСинхронизацииФайловСОблачнымСервисом"); + ЭлементБлокировкиДанных.УстановитьЗначение("УчетнаяЗапись", УчетнаяЗапись); + + НачатьТранзакцию(); + Попытка + + БлокировкаДанных.Заблокировать(); + + НаборЗаписей = РегистрыСведений.СтатусыСинхронизацииФайловСОблачнымСервисом.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.Файл.Установить("", Истина); + НаборЗаписей.Отбор.УчетнаяЗапись.Установить(УчетнаяЗапись, Истина); + НаборЗаписей.Прочитать(); + + Если НаборЗаписей.Количество() > 0 Тогда + Запись = НаборЗаписей.Получить(0); + Запись.ДатаСинхронизацииЗавершение = ТекущаяДатаСеанса(); + Запись.Синхронизирован = СинхронизацияВыполнена; + НаборЗаписей.Записать(); + КонецЕсли; + + ЗафиксироватьТранзакцию(); + + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + КонецПроцедуры Функция СформироватьСтруктуруДереваФайловСервера() @@ -7868,59 +7026,76 @@ Функция ИзменитьФайлВОблачномСервисе(Знач ИзмененоСодержимоеНаСервере, ОбновитьСтатусСинхронизацииФайла, Знач ПараметрыСинхронизации, Знач СтрокаТаблицы) - // загрузим с сервера - Если СтрокаТаблицы.ЭтоПапка Тогда - // Возможно можно отследить переименование. - ОбъектСтрокиТаблицы = СтрокаТаблицы.ФайлСсылка.ПолучитьОбъект(); - ОбъектСтрокиТаблицы.Наименование = СтрокаТаблицы.НаименованиеСервер; - ОбъектСтрокиТаблицы.Родитель = Неопределено; - ОбъектСтрокиТаблицы.ПометкаУдаления = Ложь; - ОбъектСтрокиТаблицы.Записать(); + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить(СтрокаТаблицы.ФайлСсылка.Метаданные().ПолноеИмя()); + ЭлементБлокировки.УстановитьЗначение("Ссылка", СтрокаТаблицы.ФайлСсылка); + + НачатьТранзакцию(); + Попытка - СтрокаТаблицы.Наименование = СтрокаТаблицы.НаименованиеСервер; - СтрокаТаблицы.Изменения = СтрокаТаблицы.ФайлСсылка; - СтрокаТаблицы.Родитель = СтрокаТаблицы.РодительСервер; - СтрокаТаблицы.ПометкаУдаления = Ложь; + Блокировка.Заблокировать(); - Иначе - - СтруктураИмениФайла = Новый Файл(СтрокаТаблицы.НаименованиеСервер); - НовоеРасширениеФайла = ОбщегоНазначенияКлиентСервер.РасширениеБезТочки(СтруктураИмениФайла.Расширение); - // Загружаем только если поменялось содержимое, т.е. Etag, иначе обновляем реквизиты. - Если ИзмененоСодержимоеНаСервере ИЛИ (НовоеРасширениеФайла <> СтрокаТаблицы.ФайлСсылка.Расширение) Тогда + // загрузим с сервера + Если СтрокаТаблицы.ЭтоПапка Тогда + // Возможно можно отследить переименование. + ОбъектСтрокиТаблицы = СтрокаТаблицы.ФайлСсылка.ПолучитьОбъект(); + ОбъектСтрокиТаблицы.Наименование = СтрокаТаблицы.НаименованиеСервер; + ОбъектСтрокиТаблицы.Родитель = Неопределено; + ОбъектСтрокиТаблицы.ПометкаУдаления = Ложь; + ОбъектСтрокиТаблицы.Записать(); - ПараметрыФайла = Новый Структура; - ПараметрыФайла.Вставить("ИмяФайла", СтрокаТаблицы.НаименованиеСервер); - ПараметрыФайла.Вставить("Href", СтрокаТаблицы.ToHref); - ПараметрыФайла.Вставить("Etag", СтрокаТаблицы.ToEtag); - ПараметрыФайла.Вставить("ДатаМодификацииФайла", Неопределено); - ПараметрыФайла.Вставить("ДлинаФайла", Неопределено); - ПараметрыФайла.Вставить("ДляПользователя", ПараметрыСинхронизации.АвторФайлов); - ПараметрыФайла.Вставить("ОбъектВладелец", СтрокаТаблицы.Родитель); - ПараметрыФайла.Вставить("СсылкаСуществующегоФайла", СтрокаТаблицы.ФайлСсылка); - ПараметрыФайла.Вставить("ПараметрыСинхронизации", ПараметрыСинхронизации); + СтрокаТаблицы.Наименование = СтрокаТаблицы.НаименованиеСервер; + СтрокаТаблицы.Изменения = СтрокаТаблицы.ФайлСсылка; + СтрокаТаблицы.Родитель = СтрокаТаблицы.РодительСервер; + СтрокаТаблицы.ПометкаУдаления = Ложь; - ЗагрузитьФайлССервера(ПараметрыФайла, СтрокаТаблицы.ЭтоФайл); + Иначе + + СтруктураИмениФайла = Новый Файл(СтрокаТаблицы.НаименованиеСервер); + НовоеРасширениеФайла = ОбщегоНазначенияКлиентСервер.РасширениеБезТочки(СтруктураИмениФайла.Расширение); + // Загружаем только если поменялось содержимое, т.е. Etag, иначе обновляем реквизиты. + Если ИзмененоСодержимоеНаСервере ИЛИ (НовоеРасширениеФайла <> СтрокаТаблицы.ФайлСсылка.Расширение) Тогда + + ПараметрыФайла = Новый Структура; + ПараметрыФайла.Вставить("ИмяФайла", СтрокаТаблицы.НаименованиеСервер); + ПараметрыФайла.Вставить("Href", СтрокаТаблицы.ToHref); + ПараметрыФайла.Вставить("Etag", СтрокаТаблицы.ToEtag); + ПараметрыФайла.Вставить("ДатаМодификацииФайла", Неопределено); + ПараметрыФайла.Вставить("ДлинаФайла", Неопределено); + ПараметрыФайла.Вставить("ДляПользователя", ПараметрыСинхронизации.АвторФайлов); + ПараметрыФайла.Вставить("ОбъектВладелец", СтрокаТаблицы.Родитель); + ПараметрыФайла.Вставить("СсылкаСуществующегоФайла", СтрокаТаблицы.ФайлСсылка); + ПараметрыФайла.Вставить("ПараметрыСинхронизации", ПараметрыСинхронизации); + + ЗагрузитьФайлССервера(ПараметрыФайла, СтрокаТаблицы.ЭтоФайл); + + КонецЕсли; + + ОбъектСтрокиТаблицы = СтрокаТаблицы.ФайлСсылка.ПолучитьОбъект(); + ОбъектСтрокиТаблицы.Наименование = СтруктураИмениФайла.ИмяБезРасширения; + ОбъектСтрокиТаблицы.ПометкаУдаления = Ложь; + ОбъектСтрокиТаблицы.Записать(); + + СтрокаТаблицы.Наименование = СтрокаТаблицы.НаименованиеСервер; + СтрокаТаблицы.Изменения = СтрокаТаблицы.ФайлСсылка; + СтрокаТаблицы.Родитель = СтрокаТаблицы.РодительСервер; + СтрокаТаблицы.ПометкаУдаления = Ложь; КонецЕсли; - ОбъектСтрокиТаблицы = СтрокаТаблицы.ФайлСсылка.ПолучитьОбъект(); - ОбъектСтрокиТаблицы.Наименование = СтруктураИмениФайла.ИмяБезРасширения; - ОбъектСтрокиТаблицы.ПометкаУдаления = Ложь; - ОбъектСтрокиТаблицы.Записать(); + ЗафиксироватьТранзакцию(); - СтрокаТаблицы.Наименование = СтрокаТаблицы.НаименованиеСервер; - СтрокаТаблицы.Изменения = СтрокаТаблицы.ФайлСсылка; - СтрокаТаблицы.Родитель = СтрокаТаблицы.РодительСервер; - СтрокаТаблицы.ПометкаУдаления = Ложь; - - КонецЕсли; + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; СтрокаТаблицы.Обработан = Истина; СтрокаТаблицы.ДатаСинхронизации = ТекущаяДатаСеанса(); - ТекстСобытия = НСтр("ru = 'Обновлен объект в базе: %1'"); - ЗаписатьВЖурналСобытийСинхронизацииФайлов(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСобытия, СтрокаТаблицы.Наименование), ПараметрыСинхронизации.УчетнаяЗапись); + ТекстСобытия = НСтр("ru = 'Файл изменен: %1'"); + ЗаписатьВЖурналСобытийСинхронизацииФайлов(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСобытия, СтрокаТаблицы.Наименование), + ПараметрыСинхронизации.УчетнаяЗапись); Возврат Истина; @@ -7949,8 +7124,9 @@ Исключение ОтменитьТранзакцию(); - ТекстСобытия = НСтр("ru = 'Не удалено в базе: %1'"); - ЗаписатьВЖурналСобытийСинхронизацииФайлов(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСобытия, СтрокаТаблицы.Наименование), ПараметрыСинхронизации.УчетнаяЗапись); + ТекстСобытия = НСтр("ru = 'Не удален файл: %1'"); + ЗаписатьВЖурналСобытийСинхронизацииФайлов(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСобытия, СтрокаТаблицы.Наименование), + ПараметрыСинхронизации.УчетнаяЗапись); Возврат Ложь; КонецПопытки; @@ -7960,8 +7136,9 @@ СтрокаТаблицы.Обработан = Истина; СтрокаТаблицы.ДатаСинхронизации = ТекущаяДатаСеанса(); - ТекстСобытия = НСтр("ru = 'Удалено в базе: %1'"); - ЗаписатьВЖурналСобытийСинхронизацииФайлов(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСобытия, СтрокаТаблицы.Наименование), ПараметрыСинхронизации.УчетнаяЗапись); + ТекстСобытия = НСтр("ru = 'Удален файл: %1'"); + ЗаписатьВЖурналСобытийСинхронизацииФайлов(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСобытия, СтрокаТаблицы.Наименование), + ПараметрыСинхронизации.УчетнаяЗапись); Возврат Истина; @@ -8607,54 +7784,13 @@ КонецФункции -Процедура ОбновитьПутьТомаLinux() Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | ТомаХраненияФайлов.Ссылка - |ИЗ - | Справочник.ТомаХраненияФайлов КАК ТомаХраненияФайлов - |ГДЕ - | ТомаХраненияФайлов.ПолныйПутьLinux ПОДОБНО ""%/\"""; - - Выборка = Запрос.Выполнить().Выбрать(); - - Пока Выборка.Следующий() Цикл - - НачатьТранзакцию(); - Попытка - БлокировкаДанных = Новый БлокировкаДанных; - ЭлементБлокировкиДанных = БлокировкаДанных.Добавить(Метаданные.Справочники.ТомаХраненияФайлов.ПолноеИмя()); - ЭлементБлокировкиДанных.УстановитьЗначение("Ссылка", Выборка.Ссылка); - БлокировкаДанных.Заблокировать(); - Том = Выборка.Ссылка.ПолучитьОбъект(); - Том.ПолныйПутьLinux = СтрЗаменить(Том.ПолныйПутьLinux , "/\", "/"); - Том.Записать(); - ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не удалось обработать том хранения файлов: %1 по причине: - |%2'"), - Выборка.Ссылка, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Предупреждение, - Выборка.Ссылка.Метаданные(), Выборка.Ссылка, ТекстСообщения); - КонецПопытки; - - КонецЦикла; - -КонецПроцедуры - // Возвращает признак принадлежности узла к плану обмена РИБ. // // Параметры: // УзелИнформационнойБазы - ПланОбменаСсылка - узел плана обмена, для которого требуется получить значение функции. -// +// // Возвращаемое значение: -// Истина - узел принадлежит плану обмена РИБ, иначе Ложь. +// Булево - Истина - узел принадлежит плану обмена РИБ, иначе Ложь. // Функция ЭтоУзелРаспределеннойИнформационнойБазы(Знач УзелИнформационнойБазы) @@ -8663,198 +7799,9 @@ КонецФункции -#Область КонтрольВеденияУчета -//////////////////////////////////////////////////////////////////////////////// -// Контроль ведения учета. - -Процедура ПоискСсылокНаНесуществующиеФайлыВТомах(ОбъектМетаданных, ПараметрыПроверки, ДоступныеТома) - - МодульКонтрольВеденияУчета = ОбщегоНазначения.ОбщийМодуль("КонтрольВеденияУчета"); - - Реквизиты = ОбъектМетаданных.Реквизиты; - - ТекстЗапроса = - "ВЫБРАТЬ ПЕРВЫЕ 1000 - | ОбъектМетаданных.Ссылка КАК ПроблемныйОбъект, - | &ПолеВладельца КАК Владелец, - | ПРЕДСТАВЛЕНИЕССЫЛКИ(ОбъектМетаданных.Ссылка) КАК Файл, - | ПРЕДСТАВЛЕНИЕССЫЛКИ(ОбъектМетаданных.Том) КАК Том, - | ОбъектМетаданных.ПутьКФайлу КАК ПутьКФайлу, - | ТомаХраненияФайлов.ПолныйПутьLinux КАК ПолныйПутьLinux, - | ТомаХраненияФайлов.ПолныйПутьWindows КАК ПолныйПутьWindows - |ИЗ - | &ОбъектМетаданных КАК ОбъектМетаданных - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ТомаХраненияФайлов КАК ТомаХраненияФайлов - | ПО ОбъектМетаданных.Том = ТомаХраненияФайлов.Ссылка - |ГДЕ - | ОбъектМетаданных.Ссылка > &Ссылка - | И ОбъектМетаданных.ТипХраненияФайла = ЗНАЧЕНИЕ(Перечисление.ТипыХраненияФайлов.ВТомахНаДиске) - | И ОбъектМетаданных.Том В(&ДоступныеТома) - | - |УПОРЯДОЧИТЬ ПО - | ОбъектМетаданных.Ссылка"; - - ПолноеИмя = ОбъектМетаданных.ПолноеИмя(); - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ОбъектМетаданных", ПолноеИмя); - Если ПолноеИмя = "Справочник.ВерсииФайлов" Тогда - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПолеВладельца", "ПРЕДСТАВЛЕНИЕССЫЛКИ(ОбъектМетаданных.Владелец) "); - Иначе - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПолеВладельца", "Неопределено "); - КонецЕсли; - - Запрос = Новый Запрос(ТекстЗапроса); - Запрос.УстановитьПараметр("Ссылка", Справочники.ТомаХраненияФайлов.ПустаяСсылка()); - Запрос.УстановитьПараметр("ДоступныеТома", ДоступныеТома); - - Результат = Запрос.Выполнить().Выгрузить(); - - Пока Результат.Количество() > 0 Цикл - - Для Каждого СтрокаРезультата Из Результат Цикл - - ПутьКФайлу = ""; - Если ОбщегоНазначения.ЭтоLinuxСервер() Тогда - ПутьКФайлу = СтрокаРезультата.ПолныйПутьLinux + СтрокаРезультата.ПутьКФайлу; - Иначе - ПутьКФайлу = СтрокаРезультата.ПолныйПутьWindows + СтрокаРезультата.ПутьКФайлу; - КонецЕсли; - - Если Не ЗначениеЗаполнено(ПутьКФайлу) Тогда - Продолжить; - КонецЕсли; - - ПроверяемыйФайл = Новый Файл(ПутьКФайлу); - Если ПроверяемыйФайл.Существует() Тогда - Продолжить; - КонецЕсли; - - СсылкаНаОбъект = СтрокаРезультата.ПроблемныйОбъект; - - Если СтрокаРезультата.Владелец <> Неопределено Тогда - УточнениеПроблемы = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Версия ""%1"" файла ""%2"" не существует в томе ""%3"".'"), - СтрокаРезультата.Файл, СтрокаРезультата.Владелец, СтрокаРезультата.Том); - Иначе - УточнениеПроблемы = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Файл ""%1"" не существует в томе ""%2"".'"), - СтрокаРезультата.Файл, СтрокаРезультата.Том); - КонецЕсли; - - Проблема = МодульКонтрольВеденияУчета.ОписаниеПроблемы(СсылкаНаОбъект, ПараметрыПроверки); - - Проблема.УточнениеПроблемы = УточнениеПроблемы; - Если Реквизиты.Найти("Ответственный") <> Неопределено Тогда - Проблема.Вставить("Ответственный", ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СсылкаНаОбъект, "Ответственный")); - КонецЕсли; - - МодульКонтрольВеденияУчета.ЗаписатьПроблему(Проблема, ПараметрыПроверки); - - КонецЦикла; - - Запрос.УстановитьПараметр("Ссылка", СтрокаРезультата.ПроблемныйОбъект); - Результат = Запрос.Выполнить().Выгрузить(); - - КонецЦикла; - -КонецПроцедуры - -Функция ПроверитьОбъектПрисоединенныхФайлов(ОбъектМетаданных) - - Если СтрЗаканчиваетсяНа(ОбъектМетаданных.Имя, "ПрисоединенныеФайлы") Или ОбъектМетаданных.ПолноеИмя() = "Справочник.ВерсииФайлов" Тогда - Реквизиты = ОбъектМетаданных.Реквизиты; - Если Реквизиты.Найти("ПутьКФайлу") <> Неопределено И Реквизиты.Найти("Том") <> Неопределено Тогда - Возврат Истина; - Иначе - Возврат Ложь; - КонецЕсли; - Иначе - Возврат Ложь; - КонецЕсли; - -КонецФункции - -Функция ДоступныеТома(ПараметрыПроверки) - - ДоступныеТома = Новый Массив; - - Запрос = Новый Запрос( - "ВЫБРАТЬ - | ТомаХраненияФайлов.Ссылка КАК СсылкаНаТом, - | ТомаХраненияФайлов.Наименование КАК ПредставлениеТома, - | ВЫБОР - | КОГДА &ЭтоLinuxСервер - | ТОГДА ТомаХраненияФайлов.ПолныйПутьLinux - | ИНАЧЕ ТомаХраненияФайлов.ПолныйПутьWindows - | КОНЕЦ КАК ПолныйПуть - |ИЗ - | Справочник.ТомаХраненияФайлов КАК ТомаХраненияФайлов"); - - Запрос.УстановитьПараметр("ЭтоLinuxСервер", ОбщегоНазначения.ЭтоLinuxСервер()); - - Результат = Запрос.Выполнить().Выбрать(); - Пока Результат.Следующий() Цикл - - Если Не ТомДоступен(Результат.СсылкаНаТом, Результат.ПредставлениеТома, Результат.ПолныйПуть, ПараметрыПроверки) Тогда - Продолжить; - КонецЕсли; - - ДоступныеТома.Добавить(Результат.СсылкаНаТом); - - КонецЦикла; - - Возврат ДоступныеТома; - -КонецФункции - -Функция ТомДоступен(Том, ПредставлениеТома, Путь, ПараметрыПроверки) - - Если ПустаяСтрока(Путь) Тогда - - УточнениеПроблемы = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'У тома хранения файлов ""%1"" не задан путь к сетевому каталогу. Сохранение файлов в него невозможно.'"), - ПредставлениеТома); - ЗафиксироватьПроблемуСТомом(Том, УточнениеПроблемы, ПараметрыПроверки); - Возврат Ложь; - - КонецЕсли; - - ИмяКаталогаТестовое = Путь + "ПроверкаДоступа" + ПолучитьРазделительПути(); - - Попытка - СоздатьКаталог(ИмяКаталогаТестовое); - УдалитьФайлы(ИмяКаталогаТестовое); - Исключение - - УточнениеПроблемы = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Том хранения файлов ""%1"" недоступен по причине: - |%2 - | - |Указанный сетевой каталог мог быть отключен или к нему отсутствуют права доступа. - |Невозможна работа со всеми файлами, хранящимися в этом томе.'"), - Путь, КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); - УточнениеПроблемы = УточнениеПроблемы + Символы.ПС; - ЗафиксироватьПроблемуСТомом(Том, УточнениеПроблемы, ПараметрыПроверки); - Возврат Ложь; - - КонецПопытки; - - Возврат Истина; - -КонецФункции - -Процедура ЗафиксироватьПроблемуСТомом(Том, УточнениеПроблемы, ПараметрыПроверки) - - МодульКонтрольВеденияУчета = ОбщегоНазначения.ОбщийМодуль("КонтрольВеденияУчета"); - - Проблема = МодульКонтрольВеденияУчета.ОписаниеПроблемы(Том, ПараметрыПроверки); - Проблема.УточнениеПроблемы = УточнениеПроблемы; - МодульКонтрольВеденияУчета.ЗаписатьПроблему(Проблема, ПараметрыПроверки); - -КонецПроцедуры - #КонецОбласти #Область ИзвлечениеТекста -//////////////////////////////////////////////////////////////////////////////// -// Извлечение текста для полнотекстового поиска. Функция ТекстЗапросаДляФайловСНеизвлеченнымТекстом(ИмяСправочника, ЧислоФайловВВыборке, ПолучитьВсеФайлы, ДополнительныеПоля) @@ -8911,12 +7858,14 @@ КонецФункции // Получает полный путь к файлу на диске. +// // Параметры: -// ОбъектСсылка - СправочникСсылка.ВерсииФайлов, -// СправочникСсылка.*ПрисоединенныеФайлы. +// ОбъектСсылка - ОпределяемыйТип.ПрисоединенныйФайлОбъект - элемент справочника с файлами, +// для которого необходимо получить путь к файлу на диске. // // Возвращаемое значение: // Строка - полный путь к файлу на диске. +// Функция ИмяФайлаСДвоичнымиДанными(ОбъектСсылка) ПолноеИмяФайла = ""; @@ -8932,10 +7881,14 @@ ПолноеИмяФайла = ПолучитьИмяВременногоФайла(ОбъектСсылка.Расширение); ДвоичныеДанныеФайла.Записать(ПолноеИмяФайла); + Иначе - Если НЕ ОбъектСсылка.Том.Пустая() Тогда - ПолноеИмяФайла = ПолныйПутьТома(ОбъектСсылка.Том) + ОбъектСсылка.ПутьКФайлу; - КонецЕсли; + + СвойстваФайла = РаботаСФайламиВТомахСлужебный.СвойстваФайлаВТоме(); + ЗаполнитьЗначенияСвойств(СвойстваФайла, ОбъектСсылка); + + ПолноеИмяФайла = РаботаСФайламиВТомахСлужебный.ПолноеИмяФайлаВТоме(СвойстваФайла); + КонецЕсли; Возврат ПолноеИмяФайла; @@ -9122,6 +8075,7 @@ НачатьТранзакцию(); Попытка + БлокировкаДанных.Заблокировать(); ЗаблокироватьДанныеДляРедактирования(ФайлБезТекста.Ссылка, ИмяФайлаСДвоичнымиДанными); ФайлЗаблокирован = Истина; @@ -9153,6 +8107,7 @@ КонецЕсли; ЗафиксироватьТранзакцию(); + Исключение ОтменитьТранзакцию(); ВызватьИсключение; @@ -9163,8 +8118,6 @@ #КонецОбласти #Область ОбработчикиПодписокНаСобытия -//////////////////////////////////////////////////////////////////////////////// -// Обработчики подписок на события. // Обработчик подписки "при записи" версии файла. // @@ -9271,9 +8224,12 @@ КонецЕсли; - Если ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске И НЕ Том.Пустая() Тогда - ПолныйПуть = ПолныйПутьТома(Том) + ПутьКФайлу; - УдалитьФайлВТоме(ПолныйПуть); + Если ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске + И Не Том.Пустая() Тогда + + СвойстваФайла = РаботаСФайламиВТомахСлужебный.СвойстваФайлаВТоме(Ссылка); + РаботаСФайламиВТомахСлужебный.УдалитьФайл( + РаботаСФайламиВТомахСлужебный.ПолноеИмяФайлаВТоме(СвойстваФайла)); КонецЕсли; КонецПроцедуры @@ -9358,15 +8314,6 @@ #Область ОбновлениеИнформационнойБазы -// Начальное заполнение подсистемы РаботаСФайлами. -Процедура НачальноеЗаполнение() Экспорт - - ПапкаШаблонов = Справочники.ПапкиФайлов.Шаблоны.ПолучитьОбъект(); - ПапкаШаблонов.Наименование = НСтр("ru = 'Шаблоны файлов'"); - ОбновлениеИнформационнойБазы.ЗаписатьОбъект(ПапкаШаблонов); - -КонецПроцедуры - // Удаляет запись в регистре ХранимыеФайлыВерсий. // // Параметры: @@ -9427,6 +8374,9 @@ КонецПроцедуры +// Регистрирует на плане обмена ОбновлениеИнформационнойБазы объекты, +// для которых необходимо обновить записи в реестре. +// Процедура ЗарегистрироватьОбъектыДляПереносаЭлектронныхПодписейИСертификатовШифрования(Параметры) Экспорт ТекстЗапросаДвеТабличныеЧасти = @@ -9632,63 +8582,81 @@ УстановитьПривилегированныйРежим(Истина); - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | ТЧЭлектронныеПодписи.Ссылка КАК ПодписанныйОбъект, - | ТЧЭлектронныеПодписи.ДатаПодписи, - | ТЧЭлектронныеПодписи.ИмяФайлаПодписи, - | ТЧЭлектронныеПодписи.Комментарий, - | ТЧЭлектронныеПодписи.КомуВыданСертификат, - | ТЧЭлектронныеПодписи.Отпечаток, - | ТЧЭлектронныеПодписи.Подпись, - | ТЧЭлектронныеПодписи.УстановившийПодпись, - | ТЧЭлектронныеПодписи.НомерСтроки КАК ПорядковыйНомер, - | ТЧЭлектронныеПодписи.Сертификат, - | ТЧЭлектронныеПодписи.ПодписьВерна КАК ПодписьВерна, - | ТЧЭлектронныеПодписи.ДатаПроверкиПодписи КАК ДатаПроверкиПодписи - |ИЗ - | " + ПолноеИмяОбъектаМетаданных + ".УдалитьЭлектронныеПодписи КАК ТЧЭлектронныеПодписи - |ГДЕ - | ТЧЭлектронныеПодписи.Ссылка В(&МассивОбъектов) - |ИТОГИ - | ПО ПодписанныйОбъект"; - - Если ОбъектМетаданных = Метаданные.Справочники.ВерсииФайлов Тогда - Запрос.Текст = СтрЗаменить(Запрос.Текст, - "ТЧЭлектронныеПодписи.Ссылка КАК ПодписанныйОбъект", - "ТЧЭлектронныеПодписи.Ссылка.Владелец КАК ПодписанныйОбъект"); - КонецЕсли; - - РеквизитыТЧ = ОбъектМетаданных.ТабличныеЧасти.УдалитьЭлектронныеПодписи.Реквизиты; - - Если РеквизитыТЧ.Найти("ПодписьВерна") = Неопределено Тогда - Запрос.Текст = СтрЗаменить(Запрос.Текст, "ТЧЭлектронныеПодписи.ПодписьВерна", "ЛОЖЬ"); - КонецЕсли; - - Если РеквизитыТЧ.Найти("ДатаПроверкиПодписи") = Неопределено Тогда - Запрос.Текст = СтрЗаменить(Запрос.Текст, "ТЧЭлектронныеПодписи.ДатаПроверкиПодписи", "Неопределено"); - КонецЕсли; - - Запрос.УстановитьПараметр("МассивОбъектов", МассивОбъектов); - Выгрузка = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам); - - Для Каждого Строка Из Выгрузка.Строки Цикл - Если Не ЗначениеЗаполнено(Строка.ПодписанныйОбъект) Тогда - Продолжить; - КонецЕсли; - НаборЗаписей = РегистрыСведений["ЭлектронныеПодписи"].СоздатьНаборЗаписей(); - НаборЗаписей.Отбор.ПодписанныйОбъект.Установить(Строка.ПодписанныйОбъект); - Для Каждого Подстрока Из Строка.Строки Цикл - ЗаполнитьЗначенияСвойств(НаборЗаписей.Добавить(), Подстрока); - КонецЦикла; - // Используется параллельное обновление с нестандартной отметкой выполнения обработанных данных. - НаборЗаписей.ОбменДанными.Загрузка = Истина; - НаборЗаписей.ДополнительныеСвойства.Вставить("ОтключитьМеханизмРегистрацииОбъектов"); - НаборЗаписей.ОбменДанными.Получатели.АвтоЗаполнение = Ложь; - НаборЗаписей.Записать(); + Блокировка = Новый БлокировкаДанных; + Для Каждого ОбъектСДанными Из МассивОбъектов Цикл + ЭлементБлокировки = Блокировка.Добавить(ПолноеИмяОбъектаМетаданных); + ЭлементБлокировки.УстановитьЗначение("Ссылка", ОбъектСДанными); КонецЦикла; + НачатьТранзакцию(); + Попытка + + Блокировка.Заблокировать(); + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ТЧЭлектронныеПодписи.Ссылка КАК ПодписанныйОбъект, + | ТЧЭлектронныеПодписи.ДатаПодписи, + | ТЧЭлектронныеПодписи.ИмяФайлаПодписи, + | ТЧЭлектронныеПодписи.Комментарий, + | ТЧЭлектронныеПодписи.КомуВыданСертификат, + | ТЧЭлектронныеПодписи.Отпечаток, + | ТЧЭлектронныеПодписи.Подпись, + | ТЧЭлектронныеПодписи.УстановившийПодпись, + | ТЧЭлектронныеПодписи.НомерСтроки КАК ПорядковыйНомер, + | ТЧЭлектронныеПодписи.Сертификат, + | ТЧЭлектронныеПодписи.ПодписьВерна КАК ПодписьВерна, + | ТЧЭлектронныеПодписи.ДатаПроверкиПодписи КАК ДатаПроверкиПодписи + |ИЗ + | " + ПолноеИмяОбъектаМетаданных + ".УдалитьЭлектронныеПодписи КАК ТЧЭлектронныеПодписи + |ГДЕ + | ТЧЭлектронныеПодписи.Ссылка В(&МассивОбъектов) + |ИТОГИ + | ПО ПодписанныйОбъект"; + + Если ОбъектМетаданных = Метаданные.Справочники.ВерсииФайлов Тогда + Запрос.Текст = СтрЗаменить(Запрос.Текст, + "ТЧЭлектронныеПодписи.Ссылка КАК ПодписанныйОбъект", + "ТЧЭлектронныеПодписи.Ссылка.Владелец КАК ПодписанныйОбъект"); + КонецЕсли; + + РеквизитыТЧ = ОбъектМетаданных.ТабличныеЧасти.УдалитьЭлектронныеПодписи.Реквизиты; + + Если РеквизитыТЧ.Найти("ПодписьВерна") = Неопределено Тогда + Запрос.Текст = СтрЗаменить(Запрос.Текст, "ТЧЭлектронныеПодписи.ПодписьВерна", "ЛОЖЬ"); + КонецЕсли; + + Если РеквизитыТЧ.Найти("ДатаПроверкиПодписи") = Неопределено Тогда + Запрос.Текст = СтрЗаменить(Запрос.Текст, "ТЧЭлектронныеПодписи.ДатаПроверкиПодписи", "Неопределено"); + КонецЕсли; + + Запрос.УстановитьПараметр("МассивОбъектов", МассивОбъектов); + Выгрузка = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам); + + Для Каждого Строка Из Выгрузка.Строки Цикл + Если Не ЗначениеЗаполнено(Строка.ПодписанныйОбъект) Тогда + Продолжить; + КонецЕсли; + НаборЗаписей = РегистрыСведений["ЭлектронныеПодписи"].СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.ПодписанныйОбъект.Установить(Строка.ПодписанныйОбъект); + Для Каждого Подстрока Из Строка.Строки Цикл + ЗаполнитьЗначенияСвойств(НаборЗаписей.Добавить(), Подстрока); + КонецЦикла; + // Используется параллельное обновление с нестандартной отметкой выполнения обработанных данных. + НаборЗаписей.ОбменДанными.Загрузка = Истина; + НаборЗаписей.ДополнительныеСвойства.Вставить("ОтключитьМеханизмРегистрацииОбъектов"); + НаборЗаписей.ОбменДанными.Получатели.АвтоЗаполнение = Ложь; + НаборЗаписей.Записать(); + КонецЦикла; + + ЗафиксироватьТранзакцию(); + + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + КонецПроцедуры // Для процедуры ПеренестиЭлектронныеПодписиИСертификатыШифрованияВРегистрыСведенийДляТаблицы. @@ -9696,38 +8664,56 @@ УстановитьПривилегированныйРежим(Истина); - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | ТЧСертификатыШифрования.Ссылка КАК ЗашифрованныйОбъект, - | ТЧСертификатыШифрования.Отпечаток, - | ТЧСертификатыШифрования.Сертификат, - | ТЧСертификатыШифрования.НомерСтроки КАК ПорядковыйНомер, - | ТЧСертификатыШифрования.Представление - |ИЗ - | " + ПолноеИмяОбъектаМетаданных + ".УдалитьСертификатыШифрования КАК ТЧСертификатыШифрования - |ГДЕ - | ТЧСертификатыШифрования.Ссылка В(&МассивОбъектов) - |ИТОГИ - | ПО ЗашифрованныйОбъект"; - - Запрос.УстановитьПараметр("МассивОбъектов", МассивОбъектов); - - Выгрузка = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам); - - Для Каждого Строка Из Выгрузка.Строки Цикл - НаборЗаписей = РегистрыСведений["СертификатыШифрования"].СоздатьНаборЗаписей(); - НаборЗаписей.Отбор.ЗашифрованныйОбъект.Установить(Строка.ЗашифрованныйОбъект); - Для Каждого Подстрока Из Строка.Строки Цикл - ЗаполнитьЗначенияСвойств(НаборЗаписей.Добавить(), Подстрока); - КонецЦикла; - // Используется параллельное обновление с нестандартной отметкой выполнения обработанных данных. - НаборЗаписей.ОбменДанными.Загрузка = Истина; - НаборЗаписей.ДополнительныеСвойства.Вставить("ОтключитьМеханизмРегистрацииОбъектов"); - НаборЗаписей.ОбменДанными.Получатели.АвтоЗаполнение = Ложь; - НаборЗаписей.Записать(); + Блокировка = Новый БлокировкаДанных; + Для Каждого ОбъектСДанными Из МассивОбъектов Цикл + ЭлементБлокировки = Блокировка.Добавить(ПолноеИмяОбъектаМетаданных); + ЭлементБлокировки.УстановитьЗначение("Ссылка", ОбъектСДанными); КонецЦикла; + НачатьТранзакцию(); + Попытка + + Блокировка.Заблокировать(); + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ТЧСертификатыШифрования.Ссылка КАК ЗашифрованныйОбъект, + | ТЧСертификатыШифрования.Отпечаток, + | ТЧСертификатыШифрования.Сертификат, + | ТЧСертификатыШифрования.НомерСтроки КАК ПорядковыйНомер, + | ТЧСертификатыШифрования.Представление + |ИЗ + | " + ПолноеИмяОбъектаМетаданных + ".УдалитьСертификатыШифрования КАК ТЧСертификатыШифрования + |ГДЕ + | ТЧСертификатыШифрования.Ссылка В(&МассивОбъектов) + |ИТОГИ + | ПО ЗашифрованныйОбъект"; + + Запрос.УстановитьПараметр("МассивОбъектов", МассивОбъектов); + + Выгрузка = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам); + + Для Каждого Строка Из Выгрузка.Строки Цикл + НаборЗаписей = РегистрыСведений["СертификатыШифрования"].СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.ЗашифрованныйОбъект.Установить(Строка.ЗашифрованныйОбъект); + Для Каждого Подстрока Из Строка.Строки Цикл + ЗаполнитьЗначенияСвойств(НаборЗаписей.Добавить(), Подстрока); + КонецЦикла; + // Используется параллельное обновление с нестандартной отметкой выполнения обработанных данных. + НаборЗаписей.ОбменДанными.Загрузка = Истина; + НаборЗаписей.ДополнительныеСвойства.Вставить("ОтключитьМеханизмРегистрацииОбъектов"); + НаборЗаписей.ОбменДанными.Получатели.АвтоЗаполнение = Ложь; + НаборЗаписей.Записать(); + КонецЦикла; + + ЗафиксироватьТранзакцию(); + + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + КонецПроцедуры Функция ПолныеИменаСправочниковПрисоединенныхФайлов() diff --git a/SSL/src/CommonModules/РаботаСФайламиСлужебныйВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/РаботаСФайламиСлужебныйВМоделиСервиса/Module.bsl index bde1988f7..15d6b881d 100644 --- a/SSL/src/CommonModules/РаботаСФайламиСлужебныйВМоделиСервиса/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайламиСлужебныйВМоделиСервиса/Module.bsl @@ -90,7 +90,8 @@ // Вызывается при регистрации произвольных обработчиков выгрузки данных. // -// Параметры: ТаблицаОбработчиков - ТаблицаЗначений, в данной процедуре требуется +// Параметры: +// ТаблицаОбработчиков - ТаблицаЗначений, в данной процедуре требуется // дополнить эту таблицу значений информацией о регистрируемых произвольных // обработчиках выгрузки данных. Колонки: // ОбъектМетаданных - ОбъектМетаданных, при выгрузке данных которого должен @@ -147,7 +148,7 @@ // Объект может быть модифицировано внутри обработчика ПередВыгрузкойОбъекта(), при // этом внесенные изменения будут отражены в сериализации объекта в файлах выгрузки, но // не будут зафиксированы в информационной базе -// Артефакты - Массив(ОбъектXDTO) - набор дополнительной информации, логически неразрывно +// Артефакты - Массив Из ОбъектXDTO - набор дополнительной информации, логически неразрывно // связанной с объектом, но не являющейся его частью (артефакты объекта). Артефакты должны // сформированы внутри обработчика ПередВыгрузкойОбъекта() и добавлены в массив, переданный // в качестве значения параметра Артефакты. Каждый артефакт должен являться XDTO-объектом, @@ -198,7 +199,8 @@ // Вызывается при регистрации произвольных обработчиков загрузки данных. // -// Параметры: ТаблицаОбработчиков - ТаблицаЗначений, в данной процедуре требуется +// Параметры: +// ТаблицаОбработчиков - ТаблицаЗначений, в данной процедуре требуется // дополнить эту таблицу значений информацией о регистрируемых произвольных // обработчиках загрузки данных. Колонки: // ОбъектМетаданных - ОбъектМетаданных, при загрузке данных которого должен @@ -272,7 +274,7 @@ // объект данных информационной базы, перед загрузкой которого был вызван обработчик. // Значение, переданное в процедуру ПередЗагрузкойОбъекта() в качестве значения параметра // Объект может быть модифицировано внутри процедуры обработчика ПередЗагрузкойОбъекта(). -// Артефакты - Массив(ОбъектXDTO) - дополнительные данные, логически неразрывно связанные +// Артефакты - Массив Из ОбъектXDTO - дополнительные данные, логически неразрывно связанные // с объектом данных, но не являющиеся его частью. Сформированы в экспортируемых процедурах // ПередВыгрузкойОбъекта() обработчиков выгрузки данных (см. комментарий к процедуре // ПриРегистрацииОбработчиковВыгрузкиДанных(). Каждый артефакт должен являться XDTO-объектом, @@ -295,7 +297,7 @@ // РегистрНакопленияНаборЗаписей.*, РегистрБухгалтерииНаборЗаписей.*, // РегистрРасчетаНаборЗаписей.*, ПоследовательностьНаборЗаписей.*, ПерерасчетНаборЗаписей.* - // объект данных информационной базы, после загрузки которого был вызван обработчик. -// Артефакты - Массив(ОбъектXDTO) - дополнительные данные, логически неразрывно связанные +// Артефакты - Массив Из ОбъектXDTO - дополнительные данные, логически неразрывно связанные // с объектом данных, но не являющиеся его частью. Сформированы в экспортируемых процедурах // ПередВыгрузкойОбъекта() обработчиков выгрузки данных (см. комментарий к процедуре // ПриРегистрацииОбработчиковВыгрузкиДанных(). Каждый артефакт должен являться XDTO-объектом, @@ -349,7 +351,7 @@ ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Объект метаданных %1 не может быть обработан обработчиком |РаботаСФайламиСлужебныйВМоделиСервиса.ПередВыгрузкойОбъекта().'", - Метаданные.ОсновнойЯзык.КодЯзыка), + ОбщегоНазначения.КодОсновногоЯзыка()), Объект.Метаданные().ПолноеИмя()); КонецЕсли; @@ -370,6 +372,13 @@ Исключение + ЗаписьЖурналаРегистрации( + НСтр("ru = 'Файлы.Выгрузка данных для перехода в сервис'", ОбщегоНазначения.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, + Объект.Метаданные(), + Объект.Ссылка, + КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); + Контейнер.ИсключитьФайл(ИмяФайла); КонецПопытки; @@ -392,7 +401,7 @@ ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Объект метаданных %1 не может быть обработан обработчиком - |РаботаСФайламиСлужебныйВМоделиСервиса.ПередВыгрузкойОбъекта().'", Метаданные.ОсновнойЯзык.КодЯзыка), + |РаботаСФайламиСлужебныйВМоделиСервиса.ПередВыгрузкойОбъекта().'", ОбщегоНазначения.КодОсновногоЯзыка()), Объект.Метаданные().ПолноеИмя()); КонецЕсли; diff --git a/SSL/src/CommonModules/РаботаСФайламиСлужебныйВызовСервера/Module.bsl b/SSL/src/CommonModules/РаботаСФайламиСлужебныйВызовСервера/Module.bsl index f78bd7193..5fee4e403 100644 --- a/SSL/src/CommonModules/РаботаСФайламиСлужебныйВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайламиСлужебныйВызовСервера/Module.bsl @@ -48,7 +48,9 @@ МетаданныеОбъекта = Метаданные.НайтиПоТипу(ТипЗнч(ФайлИлиВерсияСсылка)); ЭтоСправочникФайлов = ОбщегоНазначения.ЕстьРеквизитОбъекта("ВладелецФайла", МетаданныеОбъекта); ВозможностьХранитьВерсии = ОбщегоНазначения.ЕстьРеквизитОбъекта("ТекущаяВерсия", МетаданныеОбъекта); - Если ВозможностьХранитьВерсии И ЗначениеЗаполнено(ФайлИлиВерсияСсылка.ТекущаяВерсия) Тогда + Если ВозможностьХранитьВерсии + И ЗначениеЗаполнено(ФайлИлиВерсияСсылка.ТекущаяВерсия) Тогда + ВерсияСсылка = ФайлИлиВерсияСсылка.ТекущаяВерсия; ДанныеФайла = ДанныеФайла(ФайлИлиВерсияСсылка, ВерсияСсылка); ИначеЕсли ЭтоСправочникФайлов Тогда @@ -61,29 +63,9 @@ ДвоичныеДанные = Неопределено; - ТипХраненияФайла = ВерсияСсылка.ТипХраненияФайла; + ТипХраненияФайла = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ВерсияСсылка, "ТипХраненияФайла"); Если ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда - Если НЕ ВерсияСсылка.Том.Пустая() Тогда - ПолныйПуть = РаботаСФайламиСлужебный.ПолныйПутьТома(ВерсияСсылка.Том) + ВерсияСсылка.ПутьКФайлу; - Попытка - ДвоичныеДанные = Новый ДвоичныеДанные(ПолныйПуть); - Исключение - // Запись в журнал регистрации. - СообщениеОбОшибке = РаботаСФайламиСлужебный.СформироватьТекстОшибкиПолученияФайлСТомаДляАдминистратора( - ИнформацияОбОшибке(), ВерсияСсылка.Владелец); - - ЗаписьЖурналаРегистрации( - НСтр("ru = 'Файлы.Открытие файла'", - ОбщегоНазначения.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка, - Метаданные.Справочники.Файлы, - ВерсияСсылка.Владелец, - СообщениеОбОшибке); - - ВызватьИсключение РаботаСФайламиСлужебный.ОшибкаФайлНеНайденВХранилищеФайлов( - ВерсияСсылка.ПолноеНаименование + "." + ВерсияСсылка.Расширение); - КонецПопытки; - КонецЕсли; + ДвоичныеДанные = РаботаСФайламиВТомахСлужебный.ДанныеФайла(ВерсияСсылка); Иначе ХранилищеФайла = РаботаСФайлами.ХранилищеФайлаИзИнформационнойБазы(ВерсияСсылка); ДвоичныеДанные = ХранилищеФайла.Получить(); @@ -102,6 +84,7 @@ ДанныеФайла, ДвоичныеДанные, ДвоичныеДанныеПодписи); Возврат СтруктураВозврата; + КонецФункции // Создать папку файлов. @@ -433,8 +416,6 @@ КонецЕсли; КонецЕсли; - ФайлСсылка = ФайлСсылка; - ВерсияСсылка = ВерсияСсылка; Если Не ЗначениеЗаполнено(ВерсияСсылка) И ОбщегоНазначения.ЕстьРеквизитОбъекта("ТекущаяВерсия", Метаданные.НайтиПоТипу(ТипЗнч(ФайлСсылка))) И ЗначениеЗаполнено(ФайлСсылка.ТекущаяВерсия) Тогда @@ -456,53 +437,18 @@ ДанныеФайла.Вставить("ПолноеИмяФайлаВРабочемКаталоге", ПолноеИмяФайлаВРабочемКаталоге); КонецЕсли; - ТипХраненияФайла = ДанныеФайла.Версия.ТипХраненияФайла; + СведенияОВерсии = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ДанныеФайла.Версия, + "ТипХраненияФайла, Том, ПутьКФайлу"); - Если ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске И ДанныеФайла.Версия <> Неопределено Тогда + Если ДанныеФайла.Версия <> Неопределено + И СведенияОВерсии.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда - УстановитьПривилегированныйРежим(Истина); + ДанныеФайлаТом = СведенияОВерсии.Том; + ДанныеФайлаПутьКФайлу = СведенияОВерсии.ПутьКФайлу; - ДанныеФайлаТом = Справочники.ТомаХраненияФайлов.ПустаяСсылка(); - ДанныеФайлаПутьКФайлу = ""; - ДанныеФайлаТом = ДанныеФайла.Версия.Том; - ДанныеФайлаПутьКФайлу = ДанныеФайла.Версия.ПутьКФайлу; + ДвоичныеДанные = РаботаСФайламиВТомахСлужебный.ДанныеФайла(ДанныеФайла.Версия); + ДанныеФайла.НавигационнаяСсылкаТекущейВерсии = ПоместитьВоВременноеХранилище(ДвоичныеДанные, ИдентификаторФормы); - Если НЕ ДанныеФайлаТом.Пустая() Тогда - ПолныйПуть = РаботаСФайламиСлужебный.ПолныйПутьТома(ДанныеФайлаТом) + ДанныеФайлаПутьКФайлу; - Попытка - ДвоичныеДанные = Новый ДвоичныеДанные(ПолныйПуть); - // Работаем только с текущей версией - для не-текущей ссылку получаем в ПолучитьНавигационнуюСсылкуДляОткрытия. - ДанныеФайла.НавигационнаяСсылкаТекущейВерсии = ПоместитьВоВременноеХранилище(ДвоичныеДанные, ИдентификаторФормы); - Исключение - // Запись в журнал регистрации. - СсылкаНаФайл = ?(ФайлСсылка <> Неопределено, ФайлСсылка, ВерсияСсылка); - СообщениеОбОшибке = РаботаСФайламиСлужебный.СформироватьТекстОшибкиПолученияФайлСТомаДляАдминистратора( - ИнформацияОбОшибке(), СсылкаНаФайл); - - ЗаписьЖурналаРегистрации( - НСтр("ru = 'Файлы.Открытие файла'", - ОбщегоНазначения.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка, - Метаданные.Справочники.Файлы, - ФайлСсылка, - СообщениеОбОшибке); - - Если ЭтоСправочникФайлы(ДанныеФайла.Владелец) Тогда - ПредставлениеВладельца = ПолныйПутьПапки(ДанныеФайла.Владелец); - Иначе - ПредставлениеВладельца = ДанныеФайла.Владелец; - КонецЕсли; - ПредставлениеВладельцаФайла = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Присоединен к %1 : %2'"), - Строка(ТипЗнч(ДанныеФайла.Владелец)), - ПредставлениеВладельца); - - ВызватьИсключение РаботаСФайламиСлужебный.ОшибкаФайлНеНайденВХранилищеФайлов( - ДанныеФайла.ПолноеНаименованиеВерсии + "." + ДанныеФайла.Расширение, - , - ПредставлениеВладельцаФайла); - КонецПопытки; - КонецЕсли; КонецЕсли; ПредыдущийАдресФайла = ДанныеФайла.НавигационнаяСсылкаТекущейВерсии; @@ -532,26 +478,79 @@ КонецФункции -#Область УстаревшиеПроцедурыИФункции - -// Устарела. Следует использовать РаботаСФайлами.ОпределитьФормуПрисоединенногоФайла. -Процедура ОпределитьФормуПрисоединенногоФайла(Источник, - ВидФормы, - Параметры, - ВыбраннаяФорма, - ДополнительнаяИнформация, - СтандартнаяОбработка) Экспорт +Процедура ОпределитьФормуПрисоединенногоФайла(Источник, ВидФормы, Параметры, + ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка) Экспорт - РаботаСФайлами.ОпределитьФормуПрисоединенногоФайла(Источник, - ВидФормы, - Параметры, - ВыбраннаяФорма, - ДополнительнаяИнформация, - СтандартнаяОбработка); + ЭтоФормаВерсии = Ложь; + + Если Источник <> Неопределено Тогда + ЭтоФормаВерсии = ОбщегоНазначения.ЕстьРеквизитОбъекта("РодительскаяВерсия", Метаданные.НайтиПоТипу(ТипЗнч(Источник))); + КонецЕсли; + + Если ВидФормы = "ФормаГруппы" Тогда + ВыбраннаяФорма = "Обработка.РаботаСФайлами.Форма.ГруппаФайлов"; + СтандартнаяОбработка = Ложь; + ИначеЕсли ВидФормы = "ФормаОбъекта" Тогда + + Если Не ЭтоФормаВерсии Тогда + ВыбраннаяФорма = "Обработка.РаботаСФайлами.Форма.ПрисоединенныйФайл"; + СтандартнаяОбработка = Ложь; + КонецЕсли; + + ИначеЕсли ВидФормы = "ФормаСписка" Тогда + + Если Не ЭтоФормаВерсии Тогда + ВыбраннаяФорма = "Обработка.РаботаСФайлами.Форма.ПрисоединенныеФайлы"; + СтандартнаяОбработка = Ложь; + КонецЕсли; + + КонецЕсли; КонецПроцедуры -#КонецОбласти +Функция КоличествоПрисоединенныхФайлов(ВладелецФайлов, ВозвращатьДанныеФайлов = Ложь) Экспорт + + ФайлыВладельца = Новый Структура; + ФайлыВладельца.Вставить("КоличествоФайлов", 0); + ФайлыВладельца.Вставить("ДанныеФайла", Неопределено); + + ИмяСправочникаХранения = РаботаСФайламиСлужебный.ИмяСправочникаХраненияФайлов(ВладелецФайлов); + Если ЗначениеЗаполнено(ИмяСправочникаХранения) Тогда + + ТекстЗапроса = + "ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ + | СправочникХраненияФайлов.Ссылка КАК Файл + |ИЗ + | &ИмяСправочника КАК СправочникХраненияФайлов + |ГДЕ + | СправочникХраненияФайлов.ВладелецФайла = &ВладелецФайла + | И &ЭтоГруппа = ЛОЖЬ + | И &Служебный = ЛОЖЬ"; + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ИмяСправочника", "Справочник." + ИмяСправочникаХранения); + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&Служебный", + ?(РаботаСФайламиСлужебный.ЕстьРеквизитСлужебный(ИмяСправочникаХранения), + "СправочникХраненияФайлов.Служебный", "ЛОЖЬ")); + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ЭтоГруппа", + ?(Метаданные.Справочники[ИмяСправочникаХранения].Иерархический, + "СправочникХраненияФайлов.ЭтоГруппа", "ЛОЖЬ")); + + Запрос = Новый Запрос(ТекстЗапроса); + Запрос.УстановитьПараметр("ВладелецФайла", ВладелецФайлов); + ТаблицаФайлов = Запрос.Выполнить().Выгрузить(); + КоличествоФайлов = ТаблицаФайлов.Количество(); + + ФайлыВладельца.КоличествоФайлов = КоличествоФайлов; + Если ВозвращатьДанныеФайлов И КоличествоФайлов > 0 Тогда + ФайлыВладельца.ДанныеФайла = ДанныеФайла(ТаблицаФайлов[0].Файл, , , Ложь); + КонецЕсли; + + КонецЕсли; + + Возврат ?(ВозвращатьДанныеФайлов, ФайлыВладельца, ФайлыВладельца.КоличествоФайлов); + +КонецФункции #КонецОбласти @@ -670,12 +669,7 @@ РаботаСФайламиСлужебный.ПроверитьРасширениеФайлаДляЗагрузки(СведенияОФайле.РасширениеБезТочки); - ТекущаяВерсияРазмер = 0; ДвоичныеДанные = Неопределено; - ТекущаяВерсияТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе; - ТекущаяВерсияТом = Неопределено; - ТекущаяВерсияПутьКФайлу = Неопределено; - МетаданныеСправочника = Метаданные.НайтиПоТипу(ТипЗнч(ФайлСсылка)); СправочникПоддерживаетВозможностьХранитьВерсии = ОбщегоНазначения.ЕстьРеквизитОбъекта("ТекущаяВерсия", МетаданныеСправочника); @@ -690,155 +684,151 @@ КодировкаПредВерсии = РаботаСФайламиСлужебный.ПолучитьКодировкуВерсииФайла(ВерсияСсылкаДляСравненияРазмера); - СтруктураРеквизитов = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ВерсияСсылкаДляСравненияРазмера, - "Размер, ТипХраненияФайла, Том, ПутьКФайлу"); - ТекущаяВерсияРазмер = СтруктураРеквизитов.Размер; - ТекущаяВерсияТипХраненияФайла = СтруктураРеквизитов.ТипХраненияФайла; - ТекущаяВерсияТом = СтруктураРеквизитов.Том; - ТекущаяВерсияПутьКФайлу = СтруктураРеквизитов.ПутьКФайлу; + СтруктураРеквизитов = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ВерсияСсылкаДляСравненияРазмера, + "Размер, ТипХраненияФайла"); ХранилищеФайла = Неопределено; - Если СведенияОФайле.Размер = ТекущаяВерсияРазмер Тогда - ДвоичныеДанныеПредыдущейВерсии = Неопределено; + Если СведенияОФайле.Размер = СтруктураРеквизитов.Размер Тогда - Если ТекущаяВерсияТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда - Если НЕ ТекущаяВерсияТом.Пустая() Тогда - ПолныйПуть = РаботаСФайламиСлужебный.ПолныйПутьТома(ТекущаяВерсияТом) + ТекущаяВерсияПутьКФайлу; - ДвоичныеДанныеПредыдущейВерсии = Новый ДвоичныеДанные(ПолныйПуть); - КонецЕсли; + Если СтруктураРеквизитов.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда + ДвоичныеДанныеПредыдущейВерсии = РаботаСФайламиВТомахСлужебный.ДанныеФайла(ВерсияСсылкаДляСравненияРазмера); Иначе ХранилищеФайла = РаботаСФайлами.ХранилищеФайлаИзИнформационнойБазы(ВерсияСсылкаДляСравненияРазмера); ДвоичныеДанныеПредыдущейВерсии = ХранилищеФайла.Получить(); КонецЕсли; ДвоичныеДанные = ПолучитьИзВременногоХранилища(СведенияОФайле.АдресВременногоХранилищаФайла); - Если ДвоичныеДанныеПредыдущейВерсии = ДвоичныеДанные Тогда Возврат Неопределено; // Файл бинарно не изменен - вернем Ложь. КонецЕсли; + КонецЕсли; ВерсияЗаблокирована = Ложь; - Версия = Неопределено; - Если ВерсияСсылка = Неопределено Тогда - Версия = ФайлСсылка.ПолучитьОбъект(); - КонецЕсли; + СсылкаНаВерсию = ?(ВерсияСсылка = Неопределено, ФайлСсылка, ВерсияСсылка); - ЗаблокироватьДанныеДляРедактирования(Версия.Ссылка, , УникальныйИдентификаторФормы); - ВерсияЗаблокирована = Истина; + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить(СсылкаНаВерсию.Метаданные().ПолноеИмя()); + ЭлементБлокировки.УстановитьЗначение("Ссылка", СсылкаНаВерсию); - // Удалим файл с диска - мы заместим его новым. - Если Версия.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда - Если НЕ Версия.Том.Пустая() Тогда - ПолныйПуть = РаботаСФайламиСлужебный.ПолныйПутьТома(Версия.Том) + Версия.ПутьКФайлу; - ФайлНаДиске = Новый Файл(ПолныйПуть); - Если ФайлНаДиске.Существует() Тогда - ФайлНаДиске.УстановитьТолькоЧтение(Ложь); - УдалитьФайлы(ПолныйПуть); - КонецЕсли; - ПутьСПодкаталогом = ФайлНаДиске.Путь; - МассивФайловВКаталоге = НайтиФайлы(ПутьСПодкаталогом, ПолучитьМаскуВсеФайлы()); - Если МассивФайловВКаталоге.Количество() = 0 Тогда - УдалитьФайлы(ПутьСПодкаталогом); - КонецЕсли; - КонецЕсли; - КонецЕсли; - - Если Пользователь = Неопределено Тогда - Версия.Изменил = Пользователи.АвторизованныйПользователь(); - Иначе - Версия.Изменил = Пользователь; - КонецЕсли; - Версия.ДатаМодификацииУниверсальная = ВремяИзмененияУниверсальное; - Версия.Размер = СведенияОФайле.Размер; - Версия.Наименование = СведенияОФайле.ИмяБезРасширения; - Версия.Описание = СведенияОФайле.Комментарий; - Версия.Расширение = ОбщегоНазначенияКлиентСервер.РасширениеБезТочки(СведенияОФайле.РасширениеБезТочки); - - ТипХраненияФайлов = РаботаСФайламиСлужебный.ТипХраненияФайлов(); - Версия.ТипХраненияФайла = ТипХраненияФайлов; - - Если ДвоичныеДанные = Неопределено Тогда - ДвоичныеДанные = ПолучитьИзВременногоХранилища(СведенияОФайле.АдресВременногоХранилищаФайла); - КонецЕсли; - - Если ТипХраненияФайлов = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда + НачатьТранзакцию(); + Попытка - ХранилищеФайла = Новый ХранилищеЗначения(ДвоичныеДанные); + Блокировка.Заблокировать(); + + Версия = СсылкаНаВерсию.ПолучитьОбъект(); + ЗаблокироватьДанныеДляРедактирования(СсылкаНаВерсию, , УникальныйИдентификаторФормы); + + ВерсияЗаблокирована = Истина; + + // Удалим файл с диска - мы заместим его новым. + Если Версия.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда - Если Версия.Размер = 0 Тогда - ДвоичныеДанныеФайла = ХранилищеФайла.Получить(); - Версия.Размер = ДвоичныеДанныеФайла.Размер(); + СвойстваВерсии = РаботаСФайламиВТомахСлужебный.СвойстваФайлаВТоме(); + ЗаполнитьЗначенияСвойств(СвойстваВерсии, Версия); + + РаботаСФайламиВТомахСлужебный.УдалитьФайл(РаботаСФайламиВТомахСлужебный.ПолноеИмяФайлаВТоме(СвойстваВерсии)); - РаботаСФайламиСлужебный.ПроверитьРазмерФайлаДляЗагрузки(Версия); КонецЕсли; - // очистим поля - Версия.ПутьКФайлу = ""; - Версия.Том = Справочники.ТомаХраненияФайлов.ПустаяСсылка(); - Иначе // хранение на диске + Если Пользователь = Неопределено Тогда + Версия.Изменил = Пользователи.АвторизованныйПользователь(); + Иначе + Версия.Изменил = Пользователь; + КонецЕсли; + Версия.ДатаМодификацииУниверсальная = ВремяИзмененияУниверсальное; + Версия.Размер = СведенияОФайле.Размер; + Версия.Наименование = СведенияОФайле.ИмяБезРасширения; + Версия.Описание = СведенияОФайле.Комментарий; + Версия.Расширение = ОбщегоНазначенияКлиентСервер.РасширениеБезТочки(СведенияОФайле.РасширениеБезТочки); - Если Версия.Размер = 0 Тогда - Версия.Размер = ДвоичныеДанные.Размер(); - РаботаСФайламиСлужебный.ПроверитьРазмерФайлаДляЗагрузки(Версия); + ТипХраненияФайлов = РаботаСФайламиСлужебный.ТипХраненияФайлов(); + Версия.ТипХраненияФайла = ТипХраненияФайлов; + + Если ДвоичныеДанные = Неопределено Тогда + ДвоичныеДанные = ПолучитьИзВременногоХранилища(СведенияОФайле.АдресВременногоХранилищаФайла); КонецЕсли; - ФайлЗашифрован = Ложь; - Если СведенияОФайле.Зашифрован <> Неопределено Тогда - ФайлЗашифрован = СведенияОФайле.Зашифрован; + Если ТипХраненияФайлов = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда + + ХранилищеФайла = Новый ХранилищеЗначения(ДвоичныеДанные); + + Если Версия.Размер = 0 Тогда + ДвоичныеДанныеФайла = ХранилищеФайла.Получить(); + Версия.Размер = ДвоичныеДанныеФайла.Размер(); + + РаботаСФайламиСлужебный.ПроверитьРазмерФайлаДляЗагрузки(Версия); + КонецЕсли; + + // очистим поля + Версия.ПутьКФайлу = ""; + Версия.Том = Справочники.ТомаХраненияФайлов.ПустаяСсылка(); + + Иначе // хранение на диске + + Если Версия.Размер = 0 Тогда + Версия.Размер = ДвоичныеДанные.Размер(); + РаботаСФайламиСлужебный.ПроверитьРазмерФайлаДляЗагрузки(Версия); + КонецЕсли; + + ФайлЗашифрован = Ложь; + Если СведенияОФайле.Зашифрован <> Неопределено Тогда + ФайлЗашифрован = СведенияОФайле.Зашифрован; + КонецЕсли; + + РаботаСФайламиВТомахСлужебный.ДобавитьФайл(Версия, ДвоичныеДанные, , Истина); + КонецЕсли; - Сведения = РаботаСФайламиСлужебный.ДобавитьФайлВТом(ДвоичныеДанные, - ВремяИзмененияУниверсальное, СведенияОФайле.ИмяБезРасширения, Версия.Расширение, - "", ФайлЗашифрован); - Версия.Том = Сведения.Том; - Версия.ПутьКФайлу = Сведения.ПутьКФайлу; - ХранилищеФайла = Новый ХранилищеЗначения(Неопределено); // очистим ХранилищеЗначения - - КонецЕсли; - - ИспользованиеПолнотекстовогоПоиска = Метаданные.СвойстваОбъектов.ИспользованиеПолнотекстовогоПоиска.Использовать; - Если МетаданныеСправочника.ПолнотекстовыйПоиск = ИспользованиеПолнотекстовогоПоиска Тогда - - Если СведенияОФайле.АдресВременногоХранилищаТекста <> Неопределено Тогда - Если РаботаСФайламиСлужебный.ИзвлекатьТекстыФайловНаСервере() Тогда - Версия.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен; + ИспользованиеПолнотекстовогоПоиска = Метаданные.СвойстваОбъектов.ИспользованиеПолнотекстовогоПоиска.Использовать; + Если МетаданныеСправочника.ПолнотекстовыйПоиск = ИспользованиеПолнотекстовогоПоиска Тогда + + Если СведенияОФайле.АдресВременногоХранилищаТекста <> Неопределено Тогда + Если РаботаСФайламиСлужебный.ИзвлекатьТекстыФайловНаСервере() Тогда + Версия.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен; + Иначе + РезультатИзвлеченияТекста = РаботаСФайламиСлужебный.ИзвлечьТекст(СведенияОФайле.АдресВременногоХранилищаТекста); + Версия.ТекстХранилище = РезультатИзвлеченияТекста.ТекстХранилище; + Версия.СтатусИзвлеченияТекста = РезультатИзвлеченияТекста.СтатусИзвлеченияТекста; + КонецЕсли; Иначе - РезультатИзвлеченияТекста = РаботаСФайламиСлужебный.ИзвлечьТекст(СведенияОФайле.АдресВременногоХранилищаТекста); - Версия.ТекстХранилище = РезультатИзвлеченияТекста.ТекстХранилище; - Версия.СтатусИзвлеченияТекста = РезультатИзвлеченияТекста.СтатусИзвлеченияТекста; + Версия.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен; КонецЕсли; + + Если СведенияОФайле.НовыйСтатусИзвлеченияТекста <> Неопределено Тогда + Версия.СтатусИзвлеченияТекста = СведенияОФайле.НовыйСтатусИзвлеченияТекста; + КонецЕсли; + Иначе Версия.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен; КонецЕсли; - Если СведенияОФайле.НовыйСтатусИзвлеченияТекста <> Неопределено Тогда - Версия.СтатусИзвлеченияТекста = СведенияОФайле.НовыйСтатусИзвлеченияТекста; + Если Версия.Размер = 0 Тогда + Если ТипХраненияФайлов = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда + ДвоичныеДанныеФайла = ХранилищеФайла.Получить(); + Версия.Размер = ДвоичныеДанныеФайла.Размер(); + КонецЕсли; КонецЕсли; - Иначе - Версия.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен; - КонецЕсли; - - Если Версия.Размер = 0 Тогда - Если ТипХраненияФайлов = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда - ДвоичныеДанныеФайла = ХранилищеФайла.Получить(); - Версия.Размер = ДвоичныеДанныеФайла.Размер(); + Версия.Заполнить(Неопределено); + Версия.Записать(); + + Если ВерсияЗаблокирована Тогда + РазблокироватьДанныеДляРедактирования(Версия.Ссылка, УникальныйИдентификаторФормы); КонецЕсли; - КонецЕсли; - - Версия.Заполнить(Неопределено); - Версия.Записать(); + + ЗафиксироватьТранзакцию(); + + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; Если ТипХраненияФайлов = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда ЗаписатьФайлВИнформационнуюБазу(Версия.Ссылка, ХранилищеФайла); КонецЕсли; - Если ВерсияЗаблокирована Тогда - РазблокироватьДанныеДляРедактирования(Версия.Ссылка, УникальныйИдентификаторФормы); - КонецЕсли; - ЗаписатьКодировкуВерсииФайла(Версия.Ссылка, КодировкаПредВерсии); Если ЕстьПравоСохранения Тогда @@ -1088,19 +1078,21 @@ ДвоичныеДанные = РаботаСФайлами.ДвоичныеДанныеФайла(ИсходныйФайл); ДвоичныеДанныеВХранилищеЗначения = Новый ХранилищеЗначения(ДвоичныеДанные); - НовыйФайл.ТипХраненияФайла = РаботаСФайламиСлужебный.ТипХраненияФайлов(); - Если РаботаСФайламиСлужебный.ТипХраненияФайлов() = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда - + ТипХраненияФайла = РаботаСФайламиСлужебный.ТипХраненияФайлов(); + Если ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда + НовыйФайл.ТипХраненияФайла = РаботаСФайламиСлужебный.ТипХраненияФайлов(); ЗаписатьФайлВИнформационнуюБазу(КопияФайлаСсылка, ДвоичныеДанныеВХранилищеЗначения); - Иначе - // Добавить в один из томов (где есть свободное место). - СведенияОФайле = РаботаСФайламиСлужебный.ДобавитьФайлВТом(ДвоичныеДанные, НовыйФайл.ДатаМодификацииУниверсальная, - НовыйФайл.Наименование, НовыйФайл.Расширение); - НовыйФайл.ПутьКФайлу = СведенияОФайле.ПутьКФайлу; - НовыйФайл.Том = СведенияОФайле.Том; + + НовыйФайл.Том = Неопределено; + НовыйФайл.ПутьКФайлу = Неопределено; + НовыйФайл.ТипХраненияФайла = Неопределено; + + РаботаСФайламиВТомахСлужебный.ДобавитьФайл(НовыйФайл, ДвоичныеДанные); + КонецЕсли; + НовыйФайл.Записать(); Если НовыйФайл.ХранитьВерсии Тогда @@ -1128,10 +1120,10 @@ Если ИсходныйФайл.ПодписанЭП Тогда - ФайлОбъект = НовыйФайл.ПолучитьОбъект(); - ФайлОбъект.ПодписанЭП = Истина; - ФайлОбъект.Записать(); - + НовыйФайл.Прочитать(); + НовыйФайл.ПодписанЭП = Истина; + НовыйФайл.Записать(); + ЭлектронныеПодписиИсходногоФайла = МодульЭлектроннаяПодпись.УстановленныеПодписи(ИсходныйФайл); Для Каждого ЭП Из ЭлектронныеПодписиИсходногоФайла Цикл МенеджерЗаписи = РегистрыСведений["ЭлектронныеПодписи"].СоздатьМенеджерЗаписи(); @@ -1141,11 +1133,11 @@ КонецЦикла; КонецЕсли; - + Если ИсходныйФайл.Зашифрован Тогда - ФайлОбъект = НовыйФайл.ПолучитьОбъект(); - ФайлОбъект.Зашифрован = Истина; + НовыйФайл.Прочитать(); + НовыйФайл.Зашифрован = Истина; ЭлектронныеПодписиИсходногоФайла = МодульЭлектроннаяПодпись.СертификатыШифрования(ИсходныйФайл); Для Каждого Сертификат Из ЭлектронныеПодписиИсходногоФайла Цикл @@ -1155,11 +1147,13 @@ МенеджерЗаписи.Записать(Истина); КонецЦикла; // Чтобы прошла запись ранее подписанного объекта. - ФайлОбъект.ДополнительныеСвойства.Вставить("ЗаписьПодписанногоОбъекта", Истина); - ФайлОбъект.Записать(); + НовыйФайл.ДополнительныеСвойства.Вставить("ЗаписьПодписанногоОбъекта", Истина); + НовыйФайл.Записать(); КонецЕсли; + КонецЕсли; + КонецЕсли; РаботаСФайламиПереопределяемый.ЗаполнитьРеквизитыФайлаИзИсходногоФайла(НовыйФайл, ИсходныйФайл); @@ -1306,7 +1300,9 @@ // РабочийКаталогВладельца - Строка - рабочий каталог владельца файла. // // Возвращаемое значение: -// Булево - успешно ли выполнена операция. +// Структура - с полями: +// ДанныеПолучены - Булево - успешно ли выполнена операция получения данных; +// ФайлУжеРедактируетТекущийПользователь - Булево - Файл уже был захвачен для редактирования текущим пользователем. // Функция ПолучитьДанныеФайлаДляОткрытияИЗанятьФайл(ФайлСсылка, ДанныеФайла, @@ -1314,23 +1310,30 @@ УникальныйИдентификатор = Неопределено, РабочийКаталогВладельца = Неопределено, ВерсияСсылка = Неопределено) Экспорт + + Результат = Новый Структура; + Результат.Вставить("ДанныеПолучены", Ложь); + Результат.Вставить("ФайлУжеРедактируетТекущийПользователь", Ложь); ДанныеФайла = ДанныеФайлаДляОткрытия(ФайлСсылка, ВерсияСсылка, УникальныйИдентификатор, РабочийКаталогВладельца); + Результат.ФайлУжеРедактируетТекущийПользователь = ДанныеФайла.ФайлРедактируетТекущийПользователь; СтрокаОшибки = ""; Если НЕ РаботаСФайламиКлиентСервер.МожноЛиЗанятьФайл(ДанныеФайла, СтрокаОшибки) Тогда - Возврат Ложь; + Возврат Результат; КонецЕсли; Если Не ЗначениеЗаполнено(ДанныеФайла.Редактирует) Тогда СтрокаОшибки = ""; - Если Не ЗанятьФайл(ДанныеФайла, СтрокаОшибки, УникальныйИдентификатор) Тогда - Возврат Ложь; + Если Не ЗанятьФайл(ДанныеФайла, СтрокаОшибки, УникальныйИдентификатор) Тогда + Возврат Результат; КонецЕсли; КонецЕсли; - Возврат Истина; + Результат.ДанныеПолучены = Истина; + Возврат Результат; + КонецФункции // Выполняет ПоместитьВоВременноеХранилище (если файл хранится на диске) и возвращает нужную ссылку. @@ -1648,6 +1651,7 @@ // СсылкаПапки - СправочникСсылка.ПапкиФайлов - владелец файла. // Процедура ОчиститьРабочийКаталог(СсылкаПапки) Экспорт + УстановитьПривилегированныйРежим(Истина); НаборЗаписей = РегистрыСведений.РабочиеКаталогиФайлов.СоздатьНаборЗаписей(); @@ -1659,22 +1663,39 @@ НаборЗаписей.Записать(); // Для дочерних папок очищаем рабочие каталоги. - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | ПапкиФайлов.Ссылка КАК Ссылка - |ИЗ - | Справочник.ПапкиФайлов КАК ПапкиФайлов - |ГДЕ - | ПапкиФайлов.Родитель = &Ссылка"; - Запрос.УстановитьПараметр("Ссылка", СсылкаПапки); + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Справочник.ПапкиФайлов"); + ЭлементБлокировки.УстановитьЗначение("Родитель", СсылкаПапки); - Результат = Запрос.Выполнить(); - Выборка = Результат.Выбрать(); - Пока Выборка.Следующий() Цикл - ОчиститьРабочийКаталог(Выборка.Ссылка); - КонецЦикла; + НачатьТранзакцию(); + Попытка + + Блокировка.Заблокировать(); + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ПапкиФайлов.Ссылка КАК Ссылка + |ИЗ + | Справочник.ПапкиФайлов КАК ПапкиФайлов + |ГДЕ + | ПапкиФайлов.Родитель = &Ссылка"; + + Запрос.УстановитьПараметр("Ссылка", СсылкаПапки); + + Результат = Запрос.Выполнить(); + Выборка = Результат.Выбрать(); + Пока Выборка.Следующий() Цикл + ОчиститьРабочийКаталог(Выборка.Ссылка); + КонецЦикла; + + ЗафиксироватьТранзакцию(); + + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; КонецПроцедуры @@ -1709,45 +1730,66 @@ // Для каждого по пути находим запись в регистре сведений - оттуда берем поле. // Версия и Размер и ДатаПомещенияВРабочийКаталог. - ЗапросВРегистр = Новый Запрос; - ЗапросВРегистр.УстановитьПараметр("ИмяФайла", ИмяФайла); - ЗапросВРегистр.УстановитьПараметр("Пользователь", Пользователи.АвторизованныйПользователь()); - ЗапросВРегистр.Текст = - "ВЫБРАТЬ - | ФайлыВРабочемКаталоге.Файл КАК Файл, - | ФайлыВРабочемКаталоге.ДатаПомещенияВРабочийКаталог КАК ДатаПомещения, - | ФайлыВРабочемКаталоге.НаЧтение КАК ВРегистреНаЧтение, - | ВЫБОР - | КОГДА ТИПЗНАЧЕНИЯ(ФайлыВРабочемКаталоге.Файл) = ТИП(Справочник.ВерсииФайлов) - | ТОГДА ФайлыВРабочемКаталоге.Файл.Владелец - | ИНАЧЕ ФайлыВРабочемКаталоге.Файл - | КОНЕЦ КАК Владелец, - | ВЫБОР - | КОГДА ТИПЗНАЧЕНИЯ(ФайлыВРабочемКаталоге.Файл) = ТИП(Справочник.ВерсииФайлов) - | ТОГДА ФайлыВРабочемКаталоге.Файл.НомерВерсии - | ИНАЧЕ 0 - | КОНЕЦ КАК НомерВерсии, - | ВЫБОР - | КОГДА ТИПЗНАЧЕНИЯ(ФайлыВРабочемКаталоге.Файл) = ТИП(Справочник.ВерсииФайлов) - | ТОГДА ФайлыВРабочемКаталоге.Файл.Владелец.ВладелецФайла - | ИНАЧЕ ФайлыВРабочемКаталоге.Файл.ВладелецФайла - | КОНЕЦ КАК ВРегистреПапка - |ИЗ - | РегистрСведений.ФайлыВРабочемКаталоге КАК ФайлыВРабочемКаталоге - |ГДЕ - | ФайлыВРабочемКаталоге.Путь = &ИмяФайла - | И ФайлыВРабочемКаталоге.Пользователь = &Пользователь"; - РезультатЗапроса = ЗапросВРегистр.Выполнить(); + АвторизованныйПользователь = Пользователи.АвторизованныйПользователь(); - Если НЕ РезультатЗапроса.Пустой() Тогда - НайденныеСвойства.ФайлЕстьВРегистре = Истина; + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ФайлыВРабочемКаталоге"); + ЭлементБлокировки.УстановитьЗначение("Пользователь", АвторизованныйПользователь); + + НачатьТранзакцию(); + Попытка - Выборка = РезультатЗапроса.Выбрать(); - Выборка.Следующий(); + Блокировка.Заблокировать(); - ЗаполнитьЗначенияСвойств(НайденныеСвойства, Выборка); - КонецЕсли; + ЗапросВРегистр = Новый Запрос; + ЗапросВРегистр.УстановитьПараметр("ИмяФайла", ИмяФайла); + ЗапросВРегистр.УстановитьПараметр("Пользователь", АвторизованныйПользователь); + ЗапросВРегистр.Текст = + "ВЫБРАТЬ + | ФайлыВРабочемКаталоге.Файл КАК Файл, + | ФайлыВРабочемКаталоге.ДатаПомещенияВРабочийКаталог КАК ДатаПомещения, + | ФайлыВРабочемКаталоге.НаЧтение КАК ВРегистреНаЧтение, + | ВЫБОР + | КОГДА ТИПЗНАЧЕНИЯ(ФайлыВРабочемКаталоге.Файл) = ТИП(Справочник.ВерсииФайлов) + | ТОГДА ФайлыВРабочемКаталоге.Файл.Владелец + | ИНАЧЕ ФайлыВРабочемКаталоге.Файл + | КОНЕЦ КАК Владелец, + | ВЫБОР + | КОГДА ТИПЗНАЧЕНИЯ(ФайлыВРабочемКаталоге.Файл) = ТИП(Справочник.ВерсииФайлов) + | ТОГДА ФайлыВРабочемКаталоге.Файл.НомерВерсии + | ИНАЧЕ 0 + | КОНЕЦ КАК НомерВерсии, + | ВЫБОР + | КОГДА ТИПЗНАЧЕНИЯ(ФайлыВРабочемКаталоге.Файл) = ТИП(Справочник.ВерсииФайлов) + | ТОГДА ФайлыВРабочемКаталоге.Файл.Владелец.ВладелецФайла + | ИНАЧЕ ФайлыВРабочемКаталоге.Файл.ВладелецФайла + | КОНЕЦ КАК ВРегистреПапка + |ИЗ + | РегистрСведений.ФайлыВРабочемКаталоге КАК ФайлыВРабочемКаталоге + |ГДЕ + | ФайлыВРабочемКаталоге.Путь = &ИмяФайла + | И ФайлыВРабочемКаталоге.Пользователь = &Пользователь"; + + РезультатЗапроса = ЗапросВРегистр.Выполнить(); + + Если НЕ РезультатЗапроса.Пустой() Тогда + + НайденныеСвойства.ФайлЕстьВРегистре = Истина; + + Выборка = РезультатЗапроса.Выбрать(); + Выборка.Следующий(); + + ЗаполнитьЗначенияСвойств(НайденныеСвойства, Выборка); + + КонецЕсли; + + ЗафиксироватьТранзакцию(); + + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; Возврат НайденныеСвойства; @@ -1866,45 +1908,60 @@ СписокУдалить = Новый Массив; ТекущийПользователь = Пользователи.АвторизованныйПользователь(); - // Для каждой нашей записи находим запись в регистре сведений - оттуда берем поле Версия и Редактирует. - ЗапросВРегистр = Новый Запрос; - ЗапросВРегистр.УстановитьПараметр("Пользователь", ТекущийПользователь); - ЗапросВРегистр.Текст = - "ВЫБРАТЬ - | ФайлыВРабочемКаталоге.Файл КАК Файл, - | СведенияОФайлах.Редактирует КАК Редактирует - |ИЗ - | РегистрСведений.ФайлыВРабочемКаталоге КАК ФайлыВРабочемКаталоге - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СведенияОФайлах КАК СведенияОФайлах - | ПО ФайлыВРабочемКаталоге.Файл = СведенияОФайлах.Файл - |ГДЕ - | ФайлыВРабочемКаталоге.Пользователь = &Пользователь - | И ФайлыВРабочемКаталоге.ВРабочемКаталогеВладельца = ЛОЖЬ"; + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ФайлыВРабочемКаталоге"); + ЭлементБлокировки.УстановитьЗначение("Пользователь", ТекущийПользователь); - РезультатЗапроса = ЗапросВРегистр.Выполнить(); - - Если НЕ РезультатЗапроса.Пустой() Тогда + НачатьТранзакцию(); + Попытка - Выборка = РезультатЗапроса.Выбрать(); - Пока Выборка.Следующий() Цикл - - Если Выборка.Редактирует <> ТекущийПользователь Тогда - СписокУдалить.Добавить(Выборка.Файл); - КонецЕсли; + Блокировка.Заблокировать(); + + // Для каждой нашей записи находим запись в регистре сведений - оттуда берем поле Версия и Редактирует. + ЗапросВРегистр = Новый Запрос; + ЗапросВРегистр.УстановитьПараметр("Пользователь", ТекущийПользователь); + ЗапросВРегистр.Текст = + "ВЫБРАТЬ + | ФайлыВРабочемКаталоге.Файл КАК Файл, + | СведенияОФайлах.Редактирует КАК Редактирует + |ИЗ + | РегистрСведений.ФайлыВРабочемКаталоге КАК ФайлыВРабочемКаталоге + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СведенияОФайлах КАК СведенияОФайлах + | ПО ФайлыВРабочемКаталоге.Файл = СведенияОФайлах.Файл + |ГДЕ + | ФайлыВРабочемКаталоге.Пользователь = &Пользователь + | И ФайлыВРабочемКаталоге.ВРабочемКаталогеВладельца = ЛОЖЬ"; + + РезультатЗапроса = ЗапросВРегистр.Выполнить(); + + Если НЕ РезультатЗапроса.Пустой() Тогда + Выборка = РезультатЗапроса.Выбрать(); + Пока Выборка.Следующий() Цикл + + Если Выборка.Редактирует <> ТекущийПользователь Тогда + СписокУдалить.Добавить(Выборка.Файл); + КонецЕсли; + + КонецЦикла; + КонецЕсли; + + Для Каждого Файл Из СписокУдалить Цикл + // Создать набор записей + НаборЗаписей = РегистрыСведений.ФайлыВРабочемКаталоге.СоздатьНаборЗаписей(); + + НаборЗаписей.Отбор.Файл.Установить(Файл); + НаборЗаписей.Отбор.Пользователь.Установить(ТекущийПользователь); + + НаборЗаписей.Записать(); КонецЦикла; - КонецЕсли; - - УстановитьПривилегированныйРежим(Истина); - Для Каждого Файл Из СписокУдалить Цикл - // Создать набор записей - НаборЗаписей = РегистрыСведений.ФайлыВРабочемКаталоге.СоздатьНаборЗаписей(); - НаборЗаписей.Отбор.Файл.Установить(Файл); - НаборЗаписей.Отбор.Пользователь.Установить(ТекущийПользователь); + ЗафиксироватьТранзакцию(); - НаборЗаписей.Записать(); - КонецЦикла; + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; КонецПроцедуры @@ -2334,37 +2391,6 @@ КонецФункции -Функция ПолныйПутьПапки(Папка) - - ПолныйПуть = ""; - - ПапкаРодитель = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Папка.Ссылка, "Родитель"); - - Если ЗначениеЗаполнено(ПапкаРодитель) Тогда - - ПолныйПуть = ""; - Пока ЗначениеЗаполнено(ПапкаРодитель) Цикл - - ПолныйПуть = Строка(ПапкаРодитель) + "\" + ПолныйПуть; - ПапкаРодитель = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ПапкаРодитель, "Родитель"); - Если Не ЗначениеЗаполнено(ПапкаРодитель) Тогда - Прервать; - КонецЕсли; - - КонецЦикла; - - ПолныйПуть = ПолныйПуть + Строка(Папка.Ссылка); - - Если Не ПустаяСтрока(ПолныйПуть) Тогда - ПолныйПуть = """" + ПолныйПуть + """"; - КонецЕсли; - - КонецЕсли; - - Возврат ПолныйПуть; - -КонецФункции - Функция ФайлСинхронизируетсяОблачнымСервисом(Файл) Запрос = Новый Запрос; @@ -2387,50 +2413,6 @@ КонецФункции -Функция КоличествоПрисоединенныхФайлов(ВладелецФайлов, ВозвращатьДанныеФайлов = Ложь) Экспорт - - ФайлыВладельца = Новый Структура; - ФайлыВладельца.Вставить("КоличествоФайлов", 0); - ФайлыВладельца.Вставить("ДанныеФайла", Неопределено); - - ИмяСправочникаХранения = РаботаСФайламиСлужебный.ИмяСправочникаХраненияФайлов(ВладелецФайлов); - Если ЗначениеЗаполнено(ИмяСправочникаХранения) Тогда - - ТекстЗапроса = - "ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ - | СправочникХраненияФайлов.Ссылка КАК Файл - |ИЗ - | &ИмяСправочника КАК СправочникХраненияФайлов - |ГДЕ - | СправочникХраненияФайлов.ВладелецФайла = &ВладелецФайла - | И &ЭтоГруппа = ЛОЖЬ - | И &Служебный = ЛОЖЬ"; - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ИмяСправочника", "Справочник." + ИмяСправочникаХранения); - - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&Служебный", - ?(РаботаСФайламиСлужебный.ЕстьРеквизитСлужебный(ИмяСправочникаХранения), - "СправочникХраненияФайлов.Служебный", "ЛОЖЬ")); - - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ЭтоГруппа", - ?(Метаданные.Справочники[ИмяСправочникаХранения].Иерархический, - "СправочникХраненияФайлов.ЭтоГруппа", "ЛОЖЬ")); - - Запрос = Новый Запрос(ТекстЗапроса); - Запрос.УстановитьПараметр("ВладелецФайла", ВладелецФайлов); - ТаблицаФайлов = Запрос.Выполнить().Выгрузить(); - КоличествоФайлов = ТаблицаФайлов.Количество(); - - ФайлыВладельца.КоличествоФайлов = КоличествоФайлов; - Если КоличествоФайлов > 0 Тогда - ФайлыВладельца.ДанныеФайла = ДанныеФайла(ТаблицаФайлов[0].Файл, , , Ложь); - КонецЕсли; - - КонецЕсли; - - Возврат ?(ВозвращатьДанныеФайлов, ФайлыВладельца, ФайлыВладельца.КоличествоФайлов); - -КонецФункции - Функция ЕстьПравоДоступа(Право, Ссылка) Экспорт Возврат ПравоДоступа(Право, Ссылка.Метаданные()); @@ -2509,15 +2491,26 @@ // Обновляет размер файла и текущей версии. Нужно при загрузке шифрованного файла в почте. Процедура ОбновитьРазмерФайлаИВерсии(ДанныеФайла, РазмерФайла, УникальныйИдентификатор) Экспорт + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить(ДанныеФайла.Версия.Метаданные().ПолноеИмя()); + ЭлементБлокировки.УстановитьЗначение("Ссылка", ДанныеФайла.Версия); + ЭлементБлокировки = Блокировка.Добавить(ДанныеФайла.Ссылка.Метаданные().ПолноеИмя()); + ЭлементБлокировки.УстановитьЗначение("Ссылка", ДанныеФайла.Ссылка); + НачатьТранзакцию(); Попытка + Блокировка.Заблокировать(); + ВерсияОбъект = ДанныеФайла.Версия.ПолучитьОбъект(); - ВерсияОбъект.Заблокировать(); + ЗаблокироватьДанныеДляРедактирования(ВерсияОбъект.Ссылка, , УникальныйИдентификатор); + ВерсияОбъект.Размер = РазмерФайла; + // Чтобы прошла запись ранее подписанного объекта. ВерсияОбъект.ДополнительныеСвойства.Вставить("ЗаписьПодписанногоОбъекта", Истина); ВерсияОбъект.Записать(); + РазблокироватьДанныеДляРедактирования(ВерсияОбъект.Ссылка, УникальныйИдентификатор); ФайлОбъект = ДанныеФайла.Ссылка.ПолучитьОбъект(); ЗаблокироватьДанныеДляРедактирования(ФайлОбъект.Ссылка, , УникальныйИдентификатор); @@ -2527,6 +2520,7 @@ РазблокироватьДанныеДляРедактирования(ФайлОбъект.Ссылка, УникальныйИдентификатор); ЗафиксироватьТранзакцию(); + Исключение ОтменитьТранзакцию(); ВызватьИсключение; diff --git a/SSL/src/CommonModules/РаботаСФайламиСлужебныйКлиент/Module.bsl b/SSL/src/CommonModules/РаботаСФайламиСлужебныйКлиент/Module.bsl index 3c2dccb21..1ec38511c 100644 --- a/SSL/src/CommonModules/РаботаСФайламиСлужебныйКлиент/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайламиСлужебныйКлиент/Module.bsl @@ -37,9 +37,9 @@ КонецПроцедуры -Процедура ПеренестиВсеФайлыВТома() Экспорт +Процедура ПеренестиФайлы() Экспорт - ОткрытьФорму("Обработка.ПереносФайловВТома.Форма"); + ОткрытьФорму("Обработка.ПереносФайлов.Форма"); КонецПроцедуры @@ -178,7 +178,9 @@ // Создание карточки Файла в БД. Попытка + Если РаботаСФайламиСлужебныйКлиентПовтИсп.ЭтоСправочникФайлы(ПараметрыВыполнения.ВладелецФайла) Тогда + СведенияОФайле = РаботаСФайламиКлиентСервер.СведенияОФайле("ФайлСВерсией", ФайлКлиента); СведенияОФайле.АдресВременногоХранилищаФайла = АдресВременногоХранилищаФайла; СведенияОФайле.АдресВременногоХранилищаТекста = АдресВременногоХранилищаТекста; @@ -186,20 +188,22 @@ СведенияОФайле.ИмяБезРасширения = ИмяСоздания; СведенияОФайле.РасширениеБезТочки = РасширениеФайла; Результат.ФайлСсылка = РаботаСФайламиСлужебныйВызовСервера.СоздатьФайлСВерсией(ПараметрыВыполнения.ВладелецФайла, СведенияОФайле); + Иначе - ПараметрыФайла = Новый Структура; - ПараметрыФайла.Вставить("ВладелецФайлов", ПараметрыВыполнения.ВладелецФайла); - ПараметрыФайла.Вставить("Автор", Неопределено); - ПараметрыФайла.Вставить("ИмяБезРасширения", ИмяФайлаБезРасширения); - ПараметрыФайла.Вставить("РасширениеБезТочки", РасширениеФайла); - ПараметрыФайла.Вставить("ВремяИзменения"); - ПараметрыФайла.Вставить("ВремяИзмененияУниверсальное"); + + ПараметрыФайла = РаботаСФайламиСлужебныйКлиентСервер.ПараметрыДобавленияФайла(); + ПараметрыФайла.ВладелецФайлов = ПараметрыВыполнения.ВладелецФайла; + ПараметрыФайла.ИмяБезРасширения = ИмяФайлаБезРасширения; + ПараметрыФайла.РасширениеБезТочки = РасширениеФайла; Результат.ФайлСсылка = РаботаСФайламиСлужебныйВызовСервера.ДобавитьФайл(ПараметрыФайла, АдресВременногоХранилищаФайла, АдресВременногоХранилищаТекста); - КонецЕсли; + + КонецЕсли; + Результат.ФайлДобавлен = Истина; + Исключение Результат.ТекстОшибки = ОшибкаСозданияНовогоФайла(ИнформацияОбОшибке()); КонецПопытки; @@ -316,11 +320,10 @@ // Процедура ПоказатьПредупреждениеОНеобходимостиРасширенияРаботыСФайлами(ОбработчикРезультата, ПредставлениеКоманды = "") Экспорт Если Не КлиентПоддерживаетСинхронныеВызовы() Тогда - ТекстПредупреждения = НСтр("ru = 'Выполнение команды ""%1"" в браузерах - |Google Chrome и Mozilla Firefox не поддерживается.'"); + ТекстПредупреждения = НСтр("ru = 'В веб-браузерах Google Chrome и Mozilla Firefox команда ""%1"" недоступна.'"); Иначе ТекстПредупреждения = НСтр("ru = 'Для выполнения команды ""%1"" необходимо - |установить расширение для веб-клиента 1С:Предприятие.'"); + |установить расширение для работы с 1С:Предприятием.'"); КонецЕсли; Если ЗначениеЗаполнено(ПредставлениеКоманды) Тогда ТекстПредупреждения = СтрЗаменить(ТекстПредупреждения, "%1", ПредставлениеКоманды); @@ -375,7 +378,7 @@ ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); ДиалогОткрытияФайла.ПолноеИмяФайла = ""; - ДиалогОткрытияФайла.Фильтр = НСтр("ru = 'Все файлы(*.*)|*.*'"); + ДиалогОткрытияФайла.Фильтр = НСтр("ru = 'Все файлы (*.*)|*.*'"); ДиалогОткрытияФайла.МножественныйВыбор = Истина; ДиалогОткрытияФайла.Заголовок = НСтр("ru = 'Выберите файлы'"); @@ -616,6 +619,24 @@ КонецПроцедуры +// Возвращает строковое представление расширений, ассоциированных с типом файла. +// +// Параметры: +// ТипФайла - Строка - типы файлов см. ЗаполнитьСписокТипамиФайлов. +// +Функция РасширенияПоТипуФайла(ТипФайла) Экспорт + + Если ТипФайла = "Изображения" Тогда + Возврат "JPG JPEG JP2 JPG2 PNG BMP TIFF"; + ИначеЕсли ТипФайла = "ОфисныеДокументы" Тогда + Возврат "DOC DOCX DOCM DOT DOTX DOTM XLS XLSX XLSM XLT XLTM XLSB PPT PPTX PPTM PPS PPSX PPSM POT POTX POTM" + + "ODT OTT ODP OTP ODS OTS ODC OTC ODF OTF ODM OTH SDW STW SXW STC SXC SDC SDD STI"; + Иначе + Возврат ""; + КонецЕсли; + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Процедуры и функции работы с криптографией. @@ -742,13 +763,10 @@ ИмяБезРасширения = "img_" + Формат(ОбщегоНазначенияКлиент.ДатаСеанса(), "ДФ=yyyyMMdd_hhmmss"); - ПараметрыФайла = Новый Структура; - ПараметрыФайла.Вставить("Автор", Неопределено); - ПараметрыФайла.Вставить("ВладелецФайлов", ПараметрыВыполнения.ВладелецФайла); - ПараметрыФайла.Вставить("ИмяБезРасширения", ИмяБезРасширения); - ПараметрыФайла.Вставить("РасширениеБезТочки", ДанныеМультимедиа.РасширениеФайла); - ПараметрыФайла.Вставить("ВремяИзменения", Неопределено); - ПараметрыФайла.Вставить("ВремяИзмененияУниверсальное", Неопределено); + ПараметрыФайла = РаботаСФайламиСлужебныйКлиентСервер.ПараметрыДобавленияФайла(); + ПараметрыФайла.ВладелецФайлов = ПараметрыВыполнения.ВладелецФайла; + ПараметрыФайла.ИмяБезРасширения = ИмяБезРасширения; + ПараметрыФайла.РасширениеБезТочки = ДанныеМультимедиа.РасширениеФайла; АдресФайла = ПоместитьВоВременноеХранилище(ДанныеМультимедиа.ПолучитьДвоичныеДанные(), ПараметрыВыполнения.ФормаВладелец.УникальныйИдентификатор); @@ -1432,12 +1450,12 @@ КонецПроцедуры // Помещает файлы с диска в хранилище присоединенных файлов. -// +// // Параметры: // ВыбранныеФайлы - Массив - пути к файлам на диске. // ВладелецФайла - Ссылка на владельца файла. // НастройкиРаботыСФайлами - Структура. -// ПрисоединенныеФайлыМассив - Массив (возвращаемое значение) - заполняется ссылками +// ПрисоединенныеФайлыМассив - Массив Из возвращаемое значение - заполняется ссылками // на добавленные файлы. // ИдентификаторФормы - УникальныйИдентификатор формы. // @@ -1501,15 +1519,14 @@ #КонецЕсли ИмяБезРасширения = ?(ПустаяСтрока(ИмяСоздаваемогоФайла), ИмяФайлаБезРасширения, ИмяСоздаваемогоФайла); + // Создание карточки Файла в базе данных. - ПараметрыФайла = Новый Структура; - ПараметрыФайла.Вставить("ВладелецФайлов", ВладелецФайла); - ПараметрыФайла.Вставить("Автор", Неопределено); - ПараметрыФайла.Вставить("ИмяБезРасширения", ИмяБезРасширения); - ПараметрыФайла.Вставить("РасширениеБезТочки", РасширениеФайла); - ПараметрыФайла.Вставить("ГруппаФайлов", ГруппаФайлов); - ПараметрыФайла.Вставить("ВремяИзменения"); - ПараметрыФайла.Вставить("ВремяИзмененияУниверсальное", ВремяИзмененияУниверсальное); + ПараметрыФайла = РаботаСФайламиСлужебныйКлиентСервер.ПараметрыДобавленияФайла(); + ПараметрыФайла.ГруппаФайлов = ГруппаФайлов; + ПараметрыФайла.ВладелецФайлов = ВладелецФайла; + ПараметрыФайла.ИмяБезРасширения = ИмяБезРасширения; + ПараметрыФайла.РасширениеБезТочки = РасширениеФайла; + ПараметрыФайла.ВремяИзмененияУниверсальное = ВремяИзмененияУниверсальное; ПрисоединенныйФайл = РаботаСФайламиСлужебныйВызовСервера.ДобавитьФайл( ПараметрыФайла, @@ -1609,14 +1626,14 @@ КонецЕсли; ПроверитьРасширениеФайлаДляЗагрузки(Расширение); - ПараметрыФайла = Новый Структура; - ПараметрыФайла.Вставить("ВладелецФайлов", ВладелецФайла); - ПараметрыФайла.Вставить("Автор", Неопределено); - ПараметрыФайла.Вставить("ИмяБезРасширения", ИмяБезРасширения); - ПараметрыФайла.Вставить("РасширениеБезТочки", Расширение); - ПараметрыФайла.Вставить("ГруппаФайлов", ?(ЗначениеЗаполнено(ГруппаФайлов), ГруппаФайлов, "")); - ПараметрыФайла.Вставить("ВремяИзменения"); - ПараметрыФайла.Вставить("ВремяИзмененияУниверсальное"); + + ПараметрыФайла = РаботаСФайламиСлужебныйКлиентСервер.ПараметрыДобавленияФайла(); + ПараметрыФайла.ВладелецФайлов = ВладелецФайла; + ПараметрыФайла.ИмяБезРасширения = ИмяБезРасширения; + ПараметрыФайла.РасширениеБезТочки = Расширение; + Если ЗначениеЗаполнено(ГруппаФайлов) Тогда + ПараметрыФайла.ГруппаФайлов = ГруппаФайлов; + КонецЕсли; // Создание карточки Файла в базе данных. ПрисоединенныйФайл = РаботаСФайламиСлужебныйВызовСервера.ДобавитьФайл( @@ -1641,7 +1658,7 @@ // (например, "Файл занят другим пользователем"). // // Возвращаемое значение: -// Булево. Истина, если файл можно освободить. +// Булево - Истина, если файл можно освободить. // Функция ВозможностьОсвободитьФайл(ОбъектСсылка, РедактируетТекущийПользователь, @@ -1781,7 +1798,7 @@ // Возвращает строковую константу для формирования сообщений журнала регистрации. // // Возвращаемое значение: -// Строка +// Строка - // Функция СобытиеЖурналаРегистрации() @@ -1928,7 +1945,7 @@ Если Не ПустаяСтрока(ПараметрыВыполнения.ПолныйПутьКФайлу) Тогда СтрокаПредупреждения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Не удалось поместить файл - |""%1"" (%2), + |""%1"" (%2) |в программу, т.к. он не существует в рабочем каталоге на компьютере. | |Освободить файл?'"), @@ -1936,7 +1953,7 @@ ПараметрыВыполнения.ПолныйПутьКФайлу); Иначе СтрокаПредупреждения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не удалось поместить файл ""%1"", + НСтр("ru = 'Не удалось поместить файл ""%1"" |в программу, т.к. он не существует в рабочем каталоге на компьютере. | |Освободить файл?'"), @@ -2539,7 +2556,7 @@ // ИдентификаторФормы - уникальный идентификатор формы. // // Возвращаемое значение: -// Булево. Истина, если операция выполнена успешно. +// Булево - Истина, если операция выполнена успешно. // Процедура ОбновитьИзФайлаНаДиске( ОбработчикРезультата, @@ -2938,7 +2955,7 @@ // УникальныйИдентификатор - УникальныйИдентификатор формы. // // Возвращаемое значение: -// Булево. Истина, если операция выполнена успешно. +// Булево - Истина, если операция выполнена успешно. // Процедура ЗанятьФайлПоСсылке(ОбработчикРезультата, ОбъектСсылка, УникальныйИдентификатор = Неопределено) @@ -3067,7 +3084,7 @@ // РабочийКаталогВладельца - Строка - рабочий каталог владельца. // // Возвращаемое значение: -// Булево. Истина, если операция выполнена успешно. +// Булево - Истина, если операция выполнена успешно. // Процедура РедактироватьФайлПоСсылке(ОбработчикРезультата, ОбъектСсылка, @@ -3093,10 +3110,12 @@ ПараметрыВыполнения.Вставить("РасширениеПодключено", РасширениеРаботыСФайламиПодключено()); ТекстОшибки = ""; - ДанныеПолучены = РаботаСФайламиСлужебныйВызовСервера.ПолучитьДанныеФайлаДляОткрытияИЗанятьФайл(ПараметрыВыполнения.ОбъектСсылка, + РезультатПолучения = РаботаСФайламиСлужебныйВызовСервера.ПолучитьДанныеФайлаДляОткрытияИЗанятьФайл(ПараметрыВыполнения.ОбъектСсылка, ПараметрыВыполнения.ДанныеФайла, ТекстОшибки, ПараметрыВыполнения.УникальныйИдентификатор, ПараметрыВыполнения.РабочийКаталогВладельца); + + ПараметрыВыполнения.Вставить("ФайлУжеРедактируетТекущийПользователь", РезультатПолучения.ФайлУжеРедактируетТекущийПользователь); - Если Не ДанныеПолучены Тогда + Если Не РезультатПолучения.ДанныеПолучены Тогда СтандартнаяОбработка = Истина; РаботаСФайламиКлиентПереопределяемый.ПриОшибкеЗахватаФайла(ПараметрыВыполнения.ДанныеФайла, СтандартнаяОбработка); @@ -3155,7 +3174,12 @@ ОткрытьФайлПриложением(ПараметрыВыполнения.ДанныеФайла, Результат.ПолноеИмяФайла, УникальныйИдентификатор); КонецЕсли; - ВернутьРезультат(ПараметрыВыполнения.ОбработчикРезультата, Результат.ФайлПолучен = Истина); + ФайлУжеРедактируетТекущийПользователь = Ложь; + Если Не ПараметрыВыполнения.ФайлУжеРедактируетТекущийПользователь Тогда + ФайлУжеРедактируетТекущийПользователь = Истина; + КонецЕсли; + + ВернутьРезультат(ПараметрыВыполнения.ОбработчикРезультата, ФайлУжеРедактируетТекущийПользователь); КонецПроцедуры @@ -3528,6 +3552,9 @@ ПараметрыВыполнения.ДанныеФайла.ПолноеНаименованиеВерсии, БиблиотекаКартинок.Информация32); КонецЕсли; + + КоличествоЗанятыхФайлов = СтандартныеПодсистемыКлиент.ПараметрКлиента("КоличествоЗанятыхФайлов"); + СтандартныеПодсистемыКлиент.УстановитьПараметрКлиента("КоличествоЗанятыхФайлов", КоличествоЗанятыхФайлов - 1); КонецЕсли; @@ -3595,7 +3622,7 @@ Если Не ПараметрыВыполнения.ФайлНовойВерсии.Существует() Тогда Если Не ПустаяСтрока(ПараметрыВыполнения.ПолныйПутьКФайлу) Тогда СтрокаПредупреждения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не удалось поместить файл ""%1"" + НСтр("ru = 'Не удалось поместить файл ""%1"" |в программу, так как он не существует на диске на компьютере: |%2. | @@ -4505,7 +4532,7 @@ Результат = Новый Структура; Результат.Вставить("ПолноеИмяФайла", ""); Результат.Вставить("ОписаниеОшибки", Контекст.ЗаголовокОшибки - + НСтр("ru = 'В браузере не установлено расширение для работы с файлами.'")); + + НСтр("ru = 'Не установлено расширение для работы с 1С:Предприятием.'")); ВыполнитьОбработкуОповещения(Контекст.Оповещение, Результат); Возврат; КонецЕсли; @@ -4563,7 +4590,7 @@ Действие.Вставить("Файл", Контекст.ПолноеИмяФайла); Действие.Вставить("Свойства", СвойстваФайла); Действие.Вставить("ЗаголовокОшибки", Контекст.ЗаголовокОшибки - + НСтр("ru = 'Установка свойств файла не выполнено по причине:'")); + + НСтр("ru = 'Установка свойств файла не выполнена по причине:'")); ДействияСФайлом.Добавить(Действие); ОбработатьФайл(Новый ОписаниеОповещения( @@ -4624,7 +4651,7 @@ Если Не РасширениеПодключено Тогда Результат = Новый Структура; Результат.Вставить("ОписаниеОшибки", Контекст.ЗаголовокОшибки - + НСтр("ru = 'В браузере не установлено расширение для работы с файлами.'")); + + НСтр("ru = 'Не установлено расширение для работы с 1С:Предприятием.'")); ВыполнитьОбработкуОповещения(Контекст.Оповещение, Результат); Возврат; КонецЕсли; @@ -4833,8 +4860,8 @@ Обработчик = Новый ОписаниеОповещения("КаталогФайлаПослеОтветаНаВопросПолучитьФайл", ЭтотОбъект, ПараметрыОбработчика); КнопкиВопроса = Новый СписокЗначений; - КнопкиВопроса.Добавить(КодВозвратаДиалога.Да, НСтр("ru= 'Сохранить и открыть каталог'")); - КнопкиВопроса.Добавить(КодВозвратаДиалога.Нет, НСтр("ru= 'Отмена'")); + КнопкиВопроса.Добавить(КодВозвратаДиалога.Да, НСтр("ru = 'Сохранить и открыть каталог'")); + КнопкиВопроса.Добавить(КодВозвратаДиалога.Нет, НСтр("ru = 'Отмена'")); ПоказатьВопрос(Обработчик, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Каталог файла не существует. Возможно, на данном компьютере файл ""%1"" еще не открывался. |Сохранить файл на компьютер и открыть его каталог?'"), @@ -5056,9 +5083,14 @@ СреднийРазмерФайла = ПараметрыВыполнения.РазмерФайловВРабочемКаталоге / ТаблицаФайлов.Количество(); КонецЕсли; - СколькоНадоОсвободитьМеста = МаксРазмер / 10; - Если СреднийРазмерФайла * 3 / 2 > СколькоНадоОсвободитьМеста Тогда - СколькоНадоОсвободитьМеста = СреднийРазмерФайла * 3 / 2; + + Если ПараметрыВыполнения.ОчищатьВсе Тогда + СколькоНадоОсвободитьМеста = 0; + Иначе + СколькоНадоОсвободитьМеста = МаксРазмер / 10; + Если СреднийРазмерФайла * 3 / 2 > СколькоНадоОсвободитьМеста Тогда + СколькоНадоОсвободитьМеста = СреднийРазмерФайла * 3 / 2; + КонецЕсли; КонецЕсли; СколькоОсталось = ПараметрыВыполнения.РазмерФайловВРабочемКаталоге + ПараметрыВыполнения.РазмерДобавляемогоФайла; @@ -5067,116 +5099,25 @@ ПараметрыВыполнения.Вставить("МаксРазмер", МаксРазмер); ПараметрыВыполнения.Вставить("СколькоОсталось", СколькоОсталось); ПараметрыВыполнения.Вставить("СколькоНадоОсвободитьМеста", СколькоНадоОсвободитьМеста); - ПараметрыВыполнения.Вставить("ТаблицаФайлов", ТаблицаФайлов); - ПараметрыВыполнения.Вставить("НомерЭлемента", 1); - ПараметрыВыполнения.Вставить("КоличествоЭлементов", ТаблицаФайлов.Количество()); - ПараметрыВыполнения.Вставить("Элемент", Неопределено); - ПараметрыВыполнения.Вставить("ДаДляВсех", Ложь); - ПараметрыВыполнения.Вставить("НетДляВсех", Ложь); - ПараметрыВыполнения.Вставить("НомерШага", 0); - ПараметрыВыполнения.Вставить("ПрерватьЦикл", Ложь); - - ОбработчикЗавершения = Новый ОписаниеОповещения("ОчиститьРабочийКаталогОбработчикДиалогаВЦикле", ЭтотОбъект); - ЗарегистрироватьОбработчикЗавершения(ПараметрыВыполнения, ОбработчикЗавершения); - - ОчиститьРабочийКаталогЗапускЦикла(ПараметрыВыполнения); + ОчиститьРабочийКаталогДляОткрываемогоФайла(ПараметрыВыполнения); КонецПроцедуры -// Продолжение процедуры (см. выше). -Процедура ОчиститьРабочийКаталогЗапускЦикла(ПараметрыВыполнения) +Процедура ОчиститьРабочийКаталогДляОткрываемогоФайла(ПараметрыВыполнения) - Пока ПараметрыВыполнения.НомерЭлемента <= ПараметрыВыполнения.КоличествоЭлементов Цикл - ПараметрыВыполнения.Элемент = ПараметрыВыполнения.ТаблицаФайлов[ПараметрыВыполнения.НомерЭлемента - 1]; - ПараметрыВыполнения.НомерЭлемента = ПараметрыВыполнения.НомерЭлемента + 1; + Для каждого Элемент Из ПараметрыВыполнения.ТаблицаФайлов Цикл - ПараметрыВыполнения.НомерШага = 1; - ОчиститьРабочийКаталогОбработчикЦикла(ПараметрыВыполнения); - Если ПараметрыВыполнения.АсинхронныйДиалог.Открыт Тогда - Возврат; // Пауза цикла. Стек очищается. - КонецЕсли; - Если ПараметрыВыполнения.ПрерватьЦикл Тогда - Прервать; - КонецЕсли; - КонецЦикла; - - // Действия после цикла. - Если ПараметрыВыполнения.ОчищатьВсе Тогда - РаботаСФайламиСлужебныйВызовСервера.ОчиститьВсеСвоиКромеЗанятых(); - КонецЕсли; - - ВернутьРезультат(ПараметрыВыполнения.ОбработчикРезультата, Неопределено); - -КонецПроцедуры - -// Продолжение процедуры (см. выше). -Процедура ОчиститьРабочийКаталогОбработчикЦикла(ПараметрыВыполнения) - - Если ПараметрыВыполнения.НомерШага = 1 Тогда - Если Не ПараметрыВыполнения.ДаДляВсех - И ПараметрыВыполнения.Элемент.Версия.Пустая() Тогда - - Если ПараметрыВыполнения.НетДляВсех Тогда - Возврат; // По отношению к циклу это равносильно ключевому слову "Продолжить". - КонецЕсли; - - Если ПараметрыВыполнения.ОчищатьВсе = Ложь Тогда - ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Выполняется очистка рабочего каталога на компьютере. - | - |В программе отсутствует файл - |""%1"". - | - |Удалить его копию из рабочего каталога на компьютере?'"), - ПараметрыВыполнения.ИмяКаталога + ПараметрыВыполнения.Элемент.Путь); - Иначе - ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'В программе отсутствует файл - |""%1"". - | - |Удалить его копию из рабочего каталога на компьютере?'"), - ПараметрыВыполнения.ИмяКаталога + ПараметрыВыполнения.Элемент.Путь); - КонецЕсли; - - Кнопки = Новый СписокЗначений; - Кнопки.Добавить("Да", НСтр("ru = 'Да'")); - Кнопки.Добавить("ДаДляВсех", НСтр("ru = 'Да для всех'")); - Кнопки.Добавить("Нет", НСтр("ru = 'Нет'")); - Кнопки.Добавить("НетДляВсех", НСтр("ru = 'Нет для всех'")); - - ПоказатьВопрос(ОбработчикЗавершения(ПараметрыВыполнения), ТекстВопроса, Кнопки); - Возврат; - КонецЕсли; - - ПараметрыВыполнения.НомерШага = 2; - КонецЕсли; - - Если ПараметрыВыполнения.НомерШага = 2 Тогда - ПолныйПуть = ПараметрыВыполнения.ИмяКаталога + ПараметрыВыполнения.Элемент.Путь; + ПолныйПуть = ПараметрыВыполнения.ИмяКаталога + Элемент.Путь; ФайлНаДиске = Новый Файл(ПолныйПуть); ФайлНаДиске.УстановитьТолькоЧтение(Ложь); - Если ПараметрыВыполнения.ОчищатьВсе = Ложь Тогда - ШапкаВопроса = НСтр("ru = 'Выполняется очистка рабочего каталога на компьютере при добавлении файла.'"); - Иначе - ШапкаВопроса = НСтр("ru = 'Выполняется очистка рабочего каталога на компьютере.'"); - КонецЕсли; - - УдалитьФайл(ПараметрыВыполнения, ПолныйПуть, Неопределено, ШапкаВопроса); - Если ПараметрыВыполнения.АсинхронныйДиалог.Открыт Тогда - Возврат; // Пауза цикла. Стек очищается. - КонецЕсли; - - ПараметрыВыполнения.НомерШага = 3; - КонецЕсли; - - Если ПараметрыВыполнения.НомерШага = 3 Тогда + УдалитьФайл(ПараметрыВыполнения, ПолныйПуть, Ложь); ПутьСПодкаталогом = ПараметрыВыполнения.ИмяКаталога; - Позиция = СтрНайти(ПараметрыВыполнения.Элемент.Путь, ПолучитьРазделительПути()); + Позиция = СтрНайти(Элемент.Путь, ПолучитьРазделительПути()); Если Позиция <> 0 Тогда - ПутьСПодкаталогом = ПараметрыВыполнения.ИмяКаталога + Лев(ПараметрыВыполнения.Элемент.Путь, Позиция); + ПутьСПодкаталогом = ПараметрыВыполнения.ИмяКаталога + Лев(Элемент.Путь, Позиция); КонецЕсли; // Если каталог стал пуст - удалить его. @@ -5188,53 +5129,16 @@ КонецЕсли; // Удаление из регистра сведений. - РаботаСФайламиСлужебныйВызовСервера.УдалитьИзРегистра(ПараметрыВыполнения.Элемент.Версия); + РаботаСФайламиСлужебныйВызовСервера.УдалитьИзРегистра(Элемент.Версия); - ПараметрыВыполнения.СколькоОсталось = ПараметрыВыполнения.СколькоОсталось - ПараметрыВыполнения.Элемент.Размер; - Если ПараметрыВыполнения.СколькоОсталось < ПараметрыВыполнения.МаксРазмер - ПараметрыВыполнения.СколькоНадоОсвободитьМеста Тогда - Если Не ПараметрыВыполнения.ОчищатьВсе Тогда - // Освободили достаточно - выход из цикла. - ПараметрыВыполнения.ПрерватьЦикл = Истина; - Возврат; + Если ПараметрыВыполнения.СколькоНадоОсвободитьМеста > 0 Тогда + ПараметрыВыполнения.СколькоОсталось = ПараметрыВыполнения.СколькоОсталось - Элемент.Размер; + Если ПараметрыВыполнения.СколькоОсталось < ПараметрыВыполнения.МаксРазмер - ПараметрыВыполнения.СколькоНадоОсвободитьМеста Тогда + Возврат; // Освободили достаточно - выход из цикла. КонецЕсли; КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -// Продолжение процедуры (см. выше). -Процедура ОчиститьРабочийКаталогОбработчикДиалогаВЦикле(Результат, ПараметрыВыполнения) Экспорт - - Если ПараметрыВыполнения.НомерШага = 1 Тогда - Если Результат = "Нет" Тогда - ПродолжитьВыполнение = Ложь; - ИначеЕсли Результат = "НетДляВсех" Тогда - ПродолжитьВыполнение = Ложь; - ПараметрыВыполнения.НетДляВсех = Истина; - ИначеЕсли Результат = "Да" Тогда - ПродолжитьВыполнение = Истина; - ИначеЕсли Результат = "ДаДляВсех" Тогда - ПродолжитьВыполнение = Истина; - ПараметрыВыполнения.ДаДляВсех = Истина; - КонецЕсли; - ИначеЕсли ПараметрыВыполнения.НомерШага = 2 Тогда - ПродолжитьВыполнение = Истина; - КонецЕсли; - - // Продолжение удаления файла - Если ПродолжитьВыполнение Тогда - ПараметрыВыполнения.НомерШага = ПараметрыВыполнения.НомерШага + 1; - ПараметрыВыполнения.АсинхронныйДиалог.Открыт = Ложь; - ОчиститьРабочийКаталогОбработчикЦикла(ПараметрыВыполнения); - Если ПараметрыВыполнения.АсинхронныйДиалог.Открыт Тогда - Возврат; // Пауза цикла. Стек очищается. - КонецЕсли; - КонецЕсли; - - // Продолжение цикла. - ПараметрыВыполнения.АсинхронныйДиалог.Открыт = Ложь; - ОчиститьРабочийКаталогЗапускЦикла(ПараметрыВыполнения); + КонецЦикла; КонецПроцедуры @@ -6931,6 +6835,24 @@ КонецПроцедуры +// Продолжение процедуры РаботаСФайламиКлиент.СохранитьФайлКак. +Процедура СохранитьФайлКакПослеСохранения(Результат, ОбработчикЗавершения) Экспорт + + Если ОбработчикЗавершения = Неопределено Тогда + Возврат; + КонецЕсли; + + ПутьКФайлу = ""; + Если ТипЗнч(Результат) = Тип("Структура") + И Результат.Свойство("ПолноеИмяФайла") Тогда + + ПутьКФайлу = Результат.ПолноеИмяФайла; + КонецЕсли; + + ВыполнитьОбработкуОповещения(ОбработчикЗавершения, ПутьКФайлу); + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Показывает напоминание перед помещением файла, если оно настроено. @@ -7341,11 +7263,11 @@ ОсвободитьФайлыПоСсылкам(Обработчик, Параметры.ОбъектСсылка); Иначе Обработчик = Новый ОписаниеОповещения("ОсвободитьФайлСОповещениемОдинФайлЗавершение", ЭтотОбъект, ПараметрыВыполнения); - Параметры = ПараметрыОсвобожденияФайла(Обработчик, Параметры.ОбъектСсылка); - Параметры.ХранитьВерсии = Параметры.ХранитьВерсии; - Параметры.ФайлРедактируетТекущийПользователь = Параметры.ФайлРедактируетТекущийПользователь; - Параметры.Редактирует = Параметры.Редактирует; - Параметры.УникальныйИдентификатор = Параметры.УникальныйИдентификатор; + ПараметрыОсвобождения = ПараметрыОсвобожденияФайла(Обработчик, Параметры.ОбъектСсылка); + ПараметрыОсвобождения.ХранитьВерсии = Параметры.ХранитьВерсии; + ПараметрыОсвобождения.ФайлРедактируетТекущийПользователь = Параметры.ФайлРедактируетТекущийПользователь; + ПараметрыОсвобождения.Редактирует = Параметры.Редактирует; + ПараметрыОсвобождения.УникальныйИдентификатор = Параметры.УникальныйИдентификатор; ОсвободитьФайл(Параметры); КонецЕсли; @@ -7982,7 +7904,7 @@ Или ТипЗнч(ПараметрыДобавления) = Тип("Булево") Тогда ПараметрыВыполнения.Вставить("МаксимальныйРазмер", 0); - ПараметрыВыполнения.Вставить("ФильтрДиалогаВыбора", НСтр("ru = 'Все файлы(*.*)|*.*'")); + ПараметрыВыполнения.Вставить("ФильтрДиалогаВыбора", НСтр("ru = 'Все файлы (*.*)|*.*'")); ПараметрыВыполнения.Вставить("НеОткрыватьКарточкуПослеСозданияИзФайла", ?(ПараметрыДобавления = Неопределено, Ложь, ПараметрыДобавления)); Иначе @@ -8152,13 +8074,10 @@ Иначе - ПараметрыФайла = Новый Структура; - ПараметрыФайла.Вставить("ВладелецФайлов", ПараметрыВыполнения.ВладелецФайла); - ПараметрыФайла.Вставить("Автор", Неопределено); - ПараметрыФайла.Вставить("ИмяБезРасширения", СтруктураПути.ИмяБезРасширения); - ПараметрыФайла.Вставить("РасширениеБезТочки", ОбщегоНазначенияКлиентСервер.РасширениеБезТочки(СтруктураПути.Расширение)); - ПараметрыФайла.Вставить("ВремяИзменения"); - ПараметрыФайла.Вставить("ВремяИзмененияУниверсальное"); + ПараметрыФайла = РаботаСФайламиСлужебныйКлиентСервер.ПараметрыДобавленияФайла(); + ПараметрыФайла.ВладелецФайлов = ПараметрыВыполнения.ВладелецФайла; + ПараметрыФайла.ИмяБезРасширения = СтруктураПути.ИмяБезРасширения; + ПараметрыФайла.РасширениеБезТочки = ОбщегоНазначенияКлиентСервер.РасширениеБезТочки(СтруктураПути.Расширение); Результат.ФайлСсылка = РаботаСФайламиСлужебныйВызовСервера.ДобавитьФайл(ПараметрыФайла,Адрес); Результат.ФайлДобавлен = Истина; @@ -8295,6 +8214,13 @@ // Завершение процедур ПодписатьФайл, ДобавитьПодписьИзФайла. Процедура ПослеДобавленияПодписей(ОписаниеДанных, ПараметрыВыполнения) Экспорт + Если ТипЗнч(ОписаниеДанных) <> Тип("Структура") + Или Не ОписаниеДанных.Свойство("Успех") Тогда + + ВыполнитьОбработкуОповещения(ПараметрыВыполнения.ОбработчикЗавершения, Ложь); + Возврат; + КонецЕсли; + Если ОписаниеДанных.Успех Тогда ОповеститьОбИзменении(ПараметрыВыполнения.ПрисоединенныйФайл); Оповестить("Запись_Файл", Новый Структура, ПараметрыВыполнения.ПрисоединенныйФайл); @@ -8358,6 +8284,13 @@ // Завершение процедуры ДобавитьПодписьИзФайла. Процедура ПослеПодписанияФайла(ОписаниеДанных, ПараметрыВыполнения) Экспорт + Если ТипЗнч(ОписаниеДанных) <> Тип("Структура") + Или Не ОписаниеДанных.Свойство("Успех") Тогда + + ВыполнитьОбработкуОповещения(ПараметрыВыполнения.ОбработчикЗавершения, Ложь); + Возврат; + КонецЕсли; + Если ОписаниеДанных.Успех Тогда ОповеститьОбИзмененииФайла(ПараметрыВыполнения.ДанныеФайла); КонецЕсли; @@ -8723,6 +8656,7 @@ Процедура ИмпортироватьФайл(Знач ВыбранныйФайл, Знач Владелец, Знач ПараметрыВыполнения, Знач АдресВременногоХранилищаФайла, Знач АдресВременногоХранилищаТекста) Если РаботаСФайламиСлужебныйКлиентПовтИсп.ЭтоСправочникФайлы(Владелец) Тогда + СведенияОФайле = РаботаСФайламиКлиентСервер.СведенияОФайле("ФайлСВерсией", ВыбранныйФайл); СведенияОФайле.АдресВременногоХранилищаФайла = АдресВременногоХранилищаФайла; СведенияОФайле.АдресВременногоХранилищаТекста = АдресВременногоХранилищаТекста; @@ -8730,20 +8664,18 @@ СведенияОФайле.Кодировка = ПараметрыВыполнения.Кодировка; ФайлСсылка = РаботаСФайламиСлужебныйВызовСервера.СоздатьФайлСВерсией(Владелец, СведенияОФайле); + Иначе - ПараметрыФайла = Новый Структура; - ПараметрыФайла.Вставить("ВладелецФайлов", Владелец); - ПараметрыФайла.Вставить("Автор", Неопределено); - ПараметрыФайла.Вставить("ИмяБезРасширения", ВыбранныйФайл.ИмяБезРасширения); - ПараметрыФайла.Вставить("РасширениеБезТочки", ОбщегоНазначенияКлиентСервер.РасширениеБезТочки(ВыбранныйФайл.Расширение)); - ПараметрыФайла.Вставить("ГруппаФайлов", ПараметрыВыполнения.ГруппаФайлов); - ПараметрыФайла.Вставить("ВремяИзменения"); - ПараметрыФайла.Вставить("ВремяИзмененияУниверсальное"); + + ПараметрыФайла = РаботаСФайламиСлужебныйКлиентСервер.ПараметрыДобавленияФайла(); + ПараметрыФайла.ВладелецФайлов = Владелец; + ПараметрыФайла.ИмяБезРасширения = ВыбранныйФайл.ИмяБезРасширения; + ПараметрыФайла.РасширениеБезТочки = ОбщегоНазначенияКлиентСервер.РасширениеБезТочки(ВыбранныйФайл.Расширение); + ПараметрыФайла.ГруппаФайлов = ПараметрыВыполнения.ГруппаФайлов; ФайлСсылка = РаботаСФайламиСлужебныйВызовСервера.ДобавитьФайл(ПараметрыФайла, - АдресВременногоХранилищаФайла, - АдресВременногоХранилищаТекста, - ПараметрыВыполнения.Комментарий); + АдресВременногоХранилищаФайла, АдресВременногоХранилищаТекста,ПараметрыВыполнения.Комментарий); + КонецЕсли; Если ПараметрыВыполнения.Кодировка <> Неопределено Тогда @@ -8934,13 +8866,13 @@ Возврат Неопределено; КонецЕсли; - ТекущийПользователь = ПользователиКлиент.АвторизованныйПользователь(); - КоличествоЗанятыхФайлов = СтандартныеПодсистемыКлиент.ПараметрКлиента("КоличествоЗанятыхФайлов"); - Если КоличествоЗанятыхФайлов = 0 Тогда + Если Не КоличествоЗанятыхФайлов > 0 Тогда Возврат Неопределено; КонецЕсли; + ТекущийПользователь = ПользователиКлиент.АвторизованныйПользователь(); + ПараметрыПрикладнойФормыПредупреждения = Новый Структура; ПараметрыПрикладнойФормыПредупреждения.Вставить("СообщениеВопрос", НСтр("ru = 'Завершить работу с программой?'")); ПараметрыПрикладнойФормыПредупреждения.Вставить("СообщениеЗаголовок", НСтр("ru = 'Следующие файлы заняты для редактирования:'")); @@ -9356,12 +9288,12 @@ Если Не РасширениеПоддерживается Тогда ТекстПредупреждения = - НСтр("ru = 'Сравнение файлов поддерживается только для файлов следующих типов: + НСтр("ru = 'Сравнение файлов поддерживается только для файлов следующих типов: | Текстовый документ (.txt) - | Документ формата RTF (.rtf) - | Документ Microsoft Word (.doc, .docx) - | Документ HTML (.html .htm) - | Табличный документ (.mxl) + | Документ формата RTF (.rtf) + | Документ Microsoft Word (.doc, .docx) + | Документ HTML (.html, .htm) + | Табличный документ (.mxl) | Текстовый документ OpenDocument (.odt)'"); ПоказатьПредупреждение(, ТекстПредупреждения); Возврат; @@ -9471,7 +9403,7 @@ Если ПараметрыВыполнения.ТекущийШаг = 5 Тогда Если ПараметрыВыполнения.Результат1 И ПараметрыВыполнения.Результат2 Тогда - ШаблонЗаголовкаФайла = НСтр("ru='Файл №%1 (%2)'"); + ШаблонЗаголовкаФайла = НСтр("ru = 'Файл №%1 (%2)'"); ИмяФайла1 = ОбщегоНазначенияКлиентСервер.ПолучитьИмяСРасширением( ПараметрыВыполнения.ДанныеФайла1.ПолноеНаименованиеВерсии, ПараметрыВыполнения.ДанныеФайла1.Расширение); @@ -9623,7 +9555,7 @@ // Возвращает каталог данных пользователя внутри стандартного каталога данных приложения. // Этот каталог может использоваться для хранения файлов, захваченных текущим пользователем. -// Для работы метода на веб-клиенте необходимо предварительно подключить расширение работы с файлами. +// Для работы метода на веб-клиенте необходимо предварительно подключить расширение для работы с 1С:Предприятием. // Функция КаталогДанныхПользователя() @@ -9905,15 +9837,12 @@ Контекст.Вставить("СвойстваДляУстановки", Контекст.ОписаниеДействия.Свойства); КонецЕсли; - Если ТипЗнч(Файл) = Тип("Файл") Тогда - Контекст.Вставить("Файл", Файл); - ОбработатьФайлПослеИнициализацииФайла(Файл, Контекст); - Иначе - Контекст.Вставить("Файл", Новый Файл); - Контекст.Файл.НачатьИнициализацию(Новый ОписаниеОповещения( - "ОбработатьФайлПослеИнициализацииФайла", ЭтотОбъект, Контекст, - "ОбработатьФайлПослеОшибки", ЭтотОбъект), Файл); - КонецЕсли; + Контекст.Вставить("Файл", ?(ТипЗнч(Файл) = Тип("Файл"), Файл, Новый Файл(Файл))); + Контекст.Результат.Вставить("Файл", Контекст.Файл); + ЗаполнитьЗначенияСвойств(Контекст.СвойстваДляПолучения, Файл); + Контекст.Файл.НачатьПроверкуСуществования(Новый ОписаниеОповещения( + "ОбработатьФайлПослеПроверкиСуществования", ЭтотОбъект, Контекст, + "ОбработатьФайлПослеОшибки", ЭтотОбъект)); КонецПроцедуры @@ -9984,19 +9913,6 @@ КонецПроцедуры -// Продолжение процедуры ОбработатьФайл. -Процедура ОбработатьФайлПослеИнициализацииФайла(Файл, Контекст) Экспорт - - Контекст.Вставить("Файл", Файл); - Контекст.Результат.Вставить("Файл", Файл); - ЗаполнитьЗначенияСвойств(Контекст.СвойстваДляПолучения, Файл); - - Контекст.Файл.НачатьПроверкуСуществования(Новый ОписаниеОповещения( - "ОбработатьФайлПослеПроверкиСуществования", ЭтотОбъект, Контекст, - "ОбработатьФайлПослеОшибки", ЭтотОбъект)); - -КонецПроцедуры - // Продолжение процедуры ОбработатьФайл. Процедура ОбработатьФайлПослеПроверкиСуществования(Существует, Контекст) Экспорт @@ -10594,7 +10510,7 @@ ПолученныеФайлы = Новый Массив; Если ПолучитьФайлы(ПолучаемыеФайлы, ПолученныеФайлы, , Ложь) Тогда - ПолноеИмяФайлаНаКлиенте = ПолученныеФайлы[0].Имя; + ПолноеИмяФайлаНаКлиенте = ПолученныеФайлы[0].ПолноеИмя; Файл = Новый Файл(ПолноеИмяФайлаНаКлиенте); Файл.УстановитьУниверсальноеВремяИзменения(ДатаМодификацииУниверсальная); Возврат Истина; diff --git a/SSL/src/CommonModules/РаботаСФайламиСлужебныйКлиентСервер/Module.bsl b/SSL/src/CommonModules/РаботаСФайламиСлужебныйКлиентСервер/Module.bsl index bc6a5052e..dec3e791b 100644 --- a/SSL/src/CommonModules/РаботаСФайламиСлужебныйКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайламиСлужебныйКлиентСервер/Module.bsl @@ -521,4 +521,49 @@ КонецФункции +// Инициализирует структуру параметров для добавления файла. +// Для использования в РаботаСФайлами.ДобавитьВФайл и РаботаСФайламиСлужебныйВызовСервера.ДобавитьФайл. +// +Функция ПараметрыДобавленияФайла(ДополнительныеРеквизиты = Неопределено) Экспорт + + Если ТипЗнч(ДополнительныеРеквизиты) = Тип("Структура") Тогда + РеквизитыФайла = Неопределено; + ПараметрыДобавления = ДополнительныеРеквизиты; + Иначе + + ПараметрыДобавления = Новый Структура; + РеквизитыФайла = ?(ТипЗнч(ДополнительныеРеквизиты) = Тип("Массив"), + ДополнительныеРеквизиты, + СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ДополнительныеРеквизиты, ",", Истина, Истина)); + + КонецЕсли; + + ДобавитьСвойство(ПараметрыДобавления, "Автор"); + ДобавитьСвойство(ПараметрыДобавления, "ВладелецФайлов"); + ДобавитьСвойство(ПараметрыДобавления, "ИмяБезРасширения", ""); + ДобавитьСвойство(ПараметрыДобавления, "РасширениеБезТочки", ""); + ДобавитьСвойство(ПараметрыДобавления, "ВремяИзмененияУниверсальное"); + ДобавитьСвойство(ПараметрыДобавления, "ГруппаФайлов"); + ДобавитьСвойство(ПараметрыДобавления, "Служебный", Ложь); + + Если РеквизитыФайла = Неопределено Тогда + Возврат ПараметрыДобавления; + КонецЕсли; + + Для Каждого ДополнительныйРеквизит Из РеквизитыФайла Цикл + ДобавитьСвойство(ПараметрыДобавления, ДополнительныйРеквизит); + КонецЦикла; + + Возврат ПараметрыДобавления; + +КонецФункции + +Процедура ДобавитьСвойство(Коллекция, Ключ, Значение = Неопределено) + + Если Не Коллекция.Свойство(Ключ) Тогда + Коллекция.Вставить(Ключ, Значение); + КонецЕсли; + +КонецПроцедуры + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/РаботаСФайламиСлужебныйПовтИсп/Module.bsl b/SSL/src/CommonModules/РаботаСФайламиСлужебныйПовтИсп/Module.bsl index b7c66d9d4..6cf4cc728 100644 --- a/SSL/src/CommonModules/РаботаСФайламиСлужебныйПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайламиСлужебныйПовтИсп/Module.bsl @@ -260,9 +260,9 @@ // // Параметры: // ПолноеИмяПланаОбмена - Строка - плана обмена, для которого требуется получить значение функции. -// +// // Возвращаемое значение: -// Истина - узел принадлежит плану обмена РИБ, иначе Ложь. +// Булево - Истина - узел принадлежит плану обмена РИБ, иначе Ложь. // Функция ЭтоУзелРаспределеннойИнформационнойБазы(ПолноеИмяПланаОбмена) Экспорт diff --git a/SSL/src/CommonModules/РассылкаОтчетов/Module.bsl b/SSL/src/CommonModules/РассылкаОтчетов/Module.bsl index b0e4f115b..9b1b7dc34 100644 --- a/SSL/src/CommonModules/РассылкаОтчетов/Module.bsl +++ b/SSL/src/CommonModules/РассылкаОтчетов/Module.bsl @@ -146,8 +146,7 @@ И Не ПараметрыДоставки.ИспользоватьСетевойКаталог И Не ПараметрыДоставки.ИспользоватьFTPРесурс И Не ПараметрыДоставки.ИспользоватьЭлектроннуюПочту Тогда - ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Предупреждение, - НСтр("ru = 'Не выбран способ доставки.'")); + ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Предупреждение, НСтр("ru = 'Не выбран способ доставки.'")); Возврат Ложь; КонецЕсли; @@ -187,43 +186,25 @@ ПараметрыДоставки.Вставить("ТолькоУведомить", Рассылка.ТолькоУведомить); ПараметрыДоставки.Вставить("СкрытыеКопии", Рассылка.СкрытыеКопии); ПараметрыДоставки.Вставить("ШаблонТемы", Рассылка.ТемаПисьма); - ПараметрыДоставки.Вставить("ШаблонТекста", - ?( - Рассылка.ПисьмоВФорматеHTML, - Рассылка.ТекстПисьмаВФорматеHTML, - Рассылка.ТекстПисьма)); + ПараметрыДоставки.Вставить("ШаблонТекста", ?(Рассылка.ПисьмоВФорматеHTML, Рассылка.ТекстПисьмаВФорматеHTML, Рассылка.ТекстПисьма)); // Получатели Если ДополнительныеНастройки <> Неопределено И ДополнительныеНастройки.Свойство("Получатели") Тогда - ПараметрыДоставки.Вставить("Получатели", ДополнительныеНастройки.Получатели); - Иначе - - Получатели = СформироватьСписокПолучателейРассылки(ПараметрыЖурнала, Рассылка); - + Получатели = СформироватьСписокПолучателейРассылки(Рассылка, ПараметрыЖурнала); Если Получатели.Количество() = 0 Тогда - ПараметрыДоставки.ИспользоватьЭлектроннуюПочту = Ложь; - Если Не ПараметрыДоставки.ИспользоватьПапку И Не ПараметрыДоставки.ИспользоватьСетевойКаталог И Не ПараметрыДоставки.ИспользоватьFTPРесурс Тогда - Возврат Ложь; - КонецЕсли; - КонецЕсли; - ПараметрыДоставки.Вставить("Получатели", Получатели); - КонецЕсли; - // Дополнительные параметры ПараметрыДоставки.Вставить("ПараметрыПисьма", Новый Структура); - - // Адрес ответа Если ЗначениеЗаполнено(Рассылка.АдресОтвета) Тогда ПараметрыДоставки.ПараметрыПисьма.Вставить("АдресОтвета", Рассылка.АдресОтвета); КонецЕсли; @@ -360,19 +341,25 @@ // Строка дерева общих (не персонализированных по получателям) отчетов. ПараметрыДоставки.Вставить("СтрокаОбщихОтчетов", ОпределитьСтрокуДереваДляПолучателя(ДеревоОтчетов, Неопределено, ПараметрыДоставки)); - ЗаписьЖурнала(ПараметрыЖурнала, , - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Инициализирована рассылка %1, автор: %2'"), - "'"+ Строка(НаименованиеРассылки) +"'","'"+ Строка(ПараметрыДоставки.Автор) +"'")); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Инициализирована рассылка ''%1'', автор: ''%2'''"), + НаименованиеРассылки, ПараметрыДоставки.Автор); + + ЗаписьЖурнала(ПараметрыЖурнала,, ТекстСообщения); // Формирование и сохранение отчетов. НомерОтчета = 1; Для Каждого СтрокаОтчет Из Отчеты Цикл - ТекстЖурнала = НСтр("ru = 'Отчет %1 формируется'"); + ТекстЖурнала = НСтр("ru = 'Отчет ''%1'' формируется'"); Если СтрокаОтчет.Настройки = Неопределено Тогда ТекстЖурнала = ТекстЖурнала + Символы.ПС + НСтр("ru = '(пользовательские настройки не заданы)'"); КонецЕсли; - ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Примечание, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстЖурнала, "'" + Строка(СтрокаОтчет.Отчет) + "'")); + + ПредставлениеОтчета = Строка(СтрокаОтчет.Отчет); + + ЗаписьЖурнала(ПараметрыЖурнала, + УровеньЖурналаРегистрации.Примечание, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстЖурнала, ПредставлениеОтчета)); // Инициализация отчета. ПараметрыОтчета = Новый Структура("Отчет, Настройки, Форматы, ОтправлятьЕслиПустой"); @@ -383,8 +370,9 @@ Если ПараметрыДоставки.Персонализирована И НЕ ПараметрыОтчета.Персонализирован Тогда ПараметрыОтчета.Ошибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Отчет ""%1"" не может сформирован, так как в его настройках не указан отбор по получателю рассылки.'"), - Строка(СтрокаОтчет.Отчет)); + НСтр("ru = 'Отчет ''%1'' не может сформирован, так как в его настройках не указан отбор по получателю рассылки.'"), + ПредставлениеОтчета); + ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Ошибка, ПараметрыОтчета.Ошибки); Продолжить; КонецЕсли; @@ -410,19 +398,27 @@ ПараметрыДоставки, Неопределено); КонецЕсли; - ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Примечание, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Отчет %1 успешно сформирован'"), "'"+ Строка(СтрокаОтчет.Отчет) +"'")); + + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Отчет ''%1'' успешно сформирован'"), ПредставлениеОтчета); + + ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Примечание, ТекстСообщения); + НомерОтчета = НомерОтчета + 1; Исключение - ЗаписьЖурнала(ПараметрыЖурнала, , - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Отчет %1 не сформирован:'"), "'"+ Строка(СтрокаОтчет.Отчет) +"'" ), ИнформацияОбОшибке()); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Отчет ''%1'' не сформирован:'"), ПредставлениеОтчета); + + ЗаписьЖурнала(ПараметрыЖурнала,, ТекстСообщения, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; КонецЦикла; // Проверка на количество сохраненных отчетов. Если ДеревоОтчетов.Строки.Найти(3, "Уровень", Истина) = Неопределено Тогда - ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Предупреждение, + ЗаписьЖурнала(ПараметрыЖурнала, + УровеньЖурналаРегистрации.Предупреждение, НСтр("ru = 'Рассылка отчетов не выполнена, так как отчеты пустые или не сформированы из-за ошибок.'")); + ФайловаяСистема.УдалитьВременныйКаталог(ПараметрыДоставки.КаталогВременныхФайлов); Возврат Ложь; КонецЕсли; @@ -453,20 +449,20 @@ // Архивация вложений. АрхивацияВложений(ВложенияПолучателя, ПараметрыДоставки, СтрокаПолучатель.Значение); + ПредставлениеПолучателя = Строка(СтрокаПолучатель.Ключ); + // Доставка. Попытка - ОтправитьОтчетыПолучателю( - ВложенияПолучателя, - ПараметрыДоставки, - СтрокаПолучатель); + ОтправитьОтчетыПолучателю(ВложенияПолучателя, ПараметрыДоставки, СтрокаПолучатель); РассылкаВыполнена = Истина; ПараметрыДоставки.ВыполненаПоЭлектроннойПочте = Истина; Исключение - ЗаписьЖурнала(ПараметрыЖурнала,, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не удалось отправить отчеты получателю %1:'"), "'"+ Строка(СтрокаПолучатель.Ключ) +"'"), ИнформацияОбОшибке()); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось отправить отчеты получателю ''%1'':'"), ПредставлениеПолучателя); + + ЗаписьЖурнала(ПараметрыЖурнала,, ТекстСообщения, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; - // Если РассылкаВыполнена Тогда ПараметрыДоставки.Получатели.Удалить(СтрокаПолучатель.Ключ); КонецЕсли; @@ -498,6 +494,7 @@ Если ПараметрыЖурнала.Свойство("БылиОшибки") Тогда ПараметрыДоставки.БылиОшибки = ПараметрыЖурнала.БылиОшибки; КонецЕсли; + Если ПараметрыЖурнала.Свойство("БылиПредупреждения") Тогда ПараметрыДоставки.БылиПредупреждения = ПараметрыЖурнала.БылиПредупреждения; КонецЕсли; @@ -823,13 +820,10 @@ //////////////////////////////////////////////////////////////////////////////// // Обработчики событий подсистем конфигурации. -// См. ОбновлениеИнформационнойБазыБСП.ПриДобавленииОбработчиковОбновления. -Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт +// См. ОбщегоНазначенияПереопределяемый.ПриДобавленииИсключенийПоискаСсылок. +Процедура ПриДобавленииИсключенийПоискаСсылок(ИсключенияПоискаСсылок) Экспорт - Обработчик = Обработчики.Добавить(); - Обработчик.НачальноеЗаполнение = Истина; - Обработчик.РежимВыполнения = "Оперативно"; - Обработчик.Процедура = "РассылкаОтчетов.ЗаполнитьНаименованиеПредопределенногоЭлементаЛичныеРассылки"; + ИсключенияПоискаСсылок.Добавить(Метаданные.Справочники.РассылкиОтчетов.Реквизиты.ТипПолучателейРассылки); КонецПроцедуры @@ -948,22 +942,17 @@ КонецПроцедуры +// См. ОбновлениеИнформационнойБазыПереопределяемый.ПриОпределенииНастроек +Процедура ПриОпределенииОбъектовСНачальнымЗаполнением(Объекты) Экспорт + + Объекты.Добавить(Метаданные.Справочники.РассылкиОтчетов); + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции -//////////////////////////////////////////////////////////////////////////////// -// Обновление информационной базы. - -// Вызывается при переходе на версию конфигурации 3.0.2.128 и при начальном заполнении. -Процедура ЗаполнитьНаименованиеПредопределенногоЭлементаЛичныеРассылки() Экспорт - - ЛичныеРассылки = Справочники.РассылкиОтчетов.ЛичныеРассылки.ПолучитьОбъект(); - ЛичныеРассылки.Наименование = НСтр("ru='Личные рассылки'"); - ОбновлениеИнформационнойБазы.ЗаписатьОбъект(ЛичныеРассылки); - -КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// // Выполнение регламентных заданий. @@ -1021,29 +1010,28 @@ // // Возвращаемое значение: // Структура - Результат получения списка получателей рассылки. -// * Получатели - Соответствие - Получатели. См. ВыполнитьРассылку(), описание к "ПараметрыДоставки.Получатели". +// * Получатели - Соответствие - Получатели. См. РассылкаОтчетов.ВыполнитьРассылку, описание к ПараметрыДоставки.Получатели. // * Ошибки - Строка - Ошибки, которые возникли в процессе. // -Функция СформироватьСписокПолучателейРассылки(ПараметрыЖурнала, Рассылка) Экспорт +Функция СформироватьСписокПолучателейРассылки(Рассылка, ПараметрыЖурнала = Неопределено) Экспорт - ВидКИ = Рассылка.ВидПочтовогоАдресаПолучателей; + ВидПочтовогоАдресаПолучателей = Рассылка.ВидПочтовогоАдресаПолучателей; Если Рассылка.Личная Тогда - РеквизитыТЧ = Метаданные.Справочники.РассылкиОтчетов.ТабличныеЧасти.Получатели.Реквизиты; - ТипПолучателей = ТипЗнч(Рассылка.Автор); + ПолучателиМетаданные = Метаданные.НайтиПоТипу(ТипПолучателей); + ТаблицаПолучателей = Новый ТаблицаЗначений; - Для Каждого Реквизит Из РеквизитыТЧ Цикл + Для Каждого Реквизит Из Метаданные.Справочники.РассылкиОтчетов.ТабличныеЧасти.Получатели.Реквизиты Цикл ТаблицаПолучателей.Колонки.Добавить(Реквизит.Имя, Реквизит.Тип); КонецЦикла; ТаблицаПолучателей.Добавить().Получатель = Рассылка.Автор; Иначе - + ПолучателиМетаданные = ОбщегоНазначения.ОбъектМетаданныхПоИдентификатору(Рассылка.ТипПолучателейРассылки, Ложь); ТипПолучателей = Рассылка.ТипПолучателейРассылки.КлючОбъектаМетаданных.Получить(); ТаблицаПолучателей = Рассылка.Получатели.Выгрузить(); - КонецЕсли; СписокПолучателей = Новый Соответствие; @@ -1083,14 +1071,14 @@ |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ | втПолучатели.Пользователь КАК Получатель, - | тчКонтактнаяИнформация.Представление КАК EMail + | КонтактнаяИнформацияПользователя.Представление КАК EMail |ИЗ | втПолучатели КАК втПолучатели - | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Пользователи.КонтактнаяИнформация КАК тчКонтактнаяИнформация - | ПО втПолучатели.Пользователь = тчКонтактнаяИнформация.Ссылка + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Пользователи.КонтактнаяИнформация КАК КонтактнаяИнформацияПользователя + | ПО втПолучатели.Пользователь = КонтактнаяИнформацияПользователя.Ссылка |ГДЕ | втПолучатели.Исключен = ЛОЖЬ - | И тчКонтактнаяИнформация.Вид = &ВидКИ"; + | И КонтактнаяИнформацияПользователя.Вид = &ВидПочтовогоАдресаПолучателей"; Иначе @@ -1105,62 +1093,58 @@ | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ - | СпрПолучателей.Ссылка КАК Получатель, - | тчКонтактнаяИнформация.Представление КАК EMail + | ПолучателиРассылки.Ссылка КАК Получатель, + | КонтактнаяИнформацияПолучателя.Представление КАК EMail |ИЗ - | Справочник.Пользователи КАК СпрПолучателей - | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Пользователи.КонтактнаяИнформация КАК тчКонтактнаяИнформация - | ПО (тчКонтактнаяИнформация.Ссылка = СпрПолучателей.Ссылка) - | И (тчКонтактнаяИнформация.Вид = &ВидКИ) + | Справочник.Пользователи КАК ПолучателиРассылки + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Пользователи.КонтактнаяИнформация КАК КонтактнаяИнформацияПолучателя + | ПО (КонтактнаяИнформацияПолучателя.Ссылка = ПолучателиРассылки.Ссылка) + | И (КонтактнаяИнформацияПолучателя.Вид = &ВидПочтовогоАдресаПолучателей) |ГДЕ - | СпрПолучателей.Ссылка В ИЕРАРХИИ + | ПолучателиРассылки.Ссылка В ИЕРАРХИИ | (ВЫБРАТЬ | Получатели.Получатель | ИЗ | втТаблицаПолучателей КАК Получатели | ГДЕ | Получатели.Исключен = ЛОЖЬ) - | И (НЕ СпрПолучателей.Ссылка В ИЕРАРХИИ + | И (НЕ ПолучателиРассылки.Ссылка В ИЕРАРХИИ | (ВЫБРАТЬ | ИсключенияПолучателей.Получатель | ИЗ | втТаблицаПолучателей КАК ИсключенияПолучателей | ГДЕ | ИсключенияПолучателей.Исключен = ИСТИНА)) - | И СпрПолучателей.ПометкаУдаления = ЛОЖЬ + | И ПолучателиРассылки.ПометкаУдаления = ЛОЖЬ | И &ЭтоНеГруппа"; - УстановитьПривилегированныйРежим(Истина); - ПолучателиМД = Метаданные.НайтиПоТипу(ТипПолучателей); - УстановитьПривилегированныйРежим(Ложь); - - Если Не ПолучателиМД.Иерархический Тогда + Если Не ПолучателиМетаданные.Иерархический Тогда // Не иерархический ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "В ИЕРАРХИИ", "В"); ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "И &ЭтоНеГруппа", ""); - ИначеЕсли ПолучателиМД.ВидИерархии = Метаданные.СвойстваОбъектов.ВидИерархии.ИерархияЭлементов Тогда + ИначеЕсли ПолучателиМетаданные.ВидИерархии = Метаданные.СвойстваОбъектов.ВидИерархии.ИерархияЭлементов Тогда // Иерархия элементов ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "И &ЭтоНеГруппа", ""); Иначе // Иерархия групп - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "И &ЭтоНеГруппа", "И СпрПолучателей.ЭтоГруппа = ЛОЖЬ"); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "И &ЭтоНеГруппа", "И ПолучателиРассылки.ЭтоГруппа = ЛОЖЬ"); КонецЕсли; - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "Справочник.Пользователи", ПолучателиМД.ПолноеИмя()); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "Справочник.Пользователи", ПолучателиМетаданные.ПолноеИмя()); КонецЕсли; Запрос.УстановитьПараметр("ТаблицаПолучателей", ТаблицаПолучателей); - Если ЗначениеЗаполнено(ВидКИ) Тогда - Запрос.УстановитьПараметр("ВидКИ", ВидКИ); + Если ЗначениеЗаполнено(ВидПочтовогоАдресаПолучателей) Тогда + Запрос.УстановитьПараметр("ВидПочтовогоАдресаПолучателей", ВидПочтовогоАдресаПолучателей); Иначе - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, ".Вид = &ВидКИ", ".Тип = &ТипКИ"); - Запрос.УстановитьПараметр("ТипКИ", Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, ".Вид = &ВидПочтовогоАдресаПолучателей", ".Тип = &ТипПочтовогоАдреса"); + Запрос.УстановитьПараметр("ТипПочтовогоАдреса", Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты); КонецЕсли; Запрос.Текст = ТекстЗапроса; ТекстСообщенияОбОшибкеДляЖурналаРегистрации = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'При формировании списка получателей ""%1"" возникла ошибка:'"), Строка(ТипПолучателей)); + НСтр("ru = 'Не удалось сформировать список получателей ""%1"" по причине:'"), Строка(ТипПолучателей)); // Механизм расширения Попытка @@ -1176,40 +1160,33 @@ // Стандартная обработка Попытка - ТЗИтог = Запрос.Выполнить().Выгрузить(); + ПолучателиРассылки = Запрос.Выполнить().Выгрузить(); Исключение ЗаписьЖурнала(ПараметрыЖурнала,, ТекстСообщенияОбОшибкеДляЖурналаРегистрации, ИнформацияОбОшибке()); Возврат СписокПолучателей; КонецПопытки; - Для Каждого СтрИтог Из ТЗИтог Цикл - Если Не ЗначениеЗаполнено(СтрИтог.EMail) Тогда + Для Каждого ПолучательРассылки Из ПолучателиРассылки Цикл + Если Не ЗначениеЗаполнено(ПолучательРассылки.EMail) Тогда Продолжить; КонецЕсли; - ТекущийАдрес = СписокПолучателей.Получить(СтрИтог.Получатель); - Если ТекущийАдрес = Неопределено Тогда - ТекущийАдрес = ""; - Иначе - ТекущийАдрес = ТекущийАдрес +"; "; - КонецЕсли; - ТекущийАдрес = ТекущийАдрес + СтрИтог.EMail; - СписокПолучателей.Вставить(СтрИтог.Получатель, ТекущийАдрес); + ТекущийАдрес = СписокПолучателей.Получить(ПолучательРассылки.Получатель); + ТекущийАдрес = ?(ТекущийАдрес = Неопределено, "", ТекущийАдрес + "; "); + СписокПолучателей[ПолучательРассылки.Получатель] = ТекущийАдрес + ПолучательРассылки.EMail; КонецЦикла; Если СписокПолучателей.Количество() = 0 Тогда - ТекстОшибок = НСтр("ru = 'Не удалось сформировать список получателей %1 рассылки %2 по одной из возможных причин: - | - У получателей не заполнен почтовый адрес %3; - | - Не заполнен список получателей; + ТекстОшибок = НСтр("ru = 'Не удалось сформировать список получателей ""%1"" по одной из возможных причин: + | - У получателей не заполнен адрес электронной почты ""%2""; + | - Не заполнен список получателей или получатели помечены на удаление; | - Выбраны пустые группы получателей; - | - Получатели помечены на удаление; | - Исключены все получатели (исключение имеет наивысший приоритет; участники исключенных групп также исключаются из списка); - | - Недостаточно прав доступа к справочнику; - | - Рекомендуется проверить корректность настройки учетной записи электронной почты, от имени которой выполняется рассылка.'"); + | - Недостаточно прав доступа к справочнику ""%1"".'"); ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Ошибка, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибок, "'"+ Строка(ТипПолучателей) +"'", - "'"+ Строка(ПараметрыЖурнала.Данные) +"'", "'"+ Строка(ВидКИ) +"'"), ""); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибок, Строка(ТипПолучателей), + Строка(ВидПочтовогоАдресаПолучателей)), ""); КонецЕсли; Возврат СписокПолучателей; @@ -1652,6 +1629,10 @@ // Процедура ЗаписьЖурнала(ПараметрыЖурнала, Знач УровеньЖурнала = Неопределено, Знач Текст = "", Знач ОписаниеПроблемы = Неопределено) Экспорт + Если ПараметрыЖурнала = Неопределено Тогда + Возврат; + КонецЕсли; + // Определение уровня журнала регистрации на основе типа переданного сообщения об ошибке. Если ТипЗнч(УровеньЖурнала) <> Тип("УровеньЖурналаРегистрации") Тогда Если ТипЗнч(ОписаниеПроблемы) = Тип("ИнформацияОбОшибке") Тогда @@ -1663,41 +1644,37 @@ КонецЕсли; КонецЕсли; + Если УровеньЖурнала = УровеньЖурналаРегистрации.Ошибка Тогда + ПараметрыЖурнала.Вставить("БылиОшибки", Истина); + ИначеЕсли УровеньЖурнала = УровеньЖурналаРегистрации.Предупреждение Тогда + ПараметрыЖурнала.Вставить("БылиПредупреждения", Истина); + КонецЕсли; + ЗаписатьВЖурнал = ЗначениеЗаполнено(ПараметрыЖурнала.Данные); ТекстДляЖурнала = Текст; ТекстДляПользователя = Текст; Если ТипЗнч(ОписаниеПроблемы) = Тип("ИнформацияОбОшибке") Тогда - ТекстДляЖурнала = ТекстДляЖурнала + Символы.ПС + ПодробноеПредставлениеОшибки(ОписаниеПроблемы); + Если ЗаписатьВЖурнал Тогда + ТекстДляЖурнала = ТекстДляЖурнала + Символы.ПС + ПодробноеПредставлениеОшибки(ОписаниеПроблемы); + КонецЕсли; ТекстДляПользователя = ТекстДляПользователя + Символы.ПС + КраткоеПредставлениеОшибки(ОписаниеПроблемы); ИначеЕсли ТипЗнч(ОписаниеПроблемы) = Тип("Строка") Тогда - ТекстДляЖурнала = ТекстДляЖурнала + Символы.ПС + ОписаниеПроблемы; + Если ЗаписатьВЖурнал Тогда + ТекстДляЖурнала = ТекстДляЖурнала + Символы.ПС + ОписаниеПроблемы; + КонецЕсли; ТекстДляПользователя = ТекстДляПользователя + Символы.ПС + ОписаниеПроблемы; КонецЕсли; - ТекстДляЖурнала = СокрЛП(ТекстДляЖурнала); - ТекстДляПользователя = СокрЛП(ТекстДляПользователя); // Журнал регистрации. Если ЗаписатьВЖурнал Тогда - УстановитьПривилегированныйРежим(Истина); - ЗаписьЖурналаРегистрации( - ПараметрыЖурнала.ИмяСобытия, - УровеньЖурнала, - ПараметрыЖурнала.Метаданные, - ПараметрыЖурнала.Данные, - ТекстДляЖурнала); - УстановитьПривилегированныйРежим(Ложь); + ЗаписьЖурналаРегистрации(ПараметрыЖурнала.ИмяСобытия, УровеньЖурнала, ПараметрыЖурнала.Метаданные, + ПараметрыЖурнала.Данные, СокрЛП(ТекстДляЖурнала)); КонецЕсли; // Сообщение пользователю. - УровеньОшибка = УровеньЖурнала = УровеньЖурналаРегистрации.Ошибка; - УровеньПредупреждение = Не УровеньОшибка И УровеньЖурнала = УровеньЖурналаРегистрации.Предупреждение; - Если УровеньОшибка Или УровеньПредупреждение Тогда - Если УровеньОшибка Тогда - ПараметрыЖурнала.Вставить("БылиОшибки", Истина); - Иначе - ПараметрыЖурнала.Вставить("БылиПредупреждения", Истина); - КонецЕсли; + ТекстДляПользователя = СокрЛП(ТекстДляПользователя); + Если (УровеньЖурнала = УровеньЖурналаРегистрации.Ошибка) Или (УровеньЖурнала = УровеньЖурналаРегистрации.Предупреждение) Тогда Сообщение = Новый СообщениеПользователю; Сообщение.Текст = ТекстДляПользователя; Сообщение.УстановитьДанные(ПараметрыЖурнала.Данные); @@ -1859,11 +1836,11 @@ // Сохранение отчета встроенными средствами подсистемы. Если СтандартнаяОбработка = Истина Тогда - ЗаголовокОшибки = НСтр("ru = 'Ошибка записи отчета %1 в формат %2:'"); + ЗаголовокОшибки = НСтр("ru = 'Ошибка записи отчета ''%1'' в формат ''%2'':'"); Если ПараметрыФормата.ТипФайла = Неопределено Тогда ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Ошибка, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ЗаголовокОшибки, "'"+ СтрокаОтчет.Ключ +"'", "'"+ ПараметрыФормата.Имя +"'"), + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ЗаголовокОшибки, СтрокаОтчет.Ключ, ПараметрыФормата.Имя), НСтр("ru = 'Формат не поддерживается'")); Продолжить; КонецЕсли; @@ -1872,7 +1849,7 @@ СтрокаОтчет.Значение.Записать(ПолноеИмяФайла, ПараметрыФормата.ТипФайла); Исключение ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Ошибка, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ЗаголовокОшибки, "'"+ СтрокаОтчет.Ключ +"'", "'"+ ПараметрыФормата.Имя +"'"), + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ЗаголовокОшибки, СтрокаОтчет.Ключ, ПараметрыФормата.Имя), ИнформацияОбОшибке()); Продолжить; КонецПопытки; @@ -1882,10 +1859,8 @@ ВременныйФайл = Новый Файл(ПолноеИмяФайла); Если Не ВременныйФайл.Существует() Тогда ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Ошибка, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ЗаголовокОшибки + Символы.ПС + НСтр("ru = 'Файл %3 не найден.'"), - "'"+ СтрокаОтчет.Ключ +"'", - "'"+ ПараметрыФормата.Имя +"'", - "'"+ ВременныйФайл.ПолноеИмя +"'")); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ЗаголовокОшибки + Символы.ПС + НСтр("ru = 'Файл ''%3'' не существует.'"), + СтрокаОтчет.Ключ, ПараметрыФормата.Имя, ВременныйФайл.ПолноеИмя)); Продолжить; КонецЕсли; @@ -2331,6 +2306,7 @@ // Доставка всем получателям Если ПараметрыДоставки.ЗаполнитьПолучателяВШаблонеТемы Или ПараметрыДоставки.ЗаполнитьПолучателяВШаблонеСообщения Тогда // Шаблоны персонализированы - доставка каждому получателю. + Письма = Новый Массив; Для Каждого КлючИЗначение Из ПараметрыДоставки.Получатели Цикл // Тема и тело сообщения Если ПараметрыДоставки.ЗаполнитьПолучателяВШаблонеТемы Тогда @@ -2344,8 +2320,9 @@ ПараметрыПисьма.Вставить(КлючАдресаДоставки, КлючИЗначение.Значение); // Отправляем письмо - ОтправитьПочтовоеСообщение(ПараметрыДоставки, ПараметрыПисьма); + Письма.Добавить(ПодготовитьПисьмо(ПараметрыДоставки, ПараметрыПисьма)); КонецЦикла; + РаботаСПочтовымиСообщениями.ОтправитьПисьма(ПараметрыДоставки.УчетнаяЗапись, Письма); Иначе // Шаблоны не персонализированы - склеивание E-Mail адресов получателей и совместная доставка. Кому = ""; @@ -2379,17 +2356,25 @@ КонецПроцедуры Процедура ОтправитьПочтовоеСообщение(ПараметрыДоставки, ПараметрыПисьма) + + Письмо = ПодготовитьПисьмо(ПараметрыДоставки, ПараметрыПисьма); + РаботаСПочтовымиСообщениями.ОтправитьПисьмо(ПараметрыДоставки.УчетнаяЗапись, Письмо); + +КонецПроцедуры + +Функция ПодготовитьПисьмо(ПараметрыДоставки, ПараметрыПисьма) + Если ПараметрыПисьма.Свойство("Картинки") - И ПараметрыПисьма.Картинки <> Неопределено - И ПараметрыПисьма.Картинки.Количество() > 0 Тогда + И ПараметрыПисьма.Картинки <> Неопределено + И ПараметрыПисьма.Картинки.Количество() > 0 Тогда ФорматированныйДокумент = Новый ФорматированныйДокумент; ФорматированныйДокумент.УстановитьHTML(ПараметрыПисьма.Тело, ПараметрыПисьма.Картинки); ПараметрыПисьма.Тело = ФорматированныйДокумент; КонецЕсли; - РаботаСПочтовымиСообщениями.ОтправитьПочтовоеСообщение( - ПараметрыДоставки.УчетнаяЗапись, ПараметрыПисьма, ПараметрыДоставки.Соединение); -КонецПроцедуры + Возврат РаботаСПочтовымиСообщениями.ПодготовитьПисьмо(ПараметрыДоставки.УчетнаяЗапись, ПараметрыПисьма); + +КонецФункции // Преобразует коллекцию в соответствие. Функция ПреобразоватьВСоответствие(Коллекция, ИмяКлюча, ИмяЗначения) @@ -2484,8 +2469,8 @@ // Параметры: // Формат - ПеречислениеСсылка.ФорматыСохраненияОтчетов - Формат, для которого необходимо получить параметры. // -// Возвращаемое значение: -// Результат - Структура - Параметры записи. +// Возвращаемое значение: +// Структура - Результат - Структура - Параметры записи. // * Расширение - Строка - Расширение, с которым можно сохранить файл. // * ТипФайла - ТипФайлаТабличногоДокумента - Формат сохранения табличного документа. // Используется для определения параметра <ТипФайлаТаблицы> метода "ТабличныйДокумент.Записать". @@ -2549,8 +2534,8 @@ // Параметры: // ИсходноеИмяФайла - Строка - Имя файла, из которого следует удалить недопустимые символы. // -// Возвращаемое значение: -// Результат - Строка - Результат преобразования. +// Возвращаемое значение: +// Строка - Результат - Строка - Результат преобразования. // Функция ПривестиИмяФайла(ИсходноеИмяФайла, ТранслитерироватьИменаФайлов) @@ -2583,7 +2568,7 @@ КонецЦикла; Если ТранслитерироватьИменаФайлов Тогда - Результат = СтроковыеФункцииКлиентСервер.СтрокаЛатиницей(Результат); + Результат = СтроковыеФункции.СтрокаЛатиницей(Результат); КонецЕсли; Возврат Результат; @@ -2621,25 +2606,25 @@ ПравоВывода = ПравоДоступа("Вывод", Метаданные); Если Не ПравоВывода Тогда ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Ошибка, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'У пользователя %1 недостаточно прав на вывод информации'"), - "'"+ Строка(Пользователи.ТекущийПользователь()) +"'")); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'У пользователя ''%1'' недостаточно прав на вывод информации'"), + Пользователи.ТекущийПользователь())); КонецЕсли; Возврат ПравоВывода; КонецФункции // Преобразует массив сообщений пользователю в одну строку. -Функция СтрокаСообщенийПользователю(МассивОшибок = Неопределено, ДобавитьДежурнуюФразу = Истина) Экспорт - Если МассивОшибок = Неопределено Тогда - МассивОшибок = ПолучитьСообщенияПользователю(Истина); +Функция СтрокаСообщенийПользователю(Ошибки = Неопределено, СмЖурналРегистрации = Истина) Экспорт + Если Ошибки = Неопределено Тогда + Ошибки = ПолучитьСообщенияПользователю(Истина); КонецЕсли; Отступ = Символы.ПС + Символы.ПС; ВсеОшибки = ""; - Для Каждого Ошибка Из МассивОшибок Цикл + Для Каждого Ошибка Из Ошибки Цикл ВсеОшибки = СокрЛП(ВсеОшибки + Отступ + ?(ТипЗнч(Ошибка) = Тип("Строка"), Ошибка, Ошибка.Текст)); КонецЦикла; - Если ВсеОшибки <> "" И ДобавитьДежурнуюФразу Тогда + Если ВсеОшибки <> "" И СмЖурналРегистрации Тогда ВсеОшибки = ВсеОшибки + Отступ + "---" + Отступ + НСтр("ru = 'Подробности см. в журнале регистрации.'"); КонецЕсли; @@ -2883,4 +2868,32 @@ КонецФункции +Процедура ОтключитьРассылкиПередУдалениемТипаПолучателейРассылки(Источник, Отказ) Экспорт + + Если Источник.ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | РассылкиОтчетов.Ссылка КАК Ссылка + |ИЗ + | Справочник.РассылкиОтчетов КАК РассылкиОтчетов + |ГДЕ + | РассылкиОтчетов.ТипПолучателейРассылки = &ТипПолучателейРассылки"; + Запрос.УстановитьПараметр("ТипПолучателейРассылки", Источник.Ссылка); + Записи = Запрос.Выполнить().Выбрать(); + Пока Записи.Следующий() Цикл + РассылкаОбъект = Записи.Ссылка.ПолучитьОбъект(); + Если РассылкаОбъект = Неопределено Тогда + Продолжить; + КонецЕсли; + РассылкаОбъект.ТипПолучателейРассылки = Справочники.ИдентификаторыОбъектовМетаданных.ПустаяСсылка(); + РассылкаОбъект.Подготовлена = Ложь; + ОбновлениеИнформационнойБазы.ЗаписатьДанные(РассылкаОбъект); + КонецЦикла; + +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/CommonModules/РассылкаОтчетовВызовСервера/Module.bsl b/SSL/src/CommonModules/РассылкаОтчетовВызовСервера/Module.bsl index 38c148c37..8ed84ad9e 100644 --- a/SSL/src/CommonModules/РассылкаОтчетовВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/РассылкаОтчетовВызовСервера/Module.bsl @@ -9,21 +9,20 @@ #Область СлужебныеПроцедурыИФункции // Для внутреннего использования. -Функция СформироватьСписокПолучателейРассылки(Знач Параметры) Экспорт +Функция СформироватьСписокПолучателейРассылки(Знач ПараметрыПолучателей) Экспорт ПараметрыЖурнала = Новый Структура("ИмяСобытия, Метаданные, Данные, МассивОшибок, БылиОшибки"); ПараметрыЖурнала.ИмяСобытия = НСтр("ru = 'Рассылка отчетов. Формирование списка получателей'", ОбщегоНазначения.КодОсновногоЯзыка()); ПараметрыЖурнала.МассивОшибок = Новый Массив; ПараметрыЖурнала.БылиОшибки = Ложь; - ПараметрыЖурнала.Данные = Параметры.Ссылка; + ПараметрыЖурнала.Данные = ПараметрыПолучателей.Ссылка; ПараметрыЖурнала.Метаданные = Метаданные.Справочники.РассылкиОтчетов; РезультатВыполнения = Новый Структура("Получатели, БылиКритичныеОшибки, Текст, Подробно"); - РезультатВыполнения.Получатели = РассылкаОтчетов.СформироватьСписокПолучателейРассылки(ПараметрыЖурнала, Параметры); + РезультатВыполнения.Получатели = РассылкаОтчетов.СформироватьСписокПолучателейРассылки(ПараметрыПолучателей, ПараметрыЖурнала); РезультатВыполнения.БылиКритичныеОшибки = РезультатВыполнения.Получатели.Количество() = 0; Если РезультатВыполнения.БылиКритичныеОшибки Тогда - РезультатВыполнения.Текст = НСтр("ru = 'Не удалось сформировать список получателей'"); - РезультатВыполнения.Подробно = РассылкаОтчетов.СтрокаСообщенийПользователю(ПараметрыЖурнала.МассивОшибок, Ложь); + РезультатВыполнения.Текст = РассылкаОтчетов.СтрокаСообщенийПользователю(ПараметрыЖурнала.МассивОшибок, Ложь); КонецЕсли; Возврат РезультатВыполнения; diff --git a/SSL/src/CommonModules/РассылкаОтчетовКлиент/Module.bsl b/SSL/src/CommonModules/РассылкаОтчетовКлиент/Module.bsl index 42e8ac2e6..5fefea2d0 100644 --- a/SSL/src/CommonModules/РассылкаОтчетовКлиент/Module.bsl +++ b/SSL/src/CommonModules/РассылкаОтчетовКлиент/Module.bsl @@ -105,10 +105,11 @@ РезультатВыполнения = РассылкаОтчетовВызовСервера.СформироватьСписокПолучателейРассылки(ПараметрыПолучателей); Если РезультатВыполнения.БылиКритичныеОшибки Тогда - ПараметрыВопросаПользователю = СтандартныеПодсистемыКлиент.ПараметрыВопросаПользователю(); + ПараметрыВопросаПользователю = СтандартныеПодсистемыКлиент.ПараметрыВопросаПользователю(); ПараметрыВопросаПользователю.ПредлагатьБольшеНеЗадаватьЭтотВопрос = Ложь; - ПараметрыВопросаПользователю.Картинка = БиблиотекаКартинок.Предупреждение32; - СтандартныеПодсистемыКлиент.ПоказатьВопросПользователю(Неопределено, РезультатВыполнения.Подробно, РежимДиалогаВопрос.ОК, ПараметрыВопросаПользователю); + ПараметрыВопросаПользователю.Картинка = БиблиотекаКартинок.Предупреждение32; + СтандартныеПодсистемыКлиент.ПоказатьВопросПользователю(Неопределено, РезультатВыполнения.Текст, + РежимДиалогаВопрос.ОК, ПараметрыВопросаПользователю); Возврат; КонецЕсли; @@ -290,8 +291,8 @@ // Параметры: // FTPАдрес - Строка - Полный путь к ftp ресурсу. // -// Возвращаемое значение: -// Результат - Структура - Результат разбора полного пути. +// Возвращаемое значение: +// Структура - Результат - Структура - Результат разбора полного пути. // * Логин - Строка - Имя пользователя ftp. // * Пароль - Строка - Пароль пользователя ftp. // * Сервер - Строка - Имя сервера. diff --git a/SSL/src/CommonModules/РегламентныеЗаданияСервер/Module.bsl b/SSL/src/CommonModules/РегламентныеЗаданияСервер/Module.bsl index f634816f1..48169e131 100644 --- a/SSL/src/CommonModules/РегламентныеЗаданияСервер/Module.bsl +++ b/SSL/src/CommonModules/РегламентныеЗаданияСервер/Module.bsl @@ -926,6 +926,37 @@ КонецПроцедуры +// Отменяет выполнение фоновых заданий для регламентного задания +// и делает запись в журнал регистрации. +// +Процедура ОтменитьВыполнениеЗадания(Знач РегламентноеЗадание, ТекстДляЖурнала) Экспорт + + ТекущийСеанс = ПолучитьТекущийСеансИнформационнойБазы().ПолучитьФоновоеЗадание(); + + Если РегламентноеЗадание = Неопределено Тогда + Для Каждого Задание Из Метаданные.РегламентныеЗадания Цикл + Если Задание.ИмяМетода = ТекущийСеанс.ИмяМетода Тогда + РегламентноеЗадание = Задание; + Прервать; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + Если РегламентноеЗадание = Неопределено Тогда + Возврат; + КонецЕсли; + + ИмяСобытия = НСтр("ru = 'Отмена фонового задания'", ОбщегоНазначения.КодОсновногоЯзыка()); + + ЗаписьЖурналаРегистрации(ИмяСобытия, + УровеньЖурналаРегистрации.Предупреждение, + РегламентноеЗадание, + , + ТекстДляЖурнала); + + ТекущийСеанс.Отменить(); + +КонецПроцедуры #КонецОбласти diff --git a/SSL/src/CommonModules/РегламентныеЗаданияСлужебный/Module.bsl b/SSL/src/CommonModules/РегламентныеЗаданияСлужебный/Module.bsl index 7d07d0a0f..bbd487d71 100644 --- a/SSL/src/CommonModules/РегламентныеЗаданияСлужебный/Module.bsl +++ b/SSL/src/CommonModules/РегламентныеЗаданияСлужебный/Module.bsl @@ -526,7 +526,7 @@ // Задание - РегламентноеЗадание, Строка - если строка, тогда УникальныйИдентификатор строкой. // // Возвращаемое значение: -// Строка. +// Строка - . // Функция ПредставлениеРегламентногоЗадания(Знач Задание) Экспорт @@ -573,7 +573,7 @@ // РегламентногоЗадания строкой. // // Возвращаемое значение: -// Строка. +// Строка - . // Функция СообщенияИОписанияОшибокРегламентногоЗадания(Знач Задание) Экспорт @@ -831,7 +831,7 @@ // РегламентноеЗадание - РегламентноеЗадание, Строка - строка уникального идентификатора РегламентногоЗадания. // // Возвращаемое значение: -// СтрокаТаблицыЗначений, Неопределено. +// СтрокаТаблицыЗначений - , Неопределено. // Функция СвойстваПоследнегоФоновогоЗаданияВыполненияРегламентногоЗадания(РегламентноеЗадание) @@ -864,7 +864,7 @@ // Задание - Строка - УникальныйИдентификатор ФоновогоЗадания строкой. // // Возвращаемое значение: -// Строка. +// Строка - . // Функция СообщенияИОписанияОшибокФоновогоЗадания(Идентификатор, СвойстваФоновогоЗадания = Неопределено) Экспорт @@ -1005,7 +1005,7 @@ // Возвращает новую таблицу свойств фоновых заданий. // // Возвращаемое значение: -// ТаблицаЗначений. +// ТаблицаЗначений - . // Функция НовыеСвойстваФоновыхЗаданий() diff --git a/SSL/src/CommonModules/РезервноеКопированиеИБВызовСервера/Module.bsl b/SSL/src/CommonModules/РезервноеКопированиеИБВызовСервера/Module.bsl index a6fb18b42..8c75dd26c 100644 --- a/SSL/src/CommonModules/РезервноеКопированиеИБВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/РезервноеКопированиеИБВызовСервера/Module.bsl @@ -8,26 +8,14 @@ #Область СлужебныеПроцедурыИФункции -// Устанавливает настройку в параметры резервного копирования. -// -// Параметры: -// ИмяЭлемента - Строка - имя параметра. -// ЗначениеЭлемента - Произвольный тип - значение параметра. -// Процедура УстановитьЗначениеНастройки(ИмяЭлемента, ЗначениеЭлемента) Экспорт РезервноеКопированиеИБСервер.УстановитьЗначениеНастройки(ИмяЭлемента, ЗначениеЭлемента); КонецПроцедуры -// Формирует значение ближайшего следующего автоматического резервного копирования в соответствии с расписанием. -// -// Параметры: -// НачальнаяНастройка - Булево - признак начальной настройки. -// Функция ДатаСледующегоАвтоматическогоКопирования(ОтложитьРезервноеКопирование = Ложь) Экспорт - Результат = Новый Структура; Настройки = РезервноеКопированиеИБСервер.НастройкиРезервногоКопирования(); ТекущаяДата = ТекущаяДатаСеанса(); @@ -45,21 +33,13 @@ Иначе Значение = НачалоДня(КонецДня(ТекущаяДата) + 1); КонецЕсли; - Результат.Вставить("МинимальнаяДатаСледующегоАвтоматическогоРезервногоКопирования", Значение); - - ЗаполнитьЗначенияСвойств(Настройки, Результат); + Настройки.МинимальнаяДатаСледующегоАвтоматическогоРезервногоКопирования = Значение; РезервноеКопированиеИБСервер.УстановитьНастройкиРезервногоКопирования(Настройки); - Возврат Результат; + Возврат Значение; КонецФункции -// Устанавливает дату последнего оповещения пользователя. -// -// Параметры: -// ДатаНапоминания - Дата - дата и время последнего оповещения пользователя о необходимости проведения резервного -// копирования. -// Процедура УстановитьДатуПоследнегоНапоминания(ДатаНапоминания) Экспорт РезервноеКопированиеИБСервер.УстановитьДатуПоследнегоНапоминания(ДатаНапоминания); diff --git a/SSL/src/CommonModules/СклонениеПредставленийОбъектов/Module.bsl b/SSL/src/CommonModules/СклонениеПредставленийОбъектов/Module.bsl index 4f20ed805..edbba985a 100644 --- a/SSL/src/CommonModules/СклонениеПредставленийОбъектов/Module.bsl +++ b/SSL/src/CommonModules/СклонениеПредставленийОбъектов/Module.bsl @@ -528,7 +528,7 @@ Запрос = Новый Запрос; Запрос.УстановитьПараметр("ХешПредставления", ОбщегоНазначения.КонтрольнаяСуммаСтрокой(Представление)); Запрос.УстановитьПараметр("Объект", Объект); - Запрос.УстановитьПараметр("ИспользуетсяОтборПоОбъекту", ЗначениеЗаполнено(Объект)); + Запрос.УстановитьПараметр("ИспользуетсяОтборПоОбъекту", Объект <> Неопределено); Запрос.Текст = "ВЫБРАТЬ | КОЛИЧЕСТВО(ВЫРАЗИТЬ(СклоненияПредставленийОбъектов.ИменительныйПадеж КАК СТРОКА(255))) КАК КоличествоНаборовСклонений, diff --git a/SSL/src/CommonModules/СклонениеПредставленийОбъектовКлиент/Module.bsl b/SSL/src/CommonModules/СклонениеПредставленийОбъектовКлиент/Module.bsl index d3077a167..f13090341 100644 --- a/SSL/src/CommonModules/СклонениеПредставленийОбъектовКлиент/Module.bsl +++ b/SSL/src/CommonModules/СклонениеПредставленийОбъектовКлиент/Module.bsl @@ -54,7 +54,7 @@ #Область УстаревшиеПроцедурыИФункции -// Устарела. См. СклонениеПредставленийОбъектовКлиент.ПросклонятьПредставлениеПоВсемПадежам. +// Устарела. См. СклонениеПредставленийОбъектовКлиент.ПросклонятьПредставление. Процедура ПриИзмененииПредставления(Форма) Экспорт ТекстСообщения = НСтр("ru = 'Метод СклонениеПредставленийОбъектовКлиент.ПриИзмененииПредставления более не поддерживается. diff --git a/SSL/src/CommonModules/СоединенияИБ/Module.bsl b/SSL/src/CommonModules/СоединенияИБ/Module.bsl index 548487b19..48ad790dc 100644 --- a/SSL/src/CommonModules/СоединенияИБ/Module.bsl +++ b/SSL/src/CommonModules/СоединенияИБ/Module.bsl @@ -112,28 +112,26 @@ Возврат Ложь; КонецЕсли; - ТекущийРежим = ПолучитьБлокировкуСеансовОбластиДанных(); - Если ТекущийРежим.Установлена Тогда - НовыйРежим = НовыеПараметрыБлокировкиСоединений(); - НовыйРежим.Установлена = Ложь; - УстановитьБлокировкуСеансовОбластиДанных(НовыйРежим); + ПараметрыБлокировки = ПолучитьБлокировкуСеансовОбластиДанных(); + Если ПараметрыБлокировки.Установлена Тогда + ПараметрыБлокировки.Установлена = Ложь; + УстановитьБлокировкуСеансовОбластиДанных(ПараметрыБлокировки); КонецЕсли; Возврат Истина; - Иначе - Если НЕ Пользователи.ЭтоПолноправныйПользователь(, Истина) Тогда - Возврат Ложь; - КонецЕсли; - - ТекущийРежим = ПолучитьБлокировкуСеансов(); - Если ТекущийРежим.Установлена Тогда - НовыйРежим = Новый БлокировкаСеансов; - НовыйРежим.Установлена = Ложь; - УстановитьБлокировкуСеансов(НовыйРежим); - КонецЕсли; - Возврат Истина; КонецЕсли; + Если НЕ Пользователи.ЭтоПолноправныйПользователь(, Истина) Тогда + Возврат Ложь; + КонецЕсли; + + ПараметрыБлокировки = ПолучитьБлокировкуСеансов(); + Если ПараметрыБлокировки.Установлена Тогда + ПараметрыБлокировки.Установлена = Ложь; + УстановитьБлокировкуСеансов(ПараметрыБлокировки); + КонецЕсли; + Возврат Истина; + КонецФункции // Возвращает информацию о текущих соединениях с информационной базой. @@ -235,7 +233,7 @@ Процедура УстановитьБлокировкуСеансовОбластиДанных(Параметры, Знач ПоМестномуВремени = Истина, Знач ОбластьДанных = -1) Экспорт Если Не Пользователи.ЭтоПолноправныйПользователь() Тогда - ВызватьИсключение НСтр("ru ='Недостаточно прав для выполнения операции'"); + ВызватьИсключение НСтр("ru = 'Недостаточно прав для выполнения операции'"); КонецЕсли; Эксклюзивная = Ложь; @@ -243,7 +241,7 @@ Эксклюзивная = Ложь; КонецЕсли; Если Эксклюзивная И Не Пользователи.ЭтоПолноправныйПользователь(, Истина) Тогда - ВызватьИсключение НСтр("ru ='Недостаточно прав для выполнения операции'"); + ВызватьИсключение НСтр("ru = 'Недостаточно прав для выполнения операции'"); КонецЕсли; Если ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда @@ -270,23 +268,39 @@ СтруктураНастроек = НовыеПараметрыБлокировкиСоединений(); ЗаполнитьЗначенияСвойств(СтруктураНастроек, Параметры); КонецЕсли; - + УстановитьПривилегированныйРежим(Истина); - НаборБлокировок = РегистрыСведений.БлокировкиСеансовОбластейДанных.СоздатьНаборЗаписей(); - НаборБлокировок.Отбор.ОбластьДанныхВспомогательныеДанные.Установить(ОбластьДанных); - НаборБлокировок.Прочитать(); - НаборБлокировок.Очистить(); - Если Параметры.Установлена Тогда - Блокировка = НаборБлокировок.Добавить(); - Блокировка.ОбластьДанныхВспомогательныеДанные = ОбластьДанных; - Блокировка.НачалоБлокировки = ?(ПоМестномуВремени И ЗначениеЗаполнено(СтруктураНастроек.Начало), - УниверсальноеВремя(СтруктураНастроек.Начало), СтруктураНастроек.Начало); - Блокировка.КонецБлокировки = ?(ПоМестномуВремени И ЗначениеЗаполнено(СтруктураНастроек.Конец), - УниверсальноеВремя(СтруктураНастроек.Конец), СтруктураНастроек.Конец); - Блокировка.СообщениеБлокировки = СтруктураНастроек.Сообщение; - Блокировка.Эксклюзивная = СтруктураНастроек.Эксклюзивная; - КонецЕсли; - НаборБлокировок.Записать(); + + НачатьТранзакцию(); + Попытка + + БлокировкаДанных = Новый БлокировкаДанных; + ЭлементБлокировки = БлокировкаДанных.Добавить("РегистрСведений.БлокировкиСеансовОбластейДанных"); + ЭлементБлокировки.УстановитьЗначение("ОбластьДанныхВспомогательныеДанные", ОбластьДанных); + БлокировкаДанных.Заблокировать(); + + НаборБлокировок = РегистрыСведений.БлокировкиСеансовОбластейДанных.СоздатьНаборЗаписей(); + НаборБлокировок.Отбор.ОбластьДанныхВспомогательныеДанные.Установить(ОбластьДанных); + НаборБлокировок.Прочитать(); + НаборБлокировок.Очистить(); + Если Параметры.Установлена Тогда + Блокировка = НаборБлокировок.Добавить(); + Блокировка.ОбластьДанныхВспомогательныеДанные = ОбластьДанных; + Блокировка.НачалоБлокировки = ?(ПоМестномуВремени И ЗначениеЗаполнено(СтруктураНастроек.Начало), + УниверсальноеВремя(СтруктураНастроек.Начало), СтруктураНастроек.Начало); + Блокировка.КонецБлокировки = ?(ПоМестномуВремени И ЗначениеЗаполнено(СтруктураНастроек.Конец), + УниверсальноеВремя(СтруктураНастроек.Конец), СтруктураНастроек.Конец); + Блокировка.СообщениеБлокировки = СтруктураНастроек.Сообщение; + Блокировка.Эксклюзивная = СтруктураНастроек.Эксклюзивная; + КонецЕсли; + НаборБлокировок.Записать(); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + КонецПроцедуры @@ -308,7 +322,7 @@ КонецЕсли; Если Не Пользователи.ЭтоПолноправныйПользователь() Тогда - ВызватьИсключение НСтр("ru ='Недостаточно прав для выполнения операции'"); + ВызватьИсключение НСтр("ru = 'Недостаточно прав для выполнения операции'"); КонецЕсли; МодульРаботаВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("РаботаВМоделиСервиса"); @@ -476,29 +490,32 @@ ТекущийРежим = ПараметрыБлокировки.ТекущийРежимОбластиДанных; Если ЗначениеЗаполнено(ТекущийРежим.Конец) Тогда - ПериодБлокировки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'на период с %1 по %2'"), ТекущийРежим.Начало, ТекущийРежим.Конец); + Если ЗначениеЗаполнено(ТекущийРежим.Сообщение) Тогда + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Администратором приложения установлена блокировка работы пользователей на период с %1 по %2 по причине: + |%3.'"), ТекущийРежим.Начало, ТекущийРежим.Конец, ТекущийРежим.Сообщение); + Иначе + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Администратором приложения установлена блокировка работы пользователей на период с %1 по %2 для проведения регламентных работ.'"), + ТекущийРежим.Начало, ТекущийРежим.Конец); + КонецЕсли; Иначе - ПериодБлокировки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'с %1'"), ТекущийРежим.Начало); + Если ЗначениеЗаполнено(ТекущийРежим.Сообщение) Тогда + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Администратором приложения установлена блокировка работы пользователей на период с %1 по причине: + |%2.'"), ТекущийРежим.Начало, ТекущийРежим.Сообщение); + Иначе + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Администратором приложения установлена блокировка работы пользователей на период с %1 для проведения регламентных работ.'"), + ТекущийРежим.Начало); + КонецЕсли; КонецЕсли; - Если ЗначениеЗаполнено(ТекущийРежим.Сообщение) Тогда - ПричинаБлокировки = НСтр("ru = 'по причине:'") + Символы.ПС + ТекущийРежим.Сообщение; - Иначе - ПричинаБлокировки = НСтр("ru = 'для проведения регламентных работ'"); - КонецЕсли; - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Администратором приложения установлена блокировка работы пользователей %1 %2. - | - |Приложение временно недоступно.'"), ПериодБлокировки, ПричинаБлокировки); - Параметры.Вставить("СеансыОбластиДанныхЗаблокированы", ТекстСообщения); - ТекстСообщения = ""; + Параметры.Вставить("СеансыОбластиДанныхЗаблокированы", ТекстСообщения + Символы.ПС + Символы.ПС + НСтр("ru = 'Приложение временно недоступно.'")); + ТекстСообщенияДляВхода = ""; Если Пользователи.ЭтоПолноправныйПользователь() Тогда - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Администратором приложения установлена блокировка работы пользователей %1 %2. - | - |Войти в заблокированное приложение?'"), - ПериодБлокировки, ПричинаБлокировки); + ТекстСообщенияДляВхода = ТекстСообщения + Символы.ПС + Символы.ПС + НСтр("ru = 'Войти в заблокированное приложение?'"); КонецЕсли; - Параметры.Вставить("ПредложениеВойти", ТекстСообщения); + Параметры.Вставить("ПредложениеВойти", ТекстСообщенияДляВхода); Если (Пользователи.ЭтоПолноправныйПользователь() И Не ТекущийРежим.Эксклюзивная) Или Пользователи.ЭтоПолноправныйПользователь(, Истина) Тогда diff --git a/SSL/src/CommonModules/СоединенияИБКлиент/Module.bsl b/SSL/src/CommonModules/СоединенияИБКлиент/Module.bsl index 100496bc1..24035dc39 100644 --- a/SSL/src/CommonModules/СоединенияИБКлиент/Module.bsl +++ b/SSL/src/CommonModules/СоединенияИБКлиент/Module.bsl @@ -127,7 +127,7 @@ // Параметры: // ПараметрыЗапуска - Массив - массив строк разделенных символом ";" в параметре запуска, // переданным в конфигурацию с помощью ключа командной строки /C. -// Отказ - Булево (возвращаемое значение), если установить Истина, +// Отказ - Булево - (возвращаемое значение), если установить Истина, // обработка события ПриНачалеРаботыСистемы будет прервана. // Процедура ПриОбработкеПараметровЗапуска(ПараметрыЗапуска, Отказ) Экспорт diff --git a/SSL/src/CommonModules/СозданиеНаОсновании/Module.bsl b/SSL/src/CommonModules/СозданиеНаОсновании/Module.bsl new file mode 100644 index 000000000..4aeac77e8 --- /dev/null +++ b/SSL/src/CommonModules/СозданиеНаОсновании/Module.bsl @@ -0,0 +1,288 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2019, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ПрограммныйИнтерфейс + +// Добавляет в список команд создания на основании команду создания указанного объекта. +// +// Параметры: +// КомандыСозданияНаОсновании - ТаблицаЗначений - см. СозданиеНаОснованииПереопределяемый.ПередДобавлениемКомандСозданияНаОсновании. +// ОбъектМетаданных - ОбъектМетаданных - объект, для которого добавляется команда. +// +// Возвращаемое значение: +// СтрокаТаблицыЗначений, Неопределено - описание добавленной команды. +// +Функция ДобавитьКомандуСозданияНаОсновании(КомандыСозданияНаОсновании, ОбъектМетаданных) Экспорт + Если ПравоДоступа("Добавление", ОбъектМетаданных) Тогда + КомандаСоздатьНаОсновании = КомандыСозданияНаОсновании.Добавить(); + КомандаСоздатьНаОсновании.Менеджер = ОбъектМетаданных.ПолноеИмя(); + КомандаСоздатьНаОсновании.Представление = ОбщегоНазначения.ПредставлениеОбъекта(ОбъектМетаданных); + КомандаСоздатьНаОсновании.РежимЗаписи = "Записывать"; + + Возврат КомандаСоздатьНаОсновании; + КонецЕсли; + + Возврат Неопределено; +КонецФункции + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +//////////////////////////////////////////////////////////////////////////////// +// Обработчики событий подсистем конфигурации. + +// См. ПодключаемыеКомандыПереопределяемый.ПриОпределенииСоставаНастроекПодключаемыхОбъектов. +Процедура ПриОпределенииСоставаНастроекПодключаемыхОбъектов(НастройкиПрограммногоИнтерфейса) Экспорт + Настройка = НастройкиПрограммногоИнтерфейса.Добавить(); + Настройка.Ключ = "ДобавитьКомандыСозданияНаОсновании"; + Настройка.ОписаниеТипов = Новый ОписаниеТипов("Булево"); +КонецПроцедуры + +// См. ПодключаемыеКомандыПереопределяемый.ПриОпределенииВидовПодключаемыхКоманд. +Процедура ПриОпределенииВидовПодключаемыхКоманд(ВидыПодключаемыхКоманд) Экспорт + + Если Не НастройкиПодсистемы().ИспользоватьКомандыВводаНаОсновании Тогда + Возврат; + КонецЕсли; + + Вид = ВидыПодключаемыхКоманд.Добавить(); + Вид.Имя = "СозданиеНаОсновании"; + Вид.ИмяПодменю = "ПодменюСоздатьНаОсновании"; + Вид.Заголовок = НСтр("ru = 'Создать на основании'; + |en = 'Create on the basis'"); + Вид.Порядок = 60; + Вид.Картинка = БиблиотекаКартинок.ВводНаОсновании; + Вид.Отображение = ОтображениеКнопки.Картинка; + +КонецПроцедуры + +// См. ПодключаемыеКомандыПереопределяемый.ПриОпределенииКомандПодключенныхКОбъекту. +Процедура ПриОпределенииКомандПодключенныхКОбъекту(НастройкиФормы, Источники, ПодключенныеОтчетыИОбработки, Команды) Экспорт + КомандыСозданияНаОсновании = Команды.СкопироватьКолонки(); + КомандыСозданияНаОсновании.Колонки.Добавить("Обработана", Новый ОписаниеТипов("Булево")); + КомандыСозданияНаОсновании.Индексы.Добавить("Обработана"); + + СтандартнаяОбработка = Источники.Строки.Количество() > 0; + ИнтеграцияПодсистемБСП.ПередДобавлениемКомандСозданияНаОсновании(КомандыСозданияНаОсновании, НастройкиФормы, СтандартнаяОбработка); + СозданиеНаОснованииПереопределяемый.ПередДобавлениемКомандСозданияНаОсновании(КомандыСозданияНаОсновании, НастройкиФормы, СтандартнаяОбработка); + + КомандыСозданияНаОсновании.ЗаполнитьЗначения(Истина, "Обработана"); + + ДопустимыеТипы = Новый Массив; // Типы источников, которые пользователь может изменять (см. ниже проверку права "Изменение"). + Если СтандартнаяОбработка Тогда + ОбъектыСКомандамиСозданияНаОсновании = ОбъектыСКомандамиСозданияНаОсновании(); + Для Каждого Источник Из Источники.Строки Цикл + Для Каждого ДокументРегистратор Из Источник.Строки Цикл + ПодключаемыеКоманды.ДополнитьМассивТипов(ДопустимыеТипы, ДокументРегистратор.ТипСсылкиДанных); + + СтандартнаяОбработка = Истина; + ИнтеграцияПодсистемБСП.ПриДобавленииКомандСозданияНаОсновании( + ДокументРегистратор.Метаданные, КомандыСозданияНаОсновании, НастройкиФормы, СтандартнаяОбработка); + СозданиеНаОснованииПереопределяемый.ПриДобавленииКомандСозданияНаОсновании( + ДокументРегистратор.Метаданные, КомандыСозданияНаОсновании, НастройкиФормы, СтандартнаяОбработка); + + Если СтандартнаяОбработка И ОбъектыСКомандамиСозданияНаОсновании[ДокументРегистратор.Метаданные.ПолноеИмя()] <> Неопределено Тогда + ПриДобавленииКомандСозданияНаОсновании(КомандыСозданияНаОсновании, ДокументРегистратор, НастройкиФормы); + КонецЕсли; + КонецЦикла; + + ПодключаемыеКоманды.ДополнитьМассивТипов(ДопустимыеТипы, Источник.ТипСсылкиДанных); + + СтандартнаяОбработка = Истина; + ИнтеграцияПодсистемБСП.ПриДобавленииКомандСозданияНаОсновании( + Источник.Метаданные, КомандыСозданияНаОсновании, НастройкиФормы, СтандартнаяОбработка); + СозданиеНаОснованииПереопределяемый.ПриДобавленииКомандСозданияНаОсновании( + Источник.Метаданные, КомандыСозданияНаОсновании, НастройкиФормы, СтандартнаяОбработка); + + Если СтандартнаяОбработка И ОбъектыСКомандамиСозданияНаОсновании[Источник.Метаданные.ПолноеИмя()] <> Неопределено Тогда + ПриДобавленииКомандСозданияНаОсновании(КомандыСозданияНаОсновании, Источник, НастройкиФормы); + КонецЕсли; + КонецЦикла; + КонецЕсли; + + Если ДопустимыеТипы.Количество() = 0 Тогда + Возврат; // Все закрыто и команд расширений с допустимыми типами тоже не будет. + КонецЕсли; + + Найденные = ПодключенныеОтчетыИОбработки.НайтиСтроки(Новый Структура("ДобавитьКомандыСозданияНаОсновании", Истина)); + Для Каждого ПодключенныйОбъект Из Найденные Цикл + ПриДобавленииКомандСозданияНаОсновании(КомандыСозданияНаОсновании, ПодключенныйОбъект, НастройкиФормы, ДопустимыеТипы); + КонецЦикла; + + Для Каждого КомандаСозданияНаОсновании Из КомандыСозданияНаОсновании Цикл + Команда = Команды.Добавить(); + ЗаполнитьЗначенияСвойств(Команда, КомандаСозданияНаОсновании); + Команда.Вид = "СозданиеНаОсновании"; + Если Команда.Порядок = 0 Тогда + Команда.Порядок = 50; + КонецЕсли; + Если Команда.РежимЗаписи = "" Тогда + Команда.РежимЗаписи = "Записывать"; + КонецЕсли; + Если Команда.МножественныйВыбор = Неопределено Тогда + Команда.МножественныйВыбор = Ложь; + КонецЕсли; + Если Команда.ПараметрыФормы = Неопределено Тогда + Команда.ПараметрыФормы = Новый Структура; + КонецЕсли; + КонецЦикла; +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +// Список объектов, в которых используются команды создания на основании. +// +// Возвращаемое значение: +// Массив из Строка - имена объектов метаданных, подключенных к подсистеме. +// +Функция ОбъектыСКомандамиСозданияНаОсновании() + + Возврат Новый Соответствие(СозданиеНаОснованииПовтИсп.ОбъектыСКомандамиСозданияНаОсновании()); + +КонецФункции + +Процедура ПриДобавленииКомандСозданияНаОсновании(Команды, СведенияОбОбъекте, НастройкиФормы, ДопустимыеТипы = Неопределено) + СведенияОбОбъекте.Менеджер.ДобавитьКомандыСозданияНаОсновании(Команды, НастройкиФормы); + ДобавленныеКоманды = Команды.НайтиСтроки(Новый Структура("Обработана", Ложь)); + Для Каждого Команда Из ДобавленныеКоманды Цикл + Если Не ЗначениеЗаполнено(Команда.Менеджер) Тогда + Команда.Менеджер = СведенияОбОбъекте.ПолноеИмя; + КонецЕсли; + Если Не ЗначениеЗаполнено(Команда.ТипПараметра) Тогда + Команда.ТипПараметра = СведенияОбОбъекте.ТипСсылкиДанных; + КонецЕсли; + Если ДопустимыеТипы <> Неопределено И Не ТипВМассиве(Команда.ТипПараметра, ДопустимыеТипы) Тогда + Команды.Удалить(Команда); + Продолжить; + КонецЕсли; + Найденные = Команды.НайтиСтроки(Новый Структура("Обработана, Представление", Истина, Команда.Менеджер)); + Если Найденные.Количество() > 0 Тогда + Найденные[0].ТипПараметра = ОбъединитьТипы(Найденные[0].ТипПараметра, Команда.ТипПараметра); + Команды.Удалить(Команда); + Продолжить; + КонецЕсли; + Команда.Обработана = Истина; + Если Не ЗначениеЗаполнено(Команда.Обработчик) И Не ЗначениеЗаполнено(Команда.ИмяФормы) Тогда + Команда.ИмяФормы = "ФормаОбъекта"; + КонецЕсли; + Если Не ЗначениеЗаполнено(Команда.ИмяПараметраФормы) Тогда + Команда.ИмяПараметраФормы = "Основание"; + КонецЕсли; + КонецЦикла; +КонецПроцедуры + +Функция ТипВМассиве(ТипИлиОписаниеТипов, МассивТипов) + Если ТипЗнч(ТипИлиОписаниеТипов) = Тип("ОписаниеТипов") Тогда + Для Каждого Тип Из ТипИлиОписаниеТипов.Типы() Цикл + Если МассивТипов.Найти(Тип) <> Неопределено Тогда + Возврат Истина; + КонецЕсли; + КонецЦикла; + Возврат Ложь + Иначе + Возврат МассивТипов.Найти(ТипИлиОписаниеТипов) <> Неопределено; + КонецЕсли; +КонецФункции + +Функция ОбъединитьТипы(Тип1, Тип2) + Тип1ЭтоОписаниеТипов = ТипЗнч(Тип1) = Тип("ОписаниеТипов"); + Тип2ЭтоОписаниеТипов = ТипЗнч(Тип2) = Тип("ОписаниеТипов"); + Если Тип1ЭтоОписаниеТипов И Тип1.Типы().Количество() > 0 Тогда + ИсходноеОписаниеТипов = Тип1; + ДобавляемыеТипы = ?(Тип2ЭтоОписаниеТипов, Тип2.Типы(), ЗначениеВМассив(Тип2)); + ИначеЕсли Тип2ЭтоОписаниеТипов И Тип2.Типы().Количество() > 0 Тогда + ИсходноеОписаниеТипов = Тип2; + ДобавляемыеТипы = ЗначениеВМассив(Тип1); + ИначеЕсли ТипЗнч(Тип1) <> Тип("Тип") Тогда + Возврат Тип2; + ИначеЕсли ТипЗнч(Тип2) <> Тип("Тип") Тогда + Возврат Тип1; + Иначе + Типы = Новый Массив; + Типы.Добавить(Тип1); + Типы.Добавить(Тип2); + Возврат Новый ОписаниеТипов(Типы); + КонецЕсли; + Если ДобавляемыеТипы.Количество() = 0 Тогда + Возврат ИсходноеОписаниеТипов; + Иначе + Возврат Новый ОписаниеТипов(ИсходноеОписаниеТипов, ДобавляемыеТипы); + КонецЕсли; +КонецФункции + +Функция ЗначениеВМассив(Значение) + Результат = Новый Массив; + Результат.Добавить(Значение); + Возврат Результат; +КонецФункции + +Функция НастройкиПодсистемы() + + Настройки = Новый Структура; + Настройки.Вставить("ИспользоватьКомандыВводаНаОсновании", Истина); + + СозданиеНаОснованииПереопределяемый.ПриОпределенииНастроек(Настройки); + + Возврат Настройки; + +КонецФункции + +Процедура ПриВыводеКоманд(Форма, ВидКоманд, СведенияОПодменюПоУмолчанию, ПараметрыРазмещения) Экспорт + + Если ВидКоманд.Имя <> "СозданиеНаОсновании" Тогда + Возврат; + КонецЕсли; + + Если ПараметрыРазмещения.ВводНаОснованииЧерезПодключаемыеКоманды Тогда + СкрытьСтандартноеПодменюВводаНаОсновании(Форма, СведенияОПодменюПоУмолчанию); + КонецЕсли; + +КонецПроцедуры + +Процедура СкрытьСтандартноеПодменюВводаНаОсновании(Форма, ДинамическоеПодменюСозданияНаОсновании) + + ПодменюСоздатьНаОсновании = Форма.Элементы.Найти("ФормаСоздатьНаОсновании"); + Если ПодменюСоздатьНаОсновании = Неопределено Тогда + Возврат; + КонецЕсли; + + ПодменюСоздатьНаОсновании.Видимость = Ложь; + + ИменаАвтогенерируемыхКоманд = Новый Соответствие; + Для Каждого Элемент Из ОбъектыСКомандамиСозданияНаОсновании() Цикл + ИменаАвтогенерируемыхКоманд.Вставить("Форма" + СтрЗаменить(Элемент.Ключ, ".", "") + "СоздатьНаОсновании", Истина); + КонецЦикла; + + Для Каждого Элемент Из ПодменюСоздатьНаОсновании.ПодчиненныеЭлементы Цикл + Если ИменаАвтогенерируемыхКоманд[Элемент.Имя] = Неопределено Тогда + Форма.Элементы.Переместить(Элемент, ДинамическоеПодменюСозданияНаОсновании.Группы.Обычное); + ДинамическоеПодменюСозданияНаОсновании.ВыведеноКоманд = ДинамическоеПодменюСозданияНаОсновании.ВыведеноКоманд + 1; + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +Функция ОбъектыПодключеныКПодсистеме(Типы) Экспорт + + ОбъектыСКомандамиСозданияНаОсновании = ОбъектыСКомандамиСозданияНаОсновании(); + + Для Каждого Тип Из Типы Цикл + ОбъектМетаданных = Метаданные.НайтиПоТипу(Тип); + Если ОбъектыСКомандамиСозданияНаОсновании[ОбъектМетаданных.ПолноеИмя()] = Неопределено Тогда + Возврат Ложь; + КонецЕсли; + КонецЦикла; + + Возврат Истина; + +КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/СозданиеНаОсновании/СозданиеНаОсновании.mdo b/SSL/src/CommonModules/СозданиеНаОсновании/СозданиеНаОсновании.mdo new file mode 100644 index 000000000..173040373 --- /dev/null +++ b/SSL/src/CommonModules/СозданиеНаОсновании/СозданиеНаОсновании.mdo @@ -0,0 +1,15 @@ + + + СозданиеНаОсновании + + ru + Создание на основании + + + en + Creation on basis + + true + true + true + diff --git a/SSL/src/CommonModules/СозданиеНаОснованииПереопределяемый/Module.bsl b/SSL/src/CommonModules/СозданиеНаОснованииПереопределяемый/Module.bsl new file mode 100644 index 000000000..9ca9add41 --- /dev/null +++ b/SSL/src/CommonModules/СозданиеНаОснованииПереопределяемый/Module.bsl @@ -0,0 +1,125 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2019, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ПрограммныйИнтерфейс + +// Переопределяет настройки команд ввода на основании. +// +// Параметры: +// Настройки - Структура - настройки подсистемы: +// * ИспользоватьКомандыВводаНаОсновании - Булево - разрешает использование программных команд ввода на основании +// вместо штатных. Значение по умолчанию: Истина. +// +Процедура ПриОпределенииНастроек(Настройки) Экспорт + +КонецПроцедуры + +// Определяет список объектов конфигурации, в модулях менеджеров которых предусмотрена процедура +// ДобавитьКомандыСозданияНаОсновании, формирующая команды создания на основании объектов. +// Синтаксис процедуры ДобавитьКомандыСозданияНаОсновании см. в документации. +// +// Параметры: +// Объекты - Массив - объекты метаданных (ОбъектМетаданных) с командами создания на основании. +// +// Пример: +// Объекты.Добавить(Метаданные.Справочники.Организации); +// +Процедура ПриОпределенииОбъектовСКомандамиСозданияНаОсновании(Объекты) Экспорт + + + +КонецПроцедуры + +// Вызывается для формирования списка команд создания на основании КомандыСозданияНаОсновании, однократно для при первой +// необходимости, а затем результат кэшируется с помощью модуля с повторным использованием возвращаемых значений. +// Здесь можно определить команды создания на основании, общие для большинства объектов конфигурации. +// +// Параметры: +// КомандыСозданияНаОсновании - ТаблицаЗначений - сформированные команды для вывода в подменю. +// +// Общие настройки: +// * Идентификатор - Строка - Идентификатор команды. +// +// Настройки внешнего вида: +// * Представление - Строка - Представление команды в форме. +// * Важность - Строка - Группа в подменю, в которой следует вывести эту команду. +// Допустимо использовать: "Важное", "Обычное" и "СмТакже". +// * Порядок - Число - Порядок размещения команды в подменю. Используется для настройки под конкретное +// рабочее место. +// * Картинка - Картинка - Картинка команды. +// +// Настройки видимости и доступности: +// * ТипПараметра - ОписаниеТипов - Типы объектов, для которых предназначена эта команда. +// * ВидимостьВФормах - Строка - Имена форм через запятую, в которых должна отображаться команда. +// Используется когда состав команд отличается для различных форм. +// * ФункциональныеОпции - Строка - Имена функциональных опций через запятую, определяющих видимость команды. +// * УсловияВидимости - Массив - Определяет видимость команды в зависимости от контекста. +// Для регистрации условий следует использовать процедуру +// ПодключаемыеКоманды.ДобавитьУсловиеВидимостиКоманды(). +// Условия объединяются по "И". +// * ИзменяетВыбранныеОбъекты - Булево - Определяет доступность команды в ситуации, +// когда у пользователя нет прав на изменение объекта. +// Если Истина, то в описанной выше ситуации кнопка будет недоступна. +// Необязательный. Значение по умолчанию: Ложь. +// +// Настройки процесса выполнения: +// * МножественныйВыбор - Булево, Неопределено - Если Истина, то команда поддерживает множественный выбор. +// В этом случае в параметре выполнения будет передан список ссылок. +// Необязательный. Значение по умолчанию: Ложь. +// * РежимЗаписи - Строка - Действия, связанные с записью объекта, которые выполняются перед обработчиком команды. +// ** "НеЗаписывать" - Объект не записывается, а в параметрах обработчика вместо ссылок передается +// вся форма. В этом режиме рекомендуется работать напрямую с формой, +// которая передается в структуре 2 параметра обработчика команды. +// ** "ЗаписыватьТолькоНовые" - Записывать новые объекты. +// ** "Записывать" - Записывать новые и модифицированные объекты. +// ** "Проводить" - Проводить документы. +// Перед записью и проведением у пользователя запрашивается подтверждение. +// Необязательный. Значение по умолчанию: "Записывать". +// * ТребуетсяРаботаСФайлами - Булево - Если Истина, то в веб-клиенте предлагается +// установить расширение работы с файлами. +// Необязательный. Значение по умолчанию: Ложь. +// +// Настройки обработчика: +// * Менеджер - Строка - Объект, отвечающий за выполнение команды. +// * ИмяФормы - Строка - Имя формы, которую требуется получить для выполнения команды. +// Если Обработчик не указан, то у формы вызывается метод "Открыть". +// * ПараметрыФормы - Неопределено, ФиксированнаяСтруктура - Необязательный. Параметры формы, указанной в ИмяФормы. +// * Обработчик - Строка - Описание процедуры, обрабатывающей основное действие команды. +// Формат "<ИмяОбщегоМодуля>.<ИмяПроцедуры>" используется когда процедура размещена в общем модуле. +// Формат "<ИмяПроцедуры>" используется в следующих случаях: +// - Если ИмяФормы заполнено то в модуле указанной формы ожидается клиентская процедура. +// - Если ИмяФормы не заполнено то в модуле менеджера этого объекта ожидается серверная процедура. +// * ДополнительныеПараметры - ФиксированнаяСтруктура - Необязательный. Параметры обработчика, указанного в Обработчик. +// +// Параметры - Структура - Сведения о контексте исполнения. +// * ИмяФормы - Строка - Полное имя формы. +// +// СтандартнаяОбработка - Булево - Если установить в Ложь, то событие "ДобавитьКомандыСозданияНаОсновании" менеджера +// объекта не будет вызвано. +// +Процедура ПередДобавлениемКомандСозданияНаОсновании(КомандыСозданияНаОсновании, Параметры, СтандартнаяОбработка) Экспорт + +КонецПроцедуры + +// Определяет список команд создания на основании. Вызывается перед вызовом "ДобавитьКомандыСозданияНаОсновании" модуля +// менеджера объекта. +// +// Параметры: +// Объект - ОбъектМетаданных - объект, для которого добавляются команды. +// КомандыСозданияНаОсновании - ТаблицаЗначений - см. СозданиеНаОснованииПереопределяемый.ПередДобавлениемКомандСозданияНаОсновании. +// Параметры - Структура - см. СозданиеНаОснованииПереопределяемый.ПередДобавлениемКомандСозданияНаОсновании. +// СтандартнаяОбработка - Булево - Если установить в Ложь, то событие "ДобавитьКомандыСозданияНаОсновании" менеджера +// объекта не будет вызвано. +// +Процедура ПриДобавленииКомандСозданияНаОсновании(Объект, КомандыСозданияНаОсновании, Параметры, СтандартнаяОбработка) Экспорт + + + +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/СозданиеНаОснованииПереопределяемый/СозданиеНаОснованииПереопределяемый.mdo b/SSL/src/CommonModules/СозданиеНаОснованииПереопределяемый/СозданиеНаОснованииПереопределяемый.mdo new file mode 100644 index 000000000..232a559dd --- /dev/null +++ b/SSL/src/CommonModules/СозданиеНаОснованииПереопределяемый/СозданиеНаОснованииПереопределяемый.mdo @@ -0,0 +1,15 @@ + + + СозданиеНаОснованииПереопределяемый + + ru + Создание на основании переопределяемый + + + en + Creation on basis overridable + + true + true + true + diff --git a/SSL/src/CommonModules/СозданиеНаОснованииПовтИсп/Module.bsl b/SSL/src/CommonModules/СозданиеНаОснованииПовтИсп/Module.bsl new file mode 100644 index 000000000..bc8542fea --- /dev/null +++ b/SSL/src/CommonModules/СозданиеНаОснованииПовтИсп/Module.bsl @@ -0,0 +1,27 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2019, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область СлужебныеПроцедурыИФункции + +Функция ОбъектыСКомандамиСозданияНаОсновании() Экспорт + + Объекты = Новый Массив; + ИнтеграцияПодсистемБСП.ПриОпределенииОбъектовСКомандамиСозданияНаОсновании(Объекты); + СозданиеНаОснованииПереопределяемый.ПриОпределенииОбъектовСКомандамиСозданияНаОсновании(Объекты); + + Результат = Новый Соответствие; + Для Каждого ОбъектМетаданных Из Объекты Цикл + Результат.Вставить(ОбъектМетаданных.ПолноеИмя(), Истина); + КонецЦикла; + + Возврат Новый ФиксированноеСоответствие(Результат); + +КонецФункции + +#КонецОбласти + diff --git a/SSL/src/CommonModules/СозданиеНаОснованииПовтИсп/СозданиеНаОснованииПовтИсп.mdo b/SSL/src/CommonModules/СозданиеНаОснованииПовтИсп/СозданиеНаОснованииПовтИсп.mdo new file mode 100644 index 000000000..7ddfc9a25 --- /dev/null +++ b/SSL/src/CommonModules/СозданиеНаОснованииПовтИсп/СозданиеНаОснованииПовтИсп.mdo @@ -0,0 +1,16 @@ + + + СозданиеНаОснованииПовтИсп + + ru + Создание на основании повт исп + + + en + Creation on basis + + true + true + true + DuringSession + diff --git a/SSL/src/CommonModules/СообщенияАдминистрированиеОбменаДаннымиУправлениеОбработчикСообщения_2_1_2_1/Module.bsl b/SSL/src/CommonModules/СообщенияАдминистрированиеОбменаДаннымиУправлениеОбработчикСообщения_2_1_2_1/Module.bsl index 516797c31..d0d4c0552 100644 --- a/SSL/src/CommonModules/СообщенияАдминистрированиеОбменаДаннымиУправлениеОбработчикСообщения_2_1_2_1/Module.bsl +++ b/SSL/src/CommonModules/СообщенияАдминистрированиеОбменаДаннымиУправлениеОбработчикСообщения_2_1_2_1/Module.bsl @@ -217,9 +217,25 @@ Возврат; КонецЕсли; - КорреспондентОбъект = ПодключенныйКорреспондент.ПолучитьОбъект(); - КорреспондентОбъект.Заблокирована = Истина; - КорреспондентОбъект.Записать(); + НачатьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить(ОбщегоНазначения.ИмяТаблицыПоСсылке(ПодключенныйКорреспондент)); + ЭлементБлокировки.УстановитьЗначение("Ссылка", ПодключенныйКорреспондент); + Блокировка.Заблокировать(); + + ЗаблокироватьДанныеДляРедактирования(ПодключенныйКорреспондент); + КорреспондентОбъект = ПодключенныйКорреспондент.ПолучитьОбъект(); + + КорреспондентОбъект.Заблокирована = Истина; + + КорреспондентОбъект.Записать(); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; Иначе // Обновляем настройки подключения этой конечной точки и корреспондента. diff --git a/SSL/src/CommonModules/СообщенияКонтрольДополнительныхОтчетовИОбработокИнтерфейс/Module.bsl b/SSL/src/CommonModules/СообщенияКонтрольДополнительныхОтчетовИОбработокИнтерфейс/Module.bsl index a5816f31b..d9357c6f1 100644 --- a/SSL/src/CommonModules/СообщенияКонтрольДополнительныхОтчетовИОбработокИнтерфейс/Module.bsl +++ b/SSL/src/CommonModules/СообщенияКонтрольДополнительныхОтчетовИОбработокИнтерфейс/Module.bsl @@ -11,7 +11,7 @@ // Возвращает пространство имен текущей (используемой вызывающим кодом) версии интерфейса сообщений. // // Возвращаемое значение: -// Строка +// Строка - // Функция Пакет() Экспорт @@ -22,7 +22,7 @@ // Возвращает текущую (используемую вызывающим кодом) версию интерфейса сообщений. // // Возвращаемое значение: -// Строка +// Строка - // Функция Версия() Экспорт @@ -33,7 +33,7 @@ // Возвращает название программного интерфейса сообщений. // // Возвращаемое значение: -// Строка +// Строка - // Функция ПрограммныйИнтерфейс() Экспорт @@ -68,7 +68,7 @@ // получается тип сообщения. // // Возвращаемое значение: -// ТипОбъектаXDTO +// ТипОбъектаXDTO - // Функция СообщениеДополнительныйОтчетИлиОбработкаУстановлена(Знач ИспользуемыйПакет = Неопределено) Экспорт @@ -83,7 +83,7 @@ // получается тип сообщения. // // Возвращаемое значение: -// ТипОбъектаXDTO +// ТипОбъектаXDTO - // Функция СообщениеДополнительныйОтчетИлиОбработкаУдалена(Знач ИспользуемыйПакет = Неопределено) Экспорт @@ -98,7 +98,7 @@ // получается тип сообщения. // // Возвращаемое значение: -// ТипОбъектаXDTO +// ТипОбъектаXDTO - // Функция СообщениеОшибкаУстановкиДополнительногоОтчетаИлиОбработки(Знач ИспользуемыйПакет = Неопределено) Экспорт @@ -113,7 +113,7 @@ // получается тип сообщения. // // Возвращаемое значение: -// ТипОбъектаXDTO +// ТипОбъектаXDTO - // Функция СообщениеОшибкаУдаленияДополнительногоОтчетаИлиОбработки(Знач ИспользуемыйПакет = Неопределено) Экспорт diff --git a/SSL/src/CommonModules/СообщенияКонтрольДополнительныхОтчетовИОбработокОбработчикТрансляции_1_0_0_1/Module.bsl b/SSL/src/CommonModules/СообщенияКонтрольДополнительныхОтчетовИОбработокОбработчикТрансляции_1_0_0_1/Module.bsl index d06e3ba52..1469ee1f6 100644 --- a/SSL/src/CommonModules/СообщенияКонтрольДополнительныхОтчетовИОбработокОбработчикТрансляции_1_0_0_1/Module.bsl +++ b/SSL/src/CommonModules/СообщенияКонтрольДополнительныхОтчетовИОбработокОбработчикТрансляции_1_0_0_1/Module.bsl @@ -11,7 +11,7 @@ // Возвращает номер версии, для трансляции с которой предназначен обработчик. // // Возвращаемое значение: -// Строка +// Строка - // Функция ИсходнаяВерсия() Экспорт @@ -22,7 +22,7 @@ // Возвращает пространство имен версии, для трансляции с которой предназначен обработчик. // // Возвращаемое значение: -// Строка +// Строка - // Функция ПакетИсходнойВерсии() Экспорт @@ -33,7 +33,7 @@ // Возвращает номер версии, для трансляции в которую предназначен обработчик. // // Возвращаемое значение: -// Строка +// Строка - // Функция РезультирующаяВерсия() Экспорт @@ -44,7 +44,7 @@ // Возвращает пространство имен версии, для трансляции в которую предназначен обработчик. // // Возвращаемое значение: -// Строка +// Строка - // Функция ПакетРезультирующейВерсии() Экспорт diff --git a/SSL/src/CommonModules/СообщенияОбменаДаннымиОбработчикСообщения/Module.bsl b/SSL/src/CommonModules/СообщенияОбменаДаннымиОбработчикСообщения/Module.bsl index 8ed261008..60ed2bc8c 100644 --- a/SSL/src/CommonModules/СообщенияОбменаДаннымиОбработчикСообщения/Module.bsl +++ b/SSL/src/CommonModules/СообщенияОбменаДаннымиОбработчикСообщения/Module.bsl @@ -169,7 +169,7 @@ КонецЕсли; КодЭтогоУзла = ОбменДаннымиПовтИсп.ПолучитьКодЭтогоУзлаДляПланаОбмена(ИмяПланаОбмена); - КодЭтогоУзла = ОбменДаннымиСервер.НомерОбластиИзКодаУзлаПланаОбмена(КодЭтогоУзла); + КодЭтогоУзла = ОбменДаннымиСлужебный.НомерОбластиИзКодаУзлаПланаОбмена(КодЭтогоУзла); Если УзелИнформационнойБазы.Пустая() Тогда diff --git a/SSL/src/CommonModules/СообщенияОбменаДаннымиУправлениеОбработчикСообщения_2_1_2_1/Module.bsl b/SSL/src/CommonModules/СообщенияОбменаДаннымиУправлениеОбработчикСообщения_2_1_2_1/Module.bsl index b26373f09..b4da38b7f 100644 --- a/SSL/src/CommonModules/СообщенияОбменаДаннымиУправлениеОбработчикСообщения_2_1_2_1/Module.bsl +++ b/SSL/src/CommonModules/СообщенияОбменаДаннымиУправлениеОбработчикСообщения_2_1_2_1/Module.bsl @@ -205,7 +205,7 @@ Исключение ОтменитьТранзакцию(); - УдалитьНастройкуСинхронизации(Корреспондент); + ОбменДаннымиВМоделиСервиса.УдалитьУзелПланаОбмена(Корреспондент); ПредставлениеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); @@ -566,25 +566,4 @@ Возврат Результат; КонецФункции -Процедура УдалитьНастройкуСинхронизации(Знач Корреспондент) - - Если Корреспондент = Неопределено Тогда - Возврат; - КонецЕсли; - - УстановитьПривилегированныйРежим(Истина); - - Попытка - КорреспондентОбъект = Корреспондент.ПолучитьОбъект(); - - Если КорреспондентОбъект <> Неопределено Тогда - КорреспондентОбъект.Удалить(); - КонецЕсли; - Исключение - ЗаписьЖурналаРегистрации(ОбменДаннымиВМоделиСервиса.СобытиеЖурналаРегистрацииНастройкаСинхронизацииДанных(), - УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - КонецПопытки; - -КонецПроцедуры - #КонецОбласти diff --git a/SSL/src/CommonModules/СообщенияОбменаДаннымиУправлениеОбработчикСообщения_3_0_1_1/Module.bsl b/SSL/src/CommonModules/СообщенияОбменаДаннымиУправлениеОбработчикСообщения_3_0_1_1/Module.bsl index 96794e8c3..9a5f46a6c 100644 --- a/SSL/src/CommonModules/СообщенияОбменаДаннымиУправлениеОбработчикСообщения_3_0_1_1/Module.bsl +++ b/SSL/src/CommonModules/СообщенияОбменаДаннымиУправлениеОбработчикСообщения_3_0_1_1/Module.bsl @@ -199,7 +199,7 @@ ЗаписьЖурналаРегистрации(ОбменДаннымиВМоделиСервиса.СобытиеЖурналаРегистрацииНастройкаСинхронизацииДанных(), УровеньЖурналаРегистрации.Ошибка, , , ПредставлениеОшибки); - УдалитьНастройкуСинхронизации(НастройкиПодключения.Корреспондент); + ОбменДаннымиВМоделиСервиса.УдалитьУзелПланаОбмена(НастройкиПодключения.Корреспондент); // Отправляем ответное сообщение об ошибке. НачатьТранзакцию(); @@ -494,25 +494,4 @@ Возврат Результат; КонецФункции -Процедура УдалитьНастройкуСинхронизации(Знач Корреспондент) - - Если Корреспондент = Неопределено Тогда - Возврат; - КонецЕсли; - - УстановитьПривилегированныйРежим(Истина); - - Попытка - КорреспондентОбъект = Корреспондент.ПолучитьОбъект(); - - Если КорреспондентОбъект <> Неопределено Тогда - КорреспондентОбъект.Удалить(); - КонецЕсли; - Исключение - ЗаписьЖурналаРегистрации(ОбменДаннымиВМоделиСервиса.СобытиеЖурналаРегистрацииНастройкаСинхронизацииДанных(), - УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - КонецПопытки; - -КонецПроцедуры - #КонецОбласти diff --git a/SSL/src/CommonModules/СообщенияУправленияДОИООбработчикСообщения_1_0_1_1/Module.bsl b/SSL/src/CommonModules/СообщенияУправленияДОИООбработчикСообщения_1_0_1_1/Module.bsl index a63defde4..9b680de0c 100644 --- a/SSL/src/CommonModules/СообщенияУправленияДОИООбработчикСообщения_1_0_1_1/Module.bsl +++ b/SSL/src/CommonModules/СообщенияУправленияДОИООбработчикСообщения_1_0_1_1/Module.bsl @@ -11,7 +11,7 @@ // Возвращает пространство имен версии интерфейса сообщений. // // Возвращаемое значение: -// Строка +// Строка - // Функция Пакет() Экспорт @@ -22,7 +22,7 @@ // Возвращает версию интерфейса сообщений, обслуживаемую обработчиком. // // Возвращаемое значение: -// Строка +// Строка - // Функция Версия() Экспорт @@ -33,7 +33,7 @@ // Возвращает базовый тип для сообщений версии. // // Возвращаемое значение: -// Строка +// Строка - // Функция БазовыйТип() Экспорт diff --git a/SSL/src/CommonModules/СообщенияУправленияДОИООбработчикСообщения_1_0_1_2/Module.bsl b/SSL/src/CommonModules/СообщенияУправленияДОИООбработчикСообщения_1_0_1_2/Module.bsl index 01b07b2fa..f393b5e1a 100644 --- a/SSL/src/CommonModules/СообщенияУправленияДОИООбработчикСообщения_1_0_1_2/Module.bsl +++ b/SSL/src/CommonModules/СообщенияУправленияДОИООбработчикСообщения_1_0_1_2/Module.bsl @@ -11,7 +11,7 @@ // Возвращает пространство имен версии интерфейса сообщений. // // Возвращаемое значение: -// Строка +// Строка - // Функция Пакет() Экспорт @@ -22,7 +22,7 @@ // Возвращает версию интерфейса сообщений, обслуживаемую обработчиком. // // Возвращаемое значение: -// Строка +// Строка - // Функция Версия() Экспорт @@ -33,7 +33,7 @@ // Возвращает базовый тип для сообщений версии. // // Возвращаемое значение: -// Строка +// Строка - // Функция БазовыйТип() Экспорт diff --git a/SSL/src/CommonModules/СообщенияУправленияДополнительнымиОтчетамиИОбработкамиИнтерфейс/Module.bsl b/SSL/src/CommonModules/СообщенияУправленияДополнительнымиОтчетамиИОбработкамиИнтерфейс/Module.bsl index 337bdbf14..6ea6f44e6 100644 --- a/SSL/src/CommonModules/СообщенияУправленияДополнительнымиОтчетамиИОбработкамиИнтерфейс/Module.bsl +++ b/SSL/src/CommonModules/СообщенияУправленияДополнительнымиОтчетамиИОбработкамиИнтерфейс/Module.bsl @@ -11,7 +11,7 @@ // Возвращает пространство имен текущей (используемой вызывающим кодом) версии интерфейса сообщений. // // Возвращаемое значение: -// Строка +// Строка - // Функция Пакет() Экспорт @@ -22,7 +22,7 @@ // Возвращает текущую (используемую вызывающим кодом) версию интерфейса сообщений. // // Возвращаемое значение: -// Строка +// Строка - // Функция Версия() Экспорт @@ -33,7 +33,7 @@ // Возвращает название программного интерфейса сообщений. // // Возвращаемое значение: -// Строка +// Строка - // Функция ПрограммныйИнтерфейс() Экспорт @@ -71,7 +71,7 @@ // получается тип сообщения. // // Возвращаемое значение: -// ТипОбъектаXDTO +// ТипОбъектаXDTO - // Функция СообщениеУстановитьДополнительныйОтчетИлиОбработку(Знач ИспользуемыйПакет = Неопределено) Экспорт @@ -86,7 +86,7 @@ // получается тип сообщения. // // Возвращаемое значение: -// ТипОбъектаXDTO +// ТипОбъектаXDTO - // Функция ТипНастройкиКомандыДополнительногоОтчетаИлиОбработки(Знач ИспользуемыйПакет = Неопределено) Экспорт @@ -101,7 +101,7 @@ // получается тип сообщения. // // Возвращаемое значение: -// ТипОбъектаXDTO +// ТипОбъектаXDTO - // Функция СообщениеУдалитьДополнительныйОтчетИлиОбработку(Знач ИспользуемыйПакет = Неопределено) Экспорт @@ -116,7 +116,7 @@ // получается тип сообщения. // // Возвращаемое значение: -// ТипОбъектаXDTO +// ТипОбъектаXDTO - // Функция СообщениеОтключитьДополнительныйОтчетИлиОбработку(Знач ИспользуемыйПакет = Неопределено) Экспорт @@ -131,7 +131,7 @@ // получается тип сообщения. // // Возвращаемое значение: -// ТипОбъектаXDTO +// ТипОбъектаXDTO - // Функция СообщениеВключитьДополнительныйОтчетИлиОбработку(Знач ИспользуемыйПакет = Неопределено) Экспорт @@ -146,7 +146,7 @@ // получается тип сообщения. // // Возвращаемое значение: -// ТипОбъектаXDTO +// ТипОбъектаXDTO - // Функция СообщениеОтозватьДополнительныйОтчетИлиОбработку(Знач ИспользуемыйПакет = Неопределено) Экспорт @@ -161,7 +161,7 @@ // получается тип сообщения. // // Возвращаемое значение: -// ТипОбъектаXDTO +// ТипОбъектаXDTO - // Функция СообщениеУстановитьРежимИсполненияДополнительногоОтчетаИлиОбработкиВОбластиДанных(Знач ИспользуемыйПакет = Неопределено) Экспорт diff --git a/SSL/src/CommonModules/СтандартныеПодсистемыВызовСервера/Module.bsl b/SSL/src/CommonModules/СтандартныеПодсистемыВызовСервера/Module.bsl index 94e999caa..10ddd21b6 100644 --- a/SSL/src/CommonModules/СтандартныеПодсистемыВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/СтандартныеПодсистемыВызовСервера/Module.bsl @@ -79,6 +79,13 @@ КонецПроцедуры +// См. ОбщегоНазначенияСлужебныйКлиентСервер.РасчетныеПоказателиЯчеек. +Функция РасчетныеПоказателиЯчеек(Знач ТабличныйДокумент, ВыделенныеОбласти) Экспорт + + Возврат ОбщегоНазначенияСлужебныйКлиентСервер.РасчетныеПоказателиЯчеек(ТабличныйДокумент, ВыделенныеОбласти); + +КонецФункции + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -235,9 +242,9 @@ // // Параметры: // Источник - Тип - объект. -// +// // Возвращаемое значение: -// Строка. +// Строка - . Функция ИмяОбъектаМетаданных(Тип) Экспорт ОбъектМетаданных = Метаданные.НайтиПоТипу(Тип); Если ОбъектМетаданных = Неопределено Тогда @@ -263,6 +270,16 @@ КонецФункции +//////////////////////////////////////////////////////////////////////////////// +// Для справочника ИдентификаторыОбъектовМетаданных. + +// Только для внутреннего использования. +Функция ПредставлениеИдентификатораОбъектаМетаданных(Ссылка) Экспорт + + Возврат Справочники.ИдентификаторыОбъектовМетаданных.ПредставлениеИдентификатора(Ссылка); + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ diff --git a/SSL/src/CommonModules/СтандартныеПодсистемыКлиент/Module.bsl b/SSL/src/CommonModules/СтандартныеПодсистемыКлиент/Module.bsl index b6ef11329..7aaeef324 100644 --- a/SSL/src/CommonModules/СтандартныеПодсистемыКлиент/Module.bsl +++ b/SSL/src/CommonModules/СтандартныеПодсистемыКлиент/Module.bsl @@ -636,24 +636,20 @@ КонецПроцедуры -// Возвращает имя исполняемого файла в зависимости от вида клиента и версии платформы. +// Возвращает имя исполняемого файла в зависимости от вида клиента. // -Функция ИмяИсполняемогоФайлаПриложения(ПолучитьФайлаКонфигуратора = Ложь) Экспорт +Функция ИмяИсполняемогоФайлаПриложения(ПолучитьИмяФайлаКонфигуратора = Ложь) Экспорт - ШаблонИмениФайла = "1cv8[ТонкийКлиент][УчебнаяПлатформа].exe"; + ШаблонИмениФайла = "1cv8[УчебнаяПлатформа].exe"; + +#Если ТонкийКлиент Тогда + Если Не ПолучитьИмяФайлаКонфигуратора Тогда + ШаблонИмениФайла = "1cv8c[УчебнаяПлатформа].exe"; + КонецЕсли; +#КонецЕсли ЭтоУчебнаяПлатформа = ПараметрыРаботыКлиентаПриЗапуске().ЭтоУчебнаяПлатформа; - - #Если ТонкийКлиент Тогда - ЭтоТонкийКлиент = Не ПолучитьФайлаКонфигуратора; - #Иначе - ЭтоТонкийКлиент = Ложь; - #КонецЕсли - - ИмяФайла = СтрЗаменить(ШаблонИмениФайла, "[ТонкийКлиент]", ?(ЭтоТонкийКлиент, "c", "")); - ИмяФайла = СтрЗаменить(ИмяФайла, "[УчебнаяПлатформа]", ?(ЭтоУчебнаяПлатформа, "t", "")); - - Возврат ИмяФайла; + Возврат СтрЗаменить(ШаблонИмениФайла, "[УчебнаяПлатформа]", ?(ЭтоУчебнаяПлатформа, "t", "")); КонецФункции @@ -685,7 +681,7 @@ // - Неопределено, ДанныеФормыСтруктура, Структура - текущие данные для проверки. // // Возвращаемое значение: -// Булево. +// Булево - // Функция ЭтоЭлементДинамическогоСписка(ТаблицаИлиТекущиеДанные) Экспорт @@ -713,6 +709,32 @@ Возврат СтрНайти(ПараметрЗапуска, "ОтключитьЛогикуНачалаРаботыСистемы") > 0; КонецФункции +// Коллекция элементов стиля. +// +// Возвращаемое значение: +// Структура - элементы стиля: +// * Ключ - Строка - имя элемента стиля. +// * Значение - ОбъектМетаданных: ЭлементСтиля - элемент стиля. +// +Функция ЭлементыСтиля() Экспорт + + ЭлементыСтиля = Новый Структура; + + ПараметрыРаботыКлиента = ПараметрыРаботыКлиента(); + Для каждого ЭлементСтиля Из ПараметрыРаботыКлиента.ЭлементыСтиля Цикл + + #Если ТолстыйКлиентОбычноеПриложение Тогда + ЭлементыСтиля.Вставить(ЭлементСтиля.Ключ, ЭлементСтиля.Значение.Получить()); + #Иначе + ЭлементыСтиля.Вставить(ЭлементСтиля.Ключ, ЭлементСтиля.Значение); + #КонецЕсли + + КонецЦикла; + + Возврат ЭлементыСтиля; + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Табличный документ @@ -1486,12 +1508,16 @@ Иначе Если ПараметрыКлиента.ЕстьДоступДляОбновленияВерсииПлатформы Тогда ТекстСообщения = - НСтр("ru='Рекомендуется завершить работу программы и обновить версию платформы 1С:Предприятия. - |В противном случае некоторые возможности программы будут недоступны или будут работать некорректно.'"); + НСтр("ru = 'Рекомендуется завершить работу программы и обновить версию платформы 1С:Предприятия. + |Новая версия платформы содержит исправления ошибок, которые позволят программе работать более стабильно. + |Вы также можете отказаться от обновления и продолжить работу на текущей версии. + |Минимально необходимая версия платформы %1.'"); Иначе ТекстСообщения = - НСтр("ru='Рекомендуется завершить работу программы и обратиться к администратору для обновления версии платформы 1С:Предприятия. - |В противном случае некоторые возможности программы будут недоступны или будут работать некорректно.'"); + НСтр("ru = 'Рекомендуется завершить работу программы и обратиться к администратору для обновления версии платформы 1С:Предприятия. + |Новая версия платформы содержит исправления ошибок, которые позволят программе работать более стабильно. + |Вы также можете отказаться от обновления и продолжить работу на текущей версии. + |Минимально необходимая версия платформы %1.'"); КонецЕсли; КонецЕсли; @@ -1541,6 +1567,23 @@ КонецПроцедуры +// См. ОбщегоНазначенияКлиентПереопределяемый.ПередНачаломРаботыСистемы. +Процедура ПередНачаломРаботыСистемы4(Параметры) Экспорт + + // Проверяет необходимость установки основного языка и часового пояса + // информационной базы и открывает форму региональных настроек, если требуется. + + ПараметрыКлиента = ПараметрыРаботыКлиентаПриЗапуске(); + + Если Не ПараметрыКлиента.Свойство("ВыбратьНачальныеРегиональныеНастройкиИБ") Тогда + Возврат; + КонецЕсли; + + Параметры.ИнтерактивнаяОбработка = Новый ОписаниеОповещения( + "ИнтерактивнаяОбработкаНачальныхРегиональныхНастроекИБ", ЭтотОбъект, Параметры); + +КонецПроцедуры + // Только для внутреннего использования. Продолжение процедуры ПроверитьНеобходимостьВосстановленияСвязиСГлавнымУзлом. Процедура ИнтерактивнаяОбработкаВосстановленияСвязиСГлавнымУзлом(Параметры, Контекст) Экспорт @@ -1565,6 +1608,30 @@ КонецПроцедуры +// Только для внутреннего использования. Продолжение процедуры ПередНачаломРаботыСистемы4. +Процедура ИнтерактивнаяОбработкаНачальныхРегиональныхНастроекИБ(Параметры, Контекст) Экспорт + + ПараметрыКлиента = ПараметрыРаботыКлиентаПриЗапуске(); + + Если ПараметрыКлиента.ВыбратьНачальныеРегиональныеНастройкиИБ = Ложь Тогда + Параметры.Отказ = Истина; + ПоказатьПредупреждение( + ОповещениеБезРезультата(Параметры.ОбработкаПродолжения), + НСтр("ru = 'Вход в программу невозможен до установки начальных региональных настроек программы. + |Обратитесь к администратору за подробностями.'"), + 15); + Возврат; + КонецЕсли; + + Форма = ОткрытьФорму("ОбщаяФорма.РегиональныеНастройки",,,,,, + Новый ОписаниеОповещения("ПослеЗакрытияФормыВыбораНачальныхРегиональныхНастроекИБ", ЭтотОбъект, Параметры)); + + Если Форма = Неопределено Тогда + ПослеЗакрытияФормыВыбораНачальныхРегиональныхНастроекИБ(Новый Структура("Отказ", Истина), Параметры); + КонецЕсли; + +КонецПроцедуры + // Только для внутреннего использования. Продолжение процедуры ПроверитьНеобходимостьВосстановленияСвязиСГлавнымУзлом. Процедура ПослеЗакрытияФормыВосстановленияСвязиСГлавнымУзлом(Результат, Параметры) Экспорт @@ -1581,6 +1648,22 @@ КонецПроцедуры +// Только для внутреннего использования. Продолжение процедуры ПередНачаломРаботыСистемы4. +Процедура ПослеЗакрытияФормыВыбораНачальныхРегиональныхНастроекИБ(Результат, Параметры) Экспорт + + Если ТипЗнч(Результат) <> Тип("Структура") Тогда + Параметры.Отказ = Истина; + + ИначеЕсли Результат.Отказ Тогда + Параметры.Отказ = Истина; + Иначе + Параметры.ПолученныеПараметрыКлиента.Вставить("ВыбратьНачальныеРегиональныеНастройкиИБ"); + КонецЕсли; + + ВыполнитьОбработкуОповещения(Параметры.ОбработкаПродолжения); + +КонецПроцедуры + // Устанавливает флаг скрытия рабочего стола при начале работы системы, // который блокирует создание форм на рабочем столе. // Снимает флаг скрытия и обновляет рабочий стол, когда это станет возможным, diff --git a/SSL/src/CommonModules/СтандартныеПодсистемыКлиентПовтИсп/Module.bsl b/SSL/src/CommonModules/СтандартныеПодсистемыКлиентПовтИсп/Module.bsl index cf434ad81..408de1ff3 100644 --- a/SSL/src/CommonModules/СтандартныеПодсистемыКлиентПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/СтандартныеПодсистемыКлиентПовтИсп/Module.bsl @@ -122,6 +122,16 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// Для справочника ИдентификаторыОбъектовМетаданных. + +// Только для внутреннего использования. +Функция ПредставлениеИдентификатораОбъектаМетаданных(Ссылка) Экспорт + + Возврат СтандартныеПодсистемыВызовСервера.ПредставлениеИдентификатораОбъектаМетаданных(Ссылка); + +КонецФункции + #Область ПараметрыРаботыКлиентаПриЗапуске Функция ИспользуемыйКлиент() diff --git a/SSL/src/CommonModules/СтандартныеПодсистемыКлиентСерверЛокализация/Module.bsl b/SSL/src/CommonModules/СтандартныеПодсистемыКлиентСерверЛокализация/Module.bsl index a60eae17e..1d09591ed 100644 --- a/SSL/src/CommonModules/СтандартныеПодсистемыКлиентСерверЛокализация/Module.bsl +++ b/SSL/src/CommonModules/СтандартныеПодсистемыКлиентСерверЛокализация/Module.bsl @@ -15,30 +15,40 @@ // Процедура ПриЗаполненииПравилТранслитерации(Правила) Экспорт - // Локализация начало - - // АПК:547-выкл - // АПК:488-выкл - - // Следующий фрагмент кода выполняет условный вызов процедуры ПриЗаполненииПравилТранслитерации - // при наличии модуля СтроковыеФункцииКлиентСерверРФ. - - #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда - - Если Метаданные.ОбщиеМодули.Найти("СтроковыеФункцииКлиентСерверРФ") <> Неопределено Тогда - МодульСтроковыеФункцииКлиентСерверРФ = ОбщегоНазначения.ОбщийМодуль("СтроковыеФункцииКлиентСерверРФ"); - МодульСтроковыеФункцииКлиентСерверРФ.ПриЗаполненииПравилТранслитерации(Правила); - КонецЕсли; - #Иначе - МодульСтроковыеФункцииКлиентСерверРФ = Вычислить("СтроковыеФункцииКлиентСерверРФ"); - Если ТипЗнч(МодульСтроковыеФункцииКлиентСерверРФ) = Тип("ОбщийМодуль") Тогда - МодульСтроковыеФункцииКлиентСерверРФ.ПриЗаполненииПравилТранслитерации(Правила); - КонецЕсли; - #КонецЕсли - // АПК:488-вкл - // АПК:547-вкл - - // Локализация конец + // Транслитерация, используемая в загранпаспортах 1997-2010. + Правила.Вставить("а","a"); + Правила.Вставить("б","b"); + Правила.Вставить("в","v"); + Правила.Вставить("г","g"); + Правила.Вставить("д","d"); + Правила.Вставить("е","e"); + Правила.Вставить("ё","e"); // АПК:163 требуется транслитерация. + Правила.Вставить("ж","zh"); + Правила.Вставить("з","z"); + Правила.Вставить("и","i"); + Правила.Вставить("й","y"); + Правила.Вставить("к","k"); + Правила.Вставить("л","l"); + Правила.Вставить("м","m"); + Правила.Вставить("н","n"); + Правила.Вставить("о","o"); + Правила.Вставить("п","p"); + Правила.Вставить("р","r"); + Правила.Вставить("с","s"); + Правила.Вставить("т","t"); + Правила.Вставить("у","u"); + Правила.Вставить("ф","f"); + Правила.Вставить("х","kh"); + Правила.Вставить("ц","ts"); + Правила.Вставить("ч","ch"); + Правила.Вставить("ш","sh"); + Правила.Вставить("щ","shch"); + Правила.Вставить("ъ",""); // Пропускается. + Правила.Вставить("ы","y"); + Правила.Вставить("ь",""); // Пропускается. + Правила.Вставить("э","e"); + Правила.Вставить("ю","yu"); + Правила.Вставить("я","ya"); КонецПроцедуры diff --git a/SSL/src/CommonModules/СтандартныеПодсистемыПовтИсп/Module.bsl b/SSL/src/CommonModules/СтандартныеПодсистемыПовтИсп/Module.bsl index 8b9be7024..f336a9e88 100644 --- a/SSL/src/CommonModules/СтандартныеПодсистемыПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/СтандартныеПодсистемыПовтИсп/Module.bsl @@ -213,8 +213,9 @@ // - Пустая строка - любого РИБ // - "СФильтром" - РИБ с фильтром // - "Полный" - РИБ без фильтров. -// -// Возвращаемое значение: Булево. +// +// Возвращаемое значение: +// Булево - // Функция ИспользуетсяРИБ(ФильтрПоНазначению = "") Экспорт @@ -235,8 +236,9 @@ // - Пустая строка - будут возвращены все узлы РИБ // - "СФильтром" - будут возвращены узлы РИБ с фильтром // - "Полный" - будут возвращены узлы РИБ без фильтров. -// -// Возвращаемое значение: СписокЗначений. +// +// Возвращаемое значение: +// СписокЗначений - . // Функция УзлыРИБ(ФильтрПоНазначению = "") Экспорт @@ -454,6 +456,10 @@ КонецФункции +Функция ЭтоФоновоеЗадание() Экспорт + Возврат ПолучитьТекущийСеансИнформационнойБазы().ПолучитьФоновоеЗадание() <> Неопределено; +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Для справочника ИдентификаторыОбъектовМетаданных. @@ -479,6 +485,13 @@ КонецФункции +// Только для внутреннего использования. +Функция ПредставлениеИдентификатораОбъектаМетаданных(Ссылка) Экспорт + + Возврат Справочники.ИдентификаторыОбъектовМетаданных.ПредставлениеИдентификатора(Ссылка); + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Работа с предопределенными данными. @@ -492,9 +505,9 @@ // - Планы видов характеристик, // - Планы счетов, // - Планы видов расчета. -// +// // Возвращаемое значение: -// ФиксированноеСоответствие, Неопределено, где +// ФиксированноеСоответствие - , Неопределено, где // * Ключ - Строка - имя предопределенного, // * Значение - Ссылка, Null - ссылка предопределенного или Null, если объекта нет в ИБ. // diff --git a/SSL/src/CommonModules/СтандартныеПодсистемыСервер/Module.bsl b/SSL/src/CommonModules/СтандартныеПодсистемыСервер/Module.bsl index 55ae4625d..df7e24d26 100644 --- a/SSL/src/CommonModules/СтандартныеПодсистемыСервер/Module.bsl +++ b/SSL/src/CommonModules/СтандартныеПодсистемыСервер/Module.bsl @@ -32,6 +32,8 @@ ПараметрыСеанса.ПараметрыКлиентаНаСервере = Новый ФиксированноеСоответствие(Новый Соответствие); Справочники.ВерсииРасширений.УстановкаПараметровСеанса(ИменаПараметровСеанса, УстановленныеПараметры); + МультиязычностьСервер.УстановкаПараметровСеанса(ИменаПараметровСеанса, УстановленныеПараметры); + // При установке соединения с информационной базой до вызова всех остальных обработчиков. ПередЗапускомПрограммы(); Возврат УстановленныеПараметры; @@ -48,6 +50,7 @@ КонецЕсли; Справочники.ВерсииРасширений.УстановкаПараметровСеанса(ИменаПараметровСеанса, УстановленныеПараметры); + МультиязычностьСервер.УстановкаПараметровСеанса(ИменаПараметровСеанса, УстановленныеПараметры); Если ИменаПараметровСеанса.Найти("БуферОбмена") <> Неопределено Тогда ПараметрыСеанса.БуферОбмена = Новый ФиксированнаяСтруктура(Новый Структура("Источник, Данные")); @@ -162,11 +165,11 @@ И ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда Если Не Пользователи.ЭтоПолноправныйПользователь() Тогда - ВызватьИсключение НСтр("ru ='Недостаточно прав для выполнения операции'"); + ВызватьИсключение НСтр("ru = 'Недостаточно прав для выполнения операции'"); КонецЕсли; Иначе Если Не Пользователи.ЭтоПолноправныйПользователь(, Истина) Тогда - ВызватьИсключение НСтр("ru ='Недостаточно прав для выполнения операции'"); + ВызватьИсключение НСтр("ru = 'Недостаточно прав для выполнения операции'"); КонецЕсли; КонецЕсли; @@ -260,20 +263,18 @@ УсловноеОформление.ИдентификаторПользовательскойНастройки = "ОсновноеОформление"; КонецЕсли; - // По умолчанию используется представление "10.06.2012". + // Представление даты. ЭлементОформления = УсловноеОформление.Элементы.Добавить(); ЭлементОформления.Использование = Истина; - ЭлементОформления.Представление = НСтр("ru = 'Представление даты: ""10.06.2012""'"); ЭлементОформления.Оформление.УстановитьЗначениеПараметра("Формат", "ДЛФ=D"); ОформляемоеПоле = ЭлементОформления.Поля.Элементы.Добавить(); ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных(ИмяОформляемогоПоля); - // Для сегодняшнего дня используется представления "09:46". + // Представление даты сегодня. ЭлементОформления = УсловноеОформление.Элементы.Добавить(); ЭлементОформления.Использование = Истина; - ЭлементОформления.Представление = НСтр("ru = 'Представление даты сегодня: ""09:46""'"); - ЭлементОформления.Оформление.УстановитьЗначениеПараметра("Формат", "ДФ=ЧЧ:мм"); + ЭлементОформления.Оформление.УстановитьЗначениеПараметра("Формат", НСтр("ru = 'ДФ=ЧЧ:мм'")); ОформляемоеПоле = ЭлементОформления.Поля.Элементы.Добавить(); ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных(ИмяОформляемогоПоля); @@ -403,6 +404,12 @@ КонецФункции +#Область УстаревшиеПроцедурыИФункции + +// Устарела. Веб-клиент более не поддерживает конфигурации, которые используют интерфейс версии 8.2. +// При работе в веб-клиенте отключена возможность переключения интерфейса +// между интерфейсом версии 8.2 и интерфейсом Такси. +// // Устанавливает жирное оформление шрифта заголовков групп формы для их корректного отображения в интерфейсе 8.2. // В интерфейсе "Такси" заголовки групп с обычным выделением и без выделения выводятся большим шрифтом. // В интерфейсе 8.2 такие заголовки выводятся как обычные надписи и не ассоциируются с заголовками. @@ -419,33 +426,14 @@ // Процедура УстановитьОтображениеЗаголовковГрупп(Форма, ИменаГрупп = "") Экспорт - Если КлиентскоеПриложение.ТекущийВариантИнтерфейса() = ВариантИнтерфейсаКлиентскогоПриложения.Версия8_2 Тогда - ЖирныйШрифт = Новый Шрифт(,, Истина); - Если НЕ ЗначениеЗаполнено(ИменаГрупп) Тогда - Для Каждого Элемент Из Форма.Элементы Цикл - Если Тип(Элемент) = Тип("ГруппаФормы") - И Элемент.Вид = ВидГруппыФормы.ОбычнаяГруппа - И Элемент.ОтображатьЗаголовок = Истина - И (Элемент.Отображение = ОтображениеОбычнойГруппы.ОбычноеВыделение - Или Элемент.Отображение = ОтображениеОбычнойГруппы.Нет) Тогда - Элемент.ШрифтЗаголовка = ЖирныйШрифт; - КонецЕсли; - КонецЦикла; - Иначе - МассивЗаголовков = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ИменаГрупп,,, Истина); - Для Каждого ИмяЗаголовка Из МассивЗаголовков Цикл - Элемент = Форма.Элементы[ИмяЗаголовка]; - Если Элемент.Отображение = ОтображениеОбычнойГруппы.ОбычноеВыделение ИЛИ Элемент.Отображение = ОтображениеОбычнойГруппы.Нет Тогда - Элемент.ШрифтЗаголовка = ЖирныйШрифт; - КонецЕсли; - КонецЦикла; - КонецЕсли; - КонецЕсли; - + // Ничего не выполняется. + КонецПроцедуры #КонецОбласти +#КонецОбласти + #Область СлужебныйПрограммныйИнтерфейс //////////////////////////////////////////////////////////////////////////////// @@ -665,14 +653,15 @@ Процедура ВосстановитьПредопределенныеЭлементы() Экспорт Если ПланыОбмена.ГлавныйУзел() <> Неопределено Тогда - ВызватьИсключение НСтр("ru = 'Восстановление предопределенных элементов следует выполнять только в главном узле РИБ. - |Затем выполнить синхронизацию с подчиненными узлами.'"); + ВызватьИсключение + НСтр("ru = 'Восстановление предопределенных элементов следует выполнять только в главном узле РИБ. + |Затем выполнить синхронизацию с подчиненными узлами.'"); КонецЕсли; НачатьТранзакцию(); Попытка УстановитьИнициализациюВсехПредопределенныхДанных(); - УстановитьОбновлениеПредопределенныхДанныхИнформационнойБазы(ОбновлениеПредопределенныхДанных.Авто); + СоздатьНедостающиеПредопределенныеДанные(); ЗафиксироватьТранзакцию(); @@ -681,7 +670,7 @@ ВызватьИсключение; КонецПопытки; -КонецПроцедуры +КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// // Процедуры для установки/получения параметров работы расширений (кэшей). @@ -725,6 +714,7 @@ ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания( Метаданные.РегламентныеЗадания.УдалениеУстаревшихПараметровРаботыВерсийРасширений); + УстановитьПривилегированныйРежим(Истина); Справочники.ВерсииРасширений.УдалитьУстаревшиеВерсииПараметров(); КонецПроцедуры @@ -736,6 +726,247 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// Начальное заполнение элементов данными. + +Процедура ЗаполнитьЭлементыНачальнымиДанными(ОбновитьМультиязычныеСтроки = Ложь) Экспорт + + ОбъектыСНачальнымЗаполнением = ОбъектыСНачальнымЗаполнением(); + Языки = ЯзыкиКонфигурации(); + ЛокализуемыеРеквизиты = Новый Соответствие; + + Для Каждого МетаданныеОбъекта Из ОбъектыСНачальнымЗаполнением Цикл + + ЛокализуемыеРеквизитыОбъекта = МультиязычностьСервер.НаименованияЛокализуемыхРеквизитыОбъекта(МетаданныеОбъекта); + + МультиязычныеСтрокиВРеквизитах = МультиязычностьСервер.МультиязычныеСтрокиВРеквизитах(МетаданныеОбъекта); + + МенеджерОбъекта = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(МетаданныеОбъекта.ПолноеИмя()); + ПредопределенныеДанные = ПредопределенныеДанныеОбъекта(МетаданныеОбъекта, МенеджерОбъекта, ЛокализуемыеРеквизитыОбъекта); + НастройкиПредопределенныхЭлементов = НастройкиПредопределенныхЭлементов(МенеджерОбъекта, ПредопределенныеДанные); + + РеквизитыИсключения = ?(СтрНачинаетсяС(МетаданныеОбъекта.ПолноеИмя(), "ПланВидовХарактеристик"), "ТипЗначения", ""); + ПоддерживаетсяИерархия = ПредопределенныеДанные.Колонки.Найти("ЭтоГруппа") <> Неопределено; + + НачатьТранзакцию(); + Попытка + + Для каждого СтрокаТаблицы Из ПредопределенныеДанные Цикл + + Если ЗначениеЗаполнено(СтрокаТаблицы.ИмяПредопределенныхДанных) Тогда + + СсылкаНаОбъект = МенеджерОбъекта[СтрокаТаблицы.ИмяПредопределенныхДанных]; + + БлокировкаДанных = Новый БлокировкаДанных; + ЭлементБлокировкиДанных = БлокировкаДанных.Добавить(МетаданныеОбъекта.ПолноеИмя()); + ЭлементБлокировкиДанных.УстановитьЗначение("Ссылка", СсылкаНаОбъект); + БлокировкаДанных.Заблокировать(); + + ЗаполняемыйЭлемент = СсылкаНаОбъект.ПолучитьОбъект(); + + ИначеЕсли Не ОбновитьМультиязычныеСтроки Тогда + Если ПоддерживаетсяИерархия И СтрокаТаблицы.ЭтоГруппа = Истина Тогда + ЗаполняемыйЭлемент = МенеджерОбъекта.СоздатьГруппу(); + Иначе + ЗаполняемыйЭлемент = МенеджерОбъекта.СоздатьЭлемент(); + КонецЕсли; + Иначе + Продолжить; + КонецЕсли; + + Если Не ОбновитьМультиязычныеСтроки Тогда + ЗаполнитьЗначенияСвойств(ЗаполняемыйЭлемент, СтрокаТаблицы,, РеквизитыИсключения); + КонецЕсли; + + Если ЛокализуемыеРеквизитыОбъекта.Количество() > 0 Тогда + Если МультиязычныеСтрокиВРеквизитах Тогда + + КодЯзыка = ОбщегоНазначения.КодОсновногоЯзыка(); + Если ЗначениеЗаполнено(КодЯзыка) Тогда + Для каждого ИмяЛокализуемогоРеквизита Из ЛокализуемыеРеквизитыОбъекта Цикл + ЗаполняемыйЭлемент[ИмяЛокализуемогоРеквизита.Ключ] = СтрокаТаблицы[ИмяЛокализуемогоРеквизита.Ключ + "_" + КодЯзыка]; + КонецЦикла; + КонецЕсли; + + КодЯзыка = МультиязычностьСервер.КодПервогоДополнительногоЯзыкаИнформационнойБазы(); + Если ЗначениеЗаполнено(КодЯзыка) Тогда + Для каждого ИмяЛокализуемогоРеквизита Из ЛокализуемыеРеквизитыОбъекта Цикл + ЗаполняемыйЭлемент[ИмяЛокализуемогоРеквизита.Ключ + "Язык1"] = СтрокаТаблицы[ИмяЛокализуемогоРеквизита.Ключ + "_" + КодЯзыка]; + КонецЦикла; + КонецЕсли; + + КодЯзыка = МультиязычностьСервер.КодВторогоДополнительногоЯзыкаИнформационнойБазы(); + Если ЗначениеЗаполнено(КодЯзыка) Тогда + Для каждого ИмяЛокализуемогоРеквизита Из ЛокализуемыеРеквизитыОбъекта Цикл + ЗаполняемыйЭлемент[ИмяЛокализуемогоРеквизита.Ключ + "Язык2"] = СтрокаТаблицы[ИмяЛокализуемогоРеквизита.Ключ + "_" + КодЯзыка]; + КонецЦикла; + КонецЕсли; + + Иначе + + Для каждого КодЯзыка Из Языки Цикл + НовоеПредставление = ЗаполняемыйЭлемент.Представления.Добавить(); + НовоеПредставление.КодЯзыка = КодЯзыка; + Для каждого ИмяЛокализуемогоРеквизита Из ЛокализуемыеРеквизитыОбъекта Цикл + Значение = СтрокаТаблицы[ИмяЛокализуемогоРеквизита.Ключ + "_" + КодЯзыка]; + НовоеПредставление[ИмяЛокализуемогоРеквизита.Ключ] = ?(ЗначениеЗаполнено(Значение), Значение, СтрокаТаблицы[ИмяЛокализуемогоРеквизита.Ключ]); + КонецЦикла; + КонецЦикла; + + КонецЕсли; + КонецЕсли; + + Если Не ОбновитьМультиязычныеСтроки И НастройкиПредопределенныхЭлементов.ПриНачальномЗаполненииЭлемента Тогда + МенеджерОбъекта.ПриНачальномЗаполненииЭлемента(ЗаполняемыйЭлемент, СтрокаТаблицы, НастройкиПредопределенныхЭлементов.ДополнительныеПараметры); + КонецЕсли; + + ОбновлениеИнформационнойБазы.ЗаписатьОбъект(ЗаполняемыйЭлемент); + + СтрокаТаблицы.Ссылка = ЗаполняемыйЭлемент.Ссылка; + + КонецЦикла; + + ЗафиксироватьТранзакцию(); + + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + + КонецЦикла; + +КонецПроцедуры + +// Регистрация для отложенного обработчика. +// +Процедура ЗарегистрироватьПредопределенныеЭлементыДляОбновления(Параметры) Экспорт + + ОбъектыСПредопределеннымиЭлементами = ОбъектыСНачальнымЗаполнением(); + ОбъектыКОбработке = Новый Массив; + + Язык1 = МультиязычностьСервер.КодПервогоДополнительногоЯзыкаИнформационнойБазы(); + Язык2 = МультиязычностьСервер.КодВторогоДополнительногоЯзыкаИнформационнойБазы(); + ОсновнойЯзык = ОбщегоНазначения.КодОсновногоЯзыка(); + + ШаблонаЗапроса = "ВЫБРАТЬ + | Таблица.Ссылка КАК Ссылка, + | Таблица.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных, + | %1 + |ИЗ + | %2 КАК Таблица + |ГДЕ + | Таблица.Предопределенный = ИСТИНА"; + + Для каждого ОбъектМетаданных Из ОбъектыСПредопределеннымиЭлементами Цикл + + ЛокализуемыеРеквизитыОбъекта = МультиязычностьСервер.НаименованияЛокализуемыхРеквизитыОбъекта(ОбъектМетаданных); + Если ЛокализуемыеРеквизитыОбъекта.Количество() = 0 Тогда + Продолжить; + КонецЕсли; + + ИмяРеквизитОбъекта = Новый Массив; + Для каждого РеквизитОбъекта Из ЛокализуемыеРеквизитыОбъекта Цикл + + ИмяРеквизита = "Таблица." + РеквизитОбъекта.Ключ; + ИмяРеквизитОбъекта.Добавить(ИмяРеквизита); + + Если ЗначениеЗаполнено(Язык1) Тогда + ИмяРеквизитОбъекта.Добавить(ИмяРеквизита + "Язык1"); + КонецЕсли; + Если ЗначениеЗаполнено(Язык2) Тогда + ИмяРеквизитОбъекта.Добавить(ИмяРеквизита + "Язык2"); + КонецЕсли; + + КонецЦикла; + + ТекстЗапроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонаЗапроса, СтрСоединить(ИмяРеквизитОбъекта, ", " + Символы.ПС), ОбъектМетаданных.ПолноеИмя()); + Запрос = Новый Запрос(ТекстЗапроса); + + РезультатЗапроса = Запрос.Выполнить(); + Если РезультатЗапроса.Пустой() Тогда + Продолжить; + КонецЕсли; + + МенеджерОбъекта = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ОбъектМетаданных.ПолноеИмя()); + ПредопределенныеДанные = ПредопределенныеДанныеОбъекта(ОбъектМетаданных, МенеджерОбъекта, ЛокализуемыеРеквизитыОбъекта); + НастройкиПредопределенныхЭлементов = НастройкиПредопределенныхЭлементов(МенеджерОбъекта, ПредопределенныеДанные); + + ДанныеЗапроса = РезультатЗапроса.Выбрать(); + Пока ДанныеЗапроса.Следующий() Цикл + Элемент = ПредопределенныеДанные.Найти(ДанныеЗапроса.ИмяПредопределенныхДанных, "ИмяПредопределенныхДанных"); + Если Элемент <> Неопределено Тогда + Для каждого ОписаниеРеквизита Из ЛокализуемыеРеквизитыОбъекта Цикл + ИмяРеквизита = ОписаниеРеквизита.Ключ; + + Если СтрСравнить(Элемент[МультиязычностьСервер.ИмяЛокализуемогоРеквизита(ИмяРеквизита, ОсновнойЯзык)], ДанныеЗапроса[ИмяРеквизита]) <> 0 Тогда + ОбъектыКОбработке.Добавить(ДанныеЗапроса.Ссылка); + Продолжить; + КонецЕсли; + + Если ЗначениеЗаполнено(Язык1) + И СтрСравнить(Элемент[МультиязычностьСервер.ИмяЛокализуемогоРеквизита(ИмяРеквизита, Язык1)], ДанныеЗапроса[ИмяРеквизита + "Язык1"]) <> 0 Тогда + ОбъектыКОбработке.Добавить(ДанныеЗапроса.Ссылка); + Продолжить; + КонецЕсли; + + Если ЗначениеЗаполнено(Язык2) + И СтрСравнить(Элемент[МультиязычностьСервер.ИмяЛокализуемогоРеквизита(ИмяРеквизита, Язык2)], ДанныеЗапроса[ИмяРеквизита + "Язык2"]) <> 0 Тогда + ОбъектыКОбработке.Добавить(ДанныеЗапроса.Ссылка); + КонецЕсли; + + КонецЦикла; + КонецЕсли; + КонецЦикла; + + КонецЦикла; + + Если ОбъектыКОбработке.Количество() > 0 Тогда + ОбновлениеИнформационнойБазы.ОтметитьКОбработке(Параметры, ОбъектыКОбработке); + КонецЕсли; + +КонецПроцедуры + +Процедура ОбновитьПредставленияПредопределенныхЭлементов(Параметры) Экспорт + + ОбъектыСПредопределеннымиЭлементами = ОбъектыСНачальнымЗаполнением(); + + ОбъектМетаданных = Неопределено; + ОбъектыДляОбработкиОтсутствуют = Истина; + СсылкиНаОбъект = Новый Массив; + + Для каждого ОбъектСПредопределеннымиЭлементами Из ОбъектыСПредопределеннымиЭлементами Цикл + СсылкиНаОбъект = ОбновлениеИнформационнойБазы.ВыбратьСсылкиДляОбработки(Параметры.Очередь, ОбъектСПредопределеннымиЭлементами.ПолноеИмя()); + Если СсылкиНаОбъект.Количество() > 0 Тогда + ОбъектыДляОбработкиОтсутствуют = Ложь; + Параметры.ОбработкаЗавершена = Ложь; + ОбъектМетаданных = ОбъектСПредопределеннымиЭлементами; + Прервать; + КонецЕсли; + КонецЦикла; + + Если ОбъектыДляОбработкиОтсутствуют Тогда + Параметры.ОбработкаЗавершена = Истина; + Возврат; + КонецЕсли; + + СсылкаНаОбъект = ОбновлениеИнформационнойБазы.ВыбратьСсылкиДляОбработки(Параметры.Очередь, ОбъектМетаданных.ПолноеИмя()); + + Результат = ОбновитьПредставленияПредопределенныхЭлементовОбъекта(СсылкаНаОбъект, ОбъектМетаданных); + + Если Результат.ОбъектовОбработано = 0 И Результат.ПроблемныхОбъектов <> 0 Тогда + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Процедуре ОбновитьПредставленияПредопределенныхЭлементов не удалось обработать некоторые элементы(пропущены): %1'"), + Результат.ПроблемныхОбъектов); + ВызватьИсключение ТекстСообщения; + Иначе + ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Информация, + ОбъектМетаданных,, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Процедура ОбновитьПредставленияПредопределенныхЭлементов обработала очередную порцию элементов: %1'"), + Результат.ОбъектовОбработано)); + КонецЕсли; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Дополнительная базовая функциональность для обмена данными. @@ -892,9 +1123,7 @@ // Отправка идентификаторов объектов метаданных выполняется в другой секции сообщения обмена. ИгнорироватьОтправкуИдентификаторовОбъектовМетаданных(ЭлементДанных, ОтправкаЭлемента, СозданиеНачальногоОбраза); - ИгнорироватьОтправкуДанныхОбработанныхВЦентральномУзлеРИБПриОбновленииИБ(ЭлементДанных, СозданиеНачальногоОбраза, Получатель); - Если ОтправкаЭлемента = ОтправкаЭлементаДанных.Игнорировать Тогда Возврат; КонецЕсли; @@ -1028,9 +1257,9 @@ // // Параметры: // ОбъектМетаданных - ОбъектМетаданных - регистр или ссылочный объект. -// +// // Возвращаемое значение: -// Тип. +// Тип - . // Функция ТипСсылкиИлиКлючаЗаписиОбъектаМетаданных(ОбъектМетаданных) Экспорт @@ -1062,9 +1291,9 @@ // // Параметры: // ОбъектМетаданных - ОбъектМетаданных - регистр или ссылочный объект. -// +// // Возвращаемое значение: -// Тип. +// Тип - . // Функция ТипОбъектаИлиНабораЗаписейОбъектаМетаданных(ОбъектМетаданных) Экспорт @@ -1323,6 +1552,17 @@ Возврат Ложь; КонецФункции +// Возвращает представление начальной (главной) страницы. +// +// Возвращаемое значение: +// Строка - представление начальной страницы. +// +Функция ПредставлениеНачальнойСтраницы() Экспорт + + Возврат НСтр("ru = 'Главное'"); + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Обработчики событий подсистем конфигурации. @@ -1499,6 +1739,10 @@ Обработчик.ОбщиеДанные = Истина; Обработчик.МонопольныйРежим = Ложь; + Обработчик = Обработчики.Добавить(); + Обработчик.НачальноеЗаполнение = Истина; + Обработчик.Процедура = "СтандартныеПодсистемыСервер.ЗаполнитьЭлементыНачальнымиДанными"; + КонецПроцедуры #КонецОбласти @@ -1575,7 +1819,7 @@ Параметры.Вставить("ЭтоУчебнаяПлатформа", ЭтоУчебнаяПлатформа()); Параметры.Вставить("ИмяТекущегоПользователя", ТекущийПользователь().Имя); Параметры.Вставить("ИмяCOMСоединителя", ОбщегоНазначенияКлиентСервер.ИмяCOMСоединителя()); - Параметры.Вставить("КодОсновногоЯзыка", Метаданные.ОсновнойЯзык.КодЯзыка); + Параметры.Вставить("КодОсновногоЯзыка", ОбщегоНазначения.КодОсновногоЯзыка()); Параметры.Вставить("ЗапрашиватьПодтверждениеПриЗавершенииПрограммы", ЗапрашиватьПодтверждениеПриЗавершенииПрограммы()); @@ -1595,7 +1839,9 @@ Параметры.Вставить("ИнформационнаяБазаФайловая", ОбщегоНазначения.ИнформационнаяБазаФайловая()); Если ЭтоВызовПередНачаломРаботыСистемы Тогда - Параметры.Вставить("ЭлементыСтиля", ЭлементыСтиля()); + + Параметры.Вставить("ЭлементыСтиля", НаборЭлементовСтиля()); + КонецЕсли; Если ЭтоВызовПередНачаломРаботыСистемы @@ -1655,6 +1901,16 @@ КонецЕсли; УстановитьПривилегированныйРежим(Ложь); + Если ЭтоВызовПередНачаломРаботыСистемы + И Не Параметры.ПолученныеПараметрыКлиента.Свойство("ВыбратьНачальныеРегиональныеНастройкиИБ") + И ТребуетсяУстановкаРегиональныхНастроекИнформационнойБазы() Тогда + + Параметры.Вставить("ВыбратьНачальныеРегиональныеНастройкиИБ", + Пользователи.ЭтоПолноправныйПользователь(, Истина, Ложь)); + СтандартныеПодсистемыВызовСервера.СкрытьРабочийСтолПриНачалеРаботыСистемы(); + Возврат Ложь; + КонецЕсли; + Если ЭтоВызовПередНачаломРаботыСистемы И НЕ (Параметры.РазделениеВключено И Не Параметры.ДоступноИспользованиеРазделенныхДанных) И ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса") Тогда @@ -1787,7 +2043,7 @@ Параметры.Вставить("ЭтоБазоваяВерсияКонфигурации", ЭтоБазоваяВерсияКонфигурации()); Параметры.Вставить("ЭтоУчебнаяПлатформа", ЭтоУчебнаяПлатформа()); Параметры.Вставить("ИмяCOMСоединителя", ОбщегоНазначенияКлиентСервер.ИмяCOMСоединителя()); - Параметры.Вставить("ЭлементыСтиля", ЭлементыСтиля()); + Параметры.Вставить("ЭлементыСтиля", НаборЭлементовСтиля()); ДобавитьОбщиеПараметрыРаботыКлиента(Параметры); @@ -1795,7 +2051,7 @@ Параметры.Вставить("СинонимКонфигурации", Метаданные.Синоним); Параметры.Вставить("ВерсияКонфигурации", Метаданные.Версия); Параметры.Вставить("ПодробнаяИнформация", Метаданные.ПодробнаяИнформация); - Параметры.Вставить("КодОсновногоЯзыка", Метаданные.ОсновнойЯзык.КодЯзыка); + Параметры.Вставить("КодОсновногоЯзыка", ОбщегоНазначения.КодОсновногоЯзыка()); Параметры.Вставить("ЗапрашиватьПодтверждениеПриЗавершенииПрограммы", ЗапрашиватьПодтверждениеПриЗавершенииПрограммы()); @@ -1984,8 +2240,8 @@ ЗаполнитьЗначенияСвойств(Параметры, Источник); Если (Источник.ИмяПредопределенныхДанных = "" - И Параметры.ИмяПредопределенногоНабора = "" - И Параметры.ИмяПредопределенногоВида = "") Тогда + И Параметры.ИмяПредопределенногоНабора = "" + И Параметры.ИмяПредопределенногоВида = "") Тогда Возврат; КонецЕсли; @@ -2148,23 +2404,46 @@ Процедура УстановитьИнициализациюВсехПредопределенныхДанных() + РазделениеВключено = ОбщегоНазначения.РазделениеВключено(); + ЭтоРазделенныйСеанс = ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных(); + КоллекцииМетаданных = Новый Массив; КоллекцииМетаданных.Добавить(Метаданные.Справочники); КоллекцииМетаданных.Добавить(Метаданные.ПланыВидовХарактеристик); КоллекцииМетаданных.Добавить(Метаданные.ПланыСчетов); КоллекцииМетаданных.Добавить(Метаданные.ПланыВидовРасчета); - Для каждого Коллекция Из КоллекцииМетаданных Цикл + Для Каждого Коллекция Из КоллекцииМетаданных Цикл Для Каждого ОбъектМетаданных Из Коллекция Цикл + + Если РазделениеВключено Тогда + + МодульРаботаВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("РаботаВМоделиСервиса"); + ЭтоРазделенныйОбъектМетаданных = МодульРаботаВМоделиСервиса.ЭтоРазделенныйОбъектМетаданных(ОбъектМетаданных); + + Если ( ЭтоРазделенныйСеанс И Не ЭтоРазделенныйОбъектМетаданных) + Или (Не ЭтоРазделенныйСеанс И ЭтоРазделенныйОбъектМетаданных) Тогда + Продолжить; + КонецЕсли; + + КонецЕсли; + Менеджер = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ОбъектМетаданных.ПолноеИмя()); Менеджер.УстановитьИнициализациюПредопределенныхДанных(Истина); КонецЦикла; КонецЦикла; + Если Не РазделениеВключено Или Не ЭтоРазделенныйСеанс Тогда + УстановитьОбновлениеПредопределенныхДанныхИнформационнойБазы(ОбновлениеПредопределенныхДанных.Авто); + КонецЕсли; + КонецПроцедуры Процедура СоздатьНедостающиеПредопределенныеДанные() + РазделениеВключено = ОбщегоНазначения.РазделениеВключено(); + ЭтоРазделенныйСеанс = ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных(); + КоллекцииМетаданных = Новый Массив; КоллекцииМетаданных.Добавить(Метаданные.Справочники); КоллекцииМетаданных.Добавить(Метаданные.ПланыВидовХарактеристик); @@ -2173,23 +2452,37 @@ Запрос = Новый Запрос; ТекстЗапроса = - "ВЫБРАТЬ - | ПсевдонимЗаданнойТаблицы.Ссылка КАК Ссылка, - | ЕСТЬNULL(ПсевдонимЗаданнойТаблицы.Родитель.ИмяПредопределенныхДанных, """") КАК ИмяРодителя, - | ПсевдонимЗаданнойТаблицы.ИмяПредопределенныхДанных КАК Имя - |ИЗ - | &ТекущаяТаблица КАК ПсевдонимЗаданнойТаблицы - |ГДЕ - | ПсевдонимЗаданнойТаблицы.Предопределенный"; + "ВЫБРАТЬ + | ПсевдонимЗаданнойТаблицы.Ссылка КАК Ссылка, + | ЕСТЬNULL(ПсевдонимЗаданнойТаблицы.Родитель.ИмяПредопределенныхДанных, """") КАК ИмяРодителя, + | ПсевдонимЗаданнойТаблицы.ИмяПредопределенныхДанных КАК Имя + |ИЗ + | &ТекущаяТаблица КАК ПсевдонимЗаданнойТаблицы + |ГДЕ + | ПсевдонимЗаданнойТаблицы.Предопределенный"; ОписанияСохраненных = Новый Массив; Для Каждого Коллекция Из КоллекцииМетаданных Цикл ЭтоПланСчетов = (Коллекция = Метаданные.ПланыСчетов); Для Каждого ОбъектМетаданных Из Коллекция Цикл + + Если РазделениеВключено Тогда + + МодульРаботаВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("РаботаВМоделиСервиса"); + ЭтоРазделенныйОбъектМетаданных = МодульРаботаВМоделиСервиса.ЭтоРазделенныйОбъектМетаданных(ОбъектМетаданных); + + Если ( ЭтоРазделенныйСеанс И Не ЭтоРазделенныйОбъектМетаданных) + Или (Не ЭтоРазделенныйСеанс И ЭтоРазделенныйОбъектМетаданных) Тогда + Продолжить; + КонецЕсли; + + КонецЕсли; + Если ОбъектМетаданных.ОбновлениеПредопределенныхДанных = Метаданные.СвойстваОбъектов.ОбновлениеПредопределенныхДанных.НеОбновлятьАвтоматически Тогда Продолжить; КонецЕсли; + ПолноеИмя = ОбъектМетаданных.ПолноеИмя(); Запрос.Текст = СтрЗаменить(ТекстЗапроса, "&ТекущаяТаблица", ПолноеИмя); @@ -2283,7 +2576,7 @@ ПредопределенныеСуществуют = Ложь; ТаблицаИмен.Колонки.Добавить("ОбъектСуществует", Новый ОписаниеТипов("Булево")); - Для каждого Имя Из Имена Цикл + Для Каждого Имя Из Имена Цикл Строки = ТаблицаИмен.НайтиСтроки(Новый Структура("Имя", Имя)); Если Строки.Количество() = 0 Тогда ТребуетсяИнициализация = Истина; @@ -2307,28 +2600,28 @@ ОписанияСохраненных.Добавить(ОписаниеСохраненных); ТаблицаИмен.Колонки.Добавить("Объект"); - Для каждого Строка Из ТаблицаИмен Цикл - Если Строка.ОбъектСуществует Тогда - Объект = Строка.Ссылка.ПолучитьОбъект(); - Объект.ИмяПредопределенныхДанных = ""; - Если ЭтоПланСчетов Тогда - СтрокиПредопределенныхВидовСубконто = Новый Массив; - Для Каждого СтрокаВидаСубконто Из Объект.ВидыСубконто Цикл - Если СтрокаВидаСубконто.Предопределенное Тогда - СтрокаВидаСубконто.Предопределенное = Ложь; - СтрокиПредопределенныхВидовСубконто.Добавить(СтрокаВидаСубконто); - КонецЕсли; - КонецЦикла; - КонецЕсли; - ОбновлениеИнформационнойБазы.ЗаписатьДанные(Объект); - Если ЭтоПланСчетов Тогда - Для Каждого СтрокаВидаСубконто Из СтрокиПредопределенныхВидовСубконто Цикл - СтрокаВидаСубконто.Предопределенное = Истина; - КонецЦикла; - КонецЕсли; - Объект.ИмяПредопределенныхДанных = Строка.Имя; - Строка.Объект = Объект; + Для Каждого Строка Из ТаблицаИмен Цикл + Объект = Строка.Ссылка.ПолучитьОбъект(); + Объект.ИмяПредопределенныхДанных = ""; + Если ЭтоПланСчетов Тогда + СтрокиПредопределенныхВидовСубконто = Новый Массив; + Для Каждого СтрокаВидаСубконто Из Объект.ВидыСубконто Цикл + Если СтрокаВидаСубконто.Предопределенное Тогда + СтрокаВидаСубконто.Предопределенное = Ложь; + СтрокиПредопределенныхВидовСубконто.Добавить(СтрокаВидаСубконто); + КонецЕсли; + КонецЦикла; КонецЕсли; + ОбновлениеИнформационнойБазы.ЗаписатьДанные(Объект); + Если ЭтоПланСчетов Тогда + Для Каждого СтрокаВидаСубконто Из СтрокиПредопределенныхВидовСубконто Цикл + СтрокаВидаСубконто.Предопределенное = Истина; + КонецЦикла; + КонецЕсли; + Если Строка.ОбъектСуществует Тогда + Объект.ИмяПредопределенныхДанных = Строка.Имя; + КонецЕсли; + Строка.Объект = Объект; КонецЦикла; КонецЕсли; @@ -2880,8 +3173,8 @@ // Проверяет возможность выполнения обработчиков без установки безопасного режима. // -// Возвращаемое значение: -// Булево. +// Возвращаемое значение: +// Булево - // Функция ВозможноВыполнениеОбработчиковБезУстановкиБезопасногоРежима() @@ -2893,7 +3186,8 @@ // Проверяет возможность перехода в привилегированный режим из текущего безопасного режима. // -// Возвращаемое значение: Булево. +// Возвращаемое значение: +// Булево - // Функция ДоступенПереходВПривилегированныйРежим() @@ -3053,6 +3347,176 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// Начальное заполнение элементов данными. + +Процедура ДобавитьКолонкуТаблицыПредопределенныхДанных(ПредопределенныеДанные, Реквизит, ЛокализуемыеРеквизиты, Языки) + + Если ЛокализуемыеРеквизиты[Реквизит.Имя] = Истина Тогда + ПредопределенныеДанные.Колонки.Добавить(Реквизит.Имя, Реквизит.Тип, ПризнакЛокализуемогоРеквизита()); + Для каждого Язык Из Языки Цикл + ПредопределенныеДанные.Колонки.Добавить(Реквизит.Имя + "_" + Язык, Реквизит.Тип, ПризнакЛокализуемогоРеквизита()); + КонецЦикла; + Иначе + Если ЭтоЛокализуемыйРеквизит(Реквизит) Тогда + ИмяБезСуффикса = ИмяБезСуффиксаЯзык(Реквизит); + ЛокализуемыеРеквизиты.Вставить(ИмяБезСуффикса, Истина); + Для каждого Язык Из Языки Цикл + ПредопределенныеДанные.Колонки.Добавить(ИмяБезСуффикса + "_" + Язык, Реквизит.Тип, ПризнакЛокализуемогоРеквизита()); + КонецЦикла; + Иначе + ПредопределенныеДанные.Колонки.Добавить(Реквизит.Имя, Реквизит.Тип); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +Функция ОбновитьПредставленияПредопределенныхЭлементовОбъекта(СсылкаНаОбъект, ОбъектМетаданных) + + Результат = Новый Структура(); + Результат.Вставить("ПроблемныхОбъектов", 0); + Результат.Вставить("ОбъектовОбработано", 0); + + ОсновнойЯзык = ОбщегоНазначения.КодОсновногоЯзыка(); + КодЯзыка1 = МультиязычностьСервер.КодПервогоДополнительногоЯзыкаИнформационнойБазы(); + КодЯзыка2 = МультиязычностьСервер.КодВторогоДополнительногоЯзыкаИнформационнойБазы(); + + ЛокализуемыеРеквизитыОбъекта = МультиязычностьСервер.НаименованияЛокализуемыхРеквизитыОбъекта(ОбъектМетаданных); + + МенеджерОбъекта = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ОбъектМетаданных.ПолноеИмя()); + + ПредопределенныеДанные = ПредопределенныеДанныеОбъекта(ОбъектМетаданных, МенеджерОбъекта, ЛокализуемыеРеквизитыОбъекта); + НастройкиПредопределенныхЭлементов = НастройкиПредопределенныхЭлементов(МенеджерОбъекта, ПредопределенныеДанные); + + Пока СсылкаНаОбъект.Следующий() Цикл + + Попытка + + ИмяПредопределенныхДанных = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СсылкаНаОбъект.Ссылка, "ИмяПредопределенныхДанных"); + Если Не ЗначениеЗаполнено(ИмяПредопределенныхДанных) Тогда + ОбновлениеИнформационнойБазы.ОтметитьВыполнениеОбработки(СсылкаНаОбъект.Ссылка); + Продолжить; + КонецЕсли; + + Элемент = ПредопределенныеДанные.Найти(ИмяПредопределенныхДанных, "ИмяПредопределенныхДанных"); + Если Элемент <> Неопределено Тогда + Объект = СсылкаНаОбъект.Ссылка.ПолучитьОбъект(); + + Для каждого ЛокализуемыйРеквизитОбъекта Из ЛокализуемыеРеквизитыОбъекта Цикл + Имя = ЛокализуемыйРеквизитОбъекта.Ключ; + Объект[Имя] = Элемент[МультиязычностьСервер.ИмяЛокализуемогоРеквизита(Имя, ОсновнойЯзык)]; + + Если МультиязычностьСервер.ИспользуетсяПервыйДополнительныйЯзык() Тогда + Объект[Имя + "Язык1"] = Элемент[МультиязычностьСервер.ИмяЛокализуемогоРеквизита(Имя, КодЯзыка1)]; + КонецЕсли; + Если МультиязычностьСервер.ИспользуетсяВторойДополнительныйЯзык() Тогда + Объект[Имя + "Язык2"] = Элемент[МультиязычностьСервер.ИмяЛокализуемогоРеквизита(Имя, КодЯзыка2)]; + КонецЕсли; + + КонецЦикла; + ОбновлениеИнформационнойБазы.ЗаписатьДанные(Объект); + + КонецЕсли; + Результат.ОбъектовОбработано = Результат.ОбъектовОбработано + 1; + + Исключение + // Если не удалось обработать элемент, повторяем попытку снова. + Результат.ПроблемныхОбъектов = Результат.ПроблемныхОбъектов + 1; + + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось обработать элемент: %1 по причине: %2'"), + СсылкаНаОбъект.Ссылка, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + + ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Предупреждение, + ОбъектМетаданных, СсылкаНаОбъект.Ссылка, ТекстСообщения); + + КонецПопытки; + + КонецЦикла; + + Возврат Результат; + +КонецФункции + +Функция ИмяБезСуффиксаЯзык(Знач Реквизит) + + Возврат Лев(Реквизит.Имя, СтрДлина(Реквизит.Имя) - 5); + +КонецФункции + +Функция ЭтоЛокализуемыйРеквизит(Реквизит) + Возврат СтрЗаканчиваетсяНа(Реквизит.Имя, "Язык1") Или СтрЗаканчиваетсяНа(Реквизит.Имя, "Язык2"); +КонецФункции + +Функция ПризнакЛокализуемогоРеквизита() + Возврат "Локализуемый"; +КонецФункции + +Функция ЯзыкиКонфигурации() + + Языки = Новый Массив; + Для каждого Язык Из Метаданные.Языки Цикл + Языки.Добавить(Язык.КодЯзыка); + КонецЦикла; + Возврат Языки; + +КонецФункции + +Функция ОбъектыСНачальнымЗаполнением() + + НастройкиПодсистемы = ОбновлениеИнформационнойБазыСлужебный.НастройкиПодсистемы(); + ОбъектыСНачальнымЗаполнением = НастройкиПодсистемы.ОбъектыСНачальнымЗаполнением; + Возврат ОбъектыСНачальнымЗаполнением; + +КонецФункции + +Функция НастройкиПредопределенныхЭлементов(МенеджерОбъекта, ПредопределенныеДанные) + + НастройкиЗаполненияЭлементов = Новый Структура; + НастройкиЗаполненияЭлементов.Вставить("ПриНачальномЗаполненииЭлемента", Ложь); + НастройкиЗаполненияЭлементов.Вставить("ДополнительныеПараметры", Новый Структура); + НастройкиЗаполненияЭлементов.ДополнительныеПараметры.Вставить("ПредопределенныеДанные", ПредопределенныеДанные); + + МенеджерОбъекта.ПриНастройкеНачальногоЗаполненияЭлементов(НастройкиЗаполненияЭлементов); + + Возврат НастройкиЗаполненияЭлементов; + +КонецФункции + +Функция ПредопределенныеДанныеОбъекта(Знач МетаданныеОбъекта, МенеджерОбъекта, ЛокализуемыеРеквизитыОбъекта) + + Языки = ЯзыкиКонфигурации(); + + ПредопределенныеДанные = Новый ТаблицаЗначений; + + Для Каждого Реквизит Из МетаданныеОбъекта.СтандартныеРеквизиты Цикл + ДобавитьКолонкуТаблицыПредопределенныхДанных(ПредопределенныеДанные, Реквизит, ЛокализуемыеРеквизитыОбъекта, Языки); + КонецЦикла; + + Для Каждого Реквизит Из МетаданныеОбъекта.Реквизиты Цикл + ДобавитьКолонкуТаблицыПредопределенныхДанных(ПредопределенныеДанные, Реквизит, ЛокализуемыеРеквизитыОбъекта, Языки); + КонецЦикла; + + Если ПредопределенныеДанные.Колонки.Найти("ИмяПредопределенныхДанных") <> Неопределено Тогда + ПредопределенныеДанные.Индексы.Добавить("ИмяПредопределенныхДанных"); + КонецЕсли; + + МенеджерОбъекта.ПриНачальномЗаполненииЭлементов(Языки, ПредопределенныеДанные); + Возврат ПредопределенныеДанные; + +КонецФункции + +// Локализация + +Функция ТребуетсяУстановкаРегиональныхНастроекИнформационнойБазы() + + УстановитьПривилегированныйРежим(Истина); + ТребуетсяУстановкаОсновногоЯзыка = ?(Метаданные.Языки.Количество() > 1, Не ЗначениеЗаполнено(Константы.ОсновнойЯзык.Получить()), Ложь); + + Возврат ТребуетсяУстановкаОсновногоЯзыка; + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Другие процедуры и функции. @@ -3067,6 +3531,31 @@ КонецФункции +// Возвращает сериализуемый набор элементов стиля. +// +// Возвращаемое значение: +// Структура - элементы стиля +// * Ключ - Строка - имя элемента стиля. +// * Значение - Строка, ОбъектМетаданных: ЭлементСтиля - элемент стиля. Для толстого клиента обычного приложения +// элемент стиля преобразуется в системное строковое представление переданного значения. +// +Функция НаборЭлементовСтиля() + + НаборЭлементовСтиля = Новый Структура; + Для каждого ЭлементСтиля Из Метаданные.ЭлементыСтиля Цикл + + Если ТекущийРежимЗапуска() = РежимЗапускаКлиентскогоПриложения.ОбычноеПриложение Тогда + НаборЭлементовСтиля.Вставить(ЭлементСтиля.Имя, Новый ХранилищеЗначения(ЭлементСтиля.Значение)); + Иначе + НаборЭлементовСтиля.Вставить(ЭлементСтиля.Имя, ЭлементСтиля.Значение); + КонецЕсли; + + КонецЦикла; + + Возврат Новый ФиксированнаяСтруктура(НаборЭлементовСтиля); + +КонецФункции + // Для процедуры ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам. Процедура ДобавитьЗапросРазрешенийНаИспользованиеРасширений(ЗапросыРазрешений) @@ -3122,28 +3611,21 @@ Процедура ИгнорироватьОтправкуДанныхОбработанныхВЦентральномУзлеРИБПриОбновленииИБ(ЭлементДанных, СозданиеНачальногоОбраза, Получатель) - Перем Индекс, СтрокаНабора; - Если Получатель <> Неопределено И Не СозданиеНачальногоОбраза И ТипЗнч(ЭлементДанных) = Тип("РегистрСведенийНаборЗаписей.ДанныеОбработанныеВЦентральномУзлеРИБ") Тогда Индекс = ЭлементДанных.Количество() - 1; - Пока Индекс > 0 Цикл - СтрокаНабора = ЭлементДанных[Индекс]; - Если СтрокаНабора.УзелПланаОбмена <> Получатель Тогда ЭлементДанных.Удалить(СтрокаНабора); КонецЕсли; - Индекс = Индекс - 1; - КонецЦикла; КонецЕсли; КонецПроцедуры -#КонецОбласти +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/СтроковыеФункции/Module.bsl b/SSL/src/CommonModules/СтроковыеФункции/Module.bsl index 54ac43fbe..f20cdfccc 100644 --- a/SSL/src/CommonModules/СтроковыеФункции/Module.bsl +++ b/SSL/src/CommonModules/СтроковыеФункции/Module.bsl @@ -10,9 +10,11 @@ // Форматирует строку в соответствии с заданным шаблоном. // Возможные значения тегов в шаблоне: -// - Строка - оформляет текст описанными в атрибуте style -// элементами стиля. - Строка - выделяет строку элементом стиля ВажнаяНадписьШрифт, который соответствует -// полужирному шрифту. - Строка - добавляет гиперссылку. +// - Строка - оформляет текст описанными +// в атрибуте style элементами стиля. +// - Строка - выделяет строку элементом стиля ВажнаяНадписьШрифт, +// который соответствует полужирному шрифту. +// - Строка - добавляет гиперссылку. // - - добавляет картинку из библиотеки картинок. // Атрибут style применяется для оформления текста. Атрибут может быть использован для тегов span и a. // Вначале следует имя стилевого свойства, затем через двоеточие имя элемента стиля. @@ -31,22 +33,47 @@ // ФорматированнаяСтрока - преобразованная строка. // // Пример: -// СтроковыеФункции.ФорматированнаяСтрока(НСтр("ru='Минимальная версия программы 1.1. Обновите -// программу.'")); СтроковыеФункции.ФорматированнаяСтрока(НСтр("ru='Режим: Редактирование'")); -// СтроковыеФункции.ФорматированнаяСтрока(НСтр("ru='Текущая дата %1'"), ТекущаяДатаСеанса());// +// 1. СтроковыеФункцииКлиент.ФорматированнаяСтрока(НСтр("ru=' +// Минимальная версия программы 1.1. +// Обновите программу.'")); +// 2. СтроковыеФункцииКлиент.ФорматированнаяСтрока(НСтр("ru='Режим: +// Редактирование'")); +// 3. СтроковыеФункцииКлиент.ФорматированнаяСтрока(НСтр("ru='Текущая дата +// %1'"), ТекущаяДатаСеанса()); // Функция ФорматированнаяСтрока(Знач ШаблонСтроки, Знач Параметр1 = Неопределено, Знач Параметр2 = Неопределено, Знач Параметр3 = Неопределено, Знач Параметр4 = Неопределено, Знач Параметр5 = Неопределено) Экспорт ЭлементыСтиля = СтандартныеПодсистемыСервер.ЭлементыСтиля(); - Возврат СтроковыеФункцииКлиентСервер.СформироватьФорматированнуюСтроку(ШаблонСтроки, ЭлементыСтиля, Параметр1, Параметр2, Параметр3, Параметр4, Параметр5); КонецФункции +// Преобразует исходную строку в транслит. +// Может использоваться для отправки SMS-сообщений латиницей или для сохранения +// файлов и папок, чтобы обеспечить возможность их переноса между разными операционными системами. +// Обратное преобразование из латинских символов не предусмотрено. +// +// Параметры: +// Значение - Строка - произвольная строка. +// +// Возвращаемое значение: +// Строка - строка, в которой кириллица заменена на транслит. +// +Функция СтрокаЛатиницей(Знач Значение) Экспорт + + ПравилаТранслитерации = Новый Соответствие; + + Если Метаданные.ОбщиеМодули.Найти("СтандартныеПодсистемыКлиентСерверЛокализация") <> Неопределено Тогда + МодульСтандартныеПодсистемыКлиентСерверЛокализация = + ОбщегоНазначения.ОбщийМодуль("СтандартныеПодсистемыКлиентСерверЛокализация"); + МодульСтандартныеПодсистемыКлиентСерверЛокализация.ПриЗаполненииПравилТранслитерации(ПравилаТранслитерации); + КонецЕсли; + + Возврат ОбщегоНазначенияСлужебныйКлиентСервер.СтрокаЛатиницей(Значение, ПравилаТранслитерации); + +КонецФункции + #КонецОбласти diff --git a/SSL/src/CommonModules/СтроковыеФункцииКлиент/Module.bsl b/SSL/src/CommonModules/СтроковыеФункцииКлиент/Module.bsl index 0bc95c248..654c32a40 100644 --- a/SSL/src/CommonModules/СтроковыеФункцииКлиент/Module.bsl +++ b/SSL/src/CommonModules/СтроковыеФункцииКлиент/Module.bsl @@ -10,9 +10,11 @@ // Форматирует строку в соответствии с заданным шаблоном. // Возможные значения тегов в шаблоне: -// - Строка - оформляет текст описанными в атрибуте style -// элементами стиля. - Строка - выделяет строку элементом стиля ВажнаяНадписьШрифт, который соответствует -// полужирному шрифту. - Строка - добавляет гиперссылку. +// - Строка - оформляет текст описанными +// в атрибуте style элементами стиля. +// - Строка - выделяет строку элементом стиля ВажнаяНадписьШрифт, +// который соответствует полужирному шрифту. +// - Строка - добавляет гиперссылку. // - - добавляет картинку из библиотеки картинок. // Атрибут style применяется для оформления текста. Атрибут может быть использован для тегов span и a. // Вначале следует имя стилевого свойства, затем через двоеточие имя элемента стиля. @@ -31,23 +33,46 @@ // ФорматированнаяСтрока - преобразованная строка. // // Пример: -// СтроковыеФункцииКлиент.ФорматированнаяСтрока(НСтр("ru='Минимальная версия программы 1.1. Обновите -// программу.'")); СтроковыеФункцииКлиент.ФорматированнаяСтрока(НСтр("ru='Режим: Редактирование'")); -// СтроковыеФункцииКлиент.ФорматированнаяСтрока(НСтр("ru='Текущая дата %1'"), ТекущаяДатаСеанса());// +// 1. СтроковыеФункцииКлиент.ФорматированнаяСтрока(НСтр("ru=' +// Минимальная версия программы 1.1. +// Обновите программу.'")); +// 2. СтроковыеФункцииКлиент.ФорматированнаяСтрока(НСтр("ru='Режим: +// Редактирование'")); +// 3. СтроковыеФункцииКлиент.ФорматированнаяСтрока(НСтр("ru='Текущая дата +// %1'"), ТекущаяДатаСеанса()); // Функция ФорматированнаяСтрока(Знач ШаблонСтроки, Знач Параметр1 = Неопределено, Знач Параметр2 = Неопределено, Знач Параметр3 = Неопределено, Знач Параметр4 = Неопределено, Знач Параметр5 = Неопределено) Экспорт - ПараметрыРаботыКлиента = СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиента(); - ЭлементыСтиля = ПараметрыРаботыКлиента.ЭлементыСтиля; - + ЭлементыСтиля = СтандартныеПодсистемыКлиент.ЭлементыСтиля(); Возврат СтроковыеФункцииКлиентСервер.СформироватьФорматированнуюСтроку(ШаблонСтроки, ЭлементыСтиля, Параметр1, Параметр2, Параметр3, Параметр4, Параметр5); КонецФункции +// Преобразует исходную строку в транслит. +// Может использоваться для отправки SMS-сообщений латиницей или для сохранения +// файлов и папок, чтобы обеспечить возможность их переноса между разными операционными системами. +// Обратное преобразование из латинских символов не предусмотрено. +// +// Параметры: +// Значение - Строка - произвольная строка. +// +// Возвращаемое значение: +// Строка - строка, в которой кириллица заменена на транслит. +// +Функция СтрокаЛатиницей(Знач Значение) Экспорт + + ПравилаТранслитерации = Новый Соответствие; + + МодульСтандартныеПодсистемыКлиентСерверЛокализация = Вычислить("СтандартныеПодсистемыКлиентСерверЛокализация"); + Если ТипЗнч(МодульСтандартныеПодсистемыКлиентСерверЛокализация) = Тип("ОбщийМодуль") Тогда + МодульСтандартныеПодсистемыКлиентСерверЛокализация.ПриЗаполненииПравилТранслитерации(ПравилаТранслитерации); + КонецЕсли; + + Возврат ОбщегоНазначенияСлужебныйКлиентСервер.СтрокаЛатиницей(Значение, ПравилаТранслитерации); + +КонецФункции + #КонецОбласти diff --git a/SSL/src/CommonModules/СтроковыеФункцииКлиентСервер/Module.bsl b/SSL/src/CommonModules/СтроковыеФункцииКлиентСервер/Module.bsl index acb4f403d..6a298a51b 100644 --- a/SSL/src/CommonModules/СтроковыеФункцииКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/СтроковыеФункцииКлиентСервер/Module.bsl @@ -762,131 +762,6 @@ Возврат СокрЛП(СтрСоединить(МассивСтрок, Символы.ПС)); КонецФункции -// Преобразует исходную строку в транслит. -// Может использоваться для отправки SMS-сообщений латиницей или для сохранения -// файлов и папок, чтобы обеспечить возможность их переноса между разными операционными системами. -// Обратное преобразование из латинских символов не предусмотрено. -// -// Параметры: -// Значение - Строка - произвольная строка. -// -// Возвращаемое значение: -// Строка - строка, в которой кириллица заменена на транслит. -// -Функция СтрокаЛатиницей(Знач Значение) Экспорт - - Результат = ""; - - Соответствие = Новый Соответствие; - СтандартныеПодсистемыКлиентСерверЛокализация.ПриЗаполненииПравилТранслитерации(Соответствие); - - ТолькоЗаглавныеВСтроке = ТолькоЗаглавныеВСтроке(Значение); - - Для Позиция = 1 По СтрДлина(Значение) Цикл - Символ = Сред(Значение, Позиция, 1); - СимволЛатиницей = Соответствие[НРег(Символ)]; // Поиск соответствия без учета регистра. - Если СимволЛатиницей = Неопределено Тогда - // Другие символы остаются "как есть". - СимволЛатиницей = Символ; - Иначе - Если ТолькоЗаглавныеВСтроке Тогда - СимволЛатиницей = ВРег(СимволЛатиницей); // восстанавливаем регистр - ИначеЕсли Символ = ВРег(Символ) Тогда - СимволЛатиницей = ТРег(СимволЛатиницей); // восстанавливаем регистр - КонецЕсли; - КонецЕсли; - Результат = Результат + СимволЛатиницей; - КонецЦикла; - - Возврат Результат; - -КонецФункции - -// Форматирует строку в соответствии с заданным шаблоном. -// Возможные значения тегов в шаблоне: -// - Строка - выделяет строку жирным шрифтом. -// - Строка - добавляет гиперссылку. -// Например, "Минимальная версия программы 1.1. Обновите программу.". -// -// Параметры: -// СтрокаСТегами - Строка - строка, содержащая теги форматирования. -// -// Возвращаемое значение: -// ФорматированнаяСтрока - преобразованная строка. -// -Функция ФорматированнаяСтрока(Знач СтрокаСТегами) Экспорт - - СтрокиСВыделением = Новый СписокЗначений; - Пока СтрНайти(СтрокаСТегами, "") <> 0 Цикл - НачалоВыделения = СтрНайти(СтрокаСТегами, ""); - СтрокаДоОткрывающегоТега = Лев(СтрокаСТегами, НачалоВыделения - 1); - СтрокиСВыделением.Добавить(СтрокаДоОткрывающегоТега); - СтрокаПослеОткрывающегоТега = Сред(СтрокаСТегами, НачалоВыделения + 3); - КонецВыделения = СтрНайти(СтрокаПослеОткрывающегоТега, ""); - ВыделенныйФрагмент = Лев(СтрокаПослеОткрывающегоТега, КонецВыделения - 1); - СтрокиСВыделением.Добавить(ВыделенныйФрагмент,, Истина); - СтрокаПослеВыделения = Сред(СтрокаПослеОткрывающегоТега, КонецВыделения + 4); - СтрокаСТегами = СтрокаПослеВыделения; - КонецЦикла; - СтрокиСВыделением.Добавить(СтрокаСТегами); - - СтрокиСоСсылками = Новый СписокЗначений; - Для Каждого ЧастьСтроки Из СтрокиСВыделением Цикл - - СтрокаСТегами = ЧастьСтроки.Значение; - - Если ЧастьСтроки.Пометка Тогда - СтрокиСоСсылками.Добавить(СтрокаСТегами,, Истина); - Продолжить; - КонецЕсли; - - НачалоВыделения = СтрНайти(СтрокаСТегами, ""); - - Ссылка = СокрЛП(Лев(СтрокаПослеОткрывающегоТега, ЗакрывающийТег - 2)); - Если СтрНачинаетсяС(Ссылка, """") Тогда - Ссылка = Сред(Ссылка, 2, СтрДлина(Ссылка) - 1); - КонецЕсли; - Если СтрЗаканчиваетсяНа(Ссылка, """") Тогда - Ссылка = Сред(Ссылка, 1, СтрДлина(Ссылка) - 1); - КонецЕсли; - - СтрокаПослеСсылки = Сред(СтрокаПослеОткрывающегоТега, ЗакрывающийТег + 1); - КонецВыделения = СтрНайти(СтрокаПослеСсылки, ""); - ТекстСсылки = Лев(СтрокаПослеСсылки, КонецВыделения - 1); - СтрокиСоСсылками.Добавить(ТекстСсылки, Ссылка); - - СтрокаПослеВыделения = Сред(СтрокаПослеСсылки, КонецВыделения + 4); - СтрокаСТегами = СтрокаПослеВыделения; - - НачалоВыделения = СтрНайти(СтрокаСТегами, " 7 Тогда + + ПеревернутаяДата = Сред(Элемент, 5) + Сред(Элемент, 3, 2) + Лев(Элемент, 2); + Результат = ОписаниеТипаДата.ПривестиЗначение(ПеревернутаяДата); + + КонецЕсли; КонецЕсли; @@ -1175,7 +1063,95 @@ #Область УстаревшиеПроцедурыИФункции -// Устарела. Следует использовать СтроковыеФункцииКлиентСервер.СтрокаСЧисломДляЛюбогоЯзыка(). +// Устарела. Следует использовать см. СтроковыеФункции.ФорматированнаяСтрока +// или см. СтроковыеФункцииКлиент.ФорматированнаяСтрока. +// +// Форматирует строку в соответствии с заданным шаблоном. +// Возможные значения тегов в шаблоне: +// - Строка - выделяет строку жирным шрифтом. +// - Строка - добавляет гиперссылку. +// Например, "Минимальная версия программы 1.1. Обновите программу.". +// +// Параметры: +// СтрокаСТегами - Строка - строка, содержащая теги форматирования. +// +// Возвращаемое значение: +// ФорматированнаяСтрока - преобразованная строка. +// +Функция ФорматированнаяСтрока(Знач СтрокаСТегами) Экспорт + + СтрокиСВыделением = Новый СписокЗначений; + Пока СтрНайти(СтрокаСТегами, "") <> 0 Цикл + НачалоВыделения = СтрНайти(СтрокаСТегами, ""); + СтрокаДоОткрывающегоТега = Лев(СтрокаСТегами, НачалоВыделения - 1); + СтрокиСВыделением.Добавить(СтрокаДоОткрывающегоТега); + СтрокаПослеОткрывающегоТега = Сред(СтрокаСТегами, НачалоВыделения + 3); + КонецВыделения = СтрНайти(СтрокаПослеОткрывающегоТега, ""); + ВыделенныйФрагмент = Лев(СтрокаПослеОткрывающегоТега, КонецВыделения - 1); + СтрокиСВыделением.Добавить(ВыделенныйФрагмент,, Истина); + СтрокаПослеВыделения = Сред(СтрокаПослеОткрывающегоТега, КонецВыделения + 4); + СтрокаСТегами = СтрокаПослеВыделения; + КонецЦикла; + СтрокиСВыделением.Добавить(СтрокаСТегами); + + СтрокиСоСсылками = Новый СписокЗначений; + Для Каждого ЧастьСтроки Из СтрокиСВыделением Цикл + + СтрокаСТегами = ЧастьСтроки.Значение; + + Если ЧастьСтроки.Пометка Тогда + СтрокиСоСсылками.Добавить(СтрокаСТегами,, Истина); + Продолжить; + КонецЕсли; + + НачалоВыделения = СтрНайти(СтрокаСТегами, ""); + + Ссылка = СокрЛП(Лев(СтрокаПослеОткрывающегоТега, ЗакрывающийТег - 2)); + Если СтрНачинаетсяС(Ссылка, """") Тогда + Ссылка = Сред(Ссылка, 2, СтрДлина(Ссылка) - 1); + КонецЕсли; + Если СтрЗаканчиваетсяНа(Ссылка, """") Тогда + Ссылка = Сред(Ссылка, 1, СтрДлина(Ссылка) - 1); + КонецЕсли; + + СтрокаПослеСсылки = Сред(СтрокаПослеОткрывающегоТега, ЗакрывающийТег + 1); + КонецВыделения = СтрНайти(СтрокаПослеСсылки, ""); + ТекстСсылки = Лев(СтрокаПослеСсылки, КонецВыделения - 1); + СтрокиСоСсылками.Добавить(ТекстСсылки, Ссылка); + + СтрокаПослеВыделения = Сред(СтрокаПослеСсылки, КонецВыделения + 4); + СтрокаСТегами = СтрокаПослеВыделения; + + НачалоВыделения = СтрНайти(СтрокаСТегами, "СтрокаСЧисломДляЛюбогоЯзыка(";%1 минуту;;%1 минуты;%1 минут;%1 минуты ", Значение); @@ -1221,7 +1197,7 @@ КонецФункции -// Устарела. Следует использовать СтроковыеФункцииКлиентСервер.СтрокаСЧисломДляЛюбогоЯзыка(). +// Устарела. Следует использовать см. СтроковыеФункцииКлиентСервер.СтрокаСЧисломДляЛюбогоЯзыка. // // ФормаМножественногоЧисла("минуту", "минуты", "минут", 1.5); // -> СтрокаСЧисломДляЛюбогоЯзыка(";минуту;;минуты;минут;минуты", Значение); @@ -1244,7 +1220,7 @@ Возврат ЧислоЦифрамиПредметИсчисленияПрописью(Значение, ФормаДля1 + "," + ФормаДля2 + "," + ФормаДля5, Ложь); КонецФункции -// Устарела. Используйте СтроковыеФункцииКлиентСерверРФ.ТолькоКириллицаВСтроке +// Устарела. Следует использовать см. СтроковыеФункцииКлиентСерверРФ.ТолькоКириллицаВСтроке // Проверяет, содержит ли строка только символы кириллического алфавита. // // Параметры: @@ -1287,6 +1263,67 @@ КонецФункции +// Устарела. Следует использовать см. СтроковыеФункции.СтрокаЛатиницей +// или см. СтроковыеФункцииКлиент.СтрокаЛатиницей. +// +// Преобразует исходную строку в транслит. +// Может использоваться для отправки SMS-сообщений латиницей или для сохранения +// файлов и папок, чтобы обеспечить возможность их переноса между разными операционными системами. +// Обратное преобразование из латинских символов не предусмотрено. +// +// Параметры: +// Значение - Строка - произвольная строка. +// +// Возвращаемое значение: +// Строка - строка, в которой кириллица заменена на транслит. +// +Функция СтрокаЛатиницей(Знач Значение) Экспорт + + Результат = ""; + + Соответствие = Новый Соответствие; + + // АПК:547-выкл + // АПК:488-выкл + // Следующий фрагмент кода выполняет условный вызов процедуры ПриЗаполненииПравилТранслитерации + // при наличии модуля СтандартныеПодсистемыКлиентСерверЛокализация. + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + Если Метаданные.ОбщиеМодули.Найти("СтандартныеПодсистемыКлиентСерверЛокализация") <> Неопределено Тогда + МодульСтандартныеПодсистемыКлиентСерверЛокализация = + ОбщегоНазначения.ОбщийМодуль("СтандартныеПодсистемыКлиентСерверЛокализация"); + МодульСтандартныеПодсистемыКлиентСерверЛокализация.ПриЗаполненииПравилТранслитерации(Соответствие); + КонецЕсли; + #Иначе + МодульСтандартныеПодсистемыКлиентСерверЛокализация = Вычислить("СтандартныеПодсистемыКлиентСерверЛокализация"); + Если ТипЗнч(МодульСтандартныеПодсистемыКлиентСерверЛокализация) = Тип("ОбщийМодуль") Тогда + МодульСтандартныеПодсистемыКлиентСерверЛокализация.ПриЗаполненииПравилТранслитерации(Соответствие); + КонецЕсли; + #КонецЕсли + // АПК:488-вкл + // АПК:547-вкл + + ТолькоЗаглавныеВСтроке = ТолькоЗаглавныеВСтроке(Значение); + + Для Позиция = 1 По СтрДлина(Значение) Цикл + Символ = Сред(Значение, Позиция, 1); + СимволЛатиницей = Соответствие[НРег(Символ)]; // Поиск соответствия без учета регистра. + Если СимволЛатиницей = Неопределено Тогда + // Другие символы остаются "как есть". + СимволЛатиницей = Символ; + Иначе + Если ТолькоЗаглавныеВСтроке Тогда + СимволЛатиницей = ВРег(СимволЛатиницей); // восстанавливаем регистр + ИначеЕсли Символ = ВРег(Символ) Тогда + СимволЛатиницей = ТРег(СимволЛатиницей); // восстанавливаем регистр + КонецЕсли; + КонецЕсли; + Результат = Результат + СимволЛатиницей; + КонецЦикла; + + Возврат Результат; + +КонецФункции + #КонецОбласти #КонецОбласти diff --git a/SSL/src/CommonModules/СтроковыеФункцииКлиентСерверРФ/Module.bsl b/SSL/src/CommonModules/СтроковыеФункцииКлиентСерверРФ/Module.bsl index 65f4601db..40e01237c 100644 --- a/SSL/src/CommonModules/СтроковыеФункцииКлиентСерверРФ/Module.bsl +++ b/SSL/src/CommonModules/СтроковыеФункцииКлиентСерверРФ/Module.bsl @@ -8,47 +8,6 @@ #Область ПрограммныйИнтерфейс -// См. СтандартныеПодсистемыКлиентСерверЛокализация.ПриЗаполненииПравилТранслитерации -// -Процедура ПриЗаполненииПравилТранслитерации(Правила) Экспорт - - // Транслитерация, используемая в загранпаспортах 1997-2010. - Правила.Вставить("а","a"); - Правила.Вставить("б","b"); - Правила.Вставить("в","v"); - Правила.Вставить("г","g"); - Правила.Вставить("д","d"); - Правила.Вставить("е","e"); - Правила.Вставить("ё","e"); // АПК:163 требуется транслитерация. - Правила.Вставить("ж","zh"); - Правила.Вставить("з","z"); - Правила.Вставить("и","i"); - Правила.Вставить("й","y"); - Правила.Вставить("к","k"); - Правила.Вставить("л","l"); - Правила.Вставить("м","m"); - Правила.Вставить("н","n"); - Правила.Вставить("о","o"); - Правила.Вставить("п","p"); - Правила.Вставить("р","r"); - Правила.Вставить("с","s"); - Правила.Вставить("т","t"); - Правила.Вставить("у","u"); - Правила.Вставить("ф","f"); - Правила.Вставить("х","kh"); - Правила.Вставить("ц","ts"); - Правила.Вставить("ч","ch"); - Правила.Вставить("ш","sh"); - Правила.Вставить("щ","shch"); - Правила.Вставить("ъ",""); // Пропускается. - Правила.Вставить("ы","y"); - Правила.Вставить("ь",""); // Пропускается. - Правила.Вставить("э","e"); - Правила.Вставить("ю","yu"); - Правила.Вставить("я","ya"); - -КонецПроцедуры - // Проверяет, содержит ли строка только символы кириллического алфавита. // // Параметры: diff --git a/SSL/src/CommonModules/ТекущиеДелаСлужебный/Module.bsl b/SSL/src/CommonModules/ТекущиеДелаСлужебный/Module.bsl index d6651d85f..3307967ec 100644 --- a/SSL/src/CommonModules/ТекущиеДелаСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ТекущиеДелаСлужебный/Module.bsl @@ -250,7 +250,9 @@ ЭтоИдентификаторДела = (ТекущиеДела.Найти(СтрЗаменить(Дело.Владелец, " ", ""), "Идентификатор") <> Неопределено); КонецЕсли; + НедопустимыеСимволы = """'`/\-[]{}:;|=?*<>,.()+#№@!%^&~"; Дело.ИдентификаторВладельца = СтрЗаменить(Дело.Владелец, " ", ""); + Дело.ИдентификаторВладельца = СтрСоединить(СтрРазделить(Дело.ИдентификаторВладельца, НедопустимыеСимволы, Истина)); Если Не ЭтоИдентификаторДела Тогда Дело.ЭтоРаздел = Истина; Дело.ПредставлениеРаздела = Дело.Владелец; diff --git a/SSL/src/CommonModules/ТекущиеДелаСлужебныйПовтИсп/Module.bsl b/SSL/src/CommonModules/ТекущиеДелаСлужебныйПовтИсп/Module.bsl index 2b5136890..e5b0560b1 100644 --- a/SSL/src/CommonModules/ТекущиеДелаСлужебныйПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ТекущиеДелаСлужебныйПовтИсп/Module.bsl @@ -11,7 +11,7 @@ // Возвращает соответствие объектов метаданных и подсистем командного интерфейса. // // Возвращаемое значение: -// Соответствие, где ключем является полное имя объекта, а значение - массив подсистем +// Соответствие, где ключом является полное имя объекта, а значение - массив подсистем // командного интерфейса программы, в которые входит данный объект. // Функция ПринадлежностьОбъектовРазделамКомандногоИнтерфейса() Экспорт diff --git a/SSL/src/CommonModules/УправлениеДоступом/Module.bsl b/SSL/src/CommonModules/УправлениеДоступом/Module.bsl index 92a894fca..5840b593f 100644 --- a/SSL/src/CommonModules/УправлениеДоступом/Module.bsl +++ b/SSL/src/CommonModules/УправлениеДоступом/Module.bsl @@ -454,7 +454,7 @@ // РегистрРасчетаКлючЗаписи - ключ записи, которую требуется проверить. // // Возвращаемое значение: -// Булево +// Булево - // Функция ЧтениеРазрешено(ОписаниеДанных) Экспорт @@ -468,7 +468,7 @@ // Важно: если подсистема работает в режиме стандартного ограничения, // а не в режиме универсального ограничения, тогда проверяется право // Изменение на таблицу, а на уровне записей проверяется только право Чтение. -// +// // Параметры: // ОписаниеДанных - СправочникСсылка, // ДокументСсылка, @@ -484,7 +484,7 @@ // РегистрРасчетаКлючЗаписи - ключ записи, которую требуется проверить. // // Возвращаемое значение: -// Булево +// Булево - // Функция ИзменениеРазрешено(ОписаниеДанных) Экспорт @@ -637,7 +637,7 @@ // запуск обновления доступа зависимых объектов, когда обновление запланировано. // // Параметры: -// Форма - УправляемаяФорма - форма элемента объекта или записи регистра. +// Форма - ФормаКлиентскогоПриложения - форма элемента объекта или записи регистра. // // ТекущийОбъект - СправочникОбъект, // ДокументОбъект, @@ -660,7 +660,7 @@ КонецПроцедуры -// АПК:142-выкл - 5 необязательных параметров для обратной совместимости. +// АПК:142-выкл - №640.5 Необязательных параметров более 3 для обратной совместимости. // Настраивает форму значения доступа, которое использует группы значений доступа // для выбора разрешенных значений в группах доступа пользователей. @@ -856,7 +856,7 @@ КонецПроцедуры -// АПК:142-вкл +// АПК:142-вкл. // Описание дополнительных параметров, используемых в процедуре ПриСозданииФормыЗначенияДоступа. // @@ -1574,14 +1574,13 @@ // ОписаниеПрофиля = УправлениеДоступом.НовоеОписаниеПрофиляГруппДоступа(); // ОписаниеПрофиля.Имя = "Пользователь"; // ОписаниеПрофиля.Идентификатор = "09e56dbf-90a0-11de-862c-001d600d9ad2"; -// ОписаниеПрофиля.Наименование = НСтр("ru = 'Пользователь'", Метаданные.ОсновнойЯзык.КодЯзыка); +// ОписаниеПрофиля.Наименование = НСтр("ru = 'Пользователь'", ОбщегоНазначения.КодОсновногоЯзыка()); // // Переопределение назначения. // ОбщегоНазначенияКлиентСервер.ДополнитьМассив(ОписаниеПрофиля.Назначение, // Метаданные.ОпределяемыеТипы.ВнешнийПользователь.Тип.Типы()); // ОписаниеПрофиля.Описание = // НСтр("ru = 'Общие разрешенные действия для большинства пользователей. -// |Как правило, это права на просмотр данных информационной системы.'", -// Метаданные.ОсновнойЯзык.КодЯзыка); +// |Как правило, это права на просмотр данных информационной системы.'"); // // Использование 1С:Предприятия. // ОписаниеПрофиля.Роли.Добавить("ЗапускТонкогоКлиента"); // ОписаниеПрофиля.Роли.Добавить("ВыводНаПринтерФайлБуферОбмена"); @@ -1671,7 +1670,8 @@ // * Ключ - Строка - имя заменяемой роли, например "ЧтениеБазовойНСИ". Если роль была удалена, // то к имени нужно добавить приставку "? ", например "? ЧтениеБазовойНСИ". // -// * Значение - Массив - имена ролей для замены указанной (пустой массив, чтобы удалить указанную роль). +// * Значение - Массив - имена ролей для замены указанной (пустой массив, чтобы удалить указанную роль, +// можно указывать заменяемую роль, например, при разделении на несколько). // Процедура ЗаменитьРолиВПрофилях(ЗаменяемыеРоли) Экспорт @@ -1810,7 +1810,8 @@ // Процедура ЗаменитьПраваВНастройкахПравОбъектов(ТаблицаПереименований) Экспорт - // АПК:96-выкл: допустимо, так как строки не должны повторятся и это разовая операция в обработчике обновления. + // АПК:96-выкл - №434 Использование ОБЪЕДИНИТЬ допустимо, так как + // строки не должны повторятся и это разовая операция в обработчике обновления. Запрос = Новый Запрос; Запрос.Параметры.Вставить("ТаблицаПереименований", ТаблицаПереименований); Запрос.Текст = @@ -1898,7 +1899,7 @@ | НастройкиПрав.ПорядокНастройки |ИЗ | НастройкиПрав КАК НастройкиПрав"; - // АПК:96-вкл: допустимо, так как строки не должны повторятся и это разовая операция в обработчике обновления. + // АПК:96-вкл. Блокировка = Новый БлокировкаДанных; Блокировка.Добавить("РегистрСведений.НастройкиПравОбъектов"); @@ -2160,6 +2161,10 @@ // (включает константу ОграничиватьДоступНаУровнеЗаписейУниверсально). // Следует использовать только в конечных типовых решениях, а не в поставках библиотек. // +// Для файловой ИБ обработчик не добавляется (кроме начального заполнения). +// Соответственно, в клиент-серверных базах с РИБ (кроме модели сервиса) обработчик тоже не добавляется, +// так как в РИБ могут быть файловые ИБ. +// // Параметры: // Версия - Строка - см. ОбновлениеИнформационнойБазыБСП.ПриДобавленииОбработчиковОбновления. // Обработчики - ТаблицаЗначений - см. ОбновлениеИнформационнойБазыБСП.ПриДобавленииОбработчиковОбновления. @@ -2176,6 +2181,41 @@ Возврат; КонецЕсли; + Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда + Возврат; + КонецЕсли; + + Обработчик = Обработчики.Добавить(); + Обработчик.НачальноеЗаполнение = Истина; + Обработчик.Процедура = "РегистрыСведений.ПараметрыОграниченияДоступа.ВключитьОграничениеДоступаНаУровнеЗаписейУниверсально"; + Обработчик.РежимВыполнения = "Оперативно"; + + ВключенРИБ = Ложь; + Если Не ОбщегоНазначения.РазделениеВключено() + И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда + + ИменаПлановОбмена = Новый Массив; + Для Каждого ПланОбмена Из Метаданные.ПланыОбмена Цикл + Если ПланОбмена.РаспределеннаяИнформационнаяБаза Тогда + ИменаПлановОбмена.Добавить(ПланОбмена.Имя); + КонецЕсли; + КонецЦикла; + МодульОбменДаннымиСервер = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиСервер"); + Таблица = МодульОбменДаннымиСервер.ТаблицаМонитораОбменаДанными(ИменаПлановОбмена); + Граница = ТекущаяДатаСеанса() - ('00010701' - '00010101'); + Для Каждого Строка Из Таблица Цикл + Если Не ЗначениеЗаполнено(Строка.ДатаПоследнегоЗапуска) + Или Строка.ДатаПоследнегоЗапуска > Граница Тогда + ВключенРИБ = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + Если ВключенРИБ Тогда + Возврат; + КонецЕсли; + Обработчик = Обработчики.Добавить(); Обработчик.Версия = Версия; Обработчик.Процедура = "РегистрыСведений.ПараметрыОграниченияДоступа.ОбработатьДанныеДляПереходаНаНовуюВерсию3"; diff --git a/SSL/src/CommonModules/УправлениеДоступомПереопределяемый/Module.bsl b/SSL/src/CommonModules/УправлениеДоступомПереопределяемый/Module.bsl index a319090cd..097da6804 100644 --- a/SSL/src/CommonModules/УправлениеДоступомПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/УправлениеДоступомПереопределяемый/Module.bsl @@ -112,7 +112,7 @@ // ОписаниеПрофиля = УправлениеДоступом.НовоеОписаниеПрофиляГруппДоступа(); // ОписаниеПрофиля.Имя = "Менеджер"; // ОписаниеПрофиля.Идентификатор = "75fa0ecb-98aa-11df-b54f-e0cb4ed5f655"; -// ОписаниеПрофиля.Наименование = НСтр("ru = 'Менеджер по продажам'", Метаданные.ОсновнойЯзык.КодЯзыка); +// ОписаниеПрофиля.Наименование = НСтр("ru = 'Менеджер по продажам'", ОбщегоНазначения.КодОсновногоЯзыка()); // ОписаниеПрофиля.Роли.Добавить("ЗапускВебКлиента"); // ОписаниеПрофиля.Роли.Добавить("ЗапускТонкогоКлиента"); // ОписаниеПрофиля.Роли.Добавить("БазовыеПраваБСП"); @@ -154,7 +154,7 @@ КонецПроцедуры // Заполняет описания возможных прав, назначаемых для объектов указанных типов. -// +// // Параметры: // ВозможныеПрава - ТаблицаЗначений - с колонками: // ВладелецПрав - Строка - полное имя таблицы значения доступа. @@ -174,15 +174,15 @@ // НачальноеЗначение - Булево - начальное значение флажка права при добавлении новой строки // в форме "Права доступа". // -// ТребуемыеПрава - Массив строк - имена прав, требуемых для этого права - +// ТребуемыеПрава - Массив Из Строка - имена прав, требуемых для этого права - // например, право "ДобавлениеФайлов" требует права "ИзменениеФайлов". // -// ЧтениеВТаблицах - Массив строк - полные имена таблиц, для которых это право обозначает право Чтение. +// ЧтениеВТаблицах - Массив Из Строка - полные имена таблиц, для которых это право обозначает право Чтение. // Возможно использование символа "*", который обозначает "для всех остальных таблиц", // т.к. право Чтение может зависеть только от права Чтение, то имеет смысл только символ "*" // (требуется для работы шаблонов ограничения доступа). // -// ИзменениеВТаблицах - Массив строк - полные имена таблиц, для которых это право обозначает право Изменение. +// ИзменениеВТаблицах - Массив Из Строка - полные имена таблиц, для которых это право обозначает право Изменение. // Возможно использование символа "*", который обозначает "для всех остальных таблиц" // (требуется для работы шаблонов ограничения доступа). // diff --git a/SSL/src/CommonModules/УправлениеДоступомСлужебный/Module.bsl b/SSL/src/CommonModules/УправлениеДоступомСлужебный/Module.bsl index c1736bf8f..d19e0474a 100644 --- a/SSL/src/CommonModules/УправлениеДоступомСлужебный/Module.bsl +++ b/SSL/src/CommonModules/УправлениеДоступомСлужебный/Module.bsl @@ -341,11 +341,9 @@ Если ОткрытиеРазрешено Тогда // Включение администраторов в группы доступа с этим профилем. - Если Не УпрощенныйИнтерфейс Тогда - ГруппаДоступаОбъект = ГруппаПрофиля.ПолучитьОбъект(); - КонецЕсли; РольАдминистратора = Метаданные.Роли.АдминистраторСистемы; ПользователиИБ = ПользователиИнформационнойБазы.ПолучитьПользователей(); + СоставПользователей = Новый Массив; Для Каждого ПользовательИБ Из ПользователиИБ Цикл Если ПользовательИБ.Роли.Содержит(РольАдминистратора) Тогда Пользователь = Справочники.Пользователи.НайтиПоРеквизиту( @@ -359,14 +357,31 @@ УправлениеДоступом.ВключитьПрофильПользователю(Пользователь, СвойстваПрофиля.Ссылка); Иначе // В расширенном интерфейсе администраторы включаются в одну группу, связанную с предопределенным профилем. - Если ГруппаДоступаОбъект.Пользователи.Найти(Пользователь, "Пользователь") = Неопределено Тогда - ГруппаДоступаОбъект.Пользователи.Добавить().Пользователь = Пользователь; - КонецЕсли; + СоставПользователей.Добавить(Пользователь); КонецЕсли; КонецЕсли; КонецЦикла; - Если Не УпрощенныйИнтерфейс И ГруппаДоступаОбъект.Модифицированность() Тогда - ГруппаДоступаОбъект.Записать(); + Если Не УпрощенныйИнтерфейс Тогда + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Справочник.ГруппыДоступа"); + ЭлементБлокировки.УстановитьЗначение("Ссылка", ГруппаПрофиля); + НачатьТранзакцию(); + Попытка + Блокировка.Заблокировать(); + ГруппаДоступаОбъект = ГруппаПрофиля.ПолучитьОбъект(); + Для Каждого Пользователь Из СоставПользователей Цикл + Если ГруппаДоступаОбъект.Пользователи.Найти(Пользователь, "Пользователь") = Неопределено Тогда + ГруппаДоступаОбъект.Пользователи.Добавить().Пользователь = Пользователь; + КонецЕсли; + КонецЦикла; + Если ГруппаДоступаОбъект.Модифицированность() Тогда + ГруппаДоступаОбъект.Записать(); + КонецЕсли; + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; КонецЕсли; Иначе // Удаление роли из всех профилей, за исключением предопределенного. @@ -383,12 +398,23 @@ Запрос.УстановитьПараметр("ИсключаемыйПрофиль", СвойстваПрофиля.Ссылка); МассивПрофилей = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); Для Каждого Профиль Из МассивПрофилей Цикл - ПрофильОбъект = Профиль.ПолучитьОбъект(); - Найденные = ПрофильОбъект.Роли.НайтиСтроки(Новый Структура("Роль", ИдентификаторРоли)); - Для Каждого СтрокаТаблицы Из Найденные Цикл - ПрофильОбъект.Роли.Удалить(СтрокаТаблицы); - КонецЦикла; - ПрофильОбъект.Записать(); + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Справочник.ПрофилиГруппДоступа"); + ЭлементБлокировки.УстановитьЗначение("Ссылка", Профиль); + НачатьТранзакцию(); + Попытка + Блокировка.Заблокировать(); + ПрофильОбъект = Профиль.ПолучитьОбъект(); + Найденные = ПрофильОбъект.Роли.НайтиСтроки(Новый Структура("Роль", ИдентификаторРоли)); + Для Каждого СтрокаТаблицы Из Найденные Цикл + ПрофильОбъект.Роли.Удалить(СтрокаТаблицы); + КонецЦикла; + ПрофильОбъект.Записать(); + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; КонецЦикла; // Очистка состава групп доступа, связанных с предопределенным профилем. @@ -403,14 +429,37 @@ Запрос.УстановитьПараметр("Профиль", СвойстваПрофиля.Ссылка); МассивГрупп = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); Для Каждого ГруппаДоступа Из МассивГрупп Цикл - ГруппаДоступаОбъект = ГруппаДоступа.ПолучитьОбъект(); - ГруппаДоступаОбъект.Пользователи.Очистить(); - ГруппаДоступаОбъект.Записать(); + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Справочник.ГруппыДоступа"); + ЭлементБлокировки.УстановитьЗначение("Ссылка", ГруппаДоступа); + НачатьТранзакцию(); + Попытка + Блокировка.Заблокировать(); + ГруппаДоступаОбъект = ГруппаДоступа.ПолучитьОбъект(); + ГруппаДоступаОбъект.Пользователи.Очистить(); + ГруппаДоступаОбъект.Записать(); + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; КонецЦикла; КонецЕсли; КонецПроцедуры +// Только для внутреннего использования. +Процедура ПриРегистрацииИспользованияВерсииРасширенийВНеразделенномСеансе() Экспорт + + Если ТекущийРежимЗапуска() = Неопределено + Или ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда + Возврат; + КонецЕсли; + + ОтключитьУВсехРасширенийФлажокИспользоватьОсновныеРолиДляВсехПользователей(); + +КонецПроцедуры + #Область УниверсальноеОграничение Функция ОграничиватьДоступНаУровнеЗаписейУниверсально(СУчетомКонстантыОграничениеДоступаНаУровнеЗаписей = Истина, @@ -497,10 +546,7 @@ КонецЕсли; Блокировка = Новый БлокировкаДанных; - ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ОбновлениеКлючейДоступаКДанным"); - ЭлементБлокировки.УстановитьЗначение("Список", Неопределено); - ЭлементБлокировки.УстановитьЗначение("КлючУникальности", - Новый УникальныйИдентификатор("cba4721a-020d-48a1-b89d-c460e2c09fa3")); + Блокировка.Добавить("Константа.КоличествоПотоковОбновленияДоступа"); ЗаданиеВключено = Ложь; НачатьТранзакцию(); @@ -959,7 +1005,7 @@ КонецЕсли; ИдентификаторСправочникаНаборыГруппДоступа = - ОбщегоНазначения.ИдентификаторОбъектаМетаданных("Справочник.НаборыГруппДоступа"); + СлужебныйИдентификатор("Справочник.НаборыГруппДоступа"); ТекущаяДатаСеанса = ТекущаяДатаСеанса(); КлючУникальностиЗаписей = Новый УникальныйИдентификатор; @@ -1054,6 +1100,13 @@ КонецЕсли; КонецЦикла; + Если ТранзакцияАктивна() И ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда + Блокировка = Новый БлокировкаДанных; + Блокировка.Добавить("РегистрСведений.ОбновлениеКлючейДоступаКДанным"); + Блокировка.Добавить("РегистрСведений.ОбновлениеКлючейДоступаПользователей"); + Блокировка.Заблокировать(); + КонецЕсли; + Если ОбновлениеКлючейДоступаКДанным.Количество() > 0 Тогда ОбновлениеКлючейДоступаКДанным.Записать(Ложь); КонецЕсли; @@ -1111,13 +1164,18 @@ // Только для внутреннего использования. Процедура ЗапланироватьОбновлениеПараметровОграниченияДоступа(Описание) Экспорт + Если Не ОграничиватьДоступНаУровнеЗаписейУниверсально() Тогда + Возврат; + КонецЕсли; + ПараметрыПланирования = ПараметрыПланированияОбновленияДоступа(); ПараметрыПланирования.РазрешенныеКлючиДоступа = Ложь; ПараметрыПланирования.Описание = Описание; - ЗапланироватьОбновлениеДоступа( - ОбщегоНазначения.ИдентификаторОбъектаМетаданных("РегистрСведений.ПараметрыОграниченияДоступа"), - ПараметрыПланирования); + Идентификатор = СлужебныйИдентификатор("РегистрСведений.ПараметрыОграниченияДоступа"); + Если Идентификатор <> Null Тогда + ЗапланироватьОбновлениеДоступа(Идентификатор, ПараметрыПланирования); + КонецЕсли; КонецПроцедуры @@ -1135,12 +1193,16 @@ // Только для внутреннего использования. Процедура ОбновитьДоступПослеОбновленияИнформационнойБазы(ВыполнитьОтложенноеОбновлениеСейчас) Экспорт - Если Не ВыполнитьОтложенноеОбновлениеСейчас - Или Не ОграничиватьДоступНаУровнеЗаписейУниверсально() Тогда + Если ОбщегоНазначения.РазделениеВключено() + И Не ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда Возврат; КонецЕсли; - ВыполнитьОбновлениеДоступаНаУровнеЗаписей(Истина, Ложь, 0); + Если ВыполнитьОтложенноеОбновлениеСейчас + И ОграничиватьДоступНаУровнеЗаписейУниверсально() Тогда + + ВыполнитьОбновлениеДоступаНаУровнеЗаписей(Истина, Ложь, 0, Истина); + КонецЕсли; КонецПроцедуры @@ -1256,6 +1318,8 @@ РегистрыСведений.НастройкиПравОбъектов.ОбновитьВозможныеПраваДляНастройкиПравОбъектов(ЕстьИзменения); + РегистрыСведений.ПараметрыОграниченияДоступа.ОбновитьВерсиюТекстовОграниченияДоступа(ЕстьИзменения); + КонецПроцедуры // Обновляет описание свойств видов доступа в параметрах работы программы. @@ -1352,22 +1416,6 @@ Обработчик.ЧитаемыеОбъекты = "Справочник.ГруппыДоступа"; Обработчик.ИзменяемыеОбъекты = "РегистрСведений.ТаблицыГруппДоступа,РегистрСведений.ЗначенияГруппДоступа,РегистрСведений.ЗначенияГруппДоступаПоУмолчанию"; - Если Не ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() - Или ОграничиватьДоступНаУровнеЗаписейУниверсально(Истина) Тогда - - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "3.1.1.109"; - Обработчик.Процедура = "РегистрыСведений.ПараметрыОграниченияДоступа.ОбработатьДанныеДляПереходаНаНовуюВерсию2"; - Обработчик.РежимВыполнения = "Отложенно"; - Обработчик.ЗапускатьИВПодчиненномУзлеРИБСФильтрами = Истина; - Обработчик.Комментарий = НСтр("ru = 'Планирование частичного обновления доступа по изменениям программы.'"); - Обработчик.Идентификатор = Новый УникальныйИдентификатор("2721d667-858d-48ed-8736-f7ece8218697"); - Обработчик.ПроцедураЗаполненияДанныхОбновления = "РегистрыСведений.ПараметрыОграниченияДоступа.ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию2"; - Обработчик.ОчередьОтложеннойОбработки = 1; - Обработчик.ЧитаемыеОбъекты = "РегистрСведений.ПараметрыОграниченияДоступа"; - Обработчик.ИзменяемыеОбъекты = "РегистрСведений.ПараметрыОграниченияДоступа"; - КонецЕсли; - Обработчик = Обработчики.Добавить(); Обработчик.Версия = "3.0.2.139"; Обработчик.Процедура = "РегистрыСведений.ГруппыЗначенийДоступа.ОбработатьДанныеДляПереходаНаНовуюВерсию"; @@ -1726,6 +1774,13 @@ ОбновитьРолиПользователей(Ссылка, ПарольПользователяСервиса); + Если ОграничиватьДоступНаУровнеЗаписейУниверсально() Тогда + ЗапланироватьОбновлениеНаборовГруппДоступа( + "ПослеУстановкиПользователяИБ", + ТипЗнч(Ссылка) = Тип("СправочникСсылка.Пользователи"), + ТипЗнч(Ссылка) = Тип("СправочникСсылка.ВнешниеПользователи")); + КонецЕсли; + КонецПроцедуры // См. ИнтеграцияПодсистемБСП.ПриОпределенииТекстаВопросаПередЗаписьюПервогоАдминистратора. @@ -1929,6 +1984,13 @@ МодульВариантыОтчетов.НастроитьОтчетВМодулеМенеджера(Настройки, Метаданные.Отчеты.ПраваДоступа); КонецПроцедуры +// Обработчики событий подсистемы КонтрольВеденияУчета. + +// См. ИнтеграцияПодсистемБСП.ПриОпределенииОбъектовИсключаемыхИзПроверки +Процедура ПриОпределенииОбъектовИсключаемыхИзПроверки(Объекты) Экспорт + ПриДобавленииИсключенийПоискаСсылокДопускающихУдаление(Объекты); +КонецПроцедуры + // Обработчики событий подсистемы УправлениеДоступом. // См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа. @@ -2252,7 +2314,7 @@ // Обновляет список ролей пользователей информационной базы // по их текущим принадлежностям к группам доступа. // Пользователи с ролью "ПолныеПрава" игнорируется. -// +// // Параметры: // Пользователи - СправочникСсылка.Пользователи, // СправочникСсылка.ВнешниеПользователи. @@ -2263,9 +2325,9 @@ // то будут обновлены роли всех внешних пользователей, // иначе будут обновлены роли всех пользователей. // -// ПарольПользователяСервиса - Строка - Пароль для авторизации в менеджере +// ПарольПользователяСервиса - Строка - Пароль для авторизации в менеджере // сервиса. -// ЕстьИзменения - Булево (возвращаемое значение) - в этот параметр возвращается +// ЕстьИзменения - Булево - (возвращаемое значение) - в этот параметр возвращается // значение Истина, если производилась запись, иначе не изменяется. // Процедура ОбновитьРолиПользователей(Знач Пользователи1 = Неопределено, @@ -2647,6 +2709,29 @@ РегистрыСведений.ГруппыЗначенийДоступа.ОбновитьГруппыЗначенийДоступа(Объект); КонецЕсли; + Если СвойстваВидовДоступа.ПоТипамЗначенийСИерархией.Получить(ТипЗнч(Объект)) <> Неопределено Тогда + Родитель = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.Ссылка, "Родитель"); + Если Объект.Родитель <> Родитель Тогда + Объект.ДополнительныеСвойства.Вставить("ОбновитьЗначенияГруппДоступа"); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +// Обработчик подписки ОбновитьЗначенияГруппДоступа на событие ПриЗаписи: +// - обновляет значения групп доступа, выбранные с учетом иерархии. +// +Процедура ОбновитьЗначенияГруппДоступа(Источник) Экспорт + + Если Источник.ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + + Если Источник.ДополнительныеСвойства.Свойство("ОбновитьЗначенияГруппДоступа") Тогда + ГруппыДоступа = ГруппыДоступаИспользующиеИерархиюЗначенийДоступа(ТипЗнч(Источник.Ссылка)); + РегистрыСведений.ЗначенияГруппДоступа.ОбновитьДанныеРегистра(ГруппыДоступа); + КонецЕсли; + КонецПроцедуры // Обработчик подписки ОбновитьГруппыВладельцевНастроекПрав на событие ПередЗаписью: @@ -2792,7 +2877,7 @@ КонецЦикла; - Если КоличествоДанных < 10000 Тогда + Если КоличествоДанных < 10000 И Не ОграничиватьДоступНаУровнеЗаписейУниверсально(Ложь, Истина) Тогда // Заполнение регистра сведений НаборыЗначенийДоступа. ТипыОбъектов = УправлениеДоступомСлужебныйПовтИсп.ТипыОбъектовВПодпискахНаСобытия( @@ -2826,7 +2911,7 @@ КонецЕсли; // Обновление кэш-реквизитов в наборах значений доступа. - Если КоличествоДанных < 10000 Тогда + Если КоличествоДанных < 10000 И Не ОграничиватьДоступНаУровнеЗаписейУниверсально(Ложь, Истина) Тогда ТипыЗначенийДоступа = СвойстваВидовДоступа.ПоТипамЗначений; ТипыЗначенийДоступаСГруппами = СвойстваВидовДоступа.ТипыЗначенийДоступаСГруппами; @@ -2965,7 +3050,7 @@ // - Строка - имя вида доступа. // // Возвращаемое значение: -// Булево. +// Булево - // Функция ВидДоступаИспользуется(Знач ВидДоступа) Экспорт @@ -3117,7 +3202,11 @@ ОбновлениеИнформационнойБазы.ЗаписатьДанные(Объект); Иначе Объект.ОбменДанными.Загрузка = Истина; + // АПК:1327-выкл - №783.1.4.1 Допустимо оставить запись без + // предварительной управляемой блокировки объекта, так как только + // для RLS в формате БСП 2.х (устарело) и ни разу не вызывало проблем. Объект.Записать(); + // АПК:1327-вкл. КонецЕсли; ЕстьИзменения = Истина; КонецЕсли; @@ -3265,7 +3354,8 @@ // @ВидДоступа - ОпределяемыйТип.ЗначениеДоступа, // @ТипЗначений - ОпределяемыйТип.ЗначениеДоступа, // @ПредставлениеТипа - Строка, -// @ИмяТаблицы - Строка. +// @ИмяТаблицы - Строка, +// @ИерархияЭлементов - Булево. // // Параметры: // Форма - ФормаКлиентскогоПриложения, которую требуется настроить для @@ -3286,6 +3376,8 @@ Форма.ИмяРеквизитаХранилищаТаблиц = ИмяРеквизитаХранилищаТаблиц; Форма.ЭтоПрофильГруппДоступа = ЭтоПрофиль; + СвойстваВидовДоступа = УправлениеДоступомСлужебныйПовтИсп.СвойстваВидовДоступа(); + // Заполнение типов значений доступа всех видов доступа. Для каждого СвойстваВидаДоступа Из СвойстваВидаДоступа() Цикл Для каждого Тип Из СвойстваВидаДоступа.ТипыВыбираемыхЗначений Цикл @@ -3307,6 +3399,7 @@ НоваяСтрока.ТипЗначений = ОписаниеТипа.ПривестиЗначение(Неопределено); НоваяСтрока.ПредставлениеТипа = ПредставлениеТипа; НоваяСтрока.ИмяТаблицы = МетаданныеТипа.ПолноеИмя(); + НоваяСтрока.ИерархияЭлементов = СвойстваВидовДоступа.ПоТипамЗначенийСИерархией.Получить(Тип) <> Неопределено; КонецЦикла; КонецЦикла; @@ -3325,9 +3418,6 @@ ОбновитьОтображениеНеиспользуемыхВидовДоступа(Форма, Истина); - СтандартныеПодсистемыСервер.УстановитьОтображениеЗаголовковГрупп( - Форма, "ЗначенияДоступаПоВидуДоступа"); - // Настройка параметров выбора значения доступа. ПараметрыВыбора = Новый Массив; ПараметрыВыбора.Добавить(Новый ПараметрВыбора("ЭтоВыборЗначенияДоступа", Истина)); @@ -3489,14 +3579,14 @@ // объекты <Регистр*>НаборЗаписей в свойство ДополнительныеСвойства // будут вставлены все параметры структуры. // -// * ОбновлениеИБ - Булево - если Истина, то необходимо выполнять запись данных, +// * ОбновлениеИБ - Булево - если Истина, то необходимо выполнять запись данных, // не выполняя лишних, избыточных действий с данными. // См. ОбновлениеИнформационнойБазы.ЗаписатьДанные. // Если свойство не вставлено, то значение вычисляется по "Или" с помощью функций // ВыполняетсяОбновлениеИнформационнойБазы и ЭтоВызовИзОбработчикаОбновления // общего модуля ОбновлениеИнформационнойБазы. // -// ЕстьИзменения - Булево (возвращаемое значение) - если производилась запись, +// ЕстьИзменения - Булево - (возвращаемое значение) - если производилась запись, // устанавливается Истина, иначе не изменяется. // // ИзмененныеЗаписи - Неопределено - никаких действий, иначе @@ -3695,14 +3785,14 @@ // объекты <Регистр*>НаборЗаписей в свойство // ДополнительныеСвойства будут вставлены все параметры структуры. // -// * ОбновлениеИБ - Булево - если Истина, то необходимо выполнять запись данных, +// * ОбновлениеИБ - Булево - если Истина, то необходимо выполнять запись данных, // не выполняя лишних, избыточных действий с данными. // См. ОбновлениеИнформационнойБазы.ЗаписатьДанные. // Если свойство не вставлено, то значение вычисляется по "Или" с помощью функций // ВыполняетсяОбновлениеИнформационнойБазы и ЭтоВызовИзОбработчикаОбновления // общего модуля ОбновлениеИнформационнойБазы. // -// ЕстьИзменения - Булево (возвращаемое значение) - если производилась запись, +// ЕстьИзменения - Булево - (возвращаемое значение) - если производилась запись, // устанавливается Истина, иначе не изменяется. // Процедура ОбновитьНаборыЗаписей(Знач Данные, ЕстьИзменения) Экспорт @@ -3920,14 +4010,14 @@ // объекты <Регистр*>НаборЗаписей в свойство // ДополнительныеСвойства будут вставлены все параметры структуры. // -// * ОбновлениеИБ - Булево - если Истина, то необходимо выполнять запись данных, +// * ОбновлениеИБ - Булево - если Истина, то необходимо выполнять запись данных, // не выполняя лишних, избыточных действий с данными. // См. ОбновлениеИнформационнойБазы.ЗаписатьДанные. // Если свойство не вставлено, то значение вычисляется по "Или" с помощью функций // ВыполняетсяОбновлениеИнформационнойБазы и ЭтоВызовИзОбработчикаОбновления // общего модуля ОбновлениеИнформационнойБазы. // -// ЕстьИзменения - Булево (возвращаемое значение) - если производилась запись, +// ЕстьИзменения - Булево - (возвращаемое значение) - если производилась запись, // устанавливается Истина, иначе не изменяется. // Процедура ОбновитьРегистрСведений(Знач Данные, ЕстьИзменения = Неопределено) Экспорт @@ -4027,7 +4117,7 @@ // - Тип, по которому можно найти объект метаданных, // - Строка - полное имя объекта метаданных. // Возвращаемое значение: -// Ссылка. +// Ссылка - . // Функция ПустаяСсылкаОбъектаМетаданных(ОписаниеОбъектаМетаданных) Экспорт @@ -4265,7 +4355,7 @@ Справочники.ПрофилиГруппДоступа.ОбновитьПоставляемыеПрофилиПоИзменениямКонфигурации(); Справочники.ГруппыДоступа.ПометитьНаУдалениеГруппыДоступаПомеченныхПрофилей(); РегистрыСведений.НаборыЗначенийДоступа.ОбновитьВспомогательныеДанныеРегистраПоИзменениямКонфигурации(); - РегистрыСведений.ПараметрыОграниченияДоступа.ОбновитьДанныеРегистра(); + РегистрыСведений.ПараметрыОграниченияДоступа.ЗапланироватьОбновлениеДоступаПоИзменениямКонфигурации(); ЗафиксироватьТранзакцию(); Исключение @@ -4357,11 +4447,11 @@ Процедура ЗаполнитьНаименованиеПредопределенныхЭлементов() Экспорт ПрофильАдминистратор = Справочники.ПрофилиГруппДоступа.Администратор.ПолучитьОбъект(); - ПрофильАдминистратор.Наименование = НСтр("ru='Администратор'"); + ПрофильАдминистратор.Наименование = НСтр("ru = 'Администратор'"); ОбновлениеИнформационнойБазы.ЗаписатьОбъект(ПрофильАдминистратор); ГруппаАдминистраторы = Справочники.ГруппыДоступа.Администраторы.ПолучитьОбъект(); - ГруппаАдминистраторы.Наименование = НСтр("ru='Администраторы'"); + ГруппаАдминистраторы.Наименование = НСтр("ru = 'Администраторы'"); ОбновлениеИнформационнойБазы.ЗаписатьОбъект(ГруппаАдминистраторы); КонецПроцедуры @@ -4504,7 +4594,11 @@ ОбновлениеИнформационнойБазы.ЗаписатьДанные(Объект); Иначе Объект.ОбменДанными.Загрузка = Истина; + // АПК:1327-выкл - №783.1.4.1 Допустимо оставить запись без + // предварительной управляемой блокировки объекта, так как только + // для RLS в формате БСП 2.х (устарело) и ни разу не вызывало проблем. Объект.Записать(); + // АПК:1327-вкл. КонецЕсли; РазблокироватьДанныеДляРедактирования(СсылкаНаЗависимыйОбъект); Исключение @@ -4551,11 +4645,11 @@ ОписаниеПрофиля.Идентификатор = ИдентификаторПрофиляОткрытиеВнешнихОтчетовИОбработок(); ОписаниеПрофиля.Наименование = - НСтр("ru = 'Открытие внешних отчетов и обработок'", Метаданные.ОсновнойЯзык.КодЯзыка); + НСтр("ru = 'Открытие внешних отчетов и обработок'", ОбщегоНазначения.КодОсновногоЯзыка()); ОписаниеПрофиля.Описание = НСтр("ru = 'Предоставляет право открытия внешних отчетов и обработок из меню ""Файл - Открыть"". - |Состав ролей профиля не рекомендуется изменять.'", Метаданные.ОсновнойЯзык.КодЯзыка); + |Состав ролей профиля не рекомендуется изменять.'"); ОписаниеПрофиля.Роли.Добавить("ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок"); @@ -4586,7 +4680,7 @@ ГруппаДоступаОбъект.Профиль = СвойстваПрофиля.Ссылка; ГруппаДоступаОбъект.Комментарий = НСтр("ru = 'Предоставляет право открытия внешних отчетов и обработок из меню ""Файл - Открыть"".'", - Метаданные.ОсновнойЯзык.КодЯзыка); + ОбщегоНазначения.КодОсновногоЯзыка()); ГруппаДоступаОбъект.Записать(); // Важно, чтобы созданная группа "уехала" в подчиненный узел. @@ -4932,25 +5026,39 @@ Возврат Истина; КонецЕсли; - ГруппаДоступа = ГруппаДоступа.ПолучитьОбъект(); + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Справочник.ГруппыДоступа"); + ЭлементБлокировки.УстановитьЗначение("Ссылка", ГруппаДоступа); - Если НЕ УпрощенныйИнтерфейсНастройкиПравДоступа() - И НЕ ГруппаДоступа.ОсновнаяГруппаДоступаПоставляемогоПрофиля Тогда + НачатьТранзакцию(); + Попытка + Блокировка.Заблокировать(); - ГруппаДоступа.ОсновнаяГруппаДоступаПоставляемогоПрофиля = Истина; - КонецЕсли; - - Если Включить Тогда - ГруппаДоступа.Пользователи.Добавить().Пользователь = Пользователь; - Иначе - Отбор = Новый Структура("Пользователь", Пользователь); - Строки = ГруппаДоступа.Пользователи.НайтиСтроки(Отбор); - Для каждого Строка Из Строки Цикл - ГруппаДоступа.Пользователи.Удалить(Строка); - КонецЦикла; - КонецЕсли; - - ГруппаДоступа.Записать(); + ГруппаДоступа = ГруппаДоступа.ПолучитьОбъект(); + + Если НЕ УпрощенныйИнтерфейсНастройкиПравДоступа() + И НЕ ГруппаДоступа.ОсновнаяГруппаДоступаПоставляемогоПрофиля Тогда + + ГруппаДоступа.ОсновнаяГруппаДоступаПоставляемогоПрофиля = Истина; + КонецЕсли; + + Если Включить Тогда + ГруппаДоступа.Пользователи.Добавить().Пользователь = Пользователь; + Иначе + Отбор = Новый Структура("Пользователь", Пользователь); + Строки = ГруппаДоступа.Пользователи.НайтиСтроки(Отбор); + Для каждого Строка Из Строки Цикл + ГруппаДоступа.Пользователи.Удалить(Строка); + КонецЦикла; + КонецЕсли; + + ГруппаДоступа.Записать(); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; Возврат Истина; @@ -5071,7 +5179,12 @@ Запрос.УстановитьПараметр("СсылкаНаОбъект", СсылкаНаОбъект); + // АПК:1328-выкл - №648.1.1 Допустимо чтение без предварительной + // управляемой разделяемой блокировки объекта, так как только + // для RLS в формате БСП 2.х (устарело) и ни разу не вызывало проблем. Если НЕ Запрос.Выполнить().Пустой() Тогда + // АПК:1328-вкл. + // Очистка устаревшего набора. // Запись нового набора будет выполнена регламентным заданием, // после включения ограничения на уровне записей. @@ -5153,6 +5266,7 @@ Параметры.Добавить("СтандартныеПодсистемы.УправлениеДоступом.ОписаниеПоставляемыхПрофилей"); Параметры.Добавить("СтандартныеПодсистемы.УправлениеДоступом.ПредопределенныеПрофилиГруппДоступа"); Параметры.Добавить("СтандартныеПодсистемы.УправлениеДоступом.ТипыГруппИЗначенийДоступа"); + Параметры.Добавить("СтандартныеПодсистемы.УправлениеДоступом.ВерсияТекстовОграниченияДоступа"); Для Каждого Параметр Из Параметры Цикл @@ -5343,7 +5457,9 @@ Итог.Вставить("РолиПользователей", РезультатыЗапросов[ПоследнийРезультат].Выгрузить()); Итог.РолиПользователей.Индексы.Добавить("Пользователь"); - ИдентификаторыРолей = Итог.РолиПользователей.ВыгрузитьКолонку("РольСсылка"); + РолиВсехПользователей = Итог.РолиПользователей.Скопировать(, "РольСсылка"); + РолиВсехПользователей.Свернуть("РольСсылка"); + ИдентификаторыРолей = РолиВсехПользователей.ВыгрузитьКолонку("РольСсылка"); МетаданныеРолей = ОбщегоНазначения.ОбъектыМетаданныхПоИдентификаторам(ИдентификаторыРолей, Ложь); Для Каждого Строка Из Итог.РолиПользователей Цикл @@ -5370,7 +5486,7 @@ Метаданные.Справочники.ПрофилиГруппДоступа, Профиль, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru= 'При обновлении ролей пользователя ""%1"" + НСтр("ru = 'При обновлении ролей пользователя ""%1"" |роль ""%2"" |профиля групп доступа ""%3"" |недоступна пользователю.'"), @@ -5395,7 +5511,7 @@ Метаданные.Справочники.ПрофилиГруппДоступа, Профиль, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru= 'При обновлении ролей пользователя ""%1"" + НСтр("ru = 'При обновлении ролей пользователя ""%1"" |роль ""%2"" |профиля групп доступа ""%3"" |не найдена в метаданных.'"), @@ -5445,25 +5561,27 @@ Отбор = Новый Структура("ИспользоватьОсновныеРолиДляВсехПользователей", Истина); Расширения = РасширенияКонфигурации.Получить(Отбор); + РазделениеВключено = ОбщегоНазначения.РазделениеВключено(); + ТекущаяОбластьДействия = ?(ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных(), + ОбластьДействияРасширенияКонфигурации.РазделениеДанных, + ОбластьДействияРасширенияКонфигурации.ИнформационнаяБаза); Для Каждого Расширение Из Расширения Цикл - Если Не Расширение.ИспользоватьОсновныеРолиДляВсехПользователей Тогда + Если Не Расширение.ИспользоватьОсновныеРолиДляВсехПользователей + Или РазделениеВключено + И Расширение.ОбластьДействия <> ТекущаяОбластьДействия Тогда Продолжить; КонецЕсли; - Расширение.ИспользоватьОсновныеРолиДляВсехПользователей = Ложь; + Справочники.ВерсииРасширений.ОтключитьИспользованиеОсновныхРолейДляВсехПользователей(Расширение); + // АПК:280-выкл - №499.3.4 Допустимо пропустить обработку исключения, так как + // это не останавливающая операция и будет выполнена успешно при очередном обновлении ролей. + // Запись расширения не является транзакционной операцией, поэтому не создает ошибок в транзакции. Попытка Расширение.Записать(); Исключение - ИнформацияОбОшибке = ИнформацияОбОшибке(); - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не удалось отключить флажок ""Использовать основные роли для всех пользователей"" - |у расширения ""%1"" по причине: - | - |%2'"), - Расширение.Синоним, - КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); - ВызватьИсключение ТекстОшибки; + // Обработка не требуется. КонецПопытки; + // АПК:280-вкл. КонецЦикла; КонецПроцедуры @@ -6094,18 +6212,24 @@ ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы( "ИмяТаблицы", Новый ОписаниеТипов("Строка"), "ВсеТипыВыбираемыхЗначений")); + ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы( + "ИерархияЭлементов", Новый ОписаниеТипов("Булево"), "ВсеТипыВыбираемыхЗначений")); + Форма.ИзменитьРеквизиты(ДобавляемыеРеквизиты); КонецПроцедуры Процедура ЗаполнитьТаблицуВсеВидыДоступаВФорме(Форма) - Для каждого СвойстваВидаДоступа Из СвойстваВидаДоступа() Цикл + Для Каждого СвойстваВидаДоступа Из СвойстваВидаДоступа() Цикл Строка = Форма.ВсеВидыДоступа.Добавить(); Строка.Ссылка = СвойстваВидаДоступа.Ссылка; Строка.Используется = ВидДоступаИспользуется(Строка.Ссылка); // Обеспечение уникальности представлений. - Представление = СвойстваВидаДоступа.Представление; + Представление = ПредставлениеВидаДоступа(СвойстваВидаДоступа); + Если Не ЗначениеЗаполнено(Представление) Тогда + Представление = Строка.Имя; + КонецЕсли; Отбор = Новый Структура("Представление", Представление); Пока Форма.ВсеВидыДоступа.НайтиСтроки(Отбор).Количество() > 0 Цикл Отбор.Представление = Отбор.Представление + " "; @@ -6429,13 +6553,8 @@ // Обновление свойств видов доступа. -// Для процедуры ОбновитьОписаниеСвойствВидовДоступа. -// Возвращает свойства видов доступа, заполняемых при внедрении -// в процедуре ПриЗаполненииВидовДоступа -// общего модуля УправлениеДоступомПереопределяемый -// и одноименных обработчиках этого события. -// -Функция СвойстваВидовДоступа() +// Для функций СвойстваВидовДоступаДляХранения, ПредставлениеВидовДоступа. +Функция ЗаполненныеВидыДоступа() // 1. Заполнение данных, указанных при внедрении. @@ -6450,6 +6569,20 @@ ИнтеграцияПодсистемБСП.ПриЗаполненииВидовДоступа(ВидыДоступа); УправлениеДоступомПереопределяемый.ПриЗаполненииВидовДоступа(ВидыДоступа); + Возврат ВидыДоступа; + +КонецФункции + +// Для процедуры ОбновитьОписаниеСвойствВидовДоступа. +// Возвращает свойства видов доступа, заполняемых при внедрении +// в процедуре ПриЗаполненииВидовДоступа +// общего модуля УправлениеДоступомПереопределяемый +// и одноименных обработчиках этого события. +// +Функция СвойстваВидовДоступа() + + ВидыДоступа = ЗаполненныеВидыДоступа(); + // Проверки: // - тип значений доступа не указан для 2-х видов доступа // - тип значений доступа Пользователи, ГруппыПользователей используется только для вида доступа Пользователи. @@ -6525,7 +6658,6 @@ Свойства = Новый Структура; Свойства.Вставить("Имя", ВидДоступа.Имя); Свойства.Вставить("Ссылка", ПустаяСсылкаТипаЗначений); - Свойства.Вставить("Представление", ВидДоступа.Представление); Свойства.Вставить("ТипЗначений", ВидДоступа.ТипЗначений); Свойства.Вставить("ТипГруппЗначений", ВидДоступа.ТипГруппЗначений); Свойства.Вставить("НесколькоГруппЗначений", ВидДоступа.НесколькоГруппЗначений); @@ -6589,6 +6721,24 @@ ТипыЗначенийДоступаСГруппами.Вставить(Тип("СправочникСсылка.ГруппыВнешнихПользователей"), Справочники.ГруппыВнешнихПользователей.ПустаяСсылка()); + + ПоТипамЗначенийСИерархией = Новый Соответствие; + Для Каждого КлючИЗначение Из ПоТипамЗначений Цикл + ТипСсылка = КлючИЗначение.Ключ; + Если ТипыЗначенийДоступаСГруппами[ТипСсылка] <> Неопределено Тогда + Продолжить; + КонецЕсли; + + ОбъектМетаданных = Метаданные.НайтиПоТипу(ТипСсылка); + Если ОбъектМетаданных <> Неопределено + И (ОбщегоНазначения.ЭтоСправочник(ОбъектМетаданных) Или ОбщегоНазначения.ЭтоПланВидовХарактеристик(ОбъектМетаданных)) + И ОбъектМетаданных.Иерархический Тогда + + ТипОбъект = СтандартныеПодсистемыСервер.ТипОбъектаИлиНабораЗаписейОбъектаМетаданных(ОбъектМетаданных); + ПоТипамЗначенийСИерархией.Вставить(ТипСсылка, КлючИЗначение.Значение); + ПоТипамЗначенийСИерархией.Вставить(ТипОбъект, КлючИЗначение.Значение); + КонецЕсли; + КонецЦикла; Для каждого СвойстваВидаДоступа Из МассивСвойств Цикл Если ВидыДоступаСГруппами.Получить(СвойстваВидаДоступа.Имя) <> Неопределено Тогда @@ -6606,6 +6756,7 @@ СвойстваВидовДоступа.Вставить("ПоИменам", ПоИменам); СвойстваВидовДоступа.Вставить("ПоСсылкам", ПоСсылкам); СвойстваВидовДоступа.Вставить("ПоТипамЗначений", ПоТипамЗначений); + СвойстваВидовДоступа.Вставить("ПоТипамЗначенийСИерархией", ПоТипамЗначенийСИерархией); СвойстваВидовДоступа.Вставить("ПоТипамГруппИЗначений", ПоТипамГруппИЗначений); СвойстваВидовДоступа.Вставить("ЗначенияДоступаСГруппами", ЗначенияДоступаСГруппами); СвойстваВидовДоступа.Вставить("БезГруппДляЗначенияДоступа", БезГруппДляЗначенияДоступа); @@ -6844,6 +6995,34 @@ КонецПроцедуры +Функция ПредставлениеВидовДоступа() Экспорт + + ВидыДоступа = ЗаполненныеВидыДоступа(); + + ПредставлениеВидовДоступа = Новый Соответствие; + + Для Каждого ВидДоступа Из ВидыДоступа Цикл + ПредставлениеВидовДоступа.Вставить(ВидДоступа.ТипЗначений, ВидДоступа.Представление); + КонецЦикла; + + Возврат Новый ФиксированноеСоответствие(ПредставлениеВидовДоступа); + +КонецФункции + +Функция ПредставлениеВидаДоступа(СвойстваВидаДоступа) Экспорт + + ПредставлениеВидовДоступа = УправлениеДоступомСлужебныйПовтИсп.ПредставлениеВидовДоступа(); + + Представление = ПредставлениеВидовДоступа.Получить(СвойстваВидаДоступа.ТипЗначений); + + Если Не ЗначениеЗаполнено(Представление) Тогда + Представление = СвойстваВидаДоступа.Имя; + КонецЕсли; + + Возврат Представление; + +КонецФункции + // Для процедуры ЗаполнитьЗначенияДоступаСГруппами. Процедура ДобавитьВМассив(Массив, Значение) @@ -6921,6 +7100,65 @@ КонецФункции +Функция ГруппыДоступаИспользующиеИерархиюЗначенийДоступа(ТипЗначенияВидаДоступа) + + УстановитьПривилегированныйРежим(Истина); + + ТекстЗапроса = + "ВЫБРАТЬ + | ГруппыДоступа.Ссылка КАК Ссылка, + | ГруппыДоступа.Профиль КАК Профиль + |ПОМЕСТИТЬ ГруппыДоступа + |ИЗ + | Справочник.ГруппыДоступа КАК ГруппыДоступа + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПрофилиГруппДоступа КАК ПрофилиГруппДоступа + | ПО ГруппыДоступа.Профиль = ПрофилиГруппДоступа.Ссылка + | И (ГруппыДоступа.Профиль <> ЗНАЧЕНИЕ(Справочник.ПрофилиГруппДоступа.Администратор)) + | И (НЕ ГруппыДоступа.ПометкаУдаления) + | И (НЕ ПрофилиГруппДоступа.ПометкаУдаления) + | И (ИСТИНА В + | (ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА КАК ЗначениеИстина + | ИЗ + | Справочник.ГруппыДоступа.Пользователи КАК УчастникиГруппДоступа + | ГДЕ + | УчастникиГруппДоступа.Ссылка = ГруппыДоступа.Ссылка)) + | + |ИНДЕКСИРОВАТЬ ПО + | Ссылка, + | ГруппыДоступа.Профиль + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ РАЗЛИЧНЫЕ + | ГруппыДоступа.Ссылка КАК Ссылка + |ИЗ + | Справочник.ГруппыДоступа.ЗначенияДоступа КАК ГруппыДоступаЗначенияДоступа + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ГруппыДоступа КАК ГруппыДоступа + | ПО ГруппыДоступаЗначенияДоступа.Ссылка = ГруппыДоступа.Ссылка + |ГДЕ + | ГруппыДоступаЗначенияДоступа.ВключаяНижестоящие + | И ТИПЗНАЧЕНИЯ(ГруппыДоступаЗначенияДоступа.ЗначениеДоступа) = &ТипЗначенияВидаДоступа + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ РАЗЛИЧНЫЕ + | ГруппыДоступа.Ссылка + |ИЗ + | Справочник.ПрофилиГруппДоступа.ЗначенияДоступа КАК ПрофилиГруппДоступаЗначенияДоступа + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ГруппыДоступа КАК ГруппыДоступа + | ПО ПрофилиГруппДоступаЗначенияДоступа.Ссылка = ГруппыДоступа.Профиль + |ГДЕ + | ПрофилиГруппДоступаЗначенияДоступа.ВключаяНижестоящие + | И ТИПЗНАЧЕНИЯ(ПрофилиГруппДоступаЗначенияДоступа.ЗначениеДоступа) = &ТипЗначенияВидаДоступа"; + + Запрос = Новый Запрос(ТекстЗапроса); + Запрос.УстановитьПараметр("ТипЗначенияВидаДоступа", ТипЗначенияВидаДоступа); + + Возврат Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); + +КонецФункции + #Область УниверсальноеОграничение //////////////////////////////////////////////////////////////////////////////// @@ -7566,6 +7804,10 @@ // Для процедур ПроверитьДоступПередЗаписьюИсточника, ПроверитьДоступПриЗаписиИсточника. Функция ПропуститьПроверкуДоступа(Отказ, Источник) + Если СтандартныеПодсистемыСервер.ЭтоИдентификаторОбъектаМетаданных(Источник) Тогда + Возврат Истина; + КонецЕсли; + Если УправлениеДоступомСлужебныйПовтИсп.РазделенныеДанныеНедоступны() Тогда Возврат Истина; КонецЕсли; @@ -7600,10 +7842,6 @@ Возврат Истина; КонецЕсли; - Если СтандартныеПодсистемыСервер.ЭтоИдентификаторОбъектаМетаданных(Источник) Тогда - Возврат Истина; - КонецЕсли; - Если Отказ Тогда Возврат Истина; КонецЕсли; @@ -7656,7 +7894,9 @@ ОтборПоИзмерениям = ОтборПоИзмерениям + ?(ОтборПоИзмерениям = "", "", " | И ") + "ТекущаяТаблица." + ЭлементОтбора.Имя + " = &ЗначениеПоля" + ЭлементОтбора.Имя; - Запрос.УстановитьПараметр("ЗначениеПоля" + ЭлементОтбора.Имя, ЭлементОтбора.Значение); + Если Запрос <> Неопределено Тогда + Запрос.УстановитьПараметр("ЗначениеПоля" + ЭлементОтбора.Имя, ЭлементОтбора.Значение); + КонецЕсли; Если ЗапросНовыхКомбинаций <> Неопределено Тогда ЗапросНовыхКомбинаций.УстановитьПараметр("ЗначениеПоля" + ЭлементОтбора.Имя, ЭлементОтбора.Значение); КонецЕсли; @@ -7707,31 +7947,18 @@ ПолноеИмя = Источник.Метаданные().ПолноеИмя(); ИдентификаторТранзакции = Источник.ДополнительныеСвойства.УправлениеДоступомИдентификаторТранзакции; - ПараметрыОграничения = ПараметрыОграниченияПриПроверкеДоступа(Источник, ПолноеИмя, ИдентификаторТранзакции); + ВсеПараметрыОграничения = ПараметрыОграниченияПриПроверкеДоступа(Источник, ПолноеИмя, ИдентификаторТранзакции); - Если ПараметрыОграничения.ОграничениеОтключено Тогда - Если Не ПередЗаписью И ПараметрыОграничения.СЗаписьюВсегдаРазрешенногоКлючаДоступа Тогда - ЭтоНовый = Не Источник.ДополнительныеСвойства.Свойство( - "УправлениеДоступомЗначенияПолейДляПроверкиИзмененияПриЗаписи"); - - Если ЭтоНовый Или КлючДоступаИсточникаУстарел(Источник.Ссылка, ПараметрыОграничения, Источник) Тогда - УстановитьОтключениеБезопасногоРежима(Истина); - УстановитьПривилегированныйРежим(Истина); - - ОбновитьКлючиДоступаЭлементовДанныхПриЗаписи(Источник.Ссылка, - ПараметрыОграничения, ИдентификаторТранзакции,,, Источник); - - УстановитьПривилегированныйРежим(Ложь); - УстановитьОтключениеБезопасногоРежима(Ложь); - КонецЕсли; - КонецЕсли; - Возврат; + Если Пользователи.ЭтоСеансВнешнегоПользователя() Тогда + ПараметрыОграничения = ВсеПараметрыОграничения.ДляВнешнихПользователей; + ПараметрыОграниченияДополнительные = ВсеПараметрыОграничения.ДляПользователей + Иначе + ПараметрыОграничения = ВсеПараметрыОграничения.ДляПользователей; + ПараметрыОграниченияДополнительные = ВсеПараметрыОграничения.ДляВнешнихПользователей КонецЕсли; - Если ПараметрыОграничения.ДоступЗапрещен Тогда - Если ЭтоПолноправныйПользователь Тогда - Возврат; - ИначеЕсли ПараметрыОграничения.ДляВнешнихПользователей Тогда + Если ПараметрыОграничения.ДоступЗапрещен И Не ЭтоПолноправныйПользователь Тогда + Если ПараметрыОграничения.ДляВнешнихПользователей Тогда ШаблонОшибки = НСтр("ru = 'Внешним пользователям запрещен доступ к данным списка |""%1"".'"); @@ -7746,11 +7973,11 @@ КонецЕсли; Если ЭтоНаборЗаписей Тогда - ПроверитьДоступКНаборуЗаписей(Источник, - ПередЗаписью, Замещение, ПараметрыОграничения, ЭтоПолноправныйПользователь); + ПроверитьДоступКНаборуЗаписей(Источник, ПередЗаписью, Замещение, ЭтоПолноправныйПользователь, + ИдентификаторТранзакции, ПараметрыОграничения, ПараметрыОграниченияДополнительные); Иначе - ПроверитьДоступКОбъекту(Источник, - ПередЗаписью, ПараметрыОграничения, ЭтоПолноправныйПользователь); + ПроверитьДоступКОбъекту(Источник, ПередЗаписью, ЭтоПолноправныйПользователь, + ИдентификаторТранзакции, ПараметрыОграничения, ПараметрыОграниченияДополнительные); КонецЕсли; КонецПроцедуры @@ -7758,12 +7985,13 @@ // Для процедуры ПроверитьДоступКИсточнику. Функция ПараметрыОграниченияПриПроверкеДоступа(Источник, ПолноеИмя, ИдентификаторТранзакции) - Возврат ПараметрыОграничения(ПолноеИмя, ИдентификаторТранзакции); + Возврат ПараметрыОграничения(ПолноеИмя, ИдентификаторТранзакции, Null); КонецФункции // Для процедуры ПроверитьДоступКИсточнику. -Процедура ПроверитьДоступКОбъекту(Источник, ПередЗаписью, ПараметрыОграничения, ЭтоПолноправныйПользователь) +Процедура ПроверитьДоступКОбъекту(Источник, ПередЗаписью, ЭтоПолноправныйПользователь, + ИдентификаторТранзакции, ПараметрыОграничения, ПараметрыОграниченияДополнительные) ЭтоНовый = Не Источник.ДополнительныеСвойства.Свойство( "УправлениеДоступомЗначенияПолейДляПроверкиИзмененияПриЗаписи"); @@ -7772,14 +8000,20 @@ УстановитьПривилегированныйРежим(Истина); Если Не ПередЗаписью Тогда - Если Не ЭтоНовый И Не КлючДоступаИсточникаУстарел(Источник.Ссылка, ПараметрыОграничения, Источник) Тогда + КлючДоступаОбновлен = Ложь; + + ОбновитьКлючДоступаОбъектаПриЗаписи(Источник, ЭтоНовый, ИдентификаторТранзакции, + ПараметрыОграничения, КлючДоступаОбновлен); + + ОбновитьКлючДоступаОбъектаПриЗаписи(Источник, ЭтоНовый, ИдентификаторТранзакции, + ПараметрыОграниченияДополнительные); + + Если Не КлючДоступаОбновлен Тогда Возврат; КонецЕсли; - ОбновитьКлючиДоступаЭлементовДанныхПриЗаписи(Источник.Ссылка, ПараметрыОграничения, - Источник.ДополнительныеСвойства.УправлениеДоступомИдентификаторТранзакции,,, Источник); КонецЕсли; - Если ЭтоПолноправныйПользователь Тогда + Если ПараметрыОграничения.ОграничениеОтключено Или ЭтоПолноправныйПользователь Тогда Возврат; КонецЕсли; @@ -7829,6 +8063,27 @@ КонецПроцедуры +// Для процедуры ПроверитьДоступКОбъекту. +Процедура ОбновитьКлючДоступаОбъектаПриЗаписи(Источник, ЭтоНовый, ИдентификаторТранзакции, + ПараметрыОграничения, КлючДоступаОбновлен = Ложь) + + Если ПараметрыОграничения.ДоступЗапрещен + Или (ПараметрыОграничения.ОграничениеОтключено + И Не ПараметрыОграничения.СЗаписьюВсегдаРазрешенногоКлючаДоступа) Тогда + Возврат; + КонецЕсли; + + Если Не ЭтоНовый И Не КлючДоступаИсточникаУстарел(Источник.Ссылка, ПараметрыОграничения, Источник) Тогда + Возврат; + КонецЕсли; + + ОбновитьКлючиДоступаЭлементовДанныхПриЗаписи(Источник.Ссылка, + ПараметрыОграничения, ИдентификаторТранзакции,,, Источник); + + КлючДоступаОбновлен = Истина; + +КонецПроцедуры + // Для процедур ПроверитьДоступКОбъекту, ПроверитьДоступКНаборуЗаписей. Функция РезультатЗапросаПроверкиДоступа(Запрос, Источник) @@ -7837,46 +8092,31 @@ КонецФункции // Для процедуры ПроверитьДоступКИсточнику. -Процедура ПроверитьДоступКНаборуЗаписей(Источник, ПередЗаписью, Замещение, ПараметрыОграничения, ЭтоПолноправныйПользователь) +Процедура ПроверитьДоступКНаборуЗаписей(Источник, ПередЗаписью, Замещение, ЭтоПолноправныйПользователь, + ИдентификаторТранзакции, ПараметрыОграничения, ПараметрыОграниченияДополнительные) Если ПередЗаписью И (Не Замещение Или ЭтоПолноправныйПользователь) - Или Не ПередЗаписью И Источник.Количество() = 0 - Или ЭтоПолноправныйПользователь - И ПараметрыОграничения.ИспользуетсяОграничениеПоВладельцу Тогда - + Или Не ПередЗаписью И Источник.Количество() = 0 Тогда Возврат; КонецЕсли; - Запрос = Новый Запрос; - Если Не ПередЗаписью Тогда - ЗапросНовыхКомбинаций = Новый Запрос; - КонецЕсли; + ОтборПоИзмерениям = ""; + Запрос = ?(ПараметрыОграничения.ОграничениеОтключено Или ЭтоПолноправныйПользователь, + Неопределено, Новый Запрос); - Если Замещение Тогда - ОтборПоИзмерениям = ОтборПоИзмерениямНабораЗаписей(Источник, Запрос, ЗапросНовыхКомбинаций); - Иначе - ОтборПоИзмерениям = ""; - КомбинацииЗначенийОпорныхПолей = КомбинацииЗначенийОпорныхПолей(Источник, - ОтборПоИзмерениям, ПараметрыОграничения); - - Запрос.УстановитьПараметр("КомбинацииЗначенийОпорныхПолей", КомбинацииЗначенийОпорныхПолей); - ЗапросНовыхКомбинаций.УстановитьПараметр("КомбинацииЗначенийОпорныхПолей", КомбинацииЗначенийОпорныхПолей); + ОбновитьКлючиДоступаКНаборуЗаписей(Источник, ПередЗаписью, Замещение, + ИдентификаторТранзакции, ПараметрыОграничения, ОтборПоИзмерениям, Запрос); + + ОбновитьКлючиДоступаКНаборуЗаписей(Источник, ПередЗаписью, Замещение, + ИдентификаторТранзакции, ПараметрыОграниченияДополнительные, "", Неопределено); + + Если Запрос = Неопределено Тогда + Возврат; КонецЕсли; УстановитьОтключениеБезопасногоРежима(Истина); УстановитьПривилегированныйРежим(Истина); - Если Не ПередЗаписью - И Не ПараметрыОграничения.ИспользуетсяОграничениеПоВладельцу Тогда - - ОбновитьКлючиДоступаНовыхКомбинацийЗначенийОпорныхПолей(ЗапросНовыхКомбинаций, - ОтборПоИзмерениям, Источник, ПараметрыОграничения); - КонецЕсли; - - Если ЭтоПолноправныйПользователь Тогда - Возврат; - КонецЕсли; - Запрос.Текст = СтрЗаменить(ПараметрыОграничения.ТекстЗапросаПроверкиПравЧтениеИзменение, "&ОтборПоИзмерениям", ОтборПоИзмерениям); @@ -7902,6 +8142,49 @@ КонецПроцедуры +// Для процедуры ПроверитьДоступКНаборуЗаписей. +Процедура ОбновитьКлючиДоступаКНаборуЗаписей(Источник, ПередЗаписью, Замещение, + ИдентификаторТранзакции, ПараметрыОграничения, ОтборПоИзмерениям, Запрос) + + Если ПараметрыОграничения.ДоступЗапрещен + Или ПараметрыОграничения.ОграничениеОтключено + Или ПараметрыОграничения.ИспользуетсяОграничениеПоВладельцу + И Запрос = Неопределено Тогда + + Возврат; + КонецЕсли; + + Если Не ПередЗаписью Тогда + ЗапросНовыхКомбинаций = Новый Запрос; + КонецЕсли; + + Если Замещение Тогда + ОтборПоИзмерениям = ОтборПоИзмерениямНабораЗаписей(Источник, Запрос, ЗапросНовыхКомбинаций); + Иначе + КомбинацииЗначенийОпорныхПолей = КомбинацииЗначенийОпорныхПолей(Источник, + ОтборПоИзмерениям, ПараметрыОграничения); + + Если Запрос <> Неопределено Тогда + Запрос.УстановитьПараметр("КомбинацииЗначенийОпорныхПолей", КомбинацииЗначенийОпорныхПолей); + КонецЕсли; + ЗапросНовыхКомбинаций.УстановитьПараметр("КомбинацииЗначенийОпорныхПолей", КомбинацииЗначенийОпорныхПолей); + КонецЕсли; + + Если ПередЗаписью Или ПараметрыОграничения.ИспользуетсяОграничениеПоВладельцу Тогда + Возврат; + КонецЕсли; + + УстановитьОтключениеБезопасногоРежима(Истина); + УстановитьПривилегированныйРежим(Истина); + + ОбновитьКлючиДоступаНовыхКомбинацийЗначенийОпорныхПолей(ЗапросНовыхКомбинаций, + ОтборПоИзмерениям, Источник, ПараметрыОграничения); + + УстановитьПривилегированныйРежим(Ложь); + УстановитьОтключениеБезопасногоРежима(Ложь); + +КонецПроцедуры + // Для процедуры ПроверитьДоступПередЗаписьюИсточника. Процедура ЗаписатьКлючиДоступаНовыхКомбинацийЗначенийОпорныхПолейПередЗаписью(Источник, ЭтоПолноправныйПользователь) @@ -7976,9 +8259,15 @@ Функция ЭлементыДанныхНовыхКомбинацийЗначенийОпорныхПолей(ЗапросНовыхКомбинаций, ОтборПоИзмерениям, Источник, ПараметрыОграничения) - ЗапросНовыхКомбинаций.Текст = - СтрЗаменить(ПараметрыОграничения.ТекстЗапросаНовыхКомбинацийЗначенийОпорныхПолей, - "&ОтборПоИзмерениям", ОтборПоИзмерениям); + Если ЗапросНовыхКомбинаций.Параметры.Свойство("КомбинацииЗначенийОпорныхПолей") Тогда + ЗапросНовыхКомбинаций.Текст = + ПараметрыОграничения.ТекстЗапросаНовыхКомбинацийЗначенийОпорныхПолейНовыхЗаписей; + Иначе + ЗапросНовыхКомбинаций.Текст = СтрЗаменить( + ПараметрыОграничения.ТекстЗапросаНовыхКомбинацийЗначенийОпорныхПолейСуществующихЗаписей, + "&ОтборПоИзмерениям", + ОтборПоИзмерениям); + КонецЕсли; РезультатЗапросаНовыхКомбинаций = ЗапросНовыхКомбинаций.Выполнить(); Если РезультатЗапросаНовыхКомбинаций.Пустой() Тогда @@ -8079,17 +8368,7 @@ КонецЕсли; Иначе ПредставлениеДанных = Строка(Данные); - - Свойства = Новый Структура("РасширенноеПредставлениеОбъекта, ПредставлениеОбъекта"); - ЗаполнитьЗначенияСвойств(Свойства, ОбъектМетаданных); - - ПредставлениеМетаданных = Свойства.РасширенноеПредставлениеОбъекта; - Если Не ЗначениеЗаполнено(ПредставлениеМетаданных) Тогда - ПредставлениеМетаданных = Свойства.ПредставлениеОбъекта; - КонецЕсли; - Если Не ЗначениеЗаполнено(ПредставлениеМетаданных) Тогда - ПредставлениеМетаданных = ОбъектМетаданных.Представление(); - КонецЕсли; + ПредставлениеМетаданных = ОбщегоНазначения.ПредставлениеОбъекта(ОбъектМетаданных); Если Не СтрЗаканчиваетсяНа(ПредставлениеДанных, "(" + ПредставлениеМетаданных + ")") И Не СтрНачинаетсяС(ПредставлениеДанных, ПредставлениеМетаданных) Тогда @@ -8127,6 +8406,7 @@ Запрос.Текст = СтрЗаменить(Запрос.Текст, "ТекущийСписок.Ссылка >= &ПоследняяОбработаннаяСсылка", "ТекущийСписок.Ссылка = &Ссылка"); КонецЕсли; + УстановитьУточнениеПланаЗапроса(Запрос.Текст); УстановитьОтключениеБезопасногоРежима(Истина); УстановитьПривилегированныйРежим(Истина); @@ -8686,6 +8966,31 @@ КонецПроцедуры +// Для процедуры ЗапланироватьОбновлениеДоступа, ЗапланироватьОбновлениеПараметровОграниченияДоступа. +Функция СлужебныйИдентификатор(ПолноеИмя) + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("ПолноеИмя", ПолноеИмя); + Запрос.Текст = + "ВЫБРАТЬ + | ИдентификаторыОбъектовМетаданных.Ссылка КАК Ссылка + |ИЗ + | Справочник.ИдентификаторыОбъектовМетаданных КАК ИдентификаторыОбъектовМетаданных + |ГДЕ + | ИдентификаторыОбъектовМетаданных.ПолноеИмя = &ПолноеИмя + | + |УПОРЯДОЧИТЬ ПО + | ИдентификаторыОбъектовМетаданных.ПометкаУдаления"; + + Выборка = Запрос.Выполнить().Выбрать(); + Если Выборка.Следующий() Тогда + Возврат Выборка.Ссылка; + КонецЕсли; + + Возврат Null; + +КонецФункции + // Для процедур ЗапланироватьОбновлениеДоступаПриИзмененииУчастниковГруппыДоступа, // ЗапланироватьОбновлениеДоступаПослеОбновленияСоставовГруппПользователей, // ЗапланироватьОбновлениеДоступаПриИзмененииТаблицГруппДоступа, @@ -8814,6 +9119,9 @@ Возврат; КонецЕсли; + УстановитьОтключениеБезопасногоРежима(Истина); + УстановитьПривилегированныйРежим(Истина); + НаборЗаписей = СлужебныйНаборЗаписей(РегистрыСведений.ОбновлениеКлючейДоступаКДанным); Список = "Справочник.НаборыГруппДоступа"; @@ -8862,6 +9170,9 @@ ЗарегистрироватьПланированиеОбновленияДоступа(СпискиПоИдентификаторам, ПараметрыПланирования); + УстановитьПривилегированныйРежим(Ложь); + УстановитьОтключениеБезопасногоРежима(Ложь); + КонецПроцедуры #КонецОбласти @@ -9085,6 +9396,14 @@ // Обработчик регламентного задания ОбновлениеДоступаНаУровнеЗаписей. Процедура ОбновлениеДоступаНаУровнеЗаписей(ОбновитьВсе = Ложь, ВызыватьИсключениеВместоРегистрацииОшибки = Ложь) Экспорт + // Регламентное задание должно запускаться сразу, как только было запланировано обновление доступа. + // После обработки первой порции по всем таблицам (2 мин на все) можно сделать + // небольшую паузу вместо непрерывного выполнения до конца. + // В данном случае пауза - это перезапуск через 15 секунд. + // В отличие от обычных регламентных заданий это задание самоотключаемое, + // то есть после отработки запланированного обновления, задание выключает само себя и + // запуски полностью прекращаются до того, как будет запланировано новое обновление доступа. + ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания( Метаданные.РегламентныеЗадания.ОбновлениеДоступаНаУровнеЗаписей); @@ -9093,7 +9412,8 @@ КонецПроцедуры // Выполняет обновление доступа, если запланировано. -Процедура ВыполнитьОбновлениеДоступаНаУровнеЗаписей(ОбновитьВсе, ВызыватьИсключениеВместоРегистрацииОшибки, СекундНеБолее) +Процедура ВыполнитьОбновлениеДоступаНаУровнеЗаписей(ОбновитьВсе, + ВызыватьИсключениеВместоРегистрацииОшибки, СекундНеБолее, ПослеОбновлениеИБ = Ложь) УстановитьОтключениеБезопасногоРежима(Истина); УстановитьПривилегированныйРежим(Истина); @@ -9168,7 +9488,7 @@ КонецЕсли; Если Исполнитель <> Неопределено Тогда - Если Не ОбновитьВсе Тогда + Если Не ОбновитьВсе Или ПослеОбновлениеИБ Тогда Возврат; КонецЕсли; @@ -9437,6 +9757,67 @@ ДействующиеПараметрыОграниченияДоступа(Неопределено, Неопределено, Истина); КонецЕсли; + // Удаление устаревших параметров ограничения доступа. + УстановитьОтключениеБезопасногоРежима(Истина); + УстановитьПривилегированныйРежим(Истина); + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("ТекущаяВерсия", ПараметрыСеанса.ПараметрыОграниченияДоступа.Версия); + Запрос.УстановитьПараметр("ДатаУстаревания", ТекущаяДатаСеанса() - 2 * 24 * 60 *60); + Запрос.Текст = + "ВЫБРАТЬ + | ПараметрыОграниченияДоступа.Версия КАК Версия, + | ПараметрыОграниченияДоступа.ДатаСоздания КАК ДатаСоздания + |ИЗ + | РегистрСведений.ПараметрыОграниченияДоступа КАК ПараметрыОграниченияДоступа + |ГДЕ + | ПараметрыОграниченияДоступа.Версия < &ТекущаяВерсия + | И ПараметрыОграниченияДоступа.ДатаСоздания <= &ДатаУстаревания + | + |УПОРЯДОЧИТЬ ПО + | Версия УБЫВ, + | ДатаСоздания УБЫВ"; + + // АПК:1328-выкл. См. 648.1.1. Допустимо чтение без предварительной + // управляемой разделяемой блокировки, так как используется только + // для очистки и какой сеанс очистит первым не важно. + // Если установить разделяемую блокировку, то позже будет повышение + // до исключительной, что ведет к взаимоблокировке и недопустимо. + // Если установить исключительную блокировку на таблицу, то + // это вызовет избыточное замедление запуска сеансов при установке + // параметров сеанса из параметров ограничения, что недопустимо. + РезультатЗапроса = Запрос.Выполнить(); + // АПК:1328-вкл. + Если РезультатЗапроса.Пустой() Тогда + Возврат; + КонецЕсли; + + НаименьшаяДатаНачалаСеанса = '39991231'; + Сеансы = ПолучитьСеансыИнформационнойБазы(); + Для Каждого Сеанс Из Сеансы Цикл + Если НаименьшаяДатаНачалаСеанса > Сеанс.НачалоСеанса Тогда + НаименьшаяДатаНачалаСеанса = Сеанс.НачалоСеанса; + КонецЕсли; + КонецЦикла; + + НаименьшаяДатаНачалаСеанса = НаименьшаяДатаНачалаСеанса + - (МестноеВремя('00010101', ЧасовойПояс()) - '00010101') + + (МестноеВремя('00010101', ЧасовойПоясСеанса()) - '00010101'); + + НаборЗаписей = РегистрыСведений.ПараметрыОграниченияДоступа.СоздатьНаборЗаписей(); + + Выборка = РезультатЗапроса.Выбрать(); + Пока Выборка.Следующий() Цикл + Если Выборка.ДатаСоздания >= НаименьшаяДатаНачалаСеанса Тогда + Продолжить; + КонецЕсли; + НаборЗаписей.Отбор.Версия.Установить(Выборка.Версия); + НаборЗаписей.Записать(); + КонецЦикла; + + УстановитьПривилегированныйРежим(Ложь); + УстановитьОтключениеБезопасногоРежима(Ложь); + КонецПроцедуры // Для процедуры ПроверитьОбновитьДействующиеПараметрыОграниченияДоступа. @@ -9524,32 +9905,6 @@ КонецПроцедуры -// Для процедуры ВыполнитьОбновлениеДоступаНаУровнеЗаписей. -Процедура ЗапланироватьОбработкуУстаревшихЭлементов(ТекстОшибкиПланирования, - ПоследнееПланированиеОбработкиУстаревшихЭлементов) - - Если Не ЗначениеЗаполнено(ПоследнееПланированиеОбработкиУстаревшихЭлементов) Тогда - ПоследнееПланированиеОбработкиУстаревшихЭлементов = ТекущаяДатаСеанса(); - КонецЕсли; - Попытка - ГраницаОжидания = ТекущаяДатаСеанса() - КоличествоЧасовМеждуПланированиемОбработкиУстаревшихЭлементов() * 60 * 60; - Если ПоследнееПланированиеОбработкиУстаревшихЭлементов < ГраницаОжидания Тогда - ПараметрыПланирования = ПараметрыПланированияОбновленияДоступа(Ложь); - ПараметрыПланирования.ЭтоОбработкаУстаревшихЭлементов = Истина; - ПараметрыПланирования.Описание = "ОбновлениеДоступаНаУровнеЗаписей"; - ЗапланироватьОбновлениеДоступа(, ПараметрыПланирования); - ПоследнееПланированиеОбработкиУстаревшихЭлементов = ТекущаяДатаСеанса(); - КонецЕсли; - Исключение - ИнформацияОбОшибке = ИнформацияОбОшибке(); - ТекстОшибкиПланирования = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не удалось запланировать обработку устаревших элементов ограничения доступа по причине: - |%1'"), - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); - КонецПопытки; - -КонецПроцедуры - // Обновляет ключи доступа к данным на основе записей в регистре сведений // ОбновлениеКлючейДоступаКДанным и ключи доступа пользователей на основе записей // регистра сведений ОбновлениеКлючейДоступаПользователей. @@ -9707,6 +10062,32 @@ КонецПроцедуры +// Для процедуры ВыполнитьОбновлениеДоступаНаУровнеЗаписей. +Процедура ЗапланироватьОбработкуУстаревшихЭлементов(ТекстОшибкиПланирования, + ПоследнееПланированиеОбработкиУстаревшихЭлементов) + + Если Не ЗначениеЗаполнено(ПоследнееПланированиеОбработкиУстаревшихЭлементов) Тогда + ПоследнееПланированиеОбработкиУстаревшихЭлементов = ТекущаяДатаСеанса(); + КонецЕсли; + Попытка + ГраницаОжидания = ТекущаяДатаСеанса() - КоличествоЧасовМеждуПланированиемОбработкиУстаревшихЭлементов() * 60 * 60; + Если ПоследнееПланированиеОбработкиУстаревшихЭлементов < ГраницаОжидания Тогда + ПараметрыПланирования = ПараметрыПланированияОбновленияДоступа(Ложь); + ПараметрыПланирования.ЭтоОбработкаУстаревшихЭлементов = Истина; + ПараметрыПланирования.Описание = "ОбновлениеДоступаНаУровнеЗаписей"; + ЗапланироватьОбновлениеДоступа(, ПараметрыПланирования); + ПоследнееПланированиеОбработкиУстаревшихЭлементов = ТекущаяДатаСеанса(); + КонецЕсли; + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + ТекстОшибкиПланирования = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось запланировать обработку устаревших элементов ограничения доступа по причине: + |%1'"), + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); + КонецПопытки; + +КонецПроцедуры + // Для процедуры ВыполнитьОбновлениеДоступа. Функция ТаблицаЗаданийОбновления() @@ -10026,6 +10407,14 @@ КонецПроцедуры +// Для процедуры ЗаполнитьОбщиеПараметрыОбновления. +Функция ЭтоОбновлениеСоставаНаборовГруппДоступа(Задание, Контекст) + + Возврат Задание.ИдентификаторСписка = Контекст.ИдентификаторСправочникаНаборыГруппДоступа + И Задание.ПорядокВидаКлючаДанных < ПорядокВидаКлючаДанных("НовыеНаборыГруппСУстаревшимиПравами"); + +КонецФункции + // Для процедуры ДобавитьЗаданияОбновленияДоступа. Процедура ЗаполнитьУровниЗависимостиЗаданий(Контекст, СвойстваВедущихСписков) @@ -10207,7 +10596,7 @@ Если Задание.Удалить Тогда Продолжить; КонецЕсли; - Если Задание.ИдентификаторСписка = Контекст.ИдентификаторСправочникаНаборыГруппДоступа Тогда + Если ЭтоОбновлениеСоставаНаборовГруппДоступа(Задание, Контекст) Тогда ЗаданиеСправочникаНаборыГруппДоступа = Задание; КонецЕсли; Задание.ДополнительныйЗапуск = Ложь; @@ -10399,8 +10788,6 @@ Попытка Если Контекст.ОбработкаЗавершена Тогда - ОбновитьПраваНаРазрешенныйКлючДоступа(); - Контекст.Вставить("ОшибкаОжиданияБлокировкиДанных", Ложь); Попытка ОтключитьРегламентноеЗаданиеЕслиНетНовыхЗаданий(Контекст); @@ -12170,6 +12557,9 @@ ЗаполнитьПустыеХешиНаборовГрупп(ПараметрыОбновления); ИначеЕсли ПараметрыОбновления.ПоследнийОбновленныйЭлемент.ВидКлючаДанных = "НовыеНаборыГруппСУстаревшимиПравами" Тогда + Если Не ПараметрыОбновления.ДляВнешнихПользователей Тогда + ОбновитьПраваНаРазрешенныйКлючДоступа(); + КонецЕсли; ОчиститьПраваПустогоНабораГруппДоступа(ПараметрыОбновления); ИначеЕсли ЭтоОбработкаУстаревшихЭлементов(ПараметрыОбновления) Тогда @@ -12315,26 +12705,33 @@ НачальныйЭлемент = Новый Структура; НачальныйЭлемент.Вставить("КлючДанных"); НачальныйЭлемент.Вставить("ОбработатьУстаревшиеЭлементы", Ложь); + НачальныйЭлемент.Вставить("ОбработатьНаборыГруппСУстаревшимиПравами", Ложь); + СохранитьСвойства = Ложь; Если ВидКлючаДанных = Неопределено Тогда Если СохранитьВидКлючаДанных Тогда ВидКлючаДанных = ПараметрыОбновления.ПоследнийОбновленныйЭлемент.ВидКлючаДанных; - Если ПараметрыОбновления.ПоследнийОбновленныйЭлемент.ОбработатьУстаревшиеЭлементы Тогда - НачальныйЭлемент.ОбработатьУстаревшиеЭлементы = Истина; - КонецЕсли; - ИначеЕсли ПараметрыОбновления.ЭтоОбновлениеПрав - Или ЭтоСправочникНаборыГруппДоступа(ПараметрыОбновления) Тогда + СохранитьСвойства = Истина; + ИначеЕсли ЭтоСправочникНаборыГруппДоступа(ПараметрыОбновления) Тогда + ВидКлючаДанных = "НовыеНаборыИзОдногоПользователя"; + + ИначеЕсли ПараметрыОбновления.ЭтоОбновлениеПрав Тогда ВидКлючаДанных = "ЭлементыСУстаревшимиПравами"; Иначе ВидКлючаДанных = "ЭлементыСУстаревшимиКлючами"; КонецЕсли; - ИначеЕсли ВидКлючаДанных <> "НетДанных" - И ПараметрыОбновления.Свойство("ПоследнийОбновленныйЭлемент") - И ПараметрыОбновления.ПоследнийОбновленныйЭлемент.ОбработатьУстаревшиеЭлементы Тогда - - НачальныйЭлемент.ОбработатьУстаревшиеЭлементы = Истина; + И ПараметрыОбновления.Свойство("ПоследнийОбновленныйЭлемент") Тогда + СохранитьСвойства = Истина; + КонецЕсли; + Если СохранитьСвойства Тогда + Если ПараметрыОбновления.ПоследнийОбновленныйЭлемент.ОбработатьУстаревшиеЭлементы Тогда + НачальныйЭлемент.ОбработатьУстаревшиеЭлементы = Истина; + КонецЕсли; + Если ПараметрыОбновления.ПоследнийОбновленныйЭлемент.ОбработатьНаборыГруппСУстаревшимиПравами Тогда + НачальныйЭлемент.ОбработатьНаборыГруппСУстаревшимиПравами = Истина; + КонецЕсли; КонецЕсли; УстановитьВидКлючаДанных(НачальныйЭлемент, ВидКлючаДанных); @@ -12451,6 +12848,7 @@ МаксимальнаяДата = МаксимальнаяДата(); СвойстваКлючаДанных = НачальныйЭлемент(ПараметрыОбновления, "НетДанных"); + ВидКлючаДанныхУстановлен = Истина; Для Каждого Строка Из Выгрузка Цикл ПараметрыЗадания = Строка.ПараметрыЗадания.Получить(); Если ТипЗнч(ПараметрыЗадания) = Тип("Структура") И ПараметрыЗадания.Свойство("ТочечноеЗадание") Тогда @@ -12461,7 +12859,7 @@ Если Не ЭтоОбновлениеПрав И Строка.ДатаПоследнегоОбновленногоЭлемента = МаксимальнаяДата Тогда ПерезапускОбновленияСНачала = Истина; КонецЕсли; - Если СвойстваКлючаДанных <> Неопределено И ЕстьСвойстваКлючаДанных(ПараметрыЗадания) Тогда + Если ЕстьСвойстваКлючаДанных(ПараметрыЗадания) Тогда Если СвойстваКлючаДанных.ПорядокВидаКлючаДанных > ПараметрыЗадания.ПорядокВидаКлючаДанных Тогда СвойстваКлючаДанных.ПорядокВидаКлючаДанных = ПараметрыЗадания.ПорядокВидаКлючаДанных; СвойстваКлючаДанных.ВидКлючаДанных = ПараметрыЗадания.ВидКлючаДанных; @@ -12469,8 +12867,15 @@ Если ЭтоОбработкаУстаревшихЭлементов(Новый Структура("ПоследнийОбновленныйЭлемент", ПараметрыЗадания)) Тогда СвойстваКлючаДанных.ОбработатьУстаревшиеЭлементы = Истина; КонецЕсли; + Если ПараметрыЗадания.Свойство("ОбработатьНаборыГруппСУстаревшимиПравами") + И ПараметрыЗадания.ОбработатьНаборыГруппСУстаревшимиПравами = Истина Тогда + СвойстваКлючаДанных.ОбработатьНаборыГруппСУстаревшимиПравами = Истина; + КонецЕсли; Иначе - СвойстваКлючаДанных = Неопределено; + ВидКлючаДанныхУстановлен = Ложь; + Если ЭтоСправочникНаборыГруппДоступа(ПараметрыОбновления) Тогда + СвойстваКлючаДанных.ОбработатьНаборыГруппСУстаревшимиПравами = Истина; + КонецЕсли; Если ЭтоОбновлениеПрав Или ПерезапускОбновленияСНачала Тогда Прервать; КонецЕсли; @@ -12491,7 +12896,7 @@ КонецЕсли; ПоследнийОбновленныйЭлемент = ПараметрыОбновления.ПоследнийОбновленныйЭлемент; - Если СвойстваКлючаДанных <> Неопределено Тогда + Если ВидКлючаДанныхУстановлен Тогда Если ТекущийИтог = Неопределено Тогда УстановитьВидКлючаДанных(ПоследнийОбновленныйЭлемент, СвойстваКлючаДанных.ВидКлючаДанных); @@ -12499,9 +12904,12 @@ ПоследнийОбновленныйЭлемент.ПорядокВидаКлючаДанных = СвойстваКлючаДанных.ПорядокВидаКлючаДанных; ПоследнийОбновленныйЭлемент.ВидКлючаДанных = СвойстваКлючаДанных.ВидКлючаДанных; КонецЕсли; - Если СвойстваКлючаДанных.ОбработатьУстаревшиеЭлементы Тогда - ПоследнийОбновленныйЭлемент.ОбработатьУстаревшиеЭлементы = Истина; - КонецЕсли; + КонецЕсли; + Если СвойстваКлючаДанных.ОбработатьУстаревшиеЭлементы Тогда + ПоследнийОбновленныйЭлемент.ОбработатьУстаревшиеЭлементы = Истина; + КонецЕсли; + Если СвойстваКлючаДанных.ОбработатьНаборыГруппСУстаревшимиПравами Тогда + ПоследнийОбновленныйЭлемент.ОбработатьНаборыГруппСУстаревшимиПравами = Истина; КонецЕсли; СохраняемыеПараметрыЗадания.ПоследнийОбновленныйЭлемент = ПоследнийОбновленныйЭлемент; @@ -12740,11 +13148,12 @@ ВидыКлючейДанных.Вставить("ЭлементыСУстаревшимиПравами", 0); - ВидыКлючейДанных.Вставить("НовыеНаборыИзОдногоПользователя", 1); - ВидыКлючейДанных.Вставить("НаборыГруппДоступаНазначенныеПользователям", 2); - ВидыКлючейДанных.Вставить("НаборыГруппПользователейНазначенныеПользователям", 3); - ВидыКлючейДанных.Вставить("НовыеНаборыГруппСУстаревшимиПравами", 4); - ВидыКлючейДанных.Вставить("НаборыГруппРазрешенныеПользователям", 5); + ВидыКлючейДанных.Вставить("НовыеНаборыИзОдногоПользователя", 0); + ВидыКлючейДанных.Вставить("НаборыГруппДоступаНазначенныеПользователям", 1); + ВидыКлючейДанных.Вставить("НаборыГруппПользователейНазначенныеПользователям", 2); + ВидыКлючейДанных.Вставить("НовыеНаборыГруппСУстаревшимиПравами", 3); + ВидыКлючейДанных.Вставить("НаборыГруппРазрешенныеПользователям", 4); + ВидыКлючейДанных.Вставить("НаборыГруппСУстаревшимиПравами", 5); ВидыКлючейДанных.Вставить("УстаревшиеЭлементы", 10); ВидыКлючейДанных.Вставить("УстаревшиеЭлементыОбщегоРегистра", 11); @@ -13056,6 +13465,7 @@ | КлючиДоступа.Список = &Список | И КлючиДоступа.ДляВнешнихПользователей = &ДляВнешнихПользователей | И КлючиДоступа.Ссылка > &ПоследнийКлючДоступа + | И &УточнениеПланаЗапроса | |УПОРЯДОЧИТЬ ПО | КлючиДоступа.Ссылка"; @@ -13081,6 +13491,8 @@ КоличествоВЗапросе = ?(КоличествоВЗапросе < 1000, 1000, ?(КоличествоВЗапросе > 10000, 10000, КоличествоВЗапросе)); Запрос.Текст = СтрЗаменить(Запрос.Текст, МаркерРазмераПорции(), Формат(КоличествоВЗапросе, "ЧГ=")); + УстановитьУточнениеПланаЗапроса(Запрос.Текст); + Элементы = Запрос.Выполнить().Выгрузить(); КонецЕсли; @@ -13095,6 +13507,29 @@ КонецФункции +// Для процедур выполнения запросов. +Процедура УстановитьУточнениеПланаЗапроса(ТекстЗапроса, УникальныйПлан = Ложь) + + Если УправлениеДоступомСлужебныйПовтИсп.ТребуетсяУточнениеПланаЗапроса() Тогда + Если УникальныйПлан Тогда + ТекущаяДатаСеанса = ТекущаяДатаСеанса(); + ВсегоМинут = Цел((ТекущаяДатаСеанса - '00010101') / 60); + ОстатокМинут = ВсегоМинут - Цел(ВсегоМинут / 2048) * 2048; + УточнениеПланаЗапроса = УправлениеДоступомСлужебныйПовтИсп.УточнениеПланаЗапроса(ОстатокМинут, 11); + Иначе + ТочноеВремя = ТекущаяУниверсальнаяДатаВМиллисекундах(); + ВсегоДесятыхСекунд = Цел(ТочноеВремя / 100); + ОстатокДесятыхСекунд = ВсегоДесятыхСекунд - Цел(ВсегоДесятыхСекунд / 1048576) * 1048576; + УточнениеПланаЗапроса = УправлениеДоступомСлужебныйПовтИсп.УточнениеПланаЗапроса(ОстатокДесятыхСекунд, 20); + КонецЕсли; + Иначе + УточнениеПланаЗапроса = "ИСТИНА"; + КонецЕсли; + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&УточнениеПланаЗапроса", УточнениеПланаЗапроса); + +КонецПроцедуры + // Для процедуры ВыполнитьОбновлениеДоступаСписка. Функция ЭлементыТочечногоЗаданияДляОбновления(ПараметрыОбновления, КоличествоВЗапросе, ВыбраныВсеЭлементы) @@ -13184,6 +13619,7 @@ КоличествоВЗапросе = ?(КоличествоВЗапросе < 1000, 1000, ?(КоличествоВЗапросе > 4000, 4000, КоличествоВЗапросе)); Запрос.Текст = СтрЗаменить(Запрос.Текст, МаркерРазмераПорции(), Формат(КоличествоВЗапросе, "ЧГ=")); + УстановитьУточнениеПланаЗапроса(Запрос.Текст); Если ПараметрыОбновления.ЭтоОбновлениеПрав Тогда Элементы = Запрос.Выполнить().Выгрузить(); @@ -13417,10 +13853,7 @@ Возврат; КонецЕсли; НовыйВидКлючаДанных = ""; - Если Элемент.ВидКлючаДанных = "ЭлементыСУстаревшимиПравами" Тогда - НовыйВидКлючаДанных = "НовыеНаборыИзОдногоПользователя"; - - ИначеЕсли Элемент.ВидКлючаДанных = "НовыеНаборыИзОдногоПользователя" Тогда + Если Элемент.ВидКлючаДанных = "НовыеНаборыИзОдногоПользователя" Тогда НовыйВидКлючаДанных = "НаборыГруппДоступаНазначенныеПользователям"; ИначеЕсли Элемент.ВидКлючаДанных = "НаборыГруппДоступаНазначенныеПользователям" Тогда @@ -13433,7 +13866,13 @@ НовыйВидКлючаДанных = "НаборыГруппРазрешенныеПользователям"; ИначеЕсли Элемент.ВидКлючаДанных = "НаборыГруппРазрешенныеПользователям" - И Элемент.ОбработатьУстаревшиеЭлементы Тогда + И Элемент.ОбработатьНаборыГруппСУстаревшимиПравами Тогда + + НовыйВидКлючаДанных = "НаборыГруппСУстаревшимиПравами"; + + ИначеЕсли Элемент.ОбработатьУстаревшиеЭлементы + И ( Элемент.ВидКлючаДанных = "НаборыГруппРазрешенныеПользователям" + Или Элемент.ВидКлючаДанных = "НаборыГруппСУстаревшимиПравами") Тогда НовыйВидКлючаДанных = "УстаревшиеЭлементы"; КонецЕсли; @@ -13658,7 +14097,7 @@ Запрос.УстановитьПараметр("ДляВнешнихПользователей", ПараметрыОбновления.ДляВнешнихПользователей); Запрос.УстановитьПараметр("ПоследняяОбработаннаяСсылка", ПоследнийОбновленныйЭлемент.КлючДанных); - Если ВидКлючаДанных = "ЭлементыСУстаревшимиПравами" Тогда + Если ВидКлючаДанных = "НаборыГруппСУстаревшимиПравами" Тогда Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ " + МаркерРазмераПорции() + " | ТекущийСписок.Ссылка КАК ТекущаяСсылка @@ -13668,6 +14107,7 @@ | ТекущийСписок.ДляВнешнихПользователей = &ДляВнешнихПользователей | И ТекущийСписок.ТипЭлементовНабора В (ЗНАЧЕНИЕ(Справочник.ГруппыДоступа.ПустаяСсылка), ЗНАЧЕНИЕ(Справочник.ГруппыПользователей.ПустаяСсылка)) | И ТекущийСписок.Ссылка > &ПоследняяОбработаннаяСсылка + | И &УточнениеПланаЗапроса | |УПОРЯДОЧИТЬ ПО | ТекущийСписок.Ссылка"; @@ -13709,6 +14149,7 @@ | ИНАЧЕ НаборыГруппДоступа.НеИспользуетсяС = ДАТАВРЕМЯ(1, 1, 1) | КОНЕЦ | И СоставыГруппПользователей.Пользователь > &ПоследняяОбработаннаяСсылка + | И &УточнениеПланаЗапроса | |УПОРЯДОЧИТЬ ПО | СоставыГруппПользователей.Пользователь"; @@ -13750,6 +14191,7 @@ | ГДЕ | НаборыГруппДоступа.НовыйНаборГруппПользователей = ТекущийСписок.Ссылка)) | И ТекущийСписок.Ссылка > &ПоследняяОбработаннаяСсылка + | И &УточнениеПланаЗапроса | |УПОРЯДОЧИТЬ ПО | ТекущийСписок.Ссылка"; @@ -13765,6 +14207,7 @@ | И (ТекущийСписок.НовыйНаборГруппДоступа <> ЗНАЧЕНИЕ(Справочник.НаборыГруппДоступа.ПустаяСсылка) | ИЛИ ТекущийСписок.НовыйНаборГруппПользователей <> ЗНАЧЕНИЕ(Справочник.НаборыГруппДоступа.ПустаяСсылка)) | И ТекущийСписок.Ссылка > &ПоследняяОбработаннаяСсылка + | И &УточнениеПланаЗапроса | |УПОРЯДОЧИТЬ ПО | ТекущийСписок.Ссылка"; @@ -13775,6 +14218,7 @@ КоличествоВЗапросе = ?(КоличествоВЗапросе < 25, 25, ?(КоличествоВЗапросе > 10000, 10000, КоличествоВЗапросе)); Запрос.Текст = СтрЗаменить(Запрос.Текст, МаркерРазмераПорции(), Формат(КоличествоВЗапросе, "ЧГ=")); + УстановитьУточнениеПланаЗапроса(Запрос.Текст); ЭлементыДанных = Запрос.Выполнить().Выгрузить(); @@ -13787,7 +14231,7 @@ ВидКлючаДанных = ПараметрыОбновления.ПоследнийОбновленныйЭлемент.ВидКлючаДанных; - Если ВидКлючаДанных = "ЭлементыСУстаревшимиПравами" Тогда + Если ВидКлючаДанных = "НаборыГруппСУстаревшимиПравами" Тогда ОбновитьНаборыГруппСУстаревшимиПравами(ЭлементыДанных, ПараметрыОбновления); ИначеЕсли ВидКлючаДанных = "НовыеНаборыИзОдногоПользователя" Тогда @@ -13941,6 +14385,7 @@ | ГДЕ | КлючиДоступаГруппДоступа.ГруппаДоступа = ЗНАЧЕНИЕ(Справочник.ГруппыДоступа.ПустаяСсылка) | И &УсловиеОтбораНаборовГруппДоступа2 + | И &УточнениеПланаЗапроса | | ОБЪЕДИНИТЬ ВСЕ | @@ -14011,6 +14456,7 @@ | КлючиДоступаГруппДоступа.ГруппаДоступа = ЗНАЧЕНИЕ(Справочник.ГруппыДоступа.ПустаяСсылка) | И &УсловиеОтбораНаборовГруппДоступа2 | И &УсловиеОтбораКлючейДоступа2 + | И &УточнениеПланаЗапроса | | ОБЪЕДИНИТЬ ВСЕ | @@ -14066,6 +14512,7 @@ Пока Истина Цикл Запрос = Новый Запрос; Запрос.Текст = ТекстЗапросаВыбораПорцииДляБлокировки; + УстановитьУточнениеПланаЗапроса(Запрос.Текст, Истина); Запрос.УстановитьПараметр("РазрешенныйПустойНабор", УправлениеДоступомСлужебныйПовтИсп.РазрешенныйПустойНаборГруппДоступа()); @@ -14097,6 +14544,7 @@ Запрос = Новый Запрос; Запрос.Текст = ТекстЗапросаВыбораПорцииДляОбновления; + УстановитьУточнениеПланаЗапроса(Запрос.Текст, Истина); Запрос.УстановитьПараметр("РазрешенныйПустойНабор", УправлениеДоступомСлужебныйПовтИсп.РазрешенныйПустойНаборГруппДоступа()); @@ -14512,6 +14960,7 @@ | И НаборыГрупп.ТипЭлементовНабора = ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка) | И НаборыГрупп.НеИспользуетсяС = ДАТАВРЕМЯ(1, 1, 1) | И НаборыГрупп.НовыйНаборГруппДоступа = ЗНАЧЕНИЕ(Справочник.НаборыГруппДоступа.ПустаяСсылка) + | И &УточнениеПланаЗапроса | |СГРУППИРОВАТЬ ПО | НаборыГрупп.Ссылка, @@ -14534,6 +14983,7 @@ | И НаборыГрупп.ТипЭлементовНабора = ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка) | И НаборыГрупп.НеИспользуетсяС = ДАТАВРЕМЯ(1, 1, 1) | И НаборыГрупп.НовыйНаборГруппДоступа <> ЗНАЧЕНИЕ(Справочник.НаборыГруппДоступа.ПустаяСсылка) + | И &УточнениеПланаЗапроса | |СГРУППИРОВАТЬ ПО | НаборыГрупп.Ссылка, @@ -14566,6 +15016,7 @@ | И (ГруппыНаборов.Ссылка = НаборыГрупп.Ссылка) | ЛЕВОЕ СОЕДИНЕНИЕ НомераГрупп КАК НомераГрупп | ПО (ГруппыНаборов.Группа = НомераГрупп.Группа) + | И (&УточнениеПланаЗапроса) | |СГРУППИРОВАТЬ ПО | НаборыГрупп.Ссылка @@ -14662,6 +15113,8 @@ Запрос.Текст = СтрЗаменить(Запрос.Текст, "СУММА(НомераГрупп.ЧастьНомера1) КАК ЧастьНомера1", ПоляСуммированияНовых); + УстановитьУточнениеПланаЗапроса(Запрос.Текст); + Результат = Запрос.Выполнить().Выгрузить(); СписокИменЧастейНабора = СтрСоединить(ИменаЧастейНомера, ", "); @@ -15043,6 +15496,7 @@ | Справочник.НаборыГруппДоступа КАК НаборыГруппДоступа |ГДЕ | НаборыГруппДоступа.ТипЭлементовНабора = НЕОПРЕДЕЛЕНО + | И &УточнениеПланаЗапроса | |ОБЪЕДИНИТЬ ВСЕ | @@ -15065,9 +15519,9 @@ |ВЫБРАТЬ РАЗЛИЧНЫЕ | НаборыГруппДоступа.Ссылка, | НаборыГруппДоступа.ТипЭлементовНабора, - | НЕ НаборыИзОдногоПользователя.Ссылка ЕСТЬ NULL, - | НаборыГруппДоступа.НеИспользуетсяС <> ДАТАВРЕМЯ(1, 1, 1) - | И НаборыГруппДоступа.НеИспользуетсяС < &ДатаУстаревания + | НЕ МИНИМУМ(НаборыИзОдногоПользователя.Ссылка ЕСТЬ NULL), + | МИНИМУМ(НаборыГруппДоступа.НеИспользуетсяС <> ДАТАВРЕМЯ(1, 1, 1) + | И НаборыГруппДоступа.НеИспользуетсяС < &ДатаУстаревания) |ИЗ | Справочник.НаборыГруппДоступа КАК НаборыГруппДоступа | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.НаборыГруппДоступа КАК НаборыИзОдногоПользователя @@ -15078,21 +15532,26 @@ | НаборыГруппДоступа.ДляВнешнихПользователей = &ДляВнешнихПользователей | И НаборыГруппДоступа.ТипЭлементовНабора = ЗНАЧЕНИЕ(Справочник.ГруппыДоступа.ПустаяСсылка) | И НаборыГруппДоступа.Ссылка <> &РазрешенныйПустойНабор - | И ВЫБОР - | КОГДА НаборыГруппДоступа.НеИспользуетсяС = ДАТАВРЕМЯ(1, 1, 1) - | ТОГДА НаборыИзОдногоПользователя.Ссылка ЕСТЬ NULL - | ИНАЧЕ НЕ НаборыИзОдногоПользователя.Ссылка ЕСТЬ NULL - | ИЛИ НаборыГруппДоступа.НеИспользуетсяС < &ДатаУстаревания - | КОНЕЦ + | + |СГРУППИРОВАТЬ ПО + | НаборыГруппДоступа.Ссылка, + | НаборыГруппДоступа.ТипЭлементовНабора + | + |ИМЕЮЩИЕ + | (НаборыГруппДоступа.НеИспользуетсяС = ДАТАВРЕМЯ(1, 1, 1) + | И МИНИМУМ(НаборыИзОдногоПользователя.Ссылка ЕСТЬ NULL) + | ИЛИ НаборыГруппДоступа.НеИспользуетсяС <> ДАТАВРЕМЯ(1, 1, 1) + | И (НЕ МИНИМУМ(НаборыИзОдногоПользователя.Ссылка ЕСТЬ NULL) + | ИЛИ НаборыГруппДоступа.НеИспользуетсяС < &ДатаУстаревания)) | |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ РАЗЛИЧНЫЕ | НаборыГруппПользователей.Ссылка, | НаборыГруппПользователей.ТипЭлементовНабора, - | НЕ НаборыИзОдногоПользователя.Ссылка ЕСТЬ NULL, - | НаборыГруппПользователей.НеИспользуетсяС <> ДАТАВРЕМЯ(1, 1, 1) - | И НаборыИзОдногоПользователя.НеИспользуетсяС < &ДатаУстаревания + | НЕ МИНИМУМ(НаборыИзОдногоПользователя.Ссылка ЕСТЬ NULL), + | МИНИМУМ(НаборыГруппПользователей.НеИспользуетсяС <> ДАТАВРЕМЯ(1, 1, 1) + | И НаборыГруппПользователей.НеИспользуетсяС < &ДатаУстаревания) |ИЗ | Справочник.НаборыГруппДоступа КАК НаборыГруппПользователей | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.НаборыГруппДоступа КАК НаборыИзОдногоПользователя @@ -15102,17 +15561,23 @@ |ГДЕ | НаборыГруппПользователей.ДляВнешнихПользователей = &ДляВнешнихПользователей | И НаборыГруппПользователей.ТипЭлементовНабора = ЗНАЧЕНИЕ(Справочник.ГруппыПользователей.ПустаяСсылка) - | И ВЫБОР - | КОГДА НаборыГруппПользователей.НеИспользуетсяС = ДАТАВРЕМЯ(1, 1, 1) - | ТОГДА НаборыИзОдногоПользователя.Ссылка ЕСТЬ NULL - | ИНАЧЕ НЕ НаборыИзОдногоПользователя.Ссылка ЕСТЬ NULL - | ИЛИ НаборыГруппПользователей.НеИспользуетсяС < &ДатаУстаревания - | КОНЕЦ"; + | + |СГРУППИРОВАТЬ ПО + | НаборыГруппПользователей.Ссылка, + | НаборыГруппПользователей.ТипЭлементовНабора + | + |ИМЕЮЩИЕ + | (НаборыГруппПользователей.НеИспользуетсяС = ДАТАВРЕМЯ(1, 1, 1) + | И МИНИМУМ(НаборыИзОдногоПользователя.Ссылка ЕСТЬ NULL) + | ИЛИ НаборыГруппПользователей.НеИспользуетсяС <> ДАТАВРЕМЯ(1, 1, 1) + | И (НЕ МИНИМУМ(НаборыИзОдногоПользователя.Ссылка ЕСТЬ NULL) + | ИЛИ НаборыГруппПользователей.НеИспользуетсяС < &ДатаУстаревания))"; Если ПараметрыОбновления.ДляВнешнихПользователей Тогда Запрос.Текст = СтрЗаменить(Запрос.Текст, "Справочник.Пользователи", "Справочник.ВнешниеПользователи"); Запрос.Текст = СтрЗаменить(Запрос.Текст, "Справочник.ГруппыПользователей", "Справочник.ГруппыВнешнихПользователей"); КонецЕсли; + УстановитьУточнениеПланаЗапроса(Запрос.Текст); ЭлементыДанных = Запрос.Выполнить().Выгрузить(); @@ -15332,7 +15797,7 @@ // Для процедуры ОбновитьГруппыРазрешенногоКлючаДоступа. Функция ТекстЗапросаВыбораРазличийГруппДоступаРазрешенногоКлюча() - Возврат + ТекстЗапроса = "ВЫБРАТЬ | ВсеСтроки.ГруппаДоступа КАК ГруппаДоступа, | ВсеСтроки.Изменение КАК Изменение, @@ -15359,6 +15824,7 @@ | Справочник.ГруппыДоступа.Пользователи КАК УчастникиГруппДоступа | ГДЕ | УчастникиГруппДоступа.Ссылка = ГруппыДоступа.Ссылка)) + | И (&УточнениеПланаЗапроса) | | ОБЪЕДИНИТЬ ВСЕ | @@ -15384,6 +15850,10 @@ |УПОРЯДОЧИТЬ ПО | ВидИзмененияСтроки"; + УстановитьУточнениеПланаЗапроса(ТекстЗапроса); + + Возврат ТекстЗапроса; + КонецФункции // Для процедуры ОбновитьПорциюЭлементов. @@ -15511,6 +15981,7 @@ Запрос = Новый Запрос; Запрос.Текст = ПараметрыОбновления.ТекстЗапросаПроверкиУстаревшихЭлементовДанных; Запрос.УстановитьПараметр("КлючиДоступаКРегистрам", ПорцияЭлементовДанных); + УстановитьУточнениеПланаЗапроса(Запрос.Текст); КонецЕсли; КоличествоОбработанных = ПорцияЭлементовДанных.Количество(); @@ -15710,6 +16181,7 @@ ЗапросЗначенийЭлементовДанных.УстановитьПараметр("ИдентификаторРегистра", ИдентификаторСписка); ЗапросЗначенийЭлементовДанных.УстановитьПараметр("ЗначенияОпорныхПолей", ПорцияЭлементовДанных); КонецЕсли; + УстановитьУточнениеПланаЗапроса(ЗапросЗначенийЭлементовДанных.Текст); РезультатыЗапросаЗначенийЭлементов = ЗапросЗначенийЭлементовДанных.ВыполнитьПакет(); ДанныеСтроковыхКлючейДоступа = Новый Соответствие; @@ -15757,6 +16229,7 @@ ЗапросЗначенийКлючей.Текст = ПараметрыОбновления.ТекстЗапросаЗначенийИзИспользуемыхКлючейДоступаДляСравнения; ЗапросЗначенийКлючей.УстановитьПараметр("Хеши", ХешиТребуемыхКлючейДоступа); ЗапросЗначенийКлючей.УстановитьПараметр("Список", ИдентификаторСписка); + УстановитьУточнениеПланаЗапроса(ЗапросЗначенийКлючей.Текст); РезультатыЗапросаЗначенийКлючей = ЗапросЗначенийКлючей.ВыполнитьПакет(); КлючиЗначенийСтрокКлючей = КлючиЗначенийСтрокОбъектов(РезультатыЗапросаЗначенийКлючей, @@ -15827,10 +16300,12 @@ ЗапросЗначенийКлючей = Новый Запрос; ЗапросЗначенийКлючей.Текст = ПараметрыОбновления.ТекстЗапросаЗначенийИзВсехКлючейДоступаДляСравнения; ЗапросЗначенийКлючей.УстановитьПараметр("Список", ПараметрыОбновления.ИдентификаторСписка); + УстановитьУточнениеПланаЗапроса(ЗапросЗначенийКлючей.Текст); ЗапросСуществованияКлючей = Новый Запрос; ЗапросСуществованияКлючей.Текст = ПараметрыОбновления.ТекстЗапросаСуществованияКлючейДляСравнения; ЗапросСуществованияКлючей.УстановитьПараметр("Список", ПараметрыОбновления.ИдентификаторСписка); + УстановитьУточнениеПланаЗапроса(ЗапросСуществованияКлючей.Текст); ОписаниеНовыхКлючей = Новый Структура; ОписаниеНовыхКлючей.Вставить("ОписаниеКлючей", ОписаниеКлючей); @@ -15982,6 +16457,7 @@ Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда Блокировка.Добавить("РегистрСведений.ОбновлениеКлючейДоступаКДанным"); + Блокировка.Добавить("РегистрСведений.ОбновлениеКлючейДоступаПользователей"); КонецЕсли; НачатьТранзакцию(); @@ -16027,9 +16503,13 @@ ПараметрыОбновления.Свойство("ЭтоФоновоеОбновлениеДоступа")); ПослеПланированияОбновления(ПараметрыОбновления); + // АПК:330-выкл - №783.1.3 Допустимо указать вызов после ЗафиксироватьТранзакцию, + // так как это вызов пустой процедуры в штатном режиме (то есть исключение невозможно), + // а в режиме анализа производительности последствия учитываются и не являются критичными. ПередФиксациейТранзакции(ПараметрыОбновления); ЗафиксироватьТранзакцию(); - ПослеФиксацииТранзакции(ПараметрыОбновления); // АПК:330 - только для анализа производительности. + ПослеФиксацииТранзакции(ПараметрыОбновления); + // АПК:330-вкл. Исключение ОтменитьТранзакцию(); ВызватьИсключение; @@ -16157,9 +16637,13 @@ КонецЦикла; ПослеЗаписиСтрок(ПараметрыОбновления, ОписаниеКлючейДоступаОбъектов.Количество()); + // АПК:330-выкл - №783.1.3 Допустимо указать вызов после ЗафиксироватьТранзакцию, + // так как это вызов пустой процедуры в штатном режиме (то есть исключение невозможно), + // а в режиме анализа производительности последствия учитываются и не являются критичными. ПередФиксациейТранзакции(ПараметрыОбновления); ЗафиксироватьТранзакцию(); - ПослеФиксацииТранзакции(ПараметрыОбновления); // АПК:330 - только для анализа производительности. + ПослеФиксацииТранзакции(ПараметрыОбновления); + // АПК:330-вкл. Исключение ОтменитьТранзакцию(); ВызватьИсключение; @@ -16413,6 +16897,7 @@ Запрос.УстановитьПараметр("ПустойУникальныйИдентификатор", ОбщегоНазначенияКлиентСервер.ПустойУникальныйИдентификатор()); + УстановитьУточнениеПланаЗапроса(Запрос.Текст); РезультатыЗапроса = Запрос.ВыполнитьПакет(); ПараметрыОбновления.Вставить("ТипПользователя", ?(ПараметрыОбновления.ДляВнешнихПользователей, @@ -16649,7 +17134,8 @@ | И (ГруппыДоступа.Ссылка = ТаблицыГруппДоступа.ГруппаДоступа) | ВНУТРЕННЕЕ СОЕДИНЕНИЕ НазначениеПрофилей КАК НазначениеПрофилей | ПО (НазначениеПрофилей.Профиль = ГруппыДоступа.Профиль) - | И (НазначениеПрофилей.ДляПользователей)"; + | И (НазначениеПрофилей.ДляПользователей) + | И (&УточнениеПланаЗапроса)"; ТекстЗапросаУчастников = "ВЫБРАТЬ РАЗЛИЧНЫЕ @@ -16666,6 +17152,7 @@ | ВНУТРЕННЕЕ СОЕДИНЕНИЕ НазначениеПрофилей КАК НазначениеПрофилей | ПО (НазначениеПрофилей.Профиль = ГруппыДоступа.Профиль) | И (НазначениеПрофилей.ДляПользователей) + | И (&УточнениеПланаЗапроса) | | ОБЪЕДИНИТЬ ВСЕ | @@ -16690,8 +17177,21 @@ | Справочник.ГруппыДоступа.Пользователи КАК ПользователиГруппыДоступа | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ГруппыДоступа КАК ГруппыДоступа | ПО (ГруппыДоступа.Ссылка = ПользователиГруппыДоступа.Ссылка) + | И (ТИПЗНАЧЕНИЯ(ПользователиГруппыДоступа.Пользователь) = ТИП(Справочник.ГруппыПользователей)) | ГДЕ - | ТИПЗНАЧЕНИЯ(ПользователиГруппыДоступа.Пользователь) = ТИП(Справочник.ГруппыПользователей) + | &УточнениеПланаЗапроса + | + | ОБЪЕДИНИТЬ ВСЕ + | + | ВЫБРАТЬ РАЗЛИЧНЫЕ + | ЗначенияГруппДоступа.ЗначениеДоступа + | ИЗ + | РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ГруппыДоступа КАК ГруппыДоступа + | ПО (ГруппыДоступа.Ссылка = ЗначенияГруппДоступа.ГруппаДоступа) + | И (ТИПЗНАЧЕНИЯ(ЗначенияГруппДоступа.ЗначениеДоступа) = ТИП(Справочник.ГруппыПользователей)) + | ГДЕ + | &УточнениеПланаЗапроса | | ОБЪЕДИНИТЬ ВСЕ | @@ -16715,6 +17215,7 @@ | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Пользователи КАК Пользователи | ПО (Пользователи.Ссылка = СоставыГруппПользователей.Пользователь) | И (Пользователи.ИдентификаторПользователяИБ <> &ПустойУникальныйИдентификатор) + | И (&УточнениеПланаЗапроса) |ИТОГИ ПО | ГруппаПользователей |; @@ -16738,6 +17239,7 @@ | И СоставыГруппПользователей.Используется | И Пользователи.Ссылка = СоставыГруппПользователей.Пользователь | И Пользователи.ИдентификаторПользователяИБ <> &ПустойУникальныйИдентификатор)) + | И (&УточнениеПланаЗапроса) |ИТОГИ ПО | ГруппаДоступа"; @@ -16794,6 +17296,7 @@ Запрос.Текст = СтрЗаменить(Запрос.Текст, "НазначениеПрофилей.ДляПользователей", "НазначениеПрофилей.ДляВнешнихПользователей"); КонецЕсли; + УстановитьУточнениеПланаЗапроса(Запрос.Текст); РезультатыЗапроса = Запрос.ВыполнитьПакет(); @@ -16863,6 +17366,12 @@ ПараметрыОбновления.Кэш.Вставить("ЗначенияГруппДоступаВерсия", Новый УникальныйИдентификатор); КонецЕсли; + Если ТранзакцияАктивна() И ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда + Блокировка = Новый БлокировкаДанных; + Блокировка.Добавить("РегистрСведений.ПараметрыРаботыВерсийРасширений"); + Блокировка.Заблокировать(); + КонецЕсли; + ИмяПараметраВерсии = "СтандартныеПодсистемы.УправлениеДоступом.ЗначенияГруппДоступаВерсия"; ЗначенияГруппДоступаВерсия = СтандартныеПодсистемыСервер.ПараметрРаботыРасширения(ИмяПараметраВерсии, Истина); @@ -17733,6 +18242,9 @@ КонецЕсли; Иначе ЗначениеУказано = ЗначенияОдногоТипа.Значения.Получить(Значение) <> Неопределено; + Если Не ЗначениеУказано И ТипЗначения = Контекст.ТипПользователя Тогда + ЗначениеУказано = ЗначениеУказаноВГруппеПользователей(Значение, Контекст); + КонецЕсли; Результат = "Ложь"; Если ЗначениеУказано И Не ЗначенияОдногоТипа.ВсеРазрешены Или Не ЗначениеУказано И ЗначенияОдногоТипа.ВсеРазрешены Тогда @@ -17878,6 +18390,28 @@ КонецФункции +// Для функции РассчитанноеУсловие. +Функция ЗначениеУказаноВГруппеПользователей(Пользователь, Контекст) + + УказанныеГруппыПользователей = Контекст.ЗначенияГруппыДоступа.Получить(Контекст.ТипГруппыПользователей); + Если УказанныеГруппыПользователей = Неопределено Тогда + Возврат Ложь; + КонецЕсли; + + Для Каждого УказаннаяГруппаПользователей Из УказанныеГруппыПользователей.Значения Цикл + ПользователиГруппы = Контекст.ПользователиГруппПользователей.Получить(УказаннаяГруппаПользователей.Ключ); + Если ПользователиГруппы = Неопределено Тогда + Продолжить; + КонецЕсли; + Если ПользователиГруппы.Получить(Пользователь) <> Неопределено Тогда + Возврат Истина; + КонецЕсли; + КонецЦикла; + + Возврат Ложь; + +КонецФункции + // Для функции РассчитанноеУсловие. Процедура ЗаполнитьРезультатДляПользователя(Результат, Пользователь, Контекст) @@ -17982,7 +18516,9 @@ |ИЗ | РегистрСведений.КлючиДоступаГруппДоступа КАК КлючиДоступаГруппДоступа |ГДЕ - | КлючиДоступаГруппДоступа.КлючДоступа = &КлючДоступа"; + | КлючиДоступаГруппДоступа.КлючДоступа = &КлючДоступа + | И &УточнениеПланаЗапроса"; + УстановитьУточнениеПланаЗапроса(ЗапросГрупп.Текст); ЭлементБлокировкиГрупп = Блокировка.Добавить("РегистрСведений.КлючиДоступаГруппДоступа"); ЭлементБлокировкиГрупп.УстановитьЗначение("КлючДоступа", КлючДоступа); @@ -18038,6 +18574,7 @@ КонецЕсли; ЭлементБлокировки = Блокировка.Добавить("Справочник.НаборыГруппДоступа"); ЭлементБлокировки.Режим = РежимБлокировкиДанных.Разделяемый; + Блокировка.Добавить("РегистрСведений.ОбновлениеКлючейДоступаКДанным"); Блокировка.Добавить("РегистрСведений.ОбновлениеКлючейДоступаПользователей"); КонецЕсли; @@ -18109,9 +18646,13 @@ КонецЕсли; КонецЕсли; + // АПК:330-выкл - №783.1.3 Допустимо указать вызов после ЗафиксироватьТранзакцию, + // так как это вызов пустой процедуры в штатном режиме (то есть исключение невозможно), + // а в режиме анализа производительности последствия учитываются и не являются критичными. ПередФиксациейТранзакции(ПараметрыОбновления); ЗафиксироватьТранзакцию(); - ПослеФиксацииТранзакции(ПараметрыОбновления); // АПК:330 - только для анализа производительности. + ПослеФиксацииТранзакции(ПараметрыОбновления); + // АПК:330-вкл. Исключение ОтменитьТранзакцию(); ВызватьИсключение; @@ -18126,7 +18667,7 @@ // Для процедур ОбновитьПраваНаКлючДоступаСписка, ОбновитьГруппыДоступаРазрешенногоКлючаДоступа. Функция ТекстЗапросаВыбораРазличийПроизводныхПравДляГруппДоступа() - Возврат + ТекстЗапроса = "ВЫБРАТЬ | ВсеСтроки.НаборГруппДоступа КАК НаборГруппДоступа, | ВсеСтроки.Изменение КАК Изменение, @@ -18143,6 +18684,7 @@ | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.НаборыГруппДоступа.Группы КАК ГруппыВходящиеВНаборы | ПО (ГруппыВходящиеВНаборы.Группа = КлючиДоступаГруппДоступа.ГруппаДоступа) | И (КлючиДоступаГруппДоступа.КлючДоступа = &КлючДоступа) + | И (&УточнениеПланаЗапроса) | | СГРУППИРОВАТЬ ПО | ГруппыВходящиеВНаборы.Ссылка @@ -18183,12 +18725,16 @@ |УПОРЯДОЧИТЬ ПО | ВидИзмененияСтроки"; + УстановитьУточнениеПланаЗапроса(ТекстЗапроса); + + Возврат ТекстЗапроса; + КонецФункции // Для процедур ОбновитьПраваНаКлючДоступаСписка. Функция ТекстЗапросаВыбораРазличийПроизводныхПравДляПользователей() - Возврат + ТекстЗапроса = "ВЫБРАТЬ | КлючиДоступаПользователей.Пользователь КАК Пользователь, | КлючиДоступаПользователей.Изменение КАК Изменение, @@ -18199,6 +18745,7 @@ |ГДЕ | КлючиДоступаПользователей.КлючДоступа = &КлючДоступа | И НЕ КлючиДоступаПользователей.ЭтоПраваНабораГрупп + | И &УточнениеПланаЗапроса |; | |//////////////////////////////////////////////////////////////////////////////// @@ -18220,6 +18767,7 @@ | ПО (ГруппыВходящиеВНаборы.Группа = КлючиДоступаГруппДоступа.ГруппаДоступа) | И (ТИПЗНАЧЕНИЯ(КлючиДоступаГруппДоступа.ГруппаДоступа) = ТИП(Справочник.ГруппыПользователей)) | И (КлючиДоступаГруппДоступа.КлючДоступа = &КлючДоступа) + | И (&УточнениеПланаЗапроса) | | СГРУППИРОВАТЬ ПО | ГруппыВходящиеВНаборы.Ссылка @@ -18248,12 +18796,16 @@ |УПОРЯДОЧИТЬ ПО | ВидИзмененияСтроки"; + УстановитьУточнениеПланаЗапроса(ТекстЗапроса); + + Возврат ТекстЗапроса; + КонецФункции // Для процедур ОбновитьПраваНаКлючДоступаСписка. Функция ТекстЗапросаВыбораРазличийПроизводныхПравДляВнешнихПользователей() - Возврат + ТекстЗапроса = "ВЫБРАТЬ | КлючиДоступаВнешнихПользователей.ВнешнийПользователь КАК ВнешнийПользователь, | КлючиДоступаВнешнихПользователей.Изменение КАК Изменение, @@ -18264,6 +18816,7 @@ |ГДЕ | КлючиДоступаВнешнихПользователей.КлючДоступа = &КлючДоступа | И НЕ КлючиДоступаВнешнихПользователей.ЭтоПраваНабораГрупп + | И &УточнениеПланаЗапроса |; | |//////////////////////////////////////////////////////////////////////////////// @@ -18285,6 +18838,7 @@ | ПО (ГруппыВходящиеВНаборы.Группа = КлючиДоступаГруппДоступа.ГруппаДоступа) | И (ТИПЗНАЧЕНИЯ(КлючиДоступаГруппДоступа.ГруппаДоступа) = ТИП(Справочник.ГруппыВнешнихПользователей)) | И (КлючиДоступаГруппДоступа.КлючДоступа = &КлючДоступа) + | И (&УточнениеПланаЗапроса) | | СГРУППИРОВАТЬ ПО | ГруппыВходящиеВНаборы.Ссылка @@ -18313,6 +18867,10 @@ |УПОРЯДОЧИТЬ ПО | ВидИзмененияСтроки"; + УстановитьУточнениеПланаЗапроса(ТекстЗапроса); + + Возврат ТекстЗапроса; + КонецФункции // Для процедуры ОбновитьПраваНаКлючДоступаСписка. @@ -18728,7 +19286,11 @@ Функция МаксимальноеКоличествоМинутВыполненияФоновогоЗаданияОбновленияДоступа() - Возврат 2; + Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда + Возврат 2; + Иначе + Возврат 15; + КонецЕсли; КонецФункции @@ -18816,6 +19378,12 @@ КонецФункции +Функция РегистрироватьСтрокуВерсииПараметровОграниченияДоступа() + + Возврат Ложь; + +КонецФункции + #КонецОбласти #Область ТочкиПодключенияДляАнализаПроизводительностиЧерезРасширениеКонфигурации @@ -19106,6 +19674,10 @@ Параметры = КэшПараметровОграничения().ОграниченияСписков.Получить(ПолноеИмя); КонецЕсли; + Если ДляВнешнихПользователей = Null Тогда + Возврат Параметры; + КонецЕсли; + Если ДляВнешнихПользователей = Неопределено Тогда ДляВнешнихПользователей = Пользователи.ЭтоСеансВнешнегоПользователя(); КонецЕсли; @@ -19364,6 +19936,7 @@ РезультатДляПользователей.Контекст.СпискиСЗаписьюКлючейДляЗависимыхСписковБезКлючей = Новый Соответствие; УстановитьСвойстваЗаписиКлючейДоступа(РезультатДляПользователей); РезультатДляПользователей.Вставить("БезЗаписиКлючейДоступаДляПользователейИВнешнихПользователей", Ложь); + РезультатДляПользователей.Контекст.Вставить("ПропуститьПроверкуОпределяемыхТипов"); Попытка ДобавитьТекстыЗапросовВПараметрыОграничения(РезультатДляПользователей); Исключение @@ -19761,6 +20334,7 @@ Для Каждого КлючИЗначение Из ПараметрыОграничения.ВедущиеСписки.ПоКлючамДоступа Цикл Контекст.ВерсииОграниченийСписков.Вставить(КлючИЗначение.Ключ, Неопределено); КонецЦикла; + ПараметрыОграничения.Контекст.Вставить("ПропуститьПроверкуОпределяемыхТипов"); Попытка ДобавитьТекстыЗапросовВПараметрыОграничения(ПараметрыОграничения); Исключение @@ -20151,10 +20725,30 @@ // Для функции ДействующиеПараметрыОграниченияДоступа. Функция НоваяВерсияПараметровОграниченияДоступа(ОбщийКонтекст, ЕстьИзменения = Ложь) + Если РегистрироватьСтрокуВерсииПараметровОграниченияДоступа() Тогда + Если ТипЗнч(ОбщийКонтекст) <> Тип("Структура") Тогда + ОбновитьПовторноИспользуемыеЗначения(); + ОбщийКонтекст = ОбщийКонтекстРасчетаПараметровОграничения(); + КонецЕсли; + Если ОбщийКонтекст.Свойство("СтрокиВерсииХранимыхПараметров") Тогда + УдалитьСтрокиВерсииХранимыхПараметров = Ложь; + Иначе + ОбщийКонтекст.Вставить("СтрокиВерсииХранимыхПараметров"); + УдалитьСтрокиВерсииХранимыхПараметров = Истина; + КонецЕсли; + КонецЕсли; + ВерсииОграниченийСписков = Новый Соответствие; ХранимыеПараметры = ХранимыеПараметрыОграниченияДоступа(ОбщийКонтекст, ВерсииОграниченийСписков); ВерсииОграниченийСписков.Вставить("Справочник.НаборыГруппДоступа", "1"); + Если РегистрироватьСтрокуВерсииПараметровОграниченияДоступа() Тогда + СтрокиВерсии = ОбщийКонтекст.СтрокиВерсииХранимыхПараметров; + Если УдалитьСтрокиВерсииХранимыхПараметров Тогда + ОбщийКонтекст.Удалить("СтрокиВерсииХранимыхПараметров"); + КонецЕсли; + КонецЕсли; + НаборЗаписей = СлужебныйНаборЗаписей(РегистрыСведений.ПараметрыОграниченияДоступа); Запись = НаборЗаписей.Добавить(); ЗаполнитьЗначенияСвойств(Запись, ХранимыеПараметры); @@ -20174,6 +20768,7 @@ ЭлементБлокировки.Режим = РежимБлокировкиДанных.Разделяемый; ЭлементБлокировки.УстановитьЗначение("Версия", ОписаниеВерсии.Версия); БлокировкаДанных.Заблокировать(); + ЭлементБлокировки = БлокировкаДанных.Добавить("РегистрСведений.ПараметрыОграниченияДоступа"); ЗаблокированнаяВерсия = ОписаниеВерсии.Версия; ОписаниеВерсии = ОписаниеПоследнейВерсии(); Продолжить; @@ -20213,6 +20808,9 @@ НаборЗаписей.Записать(); ЕстьИзменения = Истина; + Если РегистрироватьСтрокуВерсииПараметровОграниченияДоступа() Тогда + ЗарегистрироватьСтрокуВерсииПараметровОграниченияДоступа(НаборЗаписей[0], СтрокиВерсии); + КонецЕсли; Прервать; КонецЦикла; ЗафиксироватьТранзакцию(); @@ -20236,6 +20834,46 @@ КонецФункции +// Для функции НоваяВерсияПараметровОграниченияДоступа. +Процедура ЗарегистрироватьСтрокуВерсииПараметровОграниченияДоступа(Запись, СтрокиВерсии) + + Состав = Новый Массив; + Состав.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + "Версия = %1 + |ДатаСоздания = %2 + |ХешСумма = %3 + |", + Запись.Версия, + Формат(Запись.ДатаСоздания, "ДЛФ=DT"), + Запись.ХешСумма)); + + Для Каждого Строка Из СтрокиВерсии.СтрокиВерсийСписков Цикл + Состав.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + "[Список = %1, ДляВнешнихПользователей = %2, Версия = %3] + |%4", + Строка.Список, + ?(Строка.ДляВнешнихПользователей, "Да", "Нет"), + Строка.Версия, + Строка.СтрокаВерсии)); + КонецЦикла; + + Состав.Добавить("[ВсеВерсииСтрокой] + |" + СтрокиВерсии.ВсеВерсииСтрокой); + + Состав.Добавить("[ВсеВидыОграниченийСтрокой] + |" + СтрокиВерсии.ВсеВидыОграниченийСтрокой); + + Комментарий = СтрСоединить(Состав, Символы.ПС); + + ЗаписьЖурналаРегистрации( + НСтр("ru = 'Управление доступом.Строка версии параметров ограничения доступа'", + ОбщегоНазначения.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Информация, + Метаданные.РегистрыСведений.ПараметрыОграниченияДоступа,, + Комментарий); + +КонецПроцедуры + // Для функции НоваяВерсияПараметровОграниченияДоступа. Функция СпискиСИзменениемВерсий(НовыеВерсииОграниченийСписков) @@ -20304,7 +20942,7 @@ // Число нужно увеличивать при внесении изменений в состав параметров кэша // (в том числе при изменении версии шаблонов). - Возврат "16"; + Возврат "17"; КонецФункции @@ -20495,9 +21133,7 @@ // Для процедуры ОбновитьРазрешенныеНаборыВПараметрахСеанса. Процедура УчестьНастройкиПравПриПостроенииПланаВыполненияЗапроса(ОбщиеПараметры) - ВидСУБД = ВидСУБД(); - - Если ВидСУБД = "File" Или ВидСУБД = "PostgreSQL" Тогда + Если Не УправлениеДоступомСлужебныйПовтИсп.ТребуетсяУточнениеПланаЗапроса() Тогда Возврат; КонецЕсли; @@ -20507,67 +21143,6 @@ КонецПроцедуры -// Для процедуры УчестьНастройкиПравПриПостроенииПланаВыполненияЗапроса. -Функция ВидСУБД() - - Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда - Возврат "File"; - КонецЕсли; - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | Таблица.Поле КАК Поле - |ИЗ - | (ВЫБРАТЬ - | NULL КАК Поле - | - | ОБЪЕДИНИТЬ ВСЕ - | - | ВЫБРАТЬ - | 1) КАК Таблица - | - |УПОРЯДОЧИТЬ ПО - | Поле - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | Таблица.Поле КАК Поле - |ИЗ - | (ВЫБРАТЬ - | ""Yes1"" КАК Поле) КАК Таблица - |ГДЕ - | Таблица.Поле ПОДОБНО ""Yes[1]"" - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | Таблица.Поле КАК Поле - |ИЗ - | (ВЫБРАТЬ - | ""Yes_"" КАК Поле) КАК Таблица - |ГДЕ - | Таблица.Поле ПОДОБНО ""Yes[\_]"""; - - РезультатыЗапроса = Запрос.ВыполнитьПакет(); - - Если РезультатыЗапроса[0].Выгрузить()[0].Поле <> 1 Тогда - Возврат "MSSQLServer"; - КонецЕсли; - - Если РезультатыЗапроса[1].Пустой() Тогда - Возврат "IBMDB2"; - КонецЕсли; - - Если РезультатыЗапроса[2].Пустой() Тогда - Возврат "PostgreSQL"; - КонецЕсли; - - Возврат "OracleDatabase"; - -КонецФункции - // Для процедуры УчестьНастройкиПравПриПостроенииПланаВыполненияЗапроса. Функция ОписаниеХешСуммыНастроекПрав(НаборГруппДоступа, Символ = "") @@ -20636,6 +21211,17 @@ ВсеВидыОграниченийПрав = Новый Соответствие; ДобавитьНестандартныеВидыОграниченийПрав(ВсеВидыОграниченийПрав); + Если ОбщийКонтекст.Свойство("СтрокиВерсииХранимыхПараметров") Тогда + СтрокиВерсийСписков = Новый ТаблицаЗначений; + СтрокиВерсийСписков.Колонки.Добавить("Список", Новый ОписаниеТипов("Строка")); + СтрокиВерсийСписков.Колонки.Добавить("ДляВнешнихПользователей", Новый ОписаниеТипов("Булево")); + СтрокиВерсийСписков.Колонки.Добавить("Версия", Новый ОписаниеТипов("Строка")); + СтрокиВерсийСписков.Колонки.Добавить("СтрокаВерсии", Новый ОписаниеТипов("Строка")); + ОбщийКонтекст.СтрокиВерсииХранимыхПараметров = + Новый Структура("ВсеВерсииСтрокой, ВсеВидыОграниченийСтрокой, СтрокиВерсийСписков", + "", "", СтрокиВерсийСписков); + КонецЕсли; + // Заполнение для пользователей. КонтекстДляПользователей = Новый Структура; КонтекстДляПользователей.Вставить("ДляВнешнихПользователей", Ложь); @@ -20702,6 +21288,9 @@ ВерсииСтрокой = СтрСоединить(Версии.ВыгрузитьЗначения(), Символы.ПС); ХешированиеДанных = Новый ХешированиеДанных(ХешФункция.SHA256); ХешированиеДанных.Добавить(ВерсииСтрокой); + Если ОбщийКонтекст.Свойство("СтрокиВерсииХранимыхПараметров") Тогда + ОбщийКонтекст.СтрокиВерсииХранимыхПараметров.ВсеВерсииСтрокой = ВерсииСтрокой; + КонецЕсли; // Подготовка дополнительного контекста для расчета параметров ограничения отдельного списка. ХранимыеСвойства = "СпискиСОтключеннымОграничением, СпискиСОтключеннымОграничениемЧтения, @@ -20748,6 +21337,9 @@ ХранимыеПараметрыОтчета = СтруктураХранимыхПараметровОтчета(); ХранимыеПараметрыОтчета.ВсеВидыОграниченийПрав = ВсеВидыОграниченийСтрокой; ХешированиеДанных.Добавить(ВсеВидыОграниченийСтрокой); + Если ОбщийКонтекст.Свойство("СтрокиВерсииХранимыхПараметров") Тогда + ОбщийКонтекст.СтрокиВерсииХранимыхПараметров.ВсеВидыОграниченийСтрокой = ВсеВидыОграниченийСтрокой; + КонецЕсли; ХранимыеПараметры.Вставить("ДляОтчетаПоПравамДоступа", Новый ХранилищеЗначения(ОбщегоНазначения.ФиксированныеДанные(ХранимыеПараметрыОтчета))); @@ -20755,6 +21347,10 @@ ХранимыеПараметры.Вставить("ХешСумма", Base64Строка(ХешированиеДанных.ХешСумма)); ХранимыеПараметры.Вставить("ДатаСоздания", ТекущаяДатаСеанса()); + Если ОбщийКонтекст.Свойство("СтрокиВерсииХранимыхПараметров") Тогда + СтрокиВерсийСписков.Сортировать("Список, ДляВнешнихПользователей"); + КонецЕсли; + Возврат ХранимыеПараметры; КонецФункции @@ -21021,6 +21617,13 @@ Новый ХранилищеЗначения(СвойстваСписка.Параметры.ИспользуемыеТипыЗначенийДоступа), Контекст); Контекст.ВерсииОграниченийСписков.Вставить(ПолноеИмя, СвойстваСписка.Параметры.Версия); + Если Контекст.ОбщийКонтекст.Свойство("СтрокиВерсииХранимыхПараметров") Тогда + НоваяСтрока = Контекст.ОбщийКонтекст.СтрокиВерсииХранимыхПараметров.СтрокиВерсийСписков.Добавить(); + НоваяСтрока.Список = СвойстваСписка.ПолноеИмя; + НоваяСтрока.ДляВнешнихПользователей = Контекст.ДляВнешнихПользователей; + НоваяСтрока.Версия = СвойстваСписка.Параметры.Версия; + НоваяСтрока.СтрокаВерсии = СвойстваСписка.Параметры.Контекст.СтрокаСвойствВерсии; + КонецЕсли; ВедущиеСписки = СвойстваСписка.Параметры.ВедущиеСписки; @@ -21626,7 +22229,7 @@ Или ИмяКоллекцииТипа = "РегистрыРасчета"); КонецЕсли; - Контекст = Новый Структура; + Контекст = Новый Структура("СтрокаСвойствВерсии", ""); Результат.Вставить("Контекст", Контекст); Для Каждого КлючИЗначение Из ОбщийКонтекст Цикл @@ -21760,6 +22363,7 @@ ХешированиеДанных = Новый ХешированиеДанных(ХешФункция.SHA256); СтрокаСвойствВерсии = СтрСоединить(Контекст.СвойстваВерсии, Символы.ПС); + Контекст.СтрокаСвойствВерсии = СтрокаСвойствВерсии; ХешированиеДанных.Добавить(СтрокаСвойствВерсии); Результат.Версия = Base64Строка(ХешированиеДанных.ХешСумма); @@ -24413,11 +25017,13 @@ Функция ТекстСоединенияОтбораПоЗначениямПолей(Условие, Группы, Контекст) Если Контекст.ЭтоСсылочныйТип Тогда - ДополнительноеУсловие = ""; + ДополнительноеУсловие = " + | И (&УточнениеПланаЗапроса)"; Иначе ДополнительноеУсловие = ?(Не ЗначениеЗаполнено(Контекст.ИмяОтдельногоРегистраКлючей), " | И (ТекущийСписок.Регистр = &ИдентификаторРегистра)", "") + " - | И (ТекущийСписок.ДляВнешнихПользователей = " + ?(Контекст.ДляВнешнихПользователей, "ИСТИНА", "ЛОЖЬ") + ")"; + | И (ТекущийСписок.ДляВнешнихПользователей = " + ?(Контекст.ДляВнешнихПользователей, "ИСТИНА", "ЛОЖЬ") + ") + | И (&УточнениеПланаЗапроса)"; КонецЕсли; Если Условие.ГруппаТаблиц = Неопределено Или ЗначениеЗаполнено(Условие.ТабличнаяЧасть) Тогда @@ -24815,7 +25421,8 @@ // Запрос отборов записей, которых нет в регистре ключей доступа регистров при фоновом обновлении. Результат.Вставить("ТекстЗапросаЭлементовДанныхБезКлючейДоступа"); // Запрос отборов записей, которых нет в регистре ключей доступа регистров при записи нового набора. - Результат.Вставить("ТекстЗапросаНовыхКомбинацийЗначенийОпорныхПолей"); + Результат.Вставить("ТекстЗапросаНовыхКомбинацийЗначенийОпорныхПолейСуществующихЗаписей"); + Результат.Вставить("ТекстЗапросаНовыхКомбинацийЗначенийОпорныхПолейНовыхЗаписей"); // Запросы объектов или отборов записей, у которых устарели ключи доступа // по составу изменений ведущих объектов (для точечного задания). Результат.Вставить("ОписаниеЗапросовУстаревшихКлючейДоступаПоВедущимОбъектам", Новый Соответствие); @@ -24899,6 +25506,10 @@ Возврат; КонецЕсли; + Если Контекст.Свойство("ПропуститьПроверкуОпределяемыхТипов") Тогда + Возврат; + КонецЕсли; + Если ЗначениеЗаполнено(Контекст.ИмяОтдельногоРегистраКлючей) Тогда Измерения = Метаданные.РегистрыСведений[Контекст.ИмяОтдельногоРегистраКлючей].Измерения; Иначе @@ -25031,6 +25642,7 @@ | ТИПЗНАЧЕНИЯ(КлючиДоступаКОбъектам.Объект) = ТИП(&ТекущийСписок) | И ВЫРАЗИТЬ(КлючиДоступаКОбъектам.Объект КАК &ТекущийСписок) > &ПоследняяОбработаннаяСсылка | И КлючиДоступаКОбъектам.КлючДоступаВнешнихПользователей <> ЗНАЧЕНИЕ(Справочник.КлючиДоступа.ПустаяСсылка) + | И &УточнениеПланаЗапроса | |УПОРЯДОЧИТЬ ПО | КлючиДоступаКОбъектам.Объект"; @@ -25046,6 +25658,7 @@ |ГДЕ | ТИПЗНАЧЕНИЯ(КлючиДоступаКОбъектам.Объект) = ТИП(&ТекущийСписок) | И ВЫРАЗИТЬ(КлючиДоступаКОбъектам.Объект КАК &ТекущийСписок) > &ПоследняяОбработаннаяСсылка + | И &УточнениеПланаЗапроса | |УПОРЯДОЧИТЬ ПО | КлючиДоступаКОбъектам.Объект"; @@ -25063,6 +25676,7 @@ | ТИПЗНАЧЕНИЯ(КлючиДоступаКОбъектам.Объект) = ТИП(&ТекущийСписок) | И ВЫРАЗИТЬ(КлючиДоступаКОбъектам.Объект КАК &ТекущийСписок) > &ПоследняяОбработаннаяСсылка | И #Условие + | И &УточнениеПланаЗапроса | |УПОРЯДОЧИТЬ ПО | КлючиДоступаКОбъектам.Объект"; @@ -25144,6 +25758,7 @@ |ГДЕ | " + ОсновнойОтбор + " | И " + ОпорныеПоляДляОтбора + " + | И &УточнениеПланаЗапроса | |УПОРЯДОЧИТЬ ПО | " + ОпорныеПоляДляУпорядочения; @@ -25157,6 +25772,7 @@ |ГДЕ | КлючиДоступаКРегистрам.Регистр = &ИдентификаторРегистра | И " + ОпорныеПоляДляОтбора + " + | И &УточнениеПланаЗапроса | |УПОРЯДОЧИТЬ ПО | " + ОпорныеПоляДляУпорядочения; @@ -25200,6 +25816,7 @@ | &ТекущийСписок КАК ТекущийСписок | ГДЕ | " + ТекстСОтступом(ОпорныеПоляДляСравнения, " ") + ")) + | И &УточнениеПланаЗапроса | |УПОРЯДОЧИТЬ ПО | " + ОпорныеПоляДляУпорядочения; @@ -25224,7 +25841,8 @@ | ИЗ | &ТекущийСписок КАК ТекущийСписок | ГДЕ - | " + ТекстСОтступом(ОпорныеПоляДляСравнения, " ") + ")"; + | " + ТекстСОтступом(ОпорныеПоляДляСравнения, " ") + ") + | И &УточнениеПланаЗапроса"; ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекущийСписок", Результат.Список); ТекстЗапросаПроверки = СтрЗаменить(ТекстЗапросаПроверки, "&ТекущийСписок", Результат.Список); @@ -25266,6 +25884,7 @@ | ТекущийСписок.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания | И (КлючиДоступаКОбъектам.Объект ЕСТЬ NULL | ИЛИ #Условие) + | И &УточнениеПланаЗапроса | |УПОРЯДОЧИТЬ ПО | ТекущийСписок.Дата УБЫВ"; @@ -25282,6 +25901,7 @@ |ГДЕ | ТекущийСписок.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания | И #Условие + | И &УточнениеПланаЗапроса | |УПОРЯДОЧИТЬ ПО | ТекущийСписок.Дата УБЫВ"; @@ -25297,6 +25917,7 @@ | ТекущийСписок.Ссылка >= &ПоследняяОбработаннаяСсылка | И (КлючиДоступаКОбъектам.Объект ЕСТЬ NULL | ИЛИ #Условие) + | И &УточнениеПланаЗапроса | |УПОРЯДОЧИТЬ ПО | ТекущийСписок.Ссылка"; @@ -25312,6 +25933,7 @@ |ГДЕ | ТекущийСписок.Ссылка >= &ПоследняяОбработаннаяСсылка | И #Условие + | И &УточнениеПланаЗапроса | |УПОРЯДОЧИТЬ ПО | ТекущийСписок.Ссылка"; @@ -25327,8 +25949,9 @@ | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаКОбъектам КАК КлючиДоступаКОбъектам | ПО (КлючиДоступаКОбъектам.Объект = ТекущийСписок.Ссылка) |ГДЕ - | КлючиДоступаКОбъектам.Объект ЕСТЬ NULL - | ИЛИ #Условие"; + | (КлючиДоступаКОбъектам.Объект ЕСТЬ NULL + | ИЛИ #Условие) + | И &УточнениеПланаЗапроса"; Если Не Контекст.Свойство("ОписаниеЗапросовПроверкиПоВедущимОбъектам") Тогда Возврат; @@ -25480,6 +26103,7 @@ |ГДЕ | " + ОпорныеПоля.ДляОтбора + " | И (#Условие) + | И &УточнениеПланаЗапроса | |УПОРЯДОЧИТЬ ПО | " + ОпорныеПоля.ДляУпорядочения; @@ -25492,7 +26116,8 @@ |ИЗ | ТекущийСписокПоВедущимОбъектам КАК ТекущийСписок |ГДЕ - | #Условие"; + | (#Условие) + | И &УточнениеПланаЗапроса"; Контекст.Вставить("ТекстЗапросаТочечнойПроверки", ТекстЗапросаТочечнойПроверкиКомбинаций); @@ -25530,6 +26155,7 @@ | ИЛИ ТекущийРегистр.Период = &ДатаОкончания | И " + ТекстСОтступом(ОпорныеПоляДляОтбора, " ") + ") | И КлючиДоступаКРегистрам.ДляВнешнихПользователей ЕСТЬ NULL + | И &УточнениеПланаЗапроса | |СГРУППИРОВАТЬ ПО | " + ОпорныеПоляДляГруппировкиИлиУпорядочения + " @@ -25551,6 +26177,7 @@ |ГДЕ | " + ОпорныеПоляДляОтбора + " | И КлючиДоступаКРегистрам.ДляВнешнихПользователей ЕСТЬ NULL + | И &УточнениеПланаЗапроса | |УПОРЯДОЧИТЬ ПО | " + ОпорныеПоляДляГруппировкиИлиУпорядочения; @@ -25772,6 +26399,7 @@ | Справочник.КлючиДоступа КАК СпискиВедущихКлючейДоступа | ГДЕ | &УсловиеОтбора) + | И &УточнениеПланаЗапроса |ИТОГИ ПО | Список"; @@ -25787,7 +26415,8 @@ |ИЗ | Справочник.КлючиДоступа КАК СпискиВедущихКлючейДоступа |ГДЕ - | &УсловиеОтбора"; + | &УсловиеОтбора + | И &УточнениеПланаЗапроса"; ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&УсловиеОтбора", СтрЗаменить(УсловиеОтбора, "#ПроверяемоеПоле", "СпискиВедущихКлючейДоступа.Ссылка")); @@ -25805,6 +26434,7 @@ |ГДЕ | ТИПЗНАЧЕНИЯ(ПраваНаКлючиДоступа.ГруппаДоступа) = ТИП(Справочник.ГруппыДоступа) | И &УсловиеОтбора + | И &УточнениеПланаЗапроса |ИТОГИ ПО | КлючДоступа"; ИначеЕсли Не Контекст.ДляВнешнихПользователей Тогда @@ -25817,6 +26447,7 @@ | РегистрСведений.КлючиДоступаГруппДоступа КАК ПраваНаКлючиДоступа |ГДЕ | &УсловиеОтбора + | И &УточнениеПланаЗапроса | |ОБЪЕДИНИТЬ ВСЕ | @@ -25842,6 +26473,7 @@ | РегистрСведений.КлючиДоступаГруппДоступа КАК ПраваНаКлючиДоступа |ГДЕ | &УсловиеОтбора + | И &УточнениеПланаЗапроса | |ОБЪЕДИНИТЬ ВСЕ | @@ -25884,6 +26516,7 @@ | РегистрСведений.ТаблицыГруппДоступа КАК ПраваНаСписки |ГДЕ | &УсловиеОтбора + | И &УточнениеПланаЗапроса |ИТОГИ ПО | Список"; Иначе @@ -25896,6 +26529,7 @@ | РегистрСведений.ТаблицыГруппДоступа КАК ПраваНаСписки |ГДЕ | &УсловиеОтбора + | И &УточнениеПланаЗапроса |ИТОГИ ПО | Список"; КонецЕсли; @@ -25930,6 +26564,7 @@ | ПО НастройкиПрав.Объект = НаследованиеНастроек.Родитель | И (НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения) | И (&УсловиеОтбора) + | И (&УточнениеПланаЗапроса) | |ИНДЕКСИРОВАТЬ ПО | Объект @@ -25946,6 +26581,7 @@ | И (НастройкиПрав.Таблица = &ИдентификаторТаблицыНастроекПрав) | И (НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения) | И (&УсловиеОтбора) + | И (&УточнениеПланаЗапроса) | |ИНДЕКСИРОВАТЬ ПО | Объект @@ -25979,6 +26615,7 @@ | ПО НастройкиПрав.Объект = НаследованиеНастроек.Родитель | И (НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения) | И (&УсловиеОтбора) + | И (&УточнениеПланаЗапроса) | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей | ПО (СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь) | И (ТИПЗНАЧЕНИЯ(СоставыГруппПользователей.Пользователь) = ТИП(Справочник.Пользователи)) @@ -26108,6 +26745,7 @@ | И КлючиДоступа.СоставПолей = &СоставПолей | И КлючиДоступа.ДляВнешнихПользователей = &ДляВнешнихПользователей | И КлючиДоступа.Ссылка > &ПоследнийКлючДоступа + | И &УточнениеПланаЗапроса | |УПОРЯДОЧИТЬ ПО | КлючиДоступа.Ссылка"; @@ -26134,6 +26772,7 @@ | И КлючиДоступа.СоставПолей = &СоставПолей | И КлючиДоступа.ДляВнешнихПользователей = &ДляВнешнихПользователей | И &УсловиеОтбора + | И &УточнениеПланаЗапроса | |УПОРЯДОЧИТЬ ПО | КлючиДоступа.Ссылка"; @@ -26165,6 +26804,7 @@ |ГДЕ | ТИПЗНАЧЕНИЯ(КлючиДоступаКОбъектам.Объект) = ТИП(&ТекущийСписок) | И КлючиДоступаКОбъектам.#КлючДоступаПользователей > &ПоследнийКлючДоступа + | И &УточнениеПланаЗапроса | |ИНДЕКСИРОВАТЬ ПО | КлючДоступа" @@ -26179,6 +26819,7 @@ | КлючиДоступаКРегистрам.Регистр = &Список | И КлючиДоступаКРегистрам.ДляВнешнихПользователей = &ДляВнешнихПользователей | И КлючиДоступаКРегистрам.КлючДоступа > &ПоследнийКлючДоступа + | И &УточнениеПланаЗапроса | |ИНДЕКСИРОВАТЬ ПО | КлючДоступа"; @@ -26212,6 +26853,7 @@ | ИНАЧЕ НЕ ИспользуемыеКлючиДоступа.КлючДоступа ЕСТЬ NULL | ИЛИ КлючиДоступа.НеИспользуетсяС < &ДатаУстаревания | КОНЕЦ + | И &УточнениеПланаЗапроса | |УПОРЯДОЧИТЬ ПО | КлючиДоступа.Ссылка"; @@ -26490,9 +27132,9 @@ УточнитьРегистрКлючейИУсловиеСоединения(ТекстЗапроса, Результат, Контекст); Если Контекст.ДляВнешнихПользователей Тогда - ТекстЗапросаНовыхКомбинацийЗначенийОпорныхПолей = + ТекстЗапросаНовыхКомбинацийЗначенийОпорныхПолейСуществующихЗаписей = "ВЫБРАТЬ РАЗЛИЧНЫЕ - | &ТекущаяТаблицаПоле1 КАК ТекущаяТаблицаПоле1 + | &ТекущаяТаблицаПоле1 КАК Поле1 |ИЗ | &Список КАК ТекущаяТаблица | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаКРегистрам КАК КлючиДоступаКРегистрам @@ -26502,10 +27144,29 @@ |ГДЕ | &ОтборПоИзмерениям | И КлючиДоступаКРегистрам.ДляВнешнихПользователей ЕСТЬ NULL"; - Иначе - ТекстЗапросаНовыхКомбинацийЗначенийОпорныхПолей = - "ВЫБРАТЬ РАЗЛИЧНЫЕ + ТекстЗапросаНовыхКомбинацийЗначенийОпорныхПолейНовыхЗаписей = + "ВЫБРАТЬ | &ТекущаяТаблицаПоле1 КАК ТекущаяТаблицаПоле1 + |ПОМЕСТИТЬ КомбинацииЗначенийОпорныхПолей + |ИЗ + | &КомбинацииЗначенийОпорныхПолей КАК ТекущаяТаблица + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ РАЗЛИЧНЫЕ + | &ТекущаяТаблицаПоле1 КАК Поле1 + |ИЗ + | КомбинацииЗначенийОпорныхПолей КАК ТекущаяТаблица + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаКРегистрам КАК КлючиДоступаКРегистрам + | ПО (КлючиДоступаКРегистрам.Регистр = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка)) + | И (КлючиДоступаКРегистрам.ДляВнешнихПользователей = ИСТИНА) + | И (КлючиДоступаКРегистрам.Поле1 = &ТекущаяТаблицаПоле1) + |ГДЕ + | КлючиДоступаКРегистрам.ДляВнешнихПользователей ЕСТЬ NULL"; + Иначе + ТекстЗапросаНовыхКомбинацийЗначенийОпорныхПолейСуществующихЗаписей = + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | &ТекущаяТаблицаПоле1 КАК Поле1 |ИЗ | &Список КАК ТекущаяТаблица | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаКРегистрам КАК КлючиДоступаКРегистрам @@ -26515,12 +27176,35 @@ |ГДЕ | &ОтборПоИзмерениям | И КлючиДоступаКРегистрам.ДляВнешнихПользователей ЕСТЬ NULL"; + ТекстЗапросаНовыхКомбинацийЗначенийОпорныхПолейНовыхЗаписей = + "ВЫБРАТЬ + | &ТекущаяТаблицаПоле1 КАК ТекущаяТаблицаПоле1 + |ПОМЕСТИТЬ КомбинацииЗначенийОпорныхПолей + |ИЗ + | &КомбинацииЗначенийОпорныхПолей КАК ТекущаяТаблица + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ РАЗЛИЧНЫЕ + | &ТекущаяТаблицаПоле1 КАК Поле1 + |ИЗ + | КомбинацииЗначенийОпорныхПолей КАК ТекущаяТаблица + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаКРегистрам КАК КлючиДоступаКРегистрам + | ПО (КлючиДоступаКРегистрам.Регистр = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка)) + | И (КлючиДоступаКРегистрам.ДляВнешнихПользователей = ЛОЖЬ) + | И (КлючиДоступаКРегистрам.Поле1 = &ТекущаяТаблицаПоле1) + |ГДЕ + | КлючиДоступаКРегистрам.ДляВнешнихПользователей ЕСТЬ NULL"; КонецЕсли; - УточнитьРегистрКлючейИУсловиеСоединения(ТекстЗапросаНовыхКомбинацийЗначенийОпорныхПолей, + УточнитьРегистрКлючейИУсловиеСоединения(ТекстЗапросаНовыхКомбинацийЗначенийОпорныхПолейСуществующихЗаписей, + Результат, Контекст, Истина); + УточнитьРегистрКлючейИУсловиеСоединения(ТекстЗапросаНовыхКомбинацийЗначенийОпорныхПолейНовыхЗаписей, Результат, Контекст, Истина); - Результат.ТекстЗапросаНовыхКомбинацийЗначенийОпорныхПолей = - ТекстЗапросаНовыхКомбинацийЗначенийОпорныхПолей; + Результат.ТекстЗапросаНовыхКомбинацийЗначенийОпорныхПолейСуществующихЗаписей = + ТекстЗапросаНовыхКомбинацийЗначенийОпорныхПолейСуществующихЗаписей; + Результат.ТекстЗапросаНовыхКомбинацийЗначенийОпорныхПолейНовыхЗаписей = + ТекстЗапросаНовыхКомбинацийЗначенийОпорныхПолейНовыхЗаписей; КонецЕсли; Если Не Контекст.ЭтоСсылочныйТип Тогда @@ -26652,9 +27336,12 @@ Возврат; КонецЕсли; + ОпорныеПоля = ""; ПоляВыбора = ""; НомерПоля = 1; Для Каждого Поле Из Результат.ОпорныеПоля.Используемые Цикл + ОпорныеПоля = ОпорныеПоля + ?(ОпорныеПоля = "", "", "," + Символы.ПС) + + "ТекущаяТаблица." + Поле + " КАК " + Поле; ПоляВыбора = ПоляВыбора + ?(ПоляВыбора = "", "", "," + Символы.ПС) + "ТекущаяТаблица." + Поле + " КАК Поле" + НомерПоля; НомерПоля = НомерПоля + 1; @@ -26662,6 +27349,10 @@ ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекущаяТаблицаПоле1 КАК ТекущаяТаблицаПоле1", + ТекстСОтступом(СокрЛ(ОпорныеПоля), " ")); + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, + "&ТекущаяТаблицаПоле1 КАК Поле1", ТекстСОтступом(СокрЛ(ПоляВыбора), " ")); ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&Список", Контекст.Список); @@ -26935,6 +27626,7 @@ | &ТекущийСписок КАК ТекущийСписок" + ТекстСОтступом(СоединенияИПоля.Соединения, " ") + " |ГДЕ | ТекущийСписок.Ссылка В (&СсылкиНаОбъекты) + | И &УточнениеПланаЗапроса | |УПОРЯДОЧИТЬ ПО | ТекущаяСсылка @@ -26946,6 +27638,8 @@ | ТекущийСписок.ТекущаяСсылка КАК ТекущаяСсылка" + ТекстСОтступом(СоединенияИПоля.Поля, " ") + " |ИЗ | ТекущийСписок КАК ТекущийСписок" + ТекстСОтступом(СоединенияИПоля.Соединения, " ") + " + |ГДЕ + | &УточнениеПланаЗапроса | |УПОРЯДОЧИТЬ ПО | ТекущаяСсылка, " + Контекст.ОпорныеПоля.ДляУпорядочения + " @@ -26968,6 +27662,7 @@ | И Шапка0.СоставПолей = &СоставПолей | И Шапка0.ДляВнешнихПользователей = &ДляВнешнихПользователей | И Шапка0.НеИспользуетсяС = ДАТАВРЕМЯ(1, 1, 1) + | И &УточнениеПланаЗапроса | |УПОРЯДОЧИТЬ ПО | ТекущаяСсылка @@ -26986,6 +27681,7 @@ | И Шапка?.Ссылка.СоставПолей = &СоставПолей | И Шапка?.Ссылка.ДляВнешнихПользователей = &ДляВнешнихПользователей | И Шапка?.Ссылка.НеИспользуетсяС = ДАТАВРЕМЯ(1, 1, 1) + | И &УточнениеПланаЗапроса | |УПОРЯДОЧИТЬ ПО | ТекущаяСсылка @@ -27007,7 +27703,8 @@ | Шапка0.Хеш = &Хеш | И Шапка0.Список = &Список | И Шапка0.СоставПолей = &СоставПолей - | И Шапка0.ДляВнешнихПользователей = &ДляВнешнихПользователей"; + | И Шапка0.ДляВнешнихПользователей = &ДляВнешнихПользователей + | И &УточнениеПланаЗапроса"; Контекст.ЧастиЗапросаСуществованияКлючейДляСравнения.Добавить(ТекстЗапроса); КонецЕсли; @@ -27037,6 +27734,7 @@ | ЛЕВОЕ СОЕДИНЕНИЕ @Справочник.КлючиДоступа КАК Шапка0 | ПО | Шапка0.Ссылка = ПорцияКлючей.Ссылка + | И &УточнениеПланаЗапроса | |УПОРЯДОЧИТЬ ПО | Ссылка @@ -27052,6 +27750,7 @@ | ПО | Шапка?.Ссылка = ПорцияКлючей.Ссылка | И Шапка?.НомерСтроки = " + НомерШапки + " + | И &УточнениеПланаЗапроса | |УПОРЯДОЧИТЬ ПО | Ссылка @@ -27165,6 +27864,7 @@ | И КлючиДоступа.СоставПолей = &СоставПолей | И КлючиДоступа.ДляВнешнихПользователей = &ДляВнешнихПользователей | И КлючиДоступа.НеИспользуетсяС = ДАТАВРЕМЯ(1, 1, 1) + | И &УточнениеПланаЗапроса | |УПОРЯДОЧИТЬ ПО | ТекущаяСсылка"; @@ -27181,7 +27881,8 @@ | Шапка0.Хеш = &Хеш | И Шапка0.Список = &Список | И Шапка0.СоставПолей = &СоставПолей - | И Шапка0.ДляВнешнихПользователей = &ДляВнешнихПользователей"; + | И Шапка0.ДляВнешнихПользователей = &ДляВнешнихПользователей + | И &УточнениеПланаЗапроса"; Контекст.ЧастиЗапросаСуществованияКлючейДляСравнения.Добавить(ТекстЗапроса); // Выбор значений из ключей доступа для вычисления пользователей и групп доступа, которым они разрешены. @@ -27304,6 +28005,7 @@ | И ТабличнаяЧасть?.Ссылка.СоставПолей = &СоставПолей | И ТабличнаяЧасть?.Ссылка.ДляВнешнихПользователей = &ДляВнешнихПользователей | И ТабличнаяЧасть?.Ссылка.НеИспользуетсяС = ДАТАВРЕМЯ(1, 1, 1) + | И &УточнениеПланаЗапроса | |УПОРЯДОЧИТЬ ПО | ТекущаяСсылка" + ПоляУпорядочения + " @@ -27528,7 +28230,8 @@ Если ДляВыбораЗначений Тогда Поле = СтрЗаменить(Поле, "Шапка?.Значение? = ", ""); Поле = СтрЗаменить(Поле, " ", " "); - Поле = "," + Символы.ПС + Сред(Поле, 5, СтрДлина(Поле) - 5) + " КАК Значение?"; + Позиция = СтрДлина(Символы.ПС + "И ()"); + Поле = "," + Символы.ПС + Сред(Поле, Позиция, СтрДлина(Поле) - Позиция) + " КАК Значение?"; СоединенияИПоля.ПоляУпорядочения = СоединенияИПоля.ПоляУпорядочения + ", " + "Значение" + НомерРеквизита; @@ -27633,6 +28336,7 @@ // Сохранение только значений. Если Не ЕстьПростойТип(СвойстваПоля.ТипКонечногоПоля) + И КоличествоТиповПоля = 1 И СвойстваПоля.ТипыСохраненияЗначений.Количество() = КоличествоТиповПоля Тогда Если БезЗначенияNull Тогда @@ -33747,7 +34451,8 @@ Версии = Контекст.ДействующиеПараметры.ВерсииОграниченийСписков.Получить(Строка.ИмяТаблицы); Если ЗначениеЗаполнено(Версии) - И ЗначениеЗаполнено(Строка.ИмяТаблицы) Тогда + И ЗначениеЗаполнено(Строка.ИмяТаблицы) + Или Строка.ИмяТаблицы = "Справочник.НаборыГруппДоступа" Тогда СоставИмени = СтрРазделить(Строка.ИмяТаблицы, ".", Ложь); СвойстваТипа = Контекст.ТипыТаблицПоИменам.Получить(ВРег(СоставИмени[0])); @@ -33930,40 +34635,39 @@ Процедура ЗаполнитьДолиКоличествоЭлементовСсылочногоТипа(ДолиКоличестваЭлементов, Элемент, ИмяТаблицы) Если ИмяТаблицы = "Справочник.НаборыГруппДоступа" Тогда - Если Элемент.ВидКлючаДанных = "ЭлементыСУстаревшимиПравами" - Или Элемент.ВидКлючаДанных = "ЭлементыСУстаревшимиКлючами" Тогда + Если Элемент.ВидКлючаДанных = "НовыеНаборыИзОдногоПользователя" Тогда ДолиКоличестваЭлементов.Обработанных = 0.0; - ДолиКоличестваЭлементов.Оставшихся = 0.2; - - ИначеЕсли Элемент.ВидКлючаДанных = "НовыеНаборыИзОдногоПользователя" Тогда - - ДолиКоличестваЭлементов.Обработанных = 0.2; ДолиКоличестваЭлементов.Оставшихся = 0.1; ИначеЕсли Элемент.ВидКлючаДанных = "НаборыГруппДоступаНазначенныеПользователям" Тогда - ДолиКоличестваЭлементов.Обработанных = 0.3; - ДолиКоличестваЭлементов.Оставшихся = 0.2; + ДолиКоличестваЭлементов.Обработанных = 0.1; + ДолиКоличестваЭлементов.Оставшихся = 0.1; ИначеЕсли Элемент.ВидКлючаДанных = "НаборыГруппПользователейНазначенныеПользователям" Тогда - ДолиКоличестваЭлементов.Обработанных = 0.5; + ДолиКоличестваЭлементов.Обработанных = 0.2; ДолиКоличестваЭлементов.Оставшихся = 0.1; ИначеЕсли Элемент.ВидКлючаДанных = "НовыеНаборыГруппСУстаревшимиПравами" Тогда - ДолиКоличестваЭлементов.Обработанных = 0.6; + ДолиКоличестваЭлементов.Обработанных = 0.3; ДолиКоличестваЭлементов.Оставшихся = 0.2; ИначеЕсли Элемент.ВидКлючаДанных = "НаборыГруппРазрешенныеПользователям" Тогда + ДолиКоличестваЭлементов.Обработанных = 0.5; + ДолиКоличестваЭлементов.Оставшихся = 0.1; + + ИначеЕсли Элемент.ВидКлючаДанных = "НаборыГруппСУстаревшимиПравами" Тогда + Если Элемент.ОбработатьУстаревшиеЭлементы Тогда - ДолиКоличестваЭлементов.Обработанных = 0.8; - ДолиКоличестваЭлементов.Оставшихся = 0.1; + ДолиКоличестваЭлементов.Обработанных = 0.6; + ДолиКоличестваЭлементов.Оставшихся = 0.3; Иначе - ДолиКоличестваЭлементов.Обработанных = 0.8; - ДолиКоличестваЭлементов.Оставшихся = 0.2; + ДолиКоличестваЭлементов.Обработанных = 0.6; + ДолиКоличестваЭлементов.Оставшихся = 0.4; КонецЕсли; Иначе // УстаревшиеЭлементы. @@ -34288,7 +34992,10 @@ Функция ТекущаяДатаНаСервере() Экспорт - Возврат ТекущаяДата(); // Тут должна быть ТекущаяДата сервера, т.к. именно она записывается в журнал регистрации. + // АПК:143-выкл - №643.2.1 Требуется ТекущаяДата сервера, а не ТекущаяДатаСеанса, + // так как именно ТекущаяДата записывается в журнал регистрации. + Возврат ТекущаяДата(); + // АПК:143-вкл. КонецФункции diff --git a/SSL/src/CommonModules/УправлениеДоступомСлужебныйВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/УправлениеДоступомСлужебныйВМоделиСервиса/Module.bsl index b95b9a1c8..d42005b1a 100644 --- a/SSL/src/CommonModules/УправлениеДоступомСлужебныйВМоделиСервиса/Module.bsl +++ b/SSL/src/CommonModules/УправлениеДоступомСлужебныйВМоделиСервиса/Module.bsl @@ -61,6 +61,8 @@ Справочники.ПрофилиГруппДоступа.ОбновитьПоставляемыеПрофили(); + РегистрыСведений.ПараметрыОграниченияДоступа.ОбновитьДанныеРегистра(); + КонецПроцедуры // Вызывается при обновлении ролей пользователя информационной базы. diff --git a/SSL/src/CommonModules/УправлениеДоступомСлужебныйКлиент/Module.bsl b/SSL/src/CommonModules/УправлениеДоступомСлужебныйКлиент/Module.bsl index bf73b9569..46228802a 100644 --- a/SSL/src/CommonModules/УправлениеДоступомСлужебныйКлиент/Module.bsl +++ b/SSL/src/CommonModules/УправлениеДоступомСлужебныйКлиент/Module.bsl @@ -411,6 +411,10 @@ Возврат; КонецЕсли; + Если НайденныеСтроки[0].ИерархияЭлементов Тогда + ПараметрыФормы.Вставить("ВыборГруппИЭлементов", ИспользованиеГруппИЭлементов.ГруппыИЭлементы); + КонецЕсли; + ОткрытьФорму(НайденныеСтроки[0].ИмяТаблицы + ".ФормаВыбора", ПараметрыФормы, Элемент); КонецПроцедуры diff --git a/SSL/src/CommonModules/УправлениеДоступомСлужебныйКлиентСервер/Module.bsl b/SSL/src/CommonModules/УправлениеДоступомСлужебныйКлиентСервер/Module.bsl index 10b418f75..45210db89 100644 --- a/SSL/src/CommonModules/УправлениеДоступомСлужебныйКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/УправлениеДоступомСлужебныйКлиентСервер/Module.bsl @@ -251,6 +251,7 @@ Строка(ТекущиеДанные.ВидДоступаПредставление)); ЗаполнитьВсеРазрешеныПредставление(Форма, ТекущиеДанные); + Иначе Если Элементы.ТекстВидДоступаНеИспользуется.Видимость Тогда Элементы.ТекстВидДоступаНеИспользуется.Видимость = Ложь; @@ -271,12 +272,17 @@ Если ЗначенияРедактируются Тогда Отбор = Новый Структура("ВидДоступа", ТекущиеДанные.ВидДоступа); ОписаниеТиповВидовДоступа = Форма.ВсеТипыВыбираемыхЗначений.НайтиСтроки(Отбор); + ИерархияЭлементов = Истина; Для каждого ОписаниеТипаВидаДоступа Из ОписаниеТиповВидовДоступа Цикл Форма.ТекущиеТипыВыбираемыхЗначений.Добавить( ОписаниеТипаВидаДоступа.ТипЗначений, ОписаниеТипаВидаДоступа.ПредставлениеТипа); + + ИерархияЭлементов = ИерархияЭлементов И ОписаниеТипаВидаДоступа.ИерархияЭлементов; КонецЦикла; + + Элементы.ЗначенияДоступаВключаяНижестоящие.Видимость = ИерархияЭлементов; Иначе Если ТекущиеДанные <> Неопределено Тогда @@ -392,11 +398,11 @@ ОтборВидовДоступа = ОтборВТаблицахФормыРедактированияРазрешенныхЗначений(Форма); ВидыДоступа = Параметры.ВидыДоступа.НайтиСтроки(ОтборВидовДоступа); - ИндексВидаДоступа = ВидыДоступа.Количество()-1; + ИндексВидаДоступа = ВидыДоступа.Количество(); // Проверка незаполненных и повторяющихся видов доступа. - Пока НЕ Отказ И ИндексВидаДоступа >= 0 Цикл - + Пока ИндексВидаДоступа > 0 Цикл + ИндексВидаДоступа = ИндексВидаДоступа - 1; СтрокаВидаДоступа = ВидыДоступа[ИндексВидаДоступа]; // Проверка заполнения вида доступа. @@ -409,7 +415,7 @@ НСтр("ru = 'Вид доступа в строке %1 не выбран.'"), Параметры.ВидыДоступа.Индекс(СтрокаВидаДоступа)); Отказ = Истина; - Прервать; + Продолжить; КонецЕсли; // Проверка соответствия вида доступа назначению профиля. @@ -422,11 +428,11 @@ СтрокаВидаДоступа.ВидДоступаПредставление), "ВидыДоступа", ВидыДоступа.Найти(СтрокаВидаДоступа), - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Вид доступа ""%1"" в строке %%1 не соответствует назначению профиля.'"), - СтрокаВидаДоступа.ВидДоступаПредставление), + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Вид доступа ""%1"" в строке %2 не соответствует назначению профиля.'"), + СтрокаВидаДоступа.ВидДоступаПредставление, "%1"), Параметры.ВидыДоступа.Индекс(СтрокаВидаДоступа)); Отказ = Истина; - Прервать; + Продолжить; КонецЕсли; // Проверка наличия повторяющихся видов доступа. @@ -440,21 +446,21 @@ СтрокаВидаДоступа.ВидДоступаПредставление), "ВидыДоступа", ВидыДоступа.Найти(СтрокаВидаДоступа), - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Вид доступа ""%1"" в строке %%1 повторяется.'"), - СтрокаВидаДоступа.ВидДоступаПредставление), + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Вид доступа ""%1"" в строке %2 повторяется.'"), + СтрокаВидаДоступа.ВидДоступаПредставление, "%1"), Параметры.ВидыДоступа.Индекс(СтрокаВидаДоступа)); Отказ = Истина; - Прервать; + Продолжить; КонецЕсли; ОтборЗначенийДоступа = ОтборВТаблицахФормыРедактированияРазрешенныхЗначений( Форма, СтрокаВидаДоступа.ВидДоступа); ЗначенияДоступа = Параметры.ЗначенияДоступа.НайтиСтроки(ОтборЗначенийДоступа); - ИндексЗначенияДоступа = ЗначенияДоступа.Количество()-1; + ИндексЗначенияДоступа = ЗначенияДоступа.Количество(); - Пока НЕ Отказ И ИндексЗначенияДоступа >= 0 Цикл - + Пока ИндексЗначенияДоступа > 0 Цикл + ИндексЗначенияДоступа = ИндексЗначенияДоступа - 1; СтрокаЗначенияДоступа = ЗначенияДоступа[ИндексЗначенияДоступа]; // Проверка заполнения значения доступа. @@ -470,7 +476,7 @@ НСтр("ru = 'Значение в строке %1 не выбрано.'"), Параметры.ЗначенияДоступа.Индекс(СтрокаЗначенияДоступа)); Отказ = Истина; - Прервать; + Продолжить; КонецЕсли; // Проверка наличия повторяющихся значений. @@ -489,12 +495,10 @@ НСтр("ru = 'Значение в строке %1 повторяется.'"), Параметры.ЗначенияДоступа.Индекс(СтрокаЗначенияДоступа)); Отказ = Истина; - Прервать; + Продолжить; КонецЕсли; - - ИндексЗначенияДоступа = ИндексЗначенияДоступа - 1; КонецЦикла; - ИндексВидаДоступа = ИндексВидаДоступа - 1; + КонецЦикла; КонецПроцедуры diff --git a/SSL/src/CommonModules/УправлениеДоступомСлужебныйПовтИсп/Module.bsl b/SSL/src/CommonModules/УправлениеДоступомСлужебныйПовтИсп/Module.bsl index b501fd79f..fffd96f91 100644 --- a/SSL/src/CommonModules/УправлениеДоступомСлужебныйПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/УправлениеДоступомСлужебныйПовтИсп/Module.bsl @@ -25,6 +25,13 @@ КонецФункции +// См. УправлениеДоступомСлужебный.ПредставлениеВидовДоступа. +Функция ПредставлениеВидовДоступа() Экспорт + + Возврат УправлениеДоступомСлужебный.ПредставлениеВидовДоступа(); + +КонецФункции + // См. РегистрыСведений.НастройкиПравОбъектов.ВозможныеПрава. Функция ВозможныеПраваДляНастройкиПравОбъектов() Экспорт @@ -32,6 +39,13 @@ КонецФункции +// См. РегистрыСведений.НастройкиПравОбъектов.ПредставлениеВозможныхПрав. +Функция ПредставлениеВозможныхПрав() Экспорт + + Возврат РегистрыСведений.НастройкиПравОбъектов.ПредставлениеВозможныхПрав(); + +КонецФункции + // См. Справочники.ПрофилиГруппДоступа.ПоставляемыеПрофили. Функция ОписаниеПоставляемыхПрофилей() Экспорт @@ -39,6 +53,13 @@ КонецФункции +// См. Справочники.ПрофилиГруппДоступа.ПояснениеПоставляемыхПрофилей. +Функция ПояснениеПоставляемыхПрофилей() Экспорт + + Возврат Справочники.ПрофилиГруппДоступа.ПояснениеПоставляемыхПрофилей(); + +КонецФункции + // Возвращает таблицу значений, содержащую вид ограничений доступа по каждому праву // объектов метаданных. // Если записи по праву нет, значит ограничений по праву нет. @@ -908,6 +929,26 @@ КонецФункции +Функция ТребуетсяУточнениеПланаЗапроса() Экспорт + + ВидСУБД = ВидСУБД(); + + Возврат ВидСУБД <> "File" И ВидСУБД <> "PostgreSQL"; + +КонецФункции + +// Только для внутреннего использования. +Функция УточнениеПланаЗапроса(Хеш, ДлинаХеша) Экспорт + + Биты = Новый Массив; + Для НомерБита = 0 По ДлинаХеша - 1 Цикл + Биты.Вставить(0, ?(ПроверитьБит(Хеш, НомерБита), "Истина", "Ложь")); + КонецЦикла; + + Возврат "Истина В (Истина," + СтрСоединить(Биты, ",") + ")"; + +КонецФункции + #КонецОбласти //////////////////////////////////////////////////////////////////////////////// @@ -1025,6 +1066,67 @@ КонецПроцедуры +// Для функции ТребуетсяУточнениеПланаЗапроса. +Функция ВидСУБД() + + Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда + Возврат "File"; + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | Таблица.Поле КАК Поле + |ИЗ + | (ВЫБРАТЬ + | NULL КАК Поле + | + | ОБЪЕДИНИТЬ ВСЕ + | + | ВЫБРАТЬ + | 1) КАК Таблица + | + |УПОРЯДОЧИТЬ ПО + | Поле + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | Таблица.Поле КАК Поле + |ИЗ + | (ВЫБРАТЬ + | ""Yes1"" КАК Поле) КАК Таблица + |ГДЕ + | Таблица.Поле ПОДОБНО ""Yes[1]"" + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | Таблица.Поле КАК Поле + |ИЗ + | (ВЫБРАТЬ + | ""Yes_"" КАК Поле) КАК Таблица + |ГДЕ + | Таблица.Поле ПОДОБНО ""Yes[\_]"""; + + РезультатыЗапроса = Запрос.ВыполнитьПакет(); + + Если РезультатыЗапроса[0].Выгрузить()[0].Поле <> 1 Тогда + Возврат "MSSQLServer"; + КонецЕсли; + + Если РезультатыЗапроса[1].Пустой() Тогда + Возврат "IBMDB2"; + КонецЕсли; + + Если РезультатыЗапроса[2].Пустой() Тогда + Возврат "PostgreSQL"; + КонецЕсли; + + Возврат "OracleDatabase"; + +КонецФункции + #КонецОбласти #КонецОбласти diff --git a/SSL/src/CommonModules/УправлениеКолонтитулами/Module.bsl b/SSL/src/CommonModules/УправлениеКолонтитулами/Module.bsl index 7a716769c..658750389 100644 --- a/SSL/src/CommonModules/УправлениеКолонтитулами/Module.bsl +++ b/SSL/src/CommonModules/УправлениеКолонтитулами/Module.bsl @@ -88,13 +88,31 @@ НастройкиКолонтитулов = НастройкиКолонтитулов(); КонецЕсли; - СвойстваКолонтитула = СвойстваКолонтитула(НастройкиКолонтитулов.ВерхнийКолонтитул, НазваниеОтчета, Пользователь); - ЗаполнитьЗначенияСвойств(ТабличныйДокумент.ВерхнийКолонтитул, СвойстваКолонтитула); + Если Не КолонтитулУстановлен(ТабличныйДокумент.ВерхнийКолонтитул) Тогда + СвойстваКолонтитула = СвойстваКолонтитула(НастройкиКолонтитулов.ВерхнийКолонтитул, НазваниеОтчета, Пользователь); + ЗаполнитьЗначенияСвойств(ТабличныйДокумент.ВерхнийКолонтитул, СвойстваКолонтитула); + КонецЕсли; - СвойстваКолонтитула = СвойстваКолонтитула(НастройкиКолонтитулов.НижнийКолонтитул, НазваниеОтчета, Пользователь); - ЗаполнитьЗначенияСвойств(ТабличныйДокумент.НижнийКолонтитул, СвойстваКолонтитула); + Если Не КолонтитулУстановлен(ТабличныйДокумент.НижнийКолонтитул) Тогда + СвойстваКолонтитула = СвойстваКолонтитула(НастройкиКолонтитулов.НижнийКолонтитул, НазваниеОтчета, Пользователь); + ЗаполнитьЗначенияСвойств(ТабличныйДокумент.НижнийКолонтитул, СвойстваКолонтитула); + КонецЕсли; КонецПроцедуры +// Возвращает признак установки колонтитула. +// +// Параметры: +// Колонтитул - КолонтитулТабличногоДокумента - верхний или нижний колонтитул табличного документа. +// +// Возвращаемое значение: +// Булево - признак установки колонтитула. +// +Функция КолонтитулУстановлен(Колонтитул) + Возврат ЗначениеЗаполнено(Колонтитул.ТекстСлева) + Или ЗначениеЗаполнено(Колонтитул.ТекстВЦентре) + Или ЗначениеЗаполнено(Колонтитул.ТекстСправа); +КонецФункции + // Возвращает значения свойств колонтитула. // // Параметры: diff --git a/SSL/src/CommonModules/УправлениеКонтактнойИнформацией/Module.bsl b/SSL/src/CommonModules/УправлениеКонтактнойИнформацией/Module.bsl index 43bbdf551..a87389e7a 100644 --- a/SSL/src/CommonModules/УправлениеКонтактнойИнформацией/Module.bsl +++ b/SSL/src/CommonModules/УправлениеКонтактнойИнформацией/Module.bsl @@ -62,13 +62,19 @@ | КонтактнаяИнформация.Объект КАК Объект, | КонтактнаяИнформация.Вид КАК Вид, | КонтактнаяИнформация.Тип КАК Тип, - | КонтактнаяИнформация.ЗначенияПолей КАК ЗначенияПолей, | КонтактнаяИнформация.Значение КАК Значение, + | КонтактнаяИнформация.ЗначенияПолей КАК ЗначенияПолей, + | КонтактнаяИнформация.НомерСтроки КАК НомерСтроки, | КонтактнаяИнформация.ИдентификаторСтрокиТабличнойЧасти КАК ИдентификаторСтрокиТабличнойЧасти, - | " + ДействуетС +" КАК Дата, + | &ДействуетС КАК Дата, | КонтактнаяИнформация.Представление КАК Представление |ИЗ - | ВТКонтактнаяИнформация КАК КонтактнаяИнформация"; + | ВТКонтактнаяИнформация КАК КонтактнаяИнформация + | + |УПОРЯДОЧИТЬ ПО + | НомерСтроки"; + + Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ДействуетС", ДействуетС); Результат = Запрос.Выполнить().Выгрузить(); Для каждого СтрокаКонтактнойИнформации Из Результат Цикл @@ -91,10 +97,10 @@ // СсылкаИлиОбъект - ЛюбаяСсылка, Объект - Ссылка или объект-владелец контактной информации (организация, // контрагент, партнер и т.д.). // ВидКонтактнойИнформации - СправочникСсылка.ВидыКонтактнойИнформации - Необязательный, отбор по виду контактной информации. -// Дата - Дата - дата с которой действует запись контактной информации. -// Если объект-владелец допускает хранение истории изменения контактной информации, -// признаком которого является наличие колонки ДействуетС в табличной части КонтактнаяИнформация, -// то необходимо обязательно передавать дату, в противном случае будет вызвано исключение. +// Дата - Дата - необязательный, дата с которой действует запись контактной информации, +// используется при хранении истории изменения контактной информации. +// Если владелец хранит историю изменений, то при несоответствии параметра +// дате будет вызвано исключение. // ТолькоПредставление - Булево - Если Истина, то возвращает только представление, иначе таблицу значений. // Для получения представления рекомендуется использовать функцию ПредставлениеКонтактнойИнформацииОбъекта. // @@ -299,94 +305,13 @@ Процедура ДобавитьКонтактнуюИнформацию(СсылкаИлиОбъект, ЗначениеИлиПредставление, ВидКонтактнойИнформации, Дата = Неопределено, Замещать = Истина) Экспорт Если ОбщегоНазначения.ЭтоСсылка(ТипЗнч(СсылкаИлиОбъект)) Тогда - Объект = СсылкаИлиОбъект.ПолучитьОбъект(); - Записывать = Истина; - Иначе - Объект = СсылкаИлиОбъект; - Записывать = Ложь; + УправлениеКонтактнойИнформациейСлужебный.ДобавитьКонтактнуюИнформациюДляСсылки(СсылкаИлиОбъект, + ЗначениеИлиПредставление, ВидКонтактнойИнформации, Дата, Замещать); + Возврат; КонецЕсли; - КонтактнаяИнформация = Объект.КонтактнаяИнформация; - ЭтоКонтактнаяИнформацияВXML = УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(ЗначениеИлиПредставление); - ЭтоКонтактнаяИнформацияВJSON = УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВJSON(ЗначениеИлиПредставление); - ЭтоКонтактнаяИнформацияВСтруктуреJSON = ТипЗнч(ЗначениеИлиПредставление) = Тип("Структура"); - СвойстваВидаКонтактнойИнформации = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ВидКонтактнойИнформации, "Тип, ХранитьИсториюИзменений"); - - МетаданныеОбъекта = Метаданные.НайтиПоТипу(ТипЗнч(Объект)); - Если МетаданныеОбъекта = Неопределено - Или МетаданныеОбъекта.ТабличныеЧасти.Найти("КонтактнаяИнформация") = Неопределено Тогда - ВызватьИсключение НСтр("ru = 'Добавление контактной информации невозможно, у объекта нет таблицы с контактной информацией.'");; - КонецЕсли; - - Если ЭтоКонтактнаяИнформацияВСтруктуреJSON Тогда - - ОбъектКонтактнойИнформации = ЗначениеИлиПредставление; - Значение = УправлениеКонтактнойИнформациейСлужебный.СтруктураВСтрокуJSON(ЗначениеИлиПредставление); - ЗначенияПолей = КонтактнаяИнформацияВXML(Значение); - Представление = ОбъектКонтактнойИнформации.Value; - - Иначе - - Если ЭтоКонтактнаяИнформацияВXML Тогда - - ЗначенияПолей = ЗначениеИлиПредставление; - Значение = КонтактнаяИнформацияВJSON(ЗначениеИлиПредставление, СвойстваВидаКонтактнойИнформации.Тип); - ОбъектКонтактнойИнформации = УправлениеКонтактнойИнформациейСлужебный.JSONВКонтактнуюИнформациюПоПолям(Значение, СвойстваВидаКонтактнойИнформации.Тип); - Представление = ОбъектКонтактнойИнформации.Value; - - ИначеЕсли ЭтоКонтактнаяИнформацияВJSON Тогда - - Значение = ЗначениеИлиПредставление; - ЗначенияПолей = КонтактнаяИнформацияВXML(Значение,, СвойстваВидаКонтактнойИнформации.Тип); - ОбъектКонтактнойИнформации = УправлениеКонтактнойИнформациейСлужебный.JSONВКонтактнуюИнформациюПоПолям(Значение, СвойстваВидаКонтактнойИнформации.Тип); - Представление = ПредставлениеКонтактнойИнформации(ЗначениеИлиПредставление, ВидКонтактнойИнформации); - - Иначе - ОбъектКонтактнойИнформации = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияПоПредставлению(ЗначениеИлиПредставление, СвойстваВидаКонтактнойИнформации.Тип); - Значение = УправлениеКонтактнойИнформациейСлужебный.СтруктураВСтрокуJSON(ОбъектКонтактнойИнформации); - ЗначенияПолей = КонтактнаяИнформацияВXML(Значение); - Представление = ЗначениеИлиПредставление; - - КонецЕсли; - - КонецЕсли; - - Если Замещать Тогда - НайденныеСтроки = НайтиСтрокиКонтактнойИнформации(ВидКонтактнойИнформации, Дата, КонтактнаяИнформация); - Для Каждого СтрокаТабличнойЧасти Из НайденныеСтроки Цикл - КонтактнаяИнформация.Удалить(СтрокаТабличнойЧасти); - КонецЦикла; - СтрокаКонтактнойИнформации = КонтактнаяИнформация.Добавить(); - Иначе - Если ЗапрещенВводНесколькихЗначений(ВидКонтактнойИнформации, КонтактнаяИнформация, Дата) Тогда - Если ЭтоКонтактнаяИнформацияВXML Тогда - СтрокаКонтактнойИнформации = Объект.КонтактнаяИнформация.Найти(ЗначениеИлиПредставление, "ЗначенияПолей"); - ИначеЕсли ЭтоКонтактнаяИнформацияВJSON Тогда - СтрокаКонтактнойИнформации = Объект.КонтактнаяИнформация.Найти(ЗначениеИлиПредставление, "Значение"); - Иначе - СтрокаКонтактнойИнформации = Объект.КонтактнаяИнформация.Найти(ЗначениеИлиПредставление, "Представление"); - КонецЕсли; - Если СтрокаКонтактнойИнформации <> Неопределено Тогда - Возврат; // Допускается только одно значение этого вида контактной информации. - КонецЕсли; - КонецЕсли; - СтрокаКонтактнойИнформации = КонтактнаяИнформация.Добавить(); - КонецЕсли; - - СтрокаКонтактнойИнформации.Значение = Значение; - СтрокаКонтактнойИнформации.Представление = Представление; - СтрокаКонтактнойИнформации.ЗначенияПолей = ЗначенияПолей; - СтрокаКонтактнойИнформации.Вид = ВидКонтактнойИнформации; - СтрокаКонтактнойИнформации.Тип = СвойстваВидаКонтактнойИнформации.Тип ; - Если СвойстваВидаКонтактнойИнформации.ХранитьИсториюИзменений И ЗначениеЗаполнено(Дата) Тогда - СтрокаКонтактнойИнформации.ДействуетС = Дата; - КонецЕсли; - - ЗаполнитьТехническиеПоляКонтактнойИнформации(СтрокаКонтактнойИнформации, ОбъектКонтактнойИнформации, СвойстваВидаКонтактнойИнформации.Тип); - - Если Записывать Тогда - Объект.Записать(); - КонецЕсли; + УправлениеКонтактнойИнформациейСлужебный.ДобавитьКонтактнуюИнформацию(СсылкаИлиОбъект, ЗначениеИлиПредставление, + ВидКонтактнойИнформации, Дата, Замещать); КонецПроцедуры @@ -438,56 +363,9 @@ СтрокиКонтактнойИнформацииОбъекта = КонтактнаяИнформация.НайтиСтроки(Отбор); Если ВладелецКонтактнойИнформации.Значение["ЭтоСсылка"] Тогда - Объект = ВладелецКонтактнойИнформации.Ключ.ПолучитьОбъект(); + УправлениеКонтактнойИнформациейСлужебный.УстановитьКонтактнуюИнформациюОбъектовДляСсылки(ВладелецКонтактнойИнформации, СтрокиКонтактнойИнформацииОбъекта, Замещать); Иначе - Объект = ВладелецКонтактнойИнформации.Ключ; - КонецЕсли; - - Если Замещать Тогда - Объект.КонтактнаяИнформация.Очистить(); - КонецЕсли; - - Для каждого СтрокаКонтактнойИнформацииОбъекта Из СтрокиКонтактнойИнформацииОбъекта Цикл - - ХранитьИсториюИзменений = ВладелецКонтактнойИнформации.Значение["Периодическая"] И СтрокаКонтактнойИнформацииОбъекта.Вид.ХранитьИсториюИзменений; - - Если Замещать Тогда - - Если ЗапрещенВводНесколькихЗначений(СтрокаКонтактнойИнформацииОбъекта.Вид, Объект.КонтактнаяИнформация, СтрокаКонтактнойИнформацииОбъекта.Дата) Тогда - Продолжить; - КонецЕсли; - СтрокаКонтактнойИнформации = Объект.КонтактнаяИнформация.Добавить(); - - Иначе - - Отбор = Новый Структура(); - Отбор.Вставить("Вид", СтрокаКонтактнойИнформацииОбъекта.Вид); - - Если ХранитьИсториюИзменений Тогда - Отбор.Вставить("ДействуетС", СтрокаКонтактнойИнформацииОбъекта.Дата); - НайденныеСтроки = Объект.КонтактнаяИнформация.НайтиСтроки(Отбор); - ИначеЕсли ЗначениеЗаполнено(СтрокаКонтактнойИнформацииОбъекта.Значение) Тогда - Отбор.Вставить("Значение", СтрокаКонтактнойИнформацииОбъекта.Значение); - НайденныеСтроки = Объект.КонтактнаяИнформация.НайтиСтроки(Отбор); - Иначе - Отбор.Вставить("ЗначенияПолей", СтрокаКонтактнойИнформацииОбъекта.ЗначенияПолей); - НайденныеСтроки = Объект.КонтактнаяИнформация.НайтиСтроки(Отбор); - КонецЕсли; - - Если НЕ ХранитьИсториюИзменений - И ЗапрещенВводНесколькихЗначений(СтрокаКонтактнойИнформацииОбъекта.Вид, Объект.КонтактнаяИнформация, СтрокаКонтактнойИнформацииОбъекта.Дата) - ИЛИ НайденныеСтроки.Количество() > 0 Тогда - Продолжить; - КонецЕсли; - - СтрокаКонтактнойИнформации = Объект.КонтактнаяИнформация.Добавить(); - КонецЕсли; - - ЗаполнитьКонтактнуюИнформациюОбъектаИзСтроки(СтрокаКонтактнойИнформацииОбъекта, ХранитьИсториюИзменений, СтрокаКонтактнойИнформации); - КонецЦикла; - - Если ВладелецКонтактнойИнформации.Значение["ЭтоСсылка"] Тогда - Объект.Записать(); + УправлениеКонтактнойИнформациейСлужебный.УстановитьКонтактнуюИнформациюОбъектов(ВладелецКонтактнойИнформации, ВладелецКонтактнойИнформации.Ключ, СтрокиКонтактнойИнформацииОбъекта, Замещать); КонецЕсли; КонецЦикла; @@ -513,98 +391,31 @@ // Процедура УстановитьКонтактнуюИнформациюОбъекта(СсылкаИлиОбъект, Знач КонтактнаяИнформация, Замещать = Истина) Экспорт - ЭтоСсылка = ОбщегоНазначения.ЗначениеСсылочногоТипа(СсылкаИлиОбъект); - Объект =?(ЭтоСсылка, СсылкаИлиОбъект.ПолучитьОбъект(), СсылкаИлиОбъект); - Если ТипЗнч(СсылкаИлиОбъект) <> Тип("ДанныеФормыСтруктура") Тогда - МетаданныеОбъекта = Метаданные.НайтиПоТипу(ТипЗнч(СсылкаИлиОбъект)); + ОбъектМетаданных = Метаданные.НайтиПоТипу(ТипЗнч(СсылкаИлиОбъект)); Иначе - МетаданныеОбъекта = Метаданные.НайтиПоТипу(ТипЗнч(СсылкаИлиОбъект.Ссылка)); + ОбъектМетаданных = Метаданные.НайтиПоТипу(ТипЗнч(СсылкаИлиОбъект.Ссылка)); КонецЕсли; - Если МетаданныеОбъекта = Неопределено - Или МетаданныеОбъекта.ТабличныеЧасти.Найти("КонтактнаяИнформация") = Неопределено Тогда + Если ОбъектМетаданных = Неопределено + Или ОбъектМетаданных.ТабличныеЧасти.Найти("КонтактнаяИнформация") = Неопределено Тогда ВызватьИсключение НСтр("ru = 'Добавление контактной информации невозможно, у объекта нет таблицы с контактной информацией.'");; КонецЕсли; + Если ОбщегоНазначения.ЗначениеСсылочногоТипа(СсылкаИлиОбъект) Тогда + УправлениеКонтактнойИнформациейСлужебный.УстановитьКонтактнуюИнформациюОбъектаДляСсылки(СсылкаИлиОбъект, КонтактнаяИнформация, ОбъектМетаданных, Замещать); + Возврат; + КонецЕсли; + // Очистка контактной информации пустой таблицей. Если КонтактнаяИнформация.Количество() = 0 Тогда Если Замещать Тогда - Объект.КонтактнаяИнформация.Очистить(); - Если ЭтоСсылка Тогда - Объект.Записать(); - КонецЕсли; + СсылкаИлиОбъект.КонтактнаяИнформация.Очистить(); КонецЕсли; Возврат; КонецЕсли; - Периодическая = МетаданныеОбъекта.ТабличныеЧасти.КонтактнаяИнформация.Реквизиты.Найти("ДействуетС") <> Неопределено; - БезИдентификатораТабличнойЧасти = МетаданныеОбъекта.ТабличныеЧасти.КонтактнаяИнформация.Реквизиты.Найти("ИдентификаторСтрокиТабличнойЧасти") = Неопределено; - - Для каждого СтрокаКонтактнойИнформации Из КонтактнаяИнформация Цикл - ВосстановитьПустыеЗначениеПредставление(СтрокаКонтактнойИнформации); - КонецЦикла; - - Если Замещать Тогда - - Для каждого СтрокаКонтактнойИнформацииОбъекта Из КонтактнаяИнформация Цикл - - ДатаОтбора = ?(Периодическая, СтрокаКонтактнойИнформацииОбъекта.Дата, Неопределено); - НайденныеСтроки = НайтиСтрокиКонтактнойИнформации(СтрокаКонтактнойИнформацииОбъекта.Вид, ДатаОтбора, Объект.КонтактнаяИнформация); - - Для каждого Строка Из НайденныеСтроки Цикл - Объект.КонтактнаяИнформация.Удалить(Строка); - КонецЦикла; - - КонецЦикла; - - КонецЕсли; - - Для каждого СтрокаКонтактнойИнформацииОбъекта Из КонтактнаяИнформация Цикл - - ХранитьИсториюИзменений = Периодическая И СтрокаКонтактнойИнформацииОбъекта.Вид.ХранитьИсториюИзменений; - - Если Замещать Тогда - - ИдентификаторСтрокиТабличнойЧасти = ?(БезИдентификатораТабличнойЧасти, Неопределено, СтрокаКонтактнойИнформацииОбъекта.ИдентификаторСтрокиТабличнойЧасти); - Если ЗапрещенВводНесколькихЗначений(СтрокаКонтактнойИнформацииОбъекта.Вид, Объект.КонтактнаяИнформация, СтрокаКонтактнойИнформацииОбъекта.Дата, ИдентификаторСтрокиТабличнойЧасти) Тогда - Продолжить; - КонецЕсли; - СтрокаКонтактнойИнформации = Объект.КонтактнаяИнформация.Добавить(); - - Иначе - - Отбор = Новый Структура(); - Отбор.Вставить("Вид", СтрокаКонтактнойИнформацииОбъекта.Вид); - - Если ХранитьИсториюИзменений Тогда - Отбор.Вставить("ДействуетС", СтрокаКонтактнойИнформацииОбъекта.Дата); - НайденныеСтроки = Объект.КонтактнаяИнформация.НайтиСтроки(Отбор); - ИначеЕсли ЗначениеЗаполнено(СтрокаКонтактнойИнформацииОбъекта.Значение) Тогда - Отбор.Вставить("Значение", СтрокаКонтактнойИнформацииОбъекта.Значение); - НайденныеСтроки = Объект.КонтактнаяИнформация.НайтиСтроки(Отбор); - Иначе - Отбор.Вставить("ЗначенияПолей", СтрокаКонтактнойИнформацииОбъекта.ЗначенияПолей); - НайденныеСтроки = Объект.КонтактнаяИнформация.НайтиСтроки(Отбор); - КонецЕсли; - - Если НЕ ХранитьИсториюИзменений - И ЗапрещенВводНесколькихЗначений(СтрокаКонтактнойИнформацииОбъекта.Вид, Объект.КонтактнаяИнформация, СтрокаКонтактнойИнформацииОбъекта.Дата) - ИЛИ НайденныеСтроки.Количество() > 0 Тогда - Продолжить; - КонецЕсли; - - СтрокаКонтактнойИнформации = Объект.КонтактнаяИнформация.Добавить(); - - КонецЕсли; - - ЗаполнитьКонтактнуюИнформациюОбъектаИзСтроки(СтрокаКонтактнойИнформацииОбъекта, ХранитьИсториюИзменений, СтрокаКонтактнойИнформации); - - КонецЦикла; - - Если ЭтоСсылка Тогда - Объект.Записать(); - КонецЕсли; + УправлениеКонтактнойИнформациейСлужебный.УстановитьКонтактнуюИнформациюОбъекта(СсылкаИлиОбъект, КонтактнаяИнформация, ОбъектМетаданных, Замещать); КонецПроцедуры @@ -1052,13 +863,16 @@ Для каждого ОбъектСКонтактнойИнформацией Из ОбъектыСГруппировкойПоТипам Цикл МетаданныеОбъекта = Метаданные.НайтиПоТипу(ОбъектСКонтактнойИнформацией.Ключ); Если МетаданныеОбъекта.ТабличныеЧасти.Найти("КонтактнаяИнформация") = Неопределено Тогда - ВызватьИсключение МетаданныеОбъекта.Имя + " " + НСтр("ru = 'не содержит контактную информацию.'"); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '%1 не содержит контактную информацию.'"), МетаданныеОбъекта.Имя); КонецЕсли; ИмяТаблицы = МетаданныеОбъекта.Имя; Если МетаданныеОбъекта.ТабличныеЧасти.КонтактнаяИнформация.Реквизиты.Найти("ДействуетС") <> Неопределено Тогда + ТекстЗапросаПодготовкаДанных = ТекстЗапросаПодготовкаДанных + "ВЫБРАТЬ РАЗРЕШЕННЫЕ | КонтактнаяИнформация.Ссылка КАК Объект, | КонтактнаяИнформация.Вид КАК Вид, + | МИНИМУМ(КонтактнаяИнформация.НомерСтроки) КАК НомерСтроки, | МАКСИМУМ(КонтактнаяИнформация.ДействуетС) КАК ДействуетС |ПОМЕСТИТЬ СрезКонтактнойИнформации" + ИмяТаблицы + " |ИЗ @@ -1072,6 +886,7 @@ |СГРУППИРОВАТЬ ПО | КонтактнаяИнформация.Вид, КонтактнаяИнформация.Ссылка |;" + КонецЕсли; КонецЦикла; @@ -1110,6 +925,7 @@ | КонтактнаяИнформация.Ссылка КАК Объект, | КонтактнаяИнформация.Вид КАК Вид, | КонтактнаяИнформация.Тип КАК Тип, + | КонтактнаяИнформация.НомерСтроки КАК НомерСтроки, | КонтактнаяИнформация.ДействуетС КАК ДействуетС, | КонтактнаяИнформация.Представление КАК Представление, | КонтактнаяИнформация.Значение, @@ -1127,6 +943,7 @@ | КонтактнаяИнформация.Ссылка КАК Объект, | КонтактнаяИнформация.Вид КАК Вид, | КонтактнаяИнформация.Тип КАК Тип, + | КонтактнаяИнформация.НомерСтроки КАК НомерСтроки, | ДАТАВРЕМЯ(1,1,1) КАК ДействуетС, | КонтактнаяИнформация.Представление КАК Представление, | КонтактнаяИнформация.Значение, @@ -1156,6 +973,7 @@ Запрос.УстановитьПараметр("ТипыКонтактнойИнформации", ТипыКонтактнойИнформации); Запрос.УстановитьПараметр("ВидыКонтактнойИнформации", ВидыКонтактнойИнформации); Запрос.Выполнить(); + КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// @@ -1618,6 +1436,7 @@ ПараметрыВыводаКонтактнойИнформации.Вставить("СсылкаНаОбъект", СсылкаНаОбъект); СкрытьКонтактнуюИнформацию(Форма, ДобавляемыеРеквизиты, ПараметрыВыводаКонтактнойИнформации); + Возврат; КонецЕсли; @@ -1721,7 +1540,7 @@ | ИНАЧЕ ВЫРАЗИТЬ(ЕСТЬNULL(ВидыКонтактнойИнформацииПредставления.Наименование, ВидыКонтактнойИнформации.Наименование) КАК СТРОКА(150)) | КОНЕЦ КАК Наименование, | ВидыКонтактнойИнформации.ХранитьИсториюИзменений КАК ХранитьИсториюИзменений, - | ВидыКонтактнойИнформации.РедактированиеТолькоВДиалоге КАК РедактированиеТолькоВДиалоге, + | ВидыКонтактнойИнформации.ВидРедактирования КАК ВидРедактирования, | ВидыКонтактнойИнформации.ЭтоГруппа КАК ЭтоРеквизитТабличнойЧасти, | ВидыКонтактнойИнформации.РеквизитДопУпорядочивания КАК РеквизитДопУпорядочивания, | ВидыКонтактнойИнформации.МеждународныйФорматАдреса КАК МеждународныйФорматАдреса, @@ -2001,6 +1820,8 @@ // Процедура ОбработкаПроверкиЗаполненияНаСервере(Форма, Объект, Отказ) Экспорт + ПараметрыСеанса.ИнтерактивнаяПроверкаЗаполненияКонтактнойИнформации = Истина; + ИмяОбъекта = Объект.Ссылка.Метаданные().Имя; УровеньОшибок = 0; ПредыдущийВид = Неопределено; @@ -2013,7 +1834,7 @@ ТипИнформации = СтрокаТаблицы.Тип; Комментарий = СтрокаТаблицы.Комментарий; ИмяРеквизита = СтрокаТаблицы.ИмяРеквизита; - СвойствоВидаИнформации = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ВидИнформации, "ОбязательноеЗаполнение, РедактированиеТолькоВДиалоге"); + СвойствоВидаИнформации = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ВидИнформации, "ОбязательноеЗаполнение, ВидРедактирования"); ОбязательноеЗаполнение = СвойствоВидаИнформации.ОбязательноеЗаполнение; Если СтрокаТаблицы.ЭтоРеквизитТабличнойЧасти Тогда @@ -2061,7 +1882,7 @@ Продолжить; // Элемент не был создан. Не была вызвана отложенная инициализация. КонецЕсли; - Если (СвойствоВидаИнформации.РедактированиеТолькоВДиалоге + Если (СвойствоВидаИнформации.ВидРедактирования = "Диалог" Или ТипИнформации = Перечисления.ТипыКонтактнойИнформации.ВебСтраница) И Не УправлениеКонтактнойИнформациейКлиентСервер.КонтактнаяИнформацияЗаполнена(Строка(Форма[ИмяРеквизита])) Тогда Представление = ""; @@ -2102,7 +1923,7 @@ // Вызывается из модуля формы объекта-владельца КИ при внедрении подсистемы. // // Параметры: -// Форма - УправляемаяФорма - Форма объекта-владельца, предназначенная для вывода контактной информации. +// Форма - ФормаКлиентскогоПриложения - Форма объекта-владельца, предназначенная для вывода контактной информации. // Объект - СправочникОбъект, ДокументСсылка - Объект-владелец контактной информации. // ДанныеФормыСтруктура - Объект, содержащий табличную часть с контактной информацией. Поддерживает работу // со скрываемыми видами контактной информации только для уже существующих объектов, @@ -2438,8 +2259,9 @@ // Параметры: // Параметры - Структура - содержит структуру с полями: // * Код - Строка - Код вида контактной информации для идентификации элемента. -// * Наименование - Строка - Наименование вида контактной информации. -// * Используется - Булево -Признак использования вида контактной информации. Значение по умолчанию Истина. +// * Наименование - Строка - Наименование вида контактной информации. +// * Используется - Булево - Признак использования вида контактной информации. Значение по умолчанию Истина. +// // Возвращаемое значение: // СправочникСсылка.ВидыКонтактнойИнформации - ссылка на группу. // @@ -2487,7 +2309,7 @@ // Если добавляется предопределенный вид КИ к уже существующим в ИБ, не рекомендуется назначать порядок в явном виде. // // Параметры: -// Параметры - Структура - содержит структуру с полями: +// Параметры - Структура - свойства вида контактной информации: // * Вид - СправочникСсылка.ВидыКонтактнойИнформации, Строка - Ссылка на вид контактной информации или // идентификатор предопределенного элемента. // * Тип - ПеречислениеСсылка.ТипыКонтактнойИнформации - Тип контактной информации или его @@ -2499,8 +2321,12 @@ // Число > 0 - назначить указанный порядок. // * МожноИзменятьСпособРедактирования - Булево - Истина, если есть возможность изменять способ // редактирования только в диалоге, Ложь - иначе. -// * РедактированиеТолькоВДиалоге - Булево - Истина, если редактировать только в диалоге, -// Ложь - иначе. +// * ВидРедактирования - Строка - Определят вид редактирования значения. Варианты: "ПолеВводаИДиалог", "ПолеВвода", "Диалог". +// Если "Диалог", то форме выводится гиперссылка с представлением контактной +// информации, по нажатию на которую, открывается форма соответствующего типа КИ. +// Свойство применимо только для контактной информации с типом: Адрес, Телефон, Факс. +// Если "ПолеВвода", то на форме выводится поле ввода. +// Если "ПолеВводаИДиалог", то доступен ввод в поле и в форме соответствующего типа КИ. // * ОбязательноеЗаполнение - Булево - Истина, если требуется обязательное // заполнение поля, Ложь - иначе. // * РазрешитьВводНесколькихЗначений - Булево - Признак возможности использования дополнительных @@ -2516,6 +2342,11 @@ // * ВидПоляДругое - Строка - Внешний вид поля типа "Другое". Возможные значения: // МногострочноеШирокое, ОднострочноеШирокое, ОднострочноеУзкое. // Значение по умолчанию - ОднострочноеШирокое. +// * РедактированиеТолькоВДиалоге - Булево - Устарело. Следует использовать ВидРедактирования. +// Если Истина, то форме выводится гиперссылка с представлением контактной +// информации по нажатию на которую, открывается форма соответствующего +// типа КИ. Свойство применимо только для контактной информации с типом: +// Адрес, Телефон, Факс, ВебСтраница. Значение по умолчанию - Ложь. // * НастройкиПроверки - Структура, Неопределено - Настройки проверки вида контактной информации. // Для типа Адрес - Структура, содержащая поля: // * ТолькоНациональныйАдрес - Булево - Истина, если возможен ввод только российских адресов. @@ -2547,7 +2378,7 @@ КонецЕсли; ЗаполнитьЗначенияСвойств(Объект, Параметры, "Тип, МожноИзменятьСпособРедактирования, - |РедактированиеТолькоВДиалоге, ОбязательноеЗаполнение, РазрешитьВводНесколькихЗначений, + |ВидРедактирования, ОбязательноеЗаполнение, РазрешитьВводНесколькихЗначений, |ЗапретитьРедактированиеПользователем, Используется, ХранитьИсториюИзменений ,МеждународныйФорматАдреса"); Если ПустаяСтрока(Параметры.Наименование) Тогда @@ -2700,12 +2531,15 @@ // * МожноИзменятьСпособРедактирования - Булево -Признак возможности изменения свойств вида контактной информации пользователем. // Если Ложь, то в форме вида контактной информации свойства доступны // только для просмотра. Значение по умолчанию - Ложь. -// * РедактированиеТолькоВДиалоге - Булево - Если Истина, то форме выводится гиперссылка с представлением контактной -// информации по нажатию на которую, открывается форма соответствующего -// типа КИ. Свойство применимо только для контактной информации с типом: -// Адрес, Телефон, Факс, ВебСтраница. Значение по умолчанию - Ложь. +// * ВидРедактирования - Строка - Вид редактирования. +// * ВидРедактирования - Строка - Определят вид редактирования значения. Варианты: "ПолеВводаИДиалог", "ПолеВвода", "Диалог". +// Если "Диалог", то форме выводится гиперссылка с представлением контактной +// информации, по нажатию на которую, открывается форма соответствующего типа КИ. +// Свойство применимо только для контактной информации с типом: Адрес, Телефон, Факс. +// Если "ПолеВвода", то на форме выводится поле ввода. +// Если "ПолеВводаИДиалог", то доступен ввод в поле и в форме соответствующего типа КИ. // * ХранитьИсториюИзменений - Булево - Признак возможности хранения истории контактной информации. -// Хранение истории допускается, если признак РедактированиеТолькоВДиалоге +// Хранение истории допускается, если признак ВидРедактирования = "Диалог" // равен Истина. Свойство применимо если табличная часть // КонтактнаяИнформация содержит реквизит ДействуетС. Значение по умолчанию // - Ложь. @@ -2726,7 +2560,12 @@ // Свойство применимо только для контактной информации с типом: Другое. // Для вида КИ с типом Другое значение по умолчанию - "ОднострочноеШирокое", // иначе пустая строка. -// * НастройкиПроверки - Структура, Неопределено - Настройки проверки вида контактной информации. +// * РедактированиеТолькоВДиалоге - Булево - Устарело. Следует использовать ВидРедактирования. +// Если Истина, то форме выводится гиперссылка с представлением контактной +// информации по нажатию на которую, открывается форма соответствующего +// типа КИ. Свойство применимо только для контактной информации с типом: +// Адрес, Телефон, Факс, ВебСтраница. Значение по умолчанию - Ложь. +// * НастройкиПроверки - Структура, Неопределено - Настройки проверки вида контактной информации. // Состав полей зависит от типа контактной информации. // Для типа Адрес - Структура, содержащая поля: // * ТолькоНациональныйАдрес - Булево - если Истина, то разрешается ввод только национальных адресов. @@ -2811,7 +2650,7 @@ КонецЕсли; // Заполнение дополнительных реквизитов ТЧ. - ЗаполнитьТехническиеПоляКонтактнойИнформации(НоваяСтрока, ОбъектКИ, ТипИнформации); + УправлениеКонтактнойИнформациейСлужебный.ЗаполнитьТехническиеПоляКонтактнойИнформации(НоваяСтрока, ОбъектКИ, ТипИнформации); КонецПроцедуры @@ -3238,6 +3077,10 @@ Для Каждого ОбъектКонтактнойИнформации Из КонтактнаяИнформация Цикл + Если ОбъектКонтактнойИнформации.ПометкаУдаления И ПустаяСтрока(ОбъектКонтактнойИнформации.Значение) Тогда + Продолжить; + КонецЕсли; + Если ОбъектКонтактнойИнформации.ЭтоРеквизитТабличнойЧасти Тогда ИмяВидаКИ = ОбъектКонтактнойИнформации.ИмяПредопределенногоВида; @@ -3437,7 +3280,7 @@ ДобавляемыйВид = Результат.ДобавляемыйВид; Если ТипЗнч(ДобавляемыйВид)= Тип("СправочникСсылка.ВидыКонтактнойИнформации") Тогда - ИнформацияОВидеКИ = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ДобавляемыйВид, "Тип, Наименование, РедактированиеТолькоВДиалоге, ВидПоляДругое"); + ИнформацияОВидеКИ = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ДобавляемыйВид, "Тип, Наименование, ВидРедактирования, ВидПоляДругое"); Иначе ИнформацияОВидеКИ = ДобавляемыйВид; ДобавляемыйВид = ДобавляемыйВид.Ссылка; @@ -3592,7 +3435,7 @@ Если ДобавлениеНовогоЗначения Тогда Форма.ТекущийЭлемент = Форма.Элементы[ИмяРеквизита]; Если ИнформацияОВидеКИ.Тип = Перечисления.ТипыКонтактнойИнформации.Адрес - И ИнформацияОВидеКИ.РедактированиеТолькоВДиалоге Тогда + И ИнформацияОВидеКИ.ВидРедактирования = "Диалог" Тогда Результат.Вставить("ЭлементФормыАдреса", ИмяРеквизита); КонецЕсли; КонецЕсли; @@ -3608,7 +3451,7 @@ Элемент = Форма.Элементы.Добавить(ИмяРеквизита, Тип("ПолеФормы"), Родитель); Элемент.ПутьКДанным = ИмяРеквизита; - Если ИнформацияОВидеКИ.РедактированиеТолькоВДиалоге И ИнформацияОВидеКИ.Тип = Перечисления.ТипыКонтактнойИнформации.Адрес Тогда + Если ИнформацияОВидеКИ.ВидРедактирования = "Диалог" И ИнформацияОВидеКИ.Тип = Перечисления.ТипыКонтактнойИнформации.Адрес Тогда Элемент.Вид = ВидПоляФормы.ПолеНадписи; Элемент.Гиперссылка = Истина; Элемент.УстановитьДействие("Нажатие", "Подключаемый_КонтактнаяИнформацияПриНажатии"); @@ -3655,7 +3498,12 @@ Элемент.ВысотаЗаголовка = ?(ОбщегоНазначения.ЭтоМобильныйКлиент(), 1, 2); Если ИнформацияОВидеКИ.Тип = Перечисления.ТипыКонтактнойИнформации.Адрес Тогда - Элемент.Ширина = 70; + Если ИнформацияОВидеКИ.ВидРедактирования = "ПолеВвода" Тогда + Элемент.Ширина = 72; + Иначе + Элемент.Ширина = 70; + КонецЕсли; + ИначеЕсли ИнформацияОВидеКИ.Тип = Перечисления.ТипыКонтактнойИнформации.Другое Тогда Если ИнформацияОВидеКИ.ВидПоляДругое = "МногострочноеШирокое" Тогда Элемент.Высота = 3; @@ -3757,7 +3605,7 @@ ГруппаПодменюАдреса = Форма.Элементы.Добавить("КонтекстноеПодменюКопироватьАдреса" + ИмяРеквизита, Тип("ГруппаФормы"), ГруппКнопокРазделитель); ГруппаПодменюАдреса.Вид = ВидГруппыФормы.Подменю; ГруппаПодменюАдреса.Отображение = ОтображениеКнопки.Текст; - ГруппаПодменюАдреса.Заголовок = НСтр("ru='Заполнить'"); + ГруппаПодменюАдреса.Заголовок = НСтр("ru = 'Заполнить'"); КонецЕсли; КонецЕсли; @@ -3767,23 +3615,22 @@ КонецЕсли; // Редактирование в диалоге - Если ДляТипаКонтактнойИнформацииДоступноРедактированиеВДиалоге(ИнформацияОВидеКИ.Тип) + Если ДляТипаКонтактнойИнформацииДоступноРедактированиеВДиалоге(ИнформацияОВидеКИ.Тип) И Элемент.Вид = ВидПоляФормы.ПолеВвода Тогда - Элемент.КнопкаВыбора = Не ИнформацияОВидеКИ.ПометкаУдаления; - Если ИнформацияОВидеКИ.РедактированиеТолькоВДиалоге Тогда - Элемент.РедактированиеТекста = Ложь; - Элемент.ЦветФона = ЦветаСтиля.КонтактнаяИнформацияСРедактированиемВДиалогеЦвет; + ДоступенВыбор = Не ИнформацияОВидеКИ.ПометкаУдаления И ИнформацияОВидеКИ.ВидРедактирования <> "ПолеВвода"; + Элемент.КнопкаВыбора = ДоступенВыбор; + Если ДоступенВыбор Тогда + Элемент.УстановитьДействие("НачалоВыбора", "Подключаемый_КонтактнаяИнформацияНачалоВыбора"); КонецЕсли; - Элемент.УстановитьДействие("НачалоВыбора", "Подключаемый_КонтактнаяИнформацияНачалоВыбора"); КонецЕсли; Элемент.УстановитьДействие("ПриИзменении", "Подключаемый_КонтактнаяИнформацияПриИзменении"); Если ИнформацияОВидеКИ.ПометкаУдаления Тогда - Элемент.ШрифтЗаголовка = Новый Шрифт(,,,,, Истина); - Если Не ИнформацияОВидеКИ.РедактированиеТолькоВДиалоге Тогда + Элемент.ШрифтЗаголовка = ШрифтыСтиля.ЗаголовокУдаленногоРеквизитаШрифт; + Если Не ИнформацияОВидеКИ.ВидРедактирования = "Диалог" Тогда Элемент.КнопкаОчистки = Истина; Элемент.РедактированиеТекста = Ложь; Иначе @@ -3833,7 +3680,7 @@ Если Группа = Неопределено Тогда Родитель = Родитель(Форма, ИмяЭлементаДляРазмещения); Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда - Родитель.ШрифтЗаголовка = Новый Шрифт(,, Истина); + Родитель.ШрифтЗаголовка = ШрифтыСтиля.ВажнаяНадписьШрифт; КонецЕсли; Группа = Форма.Элементы.Добавить(ИмяГруппы, Тип("ГруппаФормы"), Родитель); Группа.Вид = ВидГруппыФормы.ОбычнаяГруппа; @@ -3974,7 +3821,7 @@ Если ЗаполнятьЗначениеРеквизита И Не ЭтоРеквизитТабличнойЧасти Тогда Если СтрокаКонтактнойИнформации.Тип = Перечисления.ТипыКонтактнойИнформации.Адрес - И СтрокаКонтактнойИнформации.РедактированиеТолькоВДиалоге + И СтрокаКонтактнойИнформации.ВидРедактирования = "Диалог" И ПустаяСтрока(СтрокаКонтактнойИнформации.Представление) Тогда Форма[СтрокаКонтактнойИнформации.ИмяРеквизита] = УправлениеКонтактнойИнформациейКлиентСервер.ТекстПустогоАдресаВВидеГиперссылки(); Иначе @@ -4187,8 +4034,8 @@ Элемент.ПутьКДанным = "Объект." + ИмяТабличнойЧасти + "." + СтрокаТабличнойЧасти.ИмяРеквизита; Если ДляТипаКонтактнойИнформацииДоступноРедактированиеВДиалоге(СтрокаТабличнойЧасти.Тип) Тогда - Элемент.КнопкаВыбора = Не СтрокаТабличнойЧасти.ПометкаУдаления;; - Если ВидКонтактнойИнформацииТЧ.РедактированиеТолькоВДиалоге Тогда + Элемент.КнопкаВыбора = Не СтрокаТабличнойЧасти.ПометкаУдаления; + Если ВидКонтактнойИнформацииТЧ.ВидРедактирования = "Диалог" Тогда Элемент.РедактированиеТекста = Ложь; КонецЕсли; @@ -4197,7 +4044,7 @@ Элемент.УстановитьДействие("ПриИзменении", "Подключаемый_КонтактнаяИнформацияПриИзменении"); Если СтрокаТабличнойЧасти.ПометкаУдаления Тогда - Элемент.Шрифт = Новый Шрифт(,,,,, Истина); + Элемент.Шрифт = ШрифтыСтиля.ЗаголовокУдаленногоРеквизитаШрифт; Элемент.РедактированиеТекста = Ложь; КонецЕсли; @@ -4283,8 +4130,8 @@ Возврат 0; КонецЕсли; - РедактированиеТолькоВДиалоге = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ВидИнформации, "РедактированиеТолькоВДиалоге"); - Если РедактированиеТолькоВДиалоге И СтрСравнить(Представление, УправлениеКонтактнойИнформациейКлиентСервер.ТекстПустогоАдресаВВидеГиперссылки()) = 0 Тогда + ВидРедактирования = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ВидИнформации, "ВидРедактирования"); + Если ВидРедактирования = "Диалог" И СтрСравнить(Представление, УправлениеКонтактнойИнформациейКлиентСервер.ТекстПустогоАдресаВВидеГиперссылки()) = 0 Тогда Возврат 0; КонецЕсли; @@ -4596,7 +4443,7 @@ Иначе СоздаватьДействиеДляТипа[Тип] = Ложь; КонецЕсли; - ИначеЕсли Тип = Перечисления.ТипыКонтактнойИнформации.Адрес И ВидКонтактнойИнформации.РедактированиеТолькоВДиалоге Тогда + ИначеЕсли Тип = Перечисления.ТипыКонтактнойИнформации.Адрес И ВидКонтактнойИнформации.ВидРедактирования = "Диалог" Тогда СоздаватьДействиеДляТипа[Тип] = Ложь; КонецЕсли; @@ -4607,7 +4454,7 @@ ГруппаПодменюВерхнийУровень.Вид = ВидГруппыФормы.КоманднаяПанель; ГруппаПодменю = Форма.Элементы.Добавить("Подменю" + ИмяРеквизита, Тип("ГруппаФормы"), ГруппаПодменюВерхнийУровень); - ГруппаПодменю.Заголовок = НСтр("ru='Контактная информация'"); + ГруппаПодменю.Заголовок = НСтр("ru = 'Контактная информация'"); ГруппаПодменю.Вид = ВидГруппыФормы.Подменю; ГруппаПодменю.Картинка = БиблиотекаКартинок.МенюДополнительныеФункции; ГруппаПодменю.Отображение = ОтображениеКнопки.Картинка; @@ -4716,7 +4563,7 @@ ГруппаПодменюАдреса = Форма.Элементы.Добавить("ПодменюКопироватьАдреса" + ИмяРеквизита, Тип("ГруппаФормы"), ГруппаРазделитель); ГруппаПодменюАдреса.Вид = ВидГруппыФормы.Подменю; ГруппаПодменюАдреса.Отображение = ОтображениеКнопки.Текст; - ГруппаПодменюАдреса.Заголовок = НСтр("ru='Заполнить'"); + ГруппаПодменюАдреса.Заголовок = НСтр("ru = 'Заполнить'"); КонецЕсли; @@ -4783,7 +4630,7 @@ Возврат Неопределено; КонецФункции -Процедура ВосстановитьПустыеЗначениеПредставление(СтрокаКонтактнойИнформации) +Процедура ВосстановитьПустыеЗначениеПредставление(СтрокаКонтактнойИнформации) Экспорт Если ПустаяСтрока(СтрокаКонтактнойИнформации.Тип) Тогда СтрокаКонтактнойИнформации.Тип = УправлениеКонтактнойИнформациейСлужебныйПовтИсп.ТипВидаКонтактнойИнформации( @@ -4920,7 +4767,7 @@ КонецЕсли; ПредставлениеАдреса = ?(СтрокаКИ.МеждународныйФорматАдреса, - СтроковыеФункцииКлиентСервер.СтрокаЛатиницей(Адрес.Представление), Адрес.Представление); + СтроковыеФункции.СтрокаЛатиницей(Адрес.Представление), Адрес.Представление); Если СписокАдресовВПодменю[ВРег(Адрес.Представление)] <> Неопределено Тогда ПредставлениеАдреса = ""; @@ -5115,7 +4962,7 @@ | ВидыКонтактнойИнформации.ОбязательноеЗаполнение КАК ОбязательноеЗаполнение, | ВидыКонтактнойИнформации.ПроверятьКорректность КАК ПроверятьКорректность, | ВидыКонтактнойИнформации.РазрешитьВводНесколькихЗначений КАК РазрешитьВводНесколькихЗначений, - | ВидыКонтактнойИнформации.РедактированиеТолькоВДиалоге КАК РедактированиеТолькоВДиалоге, + | ВидыКонтактнойИнформации.ВидРедактирования КАК ВидРедактирования, | ВидыКонтактнойИнформации.РеквизитДопУпорядочивания КАК РеквизитДопУпорядочивания, | ВидыКонтактнойИнформации.СкрыватьНеактуальныеАдреса КАК СкрыватьНеактуальныеАдреса, | ВидыКонтактнойИнформации.ТелефонCДобавочнымНомером КАК ТелефонCДобавочнымНомером, @@ -5133,7 +4980,7 @@ РезультатЗапроса = Запрос.Выполнить().Выгрузить(); Если РезультатЗапроса.Количество() = 0 Тогда - ШаблонТекстаОшибки = НСтр("ru='При получении свойств контактной информации был передан неверный вид контактной информации. %1'"); + ШаблонТекстаОшибки = НСтр("ru = 'При получении свойств контактной информации был передан неверный вид контактной информации. %1'"); ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонТекстаОшибки , Строка(ВидКонтактнойИнформации)); ВызватьИсключение ТекстОшибки; КонецЕсли; @@ -5233,13 +5080,15 @@ // * МожноИзменятьСпособРедактирования - Булево - Признак возможности изменения свойств вида контактной информации пользователем. // Если Ложь, то в форме вида контактной информации свойства доступны // только для просмотра. Значение по умолчанию - Ложь. -// * РедактированиеТолькоВДиалоге - Булево - Если Истина, то форме выводится гиперссылка с представлением контактной -// информации по нажатию на которую, открывается форма соответствующего -// типа КИ. Свойство применимо только для контактной информации с типом: -// Адрес, Телефон, Факс, ВебСтраница. Значение по умолчанию - Ложь. +// * ВидРедактирования - Строка - Определят вид редактирования значения. Варианты: "ПолеВводаИДиалог", "ПолеВвода", "Диалог". +// Если "Диалог", то форме выводится гиперссылка с представлением контактной +// информации, по нажатию на которую, открывается форма соответствующего типа КИ. +// Свойство применимо только для контактной информации с типом: Адрес, Телефон, Факс. +// Если "ПолеВвода", то на форме выводится поле ввода. +// Если "ПолеВводаИДиалог", то доступен ввод в поле и в форме соответствующего типа КИ. // * ХранитьИсториюИзменений - Булево - Признак возможности хранения истории контактной информации. -// Хранение истории допускается, если признак РедактированиеТолькоВДиалоге -// равен Истина. Свойство применимо если табличная часть +// Хранение истории допускается, если признак ВидРедактирования = "Диалог". +// Свойство применимо если табличная часть // КонтактнаяИнформация содержит реквизит ДействуетС. Значение по умолчанию // - Ложь. // * ОбязательноеЗаполнение - Булево - Если Истина, то требуется обязательный ввод значения в поле контактной @@ -5255,6 +5104,11 @@ // МногострочноеШирокое, ОднострочноеШирокое, ОднострочноеУзкое. Свойство // применимо только для контактной информации с типом: Другое. Для вида КИ с // типом Другое значение по умолчанию - "ОднострочноеШирокое", иначе пустая строка. +// * РедактированиеТолькоВДиалоге - Булево - Устарело. Следует использовать ВидРедактирования. +// Если Истина, то форме выводится гиперссылка с представлением контактной +// информации по нажатию на которую, открывается форма соответствующего +// типа КИ. Свойство применимо только для контактной информации с типом: +// Адрес, Телефон, Факс, ВебСтраница. Значение по умолчанию - Ложь. // * НастройкиПроверки - Структура, Неопределено - Настройки проверки вида контактной информации. Состав полей // зависит от типа контактной информации. Для типа Адрес - Структура, содержащая поля: // * ТолькоНациональныйАдрес - Булево - если Истина, то разрешается ввод только национальных @@ -5285,17 +5139,29 @@ ПараметрыВида.Вставить("Порядок", Неопределено); ПараметрыВида.Вставить("Тип", ТипКонтактнойИнформации); ПараметрыВида.Вставить("МожноИзменятьСпособРедактирования", Ложь); - ПараметрыВида.Вставить("РедактированиеТолькоВДиалоге", Ложь); + ПараметрыВида.Вставить("РедактированиеТолькоВДиалоге", Ложь); // устарело. Оставлено для обратной совместимости. ПараметрыВида.Вставить("ОбязательноеЗаполнение", Ложь); ПараметрыВида.Вставить("РазрешитьВводНесколькихЗначений", Ложь); ПараметрыВида.Вставить("ЗапретитьРедактированиеПользователем", Ложь); ПараметрыВида.Вставить("ХранитьИсториюИзменений", Ложь); ПараметрыВида.Вставить("МеждународныйФорматАдреса", Ложь); + ВидПоляДругое = ?(ТипКонтактнойИнформации = Перечисления.ТипыКонтактнойИнформации.Другое, "ОднострочноеШирокое", ""); - ПараметрыВида.Вставить("ВидПоляДругое", ВидПоляДругое); + Если ТипКонтактнойИнформации = Перечисления.ТипыКонтактнойИнформации.Адрес + Или ТипКонтактнойИнформации = Перечисления.ТипыКонтактнойИнформации.Факс + Или ТипКонтактнойИнформации = Перечисления.ТипыКонтактнойИнформации.Телефон Тогда + ВидРедактирования = "ПолеВводаИДиалог"; + ИначеЕсли ТипКонтактнойИнформации = Перечисления.ТипыКонтактнойИнформации.ВебСтраница Тогда + ВидРедактирования = "Диалог"; + Иначе + ВидРедактирования = "ПолеВвода"; + КонецЕсли; + + ПараметрыВида.Вставить("ВидРедактирования", ВидРедактирования); + ПараметрыВида.Вставить("ВидПоляДругое", ВидПоляДругое); Если ТипКонтактнойИнформации = Перечисления.ТипыКонтактнойИнформации.Адрес Тогда НастройкиПроверки = Новый Структура; @@ -5332,215 +5198,5 @@ КонецФункции -// Убирает разделители в номере телефона. -// -// Параметры: -// НомерТелефона - Строка - номер телефона или факса. -// -// Возвращаемое значение: -// Строка - номер телефона или факса без разделителей. -// -Функция УбратьРазделителиВНомерТелефона(Знач НомерТелефона) - - Поз = СтрНайти(НомерТелефона, ","); - Если Поз <> 0 Тогда - НомерТелефона = Лев(НомерТелефона, Поз-1); - КонецЕсли; - - НомерТелефона = СтрЗаменить(НомерТелефона, "-", ""); - НомерТелефона = СтрЗаменить(НомерТелефона, " ", ""); - НомерТелефона = СтрЗаменить(НомерТелефона, "+", ""); - - Возврат НомерТелефона; - -КонецФункции - -Процедура ЗаполнитьТехническиеПоляКонтактнойИнформации(СтрокаКонтактнойИнформации, Объект, ТипКонтактнойИнформации) - - // Заполнение дополнительных реквизитов ТЧ. - Если ТипКонтактнойИнформации = Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты Тогда - ЗаполнитьРеквизитыТабличнойЧастиДляАдресаЭлектроннойПочты(СтрокаКонтактнойИнформации, Объект); - - ИначеЕсли ТипКонтактнойИнформации = Перечисления.ТипыКонтактнойИнформации.Адрес Тогда - ЗаполнитьРеквизитыТабличнойЧастиДляАдреса(СтрокаКонтактнойИнформации, Объект); - - ИначеЕсли ТипКонтактнойИнформации = Перечисления.ТипыКонтактнойИнформации.Телефон Тогда - ЗаполнитьРеквизитыТабличнойЧастиДляТелефона(СтрокаКонтактнойИнформации, Объект); - - ИначеЕсли ТипКонтактнойИнформации = Перечисления.ТипыКонтактнойИнформации.Факс Тогда - ЗаполнитьРеквизитыТабличнойЧастиДляТелефона(СтрокаКонтактнойИнформации, Объект); - - ИначеЕсли ТипКонтактнойИнформации = Перечисления.ТипыКонтактнойИнформации.ВебСтраница Тогда - ЗаполнитьРеквизитыТабличнойЧастиДляВебСтраницы(СтрокаКонтактнойИнформации, Объект); - КонецЕсли; - -КонецПроцедуры - -// Заполняет дополнительные реквизиты табличной части "Контактная информация" для адреса. -// -// Параметры: -// СтрокаТабличнойЧасти - СтрокаТабличнойЧасти - заполняемая строка табличной части "Контактная информация". -// Источник - ОбъектXDTO - контактная информация. -// -Процедура ЗаполнитьРеквизитыТабличнойЧастиДляАдреса(СтрокаТабличнойЧасти, Адрес) - - // Умолчания - СтрокаТабличнойЧасти.Страна = ""; - СтрокаТабличнойЧасти.Регион = ""; - СтрокаТабличнойЧасти.Город = ""; - - Если Адрес.Свойство("Country") Тогда - СтрокаТабличнойЧасти.Страна = Адрес.Country; - - Если Метаданные.Обработки.Найти("РасширенныйВводКонтактнойИнформации") <> Неопределено Тогда - Обработки["РасширенныйВводКонтактнойИнформации"].ЗаполнитьРасширенныеРеквизитыТабличнойЧастиДляАдреса(Адрес, СтрокаТабличнойЧасти); - КонецЕсли; - - КонецЕсли; - -КонецПроцедуры - -// Заполняет дополнительные реквизиты табличной части "Контактная информация" для адреса электронной почты. -// -// Параметры: -// СтрокаТабличнойЧасти - СтрокаТабличнойЧасти - заполняемая строка табличной части "Контактная информация". -// Источник - ОбъектXDTO - контактная информация. -// -Процедура ЗаполнитьРеквизитыТабличнойЧастиДляАдресаЭлектроннойПочты(СтрокаТабличнойЧасти, Источник) - - Результат = ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(СтрокаТабличнойЧасти.Представление, Ложь); - - Если Результат.Количество() > 0 Тогда - СтрокаТабличнойЧасти.АдресЭП = Результат[0].Адрес; - - Поз = СтрНайти(СтрокаТабличнойЧасти.АдресЭП, "@"); - Если Поз <> 0 Тогда - СтрокаТабличнойЧасти.ДоменноеИмяСервера = Сред(СтрокаТабличнойЧасти.АдресЭП, Поз+1); - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -// Заполняет дополнительные реквизиты табличной части "Контактная информация" для телефона и факса. -// -// Параметры: -// СтрокаТабличнойЧасти - СтрокаТабличнойЧасти - заполняемая строка табличной части "Контактная информация". -// Источник - ОбъектXDTO - контактная информация. -// -Процедура ЗаполнитьРеквизитыТабличнойЧастиДляТелефона(СтрокаТабличнойЧасти, Телефон) - - Если НЕ ЗначениеЗаполнено(Телефон) Тогда - Возврат; - КонецЕсли; - - // Умолчания - СтрокаТабличнойЧасти.НомерТелефонаБезКодов = ""; - СтрокаТабличнойЧасти.НомерТелефона = ""; - - КодСтраны = Телефон.CountryCode; - КодГорода = Телефон.AreaCode; - НомерТелефона = Телефон.Number; - - Если СтрНачинаетсяС(КодСтраны, "+") Тогда - КодСтраны = Сред(КодСтраны, 2); - КонецЕсли; - - Поз = СтрНайти(НомерТелефона, ","); - Если Поз <> 0 Тогда - НомерТелефона = Лев(НомерТелефона, Поз-1); - КонецЕсли; - - Поз = СтрНайти(НомерТелефона, Символы.ПС); - Если Поз <> 0 Тогда - НомерТелефона = Лев(НомерТелефона, Поз-1); - КонецЕсли; - - СтрокаТабличнойЧасти.НомерТелефонаБезКодов = УбратьРазделителиВНомерТелефона(НомерТелефона); - СтрокаТабличнойЧасти.НомерТелефона = УбратьРазделителиВНомерТелефона(Строка(КодСтраны) + КодГорода + НомерТелефона); - -КонецПроцедуры - -// Заполняет дополнительные реквизиты табличной части "Контактная информация" для телефона и факса. -// -// Параметры: -// СтрокаТабличнойЧасти - СтрокаТабличнойЧасти - заполняемая строка табличной части "Контактная информация". -// Источник - Структура, ОбъектXDTO - контактная информация. -// -Процедура ЗаполнитьРеквизитыТабличнойЧастиДляВебСтраницы(СтрокаТабличнойЧасти, Источник) - -// Умолчания - СтрокаТабличнойЧасти.ДоменноеИмяСервера = ""; - АдресСтраницы = ""; - - Если ТипЗнч(Источник) = Тип("Структура") Тогда - - Если Источник.Свойство("value") Тогда - АдресСтрокой = Источник.value; - КонецЕсли; - - Иначе - - АдресСтраницы = Источник.Состав; - ПространствоИмен = УправлениеКонтактнойИнформациейСлужебный.ПространствоИмен(); - Если АдресСтраницы <> Неопределено И АдресСтраницы.Тип() = ФабрикаXDTO.Тип(ПространствоИмен, "ВебСайт") Тогда - АдресСтрокой = АдресСтраницы.Значение; - КонецЕсли; - - КонецЕсли; - - // Удалим протокол - Позиция = СтрНайти(АдресСтрокой, "://"); - АдресСервера = ?(Позиция = 0, АдресСтрокой, Сред(АдресСтрокой, Позиция + 3)); - - СтрокаТабличнойЧасти.ДоменноеИмяСервера = АдресСервера; - -КонецПроцедуры - -Функция НайтиСтрокиКонтактнойИнформации(ВидКонтактнойИнформации, Дата, КонтактнаяИнформация) - - Отбор = Новый Структура("Вид", ВидКонтактнойИнформации); - Если ВидКонтактнойИнформации.ХранитьИсториюИзменений Тогда - Отбор.Вставить("ДействуетС", Дата); - КонецЕсли; - НайденныеСтроки = КонтактнаяИнформация.НайтиСтроки(Отбор); - Возврат НайденныеСтроки; - -КонецФункции - -Функция ЗапрещенВводНесколькихЗначений(ВидКонтактнойИнформации, КонтактнаяИнформация, Дата, ИдентификаторСтрокиТабличнойЧасти = Неопределено) - - Если ВидКонтактнойИнформации.РазрешитьВводНесколькихЗначений Тогда - Возврат Ложь; - КонецЕсли; - - Отбор = Новый Структура("Вид", ВидКонтактнойИнформации); - - Если ИдентификаторСтрокиТабличнойЧасти <> Неопределено Тогда - Отбор.Вставить("ИдентификаторСтрокиТабличнойЧасти", ИдентификаторСтрокиТабличнойЧасти); - КонецЕсли; - - Если ВидКонтактнойИнформации.ХранитьИсториюИзменений Тогда - Отбор.Вставить("ДействуетС", Дата); - КонецЕсли; - - НайденныеСтроки = КонтактнаяИнформация.НайтиСтроки(Отбор); - Возврат НайденныеСтроки.Количество() > 0; - -КонецФункции - -Процедура ЗаполнитьКонтактнуюИнформациюОбъектаИзСтроки(СтрокаКонтактнойИнформацииОбъекта, Периодическая, СтрокаКонтактнойИнформации) - - ЗаполнитьЗначенияСвойств(СтрокаКонтактнойИнформации, СтрокаКонтактнойИнформацииОбъекта); - Если Периодическая Тогда - СтрокаКонтактнойИнформации.ДействуетС = СтрокаКонтактнойИнформацииОбъекта.Дата; - КонецЕсли; - - Если ЗначениеЗаполнено(СтрокаКонтактнойИнформации.Значение) Тогда - ОбъектКонтактнойИнформации = УправлениеКонтактнойИнформациейСлужебный.JSONВКонтактнуюИнформациюПоПолям(СтрокаКонтактнойИнформации.Значение, СтрокаКонтактнойИнформацииОбъекта.Тип); - ЗаполнитьТехническиеПоляКонтактнойИнформации(СтрокаКонтактнойИнформации, ОбъектКонтактнойИнформации, СтрокаКонтактнойИнформацииОбъекта.Тип); - КонецЕсли; - -КонецПроцедуры - #КонецОбласти diff --git a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиент/Module.bsl b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиент/Module.bsl index 831b0804f..a052d587e 100644 --- a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиент/Module.bsl +++ b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиент/Module.bsl @@ -8,20 +8,6 @@ #Область ПрограммныйИнтерфейс -// Обработчик события ПриИзменении поля формы контактной информации. -// Вызывается из подключаемых действий при внедрении подсистемы "Контактная информация". -// -// Параметры: -// Форма - ФормаКлиентскогоПриложения - Форма владельца контактной информации. -// Элемент - ПолеФормы - Элемент формы, содержащий представление контактной информации. -// ЭтоТабличнаяЧасть - Булево - Флаг того, что элемент является частью таблицы формы. -// -Процедура ПриИзменении(Форма, Элемент, ЭтоТабличнаяЧасть = Ложь) Экспорт - - ПриИзмененииКонтактнойИнформации(Форма, Элемент, ЭтоТабличнаяЧасть, Истина); - -КонецПроцедуры - // Обработчик события НачалоВыбора поля формы контактной информации. // Вызывается из подключаемых действий при внедрении подсистемы "Контактная информация". // @@ -32,76 +18,21 @@ // СтандартнаяОбработка - Булево - Устанавливаемый флаг стандартной обработки события формы. // ПараметрыОткрытия - Структура - Параметры открытия формы ввода контактной информации. // -Процедура НачалоВыбора(Форма, Элемент, Модифицированность = Истина, СтандартнаяОбработка = Ложь, ПараметрыОткрытия = Неопределено) Экспорт - СтандартнаяОбработка = Ложь; +Процедура НачатьВыбор(Форма, Элемент, Модифицированность = Истина, СтандартнаяОбработка = Ложь, ПараметрыОткрытия = Неопределено) Экспорт + ПриНачалеВыбора(Форма, Элемент, Модифицированность, СтандартнаяОбработка, ПараметрыОткрытия, Истина); +КонецПроцедуры + +// Обработчик события ПриИзменении поля формы контактной информации. +// Вызывается из подключаемых действий при внедрении подсистемы "Контактная информация". +// +// Параметры: +// Форма - ФормаКлиентскогоПриложения - Форма владельца контактной информации. +// Элемент - ПолеФормы - Элемент формы, содержащий представление контактной информации. +// ЭтоТабличнаяЧасть - Булево - Флаг того, что элемент является частью таблицы формы. +// +Процедура НачатьИзменение(Форма, Элемент, ЭтоТабличнаяЧасть = Ложь) Экспорт - Результат = Новый Структура; - Результат.Вставить("ИмяРеквизита", Элемент.Имя); - - ЭтоТабличнаяЧасть = ЭтоТабличнаяЧасть(Элемент); - - Если ЭтоТабличнаяЧасть Тогда - ДанныеЗаполнения = Форма.Элементы[Форма.ТекущийЭлемент.Имя].ТекущиеДанные; - Если ДанныеЗаполнения = Неопределено Тогда - Возврат; - КонецЕсли; - Иначе - ДанныеЗаполнения = Форма; - КонецЕсли; - - ДанныеСтроки = ПолучитьСтрокуДополнительныхЗначений(Форма, Элемент, ЭтоТабличнаяЧасть); - - // Если представление было изменено в поле и не соответствует реквизиту, то приводим в соответствие. - ОбновитьКонтекстноеМеню = Ложь; - Если Элемент.Вид = ВидПоляФормы.ПолеВвода Тогда - Если ДанныеЗаполнения[Элемент.Имя] <> Элемент.ТекстРедактирования Тогда - ДанныеЗаполнения[Элемент.Имя] = Элемент.ТекстРедактирования; - ПриИзмененииКонтактнойИнформации(Форма, Элемент, ЭтоТабличнаяЧасть, Ложь); - ОбновитьКонтекстноеМеню = Истина; - Форма.Модифицированность = Истина; - КонецЕсли; - ТекстРедактирования = Элемент.ТекстРедактирования; - Иначе - Если ДанныеСтроки <> Неопределено И ЗначениеЗаполнено(ДанныеСтроки.Значение) Тогда - ТекстРедактирования = Форма[Элемент.Имя]; - Иначе - ТекстРедактирования = ""; - КонецЕсли; - КонецЕсли; - - ПараметрыКонтактнойИнформации = Форма.ПараметрыКонтактнойИнформации[ДанныеСтроки.ИмяЭлементаДляРазмещения]; - - ПараметрыОткрытияФормы = Новый Структура; - ПараметрыОткрытияФормы.Вставить("ВидКонтактнойИнформации", ДанныеСтроки.Вид); - ПараметрыОткрытияФормы.Вставить("Значение", ДанныеСтроки.Значение); - ПараметрыОткрытияФормы.Вставить("Представление", ТекстРедактирования); - ПараметрыОткрытияФормы.Вставить("ТолькоПросмотр", Форма.ТолькоПросмотр Или Элемент.ТолькоПросмотр); - ПараметрыОткрытияФормы.Вставить("ТипПомещения", ПараметрыКонтактнойИнформации.ПараметрыАдреса.ТипПомещения); - ПараметрыОткрытияФормы.Вставить("Страна", ПараметрыКонтактнойИнформации.ПараметрыАдреса.Страна); - ПараметрыОткрытияФормы.Вставить("Индекс", ПараметрыКонтактнойИнформации.ПараметрыАдреса.Индекс); - ПараметрыОткрытияФормы.Вставить("КонтактнаяИнформацияОписаниеДополнительныхРеквизитов", Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов); - - Если Не ЭтоТабличнаяЧасть Тогда - ПараметрыОткрытияФормы.Вставить("Комментарий", ДанныеСтроки.Комментарий); - КонецЕсли; - - Если ЗначениеЗаполнено(ПараметрыОткрытия) И ТипЗнч(ПараметрыОткрытия) = Тип("Структура") Тогда - Для каждого ЗначениеИКлюч Из ПараметрыОткрытия Цикл - ПараметрыОткрытияФормы.Вставить(ЗначениеИКлюч.Ключ, ЗначениеИКлюч.Значение); - КонецЦикла; - КонецЕсли; - - Оповещение = Новый ОписаниеОповещения("ПредставлениеНачалоВыбораЗавершение", ЭтотОбъект, Новый Структура); - Оповещение.ДополнительныеПараметры.Вставить("ДанныеЗаполнения", ДанныеЗаполнения); - Оповещение.ДополнительныеПараметры.Вставить("ЭтоТабличнаяЧасть", ЭтоТабличнаяЧасть); - Оповещение.ДополнительныеПараметры.Вставить("ИмяЭлементаРазмещения", ДанныеСтроки.ИмяЭлементаДляРазмещения); - Оповещение.ДополнительныеПараметры.Вставить("ДанныеСтроки", ДанныеСтроки); - Оповещение.ДополнительныеПараметры.Вставить("Элемент", Элемент); - Оповещение.ДополнительныеПараметры.Вставить("Результат", Результат); - Оповещение.ДополнительныеПараметры.Вставить("Форма", Форма); - Оповещение.ДополнительныеПараметры.Вставить("ОбновитьКонтекстноеМеню", ОбновитьКонтекстноеМеню); - - ОткрытьФормуКонтактнойИнформации(ПараметрыОткрытияФормы,, Оповещение); + ПриИзмененииКонтактнойИнформации(Форма, Элемент, ЭтоТабличнаяЧасть, Истина, Истина); КонецПроцедуры @@ -112,23 +43,8 @@ // Форма - ФормаКлиентскогоПриложения - Форма владельца контактной информации. // ИмяРеквизита - Строка - Имя реквизита формы, связанного с представление контактной информации. // -Процедура Очистка(Знач Форма, Знач ИмяРеквизита) Экспорт - - Результат = Новый Структура("ИмяРеквизита", ИмяРеквизита); - НайденнаяСтрока = Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.НайтиСтроки(Результат)[0]; - НайденнаяСтрока.Значение = ""; - НайденнаяСтрока.Представление = ""; - НайденнаяСтрока.Комментарий = ""; - - Форма[ИмяРеквизита] = ""; - Форма.Модифицированность = Истина; - - Если НайденнаяСтрока.Тип = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Адрес") Тогда - Результат.Вставить("ОбновитьКонтекстноеМеню", Истина); - Результат.Вставить("ИмяЭлементаДляРазмещения", НайденнаяСтрока.ИмяЭлементаДляРазмещения); - КонецЕсли; - - ОбновитьКонтактнуюИнформациюФормы(Форма, Результат); +Процедура НачатьОчистку(Знач Форма, Знач ИмяРеквизита) Экспорт + ПриОчистке(Форма, ИмяРеквизита, Истина); КонецПроцедуры // Обработчик команды, связанной с контактной информацией (написать письмо, открыть адрес, и т.п.). @@ -138,152 +54,26 @@ // Форма - ФормаКлиентскогоПриложения - форма владельца контактной информации. // ИмяКоманды - Строка - имя автоматически сгенерированной команды действия. // -Процедура ВыполнитьКоманду(Знач Форма, Знач ИмяКоманды) Экспорт +Процедура НачатьВыполнениеКоманды(Знач Форма, Знач ИмяКоманды) Экспорт + ПриВыполненииКоманды(Форма, ИмяКоманды, Истина); +КонецПроцедуры + +// Обработчик навигационной ссылки для открытия веб-страницы. +// Вызывается из подключаемых действий при внедрении подсистемы "Контактная информация". +// +// Параметры: +// Форма - ФормаКлиентскогоПриложения - форма владельца контактной информации. +// Элемент - ПолеФормы - элемент формы, содержащий представление контактной информации. +// НавигационнаяСсылкаФорматированнойСтроки - Строка - значение гиперссылки форматированной строки. Параметр +// передается по ссылке. +// СтандартнаяОбработка - Булево - в данный параметр передается признак выполнения стандартной +// системной) обработки события. Если в теле процедуры-обработчика +// установить данному параметру значение Ложь, стандартная обработка события +// производиться не будет. +// +Процедура НачатьОбработкуНавигационнойСсылки(Форма, Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка) Экспорт - Если СтрНачинаетсяС(ИмяКоманды, "КонтактнаяИнформацияДобавитьПолеВвода") Тогда - - ИмяЭлементаДляРазмещения = Сред(ИмяКоманды, СтрДлина("КонтактнаяИнформацияДобавитьПолеВвода") + 1); - Оповещение = Новый ОписаниеОповещения("КонтактнаяИнформацияДобавитьПолеВводаЗавершение", ЭтотОбъект, Новый Структура); - Оповещение.ДополнительныеПараметры.Вставить("Форма", Форма); - Оповещение.ДополнительныеПараметры.Вставить("ИмяЭлементаДляРазмещения", ИмяЭлементаДляРазмещения); - Оповещение.ДополнительныеПараметры.Вставить("ИмяКоманды", ИмяКоманды); - Форма.ПоказатьВыборИзМеню(Оповещение, Форма.ПараметрыКонтактнойИнформации[ИмяЭлементаДляРазмещения].СписокДобавляемыхЭлементов, Форма.Элементы[ИмяКоманды]); - Возврат; - - ИначеЕсли СтрНачинаетсяС(ИмяКоманды, "Команда") Тогда - - ИмяРеквизита = СтрЗаменить(ИмяКоманды, "Команда", ""); - КомандаКонтекстногоМеню = Неопределено; - - ИначеЕсли СтрНачинаетсяС(ИмяКоманды, "МенюПодменюАдрес") Тогда - - ИмяРеквизита = СтрЗаменить(ИмяКоманды, "МенюПодменюАдрес", ""); - Позиция = СтрНайти(ИмяРеквизита, "_КонтактнаяИнформацияПоле"); - ИмяРеквизитаИсточник = Лев(ИмяРеквизита, Позиция -1); - ИмяРеквизита = Сред(ИмяРеквизита, Позиция + 1); - КомандаКонтекстногоМеню = Неопределено; - - ИначеЕсли СтрНачинаетсяС(ИмяКоманды, "КартаЯндексМеню") - ИЛИ СтрНачинаетсяС(ИмяКоманды, "КартаGoogleМеню") Тогда - - КомандаКонтекстногоМеню = КомандаКонтекстногоМеню(ИмяКоманды); - ИмяРеквизита = Сред(КомандаКонтекстногоМеню.ИмяРеквизита, СтрДлина("Меню") + 1); - - Иначе - - КомандаКонтекстногоМеню = КомандаКонтекстногоМеню(ИмяКоманды); - ИмяРеквизита = КомандаКонтекстногоМеню.ИмяРеквизита; - - КонецЕсли; - - Результат = Новый Структура("ИмяРеквизита", ИмяРеквизита); - НайденныеСтроки = Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.НайтиСтроки(Результат); - Если НайденныеСтроки.Количество() = 0 Тогда - Возврат; - КонецЕсли; - - НайденнаяСтрока = НайденныеСтроки[0]; - ТипКонтактнойИнформации = НайденнаяСтрока.Тип; - ИмяЭлементаДляРазмещения = НайденнаяСтрока.ИмяЭлементаДляРазмещения; - Результат.Вставить("ИмяЭлементаДляРазмещения", ИмяЭлементаДляРазмещения); - - Если КомандаКонтекстногоМеню <> Неопределено Тогда - Если КомандаКонтекстногоМеню.Команда = "Комментарий" Тогда - ВвестиКомментарий(Форма, КомандаКонтекстногоМеню.ИмяРеквизита, НайденнаяСтрока, Результат); - ИначеЕсли КомандаКонтекстногоМеню.Команда = "История" Тогда - ОткрытьФормуИсторииИзменений(Форма, НайденнаяСтрока); - ИначеЕсли КомандаКонтекстногоМеню.Команда = "КартаЯндекс" Тогда - ПоказатьАдресНаКарте(НайденнаяСтрока.Представление, "Яндекс.Карты"); - ИначеЕсли КомандаКонтекстногоМеню.Команда = "КартаGoogle" Тогда - ПоказатьАдресНаКарте(НайденнаяСтрока.Представление, "GoogleMaps"); - Иначе - ПервыйЭлемент = НайденнаяСтрока.ИмяРеквизита; - Индекс = Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.Индекс(НайденнаяСтрока); - Если КомандаКонтекстногоМеню.НаправлениеПеремещения = 1 Тогда - Если Индекс < Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.Количество() - 1 Тогда - ВторойЭлемент = Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.Получить(Индекс + 1).ИмяРеквизита; - КонецЕсли; - Иначе - Если Индекс > 0 Тогда - ВторойЭлемент = Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.Получить(Индекс - 1).ИмяРеквизита; - КонецЕсли; - КонецЕсли; - Результат = Новый Структура("ПоменятьМестамиЭлементы, ПервыйЭлемент, ВторойЭлемент", Истина, ПервыйЭлемент, ВторойЭлемент); - Форма.ТекущийЭлемент = Форма.Элементы[ВторойЭлемент]; - ОбновитьКонтактнуюИнформациюФормы(Форма, Результат); - КонецЕсли; - - ИначеЕсли ТипКонтактнойИнформации = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Адрес") Тогда - - Результат = Новый Структура("ИмяРеквизита", ИмяРеквизитаИсточник); - СтрокаПотребитель = Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.НайтиСтроки(Результат)[0]; - - Комментарий = СтрокаПотребитель.Комментарий; // Сохраняем старый комментарий. - Если СтрокаПотребитель.Свойство("МеждународныйФорматАдреса") И СтрокаПотребитель.МеждународныйФорматАдреса Тогда - - ЗаполнитьЗначенияСвойств(СтрокаПотребитель, НайденнаяСтрока, "Комментарий"); - ПредставлениеАдреса = СтроковыеФункцииКлиентСервер.СтрокаЛатиницей(НайденнаяСтрока.Представление); - СтрокаПотребитель.Представление = ПредставлениеАдреса; - Форма[СтрокаПотребитель.ИмяРеквизита] = ПредставлениеАдреса; - СтрокаПотребитель.Значение = УправлениеКонтактнойИнформациейСлужебныйВызовСервера.КонтактнаяИнформацияПоПредставлению(ПредставлениеАдреса, ТипКонтактнойИнформации); - - Иначе - - ЗаполнитьЗначенияСвойств(СтрокаПотребитель, НайденнаяСтрока, "Значение, Представление,Комментарий"); - Форма[СтрокаПотребитель.ИмяРеквизита] = НайденнаяСтрока.Представление; - - КонецЕсли; - - Форма.Модифицированность = Истина; - Результат = Новый Структура(); - Результат.Вставить("ОбновитьКонтекстноеМеню", Истина); - Результат.Вставить("ИмяРеквизита", СтрокаПотребитель.ИмяРеквизита); - Результат.Вставить("Комментарий", Комментарий); - Результат.Вставить("ИмяЭлементаДляРазмещения", НайденнаяСтрока.ИмяЭлементаДляРазмещения); - ОбновитьКонтактнуюИнформациюФормы(Форма, Результат); - - ИначеЕсли ТипКонтактнойИнформации = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты") Тогда - АдресПочты = Форма.Элементы[ИмяРеквизита].ТекстРедактирования; - ИсточникКонтактнойИнформации = Форма.ПараметрыКонтактнойИнформации[ИмяЭлементаДляРазмещения].Владелец; - СоздатьЭлектронноеПисьмо("", АдресПочты, ТипКонтактнойИнформации, ИсточникКонтактнойИнформации); - ИначеЕсли ТипКонтактнойИнформации = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Телефон") Тогда - МожноОтправлятьSMS = Форма.ПараметрыКонтактнойИнформации[ИмяЭлементаДляРазмещения].МожноОтправлятьSMS; - - Параметры = Новый Структура("НомерТелефона, ТипКонтактнойИнформации, ИсточникКонтактнойИнформации"); - Параметры.НомерТелефона = Форма.Элементы[ИмяРеквизита].ТекстРедактирования; - Параметры.ТипКонтактнойИнформации = ТипКонтактнойИнформации; - Параметры.ИсточникКонтактнойИнформации = Форма.ПараметрыКонтактнойИнформации[ИмяЭлементаДляРазмещения].Владелец; - - Если ПустаяСтрока(Параметры.НомерТелефона) Тогда - Если МожноОтправлятьSMS Тогда - ТекстПредупреждения = НСтр("ru = 'Для совершения звонка или отправки SMS требуется ввести номер телефона.'"); - Иначе - ТекстПредупреждения = НСтр("ru = 'Для совершения звонка требуется ввести номер телефона.'"); - КонецЕсли; - ПоказатьПредупреждение(, ТекстПредупреждения); - ИначеЕсли МожноОтправлятьSMS Тогда - Список = Новый СписокЗначений; - Список.Добавить("Позвонить", НСтр("ru = 'Позвонить'"),, БиблиотекаКартинок.Позвонить); - Список.Добавить("ОтправитьSMS", НСтр("ru = 'Отправить SMS...'"),, БиблиотекаКартинок.ОтправитьSMS); - ОповещениеМеню = Новый ОписаниеОповещения("ПослеВыбораИзМенюТелефон", ЭтотОбъект, Параметры); - Форма.ПоказатьВыборИзМеню(ОповещениеМеню, Список, Форма.Элементы[ИмяКоманды]); - Иначе - ПозвонитьПоТелефону(Параметры.НомерТелефона); - КонецЕсли; - - ИначеЕсли ТипКонтактнойИнформации = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Skype") Тогда - Параметры = Новый Структура("ЛогинSkype"); - Параметры.ЛогинSkype = Форма.Элементы[ИмяРеквизита].ТекстРедактирования; - Список = Новый СписокЗначений; - Список.Добавить("Позвонить", НСтр("ru = 'Позвонить'")); - Список.Добавить("НачатьЧат", НСтр("ru = 'Начать чат'")); - ОповещениеМеню = Новый ОписаниеОповещения("ПослеВыбораИзМенюSkype", ЭтотОбъект, Параметры); - Форма.ПоказатьВыборИзМеню(ОповещениеМеню, Список, Форма.Элементы[ИмяКоманды]); - - ИначеЕсли ТипКонтактнойИнформации = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.ВебСтраница") Тогда - АдресСсылки = Форма.Элементы[ИмяРеквизита].ТекстРедактирования; - ПерейтиПоВебСсылке("", АдресСсылки, ТипКонтактнойИнформации); - КонецЕсли; + ПриОбработкеНавигационнойСсылки(Форма, Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка, Истина); КонецПроцедуры @@ -301,18 +91,7 @@ // производиться не будет. // Процедура ОбработкаНавигационнойСсылки(Форма, Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка) Экспорт - - СтандартнаяОбработка = Ложь; - АдресСсылки = Форма[Элемент.Имя]; - Если НавигационнаяСсылкаФорматированнойСтроки = УправлениеКонтактнойИнформациейКлиентСервер.НавигационнаяСсылкаВебСайта() Или СокрЛП(Строка(АдресСсылки)) = УправлениеКонтактнойИнформациейКлиентСервер.ТекстПустогоАдресаВВидеГиперссылки() Тогда - - СтандартнаяОбработкаВыбора = Истина; - НачалоВыбора(Форма, Элемент, истина, СтандартнаяОбработкаВыбора); - - Иначе - ПерейтиПоВебСсылке("", НавигационнаяСсылкаФорматированнойСтроки); - КонецЕсли; - + ПриОбработкеНавигационнойСсылки(Форма, Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка, Ложь); КонецПроцедуры // Обработчик события АвтоПодбор поля формы контактной информации для подбора вариантов адреса по введенной строке. @@ -471,7 +250,7 @@ // * Страна - Строка - страна мира, только если указан тип контактной информации Адрес. // * Регион - Строка - значение поля региона, только если указан тип контактной информации Адрес. // Актуально для стран ЕАЭС. -// * Индекс - Строка - страна мира, только если указан тип контактной информации Адрес. +// * Индекс - Строка - почтовый индекс, только если указан тип контактной информации Адрес. // * ТипПомещения - Строка - тип помещения в форме ввода нового адреса, , только если указан тип контактной // информации Адрес. // * КодСтраны - Строка - телефонный код страны мира, только если указан тип контактной информации Телефон. @@ -612,9 +391,9 @@ КонецЕсли; #Если МобильныйКлиент Тогда - SMS = Новый SMSСообщение(); - SMS.Получатели.Добавить(НомерПолучателя); - СредстваТелефонии.ПослатьSMS(SMS, Истина); + Сообщение = Новый SMSСообщение(); + Сообщение.Получатели.Добавить(НомерПолучателя); + СредстваТелефонии.ПослатьSMS(Сообщение, Истина); Возврат; #КонецЕсли @@ -751,8 +530,9 @@ // Параметры: // Форма - ФормаКлиентскогоПриложения - форма с контактной информацией. // ПараметрыКонтактнойИнформации - Структура - сведения об элементе контактной информации. +// АсинхронныйВызов - Булево - служебный параметр. // -Процедура ОткрытьФормуИсторииИзменений(Форма, ПараметрыКонтактнойИнформации) Экспорт +Процедура ОткрытьФормуИсторииИзменений(Форма, ПараметрыКонтактнойИнформации, АсинхронныйВызов = Ложь) Экспорт Результат = Новый Структура("Вид", ПараметрыКонтактнойИнформации.Вид); НайденныеСтроки = Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.НайтиСтроки(Результат); @@ -768,17 +548,72 @@ ДополнительныеПараметры.Вставить("ИмяЭлемента", ПараметрыКонтактнойИнформации.ИмяРеквизита); ДополнительныеПараметры.Вставить("Вид", ПараметрыКонтактнойИнформации.Вид); ДополнительныеПараметры.Вставить("ИмяЭлементаДляРазмещения", ПараметрыКонтактнойИнформации.ИмяЭлементаДляРазмещения); + ДополнительныеПараметры.Вставить("АсинхронныйВызов", АсинхронныйВызов); + ДополнительныеПараметры.Форма = Форма; ПараметрыФормы = Новый Структура("СписокКонтактнойИнформации", СписокКонтактнойИнформации); ПараметрыФормы.Вставить("ВидКонтактнойИнформации", ПараметрыКонтактнойИнформации.Вид); ПараметрыФормы.Вставить("ТолькоПросмотр", Форма.ТолькоПросмотр); - + ОповещениеОЗакрытие = Новый ОписаниеОповещения("ПослеЗакрытияФормыИстории", УправлениеКонтактнойИнформациейКлиент, ДополнительныеПараметры); + ОткрытьФорму("Обработка.ВводКонтактнойИнформации.Форма.ИсторияКонтактнойИнформации", ПараметрыФормы, Форма,,,, ОповещениеОЗакрытие); КонецПроцедуры +// Синхронные обработчики + +// Обработчик события НачалоВыбора поля формы контактной информации. +// Вызывается из подключаемых действий при внедрении подсистемы "Контактная информация". +// +// Параметры: +// Форма - ФормаКлиентскогоПриложения - Форма владельца контактной информации. +// Элемент - ПолеФормы - Элемент формы, содержащий представление контактной информации. +// Модифицированность - Булево - Устанавливаемый флаг модифицированности формы. +// СтандартнаяОбработка - Булево - Устанавливаемый флаг стандартной обработки события формы. +// ПараметрыОткрытия - Структура - Параметры открытия формы ввода контактной информации. +// +Процедура НачалоВыбора(Форма, Элемент, Модифицированность = Истина, СтандартнаяОбработка = Ложь, ПараметрыОткрытия = Неопределено) Экспорт + ПриНачалеВыбора(Форма, Элемент, Модифицированность, СтандартнаяОбработка, ПараметрыОткрытия, Ложь); +КонецПроцедуры + +// Обработчик события Очистка поля формы контактной информации. +// Вызывается из подключаемых действий при внедрении подсистемы "Контактная информация". +// +// Параметры: +// Форма - ФормаКлиентскогоПриложения - Форма владельца контактной информации. +// ИмяРеквизита - Строка - Имя реквизита формы, связанного с представление контактной информации. +// +Процедура Очистка(Знач Форма, Знач ИмяРеквизита) Экспорт + ПриОчистке(Форма, ИмяРеквизита, Ложь); +КонецПроцедуры + +// Обработчик команды, связанной с контактной информацией (написать письмо, открыть адрес, и т.п.). +// Вызывается из подключаемых действий при внедрении подсистемы "Контактная информация". +// +// Параметры: +// Форма - ФормаКлиентскогоПриложения - форма владельца контактной информации. +// ИмяКоманды - Строка - имя автоматически сгенерированной команды действия. +// +Процедура ВыполнитьКоманду(Знач Форма, Знач ИмяКоманды) Экспорт + ПриВыполненииКоманды(Форма, ИмяКоманды, Ложь); +КонецПроцедуры + +// Обработчик события ПриИзменении поля формы контактной информации. +// Вызывается из подключаемых действий при внедрении подсистемы "Контактная информация". +// +// Параметры: +// Форма - ФормаКлиентскогоПриложения - Форма владельца контактной информации. +// Элемент - ПолеФормы - Элемент формы, содержащий представление контактной информации. +// ЭтоТабличнаяЧасть - Булево - Флаг того, что элемент является частью таблицы формы. +// +Процедура ПриИзменении(Форма, Элемент, ЭтоТабличнаяЧасть = Ложь) Экспорт + + ПриИзмененииКонтактнойИнформации(Форма, Элемент, ЭтоТабличнаяЧасть, Истина, Ложь); + +КонецПроцедуры + #Область УстаревшиеПроцедурыИФункции // Устарела. Следует использовать АвтоПодборАдреса. @@ -890,8 +725,8 @@ ЗаполнитьЗначенияСвойств(ДанныеСтроки, СтрокаКонтактнойИнформации); Если НЕ СтрокаКонтактнойИнформации.ЭтоИсторическаяКонтактнаяИнформация Тогда Если ПустаяСтрока(СтрокаКонтактнойИнформации.Представление) - И Результат.Свойство("РедактированиеТолькоВДиалоге") - И Результат.РедактированиеТолькоВДиалоге Тогда + И Результат.Свойство("ВидРедактирования") + И Результат.ВидРедактирования = "Диалог" Тогда Представление = УправлениеКонтактнойИнформациейКлиентСервер.ТекстПустогоАдресаВВидеГиперссылки(); Иначе Представление = СтрокаКонтактнойИнформации.Представление; @@ -909,7 +744,7 @@ Форма.Модифицированность = Истина; Если ЗначениеЗаполнено(ПараметрыОбновления) Тогда - ОбновитьКонтактнуюИнформациюФормы(Форма, ПараметрыОбновления); + ОбновитьКонтактнуюИнформациюФормы(Форма, ПараметрыОбновления, ДополнительныеПараметры.АсинхронныйВызов); КонецЕсли; КонецПроцедуры @@ -921,7 +756,7 @@ Результат = Новый Структура(); Результат.Вставить("ОбновитьКонтекстноеМеню", Истина); Результат.Вставить("ИмяЭлементаДляРазмещения", ДополнительныеПараметры.ИмяЭлементаРазмещения); - ОбновитьКонтактнуюИнформациюФормы(ДополнительныеПараметры.Форма, Результат); + ОбновитьКонтактнуюИнформациюФормы(ДополнительныеПараметры.Форма, Результат, ДополнительныеПараметры.АсинхронныйВызов); КонецЕсли; Возврат; КонецЕсли; @@ -1019,7 +854,7 @@ КонецЕсли; Форма.Модифицированность = Истина; - ОбновитьКонтактнуюИнформациюФормы(Форма, Результат); + ОбновитьКонтактнуюИнформациюФормы(Форма, Результат, ДополнительныеПараметры.АсинхронныйВызов); КонецПроцедуры Процедура КонтактнаяИнформацияДобавитьПолеВводаЗавершение(Знач ВыбранныйЭлемент, Знач ДополнительныеПараметры) Экспорт @@ -1036,7 +871,7 @@ Результат.Вставить("ОбновитьКонтекстноеМеню", Истина); КонецЕсли; - ОбновитьКонтактнуюИнформациюФормы(ДополнительныеПараметры.Форма, Результат); + ОбновитьКонтактнуюИнформациюФормы(ДополнительныеПараметры.Форма, Результат, ДополнительныеПараметры.АсинхронныйВызов); КонецПроцедуры Процедура ПослеЗапускаПриложения(ПриложениеЗапущено, Параметры) Экспорт @@ -1054,87 +889,297 @@ #Область СлужебныеПроцедурыИФункции -Процедура ПослеВыбораИзМенюТелефон(ВыбранныйЭлемент, Параметры) Экспорт +// Обработчики событий + +Процедура ПриНачалеВыбора(Форма, Элемент, Модифицированность, СтандартнаяОбработка, ПараметрыОткрытия, АсинхронныйВызов) - Если ВыбранныйЭлемент <> Неопределено Тогда - Если ВыбранныйЭлемент.Значение = "ОтправитьSMS" Тогда - СоздатьSMS("", Параметры.НомерТелефона, Параметры.ТипКонтактнойИнформации, Параметры.ИсточникКонтактнойИнформации); + СтандартнаяОбработка = Ложь; + + Результат = Новый Структура; + Результат.Вставить("ИмяРеквизита", Элемент.Имя); + + ЭтоТабличнаяЧасть = ЭтоТабличнаяЧасть(Элемент); + + Если ЭтоТабличнаяЧасть Тогда + ДанныеЗаполнения = Форма.Элементы[Форма.ТекущийЭлемент.Имя].ТекущиеДанные; + Если ДанныеЗаполнения = Неопределено Тогда + Возврат; + КонецЕсли; + Иначе + ДанныеЗаполнения = Форма; + КонецЕсли; + + ДанныеСтроки = ПолучитьСтрокуДополнительныхЗначений(Форма, Элемент, ЭтоТабличнаяЧасть); + + // Если представление было изменено в поле и не соответствует реквизиту, то приводим в соответствие. + ОбновитьКонтекстноеМеню = Ложь; + Если Элемент.Вид = ВидПоляФормы.ПолеВвода Тогда + Если ДанныеЗаполнения[Элемент.Имя] <> Элемент.ТекстРедактирования Тогда + ДанныеЗаполнения[Элемент.Имя] = Элемент.ТекстРедактирования; + ПриИзмененииКонтактнойИнформации(Форма, Элемент, ЭтоТабличнаяЧасть, Ложь, АсинхронныйВызов); + ОбновитьКонтекстноеМеню = Истина; + Форма.Модифицированность = Истина; + КонецЕсли; + ТекстРедактирования = Элемент.ТекстРедактирования; + Иначе + Если ДанныеСтроки <> Неопределено И ЗначениеЗаполнено(ДанныеСтроки.Значение) Тогда + ТекстРедактирования = Форма[Элемент.Имя]; Иначе - ПозвонитьПоТелефону(Параметры.НомерТелефона); + ТекстРедактирования = ""; КонецЕсли; КонецЕсли; + + ПараметрыКонтактнойИнформации = Форма.ПараметрыКонтактнойИнформации[ДанныеСтроки.ИмяЭлементаДляРазмещения]; + + ПараметрыОткрытияФормы = Новый Структура; + ПараметрыОткрытияФормы.Вставить("ВидКонтактнойИнформации", ДанныеСтроки.Вид); + ПараметрыОткрытияФормы.Вставить("Значение", ДанныеСтроки.Значение); + ПараметрыОткрытияФормы.Вставить("Представление", ТекстРедактирования); + ПараметрыОткрытияФормы.Вставить("ТолькоПросмотр", Форма.ТолькоПросмотр Или Элемент.ТолькоПросмотр); + ПараметрыОткрытияФормы.Вставить("ТипПомещения", ПараметрыКонтактнойИнформации.ПараметрыАдреса.ТипПомещения); + ПараметрыОткрытияФормы.Вставить("Страна", ПараметрыКонтактнойИнформации.ПараметрыАдреса.Страна); + ПараметрыОткрытияФормы.Вставить("Индекс", ПараметрыКонтактнойИнформации.ПараметрыАдреса.Индекс); + ПараметрыОткрытияФормы.Вставить("КонтактнаяИнформацияОписаниеДополнительныхРеквизитов", Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов); + + Если Не ЭтоТабличнаяЧасть Тогда + ПараметрыОткрытияФормы.Вставить("Комментарий", ДанныеСтроки.Комментарий); + КонецЕсли; + + Если ЗначениеЗаполнено(ПараметрыОткрытия) И ТипЗнч(ПараметрыОткрытия) = Тип("Структура") Тогда + Для каждого ЗначениеИКлюч Из ПараметрыОткрытия Цикл + ПараметрыОткрытияФормы.Вставить(ЗначениеИКлюч.Ключ, ЗначениеИКлюч.Значение); + КонецЦикла; + КонецЕсли; + + Оповещение = Новый ОписаниеОповещения("ПредставлениеНачалоВыбораЗавершение", ЭтотОбъект, Новый Структура); + Оповещение.ДополнительныеПараметры.Вставить("ДанныеЗаполнения", ДанныеЗаполнения); + Оповещение.ДополнительныеПараметры.Вставить("ЭтоТабличнаяЧасть", ЭтоТабличнаяЧасть); + Оповещение.ДополнительныеПараметры.Вставить("ИмяЭлементаРазмещения", ДанныеСтроки.ИмяЭлементаДляРазмещения); + Оповещение.ДополнительныеПараметры.Вставить("ДанныеСтроки", ДанныеСтроки); + Оповещение.ДополнительныеПараметры.Вставить("Элемент", Элемент); + Оповещение.ДополнительныеПараметры.Вставить("Результат", Результат); + Оповещение.ДополнительныеПараметры.Вставить("Форма", Форма); + Оповещение.ДополнительныеПараметры.Вставить("ОбновитьКонтекстноеМеню", ОбновитьКонтекстноеМеню); + Оповещение.ДополнительныеПараметры.Вставить("АсинхронныйВызов", АсинхронныйВызов); + + ОткрытьФормуКонтактнойИнформации(ПараметрыОткрытияФормы,, Оповещение); + КонецПроцедуры -Процедура ПослеВыбораИзМенюSkype(ВыбранныйЭлемент, Параметры) Экспорт +Процедура ПриОчистке(Знач Форма, Знач ИмяРеквизита, АсинхронныйВызов) - Если ВыбранныйЭлемент = Неопределено Тогда + Результат = Новый Структура("ИмяРеквизита", ИмяРеквизита); + НайденнаяСтрока = Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.НайтиСтроки(Результат)[0]; + НайденнаяСтрока.Значение = ""; + НайденнаяСтрока.Представление = ""; + НайденнаяСтрока.Комментарий = ""; + + Форма[ИмяРеквизита] = ""; + Форма.Модифицированность = Истина; + + Если НайденнаяСтрока.Тип = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Адрес") Тогда + Результат.Вставить("ОбновитьКонтекстноеМеню", Истина); + Результат.Вставить("ИмяЭлементаДляРазмещения", НайденнаяСтрока.ИмяЭлементаДляРазмещения); + КонецЕсли; + + ОбновитьКонтактнуюИнформациюФормы(Форма, Результат, АсинхронныйВызов); + +КонецПроцедуры + +Процедура ПриВыполненииКоманды(Знач Форма, Знач ИмяКоманды, АсинхронныйВызов) + + Если СтрНачинаетсяС(ИмяКоманды, "КонтактнаяИнформацияДобавитьПолеВвода") Тогда + + ДополнительныеПараметры = Новый Структура; + + ИмяЭлементаДляРазмещения = Сред(ИмяКоманды, СтрДлина("КонтактнаяИнформацияДобавитьПолеВвода") + 1); + ДополнительныеПараметры.Вставить("АсинхронныйВызов", АсинхронныйВызов); + ДополнительныеПараметры.Вставить("Форма", Форма); + ДополнительныеПараметры.Вставить("ИмяЭлементаДляРазмещения", ИмяЭлементаДляРазмещения); + ДополнительныеПараметры.Вставить("ИмяКоманды", ИмяКоманды); + Оповещение = Новый ОписаниеОповещения("КонтактнаяИнформацияДобавитьПолеВводаЗавершение", ЭтотОбъект, ДополнительныеПараметры); + Форма.ПоказатьВыборИзМеню(Оповещение, + Форма.ПараметрыКонтактнойИнформации[ИмяЭлементаДляРазмещения].СписокДобавляемыхЭлементов, + Форма.Элементы[ИмяКоманды]); + + Возврат; + + ИначеЕсли СтрНачинаетсяС(ИмяКоманды, "Команда") Тогда + + ИмяРеквизита = СтрЗаменить(ИмяКоманды, "Команда", ""); + КомандаКонтекстногоМеню = Неопределено; + + ИначеЕсли СтрНачинаетсяС(ИмяКоманды, "МенюПодменюАдрес") Тогда + + ИмяРеквизита = СтрЗаменить(ИмяКоманды, "МенюПодменюАдрес", ""); + Позиция = СтрНайти(ИмяРеквизита, "_КонтактнаяИнформацияПоле"); + ИмяРеквизитаИсточник = Лев(ИмяРеквизита, Позиция -1); + ИмяРеквизита = Сред(ИмяРеквизита, Позиция + 1); + КомандаКонтекстногоМеню = Неопределено; + + ИначеЕсли СтрНачинаетсяС(ИмяКоманды, "КартаЯндексМеню") + ИЛИ СтрНачинаетсяС(ИмяКоманды, "КартаGoogleМеню") Тогда + + КомандаКонтекстногоМеню = КомандаКонтекстногоМеню(ИмяКоманды); + ИмяРеквизита = Сред(КомандаКонтекстногоМеню.ИмяРеквизита, СтрДлина("Меню") + 1); + + Иначе + + КомандаКонтекстногоМеню = КомандаКонтекстногоМеню(ИмяКоманды); + ИмяРеквизита = КомандаКонтекстногоМеню.ИмяРеквизита; + + КонецЕсли; + + Результат = Новый Структура("ИмяРеквизита", ИмяРеквизита); + НайденныеСтроки = Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.НайтиСтроки(Результат); + Если НайденныеСтроки.Количество() = 0 Тогда Возврат; КонецЕсли; - Если ВыбранныйЭлемент.Значение = "Позвонить" Тогда - ПозвонитьНаSkype(Параметры.ЛогинSkype); - ИначеЕсли ВыбранныйЭлемент.Значение = "НачатьЧат" Тогда - НачатьБеседуВSkype(Параметры.ЛогинSkype); - КонецЕсли; - -КонецПроцедуры - -Процедура ОткрытьSkype(СтрокаЗапуска) + НайденнаяСтрока = НайденныеСтроки[0]; + ТипКонтактнойИнформации = НайденнаяСтрока.Тип; + ИмяЭлементаДляРазмещения = НайденнаяСтрока.ИмяЭлементаДляРазмещения; + Результат.Вставить("ИмяЭлементаДляРазмещения", ИмяЭлементаДляРазмещения); - #Если НЕ ВебКлиент Тогда - Если ПустаяСтрока(ПрограммаТелефонииУстановлена("skype")) Тогда - ПоказатьПредупреждение(Неопределено, НСтр("ru = 'Для совершения звонка по Skype требуется установить программу.'")); - Возврат; + Если КомандаКонтекстногоМеню <> Неопределено Тогда + Если КомандаКонтекстногоМеню.Команда = "Комментарий" Тогда + ВвестиКомментарий(Форма, КомандаКонтекстногоМеню.ИмяРеквизита, НайденнаяСтрока, Результат, АсинхронныйВызов); + ИначеЕсли КомандаКонтекстногоМеню.Команда = "История" Тогда + ОткрытьФормуИсторииИзменений(Форма, НайденнаяСтрока, АсинхронныйВызов); + ИначеЕсли КомандаКонтекстногоМеню.Команда = "КартаЯндекс" Тогда + ПоказатьАдресНаКарте(НайденнаяСтрока.Представление, "Яндекс.Карты"); + ИначеЕсли КомандаКонтекстногоМеню.Команда = "КартаGoogle" Тогда + ПоказатьАдресНаКарте(НайденнаяСтрока.Представление, "GoogleMaps"); + Иначе + ПервыйЭлемент = НайденнаяСтрока.ИмяРеквизита; + Индекс = Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.Индекс(НайденнаяСтрока); + Если КомандаКонтекстногоМеню.НаправлениеПеремещения = 1 Тогда + Если Индекс < Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.Количество() - 1 Тогда + ВторойЭлемент = Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.Получить(Индекс + 1).ИмяРеквизита; + КонецЕсли; + Иначе + Если Индекс > 0 Тогда + ВторойЭлемент = Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.Получить(Индекс - 1).ИмяРеквизита; + КонецЕсли; + КонецЕсли; + Результат = Новый Структура("ПоменятьМестамиЭлементы, ПервыйЭлемент, ВторойЭлемент", Истина, ПервыйЭлемент, ВторойЭлемент); + Форма.ТекущийЭлемент = Форма.Элементы[ВторойЭлемент]; + ОбновитьКонтактнуюИнформациюФормы(Форма, Результат, АсинхронныйВызов); КонецЕсли; - #КонецЕсли - - Оповещение = Новый ОписаниеОповещения("ПослеЗапускаПриложения", ЭтотОбъект); - ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку(СтрокаЗапуска, Оповещение); + + ИначеЕсли ТипКонтактнойИнформации = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Адрес") Тогда + + Результат = Новый Структура("ИмяРеквизита", ИмяРеквизитаИсточник); + СтрокаПотребитель = Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.НайтиСтроки(Результат)[0]; + + Комментарий = СтрокаПотребитель.Комментарий; // Сохраняем старый комментарий. + Если СтрокаПотребитель.Свойство("МеждународныйФорматАдреса") И СтрокаПотребитель.МеждународныйФорматАдреса Тогда + + ЗаполнитьЗначенияСвойств(СтрокаПотребитель, НайденнаяСтрока, "Комментарий"); + ПредставлениеАдреса = СтроковыеФункцииКлиент.СтрокаЛатиницей(НайденнаяСтрока.Представление); + СтрокаПотребитель.Представление = ПредставлениеАдреса; + Форма[СтрокаПотребитель.ИмяРеквизита] = ПредставлениеАдреса; + СтрокаПотребитель.Значение = УправлениеКонтактнойИнформациейСлужебныйВызовСервера.КонтактнаяИнформацияПоПредставлению(ПредставлениеАдреса, ТипКонтактнойИнформации); + + Иначе + + ЗаполнитьЗначенияСвойств(СтрокаПотребитель, НайденнаяСтрока, "Значение, Представление,Комментарий"); + Форма[СтрокаПотребитель.ИмяРеквизита] = НайденнаяСтрока.Представление; + + КонецЕсли; + + Форма.Модифицированность = Истина; + Результат = Новый Структура(); + Результат.Вставить("ОбновитьКонтекстноеМеню", Истина); + Результат.Вставить("ИмяРеквизита", СтрокаПотребитель.ИмяРеквизита); + Результат.Вставить("Комментарий", Комментарий); + Результат.Вставить("ИмяЭлементаДляРазмещения", НайденнаяСтрока.ИмяЭлементаДляРазмещения); + ОбновитьКонтактнуюИнформациюФормы(Форма, Результат, АсинхронныйВызов); + + ИначеЕсли ТипКонтактнойИнформации = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты") Тогда + АдресПочты = Форма.Элементы[ИмяРеквизита].ТекстРедактирования; + ИсточникКонтактнойИнформации = Форма.ПараметрыКонтактнойИнформации[ИмяЭлементаДляРазмещения].Владелец; + СоздатьЭлектронноеПисьмо("", АдресПочты, ТипКонтактнойИнформации, ИсточникКонтактнойИнформации); + ИначеЕсли ТипКонтактнойИнформации = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Телефон") Тогда + МожноОтправлятьSMS = Форма.ПараметрыКонтактнойИнформации[ИмяЭлементаДляРазмещения].МожноОтправлятьSMS; + + Параметры = Новый Структура("НомерТелефона, ТипКонтактнойИнформации, ИсточникКонтактнойИнформации"); + Параметры.НомерТелефона = Форма.Элементы[ИмяРеквизита].ТекстРедактирования; + Параметры.ТипКонтактнойИнформации = ТипКонтактнойИнформации; + Параметры.ИсточникКонтактнойИнформации = Форма.ПараметрыКонтактнойИнформации[ИмяЭлементаДляРазмещения].Владелец; + + Если ПустаяСтрока(Параметры.НомерТелефона) Тогда + Если МожноОтправлятьSMS Тогда + ТекстПредупреждения = НСтр("ru = 'Для совершения звонка или отправки SMS требуется ввести номер телефона.'"); + Иначе + ТекстПредупреждения = НСтр("ru = 'Для совершения звонка требуется ввести номер телефона.'"); + КонецЕсли; + ПоказатьПредупреждение(, ТекстПредупреждения); + ИначеЕсли МожноОтправлятьSMS Тогда + Список = Новый СписокЗначений; + Список.Добавить("Позвонить", НСтр("ru = 'Позвонить'"),, БиблиотекаКартинок.Позвонить); + Список.Добавить("ОтправитьSMS", НСтр("ru = 'Отправить SMS...'"),, БиблиотекаКартинок.ОтправитьSMS); + ОповещениеМеню = Новый ОписаниеОповещения("ПослеВыбораИзМенюТелефон", ЭтотОбъект, Параметры); + Форма.ПоказатьВыборИзМеню(ОповещениеМеню, Список, Форма.Элементы[ИмяКоманды]); + Иначе + ПозвонитьПоТелефону(Параметры.НомерТелефона); + КонецЕсли; + + ИначеЕсли ТипКонтактнойИнформации = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Skype") Тогда + Параметры = Новый Структура("ЛогинSkype"); + Параметры.ЛогинSkype = Форма.Элементы[ИмяРеквизита].ТекстРедактирования; + Список = Новый СписокЗначений; + Список.Добавить("Позвонить", НСтр("ru = 'Позвонить'")); + Список.Добавить("НачатьЧат", НСтр("ru = 'Начать чат'")); + ОповещениеМеню = Новый ОписаниеОповещения("ПослеВыбораИзМенюSkype", ЭтотОбъект, Параметры); + Форма.ПоказатьВыборИзМеню(ОповещениеМеню, Список, Форма.Элементы[ИмяКоманды]); + + ИначеЕсли ТипКонтактнойИнформации = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.ВебСтраница") Тогда + АдресСсылки = Форма.Элементы[ИмяРеквизита].ТекстРедактирования; + ПерейтиПоВебСсылке("", АдресСсылки, ТипКонтактнойИнформации); + КонецЕсли; КонецПроцедуры -// Возвращает строку дополнительных значений по имени реквизита. -// -// Параметры: -// Форма - ФормаКлиентскогоПриложения - передаваемая форма. -// Элемент - ДанныеФормыСтруктураСКоллекцией - данные формы. -// -// Возвращаемое значение: -// СтрокаКоллекции - найденные данные. -// Неопределено - при отсутствии данных. -// -Функция ПолучитьСтрокуДополнительныхЗначений(Форма, Элемент, ЭтоТабличнаяЧасть = Ложь) +Процедура ПриОбработкеНавигационнойСсылки(Форма, Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка, АсинхронныйВызов) - Отбор = Новый Структура("ИмяРеквизита", Элемент.Имя); - Строки = Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.НайтиСтроки(Отбор); - ДанныеСтроки = ?(Строки.Количество() = 0, Неопределено, Строки[0]); - - Если ЭтоТабличнаяЧасть И ДанныеСтроки <> Неопределено Тогда + СтандартнаяОбработка = Ложь; + АдресСсылки = Форма[Элемент.Имя]; + Если НавигационнаяСсылкаФорматированнойСтроки = УправлениеКонтактнойИнформациейКлиентСервер.НавигационнаяСсылкаВебСайта() + Или СокрЛП(Строка(АдресСсылки)) = УправлениеКонтактнойИнформациейКлиентСервер.ТекстПустогоАдресаВВидеГиперссылки() Тогда - ПутьКСтроке = Форма.Элементы[Форма.ТекущийЭлемент.Имя].ТекущиеДанные; + СтандартнаяОбработкаВыбора = Истина; - ДанныеСтроки.Представление = ПутьКСтроке[Элемент.Имя]; - ДанныеСтроки.Значение = ПутьКСтроке[Элемент.Имя + "Значение"]; + Если АсинхронныйВызов Тогда + НачатьВыбор(Форма, Элемент, Истина, СтандартнаяОбработкаВыбора); + Иначе + НачалоВыбора(Форма, Элемент, истина, СтандартнаяОбработкаВыбора); + КонецЕсли; + Иначе + ПерейтиПоВебСсылке("", НавигационнаяСсылкаФорматированнойСтроки); КонецЕсли; - Возврат ДанныеСтроки; - -КонецФункции +КонецПроцедуры + +// Прочие // Ввод комментария из контекстного меню. -Процедура ВвестиКомментарий(Знач Форма, Знач ИмяРеквизита, Знач НайденнаяСтрока, Знач Результат) +Процедура ВвестиКомментарий(Знач Форма, Знач ИмяРеквизита, Знач НайденнаяСтрока, Знач Результат, АсинхронныйВызов) Комментарий = НайденнаяСтрока.Комментарий; - Оповещение = Новый ОписаниеОповещения("ВвестиКомментарийЗавершение", ЭтотОбъект, Новый Структура); - Оповещение.ДополнительныеПараметры.Вставить("Форма", Форма); - Оповещение.ДополнительныеПараметры.Вставить("ИмяРеквизитаКомментария", "Комментарий" + ИмяРеквизита); - Оповещение.ДополнительныеПараметры.Вставить("НайденнаяСтрока", НайденнаяСтрока); - Оповещение.ДополнительныеПараметры.Вставить("ПредыдущийКомментарий", Комментарий); - Оповещение.ДополнительныеПараметры.Вставить("Результат", Результат); - Оповещение.ДополнительныеПараметры.Вставить("ИмяЭлементаДляРазмещения", НайденнаяСтрока.ИмяЭлементаДляРазмещения); + ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("Форма", Форма); + ДополнительныеПараметры.Вставить("ИмяРеквизитаКомментария", "Комментарий" + ИмяРеквизита); + ДополнительныеПараметры.Вставить("НайденнаяСтрока", НайденнаяСтрока); + ДополнительныеПараметры.Вставить("ПредыдущийКомментарий", Комментарий); + ДополнительныеПараметры.Вставить("Результат", Результат); + ДополнительныеПараметры.Вставить("ИмяЭлементаДляРазмещения", НайденнаяСтрока.ИмяЭлементаДляРазмещения); + ДополнительныеПараметры.Вставить("АсинхронныйВызов", АсинхронныйВызов); - ОбщегоНазначенияКлиент.ПоказатьФормуРедактированияМногострочногоТекста(Оповещение, Комментарий, + Оповещение = Новый ОписаниеОповещения("ВвестиКомментарийЗавершение", ЭтотОбъект, ДополнительныеПараметры); + + ОбщегоНазначенияКлиент.ПоказатьФормуРедактированияМногострочногоТекста(Оповещение, Комментарий, НСтр("ru = 'Комментарий'")); КонецПроцедуры @@ -1164,17 +1209,11 @@ КонецЕсли; ДополнительныеПараметры.Форма.Модифицированность = Истина; - ОбновитьКонтактнуюИнформациюФормы(ДополнительныеПараметры.Форма, ДополнительныеПараметры.Результат) -КонецПроцедуры - -// Контекстный вызов -Процедура ОбновитьКонтактнуюИнформациюФормы(Форма, Результат) - - Форма.Подключаемый_ОбновитьКонтактнуюИнформацию(Результат); + ОбновитьКонтактнуюИнформациюФормы(ДополнительныеПараметры.Форма, ДополнительныеПараметры.Результат, ДополнительныеПараметры.АсинхронныйВызов) КонецПроцедуры -Процедура ПриИзмененииКонтактнойИнформации(Форма, Элемент, ЭтоТабличнаяЧасть, ОбновитьФорму) +Процедура ПриИзмененииКонтактнойИнформации(Форма, Элемент, ЭтоТабличнаяЧасть, ОбновитьФорму, АсинхронныйВызов) ЭтоТабличнаяЧасть = ЭтоТабличнаяЧасть(Элемент); @@ -1229,11 +1268,52 @@ Если ДанныеСтроки.Тип = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Адрес") И ОбновитьФорму Тогда Результат = Новый Структура("ОбновитьКонтекстноеМеню, ИмяЭлементаДляРазмещения", Истина, ДанныеСтроки.ИмяЭлементаДляРазмещения); - ОбновитьКонтактнуюИнформациюФормы(Форма, Результат) + ОбновитьКонтактнуюИнформациюФормы(Форма, Результат, АсинхронныйВызов) КонецЕсли; КонецПроцедуры +// Контекстный вызов +Процедура ОбновитьКонтактнуюИнформациюФормы(Форма, Результат, АсинхронныйВызов) + + Если АсинхронныйВызов Тогда + Оповещение = Новый ОписаниеОповещения("Подключаемый_ПродолжитьОбновлениеКонтактнойИнформации", Форма); + ВыполнитьОбработкуОповещения(Оповещение, Результат); + Иначе + Форма.Подключаемый_ОбновитьКонтактнуюИнформацию(Результат); + КонецЕсли; + +КонецПроцедуры + +// Возвращает строку дополнительных значений по имени реквизита. +// +// Параметры: +// Форма - ФормаКлиентскогоПриложения - передаваемая форма. +// Элемент - ДанныеФормыСтруктураСКоллекцией - данные формы. +// +// Возвращаемое значение: +// СтрокаКоллекции - найденные данные. +// Неопределено - при отсутствии данных. +// +Функция ПолучитьСтрокуДополнительныхЗначений(Форма, Элемент, ЭтоТабличнаяЧасть = Ложь) + + Отбор = Новый Структура("ИмяРеквизита", Элемент.Имя); + Строки = Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.НайтиСтроки(Отбор); + ДанныеСтроки = ?(Строки.Количество() = 0, Неопределено, Строки[0]); + + Если ЭтоТабличнаяЧасть И ДанныеСтроки <> Неопределено Тогда + + ПутьКСтроке = Форма.Элементы[Форма.ТекущийЭлемент.Имя].ТекущиеДанные; + + ДанныеСтроки.Представление = ПутьКСтроке[Элемент.Имя]; + ДанныеСтроки.Значение = ПутьКСтроке[Элемент.Имя + "Значение"]; + + КонецЕсли; + + Возврат ДанныеСтроки; + +КонецФункции + Функция ЭтоТабличнаяЧасть(Элемент) Родитель = Элемент.Родитель; @@ -1337,6 +1417,45 @@ КонецФункции +Процедура ПослеВыбораИзМенюТелефон(ВыбранныйЭлемент, Параметры) Экспорт + + Если ВыбранныйЭлемент <> Неопределено Тогда + Если ВыбранныйЭлемент.Значение = "ОтправитьSMS" Тогда + СоздатьSMS("", Параметры.НомерТелефона, Параметры.ТипКонтактнойИнформации, Параметры.ИсточникКонтактнойИнформации); + Иначе + ПозвонитьПоТелефону(Параметры.НомерТелефона); + КонецЕсли; + КонецЕсли; +КонецПроцедуры + +Процедура ПослеВыбораИзМенюSkype(ВыбранныйЭлемент, Параметры) Экспорт + + Если ВыбранныйЭлемент = Неопределено Тогда + Возврат; + КонецЕсли; + + Если ВыбранныйЭлемент.Значение = "Позвонить" Тогда + ПозвонитьНаSkype(Параметры.ЛогинSkype); + ИначеЕсли ВыбранныйЭлемент.Значение = "НачатьЧат" Тогда + НачатьБеседуВSkype(Параметры.ЛогинSkype); + КонецЕсли; + +КонецПроцедуры + +Процедура ОткрытьSkype(СтрокаЗапуска) + + #Если НЕ ВебКлиент Тогда + Если ПустаяСтрока(ПрограммаТелефонииУстановлена("skype")) Тогда + ПоказатьПредупреждение(Неопределено, НСтр("ru = 'Для совершения звонка по Skype требуется установить программу.'")); + Возврат; + КонецЕсли; + #КонецЕсли + + Оповещение = Новый ОписаниеОповещения("ПослеЗапускаПриложения", ЭтотОбъект); + ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку(СтрокаЗапуска, Оповещение); + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Возвращает строку, в которой все не алфавитно-числовые символы (кроме -_.) // заменены на знак процентов (%) с последующими двумя шестнадцатеричными цифрами и @@ -1441,7 +1560,7 @@ Результат = Новый Массив; Для Индекс = 0 По БинарныйМассив1.Количество()-1 Цикл Результат.Добавить(БинарныйМассив1[Индекс] И БинарныйМассив2[Индекс]); - КонецЦикла; + КонецЦикла; Возврат Результат; КонецФункции @@ -1449,7 +1568,7 @@ Результат = Новый Массив; Для Индекс = 0 По БинарныйМассив1.Количество()-1 Цикл Результат.Добавить(БинарныйМассив1[Индекс] Или БинарныйМассив2[Индекс]); - КонецЦикла; + КонецЦикла; Возврат Результат; КонецФункции @@ -1504,7 +1623,7 @@ КонецЕсли; ПредставлениеАдреса = ?(СтрокаКИ.МеждународныйФорматАдреса, - СтроковыеФункцииКлиентСервер.СтрокаЛатиницей(Адрес.Представление), Адрес.Представление); + СтроковыеФункцииКлиент.СтрокаЛатиницей(Адрес.Представление), Адрес.Представление); Если СписокАдресовВПодменю[ВРег(Адрес.Представление)] <> Неопределено Тогда ПредставлениеАдреса = ""; diff --git a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиентСервер/Module.bsl b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиентСервер/Module.bsl index 708e92eb8..0d8dd94b6 100644 --- a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиентСервер/Module.bsl @@ -272,6 +272,7 @@ #Область СлужебныеПроцедурыИФункции Функция ТипКонтактнойИнформацииВСтроку(Знач ТипКонтактнойИнформации) + Результат = Новый Соответствие; Результат.Вставить(ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Адрес"), "Адрес"); Результат.Вставить(ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Телефон"), "Телефон"); @@ -282,6 +283,7 @@ Результат.Вставить(ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Другое"), "Другое"); Результат.Вставить("", ""); Возврат Результат[ТипКонтактнойИнформации]; + КонецФункции Функция АдресВСвободнойФорме() Экспорт diff --git a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСлужебный/Module.bsl b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСлужебный/Module.bsl index c6baa2f41..8b154d0e0 100644 --- a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСлужебный/Module.bsl +++ b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСлужебный/Module.bsl @@ -8,17 +8,6 @@ #Область СлужебныйПрограммныйИнтерфейс -// Получить первое значение определенного вида контактной информации у объекта. -// -// Параметры: -// Ссылка - ЛюбаяСсылка - ссылка на объект-владелец контактной информации (организация, -// контрагент, партнер и т.д.). -// ТипКонтактнойИнформации - Перечисление.ТипыКонтактнойИнформации - параметры обработки. -// Дата - Дата - Дата, на которую будет получено значение контактной информации. -// -// Возвращаемое значение: -// Строка - строковое представление значения. -// Функция ПервоеЗначениеКонтактнойИнформацииОбъектаПоТипу(Ссылка, ТипКонтактнойИнформации, Дата) Экспорт Результат = ""; @@ -139,12 +128,16 @@ // См. ОбновлениеИнформационнойБазыБСП.ПриДобавленииОбработчиковОбновления. Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт + Обработчик = Обработчики.Добавить(); + Обработчик.Процедура = "УправлениеКонтактнойИнформациейСлужебный.ЗаполнитьНаименованияВидовКонтактнойИнформацииПользователя"; + Обработчик.РежимВыполнения = "Оперативно"; + Обработчик.НачальноеЗаполнение = Истина; + Обработчик = Обработчики.Добавить(); Обработчик.Версия = "2.2.3.34"; Обработчик.Процедура = "УправлениеКонтактнойИнформациейСлужебный.ОбновитьСуществующиеСтраныМира"; Обработчик.РежимВыполнения = "Монопольно"; Обработчик.ОбщиеДанные = Ложь; - Обработчик.НачальноеЗаполнение = Истина; Обработчик = Обработчики.Добавить(); Обработчик.Версия = "2.3.1.8"; @@ -173,33 +166,59 @@ Обработчик.ПроцедураПроверки = "ОбновлениеИнформационнойБазы.ДанныеОбновленыНаНовуюВерсиюПрограммы"; Обработчик.Комментарий = НСтр("ru = 'Обновление сведений о странах мирах в соответствии с общероссийским классификатором стран мира. |До завершения обработки наименование стран в документах в ряде случаев будет отображаться некорректно.'"); + Обработчик.ПриоритетыВыполнения = ОбновлениеИнформационнойБазы.ПриоритетыВыполненияОбработчика(); + Приоритет = Обработчик.ПриоритетыВыполнения.Добавить(); + Приоритет.Процедура = "МультиязычностьСервер.ОбновитьПредставленияПредопределенныхЭлементов"; + Приоритет.Порядок = "Любой"; Обработчик = Обработчики.Добавить(); - Обработчик.Процедура = "УправлениеКонтактнойИнформациейСлужебный.ЗаполнитьНаименованияВидовКонтактнойИнформацииПользователя"; - Обработчик.РежимВыполнения = "Оперативно"; - Обработчик.НачальноеЗаполнение = Истина; + Обработчик.Версия = "3.1.2.85"; + Обработчик.Идентификатор = Новый УникальныйИдентификатор("22f43dca-ac4f-3289-81a9-e110cd56f8b2"); + Обработчик.Процедура = "Справочники.ВидыКонтактнойИнформации.ОбработатьДанныеДляПереходаНаНовуюВерсию"; + Обработчик.РежимВыполнения = "Отложенно"; + Обработчик.ПроцедураЗаполненияДанныхОбновления = "Справочники.ВидыКонтактнойИнформации.ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию"; + Обработчик.ОчередьОтложеннойОбработки = 1; + Обработчик.ЧитаемыеОбъекты = "Справочник.ВидыКонтактнойИнформации"; + Обработчик.ИзменяемыеОбъекты = "Справочник.ВидыКонтактнойИнформации"; + Обработчик.БлокируемыеОбъекты = "Справочник.ВидыКонтактнойИнформации"; + Обработчик.ПриоритетыВыполнения = ОбновлениеИнформационнойБазы.ПриоритетыВыполненияОбработчика(); + Обработчик.ПроцедураПроверки = "ОбновлениеИнформационнойБазы.ДанныеОбновленыНаНовуюВерсиюПрограммы"; + Обработчик.Комментарий = НСтр("ru = 'Заполнение значения поля ""ВидРедактирования"" у видов контактной информации. + |До завершения обработки поля ""ВидРедактирования"" документов в ряде случаев будут отображаться некорректно.'"); + +КонецПроцедуры + +// См. ПоискИУдалениеДублейПереопределяемый.ПриОпределенииОбъектовСПоискомДублей. +Процедура ПриОпределенииОбъектовСПоискомДублей(Объекты) Экспорт + + Объекты.Вставить(Метаданные.Справочники.ВидыКонтактнойИнформации.ПолноеИмя(), ""); + +КонецПроцедуры + +// См. ОбновлениеИнформационнойБазыПереопределяемый.ПриОпределенииНастроек +Процедура ПриОпределенииОбъектовСНачальнымЗаполнением(Объекты) Экспорт + + Объекты.Добавить(Метаданные.Справочники.СтраныМира); + +КонецПроцедуры + +// См. ОбщегоНазначенияПереопределяемый.ПриДобавленииОбработчиковУстановкиПараметровСеанса. +Процедура ПриДобавленииОбработчиковУстановкиПараметровСеанса(Обработчики) Экспорт + Обработчики.Вставить("ИнтерактивнаяПроверкаЗаполненияКонтактнойИнформации", "УправлениеКонтактнойИнформациейСлужебный.УстановкаПараметровСеанса"); КонецПроцедуры #КонецОбласти #Область СлужебныеПроцедурыИФункции -// Возвращает пространство имен для оперирования с XDTO контактной информации. -// -// Возвращаемое значение: -// Строка - пространство имен. -// Функция ПространствоИмен() Экспорт Возврат "http://www.v8.1c.ru/ssl/contactinfo"; КонецФункции -// Заполняет список страна при автоподборе по введенному пользователем тексту. -// Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка) Экспорт Если Не ЕстьПравоДобавления() Или Метаданные.ОбщиеМодули.Найти("РаботаСАдресами") = Неопределено Тогда - // Нет прав на добавление страны мира, поведение по умолчанию. Возврат; КонецЕсли; @@ -259,7 +278,7 @@ Набор = СтрРазделить(Представление, Символы.ПС); Для Счетчик = 0 По Набор.Количество() - 1 Цикл Если СтрНачинаетсяС(Набор[Счетчик], Символы.ВТаб) Тогда - Набор[Счетчик] = Новый ФорматированнаяСтрока(СокрЛП(Набор[Счетчик]), Новый Шрифт(,, Истина), ЦветаСтиля.РезультатУспехЦвет); + Набор[Счетчик] = Новый ФорматированнаяСтрока(СокрЛП(Набор[Счетчик]), ШрифтыСтиля.ВажнаяНадписьШрифт, ЦветаСтиля.РезультатУспехЦвет); ИначеЕсли УстаревшийАдрес Тогда Набор[Счетчик] = Новый ФорматированнаяСтрока(Набор[Счетчик],, ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет); КонецЕсли; @@ -276,7 +295,6 @@ #Область ОбновлениеИнформационнойБазы -// Обновляем только существующие элементы стран мира по классификатору. Процедура ОбновитьСуществующиеСтраныМира() Экспорт Если Метаданные.ОбщиеМодули.Найти("РаботаСАдресами") = Неопределено Тогда @@ -295,14 +313,12 @@ Выборка = Справочники.СтраныМира.Выбрать(,, Фильтр); СтранаНайдена = Выборка.Следующий(); Если Не СтранаНайдена И Добавлять Тогда - // Добавление страны Страна = Справочники.СтраныМира.СоздатьЭлемент(); ИначеЕсли СтранаНайдена И ( Выборка.Наименование <> СтрокаКлассификатора.Наименование Или Выборка.КодАльфа2 <> СтрокаКлассификатора.КодАльфа2 Или Выборка.КодАльфа3 <> СтрокаКлассификатора.КодАльфа3 Или Выборка.НаименованиеПолное <> СтрокаКлассификатора.НаименованиеПолное) Тогда - // Изменение страны Страна = Выборка.ПолучитьОбъект(); Иначе Продолжить; @@ -320,7 +336,7 @@ Исключение ОтменитьТранзакцию(); Инфо = ИнформацияОбОшибке(); - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='Ошибка записи страны мира %1 (код %2) при обновлении классификатора, %3'"), + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Ошибка записи страны мира %1 (код %2) при обновлении классификатора, %3'"), Выборка.Код, Выборка.Наименование, КраткоеПредставлениеОшибки(Инфо)); ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка,,, @@ -358,8 +374,6 @@ КонецПроцедуры -// Инициализирует значение реквизита Используется справочника ВидыКонтактнойИнформации. -// Процедура УстановитьЗначениеПризнакаИспользуется() Экспорт Запрос = Новый Запрос; @@ -387,26 +401,150 @@ КонецПроцедуры -// Вызывается при начальном заполнении. -// Установка наименования элементов выполняется в общем модуле УправлениеКонтактнойИнформациейПереопределяемый -// в процедуре ПриПолученииНаименованийВидовКонтактнойИнформации. -// Процедура ЗаполнитьНаименованияВидовКонтактнойИнформацииПользователя() Экспорт ПараметрыГруппы = Справочники.ВидыКонтактнойИнформации.СправочникПользователи.ПолучитьОбъект(); - ПараметрыГруппы.Наименование = НСтр("ru='Контактная информация справочника ""Пользователи""'"); + ПараметрыГруппы.Наименование = НСтр("ru = 'Контактная информация справочника ""Пользователи""'"); ОбновлениеИнформационнойБазы.ЗаписатьОбъект(ПараметрыГруппы); ПараметрыВида = Справочники.ВидыКонтактнойИнформации.EmailПользователя.ПолучитьОбъект(); - ПараметрыВида.Наименование = НСтр("ru='Электронная почта'"); + ПараметрыВида.Наименование = НСтр("ru = 'Электронная почта'"); ОбновлениеИнформационнойБазы.ЗаписатьОбъект(ПараметрыВида); ПараметрыВида = Справочники.ВидыКонтактнойИнформации.ТелефонПользователя.ПолучитьОбъект(); - ПараметрыВида.Наименование = НСтр("ru='Телефон'"); + ПараметрыВида.Наименование = НСтр("ru = 'Телефон'"); ОбновлениеИнформационнойБазы.ЗаписатьОбъект(ПараметрыВида); КонецПроцедуры +// Обработчик события КонтактнаяИнформацияОбработкаПроверкиЗаполнения + +Процедура КонтактнаяИнформацияОбработкаПроверкиЗаполнения(Источник, Отказ, ПроверяемыеРеквизиты) Экспорт + + Если Не ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда + Возврат; + КонецЕсли; + + Если Не ПравоДоступа("Чтение", Метаданные.Справочники.ВидыКонтактнойИнформации) Тогда + Возврат; + КонецЕсли; + + Если ПараметрыСеанса.ИнтерактивнаяПроверкаЗаполненияКонтактнойИнформации Тогда + ПараметрыСеанса.ИнтерактивнаяПроверкаЗаполненияКонтактнойИнформации = Ложь; + Возврат; + КонецЕсли; + + // Контактная информация подключена к объекту. + Проверка = Новый Структура; + Проверка.Вставить("КонтактнаяИнформация", Неопределено); + ЗаполнитьЗначенияСвойств(Проверка, Источник); + + Если Проверка.КонтактнаяИнформация = Неопределено Тогда + Возврат; // Табличная часть контактная информация отсутствует у объекта. + КонецЕсли; + + ВидыКонтактнойИнформации = ВидыТребующиеОбязательногоЗаполнения(Источник.Ссылка); + Сообщения = Новый Массив; + + Если ВидыКонтактнойИнформации.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + Для каждого ВидКонтактнойИнформации Из ВидыКонтактнойИнформации Цикл + Отбор = Новый Структура("Вид", ВидКонтактнойИнформации); + НайденныеСтроки = Источник.КонтактнаяИнформация.НайтиСтроки(Отбор); + + Если НайденныеСтроки.Количество() = 0 Тогда + + Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Поле ""%1"" не заполнено.'"), + ВидКонтактнойИнформации); + Сообщения.Добавить(Текст); + + Иначе + + Для Каждого СтрокаКонтактнойИнформации Из НайденныеСтроки Цикл + + Если ПустаяСтрока(СтрокаКонтактнойИнформации.Представление) + ИЛИ (ПустаяСтрока(СтрокаКонтактнойИнформации.Значение) + И ПустаяСтрока(СтрокаКонтактнойИнформации.ЗначенияПолей)) Тогда + + Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Поле ""%1"" не заполнено.'"), + СтрокаКонтактнойИнформации.Вид); + Сообщения.Добавить(Текст); + Прервать; + + КонецЕсли; + + КонецЦикла; + + КонецЕсли; + + КонецЦикла; + + Если Сообщения.Количество() > 0 Тогда + ОбщегоНазначения.СообщитьПользователю(СтрСоединить(Сообщения, Символы.ПС),,,, Отказ); + КонецЕсли; + +КонецПроцедуры + +Функция ВидыТребующиеОбязательногоЗаполнения(ВладелецКонтактнойИнформации) + + ПолноеИмяОбъектаМетаданных = ВладелецКонтактнойИнформации .Метаданные().ПолноеИмя(); + + ИмяГруппыВидовКИ = СтрЗаменить(ПолноеИмяОбъектаМетаданных, ".", ""); + ГруппаВидовКИ = Неопределено; + + Запрос = Новый Запрос; + Запрос.Текст = "ВЫБРАТЬ + | ВидыКонтактнойИнформации.Ссылка КАК Ссылка, + |ВЫБОР + | КОГДА ВидыКонтактнойИнформации.ИмяПредопределенногоВида <> """" + | ТОГДА ВидыКонтактнойИнформации.ИмяПредопределенногоВида + | ИНАЧЕ ВидыКонтактнойИнформации.ИмяПредопределенныхДанных + |КОНЕЦ КАК ИмяПредопределенногоВида + |ИЗ + | Справочник.ВидыКонтактнойИнформации КАК ВидыКонтактнойИнформации + |ГДЕ + | ВидыКонтактнойИнформации.ЭтоГруппа = ИСТИНА + | И ВидыКонтактнойИнформации.ПометкаУдаления = ЛОЖЬ + | И ВидыКонтактнойИнформации.Используется = ИСТИНА"; + + РезультатЗапроса = Запрос.Выполнить().Выбрать(); + Пока РезультатЗапроса.Следующий() Цикл + Если СтрСравнить(РезультатЗапроса.ИмяПредопределенногоВида, ИмяГруппыВидовКИ) = 0 Тогда + ГруппаВидовКИ = РезультатЗапроса.Ссылка; + Прервать; + КонецЕсли; + КонецЦикла; + + Если НЕ ЗначениеЗаполнено(ГруппаВидовКИ) Тогда + Возврат Новый Массив; + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ВидыКонтактнойИнформации.Ссылка + |ИЗ + | Справочник.ВидыКонтактнойИнформации КАК ВидыКонтактнойИнформации + |ГДЕ + | ВидыКонтактнойИнформации.Родитель = &ГруппаВидовКИ + | И ВидыКонтактнойИнформации.ПометкаУдаления = ЛОЖЬ + | И ВидыКонтактнойИнформации.Используется = ИСТИНА + | И ВидыКонтактнойИнформации.ОбязательноеЗаполнение = ИСТИНА"; + + Запрос.УстановитьПараметр("ГруппаВидовКИ", ГруппаВидовКИ); + Возврат Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); + +КонецФункции + +Процедура УстановкаПараметровСеанса(Знач ИмяПараметра, УстановленныеПараметры) Экспорт + Если ИмяПараметра = "ИнтерактивнаяПроверкаЗаполненияКонтактнойИнформации" Тогда + ПараметрыСеанса.ИнтерактивнаяПроверкаЗаполненияКонтактнойИнформации = Ложь; + УстановленныеПараметры.Добавить("ИнтерактивнаяПроверкаЗаполненияКонтактнойИнформации"); + КонецЕсли; +КонецПроцедуры + #КонецОбласти #Область ОбщиеСлужебныеПроцедурыИФункции @@ -417,14 +555,6 @@ КонецФункции -// Преобразует контактную информацию XDTO в XML. -// -// Параметры: -// ОбъектXDTOИнформации - ОбъектXDTO - контактная информация. -// -// Возвращаемое значение: -// Строка - результат преобразования в формате XML. -// Функция КонтактнаяИнформацияXDTOВXML(ОбъектXDTOИнформации) Экспорт Запись = Новый ЗаписьXML; @@ -446,15 +576,6 @@ КонецФункции -// Разбирает представление КИ и возвращает XDTO. -// -// Параметры: -// Текст - Строка - XML -// ОжидаемыйВид - СправочникСсылка.ВидыКонтактнойИнформации, ПеречислениеСсылка.ТипыКонтактнойИнформации, Структура. -// -// Возвращаемое значение: -// Строк - контактная информация. -// Функция КонтактнаяИнформацияПоПредставлению(Представление, ОжидаемыйВид, РазбиватьНаПоля = Ложь) Экспорт ОжидаемыйТип = УправлениеКонтактнойИнформациейСлужебныйПовтИсп.ТипВидаКонтактнойИнформации(ОжидаемыйВид); @@ -490,7 +611,6 @@ НаименованиеОсновнаяСтрана = ""; КонецЕсли; - // Разбираем адрес из его представления по классификатору. Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда Адрес.Value = Представление; Возврат Адрес; @@ -510,7 +630,11 @@ Адрес.Country = СокрЛП(ВРег(СтрокаСтраны.Значение)); КонецЕсли; - // Обработка частых сокращений в адресе + ДанныеОСтране = УправлениеКонтактнойИнформацией.ДанныеСтраныМира(, Адрес.Country); + Если ДанныеОСтране <> Неопределено Тогда + Адрес.countryCode = ДанныеОСтране.Код; + КонецЕсли; + Если Метаданные.ОбщиеМодули.Найти("РаботаСАдресами") <> Неопределено Тогда МодульРаботаСАдресами = ОбщегоНазначения.ОбщийМодуль("РаботаСАдресами"); МодульРаботаСАдресами.ОбработкаЧастыхСокращенийВАдресах(ДанныеАнализа); @@ -591,7 +715,7 @@ Процедура ОбновитьПредставлениеАдреса(Адрес, ВключатьСтрануВПредставление) Если ТипЗнч(Адрес) <> Тип("Структура") Тогда - ВызватьИсключение НСтр("ru='Для формирования представления адреса передан некорректный тип адреса'"); + ВызватьИсключение НСтр("ru = 'Для формирования представления адреса передан некорректный тип адреса'"); КонецЕсли; СписокЗаполненныхУровней = Новый Массив; @@ -604,8 +728,8 @@ СписокЗаполненныхУровней.Добавить(Адрес.ZipCode); КонецЕсли; - СписокЗаполненныхУровней.Добавить(Адрес["Area"] + " " + Адрес["AreaType"]); - СписокЗаполненныхУровней.Добавить(Адрес["City"] + " " + Адрес["CityType"]); + СписокЗаполненныхУровней.Добавить(СокрЛП(Адрес["Area"] + " " + Адрес["AreaType"])); + СписокЗаполненныхУровней.Добавить(СокрЛП(Адрес["City"] + " " + Адрес["CityType"])); Адрес.Value = СтрСоединить(СписокЗаполненныхУровней, ", "); @@ -671,6 +795,10 @@ Строка.Наименование = СокрЛП(Строка.Сокращение); Строка.Сокращение = ""; КонецЕсли; + Если СтрЗаканчиваетсяНа(Строка.Наименование, "тер.") Тогда + Строка.Наименование = СокрЛП(СтрЗаменить(Строка.Наименование, "тер.", "")); + Строка.Сокращение = "тер. " + Строка.Сокращение; + КонецЕсли; Строка.Значение = СокрЛП(Строка.Наименование + " " + Строка.Сокращение); КонецЦикла; @@ -743,15 +871,6 @@ КонецПроцедуры -// Разбирает представление КИ и возвращает XDTO. -// -// Параметры: -// Текст - Строка - XML -// ОжидаемыйВид - СправочникСсылка.ВидыКонтактнойИнформации, ПеречислениеСсылка.ТипыКонтактнойИнформации, Структура. -// -// Возвращаемое значение: -// ОбъектXDTO - контактная информация. -// Функция КонтактнаяИнформацияXDTOПоПредставлению(Текст, ОжидаемыйВид) Экспорт ОжидаемыйТип = УправлениеКонтактнойИнформациейСлужебныйПовтИсп.ТипВидаКонтактнойИнформации(ОжидаемыйВид); @@ -782,17 +901,6 @@ Возврат Неопределено; КонецФункции -// Преобразует строку в XDTO контактную информацию адреса. -// -// Параметры: -// ЗначенияПолей - Строка - сериализованная информация, значения полей. -// Представление - Строка - представление старший-младший, используется для попытки разбора, если ЗначенияПолей -// пусто. -// ОжидаемыйТип - ПеречислениеСсылка.ТипыКонтактнойИнформации - необязательный тип для контроля. -// -// Возвращаемое значение: -// ОбъектXDTO - контактной информации. -// Функция АдресXMLВXDTO(Знач ЗначенияПолей, Знач Представление = "", Знач ОжидаемыйТип = Неопределено) Экспорт Если Метаданные.Обработки.Найти("РасширенныйВводКонтактнойИнформации") <> Неопределено Тогда @@ -809,44 +917,14 @@ КонецФункции -// Преобразует строку в XDTO контактную информацию телефона. -// -// ЗначенияПолей - Строка - сериализованная информация, значения полей. -// Представление - Строка - представление старший-младший, используется для попытки разбора, если ЗначенияПолей -// пусто. -// ОжидаемыйТип - ПеречислениеСсылка.ТипыКонтактнойИнформации - необязательный тип для контроля. -// -// Возвращаемое значение: -// ОбъектXDTO - контактной информации. -// Функция ДесериализацияТелефона(ЗначенияПолей, Представление = "", ОжидаемыйТип = Неопределено) Экспорт Возврат ДесериализацияТелефонаФакса(ЗначенияПолей, Представление, ОжидаемыйТип); КонецФункции -// Преобразует строку в XDTO контактную информацию Факса. -// -// ЗначенияПолей - Строка - сериализованная информация, значения полей. -// Представление - Строка - представление старший-младший, используется для попытки разбора, если ЗначенияПолей -// пусто. -// ОжидаемыйТип - ПеречислениеСсылка.ТипыКонтактнойИнформации - необязательный тип для контроля. -// -// Возвращаемое значение: -// ОбъектXDTO - контактной информации. -// Функция ДесериализацияФакса(ЗначенияПолей, Представление = "", ОжидаемыйТип = Неопределено) Экспорт Возврат ДесериализацияТелефонаФакса(ЗначенияПолей, Представление, ОжидаемыйТип); КонецФункции -// Преобразует строку в XDTO прочую контактную информацию. -// -// Параметры: -// ЗначенияПолей - Строка - сериализованная информация, значения полей. -// Представление - Строка - представление старший-младший, используется для попытки разбора, если ЗначенияПолей пусто. -// ОжидаемыйТип - ПеречислениеСсылка.ТипыКонтактнойИнформации - необязательный тип для контроля. -// -// Возвращаемое значение: -// ОбъектXDTO - контактной информации. -// Функция ДесериализацияПрочейКонтактнойИнформации(ЗначенияПолей, Представление = "", ОжидаемыйТип = Неопределено) Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(ЗначенияПолей) Тогда @@ -881,20 +959,6 @@ КонецФункции -// Возвращает представление контактной информации. -// -// Параметры: -// КонтактнаяИнформация - Строка - Адрес в формат JSON или XML . -// ФорматКонтактнойИнформации - Строка - если указано "КЛАДР", то в представление адреса -// не включаются округ и внутригородской район. -// ВидКонтактнойИнформации - Структура - дополнительные параметры формирования представления для адресов: -// * Тип - Строка - Тип контактной информации; -// * ВключатьСтрануВПредставление - Булево - в представление будет включена страна адреса; -// * ФорматАдреса - Строка - если указано "КЛАДР", то в представление адреса -// не включаются округ и внутригородской район. -// Возвращаемое значение: -// Строка - сформированное представление. -// Функция ПредставлениеКонтактнойИнформации(Знач КонтактнаяИнформация, Знач ФорматКонтактнойИнформации) Экспорт Если ПустаяСтрока(КонтактнаяИнформация) Тогда @@ -930,14 +994,6 @@ КонецФункции -// Вычисляет, что адрес был введен в свободной форме. -// -// Параметры: -// КонтактнаяИнформация - Структура, Строка - Контактная информация. -// -// Возвращаемое значение: -// Булево - новое значение. -// Функция АдресВведенВСвободнойФорме(Знач КонтактнаяИнформация) Экспорт Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(КонтактнаяИнформация) Тогда @@ -956,15 +1012,6 @@ КонецФункции -// Формирует и возвращает представление контактной информации. -// -// Параметры: -// Информация - Структура, Строка - Контактная информация строкой в формате JSON или структура с полями. -// ВидИнформации - СправочникСсылка.ВидыКонтактнойИнформации, Структура - параметры для формирования представления. -// -// Возвращаемое значение: -// Строка - сформированное представление. -// Функция СформироватьПредставлениеКонтактнойИнформации(Знач Информация, Знач ВидИнформации) Если ТипЗнч(Информация) = Тип("Строка") И УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВJSON(Информация) Тогда @@ -986,19 +1033,10 @@ Возврат Информация.Value; КонецЕсли; - // Старый формат или новый десериализованный. Возврат СформироватьПредставлениеКонтактнойИнформации(КонтактнаяИнформацияВСтруктуруJSON(Информация), ВидИнформации); КонецФункции -// Возвращает флаг того, что переданный адрес - российский. -// -// Параметры: -// Адрес - Структура, Строка - Контактная информация адреса в виде структуры или строки JSON. -// -// Возвращаемое значение: -// Булево - результат проверки. -// Функция ЭтоНациональныйАдрес(Знач Адрес) Экспорт Если НЕ ЗначениеЗаполнено(Адрес) Тогда @@ -1025,18 +1063,6 @@ КонецФункции -// Формирует представление для адреса по правилу: -// 1) Страна, если надо. -// 2) Индекс, субъект рф, округ, район, город, внутригородской район, населенный пункт, улица. -// 3) Здания, помещения. -// -// Параметры: -// Адрес - Структура - Адрес с разбивкой по полям. -// ВидИнформации - Структура - Описание вида контактной информации. -// -// Возвращаемое значение: -// Строка - Представление адреса. -// Функция ПредставлениеАдреса(Знач Адрес, Знач ВидИнформации) Если ТипЗнч(ВидИнформации) = Тип("Структура") И ВидИнформации.Свойство("ВключатьСтрануВПредставление") Тогда @@ -1056,11 +1082,9 @@ Возврат Адрес.Value; Иначе - // Это иностранный адрес Представление = СокрЛП(Адрес); Если СтрЧислоВхождений(Представление, ",") = 9 Тогда - // Удаляем пустые значения и страну. ПредставлениеМассивом = СтрРазделить(Представление, ",", Ложь); Если ПредставлениеМассивом.Количество() > 0 Тогда Для Индекс = 0 По ПредставлениеМассивом.ВГраница() Цикл @@ -1102,14 +1126,6 @@ КонецФункции -// Конструктор структуры, совместимой по полям со справочником видов контактной информации. -// -// Параметры: -// Источник - СправочникСсылка.ВидыКонтактнойИнформации - необязательный источник данных для заполнения. -// -// Возвращаемое значение: -// Структура - совместимая по полям со справочникам видов контактной информации. -// Функция СтруктураВидаКонтактнойИнформации(Знач Источник = Неопределено) Экспорт МетаданныеРеквизитов = Метаданные.Справочники.ВидыКонтактнойИнформации.Реквизиты; @@ -1154,11 +1170,6 @@ КонецФункции -// Обновляет агрегатное поле ВидДляСписка контактной информацию у объекта. -// -// Параметры: -// Объект - СправочникОбъект - Объект с табличной часть КонтактнаяИнформация. -// Процедура ОбновитьКонтактнуюИнформациюДляСписковДляОбъекта(Объект) Экспорт КонтактнаяИнформация = Объект.КонтактнаяИнформация; @@ -1179,6 +1190,7 @@ Запрос = Новый Запрос("ВЫБРАТЬ | КонтактнаяИнформация.Представление КАК Представление, + | КонтактнаяИнформация.НомерСтроки КАК НомерСтроки, | КонтактнаяИнформация.Вид КАК Вид" + ?(КолонкаДействуетСОтсутствует, "", ", КонтактнаяИнформация.ДействуетС КАК ДействуетС") + " |ПОМЕСТИТЬ КонтактнаяИнформация |ИЗ @@ -1189,13 +1201,19 @@ Запрос.Текст = Запрос.Текст + "ВЫБРАТЬ | КонтактнаяИнформация.Представление КАК Представление, | КонтактнаяИнформация.Вид КАК Вид, + | КонтактнаяИнформация.НомерСтроки КАК НомерСтроки, | КОЛИЧЕСТВО(КонтактнаяИнформация.Вид) КАК Количество |ИЗ | КонтактнаяИнформация КАК КонтактнаяИнформация | |СГРУППИРОВАТЬ ПО | КонтактнаяИнформация.Вид, - | КонтактнаяИнформация.Представление ИТОГИ ПО Вид"; + | КонтактнаяИнформация.НомерСтроки, + | КонтактнаяИнформация.Представление + |УПОРЯДОЧИТЬ ПО + | НомерСтроки + |ИТОГИ ПО + | Вид"; Иначе Запрос.Текст = Запрос.Текст + "ВЫБРАТЬ | КонтактнаяИнформация.Вид КАК Вид, @@ -1213,6 +1231,7 @@ | КонтактнаяИнформация.Представление КАК Представление, | КонтактнаяИнформация.Вид КАК Вид, | КонтактнаяИнформация.ДействуетС КАК ДействуетС, + | ЕСТЬNULL(КонтактнаяИнформация.НомерСтроки, 0) КАК НомерСтроки, | КОЛИЧЕСТВО(КонтактнаяИнформация.Вид) КАК Количество |ИЗ | АктуальнаяКонтактнаяИнформация КАК АктуальнаяКонтактнаяИнформация @@ -1223,12 +1242,15 @@ |СГРУППИРОВАТЬ ПО | КонтактнаяИнформация.Вид, | КонтактнаяИнформация.Представление, - | КонтактнаяИнформация.ДействуетС + | КонтактнаяИнформация.ДействуетС, + | КонтактнаяИнформация.НомерСтроки + |УПОРЯДОЧИТЬ ПО + | НомерСтроки |ИТОГИ ПО - | Вид, ДействуетС"; + | Вид, ДействуетС"; КонецЕсли; - Запрос.УстановитьПараметр("КонтактнаяИнформация", КонтактнаяИнформация); + Запрос.УстановитьПараметр("КонтактнаяИнформация", КонтактнаяИнформация.Выгрузить()); РезультатЗапроса = Запрос.Выполнить(); ВыборкаВид = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); @@ -1256,7 +1278,7 @@ Для каждого СтрокаСКонтактнойИнформацией Из НайденныеСтроки Цикл СтрокаСКонтактнойИнформацией.ВидДляСписка = Неопределено; КонецЦикла; - + ЭлементыКонтактнойИнформации = Новый Массив; Пока ВыборкаДетальныеЗаписи.Следующий() Цикл Если ЗначениеЗаполнено(ВыборкаДетальныеЗаписи.Представление) Тогда @@ -1271,8 +1293,6 @@ КонецПроцедуры -// Обновляет агрегатное поле ВидДляСписка в табличных частях КонтактнаяИнформация у всех объекта. -// Процедура ОбновитьКонтактнуюИнформациюДляСписков() Экспорт ОбъектыСКолонкойВидДляСписка = ОбъектыСодержащиеВидДляСписка(); @@ -1399,15 +1419,6 @@ КонецФункции -// Проверяет корректность параметров вида контактной информации. -// -// Параметры: -// ВидКонтактнойИнформации - СправочникСсылка.ВидыКонтактнойИнформации - Проверяемый вид контактной информации. -// -// Возвращаемое значение: -// Структура - Результат проверки вида контактной информации. -// * ЕстьОшибки - Булево - признак наличия ошибок в виде контактной информации. -// * ТекстОшибки - Строка - информация об ошибке. Функция ПроверитьПараметрыВидаКонтактнойИнформации(ВидКонтактнойИнформации) Экспорт Результат = Новый Структура("ЕстьОшибки, ТекстОшибки", Ложь, ""); @@ -1461,30 +1472,509 @@ Возврат Результат; КонецФункции -// Возвращает флаг возможности добавления и изменения элементов. -// Функция ЕстьПравоДобавления() Экспорт Возврат ПравоДоступа("Добавление", Метаданные.Справочники.СтраныМира); КонецФункции -#КонецОбласти +Процедура ДобавитьКонтактнуюИнформациюДляСсылки(Ссылка, ЗначениеИлиПредставление, ВидКонтактнойИнформации, Дата = Неопределено, Замещать = Истина) Экспорт + + ОбъектМетаданных = Метаданные.НайтиПоТипу(ТипЗнч(Ссылка)); + + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить(ОбъектМетаданных.ПолноеИмя()); + ЭлементБлокировки.УстановитьЗначение("Ссылка", Ссылка); + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; + + НачатьТранзакцию(); + Попытка + + Блокировка.Заблокировать(); + Объект = Ссылка.ПолучитьОбъект(); + Объект.Заблокировать(); + ДобавитьКонтактнуюИнформацию(Объект, ЗначениеИлиПредставление, ВидКонтактнойИнформации, Дата, Замещать); + + Объект.Записать(); + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры -// Для обратной совместимости. +Процедура ДобавитьКонтактнуюИнформацию(Объект, ЗначениеИлиПредставление, ВидКонтактнойИнформации, Знач Дата, Знач Замещать) Экспорт + + КонтактнаяИнформация = Объект.КонтактнаяИнформация; + ЭтоКонтактнаяИнформацияВXML = УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(ЗначениеИлиПредставление); + ЭтоКонтактнаяИнформацияВJSON = УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВJSON(ЗначениеИлиПредставление); + ЭтоКонтактнаяИнформацияВСтруктуреJSON = ТипЗнч(ЗначениеИлиПредставление) = Тип("Структура"); + СвойстваВидаКонтактнойИнформации = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ВидКонтактнойИнформации, "Тип, ХранитьИсториюИзменений"); + + МетаданныеОбъекта = Метаданные.НайтиПоТипу(ТипЗнч(Объект)); + Если МетаданныеОбъекта = Неопределено + Или МетаданныеОбъекта.ТабличныеЧасти.Найти("КонтактнаяИнформация") = Неопределено Тогда + ВызватьИсключение НСтр("ru = 'Добавление контактной информации невозможно, у объекта нет таблицы с контактной информацией.'");; + КонецЕсли; + + Если ЭтоКонтактнаяИнформацияВСтруктуреJSON Тогда + + ОбъектКонтактнойИнформации = ЗначениеИлиПредставление; + Значение = СтруктураВСтрокуJSON(ЗначениеИлиПредставление); + ЗначенияПолей = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияВXML(Значение); + Представление = ОбъектКонтактнойИнформации.Value; + + Иначе + + Если ЭтоКонтактнаяИнформацияВXML Тогда + + ЗначенияПолей = ЗначениеИлиПредставление; + Значение = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияВJSON(ЗначениеИлиПредставление, СвойстваВидаКонтактнойИнформации.Тип); + ОбъектКонтактнойИнформации = JSONВКонтактнуюИнформациюПоПолям(Значение, СвойстваВидаКонтактнойИнформации.Тип); + Представление = ОбъектКонтактнойИнформации.Value; + + ИначеЕсли ЭтоКонтактнаяИнформацияВJSON Тогда + + Значение = ЗначениеИлиПредставление; + ЗначенияПолей = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияВXML(Значение,, СвойстваВидаКонтактнойИнформации.Тип); + ОбъектКонтактнойИнформации = JSONВКонтактнуюИнформациюПоПолям(Значение, СвойстваВидаКонтактнойИнформации.Тип); + Представление = ПредставлениеКонтактнойИнформации(ЗначениеИлиПредставление, ВидКонтактнойИнформации); + + Иначе + ОбъектКонтактнойИнформации = КонтактнаяИнформацияПоПредставлению(ЗначениеИлиПредставление, СвойстваВидаКонтактнойИнформации.Тип); + Значение = СтруктураВСтрокуJSON(ОбъектКонтактнойИнформации); + ЗначенияПолей = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияВXML(Значение); + Представление = ЗначениеИлиПредставление; + + КонецЕсли; + + КонецЕсли; + + Если Замещать Тогда + НайденныеСтроки = НайтиСтрокиКонтактнойИнформации(ВидКонтактнойИнформации, Дата, КонтактнаяИнформация); + Для Каждого СтрокаТабличнойЧасти Из НайденныеСтроки Цикл + КонтактнаяИнформация.Удалить(СтрокаТабличнойЧасти); + КонецЦикла; + СтрокаКонтактнойИнформации = КонтактнаяИнформация.Добавить(); + Иначе + Если ЗапрещенВводНесколькихЗначений(ВидКонтактнойИнформации, КонтактнаяИнформация, Дата) Тогда + Если ЭтоКонтактнаяИнформацияВXML Тогда + СтрокаКонтактнойИнформации = Объект.КонтактнаяИнформация.Найти(ЗначениеИлиПредставление, "ЗначенияПолей"); + ИначеЕсли ЭтоКонтактнаяИнформацияВJSON Тогда + СтрокаКонтактнойИнформации = Объект.КонтактнаяИнформация.Найти(ЗначениеИлиПредставление, "Значение"); + Иначе + СтрокаКонтактнойИнформации = Объект.КонтактнаяИнформация.Найти(ЗначениеИлиПредставление, "Представление"); + КонецЕсли; + Если СтрокаКонтактнойИнформации <> Неопределено Тогда + Возврат; // Допускается только одно значение этого вида контактной информации. + КонецЕсли; + КонецЕсли; + СтрокаКонтактнойИнформации = КонтактнаяИнформация.Добавить(); + КонецЕсли; + + СтрокаКонтактнойИнформации.Значение = Значение; + СтрокаКонтактнойИнформации.Представление = Представление; + СтрокаКонтактнойИнформации.ЗначенияПолей = ЗначенияПолей; + СтрокаКонтактнойИнформации.Вид = ВидКонтактнойИнформации; + СтрокаКонтактнойИнформации.Тип = СвойстваВидаКонтактнойИнформации.Тип ; + Если СвойстваВидаКонтактнойИнформации.ХранитьИсториюИзменений И ЗначениеЗаполнено(Дата) Тогда + СтрокаКонтактнойИнформации.ДействуетС = Дата; + КонецЕсли; + + ЗаполнитьТехническиеПоляКонтактнойИнформации(СтрокаКонтактнойИнформации, ОбъектКонтактнойИнформации, СвойстваВидаКонтактнойИнформации.Тип); + +КонецПроцедуры + +Процедура УстановитьКонтактнуюИнформациюОбъекта(Объект, КонтактнаяИнформация, ОбъектМетаданных, Знач Замещать) Экспорт + + Периодическая = ОбъектМетаданных.ТабличныеЧасти.КонтактнаяИнформация.Реквизиты.Найти("ДействуетС") <> Неопределено; + БезИдентификатораТабличнойЧасти = ОбъектМетаданных.ТабличныеЧасти.КонтактнаяИнформация.Реквизиты.Найти("ИдентификаторСтрокиТабличнойЧасти") = Неопределено; + + Для каждого СтрокаКонтактнойИнформации Из КонтактнаяИнформация Цикл + УправлениеКонтактнойИнформацией.ВосстановитьПустыеЗначениеПредставление(СтрокаКонтактнойИнформации); + КонецЦикла; + + Если Замещать Тогда + + Для каждого СтрокаКонтактнойИнформацииОбъекта Из КонтактнаяИнформация Цикл + + ДатаОтбора = ?(Периодическая, СтрокаКонтактнойИнформацииОбъекта.Дата, Неопределено); + НайденныеСтроки = НайтиСтрокиКонтактнойИнформации(СтрокаКонтактнойИнформацииОбъекта.Вид, ДатаОтбора, Объект.КонтактнаяИнформация); + + Для каждого Строка Из НайденныеСтроки Цикл + Объект.КонтактнаяИнформация.Удалить(Строка); + КонецЦикла; + + КонецЦикла; + + КонецЕсли; + + Для каждого СтрокаКонтактнойИнформацииОбъекта Из КонтактнаяИнформация Цикл + + ХранитьИсториюИзменений = Периодическая И СтрокаКонтактнойИнформацииОбъекта.Вид.ХранитьИсториюИзменений; + + Если Замещать Тогда + + ИдентификаторСтрокиТабличнойЧасти = ?(БезИдентификатораТабличнойЧасти, Неопределено, СтрокаКонтактнойИнформацииОбъекта.ИдентификаторСтрокиТабличнойЧасти); + Если ЗапрещенВводНесколькихЗначений(СтрокаКонтактнойИнформацииОбъекта.Вид, Объект.КонтактнаяИнформация, СтрокаКонтактнойИнформацииОбъекта.Дата, ИдентификаторСтрокиТабличнойЧасти) Тогда + Продолжить; + КонецЕсли; + СтрокаКонтактнойИнформации = Объект.КонтактнаяИнформация.Добавить(); + + Иначе + + Отбор = Новый Структура(); + Отбор.Вставить("Вид", СтрокаКонтактнойИнформацииОбъекта.Вид); + + Если ХранитьИсториюИзменений Тогда + Отбор.Вставить("ДействуетС", СтрокаКонтактнойИнформацииОбъекта.Дата); + НайденныеСтроки = Объект.КонтактнаяИнформация.НайтиСтроки(Отбор); + ИначеЕсли ЗначениеЗаполнено(СтрокаКонтактнойИнформацииОбъекта.Значение) Тогда + Отбор.Вставить("Значение", СтрокаКонтактнойИнформацииОбъекта.Значение); + НайденныеСтроки = Объект.КонтактнаяИнформация.НайтиСтроки(Отбор); + Иначе + Отбор.Вставить("ЗначенияПолей", СтрокаКонтактнойИнформацииОбъекта.ЗначенияПолей); + НайденныеСтроки = Объект.КонтактнаяИнформация.НайтиСтроки(Отбор); + КонецЕсли; + + Если НЕ ХранитьИсториюИзменений + И ЗапрещенВводНесколькихЗначений(СтрокаКонтактнойИнформацииОбъекта.Вид, Объект.КонтактнаяИнформация, СтрокаКонтактнойИнформацииОбъекта.Дата) + ИЛИ НайденныеСтроки.Количество() > 0 Тогда + Продолжить; + КонецЕсли; + + СтрокаКонтактнойИнформации = Объект.КонтактнаяИнформация.Добавить(); + + КонецЕсли; + + ЗаполнитьКонтактнуюИнформациюОбъектаИзСтроки(СтрокаКонтактнойИнформацииОбъекта, ХранитьИсториюИзменений, СтрокаКонтактнойИнформации); + + КонецЦикла; + +КонецПроцедуры + +Процедура УстановитьКонтактнуюИнформациюОбъектаДляСсылки(Ссылка, Знач КонтактнаяИнформация, ОбъектМетаданных, Замещать = Истина) Экспорт + + Если КонтактнаяИнформация.Количество() = 0 И Не Замещать Тогда + Возврат; + КонецЕсли; + + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить(ОбъектМетаданных.ПолноеИмя()); + ЭлементБлокировки.УстановитьЗначение("Ссылка", Ссылка); + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; + + НачатьТранзакцию(); + Попытка + + Блокировка.Заблокировать(); + Объект = Ссылка.ПолучитьОбъект(); + Объект.Заблокировать(); + + Если КонтактнаяИнформация.Количество() = 0 Тогда + // Очистка контактной информации пустой таблицей. + Объект.КонтактнаяИнформация.Очистить(); + Иначе + УстановитьКонтактнуюИнформациюОбъекта(Объект, КонтактнаяИнформация, ОбъектМетаданных, Замещать); + КонецЕсли; + + Объект.Записать(); + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +Процедура УстановитьКонтактнуюИнформациюОбъектовДляСсылки(ВладелецКонтактнойИнформации, СтрокиКонтактнойИнформацииОбъекта, Знач Замещать) Экспорт + + Ссылка = ВладелецКонтактнойИнформации.Ключ; + ОбъектМетаданных = Метаданные.НайтиПоТипу(ТипЗнч(Ссылка)); + + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить(ОбъектМетаданных.ПолноеИмя()); + ЭлементБлокировки.УстановитьЗначение("Ссылка", Ссылка); + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; + + НачатьТранзакцию(); + Попытка + + Блокировка.Заблокировать(); + Объект = Ссылка.ПолучитьОбъект(); + Объект.Заблокировать(); + + УстановитьКонтактнуюИнформациюОбъектов(ВладелецКонтактнойИнформации, Объект, СтрокиКонтактнойИнформацииОбъекта, Замещать); + + Объект.Записать(); + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +Процедура УстановитьКонтактнуюИнформациюОбъектов(ВладелецКонтактнойИнформации, Объект, Знач СтрокиКонтактнойИнформацииОбъекта, Знач Замещать) Экспорт + + Если Замещать Тогда + Объект.КонтактнаяИнформация.Очистить(); + КонецЕсли; + + Для каждого СтрокаКонтактнойИнформацииОбъекта Из СтрокиКонтактнойИнформацииОбъекта Цикл + + ХранитьИсториюИзменений = ВладелецКонтактнойИнформации.Значение["Периодическая"] И СтрокаКонтактнойИнформацииОбъекта.Вид.ХранитьИсториюИзменений; + + Если Замещать Тогда + + Если ЗапрещенВводНесколькихЗначений(СтрокаКонтактнойИнформацииОбъекта.Вид, Объект.КонтактнаяИнформация, СтрокаКонтактнойИнформацииОбъекта.Дата) Тогда + Продолжить; + КонецЕсли; + СтрокаКонтактнойИнформации = Объект.КонтактнаяИнформация.Добавить(); + + Иначе + + Отбор = Новый Структура(); + Отбор.Вставить("Вид", СтрокаКонтактнойИнформацииОбъекта.Вид); + + Если ХранитьИсториюИзменений Тогда + Отбор.Вставить("ДействуетС", СтрокаКонтактнойИнформацииОбъекта.Дата); + НайденныеСтроки = Объект.КонтактнаяИнформация.НайтиСтроки(Отбор); + ИначеЕсли ЗначениеЗаполнено(СтрокаКонтактнойИнформацииОбъекта.Значение) Тогда + Отбор.Вставить("Значение", СтрокаКонтактнойИнформацииОбъекта.Значение); + НайденныеСтроки = Объект.КонтактнаяИнформация.НайтиСтроки(Отбор); + Иначе + Отбор.Вставить("ЗначенияПолей", СтрокаКонтактнойИнформацииОбъекта.ЗначенияПолей); + НайденныеСтроки = Объект.КонтактнаяИнформация.НайтиСтроки(Отбор); + КонецЕсли; + + Если НЕ ХранитьИсториюИзменений + И ЗапрещенВводНесколькихЗначений(СтрокаКонтактнойИнформацииОбъекта.Вид, Объект.КонтактнаяИнформация, СтрокаКонтактнойИнформацииОбъекта.Дата) + ИЛИ НайденныеСтроки.Количество() > 0 Тогда + Продолжить; + КонецЕсли; + + СтрокаКонтактнойИнформации = Объект.КонтактнаяИнформация.Добавить(); + КонецЕсли; + + ЗаполнитьКонтактнуюИнформациюОбъектаИзСтроки(СтрокаКонтактнойИнформацииОбъекта, ХранитьИсториюИзменений, СтрокаКонтактнойИнформации); + КонецЦикла; + +КонецПроцедуры + +Функция ЗапрещенВводНесколькихЗначений(ВидКонтактнойИнформации, КонтактнаяИнформация, Дата, ИдентификаторСтрокиТабличнойЧасти = Неопределено) + + Если ВидКонтактнойИнформации.РазрешитьВводНесколькихЗначений Тогда + Возврат Ложь; + КонецЕсли; + + Отбор = Новый Структура("Вид", ВидКонтактнойИнформации); + + Если ИдентификаторСтрокиТабличнойЧасти <> Неопределено Тогда + Отбор.Вставить("ИдентификаторСтрокиТабличнойЧасти", ИдентификаторСтрокиТабличнойЧасти); + КонецЕсли; + + Если ВидКонтактнойИнформации.ХранитьИсториюИзменений Тогда + Отбор.Вставить("ДействуетС", Дата); + КонецЕсли; + + НайденныеСтроки = КонтактнаяИнформация.НайтиСтроки(Отбор); + Возврат НайденныеСтроки.Количество() > 0; + +КонецФункции + +Процедура ЗаполнитьТехническиеПоляКонтактнойИнформации(СтрокаКонтактнойИнформации, Объект, ТипКонтактнойИнформации) Экспорт + + // Заполнение дополнительных реквизитов ТЧ. + Если ТипКонтактнойИнформации = Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты Тогда + ЗаполнитьРеквизитыТабличнойЧастиДляАдресаЭлектроннойПочты(СтрокаКонтактнойИнформации, Объект); + + ИначеЕсли ТипКонтактнойИнформации = Перечисления.ТипыКонтактнойИнформации.Адрес Тогда + ЗаполнитьРеквизитыТабличнойЧастиДляАдреса(СтрокаКонтактнойИнформации, Объект); + + ИначеЕсли ТипКонтактнойИнформации = Перечисления.ТипыКонтактнойИнформации.Телефон Тогда + ЗаполнитьРеквизитыТабличнойЧастиДляТелефона(СтрокаКонтактнойИнформации, Объект); + + ИначеЕсли ТипКонтактнойИнформации = Перечисления.ТипыКонтактнойИнформации.Факс Тогда + ЗаполнитьРеквизитыТабличнойЧастиДляТелефона(СтрокаКонтактнойИнформации, Объект); + + ИначеЕсли ТипКонтактнойИнформации = Перечисления.ТипыКонтактнойИнформации.ВебСтраница Тогда + ЗаполнитьРеквизитыТабличнойЧастиДляВебСтраницы(СтрокаКонтактнойИнформации, Объект); + КонецЕсли; + +КонецПроцедуры + +Функция НайтиСтрокиКонтактнойИнформации(ВидКонтактнойИнформации, Дата, КонтактнаяИнформация) + + Отбор = Новый Структура("Вид", ВидКонтактнойИнформации); + Если ВидКонтактнойИнформации.ХранитьИсториюИзменений Тогда + Отбор.Вставить("ДействуетС", Дата); + КонецЕсли; + НайденныеСтроки = КонтактнаяИнформация.НайтиСтроки(Отбор); + Возврат НайденныеСтроки; + +КонецФункции + +Процедура ЗаполнитьКонтактнуюИнформациюОбъектаИзСтроки(СтрокаКонтактнойИнформацииОбъекта, Периодическая, СтрокаКонтактнойИнформации) + + ЗаполнитьЗначенияСвойств(СтрокаКонтактнойИнформации, СтрокаКонтактнойИнформацииОбъекта); + Если Периодическая Тогда + СтрокаКонтактнойИнформации.ДействуетС = СтрокаКонтактнойИнформацииОбъекта.Дата; + КонецЕсли; + + Если ЗначениеЗаполнено(СтрокаКонтактнойИнформации.Значение) Тогда + ОбъектКонтактнойИнформации = JSONВКонтактнуюИнформациюПоПолям(СтрокаКонтактнойИнформации.Значение, СтрокаКонтактнойИнформацииОбъекта.Тип); + ЗаполнитьТехническиеПоляКонтактнойИнформации(СтрокаКонтактнойИнформации, ОбъектКонтактнойИнформации, СтрокаКонтактнойИнформацииОбъекта.Тип); + КонецЕсли; + +КонецПроцедуры + +// Заполняет дополнительные реквизиты табличной части "Контактная информация" для адреса. +// +// Параметры: +// СтрокаТабличнойЧасти - СтрокаТабличнойЧасти - заполняемая строка табличной части "Контактная информация". +// Источник - ОбъектXDTO - контактная информация. +// +Процедура ЗаполнитьРеквизитыТабличнойЧастиДляАдреса(СтрокаТабличнойЧасти, Адрес) + + // Умолчания + СтрокаТабличнойЧасти.Страна = ""; + СтрокаТабличнойЧасти.Регион = ""; + СтрокаТабличнойЧасти.Город = ""; + + Если Адрес.Свойство("Country") Тогда + СтрокаТабличнойЧасти.Страна = Адрес.Country; + + Если Метаданные.Обработки.Найти("РасширенныйВводКонтактнойИнформации") <> Неопределено Тогда + Обработки["РасширенныйВводКонтактнойИнформации"].ЗаполнитьРасширенныеРеквизитыТабличнойЧастиДляАдреса(Адрес, СтрокаТабличнойЧасти); + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +// Заполняет дополнительные реквизиты табличной части "Контактная информация" для адреса электронной почты. +// +// Параметры: +// СтрокаТабличнойЧасти - СтрокаТабличнойЧасти - заполняемая строка табличной части "Контактная информация". +// Источник - ОбъектXDTO - контактная информация. +// +Процедура ЗаполнитьРеквизитыТабличнойЧастиДляАдресаЭлектроннойПочты(СтрокаТабличнойЧасти, Источник) + + Результат = ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(СтрокаТабличнойЧасти.Представление, Ложь); + + Если Результат.Количество() > 0 Тогда + СтрокаТабличнойЧасти.АдресЭП = Результат[0].Адрес; + + Поз = СтрНайти(СтрокаТабличнойЧасти.АдресЭП, "@"); + Если Поз <> 0 Тогда + СтрокаТабличнойЧасти.ДоменноеИмяСервера = Сред(СтрокаТабличнойЧасти.АдресЭП, Поз+1); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +// Заполняет дополнительные реквизиты табличной части "Контактная информация" для телефона и факса. +// +// Параметры: +// СтрокаТабличнойЧасти - СтрокаТабличнойЧасти - заполняемая строка табличной части "Контактная информация". +// Источник - ОбъектXDTO - контактная информация. +// +Процедура ЗаполнитьРеквизитыТабличнойЧастиДляТелефона(СтрокаТабличнойЧасти, Телефон) + + Если НЕ ЗначениеЗаполнено(Телефон) Тогда + Возврат; + КонецЕсли; + + // Умолчания + СтрокаТабличнойЧасти.НомерТелефонаБезКодов = ""; + СтрокаТабличнойЧасти.НомерТелефона = ""; + + КодСтраны = Телефон.CountryCode; + КодГорода = Телефон.AreaCode; + НомерТелефона = Телефон.Number; + + Если СтрНачинаетсяС(КодСтраны, "+") Тогда + КодСтраны = Сред(КодСтраны, 2); + КонецЕсли; + + Поз = СтрНайти(НомерТелефона, ","); + Если Поз <> 0 Тогда + НомерТелефона = Лев(НомерТелефона, Поз-1); + КонецЕсли; + + Поз = СтрНайти(НомерТелефона, Символы.ПС); + Если Поз <> 0 Тогда + НомерТелефона = Лев(НомерТелефона, Поз-1); + КонецЕсли; + + СтрокаТабличнойЧасти.НомерТелефонаБезКодов = УбратьРазделителиВНомерТелефона(НомерТелефона); + СтрокаТабличнойЧасти.НомерТелефона = УбратьРазделителиВНомерТелефона(Строка(КодСтраны) + КодГорода + НомерТелефона); + +КонецПроцедуры + +// Заполняет дополнительные реквизиты табличной части "Контактная информация" для телефона и факса. +// +// Параметры: +// СтрокаТабличнойЧасти - СтрокаТабличнойЧасти - заполняемая строка табличной части "Контактная информация". +// Источник - Структура, ОбъектXDTO - контактная информация. +// +Процедура ЗаполнитьРеквизитыТабличнойЧастиДляВебСтраницы(СтрокаТабличнойЧасти, Источник) + +// Умолчания + СтрокаТабличнойЧасти.ДоменноеИмяСервера = ""; + АдресСтраницы = ""; + + Если ТипЗнч(Источник) = Тип("Структура") Тогда + + Если Источник.Свойство("value") Тогда + АдресСтрокой = Источник.value; + КонецЕсли; + + Иначе + + АдресСтраницы = Источник.Состав; + ПространствоИмен = ПространствоИмен(); + Если АдресСтраницы <> Неопределено И АдресСтраницы.Тип() = ФабрикаXDTO.Тип(ПространствоИмен, "ВебСайт") Тогда + АдресСтрокой = АдресСтраницы.Значение; + КонецЕсли; + + КонецЕсли; + + // Удалим протокол + Позиция = СтрНайти(АдресСтрокой, "://"); + АдресСервера = ?(Позиция = 0, АдресСтрокой, Сред(АдресСтрокой, Позиция + 3)); + + СтрокаТабличнойЧасти.ДоменноеИмяСервера = АдресСервера; + +КонецПроцедуры + +// Убирает разделители в номере телефона. +// +// Параметры: +// НомерТелефона - Строка - номер телефона или факса. +// +// Возвращаемое значение: +// Строка - номер телефона или факса без разделителей. +// +Функция УбратьРазделителиВНомерТелефона(Знач НомерТелефона) + + Поз = СтрНайти(НомерТелефона, ","); + Если Поз <> 0 Тогда + НомерТелефона = Лев(НомерТелефона, Поз-1); + КонецЕсли; + + НомерТелефона = СтрЗаменить(НомерТелефона, "-", ""); + НомерТелефона = СтрЗаменить(НомерТелефона, " ", ""); + НомерТелефона = СтрЗаменить(НомерТелефона, "+", ""); + + Возврат НомерТелефона; + +КонецФункции + +#КонецОбласти #Область СлужебныеПроцедурыИФункцииДляСовместимости -// Преобразует XML в объект XDTO контактной информации. -// -// Параметры: -// Текст - Строка - строка XML контактной информации. -// ОжидаемыйВид - СправочникСсылка.ВидыКонтактнойИнформации, ПеречислениеСсылка.ТипыКонтактнойИнформации, Структура -// РезультатПреобразования - Структура - если задана, то в свойства записываются сведения: -// * ТекстОшибки - Строка - описание ошибок чтения. При этом возвращаемое значение функции будет -// корректного типа, но не заполнен. -// -// Возвращаемое значение: -// ОбъектXDTO - контактная информация, соответствующая XDTO-пакету КонтактнаяИнформация. -// Функция КонтактнаяИнформацияИзXML(Знач Текст, Знач ОжидаемыйВид = Неопределено, РезультатПреобразования = Неопределено, Знач Представление = "") Экспорт ОжидаемыйТип = УправлениеКонтактнойИнформациейСлужебныйПовтИсп.ТипВидаКонтактнойИнформации(ОжидаемыйВид); @@ -1535,7 +2025,7 @@ КонецПопытки; Если НеобходимоВосстановитьКонтактнуюИнформацию Тогда - ОписаниеПричиныОшибки = НСтр("ru='Сведения контактной информации были восстановлены после сбоя.'"); + ОписаниеПричиныОшибки = НСтр("ru = 'Сведения контактной информации были восстановлены после сбоя.'"); Если ЗначениеЗаполнено(Представление) Тогда Результат = КонтактнаяИнформацияXDTOПоПредставлению(Представление, ОжидаемыйВид); Если СтрСравнить(Результат.Представление, Представление) <> 0 Тогда @@ -1556,28 +2046,28 @@ Если ТекстОшибки = Неопределено И ОжидаемыйТип <> Неопределено Тогда Если Результат = Неопределено Тогда - ТекстОшибки = СтрЗаменить(НСтр("ru='Сведения контактной информации %ОжидаемыйВид% были повреждены или некорректно заполнены.'"), + ТекстОшибки = СтрЗаменить(НСтр("ru = 'Сведения контактной информации %ОжидаемыйВид% были повреждены или некорректно заполнены.'"), "%ОжидаемыйВид%", Строка(ОжидаемыйВид)); Иначе // Контролируем соответствие типов. НайденТип = ?(Результат.Состав = Неопределено, Неопределено, Результат.Состав.Тип()); - ШаблонСообщения = СтрЗаменить(НСтр("ru='Сведения %1 контактной информации %ОжидаемыйВид% были повреждены или некорректно заполнены.'"), + ШаблонСообщения = СтрЗаменить(НСтр("ru = 'Сведения %1 контактной информации %ОжидаемыйВид% были повреждены или некорректно заполнены.'"), "%ОжидаемыйВид%", Строка(ОжидаемыйВид)); Если ОжидаемыйТип = ПеречислениеАдрес И НайденТип <> ФабрикаXDTO.Тип(ПространствоИмен, "Адрес") Тогда - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, НСтр("ru='об адресе'")); + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, НСтр("ru = 'об адресе'")); ИначеЕсли ОжидаемыйТип = ПеречислениеАдресЭлектроннойПочты И НайденТип <> ФабрикаXDTO.Тип(ПространствоИмен, "ЭлектроннаяПочта") Тогда - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, НСтр("ru='электронной почты'")); + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, НСтр("ru = 'электронной почты'")); ИначеЕсли ОжидаемыйТип = ПеречислениеВебСтраница И НайденТип <> ФабрикаXDTO.Тип(ПространствоИмен, "ВебСайт") Тогда - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, НСтр("ru='веб-страницы'")); + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, НСтр("ru = 'веб-страницы'")); ИначеЕсли ОжидаемыйТип = ПеречислениеТелефон И НайденТип <> ФабрикаXDTO.Тип(ПространствоИмен, "НомерТелефона") Тогда - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, НСтр("ru='о номере телефона'")); + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, НСтр("ru = 'о номере телефона'")); ИначеЕсли ОжидаемыйТип = ПеречислениеФакс И НайденТип <> ФабрикаXDTO.Тип(ПространствоИмен, "НомерФакса") Тогда - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, НСтр("ru='о номере факса'")); + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, НСтр("ru = 'о номере факса'")); ИначеЕсли ОжидаемыйТип = ПеречислениеSkype И НайденТип <> ФабрикаXDTO.Тип(ПространствоИмен, "Skype") Тогда - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, НСтр("ru='о логине Skype'")); + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, НСтр("ru = 'о логине Skype'")); ИначеЕсли ОжидаемыйТип = ПеречислениеДругое И НайденТип <> ФабрикаXDTO.Тип(ПространствоИмен, "Прочее") Тогда - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, НСтр("ru='о дополнительной'")); + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, НСтр("ru = 'о дополнительной'")); КонецЕсли; КонецЕсли; КонецЕсли; @@ -1694,14 +2184,6 @@ КонецФункции -// Возвращает флаг того, что переданных объект КИ содержит данные. -// -// Параметры: -// КонтактнаяИнформация - Структура - проверяемые данные контактной информации. -// -// Возвращаемое значение: -// Булево - флаг наличия данных. -// Функция КонтактнаяИнформацияЗаполнена(Знач КонтактнаяИнформация) Экспорт Возврат ЕстьЗаполненныеСвойстваКонтактнойИнформации(КонтактнаяИнформация); @@ -1778,7 +2260,7 @@ Данные = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "НомерТелефона")); Иначе - ВызватьИсключение НСтр("ru='Ошибка десериализации контактной информации, ожидается телефон или факс'"); + ВызватьИсключение НСтр("ru = 'Ошибка десериализации контактной информации, ожидается телефон или факс'"); КонецЕсли; Результат = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "КонтактнаяИнформация")); @@ -1843,7 +2325,7 @@ Если СтрНачинаетсяС(Добавочный, ",") Тогда Добавочный = СокрЛ(Сред(Добавочный, 2)); КонецЕсли; - Если ВРег(Лев(Добавочный, СтрДлина("ДОБ")))= "ДОБ" Тогда + Если СтрНачинаетсяС(ВРег(Добавочный), "ДОБ") Тогда Добавочный = СокрЛ(Сред(Добавочный, СтрДлина("ДОБ") + 1)); КонецЕсли; Если ВРег(Лев(Добавочный, 1 ))= "." Тогда @@ -1870,14 +2352,6 @@ Возврат Результат; КонецФункции -// Возвращает список значений. Преобразует строку полей в список значений. -// -// Параметры: -// СтрокаПолей - Строка - строка полей. -// -// Возвращаемое значение: -// СписокЗначений - список значений полей. -// Функция ПреобразоватьСтрокуВСписокПолей(СтрокаПолей) Экспорт // XML сериализацию преобразовывать не надо. @@ -1896,16 +2370,6 @@ КонецФункции -// Преобразует строку полей вида ключ = значение в структуру. -// -// Параметры: -// СтрокаПолей - Строка - строка полей с данными в виде ключ = значение. -// ВидКонтактнойИнформации - СправочникСсылка.ВидыКонтактнойИнформации - для определения состава незаполненных -// полей. -// -// Возвращаемое значение: -// Структура - значения полей. -// Функция СтруктураЗначенийПолей(СтрокаПолей, ВидКонтактнойИнформации = Неопределено) Экспорт Если ВидКонтактнойИнформации = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Адрес") Тогда @@ -1944,14 +2408,6 @@ Возврат Результат; КонецФункции -// Получает сокращение географического названия объекта. -// -// Параметры: -// ГеографическоеНазвание - Строка - географическое название объекта. -// -// Возвращаемое значение: -// Строка - пустая строка или последнее слово в географическом названии. -// Функция АдресноеСокращение(Знач ГеографическоеНазвание) Сокращение = ""; @@ -2059,8 +2515,6 @@ Возврат Данные; КонецФункции -// Возвращает первую подстроку из цифр в строке. Параметр ПозицияНачала изменяется на первую не цифру. -// Функция НайтиПодстрокуЦифр(Текст, ПозицияНачала = Неопределено, ДопустимоКромеЦифр = "") Если ПозицияНачала = Неопределено Тогда @@ -2134,28 +2588,10 @@ #Область СлужебныеПроцедурыИФункцииПоРаботеСXML -// Возвращает соответствующее значение перечисления "ТипыКонтактнойИнформации" по строке XML. -// -// Параметры: -// XMLСтрока - Строка, описывающая контактную информацию. -// -// Возвращаемое значение: -// ПеречислениеСсылка.ТипыКонтактнойИнформации - результат. -// Функция ТипКонтактнойИнформации(Знач XMLСтрока) Экспорт Возврат ЗначениеИзСтрокиXML(XSLT_ТипКонтактнойИнформацииПоСтрокеXML(XMLСтрока)); КонецФункции -// Читает строку состава из значения контактной информации. -// Если значение состава сложного типа, то возвращает неопределено. -// -// Параметры: -// Текст Строка - XML строка контактной информации. Может быть модифицирован. -// -// Возвращаемое значение: -// Строка - XML значение состава. -// Неопределено - Свойство "Состав" не найдено. -// Функция СтрокаСоставаКонтактнойИнформации(Знач Текст, Знач НовоеЗначение = Неопределено) Экспорт Чтение = Новый ЧтениеXML; Чтение.УстановитьСтроку(Текст); @@ -2172,30 +2608,6 @@ Возврат Неопределено; КонецФункции -// Сравнивает два экземпляра контактной информации. -// -// Параметры: -// Данные1 - ОбъектXTDO - объект с контактной информацией. -// - Строка - контактная информация в формате XML. -// - Структура - описание контактной информацию. Ожидаются поля: -// * ЗначенияПолей - Строка, Структура, СписокЗначений, Соответствие - поля контактной информации. -// * Представление - Строка - Представление. Используется в случае, если не удалось вычислить -// представление из ЗначенияПолей (отсутствие в них поля Представление). -// * Комментарий - Строка - комментарий. Используется в случае, если не удалось вычислить комментарий -// из ЗначенияПолей. -// * ВидКонтактнойИнформации - СправочникСсылка.ВидыКонтактнойИнформации, -// ПеречислениеСсылка.ТипыКонтактнойИнформации, Структура - -// Используется в случае, если не удалось вычислить тип из ЗначенияПолей. -// Данные2 - ОбъектXTDO, Строка, Структура - аналогично Данные1. -// -// Возвращаемое значение: -// ТаблицаЗначений: - таблица отличающихся полей со следующими колонками: -// * Путь - Строка - XPath, идентифицирующий различающееся значение. Значение "ТипКонтактнойИнформации" -// означает, что переданные экземпляры контактной информации различаются типом. -// * Описание - Строка - описание отличающегося реквизита в терминах предметной области. -// * Значение1 - Строка - значение, соответствующая объекту, переданному в параметре Данные1. -// * Значение2 - Строка - значение, соответствующая объекту, переданному в параметре Данные2. -// Функция РазличияКонтактнойИнформации(Знач Данные1, Знач Данные2) Экспорт ДанныеКИ1 = ПривестиКонтактнуюИнформациюXML(Данные1); ДанныеКИ2 = ПривестиКонтактнуюИнформациюXML(Данные2); @@ -2221,26 +2633,6 @@ КонецФункции -// Преобразует контактную информацию в вид XML. -// -// Параметры: -// Данные - Строка - описание контактной информации XML или JSON. -// - ОбъектXTDO - описание контактной информации. -// - Структура - описание контактной информации. Ожидаются поля: -// * ЗначенияПолей - Строка, Структура, СписокЗначений, Соответствие - поля контактной информации. -// * Представление - Строка - Представление. Используется в случае, если не удалось вычислить -// представление из ЗначенияПолей (отсутствие в них поля Представление). -// * Комментарий - Строка - комментарий. Используется в случае, если не удалось вычислить комментарий -// из ЗначенияПолей. -// * ВидКонтактнойИнформации - СправочникСсылка.ВидыКонтактнойИнформации, -// ПеречислениеСсылка.ТипыКонтактнойИнформации, Структура -// Используется в случае, если не удалось вычислить тип из ЗначенияПолей. -// -// Возвращаемое значение: -// Структура - содержит поля: -// * ТипКонтактнойИнформации - Перечисление.ТипыКонтактнойИнформации -// * ДанныеXML - Строка - текст XML. -// Функция ПривестиКонтактнуюИнформациюXML(Знач Данные) Экспорт XMLСтрока = ""; @@ -2359,8 +2751,6 @@ Возврат Результат; КонецФункции -// Преобразует формат из XML в JSON -// Функция КонтактнаяИнформацияВСтруктуруJSON(КонтактнаяИнформация, Знач Тип = Неопределено, Представление = "", ОбновлятьИдентификаторы = Истина) Экспорт Если Тип <> Неопределено И ТипЗнч(Тип) <> Тип("ПеречислениеСсылка.ТипыКонтактнойИнформации") Тогда @@ -2498,19 +2888,6 @@ #Область СлужебныеПроцедурыИФункцииПоРаботеСXSLT -// Производит сравнение двух строк XML. -// Проверяются только строки и атрибуты, без пробельных, CDATA и т.п. Порядок важен. -// -// Параметры: -// Текст1 - Строка - Строка XML. -// Текст2 - Строка - Строка XML. -// -// Возвращаемое значение: -// Строка - сериализованый ValueTable (http://v8.1c.ru/8.1/data/core), в котором три колонки: -// * Путь - Строка - путь к месту различия. -// * Значение1 - Строка - значение в XML из параметра Текст1. -// * Значение2 - Строка - значение в XML из параметра Текст2. -// Функция XSLT_ТаблицаЗначенийРазличияXML(Текст1, Текст2) Преобразователь = ПреобразованиеXSLT_ТаблицаЗначенийРазличияXML(); @@ -2526,16 +2903,6 @@ КонецФункции -// Преобразует текст с парами Ключ = Значение, разделенных переносами строк (см формат адреса) в XML. -// В случае повторных ключей все включаются в результат, но при десериализации будет использован -// последний (особенность работы сериализатора платформы). -// -// Параметры: -// Текст - Строка - пары Ключ = Значение. -// -// Возвращаемое значение: -// Строка - XML сериализованной структуры. -// Функция XSLT_СтрокаКлючЗначениеВСтруктуру(Знач Текст) Преобразователь = ПреобразованиеXSLT_СтрокаКлючЗначениеВСтруктуру(); @@ -2543,14 +2910,6 @@ КонецФункции -// Преобразует список значений в структуру. Представление преобразуется в ключ. -// -// Параметры: -// Текст - Строка - сериализованная список значений. -// -// Возвращаемое значение: -// Строка - результат преобразования. -// Функция XSLT_СписокЗначенийВСтруктуру(Текст) Преобразователь = ПреобразованиеXSLT_СписокЗначенийВСтруктуру(); @@ -2558,14 +2917,6 @@ КонецФункции -// Преобразует соответствие в структуру. Ключ преобразуется в ключ, значение - в значение. -// -// Параметры: -// Текст - Строка - сериализованное соответствие. -// -// Возвращаемое значение: -// Строка - результат преобразования. -// Функция XSLT_СоответствиеВСтруктуру(Текст) Преобразователь = ПреобразованиеXSLT_СоответствиеВСтруктуру(); @@ -2573,15 +2924,6 @@ КонецФункции -// Анализирует таблицу Путь-Значение1-Значение2 для указанного вида контактной информации. -// -// Параметры: -// Текст - Строка - строка XML с ValueTable из результата сравнения XML. -// ТипКонтактнойИнформации - ПеречислениеСсылка.ТипыКонтактнойИнформации - значение перечисления типа. -// -// Возвращаемое значение: -// Строка - сериализованную таблицу значений отличающихся полей. -// Функция XSLT_ИнтерпретацияРазличияXMLКонтактнойИнформации(Знач Текст, Знач ТипКонтактнойИнформации) Преобразователь = ПреобразованиеXSLT_ИнтерпретацияРазличияXMLКонтактнойИнформации( @@ -2590,17 +2932,6 @@ КонецФункции -// Преобразует структуру в XML контактной информации. -// -// Параметры: -// Текст - Строка - сериализованная структура. -// Представление - Строка - необязательное представление. Используется, только если в структуре нет поля -// представления. -// Комментарий - Строка - необязательный комментарий. Используется, только если в структуре нет поля комментария. -// -// Возвращаемое значение: -// Строка - XML контактной информации. -// Функция XSLT_СтруктураВАдрес(Знач Текст, Знач Представление = Неопределено, Знач Комментарий = Неопределено) Преобразователь = ПреобразованиеXSLT_ПреобразованиеXSL(); @@ -2610,17 +2941,6 @@ КонецФункции -// Преобразует структуру в XML контактной информации. -// -// Параметры: -// Текст - Строка - сериализованная структура. -// Представление - Строка - необязательное представление. Используется, только если в структуре нет поля -// представления. -// Комментарий - Строка - необязательный комментарий. Используется, только если в структуре нет поля комментария. -// -// Возвращаемое значение: -// Строка - XML контактной информации. -// Функция XSLT_СтруктураВАдресЭлектроннойПочты(Знач Текст, Знач Представление = Неопределено, Знач Комментарий = Неопределено) Преобразователь = ПреобразованиеXSLT_СтруктураВАдресЭлектроннойПочты(); @@ -2630,17 +2950,6 @@ КонецФункции -// Преобразует структуру в XML контактной информации. -// -// Параметры: -// Текст - Строка - сериализованная структура. -// Представление - Строка - необязательное представление. Используется, только если в структуре нет поля -// представления. -// Комментарий - Строка - необязательный комментарий. Используется, только если в структуре нет поля комментария. -// -// Возвращаемое значение: -// Строка - XML контактной информации. -// Функция XSLT_СтруктураВВебСтраницу(Знач Текст, Знач Представление = Неопределено, Знач Комментарий = Неопределено) Преобразователь = ПреобразованиеXSLT_СтруктураВВебСтраницу(); @@ -2650,17 +2959,6 @@ КонецФункции -// Преобразует структуру в XML контактной информации. -// -// Параметры: -// Текст - Строка - сериализованная структура. -// Представление - Строка - необязательное представление. Используется, только если в структуре нет поля -// представления. -// Комментарий - Строка - необязательный комментарий. Используется, только если в структуре нет поля комментария. -// -// Возвращаемое значение: -// Строка - XML контактной информации. -// Функция XSLT_СтруктураВТелефон(Знач Текст, Знач Представление = Неопределено, Знач Комментарий = Неопределено) Преобразователь = ПреобразованиеXSLT_СтруктураВТелефон(); Возврат XSLT_КонтрольПредставленияИКомментария( @@ -2668,17 +2966,6 @@ Представление, Комментарий); КонецФункции -// Преобразует структуру в XML контактной информации. -// -// Параметры: -// Текст - Строка - сериализованная структура. -// Представление - Строка - необязательное представление. Используется, только если в структуре нет поля -// представления. -// Комментарий - Строка - необязательный комментарий. Используется, только если в структуре нет поля комментария. -// -// Возвращаемое значение: -// Строка - XML контактной информации. -// Функция XSLT_СтруктураВФакс(Знач Текст, Знач Представление = Неопределено, Знач Комментарий = Неопределено) Преобразователь = ПреобразованиеXSLT_СтруктураВФакс(); @@ -2688,17 +2975,6 @@ КонецФункции -// Преобразует структуру в XML контактной информации. -// -// Параметры: -// Текст - Строка - сериализованная структура. -// Представление - Строка - необязательное представление. Используется, только если в структуре нет поля -// представления. -// Комментарий - Строка - необязательный комментарий. Используется, только если в структуре нет поля комментария. -// -// Возвращаемое значение: -// Строка - XML контактной информации. -// Функция XSLT_СтруктураВДругое(Знач Текст, Знач Представление = Неопределено, Знач Комментарий = Неопределено) Преобразователь = ПреобразованиеXSLT_СтруктураВДругое(); @@ -2708,17 +2984,6 @@ КонецФункции -// Устанавливает в контактной информации представление и комментарий, если они не заполнены. -// -// Параметры: -// Текст - Строка - сериализованная структура. -// Представление - Строка - необязательное представление. Используется, только если в структуре нет поля -// представления. -// Комментарий - Строка - необязательный комментарий. Используется, только если в структуре нет поля комментария. -// -// Возвращаемое значение: -// Строка - XML контактной информации. -// Функция XSLT_КонтрольПредставленияИКомментария(Знач Текст, Знач Представление = Неопределено, Знач Комментарий = Неопределено) Если Представление = Неопределено И Комментарий = Неопределено Тогда @@ -2779,17 +3044,6 @@ Возврат Преобразователь.ПреобразоватьИзСтроки(Текст); КонецФункции -// Устанавливает в контактной информации Состав.Значение на переданное представление. -// Если Представление равно неопределено, то никаких действий не производит. Иначе проверяет на пустоту. -// Состав. Если там ничего нет и атрибут "Состав.Значение" пуст, то ставим в состав значение представления. -// -// Параметры: -// Текст - Строка - XML контактной информации. -// Представление - Строка - устанавливаемое представление. -// -// Возвращаемое значение: -// Строка - XML контактной информации. -// Функция XSLT_КонтрольСтроковогоЗначенияПростогоТипа(Знач Текст, Знач Представление) Если Представление = Неопределено Тогда @@ -2826,15 +3080,6 @@ Возврат Преобразователь.ПреобразоватьИзСтроки(Текст); КонецФункции -// Возвращает фрагмент XML для подстановки строки в виде <Узел>Строка<Узел>. -// -// Параметры: -// Текст - Строка - вставка в XML. -// ИмяЭлемента - Строка - необязательное имя для внешнего узла. -// -// Возвращаемое значение: -// Строка - результирующий XML. -// Функция XSLT_УзелСтрокиПараметра(Знач Текст, Знач ИмяЭлемента = "ExternalParamNode") // Через запись xml для маскировки спецсимволов. @@ -2847,14 +3092,6 @@ КонецФункции -// Возвращает XML без описания для включения внутрь другого XML. -// -// Параметры: -// Текст - Строка - исходный XML. -// -// Возвращаемое значение: -// Строка - результирующий XML. -// Функция XSLT_УдалитьОписаниеXML(Знач Текст) Преобразователь = ПреобразованиеXSLT_УдалитьОписаниеXML(); @@ -2862,14 +3099,6 @@ КонецФункции -// Преобразует текст XML контактной информации в перечисление типа. -// -// Параметры: -// Текст - Строка - исходный XML. -// -// Возвращаемое значение: -// Строка - сериализованное значение перечисления ТипыКонтактнойИнформации. -// Функция XSLT_ТипКонтактнойИнформацииПоСтрокеXML(Знач Текст) Преобразователь = ПреобразованиеXSLT_ТипКонтактнойИнформацииПоСтрокеXML(); @@ -2877,21 +3106,12 @@ КонецФункции -// Возвращает признак того, является ли текст XML. -// -// Параметры: -// Текст - Строка - проверяемый текст. -// -// Возвращаемое значение: -// Булево - результат проверки. -// Функция ЭтоСтрокаXML(Текст) Возврат ТипЗнч(Текст) = Тип("Строка") И Лев(СокрЛ(Текст),1) = "<"; КонецФункции -// Десериализатор известных платформе типов. Функция ЗначениеИзСтрокиXML(Знач Текст) ЧтениеXML = Новый ЧтениеXML; @@ -2900,7 +3120,6 @@ КонецФункции -// Сериализатор известных платформе типов. Функция ЗначениеВСтрокуXML(Знач Значение) ЗаписьXML = Новый ЗаписьXML; @@ -2911,46 +3130,23 @@ КонецФункции -// Для работы с атрибутами содержащими переносы строк. -// -// Параметры: -// Текст - Строка - Корректируемая строка XML. -// -// Возвращаемое значение: -// Строка - Нормализованная строка. -// Функция МногострочнаяСтрокаXML(Знач Текст) Возврат СтрЗаменить(Текст, Символы.ПС, " "); КонецФункции -// Подготавливает строку для включения в текст XML, убирая спецсимволы. -// -// Параметры: -// Текст - Строка - Корректируемая строка XML. -// -// Возвращаемое значение: -// Строка - Нормализованная строка. -// Функция НормализованнаяСтрокаXML(Знач Текст) - Результат = СтрЗаменить(Текст, """", """); - Результат = СтрЗаменить(Результат, "&", "&"); + Результат = СтрЗаменить(Текст, "&", "&"); Результат = СтрЗаменить(Результат, "'", "'"); Результат = СтрЗаменить(Результат, "<", "<"); Результат = СтрЗаменить(Результат, ">", ">"); + Результат = СтрЗаменить(Результат, """", """); Возврат МногострочнаяСтрокаXML(Результат); КонецФункции -// Инициализация преобразователей - -// Преобразование для сравнения двух строк XML. -// -// Возвращаемое значение: -// ПреобразованиеXSL - подготовленный объект. -// Функция ПреобразованиеXSLT_ТаблицаЗначенийРазличияXML() Преобразователь = Новый ПреобразованиеXSL; @@ -3130,13 +3326,6 @@ Возврат Преобразователь; КонецФункции -// Преобразование для текста с парами Ключ=Значение, разделенных переносами строк (см формат адреса) в XML. -// В случае повторных ключей все включаются в результат, но при десериализации будет использован -// последний (особенность работы сериализатора платформы). -// -// Возвращаемое значение: -// ПреобразованиеXSL - подготовленный объект. -// Функция ПреобразованиеXSLT_СтрокаКлючЗначениеВСтруктуру() Преобразователь = Новый ПреобразованиеXSL; Преобразователь.ЗагрузитьТаблицуСтилейXSLИзСтроки(" @@ -3193,11 +3382,6 @@ Возврат Преобразователь; КонецФункции -// Преобразование для списка значений в структуру. Представление преобразуется в ключ. -// -// Возвращаемое значение: -// ПреобразованиеXSL - подготовленный объект. -// Функция ПреобразованиеXSLT_СписокЗначенийВСтруктуру() Преобразователь = Новый ПреобразованиеXSL; Преобразователь.ЗагрузитьТаблицуСтилейXSLИзСтроки(" @@ -3238,11 +3422,6 @@ Возврат Преобразователь; КонецФункции -// Преобразование для соответствия в структуру. Ключ преобразуется в ключ, значение - в значение. -// -// Возвращаемое значение: -// ПреобразованиеXSL - подготовленный объект. -// Функция ПреобразованиеXSLT_СоответствиеВСтруктуру() Преобразователь = Новый ПреобразованиеXSL; Преобразователь.ЗагрузитьТаблицуСтилейXSLИзСтроки(" @@ -3283,11 +3462,6 @@ Возврат Преобразователь; КонецФункции -// Убирает описание для включения внутрь другого XML. -// -// Возвращаемое значение: -// ПреобразованиеXSL - подготовленный объект. -// Функция ПреобразованиеXSLT_УдалитьОписаниеXML() Преобразователь = Новый ПреобразованиеXSL; Преобразователь.ЗагрузитьТаблицуСтилейXSLИзСтроки(" @@ -3303,12 +3477,6 @@ Возврат Преобразователь; КонецФункции -// Преобразование для контактной информации в виде XML (см пакет XDTO КонтактнаяИнформация) в перечисление -// ТипКонтактнойИнформации. -// -// Возвращаемое значение: -// ПреобразованиеXSL - подготовленный объект. -// Функция ПреобразованиеXSLT_ТипКонтактнойИнформацииПоСтрокеXML() Преобразователь = Новый ПреобразованиеXSL; Преобразователь.ЗагрузитьТаблицуСтилейXSLИзСтроки(" @@ -3355,14 +3523,6 @@ Возврат Преобразователь; КонецФункции -// Преобразование для таблицы различий XML в зависимости от типа контактной информации. -// -// Параметры: -// ТипКонтактнойИнформации - Строка, ПеречислениеСсылка.ТипыКонтактнойИнформации - имя или значение перечисления. -// -// Возвращаемое значение: -// ПреобразованиеXSL - подготовленный объект. -// Функция ПреобразованиеXSLT_ИнтерпретацияРазличияXMLКонтактнойИнформации(Знач ТипКонтактнойИнформации) Если ТипЗнч(ТипКонтактнойИнформации) <> Тип("Строка") Тогда @@ -3406,11 +3566,6 @@ Возврат Преобразователь; КонецФункции -// Возвращает преобразователь XSL для конвертации структуры в контактную информацию в виде XML. -// -// Возвращаемое значение: -// ПреобразованиеXSL - подготовленный объект. -// Функция ПреобразованиеXSLT_ПреобразованиеXSL() Если Метаданные.ОбщиеМодули.Найти("РаботаСАдресами") <> Неопределено Тогда @@ -3512,53 +3667,26 @@ Возврат Преобразователь; КонецФункции -// Преобразует сериализованную структуру в контактную информацию в виде 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ИзСтроки(" @@ -3602,11 +3730,6 @@ Возврат Преобразователь; КонецФункции -// Общее преобразование для телефона и факса. -// -// Возвращаемое значение: -// ПреобразованиеXSL - подготовленный объект. -// Функция ПреобразованиеXSLT_СтруктураВТелефонФакс(Знач ИмяXDTOТипа) Преобразователь = Новый ПреобразованиеXSL; Преобразователь.ЗагрузитьТаблицуСтилейXSLИзСтроки(" @@ -3651,11 +3774,6 @@ Возврат Преобразователь; КонецФункции -// Фрагмент XSL с процедурами для обработки строк. -// -// Возвращаемое значение: -// Строка - фрагмент XML для использования в преобразовании. -// Функция XSLT_ШаблоныСтроковыхФункций() НаборБуквНижнийРегистр = "abcdefghijklmnopqrstuvwxyz"; @@ -3750,11 +3868,6 @@ |"; КонецФункции -// Фрагмент XSL с процедурами для работы с xpath. -// -// Возвращаемое значение: -// Строка - фрагмент XML для использования в преобразовании. -// Функция XSLT_ШаблоныФункцийXPath() Возврат " | @@ -3831,10 +3944,6 @@ #КонецОбласти -// Область Конвертация JSON и другие типы: структура, XML и т.п. - -// Конвертация - Функция СтруктураВСтрокуJSON(Значение) Экспорт ЗаписьJSON = Новый ЗаписьJSON; @@ -3875,6 +3984,14 @@ Результат = Новый Структура(); + КонтактнаяИнформация = СтрокуJSONВСтруктуру(Значение); + + Если Не ЗначениеЗаполнено(ТипКонтактнойИнформации) Тогда + Если КонтактнаяИнформация.Свойство("type") Тогда + ТипКонтактнойИнформации = ТипКонтактнойИнформацииИзСтроки(КонтактнаяИнформация.type); + КонецЕсли; + КонецЕсли; + Если Метаданные.ОбщиеМодули.Найти("РаботаСАдресамиКлиентСервер") <> Неопределено Тогда МодульРаботаСАдресамиКлиентСервер = ОбщегоНазначения.ОбщийМодуль("РаботаСАдресамиКлиентСервер"); Результат = МодульРаботаСАдресамиКлиентСервер.ОписаниеНовойКонтактнойИнформации(ТипКонтактнойИнформации); @@ -3882,13 +3999,27 @@ Результат = УправлениеКонтактнойИнформациейКлиентСервер.ОписаниеНовойКонтактнойИнформации(ТипКонтактнойИнформации); КонецЕсли; - КонтактнаяИнформация = СтрокуJSONВСтруктуру(Значение); ЗаполнитьЗначенияСвойств(Результат, КонтактнаяИнформация); Возврат Результат; КонецФункции +Функция ТипКонтактнойИнформацииИзСтроки(Знач ТипКонтактнойИнформацииСтрокой) + + Результат = Новый Соответствие; + Результат.Вставить("Адрес", ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Адрес")); + Результат.Вставить("Телефон", ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Телефон")); + Результат.Вставить("АдресЭлектроннойПочты", ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты")); + Результат.Вставить("Skype", ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Skype")); + Результат.Вставить("ВебСтраница", ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.ВебСтраница")); + Результат.Вставить("Факс", ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Факс")); + Результат.Вставить("Другое", ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Другое")); + + Возврат Результат[ТипКонтактнойИнформацииСтрокой]; + +КонецФункции + Функция СтрокуJSONВСтруктуру(Значение) Экспорт ЧтениеJSON = Новый ЧтениеJSON; @@ -3918,19 +4049,19 @@ Если ОжидаемыйТип = Неопределено Тогда - Если ТипЗнч(КонтактнаяИнформация) = Тип("Структура") И КонтактнаяИнформация.Свойство("Type") Тогда + Если ТипЗнч(КонтактнаяИнформация) = Тип("Структура") И КонтактнаяИнформация.Свойство("type") Тогда - ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации[КонтактнаяИнформация.Type]; + ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации[КонтактнаяИнформация.type]; ИначеЕсли УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(КонтактнаяИнформация) Тогда КонтактнаяИнформацияXML = ПривестиКонтактнуюИнформациюXML(КонтактнаяИнформация); ОжидаемыйТип = КонтактнаяИнформацияXML.ТипКонтактнойИнформации; Иначе - ТекстОшибки = НСтр("ru='Ошибка конвертации контактной информации из формата JSON в XML.'"); + ТекстОшибки = НСтр("ru = 'Ошибка конвертации контактной информации из формата JSON в XML.'"); ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка,,, ТекстОшибки + Символы.ПС + Строка(КонтактнаяИнформация)); - ВызватьИсключение НСтр("ru='Не удалось определить тип контактной информации. Подробнее см. в журнале регистрации.'"); + ВызватьИсключение НСтр("ru = 'Не удалось определить тип контактной информации. Подробнее см. в журнале регистрации.'"); КонецЕсли; КонецЕсли; @@ -4000,7 +4131,6 @@ КонецФункции -// Внутреннее для сериализации. Функция КонвертироватьАдресИзJSONВXML(Знач ЗначенияПолей, Знач Представление, Знач ОжидаемыйТип = Неопределено) Если Метаданные.ОбщиеМодули.Найти("РаботаСАдресами") <> Неопределено Тогда @@ -4075,7 +4205,7 @@ Данные = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "НомерТелефона")); Иначе - ВызватьИсключение НСтр("ru='Ошибка преобразования контактной информации, ожидается телефон или факс'"); + ВызватьИсключение НСтр("ru = 'Ошибка преобразования контактной информации, ожидается телефон или факс'"); КонецЕсли; Результат = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "КонтактнаяИнформация")); @@ -4123,16 +4253,6 @@ КонецФункции -// Преобразует строку в XDTO прочую контактную информацию. -// -// Параметры: -// ЗначенияПолей - Строка - сериализованная информация, значения полей. -// Представление - Строка - представление старший-младший, используется для попытки разбора, если ЗначенияПолей пусто. -// ОжидаемыйТип - ПеречислениеСсылка.ТипыКонтактнойИнформации - необязательный тип для контроля. -// -// Возвращаемое значение: -// ОбъектXDTO - контактной информации. -// Функция КонвертироватьПрочуюКонтактнуюИнформациюИзJSONВXML(ЗначенияПолей, Знач Представление = "", ОжидаемыйТип = Неопределено) Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(ЗначенияПолей) Тогда diff --git a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСлужебныйПовтИсп/Module.bsl b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСлужебныйПовтИсп/Module.bsl index 84cff47b4..69471b435 100644 --- a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСлужебныйПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСлужебныйПовтИсп/Module.bsl @@ -15,22 +15,27 @@ // ФиксированноеСоответствие - с полями: // * КлассификаторДоступен - Булево - классификатор доступен через веб-сервис. // * ИспользоватьЗагруженные - Булево - в программу загружен классификатор. +// * ИспользуетсяАдресныйКлассификатор - Булево - в программе присутствует подсистема АдресныйКлассификатор. // Функция СведенияОДоступностиАдресногоКлассификатора() Экспорт - Результат = Новый Структура; - Результат.Вставить("КлассификаторДоступен", Ложь); - Результат.Вставить("ИспользоватьЗагруженные", Ложь); + Результат = Новый Соответствие; + Результат.Вставить("КлассификаторДоступен", Ложь); + Результат.Вставить("ИспользоватьЗагруженные", Ложь); + Результат.Вставить("ИспользуетсяАдресныйКлассификатор", Ложь); - ЕстьКлассификатор = ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор"); - Если Не ЕстьКлассификатор Тогда - Возврат Результат; + Результат["ИспользуетсяАдресныйКлассификатор"] = ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор"); + Если Не Результат["ИспользуетсяАдресныйКлассификатор"] Тогда + Возврат Новый ФиксированноеСоответствие(Результат); КонецЕсли; МодульАдресныйКлассификаторСлужебный = ОбщегоНазначения.ОбщийМодуль("АдресныйКлассификаторСлужебный"); СведенияОДоступностиАдресныхСведений = МодульАдресныйКлассификаторСлужебный.СведенияОДоступностиАдресныхСведений(); - Возврат СведенияОДоступностиАдресныхСведений; + Результат["КлассификаторДоступен"] = СведенияОДоступностиАдресныхСведений.Получить("КлассификаторДоступен"); + Результат["ИспользоватьЗагруженные"] = СведенияОДоступностиАдресныхСведений.Получить("ИспользоватьЗагруженные"); + + Возврат Новый ФиксированноеСоответствие(Результат); КонецФункции diff --git a/SSL/src/CommonModules/УправлениеПечатью/Module.bsl b/SSL/src/CommonModules/УправлениеПечатью/Module.bsl index b555705cd..050451c6c 100644 --- a/SSL/src/CommonModules/УправлениеПечатью/Module.bsl +++ b/SSL/src/CommonModules/УправлениеПечатью/Module.bsl @@ -537,16 +537,19 @@ МенеджерЗаписи.Объект = ЧастиИмениМакета.ИмяОбъекта; МенеджерЗаписи.Прочитать(); + НаборЗаписей = РегистрыСведений.ПользовательскиеМакетыПечати.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.ИмяМакета.Установить(ДанныеДляОбработки.ИмяМакета); + НаборЗаписей.Отбор.Объект.Установить(ДанныеДляОбработки.Объект); + Если МенеджерЗаписи.Выбран() Тогда - НаборЗаписей = РегистрыСведений.ПользовательскиеМакетыПечати.СоздатьНаборЗаписей(); - НаборЗаписей.Отбор.ИмяМакета.Установить(ДанныеДляОбработки.ИмяМакета); - НаборЗаписей.Отбор.Объект.Установить(ДанныеДляОбработки.Объект); Запись = НаборЗаписей.Добавить(); Запись.ИмяМакета = ДанныеДляОбработки.ИмяМакета; Запись.Объект = ДанныеДляОбработки.Объект; ЗаполнитьЗначенияСвойств(Запись, МенеджерЗаписи, , "ИмяМакета,Объект"); ОбновлениеИнформационнойБазы.ЗаписатьДанные(НаборЗаписей); МенеджерЗаписи.Удалить(); + Иначе + ОбновлениеИнформационнойБазы.ОтметитьВыполнениеОбработки(НаборЗаписей); КонецЕсли; КонецЦикла; Параметры.ОбработкаЗавершена = ОбновлениеИнформационнойБазы.ОбработкаДанныхЗавершена(Параметры.Очередь, "РегистрСведений.ПользовательскиеМакетыПечати"); @@ -565,9 +568,9 @@ ОписаниеПрофиля = МодульУправлениеДоступом.НовоеОписаниеПрофиляГруппДоступа();; ОписаниеПрофиля.Идентификатор = "70179f20-2315-11e6-9bff-d850e648b60c"; ОписаниеПрофиля.Наименование = НСтр("ru = 'Редактирование, отправка по почте, сохранение в файл печатных форм (дополнительно)'", - Метаданные.ОсновнойЯзык.КодЯзыка); + ОбщегоНазначения.КодОсновногоЯзыка()); ОписаниеПрофиля.Описание = НСтр("ru = 'Дополнительно назначается пользователям, которым должна быть доступна возможность редактирования, - |перед печатью, отправка по почте и сохранение в файл сформированных печатных форм.'", Метаданные.ОсновнойЯзык.КодЯзыка); + |перед печатью, отправка по почте и сохранение в файл сформированных печатных форм.'"); ОписаниеПрофиля.Роли.Добавить("РедактированиеПечатныхФорм"); ОписанияПрофилей.Добавить(ОписаниеПрофиля); @@ -643,6 +646,15 @@ // Возвращает макет печатной формы по полному пути к макету. // +// Если конфигурация рассчитана на несколько языков, в ней могут быть предусмотрены несколько макетов для этих языков: +// - ПФ_DOC_СчетНаОплату_ru +// - ПФ_DOC_СчетНаОплату_en +// - и т.п. +// В этом случае при поиске нужного макета учитывается следующий приоритет: +// 1) на языка текущего сеанса (ТекущийЯзык), +// 2) на языке конфигурации (ОбщегоНазначения.КодОсновногоЯзыка()), +// 3) без указания языка. +// // Параметры: // ПутьКМакету - Строка - полный путь к макету в формате: // "Документ.<ИмяДокумента>.<ИмяМакета>" @@ -877,28 +889,43 @@ ЧастиСтроки.Удалить(ЧастиСтроки.ВГраница()); ИмяВладельца = СтрСоединить(ЧастиСтроки, "."); - НаборЗаписей = РегистрыСведений.ПользовательскиеМакетыПечати.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Объект.Установить(ИмяВладельца); НаборЗаписей.Отбор.ИмяМакета.Установить(ИмяМакета); - НаборЗаписей.Прочитать(); - Для Каждого Запись Из НаборЗаписей Цикл - Запись.Использование = Ложь; - КонецЦикла; - Если НаборЗаписей.Количество() > 0 Тогда - Если ОбновлениеИнформационнойБазы.ЭтоВызовИзОбработчикаОбновления() Тогда - ОбновлениеИнформационнойБазы.ЗаписатьНаборЗаписей(НаборЗаписей); - Иначе - УстановитьОтключениеБезопасногоРежима(Истина); - УстановитьПривилегированныйРежим(Истина); - - НаборЗаписей.Записать(); - - УстановитьПривилегированныйРежим(Ложь); - УстановитьОтключениеБезопасногоРежима(Ложь); + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ПользовательскиеМакетыПечати"); + ЭлементБлокировки.УстановитьЗначение("Объект", ИмяВладельца); + ЭлементБлокировки.УстановитьЗначение("ИмяМакета", ИмяМакета); + + НачатьТранзакцию(); + Попытка + Блокировка.Заблокировать(); + + НаборЗаписей.Прочитать(); + Для Каждого Запись Из НаборЗаписей Цикл + Запись.Использование = Ложь; + КонецЦикла; + + Если НаборЗаписей.Количество() > 0 Тогда + Если ОбновлениеИнформационнойБазы.ЭтоВызовИзОбработчикаОбновления() Тогда + ОбновлениеИнформационнойБазы.ЗаписатьНаборЗаписей(НаборЗаписей); + Иначе + УстановитьОтключениеБезопасногоРежима(Истина); + УстановитьПривилегированныйРежим(Истина); + + НаборЗаписей.Записать(); + + УстановитьПривилегированныйРежим(Ложь); + УстановитьОтключениеБезопасногоРежима(Ложь); + КонецЕсли; КонецЕсли; - КонецЕсли; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; КонецПроцедуры @@ -983,7 +1010,8 @@ // Ограничение: печатные формы, формируемые на клиенте не поддерживаются. // // Параметры: -// КомандаПечати - Структура - команда печати формы, см. УправлениеПечатью.КомандыПечатиФормы. +// КомандыПечати - Структура, Массив - команда или несколько команд печати формы, +// см. УправлениеПечатью.КомандыПечатиФормы. // СписокОбъектов - Массив - ссылки на печатаемые объекты. // НастройкиСохранения - Структура - см. УправлениеПечатью.НастройкиСохранения. // @@ -992,75 +1020,19 @@ // * ИмяФайла - Строка - имя файла; // * ДвоичныеДанные - ДвоичныеДанные - файл печатной формы. // -Функция НапечататьВФайл(КомандаПечати, СписокОбъектов, НастройкиСохранения) Экспорт +Функция НапечататьВФайл(КомандыПечати, СписокОбъектов, НастройкиСохранения) Экспорт Результат = Новый ТаблицаЗначений; Результат.Колонки.Добавить("ИмяФайла"); Результат.Колонки.Добавить("ДвоичныеДанные"); - ДанныеПечати = Неопределено; - Если КомандаПечати.МенеджерПечати = "СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки" Тогда - Источник = КомандаПечати.ДополнительныеПараметры.Ссылка; - ДанныеПечати = СформироватьВнешнююПечатнуюФорму(Источник, КомандаПечати.Идентификатор, СписокОбъектов); - Иначе - ДанныеПечати = СформироватьПечатныеФормы(КомандаПечати.МенеджерПечати, КомандаПечати.Идентификатор, - СписокОбъектов, КомандаПечати.ДополнительныеПараметры); - КонецЕсли; - - КоллекцияПечатныхФорм = ДанныеПечати.КоллекцияПечатныхФорм; - ОбъектыПечати = ДанныеПечати.ОбъектыПечати; - - ПодписиИПечатиОбластей = Неопределено; - Если НастройкиСохранения.ПодписьИПечать Тогда - ПодписиИПечатиОбластей = ПодписиИПечатиОбластей(ОбъектыПечати); + СписокКоманд = КомандыПечати; + Если ТипЗнч(КомандыПечати) <> Тип("Массив") Тогда + СписокКоманд = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(КомандыПечати); КонецЕсли; - ТаблицаФорматов = НастройкиФорматовСохраненияТабличногоДокумента(); - - Для Каждого ПечатнаяФорма Из КоллекцияПечатныхФорм Цикл - Если ЗначениеЗаполнено(ПечатнаяФорма.ОфисныеДокументы) Тогда - Для Каждого ОфисныйДокумент Из ПечатнаяФорма.ОфисныеДокументы Цикл - Файл = Результат.Добавить(); - Файл.ИмяФайла = ИмяФайлаОфисногоДокумента(ОфисныйДокумент.Значение, НастройкиСохранения.ПереводитьИменаФайловВТранслит); - Файл.ДвоичныеДанные = ПолучитьИзВременногоХранилища(ОфисныйДокумент.Ключ); - КонецЦикла; - Продолжить; - КонецЕсли; - - Если НастройкиСохранения.ПодписьИПечать Тогда - ДобавитьПодписьИПечать(ПечатнаяФорма.ТабличныйДокумент, ПодписиИПечатиОбластей); - Иначе - УбратьПодписьИПечать(ПечатнаяФорма.ТабличныйДокумент); - КонецЕсли; - - ПечатныеФормыПоОбъектам = ПечатныеФормыПоОбъектам(ПечатнаяФорма.ТабличныйДокумент, ОбъектыПечати); - Для Каждого СоответствиеОбъектаПечатнойФорме Из ПечатныеФормыПоОбъектам Цикл - - ОбъектПечати = СоответствиеОбъектаПечатнойФорме.Ключ; - ТабличныйДокумент = СоответствиеОбъектаПечатнойФорме.Значение; - - Для Каждого Формат Из НастройкиСохранения.ФорматыСохранения Цикл - ТипФайла = Формат; - Если ТипЗнч(ТипФайла) = Тип("Строка") Тогда - ТипФайла = ТипФайлаТабличногоДокумента[ТипФайла]; - КонецЕсли; - НастройкиФормата = ТаблицаФорматов.НайтиСтроки(Новый Структура("ТипФайлаТабличногоДокумента", ТипФайла))[0]; - - РасширениеФайла = НастройкиФормата.Расширение; - ЗаданныеИменаПечатныхФорм = ПечатнаяФорма.ИмяФайлаПечатнойФормы; - НазваниеПечатнойФормы = ПечатнаяФорма.СинонимМакета; - - ИмяФайла = ИмяФайлаПечатнойФормыОбъекта(ОбъектПечати, ЗаданныеИменаПечатныхФорм, НазваниеПечатнойФормы) + "." + РасширениеФайла; - Если НастройкиСохранения.ПереводитьИменаФайловВТранслит Тогда - ИмяФайла = СтроковыеФункцииКлиентСервер.СтрокаЛатиницей(ИмяФайла) - КонецЕсли; - ИмяФайла = ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыВИмениФайла(ИмяФайла); - - Файл = Результат.Добавить(); - Файл.ИмяФайла = ИмяФайла; - Файл.ДвоичныеДанные = ТабличныйДокументВДвоичныеДанные(ТабличныйДокумент, ТипФайла); - КонецЦикла; - КонецЦикла; + Для Каждого КомандаПечати Из СписокКоманд Цикл + ВыполнитьКомандуПечатиВФайл(КомандаПечати, НастройкиСохранения, СписокОбъектов, Результат); КонецЦикла; Если НастройкиСохранения.УпаковатьВАрхив Тогда @@ -1080,7 +1052,8 @@ // // Возвращаемое значение: // Структура - настройки записи табличного документа в файл: -// * ФорматыСохранения - Массив - коллекция значений типа ТипФайлаТабличногоДокумента; +// * ФорматыСохранения - Массив - коллекция значений типа ТипФайлаТабличногоДокумента, +// либо значений типа ТипФайлаТабличногоДокумента, преобразованных в строку; // * УпаковатьВАрхив - Булево - если установить значение Истина, будет создан один файл архива с файлами указанных форматов; // * ПереводитьИменаФайловВТранслит - Булево - если установить Истина, то имена полученных файлов будут на латинице. // * ПодписьИПечать - Булево - если установить Истина и сохраняемый табличный документ поддерживает размещение @@ -1088,13 +1061,7 @@ // Функция НастройкиСохранения() Экспорт - НастройкиСохранения = Новый Структура; - НастройкиСохранения.Вставить("ФорматыСохранения", Новый Массив); - НастройкиСохранения.Вставить("УпаковатьВАрхив", Ложь); - НастройкиСохранения.Вставить("ПереводитьИменаФайловВТранслит", Ложь); - НастройкиСохранения.Вставить("ПодписьИПечать", Ложь); - - Возврат НастройкиСохранения; + Возврат УправлениеПечатьюКлиентСервер.НастройкиСохранения(); КонецФункции @@ -1134,8 +1101,7 @@ //////////////////////////////////////////////////////////////////////////////// // Функции инициализации и закрытия ссылок. -// Создает структуру выходной печатной формы. -// Необходимо вызвать перед любыми действиями над формой. +// Конструктор печатной формы в формате офисного документа. // // Параметры: // УдалитьТипДокумента - Строка - устаревший параметр, не используется; @@ -1148,7 +1114,7 @@ Функция ИнициализироватьПечатнуюФорму(Знач УдалитьТипДокумента, Знач УдалитьНастройкиСтраницыМакета = Неопределено, Макет = Неопределено) Экспорт Если Макет = Неопределено Тогда - ВызватьИсключение "ru = 'Необходимо указать значение параметра ""Макет""'"; + ВызватьИсключение НСтр("ru = 'Необходимо указать значение параметра ""Макет""'"); КонецЕсли; ПечатнаяФорма = УправлениеПечатьюСлужебный.ИнициализироватьПечатнуюФорму(Макет); @@ -1159,8 +1125,7 @@ КонецФункции -// Создает структуру макета. В дальнейшем эта структура используется при получении областей (тегов и -// таблиц), колонтитулов. +// Подготавливает макет для использования в процедурах формирования печатной формы. // // Параметры: // ДвоичныеДанныеМакета - ДвоичныеДанные - двоичные данные макета; @@ -1494,36 +1459,86 @@ #Область СлужебныйПрограммныйИнтерфейс +// Возвращает таблицу возможных форматов для сохранения табличного документа. +// +// Возвращаемое значение +// ТаблицаЗначений: +// ТипФайлаТабличногоДокумента - ТипФайлаТабличногоДокумента - значение в платформе, +// соответствующее +// формату; +// Ссылка - ПеречислениеСсылка.ФорматыСохраненияОтчетов - ссылка на метаданные, +// где хранится +// представление; +// Представление - Строка - - представление типа +// файла (заполняется из перечисления); +// Расширение - Строка - - тип файла для +// операционной системы; +// Картинка - Картинка - значок формата. +// +// Примечание: таблица форматов может быть переопределена в процедуре +// УправлениеПечатьюПереопределяемый.ПриЗаполненииНастроекФорматовСохранения(). +// +Функция НастройкиФорматовСохраненияТабличногоДокумента() Экспорт + + ТаблицаФорматов = СтандартныеПодсистемыСервер.НастройкиФорматовСохраненияТабличногоДокумента(); + + Для Каждого ФорматСохранения Из ТаблицаФорматов Цикл + // Для возможности использования в мобильном клиенте. + ФорматСохранения.Представление = Строка(ФорматСохранения.Ссылка); + КонецЦикла; + + Возврат ТаблицаФорматов; + +КонецФункции + // Скрывает команды печати из подменю "Печать". Процедура ОтключитьКомандыПечати(СписокОбъектов, СписокКоманд) Экспорт + НаборЗаписей = РегистрыСведений.НастройкиКомандПечати.СоздатьНаборЗаписей(); + Для Каждого Объект Из СписокОбъектов Цикл КомандыПечатиОбъекта = СтандартныеКомандыПечатиОбъекта(Объект); - Для Каждого ИдентификаторЗаменяемойКоманды Из СписокКоманд Цикл - Отбор = Новый Структура; - Отбор.Вставить("Идентификатор", ИдентификаторЗаменяемойКоманды); - Отбор.Вставить("ФорматСохранения"); - Отбор.Вставить("СразуНаПринтер", Ложь); - Отбор.Вставить("Отключена", Ложь); + + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.НастройкиКомандПечати"); + ЭлементБлокировки.УстановитьЗначение("Владелец", Объект); + + НачатьТранзакцию(); + Попытка + Блокировка.Заблокировать(); - СписокЗаменяемыхКоманд = КомандыПечатиОбъекта.НайтиСтроки(Отбор); - Для Каждого ЗаменяемаяКоманда Из СписокЗаменяемыхКоманд Цикл - НаборЗаписей.Отбор.Владелец.Установить(Объект); - НаборЗаписей.Отбор.УникальныйИдентификатор.Установить(ЗаменяемаяКоманда.УникальныйИдентификатор); - НаборЗаписей.Прочитать(); - НаборЗаписей.Очистить(); - Если НаборЗаписей.Количество() = 0 Тогда - Запись = НаборЗаписей.Добавить(); - Иначе - Запись = НаборЗаписей[0]; - КонецЕсли; - Запись.Владелец = Объект; - Запись.УникальныйИдентификатор = ЗаменяемаяКоманда.УникальныйИдентификатор; - Запись.Видимость = Ложь; - НаборЗаписей.Записать(); + Для Каждого ИдентификаторЗаменяемойКоманды Из СписокКоманд Цикл + Отбор = Новый Структура; + Отбор.Вставить("Идентификатор", ИдентификаторЗаменяемойКоманды); + Отбор.Вставить("ФорматСохранения", ""); + Отбор.Вставить("СразуНаПринтер", Ложь); + Отбор.Вставить("Отключена", Ложь); + + СписокЗаменяемыхКоманд = КомандыПечатиОбъекта.НайтиСтроки(Отбор); + Для Каждого ЗаменяемаяКоманда Из СписокЗаменяемыхКоманд Цикл + НаборЗаписей.Отбор.Владелец.Установить(Объект); + НаборЗаписей.Отбор.УникальныйИдентификатор.Установить(ЗаменяемаяКоманда.УникальныйИдентификатор); + НаборЗаписей.Прочитать(); + НаборЗаписей.Очистить(); + Если НаборЗаписей.Количество() = 0 Тогда + Запись = НаборЗаписей.Добавить(); + Иначе + Запись = НаборЗаписей[0]; + КонецЕсли; + Запись.Владелец = Объект; + Запись.УникальныйИдентификатор = ЗаменяемаяКоманда.УникальныйИдентификатор; + Запись.Видимость = Ложь; + НаборЗаписей.Записать(); + КонецЦикла; КонецЦикла; - КонецЦикла; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; КонецЦикла; + КонецПроцедуры // Возвращает список поставляемых команд печати объекта. @@ -1566,6 +1581,18 @@ Возврат Результат; КонецФункции +Функция НастройкиПечати() Экспорт + + Настройки = Новый Структура; + Настройки.Вставить("ИспользоватьПодписиИПечати", Истина); + Настройки.Вставить("СкрыватьПодписиИПечатиДляРедактирования", Ложь); + + УправлениеПечатьюПереопределяемый.ПриОпределенииНастроекПечати(Настройки); + + Возврат Настройки; + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Шаблоны сообщений. @@ -1576,7 +1603,13 @@ КонецФункции Функция КомандыПечатиОбъектаДоступныеДляВложений(ОбъектМетаданных) Экспорт - Возврат КомандыПечатиОбъекта(ОбъектМетаданных); + + Если ИсточникиКомандПечати().Найти(ОбъектМетаданных) <> Неопределено Тогда + Возврат КомандыПечатиОбъекта(ОбъектМетаданных); + КонецЕсли; + + Возврат СоздатьКоллекциюКомандПечати(); + КонецФункции // Формирует печатную форму по внешнему источнику. @@ -1845,7 +1878,7 @@ // на источник внешней печатной формы. // // Возвращаемое значение: -// Ссылка. +// Ссылка - . Функция СсылкаДополнительнойПечатнойФормы(Идентификатор, ПолноеИмяОбъектаМетаданных) ВнешняяПечатнаяФормаСсылка = Неопределено; @@ -2100,38 +2133,6 @@ КонецФункции -// Возвращает таблицу возможных форматов для сохранения табличного документа. -// -// Возвращаемое значение -// ТаблицаЗначений: -// ТипФайлаТабличногоДокумента - ТипФайлаТабличногоДокумента - значение в платформе, -// соответствующее -// формату; -// Ссылка - ПеречислениеСсылка.ФорматыСохраненияОтчетов - ссылка на метаданные, -// где хранится -// представление; -// Представление - Строка - - представление типа -// файла (заполняется из перечисления); -// Расширение - Строка - - тип файла для -// операционной системы; -// Картинка - Картинка - значок формата. -// -// Примечание: таблица форматов может быть переопределена в процедуре -// УправлениеПечатьюПереопределяемый.ПриЗаполненииНастроекФорматовСохранения(). -// -Функция НастройкиФорматовСохраненияТабличногоДокумента() Экспорт - - ТаблицаФорматов = СтандартныеПодсистемыСервер.НастройкиФорматовСохраненияТабличногоДокумента(); - - Для Каждого ФорматСохранения Из ТаблицаФорматов Цикл - // Для возможности использования в мобильном клиенте. - ФорматСохранения.Представление = Строка(ФорматСохранения.Ссылка); - КонецЦикла; - - Возврат ТаблицаФорматов; - -КонецФункции - // Фильтрует список команд печати в соответствии с установленными функциональными опциями. Процедура ОпределитьВидимостьКомандПечатиПоФункциональнымОпциям(КомандыПечати, Форма = Неопределено) Для каждого ОписаниеКомандыПечати Из КомандыПечати Цикл @@ -2287,6 +2288,9 @@ КомандыПечатиФормы = КомандыПечатиОбъекта(ОбъектМетаданных); Для Каждого ДобавляемаяКомандаПечати Из КомандыПечатиФормы Цикл + Если ДобавляемаяКомандаПечати.Отключена Тогда + Продолжить; + КонецЕсли; // Поиск аналогичной ранее добавленной команды печати. НайденныеКоманды = КомандыПечати.НайтиСтроки(Новый Структура("УникальныйИдентификатор", ДобавляемаяКомандаПечати.УникальныйИдентификатор)); @@ -2801,7 +2805,7 @@ КонецЕсли; Если ПереводитьВТранслит Тогда - ИмяФайла = СтроковыеФункцииКлиентСервер.СтрокаЛатиницей(ИмяФайла) + ИмяФайла = СтроковыеФункции.СтрокаЛатиницей(ИмяФайла) КонецЕсли; Возврат ИмяФайла; @@ -2824,8 +2828,8 @@ КонецЕсли; КодЯзыка = ТекущийЯзык.КодЯзыка; Результат.Добавить(ИмяМакета + "_" + КодЯзыка); - Если КодЯзыка <> Метаданные.ОсновнойЯзык.КодЯзыка Тогда - Результат.Добавить(ИмяМакета + "_" + Метаданные.ОсновнойЯзык.КодЯзыка); + Если КодЯзыка <> ОбщегоНазначения.КодОсновногоЯзыка() Тогда + Результат.Добавить(ИмяМакета + "_" + ОбщегоНазначения.КодОсновногоЯзыка()); КонецЕсли; КонецЕсли; @@ -2885,6 +2889,7 @@ Функция ПодготовитьСтруктуруПараметровВывода() Экспорт ПараметрыВывода = Новый Структура; + ПараметрыВывода.Вставить("ЗаголовокФормы", ""); ПараметрыВывода.Вставить("ДоступнаПечатьПоКомплектно", Ложь); // не используется СтруктураПараметровПисьма = Новый Структура("Получатель,Тема,Текст", Неопределено, "", ""); @@ -2894,14 +2899,73 @@ КонецФункции -Функция НастройкиПечати() Экспорт +Процедура ВыполнитьКомандуПечатиВФайл(КомандаПечати, НастройкиСохранения, СписокОбъектов, Результат) - Настройки = Новый Структура; - Настройки.Вставить("ИспользоватьПодписиИПечати", Истина); - Настройки.Вставить("СкрыватьПодписиИПечатиДляРедактирования", Ложь); + ДанныеПечати = Неопределено; + Если КомандаПечати.МенеджерПечати = "СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки" Тогда + Источник = КомандаПечати.ДополнительныеПараметры.Ссылка; + ДанныеПечати = СформироватьВнешнююПечатнуюФорму(Источник, КомандаПечати.Идентификатор, СписокОбъектов); + Иначе + ДанныеПечати = СформироватьПечатныеФормы(КомандаПечати.МенеджерПечати, КомандаПечати.Идентификатор, + СписокОбъектов, КомандаПечати.ДополнительныеПараметры); + КонецЕсли; - Возврат Настройки; + КоллекцияПечатныхФорм = ДанныеПечати.КоллекцияПечатныхФорм; + ОбъектыПечати = ДанныеПечати.ОбъектыПечати; -КонецФункции + ПодписиИПечатиОбластей = Неопределено; + Если НастройкиСохранения.ПодписьИПечать Тогда + ПодписиИПечатиОбластей = ПодписиИПечатиОбластей(ОбъектыПечати); + КонецЕсли; + + ТаблицаФорматов = НастройкиФорматовСохраненияТабличногоДокумента(); + + Для Каждого ПечатнаяФорма Из КоллекцияПечатныхФорм Цикл + Если ЗначениеЗаполнено(ПечатнаяФорма.ОфисныеДокументы) Тогда + Для Каждого ОфисныйДокумент Из ПечатнаяФорма.ОфисныеДокументы Цикл + Файл = Результат.Добавить(); + Файл.ИмяФайла = ИмяФайлаОфисногоДокумента(ОфисныйДокумент.Значение, НастройкиСохранения.ПереводитьИменаФайловВТранслит); + Файл.ДвоичныеДанные = ПолучитьИзВременногоХранилища(ОфисныйДокумент.Ключ); + КонецЦикла; + Продолжить; + КонецЕсли; + + Если НастройкиСохранения.ПодписьИПечать Тогда + ДобавитьПодписьИПечать(ПечатнаяФорма.ТабличныйДокумент, ПодписиИПечатиОбластей); + Иначе + УбратьПодписьИПечать(ПечатнаяФорма.ТабличныйДокумент); + КонецЕсли; + + ПечатныеФормыПоОбъектам = ПечатныеФормыПоОбъектам(ПечатнаяФорма.ТабличныйДокумент, ОбъектыПечати); + Для Каждого СоответствиеОбъектаПечатнойФорме Из ПечатныеФормыПоОбъектам Цикл + + ОбъектПечати = СоответствиеОбъектаПечатнойФорме.Ключ; + ТабличныйДокумент = СоответствиеОбъектаПечатнойФорме.Значение; + + Для Каждого Формат Из НастройкиСохранения.ФорматыСохранения Цикл + ТипФайла = Формат; + Если ТипЗнч(ТипФайла) = Тип("Строка") Тогда + ТипФайла = ТипФайлаТабличногоДокумента[ТипФайла]; + КонецЕсли; + НастройкиФормата = ТаблицаФорматов.НайтиСтроки(Новый Структура("ТипФайлаТабличногоДокумента", ТипФайла))[0]; + + РасширениеФайла = НастройкиФормата.Расширение; + ЗаданныеИменаПечатныхФорм = ПечатнаяФорма.ИмяФайлаПечатнойФормы; + НазваниеПечатнойФормы = ПечатнаяФорма.СинонимМакета; + + ИмяФайла = ИмяФайлаПечатнойФормыОбъекта(ОбъектПечати, ЗаданныеИменаПечатныхФорм, НазваниеПечатнойФормы) + "." + РасширениеФайла; + Если НастройкиСохранения.ПереводитьИменаФайловВТранслит Тогда + ИмяФайла = СтроковыеФункции.СтрокаЛатиницей(ИмяФайла) + КонецЕсли; + ИмяФайла = ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыВИмениФайла(ИмяФайла); + + Файл = Результат.Добавить(); + Файл.ИмяФайла = ИмяФайла; + Файл.ДвоичныеДанные = ТабличныйДокументВДвоичныеДанные(ТабличныйДокумент, ТипФайла); + КонецЦикла; + КонецЦикла; + КонецЦикла; + +КонецПроцедуры #КонецОбласти diff --git a/SSL/src/CommonModules/УправлениеПечатьюMSWordКлиент/Module.bsl b/SSL/src/CommonModules/УправлениеПечатьюMSWordКлиент/Module.bsl index 66ea711c6..253aa0518 100644 --- a/SSL/src/CommonModules/УправлениеПечатьюMSWordКлиент/Module.bsl +++ b/SSL/src/CommonModules/УправлениеПечатьюMSWordКлиент/Module.bsl @@ -350,7 +350,7 @@ // ПереходНаСледСтроку - булево, требуется ли вставлять разрыв после вывода области. // // Возвращаемое значение: -// КоординатыОбласти +// КоординатыОбласти - // Функция ПрисоединитьОбласть(Знач ПечатнаяФорма, Знач ОбластьHandler, diff --git a/SSL/src/CommonModules/УправлениеПечатьюOOWriterКлиент/Module.bsl b/SSL/src/CommonModules/УправлениеПечатьюOOWriterКлиент/Module.bsl index c0fdaea39..a0ed29989 100644 --- a/SSL/src/CommonModules/УправлениеПечатьюOOWriterКлиент/Module.bsl +++ b/SSL/src/CommonModules/УправлениеПечатьюOOWriterКлиент/Module.bsl @@ -281,7 +281,7 @@ // ПереходНаСледСтроку - булево, требуется ли вставлять разрыв после вывода области. // // Возвращаемое значение: -// КоординатыОбласти +// КоординатыОбласти - // Процедура ПрисоединитьОбласть(Знач ПечатнаяФормаHandler, Знач ОбластьHandler, diff --git a/SSL/src/CommonModules/УправлениеПечатьюКлиент/Module.bsl b/SSL/src/CommonModules/УправлениеПечатьюКлиент/Module.bsl index 7c0b0c690..cc7d138f4 100644 --- a/SSL/src/CommonModules/УправлениеПечатьюКлиент/Module.bsl +++ b/SSL/src/CommonModules/УправлениеПечатьюКлиент/Module.bsl @@ -134,9 +134,23 @@ // Параметры: // КоллекцияПечатныхФорм - Массив - см. НоваяКоллекцияПечатныхФорм(); // ОбъектыПечати - СписокЗначений - см. УправлениеПечатьюПереопределяемый.ПриПечати; -// ВладелецФормы - ФормаКлиентскогоПриложения - форма, из которой выполняется печать. +// ДополнительныеПараметры - Структура - дополнительные параметры открытия формы печати. См. ПараметрыПечати(). +// - ФормаКлиентскогоПриложения - форма, из которой выполняется печать; // -Процедура ПечатьДокументов(КоллекцияПечатныхФорм, Знач ОбъектыПечати = Неопределено, ВладелецФормы = Неопределено) Экспорт +Процедура ПечатьДокументов(КоллекцияПечатныхФорм, Знач ОбъектыПечати = Неопределено, + ДополнительныеПараметры = Неопределено) Экспорт + + ПараметрыПечати = ПараметрыПечати(); + + ВладелецФормы = Неопределено; + Если ТипЗнч(ДополнительныеПараметры) = Тип("Структура") Тогда + ЗаполнитьЗначенияСвойств(ПараметрыПечати, ДополнительныеПараметры); + ВладелецФормы = ПараметрыПечати.ВладелецФормы; + ПараметрыПечати.Удалить("ВладелецФормы"); + ИначеЕсли ТипЗнч(ДополнительныеПараметры) = Тип("ФормаКлиентскогоПриложения") Тогда + ВладелецФормы = ДополнительныеПараметры; // Поддержка обратной совместимости с 3.0.2. + КонецЕсли; + Если ОбъектыПечати = Неопределено Тогда ОбъектыПечати = Новый СписокЗначений; КонецЕсли; @@ -145,13 +159,31 @@ ПараметрыОткрытия = Новый Структура("ИмяМенеджераПечати,ИменаМакетов,ПараметрКоманды,ПараметрыПечати"); ПараметрыОткрытия.ПараметрКоманды = Новый Массив; - ПараметрыОткрытия.ПараметрыПечати = Новый Структура; ПараметрыОткрытия.Вставить("КоллекцияПечатныхФорм", КоллекцияПечатныхФорм); ПараметрыОткрытия.Вставить("ОбъектыПечати", ОбъектыПечати); + ПараметрыОткрытия.Вставить("ПараметрыПечати", ПараметрыПечати); ОткрытьФорму("ОбщаяФорма.ПечатьДокументов", ПараметрыОткрытия, ВладелецФормы, КлючУникальности); + КонецПроцедуры +// Конструктор параметра ДополнительныеПараметры процедуры ПечатьДокументов. +// +// Возвращаемое значение: +// Структура - дополнительные параметры открытия формы печати: +// * ВладелецФормы - ФормаКлиентскогоПриложения - форма, из которой выполняется печать. +// * Заголовок - Строка - Заголовок формы ПечатьДокументов. +// +Функция ПараметрыПечати() Экспорт + + Результат = Новый Структура; + Результат.Вставить("ВладелецФормы"); + Результат.Вставить("ЗаголовокФормы"); + + Возврат Результат; + +КонецФункции + // Конструктор параметра КоллекцияПечатныхФорм для процедур и функций этого модуля. // См. ПечатьДокументов() // См. ОписаниеПечатнойФормы(). @@ -292,7 +324,7 @@ // Создает соединение с выходной печатной формой. // Необходимо вызвать перед любыми действиями над формой. // Функция не работает в любых других браузерах кроме IE. -// Перед выполнением функции в веб-клиенте необходимо подключить расширение работы с файлами. +// Перед выполнением функции в веб-клиенте необходимо подключить расширение для работы с 1С:Предприятием. // // Параметры: // ТипДокумента - Строка - тип печатной формы "DOC" или "ODT"; @@ -325,7 +357,7 @@ // Создает COM-соединение с макетом. В дальнейшем это соединение используется при получении из него областей (тегов и // таблиц). // Функция не работает в любых других браузерах кроме IE. -// Перед выполнением функции в веб-клиенте необходимо подключить расширение работы с файлами. +// Перед выполнением функции в веб-клиенте необходимо подключить расширение для работы с 1С:Предприятием. // // Параметры: // ДвоичныеДанныеМакета - ДвоичныеДанные - двоичные данные макета; @@ -676,6 +708,23 @@ ОткрытьФорму("РегистрСведений.ПользовательскиеМакетыПечати.Форма.РедактированиеМакета", ПараметрыМакета, Форма, , , , ОписаниеОповещения); КонецПроцедуры +// Конструктор параметра НастройкиСохранения функции УправлениеПечатью.НапечататьВФайл. +// Определяет формат и другие настройки записи табличного документа в файл. +// +// Возвращаемое значение: +// Структура - настройки записи табличного документа в файл: +// * ФорматыСохранения - Массив - коллекция значений типа ТипФайлаТабличногоДокумента, преобразованных в строку; +// * УпаковатьВАрхив - Булево - если установить значение Истина, будет создан один файл архива с файлами указанных форматов; +// * ПереводитьИменаФайловВТранслит - Булево - если установить Истина, то имена полученных файлов будут на латинице. +// * ПодписьИПечать - Булево - если установить Истина и сохраняемый табличный документ поддерживает размещение +// подписей и печатей, то в записанных файлах будут размещены подписи и печати. +// +Функция НастройкиСохранения() Экспорт + + Возврат УправлениеПечатьюКлиентСервер.НастройкиСохранения(); + +КонецФункции + #КонецОбласти #Область СлужебныеПроцедурыИФункции diff --git a/SSL/src/CommonModules/УправлениеПечатьюКлиентСервер/Module.bsl b/SSL/src/CommonModules/УправлениеПечатьюКлиентСервер/Module.bsl index 567d2ca44..015036a11 100644 --- a/SSL/src/CommonModules/УправлениеПечатьюКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/УправлениеПечатьюКлиентСервер/Module.bsl @@ -25,4 +25,17 @@ КонецФункции +// См. УправлениеПечатью.НапечататьВФайл. +Функция НастройкиСохранения() Экспорт + + НастройкиСохранения = Новый Структура; + НастройкиСохранения.Вставить("ФорматыСохранения", Новый Массив); + НастройкиСохранения.Вставить("УпаковатьВАрхив", Ложь); + НастройкиСохранения.Вставить("ПереводитьИменаФайловВТранслит", Ложь); + НастройкиСохранения.Вставить("ПодписьИПечать", Ложь); + + Возврат НастройкиСохранения; + +КонецФункции + #КонецОбласти diff --git a/SSL/src/CommonModules/УправлениеПечатьюПереопределяемый/Module.bsl b/SSL/src/CommonModules/УправлениеПечатьюПереопределяемый/Module.bsl index 789ccaa49..83ee3d151 100644 --- a/SSL/src/CommonModules/УправлениеПечатьюПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/УправлениеПечатьюПереопределяемый/Module.bsl @@ -8,6 +8,20 @@ #Область ПрограммныйИнтерфейс +// Переопределяет настройки подсистемы. +// +// Параметры: +// Настройки - Структура - настройки подсистемы: +// * ИспользоватьПодписиИПечати - Булево - при установке значения Ложь отключается возможность установки подписей +// и печатей в печатных формах. +// * СкрыватьПодписиИПечатиДляРедактирования - Булево - удалять рисунки подписей и печатей табличных документов при +// снятии флажка "Подписи и печати" в форме "Печать документов", для того, +// чтобы они не мешали редактировать текст, находящийся под ними. +// +Процедура ПриОпределенииНастроекПечати(Настройки) Экспорт + +КонецПроцедуры + // Определяет объекты конфигурации, в модулях менеджеров которых размещена процедура ДобавитьКомандыПечати, // формирующая список команд печати, предоставляемых этим объектом. // Синтаксис процедуры ДобавитьКомандыПечати см. в документации к подсистеме. @@ -69,7 +83,7 @@ КонецПроцедуры // Позволяет выполнить постобработку печатных форм при их формировании. -// Например, можно вставить в колонтитул дату формирования печатной формы. +// Например, можно вставить в печатную форму дату формирования. // Вызывается после завершения процедуры Печать менеджера печати объекта, имеет те же параметры. // // Параметры: @@ -81,6 +95,7 @@ // ПараметрыВывода - Структура - параметры, связанные с выводом табличных документов: // * ПараметрыОтправки - Структура - для заполнения письма при отправке печатной формы по электронной почте. // см. РаботаСПочтовымиСообщениямиКлиент.РаботаСПочтовымиСообщениямиКлиент.ПараметрыОтправкиПисьма. +// * ЗаголовокФормы - Строка - переопределяет заголовок формы печати документов (ПечатьДокументов). // // Пример: // ПечатнаяФорма = УправлениеПечатью.СведенияОПечатнойФорме(КоллекцияПечатныхФорм, "АктРеализация"); diff --git a/SSL/src/CommonModules/УправлениеПечатьюСлужебный/Module.bsl b/SSL/src/CommonModules/УправлениеПечатьюСлужебный/Module.bsl index 2ca26180c..24efb64d3 100644 --- a/SSL/src/CommonModules/УправлениеПечатьюСлужебный/Module.bsl +++ b/SSL/src/CommonModules/УправлениеПечатьюСлужебный/Module.bsl @@ -27,8 +27,8 @@ // Структура документа // - ОбластиДокумента - Соответствие - коллекция шаблонов областей, в которой ключ - имя области в исходном шаблоне. // - Разделы - Соответствие - коллекция разделов шаблона, в которой ключ - номер раздела в исходном шаблоне. -// - Колонтитулы - Соответствие - коллекция колонтитулов шаблона, в которой ключ - имя колонтитула, сформированное -// из исходного шаблона. +// - Колонтитулы - Соответствие - коллекция колонтитулов шаблона, в которой ключ - имя верхнего или нижнего колонтитула, +// сформированное из исходного шаблона. // - ПрисоединенныеОбласти - Массив - коллекция заполненных и выведенных областей в конечном документе. // - ТипыКонтента - Строка - текст файла [Content_Types].xml из контейнера DOCX. // - СвязиКонтента - Строка - текст файла document.xml.rels из контейнера DOCX. @@ -39,8 +39,8 @@ // - ИдентификаторДокумента - Строка - идентификатор ревизии документа. // // Структура раздела -// - Колонтитулы - Соответствие - коллекция колонтитулов шаблона для конкретного раздела, в которой ключ - -// имя колонтитула в исходном шаблоне. +// - Колонтитулы - Соответствие - коллекция верхних и нижних колонтитулов шаблона для конкретного раздела, в которой +// ключ - имя колонтитула в исходном шаблоне. // - Текст - Строка - текст раздела в исходном шаблоне. // - Номер - Число - номер раздела в исходном шаблоне. // @@ -49,7 +49,7 @@ // - Текст - Строка - текст области, заданный в исходном шаблоне. // - НомерРаздела - Число - номер раздела в исходном шаблоне, в который входит область. // -// Структура колонтитула +// Структура верхнего/нижнего колонтитула // - Имя - Строка - имя колонтитула, сформированное из исходного шаблона. // - ИмяВнутр - Строка - имя файла колонтитула из структуры контейнера DOCX исходного шаблона. // - Текст - Строка - текст колонтитула, заданный в исходном шаблоне. @@ -188,18 +188,18 @@ // Получает область верхнего колонтитула первой области макета. // // Параметры: -// Макет - Структура - Макет печатной формы; -// ТипКолонтитула - Строка - Тип колонтитула в макете; -// НомерРаздела - Число - Номер раздела, в который входит колонтитул. +// Макет - Структура - макет печатной формы; +// ИмяОбласти - Строка - имя области в макете; +// НомерРаздела - Число - номер раздела, в который входит верхний колонтитул. // // Возвращаемое значение: -// Структура - Область колонтитула. +// Структура - область верхнего колонтитула. // -Функция ПолучитьОбластьВерхнегоКолонтитула(Макет, Знач ТипКолонтитула = "ВерхнийКолонтитул", Знач НомерРаздела = 1) Экспорт +Функция ПолучитьОбластьВерхнегоКолонтитула(Макет, Знач ИмяОбласти = "ВерхнийКолонтитул", Знач НомерРаздела = 1) Экспорт - Параметры = СтрРазделить(ТипКолонтитула, "_"); + Параметры = СтрРазделить(ИмяОбласти, "_"); Если Параметры.Количество() = 2 Тогда - ТипКолонтитула = Параметры[0]; + ИмяОбласти = Параметры[0]; Попытка НомерРаздела = Число(Параметры[1]); Исключение @@ -207,25 +207,25 @@ КонецПопытки; КонецЕсли; - Возврат ПолучитьИзСтруктурыДокументаКолонтитул(Макет.СтруктураДокумента, ТипКолонтитула, НомерРаздела); + Возврат ПолучитьИзСтруктурыДокументаКолонтитул(Макет.СтруктураДокумента, ИмяОбласти, НомерРаздела); КонецФункции // Получает область нижнего колонтитула первой области макета. // // Параметры: -// Макет - Структура - Макет печатной формы; -// ТипКолонтитула - Строка - Тип колонтитула в макете; -// НомерРаздела - Число - Номер раздела, в который входит колонтитул. +// Макет - Структура - макет печатной формы; +// ИмяОбласти - Строка - имя области в макете; +// НомерРаздела - Число - номер раздела, в который входит нижний колонтитул. // // Возвращаемое значение: -// Структура - Область колонтитула. +// Структура - область нижнего колонтитула. // -Функция ПолучитьОбластьНижнегоКолонтитула(Макет, Знач ТипКолонтитула = "НижнийКолонтитул", Знач НомерРаздела = 1) Экспорт +Функция ПолучитьОбластьНижнегоКолонтитула(Макет, Знач ИмяОбласти = "НижнийКолонтитул", Знач НомерРаздела = 1) Экспорт - Параметры = СтрРазделить(ТипКолонтитула, "_"); + Параметры = СтрРазделить(ИмяОбласти, "_"); Если Параметры.Количество() = 2 Тогда - ТипКолонтитула = Параметры[0]; + ИмяОбласти = Параметры[0]; Попытка НомерРаздела = Число(Параметры[1]); Исключение @@ -233,9 +233,7 @@ КонецПопытки; КонецЕсли; - ОбластьКолонтитула = ПолучитьИзСтруктурыДокументаКолонтитул(Макет.СтруктураДокумента, ТипКолонтитула, НомерРаздела); - - Возврат ОбластьКолонтитула; + Возврат ПолучитьИзСтруктурыДокументаКолонтитул(Макет.СтруктураДокумента, ИмяОбласти, НомерРаздела); КонецФункции @@ -245,16 +243,16 @@ // Добавляет нижний колонтитул в печатную форму из макета. // // Параметры: -// ПечатнаяФорма - Структура - Печатная форма; -// Колонтитул - Структура - Область колонтитула. +// ПечатнаяФорма - Структура - печатная форма; +// НижнийКолонтитул - Структура - область нижнего колонтитула. // // Возвращаемое значение: // Структура - Область добавленного колонтитула. // -Функция ДобавитьНижнийКолонтитул(ПечатнаяФорма, Колонтитул) Экспорт +Функция ДобавитьНижнийКолонтитул(ПечатнаяФорма, НижнийКолонтитул) Экспорт - ДобавитьВСтруктуруДокументаКолонтитул(ПечатнаяФорма.СтруктураДокумента, Колонтитул); - СтруктураКолонтитула = ПрисоединитьКСтруктуреДокументаКолонтитул(ПечатнаяФорма.СтруктураДокумента, Колонтитул); + ДобавитьВСтруктуруДокументаКолонтитул(ПечатнаяФорма.СтруктураДокумента, НижнийКолонтитул); + СтруктураКолонтитула = ПрисоединитьКСтруктуреДокументаКолонтитул(ПечатнаяФорма.СтруктураДокумента, НижнийКолонтитул); Возврат СтруктураКолонтитула; @@ -263,33 +261,33 @@ // Заполняет параметры нижнего колонтитула в печатной форме из макета. // // Параметры: -// ПечатнаяФорма - Структура - Печатная форма; -// Колонтитул - Структура - Область колонтитула; -// ДанныеОбъекта - Структура - Данные объекта для заполнения. +// ПечатнаяФорма - Структура - печатная форма; +// НижнийКолонтитул - Структура - область нижнего колонтитула; +// ДанныеОбъекта - Структура - данные объекта для заполнения. // -Процедура ЗаполнитьПараметрыНижнегоКолонтитула(ПечатнаяФорма, Колонтитул, ДанныеОбъекта = Неопределено) Экспорт +Процедура ЗаполнитьПараметрыНижнегоКолонтитула(ПечатнаяФорма, НижнийКолонтитул, ДанныеОбъекта = Неопределено) Экспорт Если НЕ ТипЗнч(ДанныеОбъекта) = Тип("Структура") Тогда Возврат; КонецЕсли; - ЗаполнитьПараметрыОбласти(ПечатнаяФорма, Колонтитул, ДанныеОбъекта); + ЗаполнитьПараметрыОбласти(ПечатнаяФорма, НижнийКолонтитул, ДанныеОбъекта); КонецПроцедуры // Добавляет верхний колонтитул в печатную форму из макета. // // Параметры: -// ПечатнаяФорма - Структура - Печатная форма; -// Колонтитул - Структура - Область колонтитула. +// ПечатнаяФорма - Структура - печатная форма; +// ВерхнийКолонтитул - Структура - область колонтитула. // // Возвращаемое значение: -// Структура - Область добавленного колонтитула. +// Структура - область добавленного колонтитула. // -Функция ДобавитьВерхнийКолонтитул(ПечатнаяФорма, Колонтитул) Экспорт +Функция ДобавитьВерхнийКолонтитул(ПечатнаяФорма, ВерхнийКолонтитул) Экспорт - ДобавитьВСтруктуруДокументаКолонтитул(ПечатнаяФорма.СтруктураДокумента, Колонтитул); - СтруктураКолонтитула = ПрисоединитьКСтруктуреДокументаКолонтитул(ПечатнаяФорма.СтруктураДокумента, Колонтитул); + ДобавитьВСтруктуруДокументаКолонтитул(ПечатнаяФорма.СтруктураДокумента, ВерхнийКолонтитул); + СтруктураКолонтитула = ПрисоединитьКСтруктуреДокументаКолонтитул(ПечатнаяФорма.СтруктураДокумента, ВерхнийКолонтитул); Возврат СтруктураКолонтитула; @@ -298,17 +296,17 @@ // Заполняет параметры верхнего колонтитула в печатной форме из макета. // // Параметры: -// ПечатнаяФорма - Структура - Печатная форма; -// Колонтитул - Структура - Область колонтитула; -// ДанныеОбъекта - Структура - Данные объекта для заполнения. +// ПечатнаяФорма - Структура - печатная форма; +// ВерхнийКолонтитул - Структура - область колонтитула; +// ДанныеОбъекта - Структура - данные объекта для заполнения. // -Процедура ЗаполнитьПараметрыВерхнегоКолонтитула(ПечатнаяФорма, Колонтитул, ДанныеОбъекта = Неопределено) Экспорт +Процедура ЗаполнитьПараметрыВерхнегоКолонтитула(ПечатнаяФорма, ВерхнийКолонтитул, ДанныеОбъекта = Неопределено) Экспорт Если НЕ ТипЗнч(ДанныеОбъекта) = Тип("Структура") Тогда Возврат; КонецЕсли; - ЗаполнитьПараметрыОбласти(ПечатнаяФорма, Колонтитул, ДанныеОбъекта); + ЗаполнитьПараметрыОбласти(ПечатнаяФорма, ВерхнийКолонтитул, ДанныеОбъекта); КонецПроцедуры @@ -1165,7 +1163,7 @@ Текст = Прав(Текст, СтрДлина(Текст) - (НачалоПараметра+3)); КонецПараметра = СтрНайти(Текст, "}"); Если КонецПараметра > 0 Тогда - ТекстПараметра = Лев(Текст, КонецПараметра-1); + ТекстПараметра = СокрЛП(Лев(Текст, КонецПараметра-1)); МассивПараметров.Добавить(ТекстПараметра); Текст = Прав(Текст, СтрДлина(Текст) - (СтрДлина(ТекстПараметра) + 1)); КонецЕсли; @@ -1488,7 +1486,7 @@ КонецЕсли; Если НЕ СтруктураРазбораXML.ПотокиЗаписи.Свойство(ИмяПотока) Тогда - СтруктураРазбораXML.ПотокиЗаписи.Вставить(ИмяПотока, Новый Структура("Поток, ЗаписьРазрешена, Уровень, ПотокЗакрыт, ТекстПотока")); + СтруктураРазбораXML.ПотокиЗаписи.Вставить(ИмяПотока, Новый Структура("Поток, ЗаписьРазрешена, Уровень, ПотокЗакрыт, ТекстПотока, УровеньАбзаца")); КонецЕсли; Если НЕ СтруктураРазбораXML.ПотокиЗаписи[ИмяПотока].ЗаписьРазрешена = Неопределено Тогда @@ -1501,6 +1499,7 @@ СтруктураРазбораXML.ПотокиЗаписи[ИмяПотока].Уровень = ?(ПустаяСтрока(КорневойТэг), 0, 1); СтруктураРазбораXML.ПотокиЗаписи[ИмяПотока].ПотокЗакрыт = Ложь; СтруктураРазбораXML.ПотокиЗаписи[ИмяПотока].ТекстПотока = ""; + СтруктураРазбораXML.ПотокиЗаписи[ИмяПотока].УровеньАбзаца = СтруктураРазбораXML.ТекущийУровеньАбзаца; КонецПроцедуры @@ -1743,6 +1742,10 @@ Для Каждого ЭлементПотока Из СтруктураРазбораXML.ПотокиЗаписи Цикл + Если СтруктураРазбораXML.ТекущийУровеньАбзаца <> ЭлементПотока.Значение.УровеньАбзаца Тогда + Продолжить; + КонецЕсли; + Если Не ПустаяСтрока(СтруктураРазбораXML.БлокирующийПоток) И НЕ ЭлементПотока.Ключ = СтруктураРазбораXML.БлокирующийПоток Тогда Продолжить; КонецЕсли; @@ -1765,6 +1768,10 @@ Для Каждого ЭлементПотока Из СтруктураРазбораXML.ПотокиЗаписи Цикл + Если СтруктураРазбораXML.ТекущийУровеньАбзаца <> ЭлементПотока.Значение.УровеньАбзаца Тогда + Продолжить; + КонецЕсли; + Если Не ПустаяСтрока(СтруктураРазбораXML.БлокирующийПоток) И НЕ ЭлементПотока.Ключ = СтруктураРазбораXML.БлокирующийПоток Тогда Продолжить; КонецЕсли; @@ -1788,6 +1795,10 @@ Для Каждого ЭлементПотока Из СтруктураРазбораXML.ПотокиЗаписи Цикл + Если СтруктураРазбораXML.ТекущийУровеньАбзаца <> ЭлементПотока.Значение.УровеньАбзаца Тогда + Продолжить; + КонецЕсли; + Если Не ПустаяСтрока(СтруктураРазбораXML.БлокирующийПоток) И НЕ ЭлементПотока.Ключ = СтруктураРазбораXML.БлокирующийПоток Тогда Продолжить; КонецЕсли; @@ -1816,6 +1827,10 @@ Для Каждого ЭлементПотока Из СтруктураРазбораXML.ПотокиЗаписи Цикл + Если СтруктураРазбораXML.ТекущийУровеньАбзаца <> ЭлементПотока.Значение.УровеньАбзаца Тогда + Продолжить; + КонецЕсли; + Если Не ПустаяСтрока(СтруктураРазбораXML.БлокирующийПоток) И НЕ ЭлементПотока.Ключ = СтруктураРазбораXML.БлокирующийПоток Тогда Продолжить; КонецЕсли; @@ -1839,6 +1854,10 @@ Для Каждого ЭлементПотока Из СтруктураРазбораXML.ПотокиЗаписи Цикл + Если СтруктураРазбораXML.ТекущийУровеньАбзаца <> ЭлементПотока.Значение.УровеньАбзаца Тогда + Продолжить; + КонецЕсли; + Если Не ПустаяСтрока(СтруктураРазбораXML.БлокирующийПоток) И НЕ ЭлементПотока.Ключ = СтруктураРазбораXML.БлокирующийПоток Тогда Продолжить; КонецЕсли; @@ -2120,6 +2139,7 @@ Результат.Вставить("БлокирующийПоток", ""); Результат.Вставить("РазобранныеСтроки", Новый Массив); Результат.Вставить("ИмяПотокаФормата", ""); + Результат.Вставить("ТекущийУровеньАбзаца", "0"); Возврат Результат; @@ -2181,6 +2201,11 @@ КонецЕсли; Если НЕ СтруктураРазбораXML.ПолноеИмяТэга1С = "" Тогда + Если СтруктураРазбораXML.СтатусТэга1С = 3 ИЛИ СтруктураРазбораXML.СтатусТэга1С = 7 Тогда + СтруктураРазбораXML.ПолноеИмяТэга1С = СтрЗаменить(СтруктураРазбораXML.ПолноеИмяТэга1С, " ", ""); + СтруктураРазбораXML.ПолноеИмяТэга1С = СтрЗаменить(СтруктураРазбораXML.ПолноеИмяТэга1С, "{v8", "{v8 "); + СтруктураРазбораXML.ПолноеИмяТэга1С = СтрЗаменить(СтруктураРазбораXML.ПолноеИмяТэга1С, "{/v8", "{/v8 "); + КонецЕсли; ДобавитьРазобраннуюСтроку(СтруктураРазбораXML, СтруктураРазбораXML.ПолноеИмяТэга1С, ?(СтруктураРазбораXML.ТипТэга1С = 1, СтруктураРазбораXML.СтатусТэга1С, 0), ?(СтруктураРазбораXML.ТипТэга1С = 1, СтруктураРазбораXML.ИмяТэга1С, ""),"ФорматТэга1С"); КонецЕсли; @@ -2316,21 +2341,13 @@ КонецЕсли; Если ЧтениеНачалаПараграфа(СтруктураРазбораXML, ЧтениеXML) Тогда - - Если Число(УровеньАбзаца) > 0 Тогда - ОстановитьЗаписьВПоток(СтруктураРазбораXML, "Строки" + УровеньАбзаца); - ОстановитьЗаписьВПоток(СтруктураРазбораXML, "Абзац" + УровеньАбзаца); - ОстановитьЗаписьВПоток(СтруктураРазбораXML, "СтрокаПарам" + УровеньАбзаца); - КонецЕсли; - УровеньАбзаца = Формат(Число(УровеньАбзаца) + 1, "ЧН=0; ЧГ=0"); + СтруктураРазбораXML.ТекущийУровеньАбзаца = УровеньАбзаца; СброситьСтатусыТэгов1С(СтруктураРазбораXML, Истина); ИнициализироватьЗаписьВПоток(СтруктураРазбораXML, "Абзац" + УровеньАбзаца); ИнициализироватьЗаписьВПоток(СтруктураРазбораXML, "Строки" + УровеньАбзаца); ОстановитьЗаписьВПоток(СтруктураРазбораXML, "Строки" + УровеньАбзаца); - ОстановитьЗаписьВПоток(СтруктураРазбораXML, "Блок"); - КонецЕсли; Если ЧтениеКонцаПараграфа(СтруктураРазбораXML, ЧтениеXML) Тогда @@ -2355,20 +2372,16 @@ КонецЕсли; Если ЗавершитьЗаписьВЗаголовок Тогда - УровеньТэгаБлок = СтруктураРазбораXML.ПотокиЗаписи.Заголовок.Уровень + 1; УровеньТэгаОбласть = СтруктураРазбораXML.ПотокиЗаписи.Заголовок.Уровень + 2; ЗавершитьЗаписьВПоток(СтруктураРазбораXML, "Заголовок"); - КонецЕсли; Если ЧтениеКонцаСтроки(СтруктураРазбораXML, ЧтениеXML) Тогда - Если СтруктураРазбораXML.СтатусТэга1С = 0 И СтруктураРазбораXML.РазобранныеСтроки.Количество() = 0 Тогда ПеренестиЗаписьВПоток(СтруктураРазбораXML, "Строки" + УровеньАбзаца, "Абзац" + УровеньАбзаца); ИначеЕсли СтруктураРазбораXML.РазобранныеСтроки.Количество() > 0 Тогда - ИнициализироватьЗаписьВПоток(СтруктураРазбораXML, "СтрокиПарам"); КоличествоСтрок = 0; @@ -2430,7 +2443,6 @@ СброситьЗаписьВПоток(СтруктураРазбораXML, "СтрокиПарам"); СброситьПотокиШаблоннойСтроки(СтруктураРазбораXML); ОчиститьРазобранныеСтроки(СтруктураРазбораXML); - КонецЕсли; СброситьЗаписьВПоток(СтруктураРазбораXML, "СтрокаПарам" + УровеньАбзаца); @@ -2440,49 +2452,36 @@ ИнициализироватьЗаписьВПоток(СтруктураРазбораXML, "Строки" + УровеньАбзаца); ОстановитьЗаписьВПоток(СтруктураРазбораXML, "Строки" + УровеньАбзаца); КонецЕсли; - КонецЕсли; Если ЧтениеКонцаПараграфа(СтруктураРазбораXML, ЧтениеXML) Тогда - Если НЕ СтруктураРазбораXML.СтатусТэга1С = 0 Тогда СброситьСтатусыТэгов1С(СтруктураРазбораXML, Истина); КонецЕсли; Если Число(УровеньАбзаца) > 1 Тогда - ПотокПереноса = "Абзац" + Формат(Число(УровеньАбзаца) - 1, "ЧН=0; ЧГ=0"); - ПеренестиЗаписьВПоток(СтруктураРазбораXML, "Абзац" + УровеньАбзаца, ПотокПереноса); + ПотокПереноса = "Строки" + Формат(Число(УровеньАбзаца) - 1, "ЧН=0; ЧГ=0"); + ИначеЕсли ТекущийУровень = УровеньТэгаБлок И ПараметрыАнализа.ТипАнализа = 1 Тогда + ПотокПереноса = "Область"; Иначе - ПотокПереноса = ?(ТекущийУровень = УровеньТэгаБлок, "Область", "Блок"); - КонецЕсли; - - Если ПараметрыАнализа.ТипАнализа <> 1 Тогда - ПеренестиЗаписьВПоток(СтруктураРазбораXML, "Абзац" + УровеньАбзаца, "Блок"); ПотокПереноса = "Блок"; - ИначеЕсли Не ПустаяСтрока(СтруктураРазбораXML.ИмяОбласти) И СтруктураРазбораXML.СтатусОбласти = 1 Тогда - ПеренестиЗаписьВПоток(СтруктураРазбораXML, "Абзац" + УровеньАбзаца, ПотокПереноса); КонецЕсли; - Если ПотокПереноса = "Блок" Тогда - ВозобновитьЗаписьВПоток(СтруктураРазбораXML, "Блок"); + Если ПараметрыАнализа.ТипАнализа <> 1 + ИЛИ НЕ ПустаяСтрока(СтруктураРазбораXML.ИмяОбласти) И СтруктураРазбораXML.СтатусОбласти = 1 Тогда + ПеренестиЗаписьВПоток(СтруктураРазбораXML, "Абзац" + УровеньАбзаца, ПотокПереноса); КонецЕсли; СброситьЗаписьВПоток(СтруктураРазбораXML, "Абзац" + УровеньАбзаца); СброситьЗаписьВПоток(СтруктураРазбораXML, "Строки" + УровеньАбзаца); - Если Не ПустаяСтрока(СтруктураРазбораXML.ИмяОбласти) И СтруктураРазбораXML.СтатусОбласти = 0 Тогда + Если НЕ ПустаяСтрока(СтруктураРазбораXML.ИмяОбласти) И СтруктураРазбораXML.СтатусОбласти = 0 Тогда СтруктураРазбораXML.СтатусОбласти = 1; КонецЕсли; УровеньАбзаца = Формат(Число(УровеньАбзаца) - 1, "ЧН=0; ЧГ=0"); - - Если Число(УровеньАбзаца) > 1 Тогда - ВозобновитьЗаписьВПоток(СтруктураРазбораXML, "Строки" + УровеньАбзаца); - ВозобновитьЗаписьВПоток(СтруктураРазбораXML, "Абзац" + УровеньАбзаца); - ВозобновитьЗаписьВПоток(СтруктураРазбораXML, "СтрокаПарам" + УровеньАбзаца); - СтруктураРазбораXML.ИмяПотокаФормата = "СтрокаПарам" + УровеньАбзаца; - КонецЕсли; - + СтруктураРазбораXML.ТекущийУровеньАбзаца = УровеньАбзаца; + СтруктураРазбораXML.ИмяПотокаФормата = "СтрокаПарам" + УровеньАбзаца; КонецЕсли; Если ЧтениеКонцаЛюбогоБлокаКромеПараграфа(СтруктураРазбораXML, ЧтениеXML) И ТекущийУровень = УровеньТэгаБлок Тогда @@ -2520,7 +2519,6 @@ КонецЕсли; Если ПараметрыАнализа.ТипАнализа = 1 Тогда - ИнициализироватьЗаписьВПоток(СтруктураРазбораXML, "Абзац", ""); ПеренестиОткрывающиеТэгиЗаписиВПоток(СтруктураРазбораXML, "Заголовок", "Абзац", "w:body"); @@ -2534,7 +2532,6 @@ СтруктураОбласти.Текст = ТекстОбласти; СтруктураОбласти.НомерРаздела = 0; ДобавитьВСтруктуруДокументаОбластьДокумента(СтруктураДокумента, СтруктураОбласти); - КонецЕсли; КонецПроцедуры @@ -2606,13 +2603,14 @@ СтруктураРазбораXML.ПолноеИмяТэга1С = СтруктураРазбораXML.ПолноеИмяТэга1С + Символ; ДлинаСтрокиТэга1С = ДлинаСтрокиТэга1С + 1; - Если((КодСимвола >= 48 И КодСимвола <= 57) ИЛИ (КодСимвола >= 65 И КодСимвола <= 90) ИЛИ (КодСимвола >= 97 И КодСимвола <= 122) ИЛИ (КодСимвола >= 1040 И КодСимвола <= 1103)) Тогда + Если(КодСимвола = 32 ИЛИ (КодСимвола >= 48 И КодСимвола <= 57) ИЛИ (КодСимвола >= 65 И КодСимвола <= 90) ИЛИ КодСимвола = 95 ИЛИ (КодСимвола >= 97 И КодСимвола <= 122) ИЛИ (КодСимвола >= 1040 И КодСимвола <= 1103)) Тогда СтруктураРазбораXML.ИмяТэга1С = СтруктураРазбораXML.ИмяТэга1С + Символ; ИначеЕсли Символ = "." И СтруктураРазбораXML.ТипТэга1С = 0 И СтруктураРазбораXML.ИмяТэга1С = "Область" Тогда СтруктураРазбораXML.ТипТэга1С = 1; СтруктураРазбораXML.ИмяТэга1С = ""; ИначеЕсли Символ = "}" Тогда СтруктураРазбораXML.СтатусТэга1С = СтруктураРазбораXML.СтатусТэга1С + 1; + СтруктураРазбораXML.ИмяТэга1С = СокрЛП(СтруктураРазбораXML.ИмяТэга1С); Иначе Текст = СтруктураРазбораXML.ТекстДоТэга1С + СтруктураРазбораXML.ПолноеИмяТэга1С + СтруктураРазбораXML.ТекстПослеТэга1С; СброситьСтатусыТэгов1С(СтруктураРазбораXML); diff --git a/SSL/src/CommonModules/УправлениеСвойствами/Module.bsl b/SSL/src/CommonModules/УправлениеСвойствами/Module.bsl index dd3e6e893..57fa463e1 100644 --- a/SSL/src/CommonModules/УправлениеСвойствами/Module.bsl +++ b/SSL/src/CommonModules/УправлениеСвойствами/Module.bsl @@ -98,12 +98,12 @@ НаборыСвойствОбъекта, Форма.Свойства_НаборыДополнительныхРеквизитовОбъекта); - СведенияНеНайдены = УправлениеСвойствамиСлужебный.ДополнительныеРеквизитыИСведенияНеНайдены( - Форма.Свойства_НаборыДополнительныхРеквизитовОбъекта, Ложь, Истина); + ОтображатьЗакладку = УправлениеСвойствамиСлужебный.ОтображатьЗакладкуДополнительно( + ОписаниеОбъекта.Ссылка, Форма.Свойства_НаборыДополнительныхРеквизитовОбъекта); Если Форма.ПараметрыСвойств.Свойство("ДобавленаПустаяДекорация") Тогда Для Каждого ИмяДекорации Из Форма.ПараметрыСвойств.КоллекцияДекораций Цикл - Форма.Элементы[ИмяДекорации].Видимость = Не СведенияНеНайдены; + Форма.Элементы[ИмяДекорации].Видимость = ОтображатьЗакладку; КонецЦикла; КонецЕсли; @@ -166,6 +166,8 @@ // Процедура ОбработкаПроверкиЗаполнения(Форма, Отказ, ПроверяемыеРеквизиты, Объект = Неопределено) Экспорт + ПараметрыСеанса.ИнтерактивнаяПроверкаЗаполненияСвойств = Истина; + Если НЕ Форма.Свойства_ИспользоватьСвойства ИЛИ НЕ Форма.Свойства_ИспользоватьДопРеквизиты Тогда @@ -260,6 +262,11 @@ КонецЕсли; Если СтарыеСвойстваНабора.Родитель = РодительНабора Тогда + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Справочник.НаборыДополнительныхРеквизитовИСведений"); + ЭлементБлокировки.УстановитьЗначение("Ссылка", НаборСвойств); + Блокировка.Заблокировать(); + ЗаблокироватьДанныеДляРедактирования(НаборСвойств); НаборСвойствОбъект = НаборСвойств.ПолучитьОбъект(); Иначе @@ -277,39 +284,6 @@ ВидОбъекта[ИмяРеквизитаНабораСвойств] = НаборСвойствОбъект.Ссылка; - // Обновление наименований необщих дополнительных реквизитов и сведений. - Если Не ЗначениеЗаполнено(НаборСвойств) Тогда - Возврат; - КонецЕсли; - - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("НаборСвойств", НаборСвойств); - Запрос.Текст = - "ВЫБРАТЬ - | Свойства.Ссылка КАК Ссылка, - | Свойства.НаборСвойств.Наименование КАК НаименованиеНабора, - | Свойства.НаборСвойств.ПометкаУдаления КАК ПометкаУдаленияНабора - |ИЗ - | ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК Свойства - |ГДЕ - | Свойства.НаборСвойств = &НаборСвойств - | И ВЫБОР - | КОГДА Свойства.Наименование <> Свойства.Заголовок + "" ("" + Свойства.НаборСвойств.Наименование + "")"" - | ТОГДА ИСТИНА - | КОГДА Свойства.ПометкаУдаления <> Свойства.НаборСвойств.ПометкаУдаления - | ТОГДА ИСТИНА - | ИНАЧЕ ЛОЖЬ - | КОНЕЦ"; - - ВыборкаСвойств = Запрос.Выполнить().Выбрать(); - Пока ВыборкаСвойств.Следующий() Цикл - ЗаблокироватьДанныеДляРедактирования(ВыборкаСвойств.Ссылка); - Объект = ВыборкаСвойств.Ссылка.ПолучитьОбъект(); - Объект.Наименование = Объект.Заголовок + " (" + Строка(ВыборкаСвойств.НаименованиеНабора) + ")"; - Объект.ПометкаУдаления = ВыборкаСвойств.ПометкаУдаленияНабора; - Объект.Записать(); - КонецЦикла; - КонецПроцедуры // Обновляет отображаемые данные на форме объекта со свойствами. @@ -504,7 +478,10 @@ ЗаполнитьЗначенияСвойств(ОписаниеЗависимогоРеквизита, ОписаниеСвойства); КонецЕсли; - Для Каждого СтрокаТаблицы Из ОписаниеСвойства.ЗависимостиДополнительныхРеквизитов Цикл + ОтборСтрок = Новый Структура; + ОтборСтрок.Вставить("НаборСвойств", ОписаниеСвойства.Набор); + ЗависимостиДанногоНабора = ОписаниеСвойства.ЗависимостиДополнительныхРеквизитов.НайтиСтроки(ОтборСтрок); + Для Каждого СтрокаТаблицы Из ЗависимостиДанногоНабора Цикл Если СтрокаТаблицы.ЗависимоеСвойство = "ЗаполнятьОбязательно" И ОписаниеСвойства.ТипЗначения = Новый ОписаниеТипов("Булево") Тогда Продолжить; @@ -523,62 +500,13 @@ ПутьКРеквизиту = "Параметры.Форма." + ОписаниеДополнительногоРеквизита.ИмяРеквизитаЗначение; КонецЕсли; - // Преобразование старого условия для обратной совместимости. - УсловиеЧастями = СтрРазделить(СтрокаТаблицы.Условие, " "); - НовоеУсловие = ""; - Если УсловиеЧастями.Количество() > 0 Тогда - Для Каждого ЧастьУсловия Из УсловиеЧастями Цикл - НовоеУсловие = НовоеУсловие + ВРег(Лев(ЧастьУсловия, 1)) + Сред(ЧастьУсловия, 2); - КонецЦикла; - КонецЕсли; - - Если ЗначениеЗаполнено(НовоеУсловие) Тогда - СтрокаТаблицы.Условие = НовоеУсловие; - КонецЕсли; - - ШаблонУсловия = ""; - Если СтрокаТаблицы.Условие = "Равно" Тогда - ШаблонУсловия = "%1 = %2"; - ИначеЕсли СтрокаТаблицы.Условие = "НеРавно" Тогда - ШаблонУсловия = "%1 <> %2"; - КонецЕсли; - - Если СтрокаТаблицы.Условие = "ВСписке" Тогда - ШаблонУсловия = "%2.НайтиПоЗначению(%1) <> Неопределено" - ИначеЕсли СтрокаТаблицы.Условие = "НеВСписке" Тогда - ШаблонУсловия = "%2.НайтиПоЗначению(%1) = Неопределено" - КонецЕсли; - - ПравоеЗначение = ""; - Если ЗначениеЗаполнено(ШаблонУсловия) Тогда - ПравоеЗначение = "Параметры.ЗначенияПараметров[""" + ПутьКРеквизиту + """]"; - КонецЕсли; - - Если СтрокаТаблицы.Условие = "Заполнено" Тогда - ШаблонУсловия = "ЗначениеЗаполнено(%1)"; - ИначеЕсли СтрокаТаблицы.Условие = "НеЗаполнено" Тогда - ШаблонУсловия = "Не ЗначениеЗаполнено(%1)"; - КонецЕсли; - - Если ЗначениеЗаполнено(ПравоеЗначение) Тогда - КодУсловия = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонУсловия, ПутьКРеквизиту, ПравоеЗначение); - Иначе - КодУсловия = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонУсловия, ПутьКРеквизиту); - КонецЕсли; - - Если СтрокаТаблицы.ЗависимоеСвойство = "Доступен" Тогда - УстановитьУсловиеЗависимости(ОписаниеЗависимогоРеквизита.УсловиеДоступности, ПутьКРеквизиту, СтрокаТаблицы, КодУсловия, СтрокаТаблицы.Условие); - ИначеЕсли СтрокаТаблицы.ЗависимоеСвойство = "Виден" Тогда - УстановитьУсловиеЗависимости(ОписаниеЗависимогоРеквизита.УсловиеВидимости, ПутьКРеквизиту, СтрокаТаблицы, КодУсловия, СтрокаТаблицы.Условие); - Иначе - УстановитьУсловиеЗависимости(ОписаниеЗависимогоРеквизита.УсловиеОбязательностиЗаполнения, ПутьКРеквизиту, СтрокаТаблицы, КодУсловия, СтрокаТаблицы.Условие); - КонецЕсли; + УправлениеСвойствамиСлужебный.ПостроитьУсловияЗависимостей(ОписаниеЗависимогоРеквизита, ПутьКРеквизиту, СтрокаТаблицы); КонецЦикла; Если ОписаниеСвойства.СтрокаСсылочногоТипа Тогда Если ЗначениеЗаполнено(ОписаниеСвойства.Значение) Тогда Значение = ОписаниеСвойства.ТипЗначения.ПривестиЗначение(ОписаниеСвойства.Значение); - СтрокаЗначение = СтроковыеФункцииКлиентСервер.ФорматированнаяСтрока(Значение); + СтрокаЗначение = СтроковыеФункции.ФорматированнаяСтрока(Значение); Иначе Значение = НСтр("ru = 'не задано'"); СсылкаРедактирования = "НеЗадано"; @@ -767,7 +695,7 @@ Если ОписаниеСвойства.Удалено Тогда Элемент.ЦветТекстаЗаголовка = ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет; - Элемент.ШрифтЗаголовка = ШрифтыСтиля.УдаленныйДополнительныйРеквизитШрифт; + Элемент.ШрифтЗаголовка = ШрифтыСтиля.ЗаголовокУдаленногоРеквизитаШрифт; Если Элемент.Вид = ВидПоляФормы.ПолеВвода Тогда Элемент.КнопкаОчистки = Истина; Элемент.КнопкаВыбора = Ложь; @@ -810,8 +738,7 @@ КонецЕсли; КонецЕсли; Если ОписаниеЗависимогоРеквизита.УсловиеОбязательностиЗаполнения <> Неопределено Тогда - Если Не ОписаниеЗависимогоРеквизита.ЗаполнятьОбязательно - Или Форма.Элементы[ОписаниеЗависимогоРеквизита.ИмяРеквизитаЗначение].Вид = ВидПоляФормы.ПолеВвода Тогда + Если Не ОписаниеЗависимогоРеквизита.ЗаполнятьОбязательно Тогда Продолжить; КонецЕсли; @@ -1162,8 +1089,14 @@ НачатьТранзакцию(); Попытка Если ЕстьДопРеквизиты Тогда + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить(ВладелецСвойств.Метаданные().ПолноеИмя()); + ЭлементБлокировки.УстановитьЗначение("Ссылка", ВладелецСвойств); + Блокировка.Заблокировать(); + ВладелецСвойствОбъект = ВладелецСвойств.ПолучитьОбъект(); ЗаблокироватьДанныеДляРедактирования(ВладелецСвойствОбъект.Ссылка); + Для Каждого ДопРеквизит Из ТаблицаДопРеквизитов Цикл Если МассивДопРеквизитов.Найти(ДопРеквизит.Свойство) = Неопределено Тогда Продолжить; @@ -1185,6 +1118,12 @@ Продолжить; КонецЕсли; + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ДополнительныеСведения"); + ЭлементБлокировки.УстановитьЗначение("Объект", ВладелецСвойств); + ЭлементБлокировки.УстановитьЗначение("Свойство", ДопСведение.Свойство); + Блокировка.Заблокировать(); + МенеджерЗаписи = РегистрыСведений.ДополнительныеСведения.СоздатьМенеджерЗаписи(); МенеджерЗаписи.Объект = ВладелецСвойств; @@ -1283,9 +1222,7 @@ ЗапросСвойств = Новый Запрос; ЗапросСвойств.Текст = "ВЫБРАТЬ - | Свойства.Ссылка КАК Ссылка, - | Свойства.НаборСвойств.Наименование КАК НаименованиеНабора, - | Свойства.НаборСвойств.ПометкаУдаления КАК ПометкаУдаленияНабора + | Свойства.Ссылка КАК Ссылка |ИЗ | ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК Свойства |ГДЕ @@ -1293,9 +1230,7 @@ | КОГДА Свойства.НаборСвойств = ЗНАЧЕНИЕ(Справочник.НаборыДополнительныхРеквизитовИСведений.ПустаяСсылка) | ТОГДА ЛОЖЬ | ИНАЧЕ ВЫБОР - | КОГДА Свойства.Наименование <> Свойства.Заголовок + "" ("" + Свойства.НаборСвойств.Наименование + "")"" - | ТОГДА ИСТИНА - | КОГДА Свойства.ПометкаУдаления <> Свойства.НаборСвойств.ПометкаУдаления + | КОГДА Свойства.Наименование <> Свойства.Заголовок | ТОГДА ИСТИНА | ИНАЧЕ ЛОЖЬ | КОНЕЦ @@ -1675,35 +1610,6 @@ КонецФункции -Процедура УстановитьУсловиеЗависимости(СтруктураЗависимостей, ПутьКРеквизиту, СтрокаТаблицы, КодУсловия, Условие) - Если СтруктураЗависимостей = Неопределено Тогда - ЗначенияПараметров = Новый Соответствие; - Если Условие = "ВСписке" - Или Условие = "НеВСписке" Тогда - Значение = Новый СписокЗначений; - Значение.Добавить(СтрокаТаблицы.Значение); - Иначе - Значение = СтрокаТаблицы.Значение; - КонецЕсли; - ЗначенияПараметров.Вставить(ПутьКРеквизиту, Значение); - СтруктураЗависимостей = Новый Структура; - СтруктураЗависимостей.Вставить("КодУсловия", КодУсловия); - СтруктураЗависимостей.Вставить("ЗначенияПараметров", ЗначенияПараметров); - ИначеЕсли (Условие = "ВСписке" Или Условие = "НеВСписке") - И ТипЗнч(СтруктураЗависимостей.ЗначенияПараметров[ПутьКРеквизиту]) = Тип("СписокЗначений") Тогда - СтруктураЗависимостей.ЗначенияПараметров[ПутьКРеквизиту].Добавить(СтрокаТаблицы.Значение); - Иначе - СтруктураЗависимостей.КодУсловия = СтруктураЗависимостей.КодУсловия + " И " + КодУсловия; - Если Условие = "ВСписке" Или Условие = "НеВСписке" Тогда - Значение = Новый СписокЗначений; - Значение.Добавить(СтрокаТаблицы.Значение); - Иначе - Значение = СтрокаТаблицы.Значение; - КонецЕсли; - СтруктураЗависимостей.ЗначенияПараметров.Вставить(ПутьКРеквизиту, Значение); - КонецЕсли; -КонецПроцедуры - Процедура ОбновитьКлючНазначенияФормы(Форма, КлючНазначения) Если КлючНазначения = Неопределено Тогда diff --git a/SSL/src/CommonModules/УправлениеСвойствамиКлиент/Module.bsl b/SSL/src/CommonModules/УправлениеСвойствамиКлиент/Module.bsl index 3f5ac58c4..ee6767f92 100644 --- a/SSL/src/CommonModules/УправлениеСвойствамиКлиент/Module.bsl +++ b/SSL/src/CommonModules/УправлениеСвойствамиКлиент/Module.bsl @@ -180,6 +180,23 @@ #КонецОбласти +#Область СлужебныйПрограммныйИнтерфейс + +Процедура ОткрытьСписокСвойств(ДополнительныеРеквизиты = Ложь) Экспорт + + ПараметрыФормы = Новый Структура; + Если ДополнительныеРеквизиты Тогда + ПараметрыФормы.Вставить("ПоказатьДополнительныеРеквизиты"); + Иначе + ПараметрыФормы.Вставить("ПоказатьДополнительныеСведения"); + КонецЕсли; + ОткрытьФорму("Справочник.НаборыДополнительныхРеквизитовИСведений.ФормаСписка", + ПараметрыФормы, , ?(ДополнительныеРеквизиты, "ДополнительныеРеквизиты", "ДополнительныеСведения")); + +КонецПроцедуры + +#КонецОбласти + #Область СлужебныеПроцедурыИФункции // Открывает форму редактирования набора дополнительных реквизитов. diff --git a/SSL/src/CommonModules/УправлениеСвойствамиПереопределяемый/Module.bsl b/SSL/src/CommonModules/УправлениеСвойствамиПереопределяемый/Module.bsl index 4cc9323b0..8e2a3cf6a 100644 --- a/SSL/src/CommonModules/УправлениеСвойствамиПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/УправлениеСвойствамиПереопределяемый/Module.bsl @@ -104,7 +104,7 @@ // При автоматическом вычислении <КлючНазначения> содержит хеш // идентификаторов ссылок упорядоченных наборов свойств. // -Процедура ЗаполнитьНаборыСвойствОбъекта(Объект, ТипСсылки, НаборыСвойств, СтандартнаяОбработка, КлючНазначения) Экспорт +Процедура ЗаполнитьНаборыСвойствОбъекта(Знач Объект, ТипСсылки, НаборыСвойств, СтандартнаяОбработка, КлючНазначения) Экспорт diff --git a/SSL/src/CommonModules/УправлениеСвойствамиСлужебный/Module.bsl b/SSL/src/CommonModules/УправлениеСвойствамиСлужебный/Module.bsl index beb07ca60..0291f10ab 100644 --- a/SSL/src/CommonModules/УправлениеСвойствамиСлужебный/Module.bsl +++ b/SSL/src/CommonModules/УправлениеСвойствамиСлужебный/Module.bsl @@ -22,19 +22,23 @@ Запрос = Новый Запрос; Запрос.Текст = - "ВЫБРАТЬ - | НаборыСвойств.Ссылка КАК Ссылка, - | НаборыСвойств.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных - |ИЗ - | Справочник.НаборыДополнительныхРеквизитовИСведений КАК НаборыСвойств - |ГДЕ - | НаборыСвойств.Предопределенный"; + "ВЫБРАТЬ + | НаборыСвойств.Ссылка КАК Ссылка, + | НаборыСвойств.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных + |ИЗ + | Справочник.НаборыДополнительныхРеквизитовИСведений КАК НаборыСвойств + |ГДЕ + | НаборыСвойств.Предопределенный"; Выборка = Запрос.Выполнить().Выбрать(); ИмяПредопределенныхДанных = СтрЗаменить(ВидОбъектов, ".", "_"); НаборСсылка = Неопределено; Пока Выборка.Следующий() Цикл + Если СтрНачинаетсяС(Выборка.ИмяПредопределенныхДанных, "Удалить") Тогда + Продолжить; + КонецЕсли; + Если Выборка.ИмяПредопределенныхДанных = ИмяПредопределенныхДанных Тогда НаборСсылка = Выборка.Ссылка; Прервать; @@ -42,18 +46,21 @@ КонецЦикла; Если НаборСсылка = Неопределено Тогда - Возврат Неопределено; + НаборСсылка = УправлениеСвойствами.НаборСвойствПоИмени(ИмяПредопределенныхДанных); + Если НаборСсылка = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; КонецЕсли; ТекстЗапроса = - "ВЫБРАТЬ - | ТаблицаСвойств.Свойство КАК Свойство, - | ТаблицаСвойств.Свойство.Наименование КАК Наименование, - | ТаблицаСвойств.Свойство.ТипЗначения КАК ТипЗначения - |ИЗ - | &ТаблицаСвойств КАК ТаблицаСвойств - |ГДЕ - | ТаблицаСвойств.Ссылка В ИЕРАРХИИ(&Ссылка)"; + "ВЫБРАТЬ + | ТаблицаСвойств.Свойство КАК Свойство, + | ТаблицаСвойств.Свойство.Наименование КАК Наименование, + | ТаблицаСвойств.Свойство.ТипЗначения КАК ТипЗначения + |ИЗ + | &ТаблицаСвойств КАК ТаблицаСвойств + |ГДЕ + | ТаблицаСвойств.Ссылка В ИЕРАРХИИ(&Ссылка)"; ПолноеИмяТаблицы = "Справочник.НаборыДополнительныхРеквизитовИСведений." + ВидСвойств; ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТаблицаСвойств", ПолноеИмяТаблицы); @@ -69,7 +76,7 @@ КонецФункции -// Дополняет список колонки для загрузки данных колонками дополнительных реквизитов и свойств. +// Дополняет список колонки для загрузки данных колонками дополнительных реквизитов и свойств. // // Параметры: // МетаданныеСправочника - ОбъектМетаданных - Метаданные справочника. @@ -166,10 +173,10 @@ Обработчик.НачальноеЗаполнение = Истина; Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "3.0.1.101"; + Обработчик.Версия = "3.1.2.13"; Обработчик.Идентификатор = Новый УникальныйИдентификатор("ecd6aad4-4b04-43be-82bc-cd4f563beb0b"); Обработчик.Процедура = "ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.ОбработатьДанныеДляПереходаНаНовуюВерсию"; - Обработчик.Комментарий = НСтр("ru = 'Заполняет уникальное имя дополнительных реквизитов и сведений. + Обработчик.Комментарий = НСтр("ru = 'Заполняет уникальное имя и обновляет зависимости дополнительных реквизитов и сведений. |Редактирование дополнительных реквизитов и сведений будет недоступно до завершения обновления.'"); Обработчик.РежимВыполнения = "Отложенно"; Обработчик.ОчередьОтложеннойОбработки = 1; @@ -303,10 +310,221 @@ КонецПроцедуры +// См. ОбщегоНазначенияПереопределяемый.ПриДобавленииОбработчиковУстановкиПараметровСеанса. +Процедура ПриДобавленииОбработчиковУстановкиПараметровСеанса(Обработчики) Экспорт + Обработчики.Вставить("ИнтерактивнаяПроверкаЗаполненияСвойств", "УправлениеСвойствамиСлужебный.УстановкаПараметровСеанса"); +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции +Процедура ДополнительныеРеквизитыОбработкаПроверкиЗаполнения(Источник, Отказ, ПроверяемыеРеквизиты) Экспорт + + Если Не ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда + Возврат; + КонецЕсли; + + Если Не ПолучитьФункциональнуюОпцию("ИспользоватьДополнительныеРеквизитыИСведения") Тогда + Возврат; + КонецЕсли; + + Если Не ПравоДоступа("Чтение", Метаданные.Справочники.НаборыДополнительныхРеквизитовИСведений) Тогда + Возврат; + КонецЕсли; + + Если ТипЗнч(Источник.Ссылка) = Тип("СправочникСсылка.НаборыДополнительныхРеквизитовИСведений") Тогда + Возврат; + КонецЕсли; + + Если ПараметрыСеанса.ИнтерактивнаяПроверкаЗаполненияСвойств Тогда + ПараметрыСеанса.ИнтерактивнаяПроверкаЗаполненияСвойств = Ложь; + Возврат; + КонецЕсли; + + // Дополнительные реквизиты подключены к объекту. + Проверка = Новый Структура; + Проверка.Вставить("ДополнительныеРеквизиты", Неопределено); + ЗаполнитьЗначенияСвойств(Проверка, Источник); + + Если Проверка.ДополнительныеРеквизиты = Неопределено Тогда + Возврат; // Не подключены дополнительные реквизиты. + КонецЕсли; + + ТаблицаНаборов = ПолучитьНаборыСвойствОбъекта(Источник); + Наборы = ТаблицаНаборов.ВыгрузитьКолонку("Набор"); + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("Ссылки", Наборы); + Запрос.Текст = + "ВЫБРАТЬ + | РеквизитыНабора.Свойство КАК Свойство + |ИЗ + | Справочник.НаборыДополнительныхРеквизитовИСведений.ДополнительныеРеквизиты КАК РеквизитыНабора + | ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК ДополнительныеРеквизиты + | ПО РеквизитыНабора.Свойство = ДополнительныеРеквизиты.Ссылка + |ГДЕ + | РеквизитыНабора.Ссылка В(&Ссылки) + | И ДополнительныеРеквизиты.ЗаполнятьОбязательно = ИСТИНА"; + Результат = Запрос.Выполнить().Выгрузить(); + + Если Результат.Количество() = 0 Тогда + Возврат; // Нет обязательных для заполнения. + КонецЕсли; + Реквизиты = Результат.ВыгрузитьКолонку("Свойство"); + + ЗначенияСвойств = УправлениеСвойствами.ЗначенияСвойств(Источник.Ссылка, Истина, Ложь, Реквизиты); + Если ЗначенияСвойств.Количество() = Результат.Количество() Тогда + Возврат; // Реквизиты заполнены. + КонецЕсли; + + Сообщения = Новый Массив; + + Зависимости = ОбщегоНазначения.ЗначенияРеквизитовОбъектов(Реквизиты, "ЗависимостиДополнительныхРеквизитов"); + Для Каждого Элемент Из Зависимости Цикл + ТаблицаЗависимостей = Элемент.Значение.ЗависимостиДополнительныхРеквизитов.Выгрузить(); + Если ТаблицаЗависимостей.Количество() = 0 Тогда + Текст = НСтр("ru = 'Реквизит ""%1"" не заполнен.'"); + Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Текст, Элемент.Ключ); + Сообщения.Добавить(Текст); + Иначе + // Нужно получить все реквизиты объекта на случай, если по ним настроена зависимость. + ДополнительныеРеквизитыОбъекта = УправлениеСвойствами.СвойстваОбъекта(Источник, Истина, Ложь); + ЗначенияРеквизитов = Новый Структура; + Для Каждого ДополнительныйРеквизит Из ДополнительныеРеквизитыОбъекта Цикл + Строка = Проверка.ДополнительныеРеквизиты.Найти(ДополнительныйРеквизит, "Свойство"); + Свойства = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ДополнительныйРеквизит, "Имя,ТипЗначения"); + Если Строка = Неопределено Тогда + ЗначенияРеквизитов.Вставить(Свойства.Имя, Свойства.ТипЗначения.ПривестиЗначение(Неопределено)); + Иначе + ЗначенияРеквизитов.Вставить(Свойства.Имя, Строка.Значение); + КонецЕсли; + КонецЦикла; + + ОписаниеЗависимогоРеквизита = Новый Структура; + ОписаниеЗависимогоРеквизита.Вставить("УсловиеОбязательностиЗаполнения", Неопределено); + Для Каждого СтрокаЗависимостей Из ТаблицаЗависимостей Цикл + Если ТипЗнч(СтрокаЗависимостей.Реквизит) = Тип("Строка") Тогда + ПутьКРеквизиту = "Параметры.ОписаниеОбъекта." + СтрокаЗависимостей.Реквизит; + Иначе + ПутьКРеквизиту = "Параметры.Форма." + ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СтрокаЗависимостей.Реквизит, "Имя"); + КонецЕсли; + + ПостроитьУсловияЗависимостей(ОписаниеЗависимогоРеквизита, ПутьКРеквизиту, СтрокаЗависимостей); + Параметры = ОписаниеЗависимогоРеквизита.УсловиеОбязательностиЗаполнения; + КонецЦикла; + + ПараметрыУсловия = Новый Структура; + ПараметрыУсловия.Вставить("ЗначенияПараметров", Параметры.ЗначенияПараметров); + ПараметрыУсловия.Вставить("Форма", ЗначенияРеквизитов); + ПараметрыУсловия.Вставить("ОписаниеОбъекта", Источник); + + НеобходимоЗаполнить = ОбщегоНазначения.ВычислитьВБезопасномРежиме(Параметры.КодУсловия, ПараметрыУсловия); + Если НеобходимоЗаполнить Тогда + Текст = НСтр("ru = 'Реквизит ""%1"" не заполнен.'"); + Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Текст, Элемент.Ключ); + Сообщения.Добавить(Текст); + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Если Сообщения.Количество() > 0 Тогда + ОбщегоНазначения.СообщитьПользователю(СтрСоединить(Сообщения, Символы.ПС), , , , Отказ); + КонецЕсли; + +КонецПроцедуры + +Процедура ПостроитьУсловияЗависимостей(ОписаниеЗависимогоРеквизита, ПутьКРеквизиту, СтрокаТаблицы) Экспорт + + // Преобразование старого условия для обратной совместимости. + УсловиеЧастями = СтрРазделить(СтрокаТаблицы.Условие, " "); + НовоеУсловие = ""; + Если УсловиеЧастями.Количество() > 0 Тогда + Для Каждого ЧастьУсловия Из УсловиеЧастями Цикл + НовоеУсловие = НовоеУсловие + ВРег(Лев(ЧастьУсловия, 1)) + Сред(ЧастьУсловия, 2); + КонецЦикла; + КонецЕсли; + + Если ЗначениеЗаполнено(НовоеУсловие) Тогда + СтрокаТаблицы.Условие = НовоеУсловие; + КонецЕсли; + + ШаблонУсловия = ""; + Если СтрокаТаблицы.Условие = "Равно" Тогда + ШаблонУсловия = "%1 = %2"; + ИначеЕсли СтрокаТаблицы.Условие = "НеРавно" Тогда + ШаблонУсловия = "%1 <> %2"; + КонецЕсли; + + Если СтрокаТаблицы.Условие = "ВСписке" Тогда + ШаблонУсловия = "%2.НайтиПоЗначению(%1) <> Неопределено"; + ИначеЕсли СтрокаТаблицы.Условие = "НеВСписке" Тогда + ШаблонУсловия = "%2.НайтиПоЗначению(%1) = Неопределено"; + КонецЕсли; + + ПравоеЗначение = ""; + Если ЗначениеЗаполнено(ШаблонУсловия) Тогда + ПравоеЗначение = "Параметры.ЗначенияПараметров[""" + ПутьКРеквизиту + """]"; + КонецЕсли; + + Если СтрокаТаблицы.Условие = "Заполнено" Тогда + ШаблонУсловия = "ЗначениеЗаполнено(%1)"; + ИначеЕсли СтрокаТаблицы.Условие = "НеЗаполнено" Тогда + ШаблонУсловия = "Не ЗначениеЗаполнено(%1)"; + КонецЕсли; + + Если ЗначениеЗаполнено(ПравоеЗначение) Тогда + КодУсловия = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонУсловия, ПутьКРеквизиту, ПравоеЗначение); + Иначе + КодУсловия = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонУсловия, ПутьКРеквизиту); + КонецЕсли; + + Если СтрокаТаблицы.ЗависимоеСвойство = "Доступен" Тогда + УстановитьУсловиеЗависимости(ОписаниеЗависимогоРеквизита.УсловиеДоступности, ПутьКРеквизиту, СтрокаТаблицы, КодУсловия, СтрокаТаблицы.Условие); + ИначеЕсли СтрокаТаблицы.ЗависимоеСвойство = "Виден" Тогда + УстановитьУсловиеЗависимости(ОписаниеЗависимогоРеквизита.УсловиеВидимости, ПутьКРеквизиту, СтрокаТаблицы, КодУсловия, СтрокаТаблицы.Условие); + Иначе + УстановитьУсловиеЗависимости(ОписаниеЗависимогоРеквизита.УсловиеОбязательностиЗаполнения, ПутьКРеквизиту, СтрокаТаблицы, КодУсловия, СтрокаТаблицы.Условие); + КонецЕсли; + +КонецПроцедуры + +Процедура УстановитьУсловиеЗависимости(СтруктураЗависимостей, ПутьКРеквизиту, СтрокаТаблицы, КодУсловия, Условие) + Если СтруктураЗависимостей = Неопределено Тогда + ЗначенияПараметров = Новый Соответствие; + Если Условие = "ВСписке" + Или Условие = "НеВСписке" Тогда + Значение = Новый СписокЗначений; + Значение.Добавить(СтрокаТаблицы.Значение); + Иначе + Значение = СтрокаТаблицы.Значение; + КонецЕсли; + ЗначенияПараметров.Вставить(ПутьКРеквизиту, Значение); + СтруктураЗависимостей = Новый Структура; + СтруктураЗависимостей.Вставить("КодУсловия", КодУсловия); + СтруктураЗависимостей.Вставить("ЗначенияПараметров", ЗначенияПараметров); + ИначеЕсли (Условие = "ВСписке" Или Условие = "НеВСписке") + И ТипЗнч(СтруктураЗависимостей.ЗначенияПараметров[ПутьКРеквизиту]) = Тип("СписокЗначений") Тогда + СтруктураЗависимостей.ЗначенияПараметров[ПутьКРеквизиту].Добавить(СтрокаТаблицы.Значение); + Иначе + СтруктураЗависимостей.КодУсловия = СтруктураЗависимостей.КодУсловия + " И " + КодУсловия; + Если Условие = "ВСписке" Или Условие = "НеВСписке" Тогда + Значение = Новый СписокЗначений; + Значение.Добавить(СтрокаТаблицы.Значение); + Иначе + Значение = СтрокаТаблицы.Значение; + КонецЕсли; + СтруктураЗависимостей.ЗначенияПараметров.Вставить(ПутьКРеквизиту, Значение); + КонецЕсли; +КонецПроцедуры + +Процедура УстановкаПараметровСеанса(Знач ИмяПараметра, УстановленныеПараметры) Экспорт + Если ИмяПараметра = "ИнтерактивнаяПроверкаЗаполненияСвойств" Тогда + ПараметрыСеанса.ИнтерактивнаяПроверкаЗаполненияСвойств = Ложь; + УстановленныеПараметры.Добавить("ИнтерактивнаяПроверкаЗаполненияСвойств"); + КонецЕсли; +КонецПроцедуры + // См. УправлениеСвойствами.ПеренестиЗначенияИзРеквизитовФормыВОбъект. Процедура ПеренестиЗначенияИзРеквизитовФормыВОбъект(Форма, Объект = Неопределено, ПередЗаписью = Ложь) Экспорт @@ -487,8 +705,8 @@ Запрос.Текст = "ВЫБРАТЬ - | НаборыСвойств.Набор, - | НаборыСвойств.ПорядокНабора + | НаборыСвойств.Набор КАК Набор, + | НаборыСвойств.ПорядокНабора КАК ПорядокНабора |ПОМЕСТИТЬ НаборыСвойств |ИЗ | &НаборыСвойств КАК НаборыСвойств @@ -496,10 +714,10 @@ | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ РАЗРЕШЕННЫЕ - | НаборыСвойств.Набор, - | НаборыСвойств.ПорядокНабора, - | СвойстваНаборов.Свойство, - | СвойстваНаборов.ПометкаУдаления, + | НаборыСвойств.Набор КАК Набор, + | НаборыСвойств.ПорядокНабора КАК ПорядокНабора, + | СвойстваНаборов.Свойство КАК Свойство, + | СвойстваНаборов.ПометкаУдаления КАК ПометкаУдаления, | СвойстваНаборов.НомерСтроки КАК ПорядокСвойства |ПОМЕСТИТЬ СвойстваНаборов |ИЗ @@ -525,10 +743,10 @@ | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ - | СвойстваНаборов.Набор, - | СвойстваНаборов.ПорядокНабора, - | СвойстваНаборов.Свойство, - | СвойстваНаборов.ПорядокСвойства, + | СвойстваНаборов.Набор КАК Набор, + | СвойстваНаборов.ПорядокНабора КАК ПорядокНабора, + | СвойстваНаборов.Свойство КАК Свойство, + | СвойстваНаборов.ПорядокСвойства КАК ПорядокСвойства, | СвойстваНаборов.ПометкаУдаления КАК Удалено |ПОМЕСТИТЬ ВсеСвойства |ИЗ @@ -547,45 +765,46 @@ | ЛЕВОЕ СОЕДИНЕНИЕ СвойстваНаборов КАК СвойстваНаборов | ПО ЗаполненныеСвойства.Свойство = СвойстваНаборов.Свойство |ГДЕ - | СвойстваНаборов.Свойство ЕСТЬ NULL + | СвойстваНаборов.Свойство ЕСТЬ NULL |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ РАЗРЕШЕННЫЕ - | ВсеСвойства.Набор, - | ВсеСвойства.Свойство, - | ДополнительныеРеквизитыИСведения.ВладелецДополнительныхЗначений, - | ДополнительныеРеквизитыИСведения.ЗаполнятьОбязательно, + | ВсеСвойства.Набор КАК Набор, + | ВсеСвойства.Свойство КАК Свойство, + | ДополнительныеРеквизитыИСведения.ВладелецДополнительныхЗначений КАК ВладелецДополнительныхЗначений, + | ДополнительныеРеквизитыИСведения.ЗаполнятьОбязательно КАК ЗаполнятьОбязательно, | ВЫБОР | КОГДА &ЭтоОсновнойЯзык | ТОГДА ДополнительныеРеквизитыИСведения.Заголовок | ИНАЧЕ ВЫРАЗИТЬ(ЕСТЬNULL(СвойстваПредставления.Заголовок, ДополнительныеРеквизитыИСведения.Заголовок) КАК СТРОКА(150)) | КОНЕЦ КАК Наименование, - | ДополнительныеРеквизитыИСведения.ТипЗначения, - | ДополнительныеРеквизитыИСведения.ФорматСвойства, - | ДополнительныеРеквизитыИСведения.МногострочноеПолеВвода, + | ДополнительныеРеквизитыИСведения.ТипЗначения КАК ТипЗначения, + | ДополнительныеРеквизитыИСведения.ФорматСвойства КАК ФорматСвойства, + | ДополнительныеРеквизитыИСведения.МногострочноеПолеВвода КАК МногострочноеПолеВвода, | ВсеСвойства.Удалено КАК Удалено, - | ДополнительныеРеквизитыИСведения.Доступен, - | ДополнительныеРеквизитыИСведения.Виден, + | ДополнительныеРеквизитыИСведения.Доступен КАК Доступен, + | ДополнительныеРеквизитыИСведения.Виден КАК Виден, | ВЫБОР | КОГДА &ЭтоОсновнойЯзык | ТОГДА ДополнительныеРеквизитыИСведения.Подсказка | ИНАЧЕ ВЫРАЗИТЬ(ЕСТЬNULL(СвойстваПредставления.Подсказка, ДополнительныеРеквизитыИСведения.Подсказка) КАК СТРОКА(150)) | КОНЕЦ КАК Подсказка, - | ДополнительныеРеквизитыИСведения.ВыводитьВВидеГиперссылки, + | ДополнительныеРеквизитыИСведения.ВыводитьВВидеГиперссылки КАК ВыводитьВВидеГиперссылки, | ДополнительныеРеквизитыИСведения.ЗависимостиДополнительныхРеквизитов.( - | ЗависимоеСвойство, - | Реквизит, - | Условие, - | Значение - | ) + | ЗависимоеСвойство КАК ЗависимоеСвойство, + | Реквизит КАК Реквизит, + | Условие КАК Условие, + | Значение КАК Значение, + | НаборСвойств КАК НаборСвойств + | ) КАК ЗависимостиДополнительныхРеквизитов |ИЗ | ВсеСвойства КАК ВсеСвойства | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК ДополнительныеРеквизитыИСведения | ПО ВсеСвойства.Свойство = ДополнительныеРеквизитыИСведения.Ссылка | ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.Представления КАК СвойстваПредставления | ПО (СвойстваПредставления.Ссылка = ДополнительныеРеквизитыИСведения.Ссылка) - | И СвойстваПредставления.КодЯзыка = &КодЯзыка + | И (СвойстваПредставления.КодЯзыка = &КодЯзыка) | |УПОРЯДОЧИТЬ ПО | Удалено, @@ -662,7 +881,7 @@ // Только для внутреннего использования. // -Функция ДополнительныеРеквизитыИСведенияНеНайдены(Наборы, ЭтоДополнительноеСведение, ОтложеннаяИнициализация = Ложь) Экспорт +Функция ДополнительныеРеквизитыИСведенияНеНайдены(Наборы, ЭтоДополнительноеСведение, ОтложеннаяИнициализация = Ложь) Запрос = Новый Запрос; Запрос.УстановитьПараметр("НаборыСвойств", Наборы.ВыгрузитьЗначения()); @@ -689,6 +908,34 @@ Возврат СвойстваНеНайдены; КонецФункции +Функция ОтображатьЗакладкуДополнительно(Ссылка, Наборы) Экспорт + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("Ссылка", Ссылка); + Запрос.УстановитьПараметр("НаборыСвойств", Наборы.ВыгрузитьЗначения()); + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | ДополнительныеРеквизиты.Свойство КАК Свойство + |ИЗ + | [ИмяТаблицы].ДополнительныеРеквизиты КАК ДополнительныеРеквизиты + |ГДЕ + | ДополнительныеРеквизиты.Ссылка = &Ссылка + |; + | + |ВЫБРАТЬ ПЕРВЫЕ 1 + | СвойстваНаборов.Свойство КАК Свойство + |ИЗ + | Справочник.НаборыДополнительныхРеквизитовИСведений.ДополнительныеРеквизиты КАК СвойстваНаборов + |ГДЕ + | СвойстваНаборов.Ссылка В(&НаборыСвойств) + | И НЕ СвойстваНаборов.ПометкаУдаления"; + Запрос.Текст = СтрЗаменить(Запрос.Текст, "[ИмяТаблицы]", Ссылка.Метаданные().ПолноеИмя()); + Результат = Запрос.ВыполнитьПакет(); + + Возврат Не (Результат[0].Пустой() И Результат[1].Пустой()); + +КонецФункции + // Возвращает объект метаданных, который является владельцем значений // свойств набора дополнительных реквизитов и сведений. // @@ -787,6 +1034,11 @@ Процедура ЗаполнитьНаборыСДополнительнымиРеквизитами(ВсеНаборы, НаборыСРеквизитами) Экспорт Ссылки = ВсеНаборы.ВыгрузитьКолонку("Набор"); + Индекс = Ссылки.Найти(Неопределено); + Пока Индекс <> Неопределено Цикл + Ссылки.Удалить(Индекс); + Индекс = Ссылки.Найти(Неопределено); + КонецЦикла; СвойстваСсылок = ОбщегоНазначения.ЗначенияРеквизитовОбъектов( Ссылки, "ПометкаУдаления, ЭтоГруппа, Предопределенный, Родитель, ИмяПредопределенныхДанных, ИмяПредопределенногоНабора"); @@ -900,6 +1152,11 @@ Результат = Запрос.Выполнить().Выгрузить(); Для Каждого Строка Из Результат Цикл + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения"); + ЭлементБлокировки.УстановитьЗначение("Ссылка", Строка.Ссылка); + Блокировка.Заблокировать(); + РеквизитОбъект = Строка.Ссылка.ПолучитьОбъект(); ПараметрыОтбора = Новый Структура("Значение", Объект.Ссылка); НайденныеСтроки = РеквизитОбъект.ЗависимостиДополнительныхРеквизитов.НайтиСтроки(ПараметрыОтбора); @@ -914,9 +1171,9 @@ // // Параметры: // Свойство - ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения. -// +// // Возвращаемое значение: -// Булево. Истина, если найден хотя бы один объект. +// Булево - Истина, если найден хотя бы один объект. // Функция ДополнительноеСвойствоИспользуется(Свойство) Экспорт @@ -1100,6 +1357,11 @@ ДополнительныеРеквизитыГруппы = РезультатЗапроса[0].Выгрузить(); ДополнительныеСведенияГруппы = РезультатЗапроса[1].Выгрузить(); + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Справочник.НаборыДополнительныхРеквизитовИСведений"); + ЭлементБлокировки.УстановитьЗначение("Ссылка", Группа); + Блокировка.Заблокировать(); + ГруппаОбъект = Группа.ПолучитьОбъект(); Обновить = Ложь; diff --git a/SSL/src/CommonModules/УправлениеЭлектроннойПочтой/Module.bsl b/SSL/src/CommonModules/УправлениеЭлектроннойПочтой/Module.bsl index 8b51c50e6..7feda57ea 100644 --- a/SSL/src/CommonModules/УправлениеЭлектроннойПочтой/Module.bsl +++ b/SSL/src/CommonModules/УправлениеЭлектроннойПочтой/Module.bsl @@ -18,6 +18,37 @@ КонецПроцедуры +Функция ВложенияЭлектронногоПисьма(Письмо, ИдентификаторФормы) Экспорт + + Результат = Новый ТаблицаЗначений; + Результат.Колонки.Добавить("Наименование", ОбщегоНазначения.ОписаниеТипаСтрока(256)); + Результат.Колонки.Добавить("ИДФайлаЭлектронногоПисьма", ОбщегоНазначения.ОписаниеТипаСтрока(32)); + Результат.Колонки.Добавить("Ссылка"); + + Вложения = ПолучитьВложенияЭлектронногоПисьма(Письмо, Ложь); + Для каждого Вложения Из Вложения Цикл + + НовоеВложения = Результат.Добавить(); + НовоеВложения.Наименование = Вложения.ИмяФайла; + НовоеВложения.ИДФайлаЭлектронногоПисьма = Вложения.ИДФайлаЭлектронногоПисьма; + НовоеВложения.Ссылка = Вложения.Ссылка; + + КонецЦикла; + + Возврат Результат; + +КонецФункции + +Функция ЯвляетсяПисьмомИлиСообщением(Ссылка) Экспорт + + ТипОбъекта = ТипЗнч(Ссылка); + + Возврат ТипОбъекта = Тип("ДокументСсылка.ЭлектронноеПисьмоВходящее") + ИЛИ ТипОбъекта = Тип("ДокументСсылка.ЭлектронноеПисьмоИсходящее") + ИЛИ ТипОбъекта = Тип("ДокументСсылка.СообщениеSMS"); + +КонецФункции + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -40,9 +71,26 @@ УровеньЖурналаРегистрации.Информация, , , НСтр("ru = 'Начато регламентное получение и отправка электронной почты'", ОбщегоНазначения.КодОсновногоЯзыка())); - СтруктураМассивовПисем = СтруктураМассиваПисем(); + ПолученныеПисьма = ПолученныеПисьма(); + УчетнаяЗапись = ЗагрузитьЭлектронныеПисьма(ПолученныеПисьма); + ОтправитьЭлектронныеПисьма(ПолученныеПисьма.ПисьмаДляОпределенияПапок, ПолученныеПисьма.ВсеПолученныеПисьма); + ОпределитьЗагруженныеРанееПодчиненныеПисьма(УчетнаяЗапись, ПолученныеПисьма.ВсеПолученныеПисьма); + + Взаимодействия.ЗаполнитьКонтактыМассиваВзаимодействий(ПолученныеПисьма.ВсеПолученныеПисьма); + Взаимодействия.УстановитьПапкиДляМассиваПисем(ПолученныеПисьма.ПисьмаДляОпределенияПапок); + Взаимодействия.РассчитатьРассмотреноПоПредметам(ПолученныеПисьма.ВсеПолученныеПисьма); + Взаимодействия.РассчитатьРассмотреноПоКонтактам(ПолученныеПисьма.ВсеПолученныеПисьма); + + ОтправитьУведомленияОПрочтении(Ложь); + + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), + УровеньЖурналаРегистрации.Информация, , , + НСтр("ru = 'Закончено регламентное получение и отправка электронной почты'", ОбщегоНазначения.КодОсновногоЯзыка())); + +КонецПроцедуры + +Функция ЗагрузитьЭлектронныеПисьма(ПолученныеПисьма) - // Получение писем Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ @@ -78,15 +126,17 @@ | И УчетныеЗаписиЭлектроннойПочты.СерверВходящейПочты <> """""; Выборка = Запрос.Выполнить().Выбрать(); - Пока Выборка.Следующий() Цикл - Получено = 0; - ПолучитьПисьма(Выборка, Ложь, Получено, СтруктураМассивовПисем); - + ПолучитьПисьма(Выборка, Ложь, Получено, ПолученныеПисьма); КонецЦикла; + + Возврат Выборка.Ссылка; + +КонецФункции + +Процедура ОтправитьЭлектронныеПисьма(ПисьмаДляОпределенияПапок, ВсеПолученныеПисьма) - // Отправка писем Запрос = Новый Запрос; Запрос.Текст = " |ВЫБРАТЬ @@ -131,219 +181,261 @@ ВыборкаУчетныеЗаписи = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаУчетныеЗаписи.Следующий() Цикл - Профиль = РаботаСПочтовымиСообщениямиСлужебный.ИнтернетПочтовыйПрофиль(ВыборкаУчетныеЗаписи.УчетнаяЗапись); + Подключение = ПодключитьсяКПочтовомуСерверу(ВыборкаУчетныеЗаписи.УчетнаяЗапись, Ложь); + Если Не Подключение.Успешно Тогда + Продолжить; + КонецЕсли; Попытка - Соединение = Новый ИнтернетПочта; - ПротоколПодключения = ?(ПустаяСтрока(Профиль.АдресСервераIMAP),ПротоколИнтернетПочты.POP3, ПротоколИнтернетПочты.IMAP); - Соединение.Подключиться(Профиль, ПротоколПодключения); - - Если ПротоколПодключения = ПротоколИнтернетПочты.IMAP Тогда - ПочтовыеЯщики = Соединение.ПолучитьПочтовыеЯщики(); - Для Каждого ПочтовыйЯщик Из ПочтовыеЯщики Цикл - Если НРег(ПочтовыйЯщик) = "отправленные" - Или НРег(ПочтовыйЯщик) = "sent" Тогда - - Соединение.ТекущийПочтовыйЯщик = ПочтовыйЯщик; - Прервать; - + ВыборкаПисьма = ВыборкаУчетныеЗаписи.Выбрать(); + Пока ВыборкаПисьма.Следующий() Цикл + + Если Не ОтправитьЭлектронноеПисьмо(ВыборкаПисьма, Подключение, Ложь) Тогда + Продолжить; + КонецЕсли; + + Если Не ВыборкаПисьма.УдалятьПослеОтправки Тогда + Если ВыборкаПисьма.ТребуетсяОпределениеПапки Тогда + ПисьмаДляОпределенияПапок.Добавить(ВыборкаПисьма.Ссылка); КонецЕсли; - КонецЦикла; - КонецЕсли; + ВсеПолученныеПисьма.Добавить(ВыборкаПисьма.Ссылка); + КонецЕсли; + + КонецЦикла; + Подключение.Соединение.Отключиться(); Исключение - - ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Во время подключения к учетной записи %1 произошла ошибка - |%2'", ОбщегоНазначения.КодОсновногоЯзыка()), - ВыборкаУчетныеЗаписи.УчетнаяЗапись, - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - - ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), - УровеньЖурналаРегистрации.Ошибка, , , - ТекстСообщенияОбОшибке); - - Продолжить; - - КонецПопытки; - - ВыборкаПисьма = ВыборкаУчетныеЗаписи.Выбрать(); - Пока ВыборкаПисьма.Следующий() Цикл - - ПисьмоОбъект = ВыборкаПисьма.Ссылка.ПолучитьОбъект(); - Попытка - - ПараметрыПисьма = Неопределено; - - Если ПротоколПодключения = ПротоколИнтернетПочты.IMAP - И НЕ СерверИсходящейПочтыНеТребуетДополнительнойОтправкиПоIMAP(Профиль.АдресСервераSMTP) - И Не ВыборкаПисьма.УдалятьПослеОтправки Тогда - - ПротоколПочты = "Все"; - - Иначе - - ПротоколПочты = ""; - - КонецЕсли; - - Взаимодействия.ВыполнитьОтправкуПисьма(ПисьмоОбъект, Соединение, ПараметрыПисьма, ПротоколПочты); - - Исключение - - ЭтоПроблемаОтвергнутыхСерверомПочтовыхАдресов = Ложь; - ВсеАдресатыПисьмаОтвергнутыСервером = Ложь; - ПредставлениеОшибочныхАдресатов = ""; - - Если ПараметрыПисьма.Свойство("ОшибочныеПолучатели") Тогда - - ДанныеАнализаОшибочныхПолучателей = РезультатАнализаОшибочныхПолучателей(ПисьмоОбъект, ПараметрыПисьма.ОшибочныеПолучатели); - - ЭтоПроблемаОтвергнутыхСерверомПочтовыхАдресов = ДанныеАнализаОшибочныхПолучателей.ЭтоПроблемаОтвергнутыхСерверомПочтовыхАдресов; - ВсеАдресатыПисьмаОтвергнутыСервером = ДанныеАнализаОшибочныхПолучателей.ВсеАдресатыПисьмаОтвергнутыСервером; - ПредставлениеОшибочныхАдресатов = ДанныеАнализаОшибочныхПолучателей.ПредставлениеОшибочныхАдресатов; - - КонецЕсли; - - Если ЭтоПроблемаОтвергнутыхСерверомПочтовыхАдресов - И Не ВсеАдресатыПисьмаОтвергнутыСервером Тогда - - ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Следующие адресаты электронного письма %1 не приняты почтовым сервером: - |%2. Письмо отправлено остальным адресатам.'", ОбщегоНазначения.КодОсновногоЯзыка()), - ВыборкаПисьма.ПредставлениеПисьма, - ПредставлениеОшибочныхАдресатов); - - Иначе - - ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Во время отправки электронного письма %1 произошла ошибка - |%2'", ОбщегоНазначения.КодОсновногоЯзыка()), - ВыборкаПисьма.ПредставлениеПисьма, - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - - КонецЕсли; - - ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), - УровеньЖурналаРегистрации.Ошибка, , , - ТекстСообщенияОбОшибке); - - Если НЕ ЭтоПроблемаОтвергнутыхСерверомПочтовыхАдресов - Или ВсеАдресатыПисьмаОтвергнутыСервером Тогда - - МенеджерЗаписи = РегистрыСведений.НепринятыеКОбработкеПочтовымСерверомИсходящиеПисьма.СоздатьМенеджерЗаписи(); - МенеджерЗаписи.Письмо = ВыборкаПисьма.Ссылка; - МенеджерЗаписи.КоличествоПопыток = ВыборкаПисьма.КоличествоПопыток + 1; - МенеджерЗаписи.ИнформацияООшибке = ТекстСообщенияОбОшибке; - МенеджерЗаписи.Записать(); - - Продолжить; - - КонецЕсли; - - КонецПопытки; - - Если ВыборкаПисьма.УдалятьПослеОтправки Тогда - - ПисьмоОбъект.Удалить(); - - Иначе - - ПисьмоОбъект.СтатусПисьма = Перечисления.СтатусыИсходящегоЭлектронногоПисьма.Отправлено; - ПисьмоОбъект.Размер = Взаимодействия.ОценитьРазмерИсходящегоЭлектронногоПисьма(ПисьмоОбъект.Ссылка); - ПисьмоОбъект.ДатаОтправления = ТекущаяДатаСеанса(); - ПисьмоОбъект.ДополнительныеСвойства.Вставить("НеЗаписыватьКонтакты", Истина); - ПисьмоОбъект.Записать(РежимЗаписиДокумента.Запись); - Если ВыборкаПисьма.ТребуетсяОпределениеПапки Тогда - СтруктураМассивовПисем.ПисьмаДляОпределенияПапок.Добавить(ВыборкаПисьма.Ссылка); - КонецЕсли; - СтруктураМассивовПисем.ВсеПолученныеПисьма.Добавить(ВыборкаПисьма.Ссылка); - КонецЕсли; - - КонецЦикла; - - Соединение.Отключиться(); + Подключение.Соединение.Отключиться(); + ВызватьИсключение; + КонецПопытки; КонецЦикла; - ОпределитьЗагруженныеРанееПодчиненныеПисьма(Выборка.Ссылка, СтруктураМассивовПисем.ВсеПолученныеПисьма); - Взаимодействия.ЗаполнитьКонтактыМассиваВзаимодействий(СтруктураМассивовПисем.ВсеПолученныеПисьма); - Взаимодействия.УстановитьПапкиДляМассиваПисем(СтруктураМассивовПисем.ПисьмаДляОпределенияПапок); - Взаимодействия.РассчитатьРассмотреноПоПредметам(СтруктураМассивовПисем.ВсеПолученныеПисьма); - Взаимодействия.РассчитатьРассмотреноПоКонтактам(СтруктураМассивовПисем.ВсеПолученныеПисьма); +КонецПроцедуры + +Функция ОтправитьЭлектронноеПисьмо(ВыборкаПисьма, Подключение, Интерактивно) + + ПисьмоОбъект = ВыборкаПисьма.Ссылка.ПолучитьОбъект(); + Если ПисьмоОбъект = Неопределено Тогда + Возврат Ложь; + КонецЕсли; - // Отправим уведомления о прочтении. - Запрос = Новый Запрос; - Запрос.Текст = " - |ВЫБРАТЬ - | УведомленияОПрочтении.Письмо, - | ПРЕДСТАВЛЕНИЕ(УведомленияОПрочтении.Письмо) КАК ПредставлениеПисьма, - | УведомленияОПрочтении.ДатаПрочтения, - | ЭлектронноеПисьмоВходящее.АдресаУведомленияОПрочтении.( - | Адрес, - | Представление, - | Контакт - | ), - | УчетныеЗаписиЭлектроннойПочты.Ссылка КАК УчетнаяЗапись, - | ЭлектронноеПисьмоВходящее.ОтправительПредставление, - | ЭлектронноеПисьмоВходящее.ОтправительАдрес, - | ЭлектронноеПисьмоВходящее.Дата, - | УчетныеЗаписиЭлектроннойПочты.ИмяПользователя, - | УчетныеЗаписиЭлектроннойПочты.АдресЭлектроннойПочты, - | ЭлектронноеПисьмоВходящее.Тема - |ИЗ - | РегистрСведений.УведомленияОПрочтении КАК УведомленияОПрочтении - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ЭлектронноеПисьмоВходящее КАК ЭлектронноеПисьмоВходящее - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.УчетныеЗаписиЭлектроннойПочты КАК УчетныеЗаписиЭлектроннойПочты - | ПО ЭлектронноеПисьмоВходящее.УчетнаяЗапись = УчетныеЗаписиЭлектроннойПочты.Ссылка - | ПО УведомленияОПрочтении.Письмо = ЭлектронноеПисьмоВходящее.Ссылка - |ГДЕ - | УведомленияОПрочтении.ТребуетсяОтправка - |ИТОГИ ПО - | УчетнаяЗапись"; + Попытка + + ПараметрыПисьма = Неопределено; + Если Подключение.ПротоколПодключения = ПротоколИнтернетПочты.IMAP + И НЕ СерверИсходящейПочтыНеТребуетДополнительнойОтправкиПоIMAP(Подключение.Профиль.АдресСервераSMTP) + И Не ВыборкаПисьма.УдалятьПослеОтправки Тогда + ПротоколПочты = "Все"; + Иначе + ПротоколПочты = ""; + КонецЕсли; + + Взаимодействия.ВыполнитьОтправкуПисьма(ПисьмоОбъект, Подключение.Соединение, ПараметрыПисьма, ПротоколПочты); + + Исключение + Если Не ОбработатьОшибкуОтправкиПисьма(ПисьмоОбъект, ВыборкаПисьма, ПараметрыПисьма, Интерактивно) Тогда + Возврат Ложь; + КонецЕсли; + КонецПопытки; + + НачатьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Документ.ЭлектронноеПисьмоИсходящее"); + ЭлементБлокировки.УстановитьЗначение("Ссылка", ВыборкаПисьма.Ссылка); + Блокировка.Заблокировать(); + + Если ВыборкаПисьма.УдалятьПослеОтправки Тогда + ПисьмоОбъект = ВыборкаПисьма.Ссылка.ПолучитьОбъект(); + ПисьмоОбъект.Удалить(); + Иначе + ИдентификаторСообщения = ПисьмоОбъект.ИдентификаторСообщения; + ИдентификаторСообщенияОтправкаIMAP = ПисьмоОбъект.ИдентификаторСообщенияОтправкаIMAP; + + ПисьмоОбъект = ВыборкаПисьма.Ссылка.ПолучитьОбъект(); + ПисьмоОбъект.ИдентификаторСообщения = ИдентификаторСообщения; + ПисьмоОбъект.ИдентификаторСообщенияОтправкаIMAP = ИдентификаторСообщенияОтправкаIMAP; + + ПисьмоОбъект.СтатусПисьма = Перечисления.СтатусыИсходящегоЭлектронногоПисьма.Отправлено; + ПисьмоОбъект.Размер = Взаимодействия.ОценитьРазмерИсходящегоЭлектронногоПисьма(ПисьмоОбъект.Ссылка); + ПисьмоОбъект.ДатаОтправления = ТекущаяДатаСеанса(); + ПисьмоОбъект.ДополнительныеСвойства.Вставить("НеЗаписыватьКонтакты", Истина); + ПисьмоОбъект.Записать(РежимЗаписиДокумента.Запись); + КонецЕсли; + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + + Возврат Истина; + +КонецФункции + +Функция ОбработатьОшибкуОтправкиПисьма(Знач ПисьмоОбъект, Знач ВыборкаПисьма, Знач ПараметрыПисьма, Знач Интерактивно) + + РезультатАнализа = РезультатАнализаОшибочныхПолучателей(ПисьмоОбъект, ПараметрыПисьма.ОшибочныеПолучатели); + ЭтоПроблемаОтвергнутыхСерверомПочтовыхАдресов = РезультатАнализа.ЭтоПроблемаОтвергнутыхСерверомПочтовыхАдресов; + ВсеАдресатыПисьмаОтвергнутыСервером = РезультатАнализа.ВсеАдресатыПисьмаОтвергнутыСервером; + ПредставлениеОшибочныхАдресатов = РезультатАнализа.ПредставлениеОшибочныхАдресатов; + + Если ЭтоПроблемаОтвергнутыхСерверомПочтовыхАдресов И Не ВсеАдресатыПисьмаОтвергнутыСервером Тогда + ШаблонСообщенияОбОшибке = НСтр("ru = 'Следующие адресаты электронного письма %1 не приняты почтовым сервером: + |%2. Письмо отправлено остальным адресатам.'", ОбщегоНазначения.КодОсновногоЯзыка()); + ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщенияОбОшибке, + ВыборкаПисьма.ПредставлениеПисьма, ПредставлениеОшибочныхАдресатов); + Иначе + ШаблонСообщенияОбОшибке = НСтр("ru = 'Во время отправки электронного письма %1 произошла ошибка + |%2'", ОбщегоНазначения.КодОсновногоЯзыка()); + ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщенияОбОшибке, + ВыборкаПисьма.ПредставлениеПисьма, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецЕсли; + + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка, , , ТекстСообщенияОбОшибке); + + Если Интерактивно Тогда + Если Не (ЭтоПроблемаОтвергнутыхСерверомПочтовыхАдресов И Не ВсеАдресатыПисьмаОтвергнутыСервером) Тогда + ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщенияОбОшибке, + ВыборкаПисьма.ПредставлениеПисьма, КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецЕсли; + ОбщегоНазначения.СообщитьПользователю(ТекстСообщенияОбОшибке, ВыборкаПисьма.Ссылка); + КонецЕсли; + + Если НЕ ЭтоПроблемаОтвергнутыхСерверомПочтовыхАдресов Или ВсеАдресатыПисьмаОтвергнутыСервером Тогда + + МенеджерЗаписи = РегистрыСведений.НепринятыеКОбработкеПочтовымСерверомИсходящиеПисьма.СоздатьМенеджерЗаписи(); + МенеджерЗаписи.Письмо = ВыборкаПисьма.Ссылка; + МенеджерЗаписи.КоличествоПопыток = ?(ВсеАдресатыПисьмаОтвергнутыСервером, 5, ВыборкаПисьма.КоличествоПопыток + 1); + МенеджерЗаписи.ИнформацияООшибке = ТекстСообщенияОбОшибке; + МенеджерЗаписи.Записать(); + Возврат Ложь; + + КонецЕсли; + Возврат Истина; + +КонецФункции + +Процедура ОтправитьУведомленияОПрочтении(ДляТекущегоПользователя) + + ТекстЗапроса = + "ВЫБРАТЬ + | УведомленияОПрочтении.Письмо КАК Письмо, + | ПРЕДСТАВЛЕНИЕ(УведомленияОПрочтении.Письмо) КАК ПредставлениеПисьма, + | УведомленияОПрочтении.ДатаПрочтения КАК ДатаПрочтения, + | ЭлектронноеПисьмоВходящее.АдресаУведомленияОПрочтении.( + | Адрес КАК Адрес, + | Представление КАК Представление, + | Контакт КАК Контакт + | ) КАК АдресаУведомленияОПрочтении, + | ЭлектронноеПисьмоВходящее.УчетнаяЗапись КАК УчетнаяЗапись, + | ЭлектронноеПисьмоВходящее.ОтправительПредставление КАК ОтправительПредставление, + | ЭлектронноеПисьмоВходящее.ОтправительАдрес КАК ОтправительАдрес, + | ЭлектронноеПисьмоВходящее.Дата КАК Дата, + | УчетныеЗаписиЭлектроннойПочты.ИмяПользователя КАК ИмяПользователя, + | УчетныеЗаписиЭлектроннойПочты.АдресЭлектроннойПочты КАК АдресЭлектроннойПочты, + | ЭлектронноеПисьмоВходящее.Тема КАК Тема, + | УведомленияОПрочтении.Пользователь КАК Пользователь + |ИЗ + | РегистрСведений.УведомленияОПрочтении КАК УведомленияОПрочтении + | ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЭлектронноеПисьмоВходящее КАК ЭлектронноеПисьмоВходящее + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.УчетныеЗаписиЭлектроннойПочты КАК УчетныеЗаписиЭлектроннойПочты + | ПО ЭлектронноеПисьмоВходящее.УчетнаяЗапись = УчетныеЗаписиЭлектроннойПочты.Ссылка + | ПО УведомленияОПрочтении.Письмо = ЭлектронноеПисьмоВходящее.Ссылка + |ГДЕ + | УведомленияОПрочтении.ТребуетсяОтправка + | И &ДляТекущегоПользователя + |ИТОГИ ПО + | УчетнаяЗапись"; + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ДляТекущегоПользователя", + ?(ДляТекущегоПользователя, "УведомленияОПрочтении.Пользователь = &Пользователь", "ИСТИНА")); + Запрос = Новый Запрос(ТекстЗапроса); + Если ДляТекущегоПользователя Тогда + Запрос.УстановитьПараметр("Пользователь", Пользователи.ТекущийПользователь()); + КонецЕсли; ВыборкаУчетныеЗаписи = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаУчетныеЗаписи.Следующий() Цикл - Профиль = РаботаСПочтовымиСообщениямиСлужебный.ИнтернетПочтовыйПрофиль(ВыборкаУчетныеЗаписи.УчетнаяЗапись); - - Попытка - Соединение = Новый ИнтернетПочта; - Соединение.Подключиться(Профиль); - Исключение - - ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Во время подключения к учетной записи %1 произошла ошибка - |%2'", ОбщегоНазначения.КодОсновногоЯзыка()), - ВыборкаУчетныеЗаписи.УчетнаяЗапись, - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - - ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), - УровеньЖурналаРегистрации.Ошибка, , , - ТекстСообщенияОбОшибке); - - Продолжить; - - КонецПопытки; + УчетнаяЗапись = ВыборкаУчетныеЗаписи.УчетнаяЗапись; + Письма = Новый Массив; + СсылкиПисем = Новый Массив; ВыборкаПисьма = ВыборкаУчетныеЗаписи.Выбрать(); Пока ВыборкаПисьма.Следующий() Цикл + ПараметрыПисьма = Новый Структура; - СоздатьОтправитьУведомлениеОПрочтении(ВыборкаПисьма, Истина, Соединение); + Взаимодействия.ДобавитьВПараметрАдресатов(ВыборкаПисьма, ПараметрыПисьма, "Кому", "АдресаУведомленияОПрочтении"); + ПараметрыПисьма.Вставить("Тема",НСтр("ru = 'Уведомление о прочтении'") + " / " +"Reading Confirmation"); + ПараметрыПисьма.Вставить("Тело",СформироватьТекстУведомленияОПрочтении(ВыборкаПисьма)); + ПараметрыПисьма.Вставить("Кодировка","UTF-8"); + ПараметрыПисьма.Вставить("Важность", ВажностьИнтернетПочтовогоСообщения.Обычная); + ПараметрыПисьма.Вставить("ТипТекста", Перечисления.ТипыТекстовЭлектронныхПисем.ПростойТекст); + ПараметрыПисьма.Вставить("ОбрабатыватьТексты", Ложь); + + Письмо = РаботаСПочтовымиСообщениями.ПодготовитьПисьмо(УчетнаяЗапись, ПараметрыПисьма); + Письма.Добавить(Письмо); + + СсылкиПисем.Добавить(ВыборкаПисьма.Письмо); КонецЦикла; - Соединение.Отключиться(); + РаботаСПочтовымиСообщениями.ОтправитьПисьма(УчетнаяЗапись, Письма); + + Для Каждого Ссылка Из СсылкиПисем Цикл + УстановитьПризнакОтправкиУведомления(Ссылка, Ложь); + КонецЦикла; КонецЦикла; - - ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), - УровеньЖурналаРегистрации.Информация, , , - НСтр("ru = 'Закончено регламентное получение и отправка электронной почты'", ОбщегоНазначения.КодОсновногоЯзыка())); - + КонецПроцедуры +Функция ПодключитьсяКПочтовомуСерверу(УчетнаяЗапись, Интерактивно) + + Результат = Новый Структура; + Результат.Вставить("Успешно", Истина); + Результат.Вставить("Профиль", Неопределено); + Результат.Вставить("Соединение", Неопределено); + Результат.Вставить("ПротоколПодключения", Неопределено); + + Результат.Профиль = РаботаСПочтовымиСообщениямиСлужебный.ИнтернетПочтовыйПрофиль(УчетнаяЗапись); + Попытка + Результат.Соединение = Новый ИнтернетПочта; + Результат.ПротоколПодключения = ?(ПустаяСтрока(Результат.Профиль.АдресСервераIMAP), ПротоколИнтернетПочты.POP3, ПротоколИнтернетПочты.IMAP); + Результат.Соединение.Подключиться(Результат.Профиль, Результат.ПротоколПодключения); + Если Результат.ПротоколПодключения = ПротоколИнтернетПочты.IMAP Тогда + ПочтовыеЯщики = Результат.Соединение.ПолучитьПочтовыеЯщики(); + Для Каждого ПочтовыйЯщик Из ПочтовыеЯщики Цикл + Если НРег(ПочтовыйЯщик) = "отправленные" Или НРег(ПочтовыйЯщик) = "sent" Тогда + Результат.Соединение.ТекущийПочтовыйЯщик = ПочтовыйЯщик; + Прервать; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + Исключение + ШаблонСообщенияОбОшибке = НСтр("ru = 'Во время подключения к учетной записи %1 произошла ошибка + |%2'", ОбщегоНазначения.КодОсновногоЯзыка()); + + ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщенияОбОшибке, + УчетнаяЗапись, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка, , , ТекстСообщенияОбОшибке); + + Если Интерактивно Тогда + ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщенияОбОшибке, + УчетнаяЗапись, КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); + ОбщегоНазначения.СообщитьПользователю(ТекстСообщенияОбОшибке, УчетнаяЗапись); + КонецЕсли; + + Результат.Успешно = Ложь; + КонецПопытки; + + Возврат Результат; + +КонецФункции + // Выполняет получение электронной почты по доступным для пользователя учетным записям. // // Параметры: @@ -401,7 +493,7 @@ Пока Выборка.Следующий() Цикл Получено = 0; - СтруктураМассивовПисем = СтруктураМассиваПисем(); + СтруктураМассивовПисем = ПолученныеПисьма(); ПолучитьПисьма(Выборка, ЕстьОшибки, Получено, СтруктураМассивовПисем); ПолученоПисем = ПолученоПисем + Получено; @@ -415,12 +507,8 @@ КонецПроцедуры -// Выполняет отправку писем пользователя. Процедура ОтправитьПочтуПользователя() - ТекущийПользователь = Пользователи.ТекущийПользователь(); - - // Отправка писем Запрос = Новый Запрос; Запрос.Текст = " |ВЫБРАТЬ РАЗРЕШЕННЫЕ @@ -429,8 +517,7 @@ | ПРЕДСТАВЛЕНИЕ(ЭлектронноеПисьмоИсходящее.Ссылка) КАК ПредставлениеПисьма, | ЭлектронноеПисьмоИсходящее.УдалятьПослеОтправки КАК УдалятьПослеОтправки, | ЕСТЬNULL(ПапкиЭлектронныхПисем.ПредопределеннаяПапка, ИСТИНА) КАК ТребуетсяОпределениеПапки, - | ЕСТЬNULL(НепринятыеКОбработкеПочтовымСерверомИсходящиеПисьма.КоличествоПопыток, 0) КАК КоличествоПопыток, - | УчетныеЗаписиЭлектроннойПочты.СерверИсходящейПочты КАК СерверИсходящейПочты + | ЕСТЬNULL(НепринятыеКОбработкеПочтовымСерверомИсходящиеПисьма.КоличествоПопыток, 0) КАК КоличествоПопыток |ИЗ | Документ.ЭлектронноеПисьмоИсходящее КАК ЭлектронноеПисьмоИсходящее | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.УчетныеЗаписиЭлектроннойПочты КАК УчетныеЗаписиЭлектроннойПочты @@ -464,205 +551,42 @@ |ИТОГИ ПО | УчетнаяЗапись"; - Запрос.УстановитьПараметр("Пользователь",ТекущийПользователь); + Запрос.УстановитьПараметр("Пользователь", Пользователи.ТекущийПользователь()); Запрос.УстановитьПараметр("ТекущаяДата", ТекущаяДатаСеанса()); - МассивПисем = Новый Массив; + ПисьмаДляОпределенияПапок = Новый Массив; ВыборкаУчетныеЗаписи = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); УстановитьПривилегированныйРежим(Истина); Пока ВыборкаУчетныеЗаписи.Следующий() Цикл - Профиль = РаботаСПочтовымиСообщениямиСлужебный.ИнтернетПочтовыйПрофиль(ВыборкаУчетныеЗаписи.УчетнаяЗапись); - - Попытка - - Соединение = Новый ИнтернетПочта; - ПротоколПодключения = ?(ПустаяСтрока(Профиль.АдресСервераIMAP),ПротоколИнтернетПочты.POP3, ПротоколИнтернетПочты.IMAP); - Соединение.Подключиться(Профиль, ПротоколПодключения); - - Если ПротоколПодключения = ПротоколИнтернетПочты.IMAP Тогда - ПочтовыеЯщики = Соединение.ПолучитьПочтовыеЯщики(); - Для Каждого ПочтовыйЯщик Из ПочтовыеЯщики Цикл - Если НРег(ПочтовыйЯщик) = "отправленные" - Или НРег(ПочтовыйЯщик) = "sent" Тогда - - Соединение.ТекущийПочтовыйЯщик = ПочтовыйЯщик; - Прервать; - - КонецЕсли; - КонецЦикла; - КонецЕсли; - - Исключение - - ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Во время подключения к учетной записи %1 произошла ошибка - |%2'", ОбщегоНазначения.КодОсновногоЯзыка()), - ВыборкаУчетныеЗаписи.УчетнаяЗапись, - КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); - - ОбщегоНазначения.СообщитьПользователю(ТекстСообщенияОбОшибке, ВыборкаУчетныеЗаписи.УчетнаяЗапись); - + Подключение = ПодключитьсяКПочтовомуСерверу(ВыборкаУчетныеЗаписи.УчетнаяЗапись, Истина); + Если Не Подключение.Успешно Тогда Продолжить; - - КонецПопытки; + КонецЕсли; ВыборкаПисьма = ВыборкаУчетныеЗаписи.Выбрать(); Пока ВыборкаПисьма.Следующий() Цикл - ПисьмоОбъект = ВыборкаПисьма.Ссылка.ПолучитьОбъект(); - Попытка - - ПараметрыПисьма = Неопределено; - - Если ПротоколПодключения = ПротоколИнтернетПочты.IMAP - И НЕ СерверИсходящейПочтыНеТребуетДополнительнойОтправкиПоIMAP(ВыборкаПисьма.СерверИсходящейПочты) - И Не ВыборкаПисьма.УдалятьПослеОтправки Тогда - - ПротоколПочты = "Все"; - - Иначе - - ПротоколПочты = ""; - - КонецЕсли; - - Взаимодействия.ВыполнитьОтправкуПисьма(ПисьмоОбъект, Соединение, ПараметрыПисьма, ПротоколПочты); - - Исключение - - ДанныеАнализаОшибочныхПолучателей = РезультатАнализаОшибочныхПолучателей(ПисьмоОбъект, ПараметрыПисьма.ОшибочныеПолучатели); - - ЭтоПроблемаОтвергнутыхСерверомПочтовыхАдресов = ДанныеАнализаОшибочныхПолучателей.ЭтоПроблемаОтвергнутыхСерверомПочтовыхАдресов; - ВсеАдресатыПисьмаОтвергнутыСервером = ДанныеАнализаОшибочныхПолучателей.ВсеАдресатыПисьмаОтвергнутыСервером; - ПредставлениеОшибочныхАдресатов = ДанныеАнализаОшибочныхПолучателей.ПредставлениеОшибочныхАдресатов; - - Если ЭтоПроблемаОтвергнутыхСерверомПочтовыхАдресов - И Не ВсеАдресатыПисьмаОтвергнутыСервером Тогда - - ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Следующие адресаты электронного письма %1 не приняты почтовым сервером: - |%2. Письмо отправлено остальным адресатам.'", ОбщегоНазначения.КодОсновногоЯзыка()), - ВыборкаПисьма.ПредставлениеПисьма, - ПредставлениеОшибочныхАдресатов); - - Иначе - - ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Во время отправки электронного письма %1 произошла ошибка - |%2'", ОбщегоНазначения.КодОсновногоЯзыка()), - ВыборкаПисьма.ПредставлениеПисьма, - КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); - - КонецЕсли; - - ОбщегоНазначения.СообщитьПользователю(ТекстСообщенияОбОшибке, ВыборкаПисьма.Ссылка); - - Если НЕ ЭтоПроблемаОтвергнутыхСерверомПочтовыхАдресов - Или ВсеАдресатыПисьмаОтвергнутыСервером Тогда - - МенеджерЗаписи = РегистрыСведений.НепринятыеКОбработкеПочтовымСерверомИсходящиеПисьма.СоздатьМенеджерЗаписи(); - МенеджерЗаписи.Письмо = ВыборкаПисьма.Ссылка; - МенеджерЗаписи.КоличествоПопыток = ?(ВсеАдресатыПисьмаОтвергнутыСервером, 5, ВыборкаПисьма.КоличествоПопыток + 1); - МенеджерЗаписи.ИнформацияООшибке = ТекстСообщенияОбОшибке; - МенеджерЗаписи.Записать(); - - Продолжить; - - КонецЕсли; - - КонецПопытки; + Если Не ОтправитьЭлектронноеПисьмо(ВыборкаПисьма, Подключение, Истина) Тогда + Продолжить; + КонецЕсли; - Если ВыборкаПисьма.УдалятьПослеОтправки Тогда - ПисьмоОбъект.Удалить(); - Иначе - - ПисьмоОбъект.СтатусПисьма = Перечисления.СтатусыИсходящегоЭлектронногоПисьма.Отправлено; - ПисьмоОбъект.Размер = Взаимодействия.ОценитьРазмерИсходящегоЭлектронногоПисьма(ПисьмоОбъект.Ссылка); - ПисьмоОбъект.ДатаОтправления = ТекущаяДатаСеанса(); - ПисьмоОбъект.ДополнительныеСвойства.Вставить("НеЗаписыватьКонтакты", Истина); - ПисьмоОбъект.Записать(РежимЗаписиДокумента.Запись); - + Если Не ВыборкаПисьма.УдалятьПослеОтправки Тогда Если ВыборкаПисьма.ТребуетсяОпределениеПапки Тогда - МассивПисем.Добавить(ВыборкаПисьма.Ссылка); + ПисьмаДляОпределенияПапок.Добавить(ВыборкаПисьма.Ссылка); КонецЕсли; КонецЕсли; КонецЦикла; - Соединение.Отключиться(); + Подключение.Соединение.Отключиться(); КонецЦикла; - Взаимодействия.УстановитьПапкиДляМассиваПисем(МассивПисем); - - // Отправим уведомления о прочтении. - Запрос = Новый Запрос; - Запрос.Текст = "ВЫБРАТЬ - | УведомленияОПрочтении.Письмо, - | ПРЕДСТАВЛЕНИЕ(УведомленияОПрочтении.Письмо) КАК ПредставлениеПисьма, - | УведомленияОПрочтении.ДатаПрочтения, - | ЭлектронноеПисьмоВходящее.АдресаУведомленияОПрочтении.( - | Адрес, - | Представление, - | Контакт - | ), - | ЭлектронноеПисьмоВходящее.УчетнаяЗапись КАК УчетнаяЗапись, - | ЭлектронноеПисьмоВходящее.ОтправительПредставление, - | ЭлектронноеПисьмоВходящее.ОтправительАдрес, - | ЭлектронноеПисьмоВходящее.Дата, - | УчетныеЗаписиЭлектроннойПочты.ИмяПользователя, - | УчетныеЗаписиЭлектроннойПочты.АдресЭлектроннойПочты, - | ЭлектронноеПисьмоВходящее.Тема, - | УведомленияОПрочтении.Пользователь - |ИЗ - | РегистрСведений.УведомленияОПрочтении КАК УведомленияОПрочтении - | ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЭлектронноеПисьмоВходящее КАК ЭлектронноеПисьмоВходящее - | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.УчетныеЗаписиЭлектроннойПочты КАК УчетныеЗаписиЭлектроннойПочты - | ПО ЭлектронноеПисьмоВходящее.УчетнаяЗапись = УчетныеЗаписиЭлектроннойПочты.Ссылка - | ПО УведомленияОПрочтении.Письмо = ЭлектронноеПисьмоВходящее.Ссылка - |ГДЕ - | УведомленияОПрочтении.ТребуетсяОтправка - | И УведомленияОПрочтении.Пользователь = &Пользователь - |ИТОГИ ПО - | УчетнаяЗапись"; - - Запрос.УстановитьПараметр("Пользователь",ТекущийПользователь); - - ВыборкаУчетныеЗаписи = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); - Пока ВыборкаУчетныеЗаписи.Следующий() Цикл - - Профиль = РаботаСПочтовымиСообщениямиСлужебный.ИнтернетПочтовыйПрофиль(ВыборкаУчетныеЗаписи.УчетнаяЗапись); - - Попытка - Соединение = Новый ИнтернетПочта; - Соединение.Подключиться(Профиль); - Исключение - - ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Во время подключения к учетной записи %1 произошла ошибка - |%2'", ОбщегоНазначения.КодОсновногоЯзыка()), - ВыборкаУчетныеЗаписи.УчетнаяЗапись, - КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); - - ОбщегоНазначения.СообщитьПользователю(ТекстСообщенияОбОшибке,ВыборкаУчетныеЗаписи.УчетнаяЗапись); - - Продолжить; - - КонецПопытки; - - ВыборкаПисьма = ВыборкаУчетныеЗаписи.Выбрать(); - Пока ВыборкаПисьма.Следующий() Цикл - - СоздатьОтправитьУведомлениеОПрочтении(ВыборкаПисьма,Ложь,Соединение); - - КонецЦикла; - - Соединение.Отключиться(); - - КонецЦикла; + Взаимодействия.УстановитьПапкиДляМассиваПисем(ПисьмаДляОпределенияПапок); + ОтправитьУведомленияОПрочтении(Истина); КонецПроцедуры @@ -752,7 +676,7 @@ КонецПроцедуры -Процедура ПолучитьПисьма(ДанныеУчетнойЗаписи, ЕстьОшибки, Получено, СтруктураМассивовСозданныхПисем) +Процедура ПолучитьПисьма(Знач ДанныеУчетнойЗаписи, ЕстьОшибки, Получено, ПолученныеПисьма) // Проверим блокировку учетной записи и если она доступна для получения, установим блокировку. Запрос = Новый Запрос; @@ -765,19 +689,14 @@ | ЗаблокированныеДляПолученияУчетныеЗаписи.УчетнаяЗапись = &УчетнаяЗапись"; Запрос.УстановитьПараметр("УчетнаяЗапись", ДанныеУчетнойЗаписи.Ссылка); - Выборка = Запрос.Выполнить().Выбрать(); - Если Выборка.Следующий() Тогда - Если Выборка.ДатаБлокировки + 60 * 60 > ТекущаяДатаСеанса() Тогда Возврат; КонецЕсли; - КонецЕсли; НачатьТранзакцию(); - Попытка Блокировка = Новый БлокировкаДанных; @@ -793,10 +712,8 @@ ЗафиксироватьТранзакцию(); Исключение - ОтменитьТранзакцию(); ВызватьИсключение; - КонецПопытки; // ----------------------------------------------------------------- @@ -832,10 +749,10 @@ КонецПопытки; Если Протокол = ПротоколИнтернетПочты.POP3 Тогда - ПолучитьПочтуПоПроколуPOP3(ДанныеУчетнойЗаписи, Почта, Получено, СтруктураМассивовСозданныхПисем); + ПолучитьПочтуПоПроколуPOP3(ДанныеУчетнойЗаписи, Почта, Получено, ПолученныеПисьма); Иначе - ПолучитьПочтуПоПроколуIMAP(ДанныеУчетнойЗаписи, Почта, Получено, СтруктураМассивовСозданныхПисем); - СинхронизироватьПризнакРассмотреноССервером(Почта, ДанныеУчетнойЗаписи, СтруктураМассивовСозданныхПисем.ВсеПолученныеПисьма); + ПолучитьПочтуПоПроколуIMAP(ДанныеУчетнойЗаписи, Почта, Получено, ПолученныеПисьма); + СинхронизироватьПризнакРассмотреноССервером(Почта, ДанныеУчетнойЗаписи, ПолученныеПисьма.ВсеПолученныеПисьма); КонецЕсли; Почта.Отключиться(); @@ -947,7 +864,7 @@ КонецПроцедуры -Процедура ПолучитьПочтуПоПроколуIMAP(ДанныеУчетнойЗаписи, Почта, Получено, СтруктураМассивовСозданныхПисем) +Процедура ПолучитьПочтуПоПроколуIMAP(ДанныеУчетнойЗаписи, Почта, Получено, ПолученныеПисьма) МассивИменАктивныхПапок = МассивИменАктивныхПапок(Почта); @@ -1040,7 +957,7 @@ ДанныеУчетнойЗаписи, ИдЗагружать, ПолученоПисемВТекущемПочтовомЯщике, - СтруктураМассивовСозданныхПисем); + ПолученныеПисьма); КонецЕсли; @@ -1089,7 +1006,7 @@ ДанныеУчетнойЗаписи, ИдЗагружать, ПолученоПисемВТекущемПочтовомЯщике, - СтруктураМассивовСозданныхПисем); + ПолученныеПисьма); КонецЕсли; @@ -1101,7 +1018,7 @@ КонецПроцедуры -Процедура ПолучитьПочтуПоПроколуPOP3(ДанныеУчетнойЗаписи, Почта, Получено, СтруктураМассивовСозданныхПисем) +Процедура ПолучитьПочтуПоПроколуPOP3(ДанныеУчетнойЗаписи, Почта, Получено, ПолученныеПисьма) // Получим идентификаторы сообщений на сервере. Идентификаторы = Почта.ПолучитьИдентификаторы(); @@ -1121,7 +1038,7 @@ ДанныеУчетнойЗаписи, ИдЗагружать, ПолученоПоДаннойУчетнойЗаписи, - СтруктураМассивовСозданныхПисем, + ПолученныеПисьма, Идентификаторы); Получено = Получено + ПолученоПоДаннойУчетнойЗаписи; @@ -1196,13 +1113,12 @@ КонецФункции -Функция СтруктураМассиваПисем() +Функция ПолученныеПисьма() - СтруктураМассивовПисем = Новый Структура; - СтруктураМассивовПисем.Вставить("ВсеПолученныеПисьма", Новый Массив); - СтруктураМассивовПисем.Вставить("ПисьмаДляОпределенияПапок", Новый Массив); - - Возврат СтруктураМассивовПисем; + Результат = Новый Структура; + Результат.Вставить("ВсеПолученныеПисьма", Новый Массив); + Результат.Вставить("ПисьмаДляОпределенияПапок", Новый Массив); + Возврат Результат; КонецФункции @@ -1311,21 +1227,50 @@ Выборка = Результат.Выбрать(); - Пока Выборка.Следующий() Цикл - Если Выборка.Рассмотрено Тогда - МассивПисемРассмотрено.Добавить(Выборка.Ссылка); - Иначе - МассивПисемНеРассмотрено.Добавить(Выборка.Ссылка); - КонецЕсли; - КонецЦикла; + НачатьТранзакцию(); + Попытка + + ТаблицаОбластиБлокировки = Новый ТаблицаЗначений; + ТаблицаОбластиБлокировки.Колонки.Добавить("Взаимодействие"); + + Пока Выборка.Следующий() Цикл + Если Выборка.Рассмотрено Тогда + МассивПисемРассмотрено.Добавить(Выборка.Ссылка); + Иначе + МассивПисемНеРассмотрено.Добавить(Выборка.Ссылка); + КонецЕсли; + НоваяСтрока = ТаблицаОбластиБлокировки.Добавить(); + НоваяСтрока.Взаимодействие = Выборка.Ссылка; + КонецЦикла; + + Блокировка = Новый БлокировкаДанных; + + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ПредметыПапкиВзаимодействий"); + ЭлементБлокировки.ИсточникДанных = ТаблицаОбластиБлокировки; + Блокировка.Заблокировать(); - ЕстьИзменения = Ложь; + ЕстьИзменения = Ложь; + + Взаимодействия.УстановитьПризнакРассмотрено(МассивПисемРассмотрено, Истина, ЕстьИзменения); + Взаимодействия.УстановитьПризнакРассмотрено(МассивПисемНеРассмотрено, Ложь, ЕстьИзменения); + + ОбщегоНазначенияКлиентСервер.ДополнитьМассив(МассивЗагруженныхПисем, МассивПисемРассмотрено, Ложь); + ОбщегоНазначенияКлиентСервер.ДополнитьМассив(МассивЗагруженныхПисем, МассивПисемНеРассмотрено, Ложь); + + ЗафиксироватьТранзакцию(); - Взаимодействия.УстановитьПризнакРассмотрено(МассивПисемРассмотрено, Истина, ЕстьИзменения); - Взаимодействия.УстановитьПризнакРассмотрено(МассивПисемНеРассмотрено, Ложь, ЕстьИзменения); - - ОбщегоНазначенияКлиентСервер.ДополнитьМассив(МассивЗагруженныхПисем, МассивПисемРассмотрено, Ложь); - ОбщегоНазначенияКлиентСервер.ДополнитьМассив(МассивЗагруженныхПисем, МассивПисемНеРассмотрено, Ложь); + Исключение + + ОтменитьТранзакцию(); + ТекстСообщения = НСтр("ru = 'Не удалось изменить информацию о признаке рассмотрено для писем по причине : %Причина%.'"); + ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Причина%", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), + УровеньЖурналаРегистрации.Ошибка, + Метаданные.РегистрыСведений.ПредметыПапкиВзаимодействий, + , + ТекстСообщения); + + КонецПопытки; КонецПроцедуры @@ -1380,7 +1325,8 @@ | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ - | ИдентификаторыПолученныхЭлектронныхПисем.Идентификатор + | &УчетнаяЗапись КАК УчетнаяЗапись, + | ИдентификаторыПолученныхЭлектронныхПисем.Идентификатор КАК Идентификатор |ИЗ | РегистрСведений.ИдентификаторыПолученныхЭлектронныхПисем КАК ИдентификаторыПолученныхЭлектронныхПисем | ЛЕВОЕ СОЕДИНЕНИЕ ТаблицаИдентификаторов КАК ТаблицаИдентификаторов @@ -1388,16 +1334,39 @@ |ГДЕ | ТаблицаИдентификаторов.Идентификатор ЕСТЬ NULL | И ИдентификаторыПолученныхЭлектронныхПисем.УчетнаяЗапись = &УчетнаяЗапись"; - - МассивКУдалению = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Идентификатор"); - // Удалим все ненужные идентификаторы. - Для Каждого Идентификатор Из МассивКУдалению Цикл - Набор = РегистрыСведений.ИдентификаторыПолученныхЭлектронныхПисем.СоздатьНаборЗаписей(); - Набор.Отбор.УчетнаяЗапись.Установить(УчетнаяЗапись); - Набор.Отбор.Идентификатор.Установить(Идентификатор); - Набор.Записать(); - КонецЦикла; + ТаблицаУдаляемыхИдентификаторов = Запрос.Выполнить().Выгрузить(); + + НачатьТранзакцию(); + Попытка + + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ИдентификаторыПолученныхЭлектронныхПисем"); + ЭлементБлокировки.ИсточникДанных = ТаблицаУдаляемыхИдентификаторов; + Блокировка.Заблокировать(); + + // Удалим все ненужные идентификаторы. + Для Каждого СтрокаТаблицы Из ТаблицаУдаляемыхИдентификаторов Цикл + Набор = РегистрыСведений.ИдентификаторыПолученныхЭлектронныхПисем.СоздатьНаборЗаписей(); + Набор.Отбор.УчетнаяЗапись.Установить(СтрокаТаблицы.УчетнаяЗапись); + Набор.Отбор.Идентификатор.Установить(СтрокаТаблицы.Идентификатор); + Набор.Записать(); + КонецЦикла; + + ЗафиксироватьТранзакцию(); + + Исключение + + ОтменитьТранзакцию(); + ТекстСообщения = НСтр("ru = 'Не удалось очистить информацию о ранее полученных идентификаторах по причине: %Причина%.'"); + ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Причина%", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), + УровеньЖурналаРегистрации.Ошибка, + Метаданные.РегистрыСведений.ИдентификаторыПолученныхЭлектронныхПисем, + СтрокаТаблицы.УчетнаяЗапись, + ТекстСообщения); + + КонецПопытки; КонецПроцедуры @@ -2203,9 +2172,9 @@ КонецФункции -Процедура ОпределитьЗагруженныеРанееПодчиненныеПисьма(УчетнаяЗапись, МассивЗагруженныхПисем); +Процедура ОпределитьЗагруженныеРанееПодчиненныеПисьма(УчетнаяЗапись, ПолученныеПисьма); - Если МассивЗагруженныхПисем.Количество() = 0 Тогда + Если ПолученныеПисьма.Количество() = 0 Тогда Возврат; КонецЕсли; @@ -2275,7 +2244,7 @@ | ЭлектронноеПисьмоВходящее.УчетнаяЗапись = &УчетнаяЗапись"; Запрос.УстановитьПараметр("УчетнаяЗапись", УчетнаяЗапись); - Запрос.УстановитьПараметр("МассивПисем", МассивЗагруженныхПисем); + Запрос.УстановитьПараметр("МассивПисем", ПолученныеПисьма); Результат = Запрос.Выполнить(); Если Результат.Пустой() Тогда @@ -2291,12 +2260,13 @@ Попытка МетаданныеДокумента = ?(ТипЗнч(Выборка.Письмо) = Тип("ДокументСсылка.ЭлектронноеПисьмоВходящее"), - МетаданныеВходящееПисьмо, - МетаданныеИсходящееПисьмо); + МетаданныеВходящееПисьмо, МетаданныеИсходящееПисьмо); Блокировка = Новый БлокировкаДанных; ЭлементБлокировки = Блокировка.Добавить(МетаданныеДокумента.ПолноеИмя()); ЭлементБлокировки.УстановитьЗначение("Ссылка", Выборка.Письмо); + РегистрыСведений.ПредметыПапкиВзаимодействий.ЗаблокироватьПредметыПапокВзаимодействий(Блокировка, Выборка.Письмо); + РегистрыСведений.ПредметыПапкиВзаимодействий.ЗаблокироватьПредметыПапокВзаимодействий(Блокировка, Выборка.СсылкаНаОснование); Блокировка.Заблокировать(); ПисьмоОбъект = Выборка.Письмо.ПолучитьОбъект(); @@ -2312,27 +2282,19 @@ ИначеЕсли НЕ ВзаимодействияКлиентСервер.ЯвляетсяПредметом(Выборка.ПредметПисьмаПодчиненное) Тогда Если ВзаимодействияКлиентСервер.ЯвляетсяПредметом(Выборка.ПредметПисьмаОснования) Тогда - Взаимодействия.УстановитьПредмет(Выборка.Письмо, Выборка.ПредметПисьмаОснования, Ложь); МассивДобавляемыхКОбработкеПисем.Добавить(Выборка.Письмо); - Иначе - Взаимодействия.УстановитьПредмет(Выборка.СсылкаНаОснование, Выборка.ПредметПисьмаПодчиненное, Ложь); - КонецЕсли; Иначе Если ВзаимодействияКлиентСервер.ЯвляетсяПредметом(Выборка.ПредметПисьмаОснования) Тогда - Взаимодействия.УстановитьПредмет(Выборка.Письмо, Выборка.ПредметПисьмаОснования, Ложь); МассивДобавляемыхКОбработкеПисем.Добавить(Выборка.Письмо); - Иначе - Взаимодействия.УстановитьПредмет(Выборка.СсылкаНаОснование, Выборка.ПредметПисьмаПодчиненное, Ложь); - КонецЕсли; КонецЕсли; @@ -2342,22 +2304,17 @@ ЗафиксироватьТранзакцию(); Исключение - ОтменитьТранзакцию(); - ТекстСообщения = НСтр("ru = 'Не установить письмо основание у %Ссылка% по причине: %Причина%'"); - ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Ссылка%", Выборка.Письмо); - ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Причина%", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), - УровеньЖурналаРегистрации.Предупреждение, - МетаданныеДокумента, - Выборка.Письмо, - ТекстСообщения); - + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не установить письмо основание у %1 по причине %2'"), + Выборка.Письмо, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Предупреждение, + МетаданныеДокумента, Выборка.Письмо, ТекстСообщения); КонецПопытки; КонецЦикла; - ОбщегоНазначенияКлиентСервер.ДополнитьМассив(МассивЗагруженныхПисем, МассивДобавляемыхКОбработкеПисем, Истина); + ОбщегоНазначенияКлиентСервер.ДополнитьМассив(ПолученныеПисьма, МассивДобавляемыхКОбработкеПисем, Истина); КонецПроцедуры @@ -2412,53 +2369,45 @@ КонецЕсли; - ВложениеПисьмаСсылка = ЗаписатьВложениеЭлектронногоПисьмаИзВременногоХранилища( - ПисьмоСсылка, Адрес, ИмяФайла, Размер,КоличествоПустыхИменВоВложениях); - - ЕстьПодписи = (МассивПодписей.Количество() > 0); + ЕстьПодписи = (МассивПодписей.Количество() > 0) + И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись"); + ЭтоОтображаемыйФайл = НЕ ПустаяСтрока(Вложение.Идентификатор); - Если ЕстьПодписи - Или ЭтоОтображаемыйФайл - Или ЭтоВложениеПисьмо Тогда + ПараметрыВложения = Новый Структура; + ПараметрыВложения.Вставить("ИмяФайла", ИмяФайла); + ПараметрыВложения.Вставить("Размер", Размер); + Если ЭтоОтображаемыйФайл Тогда + ПараметрыВложения.Вставить("ИДФайлаЭлектронногоПисьма", Вложение.Идентификатор); + КонецЕсли; + Если ЭтоВложениеПисьмо Тогда + ПараметрыВложения.Вставить("ЭтоВложениеПисьмо", Истина); + КонецЕсли; + Если ЕстьПодписи Тогда + ПараметрыВложения.Вставить("ПодписанЭП", Истина); + КонецЕсли; + + ВложениеПисьмаСсылка = ЗаписатьВложениеЭлектронногоПисьмаИзВременногоХранилища( + ПисьмоСсылка, Адрес, ПараметрыВложения, КоличествоПустыхИменВоВложениях); - ВложениеПисьмаОбъект = ВложениеПисьмаСсылка.ПолучитьОбъект(); + Если ЕстьПодписи Тогда - Если ЕстьПодписи - И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда + МодульЭлектроннаяПодпись = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодпись"); + Для Каждого ПодписьВложения Из МассивПодписей Цикл - МодульЭлектроннаяПодпись = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодпись"); + ДанныеПодписи = МодульЭлектроннаяПодпись.ПрочитатьДанныеПодписи(ПодписьВложения.Данные); - Для Каждого ПодписьВложения Из МассивПодписей Цикл - ЭП = ВложениеПисьмаОбъект.ЭлектронныеПодписи.Добавить(); - - ДанныеПодписи = МодульЭлектроннаяПодпись.ПрочитатьДанныеПодписи(ПодписьВложения.Данные); - Если ДанныеПодписи <> Неопределено Тогда - ЗаполнитьЗначенияСвойств(ЭП, ДанныеПодписи); - КонецЕсли; - - ЭП.Подпись = Новый ХранилищеЗначения(ПодписьВложения.Данные); - ЭП.Комментарий = НСтр("ru = 'Вложение электронного письма'"); - ЭП.ДатаПодписи = ТекущаяДатаСеанса(); - КонецЦикла; + ПараметрыПодписи = Новый Структура; + ПараметрыПодписи.Вставить("Подпись", ДанныеПодписи.Подпись.Получить()); + ПараметрыПодписи.Вставить("Сертификат", ДанныеПодписи.Сертификат); + ПараметрыПодписи.Вставить("УстановившийПодпись", Неопределено); + ПараметрыПодписи.Вставить("Комментарий", НСтр("ru = 'Вложение электронного письма'")); + ПараметрыПодписи.Вставить("ДатаПодписи", ТекущаяДатаСеанса()); + ПараметрыПодписи.Вставить("КомуВыданСертификат", ДанныеПодписи.КомуВыданСертификат); - ВложениеПисьмаОбъект.ПодписанЭП = Истина; + РаботаСФайлами.ДобавитьПодписьКФайлу(ВложениеПисьмаСсылка, ПараметрыПодписи); - КонецЕсли; - - Если ЭтоОтображаемыйФайл Тогда - - ВложениеПисьмаОбъект.ИДФайлаЭлектронногоПисьма = Вложение.Идентификатор; - - КонецЕсли; - - Если ЭтоВложениеПисьмо Тогда - - ВложениеПисьмаОбъект.ЭтоВложениеПисьмо = Истина; - - КонецЕсли; - - ВложениеПисьмаОбъект.Записать(); + КонецЦикла; КонецЕсли; @@ -2551,11 +2500,10 @@ Функция ЗаписатьВложениеЭлектронногоПисьмаИзВременногоХранилища( Письмо, АдресВоВременномХранилище, - ИмяФайла, - Размер, + ПараметрыВложения, КоличествоПустыхИменВоВложениях = 0) Экспорт - ИмяФайлаДляРазбора = ИмяФайла; + ИмяФайлаДляРазбора = ПараметрыВложения.ИмяФайла; РасширениеБезТочки = ОбщегоНазначенияКлиентСервер.ПолучитьРасширениеИмениФайла(ИмяФайлаДляРазбора); ИмяБезРасширения = ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыВИмениФайла(ИмяФайлаДляРазбора); @@ -2571,14 +2519,34 @@ ИмяБезРасширения, Лев(ИмяБезРасширения, СтрДлина(ИмяБезРасширения) - СтрДлина(РасширениеБезТочки) - 1)); КонецЕсли; - - ПараметрыФайла = Новый Структура; - ПараметрыФайла.Вставить("ВладелецФайлов", Письмо); - ПараметрыФайла.Вставить("Автор", Неопределено); - ПараметрыФайла.Вставить("ИмяБезРасширения", ИмяБезРасширения); - ПараметрыФайла.Вставить("РасширениеБезТочки", РасширениеБезТочки); - ПараметрыФайла.Вставить("ВремяИзменения", Неопределено); - ПараметрыФайла.Вставить("ВремяИзмененияУниверсальное", Неопределено); + + ДополнительныеПараметры = Новый Массив; + Если ПараметрыВложения.Свойство("ИДФайлаЭлектронногоПисьма") Тогда + ДополнительныеПараметры.Добавить("ИДФайлаЭлектронногоПисьма"); + КонецЕсли; + Если ПараметрыВложения.Свойство("ЭтоВложениеПисьмо") Тогда + ДополнительныеПараметры.Добавить("ЭтоВложениеПисьмо"); + КонецЕсли; + Если ПараметрыВложения.Свойство("ПодписанЭП") Тогда + ДополнительныеПараметры.Добавить("ПодписанЭП"); + КонецЕсли; + + ПараметрыФайла = РаботаСФайлами.ПараметрыДобавленияФайла(ДополнительныеПараметры); + ПараметрыФайла.ВладелецФайлов = Письмо; + ПараметрыФайла.ИмяБезРасширения = ИмяБезРасширения; + ПараметрыФайла.РасширениеБезТочки = РасширениеБезТочки; + ПараметрыФайла.ВремяИзмененияУниверсальное = Неопределено; + + Если ПараметрыВложения.Свойство("ИДФайлаЭлектронногоПисьма") Тогда + ПараметрыФайла.ИДФайлаЭлектронногоПисьма = ПараметрыВложения.ИДФайлаЭлектронногоПисьма; + КонецЕсли; + Если ПараметрыВложения.Свойство("ЭтоВложениеПисьмо") Тогда + ПараметрыФайла.ЭтоВложениеПисьмо = ПараметрыВложения.ЭтоВложениеПисьмо; + КонецЕсли; + Если ПараметрыВложения.Свойство("ПодписанЭП") Тогда + ПараметрыФайла.ПодписанЭП = ПараметрыВложения.ПодписанЭП; + КонецЕсли; + Возврат РаботаСФайлами.ДобавитьФайл( ПараметрыФайла, АдресВоВременномХранилище, @@ -2595,13 +2563,12 @@ ДанныеФайла = РаботаСФайлами.ДанныеФайла( СсылкаНаФайл, УникальныйИдентификаторФормы, Истина); - ПараметрыФайла = Новый Структура; - ПараметрыФайла.Вставить("ВладелецФайлов", Письмо); - ПараметрыФайла.Вставить("Автор", Неопределено); - ПараметрыФайла.Вставить("ИмяБезРасширения", ДанныеФайла.Наименование); - ПараметрыФайла.Вставить("РасширениеБезТочки", ДанныеФайла.Расширение); - ПараметрыФайла.Вставить("ВремяИзменения", Неопределено); - ПараметрыФайла.Вставить("ВремяИзмененияУниверсальное", ДанныеФайла.ДатаМодификацииУниверсальная); + ПараметрыФайла = РаботаСФайлами.ПараметрыДобавленияФайла(); + ПараметрыФайла.ВладелецФайлов = Письмо; + ПараметрыФайла.ИмяБезРасширения = ДанныеФайла.Наименование; + ПараметрыФайла.РасширениеБезТочки = ДанныеФайла.Расширение; + ПараметрыФайла.ВремяИзмененияУниверсальное = ДанныеФайла.ДатаМодификацииУниверсальная; + Возврат РаботаСФайлами.ДобавитьФайл( ПараметрыФайла, ДанныеФайла.СсылкаНаДвоичныеДанныеФайла, @@ -2609,41 +2576,6 @@ КонецФункции -// Устанавливает или снимает пометку удаления у вложений электронного письма. -// -// Параметры: -// Письмо - ДокументСсылка - письмо, для вложений которого будут выполнены действия. -// ПометкаУдаления - Булево - признак необходимости установить или снять пометку. -// -Процедура УстановитьПометкуУдаленияУВложенийПисьма(Письмо, ПометкаУдаления) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - ИмяОбъектаМетаданных = ИмяОбъектаМетаданныхПрисоединенныхФайловПисьма(Письмо); - Если ИмяОбъектаМетаданных = Неопределено Тогда - Возврат; - КонецЕсли; - - Запрос = Новый Запрос( - "ВЫБРАТЬ - | Файлы.Ссылка - |ИЗ - | Справочник." + ИмяОбъектаМетаданных + " КАК Файлы - |ГДЕ - | Файлы.ПометкаУдаления <> &ПометкаУдаления - | И Файлы.ВладелецФайла = &ВладелецФайла - |"); - Запрос.УстановитьПараметр("ПометкаУдаления", ПометкаУдаления); - Запрос.УстановитьПараметр("ВладелецФайла", Письмо); - Выборка = Запрос.Выполнить().Выбрать(); - - Пока Выборка.Следующий() Цикл - Объект = Выборка.Ссылка.ПолучитьОбъект(); - Объект.УстановитьПометкуУдаления(ПометкаУдаления, Истина); - КонецЦикла; - -КонецПроцедуры - // Удаляет вложения электронного письма. // // Параметры: @@ -2656,6 +2588,11 @@ Возврат; КонецЕсли; + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Справочник." + ИмяОбъектаМетаданных); + ЭлементБлокировки.УстановитьЗначение("ВладелецФайла", Письмо); + Блокировка.Заблокировать(); + Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ @@ -2715,18 +2652,7 @@ Функция ПолучитьУчетнуюЗаписьДляОтправкиПоУмолчанию() Экспорт Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1 - | УчетныеЗаписиЭлектроннойПочты.Ссылка КАК Ссылка - |ИЗ - | Справочник.УчетныеЗаписиЭлектроннойПочты КАК УчетныеЗаписиЭлектроннойПочты - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиУчетныхЗаписейЭлектроннойПочты КАК НастройкиУчетныхЗаписейЭлектроннойПочты - | ПО НастройкиУчетныхЗаписейЭлектроннойПочты.УчетнаяЗаписьЭлектроннойПочты = УчетныеЗаписиЭлектроннойПочты.Ссылка - |ГДЕ - | УчетныеЗаписиЭлектроннойПочты.ИспользоватьДляОтправки - | И НЕ ЕСТЬNULL(НастройкиУчетныхЗаписейЭлектроннойПочты.НеИспользоватьВоВстроенномПочтовомКлиенте, ЛОЖЬ) - | И (УчетныеЗаписиЭлектроннойПочты.ВладелецУчетнойЗаписи = &ТекущийПользователь - | ИЛИ УчетныеЗаписиЭлектроннойПочты.ВладелецУчетнойЗаписи = ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка))"; + Запрос.Текст = ТекстЗапросаПоДоступнымУчетнымЗаписям(); Запрос.УстановитьПараметр("ТекущийПользователь", Пользователи.АвторизованныйПользователь()); @@ -2737,7 +2663,7 @@ Выборка = РезультатЗапроса.Выбрать(); Выборка.Следующий(); - Возврат Выборка.Ссылка; + Возврат Выборка.УчетнаяЗапись; КонецФункции @@ -2749,55 +2675,6 @@ КонецПроцедуры -Процедура СоздатьОтправитьУведомлениеОПрочтении(Выборка, ЭтоРегламентноеЗадание, Соединение = Неопределено) - - ПараметрыПисьма = Новый Структура; - - Взаимодействия.ДобавитьВПараметрАдресатов(Выборка, ПараметрыПисьма, "Кому", "АдресаУведомленияОПрочтении"); - - ПараметрыПисьма.Вставить("Тема",НСтр("ru = 'Уведомление о прочтении'") + " / " +"Reading Confirmation"); - ПараметрыПисьма.Вставить("Тело",СформироватьТекстУведомленияОПрочтении(Выборка)); - ПараметрыПисьма.Вставить("Кодировка","UTF-8"); - ПараметрыПисьма.Вставить("Важность", ВажностьИнтернетПочтовогоСообщения.Обычная); - ПараметрыПисьма.Вставить("ТипТекста", Перечисления.ТипыТекстовЭлектронныхПисем.ПростойТекст); - ПараметрыПисьма.Вставить("ОбрабатыватьТексты", Ложь); - ПараметрыПисьма.Вставить("Соединение", Соединение); - - Попытка - РаботаСПочтовымиСообщениями.ОтправитьПочтовоеСообщение(Выборка.УчетнаяЗапись, ПараметрыПисьма); - Исключение - - Если ЭтоРегламентноеЗадание Тогда - - ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Во время регламентной отправки уведомления о прочтении электронного письма %1 произошла ошибка - |%2'", ОбщегоНазначения.КодОсновногоЯзыка()), - Выборка.ПредставлениеПисьма, - ОписаниеОшибки()); - - ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), - УровеньЖурналаРегистрации.Ошибка, , , - ТекстСообщенияОбОшибке); - - Иначе - - ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Во время отправки уведомления о прочтении электронного письма %1 произошла ошибка - |%2'"), - Выборка.ПредставлениеПисьма, - КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); - - ОбщегоНазначения.СообщитьПользователю(ТекстСообщенияОбОшибке,Выборка.Письмо); - - КонецЕсли; - - Возврат; - КонецПопытки; - - УстановитьПризнакОтправкиУведомления(Выборка.Письмо,Ложь); - -КонецПроцедуры - // Устанавливает признак отправки уведомления о прочтении электронного письма. // // Параметры: @@ -2877,7 +2754,7 @@ |Has been read " + Выборка.ДатаПрочтения + " |By Recipient " +Выборка.ИмяПользователя + "<" + Выборка.АдресЭлектроннойПочты + ">"; - ЛокализованноеУведомление = Символы.ПС + НСтр("ru='Сообщение от %1 < %2 > + ЛокализованноеУведомление = Символы.ПС + НСтр("ru = 'Сообщение от %1 < %2 > |Тема: %3 |Отправленное %4 |Было прочитано %5 @@ -2930,7 +2807,7 @@ // ВажностьВзаимодействия - Перечисление.ВариантыВажностиВзаимодействия. // // Возвращаемое значение: -// ВажностьИнтернетПочтовогоСообщения. +// ВажностьИнтернетПочтовогоСообщения - . // Функция ПолучитьВажность(ВажностьВзаимодействия) Экспорт @@ -2961,8 +2838,30 @@ СписокВыбора.Очистить(); Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1 + Запрос.Текст = ТекстЗапросаПоДоступнымУчетнымЗаписям(); + + Запрос.УстановитьПараметр("ТекущийПользователь", Пользователи.ТекущийПользователь()); + Результат = Запрос.Выполнить(); + Если Результат.Пустой() Тогда + Возврат; + КонецЕсли; + + Выборка = Результат.Выбрать(); + Пока Выборка.Следующий() Цикл + СписокВыбора.Добавить(Выборка.УчетнаяЗапись, + ВзаимодействияКлиентСервер.ПолучитьПредставлениеАдресата(Выборка.ИмяПользователя, + Выборка.АдресЭлектроннойПочты, + "")); + КонецЦикла; + + ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(Результат.Выгрузить(), ТаблицаДанныхУчетнойЗаписи); + +КонецПроцедуры + +Функция ТекстЗапросаПоДоступнымУчетнымЗаписям() + + Возврат " + |ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1 | ЭлектронноеПисьмоИсходящее.УчетнаяЗапись КАК УчетнаяЗапись |ПОМЕСТИТЬ ПоследняяИспользовавшаясяУчетная |ИЗ @@ -3009,23 +2908,7 @@ |УПОРЯДОЧИТЬ ПО | ЗначениеУпорядочивания"; - Запрос.УстановитьПараметр("ТекущийПользователь",Пользователи.ТекущийПользователь()); - Результат = Запрос.Выполнить(); - Если Результат.Пустой() Тогда - Возврат; - КонецЕсли; - - Выборка = Результат.Выбрать(); - Пока Выборка.Следующий() Цикл - СписокВыбора.Добавить(Выборка.УчетнаяЗапись, - ВзаимодействияКлиентСервер.ПолучитьПредставлениеАдресата(Выборка.ИмяПользователя, - Выборка.АдресЭлектроннойПочты, - "")); - КонецЦикла; - - ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(Результат.Выгрузить(), ТаблицаДанныхУчетнойЗаписи); - -КонецПроцедуры +КонецФункции // Создает предопределенные папки для учетной записи электронной почты. // diff --git a/SSL/src/CommonModules/ФайловаяСистема/Module.bsl b/SSL/src/CommonModules/ФайловаяСистема/Module.bsl index 386d3a89f..4c7aaec73 100644 --- a/SSL/src/CommonModules/ФайловаяСистема/Module.bsl +++ b/SSL/src/CommonModules/ФайловаяСистема/Module.bsl @@ -85,6 +85,8 @@ //////////////////////////////////////////////////////////////////////////////// // Процедуры и функции для работы с внешними приложениями. +// Конструктор параметров для ФайловаяСистема.ЗапуститьПрограмму. +// // Возвращаемое значение: // Структура - где: // * ТекущийКаталог - Строка - задает текущий каталог запускаемого приложения. @@ -96,8 +98,11 @@ // если не указан ДождатьсяЗавершения - игнорируется. // * КодировкаПотоков - КодировкаТекста, Строка - Кодировка, используемая для чтения stdout и stderr. // По умолчанию используется для Windows OEM (cp437), остальные КодировкаТекста.Системная. -// * КодировкаИсполнения - Строка, Число - кодировка, устанавливаемая в Windows с помощью команды chcp. -// В Linux и MacOS игнорируется. Возможные значения: "OEM", "CP866", "UTF8" или номер кодовой страницы. +// * КодировкаИсполнения - Строка, Число - кодировка, устанавливаемая в Windows с помощью команды chcp, +// возможные значения: "OEM", "CP866", "UTF8" или номер кодовой страницы. +// В Linux устанавливается переменной окружения "LANGUAGE" для конкретной команды, +// возможные значения можно определить выполнив команду "locale -a", например "ru_RU.UTF-8". +// В MacOS игнорируется. // Функция ПараметрыЗапускаПрограммы() Экспорт @@ -113,7 +118,16 @@ КонецФункции -// Запускает внешнюю программу в соответствии с параметрами запуска. +// Запускает внешнюю программу на исполнение (например, *.exe, *bat), +// или системную команду (например, ping, tracert или traceroute, обращаться к rac-клиенту), +// Позволяет также получать код возврата и значения потоков вывода (stdout) и ошибок (stderr) +// +// При запуске внешней программы в пакетном режиме поток вывода и поток ошибок может возвращаться на не ожидаемом языке. +// Для того чтобы передать внешней программе язык, на котором ожидается результат следует: +// - указать язык в параметре запуска этой программы (если такой параметр предусмотрен). +// Например, в пакетном режиме платформы 1С:Предприятие предусмотрен ключ "/L en"; +// - в других случаях явно установить кодировку исполнения пакетной команды. +// См. свойство КодировкаИсполнения возвращаемого значения ФайловаяСистема.ПараметрыЗапускаПрограммы. // // Параметры: // КомандаЗапуска - Строка - командная строка для запуска программы. @@ -215,7 +229,13 @@ // В случае, когда нужен корректный код возврата автоматического удаления нет, потому следует удалить файл здесь. УдалитьВременныйФайл(ИмяФайлаКоманды); КонецЕсли; + Иначе + + Если ОбщегоНазначения.ЭтоLinuxСервер() И ЗначениеЗаполнено(КодировкаИсполнения) Тогда + СтрокаКоманды = "LANGUAGE=" + КодировкаИсполнения + " " + СтрокаКоманды; + КонецЕсли; + ЗапуститьПриложение(СтрокаКоманды, ТекущийКаталог, ДождатьсяЗавершения, КодВозврата); КонецЕсли; diff --git a/SSL/src/CommonModules/ФайловаяСистемаКлиент/Module.bsl b/SSL/src/CommonModules/ФайловаяСистемаКлиент/Module.bsl index 27ff85c99..b3e97735a 100644 --- a/SSL/src/CommonModules/ФайловаяСистемаКлиент/Module.bsl +++ b/SSL/src/CommonModules/ФайловаяСистемаКлиент/Module.bsl @@ -12,7 +12,7 @@ // Показывает диалог выбора файла и помещает выбранный файл во временное хранилище. // Совмещает работу методов глобального контекста НачатьПомещениеФайла и НачатьПомещениеФайлов, -// возвращая идентичный результат вне зависимости от того, подключено расширение работы с файлами или нет. +// возвращая идентичный результат вне зависимости от того, подключено или нет расширение для работы с 1С:Предприятием. // Ограничения: // Не используется для выбора каталогов - эта опция не поддерживается веб-клиентом. // @@ -50,7 +50,7 @@ ПараметрыЗагрузки = ПараметрыЗагрузкиФайла(); ИначеЕсли Не ПараметрыЗагрузки.Интерактивно И ПустаяСтрока(ИмяФайла) Тогда - ВызватьИсключение НСтр("ru ='Не указано имя файла для загрузки в неинтерактивном режиме.'"); + ВызватьИсключение НСтр("ru = 'Не указано имя файла для загрузки в неинтерактивном режиме.'"); КонецЕсли; Если Не ЗначениеЗаполнено(ПараметрыЗагрузки.ИдентификаторФормы) Тогда @@ -68,10 +68,10 @@ // Показывает диалог выбора файлов и помещает выбранные файлы во временное хранилище. // Совмещает работу методов глобального контекста НачатьПомещениеФайла и НачатьПомещениеФайлов, -// возвращая идентичный результат вне зависимости от того, подключено расширение работы с файлами или нет. +// возвращая идентичный результат вне зависимости от того, подключено или нет расширение для работы с 1С:Предприятием. // Ограничения: // Не используется для выбора каталогов - эта опция не поддерживается веб-клиентом. -// Не поддерживается множественный выбор в веб-клиенте, если не установлено расширение работы с файлами. +// Не поддерживается множественный выбор в веб-клиенте, если не установлено расширение для работы с 1С:Предприятием. // // Параметры: // ОбработчикЗавершения - ОписаниеОповещения - содержит описание процедуры, которая будет вызвана после @@ -118,7 +118,7 @@ Или (ТипЗнч(ЗагружаемыеФайлы) = Тип("Массив") И ЗагружаемыеФайлы.Количество() = 0)) Тогда - ВызватьИсключение НСтр("ru ='Не указаны файлы для загрузки в неинтерактивном режиме.'"); + ВызватьИсключение НСтр("ru = 'Не указаны файлы для загрузки в неинтерактивном режиме.'"); КонецЕсли; @@ -226,7 +226,7 @@ // умолчанию - Истина. // * Диалог - ДиалогВыбораФайла - свойства см. в синтакс-помощнике. // Используется, если свойство Интерактивно принимает значение Истина и -// удалось подключить расширение работы с файлами. +// удалось подключить расширение для работы с 1С:Предприятием. // * ТекстПредложения - Строка - текст предложения об установке расширения. Если параметр // принимает значение "", будет выведен стандартный текст предложения. // Значение по умолчанию - "". @@ -244,7 +244,7 @@ // Пример: // ПараметрыЗагрузки = ФайловаяСистемаКлиент.ПараметрыЗагрузкиФайла(); // ПараметрыЗагрузки.Диалог.Заголовок = НСтр("ru = 'Выберите документ'"); -// ПараметрыЗагрузки.Диалог.Фильтр = НСтр("ru = 'Файлы MS Word (*.doc;*.docx)|*.doc;*.docx|Все файлы(*.*)|*.*'"); +// ПараметрыЗагрузки.Диалог.Фильтр = НСтр("ru = 'Файлы MS Word (*.doc;*.docx)|*.doc;*.docx|Все файлы (*.*)|*.*'"); // ФайловаяСистемаКлиент.ЗагрузитьФайл(Оповещение, ПараметрыЗагрузки); // Функция ПараметрыЗагрузкиФайла() Экспорт @@ -266,7 +266,7 @@ // умолчанию - Истина. // * Диалог - ДиалогВыбораФайла - свойства см. в синтакс-помощнике. // Используется, если свойство Интерактивно принимает значение Истина и -// удалось подключить расширение работы с файлами. +// удалось подключить расширение для работы с 1С:Предприятием. // * ТекстПредложения - Строка - текст предложения об установке расширения. Если параметр // принимает значение "", будет выведен стандартный текст предложения. // Значение по умолчанию - "". @@ -293,7 +293,7 @@ // умолчанию - Истина. // * Диалог - ДиалогВыбораФайла - свойства см. в синтакс-помощнике. // Используется, если свойство Интерактивно принимает значение Истина и -// удалось подключить расширение работы с файлами. +// удалось подключить расширение для работы с 1С:Предприятием. // * ТекстПредложения - Строка - текст предложения об установке расширения. Если параметр // принимает значение "", будет выведен стандартный текст предложения. // Значение по умолчанию - "". @@ -366,7 +366,7 @@ Если ЭтоАдресВременногоХранилища(РасположениеФайла) Тогда Если ПустаяСтрока(ИмяФайла) Тогда - ВызватьИсключение НСтр("ru ='Не указано имя файла.'"); + ВызватьИсключение НСтр("ru = 'Не указано имя файла.'"); КонецЕсли; ПутьКФайлу = ПолноеИмяВременногоФайла(ИмяФайла); @@ -413,7 +413,7 @@ Оповещение = Новый ОписаниеОповещения( "ОткрытьПроводникПослеПроверкиРасширенияРаботыСФайлами", ФайловаяСистемаСлужебныйКлиент, Контекст); - ТекстПредложения = НСтр("ru = 'Для открытия папки необходимо установить расширение работы с файлами.'"); + ТекстПредложения = НСтр("ru = 'Для открытия папки необходимо установить расширение для работы с 1С:Предприятием.'"); ПодключитьРасширениеДляРаботыСФайлами(Оповещение, ТекстПредложения, Ложь); КонецПроцедуры @@ -492,7 +492,7 @@ "ОткрытьНавигационнуюСсылкуПослеПроверкиРасширенияРаботыСФайлами", ФайловаяСистемаСлужебныйКлиент, Контекст); ТекстПредложения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Для открытия ссылки ""%1"" необходимо установить расширение работы с файлами.'"), + НСтр("ru = 'Для открытия ссылки ""%1"" необходимо установить расширение для работы с 1С:Предприятием.'"), НавигационнаяСсылка); ПодключитьРасширениеДляРаботыСФайлами(Оповещение, ТекстПредложения, Ложь); @@ -502,11 +502,13 @@ КонецПроцедуры +// Конструктор параметров для ФайловаяСистемаКлиент.ЗапуститьПрограмму. +// // Возвращаемое значение: // Структура - где: // * ТекущийКаталог - Строка - Задает текущий каталог запускаемого приложения. // * Оповещение - ОписаниеОповещения - оповещение о результате завершения запущенного приложения, -// если оповещение не задано в случае ошибки будет показано предупреждение. +// если оповещение не задано в случае ошибки будет показано предупреждение. Параметры обработчика завершения: // - Результат - Структура - результат работы программы: // -- ПриложениеЗапущено - Булево - Истина, если внешнее приложение не вызвало ошибок при открытии. // -- ОписаниеОшибки - Строка - краткое описание ошибки. При отмене пользователем пустая строка. @@ -521,13 +523,16 @@ // если не указан ДождатьсяЗавершения - игнорируется. // * ПолучитьПотокОшибок - Булево - Ложь - ошибки, направленные в поток stderr, // если не указан ДождатьсяЗавершения - игнорируется. -// * КодировкаИсполнения - Строка, Число - Кодировка, устанавливаемая в Windows с помощью команды chcp. -// в Linux и MacOS игнорируется. Возможные значения "OEM", "CP866", "UTF8" или номер кодовой страницы. +// * КодировкаИсполнения - Строка, Число - кодировка, устанавливаемая в Windows с помощью команды chcp, +// возможные значения: "OEM", "CP866", "UTF8" или номер кодовой страницы. +// В Linux устанавливается переменной окружения "LANGUAGE" для конкретной команды, +// возможные значения можно определить выполнив команду "locale -a", например "ru_RU.UTF-8". +// В MacOS игнорируется. // * ВыполнитьСНаивысшимиПравами - Булево - Истина, если требуется запустить программу на исполнение // с повышением привилегий системы: // - Windows: запрос UAC; // - Linux: исполнение с командой pkexec; -// - macOS, веб-клиент и мобильный клиент: будет возвращено Результат.ОписаниеОшибки. +// - macOS, веб-клиент и мобильный клиент: будет возвращен Результат.ОписаниеОшибки. // Функция ПараметрыЗапускаПрограммы() Экспорт @@ -544,16 +549,41 @@ КонецФункции -// Запускает внешнюю программу в соответствии с параметрами запуска. +// Запускает внешнюю программу на исполнение (например, *.exe, *bat), +// или системную команду (например, ping, tracert или traceroute, обращаться к rac-клиенту), +// Позволяет также получать код возврата и значения потоков вывода (stdout) и ошибок (stderr) +// +// При запуске внешней программы в пакетном режиме поток вывода и поток ошибок может возвращаться на не ожидаемом языке. +// Для того чтобы передать внешней программе язык, на котором ожидается результат следует: +// - указать язык в параметре запуска этой программы (если такой параметр предусмотрен). +// Например, в пакетном режиме платформы 1С:Предприятие предусмотрен ключ "/L en"; +// - в других случаях явно установить кодировку исполнения пакетной команды. +// См. свойство КодировкаИсполнения возвращаемого значения ФайловаяСистемаКлиент.ПараметрыЗапускаПрограммы. // // Параметры: // КомандаЗапуска - Строка - командная строка для запуска программы. // - Массив - первый элемент массива, путь к исполняемому приложению, // если Массив, то первый элемент массива - путь к исполняемому приложению, остальные - передаваемые параметры, // массив соответствует тому, который получит вызываемая программа в argv. -// ПараметрыЗапускаПрограммы - Структура - См. ФайловаяСистемаКлиент.ПараметрыЗапускаПрограммы +// ПараметрыЗапускаПрограммы - Структура - См. ФайловаяСистемаКлиент.ПараметрыЗапускаПрограммы. // -Процедура ЗапуститьПрограмму(Знач КомандаЗапуска, ПараметрыЗапускаПрограммы = Неопределено) Экспорт +// Пример: +// // Простой запуск +// ФайловаяСистемаКлиент.ЗапуститьПрограмму("calc"); +// +// // Запуск с ожиданием завершения и получения кода возврата: +// ПараметрыЗапускаПрограммы = ФайловаяСистемаКлиент.ПараметрыЗапускаПрограммы(); +// ПараметрыЗапускаПрограммы.ДождатьсяЗавершения = Истина; +// ПараметрыЗапускаПрограммы.ПолучитьПотокВывода = Истина; +// ПараметрыЗапускаПрограммы.ПолучитьПотокОшибок = Истина; +// +// Результат = ФайловаяСистемаКлиент.ЗапуститьПрограмму("ping 127.0.0.1 -n 5", ПараметрыЗапускаПрограммы); +// +// КодВозврата = Результат.КодВозврата; +// ПотокВывода = Результат.ПотокВывода; +// ПотокОшибок = Результат.ПотокОшибок; +// +Процедура ЗапуститьПрограмму(Знач КомандаЗапуска, Знач ПараметрыЗапускаПрограммы = Неопределено) Экспорт Если ПараметрыЗапускаПрограммы = Неопределено Тогда ПараметрыЗапускаПрограммы = ПараметрыЗапускаПрограммы(); @@ -599,7 +629,7 @@ Оповещение = Новый ОписаниеОповещения( "ЗапуститьПрограммуПослеПроверкиРасширенияРаботыСФайлами", ФайловаяСистемаСлужебныйКлиент, Контекст); ТекстПредложения = - НСтр("ru = 'Для создания временного каталога необходимо установить расширение работы с файлами.'"); + НСтр("ru = 'Для создания временного каталога необходимо установить расширение для работы с 1С:Предприятием.'"); ПодключитьРасширениеДляРаботыСФайлами(Оповещение, ТекстПредложения, Ложь); КонецПроцедуры @@ -613,16 +643,18 @@ // Параметры: // ОбработчикЗавершения - ОписаниеОповещения - содержит описание процедуры, которая будет вызвана после // закрытия диалога выбора со следующими параметрами: -// - ПутьККаталогу - Строка - полный путь к каталогу. Если не установлено расширение работы с файлами +// - ПутьККаталогу - Строка - полный путь к каталогу. Если не установлено расширение для работы с 1С:Предприятием // или пользователь отказался от выбора, возвращает пустую строку. // - ДополнительныеПараметры - значение, которое было указано при создании объекта ОписаниеОповещения. // Заголовок - Строка - заголовок диалога выбора каталога. +// Каталог - Строка - начальное значение каталога, предлагаемое по умолчанию. // -Процедура ВыбратьКаталог(ОбработчикЗавершения, Заголовок = "") Экспорт +Процедура ВыбратьКаталог(ОбработчикЗавершения, Заголовок = "", Каталог = "") Экспорт Контекст = Новый Структура; Контекст.Вставить("ОбработчикЗавершения", ОбработчикЗавершения); Контекст.Вставить("Заголовок", Заголовок); + Контекст.Вставить("Каталог", Каталог); ОписаниеОповещения = Новый ОписаниеОповещения( "ВыбратьКаталогПриПодключенииРасширенияРаботыСФайлами", ФайловаяСистемаСлужебныйКлиент, Контекст); @@ -666,12 +698,12 @@ Оповещение = Новый ОписаниеОповещения("СоздатьВременныйКаталогПослеПроверкиРасширенияРаботыСФайлами", ФайловаяСистемаСлужебныйКлиент, Контекст); - ТекстПредложения = НСтр("ru = 'Для создания временного каталога необходимо установить расширение работы с файлами.'"); + ТекстПредложения = НСтр("ru = 'Для создания временного каталога необходимо установить расширение для работы с 1С:Предприятием.'"); ПодключитьРасширениеДляРаботыСФайлами(Оповещение, ТекстПредложения, Ложь); КонецПроцедуры -// Предлагает пользователю установить расширение работы с файлами в веб-клиенте. +// Предлагает пользователю установить расширение для работы с 1С:Предприятием в веб-клиенте. // Предназначена для использования в начале участков кода, в которых ведется работа с файлами. // // Параметры: @@ -686,7 +718,7 @@ // Пример: // // Оповещение = Новый ОписаниеОповещения("ПечатьДокументаЗавершение", ЭтотОбъект); -// ТекстСообщения = НСтр("ru = 'Для печати документа необходимо установить расширение работы с файлами.'"); +// ТекстСообщения = НСтр("ru = 'Для печати документа необходимо установить расширение для работы с 1С:Предприятием.'"); // ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботыСФайлами(Оповещение, ТекстСообщения); // // Процедура ПечатьДокументаЗавершение(РасширениеПодключено, ДополнительныеПараметры) Экспорт diff --git a/SSL/src/CommonModules/ФайловаяСистемаСлужебныйКлиент/Module.bsl b/SSL/src/CommonModules/ФайловаяСистемаСлужебныйКлиент/Module.bsl index 29643458f..c44ab4dca 100644 --- a/SSL/src/CommonModules/ФайловаяСистемаСлужебныйКлиент/Module.bsl +++ b/SSL/src/CommonModules/ФайловаяСистемаСлужебныйКлиент/Module.bsl @@ -25,7 +25,7 @@ Если Не РасширениеПодключено И Не Интерактивно Тогда - ВызватьИсключение НСтр("ru ='Невозможно загрузить файл без установленного расширения работы с файлами.'"); + ВызватьИсключение НСтр("ru = 'Невозможно загрузить файл без установленного расширения работы с файлами.'"); КонецЕсли; Если Диалог.МножественныйВыбор Тогда @@ -224,7 +224,7 @@ Оповещение = Новый ОписаниеОповещения( "ОткрытьФайлВПрограммеПросмотраПослеПроверкиРасширенияРаботыСФайлами", ЭтотОбъект, Контекст); - ТекстПредложения = НСтр("ru = 'Для открытия файла необходимо установить расширение работы с файлами.'"); + ТекстПредложения = НСтр("ru = 'Для открытия файла необходимо установить расширение для работы с 1С:Предприятием.'"); ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботыСФайлами(Оповещение, ТекстПредложения, Ложь); КонецПроцедуры @@ -242,7 +242,7 @@ Иначе - ОписаниеОшибки = НСтр("ru = 'Расширение для работы с файлами не установлено, открытие файла невозможно.'"); + ОписаниеОшибки = НСтр("ru = 'Не установлено расширение для работы с 1С:Предприятием, открытие файла недоступно.'"); ОткрытьФайлВПрограммеПросмотраОповеститьОбОшибке(ОписаниеОшибки, Контекст); КонецЕсли; @@ -487,7 +487,7 @@ "ОткрытьПроводникПриОбработкеОшибки", ЭтотОбъект); ФайлИнфо.НачатьПроверкуСуществования(Оповещение); Иначе - ОписаниеОшибки = НСтр("ru = 'Расширение для работы с файлами не установлено, открытие папки не возможно.'"); + ОписаниеОшибки = НСтр("ru = 'Не установлено расширение для работы с 1С:Предприятием, открытие папки недоступно.'"); ОткрытьПроводникОповеститьОбОшибке(ОписаниеОшибки, Контекст); КонецЕсли; @@ -684,7 +684,7 @@ КонецЕсли; Иначе - ОписаниеОшибки = НСтр("ru = 'Расширение для работы с файлами не установлено, запуск программы невозможен.'"); + ОписаниеОшибки = НСтр("ru = 'Не установлено расширение для работы с 1С:Предприятием, запуск программы невозможен.'"); ЗапуститьПрограммуОповеститьОбОшибке(ОписаниеОшибки, Контекст); КонецЕсли; @@ -750,6 +750,11 @@ СтрокаКоманды = Контекст.СтрокаКоманды; ТекущийКаталог = Контекст.ТекущийКаталог; ДождатьсяЗавершения = Контекст.ДождатьсяЗавершения; + КодировкаИсполнения = Контекст.КодировкаИсполнения; + + Если ОбщегоНазначенияКлиент.ЭтоLinuxКлиент() И ЗначениеЗаполнено(КодировкаИсполнения) Тогда + СтрокаКоманды = "LANGUAGE=" + КодировкаИсполнения + " " + СтрокаКоманды; + КонецЕсли; Оповещение = Новый ОписаниеОповещения( "ЗапуститьПрограммуПослеЗапускаПриложения", ЭтотОбъект, Контекст, @@ -984,6 +989,7 @@ Если Не РасширениеПодключено Тогда ВыполнитьОбработкуОповещения(Контекст.ОбработчикЗавершения, ""); + Возврат; КонецЕсли; ОписаниеОповещения = Новый ОписаниеОповещения( @@ -994,6 +1000,9 @@ Если Не ПустаяСтрока(Контекст.Заголовок) Тогда Диалог.Заголовок = Контекст.Заголовок; КонецЕсли; + Если Не ПустаяСтрока(Контекст.Каталог) Тогда + Диалог.Каталог = Контекст.Каталог; + КонецЕсли; Диалог.Показать(ОписаниеОповещения); @@ -1020,6 +1029,7 @@ Если Не РасширениеПодключено Тогда ВыполнитьОбработкуОповещения(Контекст.ОбработчикЗавершения, ""); + Возврат; КонецЕсли; Контекст.Диалог.Показать(Контекст.ОбработчикЗавершения); @@ -1121,7 +1131,7 @@ Иначе ОписаниеОшибки = - НСтр("ru = 'Расширение для работы с файлами не установлено, создание временного каталога невозможно.'"); + НСтр("ru = 'Не установлено расширение для работы с 1С:Предприятием, создание временного каталога невозможно.'"); СоздатьВременныйКаталогОповеститьОбОшибке(ОписаниеОшибки, Контекст); КонецЕсли; diff --git a/SSL/src/CommonModules/ЦентрМониторингаСлужебный/Module.bsl b/SSL/src/CommonModules/ЦентрМониторингаСлужебный/Module.bsl index 5471a1297..17b1dfab2 100644 --- a/SSL/src/CommonModules/ЦентрМониторингаСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ЦентрМониторингаСлужебный/Module.bsl @@ -1771,7 +1771,7 @@ ПараметрыКонстанты.Вставить("ДатаКрайнегоПакета", Дата(1,1,1)); ПараметрыКонстанты.Вставить("НомерКрайнегоПакета", 0); ПараметрыКонстанты.Вставить("ПакетовДляОтправки", 3); - ПараметрыКонстанты.Вставить("Сервер", "pult.1c.ru"); + ПараметрыКонстанты.Вставить("Сервер", "pult.1c.com"); ПараметрыКонстанты.Вставить("АдресРесурса", "pult/v1/packet/"); ПараметрыКонстанты.Вставить("АдресРесурсаДляДампов", "pult/v1/dump/"); ПараметрыКонстанты.Вставить("Порт", 443); @@ -2187,28 +2187,28 @@ КонецЕсли; КонецЦикла; Исключение - Сообщение = НСтр("ru='Ошибка чтения файла настроек технологического журнала'"); + Сообщение = НСтр("ru = 'Ошибка чтения файла настроек технологического журнала'"); Сообщение = Сообщение + " """ +Файл.ПолноеИмя + """." + Символы.ПС; - Сообщение = Сообщение + НСтр("ru='Скорее всего файл поврежден. Регистрация дампов не возможна. Удалите поврежденный файл или восстановите настройки.'"); + Сообщение = Сообщение + НСтр("ru = 'Скорее всего файл поврежден. Регистрация дампов не возможна. Удалите поврежденный файл или восстановите настройки.'"); ЗаписьЖурналаРегистрации(НСтр("ru = 'Центр мониторинга'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Предупреждение,,,Сообщение); КаталогДампов.Путь = Неопределено; - КаталогДампов.ОписаниеОшибки = НСтр("ru='Ошибка чтения файла настроек технологического журнала'"); + КаталогДампов.ОписаниеОшибки = НСтр("ru = 'Ошибка чтения файла настроек технологического журнала'"); Возврат КаталогДампов; КонецПопытки; Если ПараметрыДампов <> Неопределено Тогда Если НЕ ПараметрыДампов.Свойство("location") ИЛИ НЕ ПараметрыДампов.Свойство("create") ИЛИ НЕ ПараметрыДампов.Свойство("type") Тогда - Сообщение = НСтр("ru='Ошибка секции сбора дампов в файле настроек технологического журнала'"); + Сообщение = НСтр("ru = 'Ошибка секции сбора дампов в файле настроек технологического журнала'"); Сообщение = Сообщение + " """ +Файл.ПолноеИмя + """." + Символы.ПС; - Сообщение = Сообщение + НСтр("ru='Регистрация дампов не возможна. Удалите файл или восстановите настройки.'"); + Сообщение = Сообщение + НСтр("ru = 'Регистрация дампов не возможна. Удалите файл или восстановите настройки.'"); ЧтениеXML.Закрыть(); ЗаписьЖурналаРегистрации(НСтр("ru = 'Центр мониторинга'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Предупреждение,,,Сообщение); КаталогДампов.Путь = Неопределено; - КаталогДампов.ОписаниеОшибки = НСтр("ru='Ошибка секции сбора дампов в файле настроек технологического журнала'"); + КаталогДампов.ОписаниеОшибки = НСтр("ru = 'Ошибка секции сбора дампов в файле настроек технологического журнала'"); Возврат КаталогДампов; КонецЕсли; КонецЕсли; @@ -2240,7 +2240,7 @@ КаталогДампов.УдалятьДампы = Истина; КонецЕсли; Если КаталогДампов.Путь = Неопределено Тогда - КаталогДампов.ОписаниеОшибки = НСтр("ru='Ошибка создания файла настроек технологического журнала. Регистрация дампов не возможна.'"); + КаталогДампов.ОписаниеОшибки = НСтр("ru = 'Ошибка создания файла настроек технологического журнала. Регистрация дампов не возможна.'"); КонецЕсли; КонецЕсли; @@ -2290,14 +2290,14 @@ ЗаписьDOM.Записать(ДокументDOM, ЗаписьXML); ЗаписьXML.Закрыть(); Исключение - Сообщение = НСтр("ru='Ошибка записи файла настроек технологического журнала. Регистрация дампов не возможна.'"); + Сообщение = НСтр("ru = 'Ошибка записи файла настроек технологического журнала. Регистрация дампов не возможна.'"); Сообщение = Сообщение + " """ +Файл.ПолноеИмя + """." + Символы.ПС; Сообщение = Сообщение + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); ЗаписьЖурналаРегистрации(НСтр("ru = 'Центр мониторинга - регистрация дампов'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Предупреждение,,,Сообщение); КаталогДампов.Путь = Неопределено; - КаталогДампов.ОписаниеОшибки = НСтр("ru='Ошибка записи файла настроек технологического журнала. Регистрация дампов не возможна.'"); + КаталогДампов.ОписаниеОшибки = НСтр("ru = 'Ошибка записи файла настроек технологического журнала. Регистрация дампов не возможна.'"); Возврат КаталогДампов; КонецПопытки; КонецЕсли; @@ -2327,7 +2327,7 @@ ЗаписьXML.ЗаписатьБезОбработки(СборДампов); ЗаписьXML.Закрыть(); Исключение - Сообщение = НСтр("ru='Ошибка создания файла настроек технологического журнала. Регистрация дампов не возможна.'"); + Сообщение = НСтр("ru = 'Ошибка создания файла настроек технологического журнала. Регистрация дампов не возможна.'"); Сообщение = Сообщение + " """ +ПутьКаталога + ИмяФайлаНастроек + """." + Символы.ПС; Сообщение = Сообщение + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); @@ -3314,7 +3314,7 @@ ПозицияРазделителя = СтрНайти(КаталогДампов.Путь, ПолучитьРазделительПутиСервера()); Если ПозицияРазделителя = 0 Тогда УстановитьПривилегированныйРежим(Истина); - УстановитьПараметрЦентраМониторинга("РезультатОтправки", НСтр("ru='Не удалось определить букву диска'")); + УстановитьПараметрЦентраМониторинга("РезультатОтправки", НСтр("ru = 'Не удалось определить букву диска'")); УстановитьПривилегированныйРежим(Ложь); ПрекратитьСборПолныхДампов(); Возврат; @@ -3640,7 +3640,7 @@ Если ЗначениеЗаполнено(ПотокОшибок) Тогда РезультатЗапроса.Успешно = Ложь; - РезультатЗапроса.ОписаниеОшибки = НСтр("ru='Ошибка при выполнении команды typeperf'"); + РезультатЗапроса.ОписаниеОшибки = НСтр("ru = 'Ошибка при выполнении команды typeperf'"); Иначе МассивСтрок = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ПотокВывода, Символы.ПС, Истина, Истина); Если МассивСтрок.Количество() >= 2 Тогда @@ -3660,7 +3660,7 @@ КонецЕсли; Иначе РезультатЗапроса.Успешно = Ложь; - РезультатЗапроса.ОписаниеОшибки = НСтр("ru='Не удалось разобрать результат typeperf'"); + РезультатЗапроса.ОписаниеОшибки = НСтр("ru = 'Не удалось разобрать результат typeperf'"); КонецЕсли; КонецЕсли; diff --git a/SSL/src/CommonModules/ШаблоныСообщений/Module.bsl b/SSL/src/CommonModules/ШаблоныСообщений/Module.bsl index e7b13c701..2c22849bf 100644 --- a/SSL/src/CommonModules/ШаблоныСообщений/Module.bsl +++ b/SSL/src/CommonModules/ШаблоныСообщений/Module.bsl @@ -116,7 +116,6 @@ КонецФункции - // Возвращает описание параметров шаблона. // // Возвращаемое значение: @@ -375,6 +374,24 @@ Возврат ТипЗнч(ШаблонСсылка) = Тип("СправочникСсылка.ШаблоныСообщений"); КонецФункции +// См. СозданиеНаОснованииПереопределяемый.ПриОпределенииОбъектовСКомандамиСозданияНаОсновании. +Процедура ПриОпределенииОбъектовСКомандамиСозданияНаОсновании(Объекты) Экспорт + + Объекты.Добавить(Метаданные.Справочники.ШаблоныСообщений); + +КонецПроцедуры + +// См. СозданиеНаОснованииПереопределяемый.ПриДобавленииКомандСозданияНаОсновании. +Процедура ПриДобавленииКомандСозданияНаОсновании(Объект, КомандыСозданияНаОсновании, Параметры, СтандартнаяОбработка) Экспорт + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Взаимодействия") Тогда + Если Объект = Метаданные.Документы["ЭлектронноеПисьмоИсходящее"] Тогда + Справочники.ШаблоныСообщений.ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -382,6 +399,14 @@ Функция СформироватьПараметрыОтправки(Шаблон, Предмет, УникальныйИдентификатор, ДополнительныеПараметры = Неопределено) ПараметрыОтправки = ШаблоныСообщенийКлиентСервер.КонструкторПараметровОтправки(Шаблон.Ссылка, Предмет, УникальныйИдентификатор); + + Если ТипЗнч(ПараметрыОтправки.Предмет) = Тип("Строка") + И Метаданные.НайтиПоПолномуИмени(ПараметрыОтправки.Предмет) <> Неопределено Тогда + + ПараметрыОтправки.Предмет = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПараметрыОтправки.Предмет).ПустаяСсылка(); + + КонецЕсли; + Если ТипЗнч(ДополнительныеПараметры) = Тип("Структура") Тогда ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(ПараметрыОтправки.ДополнительныеПараметры, ДополнительныеПараметры, Истина); КонецЕсли; @@ -390,28 +415,5 @@ КонецФункции -// Обработчик подписки на событие ОбработкаПолученияФормы для переопределения формы файла. -// -// Параметры: -// Источник - СправочникМенеджер - менеджер справочника с именем "*ПрисоединенныеФайлы". -// ВидФормы - Строка - имя стандартной формы. -// Параметры - Структура - параметры формы. -// ВыбраннаяФорма - Строка - имя или объект метаданных открываемой формы. -// ДополнительнаяИнформация - Структура - дополнительная информация открытия формы. -// СтандартнаяОбработка - Булево - признак выполнения стандартной (системной) обработки события. -// -Процедура ОпределитьФормуПрисоединенногоФайла(Источник, ВидФормы, Параметры, - ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка) Экспорт - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда - - МодульРаботаСФайлами = ОбщегоНазначения.ОбщийМодуль("РаботаСФайлами"); - МодульРаботаСФайлами.ОпределитьФормуПрисоединенногоФайла(Источник, ВидФормы, Параметры, - ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка); - - КонецЕсли; - -КонецПроцедуры - #КонецОбласти diff --git a/SSL/src/CommonModules/ШаблоныСообщенийКлиент/Module.bsl b/SSL/src/CommonModules/ШаблоныСообщенийКлиент/Module.bsl index 453d855d9..7ef405fe3 100644 --- a/SSL/src/CommonModules/ШаблоныСообщенийКлиент/Module.bsl +++ b/SSL/src/CommonModules/ШаблоныСообщенийКлиент/Module.bsl @@ -8,14 +8,17 @@ #Область ПрограммныйИнтерфейс -// Открывает окно выбора шаблона для формирования электронного письма или сообщения SMS по указанному предмету -// ПредметСообщения. + +// Открывает окно выбора шаблона для формирования электронного письма или сообщения SMS по шаблону +// для переданного в параметре ПредметСообщения предмета. // // Параметры: -// ПредметСообщения - ЛюбаяСсылка, Строка - объект-источник данных, выводимых в сообщение. +// ПредметСообщения - ОпределяемыйТип.ПредметШаблонаСообщения, Строка - объект-источник данных, выводимых в сообщение. // Для общих шаблонов необходимо передавать значение "Общий". +// Для передачи предмета сообщения строкой необходимо указывать полное имя метаданных. +// Например, "Справочник.Контрагенты". // ВидСообщения - Строка - "Письмо" для электронного письма и "СообщениеSMS" для сообщений SMS. -// ОписаниеОповещенияОЗакрытии - ОписаниеОповещения - оповещение, которое вызывается после формирования сообщения. +// ОписаниеОповещенияОЗакрытии - ОписаниеОповещения - оповещение, которое вызывается после формирования сообщения. Содержит: // * Результат - Булево - Если Истина, то сообщение было создано. // * ПараметрыСообщения - Структура, Неопределено - значение, которое было передано в параметре ПараметрыСообщения. // ВладелецШаблона - ОпределяемыйТип.ВладелецШаблона - владелец шаблонов. Если не указан, то в окне выбора @@ -32,7 +35,6 @@ КонецПроцедуры - // Открывает форму для выбора шаблона. // // Параметры: @@ -156,6 +158,12 @@ КонецПроцедуры +Процедура ОткрытьСписокШаблонов() Экспорт + + ОткрытьФорму("Справочник.ШаблоныСообщений.ФормаСписка"); + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции diff --git a/SSL/src/CommonModules/ШаблоныСообщенийКлиентСервер/Module.bsl b/SSL/src/CommonModules/ШаблоныСообщенийКлиентСервер/Module.bsl index 0360c8baf..930f156de 100644 --- a/SSL/src/CommonModules/ШаблоныСообщенийКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ШаблоныСообщенийКлиентСервер/Module.bsl @@ -96,6 +96,14 @@ #Область СлужебныеПроцедурыИФункции +Функция ИдентификаторОбщий() Экспорт + Возврат "Общий"; +КонецФункции + +Функция ОбщийПредставление() Экспорт + Возврат НСтр("ru = 'Общий'"); +КонецФункции + Функция КонструкторПараметровОтправки(Шаблон, Предмет, УникальныйИдентификатор) Экспорт ПараметрыОтправки = Новый Структура(); @@ -109,6 +117,8 @@ ПараметрыОтправки.ДополнительныеПараметры.Вставить("ОтправитьСразу", Ложь); ПараметрыОтправки.ДополнительныеПараметры.Вставить("ПараметрыСообщения", Новый Структура); ПараметрыОтправки.ДополнительныеПараметры.Вставить("УчетнаяЗапись", Неопределено); + ПараметрыОтправки.ДополнительныеПараметры.Вставить("ПечатныеФормы", Новый Массив); + ПараметрыОтправки.ДополнительныеПараметры.Вставить("НастройкиСохранения"); Возврат ПараметрыОтправки; @@ -118,4 +128,41 @@ Возврат НСтр("ru = 'Произвольные'"); КонецФункции +// Обработчик подписки на событие ОбработкаПолученияФормы для переопределения формы файла. +// +// Параметры: +// Источник - СправочникМенеджер - менеджер справочника с именем "*ПрисоединенныеФайлы". +// ВидФормы - Строка - имя стандартной формы. +// Параметры - Структура - параметры формы. +// ВыбраннаяФорма - Строка - имя или объект метаданных открываемой формы. +// ДополнительнаяИнформация - Структура - дополнительная информация открытия формы. +// СтандартнаяОбработка - Булево - признак выполнения стандартной (системной) обработки события. +// +Процедура ОпределитьФормуПрисоединенногоФайла(Источник, ВидФормы, Параметры, + ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка) Экспорт + + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда + + МодульРаботаСФайламиСлужебныйВызовСервера = ОбщегоНазначения.ОбщийМодуль("РаботаСФайламиСлужебныйВызовСервера"); + МодульРаботаСФайламиСлужебныйВызовСервера.ОпределитьФормуПрисоединенногоФайла(Источник, ВидФормы, Параметры, + ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка); + + КонецЕсли; + + #Иначе + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда + + МодульРаботаСФайламиСлужебныйВызовСервера = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаСФайламиСлужебныйВызовСервера"); + МодульРаботаСФайламиСлужебныйВызовСервера.ОпределитьФормуПрисоединенногоФайла(Источник, ВидФормы, Параметры, + ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка); + + КонецЕсли; + + #КонецЕсли + +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/CommonModules/ШаблоныСообщенийСлужебный/Module.bsl b/SSL/src/CommonModules/ШаблоныСообщенийСлужебный/Module.bsl index ca73a83aa..567789f0a 100644 --- a/SSL/src/CommonModules/ШаблоныСообщенийСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ШаблоныСообщенийСлужебный/Module.bsl @@ -38,6 +38,7 @@ СведенияОШаблоне = Неопределено; Если ПараметрыОтправки.Предмет <> Неопределено Тогда СведенияОШаблоне = СведенияОШаблоне(ПараметрыШаблона); + ПараметрыОтправки.ДополнительныеПараметры.Вставить("Предмет", ПараметрыОтправки.Предмет); КонецЕсли; Если ЗначениеЗаполнено(ПараметрыШаблона.ПолноеИмяТипаНазначения) Тогда МетаданныеОбъекта = Метаданные.НайтиПоПолномуИмени(ПараметрыШаблона.ПолноеИмяТипаНазначения); @@ -82,7 +83,7 @@ Для каждого Вложение Из Сообщение.Вложения Цикл НовоеВложение = СформированноеСообщение.Вложения.Добавить(); Если ПараметрыШаблона.ТранслитерироватьИменаФайлов Тогда - НовоеВложение.Представление = СтроковыеФункцииКлиентСервер.СтрокаЛатиницей(Вложение.Ключ); + НовоеВложение.Представление = СтроковыеФункции.СтрокаЛатиницей(Вложение.Ключ); Иначе НовоеВложение.Представление = Вложение.Ключ; КонецЕсли; @@ -205,7 +206,9 @@ КонецЕсли; - МодульРаботаСПочтовымиСообщениями.ОтправитьПочтовоеСообщение(УчетнаяЗапись, ПараметрыПисьма); + Письмо = МодульРаботаСПочтовымиСообщениями.ПодготовитьПисьмо(УчетнаяЗапись, ПараметрыПисьма); + МодульРаботаСПочтовымиСообщениями.ОтправитьПисьмо(УчетнаяЗапись, Письмо); + Результат.Отправлено = Истина; Иначе @@ -434,8 +437,9 @@ КонецЕсли; ОпределитьСписокПечатныхФорм(МетаданныеОбъект, СведенияОШаблоне, ПроизвольныйПараметр.Ключ); Иначе - Префикс = НСтр("ru='Произвольные'"); - РеквизитыОбъектаНазначения = РеквизитыОбъектаНазначения(СведенияОШаблоне.Реквизиты, Префикс); + ПроизвольныеПредставление = НСтр("ru = 'Произвольные'"); + Префикс = "Произвольные"; + РеквизитыОбъектаНазначения = РеквизитыОбъектаНазначения(СведенияОШаблоне.Реквизиты, Префикс, ПроизвольныеПредставление); НовыйСтрока = РеквизитыОбъектаНазначения.Добавить(); НовыйСтрока.Имя = Префикс + "." + ПроизвольныйПараметр.Ключ; НовыйСтрока.Представление = ПроизвольныйПараметр.Значение.Представление; @@ -443,8 +447,9 @@ НовыйСтрока.ПроизвольныйПараметр = Истина; КонецЕсли; Иначе - Префикс = НСтр("ru='Произвольные'"); - РеквизитыОбъектаНазначения = РеквизитыОбъектаНазначения(СведенияОШаблоне.Реквизиты, Префикс); + ПроизвольныеПредставление = НСтр("ru = 'Произвольные'"); + Префикс = "Произвольные"; + РеквизитыОбъектаНазначения = РеквизитыОбъектаНазначения(СведенияОШаблоне.Реквизиты, Префикс, ПроизвольныеПредставление); НовыйСтрока = РеквизитыОбъектаНазначения.Добавить(); НовыйСтрока.Имя = Префикс + "." + ПроизвольныйПараметр.Ключ; НовыйСтрока.Представление = ПроизвольныйПараметр.Значение.Представление; @@ -539,6 +544,21 @@ СформированноеСообщение = КонструкторСообщения(); ЗаполнитьПолучателейСообщения(ПараметрыОтправки, ПараметрыШаблона, СформированноеСообщение, МенеджерОбъекта); + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Печать") Тогда + МодульУправлениеПечатью = ОбщегоНазначения.ОбщийМодуль("УправлениеПечатью"); + Если ПараметрыШаблона.ТипШаблона = "Письмо" И ЗначениеЗаполнено(ПараметрыОтправки.ДополнительныеПараметры.ПечатныеФормы) Тогда + ПечатныеФормы = ПараметрыОтправки.ДополнительныеПараметры.ПечатныеФормы; + СписокОбъектов = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ПараметрыОтправки.Предмет); + НастройкиСохранения = ПараметрыОтправки.ДополнительныеПараметры.НастройкиСохранения; + Файлы = МодульУправлениеПечатью.НапечататьВФайл(ПечатныеФормы, СписокОбъектов, НастройкиСохранения); + Для Каждого Файл Из Файлы Цикл + Вложение = СформированноеСообщение.Вложения.Добавить(); + Вложение.АдресВоВременномХранилище = ПоместитьВоВременноеХранилище(Файл.ДвоичныеДанные, ПараметрыОтправки.УникальныйИдентификатор); + Вложение.Представление = Файл.ИмяФайла; + КонецЦикла; + КонецЕсли; + КонецЕсли; + Возврат СформированноеСообщение; КонецФункции @@ -786,14 +806,12 @@ ИмяБезРасширения = ?(РасширениеБезТочки = "", ИмяБезРасширения, Лев(ИмяБезРасширения, СтрДлина(ИмяБезРасширения) - СтрДлина(РасширениеБезТочки) - 1)); КонецЕсли; - ПараметрыФайла = Новый Структура; - ПараметрыФайла.Вставить("ВладелецФайлов", Владелец); - ПараметрыФайла.Вставить("Автор", Неопределено); - ПараметрыФайла.Вставить("ИмяБезРасширения", ИмяБезРасширения); - ПараметрыФайла.Вставить("РасширениеБезТочки", РасширениеБезТочки); - ПараметрыФайла.Вставить("ВремяИзменения", Неопределено); - ПараметрыФайла.Вставить("ВремяИзмененияУниверсальное", Неопределено); + ПараметрыФайла = МодульРаботаСФайлами.ПараметрыДобавленияФайла(); + ПараметрыФайла.ВладелецФайлов = Владелец; + ПараметрыФайла.ИмяБезРасширения = ИмяБезРасширения; + ПараметрыФайла.РасширениеБезТочки = РасширениеБезТочки; Возврат МодульРаботаСФайлами.ДобавитьФайл(ПараметрыФайла, АдресВоВременномХранилище, "", Описание); + КонецЕсли; Возврат Неопределено; @@ -1068,6 +1086,7 @@ Если СведенияОПредмете <> Неопределено Тогда Результат.Макет = СведенияОПредмете.Макет; Результат.ПараметрыСКД = СведенияОПредмете.ЗначенияПараметровСКД; + Результат.Назначение = СведенияОПредмете.Представление; КонецЕсли; Возврат Результат; @@ -1390,7 +1409,13 @@ Для Каждого Реквизит Из Реквизиты Цикл ВыбранноеПоле = КомпоновщикНастроек.Настройки.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных")); - ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных(Реквизит.Ключ); + + ИмяПоля = Реквизит.Ключ; + Если СтрЗаканчиваетсяНа(ИмяПоля, "}") И СтрНайти(ИмяПоля, "{") > 0 Тогда + ИмяПоля = Лев(ИмяПоля, СтрНайти(ИмяПоля, "{") - 1); + КонецЕсли; + + ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных(ИмяПоля); КонецЦикла; МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(МакетСКД, КомпоновщикНастроек.ПолучитьНастройки(),,, Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений")); @@ -1650,6 +1675,7 @@ НовыйСтрока = ДобавитьРеквизит(Префикс + ДоступноеПоле.Поле, Реквизиты); НовыйСтрока.Представление = ДоступноеПоле.Заголовок; + НовыйСтрока.Тип = ДоступноеПоле.ТипЗначения; КонецЦикла; diff --git a/SSL/src/CommonModules/ЭлектроннаяПодпись/Module.bsl b/SSL/src/CommonModules/ЭлектроннаяПодпись/Module.bsl index 3073a0556..b849ce21b 100644 --- a/SSL/src/CommonModules/ЭлектроннаяПодпись/Module.bsl +++ b/SSL/src/CommonModules/ЭлектроннаяПодпись/Module.bsl @@ -74,7 +74,7 @@ // * ПорядковыйНомер - Число - идентификатор подписи, по которому можно упорядочивать их в списке. // // Производные свойства: -// * Сертификат - ДвоичныеДанные - содержит выгрузку сертификата, +// * Сертификат - ХранилищеЗначения - содержит выгрузку сертификата, // который использовался для подписания (содержится в подписи). // * Отпечаток - Строка - отпечаток сертификата в формате строки Base64. // * КомуВыданСертификат - Строка - представление субъекта, полученное из двоичных данных сертификата. @@ -206,6 +206,7 @@ НачатьТранзакцию(); Попытка + Если ЭтоСсылка Тогда ЗаблокироватьДанныеДляРедактирования(Объект, ВерсияОбъекта, ИдентификаторФормы); ОбъектДанных = Объект.ПолучитьОбъект(); @@ -213,6 +214,11 @@ ОбъектДанных = Объект; КонецЕсли; + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить(ОбъектДанных.Метаданные().ПолноеИмя()); + ЭлементБлокировки.УстановитьЗначение("Ссылка", ОбъектДанных.Ссылка); + Блокировка.Заблокировать(); + СообщениеЖурналаРегистрации = ""; Если ТипЗнч(СвойстваПодписи) = Тип("Массив") Тогда @@ -365,6 +371,11 @@ ОбъектДанных = Объект; КонецЕсли; + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить(ОбъектДанных.Метаданные().ПолноеИмя()); + ЭлементБлокировки.УстановитьЗначение("Ссылка", ОбъектДанных.Ссылка); + Блокировка.Заблокировать(); + СообщениеЖурналаРегистрации = ""; Если ТипЗнч(ПорядковыйНомер) = Тип("Массив") Тогда @@ -572,7 +583,7 @@ // Параметры: // Сертификат - СертификатКриптографии - сертификат. // - ДвоичныеДанные - двоичные данные сертификата. -// - Строка (28) - отпечаток сертификата в формате Base64. +// - Строка - Строка (28) - отпечаток сертификата в формате Base64. // - Строка - адрес временного хранилища, содержащего двоичные данные сертификата. // // Возвращаемое значение: @@ -617,6 +628,7 @@ // Позволяет создать и обновить элемент справочника СертификатыКлючейЭлектроннойПодписиИШифрования по // указанному сертификату криптографии. +// Для добавления сертификата на клиенте см. ЭлектроннаяПодписьКлиент.ДобавитьСертификат. // // Параметры: // Сертификат - СертификатКриптографии - сертификат. @@ -666,53 +678,71 @@ СертификатСсылка = СсылкаНаСертификат(Сертификат); - Если ЗначениеЗаполнено(СертификатСсылка) Тогда - СертификатОбъект = СертификатСсылка.ПолучитьОбъект(); - ОбновитьЗначение(СертификатОбъект.ПометкаУдаления, Ложь); - Иначе - СертификатОбъект = Справочники.СертификатыКлючейЭлектроннойПодписиИШифрования.СоздатьЭлемент(); - СертификатОбъект.ДанныеСертификата = Новый ХранилищеЗначения(ДвоичныеДанныеСертификата); - СертификатОбъект.Отпечаток = Base64Строка(СертификатКриптографии.Отпечаток); + НачатьТранзакцию(); + Попытка - СертификатОбъект.Добавил = Пользователи.АвторизованныйПользователь(); - КонецЕсли; - - Если СертификатОбъект.ДанныеСертификата.Получить() <> ДвоичныеДанныеСертификата Тогда - СертификатОбъект.ДанныеСертификата = Новый ХранилищеЗначения(ДвоичныеДанныеСертификата); - КонецЕсли; - - СвойстваСертификата = СвойстваСертификата(СертификатКриптографии); - ОбновитьЗначение(СертификатОбъект.Подписание, СвойстваСертификата.Подписание); - ОбновитьЗначение(СертификатОбъект.Шифрование, СвойстваСертификата.Шифрование); - ОбновитьЗначение(СертификатОбъект.КомуВыдан, СвойстваСертификата.КомуВыдан); - ОбновитьЗначение(СертификатОбъект.КемВыдан, СвойстваСертификата.КемВыдан); - ОбновитьЗначение(СертификатОбъект.ДействителенДо, СвойстваСертификата.ДатаОкончания); - - СвойстваСубъекта = СвойстваСубъектаСертификата(СертификатКриптографии); - ОбновитьЗначение(СертификатОбъект.Фамилия, СвойстваСубъекта.Фамилия, Истина); - ОбновитьЗначение(СертификатОбъект.Имя, СвойстваСубъекта.Имя, Истина); - ОбновитьЗначение(СертификатОбъект.Фирма, СвойстваСубъекта.Организация, Истина); - Если СвойстваСубъекта.Свойство("Отчество") Тогда - ОбновитьЗначение(СертификатОбъект.Отчество, СвойстваСубъекта.Отчество, Истина); - КонецЕсли; - Если СвойстваСубъекта.Свойство("Должность") Тогда - ОбновитьЗначение(СертификатОбъект.Должность, СвойстваСубъекта.Должность, Истина); - КонецЕсли; - - Если СертификатОбъект.ЭтоНовый() - И Не ДополнительныеПараметры.Свойство("Наименование") Тогда + Если ЗначениеЗаполнено(СертификатСсылка) Тогда + + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Справочник.СертификатыКлючейЭлектроннойПодписиИШифрования"); + ЭлементБлокировки.УстановитьЗначение("Ссылка", СертификатСсылка); + + Блокировка.Заблокировать(); + + СертификатОбъект = СертификатСсылка.ПолучитьОбъект(); + ОбновитьЗначение(СертификатОбъект.ПометкаУдаления, Ложь); + + Иначе + СертификатОбъект = Справочники.СертификатыКлючейЭлектроннойПодписиИШифрования.СоздатьЭлемент(); + СертификатОбъект.ДанныеСертификата = Новый ХранилищеЗначения(ДвоичныеДанныеСертификата); + СертификатОбъект.Отпечаток = Base64Строка(СертификатКриптографии.Отпечаток); + + СертификатОбъект.Добавил = Пользователи.АвторизованныйПользователь(); + КонецЕсли; - ДополнительныеПараметры.Вставить("Наименование", - ПредставлениеСертификата(СертификатКриптографии)); - КонецЕсли; - - Для Каждого КлючИЗначение Из ДополнительныеПараметры Цикл - ОбновитьЗначение(СертификатОбъект[КлючИЗначение.Ключ], КлючИЗначение.Значение); - КонецЦикла; - - Если СертификатОбъект.Модифицированность() Тогда - СертификатОбъект.Записать(); - КонецЕсли; + Если СертификатОбъект.ДанныеСертификата.Получить() <> ДвоичныеДанныеСертификата Тогда + СертификатОбъект.ДанныеСертификата = Новый ХранилищеЗначения(ДвоичныеДанныеСертификата); + КонецЕсли; + + СвойстваСертификата = СвойстваСертификата(СертификатКриптографии); + ОбновитьЗначение(СертификатОбъект.Подписание, СвойстваСертификата.Подписание); + ОбновитьЗначение(СертификатОбъект.Шифрование, СвойстваСертификата.Шифрование); + ОбновитьЗначение(СертификатОбъект.КомуВыдан, СвойстваСертификата.КомуВыдан); + ОбновитьЗначение(СертификатОбъект.КемВыдан, СвойстваСертификата.КемВыдан); + ОбновитьЗначение(СертификатОбъект.ДействителенДо, СвойстваСертификата.ДатаОкончания); + + СвойстваСубъекта = СвойстваСубъектаСертификата(СертификатКриптографии); + ОбновитьЗначение(СертификатОбъект.Фамилия, СвойстваСубъекта.Фамилия, Истина); + ОбновитьЗначение(СертификатОбъект.Имя, СвойстваСубъекта.Имя, Истина); + ОбновитьЗначение(СертификатОбъект.Фирма, СвойстваСубъекта.Организация, Истина); + Если СвойстваСубъекта.Свойство("Отчество") Тогда + ОбновитьЗначение(СертификатОбъект.Отчество, СвойстваСубъекта.Отчество, Истина); + КонецЕсли; + Если СвойстваСубъекта.Свойство("Должность") Тогда + ОбновитьЗначение(СертификатОбъект.Должность, СвойстваСубъекта.Должность, Истина); + КонецЕсли; + + Если СертификатОбъект.ЭтоНовый() + И Не ДополнительныеПараметры.Свойство("Наименование") Тогда + + ДополнительныеПараметры.Вставить("Наименование", + ПредставлениеСертификата(СертификатКриптографии)); + КонецЕсли; + + Для Каждого КлючИЗначение Из ДополнительныеПараметры Цикл + ОбновитьЗначение(СертификатОбъект[КлючИЗначение.Ключ], КлючИЗначение.Значение); + КонецЦикла; + + Если СертификатОбъект.Модифицированность() Тогда + СертификатОбъект.Записать(); + КонецЕсли; + + ЗафиксироватьТранзакцию(); + + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; Возврат СертификатОбъект.Ссылка; @@ -949,27 +979,41 @@ // Функция ПроверитьПодпись(МенеджерКриптографии, ИсходныеДанные, Подпись, ОписаниеОшибки = Null, НаДату = Неопределено) Экспорт - МенеджерКриптографииДляПроверки = МенеджерКриптографии; - Если МенеджерКриптографииДляПроверки = Неопределено Тогда - МенеджерКриптографииДляПроверки = МенеджерКриптографии("ПроверкаПодписи", ОписаниеОшибки = Null, ОписаниеОшибки); - Если МенеджерКриптографииДляПроверки = Неопределено Тогда - Возврат Ложь; - КонецЕсли; - КонецЕсли; + ВызыватьИсключение = ОписаниеОшибки = Null; ИсходныеДанныеДляПроверки = ИсходныеДанные; Если ТипЗнч(ИсходныеДанные) = Тип("Строка") И ЭтоАдресВременногоХранилища(ИсходныеДанные) Тогда ИсходныеДанныеДляПроверки = ПолучитьИзВременногоХранилища(ИсходныеДанные); КонецЕсли; + ЭтоXMLDSig = ТипЗнч(ИсходныеДанныеДляПроверки) = Тип("Структура") + И ИсходныеДанныеДляПроверки.Свойство("ПараметрыXMLDSig"); + + ЭтоCMS = ТипЗнч(ИсходныеДанныеДляПроверки) = Тип("Структура") + И ИсходныеДанныеДляПроверки.Свойство("ПараметрыCMS"); + + МенеджерКриптографииДляПроверки = МенеджерКриптографии; + + Если МенеджерКриптографииДляПроверки = Неопределено Тогда + ИспользоватьЭлектроннуюПодписьВМоделиСервиса = Не ЭтоXMLDSig И Не ЭтоCMS + И ЭлектроннаяПодписьСлужебный.ИспользоватьЭлектроннуюПодписьВМоделиСервиса(); + + МенеджерКриптографииДляПроверки = МенеджерКриптографии("ПроверкаПодписи", + ВызыватьИсключение И Не ИспользоватьЭлектроннуюПодписьВМоделиСервиса, ОписаниеОшибки); + + Если МенеджерКриптографииДляПроверки = Неопределено + И Не ИспользоватьЭлектроннуюПодписьВМоделиСервиса Тогда + + Возврат Ложь; + КонецЕсли; + КонецЕсли; + ПодписьДляПроверки = Подпись; Если ТипЗнч(Подпись) = Тип("Строка") И ЭтоАдресВременногоХранилища(Подпись) Тогда ПодписьДляПроверки = ПолучитьИзВременногоХранилища(Подпись); КонецЕсли; - Если ТипЗнч(ИсходныеДанныеДляПроверки) = Тип("Структура") - И ИсходныеДанныеДляПроверки.Свойство("ПараметрыXMLDSig") Тогда - + Если ЭтоXMLDSig Тогда Попытка Результат = ЭлектроннаяПодписьСлужебный.ПроверитьПодпись( ИсходныеДанныеДляПроверки.КонвертSOAP, @@ -977,22 +1021,67 @@ МенеджерКриптографииДляПроверки); Исключение ОписаниеОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + Если ВызыватьИсключение Тогда + ВызватьИсключение; + КонецЕсли; Возврат Ложь; КонецПопытки; - Сертификат = Результат.Сертификат; ДатаПодписания = Результат.ДатаПодписания; - Иначе + ИначеЕсли ЭтоCMS Тогда + Попытка + Результат = ЭлектроннаяПодписьСлужебный.ПроверитьПодписьCMS( + ПодписьДляПроверки, + ИсходныеДанныеДляПроверки.Данные, + ИсходныеДанныеДляПроверки.ПараметрыCMS, + МенеджерКриптографииДляПроверки); + Исключение + ОписаниеОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + Если ВызыватьИсключение Тогда + ВызватьИсключение; + КонецЕсли; + Возврат Ложь; + КонецПопытки; + Сертификат = Результат.Сертификат; + ДатаПодписания = Результат.ДатаПодписания; + ИначеЕсли МенеджерКриптографииДляПроверки = Неопределено + Или МенеджерКриптографииДляПроверки = "СервисКриптографии" Тогда + + Сертификат = Неопределено; + МодульСервисКриптографии = ОбщегоНазначения.ОбщийМодуль("СервисКриптографии"); + Попытка + Результат = МодульСервисКриптографии.ПроверитьПодпись(ПодписьДляПроверки, ИсходныеДанныеДляПроверки); + Сертификаты = МодульСервисКриптографии.ПолучитьСертификатыИзПодписи(ПодписьДляПроверки); + Если Сертификаты.Количество() = 1 Тогда + Сертификат = Сертификаты[0]; + ИначеЕсли Сертификаты.Количество() > 1 Тогда + Сертификат = ЭлектроннаяПодписьСлужебный.СертификатыПоПорядкуДоКорневого(Сертификаты)[0]; + КонецЕсли; + Исключение + ОписаниеОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + Если ВызыватьИсключение Тогда + ВызватьИсключение; + КонецЕсли; + Возврат Ложь; + КонецПопытки; + Если Не Результат Тогда + ОписаниеОшибки = ЭлектроннаяПодписьСлужебныйКлиентСервер.ТекстОшибкиСервисаПодписьНедействительна(); + Если ВызыватьИсключение Тогда + ВызватьИсключение ОписаниеОшибки; + КонецЕсли; + Возврат Ложь; + КонецЕсли; + Иначе Сертификат = Неопределено; Попытка МенеджерКриптографииДляПроверки.ПроверитьПодпись(ИсходныеДанныеДляПроверки, ПодписьДляПроверки, Сертификат); Исключение - Если ОписаниеОшибки = Null Тогда + ОписаниеОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + Если ВызыватьИсключение Тогда ВызватьИсключение; КонецЕсли; - ОписаниеОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); Возврат Ложь; КонецПопытки; @@ -1000,7 +1089,10 @@ Если Не ЗначениеЗаполнено(ДатаПодписания) Тогда ДатаПодписания = НаДату; КонецЕсли; - + КонецЕсли; + + Если ВызыватьИсключение Тогда + ОписаниеОшибки = Null; КонецЕсли; Возврат ПроверитьСертификат(МенеджерКриптографииДляПроверки, Сертификат, ОписаниеОшибки, ДатаПодписания); @@ -1031,11 +1123,18 @@ // Функция ПроверитьСертификат(МенеджерКриптографии, Сертификат, ОписаниеОшибки = Null, НаДату = Неопределено) Экспорт + ВызыватьИсключение = ОписаниеОшибки = Null; МенеджерКриптографииДляПроверки = МенеджерКриптографии; Если МенеджерКриптографииДляПроверки = Неопределено Тогда - МенеджерКриптографииДляПроверки = МенеджерКриптографии("ПроверкаСертификата", ОписаниеОшибки = Null, ОписаниеОшибки); - Если МенеджерКриптографииДляПроверки = Неопределено Тогда + ИспользоватьЭлектроннуюПодписьВМоделиСервиса = + ЭлектроннаяПодписьСлужебный.ИспользоватьЭлектроннуюПодписьВМоделиСервиса(); + + МенеджерКриптографииДляПроверки = МенеджерКриптографии("ПроверкаСертификата", + ВызыватьИсключение И Не ИспользоватьЭлектроннуюПодписьВМоделиСервиса, ОписаниеОшибки); + + Если МенеджерКриптографииДляПроверки = Неопределено + И Не ИспользоватьЭлектроннуюПодписьВМоделиСервиса Тогда Возврат Ложь; КонецЕсли; КонецЕсли; @@ -1047,27 +1146,64 @@ КонецЕсли; Если ТипЗнч(СертификатДляПроверки) = Тип("ДвоичныеДанные") Тогда + ДанныеСертификата = СертификатДляПроверки; СертификатДляПроверки = Новый СертификатКриптографии(СертификатДляПроверки); + Иначе + ДанныеСертификата = СертификатДляПроверки.Выгрузить(); КонецЕсли; РежимыПроверкиСертификата = ЭлектроннаяПодписьСлужебныйКлиентСервер.РежимыПроверкиСертификата( ЗначениеЗаполнено(НаДату)); - Попытка - МенеджерКриптографииДляПроверки.ПроверитьСертификат(СертификатДляПроверки, РежимыПроверкиСертификата); - Исключение - ОписаниеОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); - Возврат Ложь; - КонецПопытки; + Если МенеджерКриптографииДляПроверки = Неопределено + Или МенеджерКриптографииДляПроверки = "СервисКриптографии" Тогда + + МодульСервисКриптографии = ОбщегоНазначения.ОбщийМодуль("СервисКриптографии"); + Попытка + Результат = МодульСервисКриптографии.ПроверитьСертификат(ДанныеСертификата); + Исключение + ОписаниеОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + Если ВызыватьИсключение Тогда + ВызватьИсключение; + КонецЕсли; + Возврат Ложь; + КонецПопытки; + Если Не Результат Тогда + ОписаниеОшибки = ЭлектроннаяПодписьСлужебныйКлиентСервер.ТекстОшибкиСервисаСертификатНедействителен(); + Если ВызыватьИсключение Тогда + ВызватьИсключение ОписаниеОшибки; + КонецЕсли; + Возврат Ложь; + КонецЕсли; + Иначе + Попытка + МенеджерКриптографииДляПроверки.ПроверитьСертификат(СертификатДляПроверки, РежимыПроверкиСертификата); + Исключение + ОписаниеОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + Если ВызыватьИсключение Тогда + ВызватьИсключение; + КонецЕсли; + Возврат Ложь; + КонецПопытки; + КонецЕсли; ОшибкаПросрочки = ЭлектроннаяПодписьСлужебныйКлиентСервер.СертификатПросрочен(СертификатДляПроверки, НаДату, ЭлектроннаяПодписьСлужебный.ДобавкаВремени()); Если ЗначениеЗаполнено(ОшибкаПросрочки) Тогда ОписаниеОшибки = ОшибкаПросрочки; + Если ВызыватьИсключение Тогда + ВызватьИсключение ОписаниеОшибки; + КонецЕсли; Возврат Ложь; КонецЕсли; + Если ВызыватьИсключение Тогда + ОписаниеОшибки = Null; + Иначе + ОписаниеОшибки = ""; + КонецЕсли; + Возврат Истина; КонецФункции @@ -1237,6 +1373,13 @@ КонецФункции +// См. ЭлектроннаяПодписьКлиент.ПараметрыCMS. +Функция ПараметрыCMS() Экспорт + + Возврат ЭлектроннаяПодписьСлужебныйКлиентСервер.ПараметрыCMS(); + +КонецФункции + // Конец ЭлектронноеВзаимодействие #КонецОбласти @@ -1493,22 +1636,37 @@ ПодписанЭП = Ложь; - НаборЗаписей = РегистрыСведений.ЭлектронныеПодписи.СоздатьНаборЗаписей(); - НаборЗаписей.Отбор.ПодписанныйОбъект.Установить(ПодписанныйОбъект.Ссылка); - НаборЗаписей.Прочитать(); + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ЭлектронныеПодписи"); + ЭлементБлокировки.УстановитьЗначение("ПодписанныйОбъект", ПодписанныйОбъект.Ссылка); - ПорядковыйНомер = 1; - Для Каждого ЭлектроннаяПодписьОбъекта Из НаборЗаписей Цикл - ЭлектроннаяПодписьОбъекта.ПорядковыйНомер = ПорядковыйНомер; - ПорядковыйНомер = ПорядковыйНомер + 1; - ПодписанЭП = Истина; - КонецЦикла; - - Если ПодписанныйОбъект.ПодписанЭП <> ПодписанЭП Тогда - ПодписанныйОбъект.ПодписанЭП = ПодписанЭП; - КонецЕсли; - - НаборЗаписей.Записать(Истина); + НачатьТранзакцию(); + Попытка + + Блокировка.Заблокировать(); + + НаборЗаписей = РегистрыСведений.ЭлектронныеПодписи.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.ПодписанныйОбъект.Установить(ПодписанныйОбъект.Ссылка); + НаборЗаписей.Прочитать(); + + ПорядковыйНомер = 1; + Для Каждого ЭлектроннаяПодписьОбъекта Из НаборЗаписей Цикл + ЭлектроннаяПодписьОбъекта.ПорядковыйНомер = ПорядковыйНомер; + ПорядковыйНомер = ПорядковыйНомер + 1; + ПодписанЭП = Истина; + КонецЦикла; + + Если ПодписанныйОбъект.ПодписанЭП <> ПодписанЭП Тогда + ПодписанныйОбъект.ПодписанЭП = ПодписанЭП; + КонецЕсли; + + НаборЗаписей.Записать(Истина); + ЗафиксироватьТранзакцию(); + + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; УстановитьПривилегированныйРежим(Ложь); diff --git a/SSL/src/CommonModules/ЭлектроннаяПодписьКлиент/Module.bsl b/SSL/src/CommonModules/ЭлектроннаяПодписьКлиент/Module.bsl index 7c9c66a6c..f8f5a2e6f 100644 --- a/SSL/src/CommonModules/ЭлектроннаяПодписьКлиент/Module.bsl +++ b/SSL/src/CommonModules/ЭлектроннаяПодписьКлиент/Module.bsl @@ -64,90 +64,99 @@ // // Параметры: // ОписаниеДанных - Структура - со свойствами: -// * Операция - Строка - заголовок формы подписания данных, например Подписание файла. -// * ЗаголовокДанных - Строка - заголовок элемента или набора данных, например Файл. -// * СообщитьОЗавершении - Булево - (необязательный) - если Ложь, то не будет показано оповещение о успешном -// завершении операции для представления данных, указанного рядом с заголовком. -// * ПоказатьКомментарий - Булево - (необязательный) - разрешает ввод комментария в форме -// подписания данных. Если не указан, значит Ложь. -// * ОтборСертификатов - Массив - (необязательный) - содержит ссылки на элементы справочника. -// СертификатыЭлектроннойПодписиИШифрования, которые могут быть выбраны -// пользователем. Отбор блокирует возможность выбора других сертификатов -// из личного хранилища. -// - Структура - со свойством: -// Организация - ОпределяемыйТип.Организация - содержит ссылку на организацию, по которой -// будет установлен отбор в списке сертификатов пользователя. -// * БезПодтверждения - Булево - (необязательный) - пропустить подтверждение пользователя, если -// в свойстве ОтборСертификатов только один сертификат и: -// а) либо сертификат выпущен с усиленной защитой закрытого ключа; -// б) либо пользователь запомнил пароль к сертификату на время сеанса; -// в) либо пароль установлен ранее методом УстановитьПарольСертификата. -// Если в процессе подписания возникла ошибка, тогда будет открыта форма -// с возможностью указать пароль. Параметр ПоказатьКомментарий игнорируется. -// * ПередВыполнением - ОписаниеОповещения - (необязательный) - описание обработчика дополнительной -// подготовки данных после выбора сертификата, которым будут подписаны данные. -// В этом обработчике можно заполнить параметр Данные, если он зависит -// от сертификата, который в момент вызова уже вставлен в ОписаниеДанных -// как ВыбранныйСертификат (см. ниже). Следует учесть общий подход (см. выше). -// * ВыполнятьНаСервере - Неопределено, Булево - (необязательный) - когда не указан или Неопределено, -// тогда выполнение будет определено автоматически: если есть сервер, то сначала -// на сервере, потом (при неудаче) на клиенте, потом сообщение о двух ошибках. -// Когда Истина: если разрешено выполнение на сервере, тогда выполнение -// только на сервере, при неудаче одно сообщение об ошибке на сервере. -// Когда Ложь: выполнение только на клиенте, как будто нет сервера. +// * Операция - Строка - заголовок формы подписания данных, например Подписание файла. +// * ЗаголовокДанных - Строка - заголовок элемента или набора данных, например Файл. +// * СообщитьОЗавершении - Булево - (необязательный) - если Ложь, то не будет показано оповещение о успешном +// завершении операции для представления данных, указанного рядом с заголовком. +// * ПоказатьКомментарий - Булево - (необязательный) - разрешает ввод комментария в форме +// подписания данных. Если не указан, значит Ложь. +// * ОтборСертификатов - Массив - (необязательный) - содержит ссылки на элементы справочника. +// СертификатыЭлектроннойПодписиИШифрования, которые могут быть выбраны +// пользователем. Отбор блокирует возможность выбора других сертификатов +// из личного хранилища. +// - Структура - со свойством: +// Организация - ОпределяемыйТип.Организация - содержит ссылку на организацию, по которой +// будет установлен отбор в списке сертификатов пользователя. +// * БезПодтверждения - Булево - (необязательный) - пропустить подтверждение пользователя, если +// в свойстве ОтборСертификатов только один сертификат и: +// а) либо сертификат выпущен с усиленной защитой закрытого ключа; +// б) либо пользователь запомнил пароль к сертификату на время сеанса; +// в) либо пароль установлен ранее методом УстановитьПарольСертификата. +// Если в процессе подписания возникла ошибка, тогда будет открыта форма +// с возможностью указать пароль. Параметр ПоказатьКомментарий игнорируется. +// * ПередВыполнением - ОписаниеОповещения - (необязательный) - описание обработчика дополнительной +// подготовки данных после выбора сертификата, которым будут подписаны данные. +// В этом обработчике можно заполнить параметр Данные, если он зависит +// от сертификата, который в момент вызова уже вставлен в ОписаниеДанных +// как ВыбранныйСертификат (см. ниже). Следует учесть общий подход (см. выше). +// * ВыполнятьНаСервере - Неопределено, Булево - (необязательный) - когда не указан или Неопределено, +// тогда выполнение будет определено автоматически: если есть сервер, то сначала +// на сервере, потом (при неудаче) на клиенте, потом сообщение о двух ошибках. +// Когда Истина: если разрешено выполнение на сервере, тогда выполнение +// только на сервере, при неудаче одно сообщение об ошибке на сервере. +// Когда Ложь: выполнение только на клиенте, как будто нет сервера. // * ПараметрыДополнительныхДействий - Произвольный - (необязательный) - если указан, то передается -// на сервер в процедуру ПередНачаломОперации общего модуля -// ЭлектроннаяПодписьПереопределяемый как ВходныеПараметры. -// * КонтекстОперации - Неопределено - (необязательный) - если указан, тогда в свойство будет -// установлено определенное значение произвольного типа, которое позволяет -// выполнить действие с тем же сертификатом повторно (у пользователя -// не запрашивается ни пароль, ни подтверждение действия). -// * ------ // ------ - Произвольный - (необязательный) - если определено, то действие будет выполнено -// с тем же сертификатом без запроса пароля или подтверждения. -// Параметр БезПодтверждения считается равным Истина. -// Параметры Операция, ЗаголовокДанных, ПоказатьКомментарий, ОтборСертификатов -// и ВыполнятьНаСервере игнорируются, их значения остаются такими же, как при первом вызове. -// Параметр ПараметрыДополнительныхДействий игнорируется. -// Процедура ПередНачаломОперации не вызывается. -// Если передать контекст, возвращенный процедурой Расшифровать, тогда -// пароль, введенный для сертификата, может быть использован, как если бы -// пароль был сохранен на время сеанса. В остальном контекст игнорируется. +// на сервер в процедуру ПередНачаломОперации общего модуля +// ЭлектроннаяПодписьПереопределяемый как ВходныеПараметры. +// * КонтекстОперации - Неопределено - (необязательный) - если указан, тогда в свойство будет +// установлено определенное значение произвольного типа, которое позволяет +// выполнить действие с тем же сертификатом повторно (у пользователя +// не запрашивается ни пароль, ни подтверждение действия). +// - Произвольный - (необязательный) - если определено, то действие будет выполнено +// с тем же сертификатом без запроса пароля или подтверждения. +// Параметр БезПодтверждения считается равным Истина. +// Параметры Операция, ЗаголовокДанных, ПоказатьКомментарий, ОтборСертификатов +// и ВыполнятьНаСервере игнорируются, их значения остаются такими же, как при первом вызове. +// Параметр ПараметрыДополнительныхДействий игнорируется. +// Процедура ПередНачаломОперации не вызывается. +// Если передать контекст, возвращенный процедурой Расшифровать, тогда +// пароль, введенный для сертификата, может быть использован, как если бы +// пароль был сохранен на время сеанса. В остальном контекст игнорируется. +// * ПрекратитьВыполнение - Произвольный - если свойство существует и в процессе асинхронного выполнения возникает +// ошибка, выполнение прекращается без отображения формы операции или с закрытием этой формы, +// если она была открыта. +// // Вариант 1: -// * Данные - ДвоичныеДанные - данные для подписания. -// * -- // -- - Строка - адрес временного хранилища, содержащего двоичные данные. -// * -- // -- - ОписаниеОповещения - обработчик получения данных, который возвращает -// их в свойстве Данные (см. выше общий подход). В момент вызова -// в ОписаниеДанных уже вставлен параметр ВыбранныйСертификат (см. ниже). -// - Структура - со свойствами: -// * ПараметрыXMLDSig - Структура - как возвращает функция ПараметрыXMLDSig общего -// модуля ЭлектроннаяПодписьКлиент. -// * КонвертSOAP - Строка - шаблон сообщения . -// * Объект - Ссылка - (необязательный) - ссылка на объект , к которому нужно добавить подпись. -// Если не указан, то подпись не требуется добавлять. -// * -- // -- - ОписаниеОповещения - (необязательный) - обработчик добавления подписи в -// регистр сведений ЭлектронныеПодписи. Следует учесть общий подход (см. выше). -// В момент вызова в ОписаниеДанных уже вставлен параметр СвойстваПодписи. -// В случае параметра НаборДанных, в ОписаниеДанных вставляется -// свойство ТекущийЭлементНабораДанных, содержащее параметр СвойстваПодписи. -// * ВерсияОбъекта - Строка - (необязательный) - версия данных объекта для проверки и -// блокировки объекта перед добавлением подписи. -// * Представление - Ссылка, Строка, Структура - (необязательный), если не указан, тогда -// представление вычисляется по значению свойства Объект. -// Структура содержит свойства: -// * Значение - Ссылка, ОписаниеОповещения - для открытия. -// * Представление - Строка - представление значения. +// * Данные - ДвоичныеДанные - данные для подписания. +// - Строка - адрес временного хранилища, содержащего двоичные данные. +// - ОписаниеОповещения - обработчик получения данных, который возвращает +// их в свойстве Данные (см. выше общий подход). В момент вызова +// в ОписаниеДанных уже вставлен параметр ВыбранныйСертификат (см. ниже). +// - Структура - со свойствами: +// * ПараметрыXMLDSig - Структура - как возвращает функция ПараметрыXMLDSig общего +// модуля ЭлектроннаяПодписьКлиент. +// * КонвертSOAP - Строка - шаблон сообщения . +// - Структура - со свойствами: +// * ПараметрыCMS - Структура - как возвращает функция ПараметрыCMS общего +// модуля ЭлектроннаяПодписьКлиент. +// * Данные - Строка - произвольная строка для подписания, +// - ДвоичныеДанные - двоичные данные для подписания. +// * Объект - Ссылка - (необязательный) - ссылка на объект , к которому нужно добавить подпись. +// Если не указан, то подпись не требуется добавлять. +// - ОписаниеОповещения - (необязательный) - обработчик добавления подписи в +// регистр сведений ЭлектронныеПодписи. Следует учесть общий подход (см. выше). +// В момент вызова в ОписаниеДанных уже вставлен параметр СвойстваПодписи. +// В случае параметра НаборДанных, в ОписаниеДанных вставляется +// свойство ТекущийЭлементНабораДанных, содержащее параметр СвойстваПодписи. +// * ВерсияОбъекта - Строка - (необязательный) - версия данных объекта для проверки и +// блокировки объекта перед добавлением подписи. +// * Представление - Ссылка, Строка, Структура - (необязательный), если не указан, тогда +// представление вычисляется по значению свойства Объект. +// Структура содержит свойства: +// * Значение - Ссылка, ОписаниеОповещения - для открытия. +// * Представление - Строка - представление значения. // Вариант 2: -// * НаборДанных - Массив - структуры со свойствами, описанными в Варианте 1. -// * ПредставлениеНабора - Строка - представления нескольких элементов набора данных, например, "Файлы (%1)". -// В это представление в параметр %1 заполняется количество элементов. -// По гиперссылке можно открыть список. -// Если в наборе данных 1 элемент, тогда используется значение -// в свойстве Представление свойства НаборДанных, если не указано, тогда -// представление вычисляется по значению свойства Объект элемента набора данных. -// * СписокПредставлений - СписокЗначений, Массив - (необязательный) - произвольный список элементов -// или массив со значениями, как у свойства Представление, которые -// сможет открыть пользователь. Если не указан, то заполняется из -// свойств Представление или Объект в свойстве НаборДанных. +// * НаборДанных - Массив - структуры со свойствами, описанными в Варианте 1. +// * ПредставлениеНабора - Строка - представления нескольких элементов набора данных, например, "Файлы (%1)". +// В это представление в параметр %1 заполняется количество элементов. +// По гиперссылке можно открыть список. +// Если в наборе данных 1 элемент, тогда используется значение +// в свойстве Представление свойства НаборДанных, если не указано, тогда +// представление вычисляется по значению свойства Объект элемента набора данных. +// * СписокПредставлений - СписокЗначений, Массив - (необязательный) - произвольный список элементов +// или массив со значениями, как у свойства Представление, которые +// сможет открыть пользователь. Если не указан, то заполняется из +// свойств Представление или Объект в свойстве НаборДанных. // // Форма - ФормаКлиентскогоПриложения - форма, из которой нужно получить уникальный идентификатор, // который будет использоваться при блокировке объекта. @@ -160,6 +169,7 @@ // В результат передается входной параметр ОписаниеДанных, который в успешном случае дополняется свойствами: // * Успех - Булево - Истина, если все прошло успешно. Если Успех = Ложь, то частичное завершение // определяется по наличию свойства СвойстваПодписи. Если есть, то шаг выполнен. +// * Отказ - Булево - Истина, если пользователь отменил операцию интерактивно. // * ПользовательНажалКнопкуПодписать - Булево - если Истина, то пользователь хотя бы раз // нажал на кнопку Подписать. Используется для сценариев, когда для продолжения бизнес-процесса // достаточно простой подписи (намерения установить подпись), а установка квалифицированной подписи @@ -239,53 +249,54 @@ // // Параметры: // ОписаниеДанных - Структура - со свойствами: -// * ЗаголовокДанных - Строка - заголовок элемента данных, например Файл. -// * ПоказатьКомментарий - Булево - (необязательный) - разрешает ввод комментария в форме -// добавления подписей. Если не указан, значит Ложь. -// * Объект - Ссылка - (необязательный) - ссылка на объект , к которому нужно добавить подпись. -// * -- // -- - ОписаниеОповещения - (необязательный) - обработчик добавления подписи в -// регистр сведений ЭлектронныеПодписи. Следует учесть общий подход (см. выше). -// В момент вызова в ОписаниеДанных уже вставлен параметр Подписи. -// * ВерсияОбъекта - Строка - (необязательный) - версия данных объекта для проверки и -// блокировки объекта перед добавлением подписи. -// * Представление - Ссылка, Строка - (необязательный), если не указан, тогда -// представление вычисляется по значению свойства Объект. -// * Данные - ДвоичныеДанные - (необязательный) - данные для проверки подписи. -// * -- // -- - Строка - (необязательный) - адрес временного хранилища, содержащего двоичные данные. -// * -- // -- - ОписаниеОповещения (необязательный) - обработчик получения данных, который -// возвращает их в свойстве Данные (см. выше общий подход). +// * ЗаголовокДанных - Строка - заголовок элемента данных, например Файл. +// * ПоказатьКомментарий - Булево - (необязательный) - разрешает ввод комментария в форме +// добавления подписей. Если не указан, значит Ложь. +// * Объект - Ссылка - (необязательный) - ссылка на объект , к которому нужно добавить подпись. +// - ОписаниеОповещения - (необязательный) - обработчик добавления подписи в +// регистр сведений ЭлектронныеПодписи. Следует учесть общий подход (см. выше). +// В момент вызова в ОписаниеДанных уже вставлен параметр Подписи. +// * ВерсияОбъекта - Строка - (необязательный) - версия данных объекта для проверки и +// блокировки объекта перед добавлением подписи. +// * Представление - Ссылка, Строка - (необязательный), если не указан, тогда +// представление вычисляется по значению свойства Объект. +// * Данные - ДвоичныеДанные - (необязательный) - данные для проверки подписи. +// - Строка - (необязательный) - адрес временного хранилища, содержащего двоичные данные. +// - ОписаниеОповещения (необязательный) - обработчик получения данных, который +// возвращает их в свойстве Данные (см. выше общий подход). // // Форма - ФормаКлиентскогоПриложения - форма, из которой нужно получить уникальный идентификатор, -// который будет использоваться при блокировке объекта. +// который будет использоваться при блокировке объекта. // - УникальныйИдентификатор - уникальный идентификаторы, который будет -// использоваться при блокировке объекта. -// - Неопределено - использовать стандартную форму. +// использоваться при блокировке объекта. +// - Неопределено - использовать стандартную форму. // // ОбработкаРезультата - ОписаниеОповещения - необязательный параметр. // Требуется для нестандартной обработки результата - например, если не указан параметр Объект и/или Форма. // В результат передается входной параметр ОписаниеДанных, который в успешном случае дополняется свойствами: // * Успех - Булево - Истина, если все прошло успешно. +// * Отказ - Булево - Истина, если пользователь отменил операцию интерактивно. // * Подписи - Массив - который содержит элементы: // * СвойстваПодписи - Строка - адрес временного хранилища, содержащего описанную ниже структуру. // - Структура - развернутое описание подписи: // * Подпись - ДвоичныеДанные - результат подписания. // * УстановившийПодпись - СправочникСсылка.Пользователи - пользователь, который -// подписал объект информационной базы. +// подписал объект информационной базы. // * Комментарий - Строка - комментарий, если он был введен при подписании. // * ИмяФайлаПодписи - Строка - имя файла, из которого добавлена подпись. -// * ДатаПодписи - Дата - дата, когда подпись была сделана. Имеет смысл для случаев, -// когда дату невозможно извлечь из данных подписи. Если не -// указана или пустая, тогда используется текущая дата сеанса. -// * ДатаПроверкиПодписи - Дата - дата проверки подписи после добавления из файла, если -// не указано свойство Данные в параметре ОписаниеДанных, -// возвращает пустую дату. +// * ДатаПодписи - Дата - дата, когда подпись была сделана. Имеет смысл для случаев, +// когда дату невозможно извлечь из данных подписи. Если не +// указана или пустая, тогда используется текущая дата сеанса. +// * ДатаПроверкиПодписи - Дата - дата проверки подписи после добавления из файла, если +// не указано свойство Данные в параметре ОписаниеДанных, +// возвращает пустую дату. // * ПодписьВерна - Булево - результат проверки подписи после добавления из файла, если -// не указано свойство Данные в параметре ОписаниеДанных, -// возвращает Ложь. +// не указано свойство Данные в параметре ОписаниеДанных, +// возвращает Ложь. // // Производные свойства: // * Сертификат - ДвоичныеДанные - содержит выгрузку сертификата, -// который использовался для подписания (содержится в подписи). +// который использовался для подписания (содержится в подписи). // * Отпечаток - Строка - отпечаток сертификата в формате строки Base64. // * КомуВыданСертификат - Строка - представление субъекта, полученное из двоичных данных сертификата. // @@ -322,9 +333,9 @@ Контекст.Вставить("ПроверитьМенеджерКриптографииНаКлиенте", Истина); Контекст.Вставить("ОписаниеДанных", ОписаниеДанных); - Если ( ПроверятьЭлектронныеПодписиНаСервере() - Или СоздаватьЭлектронныеПодписиНаСервере()) - И Не ЗначениеЗаполнено(ФормаДобавления.МенеджерКриптографииНаСервереОписаниеОшибки) Тогда + Если (ПроверятьЭлектронныеПодписиНаСервере() + Или СоздаватьЭлектронныеПодписиНаСервере()) + И Не ЗначениеЗаполнено(ФормаДобавления.МенеджерКриптографииНаСервереОписаниеОшибки) Тогда Контекст.ПроверитьМенеджерКриптографииНаКлиенте = Ложь; ЭлектроннаяПодписьСлужебныйКлиент.ДобавитьПодписьИзФайлаПослеСозданияМенеджераКриптографии( @@ -349,30 +360,30 @@ // // Параметры: // ОписаниеДанных - Структура - со свойствами: -// * ЗаголовокДанных - Строка - заголовок элемента данных, например Файл. -// * ПоказатьКомментарий - Булево - (необязательный) - разрешает ввод комментария в форме -// добавления подписей. Если не указан, значит Ложь. -// * Представление - Ссылка, Строка - (необязательный), если не указан, тогда -// представление вычисляется по значению свойства Объект. -// * Объект - Ссылка - ссылка на объект, из которого нужно получить список подписей. -// * -- // -- - Строка - адрес временного хранилища массива подписей с составом свойств, -// как возвращает процедура ДобавитьПодписьИзФайла. -// * Данные - ОписаниеОповещения - обработчик сохранения данных и получения полного имени -// файла с путем (после его сохранения), возвращаемое в свойстве ПолноеИмяФайла -// типа Строка для сохранения электронных подписей (см. выше общий подход). -// Если расширение для работы с файлами не подключено, то нужно вернуть -// имя файла без пути. -// Если свойство не будет вставлено или заполнено - это считается отказом -// от продолжения и будет вызвана ОбработкаРезультата с результатом Ложь. +// * ЗаголовокДанных - Строка - заголовок элемента данных, например Файл. +// * ПоказатьКомментарий - Булево - (необязательный) - разрешает ввод комментария в форме +// добавления подписей. Если не указан, значит Ложь. +// * Представление - Ссылка, Строка - (необязательный), если не указан, тогда +// представление вычисляется по значению свойства Объект. +// * Объект - Ссылка - ссылка на объект, из которого нужно получить список подписей. +// - Строка - адрес временного хранилища массива подписей с составом свойств, +// как возвращает процедура ДобавитьПодписьИзФайла. +// * Данные - ОписаниеОповещения - обработчик сохранения данных и получения полного имени +// файла с путем (после его сохранения), возвращаемое в свойстве ПолноеИмяФайла +// типа Строка для сохранения электронных подписей (см. выше общий подход). +// Если расширение для работы с файлами не подключено, то нужно вернуть +// имя файла без пути. +// Если свойство не будет вставлено или заполнено - это считается отказом +// от продолжения и будет вызвана ОбработкаРезультата с результатом Ложь. // -// Для пакетного запроса разрешений у пользователя веб-клиента на сохранение файла данных -// и подписей нужно вставить параметр ОбработкаЗапросаРазрешений типа ОписаниеОповещения. -// В процедуру будет передана структура с параметрами: +// Для пакетного запроса разрешений у пользователя веб-клиента на сохранение файла данных +// и подписей нужно вставить параметр ОбработкаЗапросаРазрешений типа ОписаниеОповещения. +// В процедуру будет передана структура с параметрами: // * Вызовы - Массив - с описанием вызовов для сохранения подписей. // * ОбработкаПродолжения - ОписаниеОповещения - оповещение, которое нужно выполнить -// после запроса разрешений, - параметры процедуры как у -// оповещения для метода НачатьЗапросРазрешенияПользователя. -// Если разрешение не получено, значит, все отменено. +// после запроса разрешений, - параметры процедуры как у +// оповещения для метода НачатьЗапросРазрешенияПользователя. +// Если разрешение не получено, значит, все отменено. // // ОбработкаРезультата - ОписаниеОповещения - необязательный параметр. // В результат передается параметр: @@ -393,7 +404,6 @@ // Булево - Истина, если проверка выполнена успешно. // Строка - описание ошибки проверки подписи. // Неопределено - не удалось получить менеджер криптографии (когда не указан). -// // ИсходныеДанные - ДвоичныеДанные - двоичные данные, которые были подписаны. // Математическая проверка выполняется на стороне клиента, даже когда // администратор настроил проверку электронных подписей на сервере, @@ -409,19 +419,22 @@ // Подпись - ДвоичныеДанные - двоичные данные электронной подписи. // - Строка - адрес временного хранилища, содержащего двоичные данные. // - Неопределено - если ИсходныеДанные - конверт SOAP. -// // МенеджерКриптографии - Неопределено - получить менеджер криптографии по умолчанию // (менеджер первой программы в списке, как настроил администратор). // - МенеджерКриптографии - использовать указанный менеджер криптографии. -// // НаДату - Дата - проверить сертификат на указанную дату, // если дату не удалось извлечь из подписи. // Если параметр не заполнен, тогда проверять на текущую дату сеанса, // если дату не удалось извлечь из подписи. +// ПоказатьОшибку - Булево - показать ошибку создания менеджера криптографии (когда не указан). // -Процедура ПроверитьПодпись(Оповещение, ИсходныеДанные, Подпись, МенеджерКриптографии = Неопределено, НаДату = Неопределено) Экспорт +Процедура ПроверитьПодпись(Оповещение, ИсходныеДанные, Подпись, + МенеджерКриптографии = Неопределено, + НаДату = Неопределено, + ПоказатьОшибку = Истина) Экспорт - ЭлектроннаяПодписьСлужебныйКлиент.ПроверитьПодпись(Оповещение, ИсходныеДанные, Подпись, МенеджерКриптографии, НаДату); + ЭлектроннаяПодписьСлужебныйКлиент.ПроверитьПодпись( + Оповещение, ИсходныеДанные, Подпись, МенеджерКриптографии, НаДату, ПоказатьОшибку); КонецПроцедуры @@ -436,73 +449,77 @@ // // Параметры: // ОписаниеДанных - Структура - со свойствами: -// * Операция - Строка - заголовок формы шифрования данных, например Шифрование файла. -// * ЗаголовокДанных - Строка - заголовок элемента или набора данных, например Файл. -// * СообщитьОЗавершении - Булево - (необязательный) - если Ложь, то не будет показано оповещение об успешном -// завершении операции для представления данных, указанного рядом с заголовком. -// * НаборСертификатов - Строка - (необязательный) адрес временного хранилища, содержащего массив, описанный ниже. -// - Массив - (необязательный) содержит значения -// типа СправочникСсылка.СертификатыКлючейЭлектроннойПодписиИШифрования или -// типа ДвоичныеДанные (выгрузка сертификата). -// - Ссылка - (необязательный) - ссылка на объект, для которого необходимо получить сертификаты. -// * ИзменятьНабор - Булево - если Истина и НаборСертификатов задан и содержит только ссылки -// на сертификаты, тогда будет возможность изменить состав сертификатов. -// * БезПодтверждения - Булево - (необязательный) - пропустить подтверждение пользователя, -// если указано свойство ОтборСертификатов. -// * ВыполнятьНаСервере - Неопределено, Булево - (необязательный) - когда не указан или Неопределено, -// тогда выполнение будет определено автоматически: если есть сервер, то сначала -// на сервере, потом (при неудаче) на клиенте, потом сообщение о двух ошибках. -// Когда Истина: если разрешено выполнение на сервере, тогда выполнение -// только на сервере, при неудаче одно сообщение об ошибке на сервере. -// Когда Ложь: выполнение только на клиенте, как будто нет сервера. -// * КонтекстОперации - Неопределено - (необязательный) - если указан, тогда в свойство будет -// установлено определенное значение произвольного типа, которое позволяет -// выполнить действие с теми же сертификатами шифрования повторно (у пользователя -// не запрашивается подтверждение действия). -// * ------ // ------ - Произвольный - (необязательный) - если определено, то действие будет выполнено -// с теми же сертификатами шифрования. -// Параметр БезПодтверждения считается равным Истина. -// Параметры Операция, ЗаголовокДанных, НаборСертификатов, ИзменятьНабор -// и ВыполнятьНаСервере игнорируются, их значения остаются такими же, как при первом вызове. +// * Операция - Строка - заголовок формы шифрования данных, например Шифрование файла. +// * ЗаголовокДанных - Строка - заголовок элемента или набора данных, например Файл. +// * СообщитьОЗавершении - Булево - (необязательный) - если Ложь, то не будет показано оповещение об успешном +// завершении операции для представления данных, указанного рядом с заголовком. +// * НаборСертификатов - Строка - (необязательный) адрес временного хранилища, содержащего массив, описанный ниже. +// - Массив - (необязательный) содержит значения +// типа СправочникСсылка.СертификатыКлючейЭлектроннойПодписиИШифрования или +// типа ДвоичныеДанные (выгрузка сертификата). +// - Ссылка - (необязательный) - ссылка на объект, для которого необходимо получить сертификаты. +// * ИзменятьНабор - Булево - если Истина и НаборСертификатов задан и содержит только ссылки +// на сертификаты, тогда будет возможность изменить состав сертификатов. +// * БезПодтверждения - Булево - (необязательный) - пропустить подтверждение пользователя, +// если указано свойство ОтборСертификатов. +// * ВыполнятьНаСервере - Неопределено, Булево - (необязательный) - когда не указан или Неопределено, +// тогда выполнение будет определено автоматически: если есть сервер, то сначала +// на сервере, потом (при неудаче) на клиенте, потом сообщение о двух ошибках. +// Когда Истина: если разрешено выполнение на сервере, тогда выполнение +// только на сервере, при неудаче одно сообщение об ошибке на сервере. +// Когда Ложь: выполнение только на клиенте, как будто нет сервера. +// * КонтекстОперации - Неопределено - (необязательный) - если указан, тогда в свойство будет +// установлено определенное значение произвольного типа, которое позволяет +// выполнить действие с теми же сертификатами шифрования повторно (у пользователя +// не запрашивается подтверждение действия). +// - Произвольный - (необязательный) - если определено, то действие будет выполнено +// с теми же сертификатами шифрования. +// Параметр БезПодтверждения считается равным Истина. +// Параметры Операция, ЗаголовокДанных, НаборСертификатов, ИзменятьНабор +// и ВыполнятьНаСервере игнорируются, их значения остаются такими же, как при первом вызове. +// * ПрекратитьВыполнение - Произвольный - если свойство существует и в процессе асинхронного выполнения возникает +// ошибка, выполнение прекращается без отображения формы операции или с закрытием этой формы, +// если она была открыта. // // Вариант 1: // * Данные - ДвоичныеДанные - данные для шифрования. -// * -- // -- - Строка - адрес временного хранилища, содержащего двоичные данные. -// * -- // -- - ОписаниеОповещения - обработчик получения данных, который возвращает -// их в свойстве Данные (см. выше общий подход). +// - Строка - адрес временного хранилища, содержащего двоичные данные. +// - ОписаниеОповещения - обработчик получения данных, который возвращает +// их в свойстве Данные (см. выше общий подход). // * РазмещениеРезультата - Неопределено - (необязательный) - описывает куда поместить зашифрованные данные. -// Если не указан или Неопределено, тогда через параметр ОбработкаРезультата. -// * -- // -- - ОписаниеОповещения - обработчик сохранения зашифрованных данных. -// Следует учесть общий подход (см. выше). -// В момент вызова в ОписаниеДанных уже вставлен параметр ЗашифрованныеДанные. -// В случае параметра НаборДанных, в ОписаниеДанных вставляется -// свойство ТекущийЭлементНабораДанных, содержащее параметр ЗашифрованныеДанные. +// Если не указан или Неопределено, тогда через параметр ОбработкаРезультата. +// - ОписаниеОповещения - обработчик сохранения зашифрованных данных. +// Следует учесть общий подход (см. выше). +// В момент вызова в ОписаниеДанных уже вставлен параметр ЗашифрованныеДанные. +// В случае параметра НаборДанных, в ОписаниеДанных вставляется +// свойство ТекущийЭлементНабораДанных, содержащее параметр ЗашифрованныеДанные. // * Объект - Ссылка - (необязательный) - ссылка на объект, который необходимо зашифровать. -// Если не указан, то сертификаты шифрования не требуется добавлять. +// Если не указан, то сертификаты шифрования не требуется добавлять. // * ВерсияОбъекта - Строка - (необязательный) - версия данных объекта для проверки и -// блокировки объекта перед добавлением сертификатов шифрования. +// блокировки объекта перед добавлением сертификатов шифрования. // * Представление - Ссылка, Строка, Структура - (необязательный), если не указан, тогда -// представление вычисляется по значению свойства Объект. -// Структура содержит свойства: -// * Значение - Ссылка, ОписаниеОповещения - для открытия. -// * Представление - Строка - представление значения. +// представление вычисляется по значению свойства Объект. +// Структура содержит свойства: +// * Значение - Ссылка, ОписаниеОповещения - для открытия. +// * Представление - Строка - представление значения. +// // Вариант 2: // * НаборДанных - Массив - структуры со свойствами, описанными в Варианте 1. // * ПредставлениеНабора - Строка - представления нескольких элементов набора данных, например, "Файлы (%1)". -// В это представление в параметр %1 заполняется количество элементов. -// По гиперссылке можно открыть список. -// Если в наборе данных 1 элемент, тогда используется значение -// в свойстве Представление свойства НаборДанных, если не указано, тогда -// представление вычисляется по значению свойства Объект элемента набора данных. +// В это представление в параметр %1 заполняется количество элементов. +// По гиперссылке можно открыть список. +// Если в наборе данных 1 элемент, тогда используется значение +// в свойстве Представление свойства НаборДанных, если не указано, тогда +// представление вычисляется по значению свойства Объект элемента набора данных. // * СписокПредставлений - СписокЗначений, Массив - (необязательный) - произвольный список элементов -// или массив со значениями, как у свойства Представление, которые -// сможет открыть пользователь. Если не указан, то заполняется из -// свойств Представление или Объект в свойстве НаборДанных. +// или массив со значениями, как у свойства Представление, которые +// сможет открыть пользователь. Если не указан, то заполняется из +// свойств Представление или Объект в свойстве НаборДанных. // // Форма - ФормаКлиентскогоПриложения - форма, из которой нужно получить уникальный идентификатор, который будет -// использоваться при помещении зашифрованных данных во временное хранилище. +// использоваться при помещении зашифрованных данных во временное хранилище. // - УникальныйИдентификатор - уникальный идентификатор, который будет -// использоваться при помещении зашифрованных данных во временное хранилище. +// использоваться при помещении зашифрованных данных во временное хранилище. // - Неопределено - использовать стандартную форму. // // ОбработкаРезультата - ОписаниеОповещения - необязательный параметр. @@ -510,6 +527,7 @@ // В результат передается входной параметр ОписаниеДанных, который в успешном случае дополняется свойствами: // * Успех - Булево - Истина, если все прошло успешно. Если Успех = Ложь, то частичное завершение // определяется по наличию свойства ЗашифрованныеДанные. Если есть, то шаг выполнен. +// * Отказ - Булево - Истина, если пользователь отменил операцию интерактивно. // * СертификатыШифрования - Строка - адрес временного хранилища, содержащего массив, описанный ниже. // - Массив - помещается перед началом шифрования и после этого не изменяется. // Содержит значения типа Структура со свойствами: @@ -568,111 +586,115 @@ // // Параметры: // ОписаниеДанных - Структура - со свойствами: -// * Операция - Строка - заголовок формы расшифровки данных, например, Расшифровка файла. -// * ЗаголовокДанных - Строка - заголовок элемента или набора данных, например Файл. -// * СообщитьОЗавершении - Булево - (необязательный) - если Ложь, то не будет показано оповещение о успешном -// завершении операции для представления данных, указанного рядом с заголовком. -// * ОтборСертификатов - Массив - (необязательный) - содержит ссылки на элементы справочника. -// СертификатыЭлектроннойПодписиИШифрования, которые могут быть выбраны -// пользователем. Отбор блокирует возможность выбора других сертификатов -// из личного хранилища. -// * БезПодтверждения - Булево - (необязательный) - пропустить подтверждение пользователя, если -// в свойстве ОтборСертификатов только один сертификат и: -// а) либо сертификат выпущен с усиленной защитой закрытого ключа; -// б) либо пользователь запомнил пароль к сертификату на время сеанса; -// в) либо пароль установлен ранее методом УстановитьПарольСертификата. -// Если в процессе расшифровки возникла ошибка, тогда будет открыта форма -// с возможностью указать пароль. -// * ЭтоАутентификация - Булево - (необязательный) - если Истина, то вместо кнопки Расшифровать -// будет показана кнопка ОК. А также скорректированы некоторые надписи. -// Кроме того, параметр СообщитьОЗавершении устанавливается в Ложь. -// * ПередВыполнением - ОписаниеОповещения - (необязательный) - описание обработчика дополнительной -// подготовки данных после выбора сертификата, которым будут расшифрованы данные. -// В этом обработчике можно заполнить параметр Данные, если необходимо. -// В момент вызова в ОписаниеДанных уже вставлен выбранный сертификат, -// как ВыбранныйСертификат (см. ниже). Следует учесть общий подход (см. выше). -// * ВыполнятьНаСервере - Неопределено, Булево - (необязательный) - когда не указан или Неопределено, -// тогда выполнение будет определено автоматически: если есть сервер, то сначала -// на сервере, потом (при неудаче) на клиенте, потом сообщение о двух ошибках. -// Когда Истина: если разрешено выполнение на сервере, тогда выполнение -// только на сервере, при неудаче одно сообщение об ошибке на сервере. -// Когда Ложь: выполнение только на клиенте, как будто нет сервера. +// * Операция - Строка - заголовок формы расшифровки данных, например, Расшифровка файла. +// * ЗаголовокДанных - Строка - заголовок элемента или набора данных, например Файл. +// * СообщитьОЗавершении - Булево - (необязательный) - если Ложь, то не будет показано оповещение о успешном +// завершении операции для представления данных, указанного рядом с заголовком. +// * ОтборСертификатов - Массив - (необязательный) - содержит ссылки на элементы справочника. +// СертификатыЭлектроннойПодписиИШифрования, которые могут быть выбраны +// пользователем. Отбор блокирует возможность выбора других сертификатов +// из личного хранилища. +// * БезПодтверждения - Булево - (необязательный) - пропустить подтверждение пользователя, если +// в свойстве ОтборСертификатов только один сертификат и: +// а) либо сертификат выпущен с усиленной защитой закрытого ключа; +// б) либо пользователь запомнил пароль к сертификату на время сеанса; +// в) либо пароль установлен ранее методом УстановитьПарольСертификата. +// Если в процессе расшифровки возникла ошибка, тогда будет открыта форма +// с возможностью указать пароль. +// * ЭтоАутентификация - Булево - (необязательный) - если Истина, то вместо кнопки Расшифровать +// будет показана кнопка ОК. А также скорректированы некоторые надписи. +// Кроме того, параметр СообщитьОЗавершении устанавливается в Ложь. +// * ПередВыполнением - ОписаниеОповещения - (необязательный) - описание обработчика дополнительной +// подготовки данных после выбора сертификата, которым будут расшифрованы данные. +// В этом обработчике можно заполнить параметр Данные, если необходимо. +// В момент вызова в ОписаниеДанных уже вставлен выбранный сертификат, +// как ВыбранныйСертификат (см. ниже). Следует учесть общий подход (см. выше). +// * ВыполнятьНаСервере - Неопределено, Булево - (необязательный) - когда не указан или Неопределено, +// тогда выполнение будет определено автоматически: если есть сервер, то сначала +// на сервере, потом (при неудаче) на клиенте, потом сообщение о двух ошибках. +// Когда Истина: если разрешено выполнение на сервере, тогда выполнение +// только на сервере, при неудаче одно сообщение об ошибке на сервере. +// Когда Ложь: выполнение только на клиенте, как будто нет сервера. // * ПараметрыДополнительныхДействий - Произвольный - (необязательный) - если указан, то передается -// на сервер в процедуру ПередНачаломОперации общего модуля. -// ЭлектроннаяПодписьПереопределяемый, как ВходныеПараметры. -// * КонтекстОперации - Неопределено - (необязательный) - если указан, тогда в свойство будет -// установлено определенное значение произвольного типа, которое позволяет -// выполнить действие с тем же сертификатом повторно (у пользователя -// не запрашивается ни пароль, ни подтверждение действия). -// * ------ // ------ - Произвольный - (необязательный) - если определено, то действие будет выполнено -// с тем же сертификатом без запроса пароля или подтверждения. -// Параметр БезПодтверждения считается равным Истина. -// Параметры Операция, ЗаголовокДанных, ОтборСертификатов, ЭтоАутентификация -// и ВыполнятьНаСервере игнорируются, их значения остаются такими же, как при первом вызове. -// Параметр ПараметрыДополнительныхДействий игнорируется. -// Процедура ПередНачаломОперации не вызывается. -// Если передать контекст, возвращенный процедурой Подписать, тогда -// пароль, введенный для сертификата, может быть использован, как если бы -// пароль был сохранен на время сеанса. В остальном контекст игнорируется. +// на сервер в процедуру ПередНачаломОперации общего модуля. +// ЭлектроннаяПодписьПереопределяемый, как ВходныеПараметры. +// * КонтекстОперации - Неопределено - (необязательный) - если указан, тогда в свойство будет +// установлено определенное значение произвольного типа, которое позволяет +// выполнить действие с тем же сертификатом повторно (у пользователя +// не запрашивается ни пароль, ни подтверждение действия). +// - Произвольный - (необязательный) - если определено, то действие будет выполнено +// с тем же сертификатом без запроса пароля или подтверждения. +// Параметр БезПодтверждения считается равным Истина. +// Параметры Операция, ЗаголовокДанных, ОтборСертификатов, ЭтоАутентификация +// и ВыполнятьНаСервере игнорируются, их значения остаются такими же, как при первом вызове. +// Параметр ПараметрыДополнительныхДействий игнорируется. +// Процедура ПередНачаломОперации не вызывается. +// Если передать контекст, возвращенный процедурой Подписать, тогда +// пароль, введенный для сертификата, может быть использован, как если бы +// пароль был сохранен на время сеанса. В остальном контекст игнорируется. +// * ПрекратитьВыполнение - Произвольный - если свойство существует и в процессе асинхронного выполнения возникает +// ошибка, выполнение прекращается без отображения формы операции или с закрытием этой формы, +// если она была открыта. // // Вариант 1: // * Данные - ДвоичныеДанные - данные для расшифровки. -// * -- // -- - Строка - адрес временного хранилища, содержащего двоичные данные. -// * -- // -- - ОписаниеОповещения - обработчик получения данных, который возвращает -// их в свойстве Данные (см. выше общий подход). В момент вызова -// в ОписаниеДанных уже вставлен параметр ВыбранныйСертификат (см. ниже). +// - Строка - адрес временного хранилища, содержащего двоичные данные. +// - ОписаниеОповещения - обработчик получения данных, который возвращает +// их в свойстве Данные (см. выше общий подход). В момент вызова +// в ОписаниеДанных уже вставлен параметр ВыбранныйСертификат (см. ниже). // * РазмещениеРезультата - Неопределено - (необязательный) - описывает, куда поместить расшифрованные данные. -// Если не указан или Неопределено, тогда через параметр ОбработкаРезультата. -// * -- // -- - ОписаниеОповещения - обработчик сохранения расшифрованных данных. -// Следует учесть общий подход (см. выше). -// В момент вызова в ОписаниеДанных уже вставлен параметр РасшифрованныеДанные. -// В случае параметра НаборДанных, в ОписаниеДанных вставляется -// свойство ТекущийЭлементНабораДанных, содержащее параметр РасшифрованныеДанные. +// Если не указан или Неопределено, тогда через параметр ОбработкаРезультата. +// - ОписаниеОповещения - обработчик сохранения расшифрованных данных. +// Следует учесть общий подход (см. выше). +// В момент вызова в ОписаниеДанных уже вставлен параметр РасшифрованныеДанные. +// В случае параметра НаборДанных, в ОписаниеДанных вставляется +// свойство ТекущийЭлементНабораДанных, содержащее параметр РасшифрованныеДанные. // * Объект - Ссылка - (необязательный) - ссылка на объект, который необходимо расшифровать, -// а также очистить записи из регистра сведений СертификатыШифрования -// после успешного завершения расшифровки. -// Если не указан, то сертификаты не требуется получать из объекта и очищать. -// * -- // -- - Строка - адрес временного хранилища, содержащего массив сертификатов -// шифрования в виде структур со свойствами: -// * Отпечаток - Строка - отпечаток сертификата в формате строки Base64. -// * Представление - Строка - сохраненное представление субъекта, -// полученное из двоичных данных сертификата. -// * Сертификат - ДвоичныеДанные - содержит выгрузку сертификата, -// который использовался для шифрования. +// а также очистить записи из регистра сведений СертификатыШифрования +// после успешного завершения расшифровки. +// Если не указан, то сертификаты не требуется получать из объекта и очищать. +// - Строка - адрес временного хранилища, содержащего массив сертификатов +// шифрования в виде структур со свойствами: +// * Отпечаток - Строка - отпечаток сертификата в формате строки Base64. +// * Представление - Строка - сохраненное представление субъекта, +// полученное из двоичных данных сертификата. +// * Сертификат - ДвоичныеДанные - содержит выгрузку сертификата, +// который использовался для шифрования. // * Представление - Ссылка, Строка, Структура - (необязательный), если не указан, тогда -// представление вычисляется по значению свойства Объект. -// Структура содержит свойства: -// * Значение - Ссылка, ОписаниеОповещения - для открытия. -// * Представление - Строка - представление значения. -// +// представление вычисляется по значению свойства Объект. +// Структура содержит свойства: +// * Значение - Ссылка, ОписаниеОповещения - для открытия. +// * Представление - Строка - представление значения. +// // Вариант 2: // * НаборДанных - Массив - структуры со свойствами, описанными в Варианте 1. // * ПредставлениеНабора - Строка - представления нескольких элементов набора данных, например, "Файлы (%1)". -// В это представление в параметр %1 заполняется количество элементов. -// По гиперссылке можно открыть список. -// Если в наборе данных 1 элемент, тогда используется значение -// в свойстве Представление свойства НаборДанных, если не указано, тогда -// представление вычисляется по значению свойства Объект элемента набора данных. +// В это представление в параметр %1 заполняется количество элементов. +// По гиперссылке можно открыть список. +// Если в наборе данных 1 элемент, тогда используется значение +// в свойстве Представление свойства НаборДанных, если не указано, тогда +// представление вычисляется по значению свойства Объект элемента набора данных. // * СписокПредставлений - СписокЗначений, Массив - (необязательный) - произвольный список элементов -// или массив со значениями, как у свойства Представление, которые -// сможет открыть пользователь. Если не указан, то заполняется из -// свойств Представление или Объект в свойстве НаборДанных. +// или массив со значениями, как у свойства Представление, которые +// сможет открыть пользователь. Если не указан, то заполняется из +// свойств Представление или Объект в свойстве НаборДанных. // * СертификатыШифрования - Массив - (необязательный) значения, как у параметра Объект. Используется -// для извлечения списков сертификатов шифрования для элементов, указанных -// в параметре СписокПредставлений (порядок должен соответствовать). -// Когда указан, параметр Объект не используется. +// для извлечения списков сертификатов шифрования для элементов, указанных +// в параметре СписокПредставлений (порядок должен соответствовать). +// Когда указан, параметр Объект не используется. // -// Форма - ФормаКлиентскогоПриложения - форма, из которой нужно получить уникальный идентификатор, который будет -// использоваться при помещении расшифрованных данных во временное хранилище. +// Форма - ФормаКлиентскогоПриложения - форма, из которой нужно получить уникальный идентификатор, который будет +// использоваться при помещении расшифрованных данных во временное хранилище. // - УникальныйИдентификатор - уникальный идентификатор, который будет использоваться -// при помещении расшифрованных данных во временное хранилище. -// - Неопределено - использовать стандартную форму. +// при помещении расшифрованных данных во временное хранилище. +// - Неопределено - использовать стандартную форму. // // ОбработкаРезультата - ОписаниеОповещения - необязательный параметр. // Требуется для нестандартной обработки результата, если не указан параметр Форма и/или РазмещениеРезультата. // В результат передается входной параметр ОписаниеДанных, который в успешном случае, дополняется свойствами: // * Успех - Булево - Истина, если все прошло успешно. Если Успех = Ложь, то частичное завершение // определяется по наличию свойства РасшифрованныеДанные. Если есть, то шаг выполнен. +// * Отказ - Булево - Истина, если пользователь отменил операцию интерактивно. // * ВыбранныйСертификат - Структура - содержит свойства сертификата: // * Ссылка - СправочникСсылка.СертификатыКлючейЭлектроннойПодписиИШифрования - ссылка на сертификат. // * Отпечаток - Строка - отпечаток сертификата в формате строки Base64. @@ -777,23 +799,29 @@ // * ВладелецФормы - ФормаКлиентскогоПриложения - другая форма. // * ЗаголовокФормы - Строка - если указан, тогда заменяет заголовок формы. // * ПроверкаПриВыборе - Булево - если Истина, тогда кнопка Проверить будет называться -// "Проверить и продолжить", а кнопка Закрыть будет называться "Отмена". +// "Проверить и продолжить", а кнопка Закрыть будет называться "Отмена". // * ОбработкаРезультата - ОписаниеОповещения - вызывается сразу после проверки, в процедуру -// передается Результат.ПроверкиПройдены (см. ниже) с начальным значением Ложь. -// В режиме ПроверкаПриВыборе, если не установить Истина, -// форма не будет закрыта после возврата из процедуры оповещения и -// будет показано предупреждение о невозможности продолжения. +// передается Результат.ПроверкиПройдены (см. ниже) с начальным значением Ложь. +// В режиме ПроверкаПриВыборе, если не установить Истина, +// форма не будет закрыта после возврата из процедуры оповещения и +// будет показано предупреждение о невозможности продолжения. // * БезПодтверждения - Булево - если установить Истина, тогда при наличии пароля -// проверка будет выполнена сразу без открытия формы. -// Если режим ПроверкаПриВыборе и установлен параметр ОбработкаРезультата, то -// форма не будет открыта, если параметр ПроверкиПройдены установлен Истина. +// проверка будет выполнена сразу без открытия формы. +// Если режим ПроверкаПриВыборе и установлен параметр ОбработкаРезультата, то +// форма не будет открыта, если параметр ПроверкиПройдены установлен Истина. // * ОбработкаЗавершения - ОписаниеОповещения - вызывается при закрытии формы, в качестве результата -// передается Неопределено или значение ПроверкиПройдены (см. ниже). +// передается Неопределено или значение ПроверкиПройдены (см. ниже). +// * КонтекстОперации - Произвольный - если передать контекст, возвращенный процедурами Подписать, +// Расшифровать и т.д., пароль, введенный для сертификата, может быть использован, +// как если бы он был сохранен на время сеанса. +// При повторном вызове параметр БезПодтверждения считается равным Истина. +// * НеПоказыватьРезультаты - Булево - если параметр принимает значение Истина и параметр КонтекстОперации +// содержит контекст предыдущей операции, результаты проверки не будут показаны +// пользователю. // * Результат - Неопределено - проверка ни разу не выполнялась. // - Структура - (возвращаемое значение) - вставляется перед обработкой результата, // содержит свойства: -// * ПроверкиПройдены - Булево - (возвращаемое значение) устанавливается в процедуре параметра -// ОбработкаРезультата. +// * ПроверкиПройдены - Булево - (возвращаемое значение) устанавливается в процедуре параметра ОбработкаРезультата. // * ПроверкиНаСервере - Неопределено - проверка не выполнялась на сервере: // - Структура - со свойствами, как в следующем параметре. // * ПроверкиНаКлиенте - Структура - со свойствами: @@ -808,6 +836,8 @@ // * Шифрование - Булево, Неопределено - так же, как указано выше. // * Расшифровка - Булево, Неопределено - так же, как указано выше. // * <Имя дополнительной проверки> - Булево, Неопределено - так же, как указано выше. +// * <Имя дополнительной проверки>Ошибка - Строка - заполняется текстом ошибки, если проверка имеет значение +// Ложь. // // * ПараметрыДополнительныхПроверок - Произвольный - параметры, которые передаются в процедуру // ПриСозданииФормыПроверкаСертификата общего модуля ЭлектроннаяПодписьПереопределяемый. @@ -1140,7 +1170,7 @@ // * OIDАлгоритмаХеширования - Строка - например, "1.2.643.2.2.9" + Символы.ПС + "1.2.643.7.1.1.2.2" + ... // * АлгоритмПодписи - Строка - например, "http://www.w3.org/2001/04/xmldsig-more#gostr34102001-gostr3411" // + Символы.ПС + -// "urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34102012-gostr34112012-256" + ... +// "urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34102012-gostr34112012-256" + ... // * АлгоритмХеширования - Строка - например, "http://www.w3.org/2001/04/xmldsig-more#gostr3411" // + Символы.ПС + "urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34112012-256" + ... // @@ -1150,6 +1180,222 @@ КонецФункции +// Формирует структуру свойств для подписания данных в формате CMS. +// +// Возвращаемое значение: +// Структура - со свойствами: +// * ТипПодписи - Строка - "CAdES-BES" - остальные варианты пока не используются. +// * Открепленная - Булево - Ложь (по умолчанию) - включать данные в контейнер подписи. +// Истина - не включать данные в контейнер подписи. +// +Функция ПараметрыCMS() Экспорт + + Возврат ЭлектроннаяПодписьСлужебныйКлиентСервер.ПараметрыCMS(); + +КонецФункции + +#Область ЗаписьСертификатаВСправочник + +// Инициализирует структуру параметров для добавления сертификата в справочник +// СертификатыКлючейЭлектроннойПодписиИШифрования. +// Для использования в ЭлектроннаяПодписьКлиент.ЗаписатьСертификатВСправочник +// +// Возвращаемое значение: +// Структура - со свойствами: +// * Наименование - Строка - представление сертификата в списке. +// Значение по умолчанию - "". +// * Пользователь - СправочникСсылка.Пользователь - пользователь, которому принадлежит сертификат. +// Значение используется при получении списка личных сертификатов пользователя +// в формах подписания и шифрования данных. +// Значение по умолчанию - Неопределено. +// * Организация - СправочникСсылка.Организация - организация, к которой относится сертификат. +// Значение по умолчанию - Неопределено. +// * Программа - СправочникСсылка.ПрограммыЭлектроннойПодписиИШифрования - программа, которая +// требуется для подписания и расшифровки. +// Значение по умолчанию - Неопределено. +// * УсиленнаяЗащитаЗакрытогоКлюча - Булево - сертификат был установлен на компьютере с усиленной +// защитой закрытого ключа, которая означает поддержку только пустого пароля на +// уровне 1С:Предприятия (пароль у пользователя не запрашивается - это делает +// операционная система, которая не принимает от 1С:Предприятия непустой пароль). +// Значение по умолчанию - Ложь. +// +Функция ПараметрыЗаписиСертификата() Экспорт + + ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("Наименование", ""); + ДополнительныеПараметры.Вставить("Пользователь", Неопределено); + ДополнительныеПараметры.Вставить("Организация", Неопределено); + ДополнительныеПараметры.Вставить("Программа", Неопределено); + ДополнительныеПараметры.Вставить("УсиленнаяЗащитаЗакрытогоКлюча", Ложь); + + Возврат ДополнительныеПараметры; + +КонецФункции + +// Осуществляет проверку сертификата и, в случае успеха, добавляет новый или обновляет существующий сертификат +// в справочнике СертификатыКлючейЭлектроннойПодписиИШифрования. Если проверка не пройдена, показывает +// информацию о возникших ошибках. +// Для добавления сертификата на сервере см. ЭлектроннаяПодпись.ЗаписатьСертификатВСправочник. +// +// Параметры: +// ОбработчикЗавершения - ОписаниеОповещения - содержит описание процедуры, которая будет вызвана после +// добавления сертификата: +// * Сертификат - Неопределено - при проверке или добавлении сертификата произошла ошибка. +// - СправочникСсылка.СертификатыКлючейЭлектроннойПодписиИШифрования - добавленный +// сертификат. +// * ДополнительныеПараметры - Произвольный - значение, которое было указано при создании объекта +// ОписаниеОповещения. +// Сертификат - ДвоичныеДанные, Строка - двоичные данные сертификата электронной подписи или +// адрес данных во временном хранилище. +// ПарольСертификата - Строка - пароль сертификата для проверки операций с закрытым ключом. +// ДляШифрования - Булево - определяет состав проверок, +// выполняемых перед добавлением сертификата. Если параметр принимает значение Истина, +// выполняется проверка шифрования и расшифровки, иначе - подписания и проверки подписи. +// ДополнительныеПараметры - Неопределено - без дополнительных параметров. +// - Структура - См. ЭлектроннаяПодписьКлиент.ПараметрыЗаписиСертификата. +// +Процедура ЗаписатьСертификатВСправочник(ОбработчикЗавершения, + Сертификат, + ПарольСертификата, + ДляШифрования = Ложь, + ДополнительныеПараметры = Неопределено) Экспорт + + Контекст = Новый Структура; + Контекст.Вставить("ПарольСертификата", ПарольСертификата); + Контекст.Вставить("ДляШифрования", ДляШифрования); + Контекст.Вставить("ДополнительныеПараметры", ?(ДополнительныеПараметры = Неопределено, + ПараметрыЗаписиСертификата(), ДополнительныеПараметры)); + Контекст.Вставить("ЗаголовокОшибки", ?(Контекст.ДляШифрования = Истина, + НСтр("ru = 'Не удалось пройти проверку шифрования по причине:'"), + НСтр("ru = 'Не удалось пройти проверку подписания по причине:'"))); + Контекст.Вставить("ЗаголовокФормы", ?(Контекст.ДляШифрования = Истина, + НСтр("ru = 'Проверка шифрования и расшифровки'"), + НСтр("ru = 'Проверка установки электронной подписи'"))); + + Контекст.Вставить("ДанныеСертификата", Сертификат); + Если ТипЗнч(Контекст.ДанныеСертификата) = Тип("Строка") + И ЭтоАдресВременногоХранилища(Контекст.ДанныеСертификата) Тогда + + Контекст.ДанныеСертификата = ПолучитьИзВременногоХранилища(Контекст.ДанныеСертификата); + КонецЕсли; + + Если ОбщиеНастройки().ПроверятьЭлектронныеПодписиНаСервере Тогда + + Контекст.Вставить("ОшибкаНаСервере", + Новый Структура("ОписаниеОшибки, Ошибки", "", Новый Массив)); + + СсылкаНаСертификат = ЭлектроннаяПодписьСлужебныйВызовСервера.ЗаписатьСертификатПослеПроверки(Контекст); + Если СсылкаНаСертификат <> Неопределено Тогда + ВыполнитьОбработкуОповещения(ОбработчикЗавершения, СсылкаНаСертификат); + Возврат; + КонецЕсли; + + КонецЕсли; + + Контекст.Вставить("ОбработчикЗавершения", ОбработчикЗавершения); + + ЭлектроннаяПодписьСлужебныйКлиент.СоздатьМенеджерКриптографии( + Новый ОписаниеОповещения("ДобавитьСертификатПослеСозданияМенеджераКриптографии", + ЭлектроннаяПодписьСлужебныйКлиент, Контекст), "", Неопределено); + +КонецПроцедуры + +#КонецОбласти + +#Область ИнтерактивноеДобавлениеСертификата + +// Инициализирует структуру параметров для интерактивного добавления сертификата. +// Если параметр СоздатьЗаявление - Истина и ИзЛичногоХранилища - Ложь, открывает новое заявление +// на выпуск сертификата. +// Если параметр СоздатьЗаявление - Ложь и ИзЛичногоХранилища - Истина, добавляет сертификат из +// личного хранилища. +// Если параметр СоздатьЗаявление - Истина и ИзЛичногоХранилища - Истина, открывает окно выбора +// способа добавления сертификата. +// Для использования в ЭлектроннаяПодписьКлиент.ДобавитьСертификат +// +// Возвращаемое значение: +// Структура - со свойствами: +// * ВЛичныйСписок - Булево - если параметр принимает значение Истина, то реквизит Пользователь +// будет заполнен текущим пользователем, иначе - реквизит не будет заполнен. +// Значение по умолчанию - Ложь. +// * Организация - СправочникСсылка.Организация - организация, к которой относится сертификат. +// Значение по умолчанию - Неопределено. +// * СоздатьЗаявление - Булево - если параметр принимает значение Истина, добавляет возможность +// создать новое заявление на выпуск сертификата. +// Значение по умолчанию - Истина. +// * ИзЛичногоХранилища - Булево - если параметр принимает значение Истина, добавляет возможность +// выбрать сертификат из установленных в личном хранилище. +// Значение по умолчанию - Истина. +// +Функция ПараметрыДобавленияСертификата() Экспорт + + ПараметрыДобавления = Новый Структура; + ПараметрыДобавления.Вставить("ВЛичныйСписок", Ложь); + ПараметрыДобавления.Вставить("Организация", Неопределено); + ПараметрыДобавления.Вставить("СоздатьЗаявление", Истина); + ПараметрыДобавления.Вставить("ИзЛичногоХранилища", Истина); + + Возврат ПараметрыДобавления; + +КонецФункции + +// Интерактивно добавляет сертификат из установленных на компьютере или создает заявление на выпуск сертификата. +// +// Параметры: +// ОбработчикЗавершения - ОписаниеОповещения - содержит описание процедуры, которая будет вызвана после +// добавления сертификата: +// * Сертификат - Неопределено - при проверке или добавлении сертификата произошла ошибка. +// - Структура с полями: +// ** Ссылка - СправочникСсылка.СертификатыКлючейЭлектроннойПодписиИШифрования - добавленный сертификат. +// ** Добавлен - Булево - признак того, что сертификат успешно добавлен. Если сертификат добавляется +// с помощью заявления на выпуск нового квалифицированного сертификата, признак принимает +// значение Ложь пока заявление не будет исполнено и сертификат не будет установлен на +// компьютере. +// * ДополнительныеПараметры - Произвольный - значение, которое было указано при создании объекта +// ОписаниеОповещения. +// ПараметрыДобавления - Неопределено - без дополнительных параметров. +// - Структура - См. ЭлектроннаяПодписьКлиент.ПараметрыДобавленияСертификата. +// +// Пример: +// 1) Добавление сертификата из установленных в личном хранилище: +// ПараметрыДобавления = ЭлектроннаяПодписьКлиент.ПараметрыДобавленияСертификата(); +// ПараметрыДобавления.СоздатьЗаявление = Ложь; +// ЭлектроннаяПодписьКлиент.ДобавитьСертификат(, ПараметрыДобавления); +// +// 2) Создание заявления на выпуск сертификата: +// ПараметрыДобавления = ЭлектроннаяПодписьКлиент.ПараметрыДобавленияСертификата(); +// ПараметрыДобавления.ИзЛичногоХранилища = Ложь; +// ЭлектроннаяПодписьКлиент.ДобавитьСертификат(, ПараметрыДобавления); +// +// 3) Интерактивный выбор способа добавления сертификата: +// ЭлектроннаяПодписьКлиент.ДобавитьСертификат(); +// +Процедура ДобавитьСертификат(ОбработчикЗавершения = Неопределено, ПараметрыДобавления = Неопределено) Экспорт + + Если ПараметрыДобавления = Неопределено Тогда + ПараметрыДобавления = ПараметрыДобавленияСертификата(); + КонецЕсли; + + ПараметрыИнтерактивногоВыбора = Новый Структура("ВЛичныйСписок, Организация"); + ЗаполнитьЗначенияСвойств(ПараметрыИнтерактивногоВыбора, ПараметрыДобавления); + + Если Не ПараметрыДобавления.СоздатьЗаявление + И Не ПараметрыДобавления.ИзЛичногоХранилища Тогда + + Возврат; + КонецЕсли; + + ПараметрыИнтерактивногоВыбора.Вставить("СкрытьЗаявление", + ПараметрыДобавления.ИзЛичногоХранилища И Не ПараметрыДобавления.СоздатьЗаявление); + ПараметрыИнтерактивногоВыбора.Вставить("СоздатьЗаявление", + ПараметрыДобавления.СоздатьЗаявление И Не ПараметрыДобавления.ИзЛичногоХранилища); + + ЭлектроннаяПодписьСлужебныйКлиент.ДобавитьСертификат(ПараметрыИнтерактивногоВыбора, ОбработчикЗавершения); + +КонецПроцедуры + +#КонецОбласти + #Область ДляВызоваИзДругихПодсистем // ЭлектронноеВзаимодействие @@ -1280,21 +1526,29 @@ // // Параметры: // Оповещение - ОписаниеОповещения - оповещение с результатом -// Массив - со значениями Структура со свойствами, как и ОписаниеПрограмм, а также дополнительными свойствами: -// * РезультатПроверки - Булево - если Истина, то установлена либо на клиенте, либо на сервере. +// Массив - со значениями Структура со свойствами, как и ЭлектроннаяПодпись.НовоеОписаниеПрограммы, +// а также дополнительными свойствами: +// * Установлена - Булево - если Истина, то установлена либо на клиенте, либо на сервере. // * РезультатПроверкиНаКлиенте - Строка - если пустая строка, то установлена, иначе описание ошибки. // * РезультатПроверкиНаСервере - Строка - если пустая строка, то установлена, иначе описание ошибки. // - Неопределено - проверка не выполнялась. // -// ОписаниеПрограмм - Массив - как в процедуре ЗаполнитьСписокПрограмм. +// ОписаниеПрограмм - Неопределено - проверять только известные программы, которые заполняются процедурой +// ЭлектроннаяПодпись.ЗаполнитьСписокПрограмм, если передать пустой массив. +// - Массив - со значениями, как возвращает функция ЭлектроннаяПодпись.НовоеОписаниеПрограммы. // Указанные описания будут добавлены к поставляемым описаниям или // заменят их в части совпадений имени и типа программы. // -// ПроверятьНаСервере - Булево - Истина, если включено подписание или шифрование на сервере и -// значение не указано явно. +// ПроверятьНаСервере - Неопределено - проверять на сервере, если подписание или шифрование на сервере включено. +// - Булево - если Истина проверять на сервере, иначе не проверять, +// независимо от того включено подписание или шифрование на сервере или нет. // Процедура НайтиУстановленныеПрограммы(Оповещение, ОписаниеПрограмм = Неопределено, ПроверятьНаСервере = Неопределено) Экспорт + Если ОписаниеПрограмм = Неопределено Тогда + ОписаниеПрограмм = Новый Массив; + КонецЕсли; + МассивТиповПроверятьНаСервере = Новый Массив; МассивТиповПроверятьНаСервере.Добавить(Тип("Булево")); МассивТиповПроверятьНаСервере.Добавить(Тип("Неопределено")); diff --git a/SSL/src/CommonModules/ЭлектроннаяПодписьКлиентПереопределяемый/Module.bsl b/SSL/src/CommonModules/ЭлектроннаяПодписьКлиентПереопределяемый/Module.bsl index 60227717a..23770ca23 100644 --- a/SSL/src/CommonModules/ЭлектроннаяПодписьКлиентПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ЭлектроннаяПодписьКлиентПереопределяемый/Module.bsl @@ -53,10 +53,12 @@ // - Неопределено - если свойство ВводитьПароль установлено в Ложь в процедуре // ПриСозданииФормыПроверкаСертификата общего модуля ЭлектроннаяПодписьПереопределяемый. // * РезультатыПроверок - Структура - со свойствами: -// * Ключ - Строка - имя стандартной или дополнительной проверки. +// * Ключ - Строка - имя стандартной или дополнительной проверки или имя ошибки. Ключ свойства, содержащего +// ошибку, содержит имя проверки с окончанием Ошибка. // * Значение - Неопределено - проверка не выполнялась (ОписаниеОшибки осталось Неопределено). // - Булево - результат выполнения дополнительной проверки. -// +// - Строка - когда ключ свойства содержит окончание Ошибка и результат выполненной проверки Ложь, +// содержит описание возникшей ошибки. Процедура ПриДополнительнойПроверкеСертификата(Параметры) Экспорт diff --git a/SSL/src/CommonModules/ЭлектроннаяПодписьЛокализацияКлиентСервер/Module.bsl b/SSL/src/CommonModules/ЭлектроннаяПодписьЛокализацияКлиентСервер/Module.bsl index e90327467..7e8eb9e20 100644 --- a/SSL/src/CommonModules/ЭлектроннаяПодписьЛокализацияКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ЭлектроннаяПодписьЛокализацияКлиентСервер/Module.bsl @@ -19,7 +19,7 @@ Функция ПредставлениеСубъекта(Сертификат, Отчество = Истина) Экспорт - Субъект = ЭлектроннаяПодписьКлиентСервер.СвойстваСубъектаСертификата(Сертификат); + Субъект = ЭлектроннаяПодписьСлужебныйКлиентСервер.СвойстваСубъектаСертификата(Сертификат, ЭлектроннаяПодписьЛокализацияКлиентСервер); Представление = ""; @@ -168,21 +168,6 @@ КонецФункции -Функция ПредставленияСвойствСубъектаСертификата() Экспорт - - ПредставленияСвойств = Новый Соответствие; - ПредставленияСвойств["Должность"] = НСтр("ru = 'Должность'"); - ПредставленияСвойств["ОГРН"] = НСтр("ru = 'ОГРН'"); - ПредставленияСвойств["ОГРНИП"] = НСтр("ru = 'ОГРНИП'"); - ПредставленияСвойств["СНИЛС"] = НСтр("ru = 'СНИЛС'"); - ПредставленияСвойств["ИНН"] = НСтр("ru = 'ИНН'"); - ПредставленияСвойств["Фамилия"] = НСтр("ru = 'Фамилия'"); - ПредставленияСвойств["Имя"] = НСтр("ru = 'Имя'"); - ПредставленияСвойств["Отчество"] = НСтр("ru = 'Отчество'"); - Возврат ПредставленияСвойств; - -КонецФункции - Функция РасширенныеСвойстваИздателяСертификата(Издатель) Экспорт Свойства = Новый Структура; @@ -207,15 +192,6 @@ КонецФункции -Функция ПредставленияСвойствИздателяСертификата() Экспорт - - ПредставленияСвойств = Новый Соответствие; - ПредставленияСвойств["ОГРН"] = НСтр("ru = 'ОГРН'"); - ПредставленияСвойств["ИНН"] = НСтр("ru = 'ИНН'"); - Возврат ПредставленияСвойств; - -КонецФункции - Функция ПодготовитьСтроку(СтрокаИзСертификата) Возврат СокрЛП(ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыXML(СтрокаИзСертификата)); КонецФункции diff --git a/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебный/Module.bsl b/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебный/Module.bsl index cf3c2395c..39bbdff22 100644 --- a/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебный/Module.bsl @@ -161,6 +161,54 @@ КонецФункции +// Только для внутреннего использования. +Функция СертификатыПоПорядкуДоКорневого(ДанныеСертификатов) Экспорт + + ПоПорядку = Новый Массив; + Сертификаты = Новый Соответствие; + Для Каждого ДанныеСертификата Из ДанныеСертификатов Цикл + ПоПорядку.Добавить(ДанныеСертификата); + Сертификаты.Вставить(Новый СертификатКриптографии(ДанныеСертификата), ДанныеСертификата); + КонецЦикла; + + СертификатыПоСубъектам = Новый Соответствие; + Для Каждого ОписаниеСертификата Из Сертификаты Цикл + СертификатыПоСубъектам.Вставить(ОписаниеСертификата.Ключ.Субъект.CN, ОписаниеСертификата.Ключ); + КонецЦикла; + + Для Каждого ОписаниеСертификата Из Сертификаты Цикл + Сертификат = ОписаниеСертификата.Ключ; + ДанныеСертификата = ОписаниеСертификата.Значение; + СертификатИздателя = СертификатыПоСубъектам.Получить(Сертификат.Издатель.CN); + Если СертификатИздателя = Неопределено Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'В сертификатах подписи не удалось найти сертификат издателя + |%1 + |сертификата %2'"), + Сертификат.Издатель.CN, + Сертификат.Субъект.CN); + КонецЕсли; + Позиция = ПоПорядку.Найти(ДанныеСертификата); + Если Сертификат.Издатель.CN = Сертификат.Субъект.CN Тогда + Если Позиция <> ПоПорядку.Количество() - 1 Тогда + ПоПорядку.Удалить(Позиция); + ПоПорядку.Добавить(ДанныеСертификата); + КонецЕсли; + Продолжить; + КонецЕсли; + ПозицияИздателя = ПоПорядку.Найти(Сертификаты.Получить(СертификатИздателя)); + Если Позиция + 1 = ПозицияИздателя Тогда + Продолжить; + КонецЕсли; + ПоПорядку.Удалить(Позиция); + ПозицияИздателя = ПоПорядку.Найти(Сертификаты.Получить(СертификатИздателя)); + ПоПорядку.Вставить(ПозицияИздателя, ДанныеСертификата); + КонецЦикла; + + Возврат ПоПорядку; + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Обработчики событий подсистем конфигурации. @@ -652,35 +700,42 @@ МенеджерКриптографии = МенеджерКриптографии("ПолучениеСертификатов", Ложь, Ошибка); Если МенеджерКриптографии <> Неопределено Тогда + ПараметрыДобавленияСвойств = Новый Структура("МодульЛокализации", МодульЛокализации()); + МассивСертификатов = МенеджерКриптографии.ПолучитьХранилищеСертификатов( ТипХранилищаСертификатовКриптографии.ПерсональныеСертификаты).ПолучитьВсе(); ЭлектроннаяПодписьСлужебныйКлиентСервер.ДобавитьСвойстваСертификатов(ТаблицаСвойствСертификатов, - МассивСертификатов, БезОтбора, ДобавкаВремени(), ТекущаяДатаСеанса()); + МассивСертификатов, БезОтбора, ДобавкаВремени(), ТекущаяДатаСеанса(), ПараметрыДобавленияСвойств); Если Не Личные Тогда МассивСертификатов = МенеджерКриптографии.ПолучитьХранилищеСертификатов( ТипХранилищаСертификатовКриптографии.СертификатыПолучателей).ПолучитьВсе(); ЭлектроннаяПодписьСлужебныйКлиентСервер.ДобавитьСвойстваСертификатов(ТаблицаСвойствСертификатов, - МассивСертификатов, БезОтбора, ДобавкаВремени(), ТекущаяДатаСеанса()); + МассивСертификатов, БезОтбора, ДобавкаВремени(), ТекущаяДатаСеанса(), ПараметрыДобавленияСвойств); КонецЕсли; + КонецЕсли; + КонецЕсли; Если ИспользоватьЭлектроннуюПодписьВМоделиСервиса() Тогда + МодульХранилищеСертификатов = ОбщегоНазначения.ОбщийМодуль("ХранилищеСертификатов"); МассивСертификатов = МодульХранилищеСертификатов.Получить("ПерсональныеСертификаты"); + ПараметрыДобавленияСвойств = Новый Структура("ВОблачномСервисе, МодульЛокализации", Истина, МодульЛокализации()); ЭлектроннаяПодписьСлужебныйКлиентСервер.ДобавитьСвойстваСертификатов(ТаблицаСвойствСертификатов, - МассивСертификатов, БезОтбора, ДобавкаВремени(), ТекущаяДатаСеанса(), , Истина); + МассивСертификатов, БезОтбора, ДобавкаВремени(), ТекущаяДатаСеанса(), ПараметрыДобавленияСвойств); Если Не Личные Тогда МассивСертификатов = МодульХранилищеСертификатов.Получить("СертификатыПолучателей"); ЭлектроннаяПодписьСлужебныйКлиентСервер.ДобавитьСвойстваСертификатов(ТаблицаСвойствСертификатов, - МассивСертификатов, БезОтбора, ДобавкаВремени(), ТекущаяДатаСеанса(), , Истина); + МассивСертификатов, БезОтбора, ДобавкаВремени(), ТекущаяДатаСеанса(), ПараметрыДобавленияСвойств); КонецЕсли; + КонецЕсли; ОбработатьДобавленныеСертификаты(ТаблицаСвойствСертификатов, Не БезОтбора И КромеУжеДобавленных, ОтборПоОрганизации); @@ -731,6 +786,93 @@ КонецПроцедуры +// Только для внутреннего использования. +Функция ЗаписатьСертификатПослеПроверки(Контекст) Экспорт + + СертификатКриптографии = Новый СертификатКриптографии(Контекст.ДанныеСертификата); + + Сертификат = Неопределено; + ОписаниеОшибки = ""; + ОписанияПрограмм = ЭлектроннаяПодпись.ОбщиеНастройки().ОписанияПрограмм; + Для каждого ОписаниеПрограммы Из ОписанияПрограмм Цикл + + ОшибкаМенеджера = Новый Структура; + МенеджерКриптографии = МенеджерКриптографии("", + Ложь, ОшибкаМенеджера, ОписаниеПрограммы.Ссылка); + + Если МенеджерКриптографии = Неопределено Тогда + + Если ОшибкаМенеджера.Ошибки.Количество() > 0 Тогда + Контекст.ОшибкаНаСервере.Ошибки.Добавить(ОшибкаМенеджера.Ошибки[0]); + КонецЕсли; + + Продолжить; + + КонецЕсли; + + МенеджерКриптографии.ПарольДоступаКЗакрытомуКлючу = Контекст.ПарольСертификата; + + Если Контекст.ДляШифрования = Истина Тогда + Успех = ПроверитьШифрованиеИРасшифровку(МенеджерКриптографии, Контекст.ДанныеСертификата, + СертификатКриптографии, ОписаниеПрограммы, Контекст.ОшибкаНаСервере, Контекст.ОшибкаНаСервере.ОписаниеОшибки); + Иначе + Успех = ПроверитьПодписание(МенеджерКриптографии, Контекст.ДанныеСертификата, + СертификатКриптографии, ОписаниеПрограммы, Контекст.ОшибкаНаСервере, Контекст.ОшибкаНаСервере.ОписаниеОшибки); + КонецЕсли; + + Если Не Успех Тогда + Продолжить; + КонецЕсли; + + Контекст.ДополнительныеПараметры.Программа = ОписаниеПрограммы.Ссылка; + + Попытка + Возврат ЭлектроннаяПодпись.ЗаписатьСертификатВСправочник( + Контекст.ДанныеСертификата, Контекст.ДополнительныеПараметры); + Исключение + + Контекст.ЗаголовокФормы = НСтр("ru = 'Ошибка добавления сертификата'"); + Контекст.ЗаголовокОшибки = НСтр("ru = 'Не удалось добавить сертификат по причине:'"); + Контекст.ОшибкаНаСервере.Ошибки = Новый Массив; + Контекст.ОшибкаНаСервере.ОписаниеОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + + Возврат Неопределено; + + КонецПопытки; + + КонецЦикла; + + Возврат Неопределено; + +КонецФункции + +// Только для внутреннего использования. +Функция ПрограммаОблачногоСервиса() Экспорт + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | Программы.Ссылка КАК Ссылка + |ИЗ + | Справочник.ПрограммыЭлектроннойПодписиИШифрования КАК Программы + |ГДЕ + | Программы.ЭтоПрограммаОблачногоСервиса + | И НЕ Программы.ПометкаУдаления + | + |УПОРЯДОЧИТЬ ПО + | Программы.Наименование"; + + Выборка = Запрос.Выполнить().Выбрать(); + Если Выборка.Следующий() Тогда + ПрограммаОблачногоСервиса = Выборка.Ссылка; + Иначе + ПрограммаОблачногоСервиса = Неопределено; + КонецЕсли; + + Возврат ПрограммаОблачногоСервиса; + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Общие процедуры и функции управляемых форм. @@ -1251,13 +1393,64 @@ "Справочник.СертификатыКлючейЭлектроннойПодписиИШифрования.Макет.КомпонентаXMLDSig"); Если ОбъектКомпоненты = Неопределено Тогда - ВызватьИсключение НСтр("ru='Не удалось подключить внешнюю компоненту XMLDSig.'"); + ВызватьИсключение НСтр("ru = 'Не удалось подключить внешнюю компоненту XMLDSig.'"); КонецЕсли; Возврат ОбъектКомпоненты; КонецФункции +// Подписывает сообщение, подставляя в шаблон SOAP данные подписи. +// +// Параметры: +// Данные - Строка - произвольная строка для подписания, +// - ДвоичныеДанные - двоичные данные для подписания. +// +// ПараметрыCMS - Структура - возвращается функцией ЭлектроннаяПодпись.ПараметрыCMS. +// СертификатКриптографии - СертификатКриптографии - используемый сертификат криптографии. +// МенеджерКриптографии - МенеджерКриптографии - используемый менеджер криптографии. +// +// Возвращаемое значение: +// Строка - строка в формате Base64. +// +Функция ПодписатьCMS(Знач Данные, ПараметрыCMS, СертификатКриптографии, МенеджерКриптографии) Экспорт + + Пароль = МенеджерКриптографии.ПарольДоступаКЗакрытомуКлючу; + + ОбъектКомпоненты = ОбъектВнешнейКомпонентыXMLDSig(); + + СвойстваКриптопровайдера = СвойстваКриптопровайдера(МенеджерКриптографии); + ОбъектКомпоненты.ПутьККриптопровайдеру = СвойстваКриптопровайдера.Путь; + + SignatureValue = CMSSign( + ОбъектКомпоненты, + Данные, + ПараметрыCMS, + СертификатКриптографии, + Пароль); + + Возврат SignatureValue; + +КонецФункции + +Функция ПроверитьПодписьCMS(Подпись, Данные, ПараметрыCMS, МенеджерКриптографии) Экспорт + + ОбъектКомпоненты = ОбъектВнешнейКомпонентыXMLDSig(); + + СвойстваКриптопровайдера = СвойстваКриптопровайдера(МенеджерКриптографии); + ОбъектКомпоненты.ПутьККриптопровайдеру = СвойстваКриптопровайдера.Путь; + + SignatureValue = CMSVerifySign( + ОбъектКомпоненты, + Подпись, + Данные, + ПараметрыCMS, + СвойстваКриптопровайдера.Тип); + + Возврат SignatureValue; + +КонецФункции + Функция СвойстваКриптопровайдера(МенеджерКриптографии) ИнформацияМодуляКриптографии = МенеджерКриптографии.ПолучитьИнформациюМодуляКриптографии(); @@ -1375,11 +1568,58 @@ КонецФункции +Функция CMSSign(ОбъектКомпоненты, ДанныеДляПодписания, ПараметрыCMS, СертификатКриптографии, ПарольДоступаКЗакрытомуКлючу) + + ПараметрыКомпоненты = ЭлектроннаяПодписьСлужебныйКлиентСервер.ПараметрыКомпонентыCMSSign(ПараметрыCMS, ДанныеДляПодписания); + + Попытка + SignatureValue = ОбъектКомпоненты.CMSSign( + ПараметрыКомпоненты.Данные, + СертификатКриптографииBase64(СертификатКриптографии.Выгрузить()), + ПарольДоступаКЗакрытомуКлючу, + ПараметрыКомпоненты.ТипПодписи, + ПараметрыКомпоненты.Открепленная, + ПараметрыКомпоненты.ВключениеСертификатовВПодпись, + ПараметрыКомпоненты.ТипВходныхДанных); + Исключение + ВызватьИсключение НСтр("ru = 'Ошибка вызова метода CMSSign компоненты XMLDSig.'") + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + КонецПопытки; + + Если Не ЗначениеЗаполнено(SignatureValue) Тогда + ВызватьИсключение НСтр("ru = 'Ошибка вызова метода CMSSign компоненты XMLDSig.'") + Символы.ПС + ОбъектКомпоненты.GetLastError(); + КонецЕсли; + + Возврат Base64Значение(SignatureValue); + +КонецФункции + +Функция CMSVerifySign(ОбъектКомпоненты, Подпись, Данные, ПараметрыCMS, ТипКриптопровайдера) + + ПараметрыКомпоненты = ЭлектроннаяПодписьСлужебныйКлиентСервер.ПараметрыКомпонентыCMSSign(ПараметрыCMS, Данные); + + Попытка + ПодписьВерна = ОбъектКомпоненты.CMSVerifySign( + Base64Строка(Подпись), + 0, + "", + ТипКриптопровайдера); + Исключение + ВызватьИсключение НСтр("ru = 'Ошибка вызова метода CMSVerifySign компоненты XMLDSig.'") + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + КонецПопытки; + + Если ПодписьВерна = Неопределено Тогда + ВызватьИсключение НСтр("ru = 'Ошибка вызова метода CMSVerifySign компоненты XMLDSig.'") + Символы.ПС + ОбъектКомпоненты.GetLastError(); + КонецЕсли; + + Возврат ПодписьВерна; + +КонецФункции + Процедура ПроверитьВыбратьАлгоритмПодписи(ОбъектКомпоненты, СертификатКриптографииBase64, ДанныеАлгоритмаПодписания) OIDАлгоритмаПодписи = GetSignOIDFromCert(ОбъектКомпоненты, СертификатКриптографииBase64); - OIDАлгоритмовПодписи = СтрРазделить(ДанныеАлгоритмаПодписания.OIDАлгоритмаПодписи, Символы.ПС); + OIDАлгоритмовПодписи = СтрРазделить(ДанныеАлгоритмаПодписания.OIDАлгоритмаПодписи, Символы.ПС); OIDАлгоритмовХеширования = СтрРазделить(ДанныеАлгоритмаПодписания.OIDАлгоритмаХеширования, Символы.ПС); АлгоритмыПодписи = СтрРазделить(ДанныеАлгоритмаПодписания.АлгоритмПодписи, Символы.ПС); АлгоритмыХеширования = СтрРазделить(ДанныеАлгоритмаПодписания.АлгоритмХеширования, Символы.ПС); @@ -1414,6 +1654,14 @@ //////////////////////////////////////////////////////////////////////////////// // Вспомогательные процедуры и функции. +Функция МодульЛокализации() Экспорт + + Возврат ?(ЭлектроннаяПодписьСлужебныйПовтИсп.ОбщиеНастройки().ЗаявлениеНаВыпускСертификатаДоступно, + ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодписьЛокализацияКлиентСервер"), + Неопределено); + +КонецФункции + // Для процедуры ОбновитьСписокСертификатов. Процедура ОбработатьДобавленныеСертификаты(ТаблицаСвойствСертификатов, КромеУжеДобавленных, ОтборПоОрганизации = Неопределено) @@ -1923,4 +2171,102 @@ КонецФункции +// Для процедуры ЗаписатьСертификатПослеПроверки. + +Функция ПроверитьШифрованиеИРасшифровку(МенеджерКриптографии, ДвоичныеДанныеСертификата, + СертификатКриптографии, ОписаниеПрограммы, ОшибкаНаСервере, ОписаниеОшибки) + + ПредставлениеОшибки = ""; + Попытка + ЗашифрованныеДанные = МенеджерКриптографии.Зашифровать(ДвоичныеДанныеСертификата, СертификатКриптографии); + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + ПредставлениеОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке); + КонецПопытки; + + Если ЗначениеЗаполнено(ПредставлениеОшибки) Тогда + + ТекущаяОшибка = Новый Структура; + ТекущаяОшибка.Вставить("Описание", ПредставлениеОшибки); + ТекущаяОшибка.Вставить("Инструкция", Истина); + ТекущаяОшибка.Вставить("НастройкаПрограмм", Истина); + + ОшибкаНаСервере.Ошибки.Добавить(ТекущаяОшибка); + + ОписаниеОшибки = ОписаниеОшибки + Символы.ПС + Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось пройти проверку шифрования с помощью программы %1 по причине: + |%2'"), + ОписаниеПрограммы.Наименование, + ПредставлениеОшибки); + + Возврат Ложь; + + КонецЕсли; + + ПредставлениеОшибки = ""; + Попытка + РасшифрованныеДанные = МенеджерКриптографии.Расшифровать(ЗашифрованныеДанные); + ЭлектроннаяПодписьСлужебныйКлиентСервер.ПустыеРасшифрованныеДанные(РасшифрованныеДанные, ПредставлениеОшибки); + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + ПредставлениеОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке); + КонецПопытки; + + Если ЗначениеЗаполнено(ПредставлениеОшибки) Тогда + + ТекущаяОшибка = Новый Структура; + ТекущаяОшибка.Вставить("Описание", ПредставлениеОшибки); + ТекущаяОшибка.Вставить("Инструкция", Истина); + ТекущаяОшибка.Вставить("НастройкаПрограмм", Истина); + + ОшибкаНаСервере.Ошибки.Добавить(ТекущаяОшибка); + + ОписаниеОшибки = ОписаниеОшибки + Символы.ПС + Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось пройти проверку расшифровки с помощью программы %1 по причине: + |%2'"), ОписаниеПрограммы.Наименование, ПредставлениеОшибки); + + Возврат Ложь; + + КонецЕсли; + + Возврат Истина; + +КонецФункции + +Функция ПроверитьПодписание(МенеджерКриптографии, ДвоичныеДанныеСертификата, + СертификатКриптографии, ОписаниеПрограммы, ОшибкаНаСервере, ОписаниеОшибки) + + ИнформацияОбОшибке = Неопределено; + ПредставлениеОшибки = ""; + Попытка + ДанныеПодписи = МенеджерКриптографии.Подписать(ДвоичныеДанныеСертификата, СертификатКриптографии); + ЭлектроннаяПодписьСлужебныйКлиентСервер.ПустыеДанныеПодписи(ДанныеПодписи, ПредставлениеОшибки); + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + ПредставлениеОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке); + КонецПопытки; + + Если ЗначениеЗаполнено(ПредставлениеОшибки) Тогда + + ТекущаяОшибка = Новый Структура; + ТекущаяОшибка.Вставить("Описание", ПредставлениеОшибки); + Если ИнформацияОбОшибке = Неопределено Тогда + ТекущаяОшибка.Вставить("НастройкаПрограмм", Истина); + ТекущаяОшибка.Вставить("Инструкция", Истина); + КонецЕсли; + + ОшибкаНаСервере.Ошибки.Добавить(ТекущаяОшибка); + + ОписаниеОшибки = ОписаниеОшибки + Символы.ПС + Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось пройти проверку подписания с помощью программы %1 по причине: + |%2'"), ОписаниеПрограммы.Наименование, ПредставлениеОшибки); + + Возврат Ложь; + + КонецЕсли; + + Возврат Истина; + +КонецФункции + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйВызовСервера/Module.bsl b/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйВызовСервера/Module.bsl index be600ff8e..d549e5dea 100644 --- a/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйВызовСервера/Module.bsl @@ -36,17 +36,24 @@ МассивСертификатов = МенеджерКриптографии.ПолучитьХранилищеСертификатов( ТипХранилищаСертификатовКриптографии.ПерсональныеСертификаты).ПолучитьВсе(); - ЭлектроннаяПодписьСлужебныйКлиентСервер.ДобавитьСвойстваСертификатов(ТаблицаСвойствСертификатов, - МассивСертификатов, Истина, ЭлектроннаяПодписьСлужебный.ДобавкаВремени(), ТекущаяДатаСеанса()); + ПараметрыДобавленияСвойств = Новый Структура("МодульЛокализации",ЭлектроннаяПодписьСлужебный.МодульЛокализации()); + ЭлектроннаяПодписьСлужебныйКлиентСервер.ДобавитьСвойстваСертификатов(ТаблицаСвойствСертификатов, МассивСертификатов, Истина, + ЭлектроннаяПодписьСлужебный.ДобавкаВремени(), ТекущаяДатаСеанса(), ПараметрыДобавленияСвойств); + КонецЕсли; КонецЕсли; Если ЭлектроннаяПодписьСлужебный.ИспользоватьЭлектроннуюПодписьВМоделиСервиса() Тогда + МодульХранилищеСертификатов = ОбщегоНазначения.ОбщийМодуль("ХранилищеСертификатов"); МассивСертификатов = МодульХранилищеСертификатов.Получить("ПерсональныеСертификаты"); - ЭлектроннаяПодписьСлужебныйКлиентСервер.ДобавитьСвойстваСертификатов(ТаблицаСвойствСертификатов, - МассивСертификатов, Истина, ЭлектроннаяПодписьСлужебный.ДобавкаВремени(), ТекущаяДатаСеанса(), , Истина); + ПараметрыДобавленияСвойств = Новый Структура("ВОблачномСервисе, МодульЛокализации", + Истина, ЭлектроннаяПодписьСлужебный.МодульЛокализации()); + + ЭлектроннаяПодписьСлужебныйКлиентСервер.ДобавитьСвойстваСертификатов(ТаблицаСвойствСертификатов, МассивСертификатов, Истина, + ЭлектроннаяПодписьСлужебный.ДобавкаВремени(), ТекущаяДатаСеанса(), ПараметрыДобавленияСвойств); + КонецЕсли; Возврат ОбработатьЛичныеСертификаты(ТаблицаСвойствСертификатов, Отбор); @@ -153,6 +160,13 @@ КонецФункции +// Только для внутреннего использования. +Функция СертификатыПоПорядкуДоКорневого(Сертификаты) Экспорт + + Возврат ЭлектроннаяПодписьСлужебный.СертификатыПоПорядкуДоКорневого(Сертификаты); + +КонецФункции + // Только для внутреннего использования. Функция ПредставлениеСубъекта(АдресСертификата) Экспорт @@ -201,6 +215,9 @@ ЭтоXMLDSig = (ТипЗнч(Данные) = Тип("Структура") И Данные.Свойство("ПараметрыXMLDSig")); + ЭтоCMS = (ТипЗнч(Данные) = Тип("Структура") + И Данные.Свойство("ПараметрыCMS")); + Если ЭтоXMLDSig Тогда Если Параметры.Операция <> "Подписание" Тогда @@ -221,6 +238,26 @@ ИнформацияОбОшибке = ИнформацияОбОшибке(); КонецПопытки; + ИначеЕсли ЭтоCMS Тогда + + Если Параметры.Операция <> "Подписание" Тогда + ОшибкаНаСервере.Вставить("ОписаниеОшибки", + ЭлектроннаяПодписьСлужебныйКлиентСервер.ЗаголовокОшибкиПолученияДанных(Параметры.Операция) + + Символы.ПС + НСтр("ru = 'Внешняя компонента XMLDSig (включающая CMS) может использоваться только для подписания.'")); + Возврат Ложь; + КонецЕсли; + + МенеджерКриптографии.ПарольДоступаКЗакрытомуКлючу = Параметры.ЗначениеПароля; + Попытка + ДвоичныеДанныеРезультата = ЭлектроннаяПодписьСлужебный.ПодписатьCMS( + Данные.Данные, + Данные.ПараметрыCMS, + СертификатКриптографии, + МенеджерКриптографии); + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + КонецПопытки; + Иначе ОписаниеОшибки = ""; @@ -501,9 +538,19 @@ КонецЕсли; КонецЦикла; + ОписанияНастроенныхПрограмм = ЭлектроннаяПодпись.ОбщиеНастройки().ОписанияПрограмм; + Для Каждого ПоставляемаяПрограмма Из ПоставляемыеНастройки Цикл ОписаниеПрограммы = РасширенноеОписаниеПрограммы(); ЗаполнитьЗначенияСвойств(ОписаниеПрограммы, ПоставляемаяПрограмма); + + Для Каждого ОписаниеНастроеннойПрограммы Из ОписанияНастроенныхПрограмм Цикл + Если ОписаниеПрограммы.ИмяПрограммы = ОписаниеНастроеннойПрограммы.ИмяПрограммы + И ОписаниеПрограммы.ТипПрограммы = ОписаниеНастроеннойПрограммы.ТипПрограммы Тогда + ОписаниеПрограммы.Ссылка = ОписаниеНастроеннойПрограммы.Ссылка; + Прервать; + КонецЕсли; + КонецЦикла; ОбновленныеОписанияПрограмм.Добавить(ОписаниеПрограммы); КонецЦикла; @@ -524,4 +571,16 @@ КонецФункции +Функция ЗаписатьСертификатПослеПроверки(Контекст) Экспорт + + Возврат ЭлектроннаяПодписьСлужебный.ЗаписатьСертификатПослеПроверки(Контекст); + +КонецФункции + +Функция ЗаписатьСертификатВСправочник(Знач Сертификат, ДополнительныеПараметры = Неопределено) Экспорт + + Возврат ЭлектроннаяПодпись.ЗаписатьСертификатВСправочник(Сертификат, ДополнительныеПараметры); + +КонецФункции + #КонецОбласти diff --git a/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйКлиент/Module.bsl b/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйКлиент/Module.bsl index 2e03f49ef..408f031c3 100644 --- a/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйКлиент/Module.bsl +++ b/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйКлиент/Module.bsl @@ -124,10 +124,8 @@ // После цикла. ОповещениеОЗавершении = Контекст.ОповещениеОЗавершении; Если Контекст.ПроверятьНаСервере Тогда - Контекст.ПараметрыВыполнения.Вставить("Менеджер", Неопределено); - Контекст.ПараметрыВыполнения.Вставить("Оповещение", Неопределено); - Контекст.Вставить("ОповещениеОЗавершении", Неопределено); - ЭлектроннаяПодписьСлужебныйВызовСервера.НайтиУстановленныеПрограммы(Контекст); + Контекст.Вставить("ОповещениеОЗавершении", Неопределено); + ЭлектроннаяПодписьСлужебныйВызовСервера.НайтиУстановленныеПрограммы(Контекст); КонецЕсли; ВыполнитьОбработкуОповещения(ОповещениеОЗавершении, Контекст.Программы); Возврат; @@ -151,7 +149,9 @@ ПараметрыВыполнения.Вставить("Оповещение", Новый ОписаниеОповещения( "НайтиУстановленныеПрограммыЦиклПродолжение", ЭтотОбъект, Контекст)); - Контекст.Вставить("ПараметрыВыполнения", ПараметрыВыполнения); + Контекст.Вставить("ПараметрыВыполнения", + Новый Структура("СвойстваОшибки", ПараметрыВыполнения.СвойстваОшибки)); + СоздатьМенеджерКриптографииЦиклНачало(ПараметрыВыполнения); КонецПроцедуры @@ -175,12 +175,11 @@ Если Ошибка.НеУказанПуть Тогда ОбновитьЗначение(ОписаниеПрограммы.РезультатПроверкиНаКлиенте, НСтр("ru = 'Не указан путь к программе.'")); - ОбновитьЗначение(ОписаниеПрограммы.Установлена, ""); Иначе ТекстОшибки = НСтр("ru = 'Не установлена на компьютере.'") + " " + Ошибка.Описание; ОбновитьЗначение(ОписаниеПрограммы.РезультатПроверкиНаКлиенте, ТекстОшибки); - ОбновитьЗначение(ОписаниеПрограммы.Установлена, Ложь); КонецЕсли; + ОбновитьЗначение(ОписаниеПрограммы.Установлена, Ложь); НайтиУстановленныеПрограммыЦиклНачало(Контекст); @@ -357,7 +356,7 @@ ИначеЕсли ТипЗнч(Контекст.Сертификат) = Тип("ДвоичныеДанные") Тогда Контекст.АдресСертификата = ПоместитьВоВременноеХранилище(Контекст.Сертификат, Новый УникальныйИдентификатор); - + Контекст.Вставить("ОчищатьХранилище", Истина); ИначеЕсли ТипЗнч(Контекст.Сертификат) = Тип("Строка") И ЭтоАдресВременногоХранилища(Контекст.Сертификат) Тогда @@ -397,6 +396,10 @@ ПолученныеФайлы[0].Имя); КонецЕсли; + Если Контекст.Свойство("ОчищатьХранилище") Тогда + УдалитьИзВременногоХранилища(Контекст.АдресСертификата); + КонецЕсли; + Если Контекст.Оповещение <> Неопределено Тогда ВыполнитьОбработкуОповещения(Контекст.Оповещение, ЕстьПолученныеФайлы); КонецЕсли; @@ -416,20 +419,15 @@ Процедура СохранитьЗапросНаСертификат(Оповещение, ЗапросНаСертификат, ИмяФайлаБезРасширения = "") Экспорт ИмяФайла = ПодготовитьСтрокуДляИмениФайла(ИмяФайлаБезРасширения + ".p10"); - ОповещениеОСохранении = Новый ОписаниеОповещения("СохранитьЗапросНаСертификатПослеПолученияФайлов", ЭтотОбъект, Оповещение); - - ПараметрыСохранения = ФайловаяСистемаКлиент.ПараметрыСохраненияФайла(); - ПараметрыСохранения.Диалог.Заголовок = НСтр("ru = 'Выберите файл для сохранения запроса на сертификат'"); - ПараметрыСохранения.Диалог.Фильтр = НСтр("ru = 'Файлы сертификатов (*.p10)|*.p10|Все файлы (*.*)|*.*'"); + Контекст = Новый Структура("Оповещение, АдресСертификата", Оповещение, Неопределено); Если ТипЗнч(ЗапросНаСертификат) = Тип("ДвоичныеДанные") Тогда - ФайловаяСистемаКлиент.СохранитьФайл(ОповещениеОСохранении, - ПоместитьВоВременноеХранилище(ЗапросНаСертификат, Новый УникальныйИдентификатор), ИмяФайла, ПараметрыСохранения); + Контекст.АдресСертификата = ПоместитьВоВременноеХранилище(ЗапросНаСертификат, Новый УникальныйИдентификатор); + Контекст.Вставить("ОчищатьХранилище", Истина); ИначеЕсли ТипЗнч(ЗапросНаСертификат) = Тип("Строка") И ЭтоАдресВременногоХранилища(ЗапросНаСертификат) Тогда - ФайловаяСистемаКлиент.СохранитьФайл(ОповещениеОСохранении, ЗапросНаСертификат, ИмяФайла, ПараметрыСохранения); - + Контекст.АдресСертификата = ЗапросНаСертификат; Иначе Если Оповещение <> Неопределено Тогда ВыполнитьОбработкуОповещения(Оповещение, Ложь); @@ -437,10 +435,17 @@ Возврат; КонецЕсли; + ОповещениеОСохранении = Новый ОписаниеОповещения("СохранитьЗапросНаСертификатПослеПолученияФайлов", ЭтотОбъект, Контекст); + + ПараметрыСохранения = ФайловаяСистемаКлиент.ПараметрыСохраненияФайла(); + ПараметрыСохранения.Диалог.Заголовок = НСтр("ru = 'Выберите файл для сохранения запроса на сертификат'"); + ПараметрыСохранения.Диалог.Фильтр = НСтр("ru = 'Файлы сертификатов (*.p10)|*.p10|Все файлы (*.*)|*.*'"); + ФайловаяСистемаКлиент.СохранитьФайл(ОповещениеОСохранении, Контекст.АдресСертификата, ИмяФайла, ПараметрыСохранения); + КонецПроцедуры // Продолжение процедуры СохранитьЗапросНаСертификат. -Процедура СохранитьЗапросНаСертификатПослеПолученияФайлов(ПолученныеФайлы, Оповещение) Экспорт +Процедура СохранитьЗапросНаСертификатПослеПолученияФайлов(ПолученныеФайлы, Контекст) Экспорт Если ПолученныеФайлы = Неопределено Или ПолученныеФайлы.Количество() = 0 Тогда @@ -452,8 +457,12 @@ ПолученныеФайлы[0].Имя); КонецЕсли; - Если Оповещение <> Неопределено Тогда - ВыполнитьОбработкуОповещения(Оповещение, ЕстьПолученныеФайлы); + Если Контекст.Свойство("ОчищатьХранилище") Тогда + УдалитьИзВременногоХранилища(Контекст.АдресСертификата); + КонецЕсли; + + Если Контекст.Оповещение <> Неопределено Тогда + ВыполнитьОбработкуОповещения(Контекст.Оповещение, ЕстьПолученныеФайлы); КонецЕсли; КонецПроцедуры @@ -730,7 +739,7 @@ Если МенеджерКриптографии = Неопределено Тогда СоздатьМенеджерКриптографии(Новый ОписаниеОповещения( "ПроверитьПодписьПослеСозданияМенеджераКриптографии", ЭтотОбъект, Контекст), - "ПроверкаПодписи", ПоказатьОшибку И Не Контекст.ПроверятьНаСервере); + "ПроверкаПодписи", ПоказатьОшибку И Не Контекст.ПроверятьНаСервере И Не ИспользоватьЭлектроннуюПодписьВМоделиСервиса()); Иначе ПроверитьПодписьПослеСозданияМенеджераКриптографии(МенеджерКриптографии, Контекст); КонецЕсли; @@ -740,7 +749,10 @@ // Продолжение процедуры ПроверитьПодпись. Процедура ПроверитьПодписьПослеСозданияМенеджераКриптографии(Результат, Контекст) Экспорт - Если ТипЗнч(Результат) = Тип("МенеджерКриптографии") Тогда + Если Результат = "СервисКриптографии" Тогда + ПроверитьПодписьВМоделиСервиса(Контекст); + Возврат; + ИначеЕсли ТипЗнч(Результат) = Тип("МенеджерКриптографии") Тогда МенеджерКриптографии = Результат; Иначе МенеджерКриптографии = Неопределено; @@ -751,8 +763,15 @@ Если Не ЭлектроннаяПодписьКлиент.ПроверятьЭлектронныеПодписиНаСервере() Тогда // Проверка подписи и сертификата на стороне клиента. Если МенеджерКриптографии = Неопределено Тогда - ВыполнитьОбработкуОповещения(Контекст.Оповещение, Неопределено); + + Если ИспользоватьЭлектроннуюПодписьВМоделиСервиса() Тогда + ПроверитьПодписьВМоделиСервиса(Контекст); + Иначе + ВыполнитьОбработкуОповещения(Контекст.Оповещение, Неопределено); + КонецЕсли; + Возврат; + КонецЕсли; Если ТипЗнч(Контекст.ИсходныеДанные) = Тип("Строка") @@ -830,6 +849,10 @@ И ТипЗнч(Контекст.ИсходныеДанные) = Тип("Структура") И Контекст.ИсходныеДанные.Свойство("ПараметрыXMLDSig")); + ЭтоCMS = (ТипЗнч(Контекст) = Тип("Структура") + И ТипЗнч(Контекст.ИсходныеДанные) = Тип("Структура") + И Контекст.ИсходныеДанные.Свойство("ПараметрыCMS")); + Если ЭтоXMLDSig Тогда ОповещениеУспех = Новый ОписаниеОповещения( @@ -842,12 +865,30 @@ Оповещения.Вставить("Успех", ОповещениеУспех); Оповещения.Вставить("Ошибка", ОповещениеОшибка); - НачатьПроверкуПодписи( + НачатьИнициализациюСертификатаКриптографииДляПроверкиПодписиXMLDSig( Оповещения, Контекст.ИсходныеДанные.КонвертSOAP, Контекст.ИсходныеДанные.ПараметрыXMLDSig, Контекст.МенеджерКриптографии); + ИначеЕсли ЭтоCMS Тогда + + ОповещениеУспех = Новый ОписаниеОповещения( + "ПроверитьПодписьНаКлиентеПослеПроверкиПодписиXMLDSig", ЭтотОбъект, Контекст); + + ОповещениеОшибка = Новый ОписаниеОповещения( + "ПроверитьПодписьНаКлиентеПослеОшибкиПроверкиПодписиXMLDSig", ЭтотОбъект, Контекст); + + Оповещения = Новый Структура; + Оповещения.Вставить("Успех", ОповещениеУспех); + Оповещения.Вставить("Ошибка", ОповещениеОшибка); + + НачатьИнициализациюСертификатаКриптографииДляПроверкиПодписиCMS( + Оповещения, + Контекст.ИсходныеДанные.Данные, + Контекст.ИсходныеДанные.ПараметрыCMS, + Контекст.МенеджерКриптографии); + Иначе Контекст.МенеджерКриптографии.НачатьПроверкуПодписи(Новый ОписаниеОповещения( "ПроверитьПодписьНаКлиентеПослеПроверкиПодписи", ЭтотОбъект, Контекст, @@ -883,7 +924,10 @@ Процедура ПроверитьПодписьНаКлиентеПослеОшибкиПроверкиПодписи(ИнформацияОбОшибке, СтандартнаяОбработка, Контекст) Экспорт СтандартнаяОбработка = Ложь; - ВыполнитьОбработкуОповещения(Контекст.Оповещение, КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); + ТекстОшибки = ?(ТипЗнч(ИнформацияОбОшибке) = Тип("ИнформацияОбОшибке"), + КраткоеПредставлениеОшибки(ИнформацияОбОшибке), Строка(ИнформацияОбОшибке)); + + ВыполнитьОбработкуОповещения(Контекст.Оповещение, ТекстОшибки); КонецПроцедуры @@ -952,6 +996,7 @@ Контекст.Вставить("МенеджерКриптографии", МенеджерКриптографии); Контекст.Вставить("НаДату", НаДату); Контекст.Вставить("ПоказатьОшибку", ПоказатьОшибку); + Контекст.Вставить("ОписаниеОшибкиНаКлиенте", Неопределено); Контекст.Вставить("ОписаниеОшибкиНаСервере", Неопределено); Если Контекст.МенеджерКриптографии = Неопределено @@ -998,10 +1043,13 @@ Если Контекст.МенеджерКриптографии = Неопределено Тогда СоздатьМенеджерКриптографии(Новый ОписаниеОповещения( "ПроверитьСертификатПослеСозданияМенеджераКриптографии", ЭтотОбъект, Контекст), - "ПроверкаСертификата", Контекст.ПоказатьОшибку И Контекст.ОписаниеОшибкиНаСервере = Неопределено); + "ПроверкаСертификата", + Контекст.ПоказатьОшибку + И Контекст.ОписаниеОшибкиНаСервере = Неопределено + И Не ИспользоватьЭлектроннуюПодписьВМоделиСервиса()); Иначе Если Контекст.МенеджерКриптографии = "СервисКриптографии" Тогда - ПроверитьСертификатВМоделиСервиса(Контекст.МенеджерКриптографии, Контекст); + ПроверитьСертификатВМоделиСервиса(Контекст); Иначе ПроверитьСертификатПослеСозданияМенеджераКриптографии(Контекст.МенеджерКриптографии, Контекст); КонецЕсли; @@ -1013,7 +1061,11 @@ Процедура ПроверитьСертификатПослеСозданияМенеджераКриптографии(Результат, Контекст) Экспорт Если ТипЗнч(Результат) <> Тип("МенеджерКриптографии") Тогда - ВыполнитьОбработкуОповещения(Контекст.Оповещение, Контекст.ОписаниеОшибкиНаСервере); + Если ИспользоватьЭлектроннуюПодписьВМоделиСервиса() Тогда + ПроверитьСертификатВМоделиСервиса(Контекст); + Иначе + ВыполнитьОбработкуОповещения(Контекст.Оповещение, Контекст.ОписаниеОшибкиНаСервере); + КонецЕсли; Возврат; КонецЕсли; @@ -1061,12 +1113,13 @@ ОписаниеОшибки = Строка(ИнформацияОбОшибке); КонецЕсли; - Если Контекст.ОписаниеОшибкиНаСервере <> Неопределено Тогда - ОписаниеОшибки = Контекст.ОписаниеОшибкиНаСервере + " " + НСтр("ru = '(на сервере)'") + Символы.ПС - + ОписаниеОшибки + " " + НСтр("ru = '(на клиенте)'"); - КонецЕсли; + Контекст.ОписаниеОшибкиНаКлиенте = ОписаниеОшибки; - ВыполнитьОбработкуОповещения(Контекст.Оповещение, ОписаниеОшибки); + Если ИспользоватьЭлектроннуюПодписьВМоделиСервиса() Тогда + ПроверитьСертификатВМоделиСервиса(Контекст); + Иначе + ПроверитьСертификатПослеНеуспешнойПроверки(Контекст); + КонецЕсли; КонецПроцедуры @@ -1084,6 +1137,76 @@ КонецПроцедуры +// Продолжение процедуры ПроверитьСертификат. +Процедура ПроверитьСертификатВМоделиСервиса(Контекст) + + Если ТипЗнч(Контекст.Сертификат) = Тип("СертификатКриптографии") Тогда + Контекст.Сертификат.НачатьВыгрузку(Новый ОписаниеОповещения( + "ПроверитьСертификатВМоделиСервисаПослеВыгрузкиСертификата", ЭтотОбъект, Контекст)); + Иначе + ПроверитьСертификатВМоделиСервисаПослеВыгрузкиСертификата(Контекст.Сертификат, Контекст); + КонецЕсли; + +КонецПроцедуры + +// Продолжение процедуры ПроверитьСертификат. +Процедура ПроверитьСертификатВМоделиСервисаПослеВыгрузкиСертификата(Сертификат, Контекст) Экспорт + + Если ТипЗнч(Сертификат) = Тип("ДвоичныеДанные") Тогда + ДанныеСертификата = Сертификат; + Иначе + ДанныеСертификата = ПолучитьИзВременногоХранилища(Сертификат); + КонецЕсли; + + МодульСервисКриптографииКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("СервисКриптографииКлиент"); + МодульСервисКриптографииКлиент.ПроверитьСертификат(Новый ОписаниеОповещения( + "ПроверитьСертификатПослеПроверкиВМоделиСервиса", ЭтотОбъект, Контекст), ДанныеСертификата); + +КонецПроцедуры + +// Продолжение процедуры ПроверитьСертификат. +Процедура ПроверитьСертификатПослеПроверкиВМоделиСервиса(Результат, Контекст) Экспорт + + Если Не Результат.Выполнено Тогда + Контекст.ОписаниеОшибкиНаСервере = КраткоеПредставлениеОшибки(Результат.ИнформацияОбОшибке); + ПроверитьСертификатПослеНеуспешнойПроверки(Контекст); + Возврат; + КонецЕсли; + + Если Не Результат.Действителен Тогда + Контекст.ОписаниеОшибкиНаСервере = + ЭлектроннаяПодписьСлужебныйКлиентСервер.ТекстОшибкиСервисаСертификатНедействителен(); + ПроверитьСертификатПослеНеуспешнойПроверки(Контекст); + Возврат; + КонецЕсли; + + ВыполнитьОбработкуОповещения(Контекст.Оповещение, Истина); + +КонецПроцедуры + +// Продолжение процедуры ПроверитьСертификат. +Процедура ПроверитьСертификатПослеНеуспешнойПроверки(Контекст) + + Если Контекст.ОписаниеОшибкиНаКлиенте <> Неопределено + И Контекст.ОписаниеОшибкиНаСервере <> Неопределено Тогда + + Результат = + НСтр("ru = 'НА СЕРВЕРЕ:'") + + Символы.ПС + Символы.ПС + Контекст.ОписаниеОшибкиНаСервере + + Символы.ПС + Символы.ПС + + НСтр("ru = 'НА КОМПЬЮТЕРЕ:'") + + Символы.ПС + Символы.ПС + Контекст.ОписаниеОшибкиНаКлиенте; + + ИначеЕсли Контекст.ОписаниеОшибкиНаКлиенте <> Неопределено Тогда + Результат = Контекст.ОписаниеОшибкиНаКлиенте; + Иначе + Результат = Контекст.ОписаниеОшибкиНаСервере; + КонецЕсли; + + ВыполнитьОбработкуОповещения(Контекст.Оповещение, Результат); + +КонецПроцедуры + // Создает и возвращает менеджер криптографии (на клиенте) для указанной программы. // @@ -1419,7 +1542,7 @@ // * СкрытьЗаявление - Булево - не предлагать создать заявление на выпуск сертификата. // * СоздатьЗаявление - Булево - сразу открыть форму создания заявления на выпуск сертификата. // -Процедура ДобавитьСертификат(ПараметрыСоздания = Неопределено) Экспорт +Процедура ДобавитьСертификат(ПараметрыСоздания = Неопределено, ОбработчикЗавершения = Неопределено) Экспорт Если ТипЗнч(ПараметрыСоздания) <> Тип("Структура") Тогда ПараметрыСоздания = Новый Структура; @@ -1433,6 +1556,12 @@ ПараметрыСоздания.Вставить("Организация", Неопределено); КонецЕсли; + Если Не ПараметрыСоздания.Свойство("СертификатОснование") Тогда + ПараметрыСоздания.Вставить("СертификатОснование", Неопределено); + КонецЕсли; + + ПараметрыСоздания.Вставить("ОбработчикЗавершения", ОбработчикЗавершения); + Если ПараметрыСоздания.Свойство("СоздатьЗаявление") И ПараметрыСоздания.СоздатьЗаявление = Истина Тогда ДобавитьСертификатПослеВыбораНазначения("ЗаявлениеНаВыпускСертификата", ПараметрыСоздания); Возврат; @@ -1461,8 +1590,9 @@ Если Назначение = "ЗаявлениеНаВыпускСертификата" Тогда ПараметрыФормы.Вставить("ЛичныйСписокПриДобавлении", ПараметрыСоздания.ВЛичныйСписок); ПараметрыФормы.Вставить("Организация", ПараметрыСоздания.Организация); + ПараметрыФормы.Вставить("СертификатОснование", ПараметрыСоздания.СертификатОснование); ИмяФормы = "Обработка.ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата.Форма.Форма"; - ОткрытьФорму(ИмяФормы, ПараметрыФормы); + ОткрытьФорму(ИмяФормы, ПараметрыФормы, , , , , ПараметрыСоздания.ОбработчикЗавершения); Возврат; КонецЕсли; @@ -1484,7 +1614,7 @@ ПараметрыФормы.Вставить("ДобавлениеВСписок", Истина); ПараметрыФормы.Вставить("ЛичныйСписокПриДобавлении", ПараметрыСоздания.ВЛичныйСписок); ПараметрыФормы.Вставить("Организация", ПараметрыСоздания.Организация); - ВыборСертификатаДляПодписанияИлиРасшифровки(ПараметрыФормы); + ВыборСертификатаДляПодписанияИлиРасшифровки(ПараметрыФормы, , ПараметрыСоздания.ОбработчикЗавершения); Возврат; КонецЕсли; @@ -1510,8 +1640,12 @@ Если Контекст.ПараметрыСоздания.Свойство("Организация") Тогда ПараметрыФормы.Вставить("Организация", Контекст.ПараметрыСоздания.Организация); КонецЕсли; + + ОбработчикЗавершения = Неопределено; + Контекст.ПараметрыСоздания.Свойство("ОбработчикЗавершения", ОбработчикЗавершения); + ОткрытьФорму("Справочник.СертификатыКлючейЭлектроннойПодписиИШифрования.Форма.ДобавлениеСертификатаДляШифрования", - ПараметрыФормы); + ПараметрыФормы, , , , , ОбработчикЗавершения); КонецПроцедуры @@ -1601,13 +1735,16 @@ // Продолжение процедуры ПолучитьСвойстваСертификатовНаКлиенте. Процедура ПолучитьСвойстваСертификатовНаКлиентеПослеПолученияВсех(Контекст) + ПараметрыДобавленияСвойств = Новый Структура("ТолькоОтпечатки, МодульЛокализации", + Контекст.ТолькоОтпечатки, МодульЛокализации()); + ЭлектроннаяПодписьСлужебныйКлиентСервер.ДобавитьСвойстваСертификатов( Контекст.Результат.СвойстваСертификатовНаКлиенте, Контекст.МассивСертификатов, Контекст.БезОтбора, ДобавкаВремени(), ОбщегоНазначенияКлиент.ДатаСеанса(), - Контекст.ТолькоОтпечатки); + ПараметрыДобавленияСвойств); ВыполнитьОбработкуОповещения(Контекст.Оповещение, Контекст.Результат); @@ -1622,20 +1759,20 @@ ПараметрыЗагрузки = ФайловаяСистемаКлиент.ПараметрыЗагрузкиФайла(); ПараметрыЗагрузки.Диалог.Заголовок = НСтр("ru = 'Выберите файл сертификата (только для шифрования)'"); - ПараметрыЗагрузки.Диалог.Фильтр = НСтр("ru = 'Сертификат X.509 (*.cer;*.crt)|*.cer;*.crt|Все файлы(*.*)|*.*'"); + ПараметрыЗагрузки.Диалог.Фильтр = НСтр("ru = 'Сертификат X.509 (*.cer;*.crt)|*.cer;*.crt|Все файлы (*.*)|*.*'"); ФайловаяСистемаКлиент.ЗагрузитьФайл(Оповещение, ПараметрыЗагрузки); КонецПроцедуры // Продолжение процедуры ДобавитьСертификатТолькоДляШифрованияИзФайла. -Процедура ДобавитьСертификатТолькоДляШифрованияИзФайлаПослеПомещенияФайлов(ПомещенныеФайлы, Контекст) Экспорт +Процедура ДобавитьСертификатТолькоДляШифрованияИзФайлаПослеПомещенияФайлов(ПомещенныйФайл, Контекст) Экспорт - Если Не ЗначениеЗаполнено(ПомещенныеФайлы) Тогда + Если Не ЗначениеЗаполнено(ПомещенныйФайл) Тогда Возврат; КонецЕсли; - ДобавитьСертификатТолькоДляШифрованияИзФайлаПослеПомещенияФайла(ПомещенныеФайлы[0].Хранение, Контекст); + ДобавитьСертификатТолькоДляШифрованияИзФайлаПослеПомещенияФайла(ПомещенныйФайл.Хранение, Контекст); КонецПроцедуры @@ -1644,10 +1781,10 @@ ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("АдресДанныхСертификата", Адрес); - ПараметрыФормы.Вставить("ЛичныйСписокПриДобавлении", Контекст.ПараметрыСоздания.ВЛичныйСписок); - ПараметрыФормы.Вставить("Организация", Контекст.ПараметрыСоздания.Организация); + ПараметрыФормы.Вставить("ЛичныйСписокПриДобавлении", Контекст.ВЛичныйСписок); + ПараметрыФормы.Вставить("Организация", Контекст.Организация); Форма = ОткрытьФорму("Справочник.СертификатыКлючейЭлектроннойПодписиИШифрования.Форма.ДобавлениеСертификатаДляШифрования", - ПараметрыФормы); + ПараметрыФормы, , , , , Контекст.ОбработчикЗавершения); Если Форма = Неопределено Тогда ПоказатьПредупреждение(, @@ -1900,7 +2037,7 @@ КонецПроцедуры // Только для внутреннего использования. -Процедура ВыборСертификатаДляПодписанияИлиРасшифровки(СерверныеПараметры, ВладелецНовойФормы = Неопределено) Экспорт +Процедура ВыборСертификатаДляПодписанияИлиРасшифровки(СерверныеПараметры, ВладелецНовойФормы = Неопределено, ОбработчикЗавершения = Неопределено) Экспорт Если ВладелецНовойФормы = Неопределено Тогда ВладелецНовойФормы = Новый УникальныйИдентификатор; @@ -1909,6 +2046,7 @@ Контекст = Новый Структура; Контекст.Вставить("СерверныеПараметры", СерверныеПараметры); Контекст.Вставить("ВладелецНовойФормы", ВладелецНовойФормы); + Контекст.Вставить("ОбработчикЗавершения", ОбработчикЗавершения); ПолучитьСвойстваСертификатовНаКлиенте(Новый ОписаниеОповещения( "ВыборСертификатаДляПодписанияИлиРасшифровкиПродолжение", ЭтотОбъект, Контекст), Истина, Ложь); @@ -1925,7 +2063,7 @@ Результат.ОшибкаПолученияСертификатовНаКлиенте); ФормаПередачаПараметров().ОткрытьНовуюФорму("ВыборСертификатаДляПодписанияИлиРасшифровки", - Контекст.СерверныеПараметры, , , Контекст.ВладелецНовойФормы); + Контекст.СерверныеПараметры, , Контекст.ОбработчикЗавершения, Контекст.ВладелецНовойФормы); КонецПроцедуры @@ -1938,17 +2076,35 @@ СерверныеПараметры.Вставить("ПараметрыДополнительныхПроверок"); Если ТипЗнч(ДополнительныеПараметры) = Тип("Структура") Тогда - ЗаполнитьЗначенияСвойств(СерверныеПараметры, ДополнительныеПараметры); - КонецЕсли; - - СерверныеПараметры.Вставить("Сертификат", Сертификат); - - Если ТипЗнч(ДополнительныеПараметры) = Тип("Структура") Тогда + + УказанКонтекстДругойОперации = Ложь; + Если ДополнительныеПараметры.Свойство("КонтекстОперации") + И ТипЗнч(ДополнительныеПараметры.КонтекстОперации) = Тип("ФормаКлиентскогоПриложения") Тогда + + Если Не ДополнительныеПараметры.Свойство("БезПодтверждения") Тогда + ДополнительныеПараметры.Вставить("БезПодтверждения"); + КонецЕсли; + + УказанКонтекстДругойОперации = Истина; + ДополнительныеПараметры.БезПодтверждения = Истина; + + ИначеЕсли ДополнительныеПараметры.Свойство("НеПоказыватьРезультаты") Тогда + ДополнительныеПараметры.НеПоказыватьРезультаты = Ложь; + КонецЕсли; + КлиентскиеПараметры = ДополнительныеПараметры; + Если УказанКонтекстДругойОперации Тогда + КлиентскиеПараметры.Вставить("УказанКонтекстДругойОперации"); + КонецЕсли; + + ЗаполнитьЗначенияСвойств(СерверныеПараметры, ДополнительныеПараметры); + Иначе КлиентскиеПараметры = Новый Структура; КонецЕсли; + СерверныеПараметры.Вставить("Сертификат", Сертификат); + ВладелецФормы = Неопределено; КлиентскиеПараметры.Свойство("ВладелецФормы", ВладелецФормы); @@ -1965,11 +2121,14 @@ Процедура СтандартноеЗавершение(Успех, КлиентскиеПараметры) Экспорт КлиентскиеПараметры.ОписаниеДанных.Вставить("Успех", Успех = Истина); + КлиентскиеПараметры.ОписаниеДанных.Вставить("Отказ", Успех = Неопределено); Если КлиентскиеПараметры.ОбработкаРезультата <> Неопределено Тогда + ОбработкаРезультата = КлиентскиеПараметры.ОбработкаРезультата; КлиентскиеПараметры.ОбработкаРезультата = Неопределено; ВыполнитьОбработкуОповещения(ОбработкаРезультата, КлиентскиеПараметры.ОписаниеДанных); + КонецЕсли; КонецПроцедуры @@ -2226,24 +2385,15 @@ СохранитьДанныеВместеСПодписьюЦиклВнутреннийЦиклПослеПроверкиСуществованияФайла(Истина, Контекст); ИначеЕсли Контекст.Подключено Тогда - Файл = Новый Файл; - Файл.НачатьИнициализацию(Новый ОписаниеОповещения( - "СохранитьДанныеВместеСПодписьюЦиклВнутреннийЦиклПослеИнициализацииФайла", ЭтотОбъект, Контекст), - Контекст.ПолноеИмяФайлаПодписи); + Файл = Новый Файл(Контекст.ПолноеИмяФайлаПодписи); + Файл.НачатьПроверкуСуществования(Новый ОписаниеОповещения( + "СохранитьДанныеВместеСПодписьюЦиклВнутреннийЦиклПослеПроверкиСуществованияФайла", ЭтотОбъект, Контекст)); Иначе СохранитьДанныеВместеСПодписьюЦиклВнутреннийЦиклПослеПроверкиСуществованияФайла(Ложь, Контекст); КонецЕсли; КонецПроцедуры -// Продолжение процедуры ЭлектроннаяПодписьКлиент.СохранитьДанныеВместеСПодписью. -Процедура СохранитьДанныеВместеСПодписьюЦиклВнутреннийЦиклПослеИнициализацииФайла(Файл, Контекст) Экспорт - - Файл.НачатьПроверкуСуществования(Новый ОписаниеОповещения( - "СохранитьДанныеВместеСПодписьюЦиклВнутреннийЦиклПослеПроверкиСуществованияФайла", ЭтотОбъект, Контекст)); - -КонецПроцедуры - // Продолжение процедуры ЭлектроннаяПодписьКлиент.СохранитьДанныеВместеСПодписью. Процедура СохранитьДанныеВместеСПодписьюЦиклВнутреннийЦиклПослеПроверкиСуществованияФайла(Существует, Контекст) Экспорт @@ -2294,24 +2444,15 @@ СохранитьДанныеСертификатаВместеСПодписьюЦиклВнутреннийЦиклПослеПроверкиСуществованияФайла(Истина, Контекст); ИначеЕсли Контекст.Подключено Тогда - Файл = Новый Файл; - Файл.НачатьИнициализацию(Новый ОписаниеОповещения( - "СохранитьДанныеСертификатаВместеСПодписьюЦиклВнутреннийЦиклПослеИнициализацииФайла", ЭтотОбъект, Контекст), - Контекст.ПолноеИмяФайлаСертификата); + Файл = Новый Файл(Контекст.ПолноеИмяФайлаСертификата); + Файл.НачатьПроверкуСуществования(Новый ОписаниеОповещения( + "СохранитьДанныеСертификатаВместеСПодписьюЦиклВнутреннийЦиклПослеПроверкиСуществованияФайла", ЭтотОбъект, Контекст)); Иначе СохранитьДанныеСертификатаВместеСПодписьюЦиклВнутреннийЦиклПослеПроверкиСуществованияФайла(Ложь, Контекст); КонецЕсли; КонецПроцедуры -// Продолжение процедуры ЭлектроннаяПодписьКлиент.СохранитьДанныеВместеСПодписью. -Процедура СохранитьДанныеСертификатаВместеСПодписьюЦиклВнутреннийЦиклПослеИнициализацииФайла(Файл, Контекст) Экспорт - - Файл.НачатьПроверкуСуществования(Новый ОписаниеОповещения( - "СохранитьДанныеСертификатаВместеСПодписьюЦиклВнутреннийЦиклПослеПроверкиСуществованияФайла", ЭтотОбъект, Контекст)); - -КонецПроцедуры - // Продолжение процедуры ЭлектроннаяПодписьКлиент.СохранитьДанныеВместеСПодписью. Процедура СохранитьДанныеСертификатаВместеСПодписьюЦиклВнутреннийЦиклПослеПроверкиСуществованияФайла(Существует, Контекст) Экспорт @@ -2737,11 +2878,25 @@ Возврат; КонецЕсли; - Если ДополнительныеПараметры.УсиленнаяЗащитаЗакрытогоКлюча Тогда + ТекущиеСвойства = Новый Структура("ВыполнятьВМоделиСервиса", Ложь); + ЗаполнитьЗначенияСвойств(ТекущиеСвойства, Форма); + + Если ТекущиеСвойства.ВыполнятьВМоделиСервиса + И ИспользоватьЭлектроннуюПодписьВМоделиСервиса() Тогда + Элементы.Пароль.Доступность = Ложь; Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаПояснениеУсиленногоПароля; - Иначе + Элементы.ПояснениеУсиленногоПароля.Подсказка = + НСтр("ru = 'Облачный сервис вышлет одноразовый пароль по SMS или E-Mail, + |который нужно будет ввести после получения.'"); + ИначеЕсли ДополнительныеПараметры.УсиленнаяЗащитаЗакрытогоКлюча Тогда + Элементы.Пароль.Доступность = Ложь; + Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаПояснениеУсиленногоПароля; + Элементы.ПояснениеУсиленногоПароля.Подсказка = + НСтр("ru = 'Пароль запрашивает программа электронной подписи, а не программа 1С:Предприятие, + |так как для выбранного сертификата указана усиленная защита закрытого ключа.'"); + Иначе Если ДополнительныеПараметры.ПарольУстановленПрограммно Тогда Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаПояснениеУстановленногоПароля; ПояснениеПароля = ДополнительныеПараметры.ПояснениеПароля; @@ -3066,9 +3221,12 @@ Процедура ВыполнитьНаСторонеЦиклПослеПолученияДанных(Результат, Контекст) Экспорт ЭтоXMLDSig = (ТипЗнч(Результат) = Тип("Структура") И Результат.Свойство("ПараметрыXMLDSig")); + ЭтоCMS = (ТипЗнч(Результат) = Тип("Структура") И Результат.Свойство("ПараметрыCMS")); Если ТипЗнч(Результат) = Тип("Структура") - И Не ЭтоXMLDSig Тогда + И Не ЭтоXMLDSig + И Не ЭтоCMS Тогда + Ошибка = Новый Структура("ОписаниеОшибки", ЭлектроннаяПодписьСлужебныйКлиентСервер.ЗаголовокОшибкиПолученияДанных(Контекст.Операция) + Символы.ПС + Результат.ОписаниеОшибки); @@ -3081,6 +3239,7 @@ МенеджерКриптографии = Контекст.МенеджерКриптографии; Если ЭтоXMLDSig Тогда + Если Контекст.Операция <> "Подписание" Тогда Ошибка = Новый Структура("ОписаниеОшибки", ЭлектроннаяПодписьСлужебныйКлиентСервер.ЗаголовокОшибкиПолученияДанных(Контекст.Операция) @@ -3099,43 +3258,81 @@ Оповещения.Вставить("Успех", ОповещениеУспех); Оповещения.Вставить("Ошибка", ОповещениеОшибка); - НачатьПодписание( + НачатьВыгрузкуСертификатаКриптографииДляПодписанияXMLDSig( Оповещения, Результат.КонвертSOAP, Результат.ПараметрыXMLDSig, Контекст.СертификатКриптографии, Контекст.МенеджерКриптографии); + + ИначеЕсли ЭтоCMS Тогда + Если Контекст.Операция <> "Подписание" Тогда + Ошибка = Новый Структура("ОписаниеОшибки", + ЭлектроннаяПодписьСлужебныйКлиентСервер.ЗаголовокОшибкиПолученияДанных(Контекст.Операция) + + Символы.ПС + НСтр("ru = 'Внешняя компонента XMLDSig может использоваться только для подписания.'")); + ВыполнитьНаСторонеПослеЦикла(Ошибка, Контекст); + Возврат; + КонецЕсли; + + ОповещениеУспех = Новый ОписаниеОповещения( + "ВыполнитьНаСторонеЦиклПослеОперацииНаКлиентеXMLDSig", ЭтотОбъект, Контекст); + + ОповещениеОшибка = Новый ОписаниеОповещения( + "ВыполнитьНаСторонеЦиклПослеОшибкиОперацииНаКлиентеXMLDSig", ЭтотОбъект, Контекст); + + Оповещения = Новый Структура; + Оповещения.Вставить("Успех", ОповещениеУспех); + Оповещения.Вставить("Ошибка", ОповещениеОшибка); + + НачатьВыгрузкуСертификатаКриптографииДляПодписанияCMS( + Оповещения, + Результат.Данные, + Результат.ПараметрыCMS, + Контекст.СертификатКриптографии, + Контекст.МенеджерКриптографии); Иначе Оповещение = Новый ОписаниеОповещения( "ВыполнитьНаСторонеЦиклПослеОперацииНаКлиенте", ЭтотОбъект, Контекст, "ВыполнитьНаСторонеЦиклПослеОшибкиОперацииНаКлиенте", ЭтотОбъект); + + ПараметрыОперации = Новый Структура; + ПараметрыОперации.Вставить("Операция", Контекст.ОписаниеДанных.Операция); + ПараметрыОперации.Вставить("ЗаголовокДанных", Контекст.ОписаниеДанных.ЗаголовокДанных); + Если Контекст.Операция = "Подписание" Тогда + Если МенеджерКриптографии = "СервисКриптографии" Тогда СертификатДляПодписи = ПолучитьИзВременногоХранилища(Контекст.ОписаниеДанных.ВыбранныйСертификат.Данные); МодульСервисКриптографииКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("СервисКриптографииКлиент"); - МодульСервисКриптографииКлиент.Подписать(Оповещение, Данные, СертификатДляПодписи); + МодульСервисКриптографииКлиент.Подписать(Оповещение, Данные, СертификатДляПодписи, , ПараметрыОперации); Иначе МенеджерКриптографии.НачатьПодписывание(Оповещение, Данные, Контекст.СертификатКриптографии); КонецЕсли; ИначеЕсли Контекст.Операция = "Шифрование" Тогда + Если МенеджерКриптографии = "СервисКриптографии" Тогда МодульСервисКриптографииКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("СервисКриптографииКлиент"); - МодульСервисКриптографииКлиент.Зашифровать(Оповещение, Данные, Контекст.СертификатыШифрования); + МодульСервисКриптографииКлиент.Зашифровать(Оповещение, Данные, Контекст.СертификатыШифрования, , ПараметрыОперации); Иначе МенеджерКриптографии.НачатьШифрование(Оповещение, Данные, Контекст.СертификатыШифрования); КонецЕсли; + Иначе + Если МенеджерКриптографии = "СервисКриптографии" Тогда МодульСервисКриптографииКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("СервисКриптографииКлиент"); - МодульСервисКриптографииКлиент.Расшифровать(Оповещение, Данные); + МодульСервисКриптографииКлиент.Расшифровать(Оповещение, Данные, , ПараметрыОперации); Иначе МенеджерКриптографии.НачатьРасшифровку(Оповещение, Данные); КонецЕсли; + КонецЕсли; + КонецЕсли; Возврат; + КонецЕсли; ЭлементДанныхДляСервера = Новый Структура; @@ -3496,11 +3693,17 @@ И ТипЗнч(Результат.Данные) = Тип("Структура") И Результат.Данные.Свойство("ПараметрыXMLDSig")); + ЭтоCMS = (ТипЗнч(Результат) = Тип("Структура") + И Результат.Свойство("Данные") + И ТипЗнч(Результат.Данные) = Тип("Структура") + И Результат.Данные.Свойство("ПараметрыCMS")); + Если ТипЗнч(Результат) <> Тип("Структура") Или Не Результат.Свойство("Данные") Или ТипЗнч(Результат.Данные) <> Тип("ДвоичныеДанные") И ТипЗнч(Результат.Данные) <> Тип("Строка") - И (Не ЭтоXMLDSig) Тогда + И Не ЭтоXMLDSig + И Не ЭтоCMS Тогда Если ТипЗнч(Результат) <> Тип("Структура") Или Не Результат.Свойство("ОписаниеОшибки") Тогда Ошибка = Новый Структура("ОписаниеОшибки", НСтр("ru = 'Некорректный тип данных.'")); @@ -3517,7 +3720,9 @@ // Для стороны клиента требуются двоичные данные или путь к файлу. Если ТипЗнч(Данные) = Тип("ДвоичныеДанные") - Или ЭтоXMLDSig Тогда + Или ЭтоXMLDSig + Или ЭтоCMS Тогда + ВыполнитьОбработкуОповещения(Контекст.Оповещение, Данные); ИначеЕсли ЭтоАдресВременногоХранилища(Данные) Тогда @@ -3537,7 +3742,8 @@ // Для стороны сервера требуется адрес двоичных данных во временном хранилище. Если ТипЗнч(Данные) = Тип("ДвоичныеДанные") - Или ЭтоXMLDSig Тогда + Или ЭтоXMLDSig + Или ЭтоCMS Тогда ВыполнитьОбработкуОповещения(Контекст.Оповещение, ПоместитьВоВременноеХранилище(Данные, Контекст.Форма.УникальныйИдентификатор)); @@ -3606,10 +3812,11 @@ // СертификатКриптографии - СертификатКриптографии. // МенеджерКриптографии - МенеджерКриптографии. // -Процедура НачатьПодписание(ОповещенияПриЗавершении, КонвертSOAP, ДанныеАлгоритмаПодписания, СертификатКриптографии, МенеджерКриптографии) +Процедура НачатьВыгрузкуСертификатаКриптографииДляПодписанияXMLDSig(ОповещенияПриЗавершении, КонвертSOAP, ДанныеАлгоритмаПодписания, СертификатКриптографии, МенеджерКриптографии) Контекст = Новый Структура; Контекст.Вставить("Режим", "РежимПодписание"); + Контекст.Вставить("ТипПодписи", "XMLDSig"); Контекст.Вставить("ОповещенияПриЗавершении", ОповещенияПриЗавершении); Контекст.Вставить("УстанавливатьКомпоненту", Истина); @@ -3637,13 +3844,14 @@ // ДанныеАлгоритмаПодписания - Структура со свойствами: // МенеджерКриптографии - МенеджерКриптографии. // -Процедура НачатьПроверкуПодписи(ОповещенияПриЗавершении, КонвертSOAP, ДанныеАлгоритмаПодписания, МенеджерКриптографии) +Процедура НачатьИнициализациюСертификатаКриптографииДляПроверкиПодписиXMLDSig(ОповещенияПриЗавершении, КонвертSOAP, ДанныеАлгоритмаПодписания, МенеджерКриптографии) СертификатКриптографииBase64 = ЭлектроннаяПодписьСлужебныйКлиентСервер.НайтиВXML(КонвертSOAP, "wsse:BinarySecurityToken"); ДвоичныеДанные = Base64Значение(СертификатКриптографииBase64); Контекст = Новый Структура; Контекст.Вставить("Режим", "РежимПроверка"); + Контекст.Вставить("ТипПодписи", "XMLDSig"); Контекст.Вставить("ОповещенияПриЗавершении", ОповещенияПриЗавершении); Контекст.Вставить("УстанавливатьКомпоненту", Истина); @@ -3664,6 +3872,52 @@ КонецПроцедуры +// Начинает подписание CMS сообщения. +// +// Параметры: +// ОповещенияПриЗавершении - ОписаниеОповещения - процедура, которая будет вызвана после подписания сообщения. +// КонвертSOAP - Строка - Шаблон подписываемого сообщения. +// СертификатКриптографии - СертификатКриптографии. +// МенеджерКриптографии - МенеджерКриптографии. +// +Процедура НачатьВыгрузкуСертификатаКриптографииДляПодписанияCMS(ОповещенияПриЗавершении, Данные, ПараметрыCMS, СертификатКриптографии, МенеджерКриптографии) + + Контекст = Новый Структура; + Контекст.Вставить("Режим", "РежимПодписание"); + Контекст.Вставить("ТипПодписи", "CMS"); + Контекст.Вставить("ОповещенияПриЗавершении", ОповещенияПриЗавершении); + Контекст.Вставить("УстанавливатьКомпоненту", Истина); + + Контекст.Вставить("Данные", Данные); + + Контекст.Вставить("ПараметрыCMS", ПараметрыCMS); + Контекст.Вставить("СертификатКриптографии", СертификатКриптографии); + Контекст.Вставить("СертификатКриптографииBase64", Неопределено); + Контекст.Вставить("МенеджерКриптографии", МенеджерКриптографии); + + Контекст.Вставить("ТипКриптопровайдера", Неопределено); + Контекст.Вставить("ИмяКриптопровайдера", Неопределено); + Контекст.Вставить("ПутьКриптопровайдера", Неопределено); + + СертификатКриптографии.НачатьВыгрузку( + Новый ОписаниеОповещения("НачатьПодписаниеCMS_ПослеВыгрузкиСертификатаКриптографии", ЭтотОбъект, Контекст)); + +КонецПроцедуры + +// Начинает проверку подписи CMS сообщения. +// +// Параметры: +// ОповещенияПриЗавершении - ОписаниеОповещения - процедура, которая будет вызвана после подписания сообщения. +// КонвертSOAP - Строка - Шаблон подписываемого сообщения. +// ДанныеАлгоритмаПодписания - Структура со свойствами: +// МенеджерКриптографии - МенеджерКриптографии. +// +Процедура НачатьИнициализациюСертификатаКриптографииДляПроверкиПодписиCMS(ОповещенияПриЗавершении, КонвертSOAP, ДанныеАлгоритмаПодписания, МенеджерКриптографии) + + ВызватьИсключение НСтр("ru = 'Проверка подписи CMS не поддерживается в компоненте XMLDSig.'"); + +КонецПроцедуры + Процедура НачатьПроверкуПодписиПослеИнициализацииСертификата(СертификатКриптографии, Контекст) Экспорт Контекст.СертификатКриптографии = СертификатКриптографии; @@ -3693,7 +3947,7 @@ ЗавершитьОперациюСОшибкой( Контекст, - НСтр("ru = 'Операция невозможна. Требуется установка компоненты для HTTP-запросов.'")); + НСтр("ru = 'Операция невозможна. Требуется установка компоненты XMLDSig.'")); Иначе @@ -3747,7 +4001,8 @@ Если ОбщегоНазначенияКлиент.ЭтоWindowsКлиент() Тогда Контекст.ОбъектКомпоненты.НачатьУстановкуЗапретитьПользовательскийИнтерфейс( Новый ОписаниеОповещения("ПослеУстановкиСвойстваЗапретитьПользовательскийИнтерфейс", ЭтотОбъект, Контекст), - Ложь); + ЭлектроннаяПодписьСлужебныйКлиентСервер.ИнтерактивныйРежимДоступен() + И Не ИспользуетсяИнтерактивныйРежимКриптографии(Контекст.МенеджерКриптографии)); Иначе ПослеУстановкиСвойстваЗапретитьПользовательскийИнтерфейс(Контекст); КонецЕсли; @@ -3756,15 +4011,37 @@ Процедура ПослеУстановкиСвойстваЗапретитьПользовательскийИнтерфейс(Контекст) Экспорт - Если Контекст.Режим = "РежимПроверка" Тогда - НачатьПроверкуПодписиСообщенияSOAP(Контекст); + Если Контекст.ТипПодписи = "XMLDSig" Тогда + + Если Контекст.Режим = "РежимПроверка" Тогда + НачатьПроверкуПодписиXMLDSig(Контекст); + + ИначеЕсли Контекст.Режим = "РежимПодписание" Тогда + НачатьПодписаниеXMLDSig(Контекст); + Иначе + ЗавершитьОперациюСОшибкой( + Контекст, + НСтр("ru = 'Не установлен режим работы компоненты XMLDSig.'")); + КонецЕсли; + + ИначеЕсли Контекст.ТипПодписи = "CMS" Тогда + + Если Контекст.Режим = "РежимПроверка" Тогда + ЗавершитьОперациюСОшибкой( + Контекст, + НСтр("ru = 'Проверка подписи CMS не поддерживается в компоненте XMLDSig.'")); + ИначеЕсли Контекст.Режим = "РежимПодписание" Тогда + НачатьПодписаниеCMS(Контекст); + Иначе + ЗавершитьОперациюСОшибкой( + Контекст, + НСтр("ru = 'Не установлен режим работы компоненты XMLDSig.'")); + КонецЕсли; - ИначеЕсли Контекст.Режим = "РежимПодписание" Тогда - НачатьПодписаниеСообщенияSOAP(Контекст); Иначе ЗавершитьОперациюСОшибкой( Контекст, - НСтр("ru = 'Не установлен режим работы компоненты XMLDSig.'")); + НСтр("ru = 'Не установлен тип подписи компоненты XMLDSig.'")); КонецЕсли; КонецПроцедуры @@ -3791,7 +4068,71 @@ КонецПроцедуры -Процедура НачатьПодписаниеСообщенияSOAP(Контекст) +Процедура НачатьПодписаниеCMS_ПослеВыгрузкиСертификатаКриптографии(ДвоичныеДанныеСертификата, Контекст) Экспорт + + СертификатКриптографииBase64 = ОтформатироватьСтрокуBase64(Base64Строка(ДвоичныеДанныеСертификата)); + + Контекст.СертификатКриптографииBase64 = СертификатКриптографииBase64; + + ПараметрыПодключения = ОбщегоНазначенияКлиент.ПараметрыПодключенияКомпоненты(); + ПараметрыПодключения.ТекстПояснения = НСтр("ru = 'Для подписания CMS необходима установка компоненты XMLDSig'"); + + ОбщегоНазначенияКлиент.ПодключитьКомпонентуИзМакета( + Новый ОписаниеОповещения("ПослеПодключенияКомпоненты", ЭтотОбъект, Контекст), + "XMLDSignAddIn", + "Справочник.СертификатыКлючейЭлектроннойПодписиИШифрования.Макет.КомпонентаXMLDSig", + ПараметрыПодключения); + +КонецПроцедуры + +Процедура НачатьПодписаниеCMS(Контекст) + + ОписаниеОповещения = Новый ОписаниеОповещения( + "Подписание_ПослеВыполненияCMSSign", ЭтотОбъект, Контекст, + "Подписание_ПослеВыполненияCMSSign_Ошибка", ЭтотОбъект); + + ПараметрыCMSSign = ЭлектроннаяПодписьСлужебныйКлиентСервер.ПараметрыКомпонентыCMSSign(Контекст.ПараметрыCMS, Контекст.Данные); + + Попытка + Контекст.ОбъектКомпоненты.НачатьВызовCMSSign( + ОписаниеОповещения, + ПараметрыCMSSign.Данные, + Контекст.СертификатКриптографииBase64, + Контекст.МенеджерКриптографии.ПарольДоступаКЗакрытомуКлючу, + ПараметрыCMSSign.ТипПодписи, + ПараметрыCMSSign.Открепленная, + ПараметрыCMSSign.ВключениеСертификатовВПодпись, + ПараметрыCMSSign.ТипВходныхДанных); + Исключение + ЗавершитьОперациюСОшибкой( + Контекст, + НСтр("ru = 'Ошибка вызова метода CMSSign компоненты XMLDSig.'") + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + +КонецПроцедуры + +Процедура Подписание_ПослеВыполненияCMSSign_Ошибка(ИнформацияОбОшибке, СтандартнаяОбработка, Контекст) Экспорт + + СтандартнаяОбработка = Ложь; + + ЗавершитьОперациюСОшибкой( + Контекст, + НСтр("ru = 'Ошибка вызова метода CMSSign компоненты XMLDSig.'") + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); + +КонецПроцедуры + +Процедура Подписание_ПослеВыполненияCMSSign(SignatureValue, Параметры, Контекст) Экспорт + + Если Не ЗначениеЗаполнено(SignatureValue) Тогда + НачатьПолучениеТекстаОшибки(НСтр("ru = 'При выполнении метода CMSSign произошла ошибка:'"), Контекст); + Возврат; + КонецЕсли; + + ВыполнитьОбработкуОповещения(Контекст.ОповещенияПриЗавершении.Успех, Base64Значение(SignatureValue)); + +КонецПроцедуры + +Процедура НачатьПодписаниеXMLDSig(Контекст) Попытка ОписаниеОповещения = Новый ОписаниеОповещения( @@ -3826,7 +4167,7 @@ Возврат; КонецЕсли; - OIDАлгоритмовПодписи = СтрРазделить(Контекст.ДанныеАлгоритмаПодписания.OIDАлгоритмаПодписи, Символы.ПС); + OIDАлгоритмовПодписи = СтрРазделить(Контекст.ДанныеАлгоритмаПодписания.OIDАлгоритмаПодписи, Символы.ПС); OIDАлгоритмовХеширования = СтрРазделить(Контекст.ДанныеАлгоритмаПодписания.OIDАлгоритмаХеширования, Символы.ПС); АлгоритмыПодписи = СтрРазделить(Контекст.ДанныеАлгоритмаПодписания.АлгоритмПодписи, Символы.ПС); АлгоритмыХеширования = СтрРазделить(Контекст.ДанныеАлгоритмаПодписания.АлгоритмХеширования, Символы.ПС); @@ -4012,7 +4353,7 @@ КонецПроцедуры -Процедура НачатьПроверкуПодписиСообщенияSOAP(Контекст) +Процедура НачатьПроверкуПодписиXMLDSig(Контекст) Попытка ОписаниеОповещения = Новый ОписаниеОповещения( @@ -4336,6 +4677,14 @@ //////////////////////////////////////////////////////////////////////////////// // Вспомогательные процедуры и функции. +Функция МодульЛокализации() + + Возврат ?(СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиента().ЭлектроннаяПодпись.ОбщиеНастройки.ЗаявлениеНаВыпускСертификатаДоступно, + ОбщегоНазначенияКлиент.ОбщийМодуль("ЭлектроннаяПодписьЛокализацияКлиентСервер"), + Неопределено); + +КонецФункции + // Для процедур УстановитьПарольСертификата, ОткрытьНовуюФорму, ВыборСертификатаДляПодписанияИлиРасшифровки, // ПроверитьСертификатСправочника. // @@ -4606,17 +4955,58 @@ МодульСервисКриптографииКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("СервисКриптографииКлиент"); МодульСервисКриптографииКлиент.ПроверитьПодпись(Новый ОписаниеОповещения( - "ПроверитьПодписьНаКлиентеПослеПроверкиПодписи", ЭтотОбъект, Контекст, + "ПроверитьПодписьНаКлиентеПослеПроверкиПодписиВМоделиСервиса", ЭтотОбъект, Контекст, "ПроверитьПодписьНаКлиентеПослеОшибкиПроверкиПодписи", ЭтотОбъект), Контекст.ДанныеПодписи, Контекст.ИсходныеДанные); КонецПроцедуры -// Продолжение процедуры ПроверитьСертификат. -Процедура ПроверитьСертификатВМоделиСервиса(Результат, Контекст) +// Продолжение процедуры ПроверитьПодпись. +Процедура ПроверитьПодписьНаКлиентеПослеПроверкиПодписиВМоделиСервиса(Результат, Контекст) Экспорт - ВыполнитьОбработкуОповещения(Контекст.Оповещение, Истина); + Если Не Результат.Выполнено Тогда + ПроверитьПодписьНаКлиентеПослеОшибкиПроверкиПодписи(Результат.ИнформацияОбОшибке, Ложь, Контекст); + Возврат; + КонецЕсли; + + Если Не Результат.ПодписьДействительна Тогда + ПроверитьПодписьНаКлиентеПослеОшибкиПроверкиПодписи( + ЭлектроннаяПодписьСлужебныйКлиентСервер.ТекстОшибкиСервисаПодписьНедействительна(), + Ложь, Контекст); + Возврат; + КонецЕсли; + + МодульСервисКриптографииКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("СервисКриптографииКлиент"); + МодульСервисКриптографииКлиент.ПолучитьСертификатыИзПодписи(Новый ОписаниеОповещения( + "ПроверитьПодписьНаКлиентеПослеПолученияСертификатовВМоделиСервиса", ЭтотОбъект, Контекст, + "ПроверитьПодписьНаКлиентеПослеОшибкиПроверкиПодписи", ЭтотОбъект), + Контекст.ДанныеПодписи); + +КонецПроцедуры + +// Продолжение процедуры ПроверитьПодпись. +Процедура ПроверитьПодписьНаКлиентеПослеПолученияСертификатовВМоделиСервиса(Результат, Контекст) Экспорт + + Если Не Результат.Выполнено Тогда + ПроверитьПодписьНаКлиентеПослеОшибкиПроверкиПодписи(Результат.ИнформацияОбОшибке, Ложь, Контекст); + Возврат; + КонецЕсли; + + Сертификаты = Результат.Сертификаты; + Попытка + Если Сертификаты.Количество() = 1 Тогда + Сертификат = Сертификаты[0]; + ИначеЕсли Сертификаты.Количество() > 1 Тогда + Сертификат = ЭлектроннаяПодписьСлужебныйВызовСервера.СертификатыПоПорядкуДоКорневого(Сертификаты)[0]; + КонецЕсли; + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + ПроверитьПодписьНаКлиентеПослеОшибкиПроверкиПодписи(ИнформацияОбОшибке, Ложь, Контекст); + Возврат; + КонецПопытки; + + ПроверитьПодписьНаКлиентеПослеПроверкиПодписи(Сертификат, Контекст); КонецПроцедуры @@ -4699,4 +5089,289 @@ КонецФункции +#Область ДобавлениеСертификата + +// Продолжение процедуры ЭлектроннаяПодписьКлиент.ДобавитьСертификат. +Процедура ДобавитьСертификатПослеСозданияМенеджераКриптографии(Результат, Контекст) Экспорт + + Если ТипЗнч(Результат) <> Тип("МенеджерКриптографии") + И Результат.Общая Тогда + + Контекст.Вставить("ОшибкаНаКлиенте", Результат); + ВыполнитьОбработкуОповещения(Контекст.ОбработчикЗавершения, Неопределено); + СообщитьОбОшибкеДобавленияСертификата(Контекст); + + Возврат; + + КонецЕсли; + + СертификатКриптографии = Новый СертификатКриптографии; + СертификатКриптографии.НачатьИнициализацию(Новый ОписаниеОповещения( + "ДобавитьСертификатПослеИнициализацииСертификата", ЭтотОбъект, Контекст), + Контекст.ДанныеСертификата); + +КонецПроцедуры + +// Продолжение процедуры ЭлектроннаяПодписьКлиент.ДобавитьСертификат. +Процедура ДобавитьСертификатПослеИнициализацииСертификата(СертификатКриптографии, Контекст) Экспорт + + Контекст.Вставить("СертификатКриптографии", СертификатКриптографии); + + Контекст.Вставить("ОписаниеОшибки", ""); + Контекст.Вставить("ОшибкаНаКлиенте", Новый Структура); + + Контекст.ОшибкаНаКлиенте.Вставить("ОписаниеОшибки", ""); + Контекст.ОшибкаНаКлиенте.Вставить("Ошибки", Новый Массив); + + Контекст.Вставить("ОписанияПрограмм", ЭлектроннаяПодписьКлиент.ОбщиеНастройки().ОписанияПрограмм); + Контекст.Вставить("ОписаниеПрограммы", Неопределено); + Контекст.Вставить("Индекс", -1); + + ДобавитьСертификатЦиклНачало(Контекст); + +КонецПроцедуры + +// Продолжение процедуры ЭлектроннаяПодписьКлиент.ДобавитьСертификат. +Процедура ДобавитьСертификатЦиклНачало(Контекст) + + Если Контекст.ОписанияПрограмм.Количество() <= Контекст.Индекс + 1 Тогда + + ВыполнитьОбработкуОповещения(Контекст.ОбработчикЗавершения, Неопределено); + СообщитьОбОшибкеДобавленияСертификата(Контекст); + + Возврат; + + КонецЕсли; + + Контекст.Индекс = Контекст.Индекс + 1; + Контекст.ОписаниеПрограммы = Контекст.ОписанияПрограмм[Контекст.Индекс]; + + СоздатьМенеджерКриптографии(Новый ОписаниеОповещения("ДобавитьСертификатЦиклПослеСозданияМенеджераКриптографии", + ЭтотОбъект, Контекст), "", Неопределено, Контекст.ОписаниеПрограммы.Ссылка, + Контекст.ДополнительныеПараметры.УсиленнаяЗащитаЗакрытогоКлюча); + +КонецПроцедуры + +// Продолжение процедуры ЭлектроннаяПодписьКлиент.ДобавитьСертификат. +Процедура ДобавитьСертификатЦиклПослеСозданияМенеджераКриптографии(Результат, Контекст) Экспорт + + Если ТипЗнч(Результат) <> Тип("МенеджерКриптографии") Тогда + + Если Результат.Ошибки.Количество() > 0 Тогда + Контекст.ОшибкаНаКлиенте.Ошибки.Добавить(Результат.Ошибки[0]); + КонецЕсли; + + ДобавитьСертификатЦиклНачало(Контекст); + Возврат; + + КонецЕсли; + + Контекст.Вставить("МенеджерКриптографии", Результат); + Если Не ИспользуетсяИнтерактивныйРежимКриптографии(Контекст.МенеджерКриптографии) Тогда + Контекст.МенеджерКриптографии.ПарольДоступаКЗакрытомуКлючу = Контекст.ПарольСертификата; + КонецЕсли; + + Если Контекст.ДляШифрования = Истина Тогда + Контекст.МенеджерКриптографии.НачатьШифрование(Новый ОписаниеОповещения( + "ДобавитьСертификатЦиклПослеШифрования", ЭтотОбъект, Контекст, + "ДобавитьСертификатЦиклПослеОшибкиШифрования", ЭтотОбъект), + Контекст.ДанныеСертификата, Контекст.СертификатКриптографии); + Иначе + Контекст.МенеджерКриптографии.НачатьПодписывание(Новый ОписаниеОповещения( + "ДобавитьСертификатЦиклПослеПодписания", ЭтотОбъект, Контекст, + "ДобавитьСертификатЦиклПослеОшибкиПодписания", ЭтотОбъект), + Контекст.ДанныеСертификата, Контекст.СертификатКриптографии); + КонецЕсли; + +КонецПроцедуры + +// Продолжение процедуры ЭлектроннаяПодписьКлиент.ДобавитьСертификат. +Процедура ДобавитьСертификатЦиклПослеШифрования(ЗашифрованныеДанные, Контекст) Экспорт + + Контекст.МенеджерКриптографии.НачатьРасшифровку(Новый ОписаниеОповещения( + "ДобавитьСертификатЦиклПослеРасшифровки", ЭтотОбъект, Контекст, + "ДобавитьСертификатЦиклПослеОшибкиРасшифровки", ЭтотОбъект), + ЗашифрованныеДанные); + +КонецПроцедуры + +// Продолжение процедуры ЭлектроннаяПодписьКлиент.ДобавитьСертификат. +Процедура ДобавитьСертификатЦиклПослеОшибкиШифрования(ИнформацияОбОшибке, СтандартнаяОбработка, Контекст) Экспорт + + СтандартнаяОбработка = Ложь; + ПредставлениеОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке); + + ТекущаяОшибка = Новый Структура; + ТекущаяОшибка.Вставить("Описание", ПредставлениеОшибки); + ТекущаяОшибка.Вставить("Инструкция", Истина); + ТекущаяОшибка.Вставить("НастройкаПрограмм", Истина); + + Контекст.ОшибкаНаКлиенте.Ошибки.Добавить(ТекущаяОшибка); + + Контекст.ОшибкаНаКлиенте.ОписаниеОшибки = Контекст.ОшибкаНаКлиенте.ОписаниеОшибки + Символы.ПС + Символы.ПС + + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось пройти проверку шифрования с помощью программы %1 по причине: + |%2'"), Контекст.ОписаниеПрограммы.Наименование, ПредставлениеОшибки); + + ДобавитьСертификатЦиклНачало(Контекст); + +КонецПроцедуры + +// Продолжение процедуры ЭлектроннаяПодписьКлиент.ДобавитьСертификат. +Процедура ДобавитьСертификатЦиклПослеПодписания(ДанныеПодписи, Контекст) Экспорт + + ИнформацияОбОшибке = Неопределено; + ПредставлениеОшибки = ""; + Попытка + ЭлектроннаяПодписьСлужебныйКлиентСервер.ПустыеДанныеПодписи(ДанныеПодписи, ПредставлениеОшибки); + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + ПредставлениеОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке); + КонецПопытки; + + Если ЗначениеЗаполнено(ПредставлениеОшибки) Тогда + + ЗаполнитьОшибкуПодписания(Контекст.ОшибкаНаКлиенте, Контекст.ОписаниеОшибки, Контекст.ОписаниеПрограммы, + ПредставлениеОшибки, ИнформацияОбОшибке = Неопределено); + + ДобавитьСертификатЦиклНачало(Контекст); + Возврат; + + КонецЕсли; + + Контекст.ДополнительныеПараметры.Программа = Контекст.ОписаниеПрограммы.Ссылка; + Попытка + Сертификат = ЭлектроннаяПодписьСлужебныйВызовСервера.ЗаписатьСертификатВСправочник( + Контекст.ДанныеСертификата, Контекст.ДополнительныеПараметры); + Исключение + + Сертификат = Неопределено; + Контекст.ЗаголовокФормы = НСтр("ru = 'Ошибка добавления сертификата'"); + Контекст.ЗаголовокОшибки = НСтр("ru = 'Не удалось добавить сертификат по причине:'"); + Контекст.ОшибкаНаКлиенте.Ошибки = Новый Массив; + Контекст.ОшибкаНаКлиенте.ОписаниеОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + + СообщитьОбОшибкеДобавленияСертификата(Контекст); + + КонецПопытки; + + ВыполнитьОбработкуОповещения(Контекст.ОбработчикЗавершения, Сертификат); + +КонецПроцедуры + +// Продолжение процедуры ЭлектроннаяПодписьКлиент.ДобавитьСертификат. +Процедура ДобавитьСертификатЦиклПослеОшибкиПодписания(ИнформацияОбОшибке, СтандартнаяОбработка, Контекст) Экспорт + + СтандартнаяОбработка = Ложь; + + ЗаполнитьОшибкуПодписания(Контекст.ОшибкаНаКлиенте, Контекст.ОписаниеОшибки, Контекст.ОписаниеПрограммы, + КраткоеПредставлениеОшибки(ИнформацияОбОшибке), Ложь); + + ДобавитьСертификатЦиклНачало(Контекст); + +КонецПроцедуры + +// Продолжение процедуры ЭлектроннаяПодписьКлиент.ДобавитьСертификат. +Процедура ДобавитьСертификатЦиклПослеРасшифровки(РасшифрованныеДанные, Контекст) Экспорт + + ПредставлениеОшибки = ""; + Попытка + ЭлектроннаяПодписьСлужебныйКлиентСервер.ПустыеРасшифрованныеДанные(РасшифрованныеДанные, ПредставлениеОшибки); + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + ПредставлениеОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке); + КонецПопытки; + + Если ЗначениеЗаполнено(ПредставлениеОшибки) Тогда + + ЗаполнитьОшибкуРасшифровки(Контекст.ОшибкаНаКлиенте, Контекст.ОписаниеОшибки, + Контекст.ОписаниеПрограммы, ПредставлениеОшибки); + + ДобавитьСертификатЦиклНачало(Контекст); + Возврат; + + КонецЕсли; + + Контекст.ДополнительныеПараметры.Программа = Контекст.ОписаниеПрограммы.Ссылка; + Попытка + Сертификат = ЭлектроннаяПодписьСлужебныйВызовСервера.ЗаписатьСертификатВСправочник( + Контекст.ДанныеСертификата, Контекст.ДополнительныеПараметры); + Исключение + + Сертификат = Неопределено; + Контекст.ЗаголовокФормы = НСтр("ru = 'Ошибка добавления сертификата'"); + Контекст.ЗаголовокОшибки = НСтр("ru = 'Не удалось добавить сертификат по причине:'"); + Контекст.ОшибкаНаКлиенте.Ошибки = Новый Массив; + Контекст.ОшибкаНаКлиенте.ОписаниеОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + + СообщитьОбОшибкеДобавленияСертификата(Контекст); + + КонецПопытки; + + ВыполнитьОбработкуОповещения(Контекст.ОбработчикЗавершения, Сертификат); + +КонецПроцедуры + +// Продолжение процедуры ЭлектроннаяПодписьКлиент.ДобавитьСертификат. +Процедура ДобавитьСертификатЦиклПослеОшибкиРасшифровки(ИнформацияОбОшибке, СтандартнаяОбработка, Контекст) Экспорт + + СтандартнаяОбработка = Ложь; + ЗаполнитьОшибкуРасшифровки(Контекст.ОшибкаНаКлиенте, Контекст.ОписаниеОшибки, + Контекст.ОписаниеПрограммы, КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); + + ДобавитьСертификатЦиклНачало(Контекст); + +КонецПроцедуры + +Процедура СообщитьОбОшибкеДобавленияСертификата(КонтекстДобавления) + + ОшибкаНаКлиенте = ?(КонтекстДобавления.Свойство("ОшибкаНаКлиенте"), + КонтекстДобавления.ОшибкаНаКлиенте, Новый Структура); + ОшибкаНаСервере = ?(КонтекстДобавления.Свойство("ОшибкаНаСервере"), + КонтекстДобавления.ОшибкаНаСервере, Новый Структура); + + ПоказатьОшибкуОбращенияКПрограмме(КонтекстДобавления.ЗаголовокФормы, + КонтекстДобавления.ЗаголовокОшибки, ОшибкаНаКлиенте, ОшибкаНаСервере, Новый Структура); + +КонецПроцедуры + +Процедура ЗаполнитьОшибкуПодписания(Ошибка, ОписаниеОшибки, ОписаниеПрограммы, ПредставлениеОшибки, ПустыеДанные) + + ТекущаяОшибка = Новый Структура; + ТекущаяОшибка.Вставить("Описание", ПредставлениеОшибки); + + Если Не ПустыеДанные Тогда + ТекущаяОшибка.Вставить("НастройкаПрограмм", Истина); + ТекущаяОшибка.Вставить("Инструкция", Истина); + КонецЕсли; + + Ошибка.Ошибки.Добавить(ТекущаяОшибка); + + Ошибка.ОписаниеОшибки = Ошибка.ОписаниеОшибки + Символы.ПС + Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось пройти проверку подписания с помощью программы %1 по причине: + |%2'"), + ОписаниеПрограммы.Наименование, + ПредставлениеОшибки); + +КонецПроцедуры + +Процедура ЗаполнитьОшибкуРасшифровки(Ошибка, ОписаниеОшибки, ОписаниеПрограммы, ПредставлениеОшибки) + + ТекущаяОшибка = Новый Структура; + ТекущаяОшибка.Вставить("Описание", ПредставлениеОшибки); + ТекущаяОшибка.Вставить("Инструкция", Истина); + ТекущаяОшибка.Вставить("НастройкаПрограмм", Истина); + + Ошибка.Ошибки.Добавить(ТекущаяОшибка); + + Ошибка.ОписаниеОшибки = Ошибка.ОписаниеОшибки + Символы.ПС + Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось пройти проверку расшифровки с помощью программы %1 по причине: + |%2'"), + ОписаниеПрограммы.Наименование, + ПредставлениеОшибки); + +КонецПроцедуры + #КонецОбласти + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйКлиентСервер/Module.bsl b/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйКлиентСервер/Module.bsl index 3c47abb9a..a1b982b86 100644 --- a/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйКлиентСервер/Module.bsl @@ -236,6 +236,20 @@ КонецФункции +// Только для внутреннего использования. +Функция ТекстОшибкиСервисаСертификатНедействителен() Экспорт + + Возврат НСтр("ru = 'Облачный сервис сообщил, что сертификат недействителен.'"); + +КонецФункции + +// Только для внутреннего использования. +Функция ТекстОшибкиСервисаПодписьНедействительна() Экспорт + + Возврат НСтр("ru = 'Облачный сервис сообщил, что подпись недействительна.'"); + +КонецФункции + // Только для внутреннего использования. Функция ТипХранилищаДляПоискаСертификата(ТолькоВЛичномХранилище) Экспорт @@ -253,7 +267,24 @@ // Только для внутреннего использования. Процедура ДобавитьСвойстваСертификатов(Таблица, МассивСертификатов, БезОтбора, - ДобавкаВремени, ТекущаяДатаСеанса, ТолькоОтпечатки = Ложь, ВОблачномСервисе = Ложь) Экспорт + ДобавкаВремени, ТекущаяДатаСеанса, Параметры = Неопределено) Экспорт + + ТолькоОтпечатки = Ложь; + ВОблачномСервисе = Ложь; + МодульЛокализации = Неопределено; + Если Параметры <> Неопределено Тогда + + Если Параметры.Свойство("ТолькоОтпечатки") Тогда + ТолькоОтпечатки = Параметры.ТолькоОтпечатки; + КонецЕсли; + Если Параметры.Свойство("ВОблачномСервисе") Тогда + ВОблачномСервисе = Параметры.ВОблачномСервисе; + КонецЕсли; + Если Параметры.Свойство("МодульЛокализации") Тогда + МодульЛокализации = Параметры.МодульЛокализации; + КонецЕсли; + + КонецЕсли; Если ТолькоОтпечатки Тогда ОтпечаткиУжеДобавленныхСертификатов = Таблица; @@ -263,8 +294,6 @@ НаСервере = ТипЗнч(Таблица) <> Тип("Массив"); КонецЕсли; - МодульЛокализации = МодульЛокализации(); - Для Каждого ТекущийСертификат Из МассивСертификатов Цикл Отпечаток = Base64Строка(ТекущийСертификат.Отпечаток); ДатыСертификата = ДатыСертификата(ТекущийСертификат, ДобавкаВремени); @@ -316,21 +345,6 @@ КонецПроцедуры -Функция МодульЛокализации() - -#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда - Если ЭлектроннаяПодписьСлужебныйПовтИсп.ОбщиеНастройки().ЗаявлениеНаВыпускСертификатаДоступно Тогда - Возврат ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодписьЛокализацияКлиентСервер"); - КонецЕсли; -#Иначе - Если СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиента().ЭлектроннаяПодпись.ОбщиеНастройки.ЗаявлениеНаВыпускСертификатаДоступно Тогда - Возврат ОбщегоНазначенияКлиент.ОбщийМодуль("ЭлектроннаяПодписьЛокализацияКлиентСервер"); - КонецЕсли; -#КонецЕсли - Возврат Неопределено; - -КонецФункции - // Только для внутреннего использования. Процедура ДобавитьОтпечаткиСертификатов(Массив, МассивСертификатов, ДобавкаВремени, ТекущаяДатаСеанса) Экспорт @@ -488,16 +502,16 @@ КонецФункции // См. ЭлектроннаяПодписьКлиент.ПредставлениеСертификата. -Функция ПредставлениеСертификата(Сертификат, ДобавкаВремени, МодульЛокализации) Экспорт +Функция ПредставлениеСертификата(Сертификат, ДобавкаВремени, МодульЭлектроннаяПодписьЛокализацияКлиентСервер) Экспорт Представление = ""; - Если МодульЛокализации <> Неопределено Тогда - Представление = МодульЛокализации.ПредставлениеСертификата(Сертификат, ДобавкаВремени); + Если МодульЭлектроннаяПодписьЛокализацияКлиентСервер <> Неопределено Тогда + Представление = МодульЭлектроннаяПодписьЛокализацияКлиентСервер.ПредставлениеСертификата(Сертификат, ДобавкаВремени); КонецЕсли; Если ПустаяСтрока(Представление) Тогда ДатыСертификата = ДатыСертификата(Сертификат, ДобавкаВремени); Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1, до %2'"), - ПредставлениеСубъекта(Сертификат, МодульЛокализации), + ПредставлениеСубъекта(Сертификат, МодульЭлектроннаяПодписьЛокализацияКлиентСервер), Формат(ДатыСертификата.ДатаОкончания, "ДФ=MM.yyyy")); КонецЕсли; Возврат Представление; @@ -505,14 +519,14 @@ КонецФункции // См. ЭлектроннаяПодписьКлиент.ПредставлениеСубъекта. -Функция ПредставлениеСубъекта(Сертификат, МодульЛокализации) Экспорт +Функция ПредставлениеСубъекта(Сертификат, МодульЭлектроннаяПодписьЛокализацияКлиентСервер) Экспорт Представление = ""; - Если МодульЛокализации <> Неопределено Тогда - Представление = МодульЛокализации.ПредставлениеСубъекта(Сертификат); + Если МодульЭлектроннаяПодписьЛокализацияКлиентСервер <> Неопределено Тогда + Представление = МодульЭлектроннаяПодписьЛокализацияКлиентСервер.ПредставлениеСубъекта(Сертификат); КонецЕсли; Если ПустаяСтрока(Представление) Тогда - Субъект = СвойстваСубъектаСертификата(Сертификат, МодульЛокализации); + Субъект = СвойстваСубъектаСертификата(Сертификат, МодульЭлектроннаяПодписьЛокализацияКлиентСервер); Если ЗначениеЗаполнено(Субъект.ОбщееИмя) Тогда Представление = Субъект.ОбщееИмя; КонецЕсли; @@ -522,9 +536,9 @@ КонецФункции // См. ЭлектроннаяПодписьКлиент.ПредставлениеИздателя. -Функция ПредставлениеИздателя(Сертификат, МодульЛокализации) Экспорт +Функция ПредставлениеИздателя(Сертификат, МодульЭлектроннаяПодписьЛокализацияКлиентСервер) Экспорт - Издатель = СвойстваИздателяСертификата(Сертификат, МодульЛокализации); + Издатель = СвойстваИздателяСертификата(Сертификат, МодульЭлектроннаяПодписьЛокализацияКлиентСервер); Представление = ""; @@ -548,16 +562,16 @@ КонецФункции // См. ЭлектроннаяПодписьКлиент.СвойстваСертификата. -Функция СвойстваСертификата(Сертификат, ДобавкаВремени, МодульЛокализации) Экспорт +Функция СвойстваСертификата(Сертификат, ДобавкаВремени, МодульЭлектроннаяПодписьЛокализацияКлиентСервер) Экспорт ДатыСертификата = ДатыСертификата(Сертификат, ДобавкаВремени); Свойства = Новый Структура; Свойства.Вставить("Отпечаток", Base64Строка(Сертификат.Отпечаток)); Свойства.Вставить("СерийныйНомер", Сертификат.СерийныйНомер); - Свойства.Вставить("Представление", ПредставлениеСертификата(Сертификат, ДобавкаВремени, МодульЛокализации)); - Свойства.Вставить("КомуВыдан", ПредставлениеСубъекта(Сертификат, МодульЛокализации)); - Свойства.Вставить("КемВыдан", ПредставлениеИздателя(Сертификат, МодульЛокализации)); + Свойства.Вставить("Представление", ПредставлениеСертификата(Сертификат, ДобавкаВремени, МодульЭлектроннаяПодписьЛокализацияКлиентСервер)); + Свойства.Вставить("КомуВыдан", ПредставлениеСубъекта(Сертификат, МодульЭлектроннаяПодписьЛокализацияКлиентСервер)); + Свойства.Вставить("КемВыдан", ПредставлениеИздателя(Сертификат, МодульЭлектроннаяПодписьЛокализацияКлиентСервер)); Свойства.Вставить("ДатаНачала", ДатыСертификата.ДатаНачала); Свойства.Вставить("ДатаОкончания", ДатыСертификата.ДатаОкончания); Свойства.Вставить("ДействителенДо", ДатыСертификата.ДатаОкончания); @@ -601,7 +615,7 @@ КонецПроцедуры // См. ЭлектроннаяПодписьКлиент.СвойстваСубъектаСертификата. -Функция СвойстваСубъектаСертификата(Сертификат, МодульЛокализации) Экспорт +Функция СвойстваСубъектаСертификата(Сертификат, МодульЭлектроннаяПодписьЛокализацияКлиентСервер) Экспорт Субъект = Сертификат.Субъект; @@ -649,8 +663,8 @@ Свойства.ЭлектроннаяПочта = ПодготовитьСтроку(Субъект.E); КонецЕсли; - Если МодульЛокализации <> Неопределено Тогда - РасширенныеСвойства = МодульЛокализации.РасширенныеСвойстваСубъектаСертификата(Субъект); + Если МодульЭлектроннаяПодписьЛокализацияКлиентСервер <> Неопределено Тогда + РасширенныеСвойства = МодульЭлектроннаяПодписьЛокализацияКлиентСервер.РасширенныеСвойстваСубъектаСертификата(Субъект); ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(Свойства, РасширенныеСвойства, Истина); КонецЕсли; @@ -659,7 +673,7 @@ КонецФункции // См. ЭлектроннаяПодписьКлиент.СвойстваИздателяСертификата. -Функция СвойстваИздателяСертификата(Сертификат, МодульЛокализации) Экспорт +Функция СвойстваИздателяСертификата(Сертификат, МодульЭлектроннаяПодписьЛокализацияКлиентСервер) Экспорт Издатель = Сертификат.Издатель; @@ -705,8 +719,8 @@ Свойства.ЭлектроннаяПочта = ПодготовитьСтроку(Издатель.E); КонецЕсли; - Если МодульЛокализации <> Неопределено Тогда - РасширенныеСвойства = МодульЛокализации.РасширенныеСвойстваИздателяСертификата(Издатель); + Если МодульЭлектроннаяПодписьЛокализацияКлиентСервер <> Неопределено Тогда + РасширенныеСвойства = МодульЭлектроннаяПодписьЛокализацияКлиентСервер.РасширенныеСвойстваИздателяСертификата(Издатель); ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(Свойства, РасширенныеСвойства, Истина); КонецЕсли; @@ -735,6 +749,63 @@ КонецФункции +// См. ЭлектроннаяПодписьКлиент.ПараметрыCMS. +Функция ПараметрыCMS() Экспорт + + Параметры = Новый Структура; + + Параметры.Вставить("ТипПодписи", "CAdES-BES"); + Параметры.Вставить("Открепленная", Ложь); + + Возврат Параметры; + +КонецФункции + +Функция ПараметрыКомпонентыCMSSign(ПараметрыCMS, ОписаниеДанных) Экспорт + + ПараметрыКомпоненты = Новый Структура; + + Если ТипЗнч(ОписаниеДанных) = Тип("Строка") + И ЭтоАдресВременногоХранилища(ОписаниеДанных) Тогда + + Данные = ПолучитьИзВременногоХранилища(ОписаниеДанных); + Иначе + Данные = ОписаниеДанных; + КонецЕсли; + + Если ПараметрыCMS.ТипПодписи = "CAdES-BES" Тогда + ПараметрыКомпоненты.Вставить("ТипПодписи", 0); + Иначе + ВызватьИсключение НСтр("ru = 'Некорректный параметр ТипПодписи метода CMSSign компоненты XMLDSig.'"); + КонецЕсли; + + Если ТипЗнч(Данные) = Тип("Строка") Тогда + ПараметрыКомпоненты.Вставить("ТипВходныхДанных", 0); + ПараметрыКомпоненты.Вставить("Данные", Данные); + + ИначеЕсли ТипЗнч(Данные) = Тип("ДвоичныеДанные") Тогда + ПараметрыКомпоненты.Вставить("ТипВходныхДанных", 128); + ПараметрыКомпоненты.Вставить("Данные", + СтрСоединить(СтрРазделить(Base64Строка(Данные), Символы.ПС + Символы.ВК, Ложь))); + Иначе + ВызватьИсключение НСтр("ru = 'Некорректный параметр ТипВходныхДанных метода CMSSign компоненты XMLDSig.'"); + КонецЕсли; + + Если ТипЗнч(ПараметрыCMS.Открепленная) = Тип("Булево") Тогда + ПараметрыКомпоненты.Вставить("Открепленная", ПараметрыCMS.Открепленная); + Иначе + ВызватьИсключение НСтр("ru = 'Некорректный параметр Открепленная метода CMSSign компоненты XMLDSig.'"); + КонецЕсли; + + // 0 - РежимВключенияСертификатовКриптографии.НеВключать. + // 1 - РежимВключенияСертификатовКриптографии.ВключатьСертификатСубъекта. + // 17 - РежимВключенияСертификатовКриптографии.ВключатьПолнуюЦепочку. + ПараметрыКомпоненты.Вставить("ВключениеСертификатовВПодпись", 1); + + Возврат ПараметрыКомпоненты; + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Вспомогательные процедуры и функции. diff --git a/SSL/src/CommonPictures/КоллекцияВажностьПроблемВеденияУчета/Picture.zip b/SSL/src/CommonPictures/КоллекцияВажностьПроблемВеденияУчета/Picture.zip new file mode 100644 index 000000000..11a6ee01a 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..cde348c45 --- /dev/null +++ b/SSL/src/CommonPictures/КоллекцияВажностьПроблемВеденияУчета/КоллекцияВажностьПроблемВеденияУчета.mdo @@ -0,0 +1,8 @@ + + + КоллекцияВажностьПроблемВеденияУчета + + ru + Коллекция важность проблем ведения учета + + diff --git a/SSL/src/CommonPictures/ПолезныйСоветКонтрольВеденияУчета/Picture.zip b/SSL/src/CommonPictures/ПолезныйСоветКонтрольВеденияУчета/Picture.zip new file mode 100644 index 000000000..7c4c9fe53 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..72fe859b4 --- /dev/null +++ b/SSL/src/CommonPictures/ПолезныйСоветКонтрольВеденияУчета/ПолезныйСоветКонтрольВеденияУчета.mdo @@ -0,0 +1,8 @@ + + + ПолезныйСоветКонтрольВеденияУчета + + ru + Полезный совет контроль ведения учета + + diff --git a/SSL/src/CommonTemplates/ИнструкцияПоСозданиюФаксимильнойПодписиИПечати/Template.mxlx b/SSL/src/CommonTemplates/ИнструкцияПоСозданиюФаксимильнойПодписиИПечати/Template.mxlx index 8a887b19b..973444c60 100644 --- a/SSL/src/CommonTemplates/ИнструкцияПоСозданиюФаксимильнойПодписиИПечати/Template.mxlx +++ b/SSL/src/CommonTemplates/ИнструкцияПоСозданиюФаксимильнойПодписиИПечати/Template.mxlx @@ -3685,7 +3685,7 @@ 0 - iVBORw0KGgoAAAANSUhEUgAABEIAAAR+CAIAAABbGAf4AAAAAXNSR0IArs4c6QAA + iVBORw0KGgoAAAANSUhEUgAABEIAAAR+CAIAAABbGAf4AAAAAXNSR0IArs4c6QAA AARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAP+lSURBVHhe7P0J YFXlve//hzEhgQQyMScIBgmTCqFqBWwrnKrYHgtqT3HoeBU9/9tqe/8/teq93lOt eu+t2p7frUNt7XGgpwraQQQFJ8CRBJEpSAgkYcycQBISSOD32fu7WN3sJDs7E2Tt diff --git a/SSL/src/CommonTemplates/КомпонентаПоискаСтрок/Template.addin b/SSL/src/CommonTemplates/КомпонентаПоискаСтрок/Template.addin index 006f96afd..50129a984 100644 Binary files a/SSL/src/CommonTemplates/КомпонентаПоискаСтрок/Template.addin and b/SSL/src/CommonTemplates/КомпонентаПоискаСтрок/Template.addin differ diff --git a/SSL/src/Configuration/Configuration.mdo b/SSL/src/Configuration/Configuration.mdo index abf2d380b..b616a47c3 100644 --- a/SSL/src/Configuration/Configuration.mdo +++ b/SSL/src/Configuration/Configuration.mdo @@ -1,17 +1,17 @@ - + БиблиотекаСтандартныхПодсистем ru Библиотека стандартных подсистем, редакция 3.1 - - - - - - - + + + + + + + ManagedApplication PersonalComputer Russian @@ -19,7 +19,7 @@ Role.АдминистраторСистемы Role.ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок Фирма "1С" - 3.1.1.151 + 3.1.2.150 http://downloads.v8.1c.ru/tmplts/ true @@ -42,7 +42,6 @@ ru Библиотека стандартных подсистем, редакция 3.1 - ru @@ -75,38 +74,52 @@ StyleItem.ВидДняПроизводственногоКалендаряПредпраздничныйЦвет StyleItem.ВидДняПроизводственногоКалендаряРабочийЦвет StyleItem.ВидДняПроизводственногоКалендаряСубботаЦвет + StyleItem.ВладелецФайловШрифт StyleItem.ВыполненнаяЗадача StyleItem.ГиперссылкаЦвет + StyleItem.ГиперссылкаШрифт + StyleItem.ГруппаВариантовОтчетовВажнаяШрифт + StyleItem.ГруппаВариантовОтчетовОбычнаяШрифт StyleItem.ГруппаВариантовОтчетовЦвет StyleItem.ГруппаВариантовОтчетовЦвет82 StyleItem.ДатаГрафикаИзмененнаяФон StyleItem.ДобавленныйРеквизитФон StyleItem.ЗаблокированныйРеквизитЦвет StyleItem.ЗавершенныйБизнесПроцесс + StyleItem.ЗаголовокГруппировкиОтчетаОДвиженияхДокументаШрифт + StyleItem.ЗаголовокГруппыШрифт StyleItem.ЗаголовокДелаЦвет StyleItem.ЗаголовокУдаленногоРеквизитаФон + StyleItem.ЗаголовокУдаленногоРеквизитаШрифт StyleItem.ЗапрещенноеПравоДоступа + StyleItem.ЗаявлениеНаВыпускСертификатаЗаголовокКлючевогоПоляШрифт StyleItem.ИзмененноеЗначениеРеквизитаФон StyleItem.ИзмененноеЗначениеРеквизитаЦвет StyleItem.ИтогиФонГруппы + StyleItem.КомандаПомощникаНастройкиСинхронизацииВажнаяШрифт + StyleItem.КомандаПомощникаНастройкиСинхронизацииОбычнаяШрифт StyleItem.КонтактнаяИнформацияСРедактированиемВДиалогеЦвет StyleItem.МоиВариантыОтчетовЦвет StyleItem.НепринятаяВерсия StyleItem.НеПринятыеКИсполнениюЗадачи StyleItem.НеСтартованныйБизнесПроцесс + StyleItem.ОсновнойЭлементСписка StyleItem.ОшибкаПолнотекстовыйПоискФон StyleItem.ПользовательВыбранный StyleItem.ПоясняющийОшибкуТекст StyleItem.ПоясняющийТекст StyleItem.ПросроченныеДанныеЦвет + StyleItem.РазделВариантовОтчетовШрифт StyleItem.РезультатУспехЦвет StyleItem.РольБезИсполнителей StyleItem.СкрытыйВариантОтчетаЦвет StyleItem.СобытиеОтказ StyleItem.ТекстЗапрещеннойЯчейкиЦвет - StyleItem.УдаленныйДополнительныйРеквизитШрифт + StyleItem.ТекущиеДелаЗаголовокДочернегоДела + StyleItem.ТекущиеДелаЗаголовокРазделаШрифт StyleItem.УдаленныйРеквизитФон StyleItem.ФайлЗанятыйТекущимПользователем + StyleItem.ФонРезультатовПоиска StyleItem.ФонУправляющегоПоля StyleItem.ЦветПустойГиперссылки StyleItem.ЦветРазделаПанелиФункций @@ -208,6 +221,7 @@ CommonPicture.ИсторияИзменений CommonPicture.Количество CommonPicture.КоличествоРассмотрено + CommonPicture.КоллекцияВажностьПроблемВеденияУчета CommonPicture.КоллекцияВариантыВажности CommonPicture.КоллекцияВидыАктивныхПользователей CommonPicture.КоллекцияВидыСобытийЖурналаРегистрации @@ -294,6 +308,7 @@ CommonPicture.ПозвонитьИлиОтправитьSMS CommonPicture.ПоказатьОтличия CommonPicture.ПоказатьТолькоВыбранныеРоли + CommonPicture.ПолезныйСоветКонтрольВеденияУчета CommonPicture.ПолужирноеНачертание CommonPicture.ПользовательскийМакетУдалить CommonPicture.ПоляИСортировки @@ -436,6 +451,8 @@ SessionParameter.ДатаОбновленияПовторноИспользуемыхЗначенийМРО SessionParameter.ДействующиеДатыЗапретаИзменения SessionParameter.ИдентификаторыТаблицСОтдельнымиНастройкамиПрав + SessionParameter.ИнтерактивнаяПроверкаЗаполненияКонтактнойИнформации + SessionParameter.ИнтерактивнаяПроверкаЗаполненияСвойств SessionParameter.КлючДанныхПовторногоИспользования SessionParameter.КомментарийЗамераВремени SessionParameter.ОбластьДанныхЗначение @@ -444,6 +461,7 @@ SessionParameter.ОбщиеПараметрыШаблоновОграниченияДоступа SessionParameter.ОграничениеДоступаНаУровнеЗаписейИспользуется SessionParameter.ОграничениеДоступаНаУровнеЗаписейУниверсально + SessionParameter.ОсновнойЯзык SessionParameter.ОтключениеОбновленияКлючейДоступа SessionParameter.ОтмененныеДлительныеОперации SessionParameter.ОшибкаРасхожденияВерсийПриПолученииДанных @@ -467,6 +485,7 @@ SessionParameter.СпискиСОграничениемЧерезКлючиДоступаГруппДоступа SessionParameter.СпискиСОграничениемЧерезКлючиДоступаПользователей SessionParameter.СпискиСОтключеннымОграничениемЧтения + SessionParameter.СчетчикПроблемВеденияУчета SessionParameter.ТаблицыРасширенийСОграничениемДоступа SessionParameter.ТаблицыСОтдельнымиНастройкамиПрав SessionParameter.ТекущийВнешнийПользователь @@ -552,6 +571,7 @@ Role.ЧтениеОтветовНаВопросыАнкет Role.ЧтениеРассылокОтчетов Role.ЧтениеРезультатовПроверкиУчета + Role.ЧтениеУчетныхЗаписейЭлектроннойПочты Role.ЧтениеШаблоновСообщений CommonTemplate.ИнструкцияКакВыполнитьУстановкуОбновленияВручную CommonTemplate.ИнструкцияПоСозданиюФаксимильнойПодписиИПечати @@ -606,6 +626,7 @@ CommonModule.ВзаимодействияКлиентСервер CommonModule.ВзаимодействияКлиентСерверПереопределяемый CommonModule.ВзаимодействияКлиентСерверСлужебныйПовтИсп + CommonModule.ВзаимодействияЛокализация CommonModule.ВзаимодействияПереопределяемый CommonModule.ВзаимодействияСобытия CommonModule.ВнешниеКомпонентыВМоделиСервисаСлужебный @@ -685,14 +706,18 @@ CommonModule.КалендарныеГрафикиПереопределяемый CommonModule.КалендарныеГрафикиСлужебный CommonModule.КонтрольВеденияУчета + CommonModule.КонтрольВеденияУчетаВызовСервера + CommonModule.КонтрольВеденияУчетаГлобальный CommonModule.КонтрольВеденияУчетаКлиент CommonModule.КонтрольВеденияУчетаПереопределяемый CommonModule.КонтрольВеденияУчетаСлужебный CommonModule.КонтрольВеденияУчетаСлужебныйКлиент CommonModule.КонтрольВеденияУчетаСлужебныйПовтИсп - CommonModule.ЛокализацияКлиент - CommonModule.ЛокализацияКлиентСервер - CommonModule.ЛокализацияСервер + CommonModule.МультиязычностьКлиент + CommonModule.МультиязычностьКлиентСервер + CommonModule.МультиязычностьПереопределяемый + CommonModule.МультиязычностьПовтИсп + CommonModule.МультиязычностьСервер CommonModule.НапоминанияПользователя CommonModule.НапоминанияПользователяВызовСервера CommonModule.НапоминанияПользователяГлобальный @@ -846,6 +871,7 @@ CommonModule.РаботаСПочтовымиСообщениямиПереопределяемый CommonModule.РаботаСПочтовымиСообщениямиСлужебный CommonModule.РаботаСФайлами + CommonModule.РаботаСФайламиВТомахСлужебный CommonModule.РаботаСФайламиКлиент CommonModule.РаботаСФайламиКлиентПереопределяемый CommonModule.РаботаСФайламиКлиентСервер @@ -885,6 +911,9 @@ CommonModule.СоединенияИБКлиент CommonModule.СоединенияИБКлиентСервер CommonModule.СоединенияИБПереопределяемый + CommonModule.СозданиеНаОсновании + CommonModule.СозданиеНаОснованииПереопределяемый + CommonModule.СозданиеНаОснованииПовтИсп CommonModule.СообщенияАдминистрированиеОбменаДаннымиКонтрольИнтерфейс CommonModule.СообщенияАдминистрированиеОбменаДаннымиКонтрольОбработчикСообщения_2_1_2_1 CommonModule.СообщенияАдминистрированиеОбменаДаннымиУправлениеИнтерфейс @@ -988,6 +1017,10 @@ CommonModule.ЭлектроннаяПодписьСлужебныйКлиент CommonModule.ЭлектроннаяПодписьСлужебныйКлиентСервер CommonModule.ЭлектроннаяПодписьСлужебныйПовтИсп + CommonAttribute.КомментарийЯзык1 + CommonAttribute.КомментарийЯзык2 + CommonAttribute.НаименованиеЯзык1 + CommonAttribute.НаименованиеЯзык2 CommonAttribute.ОбластьДанныхВспомогательныеДанные CommonAttribute.ОбластьДанныхОсновныеДанные ExchangePlan.ОбновлениеИнформационнойБазы @@ -1012,7 +1045,8 @@ XDTOPackage.EnterpriseData_1_3_20 XDTOPackage.EnterpriseData_1_4_20 XDTOPackage.EnterpriseData_1_5_20 - XDTOPackage.EnterpriseData_1_6_20 + XDTOPackage.EnterpriseData_1_6_21 + XDTOPackage.EnterpriseData_1_7_4 XDTOPackage.EnterpriseDataExchange_1_0_1_1 XDTOPackage.ExchangeMessage XDTOPackage.Patch @@ -1052,6 +1086,7 @@ EventSubscription.ВыполнитьДействияПослеПолученияДанныхУзлаВРаспределеннойИнформационнойБазе EventSubscription.ВыполнитьДействияПриЗаписиПрисоединенногоФайла EventSubscription.ДополнительныеОтчетыИОбработкиПередУдалениемИдентификатораОбъектаМетаданных + EventSubscription.ДополнительныеРеквизитыОбработкаПроверкиЗаполнения EventSubscription.ЗаписатьВерсиюОбъекта EventSubscription.ЗаписатьВСписокБизнесПроцессов EventSubscription.ЗаписатьЗависимыеНаборыЗначенийДоступа @@ -1064,10 +1099,12 @@ EventSubscription.ЗапретитьУдалениеПредопределенныхЭлементов EventSubscription.ЗарегистрироватьИзмененияОбщихДанныхУзлов EventSubscription.ЗарегистрироватьИзмененияФильтровОграниченияМиграцииДанных + EventSubscription.КонтактнаяИнформацияОбработкаПроверкиЗаполнения EventSubscription.КонтрольНеразделенныхНаборовЗаписейПриЗаписи EventSubscription.КонтрольНеразделенныхОбъектовПриЗаписи EventSubscription.ОбновитьГруппыВладельцевНастроекПрав EventSubscription.ОбновитьГруппыЗначенийДоступа + EventSubscription.ОбновитьЗначенияГруппДоступа EventSubscription.ОбновитьКонтактнуюИнформацию EventSubscription.ОбновитьПредставлениеВнешнегоПользователя EventSubscription.ОбновитьСостояниеБизнесПроцесса @@ -1077,6 +1114,7 @@ EventSubscription.ОбработкаПроверкиЗаполненияПрисоединенногоФайла EventSubscription.ОтключитьАвтоматическуюСинхронизациюДанных EventSubscription.ОтключитьИспользованиеПланаОбмена + EventSubscription.ОтключитьРассылкиПередУдалениемТипаПолучателейРассылки EventSubscription.ОтменитьОтправкуДанныхУзлаВРаспределеннойИнформационнойБазе EventSubscription.ОчиститьИнформациюОбАвтореВерсии EventSubscription.ОчиститьСсылкиНаУзелИнформационнойБазы @@ -1172,11 +1210,11 @@ FunctionalOption.ИспользоватьДополнительныеОбработкиСозданияСвязанныхОбъектов FunctionalOption.ИспользоватьДополнительныеОтчетыИОбработки FunctionalOption.ИспользоватьДополнительныеРеквизитыИСведения + FunctionalOption.ИспользоватьДополнительныйЯзык1 + FunctionalOption.ИспользоватьДополнительныйЯзык2 FunctionalOption.ИспользоватьЗаметки FunctionalOption.ИспользоватьНапоминанияПользователя FunctionalOption.ИспользоватьНесколькоПроизводственныхКалендарей - FunctionalOption.ИспользоватьОбщиеДополнительныеЗначения - FunctionalOption.ИспользоватьОбщиеДополнительныеРеквизитыИСведения FunctionalOption.ИспользоватьОнлайнПоддержку FunctionalOption.ИспользоватьОтправкуSMSВШаблонахСообщений FunctionalOption.ИспользоватьПодчиненныеБизнесПроцессы @@ -1223,6 +1261,7 @@ DefinedType.ВерсионируемыеДанные DefinedType.ВерсионируемыеДанныеОбъект DefinedType.ВладелецВнешнихЗначенийВНаборахЗначенийДоступаОбъект + DefinedType.ВладелецГрафикаРаботы DefinedType.ВладелецДополнительныхСведений DefinedType.ВладелецЗначенийКлючейДоступа DefinedType.ВладелецЗначенийКлючейДоступаДокумент @@ -1313,6 +1352,7 @@ CommonCommand.РедактируемыеФайлы CommonCommand.РолиИИсполнителиЗадач CommonCommand.СведенияОПользователе + CommonCommand.СвязанныеДокументы CommonCommand.СвязатьсяСоСпециалистомОнлайнПоддержки CommonCommand.СинхронизацияДанныхВМоделиСервиса CommonCommand.Синхронизировать @@ -1325,10 +1365,9 @@ CommonCommand.СозданиеСвязанныхОбъектов CommonCommand.СоздатьЗаметкуПоПредмету CommonCommand.СоставОтправляемыхДанных - CommonCommand.СтруктураПодчиненности CommonCommand.СценарииСинхронизации CommonCommand.УдалитьНастройкуСинхронизации - CommonCommand.УстановитьРасширениеРаботыСФайлами + CommonCommand.УстановитьРасширениеДляРаботыС1СПредприятием CommonCommand.ФайлыВТоме CommandGroup.Взаимодействия CommandGroup.Информация @@ -1350,6 +1389,8 @@ Constant.ДатаУведомленияОНовыхЗадачах Constant.ДетализироватьОбновлениеИБВЖурналеРегистрации Constant.ДнейДоСкрытияПерсональныхДанныхСубъектов + Constant.ДополнительныйЯзык1 + Constant.ДополнительныйЯзык2 Constant.ЗаголовокСистемы Constant.ЗагрузитьСообщениеОбменаДанными Constant.ЗапретитьОтображениеНебезопасногоСодержимогоВПисьмах @@ -1372,18 +1413,18 @@ Constant.ИспользоватьДатыЗапретаИзменения Constant.ИспользоватьДополнительныеОтчетыИОбработки Constant.ИспользоватьДополнительныеРеквизитыИСведения + Constant.ИспользоватьДополнительныйЯзык1 + Constant.ИспользоватьДополнительныйЯзык2 Constant.ИспользоватьЗаметки Constant.ИспользоватьНапоминанияПользователя Constant.ИспользоватьНесколькоПроизводственныхКалендарей - Constant.ИспользоватьОбщиеДополнительныеЗначения - Constant.ИспользоватьОбщиеДополнительныеРеквизитыИСведения Constant.ИспользоватьОнлайнПоддержку Constant.ИспользоватьОтправкуSMSВШаблонахСообщений Constant.ИспользоватьПодчиненныеБизнесПроцессы Constant.ИспользоватьПолнотекстовыйПоиск Constant.ИспользоватьПочтовыйКлиент Constant.ИспользоватьПризнакРассмотрено - Constant.ИспользоватьПрофилиБезопасностиДляДОиО + Constant.ИспользоватьПрофилиБезопасностиДляДОО Constant.ИспользоватьПрочиеВзаимодействия Constant.ИспользоватьРазделениеПоОбластямДанных Constant.ИспользоватьСервисСклоненияMorpher @@ -1418,6 +1459,7 @@ Constant.НеИспользоватьРазделениеПоОбластямДанных Constant.ОграничиватьДоступНаУровнеЗаписей Constant.ОграничиватьДоступНаУровнеЗаписейУниверсально + Constant.ОсновнойЯзык Constant.ОтложенноеОбновлениеВГлавномУзлеЗавершеноУспешно Constant.ОтложенноеОбновлениеЗавершеноУспешно Constant.ОтправлятьПисьмаВФорматеHTML @@ -1427,6 +1469,7 @@ Constant.ПараметрыБлокировкиРаботыСВнешнимиРесурсами Constant.ПараметрыИтоговИАгрегатов Constant.ПараметрыРезервногоКопирования + Constant.ПараметрыХраненияФайловВИБ Constant.ПараметрыЦентраМониторинга Constant.ПервоеОбновлениеДоступаЗавершилось Constant.ПериодХраненияЗамеров @@ -1439,12 +1482,13 @@ Constant.ПровайдерSMS Constant.ПроверятьЭлектронныеПодписиНаСервере Constant.ПрофильБезопасностиИнформационнойБазы - Constant.РазрешитьВыполнениеДОИОРегламентнымиЗаданиямиВМоделиСервиса + Constant.РазрешитьВыполнениеДООРегламентнымиЗаданиямиВМоделиСервиса Constant.СведенияОБлокируемыхОбъектах Constant.СведенияОбОбновленииИБ Constant.СинхронизироватьДанныеСПриложениемВИнтернетеПриЗавершенииРаботыПрограммы Constant.СинхронизироватьДанныеСПриложениемВИнтернетеПриНачалеРаботыПрограммы Constant.СинхронизироватьФайлы + Constant.СоздаватьПодкаталогиСИменамиВладельцев Constant.СоздаватьЭлектронныеПодписиНаСервере Constant.СообщениеОбменаДаннымиИзГлавногоУзла Constant.СписокЗапрещенныхРасширений @@ -1452,6 +1496,7 @@ Constant.СписокРасширенийТекстовыхФайлов Constant.СписокРасширенийФайловOpenDocument Constant.СписокРасширенийФайловOpenDocumentОбластиДанных + Constant.СпособХраненияФайлов Constant.СтатусОбновленияКонфигурации Constant.УдалитьЛогинДоступаКСервисуMorpher Constant.ХранитьФайлыВТомахНаДиске @@ -1523,10 +1568,12 @@ CommonForm.ПриоритетОбновленияВОбластяхДанных CommonForm.ПустойРабочийСтол CommonForm.Расширения + CommonForm.РегиональныеНастройки CommonForm.РедактированиеГиперссылки CommonForm.РедактированиеДополнительныхСведений CommonForm.РедактированиеТабличногоДокумента CommonForm.РезультатПроверки + CommonForm.СвязанныеДокументы CommonForm.Сертификат CommonForm.СинхронизацияДанных CommonForm.Склонения @@ -1535,7 +1582,6 @@ CommonForm.СохранениеВместеСЭлектроннойПодписью CommonForm.СохранениеПечатнойФормы CommonForm.СравнениеТабличныхДокументов - CommonForm.СтруктураПодчиненности CommonForm.УстановкаВнешнейКомпонентыНевозможна CommonForm.УстановленныеИсправления CommonForm.УточнениеКонтактов @@ -1748,7 +1794,7 @@ DataProcessor.ОценкаПроизводительности DataProcessor.ПанельАдминистрированияБСП DataProcessor.ПанельАдминистрированияБСПВМоделиСервиса - DataProcessor.ПереносФайловВТома + DataProcessor.ПереносФайлов DataProcessor.ПодключениеОбсуждений DataProcessor.ПоискИУдалениеДублей DataProcessor.ПолнотекстовыйПоискВДанных @@ -1903,6 +1949,7 @@ InformationRegister.СостоянияОбменовДаннымиОбластейДанных InformationRegister.СостоянияПапокПисем InformationRegister.СостоянияПредметовВзаимодействий + InformationRegister.СостоянияПроверокВеденияУчета InformationRegister.СостоянияРассылокОтчетов InformationRegister.СостоянияУспешныхОбменовДанными InformationRegister.СостоянияУспешныхОбменовДаннымиОбластейДанных diff --git a/SSL/src/Configuration/Logo.png b/SSL/src/Configuration/Logo.png deleted file mode 100644 index 52f87233b..000000000 Binary files a/SSL/src/Configuration/Logo.png and /dev/null differ diff --git a/SSL/src/Configuration/ParentConfigurations.bin b/SSL/src/Configuration/ParentConfigurations.bin index 7915e18c1..e803c690c 100644 --- a/SSL/src/Configuration/ParentConfigurations.bin +++ b/SSL/src/Configuration/ParentConfigurations.bin @@ -1 +1 @@ -{6,1,1,33806513-adb7-457c-b41b-712a489d70c9,1,16910c0b-8e1f-42c6-ba12-42c9f2ccff44,"3.1.1.151","Фирма ""1С""","БиблиотекаСтандартныхПодсистем",5836,1,0,b23bb689-d49b-48a8-90bc-3a771764a3ec,b23bb689-d49b-48a8-90bc-3a771764a3ec,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,1983fe34-c984-4659-ba41-0e94504f8989,1983fe34-c984-4659-ba41-0e94504f8989,1,0,ec797c75-02c5-4cf5-9dd4-26cd46c99519,ec797c75-02c5-4cf5-9dd4-26cd46c99519,1,0,6fccdf59-fc99-4a2b-a144-fffe438a147c,6fccdf59-fc99-4a2b-a144-fffe438a147c,1,0,af8bd73a-d8e8-487d-8f36-d835ab10ea3a,af8bd73a-d8e8-487d-8f36-d835ab10ea3a,1,0,08a413ff-bebd-42e5-8ff3-2115746a0844,08a413ff-bebd-42e5-8ff3-2115746a0844,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,c56d2cc7-630a-441b-b23f-ba78c34849bd,c56d2cc7-630a-441b-b23f-ba78c34849bd,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,2fd1287d-d96d-4480-baf7-8815ae5ffbfb,2fd1287d-d96d-4480-baf7-8815ae5ffbfb,1,0,d8c58e53-b7b9-4426-bdfa-d0816adf8cc1,d8c58e53-b7b9-4426-bdfa-d0816adf8cc1,1,0,4009cb3a-6754-481f-911b-907558cea38a,4009cb3a-6754-481f-911b-907558cea38a,1,0,653a7fd8-91c7-49aa-aa63-45da087e0d0a,653a7fd8-91c7-49aa-aa63-45da087e0d0a,1,0,d7cf3981-cf63-4a21-868b-8175a7704a8f,d7cf3981-cf63-4a21-868b-8175a7704a8f,1,0,0ae93712-74e8-41c7-8f2d-4dfc8983697d,0ae93712-74e8-41c7-8f2d-4dfc8983697d,1,0,9e4dfdfa-ec05-4c9e-89bd-fc24f60f2678,9e4dfdfa-ec05-4c9e-89bd-fc24f60f2678,1,0,64f548c8-c1fc-434e-b3ee-5be367ead1db,64f548c8-c1fc-434e-b3ee-5be367ead1db,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,fa2a9ef2-00a1-44f4-a82c-6c7288dd62dc,fa2a9ef2-00a1-44f4-a82c-6c7288dd62dc,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,61e246f4-fe19-4377-8f69-fd1cb90e3f88,61e246f4-fe19-4377-8f69-fd1cb90e3f88,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,7cab0151-f86e-4ada-9ec6-e602749e34fc,7cab0151-f86e-4ada-9ec6-e602749e34fc,1,0,d9be359f-c5cb-4f3e-9ccd-61f38c6bbb26,d9be359f-c5cb-4f3e-9ccd-61f38c6bbb26,1,0,15b5979c-755b-480e-b00a-dcc95f62dfeb,15b5979c-755b-480e-b00a-dcc95f62dfeb,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,0da8a402-ea0f-488a-a087-77990e85a643,0da8a402-ea0f-488a-a087-77990e85a643,1,0,5e7ea635-f307-43cb-9aa7-2c99997b3c2d,5e7ea635-f307-43cb-9aa7-2c99997b3c2d,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,c7a8a88f-040a-47a6-8c93-7f3f01544760,c7a8a88f-040a-47a6-8c93-7f3f01544760,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,82b05859-4c4d-4d5a-a620-cc6aab10f527,82b05859-4c4d-4d5a-a620-cc6aab10f527,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,73cc5fea-597f-4490-9c62-b175fdc38fd3,73cc5fea-597f-4490-9c62-b175fdc38fd3,1,0,c2049ace-3095-4dd7-9cc0-7721118451ad,c2049ace-3095-4dd7-9cc0-7721118451ad,1,0,9ea7a191-38bb-40cc-8025-d34a5ed17c7c,9ea7a191-38bb-40cc-8025-d34a5ed17c7c,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,046e6f4f-3d92-4b20-b19f-fca608fa0f11,046e6f4f-3d92-4b20-b19f-fca608fa0f11,1,0,74bea66f-15bf-48de-9ff9-f9c35a8bf5cc,74bea66f-15bf-48de-9ff9-f9c35a8bf5cc,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,db6679c4-a647-471a-9f90-40248eb18db9,db6679c4-a647-471a-9f90-40248eb18db9,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,2522fce4-d121-482b-a39d-0c1a842d315e,2522fce4-d121-482b-a39d-0c1a842d315e,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,330a176f-5b61-41f5-84bb-b99a9439c2a0,330a176f-5b61-41f5-84bb-b99a9439c2a0,1,0,d1ba8620-c0c9-4281-afa6-9c9962c338d3,d1ba8620-c0c9-4281-afa6-9c9962c338d3,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,89574884-bce2-406d-9961-d1656b306eb8,89574884-bce2-406d-9961-d1656b306eb8,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,4b07cdb0-c32e-4751-b317-bee62b43f128,4b07cdb0-c32e-4751-b317-bee62b43f128,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,0093680b-c8bc-472d-8b0d-2e6565fc6c22,0093680b-c8bc-472d-8b0d-2e6565fc6c22,1,0,7fa6a20a-26e2-41ad-be66-a43b50d0bbcd,7fa6a20a-26e2-41ad-be66-a43b50d0bbcd,1,0,5f4456d6-ff0c-425e-9603-c099492d7a6f,5f4456d6-ff0c-425e-9603-c099492d7a6f,1,0,af7c417e-5c10-4146-bde1-40db86c5806f,af7c417e-5c10-4146-bde1-40db86c5806f,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,277ca641-e869-4fcd-8a79-54c451efbbdd,277ca641-e869-4fcd-8a79-54c451efbbdd,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,1220ce92-b964-4fb8-9db0-b4c8c6bdbdf7,1220ce92-b964-4fb8-9db0-b4c8c6bdbdf7,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,9883862f-c0eb-41fe-9374-05c6d72878bc,9883862f-c0eb-41fe-9374-05c6d72878bc,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,cafc6b5b-a76a-4b1b-9592-ba440f7bf34f,cafc6b5b-a76a-4b1b-9592-ba440f7bf34f,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,1328947f-91c3-43f4-a11e-f34893d987b3,1328947f-91c3-43f4-a11e-f34893d987b3,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,53ee3eb6-d2d1-4fb3-8a78-1fa4543850a1,53ee3eb6-d2d1-4fb3-8a78-1fa4543850a1,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,77de81f0-97c5-4751-9f38-f5785c7c45e0,77de81f0-97c5-4751-9f38-f5785c7c45e0,1,0,933cbafc-5667-4a91-8b1d-dca3d7662522,933cbafc-5667-4a91-8b1d-dca3d7662522,1,0,59acaca9-ed29-4927-bee6-287c91934690,59acaca9-ed29-4927-bee6-287c91934690,1,0,d7e4795a-3431-4f7d-9699-4241611adcf0,d7e4795a-3431-4f7d-9699-4241611adcf0,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,0732ab1c-b49a-49ed-8667-65f4427cc301,0732ab1c-b49a-49ed-8667-65f4427cc301,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,bd727741-ba99-484d-9d7d-2c2ad7ddd1a5,bd727741-ba99-484d-9d7d-2c2ad7ddd1a5,1,0,90327957-5bdc-4949-883c-9eb50f527b3e,90327957-5bdc-4949-883c-9eb50f527b3e,1,0,031980f5-60e8-426a-9907-3afff75a6b05,031980f5-60e8-426a-9907-3afff75a6b05,1,0,1a26f2d5-2465-484c-9311-12d9b3b92ae3,1a26f2d5-2465-484c-9311-12d9b3b92ae3,1,0,fd317d96-380e-4ee7-a25b-401e8521cc7a,fd317d96-380e-4ee7-a25b-401e8521cc7a,1,0,64837ad8-3055-4da3-a39c-0e7db38b6084,64837ad8-3055-4da3-a39c-0e7db38b6084,1,0,695cda1d-b816-4200-9a71-490078a9faa7,695cda1d-b816-4200-9a71-490078a9faa7,1,0,75fc5bea-e239-4de1-ad68-6454876e4b9f,75fc5bea-e239-4de1-ad68-6454876e4b9f,1,0,31ba33d4-5941-4b11-ae99-b15188bfef76,31ba33d4-5941-4b11-ae99-b15188bfef76,1,0,7142ae5b-ec7b-4a69-9c26-f51e05a4c270,7142ae5b-ec7b-4a69-9c26-f51e05a4c270,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,aebf163d-d8e8-492a-a973-8cb51982d475,aebf163d-d8e8-492a-a973-8cb51982d475,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,d9e98c14-9b07-406b-92c8-bec76165e028,d9e98c14-9b07-406b-92c8-bec76165e028,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,6c138ffd-057f-4f7d-af4d-1b1a589a9057,6c138ffd-057f-4f7d-af4d-1b1a589a9057,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,5ea4412e-0ce0-4176-917b-37817ed788e1,5ea4412e-0ce0-4176-917b-37817ed788e1,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,1a3eff9b-6598-4e11-9b8f-81249c53abec,1a3eff9b-6598-4e11-9b8f-81249c53abec,1,0,63c6cfad-124d-491a-829d-b298463c95e6,63c6cfad-124d-491a-829d-b298463c95e6,1,0,3da31d2f-24dd-469b-bd3b-073fa3b3d585,3da31d2f-24dd-469b-bd3b-073fa3b3d585,1,0,33b12dd8-7a86-4a51-bd3d-4911ec1ffde4,33b12dd8-7a86-4a51-bd3d-4911ec1ffde4,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,89cc9ae4-e933-4f4a-849f-48ef67b75819,89cc9ae4-e933-4f4a-849f-48ef67b75819,1,0,36e096be-ee28-437a-b8f2-c1e274c150e3,36e096be-ee28-437a-b8f2-c1e274c150e3,1,0,f6b69c2b-e32a-477f-9128-b61d8237290e,f6b69c2b-e32a-477f-9128-b61d8237290e,1,0,e14c0841-226c-4c79-bec9-cfc8d2c3a160,e14c0841-226c-4c79-bec9-cfc8d2c3a160,1,0,d05bbd02-9db3-4830-be9d-7080f3506e01,d05bbd02-9db3-4830-be9d-7080f3506e01,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,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,a5cc5ae2-be80-4957-8aca-9e477433dfcc,a5cc5ae2-be80-4957-8aca-9e477433dfcc,1,0,62fa393c-687c-49bf-8a25-81adc04430fb,62fa393c-687c-49bf-8a25-81adc04430fb,1,0,13fcf1e8-730e-436f-b316-6bcb8301f894,13fcf1e8-730e-436f-b316-6bcb8301f894,1,0,fa548f02-82e0-4897-89e8-0618ebf16919,fa548f02-82e0-4897-89e8-0618ebf16919,1,0,8c28a5b0-517f-48fe-9bde-5e611c319413,8c28a5b0-517f-48fe-9bde-5e611c319413,1,0,904e1209-91d8-49b1-b291-364ef728cbbf,904e1209-91d8-49b1-b291-364ef728cbbf,1,0,4a0d7cd7-8e43-4a1f-88b8-ffc376b38f7c,4a0d7cd7-8e43-4a1f-88b8-ffc376b38f7c,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,e000d04e-37eb-4d95-a833-b0a9b10ee0b9,e000d04e-37eb-4d95-a833-b0a9b10ee0b9,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,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,e6af9db4-b93f-422e-846c-e6c5fd33f992,e6af9db4-b93f-422e-846c-e6c5fd33f992,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,50f7effb-e051-49dd-8b56-0771dda350cc,50f7effb-e051-49dd-8b56-0771dda350cc,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,18363a37-28b0-488b-a7d6-54d3596d2a6d,18363a37-28b0-488b-a7d6-54d3596d2a6d,1,0,e5f401b5-4672-4529-a8dd-6d819f3f269c,e5f401b5-4672-4529-a8dd-6d819f3f269c,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,70d93c88-c9e9-4b8e-b8f3-ef07c665ab5d,70d93c88-c9e9-4b8e-b8f3-ef07c665ab5d,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,5e52dfe6-5a98-4a32-9429-5f44bf442367,5e52dfe6-5a98-4a32-9429-5f44bf442367,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,f987ca28-545b-4540-9e36-b0daa67dc3cb,f987ca28-545b-4540-9e36-b0daa67dc3cb,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,7ea3206a-2a16-460d-ad6d-849103f50bdb,7ea3206a-2a16-460d-ad6d-849103f50bdb,1,0,eb35bff2-8467-48fe-bf93-ece2aa40f506,eb35bff2-8467-48fe-bf93-ece2aa40f506,1,0,f26bdf61-8dc9-47e3-bc13-e6b7d8252ebd,f26bdf61-8dc9-47e3-bc13-e6b7d8252ebd,1,0,10302ca9-850c-4561-a774-d099c20b1919,10302ca9-850c-4561-a774-d099c20b1919,1,0,c62c30d6-ffac-43e0-bb20-25fa8eeb62fd,c62c30d6-ffac-43e0-bb20-25fa8eeb62fd,1,0,d693bfcf-e117-445b-b0e1-d895bc5227c4,d693bfcf-e117-445b-b0e1-d895bc5227c4,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,0508e7ab-3dd9-42b4-9542-089ce0656bbb,0508e7ab-3dd9-42b4-9542-089ce0656bbb,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,c382ee3a-d0a8-4ed8-ac88-5558b631f448,c382ee3a-d0a8-4ed8-ac88-5558b631f448,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,8e36227c-c0aa-43c4-93ad-e78701248fb1,8e36227c-c0aa-43c4-93ad-e78701248fb1,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,f78ffd16-5bd4-421a-99af-9cf5f126d960,f78ffd16-5bd4-421a-99af-9cf5f126d960,1,0,2bd23dd2-8107-410f-8137-3d022546594b,2bd23dd2-8107-410f-8137-3d022546594b,1,0,3f09badb-70bd-4996-822f-2e2e9524f09d,3f09badb-70bd-4996-822f-2e2e9524f09d,1,0,aca89232-c531-47ca-a82e-e7bfadd56674,aca89232-c531-47ca-a82e-e7bfadd56674,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,9b77e99b-b1d3-4368-a671-59e0ebba3f0e,9b77e99b-b1d3-4368-a671-59e0ebba3f0e,1,0,ad847998-6e50-4160-81fc-3b58ad68f202,ad847998-6e50-4160-81fc-3b58ad68f202,1,0,0e2d814a-cc9d-4f91-910d-bda54779e298,0e2d814a-cc9d-4f91-910d-bda54779e298,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,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,e9e242b7-0077-4c47-8f45-df50e7cc90cf,e9e242b7-0077-4c47-8f45-df50e7cc90cf,1,0,820383e1-9b95-4c0f-8464-722f1fe64ad5,820383e1-9b95-4c0f-8464-722f1fe64ad5,1,0,3d6cf2ab-29b2-45af-a6e2-8796284acf2d,3d6cf2ab-29b2-45af-a6e2-8796284acf2d,1,0,292bfe6b-703e-40cb-856d-abb470e6709f,292bfe6b-703e-40cb-856d-abb470e6709f,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,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,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,7e9c0fa3-128e-4c3f-a1f7-63cb88a1c0b1,7e9c0fa3-128e-4c3f-a1f7-63cb88a1c0b1,1,0,2ca8bca9-813a-4833-8ef0-a5e83f91c10f,2ca8bca9-813a-4833-8ef0-a5e83f91c10f,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,514e95b8-2fdd-46f7-89bf-7d1a3d9d6e1b,514e95b8-2fdd-46f7-89bf-7d1a3d9d6e1b,1,0,6ca91336-5ccd-4d0b-9602-53f4925c492d,6ca91336-5ccd-4d0b-9602-53f4925c492d,1,0,d853dd5f-d987-4cdb-82b5-5e40a5a5e449,d853dd5f-d987-4cdb-82b5-5e40a5a5e449,1,0,dc16c546-eecc-49fe-a401-e2e3987faa1f,dc16c546-eecc-49fe-a401-e2e3987faa1f,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,b0fca543-6951-4233-bdf6-58082b22252a,b0fca543-6951-4233-bdf6-58082b22252a,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,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,e07841ef-8392-4ceb-936d-fd160b3b03cd,e07841ef-8392-4ceb-936d-fd160b3b03cd,1,0,eee66f49-8954-4674-9e02-6bff6c332d30,eee66f49-8954-4674-9e02-6bff6c332d30,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,e7415ada-dd47-41f5-b4d5-7e77d1adad33,e7415ada-dd47-41f5-b4d5-7e77d1adad33,1,0,0bd85b79-cc32-4c1d-b629-567a1bdfac56,0bd85b79-cc32-4c1d-b629-567a1bdfac56,1,0,79c15db6-6066-4fe5-b30e-3196b6ca3d66,79c15db6-6066-4fe5-b30e-3196b6ca3d66,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,40cefda6-490e-4962-9747-94b823ea4ed7,40cefda6-490e-4962-9747-94b823ea4ed7,1,0,5fbd9a13-012d-4c36-b72c-da3bc4157cff,5fbd9a13-012d-4c36-b72c-da3bc4157cff,1,0,7e8d7d4f-98f7-4c81-94b1-f2d552b1ae5d,7e8d7d4f-98f7-4c81-94b1-f2d552b1ae5d,1,0,6aa6d14f-cd6c-413a-864e-d847d9ce120b,6aa6d14f-cd6c-413a-864e-d847d9ce120b,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,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,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,933ae96b-c69e-4396-bbfb-0daa81e529a4,933ae96b-c69e-4396-bbfb-0daa81e529a4,1,0,e1823be2-b646-4a1a-a9a9-c925a12c0586,e1823be2-b646-4a1a-a9a9-c925a12c0586,1,0,909e56e3-981f-430b-b775-18c70b3549e7,909e56e3-981f-430b-b775-18c70b3549e7,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,8d9d2284-e592-44c5-93bb-247037ab6b95,8d9d2284-e592-44c5-93bb-247037ab6b95,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,c4fe10b6-d025-4736-be23-3113bd7fe7b4,c4fe10b6-d025-4736-be23-3113bd7fe7b4,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,a9ae364f-b668-4fb4-b976-f227951ffb6b,a9ae364f-b668-4fb4-b976-f227951ffb6b,1,0,63066bee-d428-4e32-a032-f17475056537,63066bee-d428-4e32-a032-f17475056537,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,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,b8d07e97-f67d-4669-972a-96ce0f5e8c0d,b8d07e97-f67d-4669-972a-96ce0f5e8c0d,1,0,5c9c5f87-e85f-49b3-a7ca-01e2220d4f39,5c9c5f87-e85f-49b3-a7ca-01e2220d4f39,1,0,b953eafc-20be-4463-8c3e-903184e18402,b953eafc-20be-4463-8c3e-903184e18402,1,0,dcefdde9-645e-43c7-9244-384dadc75439,dcefdde9-645e-43c7-9244-384dadc75439,1,0,fa787228-aed5-4a16-b958-d102b78bf776,fa787228-aed5-4a16-b958-d102b78bf776,1,0,d511a261-4f9b-44e8-b3a1-1e6d393ec6e1,d511a261-4f9b-44e8-b3a1-1e6d393ec6e1,1,0,be900d20-c02d-476d-9ede-2bc5303ef6cb,be900d20-c02d-476d-9ede-2bc5303ef6cb,1,0,ddce1d3c-4a23-4c92-8083-c395dd3b7f6d,ddce1d3c-4a23-4c92-8083-c395dd3b7f6d,1,0,07b53437-cc8d-4834-a1e0-7007538b6eab,07b53437-cc8d-4834-a1e0-7007538b6eab,1,0,0dbec644-cb98-4368-ab76-5997259cbce7,0dbec644-cb98-4368-ab76-5997259cbce7,1,0,c05a7d33-8a58-4b5f-a433-4ba54c88d5f4,c05a7d33-8a58-4b5f-a433-4ba54c88d5f4,1,0,74b1237b-4a46-438d-9756-b564260df99d,74b1237b-4a46-438d-9756-b564260df99d,1,0,19decf0f-c24e-4551-b3d6-8ebd413cba78,19decf0f-c24e-4551-b3d6-8ebd413cba78,1,0,66a2df23-3a08-40d2-8e6c-2db10a3bca7a,66a2df23-3a08-40d2-8e6c-2db10a3bca7a,1,0,189383a5-0001-4427-9e00-18451e4bfb6e,189383a5-0001-4427-9e00-18451e4bfb6e,1,0,966ecce5-ec91-4f8e-82b2-364b38eb7ff4,966ecce5-ec91-4f8e-82b2-364b38eb7ff4,1,0,5ee4b3ee-b795-48c1-9bad-f4010b559b0e,5ee4b3ee-b795-48c1-9bad-f4010b559b0e,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,61cc4ec9-81e7-415b-8adf-3a5e61be505f,61cc4ec9-81e7-415b-8adf-3a5e61be505f,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,1ef34700-ce65-4985-b4d6-7133133ef32d,1ef34700-ce65-4985-b4d6-7133133ef32d,1,0,886d99ce-9ea2-4160-8d73-84df7197c030,886d99ce-9ea2-4160-8d73-84df7197c030,1,0,e5dca369-dc9a-4332-a509-f734b8787e13,e5dca369-dc9a-4332-a509-f734b8787e13,1,0,692d289b-8bd2-4b88-a8ea-0389c967df63,692d289b-8bd2-4b88-a8ea-0389c967df63,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,50ef6fc7-edfc-497b-ae9d-fb676934a631,50ef6fc7-edfc-497b-ae9d-fb676934a631,1,0,6f706d33-6fc6-4311-994f-6887c46f3c3b,6f706d33-6fc6-4311-994f-6887c46f3c3b,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,e3ac6312-4397-4012-a3d1-e35071d3fb6b,e3ac6312-4397-4012-a3d1-e35071d3fb6b,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,23d137ad-5b37-40a9-9c9f-3a2cecfb5abb,23d137ad-5b37-40a9-9c9f-3a2cecfb5abb,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,aea031ed-44c1-441b-8ed2-3a790c0263ab,aea031ed-44c1-441b-8ed2-3a790c0263ab,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,d2816f95-4809-4727-8ab6-8afd375f5a75,d2816f95-4809-4727-8ab6-8afd375f5a75,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,1bcbf91d-cbbc-4c47-86ed-b2cab62ccbe2,1bcbf91d-cbbc-4c47-86ed-b2cab62ccbe2,1,0,27aebf22-27fe-48d4-a6f4-ea4f6a6714bb,27aebf22-27fe-48d4-a6f4-ea4f6a6714bb,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,932656e8-4011-4250-844b-1fd47abda912,932656e8-4011-4250-844b-1fd47abda912,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,b96df5bb-d78a-40ed-a62d-2bf796c59c62,b96df5bb-d78a-40ed-a62d-2bf796c59c62,1,0,073890e5-13eb-4c50-9a6e-3e5507b111b7,073890e5-13eb-4c50-9a6e-3e5507b111b7,1,0,34a4d235-dc56-47e5-91b6-0af887ccdf42,34a4d235-dc56-47e5-91b6-0af887ccdf42,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,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,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,917f8d67-2c28-4e02-9453-e1ef9297c9a6,917f8d67-2c28-4e02-9453-e1ef9297c9a6,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,3fc019d1-aec8-4835-96c5-3bbf43da0b94,3fc019d1-aec8-4835-96c5-3bbf43da0b94,1,0,5371672a-c8e0-4c12-834e-f23dd885b49a,5371672a-c8e0-4c12-834e-f23dd885b49a,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,5c45e96f-e245-4d16-9c47-836505582aef,5c45e96f-e245-4d16-9c47-836505582aef,1,0,2c04d747-c363-4218-92c9-5c83393e928b,2c04d747-c363-4218-92c9-5c83393e928b,1,0,093b8255-7ee5-4463-bd20-542b1d63e799,093b8255-7ee5-4463-bd20-542b1d63e799,1,0,5afb95e0-51a3-4a0f-bea7-e06716421974,5afb95e0-51a3-4a0f-bea7-e06716421974,1,0,2bce3fbe-436b-4a9f-8478-5436d61cd57c,2bce3fbe-436b-4a9f-8478-5436d61cd57c,1,0,ba49877b-6e30-4177-a67c-00e65aa498fb,ba49877b-6e30-4177-a67c-00e65aa498fb,1,0,3d02ca78-c396-4797-909c-e6b910c0ff66,3d02ca78-c396-4797-909c-e6b910c0ff66,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,80c18959-93f0-46e6-90fd-b564efcaa395,80c18959-93f0-46e6-90fd-b564efcaa395,1,0,c53b9e19-54e4-49b4-ac63-eaeee5c2e040,c53b9e19-54e4-49b4-ac63-eaeee5c2e040,1,0,47afc45d-719e-4740-a8aa-6157c4b1aea8,47afc45d-719e-4740-a8aa-6157c4b1aea8,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,48b57d1b-5246-4ce8-9e0f-e369e6add55c,48b57d1b-5246-4ce8-9e0f-e369e6add55c,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,8482b31d-0ffa-4a94-9be1-09db8399b70d,8482b31d-0ffa-4a94-9be1-09db8399b70d,1,0,77fe53c2-de9d-4483-97c9-f7d44e137d5e,77fe53c2-de9d-4483-97c9-f7d44e137d5e,1,0,ac7ea771-4b10-4d43-9c0a-9cd36e4c49a4,ac7ea771-4b10-4d43-9c0a-9cd36e4c49a4,1,0,593be64c-6792-46d9-8618-84c50c9ad9e4,593be64c-6792-46d9-8618-84c50c9ad9e4,1,0,208d29cb-040f-4282-b8e8-dda8417b8e92,208d29cb-040f-4282-b8e8-dda8417b8e92,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,3913f78f-ce34-4ae3-840a-ccdf06319cbb,3913f78f-ce34-4ae3-840a-ccdf06319cbb,1,0,104cf3e3-2104-4ac2-bdc6-792750a63ea0,104cf3e3-2104-4ac2-bdc6-792750a63ea0,1,0,35dee1ee-ca9e-4b6b-9767-1107283f5a04,35dee1ee-ca9e-4b6b-9767-1107283f5a04,1,0,c86aa97a-5898-4cb2-ae62-598bddf8e99f,c86aa97a-5898-4cb2-ae62-598bddf8e99f,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,58589e42-9ff2-4ad4-bd98-a75ab6873625,58589e42-9ff2-4ad4-bd98-a75ab6873625,1,0,92255ded-6c44-43be-b0b1-fd03c2b78c8b,92255ded-6c44-43be-b0b1-fd03c2b78c8b,1,0,dfe6da42-f024-45c5-beea-ceccaf3a5faa,dfe6da42-f024-45c5-beea-ceccaf3a5faa,1,0,08f3e8f1-284c-4059-864a-42499d48596c,08f3e8f1-284c-4059-864a-42499d48596c,1,0,3d715c1b-9a5e-408d-98d6-5345d274144b,3d715c1b-9a5e-408d-98d6-5345d274144b,1,0,3f88bc69-e140-48b6-a2f9-24f6a391bff2,3f88bc69-e140-48b6-a2f9-24f6a391bff2,1,0,65eb5361-074c-451d-a5d8-d16b6ecccf82,65eb5361-074c-451d-a5d8-d16b6ecccf82,1,0,f7c8cab8-c634-4cf3-9183-c15c915231f8,f7c8cab8-c634-4cf3-9183-c15c915231f8,1,0,563a33a6-9eff-4ff1-9eba-dafc235d2ede,563a33a6-9eff-4ff1-9eba-dafc235d2ede,1,0,fbc21f7d-c272-41ea-b048-c5af294ab5ed,fbc21f7d-c272-41ea-b048-c5af294ab5ed,1,0,088c38fa-1c8f-42e7-aa72-5f5dd8cfc1c6,088c38fa-1c8f-42e7-aa72-5f5dd8cfc1c6,1,0,370f97ee-9aed-4a0a-aefc-647d973e6741,370f97ee-9aed-4a0a-aefc-647d973e6741,1,0,c586d28e-a3ec-4201-8ba0-d453bb7c5293,c586d28e-a3ec-4201-8ba0-d453bb7c5293,1,0,d84f12b0-6e01-4646-9abd-51578716433d,d84f12b0-6e01-4646-9abd-51578716433d,1,0,a4458c18-72eb-4fc0-8dc6-fccab93b0898,a4458c18-72eb-4fc0-8dc6-fccab93b0898,1,0,3a0ceb25-60f5-4fec-ab2e-e667939bfe21,3a0ceb25-60f5-4fec-ab2e-e667939bfe21,1,0,27db4549-df2f-4856-b07f-3c9399cdee9c,27db4549-df2f-4856-b07f-3c9399cdee9c,1,0,f667d49a-8077-450f-9442-2ea4fee7b62d,f667d49a-8077-450f-9442-2ea4fee7b62d,1,0,782b1285-9618-4ec9-b817-ce93e2d24d4d,782b1285-9618-4ec9-b817-ce93e2d24d4d,1,0,dd3e202f-6225-4061-a6ab-f29cd314ab08,dd3e202f-6225-4061-a6ab-f29cd314ab08,1,0,483b7600-e46f-4739-94c8-8637c62750a0,483b7600-e46f-4739-94c8-8637c62750a0,1,0,bdcf5f7a-2888-4143-b46d-1bf0dcc16872,bdcf5f7a-2888-4143-b46d-1bf0dcc16872,1,0,bce8a955-0a0e-4771-9763-4f5d319d9848,bce8a955-0a0e-4771-9763-4f5d319d9848,1,0,090c475c-fb33-46a9-a0ed-fb9d7def2ca5,090c475c-fb33-46a9-a0ed-fb9d7def2ca5,1,0,d10c3389-5bf0-4c73-ab92-786eb19d1676,d10c3389-5bf0-4c73-ab92-786eb19d1676,1,0,c824c20d-7503-4a77-81b8-2a68b20eab68,c824c20d-7503-4a77-81b8-2a68b20eab68,1,0,a0db92c6-b39e-41ab-82e3-161e32f67bda,a0db92c6-b39e-41ab-82e3-161e32f67bda,1,0,88f91187-65d3-4684-992d-20ca29d3755a,88f91187-65d3-4684-992d-20ca29d3755a,1,0,da725701-d4fb-40a4-a63b-feaa8559d8cf,da725701-d4fb-40a4-a63b-feaa8559d8cf,1,0,0a44cfc8-0b55-4aed-990f-e97831494a3c,0a44cfc8-0b55-4aed-990f-e97831494a3c,1,0,c9adbe7c-ca6e-4048-a498-9b48f75d9b45,c9adbe7c-ca6e-4048-a498-9b48f75d9b45,1,0,c7cb80d6-13d9-49af-acdd-6d10dffd1e17,c7cb80d6-13d9-49af-acdd-6d10dffd1e17,1,0,9a3f04d7-b956-4e87-ac28-63f7afba1771,9a3f04d7-b956-4e87-ac28-63f7afba1771,1,0,41b23a18-0c4e-455f-b249-2f2eba8119db,41b23a18-0c4e-455f-b249-2f2eba8119db,1,0,ff697cb8-ab88-4634-94e3-c06a401f71ff,ff697cb8-ab88-4634-94e3-c06a401f71ff,1,0,cf98131d-2b1a-4a07-a8dd-72af01934a8b,cf98131d-2b1a-4a07-a8dd-72af01934a8b,1,0,bef1eead-3f8b-48b7-99f3-46ba332fb60d,bef1eead-3f8b-48b7-99f3-46ba332fb60d,1,0,c1b3d4c8-8c53-4452-bec5-9742bb827d8f,c1b3d4c8-8c53-4452-bec5-9742bb827d8f,1,0,b6e1d584-6817-4f06-b5b2-57037a23ce6f,b6e1d584-6817-4f06-b5b2-57037a23ce6f,1,0,1b5d2ded-3f58-4b3e-8678-48191897e408,1b5d2ded-3f58-4b3e-8678-48191897e408,1,0,62fd5457-0cfd-4273-8965-4b5bf9170209,62fd5457-0cfd-4273-8965-4b5bf9170209,1,0,88701798-0c0e-4d33-a68b-3eddfc25d835,88701798-0c0e-4d33-a68b-3eddfc25d835,1,0,c0d704b5-32de-4bb8-9525-f7d1da828ae5,c0d704b5-32de-4bb8-9525-f7d1da828ae5,1,0,b5b5ee06-4de8-4776-98f0-3e8e1b31985a,b5b5ee06-4de8-4776-98f0-3e8e1b31985a,1,0,2f999502-68e5-4823-8f94-aec98b1a1b1d,2f999502-68e5-4823-8f94-aec98b1a1b1d,1,0,2d064409-7f2a-4d2e-9155-6b34e4373e89,2d064409-7f2a-4d2e-9155-6b34e4373e89,1,0,fc51a562-01bb-47c3-bac5-89f78f64a5f3,fc51a562-01bb-47c3-bac5-89f78f64a5f3,1,0,8a33a6cd-f56d-405b-9515-9fc04d30e27a,8a33a6cd-f56d-405b-9515-9fc04d30e27a,1,0,9b199470-723d-4b72-9fdc-2bed2b7bc483,9b199470-723d-4b72-9fdc-2bed2b7bc483,1,0,5bb9aff1-f4ee-4c02-8e3f-f070bfbb8339,5bb9aff1-f4ee-4c02-8e3f-f070bfbb8339,1,0,6a06f9ee-8832-4e9e-aeba-b4cb9573c048,6a06f9ee-8832-4e9e-aeba-b4cb9573c048,1,0,38fa770e-f38d-4fdf-bb7a-56cfe76a8ab2,38fa770e-f38d-4fdf-bb7a-56cfe76a8ab2,1,0,afc4ce2a-60b6-48d0-ada0-2f651d050888,afc4ce2a-60b6-48d0-ada0-2f651d050888,1,0,5f289266-fc3c-4345-b7ab-cf863e2a6ccd,5f289266-fc3c-4345-b7ab-cf863e2a6ccd,1,0,5932f0d8-9012-4382-8c72-b1a5f4fbc937,5932f0d8-9012-4382-8c72-b1a5f4fbc937,1,0,66f1ff23-8fec-4be4-914c-43b7dee1c2a2,66f1ff23-8fec-4be4-914c-43b7dee1c2a2,1,0,56c3471e-459a-46ba-96ea-9f872b3ad54a,56c3471e-459a-46ba-96ea-9f872b3ad54a,1,0,2113195b-1553-4137-9e45-2cc62c72ee47,2113195b-1553-4137-9e45-2cc62c72ee47,1,0,1250f5b1-c766-434c-8d28-69b74a536294,1250f5b1-c766-434c-8d28-69b74a536294,1,0,80bc9b8b-7b17-4dbb-bca6-8465d6b01e0b,80bc9b8b-7b17-4dbb-bca6-8465d6b01e0b,1,0,6327e23d-6070-4b64-81c6-0d1a33eaae93,6327e23d-6070-4b64-81c6-0d1a33eaae93,1,0,4d086a1f-34e0-43f9-9401-d82e55746a9d,4d086a1f-34e0-43f9-9401-d82e55746a9d,1,0,5a4c543a-27d5-423b-a4d0-3952ea2817af,5a4c543a-27d5-423b-a4d0-3952ea2817af,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,48659b94-ace8-45f4-a043-6b2731ec6925,48659b94-ace8-45f4-a043-6b2731ec6925,1,0,3a8e60f9-19cb-42a6-a448-ad211261d9b8,3a8e60f9-19cb-42a6-a448-ad211261d9b8,1,0,74320602-094a-4645-b2c9-3053377a3ac3,74320602-094a-4645-b2c9-3053377a3ac3,1,0,3aba26a3-76ee-46c0-9e11-6f64fc754a0d,3aba26a3-76ee-46c0-9e11-6f64fc754a0d,1,0,b066c732-9c5f-4504-894f-96d457b0768f,b066c732-9c5f-4504-894f-96d457b0768f,1,0,9366463d-aa8a-4e89-86d8-c7f746f9551b,9366463d-aa8a-4e89-86d8-c7f746f9551b,1,0,e25da569-d435-45b2-b4e8-fc76d7f1c8df,e25da569-d435-45b2-b4e8-fc76d7f1c8df,1,0,a51a7f57-9c52-4457-819c-13e1b6f886e1,a51a7f57-9c52-4457-819c-13e1b6f886e1,1,0,7d08daba-5e36-4ce3-8a70-17750959b89e,7d08daba-5e36-4ce3-8a70-17750959b89e,1,0,e2c2d915-ae50-4fa0-add3-26ad7dc75efb,e2c2d915-ae50-4fa0-add3-26ad7dc75efb,1,0,39344a8c-2662-48ff-937b-12951bb268fb,39344a8c-2662-48ff-937b-12951bb268fb,1,0,b577663f-ead2-4b18-a4f6-f7f303e89319,b577663f-ead2-4b18-a4f6-f7f303e89319,1,0,43dc335f-5503-47ab-9c6b-0b4c6ab13f57,43dc335f-5503-47ab-9c6b-0b4c6ab13f57,1,0,6cc0a1d7-01eb-4af6-b4ed-4002e2316080,6cc0a1d7-01eb-4af6-b4ed-4002e2316080,1,0,72663843-4010-42ed-989b-0b58bf9f7146,72663843-4010-42ed-989b-0b58bf9f7146,1,0,79da4490-f0b0-48b5-b435-3b2c9ffb0eb3,79da4490-f0b0-48b5-b435-3b2c9ffb0eb3,1,0,3adcceea-867e-4b88-a633-4f8d4ccb43c0,3adcceea-867e-4b88-a633-4f8d4ccb43c0,1,0,a132189c-6584-4bb1-9cfd-1415cd83228a,a132189c-6584-4bb1-9cfd-1415cd83228a,1,0,7ba50e13-0a78-4cca-821f-006b1c83b0b0,7ba50e13-0a78-4cca-821f-006b1c83b0b0,1,0,a3670f95-5abe-49ee-8ea5-d7e4438801ba,a3670f95-5abe-49ee-8ea5-d7e4438801ba,1,0,4443dea1-5143-4e76-97a7-c35dbe1665e4,4443dea1-5143-4e76-97a7-c35dbe1665e4,1,0,0d780521-0767-425a-b44d-315d2dc42d04,0d780521-0767-425a-b44d-315d2dc42d04,1,0,c5b1572d-28f5-42f3-b2e0-8b54f091642e,c5b1572d-28f5-42f3-b2e0-8b54f091642e,1,0,0986c1b6-b677-428d-b49f-a93e40e77171,0986c1b6-b677-428d-b49f-a93e40e77171,1,0,b9c41558-8fe7-45f6-bcb0-5ea3a35264cf,b9c41558-8fe7-45f6-bcb0-5ea3a35264cf,1,0,597c1f9b-3cbd-42bd-b819-f29b3a3f073a,597c1f9b-3cbd-42bd-b819-f29b3a3f073a,1,0,b6662b2e-7e93-4eaa-9e4b-b5647285932b,b6662b2e-7e93-4eaa-9e4b-b5647285932b,1,0,4a180f2c-dc54-4591-8f62-f236d1e07799,4a180f2c-dc54-4591-8f62-f236d1e07799,1,0,3f1578ba-3d55-4eff-bbdd-6329dd5060d5,3f1578ba-3d55-4eff-bbdd-6329dd5060d5,1,0,a9a51e79-4c79-4a43-931b-c0321c1cd65b,a9a51e79-4c79-4a43-931b-c0321c1cd65b,1,0,e8644d90-ec2f-4ac0-8fbd-a7aa95c9bcec,e8644d90-ec2f-4ac0-8fbd-a7aa95c9bcec,1,0,048a1d86-bcf5-47aa-a36c-eb20c3f9f7e5,048a1d86-bcf5-47aa-a36c-eb20c3f9f7e5,1,0,22f2696e-0ac1-4a74-bca9-987b267b2b59,22f2696e-0ac1-4a74-bca9-987b267b2b59,1,0,d705cacc-3485-46d7-9ff4-48c3c0757c81,d705cacc-3485-46d7-9ff4-48c3c0757c81,1,0,98f043ea-633c-4a03-a56f-efbc9e6ef288,98f043ea-633c-4a03-a56f-efbc9e6ef288,1,0,2033b92a-0750-478a-a12d-cf4f74d0a9da,2033b92a-0750-478a-a12d-cf4f74d0a9da,1,0,92fa2196-d8e5-45f9-9d2e-59d837b163ea,92fa2196-d8e5-45f9-9d2e-59d837b163ea,1,0,25dc2290-e283-4449-81c1-1ce15b58067f,25dc2290-e283-4449-81c1-1ce15b58067f,1,0,c534a865-a17f-41e7-88b9-c6af89c9d202,c534a865-a17f-41e7-88b9-c6af89c9d202,1,0,0214bfe6-fb98-4487-8d98-6b10d24a3c4d,0214bfe6-fb98-4487-8d98-6b10d24a3c4d,1,0,0127937c-94c0-43fe-9630-cc2ec6904ad8,0127937c-94c0-43fe-9630-cc2ec6904ad8,1,0,ce7c87b8-e4ab-47e2-b70a-7dcae8bfb8a8,ce7c87b8-e4ab-47e2-b70a-7dcae8bfb8a8,1,0,8df5b3cd-7788-4198-a530-e88be83f1cdf,8df5b3cd-7788-4198-a530-e88be83f1cdf,1,0,ffaeea66-66d5-4741-a9b5-875afebfce7f,ffaeea66-66d5-4741-a9b5-875afebfce7f,1,0,8f6b6576-1d21-46c1-905c-f1685f0eee7a,8f6b6576-1d21-46c1-905c-f1685f0eee7a,1,0,06827a85-a9d1-472e-8087-906ff94a4adc,06827a85-a9d1-472e-8087-906ff94a4adc,1,0,bb3954de-5eaa-4ec0-931b-a1a9f233c120,bb3954de-5eaa-4ec0-931b-a1a9f233c120,1,0,10689022-cbbb-4134-901f-1e778fac2693,10689022-cbbb-4134-901f-1e778fac2693,1,0,f14e363f-512b-4658-afb5-10c3be5ff870,f14e363f-512b-4658-afb5-10c3be5ff870,1,0,4d211427-4494-45d4-ae84-38235f35eaef,4d211427-4494-45d4-ae84-38235f35eaef,1,0,f7784993-d95c-4652-9894-3cf67aeabeb8,f7784993-d95c-4652-9894-3cf67aeabeb8,1,0,485d8b29-79b1-4798-a742-75546ddb7262,485d8b29-79b1-4798-a742-75546ddb7262,1,0,e248de85-8f76-4471-ab3d-d35514b69b78,e248de85-8f76-4471-ab3d-d35514b69b78,1,0,8928ce42-2b12-402f-8115-98b5655db556,8928ce42-2b12-402f-8115-98b5655db556,1,0,9b62c109-7b52-4803-83e6-a5413cd00984,9b62c109-7b52-4803-83e6-a5413cd00984,1,0,cddb4bb0-22ec-49ae-b332-62d7307b93fe,cddb4bb0-22ec-49ae-b332-62d7307b93fe,1,0,72876709-806e-4406-b9c1-b8117f4d750a,72876709-806e-4406-b9c1-b8117f4d750a,1,0,b1efafef-74cc-4d36-a32c-b472712f11f3,b1efafef-74cc-4d36-a32c-b472712f11f3,1,0,ceb05584-1ecd-4681-8575-c0452f95b685,ceb05584-1ecd-4681-8575-c0452f95b685,1,0,03d08c14-f814-4e12-8f96-020c36cca2bf,03d08c14-f814-4e12-8f96-020c36cca2bf,1,0,a1a7aab6-cf35-42ce-97bb-c112638a2748,a1a7aab6-cf35-42ce-97bb-c112638a2748,1,0,4e36184e-d818-4f38-9257-6d91d9cc85ae,4e36184e-d818-4f38-9257-6d91d9cc85ae,1,0,afcba8a1-5d3e-4a76-9be9-5fbda20d55bd,afcba8a1-5d3e-4a76-9be9-5fbda20d55bd,1,0,cbdc8d7e-b685-4c8d-9f47-d8bfb08300d4,cbdc8d7e-b685-4c8d-9f47-d8bfb08300d4,1,0,3893a258-a9c7-441a-b80c-1cc8c3f4735c,3893a258-a9c7-441a-b80c-1cc8c3f4735c,1,0,f9ad1ef3-7475-4d55-a1ef-eadceda9bf6b,f9ad1ef3-7475-4d55-a1ef-eadceda9bf6b,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,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,879304f7-9507-4fb8-9177-355428d6bba9,879304f7-9507-4fb8-9177-355428d6bba9,1,0,efb50581-cc7e-47ac-bfa2-86da2860bf1d,efb50581-cc7e-47ac-bfa2-86da2860bf1d,1,0,fd07f403-1116-4102-a1bf-35abb03ad493,fd07f403-1116-4102-a1bf-35abb03ad493,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,0722315c-9217-4ecf-80ff-d1ee89f84a53,0722315c-9217-4ecf-80ff-d1ee89f84a53,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,7d91ff3c-1ec2-41d0-9d38-fa8f8534c55c,7d91ff3c-1ec2-41d0-9d38-fa8f8534c55c,1,0,6da15c1d-e144-472e-9a3a-2797c7df16e4,6da15c1d-e144-472e-9a3a-2797c7df16e4,1,0,350a7b29-4ba3-43c4-b77d-47085f53d760,350a7b29-4ba3-43c4-b77d-47085f53d760,1,0,a151715d-c89e-4e4c-b8fd-d7d6ad71e603,a151715d-c89e-4e4c-b8fd-d7d6ad71e603,1,0,f6d6f1b9-3956-4fdb-bbb0-5d81f083a072,f6d6f1b9-3956-4fdb-bbb0-5d81f083a072,1,0,a5dd4200-0f25-452d-9014-3b1506c31557,a5dd4200-0f25-452d-9014-3b1506c31557,1,0,c48c091c-0d46-4d1f-bc84-72b0537c7ec2,c48c091c-0d46-4d1f-bc84-72b0537c7ec2,1,0,122a94c7-bb89-4f11-b583-b56808c1df47,122a94c7-bb89-4f11-b583-b56808c1df47,1,0,f4371f32-95a5-40f4-bc5e-a5b9a12a86eb,f4371f32-95a5-40f4-bc5e-a5b9a12a86eb,1,0,5f434c45-a5ff-4a07-8662-6a592298c7e9,5f434c45-a5ff-4a07-8662-6a592298c7e9,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,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,b572b1d0-4404-421c-9950-1cc1342ca5f3,b572b1d0-4404-421c-9950-1cc1342ca5f3,1,0,0c838a31-2b08-447c-b39a-a613cfba526c,0c838a31-2b08-447c-b39a-a613cfba526c,1,0,02082174-7276-4256-b9bb-9872065a01c4,02082174-7276-4256-b9bb-9872065a01c4,1,0,86c679c0-3531-4622-9a1f-3d9d6ccdd431,86c679c0-3531-4622-9a1f-3d9d6ccdd431,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,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,04424730-6992-4a5b-838b-7a7c16dedbd0,04424730-6992-4a5b-838b-7a7c16dedbd0,1,0,1260b5dd-0a74-43df-bdbb-215b253da28e,1260b5dd-0a74-43df-bdbb-215b253da28e,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,554320a0-55dc-4289-bb08-63d405cb4ca5,554320a0-55dc-4289-bb08-63d405cb4ca5,1,0,45eec13d-e5e5-4a2e-ad6c-2780bde15ef2,45eec13d-e5e5-4a2e-ad6c-2780bde15ef2,1,0,3b1d0974-6031-4841-b632-aadd4ff13b2c,3b1d0974-6031-4841-b632-aadd4ff13b2c,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,b143bc6d-ead6-41a2-9a15-1a44488c1ce4,b143bc6d-ead6-41a2-9a15-1a44488c1ce4,1,0,72d41d01-9c9d-4fbe-8a39-932d82d171ef,72d41d01-9c9d-4fbe-8a39-932d82d171ef,1,0,f4afd271-64de-4a6d-b0ef-f27db4d66d32,f4afd271-64de-4a6d-b0ef-f27db4d66d32,1,0,b1e7d3c3-9fc1-4364-a8c3-b076080c7472,b1e7d3c3-9fc1-4364-a8c3-b076080c7472,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,caea53be-d2f7-4109-8017-d2bfdfde8c6f,caea53be-d2f7-4109-8017-d2bfdfde8c6f,1,0,60f30706-9919-4767-a17c-660754b9d542,60f30706-9919-4767-a17c-660754b9d542,1,0,7de19812-ed6c-41b5-82aa-b9a8e6d808f2,7de19812-ed6c-41b5-82aa-b9a8e6d808f2,1,0,c0bc4cc4-b5ca-47c2-b589-c0d25bb63f1e,c0bc4cc4-b5ca-47c2-b589-c0d25bb63f1e,1,0,35823167-b658-4563-8d01-b0aab05aa619,35823167-b658-4563-8d01-b0aab05aa619,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,e590825f-10c6-4fdd-98cd-3da01da2ed4f,e590825f-10c6-4fdd-98cd-3da01da2ed4f,1,0,2233ce53-b8a8-4c83-97a2-683c8575462a,2233ce53-b8a8-4c83-97a2-683c8575462a,1,0,b938ff17-e31c-4762-a96f-e1288f746a1d,b938ff17-e31c-4762-a96f-e1288f746a1d,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,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,837f27c1-26d7-4f24-a691-55dd9ed04ec5,837f27c1-26d7-4f24-a691-55dd9ed04ec5,1,0,9e2ddfbb-8d6b-4b82-8a2b-62c2ea990b10,9e2ddfbb-8d6b-4b82-8a2b-62c2ea990b10,1,0,5005655f-22b2-49e6-be4f-b15d768d10b2,5005655f-22b2-49e6-be4f-b15d768d10b2,1,0,208040c8-e98b-4c15-a2ec-38d44bfcfa6c,208040c8-e98b-4c15-a2ec-38d44bfcfa6c,1,0,f6811ee2-769e-488d-9ca0-70f1fe521ca9,f6811ee2-769e-488d-9ca0-70f1fe521ca9,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,31b93291-a58f-4176-8318-58200e8bc56e,31b93291-a58f-4176-8318-58200e8bc56e,1,0,293be1bc-49cb-4a99-add8-2a3a46829718,293be1bc-49cb-4a99-add8-2a3a46829718,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,bc2dd611-b589-4519-b274-40db5c66b378,bc2dd611-b589-4519-b274-40db5c66b378,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,89cb31da-a980-4207-a537-85cd47f08d32,89cb31da-a980-4207-a537-85cd47f08d32,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,75ffd0b9-79be-4600-a310-591fddb6d63e,75ffd0b9-79be-4600-a310-591fddb6d63e,1,0,4883cb3d-4ab3-4e0e-bddb-ae8852547a3c,4883cb3d-4ab3-4e0e-bddb-ae8852547a3c,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,1e3c444d-6f73-4eb0-a12d-7106daf36b14,1e3c444d-6f73-4eb0-a12d-7106daf36b14,1,0,9043894d-f89a-459f-a4ea-77fe3633aa91,9043894d-f89a-459f-a4ea-77fe3633aa91,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,09858042-6284-4499-8055-c1b5b783ce5f,09858042-6284-4499-8055-c1b5b783ce5f,1,0,38fc1e6e-7cd3-437b-b429-6655be34cd01,38fc1e6e-7cd3-437b-b429-6655be34cd01,1,0,8c4c7982-36cc-4dc9-b055-9954f61e6365,8c4c7982-36cc-4dc9-b055-9954f61e6365,1,0,ba51c7f5-0074-4c99-a27d-ddfd4bfcc068,ba51c7f5-0074-4c99-a27d-ddfd4bfcc068,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,95a71c2e-aa39-42ec-8889-2390a553f146,95a71c2e-aa39-42ec-8889-2390a553f146,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,6c66ff27-19af-4728-95a8-463fd1c4dcd3,6c66ff27-19af-4728-95a8-463fd1c4dcd3,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,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,387d3bbf-cddd-4506-b14f-89c1f37adbbc,387d3bbf-cddd-4506-b14f-89c1f37adbbc,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,10db9f99-c7d1-4b16-9ea2-9bfc2aa4ddb5,10db9f99-c7d1-4b16-9ea2-9bfc2aa4ddb5,1,0,230722e6-942f-4594-be89-eff59c6572bf,230722e6-942f-4594-be89-eff59c6572bf,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,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,251ca8fe-09eb-45ca-be8b-0d8faf927009,251ca8fe-09eb-45ca-be8b-0d8faf927009,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,19b98b60-deb1-4642-8159-2a11332558e2,19b98b60-deb1-4642-8159-2a11332558e2,1,0,133f181a-fade-4182-826d-904fac780326,133f181a-fade-4182-826d-904fac780326,1,0,a687748a-0b2a-4277-b935-07616d28430d,a687748a-0b2a-4277-b935-07616d28430d,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,9059defa-047f-4dac-9749-3d0a6a77308a,9059defa-047f-4dac-9749-3d0a6a77308a,1,0,6010c27f-e857-4fc3-be13-1eea51f02ea7,6010c27f-e857-4fc3-be13-1eea51f02ea7,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,6527be82-a665-4f8a-818b-a35b96b3484b,6527be82-a665-4f8a-818b-a35b96b3484b,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,fbbb2449-9a07-4229-8ea5-bee0afab5f56,fbbb2449-9a07-4229-8ea5-bee0afab5f56,1,0,9fdddb51-0605-4f64-8d2e-aa7dbcd37262,9fdddb51-0605-4f64-8d2e-aa7dbcd37262,1,0,3f3f1b41-57a9-4a82-bdfa-89a6653479ab,3f3f1b41-57a9-4a82-bdfa-89a6653479ab,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,9c443dd3-4acb-4c5a-9c4b-af8b0c87e861,9c443dd3-4acb-4c5a-9c4b-af8b0c87e861,1,0,98153b59-8cc6-4dc7-b945-99c1146d07da,98153b59-8cc6-4dc7-b945-99c1146d07da,1,0,657b8663-713c-4a80-81e1-8c0166742a35,657b8663-713c-4a80-81e1-8c0166742a35,1,0,866438d1-1223-4768-9c96-e6cb12f1a4d5,866438d1-1223-4768-9c96-e6cb12f1a4d5,1,0,d416cc2a-425f-4c01-a550-5a755ed78cc8,d416cc2a-425f-4c01-a550-5a755ed78cc8,1,0,df9db8d5-c5c2-4a9d-88fe-77247b2c417e,df9db8d5-c5c2-4a9d-88fe-77247b2c417e,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,9039f720-5728-4918-87d5-8b2d07cabcfd,9039f720-5728-4918-87d5-8b2d07cabcfd,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,aaaa7d41-3399-41b5-b882-58af38121494,aaaa7d41-3399-41b5-b882-58af38121494,1,0,0f25646a-90f9-4747-a778-7efdaabc284c,0f25646a-90f9-4747-a778-7efdaabc284c,1,0,3705a086-46e6-4090-a52a-535908eea8a5,3705a086-46e6-4090-a52a-535908eea8a5,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,a6587758-f7af-4f85-81b4-4312c725824e,a6587758-f7af-4f85-81b4-4312c725824e,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,9d8496ea-fc0c-410d-994d-7480350d71d3,9d8496ea-fc0c-410d-994d-7480350d71d3,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,5b62e0d1-8dba-47db-8dbb-517ad935fa0d,5b62e0d1-8dba-47db-8dbb-517ad935fa0d,1,0,e7a63151-fc1a-4563-8768-26d854ab012b,e7a63151-fc1a-4563-8768-26d854ab012b,1,0,e7d0cc1f-f3ee-486e-b1f3-db8e6a6162cc,e7d0cc1f-f3ee-486e-b1f3-db8e6a6162cc,1,0,c54f31ce-114b-46d3-b4c6-12c8f07727ca,c54f31ce-114b-46d3-b4c6-12c8f07727ca,1,0,73c7750f-8291-4e19-8551-635cd6b94215,73c7750f-8291-4e19-8551-635cd6b94215,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,65dd4904-0837-4de5-a5e5-601151055d94,65dd4904-0837-4de5-a5e5-601151055d94,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,df48bfa3-5502-4a61-a79f-1dea043dac36,df48bfa3-5502-4a61-a79f-1dea043dac36,1,0,adee37e6-f087-422f-91b3-681f3d73189c,adee37e6-f087-422f-91b3-681f3d73189c,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,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,4766c40e-6330-4c1d-a64f-0c8c672886a4,4766c40e-6330-4c1d-a64f-0c8c672886a4,1,0,cc9679a5-1ed2-4290-8c9b-8a2f6614d053,cc9679a5-1ed2-4290-8c9b-8a2f6614d053,1,0,d8621f68-106e-4058-963f-56010491ae2e,d8621f68-106e-4058-963f-56010491ae2e,1,0,1f3057c2-135f-44b2-9f86-34481fbc5596,1f3057c2-135f-44b2-9f86-34481fbc5596,1,0,f8f0d92c-b7f0-496c-8d33-f8a57dfa16f2,f8f0d92c-b7f0-496c-8d33-f8a57dfa16f2,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,54f3902b-f29a-4f04-8c9d-68c318fcd076,54f3902b-f29a-4f04-8c9d-68c318fcd076,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,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,3e4361e9-2baf-407b-9320-b2a265b44e46,3e4361e9-2baf-407b-9320-b2a265b44e46,1,0,00418e6c-77b2-4753-b9ff-3a8013436f8a,00418e6c-77b2-4753-b9ff-3a8013436f8a,1,0,e2c76c41-4c47-4588-a081-7bd81ac1698b,e2c76c41-4c47-4588-a081-7bd81ac1698b,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,92bec607-7217-42f6-8eb9-ace759672336,92bec607-7217-42f6-8eb9-ace759672336,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,4d660fec-4a76-470e-bba9-3d031941b289,4d660fec-4a76-470e-bba9-3d031941b289,1,0,38bf6d3b-5435-4bac-b9fc-23b80afeb760,38bf6d3b-5435-4bac-b9fc-23b80afeb760,1,0,a3c9a7eb-2104-4402-954c-3e12de4a7de3,a3c9a7eb-2104-4402-954c-3e12de4a7de3,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,5e380276-2a08-435c-927e-a7f56f5a4dbc,5e380276-2a08-435c-927e-a7f56f5a4dbc,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,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,b8b267e3-75af-4140-b515-d99e8e748e84,b8b267e3-75af-4140-b515-d99e8e748e84,1,0,8014684f-e1f1-4163-9083-459a009c0aac,8014684f-e1f1-4163-9083-459a009c0aac,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,c0218ef0-4aa1-4ff1-963b-e6ab1001ae9e,c0218ef0-4aa1-4ff1-963b-e6ab1001ae9e,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,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,30f6aedf-946f-400c-822d-5fa375b8fb1d,30f6aedf-946f-400c-822d-5fa375b8fb1d,1,0,46e313f7-54da-4884-89e8-cdba6ae30d30,46e313f7-54da-4884-89e8-cdba6ae30d30,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,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,c1c62215-41b8-40bc-a806-1347db5b03e9,c1c62215-41b8-40bc-a806-1347db5b03e9,1,0,a24322f3-c7a5-4b25-bad6-9c75712a3e58,a24322f3-c7a5-4b25-bad6-9c75712a3e58,1,0,679d2b3b-a354-4dec-b49d-ab1163756e3a,679d2b3b-a354-4dec-b49d-ab1163756e3a,1,0,665e96bc-8ec1-4008-b9bd-db95a234b9b8,665e96bc-8ec1-4008-b9bd-db95a234b9b8,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,aa299fc6-051f-487c-ada4-451e08c4763c,aa299fc6-051f-487c-ada4-451e08c4763c,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,8a13c899-1659-48cf-9aa2-07ca99547b7b,8a13c899-1659-48cf-9aa2-07ca99547b7b,1,0,eb3f959c-94a4-4e77-b9f9-e81954254079,eb3f959c-94a4-4e77-b9f9-e81954254079,1,0,71dfde27-3762-4dd0-9252-6e703ce1b101,71dfde27-3762-4dd0-9252-6e703ce1b101,1,0,d8fc4644-5351-443c-8b5d-5de2c4b855d1,d8fc4644-5351-443c-8b5d-5de2c4b855d1,1,0,0f039952-09d3-49c8-b909-e8333a3fc8f9,0f039952-09d3-49c8-b909-e8333a3fc8f9,1,0,99387869-f8b1-4269-bd26-e39380d17b69,99387869-f8b1-4269-bd26-e39380d17b69,1,0,4b2acdb9-fefd-4735-9dfd-d7d141967f3c,4b2acdb9-fefd-4735-9dfd-d7d141967f3c,1,0,bc07d643-a044-4882-b95b-2173a197fd0e,bc07d643-a044-4882-b95b-2173a197fd0e,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,862e2759-5311-4c68-8977-86133bcf8c0e,862e2759-5311-4c68-8977-86133bcf8c0e,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,b848d70a-9d08-4b1a-8df1-17697432516d,b848d70a-9d08-4b1a-8df1-17697432516d,1,0,9a30b92d-0c5b-4e11-a741-2b6efa8ac229,9a30b92d-0c5b-4e11-a741-2b6efa8ac229,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,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,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,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,86c22871-6d1c-44e0-8ade-ce4bdeb23321,86c22871-6d1c-44e0-8ade-ce4bdeb23321,1,0,da51de81-4d4f-46b5-a308-7b50db6c45a7,da51de81-4d4f-46b5-a308-7b50db6c45a7,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,f02e807c-6cd3-4a4f-8dad-73bd56ee98ff,f02e807c-6cd3-4a4f-8dad-73bd56ee98ff,1,0,eefd00fe-3241-498f-aeb4-d429a86ab563,eefd00fe-3241-498f-aeb4-d429a86ab563,1,0,802d3489-318f-467d-a9f4-d7c644edac60,802d3489-318f-467d-a9f4-d7c644edac60,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,26e58429-1e08-454a-b4d7-2470390149fb,26e58429-1e08-454a-b4d7-2470390149fb,1,0,daa42bf5-9c32-4913-bc27-38f77ccc1a9f,daa42bf5-9c32-4913-bc27-38f77ccc1a9f,1,0,7620b61a-b0d1-4c71-bc80-72c48e17b96d,7620b61a-b0d1-4c71-bc80-72c48e17b96d,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,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,d253aa54-a447-44aa-bb13-82fd1ce22af4,d253aa54-a447-44aa-bb13-82fd1ce22af4,1,0,8936f114-7a0e-4a4c-8752-ccacab410778,8936f114-7a0e-4a4c-8752-ccacab410778,1,0,55649242-42fd-468f-a1e4-f6cd8871f7a4,55649242-42fd-468f-a1e4-f6cd8871f7a4,1,0,980e0883-cd8f-48c8-896f-ef185650f5c2,980e0883-cd8f-48c8-896f-ef185650f5c2,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,d3b09b09-df2d-40e5-86ce-84dab4898231,d3b09b09-df2d-40e5-86ce-84dab4898231,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,16939af9-e459-43da-8e0d-5d5891af6e0c,16939af9-e459-43da-8e0d-5d5891af6e0c,1,0,1d736a09-6c8f-433a-bf5b-201996bf4c62,1d736a09-6c8f-433a-bf5b-201996bf4c62,1,0,157988ad-d482-41df-b3e3-f2a0383d7130,157988ad-d482-41df-b3e3-f2a0383d7130,1,0,33af87a9-db69-41da-a33a-0435da2155e3,33af87a9-db69-41da-a33a-0435da2155e3,1,0,c95831b4-7d1d-4a9a-b5d0-caa03c4f4eca,c95831b4-7d1d-4a9a-b5d0-caa03c4f4eca,1,0,81b63f1d-2c65-4efb-8599-8a4d97b612ab,81b63f1d-2c65-4efb-8599-8a4d97b612ab,1,0,4b13a2c6-a6ce-47a0-8d9e-1a5dbe8d4b00,4b13a2c6-a6ce-47a0-8d9e-1a5dbe8d4b00,1,0,d1dde981-615a-461f-b0c5-a85f51003a2c,d1dde981-615a-461f-b0c5-a85f51003a2c,1,0,f5970c48-63d7-4064-bdfc-482b72939347,f5970c48-63d7-4064-bdfc-482b72939347,1,0,5c8039c0-34d8-4443-bd8f-dfe3dc2977a8,5c8039c0-34d8-4443-bd8f-dfe3dc2977a8,1,0,210972af-8687-4526-b288-60e7ee76cd61,210972af-8687-4526-b288-60e7ee76cd61,1,0,335f379a-2974-44ce-a668-e7ffe2ce6263,335f379a-2974-44ce-a668-e7ffe2ce6263,1,0,7edd75a2-9d03-4330-9185-28d0f0d4a2e4,7edd75a2-9d03-4330-9185-28d0f0d4a2e4,1,0,f7cc4f9e-cf9a-41f5-865f-d64108b981a5,f7cc4f9e-cf9a-41f5-865f-d64108b981a5,1,0,b58f8947-344c-4902-832c-d8004da55c34,b58f8947-344c-4902-832c-d8004da55c34,1,0,35cccc1d-3d67-4d39-aa79-2c30a5347587,35cccc1d-3d67-4d39-aa79-2c30a5347587,1,0,b6ee01eb-31ab-4f39-b4ff-37a04e3c7f35,b6ee01eb-31ab-4f39-b4ff-37a04e3c7f35,1,0,0776dfb2-67e0-4e11-9f94-abde790ff7e2,0776dfb2-67e0-4e11-9f94-abde790ff7e2,1,0,9c92b833-7406-48e2-9f59-69d575a3898f,9c92b833-7406-48e2-9f59-69d575a3898f,1,0,0cc5334f-8147-455c-8262-540324415812,0cc5334f-8147-455c-8262-540324415812,1,0,f3c4e6db-7c4e-4027-8bfd-f7854d566fc1,f3c4e6db-7c4e-4027-8bfd-f7854d566fc1,1,0,0eeb2f75-7092-4487-891f-cdbc9aa978cb,0eeb2f75-7092-4487-891f-cdbc9aa978cb,1,0,4ac60443-c7cb-492f-98b4-7e48bf9bfaa6,4ac60443-c7cb-492f-98b4-7e48bf9bfaa6,1,0,22979d50-ea57-4fab-9673-1b537838aead,22979d50-ea57-4fab-9673-1b537838aead,1,0,14676ee5-c247-46c6-a37e-c4362de79bb9,14676ee5-c247-46c6-a37e-c4362de79bb9,1,0,9fa36fe3-814e-4472-94ee-5d9d2b230b24,9fa36fe3-814e-4472-94ee-5d9d2b230b24,1,0,4b59dc62-0352-45a8-b33b-c42f4eea75ee,4b59dc62-0352-45a8-b33b-c42f4eea75ee,1,0,ea8a50ce-f09c-49f7-be58-ff2864e4eaa3,ea8a50ce-f09c-49f7-be58-ff2864e4eaa3,1,0,2020d672-bef4-4b30-885e-7f41364e412b,2020d672-bef4-4b30-885e-7f41364e412b,1,0,c292ddbc-9402-4c43-93d8-f8efafa6456e,c292ddbc-9402-4c43-93d8-f8efafa6456e,1,0,0281cbd6-972d-4632-9a6a-f8791e2534ee,0281cbd6-972d-4632-9a6a-f8791e2534ee,1,0,bae01f18-b6f3-44e4-93c3-ffcb3ef01b98,bae01f18-b6f3-44e4-93c3-ffcb3ef01b98,1,0,98d66bf0-617a-40aa-97bd-896d37a966ab,98d66bf0-617a-40aa-97bd-896d37a966ab,1,0,1847bb2f-8309-4c49-b752-ef7ec16d4230,1847bb2f-8309-4c49-b752-ef7ec16d4230,1,0,ca23f432-e2a3-4385-8cc1-7e9c96f9d7a1,ca23f432-e2a3-4385-8cc1-7e9c96f9d7a1,1,0,e1856045-f394-45b8-9f0c-298812f1f514,e1856045-f394-45b8-9f0c-298812f1f514,1,0,eb175c1d-7fcb-4807-82e3-688639468116,eb175c1d-7fcb-4807-82e3-688639468116,1,0,4ed9c099-700f-409b-bd91-e24719046953,4ed9c099-700f-409b-bd91-e24719046953,1,0,85b935b4-5eec-40cf-9d99-02cb3f599492,85b935b4-5eec-40cf-9d99-02cb3f599492,1,0,5764a412-4a20-4b2e-9905-ce74a9cac3ae,5764a412-4a20-4b2e-9905-ce74a9cac3ae,1,0,c4330791-d8f7-400f-b270-dee567e7a695,c4330791-d8f7-400f-b270-dee567e7a695,1,0,aab8ec4d-51de-4c1a-9794-266c119332d1,aab8ec4d-51de-4c1a-9794-266c119332d1,1,0,77cb6e52-37a9-423c-8260-6998161adcb5,77cb6e52-37a9-423c-8260-6998161adcb5,1,0,d903569d-911d-4277-a26f-afe2bf67eb09,d903569d-911d-4277-a26f-afe2bf67eb09,1,0,b5ac7de5-565f-4637-b267-dde3637e336b,b5ac7de5-565f-4637-b267-dde3637e336b,1,0,d4a6ab09-259f-4476-834c-a2b57cdeac05,d4a6ab09-259f-4476-834c-a2b57cdeac05,1,0,a56ff7f4-2259-455f-b707-b98aacd7d0b2,a56ff7f4-2259-455f-b707-b98aacd7d0b2,1,0,8c9636c3-0a84-4575-b4c7-6d8bb588e1b0,8c9636c3-0a84-4575-b4c7-6d8bb588e1b0,1,0,76e03401-7c07-4037-a464-d7377852de1d,76e03401-7c07-4037-a464-d7377852de1d,1,0,dc8239e8-fddf-411e-b51a-4230b63236cd,dc8239e8-fddf-411e-b51a-4230b63236cd,1,0,3b861376-2864-4de8-ba59-2a2835d7eaf6,3b861376-2864-4de8-ba59-2a2835d7eaf6,1,0,02910dcd-9e66-4239-a421-8067faf59577,02910dcd-9e66-4239-a421-8067faf59577,1,0,76d5a67f-bb11-4937-a66d-cdce28165562,76d5a67f-bb11-4937-a66d-cdce28165562,1,0,b99a23a5-bfbf-46ec-8268-ff89afdfc63a,b99a23a5-bfbf-46ec-8268-ff89afdfc63a,1,0,cdb93924-62ce-4268-9915-e6c67c1b9cb8,cdb93924-62ce-4268-9915-e6c67c1b9cb8,1,0,1139b6c7-7b55-45b4-98cf-ccac3bfaaa6c,1139b6c7-7b55-45b4-98cf-ccac3bfaaa6c,1,0,33c39990-f4fc-4629-83ba-b43b05a40ca6,33c39990-f4fc-4629-83ba-b43b05a40ca6,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,849f00c3-2f18-414c-97f6-32a99173fab9,849f00c3-2f18-414c-97f6-32a99173fab9,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,a587cade-4c91-4769-9c6a-a4fb4fe94196,a587cade-4c91-4769-9c6a-a4fb4fe94196,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,1300c46e-24d4-45cf-a899-3d26b5cf0b50,1300c46e-24d4-45cf-a899-3d26b5cf0b50,1,0,4cde6fdc-85fa-4c00-896c-51a68f5f10a5,4cde6fdc-85fa-4c00-896c-51a68f5f10a5,1,0,f41de07b-cba3-4bb8-9ec0-64ec59753f84,f41de07b-cba3-4bb8-9ec0-64ec59753f84,1,0,f78a5650-4d6c-4c17-95e0-e95cf8d9ad4b,f78a5650-4d6c-4c17-95e0-e95cf8d9ad4b,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,46417026-c44a-4a06-af41-9cf6495a33b4,46417026-c44a-4a06-af41-9cf6495a33b4,1,0,363c15f3-660e-4e19-b3cc-37c5d05e8d22,363c15f3-660e-4e19-b3cc-37c5d05e8d22,1,0,eeb4b6f1-2476-467d-9862-6fe9d3013b2c,eeb4b6f1-2476-467d-9862-6fe9d3013b2c,1,0,59d5cd7d-7f53-4015-89d9-bb8ad89f8c04,59d5cd7d-7f53-4015-89d9-bb8ad89f8c04,1,0,9d7f7dde-fea8-4064-abe2-bb7d04500cb2,9d7f7dde-fea8-4064-abe2-bb7d04500cb2,1,0,3af45dae-f563-4d23-a87a-11b4d9d5d7a7,3af45dae-f563-4d23-a87a-11b4d9d5d7a7,1,0,fe102b7b-b61f-4572-b2d0-c0af11bfb7d7,fe102b7b-b61f-4572-b2d0-c0af11bfb7d7,1,0,2cfa0db8-f0e6-4513-ab19-52dccff302bc,2cfa0db8-f0e6-4513-ab19-52dccff302bc,1,0,b9fece39-6e5d-44c0-af5c-ad13cfb71560,b9fece39-6e5d-44c0-af5c-ad13cfb71560,1,0,a9c30e99-c265-471d-9115-50ac2bb05191,a9c30e99-c265-471d-9115-50ac2bb05191,1,0,d388c9ca-1dbd-45b9-ac33-5ffa8cb11499,d388c9ca-1dbd-45b9-ac33-5ffa8cb11499,1,0,efebb079-b913-4249-b128-e0ffc7ab43dd,efebb079-b913-4249-b128-e0ffc7ab43dd,1,0,52077ee4-fef1-451f-8338-86563ff5cf60,52077ee4-fef1-451f-8338-86563ff5cf60,1,0,8e6780f8-8d0e-47d1-ac26-47bf5d906f61,8e6780f8-8d0e-47d1-ac26-47bf5d906f61,1,0,fd4a26c1-31e0-4216-92e0-1e090ec4f094,fd4a26c1-31e0-4216-92e0-1e090ec4f094,1,0,637148a3-0f54-4d41-91dd-a0aa6e191015,637148a3-0f54-4d41-91dd-a0aa6e191015,1,0,9a86e2fe-a9bc-4f0a-a16e-a97944fe8539,9a86e2fe-a9bc-4f0a-a16e-a97944fe8539,1,0,b6f745d7-1326-494e-b442-e4118955b5db,b6f745d7-1326-494e-b442-e4118955b5db,1,0,86755cbc-efd8-43e7-bba8-975c0a51f38f,86755cbc-efd8-43e7-bba8-975c0a51f38f,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,ae3358ad-ea3a-4b73-a305-02a152863978,ae3358ad-ea3a-4b73-a305-02a152863978,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,778c28e6-4548-45f3-a1bc-cb1dbf0cb388,778c28e6-4548-45f3-a1bc-cb1dbf0cb388,1,0,a2d6f2d9-0610-4ca9-bc15-58e341a049a4,a2d6f2d9-0610-4ca9-bc15-58e341a049a4,1,0,4dbf114a-5402-40b0-9cab-19601aa8328e,4dbf114a-5402-40b0-9cab-19601aa8328e,1,0,a0856ca2-6a66-4108-b6d4-82443cdccca6,a0856ca2-6a66-4108-b6d4-82443cdccca6,1,0,378b0708-a0a1-4c82-b55a-796acb27e696,378b0708-a0a1-4c82-b55a-796acb27e696,1,0,8e462c0e-c67a-45e9-9871-1f976b01632d,8e462c0e-c67a-45e9-9871-1f976b01632d,1,0,c5335e1f-3e47-46b7-b695-0653f825d855,c5335e1f-3e47-46b7-b695-0653f825d855,1,0,d7faad11-1e35-460c-8943-49370f328c03,d7faad11-1e35-460c-8943-49370f328c03,1,0,e4726010-85c5-4ccc-b574-4b3b55f0d391,e4726010-85c5-4ccc-b574-4b3b55f0d391,1,0,5d6770f2-9b3d-45c7-9e34-4c8626e482cf,5d6770f2-9b3d-45c7-9e34-4c8626e482cf,1,0,b01ace0e-7f21-4b6b-b751-074dcd9a8f54,b01ace0e-7f21-4b6b-b751-074dcd9a8f54,1,0,1f4f839a-4e19-45b8-a988-13ee604c269c,1f4f839a-4e19-45b8-a988-13ee604c269c,1,0,b3aa97e1-baef-45f4-9179-052f35527a5e,b3aa97e1-baef-45f4-9179-052f35527a5e,1,0,d613941f-ed4c-4957-b469-ea6b0d2a121d,d613941f-ed4c-4957-b469-ea6b0d2a121d,1,0,0d8d08e3-194f-416c-a1e0-aa92b40b7911,0d8d08e3-194f-416c-a1e0-aa92b40b7911,1,0,af0178fe-eb3a-485b-9acf-35c8702aa330,af0178fe-eb3a-485b-9acf-35c8702aa330,1,0,201d323b-4c0c-4c93-ae43-43a378ec0d9e,201d323b-4c0c-4c93-ae43-43a378ec0d9e,1,0,9e2c01b1-ccfe-4a68-a6af-8284e3e2396f,9e2c01b1-ccfe-4a68-a6af-8284e3e2396f,1,0,c513ceb0-0855-43ce-a311-c9bea88e2563,c513ceb0-0855-43ce-a311-c9bea88e2563,1,0,974bfc13-85c2-454a-b562-e72384eb4c31,974bfc13-85c2-454a-b562-e72384eb4c31,1,0,69cd6adc-b129-4fbc-804d-8d5aaef77280,69cd6adc-b129-4fbc-804d-8d5aaef77280,1,0,3431a3de-cb9d-46dc-b597-3203831796a9,3431a3de-cb9d-46dc-b597-3203831796a9,1,0,f3866271-04ed-4963-852e-cf41e9e18e1d,f3866271-04ed-4963-852e-cf41e9e18e1d,1,0,b77e5ec2-35cd-43ae-957f-af35214fa621,b77e5ec2-35cd-43ae-957f-af35214fa621,1,0,4a04d83d-cadd-4f36-9ec8-f926259c18ba,4a04d83d-cadd-4f36-9ec8-f926259c18ba,1,0,85e670c0-1616-4611-984c-3d40e890b2e9,85e670c0-1616-4611-984c-3d40e890b2e9,1,0,48ed25b0-afb9-414b-9a4e-8647fbdd95c3,48ed25b0-afb9-414b-9a4e-8647fbdd95c3,1,0,1e3a1148-1e9c-47b0-8f3c-f218c3b0094f,1e3a1148-1e9c-47b0-8f3c-f218c3b0094f,1,0,f1693207-2637-412a-972f-2bc79b9c7fc8,f1693207-2637-412a-972f-2bc79b9c7fc8,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,b67a509d-bb0f-427e-b447-4d4617078d6a,b67a509d-bb0f-427e-b447-4d4617078d6a,1,0,968ecfca-cf06-4952-83c1-a151e46c78a9,968ecfca-cf06-4952-83c1-a151e46c78a9,1,0,4945c734-a47d-44e9-8a7f-94b31911c1ce,4945c734-a47d-44e9-8a7f-94b31911c1ce,1,0,20a194e9-06cf-4013-bfa4-bc15554a54d0,20a194e9-06cf-4013-bfa4-bc15554a54d0,1,0,ab4f3d3d-bb5a-4dbc-b699-808458036b00,ab4f3d3d-bb5a-4dbc-b699-808458036b00,1,0,09761456-2273-437f-9316-0391cfaa81b3,09761456-2273-437f-9316-0391cfaa81b3,1,0,93922abc-98b9-4b3d-a5c8-7294378a69e1,93922abc-98b9-4b3d-a5c8-7294378a69e1,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,0f46b124-1575-4984-9bc1-b5e4696efc74,0f46b124-1575-4984-9bc1-b5e4696efc74,1,0,a0183a0b-1459-4b32-924c-6ea156f02125,a0183a0b-1459-4b32-924c-6ea156f02125,1,0,fc2dc619-41e0-4cce-a080-d5c8de5029a8,fc2dc619-41e0-4cce-a080-d5c8de5029a8,1,0,9609e5fb-fd11-463c-8679-9b10fc0993ed,9609e5fb-fd11-463c-8679-9b10fc0993ed,1,0,f438b941-2aae-4c67-81dc-340f6acc25b1,f438b941-2aae-4c67-81dc-340f6acc25b1,1,0,48075630-2041-48c3-9eb0-d2107cfcb249,48075630-2041-48c3-9eb0-d2107cfcb249,1,0,7d7e7e13-eb42-420d-9bfc-14fab901c3c1,7d7e7e13-eb42-420d-9bfc-14fab901c3c1,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,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,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,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,9cfd3d38-4e0e-40f4-ae77-7a997646e4b2,9cfd3d38-4e0e-40f4-ae77-7a997646e4b2,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,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,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,13beb01d-dd08-4a6d-863b-651e70bbf51f,13beb01d-dd08-4a6d-863b-651e70bbf51f,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,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,f00e93bf-6e3b-4819-a4e1-33471a6d0fff,f00e93bf-6e3b-4819-a4e1-33471a6d0fff,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,2bc2ca58-6cc0-4d4b-8672-f9328c86c2c1,2bc2ca58-6cc0-4d4b-8672-f9328c86c2c1,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,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,5c17a594-eb0b-4cdf-af35-0eaba968e065,5c17a594-eb0b-4cdf-af35-0eaba968e065,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,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,bf3304c0-5078-478f-bbf8-6178264c5f26,bf3304c0-5078-478f-bbf8-6178264c5f26,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,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,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,78942e92-a31c-4824-a614-a6e07ae26171,78942e92-a31c-4824-a614-a6e07ae26171,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,96dac7e8-5113-4217-ac0a-fffea4acc410,96dac7e8-5113-4217-ac0a-fffea4acc410,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,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,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,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,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,efd4e0a3-2f98-40ef-8089-c853cd588fa6,efd4e0a3-2f98-40ef-8089-c853cd588fa6,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,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,4ec26e3d-6c38-4c90-9f91-c2235f8b4154,4ec26e3d-6c38-4c90-9f91-c2235f8b4154,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,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,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,6de34ed8-5d6c-4bb6-af94-328e692b862e,6de34ed8-5d6c-4bb6-af94-328e692b862e,1,0,e705bde3-45c3-4ffd-a767-0320c6cc8b91,e705bde3-45c3-4ffd-a767-0320c6cc8b91,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,64ed8c1a-6446-4f0d-a2ef-c599e84c4909,64ed8c1a-6446-4f0d-a2ef-c599e84c4909,1,0,52fc85fb-309b-4739-bbd3-c3966657e973,52fc85fb-309b-4739-bbd3-c3966657e973,1,0,87081ab5-bdd5-4daa-88ef-8a2cba8c7d53,87081ab5-bdd5-4daa-88ef-8a2cba8c7d53,1,0,be3cfba8-e6f6-4202-ab0f-96c00fbf7462,be3cfba8-e6f6-4202-ab0f-96c00fbf7462,1,0,64ef1b5c-ec04-45eb-9998-bc573f4038d7,64ef1b5c-ec04-45eb-9998-bc573f4038d7,1,0,4fde5159-8f21-4151-8dbd-b2cd376d9392,4fde5159-8f21-4151-8dbd-b2cd376d9392,1,0,3ea799a6-6642-4388-b0a3-c2962e71ff51,3ea799a6-6642-4388-b0a3-c2962e71ff51,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,c343495b-5947-4fe7-a94b-d1f2b2455b4f,c343495b-5947-4fe7-a94b-d1f2b2455b4f,1,0,fbce7316-bb9a-40c1-af3c-352f4b559ab6,fbce7316-bb9a-40c1-af3c-352f4b559ab6,1,0,a3721457-b33b-4742-b6e1-531af10969d1,a3721457-b33b-4742-b6e1-531af10969d1,1,0,9619a603-e578-4f30-bcc6-adfddfa915c0,9619a603-e578-4f30-bcc6-adfddfa915c0,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,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,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,f5c4d4ad-dda6-4dc3-b112-61f776006f3c,f5c4d4ad-dda6-4dc3-b112-61f776006f3c,1,0,466d9fd7-188e-4f3b-a673-35db9075d537,466d9fd7-188e-4f3b-a673-35db9075d537,1,0,1c2e2c7d-c9d2-46a6-81f9-30078ca511c7,1c2e2c7d-c9d2-46a6-81f9-30078ca511c7,1,0,09d3717a-d6f9-42fd-ae9e-df5658fa3981,09d3717a-d6f9-42fd-ae9e-df5658fa3981,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,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,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,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,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,d1ade16c-bd56-46e5-874f-3117c5653192,d1ade16c-bd56-46e5-874f-3117c5653192,1,0,339398c0-6407-483c-82f7-266ef08b8657,339398c0-6407-483c-82f7-266ef08b8657,1,0,4f0a8f8c-68cb-4afe-b487-64e7ceeef9ab,4f0a8f8c-68cb-4afe-b487-64e7ceeef9ab,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,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,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,c91de10a-d370-4495-9d9e-98581e566385,c91de10a-d370-4495-9d9e-98581e566385,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,cee126de-d567-44d3-b14c-35da6e501324,cee126de-d567-44d3-b14c-35da6e501324,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,6b28a716-2fb1-47f7-a7d6-f2fe7edb32c3,6b28a716-2fb1-47f7-a7d6-f2fe7edb32c3,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,310aef5a-84d9-4a68-af78-d623beff8a88,310aef5a-84d9-4a68-af78-d623beff8a88,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,e057e428-99c1-419d-a169-697c1e825e94,e057e428-99c1-419d-a169-697c1e825e94,1,0,784a60bd-4070-476d-9b8b-f607c76dc52b,784a60bd-4070-476d-9b8b-f607c76dc52b,1,0,904d5bd0-3843-4aaa-86a3-f8e12282e5c0,904d5bd0-3843-4aaa-86a3-f8e12282e5c0,1,0,ce1ffc4e-56c2-45ce-80e8-8b96d00316bc,ce1ffc4e-56c2-45ce-80e8-8b96d00316bc,1,0,90420fe9-f75a-4bcc-8e1a-9d665a61ecef,90420fe9-f75a-4bcc-8e1a-9d665a61ecef,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,70a06a02-8fb8-4a39-9e50-b7c27c41f49f,70a06a02-8fb8-4a39-9e50-b7c27c41f49f,1,0,810755ad-e921-4250-a0d3-af77fe1b6c79,810755ad-e921-4250-a0d3-af77fe1b6c79,1,0,f0f2f6de-b5ca-416c-b2e7-70a2df0993a1,f0f2f6de-b5ca-416c-b2e7-70a2df0993a1,1,0,99a40d71-f47a-4c04-9137-d297eda2fad9,99a40d71-f47a-4c04-9137-d297eda2fad9,1,0,33fa908a-5516-43c8-94d3-28c60eba8d66,33fa908a-5516-43c8-94d3-28c60eba8d66,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,ec681c28-661c-43e3-9285-9fc606f2d24c,ec681c28-661c-43e3-9285-9fc606f2d24c,1,0,be0fbbfc-5873-41a6-80ef-35ed1b8adb4c,be0fbbfc-5873-41a6-80ef-35ed1b8adb4c,1,0,413c2d03-f717-4503-9723-c605114b2799,413c2d03-f717-4503-9723-c605114b2799,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,fad0898f-5769-46ab-bc5e-301924b851a0,fad0898f-5769-46ab-bc5e-301924b851a0,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,791dbdee-56f6-4fe3-ada4-965c9111d69e,791dbdee-56f6-4fe3-ada4-965c9111d69e,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,04013c34-8d59-4f87-b272-732d5a6dd675,04013c34-8d59-4f87-b272-732d5a6dd675,1,0,f9df9b6b-5051-46ef-bb1f-1974f41054a7,f9df9b6b-5051-46ef-bb1f-1974f41054a7,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,c0804a4a-64d5-457f-a542-8e5badccbdf1,c0804a4a-64d5-457f-a542-8e5badccbdf1,1,0,d6bd5459-6f95-4f9c-8d84-c67bdc716acf,d6bd5459-6f95-4f9c-8d84-c67bdc716acf,1,0,4a2d2790-debf-4dc2-8216-878d8808d161,4a2d2790-debf-4dc2-8216-878d8808d161,1,0,6dcbb379-d4f5-418a-a3ab-bb7c0e169058,6dcbb379-d4f5-418a-a3ab-bb7c0e169058,1,0,4507a92e-abb6-4329-88b2-3429bc694bc6,4507a92e-abb6-4329-88b2-3429bc694bc6,1,0,2694c1b4-536b-4187-adf6-0f8757aaae76,2694c1b4-536b-4187-adf6-0f8757aaae76,1,0,e523f88b-b3de-476e-a3cc-592970492dec,e523f88b-b3de-476e-a3cc-592970492dec,1,0,0e2107e2-8648-4b2e-9dfb-c23b1ff5b007,0e2107e2-8648-4b2e-9dfb-c23b1ff5b007,1,0,efb6b3b6-d57b-469f-a7c2-f4e0308d0c7f,efb6b3b6-d57b-469f-a7c2-f4e0308d0c7f,1,0,ea0843f4-60fb-4d44-abf4-0021867c636b,ea0843f4-60fb-4d44-abf4-0021867c636b,1,0,59aadc03-adbc-481f-89bc-d7f391789522,59aadc03-adbc-481f-89bc-d7f391789522,1,0,254f6ccd-0451-4231-91c9-4abe57b647be,254f6ccd-0451-4231-91c9-4abe57b647be,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,0a7d282e-45bb-4a87-b325-1659519867fb,0a7d282e-45bb-4a87-b325-1659519867fb,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,d029aa93-fea4-40e4-8cfb-2dc96544829b,d029aa93-fea4-40e4-8cfb-2dc96544829b,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,2116119f-7637-45a1-8e59-c9149619413b,2116119f-7637-45a1-8e59-c9149619413b,1,0,43882a2c-b625-4cfb-8220-3d12bfee09e4,43882a2c-b625-4cfb-8220-3d12bfee09e4,1,0,90639fdb-144d-495a-a097-76c45107fc97,90639fdb-144d-495a-a097-76c45107fc97,1,0,c076b7fd-7e17-4811-82e7-047e2bf43bb0,c076b7fd-7e17-4811-82e7-047e2bf43bb0,1,0,84b28732-9001-4798-b613-35ea65c26cce,84b28732-9001-4798-b613-35ea65c26cce,1,0,77d8285f-a87b-4a4e-b6ee-85bcd54dee12,77d8285f-a87b-4a4e-b6ee-85bcd54dee12,1,0,f2ec9416-3830-4607-90f3-f77fc53c9c70,f2ec9416-3830-4607-90f3-f77fc53c9c70,1,0,3057de81-eb41-4161-9dc2-5445699906af,3057de81-eb41-4161-9dc2-5445699906af,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,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,905b787b-c638-4703-af70-416a2ce43b50,905b787b-c638-4703-af70-416a2ce43b50,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,f9c0862c-34a2-41a3-ae46-b6a8e1ad1b08,f9c0862c-34a2-41a3-ae46-b6a8e1ad1b08,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,71e52f63-04db-4336-ace6-b143d0a7d250,71e52f63-04db-4336-ace6-b143d0a7d250,1,0,afe79ef0-7830-43ce-85f3-c4c97831aa67,afe79ef0-7830-43ce-85f3-c4c97831aa67,1,0,0d7c3192-b15b-4d40-83f9-b76c6f8e654f,0d7c3192-b15b-4d40-83f9-b76c6f8e654f,1,0,fe07f268-bcfd-40c6-adf3-79df859ff731,fe07f268-bcfd-40c6-adf3-79df859ff731,1,0,1a1c88ff-b0c4-42c3-bf10-ebdf4de935b7,1a1c88ff-b0c4-42c3-bf10-ebdf4de935b7,1,0,15e90374-99d9-48f7-b7d6-ec160cdb378f,15e90374-99d9-48f7-b7d6-ec160cdb378f,1,0,ad5b6b8e-c2b5-45aa-8e07-50ae8877ac8f,ad5b6b8e-c2b5-45aa-8e07-50ae8877ac8f,1,0,6c470f57-c920-435a-a013-ff83a737cf3a,6c470f57-c920-435a-a013-ff83a737cf3a,1,0,a5e13e12-72b7-477d-8d80-06015fa5dece,a5e13e12-72b7-477d-8d80-06015fa5dece,1,0,d9c47acd-b5ee-4ea1-b247-7cc09a13eb82,d9c47acd-b5ee-4ea1-b247-7cc09a13eb82,1,0,4a81906a-7db7-4e7d-a95e-79b07a43e573,4a81906a-7db7-4e7d-a95e-79b07a43e573,1,0,0bcabdf4-3348-405d-ba75-7bcc106f9e7f,0bcabdf4-3348-405d-ba75-7bcc106f9e7f,1,0,5f2980ca-3f1c-4680-a6e9-477825442782,5f2980ca-3f1c-4680-a6e9-477825442782,1,0,40fd6b4a-2180-4403-b7e6-48b42d8285b7,40fd6b4a-2180-4403-b7e6-48b42d8285b7,1,0,ef098c52-fcfa-4f0f-85b0-aba0d5aa46b2,ef098c52-fcfa-4f0f-85b0-aba0d5aa46b2,1,0,a671cb1e-b27a-44bb-a8ca-1388f099de2e,a671cb1e-b27a-44bb-a8ca-1388f099de2e,1,0,6cff6b09-91b5-4f2b-89aa-23d2f83f9d89,6cff6b09-91b5-4f2b-89aa-23d2f83f9d89,1,0,a4b6920e-3e25-4798-809a-27d7bfae4ee7,a4b6920e-3e25-4798-809a-27d7bfae4ee7,1,0,981f6e35-64b8-4d63-b383-32ea71fcd025,981f6e35-64b8-4d63-b383-32ea71fcd025,1,0,9a7b964d-1c06-44af-8d25-f84493c70a42,9a7b964d-1c06-44af-8d25-f84493c70a42,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,18ba2c0c-d606-47ee-9409-66acb24bd794,18ba2c0c-d606-47ee-9409-66acb24bd794,1,0,9f24891c-3846-455a-bf95-be3b186f4342,9f24891c-3846-455a-bf95-be3b186f4342,1,0,ddc332d9-1d60-40fe-87fd-7f2164db1edf,ddc332d9-1d60-40fe-87fd-7f2164db1edf,1,0,d0e3c3a5-e74c-4c0a-8679-77e6a097eb36,d0e3c3a5-e74c-4c0a-8679-77e6a097eb36,1,0,20c43755-49cc-4f11-bd2f-52a9e53547ef,20c43755-49cc-4f11-bd2f-52a9e53547ef,1,0,7dbed991-4883-444c-8ce2-96c203a905f2,7dbed991-4883-444c-8ce2-96c203a905f2,1,0,bbadd00d-6410-41ec-a7d8-4dbd52986cc2,bbadd00d-6410-41ec-a7d8-4dbd52986cc2,1,0,d5f66278-4ab2-407a-abef-eb7636e9ba95,d5f66278-4ab2-407a-abef-eb7636e9ba95,1,0,61e51391-c412-46a5-8290-d5183ad0db83,61e51391-c412-46a5-8290-d5183ad0db83,1,0,e9dfdaa2-4094-4501-a38a-3811e7e4c708,e9dfdaa2-4094-4501-a38a-3811e7e4c708,1,0,0a62947e-848a-47fa-a239-95aee6b955d4,0a62947e-848a-47fa-a239-95aee6b955d4,1,0,beaef14b-175f-4ebe-b387-9c922a42c99e,beaef14b-175f-4ebe-b387-9c922a42c99e,1,0,13daaad0-2726-4065-8158-47059865452a,13daaad0-2726-4065-8158-47059865452a,1,0,a7829dfb-adb9-4401-a609-ca9a0f2376b3,a7829dfb-adb9-4401-a609-ca9a0f2376b3,1,0,26f1076a-8100-4cf4-9539-29637a5e9137,26f1076a-8100-4cf4-9539-29637a5e9137,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,5225b4da-431e-469d-a30c-31fa434b7e86,5225b4da-431e-469d-a30c-31fa434b7e86,1,0,68dcbdd5-c1fd-472f-873c-359d3a237b8c,68dcbdd5-c1fd-472f-873c-359d3a237b8c,1,0,3c6e831c-c934-46bb-8040-edd6de81ba1b,3c6e831c-c934-46bb-8040-edd6de81ba1b,1,0,3c737aff-9581-409a-9a6e-d5e3c133d8df,3c737aff-9581-409a-9a6e-d5e3c133d8df,1,0,916a9ea9-309d-4a7a-9ded-63bda01a39d4,916a9ea9-309d-4a7a-9ded-63bda01a39d4,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,05681509-254d-4232-af69-62a63ed05716,05681509-254d-4232-af69-62a63ed05716,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,d7a72321-5f1f-427e-a54d-f308dab1b9c4,d7a72321-5f1f-427e-a54d-f308dab1b9c4,1,0,b183eb38-a96e-4e12-9220-4b4027ae875c,b183eb38-a96e-4e12-9220-4b4027ae875c,1,0,07f7e1b5-07b0-4017-bb91-31759c4ffed1,07f7e1b5-07b0-4017-bb91-31759c4ffed1,1,0,6de76d43-40d5-494f-8d30-2ef80c79bc7e,6de76d43-40d5-494f-8d30-2ef80c79bc7e,1,0,60146806-ee46-44d5-8a7a-2ed48741e1c1,60146806-ee46-44d5-8a7a-2ed48741e1c1,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,bdc51d67-5fc2-4d28-8875-69e33e625be6,bdc51d67-5fc2-4d28-8875-69e33e625be6,1,0,94ca9aa0-f61f-496b-8fef-9e6fb7bd8f87,94ca9aa0-f61f-496b-8fef-9e6fb7bd8f87,1,0,b494ca7b-6548-4fa2-932c-acdf8c62a78a,b494ca7b-6548-4fa2-932c-acdf8c62a78a,1,0,2d279292-f9d6-4d5a-aaeb-f82f6485ac54,2d279292-f9d6-4d5a-aaeb-f82f6485ac54,1,0,f335aa38-4e9e-4653-9a76-b6d4ae178c93,f335aa38-4e9e-4653-9a76-b6d4ae178c93,1,0,a62894bc-fab4-4ed4-a57d-cbe725527198,a62894bc-fab4-4ed4-a57d-cbe725527198,1,0,b5bb5376-27a6-43f2-9e91-bf7c913b89fd,b5bb5376-27a6-43f2-9e91-bf7c913b89fd,1,0,24861cd2-2be0-4454-8154-2201e63be266,24861cd2-2be0-4454-8154-2201e63be266,1,0,2e364599-aad9-4d1d-a4df-6cbd3ed768e7,2e364599-aad9-4d1d-a4df-6cbd3ed768e7,1,0,b1dd4569-6ed9-49f4-b05b-359229afb7a5,b1dd4569-6ed9-49f4-b05b-359229afb7a5,1,0,c14cac09-820e-47ae-81bb-eb497950d40c,c14cac09-820e-47ae-81bb-eb497950d40c,1,0,201cd431-6027-466c-abec-09ff65f42244,201cd431-6027-466c-abec-09ff65f42244,1,0,1018c5d8-8aed-49ba-a27c-a44bddd96144,1018c5d8-8aed-49ba-a27c-a44bddd96144,1,0,a81e5d20-9c42-462d-83a3-f86522c473f5,a81e5d20-9c42-462d-83a3-f86522c473f5,1,0,1ce4440e-3709-4cb1-8505-2379d5146be3,1ce4440e-3709-4cb1-8505-2379d5146be3,1,0,81c1f13c-e4ac-46b8-a205-c4f695ddf667,81c1f13c-e4ac-46b8-a205-c4f695ddf667,1,0,a26d8489-88a8-438e-bb58-c7b5a742a243,a26d8489-88a8-438e-bb58-c7b5a742a243,1,0,4b700bfd-5179-4504-b710-fd65036dded7,4b700bfd-5179-4504-b710-fd65036dded7,1,0,b046cb0b-f88b-4fb1-b08d-bb02b20dee74,b046cb0b-f88b-4fb1-b08d-bb02b20dee74,1,0,67dc31fa-cc64-4d29-96aa-65a7fd480790,67dc31fa-cc64-4d29-96aa-65a7fd480790,1,0,17f0e86d-8661-492c-85fa-2ce3cd1a57d5,17f0e86d-8661-492c-85fa-2ce3cd1a57d5,1,0,1cd36cf8-ae51-4fca-91d8-60c82f9e21e1,1cd36cf8-ae51-4fca-91d8-60c82f9e21e1,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,65ad33ce-edab-4f8b-8f44-1a5634d87191,65ad33ce-edab-4f8b-8f44-1a5634d87191,1,0,bcd727b5-4678-41e9-85d5-98d4157cdd77,bcd727b5-4678-41e9-85d5-98d4157cdd77,1,0,38c6dd83-2a70-4c4a-9f29-3b2b54a15501,38c6dd83-2a70-4c4a-9f29-3b2b54a15501,1,0,f403fcb3-a4f8-479d-9fa1-85d458b9a4b5,f403fcb3-a4f8-479d-9fa1-85d458b9a4b5,1,0,c56d3cfe-6ae1-4fe3-abdc-2d845049ddde,c56d3cfe-6ae1-4fe3-abdc-2d845049ddde,1,0,66f1dc54-f28c-4fb7-a6c9-f839d656e87c,66f1dc54-f28c-4fb7-a6c9-f839d656e87c,1,0,b8e3d08d-d442-4ffa-83d8-f372a7d2d340,b8e3d08d-d442-4ffa-83d8-f372a7d2d340,1,0,ebba727b-8155-4dd8-8ea0-207ca396566b,ebba727b-8155-4dd8-8ea0-207ca396566b,1,0,e4166141-f18f-4d27-beb5-9e30fe30f842,e4166141-f18f-4d27-beb5-9e30fe30f842,1,0,b62434ac-ef9f-4fe7-8279-357e0dd760ac,b62434ac-ef9f-4fe7-8279-357e0dd760ac,1,0,eb1c7d02-f5fc-4b37-9b32-7dd828958d76,eb1c7d02-f5fc-4b37-9b32-7dd828958d76,1,0,db2f20a7-e01f-4c03-9343-a815e1b46b50,db2f20a7-e01f-4c03-9343-a815e1b46b50,1,0,cf122ec9-d781-434c-9742-300e701317d6,cf122ec9-d781-434c-9742-300e701317d6,1,0,2aa2a968-2cac-4883-9bc8-5a3ccbd2e7a9,2aa2a968-2cac-4883-9bc8-5a3ccbd2e7a9,1,0,7d1361af-c5d3-4312-ab5e-ba00bf3418f2,7d1361af-c5d3-4312-ab5e-ba00bf3418f2,1,0,d7fdb3d5-3c18-4d9c-938a-2fbe8a96e877,d7fdb3d5-3c18-4d9c-938a-2fbe8a96e877,1,0,b8658e11-42b6-41bb-b384-5380e2228338,b8658e11-42b6-41bb-b384-5380e2228338,1,0,40c0919f-2c53-4502-af06-745dfa47fd8e,40c0919f-2c53-4502-af06-745dfa47fd8e,1,0,b01e4e7f-1b01-4c19-ab4b-7a8c1f6b0d22,b01e4e7f-1b01-4c19-ab4b-7a8c1f6b0d22,1,0,662a2803-da19-40c7-a906-e20d0843f67f,662a2803-da19-40c7-a906-e20d0843f67f,1,0,327c0731-1496-4463-837f-8f9c3e4c1a49,327c0731-1496-4463-837f-8f9c3e4c1a49,1,0,d74a37c2-7f50-40da-b7f8-29f79ae7230c,d74a37c2-7f50-40da-b7f8-29f79ae7230c,1,0,37a677e7-6661-41b5-ba68-740361168ccf,37a677e7-6661-41b5-ba68-740361168ccf,1,0,2a41d20d-d57a-4ce8-832f-c1b83099e563,2a41d20d-d57a-4ce8-832f-c1b83099e563,1,0,a0701ad3-572a-4806-91c0-6c5fff8dd350,a0701ad3-572a-4806-91c0-6c5fff8dd350,1,0,c9f268d1-6d2a-47d5-9371-f951b95d24a6,c9f268d1-6d2a-47d5-9371-f951b95d24a6,1,0,86b155be-d611-46b4-8275-bb19a2fa20ba,86b155be-d611-46b4-8275-bb19a2fa20ba,1,0,fedb2d36-bb2e-49dd-9d52-afcc41f3636b,fedb2d36-bb2e-49dd-9d52-afcc41f3636b,1,0,5d74d2d1-a2af-4a52-a884-a60e6b07ffac,5d74d2d1-a2af-4a52-a884-a60e6b07ffac,1,0,69e67507-e063-4221-9b84-2ee9d8903c1a,69e67507-e063-4221-9b84-2ee9d8903c1a,1,0,a649cb56-2a53-4508-8bf4-9aa01373ede2,a649cb56-2a53-4508-8bf4-9aa01373ede2,1,0,7e572d75-3a89-43c0-ad68-18498d67f8ca,7e572d75-3a89-43c0-ad68-18498d67f8ca,1,0,3c159a42-d9f9-4de4-a86f-893b1fc65b46,3c159a42-d9f9-4de4-a86f-893b1fc65b46,1,0,545cd0e7-4125-48f1-9123-0bc39e436e5e,545cd0e7-4125-48f1-9123-0bc39e436e5e,1,0,9a17eec6-b517-4133-8d25-bb953d84461f,9a17eec6-b517-4133-8d25-bb953d84461f,1,0,a0a61d7f-879d-4e92-98a3-5291c834c341,a0a61d7f-879d-4e92-98a3-5291c834c341,1,0,7bf60016-2edc-443b-98b4-0864b548c482,7bf60016-2edc-443b-98b4-0864b548c482,1,0,74139209-f345-4fd9-9ade-15cc4d399836,74139209-f345-4fd9-9ade-15cc4d399836,1,0,e39de1c5-b43b-4f71-aa32-c03b8afd6f65,e39de1c5-b43b-4f71-aa32-c03b8afd6f65,1,0,d5b6aad4-b1bd-464b-aca0-f8455d6388b4,d5b6aad4-b1bd-464b-aca0-f8455d6388b4,1,0,033ab408-fa51-4af2-a82c-f3167de00681,033ab408-fa51-4af2-a82c-f3167de00681,1,0,f7267120-f367-4d47-be5e-e2aa7a2ada46,f7267120-f367-4d47-be5e-e2aa7a2ada46,1,0,911b4ba4-1902-4c69-a4c9-963ab93d35b0,911b4ba4-1902-4c69-a4c9-963ab93d35b0,1,0,70cf60eb-a5f8-4573-a28b-6844721459de,70cf60eb-a5f8-4573-a28b-6844721459de,1,0,e2666bd9-bf44-408b-98fa-b9be26bde33f,e2666bd9-bf44-408b-98fa-b9be26bde33f,1,0,9151fa13-6612-4c4c-a264-3fd669205de7,9151fa13-6612-4c4c-a264-3fd669205de7,1,0,fee8fd9d-be7d-4560-9b96-819ffd497c88,fee8fd9d-be7d-4560-9b96-819ffd497c88,1,0,c86135b4-063c-4ca8-99e2-35c61026b43f,c86135b4-063c-4ca8-99e2-35c61026b43f,1,0,186792a9-0a07-4b6d-a9a0-337221f6b009,186792a9-0a07-4b6d-a9a0-337221f6b009,1,0,49163bf6-4a6a-4da9-a0ed-257c22224b47,49163bf6-4a6a-4da9-a0ed-257c22224b47,1,0,74c71abe-90eb-4c05-a4a6-375a93e7b99c,74c71abe-90eb-4c05-a4a6-375a93e7b99c,1,0,d36efd98-34a7-41b4-99b6-34c09e71525a,d36efd98-34a7-41b4-99b6-34c09e71525a,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,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,28dd22df-07cc-4e6d-89b2-b15a13f76615,28dd22df-07cc-4e6d-89b2-b15a13f76615,1,0,0c98b025-5adb-44dc-ab14-4c6517cc230b,0c98b025-5adb-44dc-ab14-4c6517cc230b,1,0,da2f09bd-109f-43aa-a90b-f033d17ed689,da2f09bd-109f-43aa-a90b-f033d17ed689,1,0,c4b3cb31-356e-4868-921c-f6710349def8,c4b3cb31-356e-4868-921c-f6710349def8,1,0,44526cb1-561d-4b87-a628-d79cc64ccdec,44526cb1-561d-4b87-a628-d79cc64ccdec,1,0,5e4dbba3-07df-4e30-be14-d9244f5ec21c,5e4dbba3-07df-4e30-be14-d9244f5ec21c,1,0,c8116351-4487-40f3-ae04-1e0741cc5df6,c8116351-4487-40f3-ae04-1e0741cc5df6,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,83c860a2-d0d7-4b7c-a127-78d86b155cfa,83c860a2-d0d7-4b7c-a127-78d86b155cfa,1,0,06e45039-8bc4-44dd-8a93-2cec34ad51ee,06e45039-8bc4-44dd-8a93-2cec34ad51ee,1,0,46e01647-cbdd-4387-affc-29b92ede8644,46e01647-cbdd-4387-affc-29b92ede8644,1,0,faa44953-118b-4027-a913-c485bca7a93f,faa44953-118b-4027-a913-c485bca7a93f,1,0,c9bd0dcd-98ec-4dc9-869a-e735fd269046,c9bd0dcd-98ec-4dc9-869a-e735fd269046,1,0,d039bfa4-39a0-43d4-ab6a-0697f9d2b375,d039bfa4-39a0-43d4-ab6a-0697f9d2b375,1,0,09072c75-75c7-4050-b674-9454558a1f87,09072c75-75c7-4050-b674-9454558a1f87,1,0,f0c8d2d2-d597-4f09-8257-0fa7524f1e44,f0c8d2d2-d597-4f09-8257-0fa7524f1e44,1,0,3e2f75ab-4143-48ca-83db-3006cb2a8584,3e2f75ab-4143-48ca-83db-3006cb2a8584,1,0,91a82492-5e27-46b6-b1a8-48e89a437715,91a82492-5e27-46b6-b1a8-48e89a437715,1,0,53bc7bfd-8786-464f-a615-ceae2971cbc9,53bc7bfd-8786-464f-a615-ceae2971cbc9,1,0,aa77817b-bd2f-4757-99b0-5e67a1b032d3,aa77817b-bd2f-4757-99b0-5e67a1b032d3,1,0,8cc27936-976d-4f31-91c6-644d15b69c55,8cc27936-976d-4f31-91c6-644d15b69c55,1,0,cf9de063-89f4-4632-b7a1-0cfbea6df643,cf9de063-89f4-4632-b7a1-0cfbea6df643,1,0,ee3bab2c-bd6a-4a33-89a2-78b4dd89bb88,ee3bab2c-bd6a-4a33-89a2-78b4dd89bb88,1,0,2478fb43-57a3-4348-b3d4-61f015e4e231,2478fb43-57a3-4348-b3d4-61f015e4e231,1,0,daa99b45-b2d2-47bc-9d7e-2d21b1a3dfd8,daa99b45-b2d2-47bc-9d7e-2d21b1a3dfd8,1,0,0449c160-01e5-4fe4-8759-5b93c484b467,0449c160-01e5-4fe4-8759-5b93c484b467,1,0,0684e4ba-28c7-4032-a43f-a3a4a37ec50b,0684e4ba-28c7-4032-a43f-a3a4a37ec50b,1,0,bcac012d-b4a9-49bb-9c54-722c741d183c,bcac012d-b4a9-49bb-9c54-722c741d183c,1,0,5370d079-975f-4f7c-95c3-7868147ecc76,5370d079-975f-4f7c-95c3-7868147ecc76,1,0,4dd66f76-e4e0-4f84-9fad-bb922cd51503,4dd66f76-e4e0-4f84-9fad-bb922cd51503,1,0,e76a411a-121b-4791-a785-dd54795eaa7f,e76a411a-121b-4791-a785-dd54795eaa7f,1,0,66844ae3-f098-462c-aef8-1fd38c403760,66844ae3-f098-462c-aef8-1fd38c403760,1,0,be96718a-223d-4597-bccf-2fb7d16dbbcc,be96718a-223d-4597-bccf-2fb7d16dbbcc,1,0,eb551461-ae0d-41dd-89fa-2f6e7f3c4840,eb551461-ae0d-41dd-89fa-2f6e7f3c4840,1,0,acec1961-a953-4f7b-b42b-baa1b8b3be14,acec1961-a953-4f7b-b42b-baa1b8b3be14,1,0,eb6394d4-1679-4494-8d23-419f5a714cdc,eb6394d4-1679-4494-8d23-419f5a714cdc,1,0,ffb3c2e4-bb9b-4d12-80bb-79e3c6d5700d,ffb3c2e4-bb9b-4d12-80bb-79e3c6d5700d,1,0,7e9fadd6-d0ad-4856-a195-1058f00bf488,7e9fadd6-d0ad-4856-a195-1058f00bf488,1,0,76d0c5ee-5b85-4670-ba1c-8fdaa7ba872a,76d0c5ee-5b85-4670-ba1c-8fdaa7ba872a,1,0,84f67d35-ca48-4fff-94e4-5f4beb7e3c08,84f67d35-ca48-4fff-94e4-5f4beb7e3c08,1,0,2972c142-0aac-4e36-b34e-4e73f18ba9cb,2972c142-0aac-4e36-b34e-4e73f18ba9cb,1,0,d6915227-4ede-4cd2-9e7c-d23dc409936e,d6915227-4ede-4cd2-9e7c-d23dc409936e,1,0,46c3341c-352c-43fb-b338-15c8ad487fbf,46c3341c-352c-43fb-b338-15c8ad487fbf,1,0,a2a8b35e-04e5-4176-8d3b-2cd4dfb6d653,a2a8b35e-04e5-4176-8d3b-2cd4dfb6d653,1,0,ea7ad7f5-e502-49a9-b4a6-e9adceb15057,ea7ad7f5-e502-49a9-b4a6-e9adceb15057,1,0,f9450d6a-849c-4621-b528-9cafc4819b44,f9450d6a-849c-4621-b528-9cafc4819b44,1,0,5b7cac99-2fca-4dbb-8d49-b84f310a2496,5b7cac99-2fca-4dbb-8d49-b84f310a2496,1,0,a4673d5c-9dae-48f7-9c91-53c1302a266a,a4673d5c-9dae-48f7-9c91-53c1302a266a,1,0,1a2a0dd2-b0dc-41e1-8c4f-f275f025bad2,1a2a0dd2-b0dc-41e1-8c4f-f275f025bad2,1,0,c255932e-fc34-402c-a6e9-2fda1ffbcdf2,c255932e-fc34-402c-a6e9-2fda1ffbcdf2,1,0,0d323d88-2823-493e-8c1e-b2b9f3dcdd3e,0d323d88-2823-493e-8c1e-b2b9f3dcdd3e,1,0,3f410b53-e762-41fe-9469-d538dfec3a9a,3f410b53-e762-41fe-9469-d538dfec3a9a,1,0,bb11c22e-0fbd-4985-be67-0866df7f7e61,bb11c22e-0fbd-4985-be67-0866df7f7e61,1,0,92ea60c0-1027-4337-9130-40028951f09b,92ea60c0-1027-4337-9130-40028951f09b,1,0,46710ce6-0f82-4c4c-91e8-f8ee726e00ce,46710ce6-0f82-4c4c-91e8-f8ee726e00ce,1,0,d64f18a4-ff93-4284-9eca-085109eafd24,d64f18a4-ff93-4284-9eca-085109eafd24,1,0,6381b8d2-7722-45c7-8800-19f6574d7d7a,6381b8d2-7722-45c7-8800-19f6574d7d7a,1,0,bf428e7a-2970-4bab-8c8e-35ea16151c0e,bf428e7a-2970-4bab-8c8e-35ea16151c0e,1,0,232dbd5f-b7f1-4463-946c-b8fbf93ac466,232dbd5f-b7f1-4463-946c-b8fbf93ac466,1,0,a1a74b34-4174-4769-8f03-bd4a32e83418,a1a74b34-4174-4769-8f03-bd4a32e83418,1,0,32fd1fe7-34d3-43ed-baba-16ccd43aa25a,32fd1fe7-34d3-43ed-baba-16ccd43aa25a,1,0,8f4d1259-abdc-4495-8e1e-8c8abcd336ca,8f4d1259-abdc-4495-8e1e-8c8abcd336ca,1,0,7086199b-20ec-4a74-a52f-71824134e8c5,7086199b-20ec-4a74-a52f-71824134e8c5,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,8e07a76d-db30-491c-b296-181c8e689382,8e07a76d-db30-491c-b296-181c8e689382,1,0,4f1752ae-42d0-477d-854b-de143c428a85,4f1752ae-42d0-477d-854b-de143c428a85,1,0,29674b66-c542-4a34-8caa-8e57a51bd190,29674b66-c542-4a34-8caa-8e57a51bd190,1,0,1a41acdd-3503-4c69-b93b-eb1cb6749712,1a41acdd-3503-4c69-b93b-eb1cb6749712,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,47714327-dd28-4e32-a1c9-20ee47d9afd0,47714327-dd28-4e32-a1c9-20ee47d9afd0,1,0,4d76ef7a-f1a6-4147-84f4-6e1717dfd77e,4d76ef7a-f1a6-4147-84f4-6e1717dfd77e,1,0,d1eb0aa7-b485-4f3a-846d-be069ca807c0,d1eb0aa7-b485-4f3a-846d-be069ca807c0,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,1d66cd80-fd61-4bf2-a7f9-34b33443e1ea,1d66cd80-fd61-4bf2-a7f9-34b33443e1ea,1,0,7b638691-416d-4484-81f4-e4c796a92818,7b638691-416d-4484-81f4-e4c796a92818,1,0,03ab92e2-81a3-4e38-84a8-85c1d78d51e9,03ab92e2-81a3-4e38-84a8-85c1d78d51e9,1,0,ef09e296-af08-44ff-8303-4833b23a12c3,ef09e296-af08-44ff-8303-4833b23a12c3,1,0,8984f28e-8c83-499a-838c-5f51410d7b0e,8984f28e-8c83-499a-838c-5f51410d7b0e,1,0,73bf8c40-76ee-4c61-b56a-898bcd6da1ca,73bf8c40-76ee-4c61-b56a-898bcd6da1ca,1,0,434a0471-1389-4764-a901-69249e1fdc38,434a0471-1389-4764-a901-69249e1fdc38,1,0,7b6c1d9f-968e-4126-990e-fa2787ad83b2,7b6c1d9f-968e-4126-990e-fa2787ad83b2,1,0,b89108a9-8b4e-4b34-8f72-4eb502963743,b89108a9-8b4e-4b34-8f72-4eb502963743,1,0,398b93b1-620d-4942-ba44-7ea0f9cc14f0,398b93b1-620d-4942-ba44-7ea0f9cc14f0,1,0,7b06537e-d818-41b3-acc5-b6b63b543be8,7b06537e-d818-41b3-acc5-b6b63b543be8,1,0,74226c30-5f9b-4e47-b7cc-35e92139cbfa,74226c30-5f9b-4e47-b7cc-35e92139cbfa,1,0,09f812cb-770c-4f85-87f0-db35952c764e,09f812cb-770c-4f85-87f0-db35952c764e,1,0,8bbbcfd9-b6da-41f6-b543-863b12b9fb59,8bbbcfd9-b6da-41f6-b543-863b12b9fb59,1,0,eb48f8a9-1644-432d-a8a8-e63bc013a2fe,eb48f8a9-1644-432d-a8a8-e63bc013a2fe,1,0,36951804-70a4-45fa-9fad-1c37fd3ce7b7,36951804-70a4-45fa-9fad-1c37fd3ce7b7,1,0,d0031774-fa35-469f-9f8a-3aaa920928a0,d0031774-fa35-469f-9f8a-3aaa920928a0,1,0,6da02618-2454-48fe-b1dc-399d0d40d043,6da02618-2454-48fe-b1dc-399d0d40d043,1,0,5a080203-ecd2-4f40-ac64-c8024eda595e,5a080203-ecd2-4f40-ac64-c8024eda595e,1,0,3eabcb69-398b-43f5-bf53-c20f90bee5c4,3eabcb69-398b-43f5-bf53-c20f90bee5c4,1,0,9c33639e-529a-490f-9365-80778b54c3f7,9c33639e-529a-490f-9365-80778b54c3f7,1,0,561b97a0-9d42-4735-a606-8d5b5862689f,561b97a0-9d42-4735-a606-8d5b5862689f,1,0,10d5c0c2-301f-4477-a88f-254f99a30fa0,10d5c0c2-301f-4477-a88f-254f99a30fa0,1,0,84ba4ba7-2743-438a-8b65-cc14090f8a92,84ba4ba7-2743-438a-8b65-cc14090f8a92,1,0,cdc4312c-b1af-407c-bfc3-28db04915aa6,cdc4312c-b1af-407c-bfc3-28db04915aa6,1,0,97b76ee8-c73f-456b-9008-b453bd376317,97b76ee8-c73f-456b-9008-b453bd376317,1,0,ee305e39-978b-4069-a4e6-05e761a5d6ae,ee305e39-978b-4069-a4e6-05e761a5d6ae,1,0,965650ae-8a6e-469a-869a-0ce821818058,965650ae-8a6e-469a-869a-0ce821818058,1,0,00fde8e2-3eb3-484a-a960-a390cbdaa16a,00fde8e2-3eb3-484a-a960-a390cbdaa16a,1,0,c7a82aa5-043c-46a2-9f5a-cba098ca36bd,c7a82aa5-043c-46a2-9f5a-cba098ca36bd,1,0,94744edd-61d0-4329-95d8-fc19dc7c6af1,94744edd-61d0-4329-95d8-fc19dc7c6af1,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,d9f76f2f-2b32-4986-8987-a585f831d951,d9f76f2f-2b32-4986-8987-a585f831d951,1,0,b1a96083-1c12-43f4-ba61-3a0588fc7310,b1a96083-1c12-43f4-ba61-3a0588fc7310,1,0,2e37c7d0-b97f-4c72-821e-b2bb77fb3140,2e37c7d0-b97f-4c72-821e-b2bb77fb3140,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,ee49981d-91f6-4002-9205-b8a53e6f54e0,ee49981d-91f6-4002-9205-b8a53e6f54e0,1,0,64a74365-ca32-4b7d-af8e-695624e3dcb6,64a74365-ca32-4b7d-af8e-695624e3dcb6,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,eaa11272-8cc2-4f82-808f-e4f641748574,eaa11272-8cc2-4f82-808f-e4f641748574,1,0,9dfd78a7-74ba-4c7a-8842-4baf4ffd5e4f,9dfd78a7-74ba-4c7a-8842-4baf4ffd5e4f,1,0,7d422da3-8ec4-4bc8-94ba-88d92625d4c7,7d422da3-8ec4-4bc8-94ba-88d92625d4c7,1,0,8035e1ce-a36a-4628-8196-1f04f50e230a,8035e1ce-a36a-4628-8196-1f04f50e230a,1,0,51f08b3c-2f03-408e-89d5-53ccbaec4e74,51f08b3c-2f03-408e-89d5-53ccbaec4e74,1,0,920ebc04-3018-4948-bae2-16de8f0f0c9a,920ebc04-3018-4948-bae2-16de8f0f0c9a,1,0,4c4fc449-05a5-4223-bd28-c73d27780a9b,4c4fc449-05a5-4223-bd28-c73d27780a9b,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,c6bf0d10-5406-44e8-b3f3-74b7db2b71e6,c6bf0d10-5406-44e8-b3f3-74b7db2b71e6,1,0,8d653af4-ac00-4ca9-a9e6-4e1a888c6dfb,8d653af4-ac00-4ca9-a9e6-4e1a888c6dfb,1,0,703453e8-cb49-491b-8e19-a17b89894d1e,703453e8-cb49-491b-8e19-a17b89894d1e,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,b5278cbd-1771-4739-9013-a28682689778,b5278cbd-1771-4739-9013-a28682689778,1,0,a52f2de4-f414-4837-9b1a-6d8f282e1327,a52f2de4-f414-4837-9b1a-6d8f282e1327,1,0,d126a11e-c770-4309-941f-cbcdd5cbad5d,d126a11e-c770-4309-941f-cbcdd5cbad5d,1,0,f4d88096-bff9-416a-8f75-9143ede1213f,f4d88096-bff9-416a-8f75-9143ede1213f,1,0,804be484-09cf-45a4-bd1f-c8850067e2b2,804be484-09cf-45a4-bd1f-c8850067e2b2,1,0,f1a145ce-a199-475c-ab8a-065c11a27277,f1a145ce-a199-475c-ab8a-065c11a27277,1,0,25c97480-330c-42f2-a2a5-031062a3a683,25c97480-330c-42f2-a2a5-031062a3a683,1,0,a2fb1bf9-d29a-4bfe-95f1-10883fa019b3,a2fb1bf9-d29a-4bfe-95f1-10883fa019b3,1,0,6adc3aa8-8784-467d-8e12-b60418a5c729,6adc3aa8-8784-467d-8e12-b60418a5c729,1,0,265206ed-4d41-497e-a483-c14052134500,265206ed-4d41-497e-a483-c14052134500,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,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,0b8c7a82-9865-4c5e-9bf1-ba6a7ef3a5d1,0b8c7a82-9865-4c5e-9bf1-ba6a7ef3a5d1,1,0,ea9fd5dd-b1de-41f8-87c2-ad3e8ee6b9bf,ea9fd5dd-b1de-41f8-87c2-ad3e8ee6b9bf,1,0,1bc24f0c-7299-4d7d-994c-0e89056f1178,1bc24f0c-7299-4d7d-994c-0e89056f1178,1,0,af958a75-241e-443a-8c1d-0c9240cca3a3,af958a75-241e-443a-8c1d-0c9240cca3a3,1,0,d65cce37-81a6-4f75-84e1-7e5b6340aa13,d65cce37-81a6-4f75-84e1-7e5b6340aa13,1,0,b60ddb04-f87c-4e16-aad0-f06d80dfbe14,b60ddb04-f87c-4e16-aad0-f06d80dfbe14,1,0,52ab6aea-e6a0-43f0-9cc8-f7c9126635cc,52ab6aea-e6a0-43f0-9cc8-f7c9126635cc,1,0,e983f539-e369-491e-9cee-510518187870,e983f539-e369-491e-9cee-510518187870,1,0,876b23bf-2f48-4916-ad0f-4de8306e1864,876b23bf-2f48-4916-ad0f-4de8306e1864,1,0,9a402a9c-a31f-4082-91d5-b4fe7576a5c2,9a402a9c-a31f-4082-91d5-b4fe7576a5c2,1,0,e7c63a25-c804-4bc4-a6f1-81009dd889e2,e7c63a25-c804-4bc4-a6f1-81009dd889e2,1,0,e99a1b17-0e37-489a-bc39-3dd2e23b0861,e99a1b17-0e37-489a-bc39-3dd2e23b0861,1,0,7ccd86cd-4294-4f6c-84f4-98e25e479f4d,7ccd86cd-4294-4f6c-84f4-98e25e479f4d,1,0,4c1576c4-b327-4ec1-87bc-662c5aba343b,4c1576c4-b327-4ec1-87bc-662c5aba343b,1,0,70e710c5-42df-465f-a9c5-8345c87e1f19,70e710c5-42df-465f-a9c5-8345c87e1f19,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,4de445f0-7c27-4540-a5a8-9c3ca2a13fd2,4de445f0-7c27-4540-a5a8-9c3ca2a13fd2,1,0,2977fedd-2c56-4d21-8eb1-a424e1b17cb3,2977fedd-2c56-4d21-8eb1-a424e1b17cb3,1,0,0b8a2936-07c5-4b90-80e6-5a058e546de6,0b8a2936-07c5-4b90-80e6-5a058e546de6,1,0,34524248-668e-48e5-a801-f489cd664de8,34524248-668e-48e5-a801-f489cd664de8,1,0,ae0891ae-ecd2-4072-8d2b-0556030c9dfd,ae0891ae-ecd2-4072-8d2b-0556030c9dfd,1,0,e8f36bca-738b-471c-b8d3-8a484978934a,e8f36bca-738b-471c-b8d3-8a484978934a,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,c8015ae6-31a7-49f4-a9e6-5d13774f64e5,c8015ae6-31a7-49f4-a9e6-5d13774f64e5,1,0,970430c4-37fc-476c-a3f6-5f6bebd2e663,970430c4-37fc-476c-a3f6-5f6bebd2e663,1,0,4cddde4a-42d5-44d0-a693-ea90eab9b169,4cddde4a-42d5-44d0-a693-ea90eab9b169,1,0,d9d612bb-6d04-4186-b243-f99aded0ba43,d9d612bb-6d04-4186-b243-f99aded0ba43,1,0,15db8b7b-59f5-4551-b2bd-b24801f056b5,15db8b7b-59f5-4551-b2bd-b24801f056b5,1,0,88d2236b-794b-485a-b075-f1a54cadcd3a,88d2236b-794b-485a-b075-f1a54cadcd3a,1,0,b7f9553f-6219-4401-a6f4-9debd47186d2,b7f9553f-6219-4401-a6f4-9debd47186d2,1,0,26a7e044-a583-40af-9daa-5aea628c8f19,26a7e044-a583-40af-9daa-5aea628c8f19,1,0,548717ca-0645-49b4-9580-c77cd4d03ebb,548717ca-0645-49b4-9580-c77cd4d03ebb,1,0,b451f2fc-ced2-418a-a803-4fe99488b394,b451f2fc-ced2-418a-a803-4fe99488b394,1,0,62269222-67a7-489e-ba59-4294902275bc,62269222-67a7-489e-ba59-4294902275bc,1,0,fed1b714-a2c9-42cf-9ced-35ed895e4167,fed1b714-a2c9-42cf-9ced-35ed895e4167,1,0,6f334263-10c8-4187-9a84-d2fd1afadc48,6f334263-10c8-4187-9a84-d2fd1afadc48,1,0,f5674a0d-a106-4cc0-a402-b378280eab3d,f5674a0d-a106-4cc0-a402-b378280eab3d,1,0,fa99302b-3e86-4330-b9ff-c38d933f81f0,fa99302b-3e86-4330-b9ff-c38d933f81f0,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,546ba3bb-4614-423f-954c-466530f42784,546ba3bb-4614-423f-954c-466530f42784,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,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,f53a3a46-edad-4cc0-8814-3755c2ea2c03,f53a3a46-edad-4cc0-8814-3755c2ea2c03,1,0,0a60b201-23f7-483b-ac16-5d270f32344e,0a60b201-23f7-483b-ac16-5d270f32344e,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,b67fb4f8-e895-4a8e-9230-31bc5cde4953,b67fb4f8-e895-4a8e-9230-31bc5cde4953,1,0,f3c9fde1-6d0e-4319-a798-ed8e330750de,f3c9fde1-6d0e-4319-a798-ed8e330750de,1,0,50d1bd75-3523-41c0-8da1-500731c0872b,50d1bd75-3523-41c0-8da1-500731c0872b,1,0,1a8d3872-6e19-4a49-b0ea-b120b6c09d7f,1a8d3872-6e19-4a49-b0ea-b120b6c09d7f,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,4e892154-3279-492c-9eae-124304225c5d,4e892154-3279-492c-9eae-124304225c5d,1,0,53a6ffa4-31f8-4717-9ecc-2852e6e4cce9,53a6ffa4-31f8-4717-9ecc-2852e6e4cce9,1,0,575a135a-6ffd-4ae8-a597-7e584df9bac4,575a135a-6ffd-4ae8-a597-7e584df9bac4,1,0,693a7196-f525-4bd2-a417-e902977f21cb,693a7196-f525-4bd2-a417-e902977f21cb,1,0,9bb39184-08b7-440e-a8f8-5caf0083ba0f,9bb39184-08b7-440e-a8f8-5caf0083ba0f,1,0,d48e817e-f6a4-47e5-a052-35d09e066490,d48e817e-f6a4-47e5-a052-35d09e066490,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,1f03420b-0480-451a-9263-8431ff0b0c73,1f03420b-0480-451a-9263-8431ff0b0c73,1,0,2bf547e4-d295-4f69-9dbf-9a9d91b2db98,2bf547e4-d295-4f69-9dbf-9a9d91b2db98,1,0,46506a80-495e-4f06-a191-54ccf5d6cc3f,46506a80-495e-4f06-a191-54ccf5d6cc3f,1,0,b9788ea3-b910-4b5b-96c3-921d62745b6e,b9788ea3-b910-4b5b-96c3-921d62745b6e,1,0,0646de72-49fd-466d-af0f-843bfa527049,0646de72-49fd-466d-af0f-843bfa527049,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,df750e63-50fc-4085-b8b8-f05e4751ff51,df750e63-50fc-4085-b8b8-f05e4751ff51,1,0,86182e9a-89e0-40d7-b2d7-fcd92ee42942,86182e9a-89e0-40d7-b2d7-fcd92ee42942,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,b69b611d-18d3-4e78-8a09-f010bcf9c261,b69b611d-18d3-4e78-8a09-f010bcf9c261,1,0,e8e087c1-9131-4037-8562-8bce8c38f78c,e8e087c1-9131-4037-8562-8bce8c38f78c,1,0,3b1c9126-9b9f-4658-967c-cc9ef5b1000f,3b1c9126-9b9f-4658-967c-cc9ef5b1000f,1,0,6adaef8e-82b6-4664-9748-4f41b170d91a,6adaef8e-82b6-4664-9748-4f41b170d91a,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,a27244c2-ac65-423f-afce-42efd288a83d,a27244c2-ac65-423f-afce-42efd288a83d,1,0,d4002184-8e08-4dcc-9070-62f595e82e23,d4002184-8e08-4dcc-9070-62f595e82e23,1,0,62163fda-1a09-4d4f-b290-76ff324042ab,62163fda-1a09-4d4f-b290-76ff324042ab,1,0,f2816dd2-47dd-41e8-9709-6dac1e4f4d21,f2816dd2-47dd-41e8-9709-6dac1e4f4d21,1,0,6e6a1557-06fa-45c0-ad98-c43809553cd7,6e6a1557-06fa-45c0-ad98-c43809553cd7,1,0,179f7436-e328-42b8-9382-19ee6f10c768,179f7436-e328-42b8-9382-19ee6f10c768,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,aec7df6a-21a1-495d-b0a9-3769e1069888,aec7df6a-21a1-495d-b0a9-3769e1069888,1,0,463b98bf-b4d4-4edb-995d-0a75ff29b60d,463b98bf-b4d4-4edb-995d-0a75ff29b60d,1,0,317f88a7-12a4-4d21-b637-3050525406f4,317f88a7-12a4-4d21-b637-3050525406f4,1,0,2d9d2319-68fb-436d-b431-98858b88a75a,2d9d2319-68fb-436d-b431-98858b88a75a,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,2bb5c23c-ad87-4b66-b766-d2e3f82715bd,2bb5c23c-ad87-4b66-b766-d2e3f82715bd,1,0,d01871bb-492e-4ab8-ada9-e9d8ec1adbce,d01871bb-492e-4ab8-ada9-e9d8ec1adbce,1,0,dd931c85-8c19-42a8-a39e-7af0c5bd346c,dd931c85-8c19-42a8-a39e-7af0c5bd346c,1,0,4fa153eb-1efb-43e5-ac09-e5431d4800df,4fa153eb-1efb-43e5-ac09-e5431d4800df,1,0,ada760f3-6a9f-4b81-afc1-98eb164af747,ada760f3-6a9f-4b81-afc1-98eb164af747,1,0,262dea64-4ccd-4b97-ac7e-ec1dbdd9ac98,262dea64-4ccd-4b97-ac7e-ec1dbdd9ac98,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,a8e14d2e-911d-4096-9027-deb7a08838e0,a8e14d2e-911d-4096-9027-deb7a08838e0,1,0,c51d8ae2-66fe-4052-8ee4-980855b1f90c,c51d8ae2-66fe-4052-8ee4-980855b1f90c,1,0,27610803-846f-40bd-b817-f73708f1fdb7,27610803-846f-40bd-b817-f73708f1fdb7,1,0,4e2a3873-0317-44be-8dbb-e4cefc0361a8,4e2a3873-0317-44be-8dbb-e4cefc0361a8,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,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,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,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,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,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,1fc05949-c1ba-4363-8353-6902bc041021,1fc05949-c1ba-4363-8353-6902bc041021,1,0,d6e61d59-fe83-4a9e-aa15-e072a39fd8fd,d6e61d59-fe83-4a9e-aa15-e072a39fd8fd,1,0,614fc08c-78b6-4d49-9488-05fcf9b76d58,614fc08c-78b6-4d49-9488-05fcf9b76d58,1,0,d983cae8-edbb-4f26-9c0a-2f701cb11046,d983cae8-edbb-4f26-9c0a-2f701cb11046,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,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,8f51328b-73a8-46fb-b6db-7b7a84c05c2a,8f51328b-73a8-46fb-b6db-7b7a84c05c2a,1,0,0f0f5b42-2407-44e6-85d7-26ace96b2cd9,0f0f5b42-2407-44e6-85d7-26ace96b2cd9,1,0,ffec426d-2556-46d6-b313-aeca43581865,ffec426d-2556-46d6-b313-aeca43581865,1,0,f32e0941-2061-4e12-bdae-fcb65f91ac28,f32e0941-2061-4e12-bdae-fcb65f91ac28,1,0,6f0e0f44-db5a-4a13-9131-866b77b90f14,6f0e0f44-db5a-4a13-9131-866b77b90f14,1,0,9415e0aa-391f-4798-ad7d-3b854a756de8,9415e0aa-391f-4798-ad7d-3b854a756de8,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,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,337636b4-129b-4333-bbc0-fbb29ae744dd,1,dd5bd95b-4876-4180-8461-b7752c1384de,"3.1.2.150","Фирма ""1С""","БиблиотекаСтандартныхПодсистем",5902,1,0,39188694-f35c-4edb-91fd-2cfdc2c8fb3c,39188694-f35c-4edb-91fd-2cfdc2c8fb3c,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,e8b248d9-9049-456a-9c7d-7a0462cc67ab,e8b248d9-9049-456a-9c7d-7a0462cc67ab,1,0,d4562287-440d-4462-9de2-7097ccbf3764,d4562287-440d-4462-9de2-7097ccbf3764,1,0,1983fe34-c984-4659-ba41-0e94504f8989,1983fe34-c984-4659-ba41-0e94504f8989,1,0,ec797c75-02c5-4cf5-9dd4-26cd46c99519,ec797c75-02c5-4cf5-9dd4-26cd46c99519,1,0,6fccdf59-fc99-4a2b-a144-fffe438a147c,6fccdf59-fc99-4a2b-a144-fffe438a147c,1,0,af8bd73a-d8e8-487d-8f36-d835ab10ea3a,af8bd73a-d8e8-487d-8f36-d835ab10ea3a,1,0,08a413ff-bebd-42e5-8ff3-2115746a0844,08a413ff-bebd-42e5-8ff3-2115746a0844,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,c56d2cc7-630a-441b-b23f-ba78c34849bd,c56d2cc7-630a-441b-b23f-ba78c34849bd,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,2fd1287d-d96d-4480-baf7-8815ae5ffbfb,2fd1287d-d96d-4480-baf7-8815ae5ffbfb,1,0,d8c58e53-b7b9-4426-bdfa-d0816adf8cc1,d8c58e53-b7b9-4426-bdfa-d0816adf8cc1,1,0,4009cb3a-6754-481f-911b-907558cea38a,4009cb3a-6754-481f-911b-907558cea38a,1,0,653a7fd8-91c7-49aa-aa63-45da087e0d0a,653a7fd8-91c7-49aa-aa63-45da087e0d0a,1,0,d7cf3981-cf63-4a21-868b-8175a7704a8f,d7cf3981-cf63-4a21-868b-8175a7704a8f,1,0,0ae93712-74e8-41c7-8f2d-4dfc8983697d,0ae93712-74e8-41c7-8f2d-4dfc8983697d,1,0,9e4dfdfa-ec05-4c9e-89bd-fc24f60f2678,9e4dfdfa-ec05-4c9e-89bd-fc24f60f2678,1,0,64f548c8-c1fc-434e-b3ee-5be367ead1db,64f548c8-c1fc-434e-b3ee-5be367ead1db,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,fa2a9ef2-00a1-44f4-a82c-6c7288dd62dc,fa2a9ef2-00a1-44f4-a82c-6c7288dd62dc,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,1c877cee-d9b8-48dc-8d79-04d27bb522f7,1c877cee-d9b8-48dc-8d79-04d27bb522f7,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,aad576f0-8481-485c-8c77-a001f51056b2,aad576f0-8481-485c-8c77-a001f51056b2,1,0,3d428bdf-c41b-43ac-957e-2943406c832c,3d428bdf-c41b-43ac-957e-2943406c832c,1,0,85cbc0b7-6aa5-455b-abed-7bc659d9ad51,85cbc0b7-6aa5-455b-abed-7bc659d9ad51,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,5578afd2-5aed-4164-8467-52a66f4773c4,5578afd2-5aed-4164-8467-52a66f4773c4,1,0,094b98ac-64b4-4c5b-a8f8-5d4b3c858513,094b98ac-64b4-4c5b-a8f8-5d4b3c858513,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,654523be-93d9-4faa-9a35-ce2fede13820,654523be-93d9-4faa-9a35-ce2fede13820,1,0,0c44fdea-7b81-45be-87f5-d64456a9d379,0c44fdea-7b81-45be-87f5-d64456a9d379,1,0,d9bad22e-4049-4371-86a3-1b00ae6215af,d9bad22e-4049-4371-86a3-1b00ae6215af,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,85e05ed7-25ed-4148-8247-86ff531ec48d,85e05ed7-25ed-4148-8247-86ff531ec48d,1,0,dcd34215-200c-4d3c-828c-4c3cd8b17a81,dcd34215-200c-4d3c-828c-4c3cd8b17a81,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,3aa020db-a811-4fb9-9ea9-00a3359fbb53,3aa020db-a811-4fb9-9ea9-00a3359fbb53,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,1fbd4cfa-58cb-41ea-920e-a39cfa6ad90c,1fbd4cfa-58cb-41ea-920e-a39cfa6ad90c,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,f6dd250e-75fd-47fc-abcb-79ea19ebd747,f6dd250e-75fd-47fc-abcb-79ea19ebd747,1,0,53c41e6c-89b0-4818-9832-02140373979b,53c41e6c-89b0-4818-9832-02140373979b,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,57e75b31-13b3-46fc-8ec4-7570ab0e9928,57e75b31-13b3-46fc-8ec4-7570ab0e9928,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,61e246f4-fe19-4377-8f69-fd1cb90e3f88,61e246f4-fe19-4377-8f69-fd1cb90e3f88,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,7cab0151-f86e-4ada-9ec6-e602749e34fc,7cab0151-f86e-4ada-9ec6-e602749e34fc,1,0,d9be359f-c5cb-4f3e-9ccd-61f38c6bbb26,d9be359f-c5cb-4f3e-9ccd-61f38c6bbb26,1,0,15b5979c-755b-480e-b00a-dcc95f62dfeb,15b5979c-755b-480e-b00a-dcc95f62dfeb,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,0da8a402-ea0f-488a-a087-77990e85a643,0da8a402-ea0f-488a-a087-77990e85a643,1,0,5e7ea635-f307-43cb-9aa7-2c99997b3c2d,5e7ea635-f307-43cb-9aa7-2c99997b3c2d,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,c7a8a88f-040a-47a6-8c93-7f3f01544760,c7a8a88f-040a-47a6-8c93-7f3f01544760,1,0,06fc381d-f27a-433c-95c3-e0981e01f22b,06fc381d-f27a-433c-95c3-e0981e01f22b,1,0,6d93ec4f-167a-4804-910b-988ee8aad78e,6d93ec4f-167a-4804-910b-988ee8aad78e,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,82b05859-4c4d-4d5a-a620-cc6aab10f527,82b05859-4c4d-4d5a-a620-cc6aab10f527,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,73cc5fea-597f-4490-9c62-b175fdc38fd3,73cc5fea-597f-4490-9c62-b175fdc38fd3,1,0,c2049ace-3095-4dd7-9cc0-7721118451ad,c2049ace-3095-4dd7-9cc0-7721118451ad,1,0,9ea7a191-38bb-40cc-8025-d34a5ed17c7c,9ea7a191-38bb-40cc-8025-d34a5ed17c7c,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,046e6f4f-3d92-4b20-b19f-fca608fa0f11,046e6f4f-3d92-4b20-b19f-fca608fa0f11,1,0,74bea66f-15bf-48de-9ff9-f9c35a8bf5cc,74bea66f-15bf-48de-9ff9-f9c35a8bf5cc,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,db6679c4-a647-471a-9f90-40248eb18db9,db6679c4-a647-471a-9f90-40248eb18db9,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,2522fce4-d121-482b-a39d-0c1a842d315e,2522fce4-d121-482b-a39d-0c1a842d315e,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,913743c3-9529-4c86-b056-93e954df7819,913743c3-9529-4c86-b056-93e954df7819,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,330a176f-5b61-41f5-84bb-b99a9439c2a0,330a176f-5b61-41f5-84bb-b99a9439c2a0,1,0,d1ba8620-c0c9-4281-afa6-9c9962c338d3,d1ba8620-c0c9-4281-afa6-9c9962c338d3,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,89574884-bce2-406d-9961-d1656b306eb8,89574884-bce2-406d-9961-d1656b306eb8,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,4b07cdb0-c32e-4751-b317-bee62b43f128,4b07cdb0-c32e-4751-b317-bee62b43f128,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,0093680b-c8bc-472d-8b0d-2e6565fc6c22,0093680b-c8bc-472d-8b0d-2e6565fc6c22,1,0,7fa6a20a-26e2-41ad-be66-a43b50d0bbcd,7fa6a20a-26e2-41ad-be66-a43b50d0bbcd,1,0,5f4456d6-ff0c-425e-9603-c099492d7a6f,5f4456d6-ff0c-425e-9603-c099492d7a6f,1,0,af7c417e-5c10-4146-bde1-40db86c5806f,af7c417e-5c10-4146-bde1-40db86c5806f,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,277ca641-e869-4fcd-8a79-54c451efbbdd,277ca641-e869-4fcd-8a79-54c451efbbdd,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,1220ce92-b964-4fb8-9db0-b4c8c6bdbdf7,1220ce92-b964-4fb8-9db0-b4c8c6bdbdf7,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,9883862f-c0eb-41fe-9374-05c6d72878bc,9883862f-c0eb-41fe-9374-05c6d72878bc,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,cafc6b5b-a76a-4b1b-9592-ba440f7bf34f,cafc6b5b-a76a-4b1b-9592-ba440f7bf34f,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,1328947f-91c3-43f4-a11e-f34893d987b3,1328947f-91c3-43f4-a11e-f34893d987b3,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,871a75ef-1987-4695-9916-07439aeedc53,871a75ef-1987-4695-9916-07439aeedc53,1,0,ba64deac-5826-43f2-b88a-2e180da87059,ba64deac-5826-43f2-b88a-2e180da87059,1,0,53ee3eb6-d2d1-4fb3-8a78-1fa4543850a1,53ee3eb6-d2d1-4fb3-8a78-1fa4543850a1,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,77de81f0-97c5-4751-9f38-f5785c7c45e0,77de81f0-97c5-4751-9f38-f5785c7c45e0,1,0,933cbafc-5667-4a91-8b1d-dca3d7662522,933cbafc-5667-4a91-8b1d-dca3d7662522,1,0,59acaca9-ed29-4927-bee6-287c91934690,59acaca9-ed29-4927-bee6-287c91934690,1,0,9136814a-89e6-4b0f-8ca1-73e4ef29f534,9136814a-89e6-4b0f-8ca1-73e4ef29f534,1,0,d7e4795a-3431-4f7d-9699-4241611adcf0,d7e4795a-3431-4f7d-9699-4241611adcf0,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,0732ab1c-b49a-49ed-8667-65f4427cc301,0732ab1c-b49a-49ed-8667-65f4427cc301,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,bd727741-ba99-484d-9d7d-2c2ad7ddd1a5,bd727741-ba99-484d-9d7d-2c2ad7ddd1a5,1,0,90327957-5bdc-4949-883c-9eb50f527b3e,90327957-5bdc-4949-883c-9eb50f527b3e,1,0,031980f5-60e8-426a-9907-3afff75a6b05,031980f5-60e8-426a-9907-3afff75a6b05,1,0,1a26f2d5-2465-484c-9311-12d9b3b92ae3,1a26f2d5-2465-484c-9311-12d9b3b92ae3,1,0,fd317d96-380e-4ee7-a25b-401e8521cc7a,fd317d96-380e-4ee7-a25b-401e8521cc7a,1,0,64837ad8-3055-4da3-a39c-0e7db38b6084,64837ad8-3055-4da3-a39c-0e7db38b6084,1,0,695cda1d-b816-4200-9a71-490078a9faa7,695cda1d-b816-4200-9a71-490078a9faa7,1,0,75fc5bea-e239-4de1-ad68-6454876e4b9f,75fc5bea-e239-4de1-ad68-6454876e4b9f,1,0,31ba33d4-5941-4b11-ae99-b15188bfef76,31ba33d4-5941-4b11-ae99-b15188bfef76,1,0,0744e8be-747c-47bb-85f3-58b6f6f9b786,0744e8be-747c-47bb-85f3-58b6f6f9b786,1,0,7142ae5b-ec7b-4a69-9c26-f51e05a4c270,7142ae5b-ec7b-4a69-9c26-f51e05a4c270,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,aebf163d-d8e8-492a-a973-8cb51982d475,aebf163d-d8e8-492a-a973-8cb51982d475,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,d9e98c14-9b07-406b-92c8-bec76165e028,d9e98c14-9b07-406b-92c8-bec76165e028,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,6c138ffd-057f-4f7d-af4d-1b1a589a9057,6c138ffd-057f-4f7d-af4d-1b1a589a9057,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,5ea4412e-0ce0-4176-917b-37817ed788e1,5ea4412e-0ce0-4176-917b-37817ed788e1,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,1a3eff9b-6598-4e11-9b8f-81249c53abec,1a3eff9b-6598-4e11-9b8f-81249c53abec,1,0,63c6cfad-124d-491a-829d-b298463c95e6,63c6cfad-124d-491a-829d-b298463c95e6,1,0,3da31d2f-24dd-469b-bd3b-073fa3b3d585,3da31d2f-24dd-469b-bd3b-073fa3b3d585,1,0,33b12dd8-7a86-4a51-bd3d-4911ec1ffde4,33b12dd8-7a86-4a51-bd3d-4911ec1ffde4,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,89cc9ae4-e933-4f4a-849f-48ef67b75819,89cc9ae4-e933-4f4a-849f-48ef67b75819,1,0,36e096be-ee28-437a-b8f2-c1e274c150e3,36e096be-ee28-437a-b8f2-c1e274c150e3,1,0,4a70416b-6598-4239-be70-2c0c8255388a,4a70416b-6598-4239-be70-2c0c8255388a,1,0,f6b69c2b-e32a-477f-9128-b61d8237290e,f6b69c2b-e32a-477f-9128-b61d8237290e,1,0,e14c0841-226c-4c79-bec9-cfc8d2c3a160,e14c0841-226c-4c79-bec9-cfc8d2c3a160,1,0,d05bbd02-9db3-4830-be9d-7080f3506e01,d05bbd02-9db3-4830-be9d-7080f3506e01,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,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,a5cc5ae2-be80-4957-8aca-9e477433dfcc,a5cc5ae2-be80-4957-8aca-9e477433dfcc,1,0,62fa393c-687c-49bf-8a25-81adc04430fb,62fa393c-687c-49bf-8a25-81adc04430fb,1,0,13fcf1e8-730e-436f-b316-6bcb8301f894,13fcf1e8-730e-436f-b316-6bcb8301f894,1,0,fa548f02-82e0-4897-89e8-0618ebf16919,fa548f02-82e0-4897-89e8-0618ebf16919,1,0,8c28a5b0-517f-48fe-9bde-5e611c319413,8c28a5b0-517f-48fe-9bde-5e611c319413,1,0,904e1209-91d8-49b1-b291-364ef728cbbf,904e1209-91d8-49b1-b291-364ef728cbbf,1,0,4a0d7cd7-8e43-4a1f-88b8-ffc376b38f7c,4a0d7cd7-8e43-4a1f-88b8-ffc376b38f7c,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,e000d04e-37eb-4d95-a833-b0a9b10ee0b9,e000d04e-37eb-4d95-a833-b0a9b10ee0b9,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,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,e6af9db4-b93f-422e-846c-e6c5fd33f992,e6af9db4-b93f-422e-846c-e6c5fd33f992,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,50f7effb-e051-49dd-8b56-0771dda350cc,50f7effb-e051-49dd-8b56-0771dda350cc,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,590aba18-7d56-48e3-9454-5f2882a32f80,590aba18-7d56-48e3-9454-5f2882a32f80,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,18363a37-28b0-488b-a7d6-54d3596d2a6d,18363a37-28b0-488b-a7d6-54d3596d2a6d,1,0,e5f401b5-4672-4529-a8dd-6d819f3f269c,e5f401b5-4672-4529-a8dd-6d819f3f269c,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,70d93c88-c9e9-4b8e-b8f3-ef07c665ab5d,70d93c88-c9e9-4b8e-b8f3-ef07c665ab5d,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,5e52dfe6-5a98-4a32-9429-5f44bf442367,5e52dfe6-5a98-4a32-9429-5f44bf442367,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,f987ca28-545b-4540-9e36-b0daa67dc3cb,f987ca28-545b-4540-9e36-b0daa67dc3cb,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,7ea3206a-2a16-460d-ad6d-849103f50bdb,7ea3206a-2a16-460d-ad6d-849103f50bdb,1,0,eb35bff2-8467-48fe-bf93-ece2aa40f506,eb35bff2-8467-48fe-bf93-ece2aa40f506,1,0,f26bdf61-8dc9-47e3-bc13-e6b7d8252ebd,f26bdf61-8dc9-47e3-bc13-e6b7d8252ebd,1,0,10302ca9-850c-4561-a774-d099c20b1919,10302ca9-850c-4561-a774-d099c20b1919,1,0,c62c30d6-ffac-43e0-bb20-25fa8eeb62fd,c62c30d6-ffac-43e0-bb20-25fa8eeb62fd,1,0,d693bfcf-e117-445b-b0e1-d895bc5227c4,d693bfcf-e117-445b-b0e1-d895bc5227c4,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,0508e7ab-3dd9-42b4-9542-089ce0656bbb,0508e7ab-3dd9-42b4-9542-089ce0656bbb,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,c382ee3a-d0a8-4ed8-ac88-5558b631f448,c382ee3a-d0a8-4ed8-ac88-5558b631f448,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,8e36227c-c0aa-43c4-93ad-e78701248fb1,8e36227c-c0aa-43c4-93ad-e78701248fb1,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,f78ffd16-5bd4-421a-99af-9cf5f126d960,f78ffd16-5bd4-421a-99af-9cf5f126d960,1,0,2bd23dd2-8107-410f-8137-3d022546594b,2bd23dd2-8107-410f-8137-3d022546594b,1,0,3f09badb-70bd-4996-822f-2e2e9524f09d,3f09badb-70bd-4996-822f-2e2e9524f09d,1,0,aca89232-c531-47ca-a82e-e7bfadd56674,aca89232-c531-47ca-a82e-e7bfadd56674,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,c7130560-3953-496f-b1d0-cae676fcb5a9,c7130560-3953-496f-b1d0-cae676fcb5a9,1,0,b7d5c226-a787-45e5-b46b-c51b145fcf6a,b7d5c226-a787-45e5-b46b-c51b145fcf6a,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,9b77e99b-b1d3-4368-a671-59e0ebba3f0e,9b77e99b-b1d3-4368-a671-59e0ebba3f0e,1,0,ad847998-6e50-4160-81fc-3b58ad68f202,ad847998-6e50-4160-81fc-3b58ad68f202,1,0,b2b98bcf-41da-4643-a6dc-39e5379b99e5,b2b98bcf-41da-4643-a6dc-39e5379b99e5,1,0,fdd9fb90-f5f0-4c08-9341-4374403bc950,fdd9fb90-f5f0-4c08-9341-4374403bc950,1,0,0e2d814a-cc9d-4f91-910d-bda54779e298,0e2d814a-cc9d-4f91-910d-bda54779e298,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,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,e9e242b7-0077-4c47-8f45-df50e7cc90cf,e9e242b7-0077-4c47-8f45-df50e7cc90cf,1,0,820383e1-9b95-4c0f-8464-722f1fe64ad5,820383e1-9b95-4c0f-8464-722f1fe64ad5,1,0,3d6cf2ab-29b2-45af-a6e2-8796284acf2d,3d6cf2ab-29b2-45af-a6e2-8796284acf2d,1,0,292bfe6b-703e-40cb-856d-abb470e6709f,292bfe6b-703e-40cb-856d-abb470e6709f,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,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,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,7e9c0fa3-128e-4c3f-a1f7-63cb88a1c0b1,7e9c0fa3-128e-4c3f-a1f7-63cb88a1c0b1,1,0,2ca8bca9-813a-4833-8ef0-a5e83f91c10f,2ca8bca9-813a-4833-8ef0-a5e83f91c10f,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,514e95b8-2fdd-46f7-89bf-7d1a3d9d6e1b,514e95b8-2fdd-46f7-89bf-7d1a3d9d6e1b,1,0,6ca91336-5ccd-4d0b-9602-53f4925c492d,6ca91336-5ccd-4d0b-9602-53f4925c492d,1,0,d853dd5f-d987-4cdb-82b5-5e40a5a5e449,d853dd5f-d987-4cdb-82b5-5e40a5a5e449,1,0,dc16c546-eecc-49fe-a401-e2e3987faa1f,dc16c546-eecc-49fe-a401-e2e3987faa1f,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,b0fca543-6951-4233-bdf6-58082b22252a,b0fca543-6951-4233-bdf6-58082b22252a,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,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,e07841ef-8392-4ceb-936d-fd160b3b03cd,e07841ef-8392-4ceb-936d-fd160b3b03cd,1,0,eee66f49-8954-4674-9e02-6bff6c332d30,eee66f49-8954-4674-9e02-6bff6c332d30,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,e7415ada-dd47-41f5-b4d5-7e77d1adad33,e7415ada-dd47-41f5-b4d5-7e77d1adad33,1,0,0bd85b79-cc32-4c1d-b629-567a1bdfac56,0bd85b79-cc32-4c1d-b629-567a1bdfac56,1,0,79c15db6-6066-4fe5-b30e-3196b6ca3d66,79c15db6-6066-4fe5-b30e-3196b6ca3d66,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,40cefda6-490e-4962-9747-94b823ea4ed7,40cefda6-490e-4962-9747-94b823ea4ed7,1,0,5fbd9a13-012d-4c36-b72c-da3bc4157cff,5fbd9a13-012d-4c36-b72c-da3bc4157cff,1,0,7e8d7d4f-98f7-4c81-94b1-f2d552b1ae5d,7e8d7d4f-98f7-4c81-94b1-f2d552b1ae5d,1,0,6aa6d14f-cd6c-413a-864e-d847d9ce120b,6aa6d14f-cd6c-413a-864e-d847d9ce120b,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,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,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,933ae96b-c69e-4396-bbfb-0daa81e529a4,933ae96b-c69e-4396-bbfb-0daa81e529a4,1,0,e1823be2-b646-4a1a-a9a9-c925a12c0586,e1823be2-b646-4a1a-a9a9-c925a12c0586,1,0,909e56e3-981f-430b-b775-18c70b3549e7,909e56e3-981f-430b-b775-18c70b3549e7,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,8d9d2284-e592-44c5-93bb-247037ab6b95,8d9d2284-e592-44c5-93bb-247037ab6b95,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,c4fe10b6-d025-4736-be23-3113bd7fe7b4,c4fe10b6-d025-4736-be23-3113bd7fe7b4,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,543c32a4-ad43-4f60-9b35-77081f841ad9,543c32a4-ad43-4f60-9b35-77081f841ad9,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,a9ae364f-b668-4fb4-b976-f227951ffb6b,a9ae364f-b668-4fb4-b976-f227951ffb6b,1,0,63066bee-d428-4e32-a032-f17475056537,63066bee-d428-4e32-a032-f17475056537,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,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,08c83b5e-08dd-425d-b024-62af684df926,08c83b5e-08dd-425d-b024-62af684df926,1,0,9e40a2ef-0c96-4455-8ed6-6e09011df3df,9e40a2ef-0c96-4455-8ed6-6e09011df3df,1,0,0de78690-2038-456b-b140-2b2b81f14e44,0de78690-2038-456b-b140-2b2b81f14e44,1,0,b8d07e97-f67d-4669-972a-96ce0f5e8c0d,b8d07e97-f67d-4669-972a-96ce0f5e8c0d,1,0,5c9c5f87-e85f-49b3-a7ca-01e2220d4f39,5c9c5f87-e85f-49b3-a7ca-01e2220d4f39,1,0,b953eafc-20be-4463-8c3e-903184e18402,b953eafc-20be-4463-8c3e-903184e18402,1,0,dcefdde9-645e-43c7-9244-384dadc75439,dcefdde9-645e-43c7-9244-384dadc75439,1,0,fa787228-aed5-4a16-b958-d102b78bf776,fa787228-aed5-4a16-b958-d102b78bf776,1,0,d511a261-4f9b-44e8-b3a1-1e6d393ec6e1,d511a261-4f9b-44e8-b3a1-1e6d393ec6e1,1,0,be900d20-c02d-476d-9ede-2bc5303ef6cb,be900d20-c02d-476d-9ede-2bc5303ef6cb,1,0,ddce1d3c-4a23-4c92-8083-c395dd3b7f6d,ddce1d3c-4a23-4c92-8083-c395dd3b7f6d,1,0,07b53437-cc8d-4834-a1e0-7007538b6eab,07b53437-cc8d-4834-a1e0-7007538b6eab,1,0,0dbec644-cb98-4368-ab76-5997259cbce7,0dbec644-cb98-4368-ab76-5997259cbce7,1,0,c05a7d33-8a58-4b5f-a433-4ba54c88d5f4,c05a7d33-8a58-4b5f-a433-4ba54c88d5f4,1,0,74b1237b-4a46-438d-9756-b564260df99d,74b1237b-4a46-438d-9756-b564260df99d,1,0,19decf0f-c24e-4551-b3d6-8ebd413cba78,19decf0f-c24e-4551-b3d6-8ebd413cba78,1,0,66a2df23-3a08-40d2-8e6c-2db10a3bca7a,66a2df23-3a08-40d2-8e6c-2db10a3bca7a,1,0,189383a5-0001-4427-9e00-18451e4bfb6e,189383a5-0001-4427-9e00-18451e4bfb6e,1,0,966ecce5-ec91-4f8e-82b2-364b38eb7ff4,966ecce5-ec91-4f8e-82b2-364b38eb7ff4,1,0,5ee4b3ee-b795-48c1-9bad-f4010b559b0e,5ee4b3ee-b795-48c1-9bad-f4010b559b0e,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,61cc4ec9-81e7-415b-8adf-3a5e61be505f,61cc4ec9-81e7-415b-8adf-3a5e61be505f,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,1ef34700-ce65-4985-b4d6-7133133ef32d,1ef34700-ce65-4985-b4d6-7133133ef32d,1,0,886d99ce-9ea2-4160-8d73-84df7197c030,886d99ce-9ea2-4160-8d73-84df7197c030,1,0,e5dca369-dc9a-4332-a509-f734b8787e13,e5dca369-dc9a-4332-a509-f734b8787e13,1,0,692d289b-8bd2-4b88-a8ea-0389c967df63,692d289b-8bd2-4b88-a8ea-0389c967df63,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,50ef6fc7-edfc-497b-ae9d-fb676934a631,50ef6fc7-edfc-497b-ae9d-fb676934a631,1,0,6f706d33-6fc6-4311-994f-6887c46f3c3b,6f706d33-6fc6-4311-994f-6887c46f3c3b,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,e3ac6312-4397-4012-a3d1-e35071d3fb6b,e3ac6312-4397-4012-a3d1-e35071d3fb6b,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,23d137ad-5b37-40a9-9c9f-3a2cecfb5abb,23d137ad-5b37-40a9-9c9f-3a2cecfb5abb,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,aea031ed-44c1-441b-8ed2-3a790c0263ab,aea031ed-44c1-441b-8ed2-3a790c0263ab,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,d2816f95-4809-4727-8ab6-8afd375f5a75,d2816f95-4809-4727-8ab6-8afd375f5a75,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,1bcbf91d-cbbc-4c47-86ed-b2cab62ccbe2,1bcbf91d-cbbc-4c47-86ed-b2cab62ccbe2,1,0,27aebf22-27fe-48d4-a6f4-ea4f6a6714bb,27aebf22-27fe-48d4-a6f4-ea4f6a6714bb,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,932656e8-4011-4250-844b-1fd47abda912,932656e8-4011-4250-844b-1fd47abda912,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,b96df5bb-d78a-40ed-a62d-2bf796c59c62,b96df5bb-d78a-40ed-a62d-2bf796c59c62,1,0,073890e5-13eb-4c50-9a6e-3e5507b111b7,073890e5-13eb-4c50-9a6e-3e5507b111b7,1,0,34a4d235-dc56-47e5-91b6-0af887ccdf42,34a4d235-dc56-47e5-91b6-0af887ccdf42,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,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,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,917f8d67-2c28-4e02-9453-e1ef9297c9a6,917f8d67-2c28-4e02-9453-e1ef9297c9a6,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,8f4d5fc1-5c2c-4202-bb79-a180b03b3267,8f4d5fc1-5c2c-4202-bb79-a180b03b3267,1,0,da881296-fea4-444b-96b2-12cb69d588c7,da881296-fea4-444b-96b2-12cb69d588c7,1,0,03f9d2d0-eae4-4098-a70e-4eb569b11fd9,03f9d2d0-eae4-4098-a70e-4eb569b11fd9,1,0,30031e74-e58a-44a2-98dd-fc8c950831c4,30031e74-e58a-44a2-98dd-fc8c950831c4,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,3fc019d1-aec8-4835-96c5-3bbf43da0b94,3fc019d1-aec8-4835-96c5-3bbf43da0b94,1,0,5371672a-c8e0-4c12-834e-f23dd885b49a,5371672a-c8e0-4c12-834e-f23dd885b49a,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,5c45e96f-e245-4d16-9c47-836505582aef,5c45e96f-e245-4d16-9c47-836505582aef,1,0,2c04d747-c363-4218-92c9-5c83393e928b,2c04d747-c363-4218-92c9-5c83393e928b,1,0,093b8255-7ee5-4463-bd20-542b1d63e799,093b8255-7ee5-4463-bd20-542b1d63e799,1,0,5afb95e0-51a3-4a0f-bea7-e06716421974,5afb95e0-51a3-4a0f-bea7-e06716421974,1,0,2bce3fbe-436b-4a9f-8478-5436d61cd57c,2bce3fbe-436b-4a9f-8478-5436d61cd57c,1,0,ba49877b-6e30-4177-a67c-00e65aa498fb,ba49877b-6e30-4177-a67c-00e65aa498fb,1,0,3d02ca78-c396-4797-909c-e6b910c0ff66,3d02ca78-c396-4797-909c-e6b910c0ff66,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,80c18959-93f0-46e6-90fd-b564efcaa395,80c18959-93f0-46e6-90fd-b564efcaa395,1,0,c53b9e19-54e4-49b4-ac63-eaeee5c2e040,c53b9e19-54e4-49b4-ac63-eaeee5c2e040,1,0,47afc45d-719e-4740-a8aa-6157c4b1aea8,47afc45d-719e-4740-a8aa-6157c4b1aea8,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,48b57d1b-5246-4ce8-9e0f-e369e6add55c,48b57d1b-5246-4ce8-9e0f-e369e6add55c,1,0,b6d891e4-15d6-4b40-b474-a8a1d10231e8,b6d891e4-15d6-4b40-b474-a8a1d10231e8,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,8482b31d-0ffa-4a94-9be1-09db8399b70d,8482b31d-0ffa-4a94-9be1-09db8399b70d,1,0,77fe53c2-de9d-4483-97c9-f7d44e137d5e,77fe53c2-de9d-4483-97c9-f7d44e137d5e,1,0,ac7ea771-4b10-4d43-9c0a-9cd36e4c49a4,ac7ea771-4b10-4d43-9c0a-9cd36e4c49a4,1,0,593be64c-6792-46d9-8618-84c50c9ad9e4,593be64c-6792-46d9-8618-84c50c9ad9e4,1,0,208d29cb-040f-4282-b8e8-dda8417b8e92,208d29cb-040f-4282-b8e8-dda8417b8e92,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,3913f78f-ce34-4ae3-840a-ccdf06319cbb,3913f78f-ce34-4ae3-840a-ccdf06319cbb,1,0,104cf3e3-2104-4ac2-bdc6-792750a63ea0,104cf3e3-2104-4ac2-bdc6-792750a63ea0,1,0,35dee1ee-ca9e-4b6b-9767-1107283f5a04,35dee1ee-ca9e-4b6b-9767-1107283f5a04,1,0,c86aa97a-5898-4cb2-ae62-598bddf8e99f,c86aa97a-5898-4cb2-ae62-598bddf8e99f,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,58589e42-9ff2-4ad4-bd98-a75ab6873625,58589e42-9ff2-4ad4-bd98-a75ab6873625,1,0,92255ded-6c44-43be-b0b1-fd03c2b78c8b,92255ded-6c44-43be-b0b1-fd03c2b78c8b,1,0,dfe6da42-f024-45c5-beea-ceccaf3a5faa,dfe6da42-f024-45c5-beea-ceccaf3a5faa,1,0,08f3e8f1-284c-4059-864a-42499d48596c,08f3e8f1-284c-4059-864a-42499d48596c,1,0,3d715c1b-9a5e-408d-98d6-5345d274144b,3d715c1b-9a5e-408d-98d6-5345d274144b,1,0,3f88bc69-e140-48b6-a2f9-24f6a391bff2,3f88bc69-e140-48b6-a2f9-24f6a391bff2,1,0,65eb5361-074c-451d-a5d8-d16b6ecccf82,65eb5361-074c-451d-a5d8-d16b6ecccf82,1,0,f7c8cab8-c634-4cf3-9183-c15c915231f8,f7c8cab8-c634-4cf3-9183-c15c915231f8,1,0,563a33a6-9eff-4ff1-9eba-dafc235d2ede,563a33a6-9eff-4ff1-9eba-dafc235d2ede,1,0,fbc21f7d-c272-41ea-b048-c5af294ab5ed,fbc21f7d-c272-41ea-b048-c5af294ab5ed,1,0,088c38fa-1c8f-42e7-aa72-5f5dd8cfc1c6,088c38fa-1c8f-42e7-aa72-5f5dd8cfc1c6,1,0,370f97ee-9aed-4a0a-aefc-647d973e6741,370f97ee-9aed-4a0a-aefc-647d973e6741,1,0,c586d28e-a3ec-4201-8ba0-d453bb7c5293,c586d28e-a3ec-4201-8ba0-d453bb7c5293,1,0,d84f12b0-6e01-4646-9abd-51578716433d,d84f12b0-6e01-4646-9abd-51578716433d,1,0,a4458c18-72eb-4fc0-8dc6-fccab93b0898,a4458c18-72eb-4fc0-8dc6-fccab93b0898,1,0,3a0ceb25-60f5-4fec-ab2e-e667939bfe21,3a0ceb25-60f5-4fec-ab2e-e667939bfe21,1,0,27db4549-df2f-4856-b07f-3c9399cdee9c,27db4549-df2f-4856-b07f-3c9399cdee9c,1,0,f667d49a-8077-450f-9442-2ea4fee7b62d,f667d49a-8077-450f-9442-2ea4fee7b62d,1,0,782b1285-9618-4ec9-b817-ce93e2d24d4d,782b1285-9618-4ec9-b817-ce93e2d24d4d,1,0,dd3e202f-6225-4061-a6ab-f29cd314ab08,dd3e202f-6225-4061-a6ab-f29cd314ab08,1,0,483b7600-e46f-4739-94c8-8637c62750a0,483b7600-e46f-4739-94c8-8637c62750a0,1,0,bdcf5f7a-2888-4143-b46d-1bf0dcc16872,bdcf5f7a-2888-4143-b46d-1bf0dcc16872,1,0,bce8a955-0a0e-4771-9763-4f5d319d9848,bce8a955-0a0e-4771-9763-4f5d319d9848,1,0,090c475c-fb33-46a9-a0ed-fb9d7def2ca5,090c475c-fb33-46a9-a0ed-fb9d7def2ca5,1,0,d10c3389-5bf0-4c73-ab92-786eb19d1676,d10c3389-5bf0-4c73-ab92-786eb19d1676,1,0,c824c20d-7503-4a77-81b8-2a68b20eab68,c824c20d-7503-4a77-81b8-2a68b20eab68,1,0,a0db92c6-b39e-41ab-82e3-161e32f67bda,a0db92c6-b39e-41ab-82e3-161e32f67bda,1,0,88f91187-65d3-4684-992d-20ca29d3755a,88f91187-65d3-4684-992d-20ca29d3755a,1,0,da725701-d4fb-40a4-a63b-feaa8559d8cf,da725701-d4fb-40a4-a63b-feaa8559d8cf,1,0,0a44cfc8-0b55-4aed-990f-e97831494a3c,0a44cfc8-0b55-4aed-990f-e97831494a3c,1,0,c9adbe7c-ca6e-4048-a498-9b48f75d9b45,c9adbe7c-ca6e-4048-a498-9b48f75d9b45,1,0,c7cb80d6-13d9-49af-acdd-6d10dffd1e17,c7cb80d6-13d9-49af-acdd-6d10dffd1e17,1,0,9a3f04d7-b956-4e87-ac28-63f7afba1771,9a3f04d7-b956-4e87-ac28-63f7afba1771,1,0,41b23a18-0c4e-455f-b249-2f2eba8119db,41b23a18-0c4e-455f-b249-2f2eba8119db,1,0,ff697cb8-ab88-4634-94e3-c06a401f71ff,ff697cb8-ab88-4634-94e3-c06a401f71ff,1,0,cf98131d-2b1a-4a07-a8dd-72af01934a8b,cf98131d-2b1a-4a07-a8dd-72af01934a8b,1,0,bef1eead-3f8b-48b7-99f3-46ba332fb60d,bef1eead-3f8b-48b7-99f3-46ba332fb60d,1,0,c1b3d4c8-8c53-4452-bec5-9742bb827d8f,c1b3d4c8-8c53-4452-bec5-9742bb827d8f,1,0,b6e1d584-6817-4f06-b5b2-57037a23ce6f,b6e1d584-6817-4f06-b5b2-57037a23ce6f,1,0,1b5d2ded-3f58-4b3e-8678-48191897e408,1b5d2ded-3f58-4b3e-8678-48191897e408,1,0,62fd5457-0cfd-4273-8965-4b5bf9170209,62fd5457-0cfd-4273-8965-4b5bf9170209,1,0,88701798-0c0e-4d33-a68b-3eddfc25d835,88701798-0c0e-4d33-a68b-3eddfc25d835,1,0,c0d704b5-32de-4bb8-9525-f7d1da828ae5,c0d704b5-32de-4bb8-9525-f7d1da828ae5,1,0,b5b5ee06-4de8-4776-98f0-3e8e1b31985a,b5b5ee06-4de8-4776-98f0-3e8e1b31985a,1,0,2f999502-68e5-4823-8f94-aec98b1a1b1d,2f999502-68e5-4823-8f94-aec98b1a1b1d,1,0,2d064409-7f2a-4d2e-9155-6b34e4373e89,2d064409-7f2a-4d2e-9155-6b34e4373e89,1,0,fc51a562-01bb-47c3-bac5-89f78f64a5f3,fc51a562-01bb-47c3-bac5-89f78f64a5f3,1,0,8a33a6cd-f56d-405b-9515-9fc04d30e27a,8a33a6cd-f56d-405b-9515-9fc04d30e27a,1,0,9b199470-723d-4b72-9fdc-2bed2b7bc483,9b199470-723d-4b72-9fdc-2bed2b7bc483,1,0,5bb9aff1-f4ee-4c02-8e3f-f070bfbb8339,5bb9aff1-f4ee-4c02-8e3f-f070bfbb8339,1,0,6a06f9ee-8832-4e9e-aeba-b4cb9573c048,6a06f9ee-8832-4e9e-aeba-b4cb9573c048,1,0,38fa770e-f38d-4fdf-bb7a-56cfe76a8ab2,38fa770e-f38d-4fdf-bb7a-56cfe76a8ab2,1,0,afc4ce2a-60b6-48d0-ada0-2f651d050888,afc4ce2a-60b6-48d0-ada0-2f651d050888,1,0,5f289266-fc3c-4345-b7ab-cf863e2a6ccd,5f289266-fc3c-4345-b7ab-cf863e2a6ccd,1,0,5932f0d8-9012-4382-8c72-b1a5f4fbc937,5932f0d8-9012-4382-8c72-b1a5f4fbc937,1,0,66f1ff23-8fec-4be4-914c-43b7dee1c2a2,66f1ff23-8fec-4be4-914c-43b7dee1c2a2,1,0,56c3471e-459a-46ba-96ea-9f872b3ad54a,56c3471e-459a-46ba-96ea-9f872b3ad54a,1,0,2113195b-1553-4137-9e45-2cc62c72ee47,2113195b-1553-4137-9e45-2cc62c72ee47,1,0,1250f5b1-c766-434c-8d28-69b74a536294,1250f5b1-c766-434c-8d28-69b74a536294,1,0,80bc9b8b-7b17-4dbb-bca6-8465d6b01e0b,80bc9b8b-7b17-4dbb-bca6-8465d6b01e0b,1,0,6327e23d-6070-4b64-81c6-0d1a33eaae93,6327e23d-6070-4b64-81c6-0d1a33eaae93,1,0,4d086a1f-34e0-43f9-9401-d82e55746a9d,4d086a1f-34e0-43f9-9401-d82e55746a9d,1,0,5a4c543a-27d5-423b-a4d0-3952ea2817af,5a4c543a-27d5-423b-a4d0-3952ea2817af,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,48659b94-ace8-45f4-a043-6b2731ec6925,48659b94-ace8-45f4-a043-6b2731ec6925,1,0,3a8e60f9-19cb-42a6-a448-ad211261d9b8,3a8e60f9-19cb-42a6-a448-ad211261d9b8,1,0,74320602-094a-4645-b2c9-3053377a3ac3,74320602-094a-4645-b2c9-3053377a3ac3,1,0,3aba26a3-76ee-46c0-9e11-6f64fc754a0d,3aba26a3-76ee-46c0-9e11-6f64fc754a0d,1,0,b066c732-9c5f-4504-894f-96d457b0768f,b066c732-9c5f-4504-894f-96d457b0768f,1,0,9366463d-aa8a-4e89-86d8-c7f746f9551b,9366463d-aa8a-4e89-86d8-c7f746f9551b,1,0,e25da569-d435-45b2-b4e8-fc76d7f1c8df,e25da569-d435-45b2-b4e8-fc76d7f1c8df,1,0,a51a7f57-9c52-4457-819c-13e1b6f886e1,a51a7f57-9c52-4457-819c-13e1b6f886e1,1,0,7d08daba-5e36-4ce3-8a70-17750959b89e,7d08daba-5e36-4ce3-8a70-17750959b89e,1,0,e2c2d915-ae50-4fa0-add3-26ad7dc75efb,e2c2d915-ae50-4fa0-add3-26ad7dc75efb,1,0,39344a8c-2662-48ff-937b-12951bb268fb,39344a8c-2662-48ff-937b-12951bb268fb,1,0,b577663f-ead2-4b18-a4f6-f7f303e89319,b577663f-ead2-4b18-a4f6-f7f303e89319,1,0,43dc335f-5503-47ab-9c6b-0b4c6ab13f57,43dc335f-5503-47ab-9c6b-0b4c6ab13f57,1,0,6cc0a1d7-01eb-4af6-b4ed-4002e2316080,6cc0a1d7-01eb-4af6-b4ed-4002e2316080,1,0,72663843-4010-42ed-989b-0b58bf9f7146,72663843-4010-42ed-989b-0b58bf9f7146,1,0,79da4490-f0b0-48b5-b435-3b2c9ffb0eb3,79da4490-f0b0-48b5-b435-3b2c9ffb0eb3,1,0,3adcceea-867e-4b88-a633-4f8d4ccb43c0,3adcceea-867e-4b88-a633-4f8d4ccb43c0,1,0,a132189c-6584-4bb1-9cfd-1415cd83228a,a132189c-6584-4bb1-9cfd-1415cd83228a,1,0,7ba50e13-0a78-4cca-821f-006b1c83b0b0,7ba50e13-0a78-4cca-821f-006b1c83b0b0,1,0,a3670f95-5abe-49ee-8ea5-d7e4438801ba,a3670f95-5abe-49ee-8ea5-d7e4438801ba,1,0,4443dea1-5143-4e76-97a7-c35dbe1665e4,4443dea1-5143-4e76-97a7-c35dbe1665e4,1,0,0d780521-0767-425a-b44d-315d2dc42d04,0d780521-0767-425a-b44d-315d2dc42d04,1,0,c5b1572d-28f5-42f3-b2e0-8b54f091642e,c5b1572d-28f5-42f3-b2e0-8b54f091642e,1,0,0986c1b6-b677-428d-b49f-a93e40e77171,0986c1b6-b677-428d-b49f-a93e40e77171,1,0,b9c41558-8fe7-45f6-bcb0-5ea3a35264cf,b9c41558-8fe7-45f6-bcb0-5ea3a35264cf,1,0,597c1f9b-3cbd-42bd-b819-f29b3a3f073a,597c1f9b-3cbd-42bd-b819-f29b3a3f073a,1,0,b6662b2e-7e93-4eaa-9e4b-b5647285932b,b6662b2e-7e93-4eaa-9e4b-b5647285932b,1,0,4a180f2c-dc54-4591-8f62-f236d1e07799,4a180f2c-dc54-4591-8f62-f236d1e07799,1,0,3f1578ba-3d55-4eff-bbdd-6329dd5060d5,3f1578ba-3d55-4eff-bbdd-6329dd5060d5,1,0,a9a51e79-4c79-4a43-931b-c0321c1cd65b,a9a51e79-4c79-4a43-931b-c0321c1cd65b,1,0,e8644d90-ec2f-4ac0-8fbd-a7aa95c9bcec,e8644d90-ec2f-4ac0-8fbd-a7aa95c9bcec,1,0,048a1d86-bcf5-47aa-a36c-eb20c3f9f7e5,048a1d86-bcf5-47aa-a36c-eb20c3f9f7e5,1,0,22f2696e-0ac1-4a74-bca9-987b267b2b59,22f2696e-0ac1-4a74-bca9-987b267b2b59,1,0,d705cacc-3485-46d7-9ff4-48c3c0757c81,d705cacc-3485-46d7-9ff4-48c3c0757c81,1,0,98f043ea-633c-4a03-a56f-efbc9e6ef288,98f043ea-633c-4a03-a56f-efbc9e6ef288,1,0,2033b92a-0750-478a-a12d-cf4f74d0a9da,2033b92a-0750-478a-a12d-cf4f74d0a9da,1,0,92fa2196-d8e5-45f9-9d2e-59d837b163ea,92fa2196-d8e5-45f9-9d2e-59d837b163ea,1,0,25dc2290-e283-4449-81c1-1ce15b58067f,25dc2290-e283-4449-81c1-1ce15b58067f,1,0,c534a865-a17f-41e7-88b9-c6af89c9d202,c534a865-a17f-41e7-88b9-c6af89c9d202,1,0,0214bfe6-fb98-4487-8d98-6b10d24a3c4d,0214bfe6-fb98-4487-8d98-6b10d24a3c4d,1,0,0127937c-94c0-43fe-9630-cc2ec6904ad8,0127937c-94c0-43fe-9630-cc2ec6904ad8,1,0,ce7c87b8-e4ab-47e2-b70a-7dcae8bfb8a8,ce7c87b8-e4ab-47e2-b70a-7dcae8bfb8a8,1,0,8df5b3cd-7788-4198-a530-e88be83f1cdf,8df5b3cd-7788-4198-a530-e88be83f1cdf,1,0,ffaeea66-66d5-4741-a9b5-875afebfce7f,ffaeea66-66d5-4741-a9b5-875afebfce7f,1,0,8f6b6576-1d21-46c1-905c-f1685f0eee7a,8f6b6576-1d21-46c1-905c-f1685f0eee7a,1,0,06827a85-a9d1-472e-8087-906ff94a4adc,06827a85-a9d1-472e-8087-906ff94a4adc,1,0,bb3954de-5eaa-4ec0-931b-a1a9f233c120,bb3954de-5eaa-4ec0-931b-a1a9f233c120,1,0,10689022-cbbb-4134-901f-1e778fac2693,10689022-cbbb-4134-901f-1e778fac2693,1,0,f14e363f-512b-4658-afb5-10c3be5ff870,f14e363f-512b-4658-afb5-10c3be5ff870,1,0,4d211427-4494-45d4-ae84-38235f35eaef,4d211427-4494-45d4-ae84-38235f35eaef,1,0,f7784993-d95c-4652-9894-3cf67aeabeb8,f7784993-d95c-4652-9894-3cf67aeabeb8,1,0,485d8b29-79b1-4798-a742-75546ddb7262,485d8b29-79b1-4798-a742-75546ddb7262,1,0,e248de85-8f76-4471-ab3d-d35514b69b78,e248de85-8f76-4471-ab3d-d35514b69b78,1,0,8928ce42-2b12-402f-8115-98b5655db556,8928ce42-2b12-402f-8115-98b5655db556,1,0,9b62c109-7b52-4803-83e6-a5413cd00984,9b62c109-7b52-4803-83e6-a5413cd00984,1,0,cddb4bb0-22ec-49ae-b332-62d7307b93fe,cddb4bb0-22ec-49ae-b332-62d7307b93fe,1,0,72876709-806e-4406-b9c1-b8117f4d750a,72876709-806e-4406-b9c1-b8117f4d750a,1,0,b1efafef-74cc-4d36-a32c-b472712f11f3,b1efafef-74cc-4d36-a32c-b472712f11f3,1,0,ceb05584-1ecd-4681-8575-c0452f95b685,ceb05584-1ecd-4681-8575-c0452f95b685,1,0,03d08c14-f814-4e12-8f96-020c36cca2bf,03d08c14-f814-4e12-8f96-020c36cca2bf,1,0,a1a7aab6-cf35-42ce-97bb-c112638a2748,a1a7aab6-cf35-42ce-97bb-c112638a2748,1,0,4e36184e-d818-4f38-9257-6d91d9cc85ae,4e36184e-d818-4f38-9257-6d91d9cc85ae,1,0,afcba8a1-5d3e-4a76-9be9-5fbda20d55bd,afcba8a1-5d3e-4a76-9be9-5fbda20d55bd,1,0,cbdc8d7e-b685-4c8d-9f47-d8bfb08300d4,cbdc8d7e-b685-4c8d-9f47-d8bfb08300d4,1,0,3893a258-a9c7-441a-b80c-1cc8c3f4735c,3893a258-a9c7-441a-b80c-1cc8c3f4735c,1,0,f9ad1ef3-7475-4d55-a1ef-eadceda9bf6b,f9ad1ef3-7475-4d55-a1ef-eadceda9bf6b,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,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,8a6cdb21-4eff-46dc-b928-738199f54581,8a6cdb21-4eff-46dc-b928-738199f54581,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,5299d417-02c6-4f73-9c0c-8c22d267ab99,5299d417-02c6-4f73-9c0c-8c22d267ab99,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,4a2c2478-03ad-4521-9356-09ee07fce972,4a2c2478-03ad-4521-9356-09ee07fce972,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,879304f7-9507-4fb8-9177-355428d6bba9,879304f7-9507-4fb8-9177-355428d6bba9,1,0,efb50581-cc7e-47ac-bfa2-86da2860bf1d,efb50581-cc7e-47ac-bfa2-86da2860bf1d,1,0,fd07f403-1116-4102-a1bf-35abb03ad493,fd07f403-1116-4102-a1bf-35abb03ad493,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,a2f943a4-05a3-4eb6-9a10-74b6859469a6,a2f943a4-05a3-4eb6-9a10-74b6859469a6,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,0722315c-9217-4ecf-80ff-d1ee89f84a53,0722315c-9217-4ecf-80ff-d1ee89f84a53,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,7d91ff3c-1ec2-41d0-9d38-fa8f8534c55c,7d91ff3c-1ec2-41d0-9d38-fa8f8534c55c,1,0,6da15c1d-e144-472e-9a3a-2797c7df16e4,6da15c1d-e144-472e-9a3a-2797c7df16e4,1,0,350a7b29-4ba3-43c4-b77d-47085f53d760,350a7b29-4ba3-43c4-b77d-47085f53d760,1,0,a151715d-c89e-4e4c-b8fd-d7d6ad71e603,a151715d-c89e-4e4c-b8fd-d7d6ad71e603,1,0,f6d6f1b9-3956-4fdb-bbb0-5d81f083a072,f6d6f1b9-3956-4fdb-bbb0-5d81f083a072,1,0,a5dd4200-0f25-452d-9014-3b1506c31557,a5dd4200-0f25-452d-9014-3b1506c31557,1,0,c48c091c-0d46-4d1f-bc84-72b0537c7ec2,c48c091c-0d46-4d1f-bc84-72b0537c7ec2,1,0,122a94c7-bb89-4f11-b583-b56808c1df47,122a94c7-bb89-4f11-b583-b56808c1df47,1,0,f4371f32-95a5-40f4-bc5e-a5b9a12a86eb,f4371f32-95a5-40f4-bc5e-a5b9a12a86eb,1,0,5f434c45-a5ff-4a07-8662-6a592298c7e9,5f434c45-a5ff-4a07-8662-6a592298c7e9,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,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,b572b1d0-4404-421c-9950-1cc1342ca5f3,b572b1d0-4404-421c-9950-1cc1342ca5f3,1,0,0c838a31-2b08-447c-b39a-a613cfba526c,0c838a31-2b08-447c-b39a-a613cfba526c,1,0,02082174-7276-4256-b9bb-9872065a01c4,02082174-7276-4256-b9bb-9872065a01c4,1,0,86c679c0-3531-4622-9a1f-3d9d6ccdd431,86c679c0-3531-4622-9a1f-3d9d6ccdd431,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,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,04424730-6992-4a5b-838b-7a7c16dedbd0,04424730-6992-4a5b-838b-7a7c16dedbd0,1,0,1260b5dd-0a74-43df-bdbb-215b253da28e,1260b5dd-0a74-43df-bdbb-215b253da28e,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,554320a0-55dc-4289-bb08-63d405cb4ca5,554320a0-55dc-4289-bb08-63d405cb4ca5,1,0,45eec13d-e5e5-4a2e-ad6c-2780bde15ef2,45eec13d-e5e5-4a2e-ad6c-2780bde15ef2,1,0,3b1d0974-6031-4841-b632-aadd4ff13b2c,3b1d0974-6031-4841-b632-aadd4ff13b2c,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,7433b2a9-f634-4af7-ac85-6aa1280ea239,7433b2a9-f634-4af7-ac85-6aa1280ea239,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,b143bc6d-ead6-41a2-9a15-1a44488c1ce4,b143bc6d-ead6-41a2-9a15-1a44488c1ce4,1,0,72d41d01-9c9d-4fbe-8a39-932d82d171ef,72d41d01-9c9d-4fbe-8a39-932d82d171ef,1,0,f4afd271-64de-4a6d-b0ef-f27db4d66d32,f4afd271-64de-4a6d-b0ef-f27db4d66d32,1,0,b1e7d3c3-9fc1-4364-a8c3-b076080c7472,b1e7d3c3-9fc1-4364-a8c3-b076080c7472,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,0248a6c4-7ce5-4898-bb1d-9ad9509e6795,0248a6c4-7ce5-4898-bb1d-9ad9509e6795,1,0,6a5b9e7f-c368-40d8-812a-64f68ea1ef9d,6a5b9e7f-c368-40d8-812a-64f68ea1ef9d,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,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,caea53be-d2f7-4109-8017-d2bfdfde8c6f,caea53be-d2f7-4109-8017-d2bfdfde8c6f,1,0,60f30706-9919-4767-a17c-660754b9d542,60f30706-9919-4767-a17c-660754b9d542,1,0,7de19812-ed6c-41b5-82aa-b9a8e6d808f2,7de19812-ed6c-41b5-82aa-b9a8e6d808f2,1,0,c0bc4cc4-b5ca-47c2-b589-c0d25bb63f1e,c0bc4cc4-b5ca-47c2-b589-c0d25bb63f1e,1,0,35823167-b658-4563-8d01-b0aab05aa619,35823167-b658-4563-8d01-b0aab05aa619,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,e590825f-10c6-4fdd-98cd-3da01da2ed4f,e590825f-10c6-4fdd-98cd-3da01da2ed4f,1,0,2233ce53-b8a8-4c83-97a2-683c8575462a,2233ce53-b8a8-4c83-97a2-683c8575462a,1,0,b938ff17-e31c-4762-a96f-e1288f746a1d,b938ff17-e31c-4762-a96f-e1288f746a1d,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,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,195ea1f8-3e38-4254-a33d-c87424b8f7dc,195ea1f8-3e38-4254-a33d-c87424b8f7dc,1,0,d3a1d247-8f4a-45af-9861-7e313a100209,d3a1d247-8f4a-45af-9861-7e313a100209,1,0,837f27c1-26d7-4f24-a691-55dd9ed04ec5,837f27c1-26d7-4f24-a691-55dd9ed04ec5,1,0,9e2ddfbb-8d6b-4b82-8a2b-62c2ea990b10,9e2ddfbb-8d6b-4b82-8a2b-62c2ea990b10,1,0,5005655f-22b2-49e6-be4f-b15d768d10b2,5005655f-22b2-49e6-be4f-b15d768d10b2,1,0,208040c8-e98b-4c15-a2ec-38d44bfcfa6c,208040c8-e98b-4c15-a2ec-38d44bfcfa6c,1,0,f6811ee2-769e-488d-9ca0-70f1fe521ca9,f6811ee2-769e-488d-9ca0-70f1fe521ca9,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,31b93291-a58f-4176-8318-58200e8bc56e,31b93291-a58f-4176-8318-58200e8bc56e,1,0,293be1bc-49cb-4a99-add8-2a3a46829718,293be1bc-49cb-4a99-add8-2a3a46829718,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,bc2dd611-b589-4519-b274-40db5c66b378,bc2dd611-b589-4519-b274-40db5c66b378,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,89cb31da-a980-4207-a537-85cd47f08d32,89cb31da-a980-4207-a537-85cd47f08d32,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,75ffd0b9-79be-4600-a310-591fddb6d63e,75ffd0b9-79be-4600-a310-591fddb6d63e,1,0,4883cb3d-4ab3-4e0e-bddb-ae8852547a3c,4883cb3d-4ab3-4e0e-bddb-ae8852547a3c,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,1e3c444d-6f73-4eb0-a12d-7106daf36b14,1e3c444d-6f73-4eb0-a12d-7106daf36b14,1,0,9043894d-f89a-459f-a4ea-77fe3633aa91,9043894d-f89a-459f-a4ea-77fe3633aa91,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,09858042-6284-4499-8055-c1b5b783ce5f,09858042-6284-4499-8055-c1b5b783ce5f,1,0,38fc1e6e-7cd3-437b-b429-6655be34cd01,38fc1e6e-7cd3-437b-b429-6655be34cd01,1,0,8c4c7982-36cc-4dc9-b055-9954f61e6365,8c4c7982-36cc-4dc9-b055-9954f61e6365,1,0,ba51c7f5-0074-4c99-a27d-ddfd4bfcc068,ba51c7f5-0074-4c99-a27d-ddfd4bfcc068,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,41f87891-ddd5-4e0f-a4f2-8039fb71981b,41f87891-ddd5-4e0f-a4f2-8039fb71981b,1,0,3b9c03bc-8517-498f-8052-e53854fb0753,3b9c03bc-8517-498f-8052-e53854fb0753,1,0,95a71c2e-aa39-42ec-8889-2390a553f146,95a71c2e-aa39-42ec-8889-2390a553f146,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,6c66ff27-19af-4728-95a8-463fd1c4dcd3,6c66ff27-19af-4728-95a8-463fd1c4dcd3,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,7ae5d177-a3e6-4989-b10c-8e0a605c26d9,7ae5d177-a3e6-4989-b10c-8e0a605c26d9,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,387d3bbf-cddd-4506-b14f-89c1f37adbbc,387d3bbf-cddd-4506-b14f-89c1f37adbbc,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,10db9f99-c7d1-4b16-9ea2-9bfc2aa4ddb5,10db9f99-c7d1-4b16-9ea2-9bfc2aa4ddb5,1,0,230722e6-942f-4594-be89-eff59c6572bf,230722e6-942f-4594-be89-eff59c6572bf,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,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,251ca8fe-09eb-45ca-be8b-0d8faf927009,251ca8fe-09eb-45ca-be8b-0d8faf927009,1,0,e353db15-71c5-4b68-9ffb-9800800a59dc,e353db15-71c5-4b68-9ffb-9800800a59dc,1,0,976d9ba7-d9c7-4a9e-ad5d-53cb5bca8984,976d9ba7-d9c7-4a9e-ad5d-53cb5bca8984,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,19b98b60-deb1-4642-8159-2a11332558e2,19b98b60-deb1-4642-8159-2a11332558e2,1,0,133f181a-fade-4182-826d-904fac780326,133f181a-fade-4182-826d-904fac780326,1,0,a687748a-0b2a-4277-b935-07616d28430d,a687748a-0b2a-4277-b935-07616d28430d,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,9059defa-047f-4dac-9749-3d0a6a77308a,9059defa-047f-4dac-9749-3d0a6a77308a,1,0,6010c27f-e857-4fc3-be13-1eea51f02ea7,6010c27f-e857-4fc3-be13-1eea51f02ea7,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,5e4ee280-3dd2-4f68-be6c-fb5343438817,5e4ee280-3dd2-4f68-be6c-fb5343438817,1,0,75d1b6df-ede3-4172-987f-fe1551f686ee,75d1b6df-ede3-4172-987f-fe1551f686ee,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,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,6527be82-a665-4f8a-818b-a35b96b3484b,6527be82-a665-4f8a-818b-a35b96b3484b,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,fbbb2449-9a07-4229-8ea5-bee0afab5f56,fbbb2449-9a07-4229-8ea5-bee0afab5f56,1,0,9fdddb51-0605-4f64-8d2e-aa7dbcd37262,9fdddb51-0605-4f64-8d2e-aa7dbcd37262,1,0,3f3f1b41-57a9-4a82-bdfa-89a6653479ab,3f3f1b41-57a9-4a82-bdfa-89a6653479ab,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,9c443dd3-4acb-4c5a-9c4b-af8b0c87e861,9c443dd3-4acb-4c5a-9c4b-af8b0c87e861,1,0,98153b59-8cc6-4dc7-b945-99c1146d07da,98153b59-8cc6-4dc7-b945-99c1146d07da,1,0,657b8663-713c-4a80-81e1-8c0166742a35,657b8663-713c-4a80-81e1-8c0166742a35,1,0,866438d1-1223-4768-9c96-e6cb12f1a4d5,866438d1-1223-4768-9c96-e6cb12f1a4d5,1,0,d416cc2a-425f-4c01-a550-5a755ed78cc8,d416cc2a-425f-4c01-a550-5a755ed78cc8,1,0,df9db8d5-c5c2-4a9d-88fe-77247b2c417e,df9db8d5-c5c2-4a9d-88fe-77247b2c417e,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,9039f720-5728-4918-87d5-8b2d07cabcfd,9039f720-5728-4918-87d5-8b2d07cabcfd,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,aaaa7d41-3399-41b5-b882-58af38121494,aaaa7d41-3399-41b5-b882-58af38121494,1,0,0f25646a-90f9-4747-a778-7efdaabc284c,0f25646a-90f9-4747-a778-7efdaabc284c,1,0,3705a086-46e6-4090-a52a-535908eea8a5,3705a086-46e6-4090-a52a-535908eea8a5,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,a6587758-f7af-4f85-81b4-4312c725824e,a6587758-f7af-4f85-81b4-4312c725824e,1,0,5d336d1e-24f9-404a-9671-3bcdc7c48a25,5d336d1e-24f9-404a-9671-3bcdc7c48a25,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,ea2e9a4e-eca1-4a6e-b7a6-8922a11334aa,ea2e9a4e-eca1-4a6e-b7a6-8922a11334aa,1,0,c971e0ba-53b8-4454-92f7-40b0d639058a,c971e0ba-53b8-4454-92f7-40b0d639058a,1,0,9d8496ea-fc0c-410d-994d-7480350d71d3,9d8496ea-fc0c-410d-994d-7480350d71d3,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,5b62e0d1-8dba-47db-8dbb-517ad935fa0d,5b62e0d1-8dba-47db-8dbb-517ad935fa0d,1,0,e7a63151-fc1a-4563-8768-26d854ab012b,e7a63151-fc1a-4563-8768-26d854ab012b,1,0,e7d0cc1f-f3ee-486e-b1f3-db8e6a6162cc,e7d0cc1f-f3ee-486e-b1f3-db8e6a6162cc,1,0,c54f31ce-114b-46d3-b4c6-12c8f07727ca,c54f31ce-114b-46d3-b4c6-12c8f07727ca,1,0,73c7750f-8291-4e19-8551-635cd6b94215,73c7750f-8291-4e19-8551-635cd6b94215,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,65dd4904-0837-4de5-a5e5-601151055d94,65dd4904-0837-4de5-a5e5-601151055d94,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,df48bfa3-5502-4a61-a79f-1dea043dac36,df48bfa3-5502-4a61-a79f-1dea043dac36,1,0,adee37e6-f087-422f-91b3-681f3d73189c,adee37e6-f087-422f-91b3-681f3d73189c,1,0,eb276904-cad7-4401-bb78-2d13946291f1,eb276904-cad7-4401-bb78-2d13946291f1,1,0,171a64b6-39d2-455f-b304-1c6ea8d85494,171a64b6-39d2-455f-b304-1c6ea8d85494,1,0,79ff04ac-4625-469b-916e-938f04de4dd2,79ff04ac-4625-469b-916e-938f04de4dd2,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,1e633034-6dcc-4564-9f40-348c32143314,1e633034-6dcc-4564-9f40-348c32143314,1,0,84395058-d46a-428c-b782-a9fa89fea14a,84395058-d46a-428c-b782-a9fa89fea14a,1,0,4766c40e-6330-4c1d-a64f-0c8c672886a4,4766c40e-6330-4c1d-a64f-0c8c672886a4,1,0,cc9679a5-1ed2-4290-8c9b-8a2f6614d053,cc9679a5-1ed2-4290-8c9b-8a2f6614d053,1,0,d8621f68-106e-4058-963f-56010491ae2e,d8621f68-106e-4058-963f-56010491ae2e,1,0,1f3057c2-135f-44b2-9f86-34481fbc5596,1f3057c2-135f-44b2-9f86-34481fbc5596,1,0,f8f0d92c-b7f0-496c-8d33-f8a57dfa16f2,f8f0d92c-b7f0-496c-8d33-f8a57dfa16f2,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,54f3902b-f29a-4f04-8c9d-68c318fcd076,54f3902b-f29a-4f04-8c9d-68c318fcd076,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,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,3e4361e9-2baf-407b-9320-b2a265b44e46,3e4361e9-2baf-407b-9320-b2a265b44e46,1,0,00418e6c-77b2-4753-b9ff-3a8013436f8a,00418e6c-77b2-4753-b9ff-3a8013436f8a,1,0,e2c76c41-4c47-4588-a081-7bd81ac1698b,e2c76c41-4c47-4588-a081-7bd81ac1698b,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,92bec607-7217-42f6-8eb9-ace759672336,92bec607-7217-42f6-8eb9-ace759672336,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,4d660fec-4a76-470e-bba9-3d031941b289,4d660fec-4a76-470e-bba9-3d031941b289,1,0,38bf6d3b-5435-4bac-b9fc-23b80afeb760,38bf6d3b-5435-4bac-b9fc-23b80afeb760,1,0,a3c9a7eb-2104-4402-954c-3e12de4a7de3,a3c9a7eb-2104-4402-954c-3e12de4a7de3,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,5e380276-2a08-435c-927e-a7f56f5a4dbc,5e380276-2a08-435c-927e-a7f56f5a4dbc,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,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,b8b267e3-75af-4140-b515-d99e8e748e84,b8b267e3-75af-4140-b515-d99e8e748e84,1,0,8014684f-e1f1-4163-9083-459a009c0aac,8014684f-e1f1-4163-9083-459a009c0aac,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,c0218ef0-4aa1-4ff1-963b-e6ab1001ae9e,c0218ef0-4aa1-4ff1-963b-e6ab1001ae9e,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,145ecede-baae-4725-832a-5387794922ed,145ecede-baae-4725-832a-5387794922ed,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,35bc58df-8aff-48dd-83a9-b60b0461f94d,35bc58df-8aff-48dd-83a9-b60b0461f94d,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,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,30f6aedf-946f-400c-822d-5fa375b8fb1d,30f6aedf-946f-400c-822d-5fa375b8fb1d,1,0,46e313f7-54da-4884-89e8-cdba6ae30d30,46e313f7-54da-4884-89e8-cdba6ae30d30,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,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,c1c62215-41b8-40bc-a806-1347db5b03e9,c1c62215-41b8-40bc-a806-1347db5b03e9,1,0,a24322f3-c7a5-4b25-bad6-9c75712a3e58,a24322f3-c7a5-4b25-bad6-9c75712a3e58,1,0,679d2b3b-a354-4dec-b49d-ab1163756e3a,679d2b3b-a354-4dec-b49d-ab1163756e3a,1,0,665e96bc-8ec1-4008-b9bd-db95a234b9b8,665e96bc-8ec1-4008-b9bd-db95a234b9b8,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,aa299fc6-051f-487c-ada4-451e08c4763c,aa299fc6-051f-487c-ada4-451e08c4763c,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,322645d4-e3fb-467b-a55d-d8e74cff2ea3,322645d4-e3fb-467b-a55d-d8e74cff2ea3,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,8a13c899-1659-48cf-9aa2-07ca99547b7b,8a13c899-1659-48cf-9aa2-07ca99547b7b,1,0,eb3f959c-94a4-4e77-b9f9-e81954254079,eb3f959c-94a4-4e77-b9f9-e81954254079,1,0,71dfde27-3762-4dd0-9252-6e703ce1b101,71dfde27-3762-4dd0-9252-6e703ce1b101,1,0,d8fc4644-5351-443c-8b5d-5de2c4b855d1,d8fc4644-5351-443c-8b5d-5de2c4b855d1,1,0,0f039952-09d3-49c8-b909-e8333a3fc8f9,0f039952-09d3-49c8-b909-e8333a3fc8f9,1,0,99387869-f8b1-4269-bd26-e39380d17b69,99387869-f8b1-4269-bd26-e39380d17b69,1,0,4b2acdb9-fefd-4735-9dfd-d7d141967f3c,4b2acdb9-fefd-4735-9dfd-d7d141967f3c,1,0,bc07d643-a044-4882-b95b-2173a197fd0e,bc07d643-a044-4882-b95b-2173a197fd0e,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,862e2759-5311-4c68-8977-86133bcf8c0e,862e2759-5311-4c68-8977-86133bcf8c0e,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,b848d70a-9d08-4b1a-8df1-17697432516d,b848d70a-9d08-4b1a-8df1-17697432516d,1,0,9a30b92d-0c5b-4e11-a741-2b6efa8ac229,9a30b92d-0c5b-4e11-a741-2b6efa8ac229,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,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,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,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,11c5930d-f882-46bd-9e7b-63e5344f6604,11c5930d-f882-46bd-9e7b-63e5344f6604,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,86c22871-6d1c-44e0-8ade-ce4bdeb23321,86c22871-6d1c-44e0-8ade-ce4bdeb23321,1,0,da51de81-4d4f-46b5-a308-7b50db6c45a7,da51de81-4d4f-46b5-a308-7b50db6c45a7,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,f02e807c-6cd3-4a4f-8dad-73bd56ee98ff,f02e807c-6cd3-4a4f-8dad-73bd56ee98ff,1,0,eefd00fe-3241-498f-aeb4-d429a86ab563,eefd00fe-3241-498f-aeb4-d429a86ab563,1,0,802d3489-318f-467d-a9f4-d7c644edac60,802d3489-318f-467d-a9f4-d7c644edac60,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,26e58429-1e08-454a-b4d7-2470390149fb,26e58429-1e08-454a-b4d7-2470390149fb,1,0,daa42bf5-9c32-4913-bc27-38f77ccc1a9f,daa42bf5-9c32-4913-bc27-38f77ccc1a9f,1,0,7620b61a-b0d1-4c71-bc80-72c48e17b96d,7620b61a-b0d1-4c71-bc80-72c48e17b96d,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,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,d253aa54-a447-44aa-bb13-82fd1ce22af4,d253aa54-a447-44aa-bb13-82fd1ce22af4,1,0,8936f114-7a0e-4a4c-8752-ccacab410778,8936f114-7a0e-4a4c-8752-ccacab410778,1,0,55649242-42fd-468f-a1e4-f6cd8871f7a4,55649242-42fd-468f-a1e4-f6cd8871f7a4,1,0,980e0883-cd8f-48c8-896f-ef185650f5c2,980e0883-cd8f-48c8-896f-ef185650f5c2,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,d3b09b09-df2d-40e5-86ce-84dab4898231,d3b09b09-df2d-40e5-86ce-84dab4898231,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,16939af9-e459-43da-8e0d-5d5891af6e0c,16939af9-e459-43da-8e0d-5d5891af6e0c,1,0,1d736a09-6c8f-433a-bf5b-201996bf4c62,1d736a09-6c8f-433a-bf5b-201996bf4c62,1,0,157988ad-d482-41df-b3e3-f2a0383d7130,157988ad-d482-41df-b3e3-f2a0383d7130,1,0,33af87a9-db69-41da-a33a-0435da2155e3,33af87a9-db69-41da-a33a-0435da2155e3,1,0,c95831b4-7d1d-4a9a-b5d0-caa03c4f4eca,c95831b4-7d1d-4a9a-b5d0-caa03c4f4eca,1,0,81b63f1d-2c65-4efb-8599-8a4d97b612ab,81b63f1d-2c65-4efb-8599-8a4d97b612ab,1,0,4b13a2c6-a6ce-47a0-8d9e-1a5dbe8d4b00,4b13a2c6-a6ce-47a0-8d9e-1a5dbe8d4b00,1,0,d1dde981-615a-461f-b0c5-a85f51003a2c,d1dde981-615a-461f-b0c5-a85f51003a2c,1,0,f5970c48-63d7-4064-bdfc-482b72939347,f5970c48-63d7-4064-bdfc-482b72939347,1,0,5c8039c0-34d8-4443-bd8f-dfe3dc2977a8,5c8039c0-34d8-4443-bd8f-dfe3dc2977a8,1,0,210972af-8687-4526-b288-60e7ee76cd61,210972af-8687-4526-b288-60e7ee76cd61,1,0,335f379a-2974-44ce-a668-e7ffe2ce6263,335f379a-2974-44ce-a668-e7ffe2ce6263,1,0,7edd75a2-9d03-4330-9185-28d0f0d4a2e4,7edd75a2-9d03-4330-9185-28d0f0d4a2e4,1,0,f7cc4f9e-cf9a-41f5-865f-d64108b981a5,f7cc4f9e-cf9a-41f5-865f-d64108b981a5,1,0,b58f8947-344c-4902-832c-d8004da55c34,b58f8947-344c-4902-832c-d8004da55c34,1,0,35cccc1d-3d67-4d39-aa79-2c30a5347587,35cccc1d-3d67-4d39-aa79-2c30a5347587,1,0,b6ee01eb-31ab-4f39-b4ff-37a04e3c7f35,b6ee01eb-31ab-4f39-b4ff-37a04e3c7f35,1,0,0776dfb2-67e0-4e11-9f94-abde790ff7e2,0776dfb2-67e0-4e11-9f94-abde790ff7e2,1,0,9c92b833-7406-48e2-9f59-69d575a3898f,9c92b833-7406-48e2-9f59-69d575a3898f,1,0,0cc5334f-8147-455c-8262-540324415812,0cc5334f-8147-455c-8262-540324415812,1,0,f3c4e6db-7c4e-4027-8bfd-f7854d566fc1,f3c4e6db-7c4e-4027-8bfd-f7854d566fc1,1,0,0eeb2f75-7092-4487-891f-cdbc9aa978cb,0eeb2f75-7092-4487-891f-cdbc9aa978cb,1,0,4ac60443-c7cb-492f-98b4-7e48bf9bfaa6,4ac60443-c7cb-492f-98b4-7e48bf9bfaa6,1,0,22979d50-ea57-4fab-9673-1b537838aead,22979d50-ea57-4fab-9673-1b537838aead,1,0,14676ee5-c247-46c6-a37e-c4362de79bb9,14676ee5-c247-46c6-a37e-c4362de79bb9,1,0,9fa36fe3-814e-4472-94ee-5d9d2b230b24,9fa36fe3-814e-4472-94ee-5d9d2b230b24,1,0,4b59dc62-0352-45a8-b33b-c42f4eea75ee,4b59dc62-0352-45a8-b33b-c42f4eea75ee,1,0,ea8a50ce-f09c-49f7-be58-ff2864e4eaa3,ea8a50ce-f09c-49f7-be58-ff2864e4eaa3,1,0,2020d672-bef4-4b30-885e-7f41364e412b,2020d672-bef4-4b30-885e-7f41364e412b,1,0,c292ddbc-9402-4c43-93d8-f8efafa6456e,c292ddbc-9402-4c43-93d8-f8efafa6456e,1,0,0281cbd6-972d-4632-9a6a-f8791e2534ee,0281cbd6-972d-4632-9a6a-f8791e2534ee,1,0,bae01f18-b6f3-44e4-93c3-ffcb3ef01b98,bae01f18-b6f3-44e4-93c3-ffcb3ef01b98,1,0,98d66bf0-617a-40aa-97bd-896d37a966ab,98d66bf0-617a-40aa-97bd-896d37a966ab,1,0,1847bb2f-8309-4c49-b752-ef7ec16d4230,1847bb2f-8309-4c49-b752-ef7ec16d4230,1,0,ca23f432-e2a3-4385-8cc1-7e9c96f9d7a1,ca23f432-e2a3-4385-8cc1-7e9c96f9d7a1,1,0,e1856045-f394-45b8-9f0c-298812f1f514,e1856045-f394-45b8-9f0c-298812f1f514,1,0,eb175c1d-7fcb-4807-82e3-688639468116,eb175c1d-7fcb-4807-82e3-688639468116,1,0,4ed9c099-700f-409b-bd91-e24719046953,4ed9c099-700f-409b-bd91-e24719046953,1,0,85b935b4-5eec-40cf-9d99-02cb3f599492,85b935b4-5eec-40cf-9d99-02cb3f599492,1,0,5764a412-4a20-4b2e-9905-ce74a9cac3ae,5764a412-4a20-4b2e-9905-ce74a9cac3ae,1,0,c4330791-d8f7-400f-b270-dee567e7a695,c4330791-d8f7-400f-b270-dee567e7a695,1,0,aab8ec4d-51de-4c1a-9794-266c119332d1,aab8ec4d-51de-4c1a-9794-266c119332d1,1,0,77cb6e52-37a9-423c-8260-6998161adcb5,77cb6e52-37a9-423c-8260-6998161adcb5,1,0,d903569d-911d-4277-a26f-afe2bf67eb09,d903569d-911d-4277-a26f-afe2bf67eb09,1,0,b5ac7de5-565f-4637-b267-dde3637e336b,b5ac7de5-565f-4637-b267-dde3637e336b,1,0,d4a6ab09-259f-4476-834c-a2b57cdeac05,d4a6ab09-259f-4476-834c-a2b57cdeac05,1,0,a56ff7f4-2259-455f-b707-b98aacd7d0b2,a56ff7f4-2259-455f-b707-b98aacd7d0b2,1,0,8c9636c3-0a84-4575-b4c7-6d8bb588e1b0,8c9636c3-0a84-4575-b4c7-6d8bb588e1b0,1,0,76e03401-7c07-4037-a464-d7377852de1d,76e03401-7c07-4037-a464-d7377852de1d,1,0,dc8239e8-fddf-411e-b51a-4230b63236cd,dc8239e8-fddf-411e-b51a-4230b63236cd,1,0,3b861376-2864-4de8-ba59-2a2835d7eaf6,3b861376-2864-4de8-ba59-2a2835d7eaf6,1,0,02910dcd-9e66-4239-a421-8067faf59577,02910dcd-9e66-4239-a421-8067faf59577,1,0,76d5a67f-bb11-4937-a66d-cdce28165562,76d5a67f-bb11-4937-a66d-cdce28165562,1,0,b99a23a5-bfbf-46ec-8268-ff89afdfc63a,b99a23a5-bfbf-46ec-8268-ff89afdfc63a,1,0,cdb93924-62ce-4268-9915-e6c67c1b9cb8,cdb93924-62ce-4268-9915-e6c67c1b9cb8,1,0,1139b6c7-7b55-45b4-98cf-ccac3bfaaa6c,1139b6c7-7b55-45b4-98cf-ccac3bfaaa6c,1,0,33c39990-f4fc-4629-83ba-b43b05a40ca6,33c39990-f4fc-4629-83ba-b43b05a40ca6,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,849f00c3-2f18-414c-97f6-32a99173fab9,849f00c3-2f18-414c-97f6-32a99173fab9,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,a587cade-4c91-4769-9c6a-a4fb4fe94196,a587cade-4c91-4769-9c6a-a4fb4fe94196,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,1300c46e-24d4-45cf-a899-3d26b5cf0b50,1300c46e-24d4-45cf-a899-3d26b5cf0b50,1,0,4cde6fdc-85fa-4c00-896c-51a68f5f10a5,4cde6fdc-85fa-4c00-896c-51a68f5f10a5,1,0,f41de07b-cba3-4bb8-9ec0-64ec59753f84,f41de07b-cba3-4bb8-9ec0-64ec59753f84,1,0,f78a5650-4d6c-4c17-95e0-e95cf8d9ad4b,f78a5650-4d6c-4c17-95e0-e95cf8d9ad4b,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,46417026-c44a-4a06-af41-9cf6495a33b4,46417026-c44a-4a06-af41-9cf6495a33b4,1,0,363c15f3-660e-4e19-b3cc-37c5d05e8d22,363c15f3-660e-4e19-b3cc-37c5d05e8d22,1,0,eeb4b6f1-2476-467d-9862-6fe9d3013b2c,eeb4b6f1-2476-467d-9862-6fe9d3013b2c,1,0,59d5cd7d-7f53-4015-89d9-bb8ad89f8c04,59d5cd7d-7f53-4015-89d9-bb8ad89f8c04,1,0,9d7f7dde-fea8-4064-abe2-bb7d04500cb2,9d7f7dde-fea8-4064-abe2-bb7d04500cb2,1,0,3af45dae-f563-4d23-a87a-11b4d9d5d7a7,3af45dae-f563-4d23-a87a-11b4d9d5d7a7,1,0,fe102b7b-b61f-4572-b2d0-c0af11bfb7d7,fe102b7b-b61f-4572-b2d0-c0af11bfb7d7,1,0,2cfa0db8-f0e6-4513-ab19-52dccff302bc,2cfa0db8-f0e6-4513-ab19-52dccff302bc,1,0,b9fece39-6e5d-44c0-af5c-ad13cfb71560,b9fece39-6e5d-44c0-af5c-ad13cfb71560,1,0,a9c30e99-c265-471d-9115-50ac2bb05191,a9c30e99-c265-471d-9115-50ac2bb05191,1,0,d388c9ca-1dbd-45b9-ac33-5ffa8cb11499,d388c9ca-1dbd-45b9-ac33-5ffa8cb11499,1,0,efebb079-b913-4249-b128-e0ffc7ab43dd,efebb079-b913-4249-b128-e0ffc7ab43dd,1,0,52077ee4-fef1-451f-8338-86563ff5cf60,52077ee4-fef1-451f-8338-86563ff5cf60,1,0,8e6780f8-8d0e-47d1-ac26-47bf5d906f61,8e6780f8-8d0e-47d1-ac26-47bf5d906f61,1,0,fd4a26c1-31e0-4216-92e0-1e090ec4f094,fd4a26c1-31e0-4216-92e0-1e090ec4f094,1,0,637148a3-0f54-4d41-91dd-a0aa6e191015,637148a3-0f54-4d41-91dd-a0aa6e191015,1,0,9a86e2fe-a9bc-4f0a-a16e-a97944fe8539,9a86e2fe-a9bc-4f0a-a16e-a97944fe8539,1,0,b6f745d7-1326-494e-b442-e4118955b5db,b6f745d7-1326-494e-b442-e4118955b5db,1,0,86755cbc-efd8-43e7-bba8-975c0a51f38f,86755cbc-efd8-43e7-bba8-975c0a51f38f,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,ae3358ad-ea3a-4b73-a305-02a152863978,ae3358ad-ea3a-4b73-a305-02a152863978,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,778c28e6-4548-45f3-a1bc-cb1dbf0cb388,778c28e6-4548-45f3-a1bc-cb1dbf0cb388,1,0,a2d6f2d9-0610-4ca9-bc15-58e341a049a4,a2d6f2d9-0610-4ca9-bc15-58e341a049a4,1,0,4dbf114a-5402-40b0-9cab-19601aa8328e,4dbf114a-5402-40b0-9cab-19601aa8328e,1,0,a0856ca2-6a66-4108-b6d4-82443cdccca6,a0856ca2-6a66-4108-b6d4-82443cdccca6,1,0,378b0708-a0a1-4c82-b55a-796acb27e696,378b0708-a0a1-4c82-b55a-796acb27e696,1,0,8e462c0e-c67a-45e9-9871-1f976b01632d,8e462c0e-c67a-45e9-9871-1f976b01632d,1,0,c5335e1f-3e47-46b7-b695-0653f825d855,c5335e1f-3e47-46b7-b695-0653f825d855,1,0,d7faad11-1e35-460c-8943-49370f328c03,d7faad11-1e35-460c-8943-49370f328c03,1,0,e4726010-85c5-4ccc-b574-4b3b55f0d391,e4726010-85c5-4ccc-b574-4b3b55f0d391,1,0,5d6770f2-9b3d-45c7-9e34-4c8626e482cf,5d6770f2-9b3d-45c7-9e34-4c8626e482cf,1,0,b01ace0e-7f21-4b6b-b751-074dcd9a8f54,b01ace0e-7f21-4b6b-b751-074dcd9a8f54,1,0,1f4f839a-4e19-45b8-a988-13ee604c269c,1f4f839a-4e19-45b8-a988-13ee604c269c,1,0,b3aa97e1-baef-45f4-9179-052f35527a5e,b3aa97e1-baef-45f4-9179-052f35527a5e,1,0,d613941f-ed4c-4957-b469-ea6b0d2a121d,d613941f-ed4c-4957-b469-ea6b0d2a121d,1,0,0d8d08e3-194f-416c-a1e0-aa92b40b7911,0d8d08e3-194f-416c-a1e0-aa92b40b7911,1,0,af0178fe-eb3a-485b-9acf-35c8702aa330,af0178fe-eb3a-485b-9acf-35c8702aa330,1,0,201d323b-4c0c-4c93-ae43-43a378ec0d9e,201d323b-4c0c-4c93-ae43-43a378ec0d9e,1,0,9e2c01b1-ccfe-4a68-a6af-8284e3e2396f,9e2c01b1-ccfe-4a68-a6af-8284e3e2396f,1,0,c513ceb0-0855-43ce-a311-c9bea88e2563,c513ceb0-0855-43ce-a311-c9bea88e2563,1,0,974bfc13-85c2-454a-b562-e72384eb4c31,974bfc13-85c2-454a-b562-e72384eb4c31,1,0,69cd6adc-b129-4fbc-804d-8d5aaef77280,69cd6adc-b129-4fbc-804d-8d5aaef77280,1,0,3431a3de-cb9d-46dc-b597-3203831796a9,3431a3de-cb9d-46dc-b597-3203831796a9,1,0,f3866271-04ed-4963-852e-cf41e9e18e1d,f3866271-04ed-4963-852e-cf41e9e18e1d,1,0,b77e5ec2-35cd-43ae-957f-af35214fa621,b77e5ec2-35cd-43ae-957f-af35214fa621,1,0,4a04d83d-cadd-4f36-9ec8-f926259c18ba,4a04d83d-cadd-4f36-9ec8-f926259c18ba,1,0,85e670c0-1616-4611-984c-3d40e890b2e9,85e670c0-1616-4611-984c-3d40e890b2e9,1,0,48ed25b0-afb9-414b-9a4e-8647fbdd95c3,48ed25b0-afb9-414b-9a4e-8647fbdd95c3,1,0,1e3a1148-1e9c-47b0-8f3c-f218c3b0094f,1e3a1148-1e9c-47b0-8f3c-f218c3b0094f,1,0,f1693207-2637-412a-972f-2bc79b9c7fc8,f1693207-2637-412a-972f-2bc79b9c7fc8,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,b67a509d-bb0f-427e-b447-4d4617078d6a,b67a509d-bb0f-427e-b447-4d4617078d6a,1,0,968ecfca-cf06-4952-83c1-a151e46c78a9,968ecfca-cf06-4952-83c1-a151e46c78a9,1,0,4945c734-a47d-44e9-8a7f-94b31911c1ce,4945c734-a47d-44e9-8a7f-94b31911c1ce,1,0,20a194e9-06cf-4013-bfa4-bc15554a54d0,20a194e9-06cf-4013-bfa4-bc15554a54d0,1,0,ab4f3d3d-bb5a-4dbc-b699-808458036b00,ab4f3d3d-bb5a-4dbc-b699-808458036b00,1,0,09761456-2273-437f-9316-0391cfaa81b3,09761456-2273-437f-9316-0391cfaa81b3,1,0,93922abc-98b9-4b3d-a5c8-7294378a69e1,93922abc-98b9-4b3d-a5c8-7294378a69e1,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,0f46b124-1575-4984-9bc1-b5e4696efc74,0f46b124-1575-4984-9bc1-b5e4696efc74,1,0,a0183a0b-1459-4b32-924c-6ea156f02125,a0183a0b-1459-4b32-924c-6ea156f02125,1,0,fc2dc619-41e0-4cce-a080-d5c8de5029a8,fc2dc619-41e0-4cce-a080-d5c8de5029a8,1,0,9609e5fb-fd11-463c-8679-9b10fc0993ed,9609e5fb-fd11-463c-8679-9b10fc0993ed,1,0,f438b941-2aae-4c67-81dc-340f6acc25b1,f438b941-2aae-4c67-81dc-340f6acc25b1,1,0,48075630-2041-48c3-9eb0-d2107cfcb249,48075630-2041-48c3-9eb0-d2107cfcb249,1,0,7d7e7e13-eb42-420d-9bfc-14fab901c3c1,7d7e7e13-eb42-420d-9bfc-14fab901c3c1,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,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,65f3ad72-ed03-482b-a2f1-05053eef408a,65f3ad72-ed03-482b-a2f1-05053eef408a,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,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,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,9cfd3d38-4e0e-40f4-ae77-7a997646e4b2,9cfd3d38-4e0e-40f4-ae77-7a997646e4b2,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,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,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,13beb01d-dd08-4a6d-863b-651e70bbf51f,13beb01d-dd08-4a6d-863b-651e70bbf51f,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,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,f00e93bf-6e3b-4819-a4e1-33471a6d0fff,f00e93bf-6e3b-4819-a4e1-33471a6d0fff,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,2bc2ca58-6cc0-4d4b-8672-f9328c86c2c1,2bc2ca58-6cc0-4d4b-8672-f9328c86c2c1,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,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,5c17a594-eb0b-4cdf-af35-0eaba968e065,5c17a594-eb0b-4cdf-af35-0eaba968e065,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,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,bf3304c0-5078-478f-bbf8-6178264c5f26,bf3304c0-5078-478f-bbf8-6178264c5f26,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,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,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,78942e92-a31c-4824-a614-a6e07ae26171,78942e92-a31c-4824-a614-a6e07ae26171,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,a5f5bc90-e670-4ee7-95fe-067fe1b129f7,a5f5bc90-e670-4ee7-95fe-067fe1b129f7,1,0,f790f620-2247-4a04-b0ad-8aa591655948,f790f620-2247-4a04-b0ad-8aa591655948,1,0,6d9d9087-91ad-4368-9087-0af8f83fdc9e,6d9d9087-91ad-4368-9087-0af8f83fdc9e,1,0,61fdb27e-b449-40a7-8ecd-7e3e8ae3aa23,61fdb27e-b449-40a7-8ecd-7e3e8ae3aa23,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,96dac7e8-5113-4217-ac0a-fffea4acc410,96dac7e8-5113-4217-ac0a-fffea4acc410,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,ea7ab9fa-5119-4773-b17d-fc74c7479d3d,ea7ab9fa-5119-4773-b17d-fc74c7479d3d,1,0,3e0fe508-87fa-47af-a47f-c0630a186900,3e0fe508-87fa-47af-a47f-c0630a186900,1,0,09740271-b8a8-4949-a116-b64449d80036,09740271-b8a8-4949-a116-b64449d80036,1,0,c8fedc0b-33d6-46a5-b4fc-a3cd728f5fd7,c8fedc0b-33d6-46a5-b4fc-a3cd728f5fd7,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,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,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,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,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,efd4e0a3-2f98-40ef-8089-c853cd588fa6,efd4e0a3-2f98-40ef-8089-c853cd588fa6,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,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,4ec26e3d-6c38-4c90-9f91-c2235f8b4154,4ec26e3d-6c38-4c90-9f91-c2235f8b4154,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,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,5d990585-02dd-4a13-8dfa-920df7d1dbb0,5d990585-02dd-4a13-8dfa-920df7d1dbb0,1,0,788a98e0-194f-466c-b4fa-bafd527aae26,788a98e0-194f-466c-b4fa-bafd527aae26,1,0,07820e9e-9d6b-4c37-909e-90dbd33e30c0,07820e9e-9d6b-4c37-909e-90dbd33e30c0,1,0,364218e0-87ba-4008-a3e3-e2351a5e04b8,364218e0-87ba-4008-a3e3-e2351a5e04b8,1,0,143f6db9-a4dc-4039-90d0-6161394a3e2f,143f6db9-a4dc-4039-90d0-6161394a3e2f,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,6de34ed8-5d6c-4bb6-af94-328e692b862e,6de34ed8-5d6c-4bb6-af94-328e692b862e,1,0,e705bde3-45c3-4ffd-a767-0320c6cc8b91,e705bde3-45c3-4ffd-a767-0320c6cc8b91,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,64ed8c1a-6446-4f0d-a2ef-c599e84c4909,64ed8c1a-6446-4f0d-a2ef-c599e84c4909,1,0,52fc85fb-309b-4739-bbd3-c3966657e973,52fc85fb-309b-4739-bbd3-c3966657e973,1,0,87081ab5-bdd5-4daa-88ef-8a2cba8c7d53,87081ab5-bdd5-4daa-88ef-8a2cba8c7d53,1,0,be3cfba8-e6f6-4202-ab0f-96c00fbf7462,be3cfba8-e6f6-4202-ab0f-96c00fbf7462,1,0,64ef1b5c-ec04-45eb-9998-bc573f4038d7,64ef1b5c-ec04-45eb-9998-bc573f4038d7,1,0,4fde5159-8f21-4151-8dbd-b2cd376d9392,4fde5159-8f21-4151-8dbd-b2cd376d9392,1,0,3ea799a6-6642-4388-b0a3-c2962e71ff51,3ea799a6-6642-4388-b0a3-c2962e71ff51,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,c343495b-5947-4fe7-a94b-d1f2b2455b4f,c343495b-5947-4fe7-a94b-d1f2b2455b4f,1,0,fbce7316-bb9a-40c1-af3c-352f4b559ab6,fbce7316-bb9a-40c1-af3c-352f4b559ab6,1,0,a3721457-b33b-4742-b6e1-531af10969d1,a3721457-b33b-4742-b6e1-531af10969d1,1,0,9619a603-e578-4f30-bcc6-adfddfa915c0,9619a603-e578-4f30-bcc6-adfddfa915c0,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,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,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,f5c4d4ad-dda6-4dc3-b112-61f776006f3c,f5c4d4ad-dda6-4dc3-b112-61f776006f3c,1,0,466d9fd7-188e-4f3b-a673-35db9075d537,466d9fd7-188e-4f3b-a673-35db9075d537,1,0,1c2e2c7d-c9d2-46a6-81f9-30078ca511c7,1c2e2c7d-c9d2-46a6-81f9-30078ca511c7,1,0,09d3717a-d6f9-42fd-ae9e-df5658fa3981,09d3717a-d6f9-42fd-ae9e-df5658fa3981,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,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,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,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,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,d1ade16c-bd56-46e5-874f-3117c5653192,d1ade16c-bd56-46e5-874f-3117c5653192,1,0,339398c0-6407-483c-82f7-266ef08b8657,339398c0-6407-483c-82f7-266ef08b8657,1,0,4f0a8f8c-68cb-4afe-b487-64e7ceeef9ab,4f0a8f8c-68cb-4afe-b487-64e7ceeef9ab,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,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,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,c91de10a-d370-4495-9d9e-98581e566385,c91de10a-d370-4495-9d9e-98581e566385,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,cee126de-d567-44d3-b14c-35da6e501324,cee126de-d567-44d3-b14c-35da6e501324,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,6b28a716-2fb1-47f7-a7d6-f2fe7edb32c3,6b28a716-2fb1-47f7-a7d6-f2fe7edb32c3,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,310aef5a-84d9-4a68-af78-d623beff8a88,310aef5a-84d9-4a68-af78-d623beff8a88,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,e8045f52-7b27-48b0-b009-d488718b3bef,e8045f52-7b27-48b0-b009-d488718b3bef,1,0,1796bcbb-a629-4509-95c9-78562689f809,1796bcbb-a629-4509-95c9-78562689f809,1,0,cd9799c9-f5bf-4537-8885-06fb6e6b8f93,cd9799c9-f5bf-4537-8885-06fb6e6b8f93,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,904d5bd0-3843-4aaa-86a3-f8e12282e5c0,904d5bd0-3843-4aaa-86a3-f8e12282e5c0,1,0,ce1ffc4e-56c2-45ce-80e8-8b96d00316bc,ce1ffc4e-56c2-45ce-80e8-8b96d00316bc,1,0,90420fe9-f75a-4bcc-8e1a-9d665a61ecef,90420fe9-f75a-4bcc-8e1a-9d665a61ecef,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,70a06a02-8fb8-4a39-9e50-b7c27c41f49f,70a06a02-8fb8-4a39-9e50-b7c27c41f49f,1,0,810755ad-e921-4250-a0d3-af77fe1b6c79,810755ad-e921-4250-a0d3-af77fe1b6c79,1,0,f0f2f6de-b5ca-416c-b2e7-70a2df0993a1,f0f2f6de-b5ca-416c-b2e7-70a2df0993a1,1,0,99a40d71-f47a-4c04-9137-d297eda2fad9,99a40d71-f47a-4c04-9137-d297eda2fad9,1,0,33fa908a-5516-43c8-94d3-28c60eba8d66,33fa908a-5516-43c8-94d3-28c60eba8d66,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,ec681c28-661c-43e3-9285-9fc606f2d24c,ec681c28-661c-43e3-9285-9fc606f2d24c,1,0,be0fbbfc-5873-41a6-80ef-35ed1b8adb4c,be0fbbfc-5873-41a6-80ef-35ed1b8adb4c,1,0,413c2d03-f717-4503-9723-c605114b2799,413c2d03-f717-4503-9723-c605114b2799,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,fad0898f-5769-46ab-bc5e-301924b851a0,fad0898f-5769-46ab-bc5e-301924b851a0,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,791dbdee-56f6-4fe3-ada4-965c9111d69e,791dbdee-56f6-4fe3-ada4-965c9111d69e,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,04013c34-8d59-4f87-b272-732d5a6dd675,04013c34-8d59-4f87-b272-732d5a6dd675,1,0,f9df9b6b-5051-46ef-bb1f-1974f41054a7,f9df9b6b-5051-46ef-bb1f-1974f41054a7,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,c0804a4a-64d5-457f-a542-8e5badccbdf1,c0804a4a-64d5-457f-a542-8e5badccbdf1,1,0,d6bd5459-6f95-4f9c-8d84-c67bdc716acf,d6bd5459-6f95-4f9c-8d84-c67bdc716acf,1,0,4a2d2790-debf-4dc2-8216-878d8808d161,4a2d2790-debf-4dc2-8216-878d8808d161,1,0,6dcbb379-d4f5-418a-a3ab-bb7c0e169058,6dcbb379-d4f5-418a-a3ab-bb7c0e169058,1,0,4507a92e-abb6-4329-88b2-3429bc694bc6,4507a92e-abb6-4329-88b2-3429bc694bc6,1,0,2694c1b4-536b-4187-adf6-0f8757aaae76,2694c1b4-536b-4187-adf6-0f8757aaae76,1,0,e523f88b-b3de-476e-a3cc-592970492dec,e523f88b-b3de-476e-a3cc-592970492dec,1,0,0e2107e2-8648-4b2e-9dfb-c23b1ff5b007,0e2107e2-8648-4b2e-9dfb-c23b1ff5b007,1,0,efb6b3b6-d57b-469f-a7c2-f4e0308d0c7f,efb6b3b6-d57b-469f-a7c2-f4e0308d0c7f,1,0,ea0843f4-60fb-4d44-abf4-0021867c636b,ea0843f4-60fb-4d44-abf4-0021867c636b,1,0,59aadc03-adbc-481f-89bc-d7f391789522,59aadc03-adbc-481f-89bc-d7f391789522,1,0,254f6ccd-0451-4231-91c9-4abe57b647be,254f6ccd-0451-4231-91c9-4abe57b647be,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,0a7d282e-45bb-4a87-b325-1659519867fb,0a7d282e-45bb-4a87-b325-1659519867fb,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,d029aa93-fea4-40e4-8cfb-2dc96544829b,d029aa93-fea4-40e4-8cfb-2dc96544829b,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,2116119f-7637-45a1-8e59-c9149619413b,2116119f-7637-45a1-8e59-c9149619413b,1,0,43882a2c-b625-4cfb-8220-3d12bfee09e4,43882a2c-b625-4cfb-8220-3d12bfee09e4,1,0,90639fdb-144d-495a-a097-76c45107fc97,90639fdb-144d-495a-a097-76c45107fc97,1,0,c076b7fd-7e17-4811-82e7-047e2bf43bb0,c076b7fd-7e17-4811-82e7-047e2bf43bb0,1,0,84b28732-9001-4798-b613-35ea65c26cce,84b28732-9001-4798-b613-35ea65c26cce,1,0,77d8285f-a87b-4a4e-b6ee-85bcd54dee12,77d8285f-a87b-4a4e-b6ee-85bcd54dee12,1,0,f2ec9416-3830-4607-90f3-f77fc53c9c70,f2ec9416-3830-4607-90f3-f77fc53c9c70,1,0,3057de81-eb41-4161-9dc2-5445699906af,3057de81-eb41-4161-9dc2-5445699906af,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,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,388f7571-8f1b-45c5-a8b8-45d648f2f5dd,388f7571-8f1b-45c5-a8b8-45d648f2f5dd,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,905b787b-c638-4703-af70-416a2ce43b50,905b787b-c638-4703-af70-416a2ce43b50,1,0,d7ea882a-6ef9-407f-b0e9-7bb42cf5ef17,d7ea882a-6ef9-407f-b0e9-7bb42cf5ef17,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,f9c0862c-34a2-41a3-ae46-b6a8e1ad1b08,f9c0862c-34a2-41a3-ae46-b6a8e1ad1b08,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,71e52f63-04db-4336-ace6-b143d0a7d250,71e52f63-04db-4336-ace6-b143d0a7d250,1,0,afe79ef0-7830-43ce-85f3-c4c97831aa67,afe79ef0-7830-43ce-85f3-c4c97831aa67,1,0,0d7c3192-b15b-4d40-83f9-b76c6f8e654f,0d7c3192-b15b-4d40-83f9-b76c6f8e654f,1,0,fe07f268-bcfd-40c6-adf3-79df859ff731,fe07f268-bcfd-40c6-adf3-79df859ff731,1,0,1a1c88ff-b0c4-42c3-bf10-ebdf4de935b7,1a1c88ff-b0c4-42c3-bf10-ebdf4de935b7,1,0,15e90374-99d9-48f7-b7d6-ec160cdb378f,15e90374-99d9-48f7-b7d6-ec160cdb378f,1,0,ad5b6b8e-c2b5-45aa-8e07-50ae8877ac8f,ad5b6b8e-c2b5-45aa-8e07-50ae8877ac8f,1,0,6c470f57-c920-435a-a013-ff83a737cf3a,6c470f57-c920-435a-a013-ff83a737cf3a,1,0,a5e13e12-72b7-477d-8d80-06015fa5dece,a5e13e12-72b7-477d-8d80-06015fa5dece,1,0,d9c47acd-b5ee-4ea1-b247-7cc09a13eb82,d9c47acd-b5ee-4ea1-b247-7cc09a13eb82,1,0,4a81906a-7db7-4e7d-a95e-79b07a43e573,4a81906a-7db7-4e7d-a95e-79b07a43e573,1,0,0bcabdf4-3348-405d-ba75-7bcc106f9e7f,0bcabdf4-3348-405d-ba75-7bcc106f9e7f,1,0,5f2980ca-3f1c-4680-a6e9-477825442782,5f2980ca-3f1c-4680-a6e9-477825442782,1,0,40fd6b4a-2180-4403-b7e6-48b42d8285b7,40fd6b4a-2180-4403-b7e6-48b42d8285b7,1,0,ef098c52-fcfa-4f0f-85b0-aba0d5aa46b2,ef098c52-fcfa-4f0f-85b0-aba0d5aa46b2,1,0,a671cb1e-b27a-44bb-a8ca-1388f099de2e,a671cb1e-b27a-44bb-a8ca-1388f099de2e,1,0,6cff6b09-91b5-4f2b-89aa-23d2f83f9d89,6cff6b09-91b5-4f2b-89aa-23d2f83f9d89,1,0,a4b6920e-3e25-4798-809a-27d7bfae4ee7,a4b6920e-3e25-4798-809a-27d7bfae4ee7,1,0,981f6e35-64b8-4d63-b383-32ea71fcd025,981f6e35-64b8-4d63-b383-32ea71fcd025,1,0,9a7b964d-1c06-44af-8d25-f84493c70a42,9a7b964d-1c06-44af-8d25-f84493c70a42,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,18ba2c0c-d606-47ee-9409-66acb24bd794,18ba2c0c-d606-47ee-9409-66acb24bd794,1,0,9f24891c-3846-455a-bf95-be3b186f4342,9f24891c-3846-455a-bf95-be3b186f4342,1,0,ddc332d9-1d60-40fe-87fd-7f2164db1edf,ddc332d9-1d60-40fe-87fd-7f2164db1edf,1,0,d0e3c3a5-e74c-4c0a-8679-77e6a097eb36,d0e3c3a5-e74c-4c0a-8679-77e6a097eb36,1,0,20c43755-49cc-4f11-bd2f-52a9e53547ef,20c43755-49cc-4f11-bd2f-52a9e53547ef,1,0,7dbed991-4883-444c-8ce2-96c203a905f2,7dbed991-4883-444c-8ce2-96c203a905f2,1,0,bbadd00d-6410-41ec-a7d8-4dbd52986cc2,bbadd00d-6410-41ec-a7d8-4dbd52986cc2,1,0,d5f66278-4ab2-407a-abef-eb7636e9ba95,d5f66278-4ab2-407a-abef-eb7636e9ba95,1,0,61e51391-c412-46a5-8290-d5183ad0db83,61e51391-c412-46a5-8290-d5183ad0db83,1,0,e9dfdaa2-4094-4501-a38a-3811e7e4c708,e9dfdaa2-4094-4501-a38a-3811e7e4c708,1,0,0a62947e-848a-47fa-a239-95aee6b955d4,0a62947e-848a-47fa-a239-95aee6b955d4,1,0,beaef14b-175f-4ebe-b387-9c922a42c99e,beaef14b-175f-4ebe-b387-9c922a42c99e,1,0,13daaad0-2726-4065-8158-47059865452a,13daaad0-2726-4065-8158-47059865452a,1,0,a7829dfb-adb9-4401-a609-ca9a0f2376b3,a7829dfb-adb9-4401-a609-ca9a0f2376b3,1,0,26f1076a-8100-4cf4-9539-29637a5e9137,26f1076a-8100-4cf4-9539-29637a5e9137,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,5225b4da-431e-469d-a30c-31fa434b7e86,5225b4da-431e-469d-a30c-31fa434b7e86,1,0,68dcbdd5-c1fd-472f-873c-359d3a237b8c,68dcbdd5-c1fd-472f-873c-359d3a237b8c,1,0,3c6e831c-c934-46bb-8040-edd6de81ba1b,3c6e831c-c934-46bb-8040-edd6de81ba1b,1,0,3c737aff-9581-409a-9a6e-d5e3c133d8df,3c737aff-9581-409a-9a6e-d5e3c133d8df,1,0,916a9ea9-309d-4a7a-9ded-63bda01a39d4,916a9ea9-309d-4a7a-9ded-63bda01a39d4,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,05681509-254d-4232-af69-62a63ed05716,05681509-254d-4232-af69-62a63ed05716,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,d7a72321-5f1f-427e-a54d-f308dab1b9c4,d7a72321-5f1f-427e-a54d-f308dab1b9c4,1,0,b183eb38-a96e-4e12-9220-4b4027ae875c,b183eb38-a96e-4e12-9220-4b4027ae875c,1,0,07f7e1b5-07b0-4017-bb91-31759c4ffed1,07f7e1b5-07b0-4017-bb91-31759c4ffed1,1,0,6de76d43-40d5-494f-8d30-2ef80c79bc7e,6de76d43-40d5-494f-8d30-2ef80c79bc7e,1,0,60146806-ee46-44d5-8a7a-2ed48741e1c1,60146806-ee46-44d5-8a7a-2ed48741e1c1,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,bdc51d67-5fc2-4d28-8875-69e33e625be6,bdc51d67-5fc2-4d28-8875-69e33e625be6,1,0,94ca9aa0-f61f-496b-8fef-9e6fb7bd8f87,94ca9aa0-f61f-496b-8fef-9e6fb7bd8f87,1,0,b494ca7b-6548-4fa2-932c-acdf8c62a78a,b494ca7b-6548-4fa2-932c-acdf8c62a78a,1,0,2d279292-f9d6-4d5a-aaeb-f82f6485ac54,2d279292-f9d6-4d5a-aaeb-f82f6485ac54,1,0,f335aa38-4e9e-4653-9a76-b6d4ae178c93,f335aa38-4e9e-4653-9a76-b6d4ae178c93,1,0,a62894bc-fab4-4ed4-a57d-cbe725527198,a62894bc-fab4-4ed4-a57d-cbe725527198,1,0,b5bb5376-27a6-43f2-9e91-bf7c913b89fd,b5bb5376-27a6-43f2-9e91-bf7c913b89fd,1,0,24861cd2-2be0-4454-8154-2201e63be266,24861cd2-2be0-4454-8154-2201e63be266,1,0,2e364599-aad9-4d1d-a4df-6cbd3ed768e7,2e364599-aad9-4d1d-a4df-6cbd3ed768e7,1,0,b1dd4569-6ed9-49f4-b05b-359229afb7a5,b1dd4569-6ed9-49f4-b05b-359229afb7a5,1,0,c14cac09-820e-47ae-81bb-eb497950d40c,c14cac09-820e-47ae-81bb-eb497950d40c,1,0,201cd431-6027-466c-abec-09ff65f42244,201cd431-6027-466c-abec-09ff65f42244,1,0,1018c5d8-8aed-49ba-a27c-a44bddd96144,1018c5d8-8aed-49ba-a27c-a44bddd96144,1,0,a81e5d20-9c42-462d-83a3-f86522c473f5,a81e5d20-9c42-462d-83a3-f86522c473f5,1,0,1ce4440e-3709-4cb1-8505-2379d5146be3,1ce4440e-3709-4cb1-8505-2379d5146be3,1,0,81c1f13c-e4ac-46b8-a205-c4f695ddf667,81c1f13c-e4ac-46b8-a205-c4f695ddf667,1,0,a26d8489-88a8-438e-bb58-c7b5a742a243,a26d8489-88a8-438e-bb58-c7b5a742a243,1,0,4b700bfd-5179-4504-b710-fd65036dded7,4b700bfd-5179-4504-b710-fd65036dded7,1,0,b046cb0b-f88b-4fb1-b08d-bb02b20dee74,b046cb0b-f88b-4fb1-b08d-bb02b20dee74,1,0,67dc31fa-cc64-4d29-96aa-65a7fd480790,67dc31fa-cc64-4d29-96aa-65a7fd480790,1,0,17f0e86d-8661-492c-85fa-2ce3cd1a57d5,17f0e86d-8661-492c-85fa-2ce3cd1a57d5,1,0,1cd36cf8-ae51-4fca-91d8-60c82f9e21e1,1cd36cf8-ae51-4fca-91d8-60c82f9e21e1,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,65ad33ce-edab-4f8b-8f44-1a5634d87191,65ad33ce-edab-4f8b-8f44-1a5634d87191,1,0,bcd727b5-4678-41e9-85d5-98d4157cdd77,bcd727b5-4678-41e9-85d5-98d4157cdd77,1,0,38c6dd83-2a70-4c4a-9f29-3b2b54a15501,38c6dd83-2a70-4c4a-9f29-3b2b54a15501,1,0,f403fcb3-a4f8-479d-9fa1-85d458b9a4b5,f403fcb3-a4f8-479d-9fa1-85d458b9a4b5,1,0,c56d3cfe-6ae1-4fe3-abdc-2d845049ddde,c56d3cfe-6ae1-4fe3-abdc-2d845049ddde,1,0,66f1dc54-f28c-4fb7-a6c9-f839d656e87c,66f1dc54-f28c-4fb7-a6c9-f839d656e87c,1,0,b8e3d08d-d442-4ffa-83d8-f372a7d2d340,b8e3d08d-d442-4ffa-83d8-f372a7d2d340,1,0,ebba727b-8155-4dd8-8ea0-207ca396566b,ebba727b-8155-4dd8-8ea0-207ca396566b,1,0,e4166141-f18f-4d27-beb5-9e30fe30f842,e4166141-f18f-4d27-beb5-9e30fe30f842,1,0,b62434ac-ef9f-4fe7-8279-357e0dd760ac,b62434ac-ef9f-4fe7-8279-357e0dd760ac,1,0,eb1c7d02-f5fc-4b37-9b32-7dd828958d76,eb1c7d02-f5fc-4b37-9b32-7dd828958d76,1,0,db2f20a7-e01f-4c03-9343-a815e1b46b50,db2f20a7-e01f-4c03-9343-a815e1b46b50,1,0,cf122ec9-d781-434c-9742-300e701317d6,cf122ec9-d781-434c-9742-300e701317d6,1,0,2aa2a968-2cac-4883-9bc8-5a3ccbd2e7a9,2aa2a968-2cac-4883-9bc8-5a3ccbd2e7a9,1,0,7d1361af-c5d3-4312-ab5e-ba00bf3418f2,7d1361af-c5d3-4312-ab5e-ba00bf3418f2,1,0,d7fdb3d5-3c18-4d9c-938a-2fbe8a96e877,d7fdb3d5-3c18-4d9c-938a-2fbe8a96e877,1,0,b8658e11-42b6-41bb-b384-5380e2228338,b8658e11-42b6-41bb-b384-5380e2228338,1,0,40c0919f-2c53-4502-af06-745dfa47fd8e,40c0919f-2c53-4502-af06-745dfa47fd8e,1,0,b01e4e7f-1b01-4c19-ab4b-7a8c1f6b0d22,b01e4e7f-1b01-4c19-ab4b-7a8c1f6b0d22,1,0,662a2803-da19-40c7-a906-e20d0843f67f,662a2803-da19-40c7-a906-e20d0843f67f,1,0,327c0731-1496-4463-837f-8f9c3e4c1a49,327c0731-1496-4463-837f-8f9c3e4c1a49,1,0,d74a37c2-7f50-40da-b7f8-29f79ae7230c,d74a37c2-7f50-40da-b7f8-29f79ae7230c,1,0,37a677e7-6661-41b5-ba68-740361168ccf,37a677e7-6661-41b5-ba68-740361168ccf,1,0,2a41d20d-d57a-4ce8-832f-c1b83099e563,2a41d20d-d57a-4ce8-832f-c1b83099e563,1,0,a0701ad3-572a-4806-91c0-6c5fff8dd350,a0701ad3-572a-4806-91c0-6c5fff8dd350,1,0,c9f268d1-6d2a-47d5-9371-f951b95d24a6,c9f268d1-6d2a-47d5-9371-f951b95d24a6,1,0,86b155be-d611-46b4-8275-bb19a2fa20ba,86b155be-d611-46b4-8275-bb19a2fa20ba,1,0,fedb2d36-bb2e-49dd-9d52-afcc41f3636b,fedb2d36-bb2e-49dd-9d52-afcc41f3636b,1,0,5d74d2d1-a2af-4a52-a884-a60e6b07ffac,5d74d2d1-a2af-4a52-a884-a60e6b07ffac,1,0,69e67507-e063-4221-9b84-2ee9d8903c1a,69e67507-e063-4221-9b84-2ee9d8903c1a,1,0,a649cb56-2a53-4508-8bf4-9aa01373ede2,a649cb56-2a53-4508-8bf4-9aa01373ede2,1,0,7e572d75-3a89-43c0-ad68-18498d67f8ca,7e572d75-3a89-43c0-ad68-18498d67f8ca,1,0,3c159a42-d9f9-4de4-a86f-893b1fc65b46,3c159a42-d9f9-4de4-a86f-893b1fc65b46,1,0,545cd0e7-4125-48f1-9123-0bc39e436e5e,545cd0e7-4125-48f1-9123-0bc39e436e5e,1,0,9a17eec6-b517-4133-8d25-bb953d84461f,9a17eec6-b517-4133-8d25-bb953d84461f,1,0,a0a61d7f-879d-4e92-98a3-5291c834c341,a0a61d7f-879d-4e92-98a3-5291c834c341,1,0,7bf60016-2edc-443b-98b4-0864b548c482,7bf60016-2edc-443b-98b4-0864b548c482,1,0,74139209-f345-4fd9-9ade-15cc4d399836,74139209-f345-4fd9-9ade-15cc4d399836,1,0,e39de1c5-b43b-4f71-aa32-c03b8afd6f65,e39de1c5-b43b-4f71-aa32-c03b8afd6f65,1,0,d5b6aad4-b1bd-464b-aca0-f8455d6388b4,d5b6aad4-b1bd-464b-aca0-f8455d6388b4,1,0,033ab408-fa51-4af2-a82c-f3167de00681,033ab408-fa51-4af2-a82c-f3167de00681,1,0,f7267120-f367-4d47-be5e-e2aa7a2ada46,f7267120-f367-4d47-be5e-e2aa7a2ada46,1,0,911b4ba4-1902-4c69-a4c9-963ab93d35b0,911b4ba4-1902-4c69-a4c9-963ab93d35b0,1,0,70cf60eb-a5f8-4573-a28b-6844721459de,70cf60eb-a5f8-4573-a28b-6844721459de,1,0,e2666bd9-bf44-408b-98fa-b9be26bde33f,e2666bd9-bf44-408b-98fa-b9be26bde33f,1,0,9151fa13-6612-4c4c-a264-3fd669205de7,9151fa13-6612-4c4c-a264-3fd669205de7,1,0,fee8fd9d-be7d-4560-9b96-819ffd497c88,fee8fd9d-be7d-4560-9b96-819ffd497c88,1,0,c86135b4-063c-4ca8-99e2-35c61026b43f,c86135b4-063c-4ca8-99e2-35c61026b43f,1,0,186792a9-0a07-4b6d-a9a0-337221f6b009,186792a9-0a07-4b6d-a9a0-337221f6b009,1,0,49163bf6-4a6a-4da9-a0ed-257c22224b47,49163bf6-4a6a-4da9-a0ed-257c22224b47,1,0,74c71abe-90eb-4c05-a4a6-375a93e7b99c,74c71abe-90eb-4c05-a4a6-375a93e7b99c,1,0,d36efd98-34a7-41b4-99b6-34c09e71525a,d36efd98-34a7-41b4-99b6-34c09e71525a,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,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,62f9fe19-3d64-4506-a0bc-dbfe47b4df64,62f9fe19-3d64-4506-a0bc-dbfe47b4df64,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,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,28dd22df-07cc-4e6d-89b2-b15a13f76615,28dd22df-07cc-4e6d-89b2-b15a13f76615,1,0,0c98b025-5adb-44dc-ab14-4c6517cc230b,0c98b025-5adb-44dc-ab14-4c6517cc230b,1,0,da2f09bd-109f-43aa-a90b-f033d17ed689,da2f09bd-109f-43aa-a90b-f033d17ed689,1,0,c4b3cb31-356e-4868-921c-f6710349def8,c4b3cb31-356e-4868-921c-f6710349def8,1,0,44526cb1-561d-4b87-a628-d79cc64ccdec,44526cb1-561d-4b87-a628-d79cc64ccdec,1,0,5e4dbba3-07df-4e30-be14-d9244f5ec21c,5e4dbba3-07df-4e30-be14-d9244f5ec21c,1,0,c8116351-4487-40f3-ae04-1e0741cc5df6,c8116351-4487-40f3-ae04-1e0741cc5df6,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,83c860a2-d0d7-4b7c-a127-78d86b155cfa,83c860a2-d0d7-4b7c-a127-78d86b155cfa,1,0,06e45039-8bc4-44dd-8a93-2cec34ad51ee,06e45039-8bc4-44dd-8a93-2cec34ad51ee,1,0,46e01647-cbdd-4387-affc-29b92ede8644,46e01647-cbdd-4387-affc-29b92ede8644,1,0,faa44953-118b-4027-a913-c485bca7a93f,faa44953-118b-4027-a913-c485bca7a93f,1,0,c9bd0dcd-98ec-4dc9-869a-e735fd269046,c9bd0dcd-98ec-4dc9-869a-e735fd269046,1,0,d039bfa4-39a0-43d4-ab6a-0697f9d2b375,d039bfa4-39a0-43d4-ab6a-0697f9d2b375,1,0,09072c75-75c7-4050-b674-9454558a1f87,09072c75-75c7-4050-b674-9454558a1f87,1,0,f0c8d2d2-d597-4f09-8257-0fa7524f1e44,f0c8d2d2-d597-4f09-8257-0fa7524f1e44,1,0,3e2f75ab-4143-48ca-83db-3006cb2a8584,3e2f75ab-4143-48ca-83db-3006cb2a8584,1,0,91a82492-5e27-46b6-b1a8-48e89a437715,91a82492-5e27-46b6-b1a8-48e89a437715,1,0,53bc7bfd-8786-464f-a615-ceae2971cbc9,53bc7bfd-8786-464f-a615-ceae2971cbc9,1,0,aa77817b-bd2f-4757-99b0-5e67a1b032d3,aa77817b-bd2f-4757-99b0-5e67a1b032d3,1,0,8cc27936-976d-4f31-91c6-644d15b69c55,8cc27936-976d-4f31-91c6-644d15b69c55,1,0,cf9de063-89f4-4632-b7a1-0cfbea6df643,cf9de063-89f4-4632-b7a1-0cfbea6df643,1,0,ee3bab2c-bd6a-4a33-89a2-78b4dd89bb88,ee3bab2c-bd6a-4a33-89a2-78b4dd89bb88,1,0,2478fb43-57a3-4348-b3d4-61f015e4e231,2478fb43-57a3-4348-b3d4-61f015e4e231,1,0,daa99b45-b2d2-47bc-9d7e-2d21b1a3dfd8,daa99b45-b2d2-47bc-9d7e-2d21b1a3dfd8,1,0,0449c160-01e5-4fe4-8759-5b93c484b467,0449c160-01e5-4fe4-8759-5b93c484b467,1,0,0684e4ba-28c7-4032-a43f-a3a4a37ec50b,0684e4ba-28c7-4032-a43f-a3a4a37ec50b,1,0,bcac012d-b4a9-49bb-9c54-722c741d183c,bcac012d-b4a9-49bb-9c54-722c741d183c,1,0,5370d079-975f-4f7c-95c3-7868147ecc76,5370d079-975f-4f7c-95c3-7868147ecc76,1,0,4dd66f76-e4e0-4f84-9fad-bb922cd51503,4dd66f76-e4e0-4f84-9fad-bb922cd51503,1,0,e76a411a-121b-4791-a785-dd54795eaa7f,e76a411a-121b-4791-a785-dd54795eaa7f,1,0,66844ae3-f098-462c-aef8-1fd38c403760,66844ae3-f098-462c-aef8-1fd38c403760,1,0,be96718a-223d-4597-bccf-2fb7d16dbbcc,be96718a-223d-4597-bccf-2fb7d16dbbcc,1,0,eb551461-ae0d-41dd-89fa-2f6e7f3c4840,eb551461-ae0d-41dd-89fa-2f6e7f3c4840,1,0,acec1961-a953-4f7b-b42b-baa1b8b3be14,acec1961-a953-4f7b-b42b-baa1b8b3be14,1,0,eb6394d4-1679-4494-8d23-419f5a714cdc,eb6394d4-1679-4494-8d23-419f5a714cdc,1,0,ffb3c2e4-bb9b-4d12-80bb-79e3c6d5700d,ffb3c2e4-bb9b-4d12-80bb-79e3c6d5700d,1,0,7e9fadd6-d0ad-4856-a195-1058f00bf488,7e9fadd6-d0ad-4856-a195-1058f00bf488,1,0,76d0c5ee-5b85-4670-ba1c-8fdaa7ba872a,76d0c5ee-5b85-4670-ba1c-8fdaa7ba872a,1,0,84f67d35-ca48-4fff-94e4-5f4beb7e3c08,84f67d35-ca48-4fff-94e4-5f4beb7e3c08,1,0,2972c142-0aac-4e36-b34e-4e73f18ba9cb,2972c142-0aac-4e36-b34e-4e73f18ba9cb,1,0,d6915227-4ede-4cd2-9e7c-d23dc409936e,d6915227-4ede-4cd2-9e7c-d23dc409936e,1,0,46c3341c-352c-43fb-b338-15c8ad487fbf,46c3341c-352c-43fb-b338-15c8ad487fbf,1,0,a2a8b35e-04e5-4176-8d3b-2cd4dfb6d653,a2a8b35e-04e5-4176-8d3b-2cd4dfb6d653,1,0,ea7ad7f5-e502-49a9-b4a6-e9adceb15057,ea7ad7f5-e502-49a9-b4a6-e9adceb15057,1,0,f9450d6a-849c-4621-b528-9cafc4819b44,f9450d6a-849c-4621-b528-9cafc4819b44,1,0,5b7cac99-2fca-4dbb-8d49-b84f310a2496,5b7cac99-2fca-4dbb-8d49-b84f310a2496,1,0,a4673d5c-9dae-48f7-9c91-53c1302a266a,a4673d5c-9dae-48f7-9c91-53c1302a266a,1,0,1a2a0dd2-b0dc-41e1-8c4f-f275f025bad2,1a2a0dd2-b0dc-41e1-8c4f-f275f025bad2,1,0,c255932e-fc34-402c-a6e9-2fda1ffbcdf2,c255932e-fc34-402c-a6e9-2fda1ffbcdf2,1,0,0d323d88-2823-493e-8c1e-b2b9f3dcdd3e,0d323d88-2823-493e-8c1e-b2b9f3dcdd3e,1,0,3f410b53-e762-41fe-9469-d538dfec3a9a,3f410b53-e762-41fe-9469-d538dfec3a9a,1,0,bb11c22e-0fbd-4985-be67-0866df7f7e61,bb11c22e-0fbd-4985-be67-0866df7f7e61,1,0,92ea60c0-1027-4337-9130-40028951f09b,92ea60c0-1027-4337-9130-40028951f09b,1,0,46710ce6-0f82-4c4c-91e8-f8ee726e00ce,46710ce6-0f82-4c4c-91e8-f8ee726e00ce,1,0,d64f18a4-ff93-4284-9eca-085109eafd24,d64f18a4-ff93-4284-9eca-085109eafd24,1,0,6381b8d2-7722-45c7-8800-19f6574d7d7a,6381b8d2-7722-45c7-8800-19f6574d7d7a,1,0,bf428e7a-2970-4bab-8c8e-35ea16151c0e,bf428e7a-2970-4bab-8c8e-35ea16151c0e,1,0,232dbd5f-b7f1-4463-946c-b8fbf93ac466,232dbd5f-b7f1-4463-946c-b8fbf93ac466,1,0,a1a74b34-4174-4769-8f03-bd4a32e83418,a1a74b34-4174-4769-8f03-bd4a32e83418,1,0,32fd1fe7-34d3-43ed-baba-16ccd43aa25a,32fd1fe7-34d3-43ed-baba-16ccd43aa25a,1,0,8f4d1259-abdc-4495-8e1e-8c8abcd336ca,8f4d1259-abdc-4495-8e1e-8c8abcd336ca,1,0,7086199b-20ec-4a74-a52f-71824134e8c5,7086199b-20ec-4a74-a52f-71824134e8c5,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,8e07a76d-db30-491c-b296-181c8e689382,8e07a76d-db30-491c-b296-181c8e689382,1,0,4f1752ae-42d0-477d-854b-de143c428a85,4f1752ae-42d0-477d-854b-de143c428a85,1,0,29674b66-c542-4a34-8caa-8e57a51bd190,29674b66-c542-4a34-8caa-8e57a51bd190,1,0,1a41acdd-3503-4c69-b93b-eb1cb6749712,1a41acdd-3503-4c69-b93b-eb1cb6749712,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,47714327-dd28-4e32-a1c9-20ee47d9afd0,47714327-dd28-4e32-a1c9-20ee47d9afd0,1,0,4d76ef7a-f1a6-4147-84f4-6e1717dfd77e,4d76ef7a-f1a6-4147-84f4-6e1717dfd77e,1,0,d1eb0aa7-b485-4f3a-846d-be069ca807c0,d1eb0aa7-b485-4f3a-846d-be069ca807c0,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,1d66cd80-fd61-4bf2-a7f9-34b33443e1ea,1d66cd80-fd61-4bf2-a7f9-34b33443e1ea,1,0,7b638691-416d-4484-81f4-e4c796a92818,7b638691-416d-4484-81f4-e4c796a92818,1,0,03ab92e2-81a3-4e38-84a8-85c1d78d51e9,03ab92e2-81a3-4e38-84a8-85c1d78d51e9,1,0,ef09e296-af08-44ff-8303-4833b23a12c3,ef09e296-af08-44ff-8303-4833b23a12c3,1,0,8984f28e-8c83-499a-838c-5f51410d7b0e,8984f28e-8c83-499a-838c-5f51410d7b0e,1,0,73bf8c40-76ee-4c61-b56a-898bcd6da1ca,73bf8c40-76ee-4c61-b56a-898bcd6da1ca,1,0,434a0471-1389-4764-a901-69249e1fdc38,434a0471-1389-4764-a901-69249e1fdc38,1,0,7b6c1d9f-968e-4126-990e-fa2787ad83b2,7b6c1d9f-968e-4126-990e-fa2787ad83b2,1,0,b89108a9-8b4e-4b34-8f72-4eb502963743,b89108a9-8b4e-4b34-8f72-4eb502963743,1,0,398b93b1-620d-4942-ba44-7ea0f9cc14f0,398b93b1-620d-4942-ba44-7ea0f9cc14f0,1,0,7b06537e-d818-41b3-acc5-b6b63b543be8,7b06537e-d818-41b3-acc5-b6b63b543be8,1,0,74226c30-5f9b-4e47-b7cc-35e92139cbfa,74226c30-5f9b-4e47-b7cc-35e92139cbfa,1,0,09f812cb-770c-4f85-87f0-db35952c764e,09f812cb-770c-4f85-87f0-db35952c764e,1,0,8bbbcfd9-b6da-41f6-b543-863b12b9fb59,8bbbcfd9-b6da-41f6-b543-863b12b9fb59,1,0,eb48f8a9-1644-432d-a8a8-e63bc013a2fe,eb48f8a9-1644-432d-a8a8-e63bc013a2fe,1,0,36951804-70a4-45fa-9fad-1c37fd3ce7b7,36951804-70a4-45fa-9fad-1c37fd3ce7b7,1,0,d0031774-fa35-469f-9f8a-3aaa920928a0,d0031774-fa35-469f-9f8a-3aaa920928a0,1,0,6da02618-2454-48fe-b1dc-399d0d40d043,6da02618-2454-48fe-b1dc-399d0d40d043,1,0,5a080203-ecd2-4f40-ac64-c8024eda595e,5a080203-ecd2-4f40-ac64-c8024eda595e,1,0,3eabcb69-398b-43f5-bf53-c20f90bee5c4,3eabcb69-398b-43f5-bf53-c20f90bee5c4,1,0,9c33639e-529a-490f-9365-80778b54c3f7,9c33639e-529a-490f-9365-80778b54c3f7,1,0,561b97a0-9d42-4735-a606-8d5b5862689f,561b97a0-9d42-4735-a606-8d5b5862689f,1,0,10d5c0c2-301f-4477-a88f-254f99a30fa0,10d5c0c2-301f-4477-a88f-254f99a30fa0,1,0,84ba4ba7-2743-438a-8b65-cc14090f8a92,84ba4ba7-2743-438a-8b65-cc14090f8a92,1,0,cdc4312c-b1af-407c-bfc3-28db04915aa6,cdc4312c-b1af-407c-bfc3-28db04915aa6,1,0,97b76ee8-c73f-456b-9008-b453bd376317,97b76ee8-c73f-456b-9008-b453bd376317,1,0,ee305e39-978b-4069-a4e6-05e761a5d6ae,ee305e39-978b-4069-a4e6-05e761a5d6ae,1,0,965650ae-8a6e-469a-869a-0ce821818058,965650ae-8a6e-469a-869a-0ce821818058,1,0,00fde8e2-3eb3-484a-a960-a390cbdaa16a,00fde8e2-3eb3-484a-a960-a390cbdaa16a,1,0,c7a82aa5-043c-46a2-9f5a-cba098ca36bd,c7a82aa5-043c-46a2-9f5a-cba098ca36bd,1,0,94744edd-61d0-4329-95d8-fc19dc7c6af1,94744edd-61d0-4329-95d8-fc19dc7c6af1,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,d9f76f2f-2b32-4986-8987-a585f831d951,d9f76f2f-2b32-4986-8987-a585f831d951,1,0,b1a96083-1c12-43f4-ba61-3a0588fc7310,b1a96083-1c12-43f4-ba61-3a0588fc7310,1,0,2e37c7d0-b97f-4c72-821e-b2bb77fb3140,2e37c7d0-b97f-4c72-821e-b2bb77fb3140,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,ee49981d-91f6-4002-9205-b8a53e6f54e0,ee49981d-91f6-4002-9205-b8a53e6f54e0,1,0,64a74365-ca32-4b7d-af8e-695624e3dcb6,64a74365-ca32-4b7d-af8e-695624e3dcb6,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,eaa11272-8cc2-4f82-808f-e4f641748574,eaa11272-8cc2-4f82-808f-e4f641748574,1,0,9dfd78a7-74ba-4c7a-8842-4baf4ffd5e4f,9dfd78a7-74ba-4c7a-8842-4baf4ffd5e4f,1,0,7d422da3-8ec4-4bc8-94ba-88d92625d4c7,7d422da3-8ec4-4bc8-94ba-88d92625d4c7,1,0,8035e1ce-a36a-4628-8196-1f04f50e230a,8035e1ce-a36a-4628-8196-1f04f50e230a,1,0,51f08b3c-2f03-408e-89d5-53ccbaec4e74,51f08b3c-2f03-408e-89d5-53ccbaec4e74,1,0,920ebc04-3018-4948-bae2-16de8f0f0c9a,920ebc04-3018-4948-bae2-16de8f0f0c9a,1,0,4c4fc449-05a5-4223-bd28-c73d27780a9b,4c4fc449-05a5-4223-bd28-c73d27780a9b,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,c6bf0d10-5406-44e8-b3f3-74b7db2b71e6,c6bf0d10-5406-44e8-b3f3-74b7db2b71e6,1,0,8d653af4-ac00-4ca9-a9e6-4e1a888c6dfb,8d653af4-ac00-4ca9-a9e6-4e1a888c6dfb,1,0,703453e8-cb49-491b-8e19-a17b89894d1e,703453e8-cb49-491b-8e19-a17b89894d1e,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,b5278cbd-1771-4739-9013-a28682689778,b5278cbd-1771-4739-9013-a28682689778,1,0,a52f2de4-f414-4837-9b1a-6d8f282e1327,a52f2de4-f414-4837-9b1a-6d8f282e1327,1,0,d126a11e-c770-4309-941f-cbcdd5cbad5d,d126a11e-c770-4309-941f-cbcdd5cbad5d,1,0,f4d88096-bff9-416a-8f75-9143ede1213f,f4d88096-bff9-416a-8f75-9143ede1213f,1,0,804be484-09cf-45a4-bd1f-c8850067e2b2,804be484-09cf-45a4-bd1f-c8850067e2b2,1,0,f1a145ce-a199-475c-ab8a-065c11a27277,f1a145ce-a199-475c-ab8a-065c11a27277,1,0,25c97480-330c-42f2-a2a5-031062a3a683,25c97480-330c-42f2-a2a5-031062a3a683,1,0,a2fb1bf9-d29a-4bfe-95f1-10883fa019b3,a2fb1bf9-d29a-4bfe-95f1-10883fa019b3,1,0,6adc3aa8-8784-467d-8e12-b60418a5c729,6adc3aa8-8784-467d-8e12-b60418a5c729,1,0,265206ed-4d41-497e-a483-c14052134500,265206ed-4d41-497e-a483-c14052134500,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,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,0b8c7a82-9865-4c5e-9bf1-ba6a7ef3a5d1,0b8c7a82-9865-4c5e-9bf1-ba6a7ef3a5d1,1,0,ea9fd5dd-b1de-41f8-87c2-ad3e8ee6b9bf,ea9fd5dd-b1de-41f8-87c2-ad3e8ee6b9bf,1,0,1bc24f0c-7299-4d7d-994c-0e89056f1178,1bc24f0c-7299-4d7d-994c-0e89056f1178,1,0,af958a75-241e-443a-8c1d-0c9240cca3a3,af958a75-241e-443a-8c1d-0c9240cca3a3,1,0,d65cce37-81a6-4f75-84e1-7e5b6340aa13,d65cce37-81a6-4f75-84e1-7e5b6340aa13,1,0,b60ddb04-f87c-4e16-aad0-f06d80dfbe14,b60ddb04-f87c-4e16-aad0-f06d80dfbe14,1,0,52ab6aea-e6a0-43f0-9cc8-f7c9126635cc,52ab6aea-e6a0-43f0-9cc8-f7c9126635cc,1,0,e983f539-e369-491e-9cee-510518187870,e983f539-e369-491e-9cee-510518187870,1,0,876b23bf-2f48-4916-ad0f-4de8306e1864,876b23bf-2f48-4916-ad0f-4de8306e1864,1,0,9a402a9c-a31f-4082-91d5-b4fe7576a5c2,9a402a9c-a31f-4082-91d5-b4fe7576a5c2,1,0,e7c63a25-c804-4bc4-a6f1-81009dd889e2,e7c63a25-c804-4bc4-a6f1-81009dd889e2,1,0,e99a1b17-0e37-489a-bc39-3dd2e23b0861,e99a1b17-0e37-489a-bc39-3dd2e23b0861,1,0,7ccd86cd-4294-4f6c-84f4-98e25e479f4d,7ccd86cd-4294-4f6c-84f4-98e25e479f4d,1,0,4c1576c4-b327-4ec1-87bc-662c5aba343b,4c1576c4-b327-4ec1-87bc-662c5aba343b,1,0,70e710c5-42df-465f-a9c5-8345c87e1f19,70e710c5-42df-465f-a9c5-8345c87e1f19,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,4de445f0-7c27-4540-a5a8-9c3ca2a13fd2,4de445f0-7c27-4540-a5a8-9c3ca2a13fd2,1,0,2977fedd-2c56-4d21-8eb1-a424e1b17cb3,2977fedd-2c56-4d21-8eb1-a424e1b17cb3,1,0,0b8a2936-07c5-4b90-80e6-5a058e546de6,0b8a2936-07c5-4b90-80e6-5a058e546de6,1,0,34524248-668e-48e5-a801-f489cd664de8,34524248-668e-48e5-a801-f489cd664de8,1,0,ae0891ae-ecd2-4072-8d2b-0556030c9dfd,ae0891ae-ecd2-4072-8d2b-0556030c9dfd,1,0,e8f36bca-738b-471c-b8d3-8a484978934a,e8f36bca-738b-471c-b8d3-8a484978934a,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,c8015ae6-31a7-49f4-a9e6-5d13774f64e5,c8015ae6-31a7-49f4-a9e6-5d13774f64e5,1,0,970430c4-37fc-476c-a3f6-5f6bebd2e663,970430c4-37fc-476c-a3f6-5f6bebd2e663,1,0,4cddde4a-42d5-44d0-a693-ea90eab9b169,4cddde4a-42d5-44d0-a693-ea90eab9b169,1,0,d9d612bb-6d04-4186-b243-f99aded0ba43,d9d612bb-6d04-4186-b243-f99aded0ba43,1,0,15db8b7b-59f5-4551-b2bd-b24801f056b5,15db8b7b-59f5-4551-b2bd-b24801f056b5,1,0,88d2236b-794b-485a-b075-f1a54cadcd3a,88d2236b-794b-485a-b075-f1a54cadcd3a,1,0,b7f9553f-6219-4401-a6f4-9debd47186d2,b7f9553f-6219-4401-a6f4-9debd47186d2,1,0,26a7e044-a583-40af-9daa-5aea628c8f19,26a7e044-a583-40af-9daa-5aea628c8f19,1,0,548717ca-0645-49b4-9580-c77cd4d03ebb,548717ca-0645-49b4-9580-c77cd4d03ebb,1,0,b451f2fc-ced2-418a-a803-4fe99488b394,b451f2fc-ced2-418a-a803-4fe99488b394,1,0,62269222-67a7-489e-ba59-4294902275bc,62269222-67a7-489e-ba59-4294902275bc,1,0,fed1b714-a2c9-42cf-9ced-35ed895e4167,fed1b714-a2c9-42cf-9ced-35ed895e4167,1,0,6f334263-10c8-4187-9a84-d2fd1afadc48,6f334263-10c8-4187-9a84-d2fd1afadc48,1,0,f5674a0d-a106-4cc0-a402-b378280eab3d,f5674a0d-a106-4cc0-a402-b378280eab3d,1,0,fa99302b-3e86-4330-b9ff-c38d933f81f0,fa99302b-3e86-4330-b9ff-c38d933f81f0,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,546ba3bb-4614-423f-954c-466530f42784,546ba3bb-4614-423f-954c-466530f42784,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,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,f53a3a46-edad-4cc0-8814-3755c2ea2c03,f53a3a46-edad-4cc0-8814-3755c2ea2c03,1,0,0a60b201-23f7-483b-ac16-5d270f32344e,0a60b201-23f7-483b-ac16-5d270f32344e,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,b67fb4f8-e895-4a8e-9230-31bc5cde4953,b67fb4f8-e895-4a8e-9230-31bc5cde4953,1,0,f3c9fde1-6d0e-4319-a798-ed8e330750de,f3c9fde1-6d0e-4319-a798-ed8e330750de,1,0,50d1bd75-3523-41c0-8da1-500731c0872b,50d1bd75-3523-41c0-8da1-500731c0872b,1,0,1a8d3872-6e19-4a49-b0ea-b120b6c09d7f,1a8d3872-6e19-4a49-b0ea-b120b6c09d7f,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,4e892154-3279-492c-9eae-124304225c5d,4e892154-3279-492c-9eae-124304225c5d,1,0,53a6ffa4-31f8-4717-9ecc-2852e6e4cce9,53a6ffa4-31f8-4717-9ecc-2852e6e4cce9,1,0,575a135a-6ffd-4ae8-a597-7e584df9bac4,575a135a-6ffd-4ae8-a597-7e584df9bac4,1,0,693a7196-f525-4bd2-a417-e902977f21cb,693a7196-f525-4bd2-a417-e902977f21cb,1,0,9bb39184-08b7-440e-a8f8-5caf0083ba0f,9bb39184-08b7-440e-a8f8-5caf0083ba0f,1,0,d48e817e-f6a4-47e5-a052-35d09e066490,d48e817e-f6a4-47e5-a052-35d09e066490,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,1f03420b-0480-451a-9263-8431ff0b0c73,1f03420b-0480-451a-9263-8431ff0b0c73,1,0,2bf547e4-d295-4f69-9dbf-9a9d91b2db98,2bf547e4-d295-4f69-9dbf-9a9d91b2db98,1,0,46506a80-495e-4f06-a191-54ccf5d6cc3f,46506a80-495e-4f06-a191-54ccf5d6cc3f,1,0,b9788ea3-b910-4b5b-96c3-921d62745b6e,b9788ea3-b910-4b5b-96c3-921d62745b6e,1,0,0646de72-49fd-466d-af0f-843bfa527049,0646de72-49fd-466d-af0f-843bfa527049,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,df750e63-50fc-4085-b8b8-f05e4751ff51,df750e63-50fc-4085-b8b8-f05e4751ff51,1,0,86182e9a-89e0-40d7-b2d7-fcd92ee42942,86182e9a-89e0-40d7-b2d7-fcd92ee42942,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,b69b611d-18d3-4e78-8a09-f010bcf9c261,b69b611d-18d3-4e78-8a09-f010bcf9c261,1,0,e8e087c1-9131-4037-8562-8bce8c38f78c,e8e087c1-9131-4037-8562-8bce8c38f78c,1,0,3b1c9126-9b9f-4658-967c-cc9ef5b1000f,3b1c9126-9b9f-4658-967c-cc9ef5b1000f,1,0,6adaef8e-82b6-4664-9748-4f41b170d91a,6adaef8e-82b6-4664-9748-4f41b170d91a,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,a27244c2-ac65-423f-afce-42efd288a83d,a27244c2-ac65-423f-afce-42efd288a83d,1,0,d4002184-8e08-4dcc-9070-62f595e82e23,d4002184-8e08-4dcc-9070-62f595e82e23,1,0,62163fda-1a09-4d4f-b290-76ff324042ab,62163fda-1a09-4d4f-b290-76ff324042ab,1,0,f2816dd2-47dd-41e8-9709-6dac1e4f4d21,f2816dd2-47dd-41e8-9709-6dac1e4f4d21,1,0,6e6a1557-06fa-45c0-ad98-c43809553cd7,6e6a1557-06fa-45c0-ad98-c43809553cd7,1,0,179f7436-e328-42b8-9382-19ee6f10c768,179f7436-e328-42b8-9382-19ee6f10c768,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,3d140a17-40b4-46a7-a846-78f2f77d49f2,3d140a17-40b4-46a7-a846-78f2f77d49f2,1,0,965646a5-5e5b-49cd-864a-c3870844cfdb,965646a5-5e5b-49cd-864a-c3870844cfdb,1,0,27c88cf7-c0ed-44af-bb70-f14269ce1e87,27c88cf7-c0ed-44af-bb70-f14269ce1e87,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,aec7df6a-21a1-495d-b0a9-3769e1069888,aec7df6a-21a1-495d-b0a9-3769e1069888,1,0,463b98bf-b4d4-4edb-995d-0a75ff29b60d,463b98bf-b4d4-4edb-995d-0a75ff29b60d,1,0,317f88a7-12a4-4d21-b637-3050525406f4,317f88a7-12a4-4d21-b637-3050525406f4,1,0,2d9d2319-68fb-436d-b431-98858b88a75a,2d9d2319-68fb-436d-b431-98858b88a75a,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,2bb5c23c-ad87-4b66-b766-d2e3f82715bd,2bb5c23c-ad87-4b66-b766-d2e3f82715bd,1,0,d01871bb-492e-4ab8-ada9-e9d8ec1adbce,d01871bb-492e-4ab8-ada9-e9d8ec1adbce,1,0,dd931c85-8c19-42a8-a39e-7af0c5bd346c,dd931c85-8c19-42a8-a39e-7af0c5bd346c,1,0,4fa153eb-1efb-43e5-ac09-e5431d4800df,4fa153eb-1efb-43e5-ac09-e5431d4800df,1,0,ada760f3-6a9f-4b81-afc1-98eb164af747,ada760f3-6a9f-4b81-afc1-98eb164af747,1,0,262dea64-4ccd-4b97-ac7e-ec1dbdd9ac98,262dea64-4ccd-4b97-ac7e-ec1dbdd9ac98,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,a8e14d2e-911d-4096-9027-deb7a08838e0,a8e14d2e-911d-4096-9027-deb7a08838e0,1,0,c51d8ae2-66fe-4052-8ee4-980855b1f90c,c51d8ae2-66fe-4052-8ee4-980855b1f90c,1,0,27610803-846f-40bd-b817-f73708f1fdb7,27610803-846f-40bd-b817-f73708f1fdb7,1,0,4e2a3873-0317-44be-8dbb-e4cefc0361a8,4e2a3873-0317-44be-8dbb-e4cefc0361a8,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,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,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,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,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,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,1fc05949-c1ba-4363-8353-6902bc041021,1fc05949-c1ba-4363-8353-6902bc041021,1,0,d6e61d59-fe83-4a9e-aa15-e072a39fd8fd,d6e61d59-fe83-4a9e-aa15-e072a39fd8fd,1,0,614fc08c-78b6-4d49-9488-05fcf9b76d58,614fc08c-78b6-4d49-9488-05fcf9b76d58,1,0,d983cae8-edbb-4f26-9c0a-2f701cb11046,d983cae8-edbb-4f26-9c0a-2f701cb11046,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,2902460a-ed86-41cf-8e8f-895adab9a72f,2902460a-ed86-41cf-8e8f-895adab9a72f,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,79ad09ba-875a-46bd-9cd9-9d084bf4f6ea,79ad09ba-875a-46bd-9cd9-9d084bf4f6ea,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,14077038-2e41-4a05-a476-99f6f88a5c29,14077038-2e41-4a05-a476-99f6f88a5c29,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,8f51328b-73a8-46fb-b6db-7b7a84c05c2a,8f51328b-73a8-46fb-b6db-7b7a84c05c2a,1,0,0f0f5b42-2407-44e6-85d7-26ace96b2cd9,0f0f5b42-2407-44e6-85d7-26ace96b2cd9,1,0,ffec426d-2556-46d6-b313-aeca43581865,ffec426d-2556-46d6-b313-aeca43581865,1,0,f32e0941-2061-4e12-bdae-fcb65f91ac28,f32e0941-2061-4e12-bdae-fcb65f91ac28,1,0,6f0e0f44-db5a-4a13-9131-866b77b90f14,6f0e0f44-db5a-4a13-9131-866b77b90f14,1,0,9415e0aa-391f-4798-ad7d-3b854a756de8,9415e0aa-391f-4798-ad7d-3b854a756de8,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,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,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/Configuration/Splash.png b/SSL/src/Configuration/Splash.png index 93fec8664..cdd67c2ce 100644 Binary files a/SSL/src/Configuration/Splash.png and b/SSL/src/Configuration/Splash.png differ diff --git a/SSL/src/Constants/ДополнительныйЯзык1/ДополнительныйЯзык1.mdo b/SSL/src/Constants/ДополнительныйЯзык1/ДополнительныйЯзык1.mdo new file mode 100644 index 000000000..75beaf227 --- /dev/null +++ b/SSL/src/Constants/ДополнительныйЯзык1/ДополнительныйЯзык1.mdo @@ -0,0 +1,23 @@ + + + + + + + + ДополнительныйЯзык1 + + ru + Дополнительный язык1 + + + String + + 10 + + + true + + + Managed + diff --git a/SSL/src/Constants/ДополнительныйЯзык2/ДополнительныйЯзык2.mdo b/SSL/src/Constants/ДополнительныйЯзык2/ДополнительныйЯзык2.mdo new file mode 100644 index 000000000..35e718ba7 --- /dev/null +++ b/SSL/src/Constants/ДополнительныйЯзык2/ДополнительныйЯзык2.mdo @@ -0,0 +1,23 @@ + + + + + + + + ДополнительныйЯзык2 + + ru + Дополнительный язык2 + + + String + + 10 + + + true + + + Managed + diff --git a/SSL/src/Constants/ИспользоватьДополнительныеРеквизитыИСведения/ValueManagerModule.bsl b/SSL/src/Constants/ИспользоватьДополнительныеРеквизитыИСведения/ValueManagerModule.bsl index 944c18e44..5f19cb64f 100644 --- a/SSL/src/Constants/ИспользоватьДополнительныеРеквизитыИСведения/ValueManagerModule.bsl +++ b/SSL/src/Constants/ИспользоватьДополнительныеРеквизитыИСведения/ValueManagerModule.bsl @@ -37,11 +37,6 @@ МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); МодульУправлениеДоступом.ОбновитьРазрешенныеЗначенияПриИзмененииИспользованияВидовДоступа(); КонецЕсли; - - Если Значение = Ложь Тогда - Константы.ИспользоватьОбщиеДополнительныеЗначения.Установить(Ложь); - Константы.ИспользоватьОбщиеДополнительныеРеквизитыИСведения.Установить(Ложь); - КонецЕсли; КонецЕсли; КонецПроцедуры diff --git a/SSL/src/Constants/ИспользоватьДополнительныйЯзык1/ИспользоватьДополнительныйЯзык1.mdo b/SSL/src/Constants/ИспользоватьДополнительныйЯзык1/ИспользоватьДополнительныйЯзык1.mdo new file mode 100644 index 000000000..6ab9eba12 --- /dev/null +++ b/SSL/src/Constants/ИспользоватьДополнительныйЯзык1/ИспользоватьДополнительныйЯзык1.mdo @@ -0,0 +1,20 @@ + + + + + + + + ИспользоватьДополнительныйЯзык1 + + ru + Использовать дополнительный язык1 + + + Boolean + + true + + + Managed + diff --git a/SSL/src/Constants/ИспользоватьДополнительныйЯзык2/ИспользоватьДополнительныйЯзык2.mdo b/SSL/src/Constants/ИспользоватьДополнительныйЯзык2/ИспользоватьДополнительныйЯзык2.mdo new file mode 100644 index 000000000..316c3849e --- /dev/null +++ b/SSL/src/Constants/ИспользоватьДополнительныйЯзык2/ИспользоватьДополнительныйЯзык2.mdo @@ -0,0 +1,20 @@ + + + + + + + + ИспользоватьДополнительныйЯзык2 + + ru + Использовать дополнительный язык2 + + + Boolean + + true + + + Managed + diff --git a/SSL/src/Constants/ИспользоватьОбщиеДополнительныеЗначения/ИспользоватьОбщиеДополнительныеЗначения.mdo b/SSL/src/Constants/ИспользоватьОбщиеДополнительныеЗначения/ИспользоватьОбщиеДополнительныеЗначения.mdo deleted file mode 100644 index fed6f3131..000000000 --- a/SSL/src/Constants/ИспользоватьОбщиеДополнительныеЗначения/ИспользоватьОбщиеДополнительныеЗначения.mdo +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - ИспользоватьОбщиеДополнительныеЗначения - - ru - Использовать общие дополнительные значения - - - Boolean - - - ru - Разрешить добавление свойств, у которых общий список значений с другими свойствами (команда Добавить - По образцу). - - - - Managed - diff --git a/SSL/src/Constants/ИспользоватьОбщиеДополнительныеРеквизитыИСведения/ИспользоватьОбщиеДополнительныеРеквизитыИСведения.mdo b/SSL/src/Constants/ИспользоватьОбщиеДополнительныеРеквизитыИСведения/ИспользоватьОбщиеДополнительныеРеквизитыИСведения.mdo deleted file mode 100644 index 43b373958..000000000 --- a/SSL/src/Constants/ИспользоватьОбщиеДополнительныеРеквизитыИСведения/ИспользоватьОбщиеДополнительныеРеквизитыИСведения.mdo +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - ИспользоватьОбщиеДополнительныеРеквизитыИСведения - - ru - Использовать общие дополнительные реквизиты и сведения - - - Boolean - - - ru - Разрешить добавление свойств сразу к нескольким объектам программы одновременно (команда Добавить - Общий). - - - - Managed - diff --git a/SSL/src/Constants/ИспользоватьПрофилиБезопасностиДляДОиО/ИспользоватьПрофилиБезопасностиДляДОиО.mdo b/SSL/src/Constants/ИспользоватьПрофилиБезопасностиДляДОО/ИспользоватьПрофилиБезопасностиДляДОО.mdo similarity index 90% rename from SSL/src/Constants/ИспользоватьПрофилиБезопасностиДляДОиО/ИспользоватьПрофилиБезопасностиДляДОиО.mdo rename to SSL/src/Constants/ИспользоватьПрофилиБезопасностиДляДОО/ИспользоватьПрофилиБезопасностиДляДОО.mdo index deab0029c..56710c0cd 100644 --- a/SSL/src/Constants/ИспользоватьПрофилиБезопасностиДляДОиО/ИспользоватьПрофилиБезопасностиДляДОиО.mdo +++ b/SSL/src/Constants/ИспользоватьПрофилиБезопасностиДляДОО/ИспользоватьПрофилиБезопасностиДляДОО.mdo @@ -5,11 +5,12 @@ - ИспользоватьПрофилиБезопасностиДляДОиО + ИспользоватьПрофилиБезопасностиДляДОО ru Использовать профили безопасности для дополнительных отчетов и обработок + АПК:58 в имени используется сокращение Boolean diff --git a/SSL/src/Constants/ОсновнойЯзык/ОсновнойЯзык.mdo b/SSL/src/Constants/ОсновнойЯзык/ОсновнойЯзык.mdo new file mode 100644 index 000000000..a585f6f1c --- /dev/null +++ b/SSL/src/Constants/ОсновнойЯзык/ОсновнойЯзык.mdo @@ -0,0 +1,23 @@ + + + + + + + + ОсновнойЯзык + + ru + Основной язык + + + String + + 10 + + + true + + + Managed + diff --git a/SSL/src/Constants/ПараметрыХраненияФайловВИБ/ПараметрыХраненияФайловВИБ.mdo b/SSL/src/Constants/ПараметрыХраненияФайловВИБ/ПараметрыХраненияФайловВИБ.mdo new file mode 100644 index 000000000..c4a2252f0 --- /dev/null +++ b/SSL/src/Constants/ПараметрыХраненияФайловВИБ/ПараметрыХраненияФайловВИБ.mdo @@ -0,0 +1,21 @@ + + + + + + + + ПараметрыХраненияФайловВИБ + + ru + Параметры хранения файлов в ИБ + + Параметры: "РасширенияФайлов", "МаксимальныйРазмер" + + ValueStorage + + true + + + Managed + diff --git a/SSL/src/Constants/РазрешитьВыполнениеДОИОРегламентнымиЗаданиямиВМоделиСервиса/РазрешитьВыполнениеДОИОРегламентнымиЗаданиямиВМоделиСервиса.mdo b/SSL/src/Constants/РазрешитьВыполнениеДООРегламентнымиЗаданиямиВМоделиСервиса/РазрешитьВыполнениеДООРегламентнымиЗаданиямиВМоделиСервиса.mdo similarity index 83% rename from SSL/src/Constants/РазрешитьВыполнениеДОИОРегламентнымиЗаданиямиВМоделиСервиса/РазрешитьВыполнениеДОИОРегламентнымиЗаданиямиВМоделиСервиса.mdo rename to SSL/src/Constants/РазрешитьВыполнениеДООРегламентнымиЗаданиямиВМоделиСервиса/РазрешитьВыполнениеДООРегламентнымиЗаданиямиВМоделиСервиса.mdo index 44a19911c..a67442615 100644 --- a/SSL/src/Constants/РазрешитьВыполнениеДОИОРегламентнымиЗаданиямиВМоделиСервиса/РазрешитьВыполнениеДОИОРегламентнымиЗаданиямиВМоделиСервиса.mdo +++ b/SSL/src/Constants/РазрешитьВыполнениеДООРегламентнымиЗаданиямиВМоделиСервиса/РазрешитьВыполнениеДООРегламентнымиЗаданиямиВМоделиСервиса.mdo @@ -5,11 +5,12 @@ - РазрешитьВыполнениеДОИОРегламентнымиЗаданиямиВМоделиСервиса + РазрешитьВыполнениеДООРегламентнымиЗаданиямиВМоделиСервиса ru Разрешить выполнение дополнительных отчетов и обработок регламентными заданиями в модели сервиса + АПК:58 в имени используется сокращение Boolean diff --git a/SSL/src/Constants/СоздаватьПодкаталогиСИменамиВладельцев/СоздаватьПодкаталогиСИменамиВладельцев.mdo b/SSL/src/Constants/СоздаватьПодкаталогиСИменамиВладельцев/СоздаватьПодкаталогиСИменамиВладельцев.mdo new file mode 100644 index 000000000..1291a0056 --- /dev/null +++ b/SSL/src/Constants/СоздаватьПодкаталогиСИменамиВладельцев/СоздаватьПодкаталогиСИменамиВладельцев.mdo @@ -0,0 +1,24 @@ + + + + + + + + СоздаватьПодкаталогиСИменамиВладельцев + + ru + Создавать подкаталоги с именами владельцев + + + Boolean + + true + + ru + Файлы в томах размещаются в подкаталогах с именами справочников (документов и т.д.), к которым присоединены файлы. Например, для точной настройки правил резервного копирования файлов в томах. + + + + Managed + diff --git a/SSL/src/Constants/СпособХраненияФайлов/СпособХраненияФайлов.mdo b/SSL/src/Constants/СпособХраненияФайлов/СпособХраненияФайлов.mdo new file mode 100644 index 000000000..c572198f0 --- /dev/null +++ b/SSL/src/Constants/СпособХраненияФайлов/СпособХраненияФайлов.mdo @@ -0,0 +1,25 @@ + + + + + + + + СпособХраненияФайлов + + ru + Способ хранения файлов + + Способы хранения: "ВИнформационнойБазе", "ВТомахНаДиске", "ВИнформационнойБазеИТомахНаДиске" + + String + + 50 + + + true + + + ShowError + Managed + diff --git a/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстов/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстов/Forms/Форма/Module.bsl index eacd78f84..efeb36119 100644 --- a/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстов/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстов/Forms/Форма/Module.bsl @@ -106,7 +106,7 @@ ИзвлечениеТекстовКлиент(РазмерПорции); ПоказатьПредупреждение(, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru='Завершено извлечение текста из + НСтр("ru = 'Завершено извлечение текста из |всех файлов с неизвлеченным текстом. | |Обработано файлов: %1.'"), diff --git a/SSL/src/DataProcessors/АктивныеПользователи/Forms/АктивныеПользователи/Module.bsl b/SSL/src/DataProcessors/АктивныеПользователи/Forms/АктивныеПользователи/Module.bsl index a5c3b7f7f..6e2d3bb89 100644 --- a/SSL/src/DataProcessors/АктивныеПользователи/Forms/АктивныеПользователи/Module.bsl +++ b/SSL/src/DataProcessors/АктивныеПользователи/Forms/АктивныеПользователи/Module.bsl @@ -212,7 +212,7 @@ ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; ОтборЭлемента.ПравоеЗначение = 0; - Элемент.Оформление.УстановитьЗначениеПараметра("Шрифт", Новый Шрифт(,, Истина)); + Элемент.Оформление.УстановитьЗначениеПараметра("Шрифт", ШрифтыСтиля.ОсновнойЭлементСписка); КонецПроцедуры diff --git a/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/БлокировкаСоединенийСИнформационнойБазой/Module.bsl b/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/БлокировкаСоединенийСИнформационнойБазой/Module.bsl index e005ffb95..f7d5f6d35 100644 --- a/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/БлокировкаСоединенийСИнформационнойБазой/Module.bsl +++ b/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/БлокировкаСоединенийСИнформационнойБазой/Module.bsl @@ -382,9 +382,9 @@ Элементы.КомандаПрименить.КнопкаПоУмолчанию = Истина; Элементы.КомандаОстановить.Видимость = Ложь; Элементы.КомандаПрименить.Заголовок = ?(Объект.ЗапретитьРаботуПользователей, - НСтр("ru='Снять блокировку'"), НСтр("ru='Установить блокировку'")); + НСтр("ru = 'Снять блокировку'"), НСтр("ru = 'Установить блокировку'")); Элементы.ЗапретитьРаботуРегламентныхЗаданий.Заголовок = ?(Объект.ЗапретитьРаботуРегламентныхЗаданий, - НСтр("ru='Оставить блокировку работы регламентных заданий'"), НСтр("ru='Также запретить работу регламентных заданий'")); + НСтр("ru = 'Оставить блокировку работы регламентных заданий'"), НСтр("ru = 'Также запретить работу регламентных заданий'")); КонецПроцедуры @@ -404,12 +404,12 @@ Если Форма.КоличествоСеансов = 0 Тогда - ТекстСостояния = НСтр("ru='Ожидается установка блокировки... + ТекстСостояния = НСтр("ru = 'Ожидается установка блокировки... |Работа пользователей в программе будет запрещена в указанное время'"); Иначе - ТекстСостояния = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='Пожалуйста, подождите... + ТекстСостояния = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Пожалуйста, подождите... |Работа пользователей завершается. Осталось активных сеансов: %1'"), Форма.КоличествоСеансов); diff --git a/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/ОшибкаУстановкиМонопольногоРежима/Module.bsl b/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/ОшибкаУстановкиМонопольногоРежима/Module.bsl index 751e49203..b72cef503 100644 --- a/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/ОшибкаУстановкиМонопольногоРежима/Module.bsl +++ b/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/ОшибкаУстановкиМонопольногоРежима/Module.bsl @@ -55,6 +55,7 @@ ОткрытьФорму("Обработка.АктивныеПользователи.Форма.АктивныеПользователи", , , , , , ОписаниеОповещения, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + ПроверитьМонопольныйРежимНаСервере(); КонецПроцедуры @@ -65,6 +66,7 @@ ОткрытьФорму("Обработка.АктивныеПользователи.Форма.АктивныеПользователи" , , , , , , ОписаниеОповещения, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + ПроверитьМонопольныйРежимНаСервере(); КонецПроцедуры @@ -127,17 +129,30 @@ Процедура ОбновитьКоличествоАктивныхСеансов(Форма) Если Форма.КоличествоАктивныхСеансов > 0 Тогда - Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Активные пользователи (%1)'"), + ТекстГиперссылки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Активные пользователи (%1)'"), Форма.КоличествоАктивныхСеансов); Иначе - Текст = НСтр("ru = 'Активные пользователи'"); + ТекстГиперссылки = НСтр("ru = 'Активные пользователи'"); КонецЕсли; - Форма.Элементы.АктивныеПользователи.Заголовок = Текст; - Форма.Элементы.АктивныеПользователиОжидание.Заголовок = Текст; + Форма.Элементы.АктивныеПользователи.Заголовок = ТекстГиперссылки; + Форма.Элементы.АктивныеПользователиОжидание.Заголовок = ТекстГиперссылки; Форма.Элементы.АктивныеПользователи.РасширеннаяПодсказка.Заголовок = Форма.ОшибкаУстановкиМонопольногоРежима; Форма.Элементы.АктивныеПользователиОжидание.РасширеннаяПодсказка.Заголовок = Форма.ОшибкаУстановкиМонопольногоРежима; + Если Форма.КоличествоАктивныхСеансов = 0 И ПустаяСтрока(Форма.ОшибкаУстановкиМонопольногоРежима) Тогда + Форма.Элементы.ТекстСообщенияОбОшибке.Заголовок = НСтр("ru = 'Другие пользователи уже завершили свою работу:'"); + Форма.Элементы.ПояснениеПоОшибке.Заголовок = НСтр("ru = 'Для продолжения нажмите Повторить.'"); + Иначе + Если Форма.УдалениеПомеченныхОбъектов Тогда + ТекстСообщенияОбОшибке = НСтр("ru = 'Невозможно выполнить удаление помеченных объектов, т.к. не удалось завершить работу пользователей:'"); + Иначе + ТекстСообщенияОбОшибке = НСтр("ru = 'Невозможно выполнить обновление версии программы, т.к. не удалось завершить работу пользователей:'"); + КонецЕсли; + Форма.Элементы.ТекстСообщенияОбОшибке.Заголовок = ТекстСообщенияОбОшибке; + Форма.Элементы.ПояснениеПоОшибке.Заголовок = НСтр("ru = 'Для продолжения необходимо завершить их работу.'"); + КонецЕсли; + КонецПроцедуры &НаСервере @@ -182,11 +197,7 @@ ОтменитьБлокировкуФайловойБазы(); Элементы.ГруппаСтраницы.ТекущаяСтраница = Элементы.Информация; - Если УдалениеПомеченныхОбъектов Тогда - Элементы.ТекстСообщенияОбОшибке.Заголовок = НСтр("ru = 'Невозможно выполнить удаление помеченных объектов, т.к. не удалось завершить работу пользователей:'"); - Иначе - Элементы.ТекстСообщенияОбОшибке.Заголовок = НСтр("ru = 'Невозможно выполнить обновление версии программы, т.к. не удалось завершить работу пользователей:'"); - КонецЕсли; + ОбновитьКоличествоАктивныхСеансов(ЭтотОбъект); Элементы.ФормаПовторитьЗапускПрограммы.Видимость = Истина; Элементы.ФормаЗавершитьСеансыИПерезапуститьПрограмму.Видимость = Истина; ОтключитьОбработчикОжидания("ОжидатьЗавершенияРаботыПользователей"); diff --git a/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Help/ru.html b/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Help/ru.html index 5010796ec..fdc19baa0 100644 --- a/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Help/ru.html +++ b/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Help/ru.html @@ -10,23 +10,33 @@
    При установке блокировки необходимо задать следующие параметры:
    • Сообщение для пользователей - напишите текст сообщения, выдаваемого пользователям в качестве предупреждения о планируемой блокировке соединений. Укажите, когда необходимо выйти из программы, опишите причину и ожидаемый период блокировки: Например: "Просьба завершить свою работу в программе до 20:00 в связи с проведением профилактических работ. База будет недоступна примерно 30 минут". 
      -
    • Сроки блокировки (дата и время начала, дата и время окончания). Окончание срока блокировки может не заполняться, в этом случае войти в программу будет невозможно до снятия блокировки администратором. -
    • Код для разблокировки - произвольная строка, используя которую в качестве параметра запуска "/UC" в дальнейшем можно будет войти в программу, несмотря на установленную блокировку. -
    • Включить возможность управления блокировкой регламентных заданий - нажмите на ссылку, для того чтобы в клиент-серверном варианте программы запретить запуск регламентных заданий на время действия блокировки. В большинстве случаев рекомендуется использовать эту возможность.
  • +
  • +
  • Сроки блокировки (дата и время начала, дата и время окончания). Окончание срока блокировки может не заполняться, в этом случае войти в программу будет невозможно до снятия блокировки администратором. +
  • +
  • Код для разблокировки - произвольная строка, используя которую в качестве параметра запуска "/UC" в дальнейшем можно будет войти в программу, несмотря на установленную блокировку. +
  • +
  • Включить возможность управления блокировкой регламентных заданий - нажмите на ссылку, для того чтобы в клиент-серверном варианте программы запретить запуск регламентных заданий на время действия блокировки. В большинстве случаев рекомендуется использовать эту возможность.
  • +
  • Для того чтобы заблокировать работу пользователей, нажмите Установить блокировку. Предварительно программа запрашивает подтверждение администратора. Для подтверждения нажмите ОК.
    -
  • +
  • +
  • До начала срока блокировки во время подготовительных работ к завершению работы пользователей можно нажать Остановить и отменить блокировку.
  • Действия по завершению работы в клиентском приложении

    Снятие блокировки работы пользователей

    • Блокировка работы пользователей после наступления указанного администратором срока снимается автоматически.
      -
    • +
    • +
    • Для снятия блокировки до истечения срока можно применить следующие способы:
      • Не завершая работу в программе, после окончания запланированных работ до окончания срока блокировки нажать Блокировка работы пользователей раздела Администрирование - Поддержка и обслуживание, открыть это окно, нажать Снять блокировку;
        -
      • +
      • +
      • Войти в программу и снять блокировку для всех пользователей, используя указанные в предупреждении параметры запуска"/С РазрешитьРаботуПользователей" и "/UC" с кодом разрешения доступа, который был указан при установке блокировки;
        • -
          Примечание: запуск клиентского приложения с параметром РазрешитьРаботуПользователей предназначен только для снятия блокировки и не предназначен для работы с программой.
      • +
        Примечание: запуск клиентского приложения с параметром РазрешитьРаботуПользователей предназначен только для снятия блокировки и не предназначен для работы с программой.
    • +
    • Войти в программу, не снимая блокировки, и снять блокировку после проведения запланированных работ:
      • для входа в программу использовать указанные в сообщении параметры запуска, но без параметра "/С".
        -
      • +
      • +
      • В параметре "/UC" написать код разрешения доступа, который был указан при установке блокировки.
        -
      • +
      • +
      • после проведения запланированных работ до окончания срока блокировки выбрать команду Блокировка работы пользователей в разделе Администрирование - Поддержка и обслуживание, нажать кнопку Снять блокировку.

    Использование параметров запуска программы

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

    • В строке для запуска программы можно использовать следующие параметры:
      • В параметре /F укажите путь к базе ("C:\Documents and Settings\....\1C\DemoSSL"
        -
      • +
      • +
      • В параметре /N укажите имя пользователя
        -
      • +
      • +
      • В параметре /P укажите пароль
        -
      • +
      • +
      • В параметре /C указываются параметры-команды, например, РазрешитьРаботуПользователей.
        -
      • -
        В параметре /UC укажите код доступа, который был задан при блокировке работы пользователей.
    • +
    • +
    • +
      В параметре /UC укажите код доступа, который был задан при блокировке работы пользователей.
    +
  • Для установки блокировки также можно использовать запуск программы с параметром ЗавершитьРаботуПользователей:
    • -
      "C:\Program Files\1cv8\bin\1cv8.exe" ENTERPRISE /F"C:\Documents and Settings\Админ\Мои документы\1C\DemoSSL" /NAdministrator /Pххххх /CЗавершитьРаботуПользователей
  • +
    "C:\Program Files\1cv8\bin\1cv8.exe" ENTERPRISE /F"C:\Documents and Settings\Админ\Мои документы\1C\DemoSSL" /N<имя администратора> /P<пароль> /CЗавершитьРаботуПользователей
  • +
  • Для снятия блокировки рекомендуется использовать запуск программы с параметром РазрешитьРаботуПользователей.
    • "C:\Program Files\1cv8\bin\1cv8.exe" ENTERPRISE \F"C:\Documents and Settings\Админ\Мои документы\1C\DemoSSL" /CРазрешитьРаботуПользователей /UC <код разрешения>
      -
    • +
    • +
    • Запуск клиентского приложения с параметром РазрешитьРаботуПользователей предназначен только для снятия блокировки и не предназначен для работы с программой, т.е. этот параметр предназначен для выполнения в пакетном режиме - работа клиентского приложения, запущенного с этим параметром, будет завершена сразу после запуска.
  • Дополнительные возможности и ограничения

    • В клиент-серверном варианте работы также есть возможность заблокировать выполнение регламентных и фоновых заданий. Для этого может потребоваться ввести дополнительные параметры для подключения к кластеру серверов по команде Параметры администрирования программы. Кроме того, для выполнения действий установки и снятия блокировки работы пользователей также можно использовать утилиту администрирования кластера серверов 1С:Предприятия. 
      -
    • +
    • +
    • В клиент-серверном режиме работы не гарантируется завершение всех регламентных и фоновых заданий (когда, в редких случаях, они не могут быть завершены принудительно).
      -
    • +
    • +
    • В файловом режиме работы блокировка соединений не может быть установлена, если с базой в данный момент времени работают через COM (внешнее соединение), веб-сервисы или открыт Конфигуратор.
    \ No newline at end of file diff --git a/SSL/src/DataProcessors/БлокировкаРаботыПользователей/БлокировкаРаботыПользователей.mdo b/SSL/src/DataProcessors/БлокировкаРаботыПользователей/БлокировкаРаботыПользователей.mdo index a6957a656..a4f68e551 100644 --- a/SSL/src/DataProcessors/БлокировкаРаботыПользователей/БлокировкаРаботыПользователей.mdo +++ b/SSL/src/DataProcessors/БлокировкаРаботыПользователей/БлокировкаРаботыПользователей.mdo @@ -61,7 +61,7 @@ ru - Код разрешения, позволяющий администратору войти в заблокированную базу. + Код разрешения, позволяющий администратору войти в заблокированную программу. diff --git a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводАдресаВСвободнойФорме/Form.form b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводАдресаВСвободнойФорме/Form.form index 6ad169647..d315dbb4b 100644 --- a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводАдресаВСвободнойФорме/Form.form +++ b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводАдресаВСвободнойФорме/Form.form @@ -444,7 +444,7 @@ 366 <key>ru</key> - <value>действует по настоящие время.</value> + <value>действует по настоящее время.</value> true true diff --git a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводАдресаВСвободнойФорме/Module.bsl b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводАдресаВСвободнойФорме/Module.bsl index 021c5d699..92a55916f 100644 --- a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводАдресаВСвободнойФорме/Module.bsl +++ b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводАдресаВСвободнойФорме/Module.bsl @@ -83,8 +83,6 @@ ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстПредупрежденияПриОткрытии,, ПолеПредупрежденияПриОткрытии); КонецЕсли; - ОтобразитьПоляПоТипуАдреса(); - КонецПроцедуры &НаКлиенте @@ -161,7 +159,7 @@ &НаКлиенте Процедура ПредставлениеИностранногоАдресаПриИзменении(Элемент) - НаселенныйПунктДетально.Value = ПредставлениеАдреса; + НаселенныйПунктДетально.street = ПредставлениеАдреса; НаселенныйПунктДетально.AddressType = УправлениеКонтактнойИнформациейКлиентСервер.АдресВСвободнойФорме(); НаселенныйПунктДетально.Comment = Комментарий; НаселенныйПунктДетально.Country = Строка(Страна); @@ -172,7 +170,7 @@ &НаКлиенте Процедура АдресНаДатуАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка) - Если СтрСравнить(Текст, НСтр("ru='начало учета'")) = 0 Или ПустаяСтрока(Текст) Тогда + Если СтрСравнить(Текст, НСтр("ru = 'начало учета'")) = 0 Или ПустаяСтрока(Текст) Тогда Элементы.АдресНаДату.ФорматРедактирования = ""; КонецЕсли; КонецПроцедуры @@ -492,22 +490,26 @@ НаселенныйПунктДетально = Контекст.НаселенныйПунктДетально; Результат = Новый Структура("ДанныеВыбора, ОшибкиЗаполнения"); - ДанныеВыбора = НаселенныйПунктДетально; + Если Контекст.ВидКонтактнойИнформации.ВключатьСтрануВПредставление И ЗначениеЗаполнено(НаселенныйПунктДетально.country) Тогда + НаселенныйПунктДетально.Value = НаселенныйПунктДетально.country + ", " + НаселенныйПунктДетально.street; + Иначе + НаселенныйПунктДетально.Value = НаселенныйПунктДетально.street; + КонецЕсли; Результат.ДанныеВыбора = Новый Структура; - Результат.ДанныеВыбора.Вставить("КонтактнаяИнформация", - УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияИзJSONВXML(ДанныеВыбора, Контекст.ВидКонтактнойИнформации.Тип)); - Результат.ДанныеВыбора.Вставить("Значение", УправлениеКонтактнойИнформациейСлужебный.СтруктураВСтрокуJSON(ДанныеВыбора)); Результат.ДанныеВыбора.Вставить("Представление", НаселенныйПунктДетально.Value); + Результат.ДанныеВыбора.Вставить("КонтактнаяИнформация", + УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияИзJSONВXML(НаселенныйПунктДетально, Контекст.ВидКонтактнойИнформации.Тип)); + Результат.ДанныеВыбора.Вставить("Значение", УправлениеКонтактнойИнформациейСлужебный.СтруктураВСтрокуJSON(НаселенныйПунктДетально)); Результат.ДанныеВыбора.Вставить("Комментарий", НаселенныйПунктДетально.Comment); Результат.ДанныеВыбора.Вставить("ВведеноВСвободнойФорме", УправлениеКонтактнойИнформациейСлужебный.АдресВведенВСвободнойФорме(НаселенныйПунктДетально)); - + // ошибки заполнения Результат.ОшибкиЗаполнения = Новый Массив; Если Контекст.ВидКонтактнойИнформации.Тип = Перечисления.ТипыКонтактнойИнформации.Адрес - И Контекст.ВидКонтактнойИнформации.РедактированиеТолькоВДиалоге Тогда + И Контекст.ВидКонтактнойИнформации.ВидРедактирования = "Диалог" Тогда АдресВВидеГиперссылки = Истина; Иначе АдресВВидеГиперссылки = Ложь; @@ -572,10 +574,6 @@ НаселенныйПунктДетально.Country = СокрЛП(Страна); - Если ВидКонтактнойИнформации.ВключатьСтрануВПредставление Тогда - ОбновитьПредставлениеАдреса(); - КонецЕсли; - КонецПроцедуры &НаСервере @@ -604,8 +602,22 @@ СведенияОбАдресе.Страна = ДанныеСтраны.Ссылка; СведенияОбАдресе.КодСтраны = ДанныеСтраны.Код; КонецЕсли; - - СведенияОбАдресе.ПредставлениеАдреса = ДанныеАдреса.Value; + + ЭлементыАдреса = Новый Массив; + Если ЗначениеЗаполнено(ДанныеАдреса.city) Тогда + ЭлементыАдреса.Добавить(ДанныеАдреса.city); + КонецЕсли; + Если ЗначениеЗаполнено(ДанныеАдреса.street) Тогда + ЭлементыАдреса.Добавить(ДанныеАдреса.street); + КонецЕсли; + + // поля адреса пустые, но представление заполнено + Если ЭлементыАдреса.Количество() = 0 И ЗначениеЗаполнено(ДанныеАдреса.value) Тогда + ДанныеАдреса.street = ДанныеАдреса.value; + ЭлементыАдреса.Добавить(ДанныеАдреса.street); + КонецЕсли; + + СведенияОбАдресе.ПредставлениеАдреса = СтрСоединить(ЭлементыАдреса, ", "); КонецПроцедуры @@ -655,7 +667,7 @@ КонецЕсли; Элементы.ТекстПроДатуДействия.Заголовок = ТекстИсторическийАдрес; - Элементы.АдресНаДату.ФорматРедактирования = ?(ЗначениеЗаполнено(АдресНаДату), "", "ДФ='""" + НСтр("ru='начало учета'") + """'"); + Элементы.АдресНаДату.ФорматРедактирования = ?(ЗначениеЗаполнено(АдресНаДату), "", "ДФ='""" + НСтр("ru = 'начало учета'") + """'"); КонецПроцедуры @@ -665,12 +677,12 @@ Отбор = Новый Структура("Вид", ВидКонтактнойИнформации.Ссылка); НайденныеСтроки = КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.НайтиСтроки(Отбор); Если НайденныеСтроки.Количество() > 1 Тогда - Элементы.ИсторияИзмененийГиперссылка.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='История изменений (%1)'"), НайденныеСтроки.Количество()); + Элементы.ИсторияИзмененийГиперссылка.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'История изменений (%1)'"), НайденныеСтроки.Количество()); Элементы.ИсторияИзмененийГиперссылка.Видимость = Истина; ИначеЕсли НайденныеСтроки.Количество() = 1 И ПустаяСтрока(НайденныеСтроки[0].ЗначенияПолей) Тогда Элементы.ИсторияИзмененийГиперссылка.Видимость = Ложь; Иначе - Элементы.ИсторияИзмененийГиперссылка.Заголовок = НСтр("ru='История изменений'"); + Элементы.ИсторияИзмененийГиперссылка.Заголовок = НСтр("ru = 'История изменений'"); Элементы.ИсторияИзмененийГиперссылка.Видимость = Истина; КонецЕсли; @@ -827,11 +839,6 @@ КонецФункции -&НаКлиенте -Процедура ОбновитьПредставлениеАдреса() - ПредставлениеАдреса = НаселенныйПунктДетально.Value; -КонецПроцедуры - &НаСервереБезКонтекста Функция ОсновнаяСтрана() diff --git a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводТелефона/Form.form b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводТелефона/Form.form index dd4b9f939..cc61ae302 100644 --- a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводТелефона/Form.form +++ b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводТелефона/Form.form @@ -276,10 +276,6 @@ ru Дополнительный комментарий, не попадающий в представление - - OnChange - КомментарийПриИзменении - КомментарийExtendedTooltip 47 diff --git a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводТелефона/Module.bsl b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводТелефона/Module.bsl index 18445d130..e36a46747 100644 --- a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводТелефона/Module.bsl +++ b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводТелефона/Module.bsl @@ -37,13 +37,12 @@ // Разбор параметров в реквизиты. Если ТипЗнч(Параметры.ВидКонтактнойИнформации) = Тип("СправочникСсылка.ВидыКонтактнойИнформации") Тогда ВидКонтактнойИнформации = Параметры.ВидКонтактнойИнформации; - ТипКонтактнойИнформации = ВидКонтактнойИнформации.Тип; - Иначе - СтруктураВидКонтактнойИнформации = Параметры.ВидКонтактнойИнформации; - ТипКонтактнойИнформации = СтруктураВидКонтактнойИнформации.Тип; КонецЕсли; - ПроверятьКорректность = ВидКонтактнойИнформации.ПроверятьКорректность; + СтруктураВидКонтактнойИнформации = УправлениеКонтактнойИнформациейСлужебный.СтруктураВидаКонтактнойИнформации(Параметры.ВидКонтактнойИнформации); + ТипКонтактнойИнформации = СтруктураВидКонтактнойИнформации.Тип; + + ПроверятьКорректность = СтруктураВидКонтактнойИнформации.ПроверятьКорректность; Заголовок = ?(ПустаяСтрока(Параметры.Заголовок), Строка(ВидКонтактнойИнформации), Параметры.Заголовок); ЭтоНовый = Ложь; @@ -78,8 +77,7 @@ ЗначениеРеквизитовПоКонтактнойИнформации(Данные); - Элементы.Добавочный.Видимость = ВидКонтактнойИнформации.ТелефонCДобавочнымНомером; - Элементы.ОчиститьТелефон.Видимость = Ложь; + Элементы.Добавочный.Видимость = СтруктураВидКонтактнойИнформации.ТелефонCДобавочнымНомером; Коды = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("Обработка.ВводКонтактнойИнформации.Форма.ВводТелефона", "КодыСтраныИГорода"); Если ТипЗнч(Коды) = Тип("Структура") Тогда @@ -93,7 +91,7 @@ КонецЕсли; КонецЕсли; - Если ВидКонтактнойИнформации.ХранитьИсториюИзменений Тогда + Если СтруктураВидКонтактнойИнформации.ХранитьИсториюИзменений Тогда Если Параметры.Свойство("КонтактнаяИнформацияОписаниеДополнительныхРеквизитов") Тогда Для каждого СтрокаКИ Из Параметры.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов Цикл НоваяСтрока = КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.Добавить(); @@ -106,7 +104,7 @@ ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Авто; - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "Представление", "ПодсказкаВвода", НСтр("ru ='Представление'")); + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "Представление", "ПодсказкаВвода", НСтр("ru = 'Представление'")); ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "КомандаОК", "Картинка", БиблиотекаКартинок.ЗаписатьИЗакрыть); ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "КомандаОК", "Отображение", ОтображениеКнопки.Картинка); ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "Отмена", "Видимость", Ложь); @@ -182,11 +180,6 @@ КонецПроцедуры -&НаКлиенте -Процедура КомментарийПриИзменении(Элемент) - ЗаполнитьПредставлениеТелефона(); -КонецПроцедуры - #КонецОбласти #Область ОбработчикиКомандФормы @@ -371,12 +364,13 @@ ПодключитьОбработчикОжидания("ЗаполнитьПредставлениеТелефонаСейчас", 0.1, Истина); -КонецПроцедуры +КонецПроцедуры &НаКлиенте Процедура ЗаполнитьПредставлениеТелефонаСейчас() - Представление = УправлениеКонтактнойИнформациейКлиентСервер.СформироватьПредставлениеТелефона(КодСтраны, КодГорода, НомерТелефона, Добавочный, Комментарий); + Представление = УправлениеКонтактнойИнформациейКлиентСервер.СформироватьПредставлениеТелефона(КодСтраны, + КодГорода, НомерТелефона, Добавочный, ""); КонецПроцедуры @@ -416,7 +410,7 @@ Процедура СообщитьОбОшибкахЗаполнения(СписокОшибок) Если СписокОшибок.Количество()=0 Тогда - ПоказатьПредупреждение(, НСтр("ru='Телефон введен корректно.'")); + ПоказатьПредупреждение(, НСтр("ru = 'Телефон введен корректно.'")); Возврат; КонецЕсли; diff --git a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВебСайт/Module.bsl b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВебСайт/Module.bsl index 80b43963d..5b9d84212 100644 --- a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВебСайт/Module.bsl +++ b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВебСайт/Module.bsl @@ -13,7 +13,7 @@ ВидКонтактнойИнформации = Параметры.ВидКонтактнойИнформации; Если Не ЗначениеЗаполнено(ВидКонтактнойИнформации) Тогда - ВызватьИсключение НСтр("ru='Команда не может быть выполнена для указанного объекта из-за некорректного внедрения контактной информации.'"); + ВызватьИсключение НСтр("ru = 'Команда не может быть выполнена для указанного объекта из-за некорректного внедрения контактной информации.'"); КонецЕсли; ТипКонтактнойИнформации = Перечисления.ТипыКонтактнойИнформации.ВебСтраница; diff --git a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ИсторияКонтактнойИнформации/Module.bsl b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ИсторияКонтактнойИнформации/Module.bsl index 0c82418fc..a664a06d4 100644 --- a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ИсторияКонтактнойИнформации/Module.bsl +++ b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ИсторияКонтактнойИнформации/Module.bsl @@ -34,7 +34,7 @@ Иначе Отказ = Истина; КонецЕсли; - РедактированиеТолькоВДиалоге = ВидКонтактнойИнформации.РедактированиеТолькоВДиалоге; + РедактированиеТолькоВДиалоге = ВидКонтактнойИнформации.ВидРедактирования = "Диалог"; Если ВидКонтактнойИнформации.Тип = Перечисления.ТипыКонтактнойИнформации.Адрес Тогда ИмяФормыРедактирования = "ВводАдреса"; ИначеЕсли ВидКонтактнойИнформации.Тип = Перечисления.ТипыКонтактнойИнформации.Телефон Тогда @@ -207,7 +207,7 @@ Если ВариантыДат[История[Индекс].ДействуетС] = Неопределено Тогда ВариантыДат.Вставить(История[Индекс].ДействуетС, Истина); Иначе - ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru='Не допускается ввод адресов с одинаковыми датами.'"),, "История[" + Строка(Индекс) + "].ДействуетС"); + ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Не допускается ввод адресов с одинаковыми датами.'"),, "История[" + Строка(Индекс) + "].ДействуетС"); Возврат; КонецЕсли; Дельта = История[Индекс].ДействуетС - ТекущаяДатаПроверки; @@ -222,7 +222,7 @@ История[ДействующийАдрес].ЭтоИсторическаяКонтактнаяИнформация = Ложь; Если НЕ ВводНовогоАдреса И ОтсутствуетНачальнаяДата Тогда - ПоказатьПредупреждение(, НСтр("ru='Отсутствует адрес, действующий с даты начала ведения учета.'")); + ПоказатьПредупреждение(, НСтр("ru = 'Отсутствует адрес, действующий с даты начала ведения учета.'")); Возврат; КонецЕсли; @@ -306,7 +306,7 @@ Отбор = Новый Структура("ДействуетС", НоваяДата); НайденныеСтроки = История.НайтиСтроки(Отбор); Если НайденныеСтроки.Количество() > 1 Тогда - ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru='Не допускается ввод адресов с одинаковыми датами.'"),, "История[" + Строка(Индекс) + "].ДействуетС"); + ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Не допускается ввод адресов с одинаковыми датами.'"),, "История[" + Строка(Индекс) + "].ДействуетС"); Если ЗначениеЗаполнено(СтараяДата) Тогда Возврат СтараяДата; Иначе diff --git a/SSL/src/DataProcessors/ВыгрузкаЗагрузкаEnterpriseData/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ВыгрузкаЗагрузкаEnterpriseData/Forms/Форма/Module.bsl index 75014d64c..c90dac771 100644 --- a/SSL/src/DataProcessors/ВыгрузкаЗагрузкаEnterpriseData/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ВыгрузкаЗагрузкаEnterpriseData/Forms/Форма/Module.bsl @@ -16,18 +16,18 @@ ОбменДаннымиПереопределяемый.ПриПолученииДоступныхВерсийФормата(МассивДоступныхВерсий); Исключение // Не удалось получить доступные версии формата. - ВызватьИсключение НСтр("ru='В информационной базе не поддерживается синхронизация данных через универсальный формат'"); + ВызватьИсключение НСтр("ru = 'В информационной базе не поддерживается синхронизация данных через универсальный формат'"); КонецПопытки; ОбработкаОбъект = РеквизитФормыВЗначение("Объект"); ВариантОткрытияФормы = ?(Параметры.Свойство("ТолькоЗагрузка"), "ТолькоЗагрузка", ""); Если ВариантОткрытияФормы = "ТолькоЗагрузка" Тогда - ЭтотОбъект.Заголовок = НСтр("ru='Загрузка данных EnterpriseData'"); + ЭтотОбъект.Заголовок = НСтр("ru = 'Загрузка данных EnterpriseData'"); Элементы.НадписьЗагрузкаВстроеннойОбработкой.Видимость = Истина; Иначе Элементы.НадписьЗагрузкаВстроеннойОбработкой.Видимость = Ложь; - ЭтотОбъект.Заголовок = НСтр("ru='Выгрузка и загрузка данных EnterpriseData'"); + ЭтотОбъект.Заголовок = НСтр("ru = 'Выгрузка и загрузка данных EnterpriseData'"); КонецЕсли; МетаОбработкаИмя = ОбработкаОбъект.Метаданные().Имя; @@ -41,17 +41,18 @@ РазделениеВключено = ОбщегоНазначения.РазделениеВключено(); Если МассивДоступныхВерсий.Количество() = 0 Тогда - СтрокаПоддерживаемыеВерсииФормата = НСтр("ru='Не обнаружены поддерживаемые версии формата'"); - Элементы.СтрокаПоддерживаемыеВерсииФормата.ЦветТекста = Новый Цвет(255,0,0); + СтрокаПоддерживаемыеВерсииФормата = НСтр("ru = 'Не обнаружены поддерживаемые версии формата'"); Элементы.ФормаВыполнитьОперацию.Доступность = Ложь; + Элементы.СтрокаПоддерживаемыеВерсииФормата.ЦветТекста = ЦветаСтиля.ПоясняющийОшибкуТекст; Иначе - СтрокаПоддерживаемыеВерсииФормата = НСтр("ru='Поддерживаемые версии формата:'"); + ПредставлениеСпискаВерсий = ""; Для Каждого ЭлементМассива Из МассивДоступныхВерсий Цикл - СтрокаПоддерживаемыеВерсииФормата = СтрокаПоддерживаемыеВерсииФормата + ЭлементМассива.Ключ + ", "; + ПредставлениеСпискаВерсий = ПредставлениеСпискаВерсий + "; " + ЭлементМассива.Ключ; Элементы.ВерсияФормата.СписокВыбора.Добавить(ЭлементМассива.Ключ); КонецЦикла; - СтрокаПоддерживаемыеВерсииФормата = Лев(СтрокаПоддерживаемыеВерсииФормата, СтрДлина(СтрокаПоддерживаемыеВерсииФормата)-2); - Элементы.СтрокаПоддерживаемыеВерсииФормата.ЦветТекста = Новый Цвет(0,0,0); + ПредставлениеСпискаВерсий = Сред(ПредставлениеСпискаВерсий, 3); + СтрокаПоддерживаемыеВерсииФормата = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Поддерживаемые версии формата: %1'"), ПредставлениеСпискаВерсий); Объект.ВерсияФормата = Элементы.ВерсияФормата.СписокВыбора[МассивДоступныхВерсий.Количество()-1].Значение; ОбновитьПравилаВыгрузкиНаСервере(); КонецЕсли; @@ -73,10 +74,9 @@ ОбновитьПравилаВыгрузкиНаСервере(); КонецЕсли; УстановитьВидимость(); - #Если ВебКлиент Тогда - // На всякий случай проверяем расширение работы с файлами. +#Если ВебКлиент Тогда НачатьУстановкуРасширенияРаботыСФайлами(); - #КонецЕсли +#КонецЕсли КонецПроцедуры #КонецОбласти @@ -187,6 +187,18 @@ ИдентификаторЗадания = Неопределено; Если ВидОперации = "Загрузка" Тогда + Если ИсточникЗагрузки = 1 Тогда // текстовое поле + Если Не ЗначениеЗаполнено(ДанныеДляЗагрузкиXDTO) Тогда + ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Текстовое поле с данными для загрузки не заполнено.'")); + Возврат; + КонецЕсли; + Иначе + Если Не ЗначениеЗаполнено(ПутьКФайлуЗагрузки) Тогда + ВыбратьФайлДляЗагрузкиНаКлиенте(Истина); + Возврат; + КонецЕсли; + КонецЕсли; + ПодключитьОбработчикОжидания("ЗагрузитьСообщение", 0.1, Истина); Иначе ПодключитьОбработчикОжидания("ВыгрузитьДанные", 0.1, Истина); @@ -266,23 +278,18 @@ #Область СлужебныеПроцедурыИФункции &НаКлиенте Процедура ЗагрузитьСообщение() - Элементы.ДекорацияПоясняющийТекстДлительнойОперации.Заголовок = НСтр("ru='Выполняется загрузка данных...'"); + + Элементы.ДекорацияПоясняющийТекстДлительнойОперации.Заголовок = НСтр("ru = 'Выполняется загрузка данных...'"); Элементы.ВыгрузкаЗагрузка.ТекущаяСтраница = Элементы.Ожидание; + УстановитьВидимостьДоступностьКнопок(Ложь); + Если ИсточникЗагрузки = 1 Тогда - Если НЕ ЗначениеЗаполнено(ДанныеДляЗагрузкиXDTO) Тогда - ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru='Текстовое поле с данными для загрузки не заполнено.'")); - Возврат; - КонецЕсли; ЗапуститьЗагрузкуДанных(); Иначе - Если ЗначениеЗаполнено(ПутьКФайлуЗагрузки) Тогда - ЗагрузитьИзФайлаНаКлиенте(); - Иначе - // После выбора автоматом пойдет загрузка. - ВыбратьФайлДляЗагрузкиНаКлиенте(Истина); - КонецЕсли; + ЗагрузитьИзФайлаНаКлиенте(); КонецЕсли; + КонецПроцедуры &НаКлиенте @@ -307,7 +314,7 @@ &НаКлиенте Процедура ПриЗавершенииОперацииЗагрузки(Результат, ДополнительныеПараметры) Экспорт Если Результат = Неопределено Тогда - ВызватьИсключение НСтр("ru='Загрузка данных завершена неудачно.'"); + ВызватьИсключение НСтр("ru = 'Загрузка данных завершена неудачно.'"); ИначеЕсли Результат.Статус = "Ошибка" Тогда ВызватьИсключение Результат.КраткоеПредставлениеОшибки; КонецЕсли; @@ -339,7 +346,7 @@ &НаКлиенте Процедура ПриЗавершенииОперацииВыгрузки(Результат, ДополнительныеПараметры) Экспорт Если Результат = Неопределено Тогда - ВызватьИсключение НСтр("ru='Выгрузка данных завершена неудачно. Отсутствует результат выгрузки.'"); + ВызватьИсключение НСтр("ru = 'Выгрузка данных завершена неудачно. Отсутствует результат выгрузки.'"); ИначеЕсли Результат.Статус = "Ошибка" Тогда ВызватьИсключение Результат.КраткоеПредставлениеОшибки; КонецЕсли; @@ -398,7 +405,7 @@ Если Не Подключено Тогда ОбщегоНазначенияКлиент.СообщитьПользователю( - НСтр("ru = 'Для продолжения необходимо установить расширение работы с файлами.'")); + НСтр("ru = 'Для продолжения необходимо установить расширение для работы с 1С:Предприятием.'")); Возврат; КонецЕсли; @@ -822,7 +829,7 @@ ПутьКФайлуЗагрузки = ВыбранныеФайлы[0]; // Проверка существования файла. Если ДополнительныеПараметры.ЗагружатьПослеВыбора Тогда - ЗагрузитьИзФайлаНаКлиенте(); + ПодключитьОбработчикОжидания("ЗагрузитьСообщение", 0.1, Истина); КонецЕсли; Иначе ПутьКФайлуВыгрузки = ВыбранныеФайлы[0]; diff --git a/SSL/src/DataProcessors/ВыгрузкаЗагрузкаEnterpriseData/ObjectModule.bsl b/SSL/src/DataProcessors/ВыгрузкаЗагрузкаEnterpriseData/ObjectModule.bsl index 24240ce58..c570c4e22 100644 --- a/SSL/src/DataProcessors/ВыгрузкаЗагрузкаEnterpriseData/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ВыгрузкаЗагрузкаEnterpriseData/ObjectModule.bsl @@ -318,7 +318,7 @@ Или ЧтениеXML.ЛокальноеИмя <> "Body" Тогда РезультатЗагрузки.ЕстьОшибки = Истина; - РезультатЗагрузки.ТекстОшибки = НСтр("ru='Ошибка чтения сообщения загрузки. Неверный формат сообщения.'"); + РезультатЗагрузки.ТекстОшибки = НСтр("ru = 'Ошибка чтения сообщения загрузки. Неверный формат сообщения.'"); Возврат РезультатЗагрузки; КонецЕсли; @@ -359,15 +359,15 @@ ТаблицаПравилВыгрузки.Строки.Очистить(); УзелДереваСправочники = ТаблицаПравилВыгрузки.Строки.Добавить(); УзелДереваСправочники.ЭтоГруппа = Истина; - УзелДереваСправочники.Наименование = НСтр("ru='Справочники'"); + УзелДереваСправочники.Наименование = НСтр("ru = 'Справочники'"); УзелДереваДокументы = ТаблицаПравилВыгрузки.Строки.Добавить(); УзелДереваДокументы.ЭтоГруппа = Истина; - УзелДереваДокументы.Наименование = НСтр("ru='Документы'"); + УзелДереваДокументы.Наименование = НСтр("ru = 'Документы'"); УзелДереваПВХ = ТаблицаПравилВыгрузки.Строки.Добавить(); УзелДереваПВХ.ЭтоГруппа = Истина; - УзелДереваПВХ.Наименование = НСтр("ru='Планы видов характеристик'"); + УзелДереваПВХ.Наименование = НСтр("ru = 'Планы видов характеристик'"); Для Каждого СтрокаПОД Из КомпонентыОбмена.ПравилаОбработкиДанных Цикл ТекМД = СтрокаПОД.ОбъектВыборкиМетаданные; @@ -382,15 +382,15 @@ Если Метаданные.Справочники.Содержит(ТекМД) Тогда НовСтрока = УзелДереваСправочники.Строки.Добавить(); ПолноеИмяМДСтрокой = "Справочник." + ТекИмя; - Представление = НСтр("ru='Справочник %1'"); + Представление = НСтр("ru = 'Справочник %1'"); ИначеЕсли Метаданные.Документы.Содержит(ТекМД) Тогда НовСтрока = УзелДереваДокументы.Строки.Добавить(); ПолноеИмяМДСтрокой = "Документ." + ТекИмя; - Представление = НСтр("ru='Документ %1'"); + Представление = НСтр("ru = 'Документ %1'"); ИначеЕсли Метаданные.ПланыВидовХарактеристик.Содержит(ТекМД) Тогда НовСтрока = УзелДереваПВХ.Строки.Добавить(); ПолноеИмяМДСтрокой = "ПланВидовХарактеристик." + ТекИмя; - Представление = НСтр("ru='План видов характеристик %1'"); + Представление = НСтр("ru = 'План видов характеристик %1'"); Иначе // Выгрузка других объектов метаданных не поддерживается. Продолжить; @@ -523,7 +523,7 @@ Если ПустаяСтрока(ОтборСтрокой) Тогда Если ОписаниеПустогоОтбора=Неопределено Тогда - ОтборСтрокой = НСтр("ru='Все объекты'"); + ОтборСтрокой = НСтр("ru = 'Все объекты'"); Иначе ОтборСтрокой = ОписаниеПустогоОтбора; КонецЕсли; @@ -823,7 +823,7 @@ МетаданныеОбъекта = Метаданные.НайтиПоПолномуИмени(ИмяДобавляемойТаблицы); Если МетаданныеОбъекта = Неопределено Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='Некорректное имя метаданных ""%1""'"), + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Некорректное имя метаданных ""%1""'"), ИмяДобавляемойТаблицы); КонецЕсли; diff --git a/SSL/src/DataProcessors/ВыгрузкаЗагрузкаДанныхСверткаСсылокНаПользователейВРазделенныхДанных/ManagerModule.bsl b/SSL/src/DataProcessors/ВыгрузкаЗагрузкаДанныхСверткаСсылокНаПользователейВРазделенныхДанных/ManagerModule.bsl index 1601db85b..aa8adf373 100644 --- a/SSL/src/DataProcessors/ВыгрузкаЗагрузкаДанныхСверткаСсылокНаПользователейВРазделенныхДанных/ManagerModule.bsl +++ b/SSL/src/DataProcessors/ВыгрузкаЗагрузкаДанныхСверткаСсылокНаПользователейВРазделенныхДанных/ManagerModule.bsl @@ -14,7 +14,7 @@ // ссылок в файлах выгрузки. // // Параметры: -// Типы - Массив(ОбъектМетаданных). +// Типы - Массив Из ОбъектМетаданных. // Процедура ПриЗаполненииТиповТребующихАннотациюСсылокПриВыгрузке(Типы) Экспорт @@ -24,7 +24,8 @@ // Вызывается при регистрации произвольных обработчиков выгрузки данных. // -// Параметры: ТаблицаОбработчиков - ТаблицаЗначений, в данной процедуре требуется +// Параметры: +// ТаблицаОбработчиков - ТаблицаЗначений, в данной процедуре требуется // дополнить эту таблицу значений информацией о регистрируемых произвольных // обработчиках выгрузки данных. Колонки: // ОбъектМетаданных - ОбъектМетаданных, при выгрузке данных которого должен @@ -81,7 +82,7 @@ // Объект может быть модифицировано внутри обработчика ПередВыгрузкойОбъекта(), при // этом внесенные изменения будут отражены в сериализации объекта в файлах выгрузки, но // не будут зафиксированы в информационной базе -// Артефакты - Массив(ОбъектXDTO) - набор дополнительной информации, логически неразрывно +// Артефакты - Массив Из ОбъектXDTO - набор дополнительной информации, логически неразрывно // связанной с объектом, но не являющейся его частью (артефакты объекта). Артефакты должны // сформированы внутри обработчика ПередВыгрузкойОбъекта() и добавлены в массив, переданный // в качестве значения параметра Артефакты. Каждый артефакт должен являться XDTO-объектом, @@ -125,7 +126,8 @@ // Вызывается при регистрации произвольных обработчиков загрузки данных. // -// Параметры: ТаблицаОбработчиков - ТаблицаЗначений, в данной процедуре требуется +// Параметры: +// ТаблицаОбработчиков - ТаблицаЗначений, в данной процедуре требуется // дополнить эту таблицу значений информацией о регистрируемых произвольных // обработчиках загрузки данных. Колонки: // ОбъектМетаданных - ОбъектМетаданных, при загрузке данных которого должен @@ -199,7 +201,7 @@ // объект данных информационной базы, перед загрузкой которого был вызван обработчик. // Значение, переданное в процедуру ПередЗагрузкойОбъекта() в качестве значения параметра // Объект может быть модифицировано внутри процедуры обработчика ПередЗагрузкойОбъекта(). -// Артефакты - Массив(ОбъектXDTO) - дополнительные данные, логически неразрывно связанные +// Артефакты - Массив Из ОбъектXDTO - дополнительные данные, логически неразрывно связанные // с объектом данных, но не являющиеся его частью. Сформированы в экспортируемых процедурах // ПередВыгрузкойОбъекта() обработчиков выгрузки данных (см. комментарий к процедуре // ПриРегистрацииОбработчиковВыгрузкиДанных(). Каждый артефакт должен являться XDTO-объектом, @@ -222,7 +224,7 @@ // РегистрНакопленияНаборЗаписей.*, РегистрБухгалтерииНаборЗаписей.*, // РегистрРасчетаНаборЗаписей.*, ПоследовательностьНаборЗаписей.*, ПерерасчетНаборЗаписей.* - // объект данных информационной базы, после загрузки которого был вызван обработчик. -// Артефакты - Массив(ОбъектXDTO) - дополнительные данные, логически неразрывно связанные +// Артефакты - Массив Из ОбъектXDTO - дополнительные данные, логически неразрывно связанные // с объектом данных, но не являющиеся его частью. Сформированы в экспортируемых процедурах // ПередВыгрузкойОбъекта() обработчиков выгрузки данных (см. комментарий к процедуре // ПриРегистрацииОбработчиковВыгрузкиДанных(). Каждый артефакт должен являться XDTO-объектом, diff --git a/SSL/src/DataProcessors/ВыгрузкаЗагрузкаДанныхСверткаСсылокНаПользователейВРазделенныхДанных/ObjectModule.bsl b/SSL/src/DataProcessors/ВыгрузкаЗагрузкаДанныхСверткаСсылокНаПользователейВРазделенныхДанных/ObjectModule.bsl index 1442f43d4..9ee324a2c 100644 --- a/SSL/src/DataProcessors/ВыгрузкаЗагрузкаДанныхСверткаСсылокНаПользователейВРазделенныхДанных/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ВыгрузкаЗагрузкаДанныхСверткаСсылокНаПользователейВРазделенныхДанных/ObjectModule.bsl @@ -416,7 +416,7 @@ // ИмяФайла - Строка - путь к файлу. // // Возвращаемое значение: -// Объект. +// Объект - . // Функция ПрочитатьОбъектИзФайла(Знач ИмяФайла) @@ -438,7 +438,7 @@ // ПотокЧтения - ЧтениеXML - поток чтения. // // Возвращаемое значение: -// Объект. +// Объект - . // Функция ПрочитатьОбъектИзПотока(ПотокЧтения) diff --git a/SSL/src/DataProcessors/ВыполнениеОбменаДанными/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ВыполнениеОбменаДанными/Forms/Форма/Module.bsl index a02292ac7..7f763c4fb 100644 --- a/SSL/src/DataProcessors/ВыполнениеОбменаДанными/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ВыполнениеОбменаДанными/Forms/Форма/Module.bsl @@ -1179,6 +1179,11 @@ Если ДлительнаяОперацияЗавершенаСОшибкой Тогда ИдентификаторФайлаСообщенияВСервисе = ""; + ОбменДаннымиВызовСервера.ЗафиксироватьЗавершениеОбменаСОшибкой( + УзелИнформационнойБазы, + ?(ФоновоеЗаданиеВыполняемоеДействие = 1, "ЗагрузкаДанных", "ВыгрузкаДанных"), + ДатаНачалаОперации, + СообщениеОбОшибке); Иначе // Если выполнялось длительное получение данных из приложения в интернете, @@ -1283,6 +1288,13 @@ Если ФоновоеЗаданиеРезультатВыполнения.Статус = "Ошибка" Тогда СообщениеОбОшибке = ФоновоеЗаданиеРезультатВыполнения.ПодробноеПредставлениеОшибки; + УстановитьПривилегированныйРежим(Истина); + ОбменДаннымиСервер.ЗафиксироватьЗавершениеОбменаСОшибкой( + УзелИнформационнойБазы, + ?(ФоновоеЗаданиеВыполняемоеДействие = 1, "ЗагрузкаДанных", "ВыгрузкаДанных"), + ДатаНачалаОперации, + СообщениеОбОшибке); + УстановитьПривилегированныйРежим(Ложь); Иначе РезультатВыполненияВФоне = ПолучитьИзВременногоХранилища(ФоновоеЗаданиеАдресХранилища); diff --git a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/РедактированиеФормулы/Form.form b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/РедактированиеФормулы/Form.form index 854c03a60..cc19cb624 100644 --- a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/РедактированиеФормулы/Form.form +++ b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/РедактированиеФормулы/Form.form @@ -1267,7 +1267,7 @@ OnCreateAtServer ПриСозданииНаСервере - DontBlock + LockOwner true true true diff --git a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/РедактированиеФормулы/Module.bsl b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/РедактированиеФормулы/Module.bsl index f9db3348a..3f3fea111 100644 --- a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/РедактированиеФормулы/Module.bsl +++ b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/РедактированиеФормулы/Module.bsl @@ -49,7 +49,7 @@ Возврат; КонецЕсли; - ПоказатьВопрос(Новый ОписаниеОповещения("ПередЗакрытиемЗавершение", ЭтотОбъект), НСтр("ru='Данные были изменены. Сохранить изменения?'"), РежимДиалогаВопрос.ДаНетОтмена); + ПоказатьВопрос(Новый ОписаниеОповещения("ПередЗакрытиемЗавершение", ЭтотОбъект), НСтр("ru = 'Данные были изменены. Сохранить изменения?'"), РежимДиалогаВопрос.ДаНетОтмена); КонецПроцедуры @@ -400,7 +400,7 @@ Дерево = ПолучитьПустоеДеревоОператоров(); - ГруппаОператоров = ДобавитьГруппуОператоров(Дерево, НСтр("ru='Разделители'")); + ГруппаОператоров = ДобавитьГруппуОператоров(Дерево, НСтр("ru = 'Разделители'")); ДобавитьОператор(Дерево, ГруппаОператоров, "/", " + ""/"" + "); ДобавитьОператор(Дерево, ГруппаОператоров, "\", " + ""\"" + "); @@ -408,58 +408,58 @@ ДобавитьОператор(Дерево, ГруппаОператоров, "_", " + ""_"" + "); ДобавитьОператор(Дерево, ГруппаОператоров, ",", " + "", "" + "); ДобавитьОператор(Дерево, ГруппаОператоров, ".", " + "". "" + "); - ДобавитьОператор(Дерево, ГруппаОператоров, НСтр("ru='Пробел'"), " + "" "" + "); + ДобавитьОператор(Дерево, ГруппаОператоров, НСтр("ru = 'Пробел'"), " + "" "" + "); ДобавитьОператор(Дерево, ГруппаОператоров, "(", " + "" ("" + "); ДобавитьОператор(Дерево, ГруппаОператоров, ")", " + "") "" + "); ДобавитьОператор(Дерево, ГруппаОператоров, """", " + """""""" + "); - ГруппаОператоров = ДобавитьГруппуОператоров(Дерево, НСтр("ru='Операторы'")); + ГруппаОператоров = ДобавитьГруппуОператоров(Дерево, НСтр("ru = 'Операторы'")); ДобавитьОператор(Дерево, ГруппаОператоров, "+", " + "); ДобавитьОператор(Дерево, ГруппаОператоров, "-", " - "); ДобавитьОператор(Дерево, ГруппаОператоров, "*", " * "); ДобавитьОператор(Дерево, ГруппаОператоров, "/", " / "); - ГруппаОператоров = ДобавитьГруппуОператоров(Дерево, НСтр("ru='Логические операторы и константы'")); + ГруппаОператоров = ДобавитьГруппуОператоров(Дерево, НСтр("ru = 'Логические операторы и константы'")); ДобавитьОператор(Дерево, ГруппаОператоров, "<", " < "); ДобавитьОператор(Дерево, ГруппаОператоров, ">", " > "); ДобавитьОператор(Дерево, ГруппаОператоров, "<=", " <= "); ДобавитьОператор(Дерево, ГруппаОператоров, ">=", " >= "); ДобавитьОператор(Дерево, ГруппаОператоров, "=", " = "); ДобавитьОператор(Дерево, ГруппаОператоров, "<>", " <> "); - ДобавитьОператор(Дерево, ГруппаОператоров, НСтр("ru='И'"), " " + НСтр("ru='И'") + " "); - ДобавитьОператор(Дерево, ГруппаОператоров, НСтр("ru='Или'"), " " + НСтр("ru='Или'") + " "); - ДобавитьОператор(Дерево, ГруппаОператоров, НСтр("ru='Не'"), " " + НСтр("ru='Не'") + " "); - ДобавитьОператор(Дерево, ГруппаОператоров, НСтр("ru='ИСТИНА'"), " " + НСтр("ru='ИСТИНА'") + " "); - ДобавитьОператор(Дерево, ГруппаОператоров, НСтр("ru='ЛОЖЬ'"), " " + НСтр("ru='ЛОЖЬ'") + " "); + ДобавитьОператор(Дерево, ГруппаОператоров, НСтр("ru = 'И'"), " " + НСтр("ru = 'И'") + " "); + ДобавитьОператор(Дерево, ГруппаОператоров, НСтр("ru = 'Или'"), " " + НСтр("ru = 'Или'") + " "); + ДобавитьОператор(Дерево, ГруппаОператоров, НСтр("ru = 'Не'"), " " + НСтр("ru = 'Не'") + " "); + ДобавитьОператор(Дерево, ГруппаОператоров, НСтр("ru = 'ИСТИНА'"), " " + НСтр("ru = 'ИСТИНА'") + " "); + ДобавитьОператор(Дерево, ГруппаОператоров, НСтр("ru = 'ЛОЖЬ'"), " " + НСтр("ru = 'ЛОЖЬ'") + " "); - ГруппаОператоров = ДобавитьГруппуОператоров(Дерево, НСтр("ru='Числовые функции'")); + ГруппаОператоров = ДобавитьГруппуОператоров(Дерево, НСтр("ru = 'Числовые функции'")); - ДобавитьОператор(Дерево, ГруппаОператоров, НСтр("ru='Максимум'"), НСтр("ru='Макс(,)'"), 2); - ДобавитьОператор(Дерево, ГруппаОператоров, НСтр("ru='Минимум'"), НСтр("ru='Мин(,)'"), 2); - ДобавитьОператор(Дерево, ГруппаОператоров, НСтр("ru='Округление'"), НСтр("ru='Окр(,)'"), 2); - ДобавитьОператор(Дерево, ГруппаОператоров, НСтр("ru='Целая часть'"), НСтр("ru='Цел()'"), 1); + ДобавитьОператор(Дерево, ГруппаОператоров, НСтр("ru = 'Максимум'"), НСтр("ru = 'Макс(,)'"), 2); + ДобавитьОператор(Дерево, ГруппаОператоров, НСтр("ru = 'Минимум'"), НСтр("ru = 'Мин(,)'"), 2); + ДобавитьОператор(Дерево, ГруппаОператоров, НСтр("ru = 'Округление'"), НСтр("ru = 'Окр(,)'"), 2); + ДобавитьОператор(Дерево, ГруппаОператоров, НСтр("ru = 'Целая часть'"), НСтр("ru = 'Цел()'"), 1); - ГруппаОператоров = ДобавитьГруппуОператоров(Дерево, НСтр("ru='Строковые функции'")); + ГруппаОператоров = ДобавитьГруппуОператоров(Дерево, НСтр("ru = 'Строковые функции'")); - ДобавитьОператор(Дерево, ГруппаОператоров, НСтр("ru='Строка'"), НСтр("ru='Строка()'")); - ДобавитьОператор(Дерево, ГруппаОператоров, НСтр("ru='ВРег'"), НСтр("ru='ВРег()'")); - ДобавитьОператор(Дерево, ГруппаОператоров, НСтр("ru='Лев'"), НСтр("ru='Лев()'")); - ДобавитьОператор(Дерево, ГруппаОператоров, НСтр("ru='НРег'"), НСтр("ru='НРег()'")); - ДобавитьОператор(Дерево, ГруппаОператоров, НСтр("ru='Прав'"), НСтр("ru='Прав()'")); - ДобавитьОператор(Дерево, ГруппаОператоров, НСтр("ru='СокрЛ'"), НСтр("ru='СокрЛ()'")); - ДобавитьОператор(Дерево, ГруппаОператоров, НСтр("ru='СокрЛП'"), НСтр("ru='СокрЛП()'")); - ДобавитьОператор(Дерево, ГруппаОператоров, НСтр("ru='СокрП'"), НСтр("ru='СокрП()'")); - ДобавитьОператор(Дерево, ГруппаОператоров, НСтр("ru='ТРег'"), НСтр("ru='ТРег()'")); - ДобавитьОператор(Дерево, ГруппаОператоров, НСтр("ru='СтрЗаменить'"), НСтр("ru='СтрЗаменить(,,)'")); - ДобавитьОператор(Дерево, ГруппаОператоров, НСтр("ru='СтрДлина'"), НСтр("ru='СтрДлина()'")); + ДобавитьОператор(Дерево, ГруппаОператоров, НСтр("ru = 'Строка'"), НСтр("ru = 'Строка()'")); + ДобавитьОператор(Дерево, ГруппаОператоров, НСтр("ru = 'ВРег'"), НСтр("ru = 'ВРег()'")); + ДобавитьОператор(Дерево, ГруппаОператоров, НСтр("ru = 'Лев'"), НСтр("ru = 'Лев()'")); + ДобавитьОператор(Дерево, ГруппаОператоров, НСтр("ru = 'НРег'"), НСтр("ru = 'НРег()'")); + ДобавитьОператор(Дерево, ГруппаОператоров, НСтр("ru = 'Прав'"), НСтр("ru = 'Прав()'")); + ДобавитьОператор(Дерево, ГруппаОператоров, НСтр("ru = 'СокрЛ'"), НСтр("ru = 'СокрЛ()'")); + ДобавитьОператор(Дерево, ГруппаОператоров, НСтр("ru = 'СокрЛП'"), НСтр("ru = 'СокрЛП()'")); + ДобавитьОператор(Дерево, ГруппаОператоров, НСтр("ru = 'СокрП'"), НСтр("ru = 'СокрП()'")); + ДобавитьОператор(Дерево, ГруппаОператоров, НСтр("ru = 'ТРег'"), НСтр("ru = 'ТРег()'")); + ДобавитьОператор(Дерево, ГруппаОператоров, НСтр("ru = 'СтрЗаменить'"), НСтр("ru = 'СтрЗаменить(,,)'")); + ДобавитьОператор(Дерево, ГруппаОператоров, НСтр("ru = 'СтрДлина'"), НСтр("ru = 'СтрДлина()'")); - ГруппаОператоров = ДобавитьГруппуОператоров(Дерево, НСтр("ru='Прочие функции'")); + ГруппаОператоров = ДобавитьГруппуОператоров(Дерево, НСтр("ru = 'Прочие функции'")); - ДобавитьОператор(Дерево, ГруппаОператоров, НСтр("ru='Условие'"), "?(,,)", 3); - ДобавитьОператор(Дерево, ГруппаОператоров, НСтр("ru='Предопределенное значение'"), НСтр("ru='ПредопределенноеЗначение()'")); - ДобавитьОператор(Дерево, ГруппаОператоров, НСтр("ru='Значение заполнено'"), НСтр("ru='ЗначениеЗаполнено()'")); - ДобавитьОператор(Дерево, ГруппаОператоров, НСтр("ru='Формат'"), НСтр("ru='Формат(,)'")); + ДобавитьОператор(Дерево, ГруппаОператоров, НСтр("ru = 'Условие'"), "?(,,)", 3); + ДобавитьОператор(Дерево, ГруппаОператоров, НСтр("ru = 'Предопределенное значение'"), НСтр("ru = 'ПредопределенноеЗначение()'")); + ДобавитьОператор(Дерево, ГруппаОператоров, НСтр("ru = 'Значение заполнено'"), НСтр("ru = 'ЗначениеЗаполнено()'")); + ДобавитьОператор(Дерево, ГруппаОператоров, НСтр("ru = 'Формат'"), НСтр("ru = 'Формат(,)'")); Возврат Дерево; diff --git a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/Форма/Module.bsl index e0a67c610..7602bb0f9 100644 --- a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/Форма/Module.bsl @@ -271,6 +271,7 @@ Если НазначениеКнопки = "Прервать" Тогда ТекущееСостояниеИзменения.ПрерватьИзменение = Истина; + Элементы.ФормаИзменить.Доступность = Ложь; Если Не ДлительнаяОперация.Статус = "Выполнено" Тогда ЗавершитьИзменениеОбъектов(); КонецЕсли; @@ -1185,8 +1186,6 @@ Элементы.ФормаНазад.Видимость = Истина; - ТекущееСостояниеИзменения = Неопределено; - КонецПроцедуры &НаСервере @@ -1814,38 +1813,41 @@ КонецПроцедуры &НаСервере -Функция ЗапретРедактированияПредусмотрен(ИмяОбъекта) +Функция БлокируемыеРеквизитыОбъекта(ИмяОбъекта) Если ПодсистемаСуществует("СтандартныеПодсистемы.ЗапретРедактированияРеквизитовОбъектов") Тогда - МодульЗапретРедактированияРеквизитовОбъектовСлужебный = ОбщийМодуль("ЗапретРедактированияРеквизитовОбъектовСлужебный"); - Возврат МодульЗапретРедактированияРеквизитовОбъектовСлужебный.ЗапретРедактированияПредусмотрен(ИмяОбъекта); + МодульЗапретРедактированияРеквизитовОбъектов = ОбщийМодуль("ЗапретРедактированияРеквизитовОбъектов"); + Возврат МодульЗапретРедактированияРеквизитовОбъектов.БлокируемыеРеквизитыОбъекта(ИмяОбъекта); КонецЕсли; - Возврат Ложь; + Возврат Новый Массив; КонецФункции &НаСервере Функция ЗаблокированныеРеквизиты() + Результат = Новый Массив; Для Каждого ВидОбъектов Из СтрРазделить(ВидыИзменяемыхОбъектов, ",", Ложь) Цикл Если ВерсияБСПСоответствуетТребованиям() Тогда - Если ЗапретРедактированияПредусмотрен(ВидОбъектов) Тогда - МенеджерОбъекта = МенеджерОбъектаПоПолномуИмени(ВидОбъектов); - БлокируемыеРеквизитыОписание = МенеджерОбъекта.ПолучитьБлокируемыеРеквизитыОбъекта(); - КонецЕсли; - Иначе - // В конфигурациях без БСП или на старых версиях БСП, пытаемся определить, - // есть ли у объекта блокируемые реквизиты (подсистема "Запрет редактирования реквизитов объектов"). - МенеджерОбъекта = МенеджерОбъектаПоПолномуИмени(ВидОбъектов); - Попытка - БлокируемыеРеквизитыОписание = МенеджерОбъекта.ПолучитьБлокируемыеРеквизитыОбъекта(); - Исключение - // метод не найден - БлокируемыеРеквизитыОписание = Неопределено; - КонецПопытки; + Для Каждого Реквизит Из БлокируемыеРеквизитыОбъекта(ВидОбъектов) Цикл + Если Результат.Найти(Реквизит) = Неопределено Тогда + Результат.Добавить(Реквизит); + КонецЕсли; + КонецЦикла; + Продолжить; КонецЕсли; + + // В конфигурациях без БСП или на старых версиях БСП, пытаемся определить, + // есть ли у объекта блокируемые реквизиты (подсистема "Запрет редактирования реквизитов объектов"). + МенеджерОбъекта = МенеджерОбъектаПоПолномуИмени(ВидОбъектов); + Попытка + БлокируемыеРеквизитыОписание = МенеджерОбъекта.ПолучитьБлокируемыеРеквизитыОбъекта(); + Исключение + // метод не найден + БлокируемыеРеквизитыОписание = Неопределено; + КонецПопытки; Если БлокируемыеРеквизитыОписание <> Неопределено Тогда Для Каждого БлокируемыйРеквизитОписание Из БлокируемыеРеквизитыОписание Цикл @@ -1858,6 +1860,7 @@ КонецЦикла; Возврат Результат; + КонецФункции &НаСервереБезКонтекста @@ -2704,76 +2707,77 @@ КонецЕсли; КонецЦикла; - Пояснение = ""; - Если ИзменяемыеРеквизиты.Количество() > 3 Тогда - Пояснение = "(" + ИзменяемыеРеквизиты.Количество() +")"; + Если Не ЕстьВыбранныеОбъекты() Тогда + Пояснение = НСтр("ru = 'Не выбраны элементы, реквизиты которых необходимо изменить.'"); Иначе - Для Каждого Реквизит Из ИзменяемыеРеквизиты Цикл - Если Не ПустаяСтрока(Пояснение) Тогда - Пояснение = Пояснение + ", "; - КонецЕсли; - Пояснение = Пояснение + """" + Реквизит + """"; - КонецЦикла; - КонецЕсли; - - Если ИзменяемыеРеквизиты.Количество() = 1 Тогда - Пояснение = НСтр("ru = 'реквизит'") + " " + Пояснение; - ИначеЕсли ИзменяемыеРеквизиты.Количество() > 1 Тогда - Пояснение = НСтр("ru = 'реквизиты'") + " " + Пояснение; - КонецЕсли; - - Если Не ПустаяСтрока(Пояснение) Тогда - Пояснение = Пояснение + " " + НСтр("ru = 'в выбранных элементах'"); - КонецЕсли; - - Для Каждого ТабличнаяЧасть Из ИзменяемыеТабличныеЧасти Цикл - ИзменяемыеРеквизиты = ТабличнаяЧасть.Значение; + Если ИзменяемыеРеквизиты.Количество() = 1 Тогда + ШаблонПояснения = НСтр("ru = 'Изменить реквизит %1 в выбранных элементах'") // например, "Изменить реквизит ""Склад""..." + ИначеЕсли ИзменяемыеРеквизиты.Количество() > 3 Тогда + ШаблонПояснения = НСтр("ru = 'Изменить реквизиты (%1) в выбранных элементах'"); // например, "Изменить реквизиты (5)..." + ИначеЕсли ИзменяемыеРеквизиты.Количество() > 1 Тогда + ШаблонПояснения = НСтр("ru = 'Изменить реквизиты %1 в выбранных элементах'"); // например, "Изменить реквизиты ""Склад"", ""Офис""..." + Иначе + ШаблонПояснения = ""; + КонецЕсли; + Если ИзменяемыеРеквизиты.Количество() > 3 Тогда + Пояснение = ПодставитьПараметрыВСтроку(ШаблонПояснения, ИзменяемыеРеквизиты.Количество()); + ИначеЕсли ИзменяемыеРеквизиты.Количество() > 0 Тогда + Пояснение = ПодставитьПараметрыВСтроку(ШаблонПояснения, ИменаРеквизитов(ИзменяемыеРеквизиты)); + Иначе + Пояснение = ""; + КонецЕсли; + + Для Каждого ТабличнаяЧасть Из ИзменяемыеТабличныеЧасти Цикл + + ИзменяемыеРеквизиты = ТабличнаяЧасть.Значение; + Если ИзменяемыеРеквизиты.Количество() = 0 Тогда + Продолжить; + КонецЕсли; + + Если ИзменяемыеРеквизиты.Количество() = 1 Тогда + ШаблонПояснения = ?(ПустаяСтрока(Пояснение), + НСтр("ru = 'Изменить реквизит %1 в табличной части ""%2""'"), + НСтр("ru = 'реквизит %1 в табличной части ""%2""'")); + ИначеЕсли ИзменяемыеРеквизиты.Количество() > 3 Тогда + ШаблонПояснения = ?(ПустаяСтрока(Пояснение), + НСтр("ru = 'Изменить реквизиты (%1) в табличной части ""%2""'"), + НСтр("ru = 'реквизиты (%1) в табличной части ""%2""'")); + Иначе + ШаблонПояснения = ?(ПустаяСтрока(Пояснение), + НСтр("ru = 'Изменить реквизиты %1 в табличной части ""%2""'"), + НСтр("ru = 'реквизиты %1 в табличной части ""%2""'")); + КонецЕсли; + Если Не ПустаяСтрока(Пояснение) Тогда Пояснение = Пояснение + ", "; КонецЕсли; - Пояснение = Пояснение + ПодставитьПараметрыВСтроку(НСтр("ru = 'реквизиты (%1)'"), ИзменяемыеРеквизиты.Количество()); - Иначе - Для Каждого Реквизит Из ИзменяемыеРеквизиты Цикл - Если Не ПустаяСтрока(Пояснение) Тогда - Пояснение = Пояснение + ", "; - КонецЕсли; - Если ИзменяемыеРеквизиты.Найти(Реквизит) = 0 Тогда - Если ИзменяемыеРеквизиты.Количество() = 1 Тогда - Пояснение = Пояснение + НСтр("ru = 'реквизит'") + " "; - ИначеЕсли ИзменяемыеРеквизиты.Количество() > 1 Тогда - Пояснение = Пояснение + НСтр("ru = 'реквизиты'") + " "; - КонецЕсли; - КонецЕсли; - Пояснение = Пояснение + """" + Реквизит + """"; - КонецЦикла; - КонецЕсли; - Пояснение = Пояснение + " " - + ПодставитьПараметрыВСтроку(НСтр("ru = 'в табличной части ""%1""'"), ТабличнаяЧасть.Ключ); - КонецЦикла; - - Если Не ПустаяСтрока(Пояснение) Тогда - Если ИзменяемыеТабличныеЧасти.Количество() > 0 Тогда - Если ЕстьОтборПоСтрокам Тогда - Пояснение = Пояснение + " " + НСтр("ru = 'в тех строках выбранных элементов, которые удовлетворяют условиям отбора'") + Если ИзменяемыеРеквизиты.Количество() > 3 Тогда + Пояснение = Пояснение + ПодставитьПараметрыВСтроку(ШаблонПояснения, + ИзменяемыеРеквизиты.Количество(), ТабличнаяЧасть.Ключ); Иначе - Пояснение = Пояснение + " " + НСтр("ru = 'во всех строках выбранных элементов'") + Пояснение = Пояснение + ПодставитьПараметрыВСтроку(ШаблонПояснения, + ИменаРеквизитов(ИзменяемыеРеквизиты), ТабличнаяЧасть.Ключ); КонецЕсли; - КонецЕсли; - КонецЕсли; - - Если ЕстьВыбранныеОбъекты() Тогда + КонецЦикла; + Если Не ПустаяСтрока(Пояснение) Тогда - Пояснение = НСтр("ru = 'Изменить'") + " " + Пояснение + "."; + Пояснение = Пояснение + "."; + Если ИзменяемыеТабличныеЧасти.Количество() > 0 Тогда + Если ЕстьОтборПоСтрокам Тогда + Пояснение = Пояснение + " " + + НСтр("ru = 'Изменения будут выполнены в тех строках выбранных элементов, которые удовлетворяют условиям отбора.'") + Иначе + Пояснение = Пояснение + " " + + НСтр("ru = 'Изменения будут выполнены во всех строках выбранных элементов.'") + КонецЕсли; + КонецЕсли; Иначе Пояснение = НСтр("ru = 'Выполнить перезапись выбранных элементов.'"); КонецЕсли; - Иначе - Пояснение = НСтр("ru = 'Не выбраны элементы, реквизиты которых необходимо изменить.'"); КонецЕсли; Элементы.ПояснениеОНастроенныхИзменениях.Заголовок = ФорматированнаяСтрока(Пояснение); - Если ПустаяСтрока(КодАлгоритма) Тогда КодАлгоритма = "// Доступные переменные: |// Объект - обрабатываемый объект" + Символы.ПС; @@ -2781,6 +2785,20 @@ КонецПроцедуры +&НаСервере +Функция ИменаРеквизитов(Знач ИзменяемыеРеквизиты) + + ИменаРеквизитов = ""; + Для Каждого Реквизит Из ИзменяемыеРеквизиты Цикл + Если Не ПустаяСтрока(ИменаРеквизитов) Тогда + ИменаРеквизитов = ИменаРеквизитов + ", "; + КонецЕсли; + ИменаРеквизитов = ИменаРеквизитов + """" + Реквизит + """"; + КонецЦикла; + Возврат ИменаРеквизитов; + +КонецФункции + &НаСервере Функция ЕстьВыбранныеОбъекты() НастройкиОтбора = НастройкиОтбора(); @@ -3251,8 +3269,8 @@ // например, "Справочник.Организации". // // Возвращаемое значение: -// СправочникМенеджер, ДокументМенеджер, ... -// +// СправочникМенеджер - , ДокументМенеджер, ... +// &НаСервереБезКонтекста Функция МенеджерОбъектаПоПолномуИмени(ПолноеИмя) Перем КлассОМ, ИмяОМ, Менеджер; @@ -3359,11 +3377,11 @@ // Не обрабатываются точки маршрутов бизнес-процессов. // // Параметры: -// Ссылка - ссылка на объект, - элемент справочника, документ, ... +// Ссылка - ссылка на объект - элемент справочника, документ, ... // // Возвращаемое значение: // Строка - имя вида объектов метаданных, например, "Справочник", "Документ" ... -// +// &НаСервереБезКонтекста Функция ВидОбъектаПоСсылке(Ссылка) @@ -3412,7 +3430,7 @@ Возврат "Перечисление"; Иначе - ВызватьИсключение ПодставитьПараметрыВСтроку(НСтр("ru='Неверный тип значения параметра (%1)'"), Строка(Тип)); + ВызватьИсключение ПодставитьПараметрыВСтроку(НСтр("ru = 'Неверный тип значения параметра (%1)'"), Строка(Тип)); КонецЕсли; @@ -3424,7 +3442,7 @@ // Объект - Объект, Ссылка, ДанныеФормыСтруктура по типу Объект. // // Возвращаемое значение: -// Булево. +// Булево - // &НаСервереБезКонтекста Функция ОбъектЯвляетсяГруппой(Объект) @@ -3465,9 +3483,9 @@ // // Параметры: // ОбъектМетаданных - объект метаданных, для которого необходимо определить принадлежность к заданному типу. -// +// // Возвращаемое значение: -// Булево. +// Булево - // &НаСервереБезКонтекста Функция ЭтоСправочник(ОбъектМетаданных) @@ -3498,7 +3516,7 @@ // Проверить, что значение имеет ссылочный тип данных. // // Параметры: -// Значение - ссылка на объект, - элемент справочника, документ, ... +// Значение - ссылка на объект - элемент справочника, документ, ... // // Возвращаемое значение: // Булево - Истина, если тип значения ссылочный. @@ -3558,9 +3576,9 @@ // // Параметры: // ОбъектМетаданных - объект метаданных, для которого необходимо определить принадлежность к заданному типу. -// +// // Возвращаемое значение: -// Булево. +// Булево - // &НаСервереБезКонтекста Функция ЭтоПланВидовХарактеристик(ОбъектМетаданных) @@ -3642,7 +3660,7 @@ // Возвращает значение для идентификации общего типа "Регистры сведений". // // Возвращаемое значение: -// Строка. +// Строка - . // &НаСервереБезКонтекста Функция ИмяТипаРегистрыСведений() @@ -3654,7 +3672,7 @@ // Возвращает значение для идентификации общего типа "Регистры накопления". // // Возвращаемое значение: -// Строка. +// Строка - . // &НаСервереБезКонтекста Функция ИмяТипаРегистрыНакопления() @@ -3666,7 +3684,7 @@ // Возвращает значение для идентификации общего типа "Регистры бухгалтерии". // // Возвращаемое значение: -// Строка. +// Строка - . // &НаСервереБезКонтекста Функция ИмяТипаРегистрыБухгалтерии() @@ -3678,7 +3696,7 @@ // Возвращает значение для идентификации общего типа "Регистры расчета". // // Возвращаемое значение: -// Строка. +// Строка - . // &НаСервереБезКонтекста Функция ИмяТипаРегистрыРасчета() @@ -3690,7 +3708,7 @@ // Возвращает значение для идентификации общего типа "Документы". // // Возвращаемое значение: -// Строка. +// Строка - . // &НаСервереБезКонтекста Функция ИмяТипаДокументы() @@ -3702,7 +3720,7 @@ // Возвращает значение для идентификации общего типа "Справочники". // // Возвращаемое значение: -// Строка. +// Строка - . // &НаСервереБезКонтекста Функция ИмяТипаСправочники() @@ -3714,7 +3732,7 @@ // Возвращает значение для идентификации общего типа "Перечисления". // // Возвращаемое значение: -// Строка. +// Строка - . // &НаСервереБезКонтекста Функция ИмяТипаПеречисления() @@ -3726,7 +3744,7 @@ // Возвращает значение для идентификации общего типа "ПланыОбмена". // // Возвращаемое значение: -// Строка. +// Строка - . // &НаСервереБезКонтекста Функция ИмяТипаПланыОбмена() @@ -3738,7 +3756,7 @@ // Возвращает значение для идентификации общего типа "Планы видов характеристик". // // Возвращаемое значение: -// Строка. +// Строка - . // &НаСервереБезКонтекста Функция ИмяТипаПланыВидовХарактеристик() @@ -3750,7 +3768,7 @@ // Возвращает значение для идентификации общего типа "Бизнес-процессы". // // Возвращаемое значение: -// Строка. +// Строка - . // &НаСервереБезКонтекста Функция ИмяТипаБизнесПроцессы() @@ -3762,7 +3780,7 @@ // Возвращает значение для идентификации общего типа "Задачи". // // Возвращаемое значение: -// Строка. +// Строка - . // &НаСервереБезКонтекста Функция ИмяТипаЗадачи() @@ -3774,7 +3792,7 @@ // Возвращает значение для идентификации общего типа "Планы счетов". // // Возвращаемое значение: -// Строка. +// Строка - . // &НаСервереБезКонтекста Функция ИмяТипаПланыСчетов() @@ -3786,7 +3804,7 @@ // Возвращает значение для идентификации общего типа "Планы видов расчета". // // Возвращаемое значение: -// Строка. +// Строка - . // &НаСервереБезКонтекста Функция ИмяТипаПланыВидовРасчета() @@ -3798,7 +3816,7 @@ // Возвращает значение для идентификации общего типа "Константы". // // Возвращаемое значение: -// Строка. +// Строка - . // &НаСервереБезКонтекста Функция ИмяТипаКонстанты() @@ -3810,7 +3828,7 @@ // Возвращает значение для идентификации общего типа "Журналы документов". // // Возвращаемое значение: -// Строка. +// Строка - . // &НаСервереБезКонтекста Функция ИмяТипаЖурналыДокументов() @@ -3822,7 +3840,7 @@ // Возвращает значение для идентификации общего типа "Последовательности". // // Возвращаемое значение: -// Строка. +// Строка - . // &НаСервереБезКонтекста Функция ИмяТипаПоследовательности() @@ -3834,7 +3852,7 @@ // Возвращает значение для идентификации общего типа "РегламентныеЗадания". // // Возвращаемое значение: -// Строка. +// Строка - . // &НаСервереБезКонтекста Функция ИмяТипаРегламентныеЗадания() @@ -3924,18 +3942,18 @@ КонецФункции // Возвращает значение реквизита, прочитанного из информационной базы по ссылке на объект. -// +// // Если доступа к реквизиту нет, возникнет исключение прав доступа. // Если необходимо зачитать реквизит независимо от прав текущего пользователя, // то следует использовать предварительный переход в привилегированный режим. -// +// // Параметры: -// Ссылка - ссылка на объект, - элемент справочника, документ, ... +// Ссылка - ссылка на объект - элемент справочника, документ, ... // ИмяРеквизита - Строка, например, "Код". -// +// // Возвращаемое значение: // Произвольный - зависит от типа значения прочитанного реквизита. -// +// &НаСервереБезКонтекста Функция ЗначениеРеквизитаОбъекта(Ссылка, ИмяРеквизита) @@ -3952,7 +3970,7 @@ // "ОбщегоНазначенияКлиент". // // Возвращаемое значение: -// ОбщийМодуль. +// ОбщийМодуль - . // &НаКлиентеНаСервереБезКонтекста Функция ОбщийМодуль(Имя) @@ -3992,7 +4010,7 @@ // КонецЕсли; // // Возвращаемое значение: -// Булево. +// Булево - // &НаСервере Функция ПодсистемаСуществует(ПолноеИмяПодсистемы) @@ -4197,8 +4215,10 @@ // Не рекомендуется использовать для преобразования таблиц значений // с большим количеством строк. // -// Параметры: ТаблицаЗначений -// Возвращаемое значение: Массив. +// Параметры: +// ТаблицаЗначений +// Возвращаемое значение: +// Массив - . // &НаСервереБезКонтекста Функция ТаблицаЗначенийВМассив(ТаблицаЗначений) @@ -4231,7 +4251,7 @@ // Минимальная версия программы 1.1. Обновите программу. // // Возвращаемое значение: -// ФорматированнаяСтрока +// ФорматированнаяСтрока - &НаСервереБезКонтекста Функция ФорматированнаяСтрока(Знач Строка) @@ -4373,7 +4393,7 @@ // Возвращает признак наличия в конфигурации общих реквизитов-разделителей. // // Возвращаемое значение: -// Булево. +// Булево - // &НаСервереБезКонтекста Функция ЭтоРазделеннаяКонфигурация() diff --git a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/ObjectModule.bsl b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/ObjectModule.bsl index bacef2937..109a4c63b 100644 --- a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/ObjectModule.bsl @@ -244,7 +244,7 @@ Если ОстанавливатьИзменениеПриОшибке = Неопределено Тогда ОстанавливатьИзменениеПриОшибке = Параметры.ПрерыватьПриОшибке; КонецЕсли; - ПроверятьНаГруппу = ПроверятьНаГруппу(ОбрабатываемыеОбъекты[0].Ссылка); + ЗаписатьОшибку = Истина; Ссылка = Неопределено; ВыполнятьКодАлгоритмаВБезопасномРежиме = (Параметры.РежимВыполнения <> 1); @@ -256,9 +256,11 @@ Попытка Если Параметры.ИзменятьВТранзакции Тогда + Блокировка = Новый БлокировкаДанных; Для Каждого ДанныеОбъекта Из ОбрабатываемыеОбъекты Цикл - ЗаблокироватьСсылку(ДанныеОбъекта.Ссылка); + ЗаблокироватьСсылку(Блокировка, ДанныеОбъекта.Ссылка); КонецЦикла; + Блокировка.Заблокировать(); КонецЕсли; Для Каждого ДанныеОбъекта Из ОбрабатываемыеОбъекты Цикл @@ -269,7 +271,9 @@ Ссылка = ДанныеОбъекта.Ссылка; Если Не Параметры.ИзменятьВТранзакции Тогда - ЗаблокироватьСсылку(Ссылка); + Блокировка = Новый БлокировкаДанных; + ЗаблокироватьСсылку(Блокировка, Ссылка); + Блокировка.Заблокировать(); КонецЕсли; ИзменяемыйОбъект = Ссылка.ПолучитьОбъект(); @@ -278,7 +282,7 @@ Если Параметры.ТипОперации = "ВыполнитьАлгоритм" Тогда ВыполнитьКодАлгоритма(ИзменяемыйОбъект, Параметры.КодАлгоритма, ВыполнятьКодАлгоритмаВБезопасномРежиме); Иначе - Изменения = ВнестиИзменения(ДанныеОбъекта, ИзменяемыйОбъект, Параметры, ПроверятьНаГруппу); + Изменения = ВнестиИзменения(ДанныеОбъекта, ИзменяемыйОбъект, Параметры); КонецЕсли; // Режим записи. @@ -366,17 +370,15 @@ КонецПроцедуры -Процедура ЗаблокироватьСсылку(Знач Ссылка) +Процедура ЗаблокироватьСсылку(Знач Блокировка, Знач Ссылка) ЗаблокироватьДанныеДляРедактирования(Ссылка); - Блокировка = Новый БлокировкаДанных; ЭлементБлокировки = Блокировка.Добавить(ВидОбъектаПоСсылке(Ссылка) + "." + Ссылка.Метаданные().Имя); ЭлементБлокировки.УстановитьЗначение("Ссылка", Ссылка); - Блокировка.Заблокировать(); КонецПроцедуры -Функция ВнестиИзменения(Знач ДанныеОбъекта, Знач ИзменяемыйОбъект, Знач Параметры, Знач ПроверятьНаГруппу) +Функция ВнестиИзменения(Знач ДанныеОбъекта, Знач ИзменяемыйОбъект, Знач Параметры) Результат = Новый Структура; Результат.Вставить("ИзменяемыеРеквизитыОбъекта", Новый Массив); @@ -389,11 +391,9 @@ Значение = ВычислитьВыражение(Операция.Значение, ИзменяемыйОбъект, Параметры.ДоступныеРеквизиты); Если Операция.ВидОперации = 1 Тогда // изменение реквизита - // Для групп не устанавливаем реквизиты, которых у них нет. - Если ПроверятьНаГруппу И ИзменяемыйОбъект.ЭтоГруппа Тогда - Если НЕ ЭтоСтандартныйРеквизит(ИзменяемыйОбъект.Метаданные().СтандартныеРеквизиты, Операция.Имя) Тогда - Продолжить; - КонецЕсли; + + Если ИзменяемыйОбъект[Операция.Имя] = Null Тогда + Продолжить; КонецЕсли; ИзменяемыйОбъект[Операция.Имя] = Значение; @@ -481,7 +481,7 @@ // Возвращает признак наличия в конфигурации общих реквизитов-разделителей. // // Возвращаемое значение: -// Булево. +// Булево - // Функция ЭтоРазделеннаяКонфигурация() @@ -590,23 +590,6 @@ Возврат "ДопСведение_"; КонецФункции -Функция ПроверятьНаГруппу(Ссылка) - - ВидОбъекта = ВидОбъектаПоСсылке(Ссылка); - МетаданныеОбъекта = Ссылка.Метаданные(); - - Если ВидОбъекта = "Справочник" - И МетаданныеОбъекта.Иерархический - И МетаданныеОбъекта.ВидИерархии = Метаданные.СвойстваОбъектов.ВидИерархии.ИерархияГруппИЭлементов Тогда - - Возврат Истина; - - КонецЕсли; - - Возврат Ложь; - -КонецФункции - Процедура ВнестиИзмененияВТабличныеЧасти(ИзменяемыйОбъект, ДанныеОбъекта, ИзмененияВТабличныхЧастях) Для Каждого ИзмененияТабличнойЧасти Из ИзмененияВТабличныхЧастях Цикл @@ -772,7 +755,7 @@ КонецЕсли; ВерсияБСП = МодульСтандартныеПодсистемыСервер.ВерсияБиблиотеки(); - Возврат СравнитьВерсии(ВерсияБСП, "3.0.1.1") >= 0; + Возврат СравнитьВерсии(ВерсияБСП, "3.1.2.45") >= 0; КонецФункции @@ -977,38 +960,17 @@ //////////////////////////////////////////////////////////////////////////////// // Процедуры и функции из базовой функциональности для обеспечения автономности. -// Возвращает признак того, что реквизит входит в подмножество стандартных реквизитов. -// -// Параметры: -// СтандартныеРеквизиты - ОписанияСтандартныхРеквизитов - тип и значение описывает коллекцию настроек различных -// стандартных реквизитов; -// ИмяРеквизита - Строка - реквизит который необходимо проверить на принадлежность множеству стандартных реквизитов; -// -// Возвращаемое значение: -// Булево. -// -Функция ЭтоСтандартныйРеквизит(СтандартныеРеквизиты, ИмяРеквизита) Экспорт - - Для Каждого Реквизит Из СтандартныеРеквизиты Цикл - Если Реквизит.Имя = ИмяРеквизита Тогда - Возврат Истина; - КонецЕсли; - КонецЦикла; - Возврат Ложь; - -КонецФункции - // Функция ВидОбъектаПоСсылке возвращает имя вида объектов метаданных // по ссылке на объект. // // Не обрабатываются точки маршрутов бизнес-процессов. // // Параметры: -// Ссылка - ссылка на объект, - элемент справочника, документ, ... +// Ссылка - ссылка на объект - элемент справочника, документ, ... // // Возвращаемое значение: // Строка - имя вида объектов метаданных, например, "Справочник", "Документ" ... -// +// Функция ВидОбъектаПоСсылке(Ссылка) Экспорт Возврат ВидОбъектаПоТипу(ТипЗнч(Ссылка)); @@ -1055,7 +1017,7 @@ Возврат "Перечисление"; Иначе - ВызватьИсключение ПодставитьПараметрыВСтроку(НСтр("ru='Неверный тип значения параметра (%1)'"), Строка(Тип)); + ВызватьИсключение ПодставитьПараметрыВСтроку(НСтр("ru = 'Неверный тип значения параметра (%1)'"), Строка(Тип)); КонецЕсли; @@ -1067,7 +1029,7 @@ // Объект - Объект, Ссылка, ДанныеФормыСтруктура по типу Объект. // // Возвращаемое значение: -// Булево. +// Булево - // Функция ОбъектЯвляетсяГруппой(Объект) Экспорт @@ -1106,7 +1068,7 @@ // Проверить, что значение имеет ссылочный тип данных. // // Параметры: -// Значение - ссылка на объект, - элемент справочника, документ, ... +// Значение - ссылка на объект - элемент справочника, документ, ... // // Возвращаемое значение: // Булево - Истина, если тип значения ссылочный. @@ -1241,18 +1203,18 @@ КонецФункции // Возвращает значение реквизита, прочитанного из информационной базы по ссылке на объект. -// +// // Если доступа к реквизиту нет, возникнет исключение прав доступа. // Если необходимо зачитать реквизит независимо от прав текущего пользователя, // то следует использовать предварительный переход в привилегированный режим. -// +// // Параметры: -// Ссылка - ссылка на объект, - элемент справочника, документ, ... +// Ссылка - ссылка на объект - элемент справочника, документ, ... // ИмяРеквизита - Строка, например, "Код". -// +// // Возвращаемое значение: // Произвольный - зависит от типа значения прочитанного реквизита. -// +// Функция ЗначениеРеквизитаОбъекта(Ссылка, ИмяРеквизита) Экспорт Результат = ЗначенияРеквизитовОбъекта(Ссылка, ИмяРеквизита); @@ -1274,7 +1236,7 @@ // КонецЕсли; // // Возвращаемое значение: -// Булево. +// Булево - // Функция ПодсистемаСуществует(ПолноеИмяПодсистемы) Экспорт @@ -1316,7 +1278,7 @@ // "ОбщегоНазначенияКлиент". // // Возвращаемое значение: -// ОбщийМодуль. +// ОбщийМодуль - . // Функция ОбщийМодуль(Имя) Экспорт @@ -1384,7 +1346,8 @@ // Возвращает массив существующих в конфигурации разделителей. // -// Возвращаемое значение: ФиксированныйМассив(Строка) - массив имен общих реквизитов, которые +// Возвращаемое значение: +// ФиксированныйМассив Из Строка - массив имен общих реквизитов, которые // являются разделителями. // Функция РазделителиКонфигурации() Экспорт diff --git a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/ГрупповоеИзменениеРеквизитов.mdo b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/ГрупповоеИзменениеРеквизитов.mdo index 115d637e5..a23a76800 100644 --- a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/ГрупповоеИзменениеРеквизитов.mdo +++ b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/ГрупповоеИзменениеРеквизитов.mdo @@ -59,7 +59,7 @@ ru - У изменяемых объектов есть дополнительные реквизиты + У изменяемых объектов есть дополнительные реквизиты. @@ -75,7 +75,7 @@ ru - У изменяемых объектов есть дополнительные сведения + У изменяемых объектов есть дополнительные сведения. @@ -126,7 +126,7 @@ ru - Определяет режим работы с через ввод новых + Способ обработки выбранных элементов. diff --git a/SSL/src/DataProcessors/ДоступныеАнкеты/Forms/АрхивАнкет/Form.form b/SSL/src/DataProcessors/ДоступныеАнкеты/Forms/АрхивАнкет/Form.form index 20b55c296..1ba2b9926 100644 --- a/SSL/src/DataProcessors/ДоступныеАнкеты/Forms/АрхивАнкет/Form.form +++ b/SSL/src/DataProcessors/ДоступныеАнкеты/Forms/АрхивАнкет/Form.form @@ -38,10 +38,6 @@ ОтвеченныеАнкеты 1 - - <key>ru</key> - <value>Отвеченные анкеты</value> - true true diff --git a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ЖурналРегистрации/Form.form b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ЖурналРегистрации/Form.form index 7e007b5d6..4e812816e 100644 --- a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ЖурналРегистрации/Form.form +++ b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ЖурналРегистрации/Form.form @@ -292,7 +292,7 @@ 48 <key>ru</key> - <value>Журнал событий</value> + <value>Журнал</value> true true @@ -2173,7 +2173,7 @@ Журнал <key>ru</key> - <value>Журнал событий</value> + <value>Журнал</value> 4 diff --git a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ОтборЖурналаРегистрации/Module.bsl b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ОтборЖурналаРегистрации/Module.bsl index 6ba13c3a9..5357d3066 100644 --- a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ОтборЖурналаРегистрации/Module.bsl +++ b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ОтборЖурналаРегистрации/Module.bsl @@ -19,8 +19,6 @@ СобытияОтображаемые = События.Скопировать(); КонецЕсли; - СтандартныеПодсистемыСервер.УстановитьОтображениеЗаголовковГрупп(ЭтотОбъект, "ГруппаДанные, ГруппаТранзакции, ГруппаПрочее"); - Элементы.РазделениеДанныхСеанса.Видимость = Не ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных(); КонецПроцедуры diff --git a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/РедакторСоставаСвойства/Form.form b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/РедакторСоставаСвойства/Form.form index 76950eda7..8c2437ac6 100644 --- a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/РедакторСоставаСвойства/Form.form +++ b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/РедакторСоставаСвойства/Form.form @@ -7,10 +7,6 @@ Список 1 - - <key>ru</key> - <value>Список</value> - true true @@ -385,10 +381,6 @@ true - - <key>ru</key> - <value>Кнопки формы</value> - КнопкиФормыExtendedTooltip 20 @@ -595,6 +587,22 @@
    + + ДобавленныеВетки + 7 + + ValueList + + + true + + + true + + + + + УстановитьВсе diff --git a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/РедакторСоставаСвойства/Module.bsl b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/РедакторСоставаСвойства/Module.bsl index f88c61a4a..1972b633a 100644 --- a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/РедакторСоставаСвойства/Module.bsl +++ b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/РедакторСоставаСвойства/Module.bsl @@ -105,7 +105,7 @@ НовыйЭлемент.Значение = ЭлементСоответствия.Ключ; Если (ОтбираемыеПараметры = "Пользователь" Или ОтбираемыеПараметры = "User") Тогда - // Для пользователей ключем служит имя. + // Для пользователей ключом служит имя. НовыйЭлемент.Значение = ЭлементСоответствия.Значение; НовыйЭлемент.Представление = ЭлементСоответствия.Значение; НовыйЭлемент.ПолноеПредставление = ЭлементСоответствия.Значение; @@ -203,15 +203,19 @@ ИмяВетки = СтрокиПути[СтрокиПути.Количество() - 1]; КонецЕсли; - Для Каждого ЭлементДерева Из ЭлементыДерева Цикл - Если ЭлементДерева.Представление = ИмяВетки Тогда - Если СтрокиПути.Количество() = 1 И Не Рекурсия Тогда - Прервать; + Если ДобавленныеВетки.НайтиПоЗначению(ИмяВетки) <> Неопределено Тогда + Для Каждого ЭлементДерева Из ЭлементыДерева Цикл + Если ЭлементДерева.Представление = ИмяВетки Тогда + Если СтрокиПути.Количество() = 1 И Не Рекурсия Тогда + Прервать; + КонецЕсли; + Возврат ЭлементДерева; КонецЕсли; - Возврат ЭлементДерева; - КонецЕсли; - КонецЦикла; + КонецЦикла; + КонецЕсли; // Не нашли, придется создавать. + ДобавленныеВетки.Добавить(ИмяВетки); + ЭлементДерева = ЭлементыДерева.Добавить(); ЭлементДерева.Представление = ИмяВетки; ЭлементДерева.Пометка = Ложь; @@ -242,13 +246,10 @@ Если ЭлементДерева.ПолучитьЭлементы().Количество() <> 0 Тогда ОтметитьВстречающиесяЭлементы(ЭлементДерева.ПолучитьЭлементы(), РедактируемыйСписок); Иначе - Для Каждого ЭлементСписка Из РедактируемыйСписок Цикл - Если ЭлементДерева.ПолноеПредставление = ЭлементСписка.Представление Тогда - ЭлементДерева.Пометка = Истина; - ПроверитьСостояниеПометкиВетви(ЭлементДерева.ПолучитьРодителя()); - Прервать; - КонецЕсли; - КонецЦикла; + Если РедактируемыйСписок.НайтиПоЗначению(ЭлементДерева.Значение) <> Неопределено Тогда + ЭлементДерева.Пометка = Истина; + ПроверитьСостояниеПометкиВетви(ЭлементДерева.ПолучитьРодителя()); + КонецЕсли; КонецЕсли; КонецЦикла; diff --git a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/Событие/Form.form b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/Событие/Form.form index 730d9b339..1b1a79764 100644 --- a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/Событие/Form.form +++ b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/Событие/Form.form @@ -635,6 +635,7 @@ <extInfo xsi:type="form:InputFieldExtInfo"> <maxWidth>60</maxWidth> <autoMaxHeight>true</autoMaxHeight> + <choiceButton>false</choiceButton> <chooseType>true</chooseType> <typeDomainEnabled>true</typeDomainEnabled> <textEdit>true</textEdit> @@ -2559,10 +2560,7 @@ <value>Данные</value> 7 - - String - - + true @@ -2890,10 +2888,7 @@ Данные - - String - - + Дата diff --git a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/Событие/Module.bsl b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/Событие/Module.bsl index 0f7a27d63..b73212bbc 100644 --- a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/Событие/Module.bsl +++ b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/Событие/Module.bsl @@ -129,8 +129,6 @@ Элементы.РазделениеДанныхСеанса.Видимость = Не ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных(); - СтандартныеПодсистемыСервер.УстановитьОтображениеЗаголовковГрупп(ЭтотОбъект, "ГруппаДанные, ГруппаСобытие, ГруппаСоединение, ГруппаТранзакция"); - КонецПроцедуры #КонецОбласти diff --git a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/ЗагрузкаДанныхИзФайла/Form.form b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/ЗагрузкаДанныхИзФайла/Form.form index 73afa0e96..0c5a79833 100644 --- a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/ЗагрузкаДанныхИзФайла/Form.form +++ b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/ЗагрузкаДанныхИзФайла/Form.form @@ -576,7 +576,7 @@ Для загрузки данных необходимо, сохранить бланк в файл для заполнения в другой программе. Затем загрузить заполненную таблицу в одном из форматов: • Книги Microsoft Excel 97 (.xls) и Excel 2007 (.xlsx) -• Электронные таблицы LibreOffice Сalс (.ods) +• Электронные таблицы LibreOffice Calc (.ods) • Текст с разделителями (.csv) • Табличный документ (.mxl) @@ -2089,13 +2089,6 @@ ru ЧН=0 - - System.DefaultGUIFont - true - false - false - false -
    @@ -2136,13 +2129,6 @@ ru ЧН=0 - - System.DefaultGUIFont - true - false - false - false - true @@ -2215,13 +2201,6 @@ ru ЧН=0 - - System.DefaultGUIFont - true - false - false - false -
    @@ -2262,13 +2241,6 @@ ru ЧН=0 - - System.DefaultGUIFont - true - false - false - false - true diff --git a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/ЗагрузкаДанныхИзФайла/Module.bsl b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/ЗагрузкаДанныхИзФайла/Module.bsl index 1342ed18f..04b8d2d0c 100644 --- a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/ЗагрузкаДанныхИзФайла/Module.bsl +++ b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/ЗагрузкаДанныхИзФайла/Module.bsl @@ -31,7 +31,6 @@ ДополнительныеПараметры = Параметры.ДополнительныеПараметры; УстановитьОформлениеДанных(); - СтандартныеПодсистемыСервер.УстановитьОтображениеЗаголовковГрупп(ЭтотОбъект); УстановитьВидимостьЭлементовФормы(); Если ТипЗагрузки = "ВставкаИзБуфераОбмена" Тогда @@ -626,7 +625,7 @@ Оповещение = Новый ОписаниеОповещения("ПослеВыбораФайлаДляСохранения", ЭтотОбъект); ИмяФайла = СформироватьИмяФайлаДляОбъектаМетаданных(ИмяОбъектаСопоставления); ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение); - ДиалогВыбораФайла.Фильтр = НСтр("ru='Книга Excel 97 (*.xls)|*.xls|Книга Excel 2007 (*.xlsx)|*.xlsx|Электронная таблица OpenDocument (*.ods)|*.ods|Текстовый документ c разделителями (*.csv)|*.csv|Табличный документ (*.mxl)|*.mxl'"); + ДиалогВыбораФайла.Фильтр = НСтр("ru = 'Книга Excel 97 (*.xls)|*.xls|Книга Excel 2007 (*.xlsx)|*.xlsx|Электронная таблица OpenDocument (*.ods)|*.ods|Текстовый документ c разделителями (*.csv)|*.csv|Табличный документ (*.mxl)|*.mxl'"); ДиалогВыбораФайла.Расширение = "xls"; ДиалогВыбораФайла.МножественныйВыбор = Ложь; ДиалогВыбораФайла.ИндексФильтра = 0; @@ -782,7 +781,7 @@ ЗагрузкаДанныхИзФайла.ДобавитьСтатистическуюИнформацию("РежимЗапуска.ЗагрузкаВСправочник." + ИмяОбъектаСопоставления,, ТипЗагрузки); Если ТипЗнч(ОписаниеСтрокиВыбора) = Тип("Структура") И ОписаниеСтрокиВыбора.Свойство("Представление") Тогда - ЭтотОбъект.Заголовок = НСтр("ru='Загрузка данных в справочник'") + " """ +ОписаниеСтрокиВыбора.Представление + """"; + ЭтотОбъект.Заголовок = НСтр("ru = 'Загрузка данных в справочник'") + " """ +ОписаниеСтрокиВыбора.Представление + """"; Иначе ЭтотОбъект.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Загрузка данных в справочник ""%1""'"), ПредставлениеСправочника(ИмяОбъектаСопоставления)); КонецЕсли; @@ -917,14 +916,14 @@ Если ТаблицаСДаннымиПустая() Тогда Если ТипЗагрузки = "ВставкаИзБуфераОбмена" Тогда - ПоказатьПредупреждение(, (НСтр("ru ='Для вставки сопоставленных данных в список, необходимо заполнить текстовое поле.'"))); + ПоказатьПредупреждение(, (НСтр("ru = 'Для вставки сопоставленных данных в список, необходимо заполнить текстовое поле.'"))); Возврат; КонецЕсли; Если ВариантЗагрузки = 0 Тогда - ПоказатьПредупреждение(, (НСтр("ru ='Для сопоставления и загрузки данных, необходимо заполнить таблицу.'"))); + ПоказатьПредупреждение(, (НСтр("ru = 'Для сопоставления и загрузки данных, необходимо заполнить таблицу.'"))); Иначе - ПоказатьПредупреждение(, (НСтр("ru ='Невозможно выполнить сопоставление данных, т.к данные не были загружены в таблицу. + ПоказатьПредупреждение(, (НСтр("ru = 'Невозможно выполнить сопоставление данных, т.к данные не были загружены в таблицу. |Возможно, имена колонок в файле не соответствуют колонкам в бланке.'"))); КонецЕсли; ВыполнитьШагЗаполнениеТаблицыДаннымиНаКлиенте(); @@ -1390,11 +1389,11 @@ Если ТипЗагрузки = "ВставкаИзБуфераОбмена" Тогда - ТекстОбъектНеНайден = НСтр("ru='<Не найден>'"); + ТекстОбъектНеНайден = НСтр("ru = '<Не найден>'"); ЦветОбъектНеНайден = ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет; ЦветНеоднозначность = ЦветаСтиля.ПоясняющийОшибкуТекст; Иначе - ТекстОбъектНеНайден = НСтр("ru='<Новый>'"); + ТекстОбъектНеНайден = НСтр("ru = '<Новый>'"); ЦветОбъектНеНайден = ЦветаСтиля.РезультатУспехЦвет; ЦветНеоднозначность = ЦветаСтиля.ПоясняющийОшибкуТекст; КонецЕсли; @@ -1426,7 +1425,7 @@ ЭлементОтбора.Использование = Истина; ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветНеоднозначность); ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина); - ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru='<неоднозначность>'")); + ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = '<неоднозначность>'")); КонецЦикла; Иначе ЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить(); @@ -1440,7 +1439,7 @@ ЭлементОтбора.Использование = Истина; ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветНеоднозначность); ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина); - ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru='<неоднозначность>'")); + ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = '<неоднозначность>'")); КонецЕсли; @@ -1729,7 +1728,7 @@ ЭлементОтбора.Использование = Истина; ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ПоясняющийОшибкуТекст); ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина); - ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru='<неоднозначность>'")); + ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = '<неоднозначность>'")); КонецЦикла; КонецЕсли; КонецЦикла; @@ -1757,7 +1756,7 @@ Для Каждого Колонка Из Таблица.Колонки Цикл Если СтрНачинаетсяС(Колонка.Имя, "ТЧ_") Тогда ТаблицаДляТЧ.Колонки.Добавить(Сред(Колонка.Имя, СтрДлина("ТЧ_") + 1), Колонка.ТипЗначения, Колонка.Заголовок, Колонка.Ширина); - ИначеЕсли Колонка.Имя = "РезультатСопоставленияСтроки" ИЛИ Колонка.Имя = "ОписаниеОшибки" ИЛИ Колонка.Имя = "Идентификатор" Тогда + ИначеЕсли Колонка.Имя = "РезультатСопоставленияСтроки" ИЛИ Колонка.Имя = "ОписаниеОшибки" ИЛИ Колонка.Имя = "Идентификатор" Тогда ТаблицаДляТЧ.Колонки.Добавить(Колонка.Имя, Колонка.ТипЗначения, Колонка.Заголовок, Колонка.Ширина); КонецЕсли; КонецЦикла; diff --git a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/РедактированиеБланка/Module.bsl b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/РедактированиеБланка/Module.bsl index 2cb1e91ea..fda897df1 100644 --- a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/РедактированиеБланка/Module.bsl +++ b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/РедактированиеБланка/Module.bsl @@ -89,7 +89,7 @@ ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; ЭлементОтбора.ПравоеЗначение =Истина; ЭлементОтбора.Использование = Истина; - ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("Шрифт", Новый Шрифт(,, Истина)); + ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("Шрифт", ШрифтыСтиля.ВажнаяНадписьШрифт); ЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить(); ПолеОформления = ЭлементУсловногоОформления.Поля.Элементы.Добавить(); diff --git a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/ManagerModule.bsl b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/ManagerModule.bsl index 6e4f3eeed..a833568fb 100644 --- a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/ManagerModule.bsl +++ b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/ManagerModule.bsl @@ -301,16 +301,7 @@ Продолжить; КонецЕсли; - СтандартныеСвойства = Новый Структура("ПредставлениеОбъекта, РасширенноеПредставлениеОбъекта, ПредставлениеСписка, РасширенноеПредставлениеСписка"); - ЗаполнитьЗначенияСвойств(СтандартныеСвойства, ОбъектМетаданных); - - Если ЗначениеЗаполнено(СтандартныеСвойства.ПредставлениеОбъекта) Тогда - ПредставлениеЭлемента = СтандартныеСвойства.ПредставлениеОбъекта; - ИначеЕсли ЗначениеЗаполнено(СтандартныеСвойства.РасширенноеПредставлениеОбъекта) Тогда - ПредставлениеЭлемента = СтандартныеСвойства.РасширенноеПредставлениеОбъекта; - Иначе - ПредставлениеЭлемента = ОбъектМетаданных.Представление(); - КонецЕсли; + ПредставлениеЭлемента = ОбщегоНазначения.ПредставлениеОбъекта(ОбъектМетаданных); Если СтрНайти(Представление, ПредставлениеЭлемента) > 0 Тогда ПредставлениеНомерИДата = СокрЛП(Сред(Представление, СтрДлина(ПредставлениеЭлемента) + 1)); @@ -444,7 +435,7 @@ ТипДанных = ТипЗнч(НоваяСтрока[ИмяКолонки]); Если ТипДанных <> Тип("Строка") И ТипДанных <> Тип("Булево") И ТипДанных <> Тип("Число") И ТипДанных <> Тип("Дата") И ТипДанных <> Тип("УникальныйИдентификатор") Тогда - ДанныеЯчейки = ЗначениеЯчейки(Колонка, Ячейка.Текст); + ДанныеЯчейки = ЗначениеЯчейки(Колонка.ТипКолонки.Типы(), Ячейка.Текст); Иначе ДанныеЯчейки = Ячейка.Текст; КонецЕсли; @@ -469,11 +460,16 @@ КонецПроцедуры -Функция ЗначениеЯчейки(Колонка, ЗначениеЯчейки) +Функция ЗначениеЯчейки(Типы, ЗначениеЯчейки) ДанныеЯчейки = ""; - Для каждого ТипДанных Из Колонка.ТипКолонки.Типы() Цикл + Для каждого ТипДанных Из Типы Цикл Объект = Метаданные.НайтиПоТипу(ТипДанных); + + Если Объект = Неопределено Тогда + Продолжить; + КонецЕсли; + ОписаниеОбъекта = РазложитьПолноеИмяОбъекта(Объект.ПолноеИмя()); Если ОписаниеОбъекта.ТипОбъекта = "Справочник" Тогда Если НЕ Объект.Автонумерация И Объект.ДлинаКода > 0 Тогда @@ -537,7 +533,6 @@ КонецПроцедуры - #Область ПодготовкаКЗагрузкеДанных Функция ОбластьЗаголовкаШаблонаТаблицы(Шаблон) @@ -781,7 +776,7 @@ ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ИмяОбъектаМетаданных); Если ОбъектМетаданных = Неопределено Тогда ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru='Загрузка данных из файла в табличную часть не поддерживается для объектов типа: %1'"), + НСтр("ru = 'Загрузка данных из файла в табличную часть не поддерживается для объектов типа: %1'"), ИмяОбъектаМетаданных); ВызватьИсключение ТекстОшибки; КонецЕсли; @@ -971,9 +966,9 @@ Ячейка.ТекущаяОбласть.ШиринаКолонки = Ширина; Ячейка.ТекущаяОбласть.Примечание.Текст = Подсказка; Если ОбязательноеПоле Тогда - Ячейка.ТекущаяОбласть.Шрифт = Новый Шрифт(,,Истина); + Ячейка.ТекущаяОбласть.Шрифт = ШрифтыСтиля.ВажнаяНадписьШрифт; Иначе - Ячейка.ТекущаяОбласть.Шрифт = Новый Шрифт(,,Ложь); + Ячейка.ТекущаяОбласть.Шрифт = Неопределено; КонецЕсли; КонецПроцедуры @@ -1008,7 +1003,12 @@ ОбластьИмяКолонки.Имя = Колонка.ИмяКолонки; ОбластьИмяКолонки.Расшифровка = Колонка.Группа; ОбластьИмяКолонки.Примечание.Текст = Колонка.Примечание; - ОбластьИмяКолонки.Шрифт = ?(Колонка.ОбязательнаДляЗаполнения, Новый Шрифт(,, Истина), Новый Шрифт(,, Ложь)); + Если Колонка.ОбязательнаДляЗаполнения Тогда + ОбластьИмяКолонки.Шрифт = ШрифтыСтиля.ВажнаяНадписьШрифт; + Иначе + ОбластьИмяКолонки.Шрифт = Неопределено; + КонецЕсли; + ОбластьИмяКолонки.ШиринаКолонки = ?(Колонка.Ширина = 0, ШиринаКолонкиПоТипу(Колонка.ТипКолонки), Колонка.Ширина); ОбластьЗаголовок.Параметры.Заголовок = ?(ПустаяСтрока(Колонка.Синоним), Колонка.ПредставлениеКолонки, Колонка.Синоним); ТабличныйДокумент.Присоединить(ОбластьЗаголовок); @@ -1081,6 +1081,9 @@ Если НайденнаяКолонка <> Неопределено Тогда ИмяКолонки = НайденнаяКолонка.ИмяКолонки; НоваяСтрока[ИмяКолонки] = ПриведениеЗначениеКТипу(Ячейка.Текст, НайденнаяКолонка.ТипКолонки); + Если Не ЗначениеЗаполнено(НоваяСтрока[ИмяКолонки]) И ЗначениеЗаполнено(Ячейка.Текст) Тогда + НоваяСтрока[ИмяКолонки] = ЗначениеЯчейки( НайденнаяКолонка.ТипКолонки.Типы(), Ячейка.Текст); + КонецЕсли; Если СтрокаТаблицыПустая Тогда СтрокаТаблицыПустая = Не ЗначениеЗаполнено(Ячейка.Текст); КонецЕсли; @@ -1733,7 +1736,7 @@ Ячейка = ШаблонСДанными.ПолучитьОбласть(1, 1, 1, 1); ШапкаТаблицы = ШаблонСДанными.ПолучитьОбласть("R1"); - ЗаполнитьЯчейкуЗаголовкаМакета(Ячейка, НСтр("ru ='Результат'"), 12, НСтр("ru ='Результат загрузки данных'"), Истина); + ЗаполнитьЯчейкуЗаголовкаМакета(Ячейка, НСтр("ru = 'Результат'"), 12, НСтр("ru = 'Результат загрузки данных'"), Истина); ТаблицаОтчет.Присоединить(ШапкаТаблицы); ТаблицаОтчет.ВставитьОбласть(Ячейка.ТекущаяОбласть, ТаблицаОтчет.Область("C1"), ТипСмещенияТабличногоДокумента.ПоГоризонтали); @@ -1785,7 +1788,7 @@ // Возвращает строковую константу для формирования сообщений журнала регистрации. // // Возвращаемое значение: -// Строка +// Строка - // Функция СобытиеЖурналаРегистрации() diff --git a/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/ПараметрыПрописиВалюты/Form.form b/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/ПараметрыПрописиВалюты/Form.form index 224b0ca6d..51d18d894 100644 --- a/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/ПараметрыПрописиВалюты/Form.form +++ b/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/ПараметрыПрописиВалюты/Form.form @@ -545,10 +545,6 @@ true - - <key>ru</key> - <value>Дробная часть</value> - СклонениеДробнойЧастиРасширеннаяПодсказка 90 @@ -664,10 +660,6 @@ true - - <key>ru</key> - <value>Число разрядов дробной части</value> - ГруппаЧислоРазрядовДробнойЧастиExtendedTooltip 95 diff --git a/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/ПодборВалютИзКлассификатора/Help/ru.html b/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/ПодборВалютИзКлассификатора/Help/ru.html index 589ef0df5..e17bb4573 100644 --- a/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/ПодборВалютИзКлассификатора/Help/ru.html +++ b/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/ПодборВалютИзКлассификатора/Help/ru.html @@ -2,10 +2,10 @@

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

    В Общероссийском классификаторе валют выводится:

    • -
      Код числовой - уникальный числовой код, принят международным стандартом, служит для идентификации валюты при загрузке курсов из сети Интернет (с портала 1С:ИТС).
      +
      Цифр. код - уникальный числовой код, служит для идентификации валюты при загрузке курсов из сети Интернет (с портала 1С:ИТС).
    • -
      Код символьный - принят международным стандартом, используется как краткое наименование и основное представление валюты.
      +
      Симв. код - используется как краткое наименование и основное представление валюты.
    • Наименование валюты - полное наименование.
      diff --git a/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/Форма/Module.bsl index 20559a4df..c18a6652d 100644 --- a/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/Форма/Module.bsl @@ -207,9 +207,23 @@ &НаСервере Процедура СнятьПризнакЗагрузкиИзИнтернета(ВалютаСсылка) - ВалютаОбъект = ВалютаСсылка.ПолучитьОбъект(); - ВалютаОбъект.СпособУстановкиКурса = Перечисления.СпособыУстановкиКурсаВалюты.РучнойВвод; - ВалютаОбъект.Записать(); + НачатьТранзакцию(); + Попытка + ЗаблокироватьДанныеДляРедактирования(ВалютаСсылка); + + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Справочник.Валюты"); + ЭлементБлокировки.УстановитьЗначение("Ссылка", ВалютаСсылка); + Блокировка.Заблокировать(); + + ВалютаОбъект = ВалютаСсылка.ПолучитьОбъект(); + ВалютаОбъект.СпособУстановкиКурса = Перечисления.СпособыУстановкиКурсаВалюты.РучнойВвод; + ВалютаОбъект.Записать(); + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; КонецПроцедуры &НаКлиенте @@ -267,14 +281,14 @@ КоличествоОшибок = 0; - СписокОшибок = Новый ТекстовыйДокумент; + СписокОшибок = Новый Массив; Для Каждого СостояниеЗагрузки Из РезультатЗагрузки Цикл Если СостояниеЗагрузки.СтатусОперации Тогда ЕстьУспешноЗагруженныеКурсы = Истина; Иначе БезОшибок = Ложь; КоличествоОшибок = КоличествоОшибок + 1; - СписокОшибок.ДобавитьСтроку(СокрЛП(СостояниеЗагрузки.Сообщение) + Символы.ПС); + СписокОшибок.Добавить(СокрЛП(СостояниеЗагрузки.Сообщение) + Символы.ПС); КонецЕсли; КонецЦикла; @@ -291,18 +305,19 @@ Если БезОшибок Тогда Закрыть(); + Возврат; + КонецЕсли; + + ПредставлениеОшибки = СокрЛП(СтрСоединить(СписокОшибок, Символы.ПС)); + Если КоличествоОшибок > 1 Тогда + Кнопки = Новый СписокЗначений; + Кнопки.Добавить("Подробнее", НСтр("ru = 'Подробнее...'")); + Кнопки.Добавить("Продолжить", НСтр("ru = 'Продолжить'")); + ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не удалось загрузить курсы валют (%1).'"), КоличествоОшибок); + ОписаниеОповещения = Новый ОписаниеОповещения("ОбработатьРезультатЗагрузкиПриОтветеНаВопрос", ЭтотОбъект, ПредставлениеОшибки); + ПоказатьВопрос(ОписаниеОповещения, ТекстВопроса, Кнопки); Иначе - ПредставлениеОшибки = СокрЛП(СписокОшибок.ПолучитьТекст()); - Если КоличествоОшибок > 1 Тогда - Кнопки = Новый СписокЗначений; - Кнопки.Добавить("Подробнее", НСтр("ru = 'Подробнее...'")); - Кнопки.Добавить("Продолжить", НСтр("ru = 'Продолжить'")); - ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не удалось загрузить курсы валют (%1).'"), КоличествоОшибок); - ОписаниеОповещения = Новый ОписаниеОповещения("ОбработатьРезультатЗагрузкиПриОтветеНаВопрос", ЭтотОбъект, ПредставлениеОшибки); - ПоказатьВопрос(ОписаниеОповещения, ТекстВопроса, Кнопки); - Иначе - ПоказатьПредупреждение(, ПредставлениеОшибки); - КонецЕсли; + ПоказатьПредупреждение(, ПредставлениеОшибки); КонецЕсли; КонецПроцедуры @@ -319,7 +334,7 @@ &НаКлиенте Процедура НачатьЗагрузкуКурсовВалют() Если ТребуетсяНастройкаАвторизацияИнтернетПоддержки() Тогда - ТекстВопроса = НСтр("ru='Для загрузки курсов валют из Интернета + ТекстВопроса = НСтр("ru = 'Для загрузки курсов валют из Интернета |необходимо подключиться к Интернет-поддержке пользователей. |Подключиться сейчас?'"); ОписаниеОповещения = Новый ОписаниеОповещения("ПриПодключенииИнтернетПоддержки", ЭтотОбъект); diff --git a/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Help/ru.html b/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Help/ru.html index 4cafe4f7e..3cc9cdce0 100644 --- a/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Help/ru.html +++ b/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Help/ru.html @@ -9,7 +9,7 @@
    • Список валют - заполняется по умолчанию из списка Валюты только теми валютами, у которых установлен флажок Загружается из интернета. В списке выводится:
      • Загружать - включите флажок для загрузки курсов валюты за указанный период.
      • -
      • Символьный код - принят международным стандартом, используется как основное представление валюты. +
      • Симв. код - используется как основное представление валюты.
      • Валюта - полное наименование валюты.
      • @@ -19,7 +19,7 @@
      • Кратность - количество котировочных единиц, не выводится, если равна 1.
    • в список можно добавить дополнительные поля по команде Еще - Изменить форму: -
      • Цифровой код - уникальный числовой код, принят международным стандартом, служит для идентификации валюты при загрузке курсов из сети Интернет.

    Загрузка курсов выбранных валют 

    +
    • Цифр. код - уникальный числовой код, служит для идентификации валюты при загрузке курсов из сети Интернет.

    Загрузка курсов выбранных валют 

    • Укажите начало и окончание периода для загрузки курсов в полях С и По.
    • diff --git a/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/ManagerModule.bsl b/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/ManagerModule.bsl index f725e9a7b..d0b9ff319 100644 --- a/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/ManagerModule.bsl +++ b/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/ManagerModule.bsl @@ -147,19 +147,13 @@ КонецЕсли; Если ПриЗагрузкеВозниклиОшибки Тогда - ЗаписьЖурналаРегистрации( - ИмяСобытия, - УровеньЖурналаРегистрации.Ошибка, - , - , - НСтр("ru = 'Во время регламентного задания загрузки курсов валют возникли ошибки'")); - ВызватьИсключение НСтр("ru = 'Загрузка курсов не выполнена.'"); + ЗаписьЖурналаРегистрации(ИмяСобытия, УровеньЖурналаРегистрации.Ошибка,,, + НСтр("ru = 'Во время регламентной загрузки курсов валют возникли ошибки'")); + Если ПараметрыЗагрузки = Неопределено Тогда + ВызватьИсключение НСтр("ru = 'Загрузка курсов не выполнена.'"); + КонецЕсли; Иначе - ЗаписьЖурналаРегистрации( - ИмяСобытия, - УровеньЖурналаРегистрации.Информация, - , - , + ЗаписьЖурналаРегистрации(ИмяСобытия, УровеньЖурналаРегистрации.Информация,,, НСтр("ru = 'Завершена регламентная загрузка курсов валют.'")); КонецЕсли; @@ -307,7 +301,7 @@ ПриЗагрузкеВозниклиОшибки = Истина; СтатусОперации = Ложь; ПоясняющееСообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Невозможно получить файл данных с курсами валюты (%1 - %2): + НСтр("ru = 'Невозможно получить файл данных с курсами валюты %2 (код %1): |Курсы данной валюты не предоставляются.'"), Валюта.КодВалюты, Валюта.Валюта); @@ -323,9 +317,9 @@ СтатусОперации = ПустаяСтрока(ПоясняющееСообщение); Иначе ПоясняющееСообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Невозможно получить файл данных с курсами валюты (%1 - %2): + НСтр("ru = 'Невозможно получить файл данных с курсами валюты %2 (код %1): |%3 - |Возможно, нет доступа к веб сайту с курсами валют, либо указана несуществующая валюта.'"), + |Возможно, нет доступа к веб-сайту с курсами валют, либо указана несуществующая валюта.'"), Валюта.КодВалюты, Валюта.Валюта, Результат.СообщениеОбОшибке); @@ -499,7 +493,7 @@ Функция СуммаПрописью(СуммаЧислом, ПараметрыПрописиНаРусскомЯзыке, ВыводитьСуммуБезКопеек = Ложь) Экспорт Сумма = ?(СуммаЧислом < 0, -СуммаЧислом, СуммаЧислом); - Результат = ЧислоПрописью(Сумма, "L=ru_RU;ДП=Ложь", ПараметрыПрописиНаРусскомЯзыке); // всегда на русском языке + Результат = ЧислоПрописью(Сумма, "L=ru_RU;ДП=Ложь", ПараметрыПрописиНаРусскомЯзыке); // АПК:1297 не локализуется и всегда на русском языке Если ВыводитьСуммуБезКопеек И Цел(Сумма) = Сумма Тогда Результат = Лев(Результат, СтрНайти(Результат, "0") - 1); КонецЕсли; diff --git a/SSL/src/DataProcessors/ЗагрузкаПравилРегистрацииОбъектов/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ЗагрузкаПравилРегистрацииОбъектов/Forms/Форма/Module.bsl index 9cf4ad6cb..2141ca4b5 100644 --- a/SSL/src/DataProcessors/ЗагрузкаПравилРегистрацииОбъектов/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ЗагрузкаПравилРегистрацииОбъектов/Forms/Форма/Module.bsl @@ -11,7 +11,7 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - ВызватьИсключение НСтр("ru='Обработка не предназначена для непосредственного использования.'"); + ВызватьИсключение НСтр("ru = 'Обработка не предназначена для непосредственного использования.'"); КонецПроцедуры diff --git a/SSL/src/DataProcessors/ЗагрузкаПравилРегистрацииОбъектов/ObjectModule.bsl b/SSL/src/DataProcessors/ЗагрузкаПравилРегистрацииОбъектов/ObjectModule.bsl index 77068a9d2..0beb56df0 100644 --- a/SSL/src/DataProcessors/ЗагрузкаПравилРегистрацииОбъектов/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ЗагрузкаПравилРегистрацииОбъектов/ObjectModule.bsl @@ -235,8 +235,8 @@ // Осуществляет загрузку правил регистрации в соответствии с форматом правил обмена. // // Параметры: -// Правила - Объект типа XMLЧтение. -// +// Правила - ЧтениеXML - Объект типа ЧтениеXML. +// Процедура ЗагрузитьПравилаРегистрации(Правила) Пока Правила.Прочитать() Цикл @@ -268,8 +268,8 @@ // Осуществляет загрузку правила регистрации объектов. // // Параметры: -// Правила - Объект типа XMLЧтение. -// +// Правила - ЧтениеXML - Объект типа ЧтениеXML. +// Процедура ЗагрузитьПравилоРегистрации(Правила) // Правила с установленным признаком "Отключить" не грузим. @@ -564,8 +564,8 @@ // Осуществляет загрузку группы правил регистрации объекта по свойству. // // Параметры: -// Правила - Объект типа XMLЧтение. -// +// Правила - ЧтениеXML - Объект типа ЧтениеXML. +// Процедура ЗагрузитьГруппуЭлементовОтбораПланаОбмена(Правила, НоваяСтрока) НоваяСтрока.ЭтоГруппа = Истина; @@ -604,8 +604,8 @@ // Осуществляет загрузку группы правил регистрации объекта по свойству. // // Параметры: -// Правила - Объект типа XMLЧтение. -// +// Правила - ЧтениеXML - Объект типа ЧтениеXML. +// Процедура ЗагрузитьГруппуЭлементовОтбораОбъекта(Правила, НоваяСтрока) НоваяСтрока.ЭтоГруппа = Истина; @@ -1038,14 +1038,14 @@ // к указанному примитивному типу. // // Параметры: -// Объект - объект типа XMLЧтение, спозиционированный на начале элемента, +// Объект - объект типа ЧтениеXML, спозиционированный на начале элемента, // атрибут которого требуется получить. -// Тип - Значение типа Тип. Тип атрибута. +// Тип - Значение Тип - типа Тип. Тип атрибута. // Имя - Строка. Имя атрибута. // // Возвращаемое значение: // Значение атрибута полученное по имени и приведенное к указанному типу. -// +// Функция одАтрибут(Объект, Тип, Имя) СтрЗначение = СокрП(Объект.ПолучитьАтрибут(Имя)); @@ -1075,7 +1075,7 @@ // Читает текст элемента и приводит значение к указанному типу. // // Параметры: -// Объект - объект типа XMLЧтение, из которого осуществляется чтение. +// Объект - объект типа ЧтениеXML, из которого осуществляется чтение. // Тип - тип получаемого значения. // ИскатьПоСвойству - для ссылочных типов может быть указано свойство, по которому // следует искать объект: "Код", "Наименование", <ИмяРеквизита>, "Имя" (предопределенного значения). @@ -1115,9 +1115,9 @@ // Пропускает узлы xml до конца указанного элемента (по умолчанию текущего). // // Параметры: -// Объект - объект типа XMLЧтение. +// Объект - объект типа ЧтениеXML. // Имя - имя узла, до конца которого пропускаем элементы. -// +// Процедура одПропустить(Объект, Имя = "") КоличествоВложений = 0; // Количество одноименных вложений. diff --git a/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ЗаменаЭлементов/Module.bsl b/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ЗаменаЭлементов/Module.bsl index ffdbc79d7..fa949c871 100644 --- a/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ЗаменаЭлементов/Module.bsl +++ b/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ЗаменаЭлементов/Module.bsl @@ -354,7 +354,7 @@ ОписаниеШага = Новый Структура("Индекс, ИмяСтраницы, КнопкаНазад, КнопкаДалее, КнопкаОтмена"); ОписаниеШага.ИмяСтраницы = Страница.Имя; ОписаниеШага.КнопкаНазад = КнопкаМастера(); - ОписаниеШага.КнопкаНазад.Заголовок = НСтр("ru='< Назад'"); + ОписаниеШага.КнопкаНазад.Заголовок = НСтр("ru = '< Назад'"); ОписаниеШага.КнопкаДалее = КнопкаМастера(); ОписаниеШага.КнопкаДалее.КнопкаПоУмолчанию = Истина; ОписаниеШага.КнопкаДалее.Заголовок = НСтр("ru = 'Далее >'"); @@ -400,9 +400,9 @@ ИначеЕсли Тип = Тип("Число") Тогда ИндексШага = ШагИлиИндексИлиГруппаФормы; Если ИндексШага < 0 Тогда - ВызватьИсключение НСтр("ru='Попытка выхода назад из первого шага мастера'"); + ВызватьИсключение НСтр("ru = 'Попытка выхода назад из первого шага мастера'"); ИначеЕсли ИндексШага > НастройкиМастера.Шаги.ВГраница() Тогда - ВызватьИсключение НСтр("ru='Попытка выхода за последний шаг мастера'"); + ВызватьИсключение НСтр("ru = 'Попытка выхода за последний шаг мастера'"); КонецЕсли; ОписаниеШага = НастройкиМастера.Шаги[ИндексШага]; Иначе @@ -631,7 +631,7 @@ ПерейтиНаШагМастера(НастройкиМастера.ТекущийШаг.Индекс + 1); КонецПроцедуры -&НаКлиентеНаСервереБезКонтекста +&НаКлиенте Процедура СформироватьЦелевойЭлементИПодсказку(Контекст) ТекущиеДанные = Контекст.Элементы.Список.ТекущиеДанные; @@ -658,7 +658,7 @@ КонецЕсли; ТекстПодсказки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстПодсказки, Контекст.ЦелевойЭлемент); - Контекст.Элементы.ПодсказкаВыбораЦелевогоЭлемента.Заголовок = СтроковыеФункцииКлиентСервер.ФорматированнаяСтрока(ТекстПодсказки); + Контекст.Элементы.ПодсказкаВыбораЦелевогоЭлемента.Заголовок = СтроковыеФункцииКлиент.ФорматированнаяСтрока(ТекстПодсказки); Иначе @@ -676,7 +676,7 @@ КонецЕсли; ТекстПодсказки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстПодсказки, Количество, Контекст.ЦелевойЭлемент); - Контекст.Элементы.ПодсказкаВыбораЦелевогоЭлемента.Заголовок = СтроковыеФункцииКлиентСервер.ФорматированнаяСтрока(ТекстПодсказки); + Контекст.Элементы.ПодсказкаВыбораЦелевогоЭлемента.Заголовок = СтроковыеФункцииКлиент.ФорматированнаяСтрока(ТекстПодсказки); КонецЕсли; diff --git a/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ОбъединениеЭлементов/Form.form b/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ОбъединениеЭлементов/Form.form index 399f40163..c24d2a2a1 100644 --- a/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ОбъединениеЭлементов/Form.form +++ b/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ОбъединениеЭлементов/Form.form @@ -680,8 +680,8 @@ true true true - - 255 + + Style.ИзмененноеЗначениеРеквизитаЦвет Normal diff --git a/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ОбъединениеЭлементов/Module.bsl b/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ОбъединениеЭлементов/Module.bsl index 366baf112..af6ea3e69 100644 --- a/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ОбъединениеЭлементов/Module.bsl +++ b/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ОбъединениеЭлементов/Module.bsl @@ -416,7 +416,7 @@ ОписаниеШага = Новый Структура("Индекс, ИмяСтраницы, КнопкаНазад, КнопкаДалее, КнопкаОтмена"); ОписаниеШага.ИмяСтраницы = Страница.Имя; ОписаниеШага.КнопкаНазад = КнопкаМастера(); - ОписаниеШага.КнопкаНазад.Заголовок = НСтр("ru='< Назад'"); + ОписаниеШага.КнопкаНазад.Заголовок = НСтр("ru = '< Назад'"); ОписаниеШага.КнопкаДалее = КнопкаМастера(); ОписаниеШага.КнопкаДалее.КнопкаПоУмолчанию = Истина; ОписаниеШага.КнопкаДалее.Заголовок = НСтр("ru = 'Далее >'"); @@ -462,9 +462,9 @@ ИначеЕсли Тип = Тип("Число") Тогда ИндексШага = ШагИлиИндексИлиГруппаФормы; Если ИндексШага < 0 Тогда - ВызватьИсключение НСтр("ru='Попытка выхода назад из первого шага мастера'"); + ВызватьИсключение НСтр("ru = 'Попытка выхода назад из первого шага мастера'"); ИначеЕсли ИндексШага > НастройкиМастера.Шаги.ВГраница() Тогда - ВызватьИсключение НСтр("ru='Попытка выхода за последний шаг мастера'"); + ВызватьИсключение НСтр("ru = 'Попытка выхода за последний шаг мастера'"); КонецЕсли; ОписаниеШага = НастройкиМастера.Шаги[ИндексШага]; Иначе @@ -844,9 +844,8 @@ ТекстПодсказки = НСтр("ru = 'Элементы (%1) будут помечены на удаление и заменены во всех местах |использования на ""%2"" (отмечен стрелкой).'"); КонецЕсли; - - ТекстПодсказки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстПодсказки, МестаИспользования.Количество()-1, ОсновнойЭлемент); - Элементы.ПодсказкаВыбораОсновногоЭлемента.Заголовок = СтроковыеФункцииКлиентСервер.ФорматированнаяСтрока(ТекстПодсказки); + + Элементы.ПодсказкаВыбораОсновногоЭлемента.Заголовок = СтроковыеФункции.ФорматированнаяСтрока(ТекстПодсказки, МестаИспользования.Количество()-1, ОсновнойЭлемент); КонецПроцедуры diff --git a/SSL/src/DataProcessors/ЗаполнениеКалендарныхГрафиков/ManagerModule.bsl b/SSL/src/DataProcessors/ЗаполнениеКалендарныхГрафиков/ManagerModule.bsl index fbfa167c1..a99679ac5 100644 --- a/SSL/src/DataProcessors/ЗаполнениеКалендарныхГрафиков/ManagerModule.bsl +++ b/SSL/src/DataProcessors/ЗаполнениеКалендарныхГрафиков/ManagerModule.bsl @@ -45,7 +45,7 @@ Функция ВерсияКалендарей() Экспорт - Возврат 32; + Возврат 34; КонецФункции @@ -57,7 +57,7 @@ Функция ВерсияОбновленияДанныхПроизводственныхКалендарей() Экспорт - Возврат "3.1.1.144"; + Возврат "3.1.2.119"; КонецФункции diff --git a/SSL/src/DataProcessors/ЗаполнениеКалендарныхГрафиков/Templates/ДанныеПроизводственныхКалендарей/Template.txt b/SSL/src/DataProcessors/ЗаполнениеКалендарныхГрафиков/Templates/ДанныеПроизводственныхКалендарей/Template.txt index 0dd1ec6a7..74bdf3586 100644 --- a/SSL/src/DataProcessors/ЗаполнениеКалендарныхГрафиков/Templates/ДанныеПроизводственныхКалендарей/Template.txt +++ b/SSL/src/DataProcessors/ЗаполнениеКалендарныхГрафиков/Templates/ДанныеПроизводственныхКалендарей/Template.txt @@ -107,8 +107,7 @@ - - + @@ -134,8 +133,7 @@ - - + @@ -161,8 +159,7 @@ - - + @@ -209,6 +206,8 @@ + + @@ -231,7 +230,7 @@ - + @@ -388,8 +387,8 @@ - - + + diff --git a/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/Forms/Форма/Module.bsl index ec5052550..684e1d3a4 100644 --- a/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/Forms/Форма/Module.bsl @@ -23,7 +23,7 @@ ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ГруппаПросмотрЗарегистрированныхСобытий", "ОтображатьЗаголовок", Ложь); ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ГруппаОтбора", "Группировка", ГруппировкаПодчиненныхЭлементовФормы.Вертикальная); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "КоличествоПоказываемыхСобытий", "Заголовок", НСтр("ru ='Показывать'")); + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "КоличествоПоказываемыхСобытий", "Заголовок", НСтр("ru = 'Показывать'")); ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "КомандыОтбора", "Отображение", ОтображениеГруппыКнопок.Компактное); ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "КомандыПоиска", "Отображение", ОтображениеГруппыКнопок.Компактное); ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ФормаНайти", "Отображение", ОтображениеКнопки.Картинка); diff --git a/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/СведенияОВладельцеСертификата/Form.form b/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/СведенияОВладельцеСертификата/Form.form new file mode 100644 index 000000000..a2dfb487c --- /dev/null +++ b/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/СведенияОВладельцеСертификата/Form.form @@ -0,0 +1,1595 @@ + + + + ГруппаФИО + 10 + + Фамилия + 1 + + <key>ru</key> + <value>Владелец</value> + + true + true + + true + + + Фамилия + + + OnChange + РеквизитПриИзменении + + + ФамилияРасширеннаяПодсказка + 3 + Label + true + true + + Left + + + + ФамилияКонтекстноеМеню + 2 + true + + InputField + true + Enter + true + Left + true + + 15 + true + true + true + true + true + true + Normal + + ru + Фамилия + + + + + Имя + 4 + + <key>ru</key> + <value>Имя</value> + + true + true + + true + + + Имя + + None + + OnChange + РеквизитПриИзменении + + + ИмяРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + + ИмяКонтекстноеМеню + 5 + true + + InputField + true + Enter + true + Left + true + + 15 + true + true + true + true + true + true + Normal + + ru + Имя + + + + + Отчество + 7 + + <key>ru</key> + <value>Отчество</value> + + true + true + + true + + + Отчество + + None + + OnChange + РеквизитПриИзменении + + + ОтчествоРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + + ОтчествоКонтекстноеМеню + 8 + true + + InputField + Enter + true + Left + true + + 15 + true + true + true + true + true + Normal + + ru + Отчество + + + + true + true + + true + + + <key>ru</key> + <value>ФИО</value> + + + ГруппаФИОРасширеннаяПодсказка + 11 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + true + true + Auto + Auto + + + + ГруппаДатаРожденияПол + 22 + + ДатаРождения + 16 + + <key>ru</key> + <value>Дата рождения</value> + + true + true + + true + + + ДатаРождения + + + OnChange + РеквизитПриИзменении + + + ДатаРожденияРасширеннаяПодсказка + 18 + Label + true + true + + Left + + + + ДатаРожденияКонтекстноеМеню + 17 + true + + InputField + true + Enter + true + Left + true + + 13 + true + true + true + true + true + true + true + Normal + + + + Пол + 19 + + <key>ru</key> + <value>Пол</value> + + true + true + + true + + + Пол + + + OnChange + РеквизитПриИзменении + + + ПолРасширеннаяПодсказка + 21 + Label + true + true + + Left + + + + ПолКонтекстноеМеню + 20 + true + + RadioButtonField + Enter + true + Left + true + + 2 + + + ru + Мужской + + + 1 + + + + + ru + Женский + + + 2 + + + Vertical + + + true + true + + true + + + <key>ru</key> + <value>Дата рождения пол</value> + + + ГруппаДатаРожденияПолРасширеннаяПодсказка + 23 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + true + true + Auto + Auto + + + + СтраховойНомерПФР + 24 + + <key>ru</key> + <value>СНИЛС</value> + + true + true + + true + + + СтраховойНомерПФР + + + OnChange + СтраховойНомерПФРПриИзменении + + + СтраховойНомерПФРРасширеннаяПодсказка + 26 + Label + true + true + + Left + + + + СтраховойНомерПФРКонтекстноеМеню + 25 + true + + InputField + true + Enter + true + Left + true + + 15 + true + 15 + true + false + true + 999-999-999 99 + true + true + true + true + Normal + + + + ГруппаГражданство + 33 + + Гражданство + 27 + + <key>ru</key> + <value>Гражданство</value> + + true + true + + true + + + Гражданство + + + OnChange + ГражданствоПриИзменении + + + ГражданствоРасширеннаяПодсказка + 29 + Label + true + true + + Left + + + + ГражданствоКонтекстноеМеню + 28 + true + + InputField + true + Enter + true + Left + true + + 13 + true + true + false + true + false + true + ShowInInputField + false + true + true + true + true + Normal + + + + МестоРождения + 30 + + <key>ru</key> + <value>Место рождения</value> + + true + true + + true + + + МестоРождения + + + OnChange + РеквизитПриИзменении + + + МестоРожденияРасширеннаяПодсказка + 32 + Label + true + true + + Left + + + + МестоРожденияКонтекстноеМеню + 31 + true + + InputField + true + Enter + true + Left + true + + 12 + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Гражданство</value> + + + ГруппаГражданствоРасширеннаяПодсказка + 34 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + true + true + Auto + Auto + + + + Должность + 35 + + <key>ru</key> + <value>Должность</value> + + true + true + + true + + + Должность + + + OnChange + РеквизитПриИзменении + + + ДолжностьРасширеннаяПодсказка + 37 + Label + true + true + + Left + + + + ДолжностьКонтекстноеМеню + 36 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + Подразделение + 38 + + <key>ru</key> + <value>Подразделение</value> + + true + true + + true + + + Подразделение + + + ru + Заполнить, если владелец сертификата находится в обособленном подразделении, +фактический адрес которого отличается от фактического адреса организации. + + Button + + OnChange + РеквизитПриИзменении + + + ПодразделениеРасширеннаяПодсказка + 40 + Label + true + true + + Left + + + + ПодразделениеКонтекстноеМеню + 39 + true + + InputField + Enter + true + Left + true + + 15 + true + true + true + true + true + Normal + + + + ГруппаУдостоверениеЛичности + 41 + + ГруппаВидКемВыданКодПодразделения + 61 + + ДокументВид + 43 + + <key>ru</key> + <value>Вид документа</value> + + true + true + + true + + + ДокументВид + + + OnChange + ДокументВидПриИзменении + + + ДокументВидРасширеннаяПодсказка + 45 + Label + true + true + + Left + + + + ДокументВидКонтекстноеМеню + 44 + true + + InputField + true + Enter + true + Left + true + + + Clearing + ДокументВидОчистка + + 20 + true + true + true + true + true + true + true + true + + + ru + Паспорт гражданина Российской Федерации + + + 21 + + + + + ru + Иной документ, предусмотренный законодательством Российской Федерации + + + 91 + + + Normal + + + + ДокументКемВыдан + 46 + + <key>ru</key> + <value>Кем выдан</value> + + true + true + + true + + + ДокументКемВыдан + + Left + + OnChange + РеквизитПриИзменении + + + ДокументКемВыданРасширеннаяПодсказка + 48 + Label + true + true + + Left + + + + ДокументКемВыданКонтекстноеМеню + 47 + true + + InputField + true + Enter + true + Left + true + + 23 + true + true + true + true + true + true + Normal + + + + ДокументКодПодразделения + 49 + + <key>ru</key> + <value>Код подразделения</value> + + true + true + + true + + + ДокументКодПодразделения + + Left + + OnChange + ДокументКодПодразделенияПриИзменении + + + ДокументКодПодразделенияРасширеннаяПодсказка + 51 + Label + true + true + + Left + + + + ДокументКодПодразделенияКонтекстноеМеню + 50 + true + + InputField + true + Enter + true + Left + true + + 5 + true + true + false + true + 999-999 + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Вид документа, кем выдан, код подразделения</value> + + + ГруппаВидКемВыданКодПодразделенияРасширеннаяПодсказка + 62 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ГруппаСерияНомерДатаВыдачи + 63 + + ДокументНомер + 52 + + <key>ru</key> + <value>Серия, номер</value> + + true + true + + true + + + ДокументНомер + + + OnChange + ДокументНомерПриИзменении + + + ДокументНомерРасширеннаяПодсказка + 54 + Label + true + true + + Left + + + + ДокументНомерКонтекстноеМеню + 53 + true + + InputField + true + Enter + true + Left + true + + 11 + true + true + false + true + 99 99 999999 + true + true + true + true + Normal + + + + ДокументДатаВыдачи + 55 + + <key>ru</key> + <value>Дата выдачи</value> + + true + true + + true + + + ДокументДатаВыдачи + + + ДокументДатаВыдачиРасширеннаяПодсказка + 57 + Label + true + true + + Left + + + + ДокументДатаВыдачиКонтекстноеМеню + 56 + true + + InputField + true + Enter + true + Left + true + + 9 + true + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Серия, номер, дата выдачи документа</value> + + + ГруппаСерияНомерДатаВыдачиРасширеннаяПодсказка + 64 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Документ, удостоверяющий личность</value> + + + ГруппаУдостоверениеЛичностиРасширеннаяПодсказка + 42 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + true + true + auto + Auto + Auto + + + + ГруппаКонтактнаяИнформация + 65 + + ЭлектроннаяПочта + 58 + + <key>ru</key> + <value>Электронная почта</value> + + true + true + + true + + + ЭлектроннаяПочта + + + OnChange + РеквизитПриИзменении + + + ЭлектроннаяПочтаРасширеннаяПодсказка + 60 + Label + true + true + + Left + + + + ЭлектроннаяПочтаКонтекстноеМеню + 59 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Контактная информация</value> + + + ГруппаКонтактнаяИнформацияРасширеннаяПодсказка + 66 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + true + auto + Auto + Auto + + + Bottom + true + + ФормаКоманднаяПанель + -1 + + ФормаОК + 12 + true + true + + true + + + ФормаОКРасширеннаяПодсказка + 13 + Label + true + true + + Left + + + Form.Command.ОК + Auto + true + true + true + UserCmds + Auto + + + ФормаОтмена + 14 + true + true + + true + + + ФормаОтменаРасширеннаяПодсказка + 15 + Label + true + true + + Left + + + Form.Command.Отмена + Normal + Auto + true + true + UserCmds + Auto + + Right + + + BeforeClose + ПередЗакрытием + + + OnCreateAtServer + ПриСозданииНаСервере + + LockOwner + true + true + true + Vertical + true + true + true + auto + true + + Фамилия + + <key>ru</key> + <value>Фамилия</value> + + 2 + + String + + 64 + + + + true + + + true + + + + Имя + + <key>ru</key> + <value>Имя</value> + + 3 + + String + + 64 + + + + true + + + true + + + + Отчество + + <key>ru</key> + <value>Отчество</value> + + 4 + + String + + 64 + + + + true + + + true + + + + Пол + + <key>ru</key> + <value>Пол</value> + + 5 + + Number + + 1 + true + + + + true + + + true + + + + ДатаРождения + + <key>ru</key> + <value>Дата рождения</value> + + 1 + + Date + + Date + + + + true + + + true + + + + СтраховойНомерПФР + + <key>ru</key> + <value>СНИЛС</value> + + 6 + + String + + 14 + + + + true + + + true + + + + Гражданство + + <key>ru</key> + <value>Гражданство</value> + + 7 + + CatalogRef.СтраныМира + + + true + + + true + + + + ГражданствоОКСМКодАльфа3 + 8 + + String + + + + true + + + true + + + + ГражданствоПредставление + 9 + + String + + + + true + + + true + + + + МестоРождения + + <key>ru</key> + <value>Место рождения</value> + + 10 + + String + + 240 + + + + true + + + true + + + + Должность + + <key>ru</key> + <value>Должность</value> + + 11 + + String + + 64 + + + + true + + + true + + + + Подразделение + + <key>ru</key> + <value>Подразделение</value> + + 12 + + String + + 64 + + + + true + + + true + + + + ДокументВид + + <key>ru</key> + <value>Документ вид</value> + + 13 + + String + + 2 + + + + true + + + true + + + + ДокументДатаВыдачи + + <key>ru</key> + <value>Дата выдачи</value> + + 14 + + Date + + Date + + + + true + + + true + + + + ДокументКемВыдан + + <key>ru</key> + <value>Кем выдан</value> + + 15 + + String + + 128 + + + + true + + + true + + + + ДокументКодПодразделения + + <key>ru</key> + <value>Код подразделения</value> + + 16 + + String + + 7 + + + + true + + + true + + + + ДокументНомер + + <key>ru</key> + <value>Серия, номер</value> + + 17 + + String + + 25 + + + + true + + + true + + + + ЭлектроннаяПочта + + <key>ru</key> + <value>Электронная почта</value> + + 18 + + String + + 128 + + + + true + + + true + + + + СведенияОВладельце + 20 + + + true + + + true + + + + ОК + + <key>ru</key> + <value>ОК</value> + + 1 + + ru + ОК + + + true + + + + ОК + + + Auto + Auto + + + Отмена + + <key>ru</key> + <value>Отмена</value> + + 2 + + ru + Отмена + + + true + + + + Отмена + + + Auto + Auto + + + СведенияОВладельце + + true + + + + + + diff --git a/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/СведенияОВладельцеСертификата/Module.bsl b/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/СведенияОВладельцеСертификата/Module.bsl new file mode 100644 index 000000000..3cb38638a --- /dev/null +++ b/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/СведенияОВладельцеСертификата/Module.bsl @@ -0,0 +1,313 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2019, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + СведенияОВладельце = Параметры.СведенияОВладельце; + ЗаполнитьЗначенияСвойств(ЭтотОбъект, СведенияОВладельце); + + Если СведенияОВладельце.Пол = "Мужской" Тогда + Пол = 1; + ИначеЕсли СведенияОВладельце.Пол = "Женский" Тогда + Пол = 2; + КонецЕсли; + + Элементы.Должность.Видимость = Не СведенияОВладельце.ЭтоИндивидуальныйПредприниматель; + Элементы.Подразделение.Видимость = Не СведенияОВладельце.ЭтоИндивидуальныйПредприниматель; + + УстановитьТолькоПросмотр(); + +КонецПроцедуры + +&НаКлиенте +Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка) + + Если Не Модифицированность Тогда + Возврат; + КонецЕсли; + + Отказ = Истина; + СтандартнаяОбработка = Ложь; + ЗадатьВопросПередЗакрытием(); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы + +&НаКлиенте +Процедура РеквизитПриИзменении(Элемент) + + Модифицированность = Истина; + Если ТипЗнч(ЭтотОбъект[Элемент.Имя]) = Тип("Строка") Тогда + ЭтотОбъект[Элемент.Имя] = СокрЛП(ЭтотОбъект[Элемент.Имя]); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура СтраховойНомерПФРПриИзменении(Элемент) + + СтраховойНомерПФР = ТолькоЦифры(СтраховойНомерПФР); + +КонецПроцедуры + +&НаКлиенте +Процедура ГражданствоПриИзменении(Элемент) + + Модифицированность = Истина; + + ЗаполнитьЗначенияСвойств(ЭтотОбъект, ГражданствоСвойства(Гражданство)); + Если Не ЗначениеЗаполнено(ГражданствоОКСМКодАльфа3) Тогда + Если ЗначениеЗаполнено(Гражданство) Тогда + ПоказатьПредупреждение(, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'У страны ""%1"" не указан трехзначный буквенный код альфа-3 по ОКСМ.'"), + Гражданство)); + КонецЕсли; + Гражданство = Неопределено; + ГражданствоПредставление = ""; + ГражданствоОКСМКодАльфа3 = ""; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ДокументВидПриИзменении(Элемент) + + Модифицированность = Истина; + ПриИзмененииВидаДокументаНаСервере(); + +КонецПроцедуры + +&НаКлиенте +Процедура ДокументВидОчистка(Элемент, СтандартнаяОбработка) + + Модифицированность = Истина; + СтандартнаяОбработка = Ложь; + +КонецПроцедуры + +&НаКлиенте +Процедура ДокументНомерПриИзменении(Элемент) + + Модифицированность = Истина; + Если ДокументВид = "21" Тогда + ДокументНомер = ТолькоЦифры(ДокументНомер); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ДокументКодПодразделенияПриИзменении(Элемент) + + Модифицированность = Истина; + ДокументКодПодразделения = ТолькоЦифры(ДокументКодПодразделения); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ОК(Команда) + + СохранитьИзмененияИЗакрыть(); + +КонецПроцедуры + +&НаКлиенте +Процедура Отмена(Команда) + + ЗадатьВопросПередЗакрытием(); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаКлиенте +Процедура ЗадатьВопросПередЗакрытием() + + Если Не Модифицированность Тогда + Закрыть(Неопределено); + Возврат; + КонецЕсли; + + ПоказатьВопрос(Новый ОписаниеОповещения("ЗакрытиеПослеОтветаНаВопрос", ЭтотОбъект), + НСтр("ru = 'Данные были изменены. Сохранить изменения?'"), РежимДиалогаВопрос.ДаНетОтмена); + +КонецПроцедуры + +&НаКлиенте +Процедура ЗакрытиеПослеОтветаНаВопрос(Ответ, ДополнительныеПараметры) Экспорт + + Если Ответ = КодВозвратаДиалога.Нет Тогда + Модифицированность = Ложь; + Закрыть(Неопределено); + ИначеЕсли Ответ = КодВозвратаДиалога.Да Тогда + СохранитьИзмененияИЗакрыть(); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура СохранитьИзмененияИЗакрыть() + + Если Не Модифицированность Тогда + Закрыть(Неопределено); + ИначеЕсли СохранитьИзмененияНаСервере() Тогда + Модифицированность = Ложь; + Закрыть(СведенияОВладельце); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ПриИзмененииВидаДокументаНаСервере() + + Если ДокументВид = "" Тогда + ДокументВид = "21"; + КонецЕсли; + + Если ДокументВид = "21" Тогда + Элементы.ДокументНомер.Заголовок = НСтр("ru = 'Серия и номер'"); + Элементы.ДокументНомер.Маска = "99 99 999999"; + Элементы.ДокументКодПодразделения.Видимость = Истина; + Иначе + Элементы.ДокументНомер.Заголовок = НСтр("ru = 'Номер'"); + Элементы.ДокументНомер.Маска = ""; + Элементы.ДокументКодПодразделения.Видимость = Ложь; + ДокументКодПодразделения = ""; + КонецЕсли; + + Если ДокументВид = 91 Тогда + ДокументВид = ""; + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Функция СохранитьИзмененияНаСервере() + + Если Не ПроверитьСведенияОВладельце() Тогда + Возврат Ложь; + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда + + МодульУправлениеКонтактнойИнформацией = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформацией"); + ЭлектроннаяПочта = МодульУправлениеКонтактнойИнформацией.КонтактнаяИнформацияВJSON( + ЭлектроннаяПочта, Перечисления["ТипыКонтактнойИнформации"].АдресЭлектроннойПочты); + + КонецЕсли; + + ЗаполнитьЗначенияСвойств(СведенияОВладельце, ЭтотОбъект); + + Если Пол = 1 Тогда + СведенияОВладельце.Пол = "Мужской"; + ИначеЕсли Пол = 2 Тогда + СведенияОВладельце.Пол = "Женский"; + Иначе + СведенияОВладельце.Пол = ""; + КонецЕсли; + + Возврат Истина; + +КонецФункции + +&НаСервере +Функция ПроверитьСведенияОВладельце() + + ИсключаемыеРеквизиты = Новый Массив; + ИсключаемыеРеквизиты.Добавить("ЭтоИндивидуальныйПредприниматель"); + ИсключаемыеРеквизиты.Добавить("ГражданствоОКСМКодАльфа3"); + ИсключаемыеРеквизиты.Добавить("ГражданствоПредставление"); + ИсключаемыеРеквизиты.Добавить("Подразделение"); + ИсключаемыеРеквизиты.Добавить("Отчество"); + Если СведенияОВладельце.ЭтоИндивидуальныйПредприниматель Тогда + ИсключаемыеРеквизиты.Добавить("Должность"); + КонецЕсли; + + Если ДокументВид <> "21" Тогда + ИсключаемыеРеквизиты.Добавить("ДокументНомер"); + ИсключаемыеРеквизиты.Добавить("ДокументКодПодразделения"); + КонецЕсли; + + ПроверяемыеРеквизиты = Новый Массив; + Для Каждого Реквизит Из СведенияОВладельце Цикл + + ИмяРеквизита = Реквизит.Ключ; + Если ИсключаемыеРеквизиты.Найти(ИмяРеквизита) <> Неопределено Тогда + Продолжить; + КонецЕсли; + + ПараметрыРеквизитаДляПроверки = Новый Структура; + ПараметрыРеквизитаДляПроверки.Вставить("Имя", ИмяРеквизита); + ПараметрыРеквизитаДляПроверки.Вставить("Значение", ЭтотОбъект[ИмяРеквизита]); + ПараметрыРеквизитаДляПроверки.Вставить("ПолеСообщения", ИмяРеквизита); + ПараметрыРеквизитаДляПроверки.Вставить("ТекстНезаполненного", + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Поле ""%1"" не заполнено'"), + ?(ИмяРеквизита = "Фамилия", "Фамилия", Элементы[ИмяРеквизита].Заголовок))); + + ПроверяемыеРеквизиты.Добавить(ПараметрыРеквизитаДляПроверки); + + КонецЦикла; + + Возврат Не Обработки.ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата.ПроверитьЗаполнениеРеквизитов( + ПроверяемыеРеквизиты); + +КонецФункции + +&НаСервере +Процедура УстановитьТолькоПросмотр() + + Элементы.ГруппаФИО.ТолькоПросмотр = Параметры.ТолькоПросмотр; + Элементы.ГруппаДатаРожденияПол.ТолькоПросмотр = Параметры.ТолькоПросмотр; + Элементы.СтраховойНомерПФР.ТолькоПросмотр = Параметры.ТолькоПросмотр; + Элементы.ГруппаГражданство.ТолькоПросмотр = Параметры.ТолькоПросмотр; + Элементы.Должность.ТолькоПросмотр = Параметры.ТолькоПросмотр; + Элементы.Подразделение.ТолькоПросмотр = Параметры.ТолькоПросмотр; + Элементы.ГруппаУдостоверениеЛичности.ТолькоПросмотр = Параметры.ТолькоПросмотр; + Элементы.ГруппаКонтактнаяИнформация.ТолькоПросмотр = Параметры.ТолькоПросмотр; + +КонецПроцедуры + +&НаСервереБезКонтекста +Функция ГражданствоСвойства(Гражданство) + + Возврат Обработки.ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата.ГражданствоСвойства(Гражданство); + +КонецФункции + +&НаКлиентеНаСервереБезКонтекста +Функция ТолькоЦифры(Строка) + + ДлинаСтроки = СтрДлина(Строка); + + ОбработаннаяСтрока = ""; + Для НомерСимвола = 1 По ДлинаСтроки Цикл + + Символ = Сред(Строка, НомерСимвола, 1); + Если Символ >= "0" И Символ <= "9" Тогда + ОбработаннаяСтрока = ОбработаннаяСтрока + Символ; + КонецЕсли; + + КонецЦикла; + + Возврат ОбработаннаяСтрока; + +КонецФункции + +#КонецОбласти \ 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..855b7b6b8 --- /dev/null +++ b/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/СведенияОбОрганизации/Form.form @@ -0,0 +1,1410 @@ + + + + ЭтоИндивидуальныйПредприниматель + 5 + + <key>ru</key> + <value>Вид</value> + + true + true + + true + + + ЭтоИндивидуальныйПредприниматель + + + OnChange + ЭтоИндивидуальныйПредпринимательПриИзменении + + + ЭтоИндивидуальныйПредпринимательРасширеннаяПодсказка + 7 + Label + true + true + + Left + + + + ЭтоИндивидуальныйПредпринимательКонтекстноеМеню + 6 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + + + ru + Юридическое лицо + + + + + + ru + Индивидуальный предприниматель + + + true + + + Normal + + + + НаименованиеСокращенное + 8 + + <key>ru</key> + <value>Наименование (сокращенное)</value> + + true + true + + true + + + НаименованиеСокращенное + + 2 + + OnChange + РеквизитПриИзменении + + + НаименованиеСокращенноеРасширеннаяПодсказка + 10 + Label + true + true + + Left + + + + НаименованиеСокращенноеКонтекстноеМеню + 9 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + НаименованиеПолное + 11 + + <key>ru</key> + <value>Наименование (полное)</value> + + true + true + + true + + + НаименованиеПолное + + Left + 2 + + OnChange + РеквизитПриИзменении + + + НаименованиеПолноеРасширеннаяПодсказка + 13 + Label + true + true + + Left + + + + НаименованиеПолноеКонтекстноеМеню + 12 + true + + InputField + true + Enter + true + Left + true + + 2 + true + true + true + true + true + true + true + Normal + + + + ГруппаНомеров + 14 + + ВертикальнаяГруппа1 + 16 + + ГоризонтальнаяГруппа7 + 18 + + ИНН + 20 + + <key>ru</key> + <value>ИНН</value> + + true + true + + true + + + ИНН + + + OnChange + РеквизитПриИзменении + + + ИННРасширеннаяПодсказка + 22 + Label + true + true + + Left + + + + ИННКонтекстноеМеню + 21 + true + + InputField + true + Enter + true + Left + true + + true + true + false + true + true + true + true + true + Normal + + + + КПП + 23 + + <key>ru</key> + <value>КПП</value> + + true + true + + true + + + КПП + + + OnChange + РеквизитПриИзменении + + + КППРасширеннаяПодсказка + 25 + Label + true + true + + Left + + + + КППКонтекстноеМеню + 24 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Горизонтальная группа 7</value> + + + ГоризонтальнаяГруппа7РасширеннаяПодсказка + 19 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + true + Auto + Auto + + + + РасчетныйСчет + 26 + + <key>ru</key> + <value>Расчетный счет</value> + + true + true + + true + + + РасчетныйСчет + + + ru + Основной расчетный счет для заполнения реквизитов стандартного договора. + + Button + + OnChange + РеквизитПриИзменении + + + РасчетныйСчетРасширеннаяПодсказка + 28 + Label + true + true + + Left + + + + РасчетныйСчетКонтекстноеМеню + 27 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + КорреспондентскийСчет + 29 + + <key>ru</key> + <value>Корреспондентский счет</value> + + true + true + + true + + + КорреспондентскийСчет + + + OnChange + РеквизитПриИзменении + + + КорреспондентскийСчетРасширеннаяПодсказка + 31 + Label + true + true + + Left + + + + КорреспондентскийСчетКонтекстноеМеню + 30 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Вертикальная группа 1</value> + + + ВертикальнаяГруппа1РасширеннаяПодсказка + 17 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ВертикальнаяГруппа2 + 32 + + ОГРН + 34 + + <key>ru</key> + <value>ОГРН</value> + + true + true + + true + + + ОГРН + + + OnChange + РеквизитПриИзменении + + + ОГРНРасширеннаяПодсказка + 36 + Label + true + true + + Left + + + + ОГРНКонтекстноеМеню + 35 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + true + Normal + + + + БИК + 37 + + <key>ru</key> + <value>БИК</value> + + true + true + + true + + + БИК + + + OnChange + РеквизитПриИзменении + + + БИКРасширеннаяПодсказка + 39 + Label + true + true + + Left + + + + БИККонтекстноеМеню + 38 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Вертикальная группа 2</value> + + + ВертикальнаяГруппа2РасширеннаяПодсказка + 33 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Номеров</value> + + + ГруппаНомеровРасширеннаяПодсказка + 15 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + true + Auto + Auto + + + + ГруппаКонтактнаяИнформацияОрганизации + 40 + + ГруппаЮридическийАдрес + 42 + + ЮридическийАдрес + 44 + + <key>ru</key> + <value>Юридический адрес</value> + + true + true + + true + + + ЮридическийАдрес + + + ЮридическийАдресРасширеннаяПодсказка + 46 + Label + true + true + + Left + + + + ЮридическийАдресКонтекстноеМеню + 45 + true + + InputField + true + Enter + true + Left + true + + + StartChoice + ЮридическийАдресНачалоВыбора + + + Clearing + ЮридическийАдресОчистка + + + ChoiceProcessing + ЮридическийАдресОбработкаВыбора + + 65 + true + true + true + true + true + true + Normal + + + + ЮридическийАдресПредупреждение + 47 + + <key>ru</key> + <value>Юридический адрес предупреждение</value> + + true + true + + true + + + ЮридическийАдресПредупреждениеРасширеннаяПодсказка + 49 + Label + true + true + + Left + + + + ЮридическийАдресПредупреждениеКонтекстноеМеню + 48 + true + + true + true + true + Center + + + Click + АдресПредупреждениеНажатие + + + CommonPicture.Предупреждение + + true + + + true + true + + true + + + <key>ru</key> + <value>Юридический адрес</value> + + + ГруппаЮридическийАдресРасширеннаяПодсказка + 43 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + true + Auto + Auto + + + + ГруппаФактическийАдрес + 50 + + ФактическийАдрес + 52 + + <key>ru</key> + <value>Фактический адрес</value> + + true + true + + true + + + ФактическийАдрес + + + ФактическийАдресРасширеннаяПодсказка + 54 + Label + true + true + + Left + + + + ФактическийАдресКонтекстноеМеню + 53 + true + + InputField + true + Enter + true + Left + true + + + StartChoice + ФактическийАдресНачалоВыбора + + + Clearing + ФактическийАдресОчистка + + + ChoiceProcessing + ФактическийАдресОбработкаВыбора + + 65 + true + true + true + true + true + true + Normal + + + + ФактическийАдресПредупреждение + 55 + + <key>ru</key> + <value>Фактический адрес предупреждение</value> + + true + true + + true + + + ФактическийАдресПредупреждениеРасширеннаяПодсказка + 57 + Label + true + true + + Left + + + + ФактическийАдресПредупреждениеКонтекстноеМеню + 56 + true + + true + true + true + Center + + + Click + АдресПредупреждениеНажатие + + + CommonPicture.Предупреждение + + true + + + true + true + + true + + + <key>ru</key> + <value>Фактический адрес</value> + + + ГруппаФактическийАдресРасширеннаяПодсказка + 51 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + true + Auto + Auto + + + + Телефон + 58 + + <key>ru</key> + <value>Телефон</value> + + true + true + + true + + + Телефон + + + ТелефонРасширеннаяПодсказка + 60 + Label + true + true + + Left + + + + ТелефонКонтекстноеМеню + 59 + true + + InputField + true + Enter + true + Left + true + + + StartChoice + ТелефонНачалоВыбора + + + Clearing + ТелефонОчистка + + + ChoiceProcessing + ТелефонОбработкаВыбора + + 25 + true + true + false + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Контактная информация</value> + + + ГруппаКонтактнаяИнформацияОрганизацииРасширеннаяПодсказка + 41 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + auto + Auto + Auto + + + Bottom + true + + ФормаКоманднаяПанель + -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 + + Right + + + OnOpen + ПриОткрытии + + + BeforeClose + ПередЗакрытием + + + OnCreateAtServer + ПриСозданииНаСервере + + LockOwner + true + true + true + Vertical + true + true + true + auto + true + + НаименованиеСокращенное + + <key>ru</key> + <value>Сокращенное наименование</value> + + 1 + + String + + 64 + + + + true + + + true + + + + НаименованиеПолное + + <key>ru</key> + <value>Полное наименование</value> + + 2 + + String + + + + true + + + true + + + + КПП + + <key>ru</key> + <value>КПП</value> + + 3 + + String + + 9 + + + + true + + + true + + + + ИНН + + <key>ru</key> + <value>ИНН</value> + + 4 + + String + + 12 + + + + true + + + true + + + + ОГРН + + <key>ru</key> + <value>ОГРН</value> + + 5 + + String + + 15 + + + + true + + + true + + + + БИК + + <key>ru</key> + <value>БИК</value> + + 6 + + String + + 9 + + + + true + + + true + + true + + + РасчетныйСчет + + <key>ru</key> + <value>Расчетный счет</value> + + 7 + + String + + 20 + + + + true + + + true + + + + КорреспондентскийСчет + + <key>ru</key> + <value>Корреспондентский счет</value> + + 8 + + String + + 20 + + + + true + + + true + + + + ЭтоИндивидуальныйПредприниматель + + <key>ru</key> + <value>Это индивидуальный предприниматель</value> + + 9 + + Boolean + + + true + + + true + + + + Телефон + + <key>ru</key> + <value>Телефон</value> + + 10 + + String + + 64 + + + + true + + + true + + + + ЮридическийАдрес + + <key>ru</key> + <value>Юридический адрес</value> + + 11 + + String + + + + true + + + true + + + + ФактическийАдрес + + <key>ru</key> + <value>Фактический адрес</value> + + 12 + + String + + + + true + + + true + + + + СведенияОбОрганизации + 13 + + + true + + + true + + + + ФактическийАдресXML + 14 + + String + + + + true + + + true + + + + ЮридическийАдресXML + 15 + + String + + + + true + + + true + + + + ТелефонXML + 18 + + String + + + + true + + + true + + + + ВидКонтактнойИнформации + 19 + + + true + + + true + + + + ВидКонтактнойИнформацииТелефон + 16 + + + true + + + true + + + + ОК + + <key>ru</key> + <value>ОК</value> + + 1 + + ru + ОК + + + true + + + + ОК + + + Auto + Auto + + + Отмена + + <key>ru</key> + <value>Отмена</value> + + 2 + + ru + Отмена + + + true + + + + Отмена + + + Auto + Auto + + + СведенияОбОрганизации + + true + + + + + + diff --git a/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/СведенияОбОрганизации/Module.bsl b/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/СведенияОбОрганизации/Module.bsl new file mode 100644 index 000000000..680c75c15 --- /dev/null +++ b/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/СведенияОбОрганизации/Module.bsl @@ -0,0 +1,405 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2019, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ОписаниеПеременных + +&НаКлиенте +Перем РеквизитыПроверкиАдреса; + +#КонецОбласти + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + СведенияОбОрганизации = Параметры.СведенияОбОрганизации; + ЗаполнитьЗначенияСвойств(ЭтотОбъект, СведенияОбОрганизации); + + Элементы.КПП.Видимость = Не ЭтоИндивидуальныйПредприниматель; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда + + МодульУправлениеКонтактнойИнформацией = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформацией"); + ВидКонтактнойИнформации = МодульУправлениеКонтактнойИнформацией.ПараметрыВидаКонтактнойИнформации( + Перечисления["ТипыКонтактнойИнформации"].Адрес); + + ВидКонтактнойИнформации.НастройкиПроверки.ТолькоНациональныйАдрес = Истина; + + ВидКонтактнойИнформацииТелефон = МодульУправлениеКонтактнойИнформацией.ПараметрыВидаКонтактнойИнформации( + Перечисления["ТипыКонтактнойИнформации"].Телефон); + + КонецЕсли; + + ПроверитьАдрес("ЮридическийАдрес"); + ПроверитьАдрес("ФактическийАдрес"); + + УстановитьТолькоПросмотр(); + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + РеквизитыПроверкиАдреса = Новый Структура; + РеквизитыПроверкиАдреса.Вставить("ЮридическийАдрес", Ложь); + РеквизитыПроверкиАдреса.Вставить("ФактическийАдрес", Ложь); + +КонецПроцедуры + +&НаКлиенте +Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка) + + Если Не Модифицированность Тогда + Возврат; + КонецЕсли; + + Отказ = Истина; + СтандартнаяОбработка = Ложь; + ЗадатьВопросПередЗакрытием(); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы + +&НаКлиенте +Процедура РеквизитПриИзменении(Элемент) + + Модифицированность = Истина; + ЭтотОбъект[Элемент.Имя] = СокрЛП(ЭтотОбъект[Элемент.Имя]); + +КонецПроцедуры + +&НаКлиенте +Процедура ЭтоИндивидуальныйПредпринимательПриИзменении(Элемент) + + Модифицированность = Истина; + Если ЭтоИндивидуальныйПредприниматель Тогда + ЭтотОбъект.КПП = Неопределено; + КонецЕсли; + + Элементы.КПП.Видимость = Не ЭтоИндивидуальныйПредприниматель; + +КонецПроцедуры + +&НаКлиенте +Процедура ЮридическийАдресНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + + ПредставлениеАдресаНачалоВыбора(ЭтотОбъект, Элемент, ДанныеВыбора, СтандартнаяОбработка, + "ЮридическийАдрес", НСтр("ru = 'Юридический адрес организации'")); + +КонецПроцедуры + +&НаКлиенте +Процедура ЮридическийАдресОчистка(Элемент, СтандартнаяОбработка) + + ПредставлениеАдресаОчистка(ЭтотОбъект, Элемент, СтандартнаяОбработка, "ЮридическийАдрес"); + +КонецПроцедуры + +&НаКлиенте +Процедура ЮридическийАдресОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) + + Модифицированность = Истина; + ПредставлениеАдресаОбработкаВыбора(ЭтотОбъект, Элемент, ВыбранноеЗначение, СтандартнаяОбработка, "ЮридическийАдрес"); + + Если Не ЗначениеЗаполнено(ФактическийАдрес) Тогда + ПредставлениеАдресаОбработкаВыбора(ЭтотОбъект, Элемент, ВыбранноеЗначение, СтандартнаяОбработка, "ФактическийАдрес"); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ФактическийАдресНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + + ПредставлениеАдресаНачалоВыбора(ЭтотОбъект, Элемент, ДанныеВыбора, СтандартнаяОбработка, + "ФактическийАдрес", НСтр("ru = 'Фактический адрес организации'")); + +КонецПроцедуры + +&НаКлиенте +Процедура ФактическийАдресОчистка(Элемент, СтандартнаяОбработка) + + Модифицированность = Истина; + ПредставлениеАдресаОчистка(ЭтотОбъект, Элемент, СтандартнаяОбработка, "ФактическийАдрес"); + +КонецПроцедуры + +&НаКлиенте +Процедура ФактическийАдресОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) + + Модифицированность = Истина; + ПредставлениеАдресаОбработкаВыбора(ЭтотОбъект, Элемент, ВыбранноеЗначение, СтандартнаяОбработка, "ФактическийАдрес"); + +КонецПроцедуры + +&НаКлиенте +Процедура АдресПредупреждениеНажатие(Элемент) + + ПоказатьПредупреждение(, Элемент.Подсказка); + +КонецПроцедуры + +&НаКлиенте +Процедура ТелефонНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + + ПредставлениеТелефонаНачалоВыбора(ЭтотОбъект, Элемент, ДанныеВыбора, СтандартнаяОбработка, + "Телефон", НСтр("ru = 'Телефон организации'")); + +КонецПроцедуры + +&НаКлиенте +Процедура ТелефонОчистка(Элемент, СтандартнаяОбработка) + + Модифицированность = Истина; + ПредставлениеТелефонаОчистка(ЭтотОбъект, Элемент, СтандартнаяОбработка, "Телефон"); + +КонецПроцедуры + +&НаКлиенте +Процедура ТелефонОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) + + Модифицированность = Истина; + ПредставлениеТелефонаОбработкаВыбора(ЭтотОбъект, Элемент, ВыбранноеЗначение, СтандартнаяОбработка, "Телефон"); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ОК(Команда) + + СохранитьИзмененияИЗакрыть(); + +КонецПроцедуры + +&НаКлиенте +Процедура Отмена(Команда) + + ЗадатьВопросПередЗакрытием(); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Процедура УстановитьТолькоПросмотр() + + Элементы.ЭтоИндивидуальныйПредприниматель.ТолькоПросмотр = Параметры.ТолькоПросмотр; + Элементы.НаименованиеСокращенное.ТолькоПросмотр = Параметры.ТолькоПросмотр; + Элементы.НаименованиеПолное.ТолькоПросмотр = Параметры.ТолькоПросмотр; + Элементы.ГруппаНомеров.ТолькоПросмотр = Параметры.ТолькоПросмотр; + Элементы.ГруппаКонтактнаяИнформацияОрганизации.ТолькоПросмотр = Параметры.ТолькоПросмотр; + +КонецПроцедуры + +&НаКлиенте +Процедура ЗадатьВопросПередЗакрытием() + + Если Не Модифицированность Тогда + Закрыть(Неопределено); + Возврат; + КонецЕсли; + + ПоказатьВопрос(Новый ОписаниеОповещения("ЗакрытиеПослеОтветаНаВопрос", ЭтотОбъект), + НСтр("ru = 'Данные были изменены. Сохранить изменения?'"), РежимДиалогаВопрос.ДаНетОтмена); + +КонецПроцедуры + +&НаКлиенте +Процедура ЗакрытиеПослеОтветаНаВопрос(Ответ, ДополнительныеПараметры) Экспорт + + Если Ответ = КодВозвратаДиалога.Нет Тогда + Модифицированность = Ложь; + Закрыть(Неопределено); + ИначеЕсли Ответ = КодВозвратаДиалога.Да Тогда + СохранитьИзмененияИЗакрыть(); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура СохранитьИзмененияИЗакрыть() + + Если Не Модифицированность Тогда + Закрыть(Неопределено); + Возврат; + ИначеЕсли Не ПроверитьСведенияОбОрганизации() Тогда + Возврат; + КонецЕсли; + + Модифицированность = Ложь; + ЗаполнитьЗначенияСвойств(СведенияОбОрганизации, ЭтотОбъект); + + СведенияОбОрганизации.Телефон = ЭтотОбъект.ТелефонXML; + СведенияОбОрганизации.ФактическийАдрес = ЭтотОбъект.ФактическийАдресXML; + СведенияОбОрганизации.ЮридическийАдрес = ЭтотОбъект.ЮридическийАдресXML; + + Закрыть(СведенияОбОрганизации); + +КонецПроцедуры + +&НаКлиенте +Процедура ПредставлениеАдресаНачалоВыбора(Форма, Элемент, ДанныеВыбора, СтандартнаяОбработка, ИмяРеквизита, ЗаголовокФормы) + + Если Не ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда + Возврат; + КонецЕсли; + + МодульУправлениеКонтактнойИнформациейКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль( + "УправлениеКонтактнойИнформациейКлиент"); + + ВидКонтактнойИнформации.Наименование = ЗаголовокФормы; + ПараметрыФормы = МодульУправлениеКонтактнойИнформациейКлиент.ПараметрыФормыКонтактнойИнформации( + ВидКонтактнойИнформации, ЭтотОбъект[ИмяРеквизита + "XML"], ЭтотОбъект[ИмяРеквизита]); + + МодульУправлениеКонтактнойИнформациейКлиент.ОткрытьФормуКонтактнойИнформации(ПараметрыФормы, Элемент); + +КонецПроцедуры + +&НаКлиенте +Процедура ПредставлениеАдресаОчистка(Форма, Элемент, СтандартнаяОбработка, ИмяРеквизита) + + Форма[ИмяРеквизита + "XML"] = ""; + Форма[ИмяРеквизита] = ""; + + РеквизитыПроверкиАдреса[ИмяРеквизита] = Истина; + ПодключитьОбработчикОжидания("ПроверитьАдресОбработчикОжидания", 0.1, Истина); + +КонецПроцедуры + +&НаКлиенте +Процедура ПредставлениеАдресаОбработкаВыбора(Форма, Элемент, ВыбранноеЗначение, СтандартнаяОбработка, ИмяРеквизита) + + СтандартнаяОбработка = Ложь; + Если ТипЗнч(ВыбранноеЗначение) <> Тип("Структура") Тогда + Возврат; + КонецЕсли; + + Форма[ИмяРеквизита + "XML"] = ВыбранноеЗначение.КонтактнаяИнформация; + Форма[ИмяРеквизита] = ВыбранноеЗначение.Представление; + + РеквизитыПроверкиАдреса[ИмяРеквизита] = Истина; + ПодключитьОбработчикОжидания("ПроверитьАдресОбработчикОжидания", 0.1, Истина); + +КонецПроцедуры + +&НаКлиенте +Процедура ПредставлениеТелефонаНачалоВыбора(Форма, Элемент, ДанныеВыбора, СтандартнаяОбработка, ИмяРеквизита, ЗаголовокФормы) + + Если Не ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда + Возврат; + КонецЕсли; + + МодульУправлениеКонтактнойИнформациейКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль( + "УправлениеКонтактнойИнформациейКлиент"); + + ПараметрыФормы = МодульУправлениеКонтактнойИнформациейКлиент.ПараметрыФормыКонтактнойИнформации( + ВидКонтактнойИнформацииТелефон, ЭтотОбъект[ИмяРеквизита + "XML"], ЭтотОбъект[ИмяРеквизита]); + + ПараметрыФормы.Вставить("Заголовок", ЗаголовокФормы); + + МодульУправлениеКонтактнойИнформациейКлиент.ОткрытьФормуКонтактнойИнформации(ПараметрыФормы, Элемент); + +КонецПроцедуры + +&НаКлиенте +Процедура ПредставлениеТелефонаОчистка(Форма, Элемент, СтандартнаяОбработка, ИмяРеквизита) + + Форма[ИмяРеквизита + "XML"] = ""; + Форма[ИмяРеквизита] = ""; + +КонецПроцедуры + +&НаКлиенте +Процедура ПредставлениеТелефонаОбработкаВыбора(Форма, Элемент, ВыбранноеЗначение, СтандартнаяОбработка, ИмяРеквизита) + + СтандартнаяОбработка = Ложь; + Если ТипЗнч(ВыбранноеЗначение) <> Тип("Структура") Тогда + // Данные не изменены. + Возврат; + КонецЕсли; + + Форма[ИмяРеквизита + "XML"] = ВыбранноеЗначение.КонтактнаяИнформация; + Форма[ИмяРеквизита] = ВыбранноеЗначение.Представление; + +КонецПроцедуры + +&НаКлиенте +Процедура ПроверитьАдресОбработчикОжидания() + + Для Каждого КлючИЗначение Из РеквизитыПроверкиАдреса Цикл + + Если КлючИЗначение.Значение Тогда + ПроверитьАдрес(КлючИЗначение.Ключ); + РеквизитыПроверкиАдреса[КлючИЗначение.Ключ] = Ложь; + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +&НаСервере +Процедура ПроверитьАдрес(ИмяРеквизита) + + Сообщение = Обработки.ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата.ПроверитьАдрес(ЭтотОбъект[ИмяРеквизита + "XML"]); + Если ЗначениеЗаполнено(Сообщение) Тогда + Элементы[ИмяРеквизита + "Предупреждение"].Подсказка = Сообщение; + Элементы[ИмяРеквизита + "Предупреждение"].Видимость = Истина; + Иначе + Элементы[ИмяРеквизита + "Предупреждение"].Видимость = Ложь; + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Функция ПроверитьСведенияОбОрганизации() + + ПроверяемыеРеквизиты = Новый Массив; + Для Каждого Реквизит Из СведенияОбОрганизации Цикл + + ИмяРеквизита = Реквизит.Ключ; + Если СтрНайти(ИмяРеквизита, "XML") > 0 + Или ИмяРеквизита = "Организация" + Или ИмяРеквизита = "ЭтоИндивидуальныйПредприниматель" + Или (ИмяРеквизита = "КПП" + И ЭтоИндивидуальныйПредприниматель) Тогда + + Продолжить; + КонецЕсли; + + ПараметрыРеквизитаДляПроверки = Новый Структура; + ПараметрыРеквизитаДляПроверки.Вставить("Имя", ИмяРеквизита); + Если ИмяРеквизита = "Телефон" + Или ИмяРеквизита = "ФактическийАдрес" + Или ИмяРеквизита = "ЮридическийАдрес" Тогда + ПараметрыРеквизитаДляПроверки.Вставить("Значение", ЭтотОбъект[ИмяРеквизита + "XML"]); + Иначе + ПараметрыРеквизитаДляПроверки.Вставить("Значение", ЭтотОбъект[ИмяРеквизита]); + КонецЕсли; + ПараметрыРеквизитаДляПроверки.Вставить("ПолеСообщения", ИмяРеквизита); + ПараметрыРеквизитаДляПроверки.Вставить("ТекстНезаполненного", + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Поле ""%1"" не заполнено'"), Элементы[ИмяРеквизита].Заголовок)); + + ПроверяемыеРеквизиты.Добавить(ПараметрыРеквизитаДляПроверки); + + КонецЦикла; + + Возврат Не Обработки.ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата.ПроверитьЗаполнениеРеквизитов( + ПроверяемыеРеквизиты, ЭтоИндивидуальныйПредприниматель); + +КонецФункции + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/Форма/Form.form b/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/Форма/Form.form index 9a635c096..01c97b946 100644 --- a/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/Форма/Form.form @@ -5,59 +5,22 @@ Заявление на выпуск нового квалифицированного сертификата - Шапка - 156 + ШапкаЗаявления + 813 - СтраницыПрогресса - 578 - - СтраницаПрогрессаСоглашение - 580 - - ДекорацияЭтапа1 - 575 - - <key>ru</key> - <value>Этап 1</value> - - true - true - - true - - - ДекорацияЭтапа1ExtendedTooltip - 577 - Label - true - true - - Left - - - - ДекорацияЭтапа1КонтекстноеМеню - 576 - true - - true - true - - - - + ГруппаОбработкаЗаявления + 766 + + ОбновитьСостояниеОбработкиЗаявления + 768 true true true - - <key>ru</key> - <value>Страница прогресса соглашение</value> - - СтраницаПрогрессаСоглашениеРасширеннаяПодсказка - 581 + ОбновитьСостояниеОбработкиЗаявленияРасширеннаяПодсказка + 769 Label true true @@ -65,31 +28,154 @@ Left - Page - - Vertical - auto - false + UsualButton + Form.Command.ОбновитьСостояниеОбработкиЗаявления + Normal + Auto + true + true + UserCmds + + Style.ToolTipBackColor + + Auto + + + СостояниеОбработкиЗаявления + 375 + + <key>ru</key> + <value>Состояние обработки заявления</value> + + true + true + + true + + + СостояниеОбработкиЗаявления + + + СостояниеОбработкиЗаявленияРасширеннаяПодсказка + 377 + Label + true + true + + Left + + + + СостояниеОбработкиЗаявленияКонтекстноеМеню + 376 + true + + LabelField + true + Enter + true + Left + true + + true - СтраницаПрогрессаОрганизация - 584 - - ДекорацияЭтапа2 - 596 - - <key>ru</key> - <value>Этап 1</value> - + ПанельТехническойИнформации + 794 + + ГруппаТехническаяИнформация + 796 + + ВыгрузитьЗапросНаСертификат + 805 + true + true + + true + + + ВыгрузитьЗапросНаСертификатРасширеннаяПодсказка + 806 + Label + true + true + + Left + + + Form.Command.ВыгрузитьЗапросНаСертификат + Normal + Auto + true + true + UserCmds + Auto + + + ВыгрузитьКорневойСертификат + 807 + true + true + + true + + + ВыгрузитьКорневойСертификатРасширеннаяПодсказка + 808 + Label + true + true + + Left + + + Form.Command.ВыгрузитьКорневойСертификат + Normal + Auto + true + true + UserCmds + Auto + + + ВыгрузитьСертификат + 809 + true + true + + true + + + ВыгрузитьСертификатРасширеннаяПодсказка + 810 + Label + true + true + + Left + + + Form.Command.ВыгрузитьСертификат + Normal + Auto + true + true + UserCmds + Auto + true true true + + <key>ru</key> + <value>Техническая информация</value> + - ДекорацияЭтапа2РасширеннаяПодсказка - 598 + ГруппаТехническаяИнформацияРасширеннаяПодсказка + 797 Label true true @@ -97,15 +183,11 @@ Left - - ДекорацияЭтапа2КонтекстноеМеню - 597 - true - - true - true - - + Popup + + Auto + None + Normal true @@ -115,11 +197,11 @@ <key>ru</key> - <value>Страница прогресса организация</value> + <value>Панель технической информации</value> - СтраницаПрогрессаОрганизацияРасширеннаяПодсказка - 585 + ПанельТехническойИнформацииРасширеннаяПодсказка + 795 Label true true @@ -127,383 +209,9 @@ Left - Page - - Vertical - auto - false - - - - СтраницаПрогрессаВладелецСертификата - 586 - - ДекорацияЭтапа3 - 599 - - <key>ru</key> - <value>Этап 1</value> - - true - true - - true - - - ДекорацияЭтапа3РасширеннаяПодсказка - 601 - Label - true - true - - Left - - - - ДекорацияЭтапа3КонтекстноеМеню - 600 - true - - true - true - - - - - true - true - - true - - - <key>ru</key> - <value>Страница прогресса владелец сертификата</value> - - - СтраницаПрогрессаВладелецСертификатаРасширеннаяПодсказка - 587 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - - - СтраницаПрогрессаПодготовкаЗапросаНаСертификат - 588 - - ДекорацияЭтапа4 - 602 - - <key>ru</key> - <value>Этап 1</value> - - true - true - - true - - - ДекорацияЭтапа4РасширеннаяПодсказка - 604 - Label - true - true - - Left - - - - ДекорацияЭтапа4КонтекстноеМеню - 603 - true - - true - true - - - - - true - true - - true - - - <key>ru</key> - <value>Страница прогресса подготовка запроса на сертификат</value> - - - СтраницаПрогрессаПодготовкаЗапросаНаСертификатРасширеннаяПодсказка - 589 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - - - СтраницаПрогрессаОтправкаЗаявления - 590 - - ДекорацияЭтапа5 - 605 - - <key>ru</key> - <value>Этап 1</value> - - true - true - - true - - - ДекорацияЭтапа5РасширеннаяПодсказка - 607 - Label - true - true - - Left - - - - ДекорацияЭтапа5КонтекстноеМеню - 606 - true - - true - true - - - - - true - true - - true - - - <key>ru</key> - <value>Страница прогресса отправка заявления</value> - - - СтраницаПрогрессаОтправкаЗаявленияРасширеннаяПодсказка - 591 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - - - СтраницаПрогрессаОжиданиеОбработкиЗаявления - 592 - - ДекорацияЭтапа6 - 608 - - <key>ru</key> - <value>Этап 1</value> - - true - true - - true - - - ДекорацияЭтапа6РасширеннаяПодсказка - 610 - Label - true - true - - Left - - - - ДекорацияЭтапа6КонтекстноеМеню - 609 - true - - true - true - - - - - true - true - - true - - - <key>ru</key> - <value>Страница прогресса ожидание обработки заявления</value> - - - СтраницаПрогрессаОжиданиеОбработкиЗаявленияРасширеннаяПодсказка - 593 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - - - СтраницаПрогрессаУстановкаСертификата - 594 - - ДекорацияЭтапа7 - 611 - - <key>ru</key> - <value>Этап 1</value> - - true - true - - true - - - ДекорацияЭтапа7РасширеннаяПодсказка - 613 - Label - true - true - - Left - - - - ДекорацияЭтапа7КонтекстноеМеню - 612 - true - - true - true - - - - - true - true - - true - - - <key>ru</key> - <value>Страница прогресса установка сертификата</value> - - - СтраницаПрогрессаУстановкаСертификатаРасширеннаяПодсказка - 595 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - - - СтраницаПрогрессаОбработанноеЗаявление - 614 - - ДекорацияЭтапа8 - 616 - - <key>ru</key> - <value>Этап 1</value> - - true - true - - true - - - ДекорацияЭтапа8РасширеннаяПодсказка - 618 - Label - true - true - - Left - - - - ДекорацияЭтапа8КонтекстноеМеню - 617 - true - - true - true - - - - - true - true - - true - - - <key>ru</key> - <value>Страница прогресса обработанное заявление</value> - - - СтраницаПрогрессаОбработанноеЗаявлениеРасширеннаяПодсказка - 615 - Label - true - true - - Left - - - Page - - Vertical - auto - false + CommandBar + + Right true @@ -513,11 +221,12 @@ <key>ru</key> - <value>Страницы прогресса</value> + <value>Обработка заявления</value> + Top - СтраницыПрогрессаРасширеннаяПодсказка - 579 + ГруппаОбработкаЗаявленияРасширеннаяПодсказка + 767 Label true true @@ -525,142 +234,43 @@ Left - Pages - + UsualGroup + + AlwaysHorizontal + Auto + true + true + + Style.ToolTipBackColor + + Auto Auto - ГоризонтальнаяГруппа8 - 582 - - ДекорацияУдостоверяющийЦентрЗаголовок - 236 - - <key>ru</key> - <value>Удостоверяющий центр:</value> - - true - true - - true - - - ДекорацияУдостоверяющийЦентрЗаголовокРасширеннаяПодсказка - 238 - Label - true - true - - Left - - - - ДекорацияУдостоверяющийЦентрЗаголовокКонтекстноеМеню - 237 - true - - Label - true - - Style.NormalTextFont - - - Left - - - - ДекорацияУдостоверяющийЦентрНаименование - 28 - - <key>ru</key> - <value>ООО "НПЦ "1С"</value> - - true - true - - true - - - ДекорацияУдостоверяющийЦентрНаименованиеРасширеннаяПодсказка - 30 - Label - true - true - - Left - - - - ДекорацияУдостоверяющийЦентрНаименованиеКонтекстноеМеню - 29 - true - - Label - true - - Style.NormalTextFont - true - false - false - false - - - - Click - ДекорацияУдостоверяющийЦентрНаименованиеНажатие - - true - Left - - - - ДекорацияОтступ - 158 - true - true - - true - - - ДекорацияОтступРасширеннаяПодсказка - 160 - Label - true - true - - Left - - - - ДекорацияОтступКонтекстноеМеню - 159 - true - - Label - 15 - true - true - false - - Left - - + ГруппаОрганизация + 728 - ОбъектСостояниеЗаявления - 161 + НаименованиеСокращенное + 783 + + <key>ru</key> + <value>Организация</value> + + + Style.ЗаявлениеНаВыпускСертификатаЗаголовокКлючевогоПоляШрифт + true true true - Объект.СостояниеЗаявления + НаименованиеСокращенное - None - ОбъектСостояниеЗаявленияРасширеннаяПодсказка - 163 + НаименованиеСокращенноеРасширеннаяПодсказка + 785 Label true true @@ -669,29 +279,726 @@ - ОбъектСостояниеЗаявленияКонтекстноеМеню - 162 + НаименованиеСокращенноеКонтекстноеМеню + 784 true InputField - true Enter true Left true - 15 + + StartChoice + НаименованиеСокращенноеНачалоВыбора + + + ChoiceProcessing + НаименованиеСокращенноеОбработкаВыбора + + 18 + true + true + true + true + true + Normal + + + + Организация + 50 + + Style.ЗаявлениеНаВыпускСертификатаЗаголовокКлючевогоПоляШрифт + + true + true + + true + + + Организация + + Left + + OnChange + ОрганизацияПриИзменении + + + ОрганизацияРасширеннаяПодсказка + 52 + Label + true + true + + Left + + + + ОрганизацияКонтекстноеМеню + 51 + true + + InputField + true + Enter + true + Left + true + + + Clearing + ОрганизацияОчистка + + true + true + true + true + true + true + Normal + + + + УказатьСведенияОбОрганизации + 730 + true + true + + true + + + УказатьСведенияОбОрганизацииРасширеннаяПодсказка + 731 + + <key>ru</key> + <value><b>Выберите </>организацию или<b> заполните сведения</> об организации с помощью кнопки <img 0:894afc03-9904-465d-b671-f555ffb9b21c/></value> + + true + Label + true + true + + Left + + + UsualButton + Form.Command.УказатьСведенияОбОрганизации + Normal + Auto + true + true + UserCmds + Button + Auto + WhenActive + + true + true + + true + + + <key>ru</key> + <value>Организация</value> + + Top + + ГруппаОрганизацияРасширеннаяПодсказка + 729 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + true + true + Auto + + + + ГруппаВладелецСертификата + 732 + + ВладелецСертификатаСтрокой + 786 + + <key>ru</key> + <value>Владелец сертификата</value> + + + Style.ЗаявлениеНаВыпускСертификатаЗаголовокКлючевогоПоляШрифт + + true + true + + true + + + ВладелецСертификатаСтрокой + + + ВладелецСертификатаСтрокойРасширеннаяПодсказка + 788 + Label + true + true + + Left + + + + ВладелецСертификатаСтрокойКонтекстноеМеню + 787 + true + + InputField + Enter + true + Left + true + + + StartChoice + ВладелецСертификатаСтрокойНачалоВыбора + + + ChoiceProcessing + ВладелецСертификатаСтрокойОбработкаВыбора + + 18 + true + true + true + true + ShowInDropList + true + true + Normal + + + + Сотрудник + 248 + + <key>ru</key> + <value>Владелец сертификата</value> + + + Style.ЗаявлениеНаВыпускСертификатаЗаголовокКлючевогоПоляШрифт + + true + true + + true + + + Сотрудник + + + OnChange + СотрудникПриИзменении + + + СотрудникРасширеннаяПодсказка + 250 + Label + true + true + + Left + + + + СотрудникКонтекстноеМеню + 249 + true + + InputField + true + Enter + true + Left + true + + + StartChoice + СотрудникНачалоВыбора + + + Clearing + СотрудникОчистка + + true + true + true + ShowInDropList + true + true + true + + TypeDescription + + Normal + + + + УказатьСведенияОВладельце + 734 + true + true + + true + + + УказатьСведенияОВладельцеРасширеннаяПодсказка + 735 + + <key>ru</key> + <value><b>Выберите</> владельца сертификата или <b>заполните сведения</> о владельце с помощью кнопки <img 0:894afc03-9904-465d-b671-f555ffb9b21c/></value> + + true + Label + true + true + + Left + + + UsualButton + Form.Command.УказатьСведенияОВладельце + Normal + Auto + true + true + UserCmds + Button + Auto + WhenActive + + true + true + + true + + + <key>ru</key> + <value>Владелец сертификата</value> + + Top + + ГруппаВладелецСертификатаРасширеннаяПодсказка + 733 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + true + true + Auto + + + + ГруппаПодписантЗаявления + 736 + + ДокументыРуководитель + 315 + + <key>ru</key> + <value>Подписант заявления</value> + + + Style.ЗаявлениеНаВыпускСертификатаЗаголовокКлючевогоПоляШрифт + + true + true + + true + + + ДокументыРуководитель + + + ru + Представитель организации, имеющий полномочия подписать заявление. + + Button + + OnChange + ДокументыРуководительПриИзменении + + + ДокументыРуководительРасширеннаяПодсказка + 317 + Label + true + true + + Left + + + + ДокументыРуководительКонтекстноеМеню + 316 + true + + InputField + true + Enter + true + Left + true + + + StartChoice + ДокументыРуководительНачалоВыбора + + + Opening + ДокументыРуководительОткрытие + + + Clearing + ДокументыРуководительОчистка + + + ChoiceProcessing + ДокументыРуководительОбработкаВыбора + + true + true + true + true + true + true + true + true + Normal + + + + ДокументыРуководительДолжность + 320 + true + true + + true + + + ДокументыРуководительДолжность + + + OnChange + РеквизитПриИзменении + + + ДокументыРуководительДолжностьРасширеннаяПодсказка + 322 + Label + true + true + + Left + + + + ДокументыРуководительДолжностьКонтекстноеМеню + 321 + true + + InputField + true + Enter + true + Left + true + + 25 + true + true + false + true + true + true + true + true + Normal + + + + ДокументыРуководительОснование + 546 + true + true + + true + + + ДокументыРуководительОснование + + + ru + Основание, на котором действует подписант: правовой акт, устав, доверенность. + + Button + + OnChange + РеквизитПриИзменении + + + ДокументыРуководительОснованиеРасширеннаяПодсказка + 548 + Label + true + true + + Left + + + + ДокументыРуководительОснованиеКонтекстноеМеню + 547 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + ru + Правовой акт, устав, доверенность + + + + true + true + + true + + + <key>ru</key> + <value>Подписант заявления</value> + + Top + + ГруппаПодписантЗаявленияРасширеннаяПодсказка + 737 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + Auto + + + + ГруппаОбслуживающаяОрганизация + 738 + + ДокументыПартнер + 512 + + <key>ru</key> + <value>Обслуживающая организация</value> + + + Style.ЗаявлениеНаВыпускСертификатаЗаголовокКлючевогоПоляШрифт + + true + true + + true + + + ДокументыПартнер + + + ru + Партнер фирмы 1С, который будет обрабатывать заявление. + + Button + + OnChange + ДокументыПартнерПриИзменении + + + ДокументыПартнерРасширеннаяПодсказка + 514 + Label + true + true + + Left + + + + ДокументыПартнерКонтекстноеМеню + 513 + true + + InputField + true + Enter + true + Left + true + + + StartChoice + ДокументыПартнерНачалоВыбора + + + Opening + ДокументыПартнерОткрытие + + + Clearing + ДокументыПартнерОчистка + + + ChoiceProcessing + ДокументыПартнерОбработкаВыбора + + true + true + true + true + true + true + true + true + Normal + + ru + Наименование + + + + + ДокументыПартнерИНН + 335 + true + true + + true + + + ДокументыПартнерИНН + + + OnChange + ДокументыПартнерИННПриИзменении + + + ДокументыПартнерИННРасширеннаяПодсказка + 337 + Label + true + true + + Left + + + + ДокументыПартнерИННКонтекстноеМеню + 336 + true + + InputField + Enter + true + Left + true + + 14 + true + true + false + true + true + true + true + Normal + + + + ДокументыПартнерКПП + 338 + true + true + + true + + + ДокументыПартнерКПП + + + OnChange + РеквизитПриИзменении + + + ДокументыПартнерКППРасширеннаяПодсказка + 340 + Label + true + true + + Left + + + + ДокументыПартнерКППКонтекстноеМеню + 339 + true + + InputField + Enter + true + Left + true + + 14 true true false true - false true true true - - Style.FormBackColor - Normal @@ -702,11 +1009,12 @@ <key>ru</key> - <value>Горизонтальная группа 8</value> + <value>Обслуживающая организация</value> + Top - ГоризонтальнаяГруппа8РасширеннаяПодсказка - 583 + ГруппаОбслуживающаяОрганизацияРасширеннаяПодсказка + 739 Label true true @@ -716,7 +1024,172 @@ UsualGroup - HorizontalIfPossible + Vertical + Auto + WeakSeparation + true + true + Auto + + + + ГруппаПрограмма + 740 + + ДекорацияКлючИЗапрос + 742 + + <key>ru</key> + <value>Создать ключ электронной подписи и запрос на сертификат</value> + + true + true + + true + + None + + ДекорацияКлючИЗапросРасширеннаяПодсказка + 744 + + <key>ru</key> + <value><b>Ключ электронной подписи</> - это секретная информация, которая сохраняется на компьютер, флешку, дискету или другой носитель информации и используется в дальнейшем для создания электронных подписей. + +<b>Запрос на сертификат</> - это не секретная информация, которая создается на основе ключа электронной подписи, отправляется вместе с заявлением на выпуск сертификата и требуется для выпуска сертификата.</value> + + true + Label + true + true + + Left + + + + ДекорацияКлючИЗапросКонтекстноеМеню + 743 + true + + Label + 46 + 46 + true + false + + Style.ЗаявлениеНаВыпускСертификатаЗаголовокКлючевогоПоляШрифт + + + Left + + + + Программа + 1 + + <key>ru</key> + <value>с помощью программы</value> + + true + true + + true + + + Объект.Программа + + Button + + ПрограммаРасширеннаяПодсказка + 3 + + <key>ru</key> + <value><color #807a59>Если не установлена программа электронной подписи, установите КриптоПро CSP или VipNet CSP.</><color #807a59> + +По вопросам работы программы обратитесь к ее документации. Или воспользуйтесь </><link %1>дополнительной инструкцией на сайте 1С</><color #807a59>. + +</><b><color #807a59>Ключ электронной подписи</></><color #807a59> - это секретная информация, которая сохраняется на компьютер, флешку, дискету или другой носитель информации и используется в дальнейшем для создания электронных подписей. + +</><b><color #807a59>Запрос на сертификат</></><color #807a59> - это не секретная информация, которая создается на основе ключа электронной подписи, отправляется вместе с заявлением на выпуск сертификата и требуется для выпуска сертификата.</></value> + + true + Label + true + true + + + URLProcessing + ПрограммаРасширеннаяПодсказкаОбработкаНавигационнойСсылки + + Left + + + + ПрограммаКонтекстноеМеню + 2 + true + + InputField + true + Enter + true + Left + true + + + AutoComplete + ПрограммаАвтоПодбор + + + StartChoice + ПрограммаНачалоВыбора + + + TextEditEnd + ПрограммаОкончаниеВводаТекста + + + ChoiceProcessing + ПрограммаОбработкаВыбора + + 20 + true + true + false + true + false + false + false + true + true + true + true + Normal + DontUse + + + true + true + + true + + + <key>ru</key> + <value>Программа</value> + + Top + + ГруппаПрограммаРасширеннаяПодсказка + 741 + Label + true + true + + Left + + + UsualGroup + + Vertical Auto true true @@ -731,6221 +1204,12 @@ <key>ru</key> - <value>Шапка</value> + <value>Шапка заявления</value> + true - ШапкаРасширеннаяПодсказка - 157 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - - Страницы - 7 - - СтраницаСоглашение - 34 - - Соглашение - 39 - true - true - - true - - - Соглашение - - None - - СоглашениеРасширеннаяПодсказка - 41 - Label - true - true - - Left - - - - СоглашениеКонтекстноеМеню - 40 - - СоглашениеКонтекстноеМенюКопироватьВБуферОбмена - 427 - true - true - - true - - - СоглашениеКонтекстноеМенюКопироватьВБуферОбменаРасширеннаяПодсказка - 428 - Label - true - true - - Left - - - Form.Item.Соглашение.StandardCommand.CopyToClipboard - Normal - Auto - true - true - UserCmds - Auto - - - СоглашениеКонтекстноеМенюВыделитьВсе - 429 - true - true - - true - - - СоглашениеКонтекстноеМенюВыделитьВсеРасширеннаяПодсказка - 430 - Label - true - true - - Left - - - Form.Item.Соглашение.StandardCommand.SelectAll - Normal - Auto - true - true - UserCmds - Auto - - - СоглашениеКонтекстноеМенюСохранитьКак - 431 - true - true - - true - - - СоглашениеКонтекстноеМенюСохранитьКакРасширеннаяПодсказка - 432 - Label - true - true - - Left - - - Form.Item.Соглашение.StandardCommand.SaveAs - Normal - Auto - true - true - UserCmds - Auto - - - СоглашениеКонтекстноеМенюПредварительныйПросмотр - 435 - true - true - - true - - - СоглашениеКонтекстноеМенюПредварительныйПросмотрРасширеннаяПодсказка - 436 - Label - true - true - - Left - - - Form.Item.Соглашение.StandardCommand.Preview - Normal - Auto - true - true - UserCmds - Auto - - - СоглашениеКонтекстноеМенюПечать - 433 - true - true - - true - - - СоглашениеКонтекстноеМенюПечатьРасширеннаяПодсказка - 434 - Label - true - true - - Left - - - Form.Item.Соглашение.StandardCommand.Print - Normal - Auto - true - true - UserCmds - Auto - - - FormattedDocumentField - true - Enter - true - Left - true - - 50 - true - 10 - true - true - - - - ПодтверждениеСоглашения - 36 - true - true - - true - - - ПодтверждениеСоглашения - - true - Right - - OnChange - ПодтверждениеСоглашенияПриИзменении - - - ПодтверждениеСоглашенияРасширеннаяПодсказка - 38 - Label - true - true - - Left - - - - ПодтверждениеСоглашенияКонтекстноеМеню - 37 - true - - CheckBoxField - Enter - true - Left - true - - - true - true - - true - - - <key>ru</key> - <value>Страница соглашение</value> - - - СтраницаСоглашениеРасширеннаяПодсказка - 35 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - - - СтраницаОрганизация - 48 - - ГруппаОрганизация - 128 - - ГруппаОрганизацияИВид - 718 - - Организация - 50 - true - true - - true - - - Организация - - None - - OnChange - ОрганизацияПриИзменении - - - ОрганизацияРасширеннаяПодсказка - 52 - Label - true - true - - Left - - - - ОрганизацияКонтекстноеМеню - 51 - true - - InputField - true - Enter - true - Left - true - - - Clearing - ОрганизацияОчистка - - 35 - true - true - false - true - true - true - true - true - - Style.ФонУправляющегоПоля - - Normal - - - - ЭтоИндивидуальныйПредприниматель1 - 715 - - <key>ru</key> - <value>Вид</value> - - true - true - - true - - - ЭтоИндивидуальныйПредприниматель - - - OnChange - ЭтоИндивидуальныйПредпринимательПриИзменении - - - ЭтоИндивидуальныйПредприниматель1РасширеннаяПодсказка - 717 - Label - true - true - - Left - - - - ЭтоИндивидуальныйПредприниматель1КонтекстноеМеню - 716 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - true - true - - - ru - Юридическое лицо - - - - - - ru - Индивидуальный предприниматель - - - true - - - Normal - - - true - true - - true - - - <key>ru</key> - <value>Организация и вид</value> - - - ГруппаОрганизацияИВидРасширеннаяПодсказка - 719 - Label - true - true - - Left - - - UsualGroup - - HorizontalIfPossible - Auto - true - true - Auto - Auto - - - - ВертикальнаяГруппа - 253 - - ЭтоИндивидуальныйПредприниматель2 - 712 - - <key>ru</key> - <value>Вид</value> - - true - - true - - - ЭтоИндивидуальныйПредприниматель - - - OnChange - ЭтоИндивидуальныйПредпринимательПриИзменении - - - ЭтоИндивидуальныйПредприниматель2РасширеннаяПодсказка - 714 - Label - true - true - - Left - - - - ЭтоИндивидуальныйПредприниматель2КонтекстноеМеню - 713 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - true - true - - - ru - Юридическое лицо - - - - - - ru - Индивидуальный предприниматель - - - true - - - Normal - - - - ГруппаОсновныеСведенияОрганизации - 53 - - НаименованиеСокращенное - 55 - true - true - - true - - - НаименованиеСокращенное - - - OnChange - РеквизитПриИзменении - - - НаименованиеСокращенноеРасширеннаяПодсказка - 57 - Label - true - true - - Left - - - - НаименованиеСокращенноеКонтекстноеМеню - 56 - true - - InputField - true - Enter - true - Left - true - - 55 - true - true - true - true - true - true - Normal - - - - НаименованиеПолное - 58 - true - true - - true - - - НаименованиеПолное - - - OnChange - РеквизитПриИзменении - - - НаименованиеПолноеРасширеннаяПодсказка - 60 - Label - true - true - - Left - - - - НаименованиеПолноеКонтекстноеМеню - 59 - true - - InputField - true - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - - - ГруппаНомеров - 531 - - ВертикальнаяГруппа1 - 533 - - ГоризонтальнаяГруппа7 - 130 - - ИНН - 61 - true - true - - true - - - ИНН - - - OnChange - РеквизитПриИзменении - - - ИННРасширеннаяПодсказка - 63 - Label - true - true - - Left - - - - ИННКонтекстноеМеню - 62 - true - - InputField - true - Enter - true - Left - true - - true - true - false - true - true - true - true - true - Normal - - - - КПП - 64 - true - true - - true - - - КПП - - - OnChange - РеквизитПриИзменении - - - КППРасширеннаяПодсказка - 66 - Label - true - true - - Left - - - - КППКонтекстноеМеню - 65 - true - - InputField - true - Enter - true - Left - true - - true - true - true - true - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Горизонтальная группа 7</value> - - - ГоризонтальнаяГруппа7РасширеннаяПодсказка - 131 - Label - true - true - - Left - - - UsualGroup - - HorizontalIfPossible - Auto - true - true - Auto - Auto - - - - РасчетныйСчет - 517 - true - true - - true - - - РасчетныйСчет - - - ru - Основной расчетный счет для заполнения реквизитов стандартного договора. - - Button - - OnChange - РеквизитПриИзменении - - - РасчетныйСчетРасширеннаяПодсказка - 519 - Label - true - true - - Left - - - - РасчетныйСчетКонтекстноеМеню - 518 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - - - КорреспондентскийСчет - 523 - true - true - - true - - - КорреспондентскийСчет - - - OnChange - РеквизитПриИзменении - - - КорреспондентскийСчетРасширеннаяПодсказка - 525 - Label - true - true - - Left - - - - КорреспондентскийСчетКонтекстноеМеню - 524 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Вертикальная группа 1</value> - - - ВертикальнаяГруппа1РасширеннаяПодсказка - 534 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - - ВертикальнаяГруппа2 - 535 - - ОГРН - 67 - true - true - - true - - - ОГРН - - - OnChange - РеквизитПриИзменении - - - ОГРНРасширеннаяПодсказка - 69 - Label - true - true - - Left - - - - ОГРНКонтекстноеМеню - 68 - true - - InputField - true - Enter - true - Left - true - - true - true - true - true - true - true - true - Normal - - - - БИК - 520 - - <key>ru</key> - <value>БИК</value> - - true - true - - true - - - БИК - - - OnChange - РеквизитПриИзменении - - - БИКРасширеннаяПодсказка - 522 - Label - true - true - - Left - - - - БИККонтекстноеМеню - 521 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Вертикальная группа 2</value> - - - ВертикальнаяГруппа2РасширеннаяПодсказка - 536 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Номеров</value> - - - ГруппаНомеровРасширеннаяПодсказка - 532 - Label - true - true - - Left - - - UsualGroup - - HorizontalIfPossible - Auto - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Основные сведения</value> - - - ГруппаОсновныеСведенияОрганизацииРасширеннаяПодсказка - 54 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - - ГруппаКонтактнаяИнформацияОрганизации - 70 - - ГруппаЮридическийАдрес - 457 - - ЮридическийАдрес - 72 - true - true - - true - - - ЮридическийАдрес - - - ЮридическийАдресРасширеннаяПодсказка - 74 - Label - true - true - - Left - - - - ЮридическийАдресКонтекстноеМеню - 73 - true - - InputField - true - Enter - true - Left - true - - - StartChoice - ЮридическийАдресНачалоВыбора - - - Clearing - ЮридическийАдресОчистка - - - ChoiceProcessing - ЮридическийАдресОбработкаВыбора - - true - true - true - true - true - true - Normal - - - - ЮридическийАдресПредупреждение - 461 - - <key>ru</key> - <value>Юридический адрес предупреждение</value> - - true - true - - true - - - ЮридическийАдресПредупреждениеРасширеннаяПодсказка - 463 - Label - true - true - - Left - - - - ЮридическийАдресПредупреждениеКонтекстноеМеню - 462 - true - - true - true - true - Center - - - Click - АдресПредупреждениеНажатие - - - CommonPicture.Предупреждение - - true - - - true - true - - true - - - <key>ru</key> - <value>Юридический адрес</value> - - - ГруппаЮридическийАдресРасширеннаяПодсказка - 458 - Label - true - true - - Left - - - UsualGroup - - HorizontalIfPossible - Auto - true - true - Auto - Auto - - - - ГруппаФактическийАдрес - 459 - - ФактическийАдрес - 75 - true - true - - true - - - ФактическийАдрес - - - ФактическийАдресРасширеннаяПодсказка - 77 - Label - true - true - - Left - - - - ФактическийАдресКонтекстноеМеню - 76 - true - - InputField - true - Enter - true - Left - true - - - StartChoice - ФактическийАдресНачалоВыбора - - - Clearing - ФактическийАдресОчистка - - - ChoiceProcessing - ФактическийАдресОбработкаВыбора - - true - true - true - true - true - true - Normal - - - - ФактическийАдресПредупреждение - 464 - - <key>ru</key> - <value>Фактический адрес предупреждение</value> - - true - true - - true - - - ФактическийАдресПредупреждениеРасширеннаяПодсказка - 466 - Label - true - true - - Left - - - - ФактическийАдресПредупреждениеКонтекстноеМеню - 465 - true - - true - true - true - Center - - - Click - АдресПредупреждениеНажатие - - - CommonPicture.Предупреждение - - true - - - true - true - - true - - - <key>ru</key> - <value>Фактический адрес</value> - - - ГруппаФактическийАдресРасширеннаяПодсказка - 460 - Label - true - true - - Left - - - UsualGroup - - HorizontalIfPossible - Auto - true - true - Auto - Auto - - - - Телефон - 78 - true - true - - true - - - Телефон - - - ТелефонРасширеннаяПодсказка - 80 - Label - true - true - - Left - - - - ТелефонКонтекстноеМеню - 79 - true - - InputField - true - Enter - true - Left - true - - - StartChoice - ТелефонНачалоВыбора - - - Clearing - ТелефонОчистка - - - ChoiceProcessing - ТелефонОбработкаВыбора - - 25 - true - true - false - true - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Контактная информация</value> - - - ГруппаКонтактнаяИнформацияОрганизацииРасширеннаяПодсказка - 71 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - auto - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Вертикальная группа</value> - - false - - ВертикальнаяГруппаРасширеннаяПодсказка - 254 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - NormalSeparation - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Организация</value> - - - ГруппаОрганизацияРасширеннаяПодсказка - 129 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - WeakSeparation - true - true - auto - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Страница организация</value> - - - СтраницаОрганизацияРасширеннаяПодсказка - 49 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - - - СтраницаВладелецСертификата - 81 - - ГруппаВладелецСертификата - 105 - - ГруппаВладелецДолжностьПодразделение - 700 - - ГруппаВладелецДолжность - 702 - - Сотрудник - 248 - true - true - - true - - - Сотрудник - - - OnChange - СотрудникПриИзменении - - - СотрудникРасширеннаяПодсказка - 250 - Label - true - true - - Left - - - - СотрудникКонтекстноеМеню - 249 - true - - InputField - true - Enter - true - Left - true - - - StartChoice - СотрудникНачалоВыбора - - - Clearing - СотрудникОчистка - - 30 - true - true - false - true - true - ShowInDropList - true - true - true - - TypeDescription - - Normal - - - - Должность - 95 - true - true - - true - - - Должность - - - OnChange - РеквизитПриИзменении - - - ДолжностьРасширеннаяПодсказка - 97 - Label - true - true - - Left - - - - ДолжностьКонтекстноеМеню - 96 - true - - InputField - true - Enter - true - Left - true - - 30 - true - true - false - true - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Владелец должность</value> - - - ГруппаВладелецДолжностьРасширеннаяПодсказка - 703 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - - Подразделение - 98 - true - true - - true - - - Подразделение - - - ru - Заполнить, если владелец сертификата находится в обособленном подразделении, -фактический адрес которого отличается от фактического адреса организации. - - Button - - OnChange - РеквизитПриИзменении - - - ПодразделениеРасширеннаяПодсказка - 100 - Label - true - true - - Left - - - - ПодразделениеКонтекстноеМеню - 99 - true - - InputField - Enter - true - Left - true - - 15 - true - true - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Владелец должность подразделение</value> - - - ГруппаВладелецДолжностьПодразделениеРасширеннаяПодсказка - 701 - Label - true - true - - Left - - - UsualGroup - - HorizontalIfPossible - Auto - true - true - Auto - Auto - - - - ОсновныеРеквизиты - 251 - - ГруппаФИО - 101 - - Фамилия - 83 - true - true - - true - - - Фамилия - - - OnChange - РеквизитПриИзменении - - - ФамилияРасширеннаяПодсказка - 85 - Label - true - true - - Left - - - - ФамилияКонтекстноеМеню - 84 - true - - InputField - true - Enter - true - Left - true - - 15 - true - true - true - true - true - true - true - Normal - - - - Имя - 86 - true - true - - true - - - Имя - - - OnChange - РеквизитПриИзменении - - - ИмяРасширеннаяПодсказка - 88 - Label - true - true - - Left - - - - ИмяКонтекстноеМеню - 87 - true - - InputField - true - Enter - true - Left - true - - 15 - true - true - true - true - true - true - true - Normal - - - - Отчество - 89 - true - true - - true - - - Отчество - - - OnChange - РеквизитПриИзменении - - - ОтчествоРасширеннаяПодсказка - 91 - Label - true - true - - Left - - - - ОтчествоКонтекстноеМеню - 90 - true - - InputField - Enter - true - Left - true - - 15 - true - true - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Владелец сертификата</value> - - 25 - false - - ГруппаФИОРасширеннаяПодсказка - 102 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - - ДополнительныеРеквизиты - 103 - - ГруппаДатаРожденияПол - 669 - - ДатаРождения - 660 - true - true - - true - - - ДатаРождения - - - ДатаРожденияРасширеннаяПодсказка - 662 - Label - true - true - - Left - - - - ДатаРожденияКонтекстноеМеню - 661 - true - - InputField - true - Enter - true - Left - true - - 16 - true - true - true - true - true - true - true - Normal - - - - Пол - 657 - true - true - - true - - - Пол - - - ПолРасширеннаяПодсказка - 659 - Label - true - true - - Left - - - - ПолКонтекстноеМеню - 658 - true - - InputField - true - Enter - true - Left - true - - 10 - true - true - true - true - true - true - true - - - ru - Мужской - - - Мужской - - - - - ru - Женский - - - Женский - - - Normal - - - true - true - - true - - - <key>ru</key> - <value>Дата рождения пол</value> - - - ГруппаДатаРожденияПолРасширеннаяПодсказка - 670 - Label - true - true - - Left - - - UsualGroup - - HorizontalIfPossible - Auto - true - true - Auto - Auto - - - - МестоРождения - 663 - true - true - - true - - - МестоРождения - - - OnChange - РеквизитПриИзменении - - - МестоРожденияРасширеннаяПодсказка - 665 - Label - true - true - - Left - - - - МестоРожденияКонтекстноеМеню - 664 - true - - InputField - true - Enter - true - Left - true - - 20 - true - true - true - true - true - true - true - Normal - - - - ГруппаГражданствоСНИЛС - 671 - - Гражданство - 695 - true - true - - true - - - Гражданство - - - OnChange - ГражданствоПриИзменении - - - ГражданствоРасширеннаяПодсказка - 697 - Label - true - true - - Left - - - - ГражданствоКонтекстноеМеню - 696 - true - - InputField - true - Enter - true - Left - true - - 15 - true - true - true - false - true - ShowInInputField - false - true - true - true - true - Normal - - - - СтраховойНомерПФР - 92 - true - true - - true - - - СтраховойНомерПФР - - - OnChange - СтраховойНомерПФРПриИзменении - - - СтраховойНомерПФРРасширеннаяПодсказка - 94 - Label - true - true - - Left - - - - СтраховойНомерПФРКонтекстноеМеню - 93 - true - - InputField - true - Enter - true - Left - true - - true - true - true - 999-999-999 99 - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Гражданство СНИЛС</value> - - - ГруппаГражданствоСНИЛСРасширеннаяПодсказка - 672 - Label - true - true - - Left - - - UsualGroup - - HorizontalIfPossible - Auto - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Дополнительные реквизиты</value> - - false - - ДополнительныеРеквизитыРасширеннаяПодсказка - 104 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Основные реквизиты</value> - - - ОсновныеРеквизитыРасширеннаяПодсказка - 252 - Label - true - true - - Left - - - UsualGroup - - HorizontalIfPossible - Auto - NormalSeparation - true - true - Auto - Auto - - - - ГруппаДокумент - 107 - - ГруппаВидДокумента - 124 - - ДокументВид - 274 - - <key>ru</key> - <value>Вид документа</value> - - true - true - - true - - - ДокументВид - - - OnChange - ДокументВидПриИзменении - - - ДокументВидРасширеннаяПодсказка - 276 - Label - true - true - - Left - - - - ДокументВидКонтекстноеМеню - 275 - true - - InputField - true - Enter - true - Left - true - - - Clearing - ДокументВидОчистка - - true - true - true - true - true - true - true - true - - - ru - Паспорт гражданина Российской Федерации - - - 21 - - - - - ru - Иной документ, предусмотренный законодательством Российской Федерации - - - 91 - - - Normal - - - - ГруппаКемВыданКодПодразделения - 704 - - ДокументКемВыдан - 118 - true - true - - true - - - ДокументКемВыдан - - Left - - OnChange - РеквизитПриИзменении - - - ДокументКемВыданРасширеннаяПодсказка - 120 - Label - true - true - - Left - - - - ДокументКемВыданКонтекстноеМеню - 119 - true - - InputField - true - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - - - ДокументКодПодразделения - 709 - true - true - - true - - - ДокументКодПодразделения - - Left - - OnChange - ДокументКодПодразделенияПриИзменении - - - ДокументКодПодразделенияРасширеннаяПодсказка - 711 - Label - true - true - - Left - - - - ДокументКодПодразделенияКонтекстноеМеню - 710 - true - - InputField - true - Enter - true - Left - true - - 5 - true - true - false - true - 999-999 - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Кем выдан код подразделения</value> - - - ГруппаКемВыданКодПодразделенияРасширеннаяПодсказка - 705 - Label - true - true - - Left - - - UsualGroup - - HorizontalIfPossible - Auto - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Вид документа</value> - - 20 - true - - ГруппаВидДокументаРасширеннаяПодсказка - 125 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - - ГруппаСерияНомерДатаВыдачи - 126 - - ДокументНомер - 112 - true - true - - true - - - ДокументНомер - - - OnChange - ДокументНомерПриИзменении - - - ДокументНомерРасширеннаяПодсказка - 114 - Label - true - true - - Left - - - - ДокументНомерКонтекстноеМеню - 113 - true - - InputField - true - Enter - true - Left - true - - 9 - true - true - false - true - 99 99 999999 - true - true - true - true - Normal - - - - ДокументДатаВыдачи - 121 - true - true - - true - - - ДокументДатаВыдачи - - - ДокументДатаВыдачиРасширеннаяПодсказка - 123 - Label - true - true - - Left - - - - ДокументДатаВыдачиКонтекстноеМеню - 122 - true - - InputField - true - Enter - true - Left - true - - 9 - true - true - true - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Серия номер дата выдачи</value> - - - ГруппаСерияНомерДатаВыдачиРасширеннаяПодсказка - 127 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Документ, удостоверяющий личность</value> - - - ГруппаДокументРасширеннаяПодсказка - 108 - Label - true - true - - Left - - - UsualGroup - - HorizontalIfPossible - Auto - true - true - auto - DontUse - Auto - - - - ГруппаКонтакты - 540 - - ЭлектроннаяПочта - 537 - true - true - - true - - - ЭлектроннаяПочта - - - OnChange - РеквизитПриИзменении - - - ЭлектроннаяПочтаРасширеннаяПодсказка - 539 - Label - true - true - - Left - - - - ЭлектроннаяПочтаКонтекстноеМеню - 538 - true - - InputField - Enter - true - Left - true - - 25 - true - true - false - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Контактная информация</value> - - - ГруппаКонтактыРасширеннаяПодсказка - 541 - Label - true - true - - Left - - - UsualGroup - - HorizontalIfPossible - Auto - true - true - auto - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Владелец сертификата</value> - - - ГруппаВладелецСертификатаРасширеннаяПодсказка - 106 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - WeakSeparation - true - true - auto - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Страница владелец сертификата</value> - - - СтраницаВладелецСертификатаРасширеннаяПодсказка - 82 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - - - СтраницаПодготовкаЗапросаНаСертификат - 132 - - ПодготовкаЗапросаНаСертификат - 134 - - РеквизитыЗаявления - 279 - - <key>ru</key> - <value>Заявление заполнено. Проверьте введенные данные</value> - - true - true - - true - - - РеквизитыЗаявления - - Top - - РеквизитыЗаявленияРеквизит - 298 - true - true - - true - - - РеквизитыЗаявления.Реквизит - - - РеквизитыЗаявленияРеквизитРасширеннаяПодсказка - 300 - Label - true - true - - Left - - - - РеквизитыЗаявленияРеквизитКонтекстноеМеню - 299 - true - - InputField - Auto - true - Left - true - - 16 - true - true - true - true - true - true - Normal - - - - РеквизитыЗаявленияЗначение - 301 - true - true - - true - - - РеквизитыЗаявления.Значение - - - РеквизитыЗаявленияЗначениеРасширеннаяПодсказка - 303 - Label - true - true - - Left - - - - РеквизитыЗаявленияЗначениеКонтекстноеМеню - 302 - true - - InputField - Auto - true - Left - true - - 25 - true - true - true - true - true - true - Normal - - - None - - РеквизитыЗаявленияКоманднаяПанель - 281 - Left - true - - - РеквизитыЗаявленияСтрокаПоиска - 283 - - РеквизитыЗаявленияСтрокаПоискаРасширеннаяПодсказка - 287 - Label - true - true - - Left - - - - РеквизитыЗаявленияСтрокаПоискаКонтекстноеМеню - 286 - true - - РеквизитыЗаявления - - true - - - - РеквизитыЗаявленияСостояниеПросмотра - 288 - - РеквизитыЗаявленияСостояниеПросмотраРасширеннаяПодсказка - 292 - Label - true - true - - Left - - - - РеквизитыЗаявленияСостояниеПросмотраКонтекстноеМеню - 291 - true - - ViewStatusAddition - РеквизитыЗаявления - - true - - - - РеквизитыЗаявленияУправлениеПоиском - 293 - - РеквизитыЗаявленияУправлениеПоискомРасширеннаяПодсказка - 297 - Label - true - true - - Left - - - - РеквизитыЗаявленияУправлениеПоискомКонтекстноеМеню - 296 - true - - SearchControlAddition - РеквизитыЗаявления - - true - - - - РеквизитыЗаявленияРасширеннаяПодсказка - 282 - Label - true - true - - Left - - - - РеквизитыЗаявленияКонтекстноеМеню - 280 - - true - true - true - true - true - true - MultiRow - 1 - 1 - AutoUse - AutoUse - true - true - false - true - Auto - Auto - true - true - true - true - true - - - - ДекорацияСозданиеКлюча - 304 - - <key>ru</key> - <value>Нажмите <b>Далее</>, чтобы создать <link КлючЭлектроннойПодписи>ключ электронной подписи</> и <link ЗапросНаСертификат>запрос на сертификат</></value> - - true - true - - true - - - ДекорацияСозданиеКлючаРасширеннаяПодсказка - 306 - Label - true - true - - Left - - - - ДекорацияСозданиеКлючаКонтекстноеМеню - 305 - true - - true - Label - true - - - URLProcessing - ДекорацияСозданиеКлючаОбработкаНавигационнойСсылки - - Left - - - - ГоризонтальнаяГруппа1 - 440 - - Программа - 1 - - <key>ru</key> - <value>с помощью программы</value> - - true - true - - true - - - Объект.Программа - - None - - ПрограммаРасширеннаяПодсказка - 3 - Label - true - true - - Left - - - - ПрограммаКонтекстноеМеню - 2 - true - - InputField - true - Enter - true - Left - true - - - AutoComplete - ПрограммаАвтоПодбор - - - StartChoice - ПрограммаНачалоВыбора - - - TextEditEnd - ПрограммаОкончаниеВводаТекста - - - ChoiceProcessing - ПрограммаОбработкаВыбора - - 19 - true - true - false - true - false - false - false - true - true - true - true - Normal - DontUse - - - - ДекорацияПояснениеПрограммы - 307 - - <key>ru</key> - <value>По вопросам работы программы обратитесь к ее документации. -<link %1>Или воспользуйтесь дополнительной инструкцией на сайте 1С</>.</value> - - true - true - - true - - - ДекорацияПояснениеПрограммыРасширеннаяПодсказка - 309 - Label - true - true - - Left - - - - ДекорацияПояснениеПрограммыКонтекстноеМеню - 308 - true - - true - Label - true - - - URLProcessing - ДекорацияПояснениеПрограммыОбработкаНавигационнойСсылки - - Left - - - true - true - - true - - - <key>ru</key> - <value>Горизонтальная группа 1</value> - - - ГоризонтальнаяГруппа1РасширеннаяПодсказка - 441 - Label - true - true - - Left - - - UsualGroup - - HorizontalIfPossible - Auto - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Создание ключа электронной подписи</value> - - - ПодготовкаЗапросаНаСертификатРасширеннаяПодсказка - 135 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - WeakSeparation - true - true - auto - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Страница подготовка запроса на сертификат</value> - - - СтраницаПодготовкаЗапросаНаСертификатРасширеннаяПодсказка - 133 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - - - СтраницаОтправкаЗаявления - 166 - - ОтправкаЗаявления - 168 - - ВертикальнаяГруппа4 - 356 - - ИнструкцияИП - 551 - - ГоризонтальнаяГруппа6 - 553 - - ИнструкцияИППункт1 - 555 - - <key>ru</key> - <value>1. Напечатайте заявление</value> - - true - true - - true - - - ИнструкцияИППункт1РасширеннаяПодсказка - 557 - Label - true - true - - Left - - - - ИнструкцияИППункт1КонтекстноеМеню - 556 - true - - true - Label - true - - Left - - - - НапечататьДокументы1 - 558 - - <key>ru</key> - <value>Печать ...</value> - - true - true - - true - - - НапечататьДокументы1РасширеннаяПодсказка - 559 - Label - true - true - - Left - - - UsualButton - Form.Command.НапечататьДокументы - Normal - Auto - true - true - UserCmds - Auto - - - ДекорацияЗаявлениеПодготовлено9 - 560 - - <key>ru</key> - <value>Проверьте.</value> - - true - true - - true - - - ДекорацияЗаявлениеПодготовлено9РасширеннаяПодсказка - 562 - Label - true - true - - Left - - - - ДекорацияЗаявлениеПодготовлено9КонтекстноеМеню - 561 - true - - true - Label - true - - Left - - - true - true - - true - - - <key>ru</key> - <value>Горизонтальная группа 3</value> - - - ГоризонтальнаяГруппа6РасширеннаяПодсказка - 554 - Label - true - true - - Left - - - UsualGroup - - HorizontalIfPossible - Auto - true - true - Auto - Auto - - - - ИнструкцияИППункт2 - 563 - - <key>ru</key> - <value>2. Подготовьте и подпишите <link КомплектДокументов>комплект </><link КомплектДокументов>документов</>.</value> - - true - true - - true - - - ИнструкцияИППункт2РасширеннаяПодсказка - 565 - Label - true - true - - Left - - - - ИнструкцияИППункт2КонтекстноеМеню - 564 - true - - true - Label - true - - - URLProcessing - ИнструкцияОбработкаНавигационнойСсылки - - Left - - - - ИнструкцияПунктИП21 - 566 - - <key>ru</key> - <value> Пока комплект документов будет готовится, заявление можно закрыть, а позже открыть и продолжить.</value> - - true - true - - true - - - ИнструкцияПунктИП21РасширеннаяПодсказка - 568 - Label - true - true - - Left - - - - ИнструкцияПунктИП21КонтекстноеМеню - 567 - true - - true - Label - true - - Style.ПоясняющийТекст - - - Left - - - - ИнструкцияИППункт3 - 569 - - <key>ru</key> - <value>3. Передайте подписанный <link КомплектДокументов>комплект документов</> уполномоченному представителю вашей обслуживающей организации.</value> - - true - true - - true - - - ИнструкцияИППункт3РасширеннаяПодсказка - 571 - Label - true - true - - Left - - - - ИнструкцияИППункт3КонтекстноеМеню - 570 - true - - true - Label - true - - - URLProcessing - ИнструкцияОбработкаНавигационнойСсылки - - Left - - - true - - true - - - <key>ru</key> - <value>Инструкция индивидуального предпринимателя</value> - - - ИнструкцияИПРасширеннаяПодсказка - 552 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - - ИнструкцияЮЛ - 549 - - ИнструкцияЮЛПункт1 - 341 - - <key>ru</key> - <value>1. Подготовьте заявление к печати.</value> - - true - true - - true - - - ИнструкцияЮЛПункт1РасширеннаяПодсказка - 343 - Label - true - true - - Left - - - - ИнструкцияЮЛПункт1КонтекстноеМеню - 342 - true - - true - Label - true - - Left - - - - ВертикальнаяГруппа5 - 544 - - ГруппаРуководитель - 326 - - ГоризонтальнаяГруппа - 318 - - ДокументыРуководитель - 315 - true - true - - true - - - ДокументыРуководитель - - None - - OnChange - ДокументыРуководительПриИзменении - - - ДокументыРуководительРасширеннаяПодсказка - 317 - Label - true - true - - Left - - - - ДокументыРуководительКонтекстноеМеню - 316 - true - - InputField - true - Enter - true - Left - true - - - StartChoice - ДокументыРуководительНачалоВыбора - - - Opening - ДокументыРуководительОткрытие - - - Clearing - ДокументыРуководительОчистка - - - ChoiceProcessing - ДокументыРуководительОбработкаВыбора - - true - true - true - true - true - true - true - true - true - Normal - - ru - Введите ФИО руководителя - - - - - ДокументыРуководительДолжность - 320 - true - true - - true - - - ДокументыРуководительДолжность - - - OnChange - РеквизитПриИзменении - - - ДокументыРуководительДолжностьРасширеннаяПодсказка - 322 - Label - true - true - - Left - - - - ДокументыРуководительДолжностьКонтекстноеМеню - 321 - true - - InputField - true - Enter - true - Left - true - - true - true - true - true - true - true - true - Normal - - ru - Введите должность руководителя - - - - true - true - - true - - - <key>ru</key> - <value>Горизонтальная группа</value> - - - ГоризонтальнаяГруппаРасширеннаяПодсказка - 319 - Label - true - true - - Left - - - UsualGroup - - HorizontalIfPossible - Auto - true - true - Auto - Auto - - - - ДокументыРуководительОснование - 546 - true - true - - true - - - ДокументыРуководительОснование - - - OnChange - РеквизитПриИзменении - - - ДокументыРуководительОснованиеРасширеннаяПодсказка - 548 - Label - true - true - - Left - - - - ДокументыРуководительОснованиеКонтекстноеМеню - 547 - true - - InputField - true - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - ru - Введите основание: устав, доверенность, приказ ... - - - - true - true - - true - - - <key>ru</key> - <value>Укажите руководителя, который будет подписывать документ:</value> - - - ГруппаРуководительРасширеннаяПодсказка - 327 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - auto - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Вертикальная группа 5</value> - - - ВертикальнаяГруппа5РасширеннаяПодсказка - 545 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - - ГоризонтальнаяГруппа3 - 504 - - ИнструкцияПункт2 - 344 - - <key>ru</key> - <value>2. Напечатайте заявление</value> - - true - true - - true - - - ИнструкцияПункт2РасширеннаяПодсказка - 346 - Label - true - true - - Left - - - - ИнструкцияПункт2КонтекстноеМеню - 345 - true - - true - Label - true - - Left - - - - НапечататьДокументы - 502 - - <key>ru</key> - <value>Печать ...</value> - - true - true - - true - - - НапечататьДокументыРасширеннаяПодсказка - 503 - Label - true - true - - Left - - - UsualButton - Form.Command.НапечататьДокументы - Normal - Auto - true - true - UserCmds - Auto - - - ДекорацияЗаявлениеПодготовлено8 - 506 - - <key>ru</key> - <value>Проверьте.</value> - - true - true - - true - - - ДекорацияЗаявлениеПодготовлено8РасширеннаяПодсказка - 508 - Label - true - true - - Left - - - - ДекорацияЗаявлениеПодготовлено8КонтекстноеМеню - 507 - true - - true - Label - true - - Left - - - true - true - - true - - - <key>ru</key> - <value>Горизонтальная группа 3</value> - - - ГоризонтальнаяГруппа3РасширеннаяПодсказка - 505 - Label - true - true - - Left - - - UsualGroup - - HorizontalIfPossible - Auto - true - true - Auto - Auto - - - - ИнструкцияЮЛПункт3 - 347 - - <key>ru</key> - <value>3. Передайте <link КомплектДокументов>комплект </><link КомплектДокументов>документов</> на подпись руководителю, который выбран выше.</value> - - true - true - - true - - - ИнструкцияЮЛПункт3РасширеннаяПодсказка - 349 - Label - true - true - - Left - - - - ИнструкцияЮЛПункт3КонтекстноеМеню - 348 - true - - true - Label - true - - - URLProcessing - ИнструкцияОбработкаНавигационнойСсылки - - Left - - - - ИнструкцияЮЛПункт31 - 509 - - <key>ru</key> - <value> Пока комплект документов будет готовится, заявление можно закрыть, а позже открыть и продолжить.</value> - - true - true - - true - - - ИнструкцияЮЛПункт31РасширеннаяПодсказка - 511 - Label - true - true - - Left - - - - ИнструкцияЮЛПункт31КонтекстноеМеню - 510 - true - - true - Label - true - - Style.ПоясняющийТекст - - - Left - - - - ИнструкцияЮЛПункт4 - 350 - - <key>ru</key> - <value>4. Передайте подписанный <link КомплектДокументов>комплект документов</> уполномоченному представителю вашей обслуживающей организации.</value> - - true - true - - true - - - ИнструкцияЮЛПункт4РасширеннаяПодсказка - 352 - Label - true - true - - Left - - - - ИнструкцияЮЛПункт4КонтекстноеМеню - 351 - true - - true - Label - true - - - URLProcessing - ИнструкцияОбработкаНавигационнойСсылки - - Left - - - true - true - - true - - - <key>ru</key> - <value>Инструкция юридического лица</value> - - - ИнструкцияЮЛРасширеннаяПодсказка - 550 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - - ГруппаПартнер - 328 - - ГруппаПартнерИВид - 333 - - ДокументыПартнер - 512 - true - true - - true - - - ДокументыПартнер - - None - - OnChange - ДокументыПартнерПриИзменении - - - ДокументыПартнерРасширеннаяПодсказка - 514 - Label - true - true - - Left - - - - ДокументыПартнерКонтекстноеМеню - 513 - true - - InputField - Enter - true - Left - true - - - StartChoice - ДокументыПартнерНачалоВыбора - - - Opening - ДокументыПартнерОткрытие - - - Clearing - ДокументыПартнерОчистка - - - ChoiceProcessing - ДокументыПартнерОбработкаВыбора - - true - true - true - true - true - true - true - true - Normal - - ru - Введите наименование партнера - - - - - ДокументыПартнерЭтоИП - 720 - - <key>ru</key> - <value>Вид</value> - - true - true - - true - - - ДокументыПартнерЭтоИП - - - OnChange - ДокументыПартнерЭтоИППриИзменении - - - ДокументыПартнерЭтоИПРасширеннаяПодсказка - 722 - Label - true - true - - Left - - - - ДокументыПартнерЭтоИПКонтекстноеМеню - 721 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - true - true - - - ru - Юридическое лицо - - - - - - ru - Индивидуальный предприниматель - - - true - - - Normal - - - true - true - - true - - - <key>ru</key> - <value>Партнер и вид</value> - - - ГруппаПартнерИВидРасширеннаяПодсказка - 334 - Label - true - true - - Left - - - UsualGroup - - HorizontalIfPossible - Auto - true - true - Auto - Auto - - - - ГруппаПартнерИНН - 723 - - ДокументыПартнерИНН - 335 - true - true - - true - - - ДокументыПартнерИНН - - - OnChange - РеквизитПриИзменении - - - ДокументыПартнерИННРасширеннаяПодсказка - 337 - Label - true - true - - Left - - - - ДокументыПартнерИННКонтекстноеМеню - 336 - true - - InputField - Enter - true - Left - true - - 14 - true - true - false - true - true - true - true - Normal - - ru - Введите ИНН партнера - - - - - ДокументыПартнерКПП - 338 - true - true - - true - - - ДокументыПартнерКПП - - - OnChange - РеквизитПриИзменении - - - ДокументыПартнерКППРасширеннаяПодсказка - 340 - Label - true - true - - Left - - - - ДокументыПартнерКППКонтекстноеМеню - 339 - true - - InputField - Enter - true - Left - true - - 14 - true - true - false - true - true - true - true - Normal - - ru - Введите КПП партнера - - - - true - true - - true - - - <key>ru</key> - <value>Партнер ИНН</value> - - - ГруппаПартнерИННРасширеннаяПодсказка - 724 - Label - true - true - - Left - - - UsualGroup - - HorizontalIfPossible - Auto - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Укажите вашу обслуживающую организацию (партнера фирмы 1С), которая будет обрабатывать заявление:</value> - - - ГруппаПартнерРасширеннаяПодсказка - 329 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - auto - DontUse - Auto - - - - ИнструкцияЮЛПункт5 - 353 - - <key>ru</key> - <value>5. Отправьте заявление на обработку (нажмите <b>Далее</>).</value> - - true - true - - true - - - ИнструкцияЮЛПункт5РасширеннаяПодсказка - 355 - Label - true - true - - Left - - - - ИнструкцияЮЛПункт5КонтекстноеМеню - 354 - true - - true - Label - true - - Left - - - - ИнструкцияИППункт4 - 572 - - <key>ru</key> - <value>4. Отправьте заявление на обработку (нажмите <b>Далее</>).</value> - - true - - true - - - ИнструкцияИППункт4РасширеннаяПодсказка - 574 - Label - true - true - - Left - - - - ИнструкцияИППункт4КонтекстноеМеню - 573 - true - - true - Label - true - - Left - - - true - true - - true - - - <key>ru</key> - <value>Вертикальная группа 4</value> - - false - - ВертикальнаяГруппа4РасширеннаяПодсказка - 357 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Отправка заявления</value> - - - ОтправкаЗаявленияРасширеннаяПодсказка - 169 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - WeakSeparation - true - true - auto - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Страница отправка заявления</value> - - - СтраницаОтправкаЗаявленияРасширеннаяПодсказка - 167 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - - - СтраницаОжиданиеОбработкиЗаявления - 180 - - ОжиданиеОбработкиЗаявления - 182 - - ДатаОтправки - 437 - - <key>ru</key> - <value>Дата отправки</value> - - true - true - - true - - - ДатаОтправки - - - ДатаОтправкиРасширеннаяПодсказка - 439 - Label - true - true - - Left - - - - ДатаОтправкиКонтекстноеМеню - 438 - true - - LabelField - true - Enter - true - Left - true - - true - true - - ru - ДЛФ=DT - - - - - ГруппаСостояниеПоследнейПроверки - 378 - - СостояниеОбработкиЗаявления - 375 - - <key>ru</key> - <value>Состояние обработки заявления</value> - - true - true - - true - - - СостояниеОбработкиЗаявления - - Top - - СостояниеОбработкиЗаявленияРасширеннаяПодсказка - 377 - Label - true - true - - Left - - - - СостояниеОбработкиЗаявленияКонтекстноеМеню - 376 - true - - InputField - true - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Состояние последней проверки</value> - - - ГруппаСостояниеПоследнейПроверкиРасширеннаяПодсказка - 379 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - - ГоризонтальнаяГруппа10 - 635 - - ДекорацияОбновитьСостояние1 - 358 - - <key>ru</key> - <value>Нажмите</value> - - true - true - - true - - - ДекорацияОбновитьСостояние1РасширеннаяПодсказка - 360 - Label - true - true - - Left - - - - ДекорацияОбновитьСостояние1КонтекстноеМеню - 359 - true - - Label - true - - Left - - - - ОбновитьСостояние - 637 - - <key>ru</key> - <value>Обновить состояние</value> - - true - true - - true - - - ОбновитьСостояниеРасширеннаяПодсказка - 638 - Label - true - true - - Left - - - UsualButton - Form.Command.Далее - Normal - Auto - true - true - UserCmds - Auto - - - ДекорацияОбновитьСостояние2 - 639 - - <key>ru</key> - <value>чтобы обновить состояние обработки заявления или получить готовый сертификат.</value> - - true - true - - true - - - ДекорацияОбновитьСостояние2РасширеннаяПодсказка - 641 - Label - true - true - - Left - - - - ДекорацияОбновитьСостояние2КонтекстноеМеню - 640 - true - - Label - true - - Left - - - true - true - - true - - - <key>ru</key> - <value>Горизонтальная группа 10</value> - - - ГоризонтальнаяГруппа10РасширеннаяПодсказка - 636 - Label - true - true - - Left - - - UsualGroup - - HorizontalIfPossible - Auto - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Ожидание обработки заявления</value> - - - ОжиданиеОбработкиЗаявленияРасширеннаяПодсказка - 183 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - WeakSeparation - true - true - auto - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Страница ожидание обработки заявления</value> - - - СтраницаОжиданиеОбработкиЗаявленияРасширеннаяПодсказка - 181 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - - - СтраницаУстановкаСертификата - 204 - - УстановкаСертификата - 206 - - ГоризонтальнаяГруппа4 - 419 - - Декорация5 - 208 - - <key>ru</key> - <value>Сертификат получен.</value> - - true - true - - true - - - Декорация5РасширеннаяПодсказка - 210 - Label - true - true - - Left - - - - Декорация5КонтекстноеМеню - 209 - true - - Label - true - true - - Left - - - - ВыгрузитьСертификат - 421 - true - true - - true - - - ВыгрузитьСертификатРасширеннаяПодсказка - 422 - - <key>ru</key> - <value>Записать полученный сертификат в файл. -Требуется в редких случаях, если не удается установить сертификат автоматически.</value> - - Label - true - true - - Left - - - Hyperlink - Form.Command.ВыгрузитьСертификат - Normal - Auto - true - true - Right - UserCmds - Button - Auto - - true - true - - true - - - <key>ru</key> - <value>Горизонтальная группа 4</value> - - - ГоризонтальнаяГруппа4РасширеннаяПодсказка - 420 - Label - true - true - - Left - - - UsualGroup - - HorizontalIfPossible - Auto - true - true - Auto - Auto - - - - ГруппаРезультатУстановкиСертификата - 380 - - ОшибкаУстановкиСертификата - 382 - - <key>ru</key> - <value>Состояние установки сертификата</value> - - true - true - - true - - - ОшибкаУстановкиСертификата - - - ОшибкаУстановкиСертификатаРасширеннаяПодсказка - 384 - Label - true - true - - Left - - - - ОшибкаУстановкиСертификатаКонтекстноеМеню - 383 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Результат установки сертификата</value> - - - ГруппаРезультатУстановкиСертификатаРасширеннаяПодсказка - 381 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - - ГоризонтальнаяГруппа11 - 642 - - ДекорацияПояснениеПрограммыУстановитьСертификат1 - 449 - - <key>ru</key> - <value>Нажмите</value> - - true - true - - true - - - ДекорацияПояснениеПрограммыУстановитьСертификат1РасширеннаяПодсказка - 451 - Label - true - true - - Left - - - - ДекорацияПояснениеПрограммыУстановитьСертификат1КонтекстноеМеню - 450 - true - - Label - true - - Left - - - - УстановитьСертификат - 647 - - <key>ru</key> - <value>Установить сертификат</value> - - true - true - - true - - - УстановитьСертификатРасширеннаяПодсказка - 648 - Label - true - true - - Left - - - UsualButton - Form.Command.Далее - Normal - Auto - true - true - UserCmds - Auto - - - ДекорацияПояснениеПрограммыУстановитьСертификат2 - 644 - - <key>ru</key> - <value>чтобы повторить установку сертификата на компьютер</value> - - true - true - - true - - - ДекорацияПояснениеПрограммыУстановитьСертификат2РасширеннаяПодсказка - 646 - Label - true - true - - Left - - - - ДекорацияПояснениеПрограммыУстановитьСертификат2КонтекстноеМеню - 645 - true - - true - Label - true - - Left - - - true - true - - true - - - <key>ru</key> - <value>Горизонтальная группа 11</value> - - - ГоризонтальнаяГруппа11РасширеннаяПодсказка - 643 - Label - true - true - - Left - - - UsualGroup - - HorizontalIfPossible - Auto - true - true - Auto - Auto - - - - ГоризонтальнаяГруппа5 - 452 - - Программа2 - 363 - - <key>ru</key> - <value>с помощью программы</value> - - true - true - - true - - - Объект.Программа - - None - - Программа2РасширеннаяПодсказка - 365 - Label - true - true - - Left - - - - Программа2КонтекстноеМеню - 364 - true - - LabelField - true - Enter - true - Left - true - - 15 - true - true - false - - - - ДекорацияПояснениеПрограммы2 - 369 - - <key>ru</key> - <value>По вопросам работы программы обратитесь к ее документации. -<link %1>Или воспользуйтесь дополнительной инструкцией на сайте 1С</>.</value> - - true - true - - true - - - ДекорацияПояснениеПрограммы2РасширеннаяПодсказка - 371 - Label - true - true - - Left - - - - ДекорацияПояснениеПрограммы2КонтекстноеМеню - 370 - true - - true - Label - true - - - URLProcessing - ДекорацияПояснениеПрограммыОбработкаНавигационнойСсылки - - Left - - - true - true - - true - - - <key>ru</key> - <value>Горизонтальная группа 5</value> - - - ГоризонтальнаяГруппа5РасширеннаяПодсказка - 453 - Label - true - true - - Left - - - UsualGroup - - HorizontalIfPossible - Auto - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Установка полученного сертификата</value> - - - УстановкаСертификатаРасширеннаяПодсказка - 207 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - WeakSeparation - true - true - auto - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Страница установка сертификата</value> - - - СтраницаУстановкаСертификатаРасширеннаяПодсказка - 205 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - - - СтраницаОбработанноеЗаявление - 389 - - ГоризонтальнаяГруппа9 - 619 - - Декорация3 - 621 - - <key>ru</key> - <value>Все реквизиты заявления:</value> - - true - true - - true - - - Декорация3РасширеннаяПодсказка - 623 - Label - true - true - - Left - - - - Декорация3КонтекстноеМеню - 622 - true - - Label - true - - Left - - - - Декорация4 - 624 - true - true - - true - - - Декорация4РасширеннаяПодсказка - 626 - Label - true - true - - Left - - - - Декорация4КонтекстноеМеню - 625 - true - - Label - 26 - true - true - false - - Left - - - - ДатаОтправки2 - 627 - true - true - - true - - - ДатаОтправки - - - ДатаОтправки2РасширеннаяПодсказка - 629 - Label - true - true - - Left - - - - ДатаОтправки2КонтекстноеМеню - 628 - true - - LabelField - Enter - true - Left - true - - true - true - - ru - ДЛФ=DT - - - - true - true - - true - - - <key>ru</key> - <value>Горизонтальная группа 9</value> - - - ГоризонтальнаяГруппа9РасширеннаяПодсказка - 620 - Label - true - true - - Left - - - UsualGroup - - HorizontalIfPossible - Auto - true - true - Auto - Auto - - - - РеквизитыЗаявленияВсе - 391 - - <key>ru</key> - <value>Все реквизиты заявления</value> - - true - true - - true - - - РеквизитыЗаявления - - None - - РеквизитыЗаявленияВсеРеквизит - 410 - true - true - - true - - - РеквизитыЗаявления.Реквизит - - - РеквизитыЗаявленияВсеРеквизитРасширеннаяПодсказка - 412 - Label - true - true - - Left - - - - РеквизитыЗаявленияВсеРеквизитКонтекстноеМеню - 411 - true - - InputField - Auto - true - Left - true - - 16 - true - true - true - true - true - true - Normal - - - - РеквизитыЗаявленияВсеЗначение - 413 - true - true - - true - - - РеквизитыЗаявления.Значение - - - РеквизитыЗаявленияВсеЗначениеРасширеннаяПодсказка - 415 - Label - true - true - - Left - - - - РеквизитыЗаявленияВсеЗначениеКонтекстноеМеню - 414 - true - - InputField - Auto - true - Left - true - - 25 - true - true - true - true - true - true - Normal - - - - РеквизитыЗаявленияВсеКоманднаяПанель - 393 - Left - - - РеквизитыЗаявленияВсеСтрокаПоиска - 395 - - РеквизитыЗаявленияВсеСтрокаПоискаРасширеннаяПодсказка - 399 - Label - true - true - - Left - - - - РеквизитыЗаявленияВсеСтрокаПоискаКонтекстноеМеню - 398 - true - - РеквизитыЗаявленияВсе - - true - - - - РеквизитыЗаявленияВсеСостояниеПросмотра - 400 - - РеквизитыЗаявленияВсеСостояниеПросмотраРасширеннаяПодсказка - 404 - Label - true - true - - Left - - - - РеквизитыЗаявленияВсеСостояниеПросмотраКонтекстноеМеню - 403 - true - - ViewStatusAddition - РеквизитыЗаявленияВсе - - true - - - - РеквизитыЗаявленияВсеУправлениеПоиском - 405 - - РеквизитыЗаявленияВсеУправлениеПоискомРасширеннаяПодсказка - 409 - Label - true - true - - Left - - - - РеквизитыЗаявленияВсеУправлениеПоискомКонтекстноеМеню - 408 - true - - SearchControlAddition - РеквизитыЗаявленияВсе - - true - - - - РеквизитыЗаявленияВсеРасширеннаяПодсказка - 394 - Label - true - true - - Left - - - - РеквизитыЗаявленияВсеКонтекстноеМеню - 392 - - true - true - true - true - true - true - MultiRow - 1 - 1 - AutoUse - AutoUse - true - true - false - true - Auto - Auto - true - true - true - true - true - - - true - true - - true - - - <key>ru</key> - <value>Страница обработанное заявление</value> - - - СтраницаОбработанноеЗаявлениеРасширеннаяПодсказка - 390 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - - true - true - - true - - - <key>ru</key> - <value>Страницы</value> - - - СтраницыРасширеннаяПодсказка - 8 - Label - true - true - - Left - - - Pages - - Auto - - - - ГруппаТребуетсяПомощь - 725 - - ДекорацияОписание - 727 - - <key>ru</key> - <value>Описание, условия и цены</value> - - true - true - - true - - - ДекорацияОписаниеРасширеннаяПодсказка - 729 - Label - true - true - - Left - - - - ДекорацияОписаниеКонтекстноеМеню - 728 - true - - Label - true - true - - - Click - ДекорацияОписаниеНажатие - - true - Left - - - - СлужбаПоддержки - 730 - - <key>ru</key> - <value>Служба поддержки: <b>8-800-333-9313 </><b>edo@1c.ru</></value> - - true - true - - true - - - СлужбаПоддержкиРасширеннаяПодсказка - 732 - Label - true - true - - Left - - - - СлужбаПоддержкиКонтекстноеМеню - 731 - true - - true - Label - true - - Style.ПоясняющийТекст - - - Left - Bottom - - - true - true - - true - - - <key>ru</key> - <value>Требуется помощь?</value> - - - ГруппаТребуетсяПомощьРасширеннаяПодсказка - 726 - Label - true - true - - Left - - - UsualGroup - - Vertical - PopUp - WeakSeparation - true - true - auto - Auto - Auto - - - - Команды - 239 - - КомандаНазад - 241 - - ФормаНазад - 230 - true - - true - - - ФормаНазадРасширеннаяПодсказка - 231 - Label - true - true - - Left - - - Form.Command.Назад - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Команда назад</value> - - - КомандаНазадРасширеннаяПодсказка - 242 - Label - true - true - - Left - - - CommandBar - - Left - - - - ОсновныеКоманды - 246 - - ФормаВыгрузитьКорневойСертификат - 652 - true - - true - - - ФормаВыгрузитьКорневойСертификатРасширеннаяПодсказка - 653 - - <key>ru</key> - <value>Записать корневой сертификат в файл для ручной установки на компьютер. -Требуется в случаях случайного удаления корневого сертфификата.</value> - - Label - true - true - - Left - - - Form.Command.ВыгрузитьКорневойСертификат - Normal - Auto - true - true - UserCmds - Auto - - - ФормаВыгрузитьЗапросНаСертификат - 387 - true - - true - - - ФормаВыгрузитьЗапросНаСертификатРасширеннаяПодсказка - 388 - - <key>ru</key> - <value>Записать запрос на сертификат в файл для просмотра внешней программой. -Требуется в редких случаях для расследования нестыковок в данных.</value> - - Label - true - true - - Left - - - Form.Command.ВыгрузитьЗапросНаСертификат - Normal - Auto - true - true - UserCmds - Auto - - - ФормаНапечататьДокументы - 178 - - <key>ru</key> - <value>Повторно напечатать документы</value> - - true - - true - - - ФормаНапечататьДокументыРасширеннаяПодсказка - 179 - Label - true - true - - Left - - - Form.Command.НапечататьДокументы - Normal - Auto - 10 - true - 2 - true - UserCmds - Auto - - - ФормаНапечататьСоглашение - 425 - true - true - - true - - - ФормаНапечататьСоглашениеРасширеннаяПодсказка - 426 - - <key>ru</key> - <value>Напечатать cоглашение</value> - - Label - true - true - - Left - - - Form.Item.Соглашение.StandardCommand.Print - Normal - PictureAndText - true - true - UserCmds - Auto - - - ФормаДалее - 228 - true - false - - true - - - ФормаДалееРасширеннаяПодсказка - 229 - Label - true - true - - Left - - - Form.Command.Далее - Auto - true - true - true - UserCmds - Auto - - - ФормаЗакрыть - 234 - - <key>ru</key> - <value>Отмена</value> - - true - true - - true - - - ФормаЗакрытьРасширеннаяПодсказка - 235 - Label - true - true - - Left - - - Form.StandardCommand.Close - Normal - Auto - true - true - UserCmds - None - Auto - - - ФормаСправка - 232 - true - true - - true - - - ФормаСправкаРасширеннаяПодсказка - 233 - Label - true - true - - Left - - - Form.StandardCommand.Help - Normal - Auto - true - true - UserCmds - Auto - InCommandBarAndInAdditionalSubmenu - - true - true - - true - - - <key>ru</key> - <value>Основные команды</value> - - - ОсновныеКомандыРасширеннаяПодсказка - 247 - Label - true - true - - Left - - - CommandBar - - Right - - - true - true - - true - - - <key>ru</key> - <value>Команды</value> - - - КомандыРасширеннаяПодсказка - 240 + ШапкаЗаявленияРасширеннаяПодсказка + 814 Label true true @@ -6963,6 +1227,408 @@ Auto + + Подвал + 811 + + ГруппаПечатьЗаявления + 748 + + ДекорацияТекстЗаявления + 756 + + <key>ru</key> + <value><b>Печать заявления</>: <link ТекстЗаявления>текст заявления</>.</value> + + true + true + + true + + + ДекорацияТекстЗаявленияРасширеннаяПодсказка + 758 + Label + true + true + + Left + + + + ДекорацияТекстЗаявленияКонтекстноеМеню + 757 + true + + true + Label + true + true + + + URLProcessing + ДекорацияТекстЗаявленияОбработкаНавигационнойСсылки + + Left + + + + ДекорацияПередачаКомплекта + 753 + + <key>ru</key> + <value>Подготовьте <link КомплектДокументов>комплект документов</> и передайте представителю обслуживающей организации.</value> + + true + true + + true + + + ДекорацияПередачаКомплектаРасширеннаяПодсказка + 755 + Label + true + true + + Left + + + + ДекорацияПередачаКомплектаКонтекстноеМеню + 754 + true + + true + Label + 57 + 57 + true + false + + Style.ПоясняющийТекст + + + + URLProcessing + ИнструкцияОбработкаНавигационнойСсылки + + Left + + Style.ToolTipBackColor + + + + true + true + + true + + + <key>ru</key> + <value>Печать заявления</value> + + false + Bottom + + ГруппаПечатьЗаявленияРасширеннаяПодсказка + 749 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ГруппаОтправкаЗаявления + 759 + + ОтправитьЗаявление + 761 + true + true + + true + + + ОтправитьЗаявлениеРасширеннаяПодсказка + 762 + Label + true + true + + Left + + + UsualButton + Form.Command.ОтправитьЗаявление + Auto + true + true + true + UserCmds + Auto + + + ДекорацияУсловияСоглашения + 763 + + <key>ru</key> + <value>Нажимая кнопку <b>Отправить, </>вы принимаете <link УсловияСоглашения>условия соглашения</> о +присоединении к регламенту <link УдостоверяющийЦентр>удостоверяющего центра</>.</value> + + true + true + + true + + + ДекорацияУсловияСоглашенияРасширеннаяПодсказка + 765 + Label + true + true + + Left + + + + ДекорацияУсловияСоглашенияКонтекстноеМеню + 764 + true + + true + Label + true + false + + Style.ПоясняющийТекст + + + Style.NormalTextFont + 10.0 + + + + URLProcessing + ДекорацияУсловияСоглашенияОбработкаНавигационнойСсылки + + Left + + + + ДекорацияОтступ + 791 + true + true + + true + + + ДекорацияОтступРасширеннаяПодсказка + 793 + Label + true + true + + Left + + + + ДекорацияОтступКонтекстноеМеню + 792 + true + + Label + 6 + true + true + + Left + + + + ГруппаТребуетсяПомощь + 789 + + ДекорацияОписание + 802 + + <key>ru</key> + <value>Описание, условия и цены</value> + + true + true + + true + + + ДекорацияОписаниеРасширеннаяПодсказка + 804 + Label + true + true + + Left + + + + ДекорацияОписаниеКонтекстноеМеню + 803 + true + + Label + true + true + + + Click + ДекорацияОписаниеНажатие + + true + Left + + + + СлужбаПоддержки + 772 + + <key>ru</key> + <value>Служба поддержки: <b>8-800-333-9313 podpis@1c.ru</></value> + + true + true + + true + + + СлужбаПоддержкиРасширеннаяПодсказка + 774 + Label + true + true + + Left + + + + СлужбаПоддержкиКонтекстноеМеню + 773 + true + + true + Label + true + + Style.ПоясняющийТекст + + + Left + Bottom + + + true + true + + true + + + <key>ru</key> + <value>Требуется помощь?</value> + + + ГруппаТребуетсяПомощьРасширеннаяПодсказка + 790 + Label + true + true + + Left + + + UsualGroup + + Vertical + PopUp + WeakSeparation + true + true + auto + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Отправка заявления</value> + + Bottom + + ГруппаОтправкаЗаявленияРасширеннаяПодсказка + 760 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Подвал</value> + + false + + ПодвалРасширеннаяПодсказка + 812 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + Bottom true @@ -6979,12 +1645,12 @@ ПриОткрытии - OnCreateAtServer - ПриСозданииНаСервере + BeforeClose + ПередЗакрытием - OnClose - ПриЗакрытии + OnCreateAtServer + ПриСозданииНаСервере LockOwner true @@ -7023,40 +1689,6 @@ true - - Соглашение - - <key>ru</key> - <value>Соглашение</value> - - 3 - - FormattedDocument - - - true - - - true - - - - ПодтверждениеСоглашения - - <key>ru</key> - <value>Подтверждаю, что принимаю условия соглашения о присоединении к регламенту удостоверяющего центра</value> - - 4 - - Boolean - - - true - - - true - - Организация @@ -7096,10 +1728,6 @@ </attributes> <attributes> <name>НаименованиеПолное</name> - <title> - <key>ru</key> - <value>Полное наименование</value> - 7 String @@ -7114,10 +1742,6 @@ ИНН - - <key>ru</key> - <value>ИНН</value> - 8 String @@ -7134,10 +1758,6 @@ КПП - - <key>ru</key> - <value>КПП</value> - 9 String @@ -7154,10 +1774,6 @@ ОГРН - - <key>ru</key> - <value>ОГРН</value> - 10 String @@ -7174,10 +1790,6 @@ ЮридическийАдрес - - <key>ru</key> - <value>Юридический адрес</value> - 11 String @@ -7192,10 +1804,6 @@ ФактическийАдрес - - <key>ru</key> - <value>Фактический адрес</value> - 12 String @@ -7210,10 +1818,6 @@ Телефон - - <key>ru</key> - <value>Телефон</value> - 13 String @@ -7230,10 +1834,6 @@ Фамилия - - <key>ru</key> - <value>Фамилия</value> - 14 String @@ -7250,10 +1850,6 @@ Имя - - <key>ru</key> - <value>Имя</value> - 15 String @@ -7270,10 +1866,6 @@ Отчество - - <key>ru</key> - <value>Отчество</value> - 16 String @@ -7290,10 +1882,6 @@ СтраховойНомерПФР - - <key>ru</key> - <value>СНИЛС</value> - 17 String @@ -7310,10 +1898,6 @@ Должность - - <key>ru</key> - <value>Должность</value> - 18 String @@ -7330,10 +1914,6 @@ Подразделение - - <key>ru</key> - <value>Подразделение</value> - 19 String @@ -7350,10 +1930,6 @@ ДокументНомер - - <key>ru</key> - <value>Серия, номер</value> - 21 String @@ -7370,10 +1946,6 @@ ДокументДатаВыдачи - - <key>ru</key> - <value>Дата выдачи</value> - 23 Date @@ -7390,10 +1962,6 @@ ДокументКемВыдан - - <key>ru</key> - <value>Кем выдан</value> - 24 String @@ -7410,10 +1978,6 @@ ЭтоИндивидуальныйПредприниматель - - <key>ru</key> - <value>Это индивидуальный предприниматель</value> - 26 Boolean @@ -7472,10 +2036,6 @@ ДокументВид - - <key>ru</key> - <value>Документ вид</value> - 37 String @@ -7506,72 +2066,6 @@ - - РеквизитыЗаявления - - <key>ru</key> - <value>Реквизиты заявления</value> - - 27 - - ValueTable - - - true - - - true - - - Реквизит - - <key>ru</key> - <value>Реквизит</value> - - 1 - - String - - - - true - - - true - - - - Значение - - <key>ru</key> - <value>Значение</value> - - 2 - - String - - - - true - - - true - - - - ЭтоГруппаРеквизитов - 3 - - Boolean - - - true - - - true - - - СписокПрограмм 25 @@ -7735,7 +2229,7 @@ ДокументыПартнерИНН <key>ru</key> - <value>ИНН</value> + <value>ИНН партнера</value> 41 @@ -7755,7 +2249,7 @@ ДокументыПартнерКПП <key>ru</key> - <value>КПП</value> + <value>КПП партнера</value> 42 @@ -7791,10 +2285,6 @@ ОшибкаУстановкиСертификата - - <key>ru</key> - <value>Ошибка установки сертификата</value> - 44 String @@ -7864,10 +2354,6 @@ ДатаОтправки - - <key>ru</key> - <value>Дата отправки</value> - 34 Date @@ -7963,10 +2449,6 @@ ДокументыПартнерЭтоИП - - <key>ru</key> - <value>Документы партнер это ИП</value> - 57 Boolean @@ -8005,10 +2487,6 @@ БИК - - <key>ru</key> - <value>БИК</value> - 60 String @@ -8025,10 +2503,6 @@ КорреспондентскийСчет - - <key>ru</key> - <value>Корреспондентский счет</value> - 61 String @@ -8045,10 +2519,6 @@ РасчетныйСчет - - <key>ru</key> - <value>Расчетный счет</value> - 62 String @@ -8079,10 +2549,6 @@ ЭлектроннаяПочта - - <key>ru</key> - <value>Электронная почта</value> - 65 String @@ -8123,7 +2589,7 @@ ДокументыРуководительОснование <key>ru</key> - <value>Основание, на котором действует руководитель</value> + <value>Основание</value> 33 @@ -8356,10 +2822,6 @@ Пол - - <key>ru</key> - <value>Пол</value> - 75 String @@ -8376,10 +2838,6 @@ ДатаРождения - - <key>ru</key> - <value>Дата рождения</value> - 77 Date @@ -8396,10 +2854,6 @@ МестоРождения - - <key>ru</key> - <value>Место рождения</value> - 83 String @@ -8416,10 +2870,6 @@ Гражданство - - <key>ru</key> - <value>Гражданство</value> - 84 CatalogRef.СтраныМира @@ -8474,10 +2924,6 @@ ДокументКодПодразделения - - <key>ru</key> - <value>Код подразделения</value> - 88 String @@ -8504,8 +2950,8 @@ - ВидКонтактнойИнформации - 20 + ОрганизацияТип + 3 true @@ -8515,9 +2961,47 @@ - ВидКонтактнойИнформацииТелефон - 35 - + ВладелецСертификатаСтрокой + + <key>ru</key> + <value>Владелец сертификата строкой</value> + + 4 + + String + + 200 + + + + true + + + true + + + + ИдентификаторЗаявленияВОблачныйСервис + 20 + + String + + 36 + + + + true + + + true + + + + ПрограммаОблачногоСервиса + 27 + + CatalogRef.ПрограммыЭлектроннойПодписиИШифрования + true @@ -8526,74 +3010,112 @@ - Далее + УказатьСведенияОбОрганизации <key>ru</key> - <value>Далее ></value> + <value>Указать сведения об организации</value> - 1 + 7 + + ru + Указать сведения об организации + true + + StdPicture.Document + - Далее + УказатьСведенияОбОрганизации - DontUse + Picture + Auto Auto - Назад + УказатьСведенияОВладельце <key>ru</key> - <value>< Назад</value> + <value>Указать сведения о владельце</value> - 3 + 8 ru - Назад + Указать сведения о владельце + + + true + + + StdPicture.Document + + + + УказатьСведенияОВладельце + + + Picture + Auto + Auto + + + ОтправитьЗаявление + + <key>ru</key> + <value>Отправить заявление</value> + + 9 + + ru + Отправить заявление true - Назад + ОтправитьЗаявление - DontUse + Auto Auto - НапечататьДокументы + ОбновитьСостояниеОбработкиЗаявления <key>ru</key> - <value>Напечатать документы</value> + <value>Обновить состояние обработки заявления</value> - 4 + 10 + + ru + Обновить состояние обработки заявления на выпуск сертификата + true - StdPicture.Print + StdPicture.Refresh - НапечататьДокументы + ОбновитьСостояниеОбработкиЗаявления - TextPicture - DontUse + Picture + Auto Auto ВыгрузитьЗапросНаСертификат <key>ru</key> - <value>Выгрузить запрос на сертификат</value> + <value>Запрос на сертификат</value> - 2 + 1 true @@ -8602,34 +3124,16 @@ ВыгрузитьЗапросНаСертификат - DontUse - Auto - - - ВыгрузитьСертификат - - <key>ru</key> - <value>Выгрузить сертификат</value> - - 5 - - true - - - - ВыгрузитьСертификат - - - DontUse + Auto Auto ВыгрузитьКорневойСертификат <key>ru</key> - <value>Выгрузить корневой сертификат</value> + <value>Корневой сертификат</value> - 6 + 2 true @@ -8638,7 +3142,25 @@ ВыгрузитьКорневойСертификат - DontUse + Auto + Auto + + + ВыгрузитьСертификат + + <key>ru</key> + <value>Сертификат</value> + + 3 + + true + + + + ВыгрузитьСертификат + + + Auto Auto @@ -8659,6 +3181,12 @@ AnyRef + + СертификатОснование + + CatalogRef.СертификатыКлючейЭлектроннойПодписиИШифрования + + diff --git a/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/Форма/Help/ru.html b/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/Форма/Help/ru.html index 8e0b8bdff..4e0a3aed4 100644 --- a/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/Форма/Help/ru.html +++ b/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/Форма/Help/ru.html @@ -1,30 +1,26 @@

      Предназначена для подготовки заявления на выпуск нового квалифицированного сертификата в удостоверяющий центр 1С.

      -

      Соглашение

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

      Организация

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

      Сохранение заявления

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

      Владелец сертификата

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

      Создание ключа электронной подписи

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

      Отправка заявления

      -
      • На этой странице необходимо заполнить сведения о руководителе для печати заявления. -
      • Также необходимо подготовить комплект документов: -
        • Заявление на выпуск сертификата (нажмите Печать для распечатки заявления); -
        • Копия свидетельства о постановке на учет в налоговом органе (ИНН); -
        • Копия свидетельства о государственной регистрации индивидуального предпринимателя (ОГРН); -
        • Копия документа, удостоверяющего личность владельца сертификата; -
        • Копия страхового свидетельства обязательного пенсионного страхования (СНИЛС) владельца сертификата.
      • Заполните Данные обслуживающей организации (партнера 1С). -
      • Для отправки заявления на обработку нажмите Далее.

      Ожидание обработки заявления

      -
      • После отправки заявления открывается страница Ожидание обработки заявления. Для проверки состояния нажмите кнопку Обновить состояние.

      Установка полученного сертификата

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

      См. также:

      +

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

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

      Создание ключа электронной подписи

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

      Сохранение заявления

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

      Соглашение

      +
      +
      • Перейдите по ссылке и прочтите условия соглашения о присоединении к регламенту удостоверяющего центра (УЦ). По гиперссылке можно перейти к просмотру информации об УЦ. 
      +

      Отправка заявления

      +
      • Для отправки заявления необходимо подготовить комплект документов (нажмите на ссылку для просмотра списка необходимых документов);
      • +
      • Нажмите Отправить заявление.

      Ожидание обработки заявления

      +
      • Для проверки состояния заявления нажмите кнопку Обновить состояние.

      Выгрузка сертификата

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

      См. также:

      \ No newline at end of file +
    \ No newline at end of file diff --git a/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/Форма/Items/ДекорацияЭтапа1/Picture.png b/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/Форма/Items/ДекорацияЭтапа1/Picture.png deleted file mode 100644 index c7842532f..000000000 Binary files a/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/Форма/Items/ДекорацияЭтапа1/Picture.png and /dev/null differ diff --git a/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/Форма/Items/ДекорацияЭтапа2/Picture.png b/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/Форма/Items/ДекорацияЭтапа2/Picture.png deleted file mode 100644 index 23077f80f..000000000 Binary files a/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/Форма/Items/ДекорацияЭтапа2/Picture.png and /dev/null differ diff --git a/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/Форма/Items/ДекорацияЭтапа3/Picture.png b/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/Форма/Items/ДекорацияЭтапа3/Picture.png deleted file mode 100644 index f4d3c0d53..000000000 Binary files a/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/Форма/Items/ДекорацияЭтапа3/Picture.png and /dev/null differ diff --git a/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/Форма/Items/ДекорацияЭтапа4/Picture.png b/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/Форма/Items/ДекорацияЭтапа4/Picture.png deleted file mode 100644 index 2006424b7..000000000 Binary files a/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/Форма/Items/ДекорацияЭтапа4/Picture.png and /dev/null differ diff --git a/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/Форма/Items/ДекорацияЭтапа5/Picture.png b/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/Форма/Items/ДекорацияЭтапа5/Picture.png deleted file mode 100644 index 4d927c357..000000000 Binary files a/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/Форма/Items/ДекорацияЭтапа5/Picture.png and /dev/null differ diff --git a/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/Форма/Items/ДекорацияЭтапа6/Picture.png b/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/Форма/Items/ДекорацияЭтапа6/Picture.png deleted file mode 100644 index b84789e42..000000000 Binary files a/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/Форма/Items/ДекорацияЭтапа6/Picture.png and /dev/null differ diff --git a/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/Форма/Items/ДекорацияЭтапа7/Picture.png b/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/Форма/Items/ДекорацияЭтапа7/Picture.png deleted file mode 100644 index 04c4ef0d8..000000000 Binary files a/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/Форма/Items/ДекорацияЭтапа7/Picture.png and /dev/null differ diff --git a/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/Форма/Items/ДекорацияЭтапа8/Picture.png b/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/Форма/Items/ДекорацияЭтапа8/Picture.png deleted file mode 100644 index 100ed9796..000000000 Binary files a/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/Форма/Items/ДекорацияЭтапа8/Picture.png and /dev/null differ diff --git a/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/Форма/Module.bsl index 979532ae4..49cf71583 100644 --- a/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/Форма/Module.bsl @@ -18,45 +18,51 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - УстановитьУсловноеОформление(); - ЕстьОрганизации = Не Метаданные.ОпределяемыеТипы.Организация.Тип.СодержитТип(Тип("Строка")); - Если Не ЕстьОрганизации Тогда - Элементы.Организация.Видимость = Ложь; - Элементы.ЭтоИндивидуальныйПредприниматель1.Видимость = Ложь; - Элементы.ЭтоИндивидуальныйПредприниматель2.Видимость = Истина; + Элементы.Организация.Видимость = ЕстьОрганизации; + Элементы.НаименованиеСокращенное.Видимость = Не ЕстьОрганизации; + Элементы.НаименованиеСокращенное.КнопкаВыбора = ЕстьОрганизации; + + Элементы.ВладелецСертификатаСтрокой.Видимость = Ложь; + + ЭтоПодчиненныйУзелРИБ = ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ(); + ЭтоПолноправныйПользователь = Пользователи.ЭтоПолноправныйПользователь(); + + Если ОбщегоНазначения.РазделениеВключено() Тогда + ИнтернетПоддержкаПользователейПодключена = Истина; + ПрограммаОблачногоСервиса = ПрограммаОблачногоСервиса(); КонецЕсли; - ЭтоПолноправныйПользователь = Пользователи.ЭтоПолноправныйПользователь(); - ЭтоПодчиненныйУзелРИБ = ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ(); - + ЗаполнитьСписокПрограмм(); ЗаполнитьЗаголовкиРеквизитов(); - ПриИзмененииВидаДокументаНаСервере(); - Если ЗначениеЗаполнено(Параметры.СертификатСсылка) Тогда ЗагрузитьЗаявление(); + ПриИзмененииОрганизацииНаСервере(Истина); + Модифицированность = Ложь; + ИначеЕсли ЗначениеЗаполнено(Параметры.СертификатОснование) Тогда + СкопироватьЗаявление(); + ПриИзмененииОрганизацииНаСервере(Истина); + Модифицированность = Истина; Иначе - УстановитьСоглашение(); - Объект.СостояниеЗаявления = Перечисления.СостоянияЗаявленияНаВыпускСертификата.НеПодготовлено; + + ДокументыПартнерЭтоИП = Ложь; + + Объект.Добавил = Пользователи.ТекущийПользователь(); + Объект.Пользователь = Объект.Добавил; Если ЗначениеЗаполнено(Параметры.Организация) Тогда Организация = Параметры.Организация; Элементы.Организация.ТолькоПросмотр = Истина; КонецЕсли; + + ПриИзмененииОрганизацииНаСервере(Ложь); + + Объект.СостояниеЗаявления = Перечисления.СостоянияЗаявленияНаВыпускСертификата.НеПодготовлено; + Модифицированность = Ложь; + КонецЕсли; - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда - - МодульУправлениеКонтактнойИнформацией = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформацией"); - ВидКонтактнойИнформации = МодульУправлениеКонтактнойИнформацией.ПараметрыВидаКонтактнойИнформации( - Перечисления["ТипыКонтактнойИнформации"].Адрес); - - ВидКонтактнойИнформации.НастройкиПроверки.ТолькоНациональныйАдрес = Истина; - - ВидКонтактнойИнформацииТелефон = МодульУправлениеКонтактнойИнформацией.ПараметрыВидаКонтактнойИнформации( - Перечисления["ТипыКонтактнойИнформации"].Телефон); - - КонецЕсли; + УстановитьВидимостьДоступность(); КонецПроцедуры @@ -67,10 +73,7 @@ РеквизитыПроверкиАдреса.Вставить("ЮридическийАдрес", Ложь); РеквизитыПроверкиАдреса.Вставить("ФактическийАдрес", Ложь); - Если ЗначениеЗаполнено(Объект.Ссылка) - И ( Объект.СостояниеЗаявления = ПредопределенноеЗначение("Перечисление.СостоянияЗаявленияНаВыпускСертификата.НеПодготовлено") - Или Объект.СостояниеЗаявления = ПредопределенноеЗначение("Перечисление.СостоянияЗаявленияНаВыпускСертификата.Подготовлено")) Тогда - + Если Объект.СостояниеЗаявления = ПредопределенноеЗначение("Перечисление.СостоянияЗаявленияНаВыпускСертификата.НеПодготовлено") Тогда ПодключитьОбработчикОжидания("ПриИзмененияСоставаИлиНастроекПрограмм", 0.1, Истина); КонецЕсли; @@ -81,15 +84,14 @@ // При изменении состава или настроек программ. Если ЗначениеЗаполнено(ВариантАлгоритмов) - И ( ВРег(ИмяСобытия) = ВРег("Запись_ПрограммыЭлектроннойПодписиИШифрования") - Или ВРег(ИмяСобытия) = ВРег("Запись_ПутиКПрограммамЭлектроннойПодписиИШифрованияНаСерверахLinux")) Тогда + И (ВРег(ИмяСобытия) = ВРег("Запись_ПрограммыЭлектроннойПодписиИШифрования") + Или ВРег(ИмяСобытия) = ВРег("Запись_ПутиКПрограммамЭлектроннойПодписиИШифрованияНаСерверахLinux")) Тогда ПодключитьОбработчикОжидания("ПриИзмененияСоставаИлиНастроекПрограмм", 0.1, Истина); КонецЕсли; Если ВРег(ИмяСобытия) = ВРег("ИнтернетПоддержкаПодключена") Тогда ИнтернетПоддержкаПользователейПодключена = Истина; - ИначеЕсли ВРег(ИмяСобытия) = ВРег("ИнтернетПоддержкаОтключена") Тогда ИнтернетПоддержкаПользователейПодключена = Ложь; КонецЕсли; @@ -100,44 +102,37 @@ Если Источник = Организация Тогда ПодключитьОбработчикОжидания("ОбработчикОжиданияРеквизитыОрганизацииПриИзменении", 0.1, Истина); - КонецЕсли; - - Если Источник = Сотрудник - И Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаВладелецСертификата Тогда - + ИначеЕсли Источник = Сотрудник Тогда ПодключитьОбработчикОжидания("ОбработчикОжиданияРеквизитыВладельцаПриИзменении", 0.1, Истина); - КонецЕсли; - - Если Источник = ДокументыПартнерСсылка - И Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаОтправкаЗаявления Тогда - + ИначеЕсли Источник = ДокументыПартнерСсылка Тогда ПодключитьОбработчикОжидания("ОбработчикОжиданияРеквизитыПартнераПриИзменении", 0.1, Истина); - КонецЕсли; - - Если Источник = ДокументыРуководительСсылка - И Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаОтправкаЗаявления Тогда - + ИначеЕсли Источник = ДокументыРуководительСсылка Тогда ПодключитьОбработчикОжидания("ОбработчикОжиданияРеквизитыРуководителяПриИзменении", 0.1, Истина); КонецЕсли; КонецПроцедуры &НаКлиенте -Процедура ПриЗакрытии(ЗавершениеРаботы) +Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка) Если ЗавершениеРаботы Тогда Возврат; КонецЕсли; - Если Объект.СостояниеЗаявления = ПредопределенноеЗначение("Перечисление.СостоянияЗаявленияНаВыпускСертификата.Подготовлено") - Или Объект.СостояниеЗаявления = ПредопределенноеЗначение("Перечисление.СостоянияЗаявленияНаВыпускСертификата.НеПодготовлено") - И Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаПодготовкаЗапросаНаСертификат Тогда + СтандартнаяОбработка = Ложь; + Если Модифицированность Тогда - ЗаписатьИРазблокироватьОбъект(); - ПослеЗаписи(); + Отказ = Истина; + ПоказатьВопрос(Новый ОписаниеОповещения("ЗакрытиеПослеОтветаНаВопрос", ЭтотОбъект), + НСтр("ru = 'Данные были изменены. Сохранить изменения?'"), РежимДиалогаВопрос.ДаНетОтмена); + + Иначе + + ВозвращаемоеЗначение = Новый Структура; + ВозвращаемоеЗначение.Вставить("Ссылка", Объект.Ссылка); + ВозвращаемоеЗначение.Вставить("Добавлен", ЗаявлениеИсполнено()); + Закрыть(ВозвращаемоеЗначение); - ИначеЕсли ЗначениеЗаполнено(Объект.Ссылка) Тогда - РазблокироватьОбъект(Объект.Ссылка, УникальныйИдентификатор); КонецЕсли; КонецПроцедуры @@ -146,146 +141,61 @@ #Область ОбработчикиСобытийЭлементовШапкиФормы -&НаКлиенте -Процедура ДекорацияУдостоверяющийЦентрНаименованиеНажатие(Элемент) - - ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку("http://ca.1c.ru/"); - -КонецПроцедуры - -&НаКлиенте -Процедура ПодтверждениеСоглашенияПриИзменении(Элемент) - - Элементы.ФормаДалее.Доступность = ПодтверждениеСоглашения; - -КонецПроцедуры - &НаКлиенте Процедура РеквизитПриИзменении(Элемент) + Если ЗначениеЗаполнено(Объект.СостояниеЗаявления) Тогда + Модифицированность = Истина; + ДокументыПечатались = Ложь; + КонецЕсли; + ЭтотОбъект[Элемент.Имя] = СокрЛП(ЭтотОбъект[Элемент.Имя]); КонецПроцедуры -&НаКлиенте -Процедура ДекорацияОписаниеНажатие(Элемент) - - ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку("https://portal.1c.ru/applications/31"); - -КонецПроцедуры - -// Реквизиты организации. +#Область Организация &НаКлиенте Процедура ОрганизацияПриИзменении(Элемент) - ОчиститьРеквизитыОрганизации(); - ОчиститьРеквизитыВладельца(); ПриИзмененииОрганизацииНаСервере(); КонецПроцедуры -&НаКлиенте -Процедура ЭтоИндивидуальныйПредпринимательПриИзменении(Элемент) - - Если ЭтоИндивидуальныйПредприниматель Тогда - ОчиститьРеквизитыОрганизацииВидаЮридическоеЛицо(); - КонецЕсли; - - ПриИзмененииОрганизацииНаСервере(Истина); - -КонецПроцедуры - &НаКлиенте Процедура ОрганизацияОчистка(Элемент, СтандартнаяОбработка) - ОчиститьРеквизитыОрганизации(); + ОчиститьРеквизитыОрганизации(Истина); КонецПроцедуры &НаКлиенте -Процедура ЮридическийАдресНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) +Процедура НаименованиеСокращенноеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) - ПредставлениеАдресаНачалоВыбора(ЭтотОбъект, Элемент, ДанныеВыбора, СтандартнаяОбработка, - "ЮридическийАдрес", НСтр("ru = 'Юридический адрес организации'")); + ЗначениеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка, "ОрганизацияТип"); КонецПроцедуры &НаКлиенте -Процедура ЮридическийАдресОчистка(Элемент, СтандартнаяОбработка) +Процедура НаименованиеСокращенноеОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) - ПредставлениеАдресаОчистка(ЭтотОбъект, Элемент, СтандартнаяОбработка, "ЮридическийАдрес"); - -КонецПроцедуры - -&НаКлиенте -Процедура ЮридическийАдресОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) - - ПредставлениеАдресаОбработкаВыбора(ЭтотОбъект, Элемент, ВыбранноеЗначение, СтандартнаяОбработка, "ЮридическийАдрес"); - - Если Не ЗначениеЗаполнено(ФактическийАдрес) Тогда - ПредставлениеАдресаОбработкаВыбора(ЭтотОбъект, Элемент, ВыбранноеЗначение, СтандартнаяОбработка, "ФактическийАдрес"); + СтандартнаяОбработка = Ложь; + Если ВыбранноеЗначение <> Неопределено Тогда + + Организация = ВыбранноеЗначение; + ПодключитьОбработчикОжидания("ОбработчикОжиданияРеквизитыОрганизацииПриИзменении", 0.1, Истина); + КонецЕсли; КонецПроцедуры -&НаКлиенте -Процедура ФактическийАдресНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) - - ПредставлениеАдресаНачалоВыбора(ЭтотОбъект, Элемент, ДанныеВыбора, СтандартнаяОбработка, - "ФактическийАдрес", НСтр("ru = 'Фактический адрес организации'")); - -КонецПроцедуры +#КонецОбласти -&НаКлиенте -Процедура ФактическийАдресОчистка(Элемент, СтандартнаяОбработка) - - ПредставлениеАдресаОчистка(ЭтотОбъект, Элемент, СтандартнаяОбработка, "ФактическийАдрес"); - -КонецПроцедуры - -&НаКлиенте -Процедура ФактическийАдресОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) - - ПредставлениеАдресаОбработкаВыбора(ЭтотОбъект, Элемент, ВыбранноеЗначение, СтандартнаяОбработка, "ФактическийАдрес"); - -КонецПроцедуры - -&НаКлиенте -Процедура АдресПредупреждениеНажатие(Элемент) - - ПоказатьПредупреждение(, Элемент.Подсказка); - -КонецПроцедуры - -&НаКлиенте -Процедура ТелефонНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) - - ПредставлениеТелефонаНачалоВыбора(ЭтотОбъект, Элемент, ДанныеВыбора, СтандартнаяОбработка, - "Телефон", НСтр("ru = 'Телефон организации'")); - -КонецПроцедуры - -&НаКлиенте -Процедура ТелефонОчистка(Элемент, СтандартнаяОбработка) - - ПредставлениеТелефонаОчистка(ЭтотОбъект, Элемент, СтандартнаяОбработка, "Телефон"); - -КонецПроцедуры - -&НаКлиенте -Процедура ТелефонОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) - - ПредставлениеТелефонаОбработкаВыбора(ЭтотОбъект, Элемент, ВыбранноеЗначение, СтандартнаяОбработка, "Телефон"); - -КонецПроцедуры - -// Реквизиты сотрудника (должностного лица организации). +#Область ВладелецСертификата &НаКлиенте Процедура СотрудникПриИзменении(Элемент) - ОчиститьРеквизитыВладельца(); ПриИзмененииВладельцаСертификатаНаСервере(); КонецПроцедуры @@ -301,8 +211,8 @@ Процедура СотрудникОчистка(Элемент, СтандартнаяОбработка) Если СотрудникТип <> Неопределено - И СотрудникТип.Количество() = 1 - И Сотрудник = Неопределено Тогда + И СотрудникТип.Количество() = 1 + И Сотрудник = Неопределено Тогда ОписаниеТипов = Новый ОписаниеТипов(СотрудникТип.ВыгрузитьЗначения()); Сотрудник = ОписаниеТипов.ПривестиЗначение(Неопределено); @@ -313,154 +223,28 @@ КонецПроцедуры &НаКлиенте -Процедура ГражданствоПриИзменении(Элемент) +Процедура ВладелецСертификатаСтрокойНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) - ЗаполнитьЗначенияСвойств(ЭтотОбъект, ГражданствоСвойства(Гражданство)); - Если Не ЗначениеЗаполнено(ГражданствоОКСМКодАльфа3) Тогда - Если ЗначениеЗаполнено(Гражданство) Тогда - ПоказатьПредупреждение(, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'У страны ""%1"" не указан трехзначный буквенный код альфа-3 по ОКСМ.'"), - Гражданство)); - КонецЕсли; - Гражданство = Неопределено; - ГражданствоПредставление = ""; - ГражданствоОКСМКодАльфа3 = ""; - КонецЕсли; + ЗначениеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка, "СотрудникТип"); КонецПроцедуры &НаКлиенте -Процедура СтраховойНомерПФРПриИзменении(Элемент) - - СтраховойНомерПФР = ТолькоЦифры(СтраховойНомерПФР); - -КонецПроцедуры - -&НаКлиенте -Процедура ДокументВидПриИзменении(Элемент) - - ПриИзмененииВидаДокументаНаСервере(); - -КонецПроцедуры - -&НаКлиенте -Процедура ДокументВидОчистка(Элемент, СтандартнаяОбработка) +Процедура ВладелецСертификатаСтрокойОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; - -КонецПроцедуры - -&НаКлиенте -Процедура ДокументНомерПриИзменении(Элемент) - - Если ДокументВид = "21" Тогда - ДокументНомер = ТолькоЦифры(ДокументНомер); - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ДокументКодПодразделенияПриИзменении(Элемент) - - ДокументКодПодразделения = ТолькоЦифры(ДокументКодПодразделения); - -КонецПроцедуры - -// Реквизиты создания ключа. - -&НаКлиенте -Процедура ПрограммаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) - - ЗаполнитьДанныеВыбораПрограммы(ДанныеВыбора, СтандартнаяОбработка); - -КонецПроцедуры - -&НаКлиенте -Процедура ПрограммаОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) - - СтандартнаяОбработка = Ложь; - - Если ТипЗнч(ВыбранноеЗначение) = Тип("Строка") Тогда - Представление = ПоставляемоеПредставлениеПрограммы(СписокПрограмм, ВыбранноеЗначение); + Если ВыбранноеЗначение <> Неопределено Тогда - Если Не ЭтоПолноправныйПользователь Тогда - ПоказатьПредупреждение(, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Программа %1 еще не добавлена в список используемых программ. - |Обратитесь к администратору.'"), - Представление)); - - ИначеЕсли ЭтоПодчиненныйУзелРИБ Тогда - ПоказатьПредупреждение(, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Программа %1 еще не добавлена в список используемых программ. - |Выполните добавление в главном узле информационной базы.'"), - Представление)); - Иначе - Кнопки = Новый СписокЗначений; - Кнопки.Добавить("Добавить", НСтр("ru = 'Добавить'")); - Кнопки.Добавить("НеДобавлять", НСтр("ru = 'Не добавлять'")); - ПоказатьВопрос( - Новый ОписаниеОповещения("ПрограммаОбработкаВыбораПродолжение", ЭтотОбъект, ВыбранноеЗначение), - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Программа %1 еще не добавлена в список используемых программ. - |Добавить?'"), - Представление), - Кнопки,, "НеДобавлять"); - КонецЕсли; + Сотрудник = ВыбранноеЗначение; + ПодключитьОбработчикОжидания("ОбработчикОжиданияРеквизитыВладельцаПриИзменении", 0.1, Истина); - Возврат; - КонецЕсли; - - Объект.Программа = ВыбранноеЗначение; - - ПодключитьОбработчикОжидания("ПослеВыборкаПрограммыОбработчикОжидания", 0.1, Истина); - -КонецПроцедуры - -&НаКлиенте -Процедура ПрограммаАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка) - - ЗаполнитьДанныеВыбораПрограммы(ДанныеВыбора, СтандартнаяОбработка); - -КонецПроцедуры - -&НаКлиенте -Процедура ПрограммаОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, СтандартнаяОбработка) - - ЗаполнитьДанныеВыбораПрограммы(ДанныеВыбора, СтандартнаяОбработка); - -КонецПроцедуры - - -&НаКлиенте -Процедура ДекорацияСозданиеКлючаОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылка, СтандартнаяОбработка) - - СтандартнаяОбработка = Ложь; - - Если НавигационнаяСсылка = "КлючЭлектроннойПодписи" Тогда - ПоказатьПредупреждение(, - НСтр("ru = 'Ключ электронной подписи - это секретная информация, которая сохраняется - |на компьютер, флешку, дискету или другой носитель информации и - |используется в дальнейшем для создания электронных подписей.'")); - - ИначеЕсли НавигационнаяСсылка = "ЗапросНаСертификат" Тогда - ПоказатьПредупреждение(, - НСтр("ru = 'Запрос на сертификат - это не секретная информация, которая создается - |на основе ключа электронной подписи, отправляется вместе с заявлением - |на выпуск сертификата и требуется для выпуска сертификата.'")); КонецЕсли; КонецПроцедуры -&НаКлиенте -Процедура ДекорацияПояснениеПрограммыОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылка, СтандартнаяОбработка) - - СтандартнаяОбработка = Ложь; - - ЭлектроннаяПодписьСлужебныйКлиент.ОткрытьИнструкциюПоРаботеСПрограммами(); - -КонецПроцедуры +#КонецОбласти -// Реквизиты отправки заявления. +#Область ПодписантЗаявления &НаКлиенте Процедура ДокументыРуководительПриИзменении(Элемент) @@ -484,6 +268,7 @@ ДокументыРуководительСсылка = Неопределено; Элементы.ДокументыРуководитель.КнопкаОткрытия = Неопределено; + ОчиститьРеквизит("ДокументыРуководительДолжность"); ОчиститьРеквизит("ДокументыРуководительОснование"); @@ -500,46 +285,13 @@ Процедура ДокументыРуководительОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) ЗначениеОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка); - - ПодключитьОбработчикОжидания("ПриИзмененииРуководителяОбработчикОжидания", 0.1, Истина); + ПодключитьОбработчикОжидания("ОбработчикОжиданияРеквизитыРуководителяПриИзменении", 0.1, Истина); КонецПроцедуры -&НаКлиенте -Процедура ИнструкцияОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылка, СтандартнаяОбработка) - - СтандартнаяОбработка = Ложь; - - Если НавигационнаяСсылка <> "КомплектДокументов" Тогда - Возврат; - КонецЕсли; - - Если ЭтоИндивидуальныйПредприниматель Тогда - ТекстПредупреждения = - НСтр("ru = 'Комплект документов: - |1. Заявление на выпуск сертификата (подготовленное на предыдущем шаге). - |2. Копия свидетельства о постановке на учет в налоговом органе (ИНН). - |3. Копия свидетельства о государственной регистрации индивидуального предпринимателя (ОГРН). - |4. Копия документа, удостоверяющего личность владельца сертификата. - |5. Копия страхового свидетельства обязательного пенсионного страхования (СНИЛС) владельца сертификата.'"); - Иначе - ТекстПредупреждения = - НСтр("ru = 'Комплект документов: - |1. Заявление на выпуск сертификата (подготовленное на предыдущем шаге). - |2. Копия* свидетельства о постановке на учет в налоговом органе (ИНН). - |3. Копия* свидетельства о государственной регистрации юридического лица (ОГРН). - |4. Копия* документа, удостоверяющего личность представителя организации, указанного для выпуска сертификата. - |5. Копия* страхового свидетельства обязательного пенсионного страхования (СНИЛС) представителя организации, - | указанного для выпуска сертификата. - |6. Копия* документа, подтверждающего полномочия руководителя, подписавшего заявление (протокол собрания - | учредителей, решение собственника, устав) или актуальная выписка из ЕГРЮЛ, заверенная налоговым органом. - | - |* Копии документов заверяются подписью руководителя и печатью организации.'"); - КонецЕсли; - - ПоказатьПредупреждение(, ТекстПредупреждения); - -КонецПроцедуры +#КонецОбласти + +#Область ОбслуживающаяОрганизация &НаКлиенте Процедура ДокументыПартнерПриИзменении(Элемент) @@ -564,7 +316,9 @@ ДокументыПартнерСсылка = Неопределено; Элементы.ДокументыПартнер.КнопкаОткрытия = Неопределено; - ОчиститьРеквизитыПартнера(); + Для Каждого Реквизит Из РеквизитыОбслуживающейОрганизации() Цикл + ОчиститьРеквизит(Реквизит.Ключ); + КонецЦикла; КонецПроцедуры @@ -579,16 +333,186 @@ Процедура ДокументыПартнерОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) ЗначениеОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка); - - ПодключитьОбработчикОжидания("ПриИзмененииПартнераОбработчикОжидания", 0.1, Истина); + ПодключитьОбработчикОжидания("ОбработчикОжиданияРеквизитыПартнераПриИзменении", 0.1, Истина); КонецПроцедуры &НаКлиенте -Процедура ДокументыПартнерЭтоИППриИзменении(Элемент) +Процедура ДокументыПартнерИННПриИзменении(Элемент) - ОчиститьРеквизитыПартнераВидаЮридическоеЛицо(); - ПриИзмененииПартнераНаСервере(Истина); + ДокументыПартнерЭтоИП = СтрДлина(ТолькоЦифры(ДокументыПартнерИНН)) > 10; + Если ДокументыПартнерЭтоИП Тогда + ОчиститьРеквизит("ДокументыПартнерКПП"); + КонецЕсли; + + Если ЗначениеЗаполнено(Объект.СостояниеЗаявления) Тогда + Модифицированность = Истина; + ДокументыПечатались = Ложь; + КонецЕсли; + + Элементы.ДокументыПартнерКПП.Доступность = Не ДокументыПартнерЭтоИП; + +КонецПроцедуры + +#КонецОбласти + +#Область Программа + +&НаКлиенте +Процедура ПрограммаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + + ЗаполнитьДанныеВыбораПрограммы(ДанныеВыбора, СтандартнаяОбработка); + +КонецПроцедуры + +&НаКлиенте +Процедура ПрограммаОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + + Если ТипЗнч(ВыбранноеЗначение) = Тип("Строка") Тогда + + Представление = ПоставляемоеПредставлениеПрограммы(СписокПрограмм, ВыбранноеЗначение); + Если Не ЭтоПолноправныйПользователь Тогда + + ПоказатьПредупреждение(, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Программа %1 еще не добавлена в список используемых программ. + |Обратитесь к администратору.'"), + Представление)); + + ИначеЕсли ЭтоПодчиненныйУзелРИБ Тогда + + ПоказатьПредупреждение(, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Программа %1 еще не добавлена в список используемых программ. + |Выполните добавление в главном узле информационной базы.'"), + Представление)); + + Иначе + + Кнопки = Новый СписокЗначений; + Кнопки.Добавить("Добавить", НСтр("ru = 'Добавить'")); + Кнопки.Добавить("НеДобавлять", НСтр("ru = 'Не добавлять'")); + ПоказатьВопрос(Новый ОписаниеОповещения("ПрограммаОбработкаВыбораПродолжение", ЭтотОбъект, ВыбранноеЗначение), + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Программа %1 еще не добавлена в список используемых программ. + |Добавить?'"), + Представление), + Кнопки,, "НеДобавлять"); + + КонецЕсли; + + Возврат; + КонецЕсли; + + Если Объект.Программа <> ВыбранноеЗначение Тогда + Модифицированность = Истина; + ДокументыПечатались = Ложь; + КонецЕсли; + + Объект.Программа = ВыбранноеЗначение; + ПодключитьОбработчикОжидания("ПослеВыбораПрограммыОбработчикОжидания", 0.1, Истина); + +КонецПроцедуры + +&НаКлиенте +Процедура ПрограммаАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка) + + ЗаполнитьДанныеВыбораПрограммы(ДанныеВыбора, СтандартнаяОбработка); + +КонецПроцедуры + +&НаКлиенте +Процедура ПрограммаОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, СтандартнаяОбработка) + + ЗаполнитьДанныеВыбораПрограммы(ДанныеВыбора, СтандартнаяОбработка); + +КонецПроцедуры + +&НаКлиенте +Процедура ПрограммаРасширеннаяПодсказкаОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылка, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + ЭлектроннаяПодписьСлужебныйКлиент.ОткрытьИнструкциюПоРаботеСПрограммами(); + +КонецПроцедуры + +#КонецОбласти + +&НаКлиенте +Процедура ИнструкцияОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылка, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + + Если НавигационнаяСсылка <> "КомплектДокументов" Тогда + Возврат; + КонецЕсли; + + Если ЭтоИндивидуальныйПредприниматель Тогда + ТекстПредупреждения = + НСтр("ru = 'Комплект документов: + |1. Заявление на выпуск сертификата (подготовленное на предыдущем шаге). + |2. Копия свидетельства о постановке на учет в налоговом органе (ИНН). + |3. Копия свидетельства о государственной регистрации индивидуального предпринимателя (ОГРН) или лист записи ЕГРИП (Форма Р60009). + |4. Копия документа, удостоверяющего личность владельца сертификата. + |5. Копия страхового свидетельства обязательного пенсионного страхования (СНИЛС) владельца сертификата или уведомления о регистрации в системе персонифицированного учета (Форма АДИ-РЕГ).'"); + Иначе + ТекстПредупреждения = + НСтр("ru = 'Комплект документов: + |1. Заявление на выпуск сертификата (подготовленное на предыдущем шаге). + |2. Копия* свидетельства о постановке на учет в налоговом органе (ИНН). + |3. Копия* свидетельства о государственной регистрации юридического лица (ОГРН) или лист записи ЕГРЮЛ (Форма № Р50007). + |4. Копия* документа, удостоверяющего личность представителя организации, указанного для выпуска сертификата. + |5. Копия* страхового свидетельства обязательного пенсионного страхования (СНИЛС) представителя организации, + | указанного для выпуска сертификата. + |6. Копия* документа, подтверждающего полномочия руководителя, подписавшего заявление (протокол собрания + | учредителей, решение собственника, устав) или актуальная выписка из ЕГРЮЛ, заверенная налоговым органом. + | + |* Копии документов заверяются подписью руководителя и печатью организации.'"); + КонецЕсли; + + ПоказатьПредупреждение(, ТекстПредупреждения); + +КонецПроцедуры + +&НаКлиенте +Процедура ДекорацияУсловияСоглашенияОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылка, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + Если НавигационнаяСсылка = "УсловияСоглашения" Тогда + ОткрытьФорму("Обработка.ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата.Форма.ФормаСоглашения", , ЭтотОбъект); + ИначеЕсли НавигационнаяСсылка = "УдостоверяющийЦентр" Тогда + ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку("http://ca.1c.ru/"); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ДекорацияТекстЗаявленияОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылка, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + Если ДокументыПечатались + И Не Модифицированность Тогда + + ПечатьЗаявленияПослеСозданияКлючаИЗапросаНаСертификат(Истина, Неопределено); + ИначеЕсли ПроверитьЗаявление() Тогда + + Доступность = Ложь; + Если Объект.Программа = ПрограммаОблачногоСервиса Тогда + СоздатьЗапросВОблачныйСервис(); + Иначе + ЭлектроннаяПодписьСлужебныйКлиент.СоздатьМенеджерКриптографии(Новый ОписаниеОповещения( + "ПечатьЗаявленияПослеСозданияМенеджераКриптографии", ЭтотОбъект), + "", Неопределено, , Истина); + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ДекорацияОписаниеНажатие(Элемент) + + ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку("https://portal.1c.ru/applications/31"); КонецПроцедуры @@ -597,44 +521,96 @@ #Область ОбработчикиКомандФормы &НаКлиенте -Процедура Далее(Команда) +Процедура УказатьСведенияОбОрганизации(Команда) - Если Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаСоглашение Тогда - ПерейтиНаСтраницуОрганизация(); - - ИначеЕсли Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаОрганизация Тогда - ПерейтиНаСтраницуВладелецСертификата(); - - ИначеЕсли Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаВладелецСертификата Тогда - ПерейтиНаСтраницуПодготовкаЗапросаНаСертификат(); - - ИначеЕсли Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаПодготовкаЗапросаНаСертификат Тогда - ПерейтиНаСтраницуОтправкаЗаявления(); - - ИначеЕсли Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаОтправкаЗаявления Тогда - ПерейтиНаСтраницуОжиданиеОбработкиЗаявления(); - - ИначеЕсли Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаОжиданиеОбработкиЗаявления Тогда - ПерейтиНаСтраницуУстановкаСертификата(); - - ИначеЕсли Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаУстановкаСертификата Тогда - ЗакрытьПомощникПослеУстановкиСертификата(); - КонецЕсли; + СведенияОбОрганизации = РеквизитыОрганизации(); + СведенияОбОрганизации.Вставить("ТелефонXML"); + СведенияОбОрганизации.Вставить("ФактическийАдресXML"); + СведенияОбОрганизации.Вставить("ЮридическийАдресXML"); + ЗаполнитьЗначенияСвойств(СведенияОбОрганизации, ЭтотОбъект); + + ПараметрыВвода = Новый Структура("СведенияОбОрганизации, ТолькоПросмотр", + СведенияОбОрганизации, Элементы.ГруппаОрганизация.ТолькоПросмотр); + + ЗавершениеВводаСведений = Новый ОписаниеОповещения("ВводСведенийОбОрганизации", ЭтотОбъект); + ОткрытьФорму("Обработка.ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата.Форма.СведенияОбОрганизации", + ПараметрыВвода, ЭтотОбъект, , , , ЗавершениеВводаСведений); КонецПроцедуры &НаКлиенте -Процедура Назад(Команда) +Процедура УказатьСведенияОВладельце(Команда) - Если Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаОрганизация Тогда - ПерейтиНаСтраницуСоглашение(); - Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаСоглашение; + СведенияОВладельце = РеквизитыВладельцаСертификата(); + СведенияОВладельце.Вставить("ЭтоИндивидуальныйПредприниматель"); + СведенияОВладельце.Вставить("ГражданствоОКСМКодАльфа3"); + СведенияОВладельце.Вставить("ГражданствоПредставление"); + ЗаполнитьЗначенияСвойств(СведенияОВладельце, ЭтотОбъект); + + ПараметрыВвода = Новый Структура("СведенияОВладельце, ТолькоПросмотр", + СведенияОВладельце, Элементы.ГруппаВладелецСертификата.ТолькоПросмотр); - ИначеЕсли Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаВладелецСертификата Тогда - ПерейтиНаСтраницуОрганизация(Истина); + ЗавершениеВводаСведений = Новый ОписаниеОповещения("ВводСведенийОВладельце", ЭтотОбъект); + ОткрытьФорму("Обработка.ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата.Форма.СведенияОВладельцеСертификата", + ПараметрыВвода, ЭтотОбъект, , , , ЗавершениеВводаСведений); + +КонецПроцедуры + +&НаКлиенте +Процедура ОтправитьЗаявление(Команда) + + Если Не ДокументыПечатались Тогда + ПоказатьПредупреждение(,НСтр("ru = 'Документы еще не печатались. + |Заявление не будет принято пока не будут получены печатные документы.'")); + Возврат; + КонецЕсли; + + Если ЗначениеЗаполнено(ДокументыПартнерИНН) + И (ДокументыПартнерЭтоИП Или ЗначениеЗаполнено(ДокументыПартнерКПП)) Тогда + + ОтправитьЗаявлениеПродолжение("Отправить", Неопределено); + Возврат; + КонецЕсли; + + Кнопки = Новый СписокЗначений; + Кнопки.Добавить("Отправить", НСтр("ru = 'Отправить'")); + Кнопки.Добавить("НеОтправить", НСтр("ru = 'Не отправлять'")); + + Текст = ""; + Если ДокументыПартнерЭтоИП Тогда + + Если Не ЗначениеЗаполнено(ДокументыПартнерИНН) Тогда + Текст = Текст + Символы.ПС + Символы.ПС + + НСтр("ru = 'Не указан ИНН обслуживающей организации. + |Заявление может обрабатываться дольше обычного.'"); + КонецЕсли; + + ИначеЕсли Не ЗначениеЗаполнено(ДокументыПартнерИНН) + Или Не ЗначениеЗаполнено(ДокументыПартнерКПП) Тогда + + Текст = Текст + Символы.ПС + Символы.ПС + + НСтр("ru = 'Не указан ИНН или КПП обслуживающей организации. + |Заявление может обрабатываться дольше обычного.'"); + + КонецЕсли; + + ОповещениеОтправитьЗаявление = Новый ОписаниеОповещения("ОтправитьЗаявлениеПродолжение", ЭтотОбъект); + ПоказатьВопрос(ОповещениеОтправитьЗаявление, СокрЛП(Текст), Кнопки); + +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьСостояниеОбработкиЗаявления(Команда) + + РезультатОбновления = ОбновитьСостояниеОбработкиЗаявленияНаСервере(); + Если РезультатОбновления = Истина Тогда + + Если Объект.Программа = ПрограммаОблачногоСервиса Тогда + УстановитьСертификатОблачногоСервиса(); + Иначе + УстановитьСертификат(Новый ОписаниеОповещения("ПослеУстановкиСертификата", ЭтотОбъект)); + КонецЕсли; - ИначеЕсли Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаПодготовкаЗапросаНаСертификат Тогда - ПерейтиНаСтраницуВладелецСертификата(Истина); КонецЕсли; КонецПроцедуры @@ -655,39 +631,6 @@ КонецПроцедуры -&НаКлиенте -Процедура НапечататьДокументы(Команда) - - Документ = ПодготовленныйДокумент(); - - Если Документ = Неопределено Тогда - Возврат; - КонецЕсли; - - ИдентификаторПечатнойФормы = "ЗаявлениеНаВыпускСертификат"; - НазваниеПечатнойФормы = НСтр("ru = 'Заявление на выпуск сертификата'"); - - Если Не ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Печать") Тогда - Документ.Показать(НазваниеПечатнойФормы); - ДокументыПечатались = Истина; - Возврат; - КонецЕсли; - - МодульУправлениеПечатьюКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеПечатьюКлиент"); - - КоллекцияПечатныхФорм = МодульУправлениеПечатьюКлиент.НоваяКоллекцияПечатныхФорм(ИдентификаторПечатнойФормы); - ПечатнаяФорма = МодульУправлениеПечатьюКлиент.ОписаниеПечатнойФормы(КоллекцияПечатныхФорм, ИдентификаторПечатнойФормы); - ПечатнаяФорма.СинонимМакета = НазваниеПечатнойФормы; - ПечатнаяФорма.ТабличныйДокумент = Документ; - ПечатнаяФорма.ИмяФайлаПечатнойФормы = НазваниеПечатнойФормы; - - ОбластиОбъектов = Новый СписокЗначений; - МодульУправлениеПечатьюКлиент.ПечатьДокументов(КоллекцияПечатныхФорм, ОбластиОбъектов); - - ДокументыПечатались = Истина; - -КонецПроцедуры - &НаКлиенте Процедура ВыгрузитьСертификат(Команда) @@ -700,1006 +643,575 @@ #Область СлужебныеПроцедурыИФункции -// Продолжение процедуры ВыгрузитьСертификат. +#Область ДействияСЗаявлением + &НаКлиенте -Процедура ВыгрузитьСертификатЗавершение(Результат, Контекст) Экспорт +Процедура ЗакрытиеПослеОтветаНаВопрос(Ответ, ДополнительныеПараметры) Экспорт - ЭлектроннаяПодписьСлужебныйКлиент.СохранитьСертификат(Неопределено, - АдресКорневогоСертификата, НСтр("ru = 'Корневой сертификат ООО НПЦ 1С'")); + Если Ответ = КодВозвратаДиалога.Нет Тогда + РазблокироватьОбъект(); + Модифицированность = Ложь; + Закрыть(); + ИначеЕсли Ответ = КодВозвратаДиалога.Да Тогда + ЗаписатьИРазблокироватьОбъект(); + ПослеЗаписи(); + Закрыть(); + КонецЕсли; КонецПроцедуры &НаКлиенте -Процедура ЗаполнитьДанныеВыбораПрограммы(ДанныеВыбора, СтандартнаяОбработка) +Процедура ПослеЗаписи() - СтандартнаяОбработка = Ложь; - ДанныеВыбора = Новый СписокЗначений; - - Если СписокПрограмм.Количество() = 0 Тогда - ЗаполнитьСписокПрограмм(); + Если Не ОповеститьОбИзмененииЗаявления Тогда + Возврат; КонецЕсли; - Для каждого Строка Из СписокПрограмм Цикл - Значение = ?(ЗначениеЗаполнено(Строка.Ссылка), Строка.Ссылка, Строка.Идентификатор); - ДанныеВыбора.Добавить(Значение, Строка.Представление); - КонецЦикла; + ОповеститьОбИзменении(Объект.Ссылка); + + Контекст = Новый Структура; + Если ЭтоНовый Тогда + Контекст.Вставить("ЭтоНовый"); + КонецЕсли; + + ОповеститьОбИзмененииЗаявления = Ложь; + Оповестить("Запись_СертификатыКлючейЭлектроннойПодписиИШифрования", Контекст, Объект.Ссылка); КонецПроцедуры &НаКлиенте -Функция ИмяФайлаБезРасширения() +Функция ЗаявлениеИсполнено() - Если ЭтоИндивидуальныйПредприниматель Тогда - ИмяФайлаБезРасширения = СокрП(Фамилия + " " + Имя + " " + Отчество); - Иначе - ИмяФайлаБезРасширения = СокрП(Фамилия + " " + Имя + " " + Отчество) + ", " + НаименованиеСокращенное - + ?(ЗначениеЗаполнено(Подразделение), ", " + Подразделение, "") + ", " + Должность; - КонецЕсли; - - Возврат ИмяФайлаБезРасширения; + Возврат Объект.СостояниеЗаявления = ПредопределенноеЗначение("Перечисление.СостоянияЗаявленияНаВыпускСертификата.Исполнено"); КонецФункции &НаСервере -Процедура ПерейтиНаСтраницуСоглашение() +Процедура ЗагрузитьЗаявление() - Элементы.ФормаНазад.Видимость = Ложь; - Элементы.ФормаНапечататьСоглашение.Видимость = Истина; - Элементы.ФормаЗакрыть.Заголовок = НСтр("ru = 'Отмена'"); + ЗаблокироватьДанныеДляРедактирования(Параметры.СертификатСсылка, , УникальныйИдентификатор); - УстановитьСоглашение(); + ТекущийОбъект = Параметры.СертификатСсылка.ПолучитьОбъект(); + ЗначениеВРеквизитФормы(ТекущийОбъект, "Объект"); -КонецПроцедуры - -&НаСервере -Процедура ПерейтиНаСтраницуОрганизация(Назад = Ложь) + ПоследнееСостояниеЗаявления = Объект.СостояниеЗаявления; - ПриИзмененииОрганизацииНаСервере(Назад); + Содержание = ТекущийОбъект.СодержаниеЗаявления.Получить(); + Если ТипЗнч(Содержание) = Тип("Структура") Тогда + ЗаполнитьЗначенияСвойств(ЭтотОбъект, Содержание); + КонецЕсли; - Элементы.ФормаНазад.Видимость = Истина; - Элементы.ФормаНапечататьСоглашение.Видимость = Ложь; - Элементы.ФормаЗакрыть.Заголовок = НСтр("ru = 'Отмена'"); - Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаОрганизация; - Элементы.СтраницыПрогресса.ТекущаяСтраница = Элементы.СтраницаПрогрессаОрганизация; - -КонецПроцедуры - -&НаКлиенте -Процедура ПерейтиНаСтраницуВладелецСертификата(Назад = Ложь) - - ПерейтиНаСтраницуВладелецСертификатаНаСервере(Назад); - - Если СотрудникТип <> Неопределено - И СотрудникТип.Количество() = 1 - И Сотрудник = Неопределено Тогда + Если Содержание.Свойство("ЗапросНаСертификат") + И ТипЗнч(Содержание.ЗапросНаСертификат) = Тип("ДвоичныеДанные") Тогда - ОписаниеТипов = Новый ОписаниеТипов(СотрудникТип.ВыгрузитьЗначения()); - Сотрудник = ОписаниеТипов.ПривестиЗначение(Неопределено); + АдресЗапросаНаСертификат = ПоместитьВоВременноеХранилище(Содержание.ЗапросНаСертификат, УникальныйИдентификатор); + КонецЕсли; + + Если Содержание.Свойство("Сертификат") + И ТипЗнч(Содержание.Сертификат) = Тип("ДвоичныеДанные") Тогда + + АдресСертификата = ПоместитьВоВременноеХранилище(Содержание.Сертификат, УникальныйИдентификатор); + КонецЕсли; + + Если Содержание.Свойство("КорневойСертификат") + И ТипЗнч(Содержание.КорневойСертификат) = Тип("ДвоичныеДанные") Тогда + + АдресКорневогоСертификата = ПоместитьВоВременноеХранилище(Содержание.КорневойСертификат, УникальныйИдентификатор); + КонецЕсли; + + Если ТекущийОбъект.СостояниеЗаявления = Перечисления.СостоянияЗаявленияНаВыпускСертификата.Отклонено Тогда + АвтоЗаголовок = Ложь; + Заголовок = НСтр("ru = 'Заявление, по которому не удалось получить сертификат'"); + ИначеЕсли ТекущийОбъект.СостояниеЗаявления = Перечисления.СостоянияЗаявленияНаВыпускСертификата.Исполнено Тогда + АвтоЗаголовок = Ложь; + Заголовок = НСтр("ru = 'Заявление, по которому был получен сертификат'"); КонецЕсли; КонецПроцедуры &НаСервере -Процедура ПерейтиНаСтраницуВладелецСертификатаНаСервере(Назад = Ложь) +Процедура СкопироватьЗаявление() - Если Не Назад И Не ОрганизацияЗаполнена() Тогда - Возврат; - КонецЕсли; - - Если Назад Тогда - ЗаписатьЗаявление(); - КонецЕсли; - - ПриИзмененииВладельцаСертификатаНаСервере(Назад); - - Элементы.ФормаЗакрыть.Заголовок = НСтр("ru = 'Отмена'"); - Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаВладелецСертификата; - Элементы.СтраницыПрогресса.ТекущаяСтраница = Элементы.СтраницаПрогрессаВладелецСертификата; - -КонецПроцедуры - -&НаКлиенте -Процедура ПерейтиНаСтраницуПодготовкаЗапросаНаСертификат() - - Если ПерейтиНаСтраницуПодготовкаЗапросаНаСертификатНаСервере() Тогда - ПослеЗаписи(); - КонецЕсли; - - ПодключитьОбработчикОжидания("ПриИзмененияСоставаИлиНастроекПрограмм", 0.1, Истина); - -КонецПроцедуры - -&НаСервере -Функция ПерейтиНаСтраницуПодготовкаЗапросаНаСертификатНаСервере() - - Если Не ВладелецЗаполнен() Тогда - Возврат Ложь; - КонецЕсли; + ДокументыПартнерЭтоИП = Ложь; Объект.Добавил = Пользователи.ТекущийПользователь(); - Если Не ЗначениеЗаполнено(Объект.Пользователь) Тогда - Объект.Пользователь = Объект.Добавил; + Объект.Пользователь = Объект.Добавил; + Объект.СостояниеЗаявления = Перечисления.СостоянияЗаявленияНаВыпускСертификата.НеПодготовлено; + + СертификатОбъект = Параметры.СертификатОснование.ПолучитьОбъект(); + Содержание = СертификатОбъект.СодержаниеЗаявления.Получить(); + Если ТипЗнч(Содержание) = Тип("Структура") Тогда + + КопируемыеСвойства = ""; + Для Каждого Реквизит Из РеквизитыОрганизации() Цикл + + КопируемыеСвойства = КопируемыеСвойства + + ?(ПустаяСтрока(КопируемыеСвойства), "", ", ") + + Реквизит.Ключ; + + КонецЦикла; + + КопируемыеСвойства = КопируемыеСвойства + + ", Организация, ЮридическийАдресXML, ФактическийАдресXML, ТелефонXML"; + + Для Каждого Реквизит Из РеквизитыВладельцаСертификата() Цикл + КопируемыеСвойства = КопируемыеСвойства + ", " + Реквизит.Ключ; + КонецЦикла; + + КопируемыеСвойства = КопируемыеСвойства + + ", Сотрудник, ГражданствоПредставление, ГражданствоОКСМКодАльфа3, ВладелецСертификатаСтрокой"; + + Для Каждого Реквизит Из РеквизитыПодписанта() Цикл + КопируемыеСвойства = КопируемыеСвойства + ", " + Реквизит.Ключ; + КонецЦикла; + + КопируемыеСвойства = КопируемыеСвойства + ", ДокументыРуководительСсылка"; + + Для Каждого Реквизит Из РеквизитыОбслуживающейОрганизации() Цикл + КопируемыеСвойства = КопируемыеСвойства + ", " + Реквизит.Ключ; + КонецЦикла; + + КопируемыеСвойства = КопируемыеСвойства + + ", ДокументыПартнерСсылка, ДокументыПартнерЭтоИП"; + + ЗаполнитьЗначенияСвойств(ЭтотОбъект, Содержание, КопируемыеСвойства); + + Иначе + + Организация = СертификатОбъект.Организация; + ЗаполнитьРеквизитыОрганизации(); + + РеквизитыВладельца = РеквизитыВладельцаСертификата(); + ЗаполнитьЗначенияСвойств(РеквизитыВладельца, СертификатОбъект, "Фамилия, Имя, Отчество, Должность"); + УстановитьРеквизитыВладельца(РеквизитыВладельца, Истина); + + Элементы.ВладелецСертификатаСтрокой.СписокВыбора.Добавить(ВладелецСертификатаСтрокой); + КонецЕсли; - ЗаписатьЗаявление(); // После записи заявление будет открываться с этой страницы. + Объект.Программа = СертификатОбъект.Программа; + ДозаполнитьПоПредыдущемуЗаявлению(); - ПерейтиНаСтраницуПодготовкаЗапросаНаСертификатНаСервереПриЗагрузке(); +КонецПроцедуры + +&НаСервере +Функция ПроверитьЗаявление() - Возврат Истина; + Возврат ПроверитьЗаполнениеОсновныхРеквизитов() + И ПроверитьЗаполнениеДополнительныхРеквизитов(); КонецФункции &НаСервере -Процедура ПерейтиНаСтраницуПодготовкаЗапросаНаСертификатНаСервереПриЗагрузке() +Процедура ЗаписатьЗаявление() - Элементы.ФормаНазад.Видимость = Истина; - Элементы.ФормаЗакрыть.Заголовок = НСтр("ru = 'Закрыть'"); + ТекущийОбъект = РеквизитФормыВЗначение("Объект"); + ЭтоНовоеСостояние = ПоследнееСостояниеЗаявления <> ТекущийОбъект.СостояниеЗаявления; - ЗаполнитьРеквизитыЗаявления(); + Содержание = ТекущийОбъект.СодержаниеЗаявления.Получить(); + Если ТипЗнч(Содержание) <> Тип("Структура") Тогда + Содержание = Новый Структура; + КонецЕсли; - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда - МодульРаботаСАдресами = ОбщегоНазначения.ОбщийМодуль("РаботаСАдресами"); + Имя = СокрЛП(Имя); + Фамилия = СокрЛП(Фамилия); + Отчество = СокрЛП(Отчество); + + ТекущийОбъект.Наименование = СокрП(Фамилия + " " + Имя + " " + Отчество) + + " (" + НСтр("ru = 'Заявление на новый сертификат'") + ")"; - ДополнительныеПараметры = Новый Структура("НаименованиеВключаетСокращение", Истина); - ФактическийАдресСтруктура = - МодульРаботаСАдресами.СведенияОбАдресе(ФактическийАдресXML, ДополнительныеПараметры); + РеквизитыОрганизации = РеквизитыОрганизации(); + РеквизитыОрганизации.Вставить("Организация"); + РеквизитыОрганизации.Вставить("ЮридическийАдресXML"); + РеквизитыОрганизации.Вставить("ФактическийАдресXML"); + РеквизитыОрганизации.Вставить("ТелефонXML"); + + Для Каждого Реквизит Из РеквизитыОрганизации Цикл + ОбновитьЗначение(Содержание, Реквизит.Ключ); + КонецЦикла; + + РеквизитыВладельца = РеквизитыВладельцаСертификата(); + РеквизитыВладельца.Вставить("Сотрудник"); + РеквизитыВладельца.Вставить("ГражданствоПредставление"); + РеквизитыВладельца.Вставить("ГражданствоОКСМКодАльфа3"); + РеквизитыВладельца.Вставить("ВладелецСертификатаСтрокой"); + + Для Каждого Реквизит Из РеквизитыВладельца Цикл + ОбновитьЗначение(Содержание, Реквизит.Ключ); + КонецЦикла; + + РеквизитыПодписанта = РеквизитыПодписанта(); + РеквизитыПодписанта.Вставить("ДокументыРуководительСсылка"); + + Для Каждого Реквизит Из РеквизитыПодписанта Цикл + ОбновитьЗначение(Содержание, Реквизит.Ключ); + КонецЦикла; + + РеквизитыПартнера = РеквизитыОбслуживающейОрганизации(); + РеквизитыПартнера.Вставить("ДокументыПартнерСсылка"); + РеквизитыПартнера.Вставить("ДокументыПартнерЭтоИП"); + + Для Каждого Реквизит Из РеквизитыПартнера Цикл + ОбновитьЗначение(Содержание, Реквизит.Ключ); + КонецЦикла; + + ОбновитьЗначение(Содержание, "Программа", Объект.Программа); + ОбновитьЗначение(Содержание, "ИдентификаторЗаявленияВОблачныйСервис"); + + Если Объект.СостояниеЗаявления = Перечисления.СостоянияЗаявленияНаВыпускСертификата.Подготовлено Тогда - ЮридическийАдресСтруктура = - МодульРаботаСАдресами.СведенияОбАдресе(ЮридическийАдресXML, ДополнительныеПараметры); - КонецЕсли; - - Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаПодготовкаЗапросаНаСертификат; - Элементы.СтраницыПрогресса.ТекущаяСтраница = Элементы.СтраницаПрогрессаПодготовкаЗапросаНаСертификат; - -КонецПроцедуры - -&НаКлиенте -Процедура ПерейтиНаСтраницуОтправкаЗаявления() - - Если Не ЗначениеЗаполнено(Объект.Программа) Тогда - ОбщегоНазначенияКлиент.СообщитьПользователю( - НСтр("ru = 'Поле ""Программа электронной подписи"" не заполнено'"), , "Программа"); + ОбновитьЗначение(Содержание, "ВариантАлгоритмов"); + ОбновитьЗначение(Содержание, "ДокументыПечатались"); + ОбновитьЗначение(Содержание, "ПредставлениеПрограммы"); + ОбновитьЗначение(Содержание, "КонтейнерКлючаИмя"); + ОбновитьЗначение(Содержание, "КонтейнерКлючаПуть"); + ОбновитьЗначение(Содержание, "ЗапросНаСертификат", ПолучитьИзВременногоХранилища(АдресЗапросаНаСертификат)); + ОбновитьЗначение(Содержание, "ОткрытаяЧастьКлючаЭП"); + ОбновитьЗначение(Содержание, "ИдентификаторКлючаСубъекта"); + ОбновитьЗначение(Содержание, "ДокументыПоляСертификата"); + ОбновитьЗначение(Содержание, "ДатаЗаявления"); - Возврат; - КонецЕсли; - - Доступность = Ложь; - - ПодключитьОбработчикОжидания("ПерейтиНаСтраницуОтправкаЗаявленияПродолжение", 0.1, Истина); - -КонецПроцедуры - -&НаКлиенте -Процедура ПерейтиНаСтраницуОтправкаЗаявленияПродолжение() - - ЭлектроннаяПодписьСлужебныйКлиент.СоздатьМенеджерКриптографии(Новый ОписаниеОповещения( - "ПерейтиНаСтраницуОтправкаЗаявленияПослеСозданияМенеджераКриптографии", ЭтотОбъект), - "", Неопределено, , Истина); - -КонецПроцедуры - -// Продолжение процедуры ПерейтиНаСтраницуОтправкаЗаявления. -&НаКлиенте -Процедура ПерейтиНаСтраницуОтправкаЗаявленияПослеСозданияМенеджераКриптографии(Результат, Контекст) Экспорт - - Если ТипЗнч(Результат) <> Тип("МенеджерКриптографии") Тогда - Объект.Программа = Неопределено; - ЭлектроннаяПодписьСлужебныйКлиент.ПоказатьОшибкуОбращенияКПрограмме( - НСтр("ru = 'Создание ключа электронной подписи'"), "", Результат, - Новый Структура, Новый Структура("ПоказатьИнструкцию", Истина)); + ИначеЕсли Объект.СостояниеЗаявления = Перечисления.СостоянияЗаявленияНаВыпускСертификата.Отправлено Тогда - Доступность = Истина; - Возврат; - КонецЕсли; - - ПредставлениеПрограммы = ПоставляемоеПредставлениеПрограммы(СписокПрограмм, Объект.Программа); - - СоздатьКлючИЗапросНаСертификат(Новый ОписаниеОповещения( - "ПерейтиНаСтраницуОтправкаЗаявленияПослеСозданияКлючаИЗапросаНаСертификат", ЭтотОбъект)); - -КонецПроцедуры - -// Продолжение процедуры ПерейтиНаСтраницуОтправкаЗаявления. -&НаКлиенте -Процедура ПерейтиНаСтраницуОтправкаЗаявленияПослеСозданияКлючаИЗапросаНаСертификат(Результат, Контекст) Экспорт - - Доступность = Истина; - - Если Результат <> Истина Тогда - Возврат; - КонецЕсли; - - ПерейтиНаСтраницуОтправкаЗаявленияНаСервере(); - - ПослеЗаписи(); - -КонецПроцедуры - -&НаСервере -Процедура ПерейтиНаСтраницуОтправкаЗаявленияНаСервере() - - Объект.СостояниеЗаявления = Перечисления.СостоянияЗаявленияНаВыпускСертификата.Подготовлено; - Объект.Организация = Организация; - - ЗаписатьЗаявление(); - - ПерейтиНаСтраницуОтправкаЗаявленияНаСервереПриЗагрузке(Ложь); - -КонецПроцедуры - -&НаСервере -Процедура ПерейтиНаСтраницуОтправкаЗаявленияНаСервереПриЗагрузке(Загрузка = Истина) - - ПриИзмененииРуководителяНаСервере(Загрузка); - ПриИзмененииПартнераНаСервере(Загрузка); - - Элементы.ФормаДалее.Доступность = Истина; - Элементы.ФормаНазад.Видимость = Ложь; - Элементы.ФормаЗакрыть.Заголовок = НСтр("ru = 'Закрыть'"); - Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаОтправкаЗаявления; - Элементы.СтраницыПрогресса.ТекущаяСтраница = Элементы.СтраницаПрогрессаОтправкаЗаявления; - - Элементы.ИнструкцияИП.Видимость = ЭтоИндивидуальныйПредприниматель; - Элементы.ИнструкцияИППункт4.Видимость = ЭтоИндивидуальныйПредприниматель; - Элементы.ИнструкцияЮЛ.Видимость = Не ЭтоИндивидуальныйПредприниматель; - Элементы.ИнструкцияЮЛПункт5.Видимость = Не ЭтоИндивидуальныйПредприниматель; - - ОбновитьДоступностьРеквизитовПартнера(); - - Если ОбщегоНазначения.ПодсистемаСуществует("ИнтернетПоддержкаПользователей") Тогда - МодульИнтернетПоддержкаПользователей = ОбщегоНазначения.ОбщийМодуль("ИнтернетПоддержкаПользователей"); - ИнтернетПоддержкаПользователейПодключена = - МодульИнтернетПоддержкаПользователей.ЗаполненыДанныеАутентификацииПользователяИнтернетПоддержки(); - Иначе - ИнтернетПоддержкаПользователейПодключена = Ложь; - КонецЕсли; - -КонецПроцедуры - -&НаСервере -Процедура ОбновитьДоступностьРеквизитовПартнера() - - Элементы.ГруппаПартнер.ТолькоПросмотр = ЗначениеЗаполнено(ИдентификаторДокументооборота); - -КонецПроцедуры - -&НаКлиенте -Процедура ПерейтиНаСтраницуОжиданиеОбработкиЗаявления() - - Если Не РуководительЗаполнен() Тогда - Возврат; - КонецЕсли; - - Если Не ПартнерЗаполнен() Тогда - Возврат; - КонецЕсли; - - Если ДокументыПечатались - И ЗначениеЗаполнено(ДокументыПартнерИНН) - И (ДокументыПартнерЭтоИП Или ЗначениеЗаполнено(ДокументыПартнерКПП)) Тогда + ОбновитьЗначение(Содержание, "ИдентификаторДокументооборота"); + ОбновитьЗначение(Содержание, "ДатаОтправки"); + ОбновитьЗначение(Содержание, "ДатаОбновленияСостояния"); + ОбновитьЗначение(Содержание, "СостояниеОбработкиЗаявления"); - ПерейтиНаСтраницуОжиданиеОбработкиЗаявленияПродолжение("Отправить", Неопределено); - Возврат; - КонецЕсли; - - Кнопки = Новый СписокЗначений; - Кнопки.Добавить("Отправить", НСтр("ru = 'Отправить'")); - Кнопки.Добавить("НеОтправить", НСтр("ru = 'Не отправлять'")); - - Текст = ""; - Если Не ДокументыПечатались Тогда - Текст = - НСтр("ru = 'Документы еще не печатались. - |Заявление не будет принято пока не будут получены печатные документы.'"); - КонецЕсли; - - Если ДокументыПартнерЭтоИП Тогда - Если Не ЗначениеЗаполнено(ДокументыПартнерИНН) Тогда - Текст = Текст + Символы.ПС + Символы.ПС - + НСтр("ru = 'Не указан ИНН обслуживающей организации. - |Заявление может обрабатываться дольше обычного.'"); + ИначеЕсли Объект.СостояниеЗаявления = Перечисления.СостоянияЗаявленияНаВыпускСертификата.ИсполненоСертификатНеУстановлен Тогда + + ОбновитьЗначение(Содержание, "ОтпечатокКорневогоСертификата"); + ОбновитьЗначение(Содержание, "Сертификат", ПолучитьИзВременногоХранилища(АдресСертификата)); + ОбновитьЗначение(Содержание, "КорневойСертификат", ПолучитьИзВременногоХранилища(АдресКорневогоСертификата)); + ОбновитьЗначение(Содержание, "ИдентификаторАбонента"); + ОбновитьЗначение(Содержание, "ДатаОбновленияСостояния"); + ОбновитьЗначение(Содержание, "СостояниеОбработкиЗаявления"); + ОбновитьЗначение(Содержание, "ОшибкаУстановкиСертификата"); + ОбновитьЗначение(Содержание, "ДатаУстановкиСертификата"); + Если ТекущийОбъект.ДанныеСертификата.Получить() <> Содержание.Сертификат Тогда + ТекущийОбъект.ДанныеСертификата = Новый ХранилищеЗначения(Содержание.Сертификат); КонецЕсли; - ИначеЕсли Не ЗначениеЗаполнено(ДокументыПартнерИНН) - Или Не ЗначениеЗаполнено(ДокументыПартнерКПП) Тогда + ИначеЕсли Объект.СостояниеЗаявления = Перечисления.СостоянияЗаявленияНаВыпускСертификата.Отклонено Тогда - Текст = Текст + Символы.ПС + Символы.ПС - + НСтр("ru = 'Не указан ИНН или КПП обслуживающей организации. - |Заявление может обрабатываться дольше обычного.'"); - КонецЕсли; - - ПоказатьВопрос( - Новый ОписаниеОповещения("ПерейтиНаСтраницуОжиданиеОбработкиЗаявленияПродолжение", ЭтотОбъект), - СокрЛП(Текст), - Кнопки); - -КонецПроцедуры - -&НаКлиенте -Процедура ПерейтиНаСтраницуОжиданиеОбработкиЗаявленияПродолжение(Ответ, Контекст) Экспорт - - Если Ответ <> "Отправить" Тогда - Возврат; - КонецЕсли; - - Если Не ОбщегоНазначенияКлиент.ПодсистемаСуществует("ИнтернетПоддержкаПользователей") Тогда - ПоказатьПредупреждение(, - НСтр("ru = 'Невозможно подключиться к порталу интернет-поддержки по причине: - |Библиотека интернет поддержки пользователей не внедрена в конфигурацию.'")); - КонецЕсли; - - МодульИнтернетПоддержкаПользователейКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль( - "ИнтернетПоддержкаПользователейКлиент"); - - Если Не ИнтернетПоддержкаПользователейПодключена Тогда - МодульИнтернетПоддержкаПользователейКлиент.ПодключитьИнтернетПоддержкуПользователей( - Новый ОписаниеОповещения("ПерейтиНаСтраницуОжиданиеОбработкиЗаявленияЗавершение", ЭтотОбъект), - ЭтотОбъект); - Иначе - ПерейтиНаСтраницуОжиданиеОбработкиЗаявленияЗавершение(Новый Структура, Неопределено); - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ПерейтиНаСтраницуОжиданиеОбработкиЗаявленияЗавершение(Результат, Контекст) Экспорт - - Если ТипЗнч(Результат) <> Тип("Структура") Тогда - ИнтернетПоддержкаПользователейПодключена = Ложь; - Возврат; - КонецЕсли; - - ИнтернетПоддержкаПользователейПодключена = Истина; - ОписаниеОшибки = ""; - - Если ПерейтиНаСтраницуОжиданиеОбработкиЗаявленияНаСервере(ОписаниеОшибки) Тогда - ПослеЗаписи(); - Иначе - Если ИнтернетПоддержкаПользователейПодключена Тогда - ОбработкаПродолжения = Неопределено; - Иначе - ОбработкаПродолжения = Новый ОписаниеОповещения( - "ПерейтиНаСтраницуОжиданиеОбработкиЗаявленияПослеПредупреждения", ЭтотОбъект); + ОбновитьЗначение(Содержание, "ДатаОбновленияСостояния"); + ОбновитьЗначение(Содержание, "СостояниеОбработкиЗаявления"); + НовоеНаименование = СокрП(Фамилия + " " + Имя + " " + Отчество) + " (" + НСтр("ru = 'Удалить'") + ")"; + Если ТекущийОбъект.Наименование <> НовоеНаименование Тогда + ТекущийОбъект.Наименование = НовоеНаименование; КонецЕсли; - ПоказатьПредупреждение(ОбработкаПродолжения, - УстановитьГиперссылку(ОписаниеОшибки, "its.1c.ru", "http://its.1c.ru")); + + ИначеЕсли Объект.СостояниеЗаявления = Перечисления.СостоянияЗаявленияНаВыпускСертификата.Исполнено Тогда + ОбновитьЗначение(Содержание, "ОшибкаУстановкиСертификата"); + ОбновитьЗначение(Содержание, "ДатаУстановкиСертификата"); КонецЕсли; -КонецПроцедуры - -&НаКлиенте -Процедура ПерейтиНаСтраницуОжиданиеОбработкиЗаявленияПослеПредупреждения(Контекст) Экспорт + ЭтоНовый = ТекущийОбъект.ЭтоНовый(); + ТекущийОбъект.Организация = Организация; + ТекущийОбъект.Имя = Имя; + ТекущийОбъект.Фамилия = Фамилия; + ТекущийОбъект.Отчество = Отчество; + ТекущийОбъект.СодержаниеЗаявления = Новый ХранилищеЗначения(Содержание); + ТекущийОбъект.Записать(); - ПерейтиНаСтраницуОжиданиеОбработкиЗаявленияПродолжение("Отправить", Неопределено); + Модифицированность = Ложь; + ЗначениеВРеквизитФормы(ТекущийОбъект, "Объект"); + ОповеститьОбИзмененииЗаявления = Истина; + + ПоследнееСостояниеЗаявления = Объект.СостояниеЗаявления; + + Если ЭтоНовый Тогда + ЗаблокироватьДанныеДляРедактирования(ТекущийОбъект.Ссылка, , УникальныйИдентификатор); + КонецЕсли; КонецПроцедуры &НаСервере -Функция ПерейтиНаСтраницуОжиданиеОбработкиЗаявленияНаСервере(ОписаниеОшибки) - - Если Не ОтправитьЗаявление(ОписаниеОшибки) Тогда - Возврат Ложь; - КонецЕсли; - - Объект.СостояниеЗаявления = Перечисления.СостоянияЗаявленияНаВыпускСертификата.Отправлено; - - ДатаОбновленияСостояния = ТекущаяДатаСеанса(); - СостояниеОбработкиЗаявления = НСтр("ru = 'Заявление принято для обработки.'"); - ОбновитьДатаОбновленияСостоянияВЗаголовке(ЭтотОбъект); +Процедура ЗаписатьИРазблокироватьОбъект() ЗаписатьЗаявление(); - - ПерейтиНаСтраницуОжиданиеОбработкиЗаявленияНаСервереПриЗагрузке(); - - Возврат Истина; - -КонецФункции - -&НаСервере -Процедура ПерейтиНаСтраницуОжиданиеОбработкиЗаявленияНаСервереПриЗагрузке() - - Элементы.ФормаНапечататьДокументы.Видимость = Истина; - Элементы.ФормаДалее.Видимость = Ложь; - Элементы.ФормаЗакрыть.Заголовок = НСтр("ru = 'Закрыть'"); - Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаОжиданиеОбработкиЗаявления; - Элементы.СтраницыПрогресса.ТекущаяСтраница = Элементы.СтраницаПрогрессаОжиданиеОбработкиЗаявления; - - ОбновитьДатаОбновленияСостоянияВЗаголовке(ЭтотОбъект); - -КонецПроцедуры - -&НаКлиентеНаСервереБезКонтекста -Процедура ОбновитьДатаОбновленияСостоянияВЗаголовке(Форма) - - Форма.Элементы.СостояниеОбработкиЗаявления.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Состояние обработки заявления (на %1)'"), - Формат(Форма.ДатаОбновленияСостояния, "ДЛФ=DT")); - -КонецПроцедуры - -&НаКлиенте -Процедура ПерейтиНаСтраницуУстановкаСертификата() - - Результат = ПерейтиНаСтраницуУстановкаСертификатаНаСервере(); - Если Результат = Неопределено Тогда - Возврат; - КонецЕсли; - - Если Результат <> Истина Тогда - ПослеЗаписи(НСтр("ru = 'Заявление отклонено.'")); - Закрыть(); - Возврат; - КонецЕсли; - - Элементы.УстановитьСертификат.Доступность = Ложь; - - УстановитьСертификат(Новый ОписаниеОповещения("ПерейтиНаСтраницуУстановкаСертификатаПослеУстановки", ЭтотОбъект)); - -КонецПроцедуры - -&НаКлиенте -Процедура ПерейтиНаСтраницуУстановкаСертификатаПослеУстановки(Установлен, Контекст) Экспорт - - Элементы.УстановитьСертификат.Доступность = Истина; - - ОбновитьДатаУстановкиСертификатаВЗаголовке(ЭтотОбъект); - - Если Установлен Тогда - ЗакрытьПомощникПослеУстановкиСертификатаНаСервере(); - ПослеЗаписи(НСтр("ru = 'Заявление исполнено.'")); - Закрыть(); - Иначе - ПослеЗаписи(); - ЗаписатьЗаявление(); - КонецЕсли; + РазблокироватьОбъект(); КонецПроцедуры &НаСервере -Функция ПерейтиНаСтраницуУстановкаСертификатаНаСервере() +Процедура РазблокироватьОбъект() + + РазблокироватьДанныеДляРедактирования(Объект.Ссылка, УникальныйИдентификатор); + +КонецПроцедуры + +&НаСервере +Функция ОбновитьСостояниеОбработкиЗаявленияНаСервере() Результат = ПолучитьСертификат(); - Если Результат = Неопределено Тогда - ОбновитьДатаОбновленияСостоянияВЗаголовке(ЭтотОбъект); - ЗаписатьЗаявление(); - Возврат Неопределено; - КонецЕсли; - Если Результат = Истина Тогда Объект.СостояниеЗаявления = Перечисления.СостоянияЗаявленияНаВыпускСертификата.ИсполненоСертификатНеУстановлен; - Иначе + ИначеЕсли Результат = Ложь Тогда Объект.СостояниеЗаявления = Перечисления.СостоянияЗаявленияНаВыпускСертификата.Отклонено; КонецЕсли; ЗаписатьЗаявление(); - Если Результат = Истина Тогда - ПерейтиНаСтраницуУстановкаСертификатаНаСервереПриЗагрузке(); - КонецЕсли; - Возврат Результат; КонецФункции &НаСервере -Процедура ПерейтиНаСтраницуУстановкаСертификатаНаСервереПриЗагрузке() +Процедура УстановитьВидимостьДоступность() - Элементы.ФормаНапечататьДокументы.Видимость = Ложь; - Элементы.ФормаНазад.Видимость = Ложь; - Элементы.ФормаДалее.Видимость = Ложь; - Элементы.ФормаЗакрыть.Заголовок = НСтр("ru = 'Закрыть'"); - Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаУстановкаСертификата; - Элементы.СтраницыПрогресса.ТекущаяСтраница = Элементы.СтраницаПрогрессаУстановкаСертификата; + ЗаявлениеОтправлено = Объект.СостояниеЗаявления <> Перечисления.СостоянияЗаявленияНаВыпускСертификата.НеПодготовлено + И Объект.СостояниеЗаявления <> Перечисления.СостоянияЗаявленияНаВыпускСертификата.Подготовлено; - ОбновитьДатаУстановкиСертификатаВЗаголовке(ЭтотОбъект); + Элементы.ГруппаПрограмма.ТолькоПросмотр = ЗаявлениеОтправлено; + Элементы.ГруппаОрганизация.ТолькоПросмотр = ЗаявлениеОтправлено; + Элементы.ГруппаОбработкаЗаявления.Видимость = ЗаявлениеОтправлено; + Элементы.ГруппаПодписантЗаявления.ТолькоПросмотр = ЗаявлениеОтправлено; + Элементы.ГруппаВладелецСертификата.ТолькоПросмотр = ЗаявлениеОтправлено; + Элементы.ГруппаОбслуживающаяОрганизация.ТолькоПросмотр = ЗаявлениеОтправлено; + + Элементы.ОтправитьЗаявление.Доступность = Не ЗаявлениеОтправлено; КонецПроцедуры -&НаКлиентеНаСервереБезКонтекста -Процедура ОбновитьДатаУстановкиСертификатаВЗаголовке(Форма) - - Если Не ЗначениеЗаполнено(Форма.ДатаУстановкиСертификата) Тогда - Возврат; - КонецЕсли; - - Форма.Элементы.ОшибкаУстановкиСертификата.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка установки сертификата (на %1)'"), - Формат(Форма.ДатаУстановкиСертификата, "ДЛФ=DT")); - -КонецПроцедуры - -&НаКлиентеНаСервереБезКонтекста -Функция УстановитьГиперссылку(Строка, Подстрока, Гиперссылка) - - Позиция = СтрНайти(Строка, Подстрока); - Если Позиция = 0 Тогда - Возврат Новый ФорматированнаяСтрока(Строка); - КонецЕсли; - - СтрокаСоСсылкой = Новый ФорматированнаяСтрока( - Подстрока,,,, Гиперссылка); - - Возврат Новый ФорматированнаяСтрока(Лев(Строка, Позиция-1), - СтрокаСоСсылкой, Сред(Строка, Позиция + СтрДлина(Подстрока))); - -КонецФункции +#КонецОбласти +#Область ЗаполнениеРеквизитов &НаКлиенте -Процедура ЗакрытьПомощникПослеУстановкиСертификата() +Процедура ОчиститьРеквизит(ИмяРеквизита) - Элементы.УстановитьСертификат.Доступность = Ложь; - - УстановитьСертификат(Новый ОписаниеОповещения("ЗакрытьПомощникПослеУстановкиСертификатаЗавершение", ЭтотОбъект)); + ЭтотОбъект[ИмяРеквизита] = Неопределено; КонецПроцедуры &НаКлиенте -Процедура ЗакрытьПомощникПослеУстановкиСертификатаЗавершение(Установлен, Контекст) Экспорт +Процедура ЗначениеОткрытие(Элемент, СтандартнаяОбработка) - Элементы.УстановитьСертификат.Доступность = Истина; + СтандартнаяОбработка = Ложь; + Значение = ЭтотОбъект[Элемент.Имя + "Ссылка"]; - ОбновитьДатаУстановкиСертификатаВЗаголовке(ЭтотОбъект); + Если ЗначениеЗаполнено(Значение) Тогда + ПоказатьЗначение(, Значение); + КонецЕсли; - Если Не Установлен Тогда - ЗаписатьЗаявление(); +КонецПроцедуры + +&НаКлиенте +Процедура ЗначениеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка, ИмяРеквизитаТип = "") + + СтандартнаяОбработка = Ложь; + + ИмяРеквизита = Элемент.Имя; + Если ПустаяСтрока(ИмяРеквизитаТип) Тогда + ИмяРеквизитаТип = ИмяРеквизита + "Тип"; + ИмяРеквизитаЗначения = Элемент.Имя + + ?(ТипЗнч(ЭтотОбъект[Элемент.Имя]) = Тип("Строка"), "Ссылка", ""); + Иначе + ИмяРеквизитаЗначения = Лев(ИмяРеквизитаТип, СтрДлина(ИмяРеквизитаТип) - 3); + КонецЕсли; + + Контекст = Новый Структура; + Контекст.Вставить("Элемент", Элемент); + Контекст.Вставить("ИмяРеквизита", ИмяРеквизита); + Контекст.Вставить("ИмяРеквизитаТип", ИмяРеквизитаТип); + Контекст.Вставить("ИмяРеквизитаЗначения", ИмяРеквизитаЗначения); + + Если ТипЗнч(ЭтотОбъект[ИмяРеквизитаТип]) <> Тип("СписокЗначений") Тогда + Возврат; + ИначеЕсли ЭтотОбъект[ИмяРеквизитаТип].Количество() = 1 Тогда + ЗначениеНачалоВыбораПослеВыбораТипа(ЭтотОбъект[ИмяРеквизитаТип][0], Контекст); + Иначе + + СписокВыбораТипов = Новый СписокЗначений; + СписокВыбораТипов.ЗагрузитьЗначения(ЭтотОбъект[ИмяРеквизитаТип].ВыгрузитьЗначения()); + СписокВыбораТипов.ПоказатьВыборЭлемента( + Новый ОписаниеОповещения("ЗначениеНачалоВыбораПослеВыбораТипа", ЭтотОбъект, Контекст), + НСтр("ru = 'Выбор типа данных'"), + ЭтотОбъект[ИмяРеквизитаТип].НайтиПоЗначению(ТипЗнч(ЭтотОбъект[ИмяРеквизитаЗначения]))); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ЗначениеНачалоВыбораПослеВыбораТипа(ЭлементСписка, Контекст) Экспорт + + Если ЭлементСписка = Неопределено Тогда Возврат; КонецЕсли; - ЗакрытьПомощникПослеУстановкиСертификатаНаСервере(); + Элемент = Контекст.Элемент; + ИмяРеквизита = Контекст.ИмяРеквизита; + ИмяРеквизитаТип = Контекст.ИмяРеквизитаТип; + ИмяРеквизитаЗначения = Контекст.ИмяРеквизитаЗначения; - ПослеЗаписи(НСтр("ru = 'Сертификат установлен.'")); - Закрыть(); + МассивТипов = Новый Массив; + МассивТипов.Добавить(ЭлементСписка.Значение); + + ОписаниеТипов = Новый ОписаниеТипов(МассивТипов); + НачальноеЗначение = ОписаниеТипов.ПривестиЗначение(ЭтотОбъект[ИмяРеквизитаЗначения]); + + Если ИмяРеквизита = ИмяРеквизитаЗначения Тогда + ЭтотОбъект[ИмяРеквизитаЗначения] = НачальноеЗначение; + КонецЕсли; + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("РежимВыбора", Истина); + ПараметрыФормы.Вставить("ТекущаяСтрока", НачальноеЗначение); + ПараметрыФормы.Вставить("ЗакрыватьПриВыборе", Истина); + ПараметрыФормы.Вставить("МножественныйВыбор", Ложь); + + ИмяФормыВыбора = ЭтотОбъект[ИмяРеквизитаТип].НайтиПоЗначению(ТипЗнч(НачальноеЗначение)).Представление + + ".ФормаВыбора"; + + ОткрытьФорму(ИмяФормыВыбора, ПараметрыФормы, Элемент); + +КонецПроцедуры + +&НаКлиенте +Процедура ЗначениеОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + ЭтотОбъект[Элемент.Имя + "Ссылка"] = ВыбранноеЗначение; КонецПроцедуры &НаСервере -Процедура ЗакрытьПомощникПослеУстановкиСертификатаНаСервере() +Процедура УстановитьРеквизит(Реквизиты, ИмяРеквизита, ТолькоЦифры = Ложь, ЭтоАдрес = Неопределено) - Объект.СостояниеЗаявления = Перечисления.СостоянияЗаявленияНаВыпускСертификата.Исполнено; + Если Реквизиты[ИмяРеквизита] = Неопределено Тогда + Возврат; // Заполнение реквизита не внедрено. + КонецЕсли; - ЗаписатьЗаявление(); + Если Не ЗначениеЗаполнено(Реквизиты[ИмяРеквизита]) Тогда + + ЭтотОбъект[ИмяРеквизита] = Неопределено; + Если ЭтоАдрес <> Неопределено Тогда + ЭтотОбъект[ИмяРеквизита + "XML"] = ""; + КонецЕсли; + + Иначе + + Если ЭтоАдрес <> Неопределено Тогда + + ЭтотОбъект[ИмяРеквизита + "XML"] = Реквизиты[ИмяРеквизита]; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда + + МодульУправлениеКонтактнойИнформацией = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформацией"); + ЭтотОбъект[ИмяРеквизита] = МодульУправлениеКонтактнойИнформацией.ПредставлениеКонтактнойИнформации( + Реквизиты[ИмяРеквизита]); + + КонецЕсли; + + ИначеЕсли ТолькоЦифры Тогда + ЭтотОбъект[ИмяРеквизита] = ТолькоЦифры(Реквизиты[ИмяРеквизита]); + ИначеЕсли ТипЗнч(Реквизиты[ИмяРеквизита]) = Тип("Строка") Тогда + ЭтотОбъект[ИмяРеквизита] = СокрЛП(Реквизиты[ИмяРеквизита]); + Иначе + ЭтотОбъект[ИмяРеквизита] = Реквизиты[ИмяРеквизита]; + КонецЕсли; + + КонецЕсли; - Элементы.ФормаДалее.Видимость = Ложь; +КонецПроцедуры + +&НаСервере +Процедура ЗаполнитьТипыЗначения(РеквизитТип, Элемент, ОписаниеТипов); + + Если ТипЗнч(ОписаниеТипов) <> Тип("ОписаниеТипов") Тогда + РеквизитТип = Неопределено; + Иначе + + СоставТипов = Новый СписокЗначений; + Для Каждого Тип Из ОписаниеТипов.Типы() Цикл + Если ОбщегоНазначения.ЭтоСсылка(Тип) Тогда + СоставТипов.Добавить(Тип, Строка(Тип)); + КонецЕсли; + КонецЦикла; + + СоставТипов.СортироватьПоПредставлению(); + + Для Каждого ЭлементСписка Из СоставТипов Цикл + ЭлементСписка.Представление = Метаданные.НайтиПоТипу(ЭлементСписка.Значение).ПолноеИмя(); + КонецЦикла; + + Если СоставТипов.Количество() = 0 Тогда + РеквизитТип = Неопределено; + Иначе + + РеквизитТип = СоставТипов; + Если Элемент.ОтображениеКнопкиВыбора = ОтображениеКнопкиВыбора.ОтображатьВВыпадающемСписке Тогда + Элемент.ВыбиратьТип = Ложь; + Иначе + Элемент.ВыбиратьТип = РеквизитТип.Количество() > 1; + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ОбновитьЗначение(Содержание, ИмяСвойства, Значение = null) + + Если Значение = Null Тогда + Значение = ЭтотОбъект[ИмяСвойства]; + КонецЕсли; + + Если Содержание.Свойство(ИмяСвойства) + И Содержание[ИмяСвойства] = Значение Тогда + + Возврат; + КонецЕсли; + + Содержание.Вставить(ИмяСвойства, Значение); + +КонецПроцедуры + +#КонецОбласти + +#Область ИзменениеОсновныхРеквизитов + +&НаКлиенте +Процедура ВводСведенийОбОрганизации(Сведения, ДополнительныеПараметры) Экспорт + + Если Сведения <> Неопределено Тогда + + Модифицированность = Истина; + ДокументыПечатались = Ложь; + УстановитьРеквизитыОрганизации(Сведения, Ложь); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ВводСведенийОВладельце(Сведения, ДополнительныеПараметры) Экспорт + + Если Сведения <> Неопределено Тогда + + Модифицированность = Истина; + ДокументыПечатались = Ложь; + + ВведеноВручную = Не ЗначениеЗаполнено(Сотрудник) + Или Фамилия <> Сведения.Фамилия + Или Имя <> Сведения.Имя; + + УстановитьРеквизитыВладельца(Сведения, ВведеноВручную); + + КонецЕсли; КонецПроцедуры &НаКлиенте Процедура ОбработчикОжиданияРеквизитыОрганизацииПриИзменении() - Если Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаОрганизация Тогда - ПриИзмененииОрганизацииНаСервере(); - - ИначеЕсли Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаВладелецСертификата Тогда - ПриИзмененииВладельцаСертификатаНаСервере(); - КонецЕсли; + ПриИзмененииОрганизацииНаСервере(); КонецПроцедуры -&НаКлиенте -Процедура ОчиститьРеквизитыОрганизации() - - ОчиститьРеквизит("НаименованиеСокращенное"); - ОчиститьРеквизит("НаименованиеПолное"); - ОчиститьРеквизит("ИНН"); - ОчиститьРеквизит("КПП"); - ОчиститьРеквизит("ОГРН"); - ОчиститьРеквизит("РасчетныйСчет"); - ОчиститьРеквизит("БИК"); - ОчиститьРеквизит("КорреспондентскийСчет"); - - ОчиститьРеквизит("ЮридическийАдрес"); - ЮридическийАдресXML = ""; - - ОчиститьРеквизит("ФактическийАдрес"); - ФактическийАдресXML = ""; - - ОчиститьРеквизит("Телефон"); - ТелефонXML = ""; - - Сотрудник = Неопределено; - ОчиститьРеквизитыВладельца(); - -КонецПроцедуры - -&НаКлиенте -Процедура ОчиститьРеквизитыОрганизацииВидаЮридическоеЛицо() - - ОчиститьРеквизит("КПП"); - -КонецПроцедуры - -&НаСервере -Процедура ПриИзмененииОрганизацииНаСервере(Загрузка = Ложь) - - Если Не Загрузка Тогда - Реквизиты = Новый Структура; - Реквизиты.Вставить("ЭтоИндивидуальныйПредприниматель", ЭтоИндивидуальныйПредприниматель); - Реквизиты.Вставить("НаименованиеСокращенное"); - Реквизиты.Вставить("НаименованиеПолное"); - Реквизиты.Вставить("ИНН"); - Реквизиты.Вставить("КПП"); - Реквизиты.Вставить("ОГРН"); - Реквизиты.Вставить("РасчетныйСчет"); - Реквизиты.Вставить("БИК"); - Реквизиты.Вставить("КорреспондентскийСчет"); - Реквизиты.Вставить("Телефон"); - Реквизиты.Вставить("ЮридическийАдрес"); - Реквизиты.Вставить("ФактическийАдрес"); - - Если ЕстьОрганизации Тогда - Реквизиты.Вставить("Организация", Организация); - Иначе - Реквизиты.Вставить("Организация", Неопределено); - КонецЕсли; - - ЭлектроннаяПодписьПереопределяемый.ПриЗаполненииРеквизитовОрганизацииВЗаявленииНаСертификат(Реквизиты);// АПК:222 Вызов устаревшей для совместимости. - ЗаявлениеНаСертификатПереопределяемый.ПриЗаполненииРеквизитовОрганизацииВЗаявленииНаСертификат(Реквизиты); - - Если ЕстьОрганизации Тогда - Организация = Реквизиты.Организация; - КонецЕсли; - ЭтоИндивидуальныйПредприниматель = Реквизиты.ЭтоИндивидуальныйПредприниматель; - - УстановитьРеквизит(Реквизиты, "НаименованиеСокращенное"); - УстановитьРеквизит(Реквизиты, "НаименованиеПолное"); - УстановитьРеквизит(Реквизиты, "ИНН", Истина); - УстановитьРеквизит(Реквизиты, "ОГРН", Истина); - УстановитьРеквизит(Реквизиты, "РасчетныйСчет", Истина); - УстановитьРеквизит(Реквизиты, "БИК", Истина); - УстановитьРеквизит(Реквизиты, "КорреспондентскийСчет", Истина); - УстановитьРеквизит(Реквизиты, "Телефон", , Истина, Ложь); - УстановитьРеквизит(Реквизиты, "ЮридическийАдрес", , Истина, Истина); - УстановитьРеквизит(Реквизиты, "ФактическийАдрес", , Истина, Истина); - - Если Не ЭтоИндивидуальныйПредприниматель Тогда - УстановитьРеквизит(Реквизиты, "КПП", Истина); - КонецЕсли; - КонецЕсли; - - Если ЭтоИндивидуальныйПредприниматель Тогда - Элементы.КПП.Видимость = Ложь; - Элементы.ОГРН.Заголовок = НСтр("ru = 'ОГРНИП'"); - Иначе - Элементы.КПП.Видимость = Истина; - Элементы.ОГРН.Заголовок = НСтр("ru = 'ОГРН'"); - КонецЕсли; - - ПроверитьАдрес("ЮридическийАдрес"); - ПроверитьАдрес("ФактическийАдрес"); - -КонецПроцедуры - -&НаСервере -Функция ОрганизацияЗаполнена() - - Отказ = Ложь; - - Если Элементы.Организация.Видимость - И Не ПроверитьРеквизит(Отказ, "Организация") Тогда - - Возврат Ложь; - КонецЕсли; - - ПроверитьРеквизит(Отказ, "НаименованиеСокращенное"); - ПроверитьРеквизит(Отказ, "НаименованиеПолное"); - - Если ПроверитьРеквизит(Отказ, "ИНН") Тогда - ТекстСообщения = ""; - РегламентированныеДанныеКлиентСервер.ИННСоответствуетТребованиям(ИНН, - Не ЭтоИндивидуальныйПредприниматель, ТекстСообщения); - Если ЗначениеЗаполнено(ТекстСообщения) Тогда - ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, , "ИНН", , Отказ); - КонецЕсли; - КонецЕсли; - - Если Не ЭтоИндивидуальныйПредприниматель - И ПроверитьРеквизит(Отказ, "КПП") Тогда - - ТекстСообщения = ""; - РегламентированныеДанныеКлиентСервер.КППСоответствуетТребованиям(КПП, ТекстСообщения); - Если ЗначениеЗаполнено(ТекстСообщения) Тогда - ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, , "КПП", , Отказ); - КонецЕсли; - КонецЕсли; - - Если ПроверитьРеквизит(Отказ, "ОГРН") Тогда - ТекстСообщения = ""; - РегламентированныеДанныеКлиентСервер.ОГРНСоответствуетТребованиям(ОГРН, - Не ЭтоИндивидуальныйПредприниматель, ТекстСообщения); - Если ЗначениеЗаполнено(ТекстСообщения) Тогда - ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, , "ОГРН", , Отказ); - КонецЕсли; - КонецЕсли; - - Если ЗначениеЗаполнено(РасчетныйСчет) Тогда - ТекстСообщения = ""; - РасчетныйСчетСоответствуетТребованиям(РасчетныйСчет, ТекстСообщения); - Если ЗначениеЗаполнено(ТекстСообщения) Тогда - ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, , "РасчетныйСчет", , Отказ); - КонецЕсли; - КонецЕсли; - - Если ЗначениеЗаполнено(БИК) Тогда - ТекстСообщения = ""; - БИКСоответствуетТребованиям(БИК, ТекстСообщения); - Если ЗначениеЗаполнено(ТекстСообщения) Тогда - ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, , "БИК", , Отказ); - КонецЕсли; - КонецЕсли; - - Если ЗначениеЗаполнено(КорреспондентскийСчет) Тогда - ТекстСообщения = ""; - КорреспондентскийСчетСоответствуетТребованиям(КорреспондентскийСчет, ТекстСообщения); - Если ЗначениеЗаполнено(ТекстСообщения) Тогда - ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, , "КорреспондентскийСчет", , Отказ); - КонецЕсли; - КонецЕсли; - - Если ПроверитьРеквизит(Отказ, "ЮридическийАдрес") Тогда - ТекстСообщения = ""; - АдресСоответствуетТребованиям(ЮридическийАдресXML, ТекстСообщения); - Если ЗначениеЗаполнено(ТекстСообщения) Тогда - ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, , "ЮридическийАдрес", , Отказ); - КонецЕсли; - КонецЕсли; - - Если ПроверитьРеквизит(Отказ, "ФактическийАдрес") Тогда - ТекстСообщения = ""; - АдресСоответствуетТребованиям(ФактическийАдресXML, ТекстСообщения); - Если ЗначениеЗаполнено(ТекстСообщения) Тогда - ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, , "ФактическийАдрес", , Отказ); - КонецЕсли; - КонецЕсли; - - Если ПроверитьРеквизит(Отказ, "Телефон") Тогда - ТекстСообщения = ""; - ТелефонСоответствуетТребованиям(ТелефонXML, ТекстСообщения); - Если ЗначениеЗаполнено(ТекстСообщения) Тогда - ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, , "Телефон", , Отказ); - КонецЕсли; - КонецЕсли; - - Возврат Не Отказ; - -КонецФункции - -&НаКлиенте -Процедура ПроверитьАдресОбработчикОжидания() - - Для Каждого КлючИЗначение Из РеквизитыПроверкиАдреса Цикл - Если КлючИЗначение.Значение Тогда - ПроверитьАдрес(КлючИЗначение.Ключ); - РеквизитыПроверкиАдреса[КлючИЗначение.Ключ] = Ложь; - КонецЕсли; - КонецЦикла; - -КонецПроцедуры - -&НаСервере -Процедура ПроверитьАдрес(ИмяРеквизита) - - Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда - Возврат; - КонецЕсли; - - МодульРаботаСАдресами = ОбщегоНазначения.ОбщийМодуль("РаботаСАдресами"); - - Сообщение = ""; - Попытка - ПодробныйИтог = МодульРаботаСАдресами.ПроверитьАдрес(ЭтотОбъект[ИмяРеквизита + "XML"]); - - Если ПодробныйИтог.Результат <> "Корректный" Тогда - Для каждого ЭлементСписка Из ПодробныйИтог.СписокОшибок Цикл - Сообщение = Сообщение + Символы.ПС + ЭлементСписка.Представление; - КонецЦикла; - Сообщение = СокрЛП(Сообщение); - Если Не ЗначениеЗаполнено(Сообщение) Тогда - Сообщение = НСтр("ru = 'Адрес не заполнен'"); - КонецЕсли; - КонецЕсли; - Исключение - ИнформацияОбОшибке = ИнформацияОбОшибке(); - Сообщение = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); - КонецПопытки; - - Если ЗначениеЗаполнено(Сообщение) Тогда - Элементы[ИмяРеквизита + "Предупреждение"].Подсказка = Сообщение; - Элементы[ИмяРеквизита + "Предупреждение"].Видимость = Истина; - Иначе - Элементы[ИмяРеквизита + "Предупреждение"].Видимость = Ложь; - КонецЕсли; - -КонецПроцедуры - -&НаСервере -Функция РасчетныйСчетСоответствуетТребованиям(РасчетныйСчет, ТекстСообщения) - - Значение = СокрЛП(РасчетныйСчет); - - Если НЕ СтроковыеФункцииКлиентСервер.ТолькоЦифрыВСтроке(Значение) Тогда - ТекстСообщения = НСтр("ru = 'Расчетный счет должен состоять только из цифр.'"); - Возврат Ложь; - КонецЕсли; - - Если СтрДлина(Значение) <> 20 Тогда - ТекстСообщения = НСтр("ru = 'Расчетный счет должен состоять из 20 цифр.'"); - Возврат Ложь; - КонецЕсли; - - ЭтоБанк = ЗначениеЗаполнено(КорреспондентскийСчет); - Если Не РегламентированныеДанныеКлиентСервер.КонтрольныйКлючЛицевогоСчетаСоответствуетТребованиям(Значение, БИК, ЭтоБанк) Тогда - ТекстСообщения = НСтр("ru = 'Контрольное число счета не совпадает с рассчитанным с учетом БИК'"); - Возврат Ложь; - КонецЕсли; - - Возврат Истина; - -КонецФункции - -&НаСервере -Функция БИКСоответствуетТребованиям(БИК, ТекстСообщения) - - Значение = СокрЛП(БИК); - - Если НЕ СтроковыеФункцииКлиентСервер.ТолькоЦифрыВСтроке(Значение) Тогда - ТекстСообщения = НСтр("ru = 'БИК должен состоять только из цифр.'"); - Возврат Ложь; - КонецЕсли; - - Если СтрДлина(Значение) <> 9 Тогда - ТекстСообщения = НСтр("ru = 'БИК должен состоять из 9 цифр.'"); - Возврат Ложь; - КонецЕсли; - - Возврат Истина; - -КонецФункции - -&НаСервере -Функция КорреспондентскийСчетСоответствуетТребованиям(КорреспондентскийСчет, ТекстСообщения) - - Значение = СокрЛП(КорреспондентскийСчет); - - Если НЕ СтроковыеФункцииКлиентСервер.ТолькоЦифрыВСтроке(Значение) Тогда - ТекстСообщения = НСтр("ru = 'Корреспондентский счет должен состоять только из цифр.'"); - Возврат Ложь; - КонецЕсли; - - Если СтрДлина(Значение) <> 20 Тогда - ТекстСообщения = НСтр("ru = 'Корреспондентский счет должен состоять из 20 цифр.'"); - Возврат Ложь; - КонецЕсли; - - Возврат Истина; - -КонецФункции - -&НаСервере -Функция АдресСоответствуетТребованиям(Знач АдресXML, ТекстСообщения) - - Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда - Возврат Ложь; - КонецЕсли; - - МодульРаботаСАдресами = ОбщегоНазначения.ОбщийМодуль("РаботаСАдресами"); - - ТекстСообщения = ""; - ДополнительныеПараметры = Новый Структура("НаименованиеВключаетСокращение", Истина); - АдресСтруктура = МодульРаботаСАдресами.СведенияОбАдресе(АдресXML, ДополнительныеПараметры); - - // Проверка, что адрес российский. - Если Не АдресСтруктура.Свойство("КодРегиона") Тогда - ТекстСообщения = ТекстСообщения + НСтр("ru = 'Это не российский адрес'"); - Возврат Ложь; - КонецЕсли; - - // Проверка, что указан регион. - Если Не АдресСтруктура.Свойство("Регион") Или Не ЗначениеЗаполнено(АдресСтруктура.Регион) Тогда - ТекстСообщения = ТекстСообщения + НСтр("ru = 'Не указан регион'"); - Возврат Ложь; - КонецЕсли; - - // Проверка, что регион указан правильно - код региона определен. - Если Не ЗначениеЗаполнено(АдресСтруктура.КодРегиона) Тогда - ТекстСообщения = ТекстСообщения + НСтр("ru = 'Некорректный регион (код региона не определен)'"); - Возврат Ложь; - КонецЕсли; - - // Населенный пункт полностью. - НаселенныйПунктПолностью = НаселенныйПунктПолностью(АдресСтруктура); - Если Не ЗначениеЗаполнено(НаселенныйПунктПолностью) Тогда - ТекстСообщения = ТекстСообщения + НСтр("ru = 'Не указан населенный пункт'"); - Возврат Ложь; - КонецЕсли; - - Возврат Истина; - -КонецФункции - -&НаКлиентеНаСервереБезКонтекста -Функция НаселенныйПунктПолностью(АдресСтруктура) - - // Округ ОкругСокращение, Район РайонСокращение, Город ГородСокращение, - // ВнутригородскойРайон ВнутригородскойРайонСокращение, НаселенныйПункт НаселенныйПунктСокращение. - СписокПолей = ""; - - Если АдресСтруктура.Свойство("Регион") - И АдресСтруктура.Свойство("КодРегиона") - И ( АдресСтруктура.КодРегиона = "77" - Или АдресСтруктура.КодРегиона = "78" - Или АдресСтруктура.КодРегиона = "92" - Или АдресСтруктура.КодРегиона = "99") Тогда - - СписокПолей = "Регион, КодРегиона, "; - КонецЕсли; - - Возврат ПредставлениеЧастиАдреса(АдресСтруктура, СписокПолей + - "Округ, - |Район, - |Город, - |ВнутригородскойРайон, - |НаселенныйПункт, - |Территория"); - -КонецФункции - -&НаКлиентеНаСервереБезКонтекста -Функция ПредставлениеЧастиАдреса(АдресСтруктура, СписокПолей) - - Представление = ""; - СтруктураПолей = Новый Структура(СписокПолей); - ЗаполнитьЗначенияСвойств(СтруктураПолей, АдресСтруктура); - -#Если Сервер Тогда - МодульУправлениеКонтактнойИнформациейКлиентСервер = ОбщегоНазначения.ОбщийМодуль( - "УправлениеКонтактнойИнформациейКлиентСервер"); -#Иначе - МодульУправлениеКонтактнойИнформациейКлиентСервер = ОбщегоНазначенияКлиент.ОбщийМодуль( - "УправлениеКонтактнойИнформациейКлиентСервер"); -#КонецЕсли - - МодульУправлениеКонтактнойИнформациейКлиентСервер.СформироватьПредставлениеАдреса( - СтруктураПолей, Представление); - - Возврат Представление; - -КонецФункции - -&НаСервере -Функция ТелефонСоответствуетТребованиям(Знач ТелефонXML, ТекстСообщения) - - Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда - Возврат Ложь; - КонецЕсли; - - МодульУправлениеКонтактнойИнформацией = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформацией"); - - ТекстСообщения = ""; - ТелефонСтруктура = МодульУправлениеКонтактнойИнформацией.СведенияОТелефоне(ТелефонXML); - - // Проверка, что телефон российский. - Если СтрЗаменить(ТелефонСтруктура.КодСтраны, "+", "") <> "7" Тогда - ТекстСообщения = ТекстСообщения + НСтр("ru = 'Код страны не российский (должен быть ""7"")'"); - Возврат Ложь; - КонецЕсли; - - НомерТелефонаБезКодаСтраны = ТелефонСтруктура.КодГорода + ТелефонСтруктура.НомерТелефона; - - Если Не ЗначениеЗаполнено(НомерТелефонаБезКодаСтраны) Тогда - ТекстСообщения = ТекстСообщения + НСтр("ru = 'Не заполнен номер телефона'"); - Возврат Ложь; - КонецЕсли; - - Если СтрДлина(ТолькоЦифры(НомерТелефонаБезКодаСтраны)) <> 10 Тогда - ТекстСообщения = ТекстСообщения + НСтр("ru = 'Номер телефона с кодом города должен состоять из 10-и цифр'"); - Возврат Ложь; - КонецЕсли; - - Возврат Истина; - -КонецФункции - &НаКлиенте Процедура ОбработчикОжиданияРеквизитыВладельцаПриИзменении() @@ -1707,71 +1219,72 @@ КонецПроцедуры -&НаКлиенте -Процедура ОчиститьРеквизитыВладельца() +&НаСервере +Процедура ПриИзмененииОрганизацииНаСервере(Загрузка = Ложь) - ОчиститьРеквизит("Фамилия"); - ОчиститьРеквизит("Имя"); - ОчиститьРеквизит("Отчество"); - ОчиститьРеквизит("ДатаРождения"); - ОчиститьРеквизит("Пол"); - ОчиститьРеквизит("МестоРождения"); - ОчиститьРеквизит("Гражданство"); - ОчиститьРеквизит("ГражданствоПредставление"); - ОчиститьРеквизит("ГражданствоОКСМКодАльфа3"); - ОчиститьРеквизит("СтраховойНомерПФР"); - ОчиститьРеквизит("Должность"); - ОчиститьРеквизит("Подразделение"); - - Если Элементы.ДокументВид.ТолькоПросмотр Тогда - ДокументВид = 21; + Если Не Загрузка Тогда + + Модифицированность = ЗначениеЗаполнено(Объект.СостояниеЗаявления); + ДокументыПечатались = Ложь; + + ЗаполнитьРеквизитыОрганизации(); + КонецЕсли; - ОчиститьРеквизит("ДокументНомер"); - ОчиститьРеквизит("ДокументКемВыдан"); - ОчиститьРеквизит("ДокументКодПодразделения"); - ОчиститьРеквизит("ДокументДатаВыдачи"); - ОчиститьРеквизит("ЭлектроннаяПочта"); + Если СотрудникТип <> Неопределено + И СотрудникТип.Количество() = 1 + И Сотрудник = Неопределено Тогда + + ОписаниеТипов = Новый ОписаниеТипов(СотрудникТип.ВыгрузитьЗначения()); + Сотрудник = ОписаниеТипов.ПривестиЗначение(Неопределено); + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда + + МодульРаботаСАдресами = ОбщегоНазначения.ОбщийМодуль("РаботаСАдресами"); + + ДополнительныеПараметры = Новый Структура("НаименованиеВключаетСокращение", Истина); + ФактическийАдресСтруктура = + МодульРаботаСАдресами.СведенияОбАдресе(ФактическийАдресXML, ДополнительныеПараметры); + + ЮридическийАдресСтруктура = + МодульРаботаСАдресами.СведенияОбАдресе(ЮридическийАдресXML, ДополнительныеПараметры); + + КонецЕсли; + + ПриИзмененииРуководителяНаСервере(Загрузка); + ПриИзмененииПартнераНаСервере(Загрузка); + ПриИзмененииВладельцаСертификатаНаСервере(Загрузка); + +КонецПроцедуры + +&НаСервере +Процедура ЗаполнитьРеквизитыОрганизации() + + Реквизиты = РеквизитыОрганизации(); + Реквизиты.Вставить("Организация", ?(ЕстьОрганизации, Организация, Неопределено)); + Реквизиты.ЭтоИндивидуальныйПредприниматель = ЭтоИндивидуальныйПредприниматель; + + ЭлектроннаяПодписьПереопределяемый.ПриЗаполненииРеквизитовОрганизацииВЗаявленииНаСертификат(Реквизиты);// АПК:222 Вызов устаревшей для совместимости. + ЗаявлениеНаСертификатПереопределяемый.ПриЗаполненииРеквизитовОрганизацииВЗаявленииНаСертификат(Реквизиты); + + Если ЕстьОрганизации Тогда + Организация = Реквизиты.Организация; + КонецЕсли; + + УстановитьРеквизитыОрганизации(Реквизиты); КонецПроцедуры &НаСервере Процедура ПриИзмененииВладельцаСертификатаНаСервере(Загрузка = Ложь) - Реквизиты = Новый Структура; + Реквизиты = РеквизитыВладельцаСертификата(); Реквизиты.Вставить("Директор"); Реквизиты.Вставить("ГлавныйБухгалтер"); - Реквизиты.Вставить("Сотрудник", Сотрудник); Реквизиты.Вставить("Пользователь"); - Реквизиты.Вставить("Фамилия"); - Реквизиты.Вставить("Имя"); - Реквизиты.Вставить("Отчество"); - Реквизиты.Вставить("ДатаРождения"); - Реквизиты.Вставить("Пол"); - Реквизиты.Вставить("МестоРождения"); - Реквизиты.Вставить("Гражданство"); - Реквизиты.Вставить("СтраховойНомерПФР"); - Реквизиты.Вставить("Должность"); - Реквизиты.Вставить("Подразделение"); - Реквизиты.Вставить("ДокументВид"); - Реквизиты.Вставить("ДокументНомер"); - Реквизиты.Вставить("ДокументКемВыдан"); - Реквизиты.Вставить("ДокументКодПодразделения"); - Реквизиты.Вставить("ДокументДатаВыдачи"); - Реквизиты.Вставить("ЭлектроннаяПочта"); - - Если ЕстьОрганизации Тогда - Реквизиты.Вставить("Организация", Организация); - Иначе - Реквизиты.Вставить("Организация", Неопределено); - КонецЕсли; - - Если СотрудникТип <> Неопределено Тогда - Реквизиты.Вставить("Сотрудник", Сотрудник); - Иначе - Реквизиты.Вставить("Сотрудник", Неопределено); - КонецЕсли; - + Реквизиты.Вставить("Организация", ?(ЕстьОрганизации, Организация, Неопределено)); + Реквизиты.Вставить("Сотрудник", ?(СотрудникТип <> Неопределено, Сотрудник, Неопределено)); Реквизиты.Вставить("ТипВладельца"); ЭлектроннаяПодписьПереопределяемый.ПриЗаполненииРеквизитовВладельцаВЗаявленииНаСертификат(Реквизиты);// АПК:222 Вызов устаревшей для совместимости. @@ -1779,50 +1292,115 @@ ЗаполнитьТипыЗначения(СотрудникТип, Элементы.Сотрудник, Реквизиты.ТипВладельца); - Если СотрудникТип = Неопределено Тогда - Элементы.Сотрудник.Видимость = Ложь; - Иначе - Элементы.Сотрудник.СписокВыбора.Очистить(); + Элементы.Сотрудник.СписокВыбора.Очистить(); + Если Не ЭтоИндивидуальныйПредприниматель Тогда - Если Не ЭтоИндивидуальныйПредприниматель Тогда - Если ЗначениеЗаполнено(Реквизиты.Директор) Тогда - Элементы.Сотрудник.СписокВыбора.Добавить(Реквизиты.Директор, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Директор: %1'"), Реквизиты.Директор)); - КонецЕсли; - - Если ЗначениеЗаполнено(Реквизиты.ГлавныйБухгалтер) Тогда - Элементы.Сотрудник.СписокВыбора.Добавить(Реквизиты.ГлавныйБухгалтер, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Главный бухгалтер: %1'"), Реквизиты.ГлавныйБухгалтер)); - КонецЕсли; + Если ЗначениеЗаполнено(Реквизиты.Директор) Тогда + Элементы.Сотрудник.СписокВыбора.Добавить(Реквизиты.Директор, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Директор: %1'"), Реквизиты.Директор)); КонецЕсли; - Если ЭтоИндивидуальныйПредприниматель Тогда - Элементы.Сотрудник.Заголовок = НСтр("ru = 'Индивидуальный предприниматель'"); - Иначе - Элементы.Сотрудник.Заголовок = НСтр("ru = 'Сотрудник'"); + Если ЗначениеЗаполнено(Реквизиты.ГлавныйБухгалтер) Тогда + Элементы.Сотрудник.СписокВыбора.Добавить(Реквизиты.ГлавныйБухгалтер, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Главный бухгалтер: %1'"), Реквизиты.ГлавныйБухгалтер)); КонецЕсли; - Сотрудник = ?(Загрузка, Сотрудник, Реквизиты.Сотрудник); КонецЕсли; + Сотрудник = ?(Загрузка, Сотрудник, Реквизиты.Сотрудник); Если ЭтоИндивидуальныйПредприниматель Тогда - Элементы.Должность.Видимость = Ложь; - Элементы.Подразделение.Видимость = Ложь; Элементы.Сотрудник.ТолькоПросмотр = Истина; Элементы.Сотрудник.КнопкаВыпадающегоСписка = Ложь; Иначе - Элементы.Должность.Видимость = Истина; - Элементы.Подразделение.Видимость = Истина; Элементы.Сотрудник.ТолькоПросмотр = Ложь; Элементы.Сотрудник.КнопкаВыпадающегоСписка = Истина; КонецЕсли; Если Загрузка Тогда + + Если Не ЗначениеЗаполнено(Сотрудник) + И Не ПустаяСтрока(ВладелецСертификатаСтрокой) Тогда + + Элементы.Сотрудник.Видимость = Ложь; + Элементы.ВладелецСертификатаСтрокой.Видимость = Истина; + КонецЕсли; + ПриИзмененииВидаДокументаНаСервере(); - Возврат; + + Иначе + + Модифицированность = ЗначениеЗаполнено(Объект.СостояниеЗаявления); + ДокументыПечатались = Ложь; + + УстановитьРеквизитыВладельца(Реквизиты); + Если ЗначениеЗаполнено(Объект.СостояниеЗаявления) Тогда + ДозаполнитьПоПредыдущемуЗаявлению(); + ПроверитьЗаполнениеОсновныхРеквизитов(); + КонецЕсли; + КонецЕсли; - Объект.Пользователь = Реквизиты.Пользователь; +КонецПроцедуры + +&НаСервере +Процедура ПриИзмененииВидаДокументаНаСервере() + + Если ДокументВид = "" Тогда + ДокументВид = "21"; + ДокументКодПодразделения = ""; + ИначеЕсли ДокументВид = 91 Тогда + ДокументВид = ""; + КонецЕсли; + + Если ДокументВид <> "21" Тогда + ДокументКодПодразделения = ""; + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура УстановитьРеквизитыОрганизации(Реквизиты, ОчищатьПодчиненныеРеквизиты = Истина) + + ОчиститьРеквизитыОрганизации(ОчищатьПодчиненныеРеквизиты); + + ВведеноВручную = Не ЗначениеЗаполнено(Организация) + И ЗначениеЗаполнено(Объект.СостояниеЗаявления); + + Элементы.Организация.Видимость = Не ВведеноВручную; + Элементы.НаименованиеСокращенное.Видимость = ВведеноВручную; + + ЭтоИндивидуальныйПредприниматель = Реквизиты.ЭтоИндивидуальныйПредприниматель; + + УстановитьРеквизит(Реквизиты, "НаименованиеСокращенное"); + УстановитьРеквизит(Реквизиты, "НаименованиеПолное"); + УстановитьРеквизит(Реквизиты, "ИНН", Истина); + УстановитьРеквизит(Реквизиты, "ОГРН", Истина); + УстановитьРеквизит(Реквизиты, "РасчетныйСчет", Истина); + УстановитьРеквизит(Реквизиты, "БИК", Истина); + УстановитьРеквизит(Реквизиты, "КорреспондентскийСчет", Истина); + УстановитьРеквизит(Реквизиты, "Телефон", , Ложь); + УстановитьРеквизит(Реквизиты, "ЮридическийАдрес", , Истина); + УстановитьРеквизит(Реквизиты, "ФактическийАдрес", , Истина); + + Если Не ЭтоИндивидуальныйПредприниматель Тогда + УстановитьРеквизит(Реквизиты, "КПП", Истина); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура УстановитьРеквизитыВладельца(Реквизиты, ВведеноВручную = Ложь) + + ОчиститьРеквизитыВладельца(); + + Сотрудник = ?(ВведеноВручную, Неопределено, Сотрудник); + Элементы.ВладелецСертификатаСтрокой.Видимость = ВведеноВручную; + Элементы.Сотрудник.Видимость = Не ВведеноВручную; + Элементы.ВладелецСертификатаСтрокой.КнопкаВыпадающегоСписка = Не ЭтоИндивидуальныйПредприниматель; + + Если ВведеноВручную Тогда + Элементы.ВладелецСертификатаСтрокой.СписокВыбора.ЗагрузитьЗначения(Элементы.Сотрудник.СписокВыбора.ВыгрузитьЗначения()); + КонецЕсли; УстановитьРеквизит(Реквизиты, "Фамилия"); УстановитьРеквизит(Реквизиты, "Имя"); @@ -1833,11 +1411,21 @@ УстановитьРеквизит(Реквизиты, "Гражданство"); УстановитьРеквизит(Реквизиты, "СтраховойНомерПФР", Истина); - Если Пол <> "Мужской" И Пол <> "Женский" Тогда + ЭлементыФИО = Новый Массив; + ЭлементыФИО.Добавить(Фамилия); + ЭлементыФИО.Добавить(Имя); + ЭлементыФИО.Добавить(Отчество); + ВладелецСертификатаСтрокой = СтрСоединить(Новый ФиксированныйМассив(ЭлементыФИО), " "); + + Если Пол <> "Мужской" + И Пол <> "Женский" Тогда + Пол = ""; КонецЕсли; - ЗаполнитьЗначенияСвойств(ЭтотОбъект, ГражданствоСвойства(Гражданство)); + ЗаполнитьЗначенияСвойств(ЭтотОбъект, + Обработки.ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата.ГражданствоСвойства(Гражданство)); + Если Не ЗначениеЗаполнено(ГражданствоОКСМКодАльфа3) Тогда Гражданство = Неопределено; ГражданствоПредставление = ""; @@ -1856,231 +1444,203 @@ УстановитьРеквизит(Реквизиты, "ДокументНомер", Истина); УстановитьРеквизит(Реквизиты, "ДокументКемВыдан"); УстановитьРеквизит(Реквизиты, "ДокументКодПодразделения", Истина); - УстановитьРеквизит(Реквизиты, "ДокументДатаВыдачи", , Истина); - - УстановитьРеквизит(Реквизиты, "ЭлектроннаяПочта", , , Ложь); + УстановитьРеквизит(Реквизиты, "ДокументДатаВыдачи"); + УстановитьРеквизит(Реквизиты, "ЭлектроннаяПочта", , Ложь); ПриИзмененииВидаДокументаНаСервере(); КонецПроцедуры -&НаСервереБезКонтекста -Функция ГражданствоСвойства(Гражданство) - - Значения = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Гражданство, - "Наименование, НаименованиеПолное, КодАльфа3"); - - Свойства = Новый Структура; - Свойства.Вставить("ГражданствоОКСМКодАльфа3", Строка(Значения.КодАльфа3)); - - Если ЗначениеЗаполнено(Значения.НаименованиеПолное) Тогда - Свойства.Вставить("ГражданствоПредставление", Строка(Значения.НаименованиеПолное)); - Иначе - Свойства.Вставить("ГражданствоПредставление", Строка(Значения.Наименование)); - КонецЕсли; - - Возврат Свойства; - -КонецФункции - &НаСервере -Процедура ПриИзмененииВидаДокументаНаСервере() +Процедура ОчиститьРеквизитыОрганизации(ОчищатьПодчиненные) - Если ДокументВид = "" Тогда - ДокументВид = "21"; + Реквизиты = РеквизитыОрганизации(); + Реквизиты.Вставить("ТелефонXML"); + Реквизиты.Вставить("ЮридическийАдресXML"); + Реквизиты.Вставить("ФактическийАдресXML"); + Если ОчищатьПодчиненные Тогда + Реквизиты.Вставить("Сотрудник"); КонецЕсли; - Если ДокументВид = "21" Тогда - Элементы.ДокументНомер.Заголовок = НСтр("ru = 'Серия и номер'"); - Элементы.ДокументНомер.Маска = "99 99 999999"; - Элементы.ДокументКодПодразделения.Видимость = Истина; - Иначе - Элементы.ДокументНомер.Заголовок = НСтр("ru = 'Номер'"); - Элементы.ДокументНомер.Маска = ""; - Элементы.ДокументКодПодразделения.Видимость = Ложь; - ДокументКодПодразделения = ""; - КонецЕсли; + Для Каждого РеквизитОрганизации Из Реквизиты Цикл + + Если РеквизитОрганизации.Ключ = "ЭтоИндивидуальныйПредприниматель" Тогда + Продолжить; + КонецЕсли; + + ЭтотОбъект[РеквизитОрганизации.Ключ] = Неопределено; + + КонецЦикла; - Если ДокументВид = 91 Тогда - ДокументВид = ""; + Если ОчищатьПодчиненные Тогда + ОчиститьРеквизитыВладельца(); + ОчиститьРеквизитыПодписанта(); КонецЕсли; КонецПроцедуры &НаСервере -Функция ВладелецЗаполнен() +Процедура ОчиститьРеквизитыВладельца() - Отказ = Ложь; + Реквизиты = РеквизитыВладельцаСертификата(); + Реквизиты.Вставить("ВладелецСертификатаСтрокой"); + Реквизиты.Вставить("ГражданствоПредставление"); + Реквизиты.Вставить("ГражданствоОКСМКодАльфа3"); + Реквизиты.Вставить("ЭлектроннаяПочтаXML"); - Если Элементы.Сотрудник.Видимость - И Не ПроверитьРеквизит(Отказ, "Сотрудник") Тогда - - Возврат Ложь; - КонецЕсли; - - ПроверитьРеквизит(Отказ, "Фамилия"); - ПроверитьРеквизит(Отказ, "Имя"); - ПроверитьРеквизит(Отказ, "ДатаРождения"); - ПроверитьРеквизит(Отказ, "Пол"); - ПроверитьРеквизит(Отказ, "МестоРождения"); - ПроверитьРеквизит(Отказ, "Гражданство"); - - Если ПроверитьРеквизит(Отказ, "СтраховойНомерПФР") Тогда - ТекстСообщения = ""; - РегламентированныеДанныеКлиентСервер.СтраховойНомерПФРСоответствуетТребованиям( - СтраховойНомерПФР, ТекстСообщения); - Если ЗначениеЗаполнено(ТекстСообщения) Тогда - ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, , "СтраховойНомерПФР", , Отказ); - КонецЕсли; - КонецЕсли; - - Если Не ЭтоИндивидуальныйПредприниматель Тогда - ПроверитьРеквизит(Отказ, "Должность"); - КонецЕсли; - - ПроверитьРеквизит(Отказ, "ДокументВид"); - - Если ДокументВид = "21" - И ПроверитьРеквизит(Отказ, "ДокументНомер") Тогда - - ТекстСообщения = ""; - НомерПаспортаРФСоответствуетТребованиям(ДокументНомер, ТекстСообщения); - Если ЗначениеЗаполнено(ТекстСообщения) Тогда - ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, , "ДокументНомер", , Отказ); - КонецЕсли; - КонецЕсли; - - ПроверитьРеквизит(Отказ, "ДокументКемВыдан"); - - Если ДокументВид = "21" - И ПроверитьРеквизит(Отказ, "ДокументКодПодразделения") Тогда - - ТекстСообщения = ""; - КодПодразделенияВыдачиПаспортаРФСоответствуетТребованиям(ДокументКодПодразделения, ТекстСообщения); - Если ЗначениеЗаполнено(ТекстСообщения) Тогда - ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, , "ДокументКодПодразделения", , Отказ); - КонецЕсли; - КонецЕсли; - - ПроверитьРеквизит(Отказ, "ДокументДатаВыдачи"); - - Если ЗначениеЗаполнено(ЭлектроннаяПочта) Тогда - ТекстСообщения = ""; - Попытка - ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(ЭлектроннаяПочта); - Исключение - ИнформацияОбОшибке = ИнформацияОбОшибке(); - ТекстСообщения = КраткоеПредставлениеОшибки(ИнформацияОбОшибке); - КонецПопытки; - Если ЗначениеЗаполнено(ТекстСообщения) Тогда - ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, , "ЭлектроннаяПочта", , Отказ); - КонецЕсли; - КонецЕсли; - - Возврат Не Отказ; - -КонецФункции - -&НаСервере -Функция НомерПаспортаРФСоответствуетТребованиям(Знач НомерПаспортаРФ, ТекстСообщения) - - ТекстСообщения = ""; - - Результат = Истина; - - СтрокаЦифр = СтрЗаменить(НомерПаспортаРФ, ",", ""); - СтрокаЦифр = СтрЗаменить(СтрокаЦифр, " ", ""); - - Если ПустаяСтрока(СтрокаЦифр) Тогда - ТекстСообщения = ТекстСообщения + НСтр("ru = 'Номер паспорта не заполнен'"); - Возврат Ложь; - КонецЕсли; - - Если СтрДлина(СтрокаЦифр) < 10 Тогда - ТекстСообщения = ТекстСообщения + НСтр("ru = 'Номер паспорта задан неполностью'"); - Возврат Ложь; - КонецЕсли; - - Если НЕ СтроковыеФункцииКлиентСервер.ТолькоЦифрыВСтроке(СтрокаЦифр) Тогда - Результат = Ложь; - ТекстСообщения = ТекстСообщения + НСтр("ru = 'Номер паспорта должен состоять только из цифр.'"); - КонецЕсли; - - Возврат Результат; - -КонецФункции - -&НаСервере -Функция КодПодразделенияВыдачиПаспортаРФСоответствуетТребованиям(КодПодразделения, ТекстСообщения) - - СтрокаЦифр = СокрЛП(КодПодразделения); - - Если СтрДлина(СтрокаЦифр) < 6 Тогда - ТекстСообщения = НСтр("ru = 'Код подразделения задан неполностью'"); - Возврат Ложь; - КонецЕсли; - - Если Не СтроковыеФункцииКлиентСервер.ТолькоЦифрыВСтроке(СтрокаЦифр) Тогда - ТекстСообщения = НСтр("ru = 'Код подразделения должен состоять только из цифр.'"); - Возврат Ложь; - КонецЕсли; - - Если СтрокаЦифр = "000000" Тогда - ТекстСообщения = НСтр("ru = 'Код подразделения не может быть нулевым.'"); - Возврат Истина; - КонецЕсли; - - Возврат Истина; - -КонецФункции - -&НаКлиенте -Процедура ПриИзмененииРуководителяОбработчикОжидания() - - ПриИзмененииРуководителяНаСервере(); + Для Каждого РеквизитВладельца Из Реквизиты Цикл + ЭтотОбъект[РеквизитВладельца.Ключ] = Неопределено; + КонецЦикла; КонецПроцедуры &НаСервере -Процедура ПриИзмененииРуководителяНаСервере(Загрузка = Ложь) +Функция ПроверитьЗаполнениеОсновныхРеквизитов() + + ПроверяемыеРеквизиты = Новый Массив; + РеквизитыОрганизации = РеквизитыОрганизации(Истина); + РеквизитыОрганизации.Телефон = ""; + РеквизитыОрганизации.ЮридическийАдрес = ""; + РеквизитыОрганизации.ФактическийАдрес = ""; + Если ЭтоИндивидуальныйПредприниматель Тогда + РеквизитыОрганизации.КПП = ""; + КонецЕсли; + + ДобавитьРеквизитыДляПроверки(ПроверяемыеРеквизиты, РеквизитыОрганизации, + "Организация", НСтр("ru = 'У организации не заполнено поле ""%1""'")); + + ДобавитьРеквизитыДляПроверки(ПроверяемыеРеквизиты, Новый Структура("ЮридическийАдрес", НСтр("ru = 'Юридический адрес'")), + "Организация", НСтр("ru = 'Юридический адрес: %1'"), Ложь); + ДобавитьРеквизитыДляПроверки(ПроверяемыеРеквизиты, Новый Структура("ФактическийАдрес", НСтр("ru = 'Фактический адрес'")), + "Организация", НСтр("ru = 'Фактический адрес: %1'"), Ложь); + ДобавитьРеквизитыДляПроверки(ПроверяемыеРеквизиты, Новый Структура("Телефон", НСтр("ru = 'Телефон'")), + "Организация", НСтр("ru = 'Телефон: %1'"), Ложь); + + РеквизитыВладельца = РеквизитыВладельцаСертификата(Истина); + Если ЭтоИндивидуальныйПредприниматель Тогда + РеквизитыВладельца.Должность = ""; + КонецЕсли; + + Если ДокументВид <> "21" Тогда + РеквизитыВладельца.ДокументНомер = ""; + РеквизитыВладельца.ДокументКодПодразделения = ""; + КонецЕсли; + + ДобавитьРеквизитыДляПроверки(ПроверяемыеРеквизиты, РеквизитыВладельца, + "Сотрудник", НСтр("ru = 'У владельца сертификата не заполнено поле ""%1""'")); + + Возврат Не Обработки.ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата.ПроверитьЗаполнениеРеквизитов( + ПроверяемыеРеквизиты, ЭтоИндивидуальныйПредприниматель); + +КонецФункции + +&НаСервере +Процедура ДобавитьРеквизитыДляПроверки(ПроверяемыеРеквизиты, + РеквизитыДляПроверки, + ПолеСообщения, + ШаблонСообщения, + ПодставлятьПолеВШаблон = Истина) + + Для Каждого Реквизит Из РеквизитыДляПроверки Цикл + + ИмяРеквизита = Реквизит.Ключ; + Если ПустаяСтрока(Реквизит.Значение) Тогда + Продолжить; + КонецЕсли; + + ПараметрыРеквизитаДляПроверки = Новый Структура; + ПараметрыРеквизитаДляПроверки.Вставить("Имя", ИмяРеквизита); + Если ИмяРеквизита = "Телефон" + Или ИмяРеквизита = "ФактическийАдрес" + Или ИмяРеквизита = "ЮридическийАдрес" Тогда + ПараметрыРеквизитаДляПроверки.Вставить("Значение", ЭтотОбъект[ИмяРеквизита + "XML"]); + Иначе + ПараметрыРеквизитаДляПроверки.Вставить("Значение", ЭтотОбъект[ИмяРеквизита]); + КонецЕсли; + ПараметрыРеквизитаДляПроверки.Вставить("ПолеСообщения", ПолеСообщения); + ПараметрыРеквизитаДляПроверки.Вставить("ТекстНезаполненного", ?(Не ПодставлятьПолеВШаблон, ШаблонСообщения, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, Реквизит.Значение))); + + ПроверяемыеРеквизиты.Добавить(ПараметрыРеквизитаДляПроверки); + + КонецЦикла; + +КонецПроцедуры + +&НаКлиентеНаСервереБезКонтекста +Функция РеквизитыОрганизации(ДляПроверки = Ложь) Реквизиты = Новый Структура; - Реквизиты.Вставить("Представление"); - Реквизиты.Вставить("Должность"); - Реквизиты.Вставить("Основание"); + Реквизиты.Вставить("ЭтоИндивидуальныйПредприниматель"); + Реквизиты.Вставить("НаименованиеСокращенное", + ?(ДляПроверки, НСтр("ru = 'Наименование (сокращенное)'"), "")); + Реквизиты.Вставить("НаименованиеПолное", + ?(ДляПроверки, НСтр("ru = 'Наименование (полное)'"), "")); + Реквизиты.Вставить("ИНН", + ?(ДляПроверки, НСтр("ru = 'ИНН'"), "")); + Реквизиты.Вставить("КПП", + ?(ДляПроверки, НСтр("ru = 'КПП'"), "")); + Реквизиты.Вставить("ОГРН", + ?(ДляПроверки, НСтр("ru = 'ОГРН'"), "")); + Реквизиты.Вставить("РасчетныйСчет", + ?(ДляПроверки, НСтр("ru = 'Расчетный счет'"), "")); + Реквизиты.Вставить("БИК", + ?(ДляПроверки, НСтр("ru = 'БИК'"), "")); + Реквизиты.Вставить("КорреспондентскийСчет", + ?(ДляПроверки, НСтр("ru = 'Корреспондентский счет'"), "")); + Реквизиты.Вставить("Телефон", + ?(ДляПроверки, НСтр("ru = 'Телефон'"), "")); + Реквизиты.Вставить("ЮридическийАдрес", + ?(ДляПроверки, НСтр("ru = 'Юридический адрес'"), "")); + Реквизиты.Вставить("ФактическийАдрес", + ?(ДляПроверки, НСтр("ru = 'Фактический адрес'"), "")); - Если ЕстьОрганизации Тогда - Реквизиты.Вставить("Организация", Организация); - Иначе - Реквизиты.Вставить("Организация", Неопределено); - КонецЕсли; + Возврат Реквизиты; - Если ДокументыРуководительТип <> Неопределено Тогда - Реквизиты.Вставить("Руководитель", ДокументыРуководительСсылка); - Иначе - Реквизиты.Вставить("Руководитель", Неопределено); - КонецЕсли; - Реквизиты.Вставить("ТипРуководителя"); +КонецФункции + +&НаКлиентеНаСервереБезКонтекста +Функция РеквизитыВладельцаСертификата(ДляПроверки = Ложь) - ЭлектроннаяПодписьПереопределяемый.ПриЗаполненииРеквизитовРуководителяВЗаявленииНаСертификат(Реквизиты);// АПК:222 Вызов устаревшей для совместимости. - ЗаявлениеНаСертификатПереопределяемый.ПриЗаполненииРеквизитовРуководителяВЗаявленииНаСертификат(Реквизиты); + Реквизиты = Новый Структура; + Реквизиты.Вставить("Фамилия", + ?(ДляПроверки, НСтр("ru = 'Фамилия'"), "")); + Реквизиты.Вставить("Имя", + ?(ДляПроверки, НСтр("ru = 'Имя'"), "")); + Реквизиты.Вставить("Отчество"); + Реквизиты.Вставить("ДатаРождения", + ?(ДляПроверки, НСтр("ru = 'Дата рождения'"), "")); + Реквизиты.Вставить("Пол", + ?(ДляПроверки, НСтр("ru = 'Пол'"), "")); + Реквизиты.Вставить("МестоРождения", + ?(ДляПроверки, НСтр("ru = 'Место рождения'"), "")); + Реквизиты.Вставить("Гражданство", + ?(ДляПроверки, НСтр("ru = 'Гражданство'"), "")); + Реквизиты.Вставить("СтраховойНомерПФР", + ?(ДляПроверки, НСтр("ru = 'СНИЛС'"), "")); + Реквизиты.Вставить("Должность", + ?(ДляПроверки, НСтр("ru = 'Должность'"), "")); + Реквизиты.Вставить("Подразделение"); + Реквизиты.Вставить("ДокументВид", + ?(ДляПроверки, НСтр("ru = 'Вид документа, удостоверяющего личность'"), "")); + Реквизиты.Вставить("ДокументНомер", + ?(ДляПроверки, НСтр("ru = 'Номер документа, удостоверяющего личность'"), "")); + Реквизиты.Вставить("ДокументКемВыдан", + ?(ДляПроверки, НСтр("ru = 'Кем выдан документ, удостоверяющий личность'"), "")); + Реквизиты.Вставить("ДокументКодПодразделения", + ?(ДляПроверки, НСтр("ru = 'Код подразделения, выдавшего документ, удостоверяющий личность'"), "")); + Реквизиты.Вставить("ДокументДатаВыдачи", + ?(ДляПроверки, НСтр("ru = 'Дата выдачи документа, удостоверяющего личность'"), "")); + Реквизиты.Вставить("ЭлектроннаяПочта", + ?(ДляПроверки, НСтр("ru = 'Электронная почта'"), "")); - ЗаполнитьТипыЗначения(ДокументыРуководительТип, Элементы.ДокументыРуководитель, Реквизиты.ТипРуководителя); - Элементы.ДокументыРуководитель.КнопкаВыбора = ДокументыРуководительТип <> Неопределено; + Возврат Реквизиты; - Если Загрузка Тогда - Элементы.ДокументыРуководитель.КнопкаОткрытия = ЗначениеЗаполнено(ДокументыРуководительСсылка); - Возврат; - КонецЕсли; - - ДокументыРуководительСсылка = ?(ДокументыРуководительТип <> Неопределено, Реквизиты.Руководитель, Неопределено); - Элементы.ДокументыРуководитель.КнопкаОткрытия = ЗначениеЗаполнено(ДокументыРуководительСсылка); - ДокументыРуководитель = СокрЛП(?(Реквизиты.Представление <> Неопределено, Реквизиты.Представление, Реквизиты.Руководитель)); - - ДокументыРуководительДолжность = Реквизиты.Должность; - ДокументыРуководительОснование = Реквизиты.Основание; - -КонецПроцедуры +КонецФункции + +#КонецОбласти + +#Область ИзменениеДополнительныхРеквизитов &НаКлиенте Процедура ОбработчикОжиданияРеквизитыРуководителяПриИзменении() @@ -2089,87 +1649,6 @@ КонецПроцедуры -&НаСервере -Функция РуководительЗаполнен() - - Если ЭтоИндивидуальныйПредприниматель Тогда - Возврат Истина; - КонецЕсли; - - Отказ = Ложь; - - ПроверитьРеквизит(Отказ, "ДокументыРуководитель"); - ПроверитьРеквизит(Отказ, "ДокументыРуководительДолжность"); - ПроверитьРеквизит(Отказ, "ДокументыРуководительОснование"); - - Возврат Не Отказ; - -КонецФункции - - -&НаКлиенте -Процедура ПриИзмененииПартнераОбработчикОжидания() - - ПриИзмененииПартнераНаСервере(); - -КонецПроцедуры - -&НаСервере -Процедура ПриИзмененииПартнераНаСервере(Загрузка = Ложь) - - Реквизиты = Новый Структура; - Реквизиты.Вставить("Представление"); - Реквизиты.Вставить("ЭтоИндивидуальныйПредприниматель", ДокументыПартнерЭтоИП); - Реквизиты.Вставить("ИНН"); - Реквизиты.Вставить("КПП"); - - Если ЕстьОрганизации Тогда - Реквизиты.Вставить("Организация", Организация); - Иначе - Реквизиты.Вставить("Организация", Неопределено); - КонецЕсли; - - Если ДокументыПартнерТип <> Неопределено Тогда - Реквизиты.Вставить("Партнер", ДокументыПартнерСсылка); - Иначе - Реквизиты.Вставить("Партнер", Неопределено); - КонецЕсли; - Реквизиты.Вставить("ТипПартнера"); - - ЭлектроннаяПодписьПереопределяемый.ПриЗаполненииРеквизитовПартнераВЗаявленииНаСертификат(Реквизиты);// АПК:222 Вызов устаревшей для совместимости. - ЗаявлениеНаСертификатПереопределяемый.ПриЗаполненииРеквизитовПартнераВЗаявленииНаСертификат(Реквизиты); - - ЗаполнитьТипыЗначения(ДокументыПартнерТип, Элементы.ДокументыПартнер, Реквизиты.ТипПартнера); - Элементы.ДокументыПартнер.КнопкаВыбора = ДокументыПартнерТип <> Неопределено; - - Если Не Загрузка Тогда - ДокументыПартнерСсылка = ?(ДокументыПартнерТип <> Неопределено, Реквизиты.Партнер, Неопределено); - - ДокументыПартнер = СокрЛП(?(Реквизиты.Представление <> Неопределено, Реквизиты.Представление, Реквизиты.Партнер)); - - ДокументыПартнерЭтоИП = Реквизиты.ЭтоИндивидуальныйПредприниматель; - - РеквизитыФормы = Новый Структура; - РеквизитыФормы.Вставить("ДокументыПартнерИНН", Реквизиты.ИНН); - РеквизитыФормы.Вставить("ДокументыПартнерКПП", Реквизиты.КПП); - - УстановитьРеквизит(РеквизитыФормы, "ДокументыПартнерИНН", Истина); - - Если Не ДокументыПартнерЭтоИП Тогда - УстановитьРеквизит(РеквизитыФормы, "ДокументыПартнерКПП", Истина); - КонецЕсли; - КонецЕсли; - - Элементы.ДокументыПартнер.КнопкаОткрытия = ЗначениеЗаполнено(ДокументыПартнерСсылка); - - Если ДокументыПартнерЭтоИП Тогда - Элементы.ДокументыПартнерКПП.Видимость = Ложь; - Иначе - Элементы.ДокументыПартнерКПП.Видимость = Истина; - КонецЕсли; - -КонецПроцедуры - &НаКлиенте Процедура ОбработчикОжиданияРеквизитыПартнераПриИзменении() @@ -2177,265 +1656,450 @@ КонецПроцедуры -&НаКлиенте -Процедура ОчиститьРеквизитыПартнера() - - ОчиститьРеквизит("ДокументыПартнерИНН"); - ОчиститьРеквизит("ДокументыПартнерКПП"); - -КонецПроцедуры - -&НаКлиенте -Процедура ОчиститьРеквизитыПартнераВидаЮридическоеЛицо() - - ОчиститьРеквизит("ДокументыПартнерКПП"); - -КонецПроцедуры - &НаСервере -Функция ПартнерЗаполнен() +Процедура ПриИзмененииРуководителяНаСервере(Загрузка = Ложь) - Отказ = Ложь; - - Если ЗначениеЗаполнено(ДокументыПартнерИНН) Тогда - ТекстСообщения = ""; - РегламентированныеДанныеКлиентСервер.ИННСоответствуетТребованиям(ДокументыПартнерИНН, - Не ДокументыПартнерЭтоИП, ТекстСообщения); - Если ЗначениеЗаполнено(ТекстСообщения) Тогда - ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, , "ДокументыПартнерИНН", , Отказ); - КонецЕсли; + Если Не Загрузка Тогда + Модифицированность = ЗначениеЗаполнено(Объект.СостояниеЗаявления); + ДокументыПечатались = Ложь; КонецЕсли; - Если Не ДокументыПартнерЭтоИП - И ЗначениеЗаполнено(ДокументыПартнерКПП) Тогда + ЭтоЗаявленияОтЮрЛица = Не ЭтоИндивидуальныйПредприниматель; + Элементы.ГруппаПодписантЗаявления.Доступность = ЭтоЗаявленияОтЮрЛица; + Элементы.ДокументыРуководитель.АвтоОтметкаНезаполненного = ЭтоЗаявленияОтЮрЛица; + Элементы.ДокументыРуководительОснование.АвтоОтметкаНезаполненного = ЭтоЗаявленияОтЮрЛица; + Элементы.ДокументыРуководительДолжность.АвтоОтметкаНезаполненного = ЭтоЗаявленияОтЮрЛица; + + Если ЭтоЗаявленияОтЮрЛица Тогда - ТекстСообщения = ""; - РегламентированныеДанныеКлиентСервер.КППСоответствуетТребованиям(ДокументыПартнерКПП, ТекстСообщения); - Если ЗначениеЗаполнено(ТекстСообщения) Тогда - ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, , "ДокументыПартнерКПП", , Отказ); - КонецЕсли; - КонецЕсли; - - Возврат Не Отказ; - -КонецФункции - - -&НаКлиенте -Процедура ЗначениеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) - - СтандартнаяОбработка = Ложь; - - Если ТипЗнч(ЭтотОбъект[Элемент.Имя]) = Тип("Строка") Тогда - ИмяРеквизита = Элемент.Имя; - ИмяРеквизитаЗначения = Элемент.Имя + "Ссылка"; - Иначе - ИмяРеквизита = Элемент.Имя; - ИмяРеквизитаЗначения = Элемент.Имя; - КонецЕсли; - - Контекст = Новый Структура; - Контекст.Вставить("Элемент", Элемент); - Контекст.Вставить("ИмяРеквизита", ИмяРеквизита); - Контекст.Вставить("ИмяРеквизитаЗначения", ИмяРеквизитаЗначения); - - Если ТипЗнч(ЭтотОбъект[ИмяРеквизита + "Тип"]) <> Тип("СписокЗначений") Тогда - Возврат; - ИначеЕсли ЭтотОбъект[ИмяРеквизита + "Тип"].Количество() = 1 Тогда - ЗначениеНачалоВыбораПослеВыбораТипа(ЭтотОбъект[ИмяРеквизита + "Тип"][0], Контекст); - Иначе - СписокВыбораТипов = Новый СписокЗначений; - СписокВыбораТипов.ЗагрузитьЗначения(ЭтотОбъект[ИмяРеквизита + "Тип"].ВыгрузитьЗначения()); - СписокВыбораТипов.ПоказатьВыборЭлемента( - Новый ОписаниеОповещения("ЗначениеНачалоВыбораПослеВыбораТипа", ЭтотОбъект, Контекст), - НСтр("ru = 'Выбор типа данных'"), - ЭтотОбъект[ИмяРеквизита + "Тип"].НайтиПоЗначению(ТипЗнч(ЭтотОбъект[ИмяРеквизитаЗначения]))); - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ЗначениеНачалоВыбораПослеВыбораТипа(ЭлементСписка, Контекст) Экспорт - - Если ЭлементСписка = Неопределено Тогда - Возврат; - КонецЕсли; - - Элемент = Контекст.Элемент; - ИмяРеквизита = Контекст.ИмяРеквизита; - ИмяРеквизитаЗначения = Контекст.ИмяРеквизитаЗначения; - - МассивТипов = Новый Массив; - МассивТипов.Добавить(ЭлементСписка.Значение); - ОписаниеТипов = Новый ОписаниеТипов(МассивТипов); - - НачальноеЗначение = ОписаниеТипов.ПривестиЗначение(ЭтотОбъект[ИмяРеквизитаЗначения]); - - Если ИмяРеквизита = ИмяРеквизитаЗначения Тогда - ЭтотОбъект[ИмяРеквизитаЗначения] = НачальноеЗначение; - КонецЕсли; - - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("РежимВыбора", Истина); - ПараметрыФормы.Вставить("ТекущаяСтрока", НачальноеЗначение); - ПараметрыФормы.Вставить("ЗакрыватьПриВыборе", Истина); - ПараметрыФормы.Вставить("МножественныйВыбор", Ложь); - - ИмяФормыВыбора = ЭтотОбъект[Элемент.Имя + "Тип"].НайтиПоЗначению(ТипЗнч(НачальноеЗначение)).Представление - + ".ФормаВыбора"; - - ОткрытьФорму(ИмяФормыВыбора, ПараметрыФормы, Элемент); - -КонецПроцедуры - -&НаКлиенте -Процедура ЗначениеОткрытие(Элемент, СтандартнаяОбработка) - - СтандартнаяОбработка = Ложь; - Значение = ЭтотОбъект[Элемент.Имя + "Ссылка"]; - - Если ЗначениеЗаполнено(Значение) Тогда - ПоказатьЗначение(, Значение); - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ЗначениеОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) - - СтандартнаяОбработка = Ложь; - ЭтотОбъект[Элемент.Имя + "Ссылка"] = ВыбранноеЗначение; - -КонецПроцедуры - -&НаСервере -Процедура ЗаполнитьТипыЗначения(РеквизитТип, Элемент, ОписаниеТипов); - - Если ТипЗнч(ОписаниеТипов) <> Тип("ОписаниеТипов") Тогда - РеквизитТип = Неопределено; - Иначе - СоставТипов = Новый СписокЗначений; - Для каждого Тип Из ОписаниеТипов.Типы() Цикл - Если ОбщегоНазначения.ЭтоСсылка(Тип) Тогда - СоставТипов.Добавить(Тип, Строка(Тип)); - КонецЕсли; - КонецЦикла; - СоставТипов.СортироватьПоПредставлению(); - Для каждого ЭлементСписка Из СоставТипов Цикл - ЭлементСписка.Представление = Метаданные.НайтиПоТипу(ЭлементСписка.Значение).ПолноеИмя(); - КонецЦикла; + Реквизиты = Новый Структура; + Реквизиты.Вставить("Должность"); + Реквизиты.Вставить("Основание"); + Реквизиты.Вставить("Организация", ?(ЕстьОрганизации, Организация, Неопределено)); + Реквизиты.Вставить("Представление"); + Реквизиты.Вставить("ТипРуководителя"); + Реквизиты.Вставить("Руководитель", + ?(ДокументыРуководительТип <> Неопределено, ДокументыРуководительСсылка, Неопределено)); - Если СоставТипов.Количество() = 0 Тогда - РеквизитТип = Неопределено; - Иначе - РеквизитТип = СоставТипов; - Если Элемент.ОтображениеКнопкиВыбора = ОтображениеКнопкиВыбора.ОтображатьВВыпадающемСписке Тогда - Элемент.ВыбиратьТип = Ложь; - Иначе - Элемент.ВыбиратьТип = РеквизитТип.Количество() > 1; - КонецЕсли; + ЭлектроннаяПодписьПереопределяемый.ПриЗаполненииРеквизитовРуководителяВЗаявленииНаСертификат(Реквизиты);// АПК:222 Вызов устаревшей для совместимости. + ЗаявлениеНаСертификатПереопределяемый.ПриЗаполненииРеквизитовРуководителяВЗаявленииНаСертификат(Реквизиты); + + ЗаполнитьТипыЗначения(ДокументыРуководительТип, Элементы.ДокументыРуководитель, Реквизиты.ТипРуководителя); + Элементы.ДокументыРуководитель.КнопкаВыбора = ДокументыРуководительТип <> Неопределено; + + Если Загрузка Тогда + Элементы.ДокументыРуководитель.КнопкаОткрытия = ЗначениеЗаполнено(ДокументыРуководительСсылка); + Возврат; КонецЕсли; + + ОчиститьРеквизитыПодписанта(); + + ДокументыРуководительСсылка = ?(ДокументыРуководительТип <> Неопределено, Реквизиты.Руководитель, Неопределено); + ДокументыРуководитель = СокрЛП(?(Реквизиты.Представление <> Неопределено, Реквизиты.Представление, Реквизиты.Руководитель)); + Элементы.ДокументыРуководитель.КнопкаОткрытия = ЗначениеЗаполнено(ДокументыРуководительСсылка); + + ДокументыРуководительДолжность = Реквизиты.Должность; + ДокументыРуководительОснование = Реквизиты.Основание; + + Иначе + ОчиститьРеквизитыПодписанта(); КонецЕсли; КонецПроцедуры -&НаКлиенте -Процедура ОчиститьРеквизит(ИмяРеквизита) - - ЭтотОбъект[ИмяРеквизита] = Неопределено; - -КонецПроцедуры - &НаСервере -Процедура УстановитьРеквизит(Реквизиты, ИмяРеквизита, ТолькоЦифры = Ложь, КнопкаВыбора = Ложь, ЭтоАдрес = Неопределено) +Процедура ПриИзмененииПартнераНаСервере(Загрузка = Ложь) - Если Реквизиты[ИмяРеквизита] = Неопределено Тогда - Возврат; // Заполнение реквизита не внедрено. - КонецЕсли; + Реквизиты = Новый Структура(); + Реквизиты.Вставить("ИНН"); + Реквизиты.Вставить("КПП"); + Реквизиты.Вставить("Партнер", ?(ДокументыПартнерТип <> Неопределено, ДокументыПартнерСсылка, Неопределено)); + Реквизиты.Вставить("ТипПартнера"); + Реквизиты.Вставить("Организация", ?(ЕстьОрганизации, Организация, Неопределено)); + Реквизиты.Вставить("Представление"); + Реквизиты.Вставить("ЭтоИндивидуальныйПредприниматель", ДокументыПартнерЭтоИП); - Если Не ЗначениеЗаполнено(Реквизиты[ИмяРеквизита]) Тогда - ЭтотОбъект[ИмяРеквизита] = Неопределено; - Если ЭтоАдрес <> Неопределено Тогда - ЭтотОбъект[ИмяРеквизита + "XML"] = ""; - Если ЭтоАдрес = Истина Тогда - ПроверитьАдрес(ИмяРеквизита); - КонецЕсли; - КонецЕсли; - Иначе - Если ЭтоАдрес <> Неопределено Тогда - ЭтотОбъект[ИмяРеквизита + "XML"] = Реквизиты[ИмяРеквизита]; - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда - МодульУправлениеКонтактнойИнформацией = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформацией"); - - ЭтотОбъект[ИмяРеквизита] = МодульУправлениеКонтактнойИнформацией.ПредставлениеКонтактнойИнформации( - Реквизиты[ИмяРеквизита]); - - Если ЭтоАдрес = Истина Тогда - ПроверитьАдрес(ИмяРеквизита); - КонецЕсли; - КонецЕсли; - - ИначеЕсли ТолькоЦифры Тогда - ЭтотОбъект[ИмяРеквизита] = ТолькоЦифры(Реквизиты[ИмяРеквизита]); - - ИначеЕсли ТипЗнч(Реквизиты[ИмяРеквизита]) = Тип("Строка") Тогда - ЭтотОбъект[ИмяРеквизита] = СокрЛП(Реквизиты[ИмяРеквизита]); + ЭлектроннаяПодписьПереопределяемый.ПриЗаполненииРеквизитовПартнераВЗаявленииНаСертификат(Реквизиты);// АПК:222 Вызов устаревшей для совместимости. + ЗаявлениеНаСертификатПереопределяемый.ПриЗаполненииРеквизитовПартнераВЗаявленииНаСертификат(Реквизиты); + + ЗаполнитьТипыЗначения(ДокументыПартнерТип, Элементы.ДокументыПартнер, Реквизиты.ТипПартнера); + Элементы.ДокументыПартнер.КнопкаВыбора = ДокументыПартнерТип <> Неопределено; + + Если Не Загрузка Тогда + + Модифицированность = ЗначениеЗаполнено(Объект.СостояниеЗаявления); + ДокументыПечатались = Ложь; + + ОчиститьРеквизитыПартнера(); + + ДокументыПартнер = СокрЛП(?(Реквизиты.Представление <> Неопределено, Реквизиты.Представление, Реквизиты.Партнер)); + ДокументыПартнерСсылка = ?(ДокументыПартнерТип <> Неопределено, Реквизиты.Партнер, Неопределено); + + ДокументыПартнерЭтоИП = Реквизиты.ЭтоИндивидуальныйПредприниматель; + РеквизитыФормы = РеквизитыОбслуживающейОрганизации(); + РеквизитыФормы.ДокументыПартнерИНН = Реквизиты.ИНН; + РеквизитыФормы.ДокументыПартнерКПП = Реквизиты.КПП; + + УстановитьРеквизит(РеквизитыФормы, "ДокументыПартнерИНН", Истина); + + Если ДокументыПартнерЭтоИП Тогда + ДокументыПартнерКПП = Неопределено; Иначе - ЭтотОбъект[ИмяРеквизита] = Реквизиты[ИмяРеквизита]; + УстановитьРеквизит(РеквизитыФормы, "ДокументыПартнерКПП", Истина); КонецЕсли; + КонецЕсли; + Элементы.ДокументыПартнер.КнопкаОткрытия = ЗначениеЗаполнено(ДокументыПартнерСсылка); + Элементы.ДокументыПартнерКПП.Доступность = Не ДокументыПартнерЭтоИП; + КонецПроцедуры -&НаКлиентеНаСервереБезКонтекста -Функция ТолькоЦифры(Строка) +&НаСервере +Процедура ДозаполнитьПоПредыдущемуЗаявлению() - ДлинаСтроки = СтрДлина(Строка); + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | СертификатыКлючейЭлектроннойПодписиИШифрования.СодержаниеЗаявления КАК СодержаниеЗаявления + |ИЗ + | Справочник.СертификатыКлючейЭлектроннойПодписиИШифрования КАК СертификатыКлючейЭлектроннойПодписиИШифрования + |ГДЕ + | СертификатыКлючейЭлектроннойПодписиИШифрования.Фамилия = &Фамилия + | И СертификатыКлючейЭлектроннойПодписиИШифрования.Имя = &Имя + | И СертификатыКлючейЭлектроннойПодписиИШифрования.Отчество = &Отчество + | И СертификатыКлючейЭлектроннойПодписиИШифрования.Организация = &Организация + | И СертификатыКлючейЭлектроннойПодписиИШифрования.Ссылка <> &ЭтаСсылка + | + |УПОРЯДОЧИТЬ ПО + | СертификатыКлючейЭлектроннойПодписиИШифрования.ДействителенДо УБЫВ"; + Запрос.УстановитьПараметр("ЭтаСсылка", Объект.Ссылка); + Запрос.УстановитьПараметр("Имя", Имя); + Запрос.УстановитьПараметр("Фамилия", Фамилия); + Запрос.УстановитьПараметр("Отчество", Отчество); + Запрос.УстановитьПараметр("Организация", Организация); + СведенияОЗаявлении = Запрос.Выполнить().Выбрать(); - ОбработаннаяСтрока = ""; - - Для НомерСимвола = 1 По ДлинаСтроки Цикл - Символ = Сред(Строка, НомерСимвола, 1); - Если Символ >= "0" И Символ <= "9" Тогда - ОбработаннаяСтрока = ОбработаннаяСтрока + Символ; + РеквизитыЗаявления = Неопределено; + Пока СведенияОЗаявлении.Следующий() Цикл + + РеквизитыЗаявления = СведенияОЗаявлении.СодержаниеЗаявления.Получить(); + Если ТипЗнч(РеквизитыЗаявления) <> Тип("Структура") Тогда + Продолжить; КонецЕсли; + + Прервать; + КонецЦикла; - Возврат ОбработаннаяСтрока; + Если РеквизитыЗаявления <> Неопределено Тогда + + ДозаполнитьРеквизитыИзСведений(РеквизитыЗаявления, РеквизитыОрганизации()); + ДозаполнитьРеквизитыИзСведений(РеквизитыЗаявления, РеквизитыВладельцаСертификата()); + + РеквизитыПодписанта = РеквизитыПодписанта(); + РеквизитыПодписанта.Вставить("ДокументыРуководительСсылка"); + ДозаполнитьРеквизитыИзСведений(РеквизитыЗаявления, РеквизитыПодписанта); + Элементы.ДокументыРуководитель.КнопкаОткрытия = ЗначениеЗаполнено(ДокументыРуководительСсылка); + + РеквизитыПартнера = РеквизитыОбслуживающейОрганизации(); + РеквизитыПартнера.Вставить("ДокументыПартнерСсылка"); + ДозаполнитьРеквизитыИзСведений(РеквизитыЗаявления, РеквизитыПартнера); + Элементы.ДокументыПартнер.КнопкаОткрытия = ЗначениеЗаполнено(ДокументыПартнерСсылка); + Элементы.ДокументыПартнерКПП.Доступность = Не ДокументыПартнерЭтоИП; + + КонецЕсли; -КонецФункции +КонецПроцедуры &НаСервере -Функция ПроверитьРеквизит(Отказ, ИмяРеквизита) +Процедура ДозаполнитьРеквизитыИзСведений(Сведения, Реквизиты) - Элемент = Элементы[ИмяРеквизита]; + Для Каждого Реквизит Из Реквизиты Цикл + + Если Не ЗначениеЗаполнено(ЭтотОбъект[Реквизит.Ключ]) Тогда + ЭтотОбъект[Реквизит.Ключ] = Сведения[Реквизит.Ключ]; + КонецЕсли; + + КонецЦикла; - Если ЗначениеЗаполнено(Элемент.Заголовок) Тогда - ЗаголовокПоля = Элемент.Заголовок; - Иначе - ЗаголовокПоля = ЗаголовкиРеквизитов.НайтиПоЗначению(ИмяРеквизита); - КонецЕсли; +КонецПроцедуры + +&НаСервере +Процедура ОчиститьРеквизитыПодписанта() - Если Не ЗначениеЗаполнено(ЭтотОбъект[ИмяРеквизита]) Тогда - ОбщегоНазначения.СообщитьПользователю(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Поле ""%1"" не заполнено'"), ЗаголовокПоля), , ИмяРеквизита, , Отказ); + РеквизитыПодписанта = РеквизитыПодписанта(); + РеквизитыПодписанта.Вставить("ДокументыРуководительСсылка"); + + Для Каждого Реквизит Из РеквизитыПодписанта Цикл + ЭтотОбъект[Реквизит.Ключ] = Неопределено; + КонецЦикла; + +КонецПроцедуры + +&НаСервере +Процедура ОчиститьРеквизитыПартнера() + + Реквизиты = РеквизитыОбслуживающейОрганизации(); + Реквизиты.Вставить("ДокументыПартнерСсылка"); + + Для Каждого Реквизит Из Реквизиты Цикл + ЭтотОбъект[Реквизит.Ключ] = Неопределено; + КонецЦикла; + +КонецПроцедуры + +&НаСервере +Функция ПроверитьЗаполнениеДополнительныхРеквизитов() + + ПроверяемыеРеквизиты = Новый Массив; + Если Не ЭтоИндивидуальныйПредприниматель Тогда + + Для Каждого Реквизит Из РеквизитыПодписанта(Истина) Цикл + ПроверяемыеРеквизиты.Добавить(ПараметрыРеквизитаДляПроверки(Реквизит, ЭтотОбъект[Реквизит.Ключ])); + КонецЦикла; - Возврат Ложь; КонецЕсли; - Возврат Истина; + РеквизитыПартнера = РеквизитыОбслуживающейОрганизации(Истина); + Если ДокументыПартнерЭтоИП + Или ПустаяСтрока(ДокументыПартнерКПП) Тогда + РеквизитыПартнера.ДокументыПартнерКПП = ""; + КонецЕсли; + + Если ПустаяСтрока(ДокументыПартнерИНН) Тогда + РеквизитыПартнера.ДокументыПартнерИНН = ""; + КонецЕсли; + + Для Каждого Реквизит Из РеквизитыПартнера Цикл + + Если ЗначениеЗаполнено(Реквизит.Значение) Тогда + ПроверяемыеРеквизиты.Добавить(ПараметрыРеквизитаДляПроверки(Реквизит, ЭтотОбъект[Реквизит.Ключ])); + КонецЕсли; + + КонецЦикла; + + Возврат Не Обработки.ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата.ПроверитьЗаполнениеРеквизитов( + ПроверяемыеРеквизиты, ДокументыПартнерЭтоИП); КонецФункции +&НаСервереБезКонтекста +Функция ПараметрыРеквизитаДляПроверки(Реквизит, Значение) + + ИмяРеквизита = Реквизит.Ключ; + ПараметрыРеквизитаДляПроверки = Новый Структура; + ПараметрыРеквизитаДляПроверки.Вставить("Имя", ИмяРеквизита); + ПараметрыРеквизитаДляПроверки.Вставить("Значение", Значение); + ПараметрыРеквизитаДляПроверки.Вставить("ПолеСообщения", ИмяРеквизита); + ПараметрыРеквизитаДляПроверки.Вставить("ТекстНезаполненного", + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Поле ""%1"" не заполнено'"), Реквизит.Значение)); + + Возврат ПараметрыРеквизитаДляПроверки; + +КонецФункции + +&НаКлиентеНаСервереБезКонтекста +Функция РеквизитыПодписанта(ДляПроверки = Ложь) + + Реквизиты = Новый Структура; + Реквизиты.Вставить("ДокументыРуководитель", + ?(ДляПроверки, НСтр("ru = 'Подписант заявления'"), "")); + Реквизиты.Вставить("ДокументыРуководительДолжность", + ?(ДляПроверки, НСтр("ru = 'Должность'"), "")); + Реквизиты.Вставить("ДокументыРуководительОснование", + ?(ДляПроверки, НСтр("ru = 'Основание'"), "")); + + Возврат Реквизиты; + +КонецФункции + +&НаКлиентеНаСервереБезКонтекста +Функция РеквизитыОбслуживающейОрганизации(ДляПроверки = Ложь) + + Реквизиты = Новый Структура; + Реквизиты.Вставить("ДокументыПартнер", + ?(ДляПроверки, НСтр("ru = 'Обслуживающая организация'"), "")); + Реквизиты.Вставить("ДокументыПартнерИНН", + ?(ДляПроверки, НСтр("ru = 'ИНН'"), "")); + Реквизиты.Вставить("ДокументыПартнерКПП", + ?(ДляПроверки, НСтр("ru = 'КПП'"), "")); + + Возврат Реквизиты; + +КонецФункции + +#КонецОбласти + +#Область Печать + +&НаКлиенте +Функция ОписаниеЗапросаНаКвалифицированныйСертификат(Поля) + + СписокПараметров = Новый СписокЗначений; + Поля = Новый Структура; + + Адрес = ЮридическийАдресСтруктура; + СимволРазделения = СимволРазделенияЧастейИмениИлиЧастейФамилииИлиЧастейОтчестваВСертификате(); + + // Поле CN - общее имя (организация или индивидуальный предприниматель). + Если ЭтоИндивидуальныйПредприниматель Тогда + ПолеОбщееИмя = СокрП(СтрЗаменить(Фамилия, " ", СимволРазделения) + + " " + СтрЗаменить(Имя, " ", СимволРазделения) + + " " + СтрЗаменить(Отчество, " ", СимволРазделения)); + Иначе + ПолеОбщееИмя = НаименованиеСокращенное; + КонецЕсли; + Поля.Вставить("CN", Лев(ПолеОбщееИмя, 64)); + СписокПараметров.Добавить("2.5.4.3", Поля.CN); + + // Поле SN - фамилия должностного лица или индивидуального предпринимателя. + ПолеФамилия = СтрЗаменить(Фамилия, " ", СимволРазделения); + Поля.Вставить("SN", Лев(ПолеФамилия, 64)); + СписокПараметров.Добавить("2.5.4.4", Поля.SN); + + // Поле G - имя и отчество должностного лица или индивидуального предпринимателя. + ПолеОтчество = СокрП(СтрЗаменить(Имя, " ", СимволРазделения) + + " " + СтрЗаменить(Отчество, " ", СимволРазделения)); + + Поля.Вставить("G", Лев(ПолеОтчество, 64)); + СписокПараметров.Добавить("2.5.4.42", Поля.G); + + // Поле C - страна. + Поля.Вставить("C", "RU"); + СписокПараметров.Добавить("2.5.4.6", Поля.C); + + // Следующие поля S, L, Street - адрес местонахождения организации или + // регистрации индивидуального предпринимателя. + + // Поле S (ST) - регион (<код региона> <имя региона>) - наименование субъекта РФ для СКПЭП, + // например, "77 г. Москва". + ПолеРегион = Адрес.КодРегиона + " " + ИмяРегионаРФПоРекомендациямДляСКПЭП(Адрес.КодРегиона); + Поля.Вставить("S", Лев(ПолеРегион, 128)); + СписокПараметров.Добавить("2.5.4.8", Поля.S); + + // Поле L - населенный пункт: + // "<округ> и/или <район> и/или <город> и/или <внутригородской район> и/или <населенный пункт>". + // Например, "<район>, <город>, <населенный пункт>": + // "Москва г, Зеленоград г, Крюково п", "Москва г, Зеленоград г, Малино п". + ПолеНаселенныйПункт = НаселенныйПунктПолностью(Адрес); + Поля.Вставить("L", Лев(ПолеНаселенныйПункт, 128)); + СписокПараметров.Добавить("2.5.4.7", Поля.L); + + // Поле Street - улица: + // "<улица> и/или <дополнительная территория> и/или <элемент дополнительной территории>, дом, офис". + ПолеУлица = ПредставлениеЧастиАдреса(Адрес, + "Улица, + |ДополнительнаяТерритория, + |ЭлементДополнительнойТерритории, + |Здание, Корпуса, Помещения"); + Поля.Вставить("Street", Лев(ПолеУлица, 128)); + СписокПараметров.Добавить("2.5.4.9", Поля.Street); + + Если ЭтоИндивидуальныйПредприниматель Тогда + // Поле OGRNIP - ОГРНИП индивидуального предпринимателя 15 символов. + Поля.Вставить("OGRNIP", ОГРН); + СписокПараметров.Добавить("1.2.643.100.5", Поля.OGRNIP); + Иначе + // Поле O - организация. + Поля.Вставить("O", Лев(НаименованиеСокращенное, 64)); + СписокПараметров.Добавить("2.5.4.10", Поля.O); + + // Поле OU - обособленное подразделение должностного лица. + Если ЗначениеЗаполнено(Подразделение) Тогда + Поля.Вставить("OU", Лев(Подразделение, 64)); + СписокПараметров.Добавить("2.5.4.11", Поля.OU); + КонецЕсли; + + // Поле T - должность должностного лица. + Поля.Вставить("T", Лев(Должность, 64)); + СписокПараметров.Добавить("2.5.4.12", Поля.T); + + // Поле OGRN - ОГРН юридического лица 13 символов. + Поля.Вставить("OGRN", ОГРН); + СписокПараметров.Добавить("1.2.643.100.1", Поля.OGRN); + КонецЕсли; + + // Поле SNILS - СНИЛС должностного лица или индивидуального предпринимателя. + Поля.Вставить("SNILS", СтраховойНомерПФР); + СписокПараметров.Добавить("1.2.643.100.3", Поля.SNILS); + + // Поле INN - ИНН организации или индивидуального предпринимателя. + Поля.Вставить("INN", Прав("00" + ИНН, 12)); + СписокПараметров.Добавить("1.2.643.3.131.1.1", Поля.INN); + + // Поле E - электронная почта должностного лица организации или индивидуального предпринимателя. + Поля.Вставить("E", Лев(ЭлектроннаяПочта, 128)); + СписокПараметров.Добавить("1.2.840.113549.1.9.1", Поля.E); + + // Подготовка строки запроса. + + Свойства = ""; + Для Каждого Параметр Из СписокПараметров Цикл + Свойства = Свойства + ",<" + Параметр.Значение + "=" + СокрЛП(Параметр.Представление) + ">"; + КонецЦикла; + Свойства = Сред(Свойства, 2); + + // Использование ключа - Проверка подлинности клиента, Защищенная электронная почта. + ИспользованиеКлюча = "1.3.6.1.5.5.7.3.2,1.3.6.1.5.5.7.3.4"; + + // Для УЦ КриптоПро 2.0 требуется указать шаблон сертификата. + // Без встроенной лицензии шаблон - "1.2.643.2.2.46.0.8", со встроенной лицензией + // шаблон - "1.2.643.2.2.50.1.9.8791462.1882306.9191997.3049782.15111.41178". + ШаблонСертификата = "1.2.643.2.2.46.0.8"; + + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + "pRequestInfo:{ + |CertAttrs:{%1} + |CertEnhKeyUsage:{%2} + |CertPolicies:{<1.2.643.100.113.1=>} + |dwKeyUsage:{240} + |SignTool:{%3} + |CertTemplate:{%4} + |}", + Свойства, + ИспользованиеКлюча, + ПредставлениеПрограммы, + ШаблонСертификата); + +КонецФункции + +&НаКлиенте +Процедура НапечататьДокументы() + + Документ = ПодготовленныйДокумент(); + Если Документ = Неопределено Тогда + Возврат; + КонецЕсли; + + ИдентификаторПечатнойФормы = "ЗаявлениеНаВыпускСертификат"; + НазваниеПечатнойФормы = НСтр("ru = 'Заявление на выпуск сертификата'"); + + Если Не ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Печать") Тогда + Документ.Показать(НазваниеПечатнойФормы); + ДокументыПечатались = Истина; + Возврат; + КонецЕсли; + + МодульУправлениеПечатьюКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеПечатьюКлиент"); + КоллекцияПечатныхФорм = МодульУправлениеПечатьюКлиент.НоваяКоллекцияПечатныхФорм(ИдентификаторПечатнойФормы); + + ПечатнаяФорма = МодульУправлениеПечатьюКлиент.ОписаниеПечатнойФормы(КоллекцияПечатныхФорм, ИдентификаторПечатнойФормы); + ПечатнаяФорма.СинонимМакета = НазваниеПечатнойФормы; + ПечатнаяФорма.ТабличныйДокумент = Документ; + ПечатнаяФорма.ИмяФайлаПечатнойФормы = НазваниеПечатнойФормы; + + ОбластиОбъектов = Новый СписокЗначений; + МодульУправлениеПечатьюКлиент.ПечатьДокументов(КоллекцияПечатныхФорм, ОбластиОбъектов); + + ДокументыПечатались = Истина; + +КонецПроцедуры &НаСервере Функция ПодготовленныйДокумент() - Если Не РуководительЗаполнен() Тогда - Возврат Неопределено; - КонецЕсли; - Макет = Обработки.ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата.ПолучитьМакет( ?(ЭтоИндивидуальныйПредприниматель, "ИндивидуальныйПредприниматель", "ЮридическоеЛицо")); @@ -2445,7 +2109,7 @@ Макет.Параметры.Телефон = Телефон; - ДокументВидПредставление = Элементы.ДокументВид.СписокВыбора.НайтиПоЗначению(ДокументВид).Представление; + ДокументВидПредставление = ПредставлениеВидаДокумента(ДокументВид); ДокументВидПредставление = НРег(Лев(ДокументВидПредставление, 1)) + Сред(ДокументВидПредставление, 2); ДокументНомерПредставление = @@ -2460,33 +2124,189 @@ + ?(ЗначениеЗаполнено(ДокументКодПодразделенияПредставление), ", " + НСтр("ru = 'код подразделения'") + " " + ДокументКодПодразделенияПредставление + "", ""); - Документ.Вывести(Макет); + Если ЭтоИндивидуальныйПредприниматель Тогда + Документ.Вывести(Макет); + Иначе + + Шапка = Макет.ПолучитьОбласть("Шапка"); + Документ.Вывести(Шапка); + + Если Должность <> ДокументыРуководительДолжность + Или Фамилия + " " + Имя + " " + Отчество <> ДокументыРуководитель Тогда + + СогласиеНаОбработкуПД = Макет.ПолучитьОбласть("СогласиеНаОбработкуПД"); + Документ.Вывести(СогласиеНаОбработкуПД); + + КонецЕсли; + + Подвал = Макет.ПолучитьОбласть("Подвал"); + Документ.Вывести(Подвал); + + КонецЕсли; Возврат Документ; КонецФункции -&НаСервере -Функция ОтправитьЗаявление(ОписаниеОшибки) +&НаКлиенте +Процедура ПечатьЗаявленияПослеСозданияМенеджераКриптографии(Результат, Контекст) Экспорт + + Если ТипЗнч(Результат) <> Тип("МенеджерКриптографии") Тогда + + Объект.Программа = Неопределено; + ЭлектроннаяПодписьСлужебныйКлиент.ПоказатьОшибкуОбращенияКПрограмме( + НСтр("ru = 'Создание ключа электронной подписи'"), "", Результат, + Новый Структура, Новый Структура("ПоказатьИнструкцию", Истина)); + + Возврат; + + КонецЕсли; + + ПредставлениеПрограммы = ПоставляемоеПредставлениеПрограммы(СписокПрограмм, Объект.Программа); + + СоздатьКлючИЗапросНаСертификат( + Новый ОписаниеОповещения("ПечатьЗаявленияПослеСозданияКлючаИЗапросаНаСертификат", ЭтотОбъект)); + +КонецПроцедуры + +&НаКлиенте +Процедура ПечатьЗаявленияПослеСозданияКлючаИЗапросаНаСертификат(Результат, Контекст) Экспорт + + Доступность = Истина; + Если Результат <> Истина Тогда + Возврат; + КонецЕсли; + + НапечататьДокументы(); + + Если Модифицированность Тогда + Объект.СостояниеЗаявления = ПредопределенноеЗначение("Перечисление.СостоянияЗаявленияНаВыпускСертификата.Подготовлено"); + ЗаписатьЗаявление(); + ПослеЗаписи(); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ОтправкаЗаявления + +&НаКлиенте +Процедура ОтправитьЗаявлениеПродолжение(Ответ, ДополнительныеПараметры) Экспорт + + Если Ответ <> "Отправить" Тогда + Возврат; + КонецЕсли; + + Если Не ОбщегоНазначенияКлиент.ПодсистемаСуществует("ИнтернетПоддержкаПользователей") Тогда + ПоказатьПредупреждение(,НСтр("ru = 'Невозможно подключиться к порталу интернет-поддержки по причине: + |Библиотека интернет поддержки пользователей не внедрена в конфигурацию.'")); + Возврат; + КонецЕсли; + + МодульИнтернетПоддержкаПользователейКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль( + "ИнтернетПоддержкаПользователейКлиент"); + + Если Не ИнтернетПоддержкаПользователейПодключена Тогда + + Если МодульИнтернетПоддержкаПользователейКлиент.ДоступноПодключениеИнтернетПоддержки() Тогда + + ОповещениеОПодключении = Новый ОписаниеОповещения("ОтправитьЗаявлениеЗавершение", ЭтотОбъект); + МодульИнтернетПоддержкаПользователейКлиент.ПодключитьИнтернетПоддержкуПользователей( + ОповещениеОПодключении,ЭтотОбъект); + + Иначе + ПоказатьПредупреждение(, НСтр("ru = 'Для отправки заявления необходимо подключить Интернет-поддержку пользователей.'")); + Возврат; + КонецЕсли; + + Иначе + ОтправитьЗаявлениеЗавершение(Новый Структура, Неопределено); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ОтправитьЗаявлениеЗавершение(Результат, Контекст) Экспорт + + Если ТипЗнч(Результат) <> Тип("Структура") Тогда + ИнтернетПоддержкаПользователейПодключена = Ложь; + Возврат; + КонецЕсли; ОписаниеОшибки = ""; - ШаблонОписанияОшибки = - НСтр("ru = 'Не удалось отправить заявление по причине: - |%1'"); + ИнтернетПоддержкаПользователейПодключена = Истина; + Если ОтправитьЗаявлениеНаСервере(ОписаниеОшибки) Тогда + ПослеЗаписи(); + Иначе + + Если ИнтернетПоддержкаПользователейПодключена Тогда + ОбработкаПродолжения = Неопределено; + Иначе + ОбработкаПродолжения = Новый ОписаниеОповещения( + "ОтправитьЗаявлениеПослеПредупреждения", ЭтотОбъект); + КонецЕсли; + + ПоказатьПредупреждение(ОбработкаПродолжения, + УстановитьГиперссылку(ОписаниеОшибки, "its.1c.ru", "http://its.1c.ru")); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ОтправитьЗаявлениеПослеПредупреждения(Контекст) Экспорт + + ОтправитьЗаявлениеПродолжение("Отправить", Неопределено); + +КонецПроцедуры + +&НаСервере +Функция ОтправитьЗаявлениеНаСервере(ОписаниеОшибки) + + Доступность = Ложь; + Если Не ОтправитьЗаявлениеНаПортал(ОписаниеОшибки) Тогда + Доступность = Истина; + Возврат Ложь; + КонецЕсли; + + Объект.СостояниеЗаявления = Перечисления.СостоянияЗаявленияНаВыпускСертификата.Отправлено; + + ДатаОбновленияСостояния = ТекущаяДатаСеанса(); + СостояниеОбработкиЗаявления = НСтр("ru = 'Заявление принято для обработки.'"); + + Доступность = Истина; + Элементы.ГруппаОбработкаЗаявления.Видимость = Истина; + + ЗаписатьЗаявление(); + УстановитьВидимостьДоступность(); + + Возврат Истина; + +КонецФункции + +&НаСервере +Функция ОтправитьЗаявлениеНаПортал(ОписаниеОшибки) + + ОписаниеОшибки = ""; + ШаблонОписанияОшибки = НСтр("ru = 'Не удалось отправить заявление по причине: + |%1'"); Попытка ВебСервис = ВебСервисУЦ(); Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонОписанияОшибки, КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); + Возврат Ложь; + КонецПопытки; Если Не ОбщегоНазначения.ПодсистемаСуществует("ИнтернетПоддержкаПользователей") Тогда - ОписаниеОшибки = - НСтр("ru = 'Невозможно подключиться к порталу интернет-поддержки по причине: - |Библиотека интернет поддержки пользователей не внедрена в конфигурацию.'"); + ОписаниеОшибки = НСтр("ru = 'Невозможно подключиться к порталу интернет-поддержки по причине: + |Библиотека интернет поддержки пользователей не внедрена в конфигурацию.'"); Возврат Ложь; КонецЕсли; @@ -2497,15 +2317,17 @@ ИнтернетПоддержкаПользователейПодключена = Истина; Если ЗначениеЗаполнено(Результат.КодОшибки) Тогда + Если Результат.КодОшибки = "НеверныйЛогинИлиПароль" Тогда ИнтернетПоддержкаПользователейПодключена = Ложь; КонецЕсли; ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Не удалось подключиться к порталу интернет-поддержки по причине: - |%1'"), - Результат.СообщениеОбОшибке); + |%1'"), Результат.СообщениеОбОшибке); + Возврат Ложь; + Иначе Билет = Результат.Тикет; КонецЕсли; @@ -2519,15 +2341,16 @@ ЗаявлениеXML = ЗаявлениеXML(Билет); ПакетЗаявления = ПакетЗаявления(ЗаявлениеXML); - ОбновитьДоступностьРеквизитовПартнера(); - Попытка Ответ = ВебСервис.SendPacket(ПакетЗаявления); Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонОписанияОшибки, КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); + Возврат Ложь; + КонецПопытки; Если Не ЗначениеЗаполнено(Ответ) Тогда @@ -2538,19 +2361,19 @@ ЧтениеXML = Новый ЧтениеXML; ЧтениеXML.УстановитьСтроку(Ответ); + ПостроительDOM = Новый ПостроительDOM(); ПостроительDOM = ПостроительDOM.Прочитать(ЧтениеXML); + ЧтениеXML.Закрыть(); УзелDOM = ПостроительDOM.ПолучитьЭлементыПоИмени("code"); КодРезультата = УзелDOM[0].ТекстовоеСодержимое; - Если КодРезультата = "0" Тогда ДатаОтправки = ТекущаяДатаСеанса(); Возврат Истина; - ИначеЕсли КодРезультата = "60" // Документооборот уже зарегистрирован. - И ЭтоПовторнаяОтправкаПакета Тогда + И ЭтоПовторнаяОтправкаПакета Тогда ДатаОтправки = ТекущаяДатаСеанса(); Возврат Истина; @@ -2558,8 +2381,6 @@ ИдентификаторДокументооборота = ""; - ОбновитьДоступностьРеквизитовПартнера(); - УзелDOM = ПостроительDOM.ПолучитьЭлементыПоИмени("errorMessage"); Если УзелDOM.Количество() > 0 Тогда ОписаниеОшибки = УзелDOM[0].ТекстовоеСодержимое; @@ -2572,184 +2393,6 @@ КонецФункции -&НаСервере -Функция ЗаявлениеXML(Билет) - - ЗаписьXML = Новый ЗаписьXML; - ЗаписьXML.УстановитьСтроку("windows-1251"); - ЗаписьXML.ЗаписатьОбъявлениеXML(); - - ЗаписьXML.ЗаписатьНачалоЭлемента("Заявление"); - ЗаписьXML.ЗаписатьАтрибут("ВерсФорм", "1.3"); - ЗаписьXML.ЗаписатьАтрибут("ДатаВремяФормирования", XMLСтрока(ТекущаяДатаСеанса())); - ЗаписьXML.ЗаписатьАтрибут("ВерсПрог", "1С"); - - ЗаписьXMLЭлемент(ЗаписьXML, "ТипЗаявления", "1"); - ЗаписьXMLЭлемент(ЗаписьXML, "ПризнакЮридическогоЛица", Не ЭтоИндивидуальныйПредприниматель); - ЗаписьXMLЭлемент(ЗаписьXML, "ИНН"); - - Если Не ЭтоИндивидуальныйПредприниматель Тогда - ЗаписьXMLЭлемент(ЗаписьXML, "КПП"); - КонецЕсли; - - ЗаписьXMLЭлемент(ЗаписьXML, "ОГРН"); - ЗаписьXMLЭлемент(ЗаписьXML, "ПолноеНаименование", НаименованиеПолное); - ЗаписьXMLЭлемент(ЗаписьXML, "КраткоеНаименование", НаименованиеСокращенное); - ЗаписьXMLЭлемент(ЗаписьXML, "ТелефонОсновной", Телефон); - - ЗаписьXMLАдрес(ЗаписьXML, "АдресЮридический", ЮридическийАдресXML); - ЗаписьXMLАдрес(ЗаписьXML, "АдресФактический", ФактическийАдресXML); - - ЗаписьXML.ЗаписатьНачалоЭлемента("ВладельцыЭЦП"); - ЗаписьXML.ЗаписатьНачалоЭлемента("ВладелецЭЦП"); - ЗаписьXML.ЗаписатьАтрибут("СНИЛС", ПредставлениеРеквизитаСтраховойНомерПФР(СтраховойНомерПФР)); - - ЗаписьXML.ЗаписатьНачалоЭлемента("ФИО"); - ЗаписьXML.ЗаписатьАтрибут("Фамилия", Фамилия); - ЗаписьXML.ЗаписатьАтрибут("Имя", Имя); - ЗаписьXML.ЗаписатьАтрибут("Отчество", Отчество); - ЗаписьXML.ЗаписатьКонецЭлемента(); // КонецЭлемента ФИО. - - ЗаписьXML.ЗаписатьНачалоЭлемента("ЛичныеДанные"); - ЗаписьXML.ЗаписатьАтрибут("ДатаРождения", ПредставлениеРеквизитаДатаРождения(ДатаРождения)); - ЗаписьXML.ЗаписатьАтрибут("Пол", Пол); - ЗаписьXML.ЗаписатьАтрибут("МестоРождения", МестоРождения); - ЗаписьXML.ЗаписатьАтрибут("Гражданство", ГражданствоОКСМКодАльфа3); - ЗаписьXML.ЗаписатьКонецЭлемента(); // КонецЭлемента ЛичныеДанные. - - Если ДокументВид = "21" Тогда - ДокументНомерПредставление = ПредставлениеРеквизитаНомерПаспортаРФ(ДокументНомер); - ДокументКодПодразделенияПредставление = - ПредставлениеРеквизитаДокументКодПодразделения(ДокументКодПодразделения); - Иначе - ДокументНомерПредставление = ДокументНомер; - ДокументКодПодразделенияПредставление = ""; - КонецЕсли; - ДокументДатаВыдачиПредставление = ПредставлениеРеквизитаДокументДатаВыдачи(ДокументДатаВыдачи); - - ЗаписьXML.ЗаписатьНачалоЭлемента("УдЛичн"); - ЗаписьXML.ЗаписатьАтрибут("КодВидДок", ДокументВид); - ЗаписьXML.ЗаписатьАтрибут("СерНомДок", ДокументНомерПредставление); - ЗаписьXML.ЗаписатьАтрибут("ДатаДок", ДокументДатаВыдачиПредставление); - ЗаписьXML.ЗаписатьАтрибут("ВыдДок", ДокументКемВыдан); - ЗаписьXML.ЗаписатьАтрибут("КодВыдДок", ДокументКодПодразделенияПредставление); - ЗаписьXML.ЗаписатьКонецЭлемента(); // КонецЭлемента УдЛичн. - - Если Не ЭтоИндивидуальныйПредприниматель Тогда - ЗаписьXMLЭлемент(ЗаписьXML, "Должность", Должность); - КонецЕсли; - - ЗаписьXMLЭлемент(ЗаписьXML, "ЭлектроннаяПочта", ЭлектроннаяПочта); - - Строки = СписокПрограмм.НайтиСтроки(Новый Структура("Ссылка", Объект.Программа)); - - ЗаписьXML.ЗаписатьНачалоЭлемента("Криптопровайдер"); - ЗаписьXMLЭлемент(ЗаписьXML, "ТипКриптопровайдера", XMLСтрока(Строки[0].ТипПрограммы)); - ЗаписьXMLЭлемент(ЗаписьXML, "ИмяКриптопровайдера", XMLСтрока(Строки[0].ИмяПрограммы)); - ЗаписьXML.ЗаписатьКонецЭлемента(); // КонецЭлемента Криптопровайдер. - - ЗаписьXML.ЗаписатьНачалоЭлемента("ЗапросНаСертификат"); - ЗаписьXML.ЗаписатьАтрибут("УдостоверяющийЦентр", "ООО ""НПЦ ""1С"""); // АПК:1297 Не локализуется (формат веб-сервиса). - ЗаписьXML.ЗаписатьТекст(ТекстФайлаЗапросаНаСертификат()); - ЗаписьXML.ЗаписатьКонецЭлемента(); // КонецЭлемента ЗапросНаСертификат. - - ЗаписьXML.ЗаписатьКонецЭлемента(); // КонецЭлемента ВладелецЭЦП. - ЗаписьXML.ЗаписатьКонецЭлемента(); // КонецЭлемента ВладельцыЭЦП. - - ЗаписьXMLЭлемент(ЗаписьXML, "ИННПартнера", ДокументыПартнерИНН); - Если Не ДокументыПартнерЭтоИП Тогда - ЗаписьXMLЭлемент(ЗаписьXML, "КПППартнера", ДокументыПартнерКПП); - КонецЕсли; - - ЗаписьXMLЭлемент(ЗаписьXML, "БилетПользователя", Билет); - - ЗаписьXML.ЗаписатьКонецЭлемента(); // КонецЭлемента Заявление. - - СтрокаXML = ЗаписьXML.Закрыть(); - - Возврат СтрокаXML; - -КонецФункции - -&НаСервере -Функция ТекстФайлаЗапросаНаСертификат() - - ТекстОшибки = - НСтр("ru = 'Не удалось прочитать ранее созданный запрос на сертификат. - |Заявление не может быть отправлено. - |Удалите его и создайте новое.'"); - - Если Не ЗначениеЗаполнено(АдресЗапросаНаСертификат) Тогда - ВызватьИсключение ТекстОшибки; - КонецЕсли; - - ДвоичныеДанныеФайла = ПолучитьИзВременногоХранилища(АдресЗапросаНаСертификат); - Если ТипЗнч(ДвоичныеДанныеФайла) <> Тип("ДвоичныеДанные") Тогда - ВызватьИсключение ТекстОшибки; - КонецЕсли; - - ИмяВременногоФайла = ПолучитьИмяВременногоФайла(".p10"); - ДвоичныеДанныеФайла.Записать(ИмяВременногоФайла); - - ТекстовыйДокумент = Новый ТекстовыйДокумент; - ТекстовыйДокумент.Прочитать(ИмяВременногоФайла); - Текст = СокрЛП(ТекстовыйДокумент.ПолучитьТекст()); - - УдалитьФайлы(ИмяВременногоФайла); - - Если Не ЗначениеЗаполнено(Текст) Тогда - ВызватьИсключение ТекстОшибки; - КонецЕсли; - - Возврат Текст; - -КонецФункции - -&НаСервере -Функция ОписаниеПакетаXML(ИмяФайлаЗаявления) - - ЗаписьXML = Новый ЗаписьXML; - ЗаписьXML.УстановитьСтроку("windows-1251"); - ЗаписьXML.ЗаписатьОбъявлениеXML(); - - ЗаписьXML.ЗаписатьНачалоЭлемента("пакет"); - ЗаписьXML.ЗаписатьАтрибут("версияФормата", "1С:1.0"); - - ЗаписьXML.ЗаписатьАтрибут("версПрог", "1.0"); - ЗаписьXML.ЗаписатьАтрибут("типДокументооборота", "РегистрацияАбонентаЭДО"); - ЗаписьXML.ЗаписатьАтрибут("типТранзакции", "Регистрация"); - ЗаписьXML.ЗаписатьАтрибут("идентификаторДокументооборота", ИдентификаторДокументооборота); - - ЗаписьXML.ЗаписатьНачалоЭлемента("отправитель"); - ЗаписьXML.ЗаписатьАтрибут("типСубъекта", "абонент"); - ЗаписьXML.ЗаписатьКонецЭлемента(); - - ЗаписьXML.ЗаписатьНачалоЭлемента("получатель"); - ЗаписьXML.ЗаписатьАтрибут("идентификаторСубъекта", "КалугаАстрал"); - ЗаписьXML.ЗаписатьАтрибут("типСубъекта", "спецоператор"); - ЗаписьXML.ЗаписатьКонецЭлемента(); - - ЗаписьXML.ЗаписатьНачалоЭлемента("документ"); - ЗаписьXML.ЗаписатьАтрибут("идентификаторДокумента", НовыйСжатыйУникальныйИдентификатор()); - ЗаписьXML.ЗаписатьАтрибут("типДокумента", "Заявление"); - ЗаписьXML.ЗаписатьАтрибут("типСодержимого", "xml"); - ЗаписьXML.ЗаписатьАтрибут("сжат", "false"); - ЗаписьXML.ЗаписатьАтрибут("зашифрован", "false"); - - ЗаписьXML.ЗаписатьНачалоЭлемента("содержимое"); - ЗаписьXML.ЗаписатьАтрибут("имяФайла", ИмяФайлаЗаявления); - ЗаписьXML.ЗаписатьКонецЭлемента(); - - ЗаписьXML.ЗаписатьКонецЭлемента(); // КонецЭлемента документ. - - ЗаписьXML.ЗаписатьКонецЭлемента(); // КонецЭлемента пакет. - - СтрокаXML = ЗаписьXML.Закрыть(); - - Возврат СтрокаXML; - -КонецФункции - &НаСервере Функция ПакетЗаявления(ЗаявлениеXML) @@ -2792,67 +2435,289 @@ КонецФункции -&НаСервере -Процедура ЗаписьXMLЭлемент(ЗаписьXML, ИмяЭлемента, Значение = Неопределено) +#КонецОбласти + +#Область ПрограммыРаботыЭП + +&НаКлиенте +Процедура ПриИзмененияСоставаИлиНастроекПрограмм() - Если Значение = Неопределено Тогда - Значение = ЭтотОбъект[ИмяЭлемента]; - КонецЕсли; - - ЗаписьXML.ЗаписатьНачалоЭлемента(ИмяЭлемента); - ЗаписьXML.ЗаписатьТекст(XMLСтрока(Значение)); - ЗаписьXML.ЗаписатьКонецЭлемента(); + ЗаполнитьСписокПрограмм(); + ЗаполнитьПрограмму(); КонецПроцедуры &НаСервере -Процедура ЗаписьXMLАдрес(ЗаписьXML, ИмяЭлемента, АдресXML) +Процедура ЗаполнитьСписокПрограмм() - Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда + СписокПрограмм.Очистить(); + + Если Не ЗначениеЗаполнено(КонтейнерКлючаПуть) + И Объект.СостояниеЗаявления = Перечисления.СостоянияЗаявленияНаВыпускСертификата.НеПодготовлено Тогда + + ВариантАлгоритмов = ВариантАлгоритмов(); + КонецЕсли; + + Если Не ЗначениеЗаполнено(ВариантАлгоритмов) Тогда + ВариантАлгоритмов = "2012"; + КонецЕсли; + + ИдентификаторыНастроек = Новый Соответствие; + Если ВариантАлгоритмов = "2012" Тогда + ИдентификаторыНастроек.Вставить("VipNet2012", Истина); + ИдентификаторыНастроек.Вставить("CryptoPro2012", Истина); + Иначе + ИдентификаторыНастроек.Вставить("VipNet2001", Истина); + ИдентификаторыНастроек.Вставить("CryptoPro2001", Истина); + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | Программы.Ссылка КАК Ссылка, + | Программы.ИмяПрограммы КАК ИмяПрограммы, + | Программы.ТипПрограммы КАК ТипПрограммы + |ИЗ + | Справочник.ПрограммыЭлектроннойПодписиИШифрования КАК Программы"; + Программы = Запрос.Выполнить().Выгрузить(); + + Настройки = Справочники.ПрограммыЭлектроннойПодписиИШифрования.ПоставляемыеНастройкиПрограмм(); + Для каждого Настройка Из Настройки Цикл + + Если ИдентификаторыНастроек.Получить(Настройка.Идентификатор) = Неопределено Тогда + Продолжить; + КонецЕсли; + + Строка = СписокПрограмм.Добавить(); + ЗаполнитьЗначенияСвойств(Строка, Настройка); + + ПрограммыВСправочнике = Программы.НайтиСтроки(Новый Структура("ИмяПрограммы, ТипПрограммы", + Настройка.ИмяПрограммы, Настройка.ТипПрограммы)); + + Если ПрограммыВСправочнике.Количество() > 0 Тогда + Строка.Ссылка = ПрограммыВСправочнике[0].Ссылка; + КонецЕсли; + + КонецЦикла; + + Если ЗначениеЗаполнено(ПрограммаОблачногоСервиса) Тогда + НоваяПрограмма = СписокПрограмм.Добавить(); + НоваяПрограмма.Ссылка = ПрограммаОблачногоСервиса; + НоваяПрограмма.Представление = НСтр("ru = 'Облачный сервис'"); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ЗаполнитьПрограмму(Оповещение = Неопределено) + + Если ЗначениеЗаполнено(Объект.Программа) Тогда + ПослеВыбораПрограммы(Ложь, Оповещение); Возврат; КонецЕсли; - МодульРаботаСАдресами = ОбщегоНазначения.ОбщийМодуль("РаботаСАдресами"); + Контекст = Новый Структура; + Контекст.Вставить("Оповещение", Оповещение); + Контекст.Вставить("ПерваяДобавленнаяПрограмма", Неопределено); + Контекст.Вставить("Индекс", -1); - ДополнительныеПараметры = Новый Структура("НаименованиеВключаетСокращение", Истина); - АдресСтруктура = МодульРаботаСАдресами.СведенияОбАдресе(АдресXML, ДополнительныеПараметры); - - ПервыйКорпус = ?(АдресСтруктура.Корпуса.Количество() > 0, АдресСтруктура.Корпуса[0].Номер, ""); - ПервоеПомещение = ?(АдресСтруктура.Помещения.Количество() > 0, АдресСтруктура.Помещения[0].Номер, ""); - - УлицаПолностью = ПредставлениеЧастиАдреса(АдресСтруктура, - "Улица, - |ДополнительнаяТерритория, - |ЭлементДополнительнойТерритории"); - - ЗаписьXML.ЗаписатьНачалоЭлемента(ИмяЭлемента); - - ЗаписьXML.ЗаписатьАтрибут("КодРегион", АдресСтруктура.КодРегиона); - ЗаписьXML.ЗаписатьАтрибут("НаселПункт", НаселенныйПунктПолностью(АдресСтруктура)); - ЗаписьXML.ЗаписатьАтрибут("Улица", УлицаПолностью); - ЗаписьXML.ЗаписатьАтрибут("Дом", АдресСтруктура.Здание.Номер); - ЗаписьXML.ЗаписатьАтрибут("Корпус", ПервыйКорпус); - ЗаписьXML.ЗаписатьАтрибут("Кварт", ПервоеПомещение); - - ЗаписьXML.ЗаписатьКонецЭлемента(); + ЗаполнитьПрограммуЦиклНачало(Контекст); КонецПроцедуры +&НаКлиенте +Процедура ЗаполнитьПрограммуЦиклНачало(Контекст) + + Если СписокПрограмм.Количество() <= Контекст.Индекс + 1 Тогда + + Если Контекст.ПерваяДобавленнаяПрограмма <> Неопределено Тогда + Объект.Программа = Контекст.ПерваяДобавленнаяПрограмма; + КонецЕсли; + + ПослеВыбораПрограммы(Ложь, Контекст.Оповещение); + Возврат; + + КонецЕсли; + + Контекст.Индекс = Контекст.Индекс + 1; + Контекст.Вставить("Строка", СписокПрограмм[Контекст.Индекс]); + + Если Контекст.ПерваяДобавленнаяПрограмма = Неопределено + И ЗначениеЗаполнено(Контекст.Строка.Ссылка) Тогда + + Контекст.ПерваяДобавленнаяПрограмма = Контекст.Строка.Ссылка; + КонецЕсли; + + ЭлектроннаяПодписьСлужебныйКлиент.СоздатьМенеджерКриптографии( + Новый ОписаниеОповещения("ЗаполнитьПрограммуЦиклПослеСозданияМенеджераКриптографии", ЭтотОбъект, Контекст), + "", Ложь, Контекст.Строка.Ссылка, Истина); + +КонецПроцедуры + +&НаКлиенте +Процедура ЗаполнитьПрограммуЦиклПослеСозданияМенеджераКриптографии(Менеджер, Контекст) Экспорт + + Если ТипЗнч(Менеджер) <> Тип("МенеджерКриптографии") Тогда + ЗаполнитьПрограммуЦиклНачало(Контекст); + Возврат; + КонецЕсли; + + Объект.Программа = Контекст.Строка.Ссылка; + Если Контекст.Оповещение <> Неопределено Тогда + ВыполнитьОбработкуОповещения(Контекст.Оповещение); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПослеВыбораПрограммыОбработчикОжидания() + + ПослеВыбораПрограммы(Истина); + +КонецПроцедуры + +&НаКлиенте +Процедура ПослеВыбораПрограммы(ПоказатьОшибку, Оповещение = Неопределено) + + Криптография = Неопределено; + Если Не ЗначениеЗаполнено(Объект.Программа) + Или Объект.Программа = ПрограммаОблачногоСервиса Тогда + + Если Оповещение <> Неопределено Тогда + ВыполнитьОбработкуОповещения(Оповещение); + КонецЕсли; + + Возврат; + + КонецЕсли; + + Контекст = Новый Структура; + Контекст.Вставить("ПоказатьОшибку", ПоказатьОшибку); + Контекст.Вставить("Оповещение", Оповещение); + + ЭлектроннаяПодписьСлужебныйКлиент.СоздатьМенеджерКриптографии( + Новый ОписаниеОповещения("ПослеВыбораПрограммыПослеСозданияМенеджераКриптографии", ЭтотОбъект, Контекст), + "", Неопределено, Объект.Программа); + +КонецПроцедуры + +&НаКлиенте +Процедура ПослеВыбораПрограммыПослеСозданияМенеджераКриптографии(Менеджер, Контекст) Экспорт + + Если ТипЗнч(Менеджер) <> Тип("МенеджерКриптографии") Тогда + + Объект.Программа = Неопределено; + Если Контекст.ПоказатьОшибку Тогда + + ЭлектроннаяПодписьСлужебныйКлиент.ПоказатьОшибкуОбращенияКПрограмме( + НСтр("ru = 'Выбор программы электронной подписи'"), "", Менеджер, + Новый Структура, Новый Структура("ПоказатьИнструкцию", Истина)); + + КонецЕсли; + + КонецЕсли; + + Если Контекст.Оповещение <> Неопределено Тогда + ВыполнитьОбработкуОповещения(Контекст.Оповещение); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ЗаполнитьДанныеВыбораПрограммы(ДанныеВыбора, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + ДанныеВыбора = Новый СписокЗначений; + + Для Каждого Строка Из СписокПрограмм Цикл + Значение = ?(ЗначениеЗаполнено(Строка.Ссылка), Строка.Ссылка, Строка.Идентификатор); + ДанныеВыбора.Добавить(Значение, Строка.Представление); + КонецЦикла; + +КонецПроцедуры + +&НаКлиентеНаСервереБезКонтекста +Функция ПоставляемоеПредставлениеПрограммы(СписокПрограмм, Программа) + + Если ТипЗнч(Программа) = Тип("Строка") Тогда + Строки = СписокПрограмм.НайтиСтроки(Новый Структура("Идентификатор", Программа)); + Иначе + Строки = СписокПрограмм.НайтиСтроки(Новый Структура("Ссылка", Программа)); + КонецЕсли; + + Возврат Строки[0].Представление; + +КонецФункции + +#КонецОбласти + +#Область WebСервис + &НаСервере Функция ВебСервисУЦ() ПараметрыПодключения = ОбщегоНазначения.ПараметрыПодключенияWSПрокси(); - ПараметрыПодключения.АдресWSDL = "http://regservice.1c.ru/regservice/regservice.asmx?wsdl"; + ПараметрыПодключения.АдресWSDL = "http://regservice.1c.ru/regservice/regservice.asmx?wsdl"; ПараметрыПодключения.URIПространстваИмен = "http://regservice.keydisk.ru/"; ПараметрыПодключения.ИмяСервиса = "RegService"; ПараметрыПодключения.Таймаут = 7; - ВебСервис = ОбщегоНазначения.СоздатьWSПрокси(ПараметрыПодключения); - - Возврат ВебСервис; + Возврат ОбщегоНазначения.СоздатьWSПрокси(ПараметрыПодключения); КонецФункции +&НаСервере +Функция ВариантАлгоритмов() + + Попытка + + ВебСервис = ВебСервисУЦ(); + + Фабрика = ВебСервис.Определение.ФабрикаXDTO; + URIПространстваИмен = ВебСервис.ТочкаПодключения.Интерфейс.URIПространстваИмен; + + СвойстваФункции = Фабрика.Пакеты.Получить(URIПространстваИмен).КорневыеСвойства.Получить("GetCertificateSettings"); + Если СвойстваФункции = Неопределено Тогда + + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'В веб-сервисе ""%1"" не определена обязательная функция ""GetCertificateSettings"".'"), + ВебСервис.ТочкаПодключения.Местоположение + "?wsdl"); + + КонецЕсли; + + ТипПустогоПараметра = СвойстваФункции.Тип; + ЗначениеПустогоПараметра = Фабрика.Создать(ТипПустогоПараметра); + + Ответ = ВебСервис.GetCertificateSettings(ЗначениеПустогоПараметра).GetCertificateSettingsResult; + + ЧтениеXML = Новый ЧтениеXML; + ЧтениеXML.УстановитьСтроку(Ответ); + ПостроительDOM = Новый ПостроительDOM(); + ПостроительDOM = ПостроительDOM.Прочитать(ЧтениеXML); + ЧтениеXML.Закрыть(); + + УзелDOM = ПостроительDOM.ПолучитьЭлементыПоИмени("algorithm"); + ВариантАлгоритмов = УзелDOM[0].ТекстовоеСодержимое; + Если ВариантАлгоритмов <> "2001" + И ВариантАлгоритмов <> "2012" Тогда + + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ответ сервера не соответствует ожидаемому: + |%1'"), Ответ); + + КонецЕсли; + + Исключение + + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось получить требуемый вариант алгоритмов от сервера 1С:Подпись по причине: + |%1'"), КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); + + КонецПопытки; + + Возврат ВариантАлгоритмов; + +КонецФункции &НаСервере Функция ПолучитьСертификат() @@ -3120,6 +2985,233 @@ КонецФункции +#КонецОбласти + +#Область РаботаСXML + +&НаСервере +Функция ЗаявлениеXML(Билет) + + ЗаписьXML = Новый ЗаписьXML; + ЗаписьXML.УстановитьСтроку("windows-1251"); + ЗаписьXML.ЗаписатьОбъявлениеXML(); + + ЗаписьXML.ЗаписатьНачалоЭлемента("Заявление"); + ЗаписьXML.ЗаписатьАтрибут("ВерсФорм", "1.3"); + ЗаписьXML.ЗаписатьАтрибут("ДатаВремяФормирования", XMLСтрока(ТекущаяДатаСеанса())); + ЗаписьXML.ЗаписатьАтрибут("ВерсПрог", "1С"); + + ЗаписьXMLЭлемент(ЗаписьXML, "ТипЗаявления", "1"); + ЗаписьXMLЭлемент(ЗаписьXML, "ПризнакЮридическогоЛица", Не ЭтоИндивидуальныйПредприниматель); + ЗаписьXMLЭлемент(ЗаписьXML, "ИНН"); + + Если Не ЭтоИндивидуальныйПредприниматель Тогда + ЗаписьXMLЭлемент(ЗаписьXML, "КПП"); + КонецЕсли; + + ЗаписьXMLЭлемент(ЗаписьXML, "ОГРН"); + ЗаписьXMLЭлемент(ЗаписьXML, "ПолноеНаименование", НаименованиеПолное); + ЗаписьXMLЭлемент(ЗаписьXML, "КраткоеНаименование", НаименованиеСокращенное); + ЗаписьXMLЭлемент(ЗаписьXML, "ТелефонОсновной", Телефон); + + ЗаписьXMLАдрес(ЗаписьXML, "АдресЮридический", ЮридическийАдресXML); + ЗаписьXMLАдрес(ЗаписьXML, "АдресФактический", ФактическийАдресXML); + + ЗаписьXML.ЗаписатьНачалоЭлемента("ВладельцыЭЦП"); + ЗаписьXML.ЗаписатьНачалоЭлемента("ВладелецЭЦП"); + ЗаписьXML.ЗаписатьАтрибут("СНИЛС", ПредставлениеРеквизитаСтраховойНомерПФР(СтраховойНомерПФР)); + + ЗаписьXML.ЗаписатьНачалоЭлемента("ФИО"); + ЗаписьXML.ЗаписатьАтрибут("Фамилия", Фамилия); + ЗаписьXML.ЗаписатьАтрибут("Имя", Имя); + ЗаписьXML.ЗаписатьАтрибут("Отчество", Отчество); + ЗаписьXML.ЗаписатьКонецЭлемента(); // КонецЭлемента ФИО. + + ЗаписьXML.ЗаписатьНачалоЭлемента("ЛичныеДанные"); + ЗаписьXML.ЗаписатьАтрибут("ДатаРождения", ПредставлениеРеквизитаДатаРождения(ДатаРождения)); + ЗаписьXML.ЗаписатьАтрибут("Пол", Пол); + ЗаписьXML.ЗаписатьАтрибут("МестоРождения", МестоРождения); + ЗаписьXML.ЗаписатьАтрибут("Гражданство", ГражданствоОКСМКодАльфа3); + ЗаписьXML.ЗаписатьКонецЭлемента(); // КонецЭлемента ЛичныеДанные. + + Если ДокументВид = "21" Тогда + ДокументНомерПредставление = ПредставлениеРеквизитаНомерПаспортаРФ(ДокументНомер); + ДокументКодПодразделенияПредставление = + ПредставлениеРеквизитаДокументКодПодразделения(ДокументКодПодразделения); + Иначе + ДокументНомерПредставление = ДокументНомер; + ДокументКодПодразделенияПредставление = ""; + КонецЕсли; + ДокументДатаВыдачиПредставление = ПредставлениеРеквизитаДокументДатаВыдачи(ДокументДатаВыдачи); + + ЗаписьXML.ЗаписатьНачалоЭлемента("УдЛичн"); + ЗаписьXML.ЗаписатьАтрибут("КодВидДок", ДокументВид); + ЗаписьXML.ЗаписатьАтрибут("СерНомДок", ДокументНомерПредставление); + ЗаписьXML.ЗаписатьАтрибут("ДатаДок", ДокументДатаВыдачиПредставление); + ЗаписьXML.ЗаписатьАтрибут("ВыдДок", ДокументКемВыдан); + ЗаписьXML.ЗаписатьАтрибут("КодВыдДок", ДокументКодПодразделенияПредставление); + ЗаписьXML.ЗаписатьКонецЭлемента(); // КонецЭлемента УдЛичн. + + Если Не ЭтоИндивидуальныйПредприниматель Тогда + ЗаписьXMLЭлемент(ЗаписьXML, "Должность", Должность); + КонецЕсли; + + ЗаписьXMLЭлемент(ЗаписьXML, "ЭлектроннаяПочта", ЭлектроннаяПочта); + + Строки = СписокПрограмм.НайтиСтроки(Новый Структура("Ссылка", Объект.Программа)); + + ЗаписьXML.ЗаписатьНачалоЭлемента("Криптопровайдер"); + ЗаписьXMLЭлемент(ЗаписьXML, "ТипКриптопровайдера", XMLСтрока(Строки[0].ТипПрограммы)); + ЗаписьXMLЭлемент(ЗаписьXML, "ИмяКриптопровайдера", XMLСтрока(Строки[0].ИмяПрограммы)); + ЗаписьXML.ЗаписатьКонецЭлемента(); // КонецЭлемента Криптопровайдер. + + ЗаписьXML.ЗаписатьНачалоЭлемента("ЗапросНаСертификат"); + ЗаписьXML.ЗаписатьАтрибут("УдостоверяющийЦентр", "ООО ""НПЦ ""1С"""); // АПК:1297 Не локализуется (формат веб-сервиса). + ЗаписьXML.ЗаписатьТекст(ТекстФайлаЗапросаНаСертификат()); + ЗаписьXML.ЗаписатьКонецЭлемента(); // КонецЭлемента ЗапросНаСертификат. + + ЗаписьXML.ЗаписатьКонецЭлемента(); // КонецЭлемента ВладелецЭЦП. + ЗаписьXML.ЗаписатьКонецЭлемента(); // КонецЭлемента ВладельцыЭЦП. + + ЗаписьXMLЭлемент(ЗаписьXML, "ИННПартнера", ДокументыПартнерИНН); + Если Не ДокументыПартнерЭтоИП Тогда + ЗаписьXMLЭлемент(ЗаписьXML, "КПППартнера", ДокументыПартнерКПП); + КонецЕсли; + + ЗаписьXMLЭлемент(ЗаписьXML, "БилетПользователя", Билет); + + ЗаписьXML.ЗаписатьКонецЭлемента(); // КонецЭлемента Заявление. + + СтрокаXML = ЗаписьXML.Закрыть(); + + Возврат СтрокаXML; + +КонецФункции + +&НаСервере +Процедура ЗаписьXMLЭлемент(ЗаписьXML, ИмяЭлемента, Значение = Неопределено) + + Если Значение = Неопределено Тогда + Значение = ЭтотОбъект[ИмяЭлемента]; + КонецЕсли; + + ЗаписьXML.ЗаписатьНачалоЭлемента(ИмяЭлемента); + ЗаписьXML.ЗаписатьТекст(XMLСтрока(Значение)); + ЗаписьXML.ЗаписатьКонецЭлемента(); + +КонецПроцедуры + +&НаСервере +Процедура ЗаписьXMLАдрес(ЗаписьXML, ИмяЭлемента, АдресXML) + + Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда + Возврат; + КонецЕсли; + + МодульРаботаСАдресами = ОбщегоНазначения.ОбщийМодуль("РаботаСАдресами"); + + ДополнительныеПараметры = Новый Структура("НаименованиеВключаетСокращение", Истина); + АдресСтруктура = МодульРаботаСАдресами.СведенияОбАдресе(АдресXML, ДополнительныеПараметры); + + ПервыйКорпус = ?(АдресСтруктура.Корпуса.Количество() > 0, АдресСтруктура.Корпуса[0].Номер, ""); + ПервоеПомещение = ?(АдресСтруктура.Помещения.Количество() > 0, АдресСтруктура.Помещения[0].Номер, ""); + + УлицаПолностью = ПредставлениеЧастиАдреса(АдресСтруктура, + "Улица, + |ДополнительнаяТерритория, + |ЭлементДополнительнойТерритории"); + + ЗаписьXML.ЗаписатьНачалоЭлемента(ИмяЭлемента); + + ЗаписьXML.ЗаписатьАтрибут("КодРегион", АдресСтруктура.КодРегиона); + ЗаписьXML.ЗаписатьАтрибут("НаселПункт", НаселенныйПунктПолностью(АдресСтруктура)); + ЗаписьXML.ЗаписатьАтрибут("Улица", УлицаПолностью); + ЗаписьXML.ЗаписатьАтрибут("Дом", АдресСтруктура.Здание.Номер); + ЗаписьXML.ЗаписатьАтрибут("Корпус", ПервыйКорпус); + ЗаписьXML.ЗаписатьАтрибут("Кварт", ПервоеПомещение); + + ЗаписьXML.ЗаписатьКонецЭлемента(); + +КонецПроцедуры + +&НаСервере +Функция ТекстФайлаЗапросаНаСертификат() + + ТекстОшибки = НСтр("ru = 'Не удалось прочитать ранее созданный запрос на сертификат. + |Заявление не может быть отправлено. + |Удалите его и создайте новое.'"); + + Если Не ЗначениеЗаполнено(АдресЗапросаНаСертификат) Тогда + ВызватьИсключение ТекстОшибки; + КонецЕсли; + + ДвоичныеДанныеФайла = ПолучитьИзВременногоХранилища(АдресЗапросаНаСертификат); + Если ТипЗнч(ДвоичныеДанныеФайла) <> Тип("ДвоичныеДанные") Тогда + ВызватьИсключение ТекстОшибки; + КонецЕсли; + + ИмяВременногоФайла = ПолучитьИмяВременногоФайла(".p10"); + ДвоичныеДанныеФайла.Записать(ИмяВременногоФайла); + + ТекстовыйДокумент = Новый ТекстовыйДокумент; + ТекстовыйДокумент.Прочитать(ИмяВременногоФайла); + Текст = СокрЛП(ТекстовыйДокумент.ПолучитьТекст()); + + УдалитьФайлы(ИмяВременногоФайла); + + Если Не ЗначениеЗаполнено(Текст) Тогда + ВызватьИсключение ТекстОшибки; + КонецЕсли; + + Возврат Текст; + +КонецФункции + +&НаСервере +Функция ОписаниеПакетаXML(ИмяФайлаЗаявления) + + ЗаписьXML = Новый ЗаписьXML; + ЗаписьXML.УстановитьСтроку("windows-1251"); + ЗаписьXML.ЗаписатьОбъявлениеXML(); + + ЗаписьXML.ЗаписатьНачалоЭлемента("пакет"); + ЗаписьXML.ЗаписатьАтрибут("версияФормата", "1С:1.0"); + + ЗаписьXML.ЗаписатьАтрибут("версПрог", "1.0"); + ЗаписьXML.ЗаписатьАтрибут("типДокументооборота", "РегистрацияАбонентаЭДО"); + ЗаписьXML.ЗаписатьАтрибут("типТранзакции", "Регистрация"); + ЗаписьXML.ЗаписатьАтрибут("идентификаторДокументооборота", ИдентификаторДокументооборота); + + ЗаписьXML.ЗаписатьНачалоЭлемента("отправитель"); + ЗаписьXML.ЗаписатьАтрибут("типСубъекта", "абонент"); + ЗаписьXML.ЗаписатьКонецЭлемента(); + + ЗаписьXML.ЗаписатьНачалоЭлемента("получатель"); + ЗаписьXML.ЗаписатьАтрибут("идентификаторСубъекта", "КалугаАстрал"); + ЗаписьXML.ЗаписатьАтрибут("типСубъекта", "спецоператор"); + ЗаписьXML.ЗаписатьКонецЭлемента(); + + ЗаписьXML.ЗаписатьНачалоЭлемента("документ"); + ЗаписьXML.ЗаписатьАтрибут("идентификаторДокумента", НовыйСжатыйУникальныйИдентификатор()); + ЗаписьXML.ЗаписатьАтрибут("типДокумента", "Заявление"); + ЗаписьXML.ЗаписатьАтрибут("типСодержимого", "xml"); + ЗаписьXML.ЗаписатьАтрибут("сжат", "false"); + ЗаписьXML.ЗаписатьАтрибут("зашифрован", "false"); + + ЗаписьXML.ЗаписатьНачалоЭлемента("содержимое"); + ЗаписьXML.ЗаписатьАтрибут("имяФайла", ИмяФайлаЗаявления); + ЗаписьXML.ЗаписатьКонецЭлемента(); + + ЗаписьXML.ЗаписатьКонецЭлемента(); // КонецЭлемента документ. + + ЗаписьXML.ЗаписатьКонецЭлемента(); // КонецЭлемента пакет. + + СтрокаXML = ЗаписьXML.Закрыть(); + + Возврат СтрокаXML; + +КонецФункции + &НаСервереБезКонтекста Функция ЗначениеУзлаXML(ДокументDOM, НазваниеУзла, ЗначениеПоУмолчанию = "") @@ -3142,1380 +3234,9 @@ КонецФункции -&НаКлиенте -Процедура УстановитьСертификат(Оповещение) - - Если СписокПрограмм.Количество() = 0 Тогда - ЗаполнитьСписокПрограмм(); - КонецЕсли; - - ДатаУстановкиСертификата = ОбщегоНазначенияКлиент.ДатаСеанса(); - - Контекст = Новый Структура("Оповещение", Оповещение); - - ЭлектроннаяПодписьСлужебныйКлиент.СоздатьМенеджерКриптографии(Новый ОписаниеОповещения( - "УстановитьСертификатПослеСозданияМенеджераКриптографии", ЭтотОбъект, Контекст), - "", Неопределено, , Истина); - -КонецПроцедуры +#КонецОбласти -// Продолжение процедуры УстановитьСертификат. -&НаКлиенте -Процедура УстановитьСертификатПослеСозданияМенеджераКриптографии(Менеджер, Контекст) Экспорт - - Если ТипЗнч(Менеджер) <> Тип("МенеджерКриптографии") Тогда - ЭлектроннаяПодписьСлужебныйКлиент.ПоказатьОшибкуОбращенияКПрограмме( - НСтр("ru = 'Установка сертификата на компьютер'"), "", Менеджер, - Новый Структура, Новый Структура("ПоказатьИнструкцию", Истина)); - - ОшибкаУстановкиСертификата = Менеджер.ОписаниеОшибки; - ВыполнитьОбработкуОповещения(Контекст.Оповещение, Ложь); - Возврат; - КонецЕсли; - - Контекст.Вставить("МенеджерКриптографии", Менеджер); - - Если Криптография <> Неопределено Тогда - УстановитьСертификатПослеСозданияОбъектаКриптографии(Истина, Контекст); - Иначе - СоздатьОбъектКриптографии(Новый ОписаниеОповещения( - "УстановитьСертификатПослеСозданияОбъектаКриптографии", ЭтотОбъект, Контекст), - НСтр("ru = 'Для установки сертификата на компьютер требуется - |установить расширение для веб-клиента 1С:Предприятия.'"), - НСтр("ru = 'Для установки сертификата на компьютер требуется - |установить внешнюю компоненту.'")); - КонецЕсли; - -КонецПроцедуры - -// Продолжение процедуры УстановитьСертификат. -&НаКлиенте -Процедура УстановитьСертификатПослеСозданияОбъектаКриптографии(Результат, Контекст) Экспорт - - Если Результат <> Истина Тогда - ВыполнитьОбработкуОповещения(Контекст.Оповещение, Ложь); - - НачатьПодключениеРасширенияРаботыСФайлами(Новый ОписаниеОповещения( - "УстановитьСертификатПриОшибкеСозданияОбъектаКриптографииПослеПодключенияРасширенияРаботыСФайлами", ЭтотОбъект)); - Иначе - УстановитьСертификатПослеУспехаСозданияОбъектаКриптографии(Контекст); - КонецЕсли; - -КонецПроцедуры - -// Продолжение процедуры УстановитьСертификат. -&НаКлиенте -Процедура УстановитьСертификатПриОшибкеСозданияОбъектаКриптографииПослеПодключенияРасширенияРаботыСФайлами(Подключено, Контекст) Экспорт - - Если Не Подключено Тогда - ОшибкаУстановкиСертификата = НСтр("ru = 'Не установлено расширение для работы с файлами.'"); - Иначе - НачатьПодключениеРасширенияРаботыСКриптографией(Новый ОписаниеОповещения( - "УстановитьСертификатПриОшибкеСозданияОбъектаКриптографииПослеПодключенияРасширенияРаботыСКриптографией", ЭтотОбъект)); - КонецЕсли; - -КонецПроцедуры - -// Продолжение процедуры УстановитьСертификат. -&НаКлиенте -Процедура УстановитьСертификатПриОшибкеСозданияОбъектаКриптографииПослеПодключенияРасширенияРаботыСКриптографией(Подключено, Контекст) Экспорт - - Если Не Подключено Тогда - ОшибкаУстановкиСертификата = НСтр("ru = 'Не установлено расширение для работы с криптографией.'"); - Иначе - ОшибкаУстановкиСертификата = НСтр("ru = 'Не установлена внешняя компонента.'"); - КонецЕсли; - -КонецПроцедуры - -// Продолжение процедуры УстановитьСертификат. -&НаКлиенте -Процедура УстановитьСертификатПослеУспехаСозданияОбъектаКриптографии(Контекст) - - ПолучитьКаталогВременныхФайловКомпоненты(Новый ОписаниеОповещения( - "УстановитьСертификатПослеПолученияКаталогаВременныхФайловКомпоненты", ЭтотОбъект, Контекст)); - -КонецПроцедуры - -// Продолжение процедуры УстановитьСертификат. -&НаКлиенте -Процедура УстановитьСертификатПослеПолученияКаталогаВременныхФайловКомпоненты(Каталог, Контекст) Экспорт - - Контекст.Вставить("ВременныйКаталог", Каталог + НовыйСжатыйУникальныйИдентификатор()); - - Контекст.ВременныйКаталог = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути( - Контекст.ВременныйКаталог); - - Контекст.Вставить("ИмяФайлаСертификата", "my.cer"); - Контекст.Вставить("ИмяФайлаКорневогоСертификата", "root.cer"); - - Контекст.Вставить("ПолучаемыеФайлы", Новый Массив); - Контекст.ПолучаемыеФайлы.Добавить(Новый ОписаниеПередаваемогоФайла( - Контекст.ИмяФайлаСертификата, АдресСертификата)); - - Контекст.ПолучаемыеФайлы.Добавить(Новый ОписаниеПередаваемогоФайла( - Контекст.ИмяФайлаКорневогоСертификата, АдресКорневогоСертификата)); - - Вызовы = Новый Массив; - ДобавитьВызов(Вызовы, "НачатьПолучениеФайлов", Контекст.ПолучаемыеФайлы, Контекст.ВременныйКаталог, Ложь); - ДобавитьВызов(Вызовы, "НачатьУдалениеФайлов", Контекст.ВременныйКаталог, Неопределено); - - НачатьЗапросРазрешенияПользователя(Новый ОписаниеОповещения( - "УстановитьСертификатПослеПолученияРазрешений", ЭтотОбъект, Контекст), Вызовы); - -КонецПроцедуры - -// Продолжение процедуры УстановитьСертификат. -&НаКлиенте -Процедура УстановитьСертификатПослеПолученияРазрешений(РазрешенияПолучены, Контекст) Экспорт - - Если Не РазрешенияПолучены Тогда - ОшибкаУстановкиСертификата = - НСтр("ru = 'Сохранение сертификатов во временную папку отменено пользователем.'"); - ВыполнитьОбработкуОповещения(Контекст.Оповещение, Ложь); - Возврат; - КонецЕсли; - - НачатьСозданиеКаталога(Новый ОписаниеОповещения( - "УстановитьСертификатПослеСозданияКаталога", ЭтотОбъект, Контекст), Контекст.ВременныйКаталог); - -КонецПроцедуры - -// Продолжение процедуры УстановитьСертификат. -&НаКлиенте -Процедура УстановитьСертификатПослеСозданияКаталога(РазрешенияПолучены, Контекст) Экспорт - - ПараметрыСохранения = ФайловаяСистемаКлиент.ПараметрыСохраненияФайлов(); - ПараметрыСохранения.Диалог.Каталог = Контекст.ВременныйКаталог; - ПараметрыСохранения.Интерактивно = Ложь; - ФайловаяСистемаКлиент.СохранитьФайлы( - Новый ОписаниеОповещения("УстановитьСертификатПослеПолученияФайлов", ЭтотОбъект, Контекст), - Контекст.ПолучаемыеФайлы, ПараметрыСохранения); - -КонецПроцедуры - -// Продолжение процедуры УстановитьСертификат. -&НаКлиенте -Процедура УстановитьСертификатПослеПолученияФайлов(ПолученныеФайлы, Контекст) Экспорт - - Если ПолученныеФайлы = Неопределено - Или ПолученныеФайлы.Количество() <> 2 Тогда - - ОшибкаУстановкиСертификата = НСтр("ru = 'Сертификаты не были сохранены во временную папку.'"); - УстановитьСертификатУдалитьВременныйКаталогИЗавершить(Ложь, Контекст); - Возврат; - КонецЕсли; - - ПроверитьСуществованиеКонтейнераКлючей(Новый ОписаниеОповещения( - "УстановитьСертификатПослеПроверкиСуществованияКонтейнераКлючей", ЭтотОбъект, Контекст), - КонтейнерКлючаПуть, КонтейнерКлючаИмя); - -КонецПроцедуры - -// Продолжение процедуры УстановитьСертификат. -&НаКлиенте -Процедура УстановитьСертификатПослеПроверкиСуществованияКонтейнераКлючей(Существует, Контекст) Экспорт - - Если Не Существует Тогда - ОшибкаУстановкиСертификата = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не удалось найти контейнер ключа на компьютере. - |Имя контейнера: ""%1"". - |Путь к контейнеру: ""%2"".'"), - КонтейнерКлючаИмя, - КонтейнерКлючаПуть); - - Контекст.Вставить("ОшибкаПоискаКонтейнера", ОшибкаУстановкиСертификата); - Иначе - ОшибкаУстановкиСертификата = ""; - КонецЕсли; - - АктивноеОкно().Активизировать(); - - Криптография.НачатьВызовУстановитьСертификатВКонтейнерИХранилище(Новый ОписаниеОповещения( - "УстановитьСертификатПослеВызоваУстановитьСертификатВКонтейнерИХранилище", ЭтотОбъект, Контекст, - "УстановитьСертификатПослеОшибкиВызоваУстановитьСертификатВКонтейнерИХранилище", ЭтотОбъект), - Контекст.ВременныйКаталог + Контекст.ИмяФайлаСертификата, КонтейнерКлючаПуть); - -КонецПроцедуры - -// Продолжение процедуры УстановитьСертификат. -&НаКлиенте -Процедура УстановитьСертификатПослеОшибкиВызоваУстановитьСертификатВКонтейнерИХранилище(ИнформацияОбОшибке, СтандартнаяОбработка, Контекст) Экспорт - - СтандартнаяОбработка = Ложь; - Криптография = Неопределено; - - Если Не ВозможноПродолжениеПослеОперацииКомпоненты() Тогда - Возврат; - КонецЕсли; - - ОшибкаУстановкиСертификата = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не удалось установить личный сертификат в контейнер ключей и хранилище ОС по причине: - |%1'"), - ПредставлениеОшибкиДляПользователя(ИнформацияОбОшибке)); - - Если Контекст.Свойство("ОшибкаПоискаКонтейнера") Тогда - ОшибкаУстановкиСертификата = ОшибкаУстановкиСертификата - + Символы.ПС + Символы.ПС + Контекст.ОшибкаПоискаКонтейнера; - КонецЕсли; - - Контекст.Вставить("РезультатПослеВызоваУстановитьСертификатВКонтейнерИХранилище", Неопределено); - УстановитьСертификатПослеВызоваУстановитьСертификатВКонтейнерИХранилищеПослеПолученияСписокОшибок(Неопределено, Контекст); - -КонецПроцедуры - -// Продолжение процедуры УстановитьСертификат. -&НаКлиенте -Процедура УстановитьСертификатПослеВызоваУстановитьСертификатВКонтейнерИХранилище(Результат, ПараметрыВызова, Контекст) Экспорт - - Если Не ВозможноПродолжениеПослеОперацииКомпоненты() Тогда - Возврат; - КонецЕсли; - - Контекст.Вставить("РезультатПослеВызоваУстановитьСертификатВКонтейнерИХранилище", Результат); - - Криптография.НачатьПолучениеСписокОшибок(Новый ОписаниеОповещения( - "УстановитьСертификатПослеВызоваУстановитьСертификатВКонтейнерИХранилищеПослеПолученияСписокОшибок", ЭтотОбъект, Контекст)); - -КонецПроцедуры - -// Продолжение процедуры УстановитьСертификат. -&НаКлиенте -Процедура УстановитьСертификатПослеВызоваУстановитьСертификатВКонтейнерИХранилищеПослеПолученияСписокОшибок(СписокОшибок, Контекст) Экспорт - - Если Не ВозможноПродолжениеПослеОперацииКомпоненты() Тогда - Возврат; - КонецЕсли; - - Если ЗначениеЗаполнено(СписокОшибок) Тогда - УстановитьСертификатПослеОшибкиВызоваУстановитьСертификатВКонтейнерИХранилище(СписокОшибок, Ложь, Контекст); - Возврат; - КонецЕсли; - - Результат = Контекст.РезультатПослеВызоваУстановитьСертификатВКонтейнерИХранилище; - - АктивноеОкно().Активизировать(); - - Если Результат <> Истина И Не ЗначениеЗаполнено(ОшибкаУстановкиСертификата) Тогда - ОшибкаУстановкиСертификата = НСтр("ru = 'Не удалось установить личный сертификат в контейнер ключей и хранилище ОС.'"); - КонецЕсли; - - ЭлектроннаяПодписьСлужебныйКлиент.ПолучитьСертификатПоОтпечатку(Новый ОписаниеОповещения( - "УстановитьСертификатПослеПоискаСертификата", ЭтотОбъект, Контекст), - Объект.Отпечаток, - ТипХранилищаСертификатовКриптографии.ПерсональныеСертификаты, - Неопределено, - Контекст.МенеджерКриптографии); - -КонецПроцедуры - -// Продолжение процедуры УстановитьСертификат. -&НаКлиенте -Процедура УстановитьСертификатПослеПоискаСертификата(Результат, Контекст) Экспорт - - Если ТипЗнч(Результат) <> Тип("СертификатКриптографии") Тогда - Если Результат.Свойство("СертификатНеНайден") Тогда - ОшибкаПоиска = - НСтр("ru = 'Не удалось найти личный сертификат, установленный на компьютер.'"); - Иначе - ОшибкаПоиска = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не удалось найти личный сертификат, установленный на компьютер по причине: - |%1'"), - Результат.ОписаниеОшибки); - КонецЕсли; - ОшибкаУстановкиСертификата = СокрЛ(ОшибкаУстановкиСертификата + Символы.ПС + Символы.ПС) + ОшибкаПоиска; - УстановитьСертификатУдалитьВременныйКаталогИЗавершить(Ложь, Контекст); - Возврат; - КонецЕсли; - ОшибкаУстановкиСертификата = ""; - - Контекст.Вставить("СертификатКриптографии", Результат); - - АктивноеОкно().Активизировать(); - - Если Криптография <> Неопределено Тогда - УстановитьСертификатПослеПроверкиНаличияСертификат(Истина, Контекст); - Иначе - СоздатьОбъектКриптографии(Новый ОписаниеОповещения( - "УстановитьСертификатПослеПроверкиНаличияСертификат", ЭтотОбъект, Контекст), - НСтр("ru = 'Для установки сертификата на компьютер требуется - |установить расширение для веб-клиента 1С:Предприятия.'"), - НСтр("ru = 'Для установки сертификата на компьютер требуется - |установить внешнюю компоненту.'")); - КонецЕсли; - -КонецПроцедуры - -// Продолжение процедуры УстановитьСертификат. -&НаКлиенте -Процедура УстановитьСертификатПослеПроверкиНаличияСертификат(Результат, Контекст) Экспорт - - Если Результат <> Истина Тогда - УстановитьСертификатПослеВызоваИмпортироватьСертификатПослеПолученияСписокОшибок(Неопределено, Контекст); - Возврат; - КонецЕсли; - - Криптография.НачатьВызовИмпортироватьСертификат(Новый ОписаниеОповещения( - "УстановитьСертификатПослеВызоваИмпортироватьСертификат", ЭтотОбъект, Контекст, - "УстановитьСертификатПослеОшибкиВызоваИмпортироватьСертификат", ЭтотОбъект), - Контекст.ВременныйКаталог + Контекст.ИмяФайлаКорневогоСертификата, "ROOT"); - -КонецПроцедуры - -// Продолжение процедуры УстановитьСертификат. -&НаКлиенте -Процедура УстановитьСертификатПослеОшибкиВызоваИмпортироватьСертификат(ИнформацияОбОшибке, СтандартнаяОбработка, Контекст) Экспорт - - СтандартнаяОбработка = Ложь; - Криптография = Неопределено; - - Если Не ВозможноПродолжениеПослеОперацииКомпоненты() Тогда - Возврат; - КонецЕсли; - - ОшибкаУстановкиСертификата = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не удалось установить корневой сертификат в хранилище ОС по причине: - |%1'"), - ПредставлениеОшибкиДляПользователя(ИнформацияОбОшибке)); - - Контекст.Вставить("РезультатПослеВызоваИмпортироватьСертификат", Неопределено); - УстановитьСертификатПослеВызоваИмпортироватьСертификатПослеПолученияСписокОшибок(Неопределено, Контекст); - -КонецПроцедуры - -// Продолжение процедуры УстановитьСертификат. -&НаКлиенте -Процедура УстановитьСертификатПослеВызоваИмпортироватьСертификат(Результат, ПараметрыВызова, Контекст) Экспорт - - Если Не ВозможноПродолжениеПослеОперацииКомпоненты() Тогда - Возврат; - КонецЕсли; - - Контекст.Вставить("РезультатПослеВызоваИмпортироватьСертификат", Результат); - - Криптография.НачатьПолучениеСписокОшибок(Новый ОписаниеОповещения( - "УстановитьСертификатПослеВызоваИмпортироватьСертификатПослеПолученияСписокОшибок", ЭтотОбъект, Контекст)); - -КонецПроцедуры - -// Продолжение процедуры УстановитьСертификат. -&НаКлиенте -Процедура УстановитьСертификатПослеВызоваИмпортироватьСертификатПослеПолученияСписокОшибок(СписокОшибок, Контекст) Экспорт - - Если Не ВозможноПродолжениеПослеОперацииКомпоненты() Тогда - Возврат; - КонецЕсли; - - Если ЗначениеЗаполнено(СписокОшибок) Тогда - УстановитьСертификатПослеОшибкиВызоваИмпортироватьСертификат(СписокОшибок, Ложь, Контекст); - Возврат; - КонецЕсли; - - Результат = Контекст.РезультатПослеВызоваИмпортироватьСертификат; - - АктивноеОкно().Активизировать(); - - Если Результат <> Истина И Не ЗначениеЗаполнено(ОшибкаУстановкиСертификата) Тогда - ОшибкаУстановкиСертификата = НСтр("ru = 'Не удалось установить корневой сертификат в хранилище ОС.'"); - КонецЕсли; - - АктивноеОкно().Активизировать(); - - ЭлектроннаяПодписьСлужебныйКлиент.ПолучитьСертификатПоОтпечатку(Новый ОписаниеОповещения( - "УстановитьСертификатПослеПоискаКорневогоСертификата", ЭтотОбъект, Контекст), - ОтпечатокКорневогоСертификата, - ТипХранилищаСертификатовКриптографии.КорневыеСертификаты, - Неопределено, - Контекст.МенеджерКриптографии); - -КонецПроцедуры - -// Продолжение процедуры УстановитьСертификат. -&НаКлиенте -Процедура УстановитьСертификатПослеПоискаКорневогоСертификата(Результат, Контекст) Экспорт - - Если ТипЗнч(Результат) <> Тип("СертификатКриптографии") Тогда - Если Результат.Свойство("СертификатНеНайден") Тогда - ОшибкаПоиска = - НСтр("ru = 'Не удалось найти корневой сертификат, установленный на компьютер.'"); - Иначе - ОшибкаПоиска = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не удалось найти корневой сертификат, установленный на компьютер по причине: - |%1'"), - Результат.ОписаниеОшибки); - КонецЕсли; - ОшибкаУстановкиСертификата = СокрЛ(ОшибкаУстановкиСертификата + Символы.ПС + Символы.ПС) + ОшибкаПоиска; - УстановитьСертификатУдалитьВременныйКаталогИЗавершить(Ложь, Контекст); - Возврат; - КонецЕсли; - ОшибкаУстановкиСертификата = ""; - - УстановитьСертификатУдалитьВременныйКаталогИЗавершить( - Не ЗначениеЗаполнено(ОшибкаУстановкиСертификата), Контекст); - -КонецПроцедуры - -// Продолжение процедуры УстановитьСертификат. -&НаКлиенте -Процедура УстановитьСертификатУдалитьВременныйКаталогИЗавершить(Результат, Контекст) - - Контекст.Вставить("Результат", Результат); - - НачатьУдалениеФайлов(Новый ОписаниеОповещения( - "УстановитьСертификатПослеУдаленияВременногоКаталога", ЭтотОбъект, Контекст), - Контекст.ВременныйКаталог); - -КонецПроцедуры - -// Продолжение процедуры УстановитьСертификат. -&НаКлиенте -Процедура УстановитьСертификатПослеУдаленияВременногоКаталога(Контекст) Экспорт - - ВыполнитьОбработкуОповещения(Контекст.Оповещение, Контекст.Результат); - -КонецПроцедуры - -&НаКлиентеНаСервереБезКонтекста -Процедура ДобавитьВызов(Вызовы, Метод, П1, П2, П3 = Неопределено, П4 = Неопределено, П5 = Неопределено) - - Вызов = Новый Массив; - Вызов.Добавить(Метод); - Вызов.Добавить(П1); - Вызов.Добавить(П2); - Вызов.Добавить(П3); - Вызов.Добавить(П4); - Вызов.Добавить(П5); - - Вызовы.Добавить(Вызов); - -КонецПроцедуры - -// Обработка ввода адреса через подсистему КонтактнаяИнформация. - -&НаКлиенте -Процедура ПредставлениеАдресаНачалоВыбора(Форма, Элемент, ДанныеВыбора, СтандартнаяОбработка, ИмяРеквизита, ЗаголовокФормы) - - Если Не ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда - Возврат; - КонецЕсли; - - МодульУправлениеКонтактнойИнформациейКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль( - "УправлениеКонтактнойИнформациейКлиент"); - - ВидКонтактнойИнформации.Наименование = ЗаголовокФормы; - ПараметрыФормы = МодульУправлениеКонтактнойИнформациейКлиент.ПараметрыФормыКонтактнойИнформации( - ВидКонтактнойИнформации, ЭтотОбъект[ИмяРеквизита + "XML"], ЭтотОбъект[ИмяРеквизита]); - - МодульУправлениеКонтактнойИнформациейКлиент.ОткрытьФормуКонтактнойИнформации(ПараметрыФормы, Элемент); - -КонецПроцедуры - -&НаКлиенте -Процедура ПредставлениеАдресаОчистка(Форма, Элемент, СтандартнаяОбработка, ИмяРеквизита) - - Форма[ИмяРеквизита + "XML"] = ""; - Форма[ИмяРеквизита] = ""; - - РеквизитыПроверкиАдреса[ИмяРеквизита] = Истина; - ПодключитьОбработчикОжидания("ПроверитьАдресОбработчикОжидания", 0.1, Истина); - -КонецПроцедуры - -&НаКлиенте -Процедура ПредставлениеАдресаОбработкаВыбора(Форма, Элемент, ВыбранноеЗначение, СтандартнаяОбработка, ИмяРеквизита) - - СтандартнаяОбработка = Ложь; - Если ТипЗнч(ВыбранноеЗначение) <> Тип("Структура") Тогда - // Данные не изменены. - Возврат; - КонецЕсли; - - Форма[ИмяРеквизита + "XML"] = ВыбранноеЗначение.КонтактнаяИнформация; - Форма[ИмяРеквизита] = ВыбранноеЗначение.Представление; - - РеквизитыПроверкиАдреса[ИмяРеквизита] = Истина; - ПодключитьОбработчикОжидания("ПроверитьАдресОбработчикОжидания", 0.1, Истина); - -КонецПроцедуры - -// Обработка ввода телефона через подсистему КонтактнаяИнформация. - -&НаКлиенте -Процедура ПредставлениеТелефонаНачалоВыбора(Форма, Элемент, ДанныеВыбора, СтандартнаяОбработка, ИмяРеквизита, ЗаголовокФормы) - - Если Не ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда - Возврат; - КонецЕсли; - - МодульУправлениеКонтактнойИнформациейКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль( - "УправлениеКонтактнойИнформациейКлиент"); - - ПараметрыФормы = МодульУправлениеКонтактнойИнформациейКлиент.ПараметрыФормыКонтактнойИнформации( - ВидКонтактнойИнформацииТелефон, ЭтотОбъект[ИмяРеквизита + "XML"], ЭтотОбъект[ИмяРеквизита]); - - ПараметрыФормы.Вставить("Заголовок", ЗаголовокФормы); - - МодульУправлениеКонтактнойИнформациейКлиент.ОткрытьФормуКонтактнойИнформации(ПараметрыФормы, Элемент); - -КонецПроцедуры - -&НаКлиенте -Процедура ПредставлениеТелефонаОчистка(Форма, Элемент, СтандартнаяОбработка, ИмяРеквизита) - - Форма[ИмяРеквизита + "XML"] = ""; - Форма[ИмяРеквизита] = ""; - -КонецПроцедуры - -&НаКлиенте -Процедура ПредставлениеТелефонаОбработкаВыбора(Форма, Элемент, ВыбранноеЗначение, СтандартнаяОбработка, ИмяРеквизита) - - СтандартнаяОбработка = Ложь; - Если ТипЗнч(ВыбранноеЗначение) <> Тип("Структура") Тогда - // Данные не изменены. - Возврат; - КонецЕсли; - - Форма[ИмяРеквизита + "XML"] = ВыбранноеЗначение.КонтактнаяИнформация; - Форма[ИмяРеквизита] = ВыбранноеЗначение.Представление; - -КонецПроцедуры - - -&НаСервереБезКонтекста -Функция ИмяРегионаРФПоРекомендациямДляСКПЭП(КодРегиона) - - // Методические рекомендации по составу квалифицированного сертификата ключа - // проверки электронной подписи (Версия 1.4). - // - // Приложение 2. Формат названия субъекта федерации. - // Из раздела "Справочник кодов регионов". - - ИменаВсехРегионовРФ = Обработки.ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата.ПолучитьМакет( - "ИменаРегионовРФ"); - - Строка = ИменаВсехРегионовРФ.ПолучитьСтроку(Число(КодРегиона)); - - Если Не СтрНачинаетсяС(Строка, КодРегиона + " ") Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Регион РФ с кодом ""%1"" не существует.'"), - КодРегиона); - КонецЕсли; - - Строка = СокрЛП(Сред(Строка, 4)); - - Если Не ЗначениеЗаполнено(Строка) Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Для региона РФ с кодом ""%1"" имя, рекомендованное для СКПЭП, еще не назначено.'"), - КодРегиона); - КонецЕсли; - - Возврат Строка; - -КонецФункции - -&НаКлиентеНаСервереБезКонтекста -Функция ПоставляемоеПредставлениеПрограммы(СписокПрограмм, Программа) - - Если ТипЗнч(Программа) = Тип("Строка") Тогда - Строки = СписокПрограмм.НайтиСтроки(Новый Структура("Идентификатор", Программа)); - Иначе - Строки = СписокПрограмм.НайтиСтроки(Новый Структура("Ссылка", Программа)); - КонецЕсли; - - Возврат Строки[0].Представление; - -КонецФункции - -&НаСервере -Процедура ЗагрузитьЗаявление() - - ЗаблокироватьДанныеДляРедактирования(Параметры.СертификатСсылка, , УникальныйИдентификатор); - ТекущийОбъект = Параметры.СертификатСсылка.ПолучитьОбъект(); - ЗначениеВРеквизитФормы(ТекущийОбъект, "Объект"); - - ПоследнееСостояниеЗаявления = Объект.СостояниеЗаявления; - - Содержание = ТекущийОбъект.СодержаниеЗаявления.Получить(); - Если ТипЗнч(Содержание) = Тип("Структура") Тогда - ЗаполнитьЗначенияСвойств(ЭтотОбъект, Содержание); - КонецЕсли; - - Если Содержание.Свойство("ЗапросНаСертификат") - И ТипЗнч(Содержание.ЗапросНаСертификат) = Тип("ДвоичныеДанные") Тогда - - АдресЗапросаНаСертификат = ПоместитьВоВременноеХранилище(Содержание.ЗапросНаСертификат, УникальныйИдентификатор); - КонецЕсли; - - Если Содержание.Свойство("Сертификат") - И ТипЗнч(Содержание.Сертификат) = Тип("ДвоичныеДанные") Тогда - - АдресСертификата = ПоместитьВоВременноеХранилище(Содержание.Сертификат, УникальныйИдентификатор); - КонецЕсли; - - Если Содержание.Свойство("КорневойСертификат") - И ТипЗнч(Содержание.КорневойСертификат) = Тип("ДвоичныеДанные") Тогда - - АдресКорневогоСертификата = ПоместитьВоВременноеХранилище(Содержание.КорневойСертификат, УникальныйИдентификатор); - КонецЕсли; - - ПодтверждениеСоглашения = Истина; - Элементы.ПодтверждениеСоглашения.ТолькоПросмотр = Истина; - Элементы.ФормаНапечататьСоглашение.Видимость = Ложь; - Элементы.ФормаДалее.Доступность = Истина; - - Если ТекущийОбъект.СостояниеЗаявления = Перечисления.СостоянияЗаявленияНаВыпускСертификата.НеПодготовлено Тогда - ПерейтиНаСтраницуПодготовкаЗапросаНаСертификатНаСервереПриЗагрузке(); - - ИначеЕсли ТекущийОбъект.СостояниеЗаявления = Перечисления.СостоянияЗаявленияНаВыпускСертификата.Подготовлено Тогда - ПерейтиНаСтраницуОтправкаЗаявленияНаСервереПриЗагрузке(); - - ИначеЕсли ТекущийОбъект.СостояниеЗаявления = Перечисления.СостоянияЗаявленияНаВыпускСертификата.Отправлено Тогда - ПерейтиНаСтраницуОжиданиеОбработкиЗаявленияНаСервереПриЗагрузке(); - - ИначеЕсли ТекущийОбъект.СостояниеЗаявления = Перечисления.СостоянияЗаявленияНаВыпускСертификата.ИсполненоСертификатНеУстановлен Тогда - ПерейтиНаСтраницуУстановкаСертификатаНаСервереПриЗагрузке(); - - ИначеЕсли ТекущийОбъект.СостояниеЗаявления = Перечисления.СостоянияЗаявленияНаВыпускСертификата.Отклонено Тогда - АвтоЗаголовок = Ложь; - Заголовок = НСтр("ru = 'Заявление, по которому не удалось получить сертификат'"); - Элементы.ФормаДалее.Видимость = Ложь; - Элементы.ФормаЗакрыть.Заголовок = НСтр("ru = 'Закрыть'"); - ЗаполнитьРеквизитыЗаявления(Истина); - Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаОбработанноеЗаявление; - Элементы.СтраницыПрогресса.ТекущаяСтраница = Элементы.СтраницаПрогрессаОбработанноеЗаявление; - - ИначеЕсли ТекущийОбъект.СостояниеЗаявления = Перечисления.СостоянияЗаявленияНаВыпускСертификата.Исполнено Тогда - АвтоЗаголовок = Ложь; - Заголовок = НСтр("ru = 'Заявление, по которому был получен сертификат'"); - Элементы.ФормаВыгрузитьКорневойСертификат.Видимость = Истина; - Элементы.ФормаВыгрузитьЗапросНаСертификат.Видимость = Истина; - Элементы.ФормаДалее.Видимость = Ложь; - Элементы.ФормаЗакрыть.Заголовок = НСтр("ru = 'Закрыть'"); - Элементы.ФормаЗакрыть.КнопкаПоУмолчанию = Истина; - ЗаполнитьРеквизитыЗаявления(Истина); - Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаОбработанноеЗаявление; - Элементы.СтраницыПрогресса.ТекущаяСтраница = Элементы.СтраницаПрогрессаОбработанноеЗаявление; - КонецЕсли; - -КонецПроцедуры - - -&НаСервере -Процедура ЗаполнитьРеквизитыЗаявления(Все = Ложь) - - РеквизитыЗаявления.Очистить(); - - // Заполнение сведений о программе. - Если Все Тогда - Строка = РеквизитыЗаявления.Добавить(); - Строка.Реквизит = НСтр("ru = 'Программа электронной подписи'"); - Строка.Значение = ПредставлениеПрограммы; - КонецЕсли; - - // Заполнение сведений об организации. - ЗаполнитьРеквизит(НСтр("ru = 'Сведения об организации'"),, Истина); - - ЗаполнитьРеквизит("НаименованиеСокращенное"); - ЗаполнитьРеквизит("НаименованиеПолное"); - ЗаполнитьРеквизит("ИНН"); - - Если Не ЭтоИндивидуальныйПредприниматель Тогда - ЗаполнитьРеквизит("КПП"); - КонецЕсли; - - Если ЭтоИндивидуальныйПредприниматель Тогда - Элементы.ОГРН.Заголовок = НСтр("ru = 'ОГРНИП'"); - Иначе - Элементы.ОГРН.Заголовок = НСтр("ru = 'ОГРН'"); - КонецЕсли; - - ЗаполнитьРеквизит("ОГРН"); - ЗаполнитьРеквизит("РасчетныйСчет"); - ЗаполнитьРеквизит("БИК"); - ЗаполнитьРеквизит("КорреспондентскийСчет"); - ЗаполнитьРеквизит("Телефон", Телефон); - ЗаполнитьРеквизит("ЮридическийАдрес", ЮридическийАдрес); - ЗаполнитьРеквизит("ФактическийАдрес", ФактическийАдрес); - - // Заполнение сведений о владельце сертификата. - ЗаполнитьРеквизит(НСтр("ru = 'Сведения о владельце сертификата'"),, Истина); - - ЗаполнитьРеквизит("Фамилия"); - ЗаполнитьРеквизит("Имя"); - ЗаполнитьРеквизит("Отчество"); - ЗаполнитьРеквизит("ДатаРождения", ПредставлениеРеквизитаДатаРождения(ДатаРождения)); - ЗаполнитьРеквизит("Пол", ПредставлениеРеквизитаПол(Пол)); - ЗаполнитьРеквизит("МестоРождения"); - ЗаполнитьРеквизит("Гражданство", ГражданствоПредставление); - ЗаполнитьРеквизит("СтраховойНомерПФР", ПредставлениеРеквизитаСтраховойНомерПФР(СтраховойНомерПФР)); - - Если Не ЭтоИндивидуальныйПредприниматель Тогда - ЗаполнитьРеквизит("Должность"); - ЗаполнитьРеквизит("Подразделение"); - КонецЕсли; - - Строка = РеквизитыЗаявления.Добавить(); - Строка.Реквизит = НСтр("ru = 'Документ, удостоверяющий личность'"); - Строка.Значение = Элементы.ДокументВид.СписокВыбора.НайтиПоЗначению(ДокументВид).Представление; - - Строка = РеквизитыЗаявления.Добавить(); - Если ДокументВид = "21" Тогда - Строка.Реквизит = НСтр("ru = 'Серия и номер'"); - Строка.Значение = ПредставлениеРеквизитаНомерПаспортаРФ(ДокументНомер); - Иначе - Строка.Реквизит = НСтр("ru = 'Номер'"); - Строка.Значение = ДокументНомер; - КонецЕсли; - - ЗаполнитьРеквизит("ДокументКемВыдан"); - Если ДокументВид = "21" Тогда - ЗаполнитьРеквизит("ДокументКодПодразделения", - ПредставлениеРеквизитаДокументКодПодразделения(ДокументКодПодразделения)); - КонецЕсли; - ЗаполнитьРеквизит("ДокументДатаВыдачи", ПредставлениеРеквизитаДокументДатаВыдачи(ДокументДатаВыдачи)); - - ЗаполнитьРеквизит("ЭлектроннаяПочта"); - - Если Не Все Тогда - Возврат; - КонецЕсли; - - Если Не ЭтоИндивидуальныйПредприниматель Тогда - // Заполнение сведений о печатных документах. - ЗаполнитьРеквизит(НСтр("ru = 'Сведения о руководителе'"),, Истина); - - Строка = РеквизитыЗаявления.Добавить(); - Строка.Реквизит = НСтр("ru = 'ФИО руководителя'"); - Строка.Значение = ДокументыРуководитель; - - Строка = РеквизитыЗаявления.Добавить(); - Строка.Реквизит = НСтр("ru = 'Должность руководителя'"); - Строка.Значение = ДокументыРуководительДолжность; - - Строка = РеквизитыЗаявления.Добавить(); - Строка.Реквизит = НСтр("ru = 'Основание действий руководителя'"); - Строка.Значение = ДокументыРуководительОснование; - КонецЕсли; - - // Заполнение сведений о печатных документах. - ЗаполнитьРеквизит(НСтр("ru = 'Сведения об обслуживающей организации'"),, Истина); - - Строка = РеквизитыЗаявления.Добавить(); - Строка.Реквизит = НСтр("ru = 'Наименование партнера'"); - Строка.Значение = ДокументыПартнер; - - Строка = РеквизитыЗаявления.Добавить(); - Строка.Реквизит = НСтр("ru = 'ИНН партнера'"); - Строка.Значение = ДокументыПартнерИНН; - - Если Не ДокументыПартнерЭтоИП Тогда - Строка = РеквизитыЗаявления.Добавить(); - Строка.Реквизит = НСтр("ru = 'КПП партнера'"); - Строка.Значение = ДокументыПартнерКПП; - КонецЕсли; - -КонецПроцедуры - -&НаКлиентеНаСервереБезКонтекста -Функция ПредставлениеРеквизитаСтраховойНомерПФР(СтраховойНомерПФР) - - Возврат Сред(СтраховойНомерПФР, 1, 3) + "-" + Сред(СтраховойНомерПФР, 4, 3) - + "-" + Сред(СтраховойНомерПФР, 7, 3) + " " + Сред(СтраховойНомерПФР, 10, 2); - -КонецФункции - -&НаКлиентеНаСервереБезКонтекста -Функция ПредставлениеРеквизитаДатаРождения(ДатаРождения) - - Возврат Формат(ДатаРождения, "ДФ=dd.MM.yyyy"); // АПК:335 Не локализуется (формат веб-сервиса). - -КонецФункции - -&НаКлиентеНаСервереБезКонтекста -Функция ПредставлениеРеквизитаПол(Пол) - - Если Пол = "Мужской" Тогда - Возврат НСтр("ru = 'Мужской'"); - - ИначеЕсли Пол = "Женский" Тогда - Возврат НСтр("ru = 'Женский'"); - КонецЕсли; - - Возврат ""; - -КонецФункции - -&НаКлиентеНаСервереБезКонтекста -Функция ПредставлениеРеквизитаДокументДатаВыдачи(ДокументДатаВыдачи) - - Возврат Формат(ДокументДатаВыдачи, "ДФ=dd.MM.yyyy"); // АПК:335 Не локализуется (формат веб-сервиса). - -КонецФункции - -&НаКлиентеНаСервереБезКонтекста -Функция ПредставлениеРеквизитаНомерПаспортаРФ(НомерПаспортаРФ) - - Возврат Лев(НомерПаспортаРФ, 2) + " " + Сред(НомерПаспортаРФ, 3, 2) + " " + Прав(НомерПаспортаРФ, 6); - -КонецФункции - -&НаКлиентеНаСервереБезКонтекста -Функция ПредставлениеРеквизитаДокументКодПодразделения(КодПодразделения) - - Если Не ЗначениеЗаполнено(КодПодразделения) Тогда - Возврат ""; - КонецЕсли; - - Возврат Лев(КодПодразделения, 3) + "-" + Сред(КодПодразделения, 4); - -КонецФункции - -&НаСервере -Процедура ЗаполнитьРеквизит(ИмяРеквизита, Значение = Неопределено, ЭтоГруппаРеквизитов = Ложь) - - Строка = РеквизитыЗаявления.Добавить(); - - Если ЭтоГруппаРеквизитов Тогда - Строка.ЭтоГруппаРеквизитов = Истина; - Строка.Реквизит = ИмяРеквизита; - Возврат; - КонецЕсли; - - Если ЗначениеЗаполнено(Элементы[ИмяРеквизита].Заголовок) Тогда - Строка.Реквизит = Элементы[ИмяРеквизита].Заголовок; - Иначе - Строка.Реквизит = ЗаголовкиРеквизитов.НайтиПоЗначению(ИмяРеквизита); - КонецЕсли; - - Если Значение = Неопределено Тогда - Строка.Значение = ЭтотОбъект[ИмяРеквизита]; - Иначе - Строка.Значение = Значение; - КонецЕсли; - -КонецПроцедуры - -&НаКлиентеНаСервереБезКонтекста -Функция НовыйСжатыйУникальныйИдентификатор() - - Возврат НРег(СтрЗаменить(Строка(Новый УникальныйИдентификатор), "-", "")); - -КонецФункции - -&НаКлиенте -Процедура ПрограммаОбработкаВыбораПродолжение(Ответ, ИдентификаторПоставляемойНастройки) Экспорт - - Если Ответ <> "Добавить" Тогда - Возврат; - КонецЕсли; - - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("ИдентификаторПоставляемойНастройки", ИдентификаторПоставляемойНастройки); - - ОткрытьФорму("Справочник.ПрограммыЭлектроннойПодписиИШифрования.Форма.ФормаЭлемента", ПараметрыФормы); - -КонецПроцедуры - - -&НаСервере -Процедура УстановитьУсловноеОформление() - - УсловноеОформление.Элементы.Очистить(); - - Элемент = УсловноеОформление.Элементы.Добавить(); - - ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); - ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.РеквизитыЗаявленияРеквизит.Имя); - - ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); - ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.РеквизитыЗаявленияЗначение.Имя); - - ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); - ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.РеквизитыЗаявленияВсеРеквизит.Имя); - - ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); - ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.РеквизитыЗаявленияВсеЗначение.Имя); - - ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); - ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("РеквизитыЗаявления.ЭтоГруппаРеквизитов"); - ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; - ОтборЭлемента.ПравоеЗначение = Истина; - - Элемент.Оформление.УстановитьЗначениеПараметра("ЦветФона", Новый Цвет(220, 220, 220)); - Элемент.Оформление.УстановитьЗначениеПараметра("Шрифт", - Новый Шрифт(Элементы.РеквизитыЗаявленияРеквизит.Шрифт, , , Истина,,,, 80)); - -КонецПроцедуры - -&НаСервере -Процедура УстановитьСоглашение() - - ТекстHTML = Обработки.ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата.ПолучитьМакет( - "Соглашение").ПолучитьТекст(); - - ТекстHTML = СтрЗаменить(ТекстHTML, "%1", - // Наименование удостоверяющего центра. - НСтр("ru = 'ООО «Научно-производственный центр ""1С""»'")); - - ТекстHTML = СтрЗаменить(ТекстHTML, "%2", - // Адрес регламента удостоверяющего центра. - НСтр("ru = 'http://ca.1c.ru/reglament.pdf'")); - - ТекстHTML = СтрЗаменить(ТекстHTML, "%3", - // Сеть доверенных удостоверяющих центров. - НСтр("ru = 'уполномоченного федерального органа в области использования электронной подписи'")); - - Соглашение.УстановитьHTML(ТекстHTML, Новый Структура); - -КонецПроцедуры - -&НаСервере -Процедура ЗаполнитьЗаголовкиРеквизитов() - - Реквизиты = ПолучитьРеквизиты(); - Для каждого Реквизит Из Реквизиты Цикл - ЗаголовкиРеквизитов.Добавить(Реквизит.Имя, Реквизит.Заголовок); - КонецЦикла; - -КонецПроцедуры - -&НаКлиенте -Процедура ПриИзмененияСоставаИлиНастроекПрограмм() - - ЗаполнитьСписокПрограмм(); - - ЗаполнитьПрограмму(); - -КонецПроцедуры - -&НаСервере -Процедура ЗаполнитьСписокПрограмм() - - СписокПрограмм.Очистить(); - - Если Не ЗначениеЗаполнено(КонтейнерКлючаПуть) - И Объект.СостояниеЗаявления = Перечисления.СостоянияЗаявленияНаВыпускСертификата.НеПодготовлено Тогда - - ВариантАлгоритмов = ВариантАлгоритмов(); - КонецЕсли; - - Если Не ЗначениеЗаполнено(ВариантАлгоритмов) Тогда - ВариантАлгоритмов = "2001"; - КонецЕсли; - - ИдентификаторыНастроек = Новый Соответствие; - - Если ВариантАлгоритмов = "2001" Тогда - ИдентификаторыНастроек.Вставить("VipNet2001", Истина); - ИдентификаторыНастроек.Вставить("CryptoPro2001", Истина); - Иначе - ИдентификаторыНастроек.Вставить("VipNet2012", Истина); - ИдентификаторыНастроек.Вставить("CryptoPro2012", Истина); - КонецЕсли; - - Настройки = Справочники.ПрограммыЭлектроннойПодписиИШифрования.ПоставляемыеНастройкиПрограмм(); - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | Программы.Ссылка КАК Ссылка - |ИЗ - | Справочник.ПрограммыЭлектроннойПодписиИШифрования КАК Программы - |ГДЕ - | Программы.ИмяПрограммы = &ИмяПрограммы - | И Программы.ТипПрограммы = &ТипПрограммы"; - - Для каждого Настройка Из Настройки Цикл - Если ИдентификаторыНастроек.Получить(Настройка.Идентификатор) = Неопределено Тогда - Продолжить; - КонецЕсли; - Строка = СписокПрограмм.Добавить(); - ЗаполнитьЗначенияСвойств(Строка, Настройка); - - Запрос.УстановитьПараметр("ИмяПрограммы", Настройка.ИмяПрограммы); - Запрос.УстановитьПараметр("ТипПрограммы", Настройка.ТипПрограммы); - Выборка = Запрос.Выполнить().Выбрать(); - Если Выборка.Следующий() Тогда - Строка.Ссылка = Выборка.Ссылка; - КонецЕсли; - КонецЦикла; - -КонецПроцедуры - -&НаСервере -Функция ВариантАлгоритмов() - - Попытка - ВебСервис = ВебСервисУЦ(); - - Фабрика = ВебСервис.Определение.ФабрикаXDTO; - URIПространстваИмен = ВебСервис.ТочкаПодключения.Интерфейс.URIПространстваИмен; - СвойстваФункции = Фабрика.Пакеты.Получить(URIПространстваИмен).КорневыеСвойства.Получить("GetCertificateSettings"); - Если СвойстваФункции = Неопределено Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'В веб-сервисе ""%1"" не определена обязательная функция ""GetCertificateSettings"".'"), - ВебСервис.ТочкаПодключения.Местоположение + "?wsdl"); - КонецЕсли; - ТипПустогоПараметра = СвойстваФункции.Тип; - ЗначениеПустогоПараметра = Фабрика.Создать(ТипПустогоПараметра); - - Ответ = ВебСервис.GetCertificateSettings(ЗначениеПустогоПараметра).GetCertificateSettingsResult; - - ЧтениеXML = Новый ЧтениеXML; - ЧтениеXML.УстановитьСтроку(Ответ); - ПостроительDOM = Новый ПостроительDOM(); - ПостроительDOM = ПостроительDOM.Прочитать(ЧтениеXML); - ЧтениеXML.Закрыть(); - - УзелDOM = ПостроительDOM.ПолучитьЭлементыПоИмени("algorithm"); - ВариантАлгоритмов = УзелDOM[0].ТекстовоеСодержимое; - - Если ВариантАлгоритмов <> "2001" И ВариантАлгоритмов <> "2012" Тогда - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ответ сервера не соответствует ожидаемому: - |%1'"), Ответ); - ВызватьИсключение ТекстОшибки; - КонецЕсли; - Исключение - ИнформацияОбОшибке = ИнформацияОбОшибке(); - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не удалось получить требуемый вариант алгоритмов от сервера 1С:Подпись по причине: - |%1'"), КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); - ВызватьИсключение ТекстОшибки; - КонецПопытки; - - Возврат ВариантАлгоритмов; - -КонецФункции - -&НаКлиенте -Процедура ЗаполнитьПрограмму(Оповещение = Неопределено) - - Если ЗначениеЗаполнено(Объект.Программа) Тогда - ПослеВыбораПрограммы(Ложь, Оповещение); - Возврат; - КонецЕсли; - - Контекст = Новый Структура; - Контекст.Вставить("Оповещение", Оповещение); - Контекст.Вставить("ПерваяДобавленнаяПрограмма", Неопределено); - Контекст.Вставить("Индекс", -1); - - ЗаполнитьПрограммуЦиклНачало(Контекст); - -КонецПроцедуры - -// Продолжение процедуры ЗаполнитьПрограмму. -&НаКлиенте -Процедура ЗаполнитьПрограммуЦиклНачало(Контекст) - - Если СписокПрограмм.Количество() <= Контекст.Индекс + 1 Тогда - Если Контекст.ПерваяДобавленнаяПрограмма <> Неопределено Тогда - Объект.Программа = Контекст.ПерваяДобавленнаяПрограмма; - КонецЕсли; - ПослеВыбораПрограммы(Ложь, Контекст.Оповещение); - Возврат; - КонецЕсли; - - Контекст.Индекс = Контекст.Индекс + 1; - Контекст.Вставить("Строка", СписокПрограмм[Контекст.Индекс]); - - Если Контекст.ПерваяДобавленнаяПрограмма = Неопределено - И ЗначениеЗаполнено(Контекст.Строка.Ссылка) Тогда - - Контекст.ПерваяДобавленнаяПрограмма = Контекст.Строка.Ссылка; - КонецЕсли; - - ЭлектроннаяПодписьСлужебныйКлиент.СоздатьМенеджерКриптографии(Новый ОписаниеОповещения( - "ЗаполнитьПрограммуЦиклПослеСозданияМенеджераКриптографии", ЭтотОбъект, Контекст), - "", Ложь, Контекст.Строка.Ссылка, Истина); - -КонецПроцедуры - -// Продолжение процедуры ПроверитьСертификат. -&НаКлиенте -Процедура ЗаполнитьПрограммуЦиклПослеСозданияМенеджераКриптографии(Менеджер, Контекст) Экспорт - - Если ТипЗнч(Менеджер) <> Тип("МенеджерКриптографии") Тогда - ЗаполнитьПрограммуЦиклНачало(Контекст); - Возврат; - КонецЕсли; - - Объект.Программа = Контекст.Строка.Ссылка; - - Если Контекст.Оповещение <> Неопределено Тогда - ВыполнитьОбработкуОповещения(Контекст.Оповещение); - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ПослеВыборкаПрограммыОбработчикОжидания() - - ПослеВыбораПрограммы(Истина); - -КонецПроцедуры - -&НаКлиенте -Процедура ПослеВыбораПрограммы(ПоказатьОшибку, Оповещение = Неопределено) - - Криптография = Неопределено; - - Если Не ЗначениеЗаполнено(Объект.Программа) Тогда - Если Оповещение <> Неопределено Тогда - ВыполнитьОбработкуОповещения(Оповещение); - КонецЕсли; - Возврат; - КонецЕсли; - - Контекст = Новый Структура; - Контекст.Вставить("ПоказатьОшибку", ПоказатьОшибку); - Контекст.Вставить("Оповещение", Оповещение); - - ЭлектроннаяПодписьСлужебныйКлиент.СоздатьМенеджерКриптографии(Новый ОписаниеОповещения( - "ПослеВыбораПрограммыПослеСозданияМенеджераКриптографии", ЭтотОбъект, Контекст), - "", Неопределено, Объект.Программа); - -КонецПроцедуры - -// Продолжение процедуры ПослеВыбораПрограммы. -&НаКлиенте -Процедура ПослеВыбораПрограммыПослеСозданияМенеджераКриптографии(Менеджер, Контекст) Экспорт - - Если ТипЗнч(Менеджер) <> Тип("МенеджерКриптографии") Тогда - Объект.Программа = Неопределено; - - Если Контекст.ПоказатьОшибку Тогда - ЭлектроннаяПодписьСлужебныйКлиент.ПоказатьОшибкуОбращенияКПрограмме( - НСтр("ru = 'Выбор программы электронной подписи'"), "", Менеджер, - Новый Структура, Новый Структура("ПоказатьИнструкцию", Истина)); - КонецЕсли; - - КонецЕсли; - - Если Контекст.Оповещение <> Неопределено Тогда - ВыполнитьОбработкуОповещения(Контекст.Оповещение); - КонецЕсли; - -КонецПроцедуры - - -&НаСервере -Процедура ЗаписатьЗаявление() - - ЭтоНовоеСостояние = ПоследнееСостояниеЗаявления <> Объект.СостояниеЗаявления; - - ТекущийОбъект = РеквизитФормыВЗначение("Объект"); - - Содержание = ТекущийОбъект.СодержаниеЗаявления.Получить(); - Если ТипЗнч(Содержание) <> Тип("Структура") Тогда - Содержание = Новый Структура; - КонецЕсли; - Содержание.Вставить("ЕстьИзменения", ЭтоНовоеСостояние); - - Если ТекущийОбъект.СостояниеЗаявления = Перечисления.СостоянияЗаявленияНаВыпускСертификата.НеПодготовлено Тогда - Фамилия = СокрЛП(Фамилия); - Имя = СокрЛП(Имя); - Отчество = СокрЛП(Отчество); - ТекущийОбъект.Наименование = СокрП(Фамилия + " " + Имя + " " + Отчество) - + " (" + НСтр("ru = 'Заявление на новый сертификат'") + ")"; - // Организация. - ОбновитьЗначение(Содержание, "ЭтоИндивидуальныйПредприниматель"); - ОбновитьЗначение(Содержание, "Организация"); - ОбновитьЗначение(Содержание, "НаименованиеСокращенное"); - ОбновитьЗначение(Содержание, "НаименованиеПолное"); - ОбновитьЗначение(Содержание, "ИНН"); - ОбновитьЗначение(Содержание, "КПП"); - ОбновитьЗначение(Содержание, "ОГРН"); - ОбновитьЗначение(Содержание, "РасчетныйСчет"); - ОбновитьЗначение(Содержание, "БИК"); - ОбновитьЗначение(Содержание, "КорреспондентскийСчет"); - ОбновитьЗначение(Содержание, "ЮридическийАдрес"); - ОбновитьЗначение(Содержание, "ЮридическийАдресXML"); - ОбновитьЗначение(Содержание, "ФактическийАдрес"); - ОбновитьЗначение(Содержание, "ФактическийАдресXML"); - ОбновитьЗначение(Содержание, "Телефон"); - ОбновитьЗначение(Содержание, "ТелефонXML"); - // Владелец. - ОбновитьЗначение(Содержание, "Сотрудник"); - ОбновитьЗначение(Содержание, "Фамилия"); - ОбновитьЗначение(Содержание, "Имя"); - ОбновитьЗначение(Содержание, "Отчество"); - ОбновитьЗначение(Содержание, "ДатаРождения"); - ОбновитьЗначение(Содержание, "Пол"); - ОбновитьЗначение(Содержание, "МестоРождения"); - ОбновитьЗначение(Содержание, "Гражданство"); - ОбновитьЗначение(Содержание, "ГражданствоПредставление"); - ОбновитьЗначение(Содержание, "ГражданствоОКСМКодАльфа3"); - ОбновитьЗначение(Содержание, "СтраховойНомерПФР"); - ОбновитьЗначение(Содержание, "Должность"); - ОбновитьЗначение(Содержание, "ДокументВид"); - ОбновитьЗначение(Содержание, "ДокументНомер"); - ОбновитьЗначение(Содержание, "ДокументКемВыдан"); - ОбновитьЗначение(Содержание, "ДокументКодПодразделения"); - ОбновитьЗначение(Содержание, "ДокументДатаВыдачи"); - ОбновитьЗначение(Содержание, "ЭлектроннаяПочта"); - ОбновитьЗначение(Содержание, "Подразделение"); - // Сохранение заполненных значений, если есть. - ОбновитьЗначение(Содержание, "ВариантАлгоритмов"); - ОбновитьЗначение(Содержание, "Программа", Объект.Программа); - ОбновитьЗначение(Содержание, "ПредставлениеПрограммы"); - ОбновитьЗначение(Содержание, "КонтейнерКлючаИмя"); - ОбновитьЗначение(Содержание, "КонтейнерКлючаПуть"); - - ИначеЕсли ТекущийОбъект.СостояниеЗаявления = Перечисления.СостоянияЗаявленияНаВыпускСертификата.Подготовлено Тогда - Если ЭтоНовоеСостояние Тогда - ОбновитьЗначение(Содержание, "Программа", Объект.Программа); - ОбновитьЗначение(Содержание, "ПредставлениеПрограммы"); - ОбновитьЗначение(Содержание, "КонтейнерКлючаИмя"); - ОбновитьЗначение(Содержание, "КонтейнерКлючаПуть"); - ОбновитьЗначение(Содержание, "ЗапросНаСертификат", ПолучитьИзВременногоХранилища(АдресЗапросаНаСертификат)); - ОбновитьЗначение(Содержание, "ОткрытаяЧастьКлючаЭП"); - ОбновитьЗначение(Содержание, "ИдентификаторКлючаСубъекта"); - ОбновитьЗначение(Содержание, "ДокументыПоляСертификата"); - ОбновитьЗначение(Содержание, "ДатаЗаявления"); - КонецЕсли; - // Сохранение заполненных значений, если есть. - ОбновитьЗначение(Содержание, "ДокументыРуководитель"); - ОбновитьЗначение(Содержание, "ДокументыРуководительСсылка"); - ОбновитьЗначение(Содержание, "ДокументыРуководительДолжность"); - ОбновитьЗначение(Содержание, "ДокументыРуководительОснование"); - ОбновитьЗначение(Содержание, "ДокументыПартнер"); - ОбновитьЗначение(Содержание, "ДокументыПартнерСсылка"); - ОбновитьЗначение(Содержание, "ДокументыПартнерЭтоИП"); - ОбновитьЗначение(Содержание, "ДокументыПартнерИНН"); - ОбновитьЗначение(Содержание, "ДокументыПартнерКПП"); - ОбновитьЗначение(Содержание, "ДокументыПечатались"); - - ИначеЕсли ТекущийОбъект.СостояниеЗаявления = Перечисления.СостоянияЗаявленияНаВыпускСертификата.Отправлено Тогда - Если ЭтоНовоеСостояние Тогда - ОбновитьЗначение(Содержание, "ИдентификаторДокументооборота"); - ОбновитьЗначение(Содержание, "ДатаОтправки"); - ОбновитьЗначение(Содержание, "ДокументыРуководитель"); - ОбновитьЗначение(Содержание, "ДокументыРуководительСсылка"); - ОбновитьЗначение(Содержание, "ДокументыРуководительДолжность"); - ОбновитьЗначение(Содержание, "ДокументыРуководительОснование"); - ОбновитьЗначение(Содержание, "ДокументыПартнер"); - ОбновитьЗначение(Содержание, "ДокументыПартнерСсылка"); - ОбновитьЗначение(Содержание, "ДокументыПартнерЭтоИП"); - ОбновитьЗначение(Содержание, "ДокументыПартнерИНН"); - ОбновитьЗначение(Содержание, "ДокументыПартнерКПП"); - КонецЕсли; - ОбновитьЗначение(Содержание, "ДатаОбновленияСостояния"); - ОбновитьЗначение(Содержание, "СостояниеОбработкиЗаявления"); - - ИначеЕсли ТекущийОбъект.СостояниеЗаявления = Перечисления.СостоянияЗаявленияНаВыпускСертификата.ИсполненоСертификатНеУстановлен Тогда - Если ЭтоНовоеСостояние Тогда - ОбновитьЗначение(Содержание, "ОтпечатокКорневогоСертификата"); - ОбновитьЗначение(Содержание, "Сертификат", ПолучитьИзВременногоХранилища(АдресСертификата)); - ОбновитьЗначение(Содержание, "КорневойСертификат", ПолучитьИзВременногоХранилища(АдресКорневогоСертификата)); - ОбновитьЗначение(Содержание, "ИдентификаторАбонента"); - ОбновитьЗначение(Содержание, "ДатаОбновленияСостояния"); - ОбновитьЗначение(Содержание, "СостояниеОбработкиЗаявления"); - Если ТекущийОбъект.ДанныеСертификата.Получить() <> Содержание.Сертификат Тогда - ТекущийОбъект.ДанныеСертификата = Новый ХранилищеЗначения(Содержание.Сертификат); - Содержание.ЕстьИзменения = Истина; - КонецЕсли; - КонецЕсли; - ОбновитьЗначение(Содержание, "ОшибкаУстановкиСертификата"); - ОбновитьЗначение(Содержание, "ДатаУстановкиСертификата"); - - ИначеЕсли ТекущийОбъект.СостояниеЗаявления = Перечисления.СостоянияЗаявленияНаВыпускСертификата.Отклонено Тогда - Если ЭтоНовоеСостояние Тогда - ОбновитьЗначение(Содержание, "ДатаОбновленияСостояния"); - ОбновитьЗначение(Содержание, "СостояниеОбработкиЗаявления"); - НовоеНаименование = СокрП(Фамилия + " " + Имя + " " + Отчество) + " (" + НСтр("ru = 'Удалить'") + ")"; - Если ТекущийОбъект.Наименование <> НовоеНаименование Тогда - ТекущийОбъект.Наименование = НовоеНаименование; - Содержание.ЕстьИзменения = Истина; - КонецЕсли; - КонецЕсли; - - ИначеЕсли ТекущийОбъект.СостояниеЗаявления = Перечисления.СостоянияЗаявленияНаВыпускСертификата.Исполнено Тогда - Если ЭтоНовоеСостояние Тогда - ОбновитьЗначение(Содержание, "ОшибкаУстановкиСертификата"); - ОбновитьЗначение(Содержание, "ДатаУстановкиСертификата"); - Содержание.ЕстьИзменения = Истина; - КонецЕсли; - КонецЕсли; - - Если Содержание.ЕстьИзменения Тогда - Содержание.Удалить("ЕстьИзменения"); - ТекущийОбъект.СодержаниеЗаявления = Новый ХранилищеЗначения(Содержание); - ЭтоНовый = ТекущийОбъект.ЭтоНовый(); - ТекущийОбъект.Записать(); - ЗначениеВРеквизитФормы(ТекущийОбъект, "Объект"); - ОповеститьОбИзмененииЗаявления = Истина; - КонецЕсли; - ПоследнееСостояниеЗаявления = Объект.СостояниеЗаявления; - - Элементы.ПодтверждениеСоглашения.ТолькоПросмотр = Истина; - - Если ЭтоНовый Тогда - ЗаблокироватьДанныеДляРедактирования(ТекущийОбъект.Ссылка, , УникальныйИдентификатор); - КонецЕсли; - -КонецПроцедуры - -&НаСервере -Процедура ОбновитьЗначение(Содержание, ИмяСвойства, Значение = null); - - Если Значение = Null Тогда - Значение = ЭтотОбъект[ИмяСвойства]; - КонецЕсли; - - Если Содержание.Свойство(ИмяСвойства) И Содержание[ИмяСвойства] = Значение Тогда - Возврат; - КонецЕсли; - - Содержание.ЕстьИзменения = Истина; - Содержание.Вставить(ИмяСвойства, Значение); - -КонецПроцедуры - -&НаКлиенте -Процедура ПослеЗаписи(ТекстОповещения = "") - - Если Не ОповеститьОбИзмененииЗаявления Тогда - Возврат; - КонецЕсли; - - ОповеститьОбИзменении(Объект.Ссылка); - - Контекст = Новый Структура; - Если ЭтоНовый Тогда - Контекст.Вставить("ЭтоНовый"); - КонецЕсли; - Оповестить("Запись_СертификатыКлючейЭлектроннойПодписиИШифрования", Контекст, Объект.Ссылка); - - Если Не ЗначениеЗаполнено(ТекстОповещения) Тогда - ТекстОповещения = НСтр("ru = 'Заявление сохранено.'"); - КонецЕсли; - - ПоказатьОповещениеПользователя(ТекстОповещения); - - ОповеститьОбИзмененииЗаявления = Ложь; - -КонецПроцедуры - -&НаСервере -Процедура ЗаписатьИРазблокироватьОбъект() - - ЗаписатьЗаявление(); - РазблокироватьОбъект(Объект.Ссылка, УникальныйИдентификатор); - -КонецПроцедуры - -&НаСервереБезКонтекста -Процедура РазблокироватьОбъект(Ссылка, ИдентификаторФормы) - - РазблокироватьДанныеДляРедактирования(Ссылка, ИдентификаторФормы); - -КонецПроцедуры - - -// Создание ключа и запроса на сертификат. +#Область КлючИЗапросНаСертификат &НаКлиенте Процедура СоздатьКлючИЗапросНаСертификат(Оповещение) @@ -4535,7 +3256,6 @@ КонецПроцедуры -// Продолжение процедуры СоздатьКлючИЗапросНаСертификат. &НаКлиенте Процедура СоздатьКлючИЗапросНаСертификатПослеСозданияОбъектаКриптографии(Результат, Контекст) Экспорт @@ -4544,13 +3264,13 @@ Возврат; КонецЕсли; - ПроверитьСуществованиеКонтейнераКлючей(Новый ОписаниеОповещения( - "СоздатьКлючИЗапросНаСертификатПослеПроверкиСуществованияКонтейнераКлючей", ЭтотОбъект, Контекст), - КонтейнерКлючаПуть, КонтейнерКлючаИмя); + ОповещениеПослеПроверкиСуществования = Новый ОписаниеОповещения( + "СоздатьКлючИЗапросНаСертификатПослеПроверкиСуществованияКонтейнераКлючей", ЭтотОбъект, Контекст); + + ПроверитьСуществованиеКонтейнераКлючей(ОповещениеПослеПроверкиСуществования, КонтейнерКлючаПуть, КонтейнерКлючаИмя); КонецПроцедуры -// Продолжение процедуры СоздатьКлючИЗапросНаСертификат. &НаКлиенте Процедура СоздатьКлючИЗапросНаСертификатПослеПроверкиСуществованияКонтейнераКлючей(Существует, Контекст) Экспорт @@ -4566,48 +3286,28 @@ КонецПроцедуры -// Продолжение процедуры СоздатьКлючИЗапросНаСертификат. +&НаКлиенте +Процедура СоздатьКлючИЗапросНаСертификатПослеПодготовкиКонтейнераКлюча(Контекст) + + ПолучитьКаталогВременныхФайловКомпоненты(Новый ОписаниеОповещения( + "СоздатьКлючИЗапросНаСертификатПослеПолученияКаталогаВременныхФайловКомпоненты", ЭтотОбъект, Контекст)); + +КонецПроцедуры + &НаКлиенте Процедура СоздатьКлючИЗапросНаСертификатПослеПолученияИмениНовогоКонтейнераКлюча(КонтейнерКлючаНовоеИмя, Контекст) Экспорт АктивноеОкно().Активизировать(); Контекст.Вставить("КонтейнерКлючаНовоеИмя", КонтейнерКлючаНовоеИмя); + ОповещениеПослеВызоваСоздатьКонтейнер = Новый ОписаниеОповещения( + "СоздатьКлючИЗапросНаСертификатПослеВызоваСоздатьКонтейнер", ЭтотОбъект, Контекст, + "СоздатьКлючИЗапросНаСертификатПослеОшибкиВызоваСоздатьКонтейнер", ЭтотОбъект); - Криптография.НачатьВызовСоздатьКонтейнер(Новый ОписаниеОповещения( - "СоздатьКлючИЗапросНаСертификатПослеВызоваСоздатьКонтейнер", ЭтотОбъект, Контекст, - "СоздатьКлючИЗапросНаСертификатПослеОшибкиВызоваСоздатьКонтейнер", ЭтотОбъект), - КонтейнерКлючаНовоеИмя); + Криптография.НачатьВызовСоздатьКонтейнер(ОповещениеПослеВызоваСоздатьКонтейнер, КонтейнерКлючаНовоеИмя); КонецПроцедуры -// Продолжение процедуры СоздатьКлючИЗапросНаСертификат. -&НаКлиенте -Процедура СоздатьКлючИЗапросНаСертификатПослеОшибкиВызоваСоздатьКонтейнер(ИнформацияОбОшибке, СтандартнаяОбработка, Контекст) Экспорт - - СтандартнаяОбработка = Ложь; - Криптография = Неопределено; - - Если Не ВозможноПродолжениеПослеОперацииКомпоненты() Тогда - Возврат; - КонецЕсли; - - Ошибка = Новый Структура; - Ошибка.Вставить("ПоказатьИнструкцию", Истина); - Ошибка.Вставить("ОписаниеОшибки", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не удалось выполнить операцию по причине: - |%1'"), - ПредставлениеОшибкиДляПользователя(ИнформацияОбОшибке))); - - ЭлектроннаяПодписьСлужебныйКлиент.ПоказатьОшибкуОбращенияКПрограмме( - НСтр("ru = 'Создание ключа электронной подписи'"), "", Ошибка, - Новый Структура, Новый Структура("ПоказатьИнструкцию", Истина)); - - ВыполнитьОбработкуОповещения(Контекст.Оповещение, Ложь); - -КонецПроцедуры - -// Продолжение процедуры СоздатьКлючИЗапросНаСертификат. &НаКлиенте Процедура СоздатьКлючИЗапросНаСертификатПослеВызоваСоздатьКонтейнер(Путь, ПараметрыВызова, Контекст) Экспорт @@ -4622,7 +3322,6 @@ КонецПроцедуры -// Продолжение процедуры СоздатьКлючИЗапросНаСертификат. &НаКлиенте Процедура СоздатьКлючИЗапросНаСертификатПослеВызоваСоздатьКонтейнерПослеПолученияСписокОшибок(СписокОшибок, Контекст) Экспорт @@ -4640,25 +3339,26 @@ АктивноеОкно().Активизировать(); Если Не ЗначениеЗаполнено(Путь) Тогда + Строки = СписокПрограмм.НайтиСтроки(Новый Структура("Ссылка", Объект.Программа)); Если СтрНачинаетсяС(Строки[0].Идентификатор, "CryptoPro") Тогда ПоказатьПредупреждение(, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Ключ электронной подписи не создан. - | - |Следует учитывать, что для создания ключа с помощью программы %1, - |требуются права администратора операционной системы.'"), + | + |Следует учитывать, что для создания ключа с помощью программы %1, + |требуются права администратора операционной системы.'"), Строки[0].Представление)); Иначе - ПоказатьПредупреждение(, - НСтр("ru = 'Ключ электронной подписи не создан.'")); + ПоказатьПредупреждение(, НСтр("ru = 'Ключ электронной подписи не создан.'")); КонецЕсли; + ВыполнитьОбработкуОповещения(Контекст.Оповещение, Ложь); Возврат; + КонецЕсли; КонтейнерКлючаИмя = Контекст.КонтейнерКлючаНовоеИмя; КонтейнерКлючаПуть = Путь; - ЗаписатьЗаявление(); ПоказатьОповещениеПользователя(НСтр("ru = 'Создан новый контейнер ключа:'"),, КонтейнерКлючаПуть); @@ -4666,21 +3366,34 @@ КонецПроцедуры -// Продолжение процедуры СоздатьКлючИЗапросНаСертификат. &НаКлиенте -Процедура СоздатьКлючИЗапросНаСертификатПослеПодготовкиКонтейнераКлюча(Контекст) +Процедура СоздатьКлючИЗапросНаСертификатПослеОшибкиВызоваСоздатьКонтейнер(ИнформацияОбОшибке, СтандартнаяОбработка, Контекст) Экспорт - ПолучитьКаталогВременныхФайловКомпоненты(Новый ОписаниеОповещения( - "СоздатьКлючИЗапросНаСертификатПослеПолученияКаталогаВременныхФайловКомпоненты", ЭтотОбъект, Контекст)); + Криптография = Неопределено; + СтандартнаяОбработка = Ложь; + + Если Не ВозможноПродолжениеПослеОперацииКомпоненты() Тогда + Возврат; + КонецЕсли; + + Ошибка = Новый Структура; + Ошибка.Вставить("ПоказатьИнструкцию", Истина); + Ошибка.Вставить("ОписаниеОшибки", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось выполнить операцию по причине: + |%1'"), ПредставлениеОшибкиДляПользователя(ИнформацияОбОшибке))); + + ЭлектроннаяПодписьСлужебныйКлиент.ПоказатьОшибкуОбращенияКПрограмме( + НСтр("ru = 'Создание ключа электронной подписи'"), "", Ошибка, + Новый Структура, Новый Структура("ПоказатьИнструкцию", Истина)); + + ВыполнитьОбработкуОповещения(Контекст.Оповещение, Ложь); КонецПроцедуры -// Продолжение процедуры СоздатьКлючИЗапросНаСертификат. &НаКлиенте Процедура СоздатьКлючИЗапросНаСертификатПослеПолученияКаталогаВременныхФайловКомпоненты(Каталог, Контекст) Экспорт Контекст.Вставить("ИмяФайлаЗапроса", Каталог + КонтейнерКлючаИмя + ".p10"); - Контекст.Вставить("ПомещаемыеФайлы", Новый Массив); Контекст.ПомещаемыеФайлы.Добавить(Новый ОписаниеПередаваемогоФайла(Контекст.ИмяФайлаЗапроса)); @@ -4693,7 +3406,6 @@ КонецПроцедуры -// Продолжение процедуры СоздатьКлючИЗапросНаСертификат. &НаКлиенте Процедура СоздатьКлючИЗапросНаСертификатПослеПолученияРазрешений(РазрешенияПолучены, Контекст) Экспорт @@ -4702,38 +3414,23 @@ Возврат; КонецЕсли; + Контекст.Вставить("ЗапросСоздан", Истина); Контекст.Вставить("ПоляСертификата", Неопределено); + ОписаниеЗапроса = ОписаниеЗапросаНаКвалифицированныйСертификат(Контекст.ПоляСертификата); ФлагКвалифицированнойЭП = 67108864; АктивноеОкно().Активизировать(); - Контекст.Вставить("ЗапросСоздан", Истина); + ОповещениеПослеВызоваСоздатьЗапрос = Новый ОписаниеОповещения( + "СоздатьКлючИЗапросНаСертификатПослеВызоваСоздатьЗапросНаСертификат", ЭтотОбъект, Контекст, + "СоздатьКлючИЗапросНаСертификатПослеОшибкиВызоваСоздатьЗапросНаСертификат", ЭтотОбъект); - Криптография.НачатьВызовСоздатьЗапросНаСертификат(Новый ОписаниеОповещения( - "СоздатьКлючИЗапросНаСертификатПослеВызоваСоздатьЗапросНаСертификат", ЭтотОбъект, Контекст, - "СоздатьКлючИЗапросНаСертификатПослеОшибкиВызоваСоздатьЗапросНаСертификат", ЭтотОбъект), + Криптография.НачатьВызовСоздатьЗапросНаСертификат(ОповещениеПослеВызоваСоздатьЗапрос, ОписаниеЗапроса, КонтейнерКлючаПуть, Контекст.ИмяФайлаЗапроса, ФлагКвалифицированнойЭП); КонецПроцедуры -// Продолжение процедуры СоздатьКлючИЗапросНаСертификат. -&НаКлиенте -Процедура СоздатьКлючИЗапросНаСертификатПослеОшибкиВызоваСоздатьЗапросНаСертификат(ИнформацияОбОшибке, СтандартнаяОбработка, Контекст) Экспорт - - СтандартнаяОбработка = Ложь; - Криптография = Неопределено; - - Если Не ВозможноПродолжениеПослеОперацииКомпоненты() Тогда - Возврат; - КонецЕсли; - - СоздатьКлючИЗапросНаСертификатЗавершение(Контекст, ИнформацияОбОшибке, - НСтр("ru = 'Не удалось выполнить операцию по причине:'")); - -КонецПроцедуры - -// Продолжение процедуры СоздатьКлючИЗапросНаСертификат. &НаКлиенте Процедура СоздатьКлючИЗапросНаСертификатПослеВызоваСоздатьЗапросНаСертификат(Результат, ПараметрыВызова, Контекст) Экспорт @@ -4748,7 +3445,6 @@ КонецПроцедуры -// Продолжение процедуры СоздатьКлючИЗапросНаСертификат. &НаКлиенте Процедура СоздатьКлючИЗапросНаСертификатПослеВызоваСоздатьЗапросНаСертификатПослеПолученияСписокОшибок(СписокОшибок, Контекст) Экспорт @@ -4768,27 +3464,17 @@ СоздатьКлючИЗапросНаСертификатЗавершение(Контекст); Возврат; КонецЕсли; + АктивноеОкно().Активизировать(); - Файл = Новый Файл; - Файл.НачатьИнициализацию(Новый ОписаниеОповещения( - "СоздатьКлючИЗапросНаСертификатПослеИнициализацииФайла", ЭтотОбъект, Контекст), - Контекст.ИмяФайлаЗапроса); + Контекст.Вставить("Файл", Новый Файл(Контекст.ИмяФайлаЗапроса)); + ОповещениеПослеПроверкиСуществования = Новый ОписаниеОповещения( + "СоздатьКлючИЗапросНаСертификатПослеПроверкиСуществованияФайла", ЭтотОбъект, Контекст); + + Контекст.Файл.НачатьПроверкуСуществования(ОповещениеПослеПроверкиСуществования); КонецПроцедуры -// Продолжение процедуры СоздатьКлючИЗапросНаСертификат. -&НаКлиенте -Процедура СоздатьКлючИЗапросНаСертификатПослеИнициализацииФайла(Файл, Контекст) Экспорт - - Контекст.Вставить("Файл", Файл); - - Контекст.Файл.НачатьПроверкуСуществования(Новый ОписаниеОповещения( - "СоздатьКлючИЗапросНаСертификатПослеПроверкиСуществованияФайла", ЭтотОбъект, Контекст)); - -КонецПроцедуры - -// Продолжение процедуры СоздатьКлючИЗапросНаСертификат. &НаКлиенте Процедура СоздатьКлючИЗапросНаСертификатПослеПроверкиСуществованияФайла(Существует, Контекст) Экспорт @@ -4803,7 +3489,6 @@ КонецПроцедуры -// Продолжение процедуры СоздатьКлючИЗапросНаСертификат. &НаКлиенте Процедура СоздатьКлючИЗапросНаСертификатПослеПолученияРазмераФайла(Размер, Контекст) Экспорт @@ -4813,14 +3498,28 @@ Возврат; КонецЕсли; - Криптография.НачатьВызовПолучитьОткрытыйКлюч(Новый ОписаниеОповещения( - "СоздатьКлючИЗапросНаСертификатПослеВызоваПолучитьОткрытыйКлюч", ЭтотОбъект, Контекст, - "СоздатьКлючИЗапросНаСертификатПослеОшибкиВызоваПолучитьОткрытыйКлюч", ЭтотОбъект), - Контекст.ИмяФайлаЗапроса); + ОповещениеПолучитьОткрытыйКлюч = Новый ОписаниеОповещения( + "СоздатьКлючИЗапросНаСертификатПослеВызоваПолучитьОткрытыйКлюч", ЭтотОбъект, Контекст, + "СоздатьКлючИЗапросНаСертификатПослеОшибкиВызоваПолучитьОткрытыйКлюч", ЭтотОбъект); + + Криптография.НачатьВызовПолучитьОткрытыйКлюч(ОповещениеПолучитьОткрытыйКлюч, Контекст.ИмяФайлаЗапроса); + +КонецПроцедуры + +&НаКлиенте +Процедура СоздатьКлючИЗапросНаСертификатПослеВызоваПолучитьОткрытыйКлюч(Результат, ПараметрыВызова, Контекст) Экспорт + + Если Не ВозможноПродолжениеПослеОперацииКомпоненты() Тогда + Возврат; + КонецЕсли; + + Контекст.Вставить("РезультатПослеВызоваПолучитьОткрытыйКлюч", Результат); + + Криптография.НачатьПолучениеСписокОшибок(Новый ОписаниеОповещения( + "СоздатьКлючИЗапросНаСертификатПослеВызоваПолучитьОткрытыйКлючПослеПолученияСписокОшибок", ЭтотОбъект, Контекст)); КонецПроцедуры -// Продолжение процедуры СоздатьКлючИЗапросНаСертификат. &НаКлиенте Процедура СоздатьКлючИЗапросНаСертификатПослеОшибкиВызоваПолучитьОткрытыйКлюч(ИнформацияОбОшибке, СтандартнаяОбработка, Контекст) Экспорт @@ -4836,22 +3535,6 @@ КонецПроцедуры -// Продолжение процедуры СоздатьКлючИЗапросНаСертификат. -&НаКлиенте -Процедура СоздатьКлючИЗапросНаСертификатПослеВызоваПолучитьОткрытыйКлюч(Результат, ПараметрыВызова, Контекст) Экспорт - - Если Не ВозможноПродолжениеПослеОперацииКомпоненты() Тогда - Возврат; - КонецЕсли; - - Контекст.Вставить("РезультатПослеВызоваПолучитьОткрытыйКлюч", Результат); - - Криптография.НачатьПолучениеСписокОшибок(Новый ОписаниеОповещения( - "СоздатьКлючИЗапросНаСертификатПослеВызоваПолучитьОткрытыйКлючПослеПолученияСписокОшибок", ЭтотОбъект, Контекст)); - -КонецПроцедуры - -// Продолжение процедуры СоздатьКлючИЗапросНаСертификат. &НаКлиенте Процедура СоздатьКлючИЗапросНаСертификатПослеВызоваПолучитьОткрытыйКлючПослеПолученияСписокОшибок(СписокОшибок, Контекст) Экспорт @@ -4870,8 +3553,8 @@ Контекст.Вставить("ТекущийИКС", ИдентификаторКлючаСубъектаHexСтрокой(Результат)); ПараметрыЗагрузки = ФайловаяСистемаКлиент.ПараметрыЗагрузкиФайла(); - ПараметрыЗагрузки.ИдентификаторФормы = УникальныйИдентификатор; ПараметрыЗагрузки.Интерактивно = Ложь; + ПараметрыЗагрузки.ИдентификаторФормы = УникальныйИдентификатор; ФайловаяСистемаКлиент.ЗагрузитьФайлы(Новый ОписаниеОповещения( "СоздатьКлючИЗапросНаСертификатПослеПомещенияФайлов", ЭтотОбъект, Контекст, "СоздатьКлючИЗапросНаСертификатПослеОшибкиПомещенияФайлов", ЭтотОбъект), @@ -4879,29 +3562,15 @@ КонецПроцедуры -// Для продолжения процедуры СоздатьКлючИЗапросНаСертификат. -&НаСервереБезКонтекста -Функция ИдентификаторКлючаСубъектаHexСтрокой(ОткрытаяЧастьКлючаHexСтрокой) - - ХешированиеДанных = Новый ХешированиеДанных(ХешФункция.SHA1); - ХешированиеДанных.Добавить(ПолучитьДвоичныеДанныеИзHexСтроки(ОткрытаяЧастьКлючаHexСтрокой)); - - Возврат ПолучитьHexСтрокуИзДвоичныхДанных(ХешированиеДанных.ХешСумма); - -КонецФункции - -// Продолжение процедуры СоздатьКлючИЗапросНаСертификат. &НаКлиенте Процедура СоздатьКлючИЗапросНаСертификатПослеОшибкиПомещенияФайлов(ИнформацияОбОшибке, СтандартнаяОбработка, Контекст) Экспорт СтандартнаяОбработка = Ложь; - СоздатьКлючИЗапросНаСертификатЗавершение(Контекст, ИнформацияОбОшибке, НСтр("ru = 'Не удалось передать файл запроса на сертификат на сервер по причине:'")); КонецПроцедуры -// Продолжение процедуры СоздатьКлючИЗапросНаСертификат. &НаКлиенте Процедура СоздатьКлючИЗапросНаСертификатПослеПомещенияФайлов(ПомещенныеФайлы, Контекст) Экспорт @@ -4911,6 +3580,7 @@ Возврат; КонецЕсли; + Модифицированность = Истина; АдресЗапросаНаСертификат = ПомещенныеФайлы[0].Хранение; ОткрытаяЧастьКлючаЭП = ПредставлениеДвоичныхДанных(Контекст.ТекущаяОткрытаяЧастьКлючаЭП); ИдентификаторКлючаСубъекта = ПредставлениеДвоичныхДанных(Контекст.ТекущийИКС); @@ -4921,7 +3591,21 @@ КонецПроцедуры -// Продолжение процедуры СоздатьКлючИЗапросНаСертификат. +&НаКлиенте +Процедура СоздатьКлючИЗапросНаСертификатПослеОшибкиВызоваСоздатьЗапросНаСертификат(ИнформацияОбОшибке, СтандартнаяОбработка, Контекст) Экспорт + + СтандартнаяОбработка = Ложь; + Криптография = Неопределено; + + Если Не ВозможноПродолжениеПослеОперацииКомпоненты() Тогда + Возврат; + КонецЕсли; + + СоздатьКлючИЗапросНаСертификатЗавершение(Контекст, ИнформацияОбОшибке, + НСтр("ru = 'Не удалось выполнить операцию по причине:'")); + +КонецПроцедуры + &НаКлиенте Процедура СоздатьКлючИЗапросНаСертификатЗавершение(Контекст, ИнформацияОбОшибке = Неопределено, ЗаголовокОшибки = "") @@ -4949,33 +3633,23 @@ КонецПроцедуры -// Продолжение процедуры СоздатьКлючИЗапросНаСертификат. &НаКлиенте Процедура СоздатьКлючИЗапросНаСертификатПослеПроверкиСуществованияФайлаДляУдаления(Существует, Контекст) Экспорт Если Существует Тогда - НачатьУдалениеФайлов(Новый ОписаниеОповещения( - "СоздатьКлючИЗапросНаСертификатПослеУдаленияФайлов", ЭтотОбъект, Контекст, - "СоздатьКлючИЗапросНаСертификатПослеОшибкиУдаленияФайлов", ЭтотОбъект), - Контекст.ИмяФайлаЗапроса); + + ОповещениеПослеУдаленияФайлов = Новый ОписаниеОповещения( + "СоздатьКлючИЗапросНаСертификатПослеУдаленияФайлов", ЭтотОбъект, Контекст, + "СоздатьКлючИЗапросНаСертификатПослеОшибкиУдаленияФайлов", ЭтотОбъект); + + НачатьУдалениеФайлов(ОповещениеПослеУдаленияФайлов, Контекст.ИмяФайлаЗапроса); + Иначе СоздатьКлючИЗапросНаСертификатПослеУдаленияФайлов(Контекст); КонецЕсли; КонецПроцедуры -// Продолжение процедуры СоздатьКлючИЗапросНаСертификат. -&НаКлиенте -Процедура СоздатьКлючИЗапросНаСертификатПослеОшибкиУдаленияФайлов(ИнформацияОбОшибке, СтандартнаяОбработка, Контекст) Экспорт - - СтандартнаяОбработка = Ложь; - - СоздатьКлючИЗапросНаСертификатЗавершение(Контекст, ИнформацияОбОшибке, - НСтр("ru = 'Не удалось удалить файл запроса на сертификат на компьютере по причине:'")); - -КонецПроцедуры - -// Продолжение процедуры СоздатьКлючИЗапросНаСертификат. &НаКлиенте Процедура СоздатьКлючИЗапросНаСертификатПослеУдаленияФайлов(Контекст) Экспорт @@ -4983,6 +3657,18 @@ КонецПроцедуры +&НаКлиенте +Процедура СоздатьКлючИЗапросНаСертификатПослеОшибкиУдаленияФайлов(ИнформацияОбОшибке, СтандартнаяОбработка, Контекст) Экспорт + + СтандартнаяОбработка = Ложь; + СоздатьКлючИЗапросНаСертификатЗавершение(Контекст, ИнформацияОбОшибке, + НСтр("ru = 'Не удалось удалить файл запроса на сертификат на компьютере по причине:'")); + +КонецПроцедуры + +#КонецОбласти + +#Область КонтейнерКлючей &НаКлиенте Процедура ПроверитьСуществованиеКонтейнераКлючей(Оповещение, ПутьПослеСоздания, ИмяДляСоздания) @@ -5002,7 +3688,127 @@ КонецПроцедуры -// Продолжение процедуры ПроверитьСуществованиеКонтейнераКлючей. +&НаКлиенте +Процедура ПолучитьИменаКонтейнеровКлючей(Оповещение) + + Контекст = Новый Структура; + Контекст.Вставить("Оповещение", Оповещение); + Контекст.Вставить("СписокИмен", Новый СписокЗначений); + Контекст.Вставить("ПервыйПроход", Истина); + Контекст.Вставить("Индекс", -1); + + ПолучитьИменаКонтейнеровКлючейЦиклНачало(Контекст); + +КонецПроцедуры + +&НаКлиенте +Процедура ПолучитьИменаКонтейнеровКлючейЦиклНачало(Контекст) + + Контекст.Вставить("ТекущееИмя", ""); + + ОповещениеПолучитьСледующийКонтейнер = Новый ОписаниеОповещения( + "ПолучитьИменаКонтейнеровКлючейЦиклПослеВызоваПолучитьСледующийКонтейнерКлючей", ЭтотОбъект, Контекст, + "ПолучитьИменаКонтейнеровКлючейЦиклПослеОшибкиВызоваПолучитьСледующийКонтейнерКлючей", ЭтотОбъект); + + Криптография.НачатьВызовПолучитьСледующийКонтейнерКлючей(ОповещениеПолучитьСледующийКонтейнер, + Контекст.ТекущееИмя, Контекст.ПервыйПроход); + +КонецПроцедуры + +&НаКлиенте +Процедура ПолучитьИменаКонтейнеровКлючейЦиклПослеВызоваПолучитьСледующийКонтейнерКлючей(Результат, ПараметрыВызова, Контекст) Экспорт + + Если Не ВозможноПродолжениеПослеОперацииКомпоненты() Тогда + Возврат; + КонецЕсли; + + Контекст.Вставить("РезультатПослеВызоваПолучитьСледующийКонтейнерКлючей", Результат); + Контекст.Вставить("ПараметрыВызоваПослеВызоваПолучитьСледующийКонтейнерКлючей", ПараметрыВызова); + + Криптография.НачатьПолучениеСписокОшибок(Новый ОписаниеОповещения( + "ПолучитьИменаКонтейнеровКлючейЦиклПослеВызоваПолучитьСледующийКонтейнерКлючейПослеПолученияСписокОшибок", ЭтотОбъект, Контекст)); + +КонецПроцедуры + +&НаКлиенте +Процедура ПолучитьИменаКонтейнеровКлючейЦиклПослеВызоваПолучитьСледующийКонтейнерКлючейПослеПолученияСписокОшибок(СписокОшибок, Контекст) Экспорт + + Если Не ВозможноПродолжениеПослеОперацииКомпоненты() Тогда + Возврат; + КонецЕсли; + + Если ЗначениеЗаполнено(СписокОшибок) Тогда + ПолучитьИменаКонтейнеровКлючейЦиклПослеОшибкиВызоваПолучитьСледующийКонтейнерКлючей(СписокОшибок, Ложь, Контекст); + Возврат; + КонецЕсли; + + Результат = Контекст.РезультатПослеВызоваПолучитьСледующийКонтейнерКлючей; + ПараметрыВызова = Контекст.ПараметрыВызоваПослеВызоваПолучитьСледующийКонтейнерКлючей; + + Если Не Результат Тогда + + Если Контекст.ПервыйПроход Тогда + Контекст.ПервыйПроход = Ложь; + ПолучитьИменаКонтейнеровКлючейЦиклНачало(Контекст); + Иначе + + Имена = ""; + Для каждого ЭлементСписка Из Контекст.СписокИмен Цикл + + УникальноеИмя = ЭлементСписка.Значение; + Если УникальноеИмя = ЭлементСписка.Представление + И СтрНайти(УникальноеИмя, "/") = 0 + И СтрНайти(УникальноеИмя, "\") = 0 + И СтрНайти(УникальноеИмя, ":") = 0 Тогда + + // ViPNet 3.2 (основная папка контейнеров не указана). + УникальноеИмя = "\Infotecs\Containers\" + УникальноеИмя; + КонецЕсли; + + Имена = Имена + Символы.ПС + УникальноеИмя; + Имена = Имена + Символы.ПС + ЭлементСписка.Представление; + Имена = Имена + Символы.ПС; + + КонецЦикла; + + ВыполнитьОбработкуОповещения(Контекст.Оповещение, СокрЛП(Имена)); + + КонецЕсли; + + Возврат; + + КонецЕсли; + + ТекущееИмя = ПараметрыВызова[0]; + + Если Контекст.ПервыйПроход Тогда + Контекст.СписокИмен.Добавить(ТекущееИмя); + Иначе + Контекст.Индекс = Контекст.Индекс + 1; + Контекст.СписокИмен[Контекст.Индекс].Представление = ТекущееИмя; + КонецЕсли; + + ПолучитьИменаКонтейнеровКлючейЦиклНачало(Контекст); + +КонецПроцедуры + +&НаКлиенте +Процедура ПолучитьИменаКонтейнеровКлючейЦиклПослеОшибкиВызоваПолучитьСледующийКонтейнерКлючей(ИнформацияОбОшибке, СтандартнаяОбработка, Контекст) Экспорт + + СтандартнаяОбработка = Ложь; + Криптография = Неопределено; + + Если Не ВозможноПродолжениеПослеОперацииКомпоненты() Тогда + Возврат; + КонецЕсли; + + ПоказатьПредупреждение(,СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось получить имя следующего контейнера ключей по причине: + |%1'"), + ПредставлениеОшибкиДляПользователя(ИнформацияОбОшибке))); + +КонецПроцедуры + &НаКлиенте Процедура ПроверитьСуществованиеКонтейнераКлючейПослеПолученияИменКонтейнеров(ИменаКонтейнеровКлючей, Контекст) Экспорт @@ -5042,7 +3848,6 @@ КонецПроцедуры - &НаКлиенте Процедура ПолучитьИмяНовогоКонтейнераКлюча(Оповещение) @@ -5073,7 +3878,6 @@ КонецПроцедуры -// Продолжение процедуры ПолучитьИмяНовогоКонтейнераКлюча. &НаКлиенте Процедура ПолучитьИмяНовогоКонтейнераКлючаПослеПолученияИменКонтейнеров(ИменаКонтейнеровКлючей, Контекст) Экспорт @@ -5087,14 +3891,6 @@ КонецПроцедуры - -&НаКлиентеНаСервереБезКонтекста -Функция НайтиБезУчетаРегистраИРазделителяПути(Строка, ПодстрокаПоиска) - - Возврат СтрНайти(НРег(СтрЗаменить(Строка, "/", "\")), НРег(СтрЗаменить(ПодстрокаПоиска, "/", "\"))); - -КонецФункции - &НаКлиенте Функция ПодготовитьСтрокуДляИмениКонтейнера(Строка, ЗаменаПробела = Неопределено) @@ -5126,7 +3922,7 @@ СтрокаПодготовленная = ""; - СтрокаЛатиницей = СтроковыеФункцииКлиентСервер.СтрокаЛатиницей(Строка); + СтрокаЛатиницей = СтроковыеФункцииКлиент.СтрокаЛатиницей(Строка); КоличествоСимволов = СтрДлина(СтрокаЛатиницей); Для НомерСимвола = 1 По КоличествоСимволов Цикл @@ -5145,6 +3941,718 @@ КонецФункции +#КонецОбласти + +#Область ОбъектКриптографии + +&НаКлиенте +Процедура СоздатьОбъектКриптографии(ОбработкаПродолжения, НазначениеРасширенияДляРаботыСФайлами, НазначениеВнешнейКомпонентыКриптографии) + + Контекст = Новый Структура; + Контекст.Вставить("ОбработкаПродолжения", ОбработкаПродолжения); + Контекст.Вставить("НазначениеВнешнейКомпонентыКриптографии", НазначениеВнешнейКомпонентыКриптографии); + + ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботыСФайлами( + Новый ОписаниеОповещения("СоздатьОбъектКриптографииПослеПодключенияРасширенияРаботыСФайлами", ЭтотОбъект, Контекст), + НазначениеРасширенияДляРаботыСФайлами, Ложь); + +КонецПроцедуры + +&НаКлиенте +Процедура СоздатьОбъектКриптографииПослеПодключенияРасширенияРаботыСФайлами(Результат, Контекст) Экспорт + + Если Результат <> Истина Тогда + ВыполнитьОбработкуОповещения(Контекст.ОбработкаПродолжения, Ложь); + Возврат; + КонецЕсли; + + ПараметрыПодключения = ОбщегоНазначенияКлиент.ПараметрыПодключенияКомпоненты(); + ПараметрыПодключения.ТекстПояснения = Контекст.НазначениеВнешнейКомпонентыКриптографии; + // Объект создается на одно действие до исключения, кэширование на время сеанса не подходит. + ПараметрыПодключения.Кэшировать = Ложь; + ПараметрыПодключения.ИдентификаторыСозданияОбъектов.Добавить("BinaryDataS"); + ПараметрыПодключения.ИдентификаторыСозданияОбъектов.Добавить("CryptS"); + + ОбщегоНазначенияКлиент.ПодключитьКомпонентуИзМакета( + Новый ОписаниеОповещения("СоздатьОбъектКриптографииПослеПодключенияКомпоненты", ЭтотОбъект, Контекст), + Неопределено, "Обработка.ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата.Макет.КомпонентаОбмена", + ПараметрыПодключения); + +КонецПроцедуры + +&НаКлиенте +Процедура СоздатьОбъектКриптографииПослеПодключенияКомпоненты(Результат, Контекст) Экспорт + + Если Результат.Подключено Тогда + РаботаСДвоичнымиДанными = Результат.ПодключаемыйМодуль.Получить("BinaryDataS"); + Криптография = Результат.ПодключаемыйМодуль.Получить("CryptS"); + Иначе + + Криптография = Неопределено; + РаботаСДвоичнымиДанными = Неопределено; + + Если ПустаяСтрока(Результат.ОписаниеОшибки) Тогда + // Пользователь отказался от установки внешней компоненты. + ВыполнитьОбработкуОповещения(Контекст.ОбработкаПродолжения, Ложь); + Иначе + ПоказатьПредупреждение(Новый ОписаниеОповещения("СоздатьОбъектКриптографииПослеПредупрежденияОбОшибке", + ЭтотОбъект, Контекст),Результат.ОписаниеОшибки); + КонецЕсли; + + Возврат; + + КонецЕсли; + + Криптография.НачатьУстановкуНеВыводитьСообщенияОбОшибках( + Новый ОписаниеОповещения("СоздатьОбъектКриптографииПослеУстановкиНеВыводитьСообщенияОбОшибках", + ЭтотОбъект, Контекст), Истина); + +КонецПроцедуры + +&НаКлиенте +Процедура СоздатьОбъектКриптографииПослеУстановкиНеВыводитьСообщенияОбОшибках(Контекст) Экспорт + + Если Не ВозможноПродолжениеПослеОперацииКомпоненты() Тогда + Возврат; + КонецЕсли; + + ПерсональныеНастройки = ЭлектроннаяПодписьКлиент.ПерсональныеНастройки(); + ПутиКПрограммам = ПерсональныеНастройки.ПутиКПрограммамЭлектроннойПодписиИШифрования; + + Строки = СписокПрограмм.НайтиСтроки(Новый Структура("Ссылка", Объект.Программа)); + ИмяПрограммы = Строки[0].ИмяПрограммы; + ТипПрограммы = Строки[0].ТипПрограммы; + ПутьКПрограмме = Строка(ПутиКПрограммам.Получить(Объект.Программа)); + + ОповещениеПослеВызоваСоздать = Новый ОписаниеОповещения("СоздатьОбъектКриптографииПослеВызоваСоздатьМенеджераКриптографии", + ЭтотОбъект, Контекст, "СоздатьОбъектКриптографииПослеОшибкиВызоваСоздатьМенеджераКриптографии", ЭтотОбъект); + + Криптография.НачатьВызовСоздатьМенеджераКриптографии( + ОповещениеПослеВызоваСоздать, ИмяПрограммы, ПутьКПрограмме, ТипПрограммы); + +КонецПроцедуры + +&НаКлиенте +Процедура СоздатьОбъектКриптографииПослеОшибкиВызоваСоздатьМенеджераКриптографии(ИнформацияОбОшибке, СтандартнаяОбработка, Контекст) Экспорт + + СтандартнаяОбработка = Ложь; + Криптография = Неопределено; + + Если Не ВозможноПродолжениеПослеОперацииКомпоненты() Тогда + Возврат; + КонецЕсли; + + ПоказатьПредупреждение( + Новый ОписаниеОповещения("СоздатьОбъектКриптографииПослеПредупрежденияОбОшибке", ЭтотОбъект, Контекст), + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Программа электронной подписи не доступна через внешнюю компоненту по причине: + |%1'"), + ПредставлениеОшибкиДляПользователя(ИнформацияОбОшибке))); + +КонецПроцедуры + +&НаКлиенте +Процедура СоздатьОбъектКриптографииПослеВызоваСоздатьМенеджераКриптографии(Результат, ПараметрыВызова, Контекст) Экспорт + + Если Не ВозможноПродолжениеПослеОперацииКомпоненты() Тогда + Возврат; + КонецЕсли; + + Криптография.НачатьПолучениеСписокОшибок(Новый ОписаниеОповещения( + "СоздатьОбъектКриптографииПослеВызоваСоздатьМенеджераКриптографииПослеПолученияСписокОшибок", ЭтотОбъект, Контекст)); + +КонецПроцедуры + +&НаКлиенте +Процедура СоздатьОбъектКриптографииПослеВызоваСоздатьМенеджераКриптографииПослеПолученияСписокОшибок(СписокОшибок, Контекст) Экспорт + + Если Не ВозможноПродолжениеПослеОперацииКомпоненты() Тогда + Возврат; + КонецЕсли; + + Если ЗначениеЗаполнено(СписокОшибок) Тогда + СоздатьОбъектКриптографииПослеОшибкиВызоваСоздатьМенеджераКриптографии(СписокОшибок, Ложь, Контекст); + Возврат; + КонецЕсли; + + ВыполнитьОбработкуОповещения(Контекст.ОбработкаПродолжения, Истина); + +КонецПроцедуры + +&НаКлиенте +Процедура СоздатьОбъектКриптографииПослеПредупрежденияОбОшибке(Контекст) Экспорт + + ВыполнитьОбработкуОповещения(Контекст.ОбработкаПродолжения, Ложь); + +КонецПроцедуры + +#КонецОбласти + +#Область УстановкаСертификата + +&НаКлиенте +Процедура УстановитьСертификат(Оповещение) + + Если СписокПрограмм.Количество() = 0 Тогда + ЗаполнитьСписокПрограмм(); + КонецЕсли; + + ДатаУстановкиСертификата = ОбщегоНазначенияКлиент.ДатаСеанса(); + + Контекст = Новый Структура("Оповещение", Оповещение); + ОповещениеПослеСозданияМенеджера = Новый ОписаниеОповещения( + "УстановитьСертификатПослеСозданияМенеджераКриптографии", ЭтотОбъект, Контекст); + + ЭлектроннаяПодписьСлужебныйКлиент.СоздатьМенеджерКриптографии(ОповещениеПослеСозданияМенеджера, + "", Неопределено, , Истина); + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьСертификатПослеСозданияМенеджераКриптографии(Менеджер, Контекст) Экспорт + + Если ТипЗнч(Менеджер) <> Тип("МенеджерКриптографии") Тогда + + ЭлектроннаяПодписьСлужебныйКлиент.ПоказатьОшибкуОбращенияКПрограмме( + НСтр("ru = 'Установка сертификата на компьютер'"), "", Менеджер, + Новый Структура, Новый Структура("ПоказатьИнструкцию", Истина)); + + ОшибкаУстановкиСертификата = Менеджер.ОписаниеОшибки; + ВыполнитьОбработкуОповещения(Контекст.Оповещение, Ложь); + + Возврат; + + КонецЕсли; + + Контекст.Вставить("МенеджерКриптографии", Менеджер); + + Если Криптография <> Неопределено Тогда + УстановитьСертификатПослеСозданияОбъектаКриптографии(Истина, Контекст); + Иначе + СоздатьОбъектКриптографии(Новый ОписаниеОповещения( + "УстановитьСертификатПослеСозданияОбъектаКриптографии", ЭтотОбъект, Контекст), + НСтр("ru = 'Для установки сертификата на компьютер требуется + |установить расширение для веб-клиента 1С:Предприятия.'"), + НСтр("ru = 'Для установки сертификата на компьютер требуется + |установить внешнюю компоненту.'")); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьСертификатПослеСозданияОбъектаКриптографии(Результат, Контекст) Экспорт + + Если Результат <> Истина Тогда + + ВыполнитьОбработкуОповещения(Контекст.Оповещение, Ложь); + ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботыСФайлами(Новый ОписаниеОповещения( + "УстановитьСертификатПриОшибкеСозданияОбъектаКриптографииПослеПодключенияРасширенияРаботыСФайлами", ЭтотОбъект)); + + Иначе + УстановитьСертификатПослеУспехаСозданияОбъектаКриптографии(Контекст); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьСертификатПриОшибкеСозданияОбъектаКриптографииПослеПодключенияРасширенияРаботыСФайлами(Подключено, Контекст) Экспорт + + Если Не Подключено Тогда + ОшибкаУстановкиСертификата = НСтр("ru = 'Не установлено расширение для работы с файлами.'"); + Иначе + НачатьПодключениеРасширенияРаботыСКриптографией(Новый ОписаниеОповещения( + "УстановитьСертификатПриОшибкеСозданияОбъектаКриптографииПослеПодключенияРасширенияРаботыСКриптографией", ЭтотОбъект)); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьСертификатПриОшибкеСозданияОбъектаКриптографииПослеПодключенияРасширенияРаботыСКриптографией(Подключено, Контекст) Экспорт + + Если Не Подключено Тогда + ОшибкаУстановкиСертификата = НСтр("ru = 'Не установлено расширение для работы с криптографией.'"); + Иначе + ОшибкаУстановкиСертификата = НСтр("ru = 'Не установлена внешняя компонента.'"); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьСертификатПослеУспехаСозданияОбъектаКриптографии(Контекст) + + ПолучитьКаталогВременныхФайловКомпоненты(Новый ОписаниеОповещения( + "УстановитьСертификатПослеПолученияКаталогаВременныхФайловКомпоненты", ЭтотОбъект, Контекст)); + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьСертификатПослеПолученияКаталогаВременныхФайловКомпоненты(Каталог, Контекст) Экспорт + + Контекст.Вставить("ВременныйКаталог", Каталог + НовыйСжатыйУникальныйИдентификатор()); + + Контекст.ВременныйКаталог = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути( + Контекст.ВременныйКаталог); + + Контекст.Вставить("ИмяФайлаСертификата", "my.cer"); + Контекст.Вставить("ИмяФайлаКорневогоСертификата", "root.cer"); + + Контекст.Вставить("ПолучаемыеФайлы", Новый Массив); + Контекст.ПолучаемыеФайлы.Добавить(Новый ОписаниеПередаваемогоФайла( + Контекст.ИмяФайлаСертификата, АдресСертификата)); + + Контекст.ПолучаемыеФайлы.Добавить(Новый ОписаниеПередаваемогоФайла( + Контекст.ИмяФайлаКорневогоСертификата, АдресКорневогоСертификата)); + + Вызовы = Новый Массив; + ДобавитьВызов(Вызовы, "НачатьПолучениеФайлов", Контекст.ПолучаемыеФайлы, Контекст.ВременныйКаталог, Ложь); + ДобавитьВызов(Вызовы, "НачатьУдалениеФайлов", Контекст.ВременныйКаталог, Неопределено); + + НачатьЗапросРазрешенияПользователя(Новый ОписаниеОповещения( + "УстановитьСертификатПослеПолученияРазрешений", ЭтотОбъект, Контекст), Вызовы); + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьСертификатПослеПолученияРазрешений(РазрешенияПолучены, Контекст) Экспорт + + Если Не РазрешенияПолучены Тогда + + ОшибкаУстановкиСертификата = НСтр("ru = 'Сохранение сертификатов во временную папку отменено пользователем.'"); + ВыполнитьОбработкуОповещения(Контекст.Оповещение, Ложь); + Возврат; + + КонецЕсли; + + НачатьСозданиеКаталога(Новый ОписаниеОповещения( + "УстановитьСертификатПослеСозданияКаталога", ЭтотОбъект, Контекст), Контекст.ВременныйКаталог); + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьСертификатПослеСозданияКаталога(РазрешенияПолучены, Контекст) Экспорт + + ПараметрыСохранения = ФайловаяСистемаКлиент.ПараметрыСохраненияФайлов(); + ПараметрыСохранения.Диалог.Каталог = Контекст.ВременныйКаталог; + ПараметрыСохранения.Интерактивно = Ложь; + ФайловаяСистемаКлиент.СохранитьФайлы( + Новый ОписаниеОповещения("УстановитьСертификатПослеПолученияФайлов", ЭтотОбъект, Контекст), + Контекст.ПолучаемыеФайлы, ПараметрыСохранения); + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьСертификатПослеПолученияФайлов(ПолученныеФайлы, Контекст) Экспорт + + Если ПолученныеФайлы = Неопределено + Или ПолученныеФайлы.Количество() <> 2 Тогда + + ОшибкаУстановкиСертификата = НСтр("ru = 'Сертификаты не были сохранены во временную папку.'"); + УстановитьСертификатУдалитьВременныйКаталогИЗавершить(Ложь, Контекст); + Возврат; + + КонецЕсли; + + ПроверитьСуществованиеКонтейнераКлючей(Новый ОписаниеОповещения( + "УстановитьСертификатПослеПроверкиСуществованияКонтейнераКлючей", ЭтотОбъект, Контекст), + КонтейнерКлючаПуть, КонтейнерКлючаИмя); + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьСертификатПослеПроверкиСуществованияКонтейнераКлючей(Существует, Контекст) Экспорт + + Если Не Существует Тогда + + ОшибкаУстановкиСертификата = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось найти контейнер ключа на компьютере. + |Имя контейнера: ""%1"". + |Путь к контейнеру: ""%2"".'"), + КонтейнерКлючаИмя, + КонтейнерКлючаПуть); + + Контекст.Вставить("ОшибкаПоискаКонтейнера", ОшибкаУстановкиСертификата); + + Иначе + ОшибкаУстановкиСертификата = ""; + КонецЕсли; + + АктивноеОкно().Активизировать(); + + Криптография.НачатьВызовУстановитьСертификатВКонтейнерИХранилище(Новый ОписаниеОповещения( + "УстановитьСертификатПослеВызоваУстановитьСертификатВКонтейнерИХранилище", ЭтотОбъект, Контекст, + "УстановитьСертификатПослеОшибкиВызоваУстановитьСертификатВКонтейнерИХранилище", ЭтотОбъект), + Контекст.ВременныйКаталог + Контекст.ИмяФайлаСертификата, КонтейнерКлючаПуть); + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьСертификатПослеОшибкиВызоваУстановитьСертификатВКонтейнерИХранилище( + ИнформацияОбОшибке, + СтандартнаяОбработка, + Контекст) Экспорт + + СтандартнаяОбработка = Ложь; + Криптография = Неопределено; + + Если Не ВозможноПродолжениеПослеОперацииКомпоненты() Тогда + Возврат; + КонецЕсли; + + ОшибкаУстановкиСертификата = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось установить личный сертификат в контейнер ключей и хранилище ОС по причине: + |%1'"), + ПредставлениеОшибкиДляПользователя(ИнформацияОбОшибке)); + + Если Контекст.Свойство("ОшибкаПоискаКонтейнера") Тогда + ОшибкаУстановкиСертификата = ОшибкаУстановкиСертификата + + Символы.ПС + Символы.ПС + Контекст.ОшибкаПоискаКонтейнера; + КонецЕсли; + + Контекст.Вставить("РезультатПослеВызоваУстановитьСертификатВКонтейнерИХранилище", Неопределено); + УстановитьСертификатПослеВызоваУстановитьСертификатВКонтейнерИХранилищеПослеПолученияСписокОшибок(Неопределено, Контекст); + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьСертификатПослеВызоваУстановитьСертификатВКонтейнерИХранилище(Результат, ПараметрыВызова, Контекст) Экспорт + + Если Не ВозможноПродолжениеПослеОперацииКомпоненты() Тогда + Возврат; + КонецЕсли; + + Контекст.Вставить("РезультатПослеВызоваУстановитьСертификатВКонтейнерИХранилище", Результат); + + Криптография.НачатьПолучениеСписокОшибок(Новый ОписаниеОповещения( + "УстановитьСертификатПослеВызоваУстановитьСертификатВКонтейнерИХранилищеПослеПолученияСписокОшибок", ЭтотОбъект, Контекст)); + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьСертификатПослеВызоваУстановитьСертификатВКонтейнерИХранилищеПослеПолученияСписокОшибок(СписокОшибок, Контекст) Экспорт + + Если Не ВозможноПродолжениеПослеОперацииКомпоненты() Тогда + Возврат; + КонецЕсли; + + Если ЗначениеЗаполнено(СписокОшибок) Тогда + УстановитьСертификатПослеОшибкиВызоваУстановитьСертификатВКонтейнерИХранилище(СписокОшибок, Ложь, Контекст); + Возврат; + КонецЕсли; + + Результат = Контекст.РезультатПослеВызоваУстановитьСертификатВКонтейнерИХранилище; + + АктивноеОкно().Активизировать(); + + Если Результат <> Истина И Не ЗначениеЗаполнено(ОшибкаУстановкиСертификата) Тогда + ОшибкаУстановкиСертификата = НСтр("ru = 'Не удалось установить личный сертификат в контейнер ключей и хранилище ОС.'"); + КонецЕсли; + + ЭлектроннаяПодписьСлужебныйКлиент.ПолучитьСертификатПоОтпечатку(Новый ОписаниеОповещения( + "УстановитьСертификатПослеПоискаСертификата", ЭтотОбъект, Контекст), + Объект.Отпечаток, + ТипХранилищаСертификатовКриптографии.ПерсональныеСертификаты, + Неопределено, + Контекст.МенеджерКриптографии); + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьСертификатПослеПоискаСертификата(Результат, Контекст) Экспорт + + Если ТипЗнч(Результат) <> Тип("СертификатКриптографии") Тогда + + Если Результат.Свойство("СертификатНеНайден") Тогда + ОшибкаПоиска = + НСтр("ru = 'Не удалось найти личный сертификат, установленный на компьютер.'"); + Иначе + + ОшибкаПоиска = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось найти личный сертификат, установленный на компьютер по причине: + |%1'"), + Результат.ОписаниеОшибки); + + КонецЕсли; + + ОшибкаУстановкиСертификата = СокрЛ(ОшибкаУстановкиСертификата + Символы.ПС + Символы.ПС) + ОшибкаПоиска; + УстановитьСертификатУдалитьВременныйКаталогИЗавершить(Ложь, Контекст); + + Возврат; + + КонецЕсли; + + ОшибкаУстановкиСертификата = ""; + Контекст.Вставить("СертификатКриптографии", Результат); + + АктивноеОкно().Активизировать(); + + Если Криптография <> Неопределено Тогда + УстановитьСертификатПослеПроверкиНаличияСертификат(Истина, Контекст); + Иначе + + СоздатьОбъектКриптографии(Новый ОписаниеОповещения( + "УстановитьСертификатПослеПроверкиНаличияСертификат", ЭтотОбъект, Контекст), + НСтр("ru = 'Для установки сертификата на компьютер требуется + |установить расширение для веб-клиента 1С:Предприятия.'"), + НСтр("ru = 'Для установки сертификата на компьютер требуется + |установить внешнюю компоненту.'")); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьСертификатПослеПроверкиНаличияСертификат(Результат, Контекст) Экспорт + + Если Результат <> Истина Тогда + УстановитьСертификатПослеВызоваИмпортироватьСертификатПослеПолученияСписокОшибок(Неопределено, Контекст); + Возврат; + КонецЕсли; + + Криптография.НачатьВызовИмпортироватьСертификат(Новый ОписаниеОповещения( + "УстановитьСертификатПослеВызоваИмпортироватьСертификат", ЭтотОбъект, Контекст, + "УстановитьСертификатПослеОшибкиВызоваИмпортироватьСертификат", ЭтотОбъект), + Контекст.ВременныйКаталог + Контекст.ИмяФайлаКорневогоСертификата, "ROOT"); + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьСертификатПослеОшибкиВызоваИмпортироватьСертификат( + ИнформацияОбОшибке, + СтандартнаяОбработка, + Контекст) Экспорт + + СтандартнаяОбработка = Ложь; + Криптография = Неопределено; + + Если Не ВозможноПродолжениеПослеОперацииКомпоненты() Тогда + Возврат; + КонецЕсли; + + ОшибкаУстановкиСертификата = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось установить корневой сертификат в хранилище ОС по причине: + |%1'"), + ПредставлениеОшибкиДляПользователя(ИнформацияОбОшибке)); + + Контекст.Вставить("РезультатПослеВызоваИмпортироватьСертификат", Неопределено); + УстановитьСертификатПослеВызоваИмпортироватьСертификатПослеПолученияСписокОшибок(Неопределено, Контекст); + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьСертификатПослеВызоваИмпортироватьСертификат(Результат, ПараметрыВызова, Контекст) Экспорт + + Если Не ВозможноПродолжениеПослеОперацииКомпоненты() Тогда + Возврат; + КонецЕсли; + + Контекст.Вставить("РезультатПослеВызоваИмпортироватьСертификат", Результат); + Криптография.НачатьПолучениеСписокОшибок(Новый ОписаниеОповещения( + "УстановитьСертификатПослеВызоваИмпортироватьСертификатПослеПолученияСписокОшибок", ЭтотОбъект, Контекст)); + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьСертификатПослеВызоваИмпортироватьСертификатПослеПолученияСписокОшибок(СписокОшибок, Контекст) Экспорт + + Если Не ВозможноПродолжениеПослеОперацииКомпоненты() Тогда + Возврат; + КонецЕсли; + + Если ЗначениеЗаполнено(СписокОшибок) Тогда + УстановитьСертификатПослеОшибкиВызоваИмпортироватьСертификат(СписокОшибок, Ложь, Контекст); + Возврат; + КонецЕсли; + + Результат = Контекст.РезультатПослеВызоваИмпортироватьСертификат; + + АктивноеОкно().Активизировать(); + + Если Результат <> Истина И Не ЗначениеЗаполнено(ОшибкаУстановкиСертификата) Тогда + ОшибкаУстановкиСертификата = НСтр("ru = 'Не удалось установить корневой сертификат в хранилище ОС.'"); + КонецЕсли; + + АктивноеОкно().Активизировать(); + + ЭлектроннаяПодписьСлужебныйКлиент.ПолучитьСертификатПоОтпечатку(Новый ОписаниеОповещения( + "УстановитьСертификатПослеПоискаКорневогоСертификата", ЭтотОбъект, Контекст), + ОтпечатокКорневогоСертификата, + ТипХранилищаСертификатовКриптографии.КорневыеСертификаты, + Неопределено, + Контекст.МенеджерКриптографии); + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьСертификатПослеПоискаКорневогоСертификата(Результат, Контекст) Экспорт + + Если ТипЗнч(Результат) <> Тип("СертификатКриптографии") Тогда + + Если Результат.Свойство("СертификатНеНайден") Тогда + ОшибкаПоиска = + НСтр("ru = 'Не удалось найти корневой сертификат, установленный на компьютер.'"); + Иначе + + ОшибкаПоиска = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось найти корневой сертификат, установленный на компьютер по причине: + |%1'"), + Результат.ОписаниеОшибки); + + КонецЕсли; + + ОшибкаУстановкиСертификата = СокрЛ(ОшибкаУстановкиСертификата + Символы.ПС + Символы.ПС) + ОшибкаПоиска; + УстановитьСертификатУдалитьВременныйКаталогИЗавершить(Ложь, Контекст); + + Возврат; + + КонецЕсли; + + ОшибкаУстановкиСертификата = ""; + УстановитьСертификатУдалитьВременныйКаталогИЗавершить( + Не ЗначениеЗаполнено(ОшибкаУстановкиСертификата), Контекст); + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьСертификатУдалитьВременныйКаталогИЗавершить(Результат, Контекст) + + Контекст.Вставить("Результат", Результат); + НачатьУдалениеФайлов(Новый ОписаниеОповещения( + "УстановитьСертификатПослеУдаленияВременногоКаталога", ЭтотОбъект, Контекст), + Контекст.ВременныйКаталог); + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьСертификатПослеУдаленияВременногоКаталога(Контекст) Экспорт + + ВыполнитьОбработкуОповещения(Контекст.Оповещение, Контекст.Результат); + +КонецПроцедуры + +&НаКлиенте +Процедура ПослеУстановкиСертификата(Установлен, Контекст) Экспорт + + ПослеУстановкиСертификатаНаСервере(Установлен); + Если Установлен Тогда + ПослеЗаписи(); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ПослеУстановкиСертификатаНаСервере(Установлен) + + Если Установлен Тогда + СостояниеОбработкиЗаявления = НСтр("ru = 'Заявление исполнено.'"); + Объект.СостояниеЗаявления = Перечисления.СостоянияЗаявленияНаВыпускСертификата.Исполнено; + ЗаписатьЗаявление(); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ПредставлениеДанных + +&НаКлиенте +Функция ПредставлениеОшибкиДляПользователя(ИнформацияОбОшибке) + + Если ТипЗнч(ИнформацияОбОшибке) = Тип("ИнформацияОбОшибке") Тогда + Возврат КраткоеПредставлениеОшибки(ИнформацияОбОшибке); + Иначе + Возврат Строка(ИнформацияОбОшибке); + КонецЕсли; + +КонецФункции + +&НаСервереБезКонтекста +Функция ИмяРегионаРФПоРекомендациямДляСКПЭП(КодРегиона) + + // Методические рекомендации по составу квалифицированного сертификата ключа + // проверки электронной подписи (Версия 1.4). + // + // Приложение 2. Формат названия субъекта федерации. + // Из раздела "Справочник кодов регионов". + + ИменаВсехРегионовРФ = Обработки.ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата.ПолучитьМакет( + "ИменаРегионовРФ"); + + Строка = ИменаВсехРегионовРФ.ПолучитьСтроку(Число(КодРегиона)); + Если Не СтрНачинаетсяС(Строка, КодРегиона + " ") Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Регион РФ с кодом ""%1"" не существует.'"), КодРегиона); + КонецЕсли; + + Строка = СокрЛП(Сред(Строка, 4)); + Если Не ЗначениеЗаполнено(Строка) Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Для региона РФ с кодом ""%1"" имя, рекомендованное для СКПЭП, еще не назначено.'"), КодРегиона); + КонецЕсли; + + Возврат Строка; + +КонецФункции + +&НаСервереБезКонтекста +Функция ПредставлениеЧастиАдреса(АдресСтруктура, СписокПолей) + + Представление = ""; + СтруктураПолей = Новый Структура(СписокПолей); + ЗаполнитьЗначенияСвойств(СтруктураПолей, АдресСтруктура); + + МодульУправлениеКонтактнойИнформацией = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформацией"); + Представление = МодульУправлениеКонтактнойИнформацией.ПредставлениеКонтактнойИнформации(СтруктураПолей); + + Возврат Представление; + +КонецФункции + +&НаКлиентеНаСервереБезКонтекста +Функция ТолькоЦифры(Строка) + + ДлинаСтроки = СтрДлина(Строка); + + ОбработаннаяСтрока = ""; + Для НомерСимвола = 1 По ДлинаСтроки Цикл + + Символ = Сред(Строка, НомерСимвола, 1); + Если Символ >= "0" И Символ <= "9" Тогда + ОбработаннаяСтрока = ОбработаннаяСтрока + Символ; + КонецЕсли; + + КонецЦикла; + + Возврат ОбработаннаяСтрока; + +КонецФункции + +&НаКлиентеНаСервереБезКонтекста +Функция НаселенныйПунктПолностью(АдресСтруктура) + + // Округ ОкругСокращение, Район РайонСокращение, Город ГородСокращение, + // ВнутригородскойРайон ВнутригородскойРайонСокращение, НаселенныйПункт НаселенныйПунктСокращение. + + СписокПолей = ""; + Если АдресСтруктура.Свойство("Регион") + И АдресСтруктура.Свойство("КодРегиона") + И (АдресСтруктура.КодРегиона = "77" + Или АдресСтруктура.КодРегиона = "78" + Или АдресСтруктура.КодРегиона = "92" + Или АдресСтруктура.КодРегиона = "99") Тогда + + СписокПолей = "Регион, КодРегиона, "; + КонецЕсли; + + Возврат ПредставлениеЧастиАдреса(АдресСтруктура, СписокПолей + + "Округ, + |Район, + |Город, + |ВнутригородскойРайон, + |НаселенныйПункт, + |Территория"); + +КонецФункции + &НаКлиентеНаСервереБезКонтекста Функция ПредставлениеДвоичныхДанных(Знач Строка, БайтВСтроке = 20) @@ -5166,425 +4674,175 @@ КонецФункции -&НаКлиенте -Функция ОписаниеЗапросаНаКвалифицированныйСертификат(Поля) +&НаКлиентеНаСервереБезКонтекста +Функция ПредставлениеРеквизитаНомерПаспортаРФ(НомерПаспортаРФ) - СписокПараметров = Новый СписокЗначений; - Поля = Новый Структура; - - Адрес = ЮридическийАдресСтруктура; - СимволРазделения = СимволРазделенияЧастейИмениИлиЧастейФамилииИлиЧастейОтчестваВСертификате(); - - // Поле CN - общее имя (организация или индивидуальный предприниматель). - Если ЭтоИндивидуальныйПредприниматель Тогда - ПолеОбщееИмя = СокрП(СтрЗаменить(Фамилия, " ", СимволРазделения) - + " " + СтрЗаменить(Имя, " ", СимволРазделения) - + " " + СтрЗаменить(Отчество, " ", СимволРазделения)); - Иначе - ПолеОбщееИмя = НаименованиеСокращенное; - КонецЕсли; - Поля.Вставить("CN", Лев(ПолеОбщееИмя, 64)); - СписокПараметров.Добавить("2.5.4.3", Поля.CN); - - // Поле SN - фамилия должностного лица или индивидуального предпринимателя. - ПолеФамилия = СтрЗаменить(Фамилия, " ", СимволРазделения); - Поля.Вставить("SN", Лев(ПолеФамилия, 64)); - СписокПараметров.Добавить("2.5.4.4", Поля.SN); - - // Поле G - имя и отчество должностного лица или индивидуального предпринимателя. - ПолеОтчество = СокрП(СтрЗаменить(Имя, " ", СимволРазделения) - + " " + СтрЗаменить(Отчество, " ", СимволРазделения)); - - Поля.Вставить("G", Лев(ПолеОтчество, 64)); - СписокПараметров.Добавить("2.5.4.42", Поля.G); - - // Поле C - страна. - Поля.Вставить("C", "RU"); - СписокПараметров.Добавить("2.5.4.6", Поля.C); - - // Следующие поля S, L, Street - адрес местонахождения организации или - // регистрации индивидуального предпринимателя. - - // Поле S (ST) - регион (<код региона> <имя региона>) - наименование субъекта РФ для СКПЭП, - // например, "77 г. Москва". - ПолеРегион = Адрес.КодРегиона + " " + ИмяРегионаРФПоРекомендациямДляСКПЭП(Адрес.КодРегиона); - Поля.Вставить("S", Лев(ПолеРегион, 128)); - СписокПараметров.Добавить("2.5.4.8", Поля.S); - - // Поле L - населенный пункт: - // "<округ> и/или <район> и/или <город> и/или <внутригородской район> и/или <населенный пункт>". - // Например, "<район>, <город>, <населенный пункт>": - // "Москва г, Зеленоград г, Крюково п", "Москва г, Зеленоград г, Малино п". - ПолеНаселенныйПункт = НаселенныйПунктПолностью(Адрес); - Поля.Вставить("L", Лев(ПолеНаселенныйПункт, 128)); - СписокПараметров.Добавить("2.5.4.7", Поля.L); - - // Поле Street - улица: - // "<улица> и/или <дополнительная территория> и/или <элемент дополнительной территории>, дом, офис". - ПолеУлица = ПредставлениеЧастиАдреса(Адрес, - "Улица, - |ДополнительнаяТерритория, - |ЭлементДополнительнойТерритории, - |Здание, Корпуса, Помещения"); - Поля.Вставить("Street", Лев(ПолеУлица, 128)); - СписокПараметров.Добавить("2.5.4.9", Поля.Street); - - Если ЭтоИндивидуальныйПредприниматель Тогда - // Поле OGRNIP - ОГРНИП индивидуального предпринимателя 15 символов. - Поля.Вставить("OGRNIP", ОГРН); - СписокПараметров.Добавить("1.2.643.100.5", Поля.OGRNIP); - Иначе - // Поле O - организация. - Поля.Вставить("O", Лев(НаименованиеСокращенное, 64)); - СписокПараметров.Добавить("2.5.4.10", Поля.O); - - // Поле OU - обособленное подразделение должностного лица. - Если ЗначениеЗаполнено(Подразделение) Тогда - Поля.Вставить("OU", Лев(Подразделение, 64)); - СписокПараметров.Добавить("2.5.4.11", Поля.OU); - КонецЕсли; - - // Поле T - должность должностного лица. - Поля.Вставить("T", Лев(Должность, 64)); - СписокПараметров.Добавить("2.5.4.12", Поля.T); - - // Поле OGRN - ОГРН юридического лица 13 символов. - Поля.Вставить("OGRN", ОГРН); - СписокПараметров.Добавить("1.2.643.100.1", Поля.OGRN); - КонецЕсли; - - // Поле SNILS - СНИЛС должностного лица или индивидуального предпринимателя. - Поля.Вставить("SNILS", СтраховойНомерПФР); - СписокПараметров.Добавить("1.2.643.100.3", Поля.SNILS); - - // Поле INN - ИНН организации или индивидуального предпринимателя. - Поля.Вставить("INN", Прав("00" + ИНН, 12)); - СписокПараметров.Добавить("1.2.643.3.131.1.1", Поля.INN); - - // Поле E - электронная почта должностного лица организации или индивидуального предпринимателя. - Поля.Вставить("E", Лев(ЭлектроннаяПочта, 128)); - СписокПараметров.Добавить("1.2.840.113549.1.9.1", Поля.E); - - // Подготовка строки запроса. - - Свойства = ""; - Для Каждого Параметр Из СписокПараметров Цикл - Свойства = Свойства + ",<" + Параметр.Значение + "=" + СокрЛП(Параметр.Представление) + ">"; - КонецЦикла; - Свойства = Сред(Свойства, 2); - - // Использование ключа - Проверка подлинности клиента, Защищенная электронная почта. - ИспользованиеКлюча = "1.3.6.1.5.5.7.3.2,1.3.6.1.5.5.7.3.4"; - - // Для УЦ КриптоПро 2.0 требуется указать шаблон сертификата. - // Без встроенной лицензии шаблон - "1.2.643.2.2.46.0.8", со встроенной лицензией - // шаблон - "1.2.643.2.2.50.1.9.8791462.1882306.9191997.3049782.15111.41178". - ШаблонСертификата = "1.2.643.2.2.46.0.8"; - - Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - "pRequestInfo:{ - |CertAttrs:{%1} - |CertEnhKeyUsage:{%2} - |CertPolicies:{<1.2.643.100.113.1=>} - |dwKeyUsage:{240} - |SignTool:{%3} - |CertTemplate:{%4} - |}", - Свойства, - ИспользованиеКлюча, - ПредставлениеПрограммы, - ШаблонСертификата); + Возврат Лев(НомерПаспортаРФ, 2) + " " + Сред(НомерПаспортаРФ, 3, 2) + " " + Прав(НомерПаспортаРФ, 6); КонецФункции -&НаКлиенте -Функция СимволРазделенияЧастейИмениИлиЧастейФамилииИлиЧастейОтчестваВСертификате() +&НаКлиентеНаСервереБезКонтекста +Функция ПредставлениеРеквизитаДокументКодПодразделения(КодПодразделения) - Возврат "_"; + Если Не ЗначениеЗаполнено(КодПодразделения) Тогда + Возврат ""; + КонецЕсли; + + Возврат Лев(КодПодразделения, 3) + "-" + Сред(КодПодразделения, 4); КонецФункции -&НаКлиенте -Функция ПредставлениеОшибкиДляПользователя(ИнформацияОбОшибке) +&НаКлиентеНаСервереБезКонтекста +Функция ПредставлениеРеквизитаДокументДатаВыдачи(ДокументДатаВыдачи) - Если ТипЗнч(ИнформацияОбОшибке) = Тип("ИнформацияОбОшибке") Тогда - Возврат КраткоеПредставлениеОшибки(ИнформацияОбОшибке); - Иначе - Возврат Строка(ИнформацияОбОшибке); - КонецЕсли; + Возврат Формат(ДокументДатаВыдачи, "ДФ=dd.MM.yyyy"); // АПК:335 Не локализуется (формат веб-сервиса). КонецФункции +&НаКлиентеНаСервереБезКонтекста +Функция ПредставлениеВидаДокумента(ВидДокумента) + + Возврат ?(ВидДокумента = "21", + НСтр("ru = 'паспорт гражданина Российской Федерации'"), + НСтр("ru = 'иной документ, предусмотренный законодательством Российской Федерации'")); + +КонецФункции + +&НаКлиентеНаСервереБезКонтекста +Функция ПредставлениеРеквизитаСтраховойНомерПФР(СтраховойНомерПФР) + + Возврат Сред(СтраховойНомерПФР, 1, 3) + "-" + Сред(СтраховойНомерПФР, 4, 3) + + "-" + Сред(СтраховойНомерПФР, 7, 3) + " " + Сред(СтраховойНомерПФР, 10, 2); + +КонецФункции + +&НаКлиентеНаСервереБезКонтекста +Функция ПредставлениеРеквизитаДатаРождения(ДатаРождения) + + Возврат Формат(ДатаРождения, "ДФ=dd.MM.yyyy"); // АПК:335 Не локализуется (формат веб-сервиса). + +КонецФункции + +#КонецОбласти + +#Область ОблачныйСервисПодписи &НаКлиенте -Процедура ПолучитьИменаКонтейнеровКлючей(Оповещение) +Процедура СоздатьЗапросВОблачныйСервис() - Контекст = Новый Структура; - Контекст.Вставить("Оповещение", Оповещение); - Контекст.Вставить("СписокИмен", Новый СписокЗначений); - Контекст.Вставить("ПервыйПроход", Истина); - Контекст.Вставить("Индекс", -1); + ИдентификаторЗаявленияВОблачныйСервис = Новый УникальныйИдентификатор; - ПолучитьИменаКонтейнеровКлючейЦиклНачало(Контекст); + ЗапросНаСертификат = Неопределено; + ТекстЗапросаНаСертификат = ОписаниеЗапросаНаКвалифицированныйСертификат(ЗапросНаСертификат); + + МодульМенеджерСервисаКриптографииКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("МенеджерСервисаКриптографииКлиент"); + МодульМенеджерСервисаКриптографииКлиент.СоздатьКонтейнерИЗапросНаСертификат( + Новый ОписаниеОповещения("СоздатьЗапросВОблачныйСервисПослеОтправкиЗапроса", ЭтотОбъект, ЗапросНаСертификат), + ИдентификаторЗаявленияВОблачныйСервис, ТекстЗапросаНаСертификат); КонецПроцедуры -// Продолжение процедуры ПолучитьИменаКонтейнеровКлючей. &НаКлиенте -Процедура ПолучитьИменаКонтейнеровКлючейЦиклНачало(Контекст) +Процедура СоздатьЗапросВОблачныйСервисПослеОтправкиЗапроса(ОтветСервиса, ЗапросНаСертификат) Экспорт - Контекст.Вставить("ТекущееИмя", ""); - - Криптография.НачатьВызовПолучитьСледующийКонтейнерКлючей(Новый ОписаниеОповещения( - "ПолучитьИменаКонтейнеровКлючейЦиклПослеВызоваПолучитьСледующийКонтейнерКлючей", ЭтотОбъект, Контекст, - "ПолучитьИменаКонтейнеровКлючейЦиклПослеОшибкиВызоваПолучитьСледующийКонтейнерКлючей", ЭтотОбъект), - Контекст.ТекущееИмя, Контекст.ПервыйПроход); - -КонецПроцедуры - -// Продолжение процедуры ПолучитьИменаКонтейнеровКлючей. -&НаКлиенте -Процедура ПолучитьИменаКонтейнеровКлючейЦиклПослеОшибкиВызоваПолучитьСледующийКонтейнерКлючей(ИнформацияОбОшибке, СтандартнаяОбработка, Контекст) Экспорт - - СтандартнаяОбработка = Ложь; - Криптография = Неопределено; - - Если Не ВозможноПродолжениеПослеОперацииКомпоненты() Тогда - Возврат; - КонецЕсли; - - ПоказатьПредупреждение(, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не удалось получить имя следующего контейнера ключей по причине: - |%1'"), - ПредставлениеОшибкиДляПользователя(ИнформацияОбОшибке))); - -КонецПроцедуры - -// Продолжение процедуры ПолучитьИменаКонтейнеровКлючей. -&НаКлиенте -Процедура ПолучитьИменаКонтейнеровКлючейЦиклПослеВызоваПолучитьСледующийКонтейнерКлючей(Результат, ПараметрыВызова, Контекст) Экспорт - - Если Не ВозможноПродолжениеПослеОперацииКомпоненты() Тогда - Возврат; - КонецЕсли; - - Контекст.Вставить("РезультатПослеВызоваПолучитьСледующийКонтейнерКлючей", Результат); - Контекст.Вставить("ПараметрыВызоваПослеВызоваПолучитьСледующийКонтейнерКлючей", ПараметрыВызова); - - Криптография.НачатьПолучениеСписокОшибок(Новый ОписаниеОповещения( - "ПолучитьИменаКонтейнеровКлючейЦиклПослеВызоваПолучитьСледующийКонтейнерКлючейПослеПолученияСписокОшибок", ЭтотОбъект, Контекст)); - -КонецПроцедуры - -// Продолжение процедуры ПолучитьИменаКонтейнеровКлючей. -&НаКлиенте -Процедура ПолучитьИменаКонтейнеровКлючейЦиклПослеВызоваПолучитьСледующийКонтейнерКлючейПослеПолученияСписокОшибок(СписокОшибок, Контекст) Экспорт - - Если Не ВозможноПродолжениеПослеОперацииКомпоненты() Тогда - Возврат; - КонецЕсли; - - Если ЗначениеЗаполнено(СписокОшибок) Тогда - ПолучитьИменаКонтейнеровКлючейЦиклПослеОшибкиВызоваПолучитьСледующийКонтейнерКлючей(СписокОшибок, Ложь, Контекст); - Возврат; - КонецЕсли; - - Результат = Контекст.РезультатПослеВызоваПолучитьСледующийКонтейнерКлючей; - ПараметрыВызова = Контекст.ПараметрыВызоваПослеВызоваПолучитьСледующийКонтейнерКлючей; - - Если Не Результат Тогда - Если Контекст.ПервыйПроход Тогда - Контекст.ПервыйПроход = Ложь; - ПолучитьИменаКонтейнеровКлючейЦиклНачало(Контекст); - Иначе - Имена = ""; - Для каждого ЭлементСписка Из Контекст.СписокИмен Цикл - УникальноеИмя = ЭлементСписка.Значение; - - Если УникальноеИмя = ЭлементСписка.Представление - И СтрНайти(УникальноеИмя, "/") = 0 - И СтрНайти(УникальноеИмя, "\") = 0 - И СтрНайти(УникальноеИмя, ":") = 0 Тогда - - // ViPNet 3.2 (основная папка контейнеров не указана). - УникальноеИмя = "\Infotecs\Containers\" + УникальноеИмя; - КонецЕсли; - - Имена = Имена + Символы.ПС + УникальноеИмя; - Имена = Имена + Символы.ПС + ЭлементСписка.Представление; - Имена = Имена + Символы.ПС; - КонецЦикла; - ВыполнитьОбработкуОповещения(Контекст.Оповещение, СокрЛП(Имена)); - КонецЕсли; - Возврат; - КонецЕсли; - - ТекущееИмя = ПараметрыВызова[0]; - - Если Контекст.ПервыйПроход Тогда - Контекст.СписокИмен.Добавить(ТекущееИмя); - Иначе - Контекст.Индекс = Контекст.Индекс + 1; - Контекст.СписокИмен[Контекст.Индекс].Представление = ТекущееИмя; - КонецЕсли; - - ПолучитьИменаКонтейнеровКлючейЦиклНачало(Контекст); - -КонецПроцедуры - - -&НаКлиенте -Процедура СоздатьОбъектКриптографии(ОбработкаПродолжения, НазначениеРасширенияДляРаботыСФайлами, НазначениеВнешнейКомпонентыКриптографии) - - Контекст = Новый Структура; - Контекст.Вставить("ОбработкаПродолжения", ОбработкаПродолжения); - Контекст.Вставить("НазначениеВнешнейКомпонентыКриптографии", НазначениеВнешнейКомпонентыКриптографии); - - ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботыСФайлами( - Новый ОписаниеОповещения("СоздатьОбъектКриптографииПослеПодключенияРасширенияРаботыСФайлами", - ЭтотОбъект, Контекст), - НазначениеРасширенияДляРаботыСФайлами, - Ложь); - -КонецПроцедуры - -// Продолжение процедуры СоздатьОбъектКриптографии. -&НаКлиенте -Процедура СоздатьОбъектКриптографииПослеПодключенияРасширенияРаботыСФайлами(Результат, Контекст) Экспорт - - Если Результат <> Истина Тогда - ВыполнитьОбработкуОповещения(Контекст.ОбработкаПродолжения, Ложь); - Возврат; - КонецЕсли; - - ПараметрыПодключения = ОбщегоНазначенияКлиент.ПараметрыПодключенияКомпоненты(); - ПараметрыПодключения.ТекстПояснения = Контекст.НазначениеВнешнейКомпонентыКриптографии; - // Объект создается на одно действие до исключения, кэширование на время сеанса не подходит. - ПараметрыПодключения.Кэшировать = Ложь; - ПараметрыПодключения.ИдентификаторыСозданияОбъектов.Добавить("BinaryDataS"); - ПараметрыПодключения.ИдентификаторыСозданияОбъектов.Добавить("CryptS"); - - // РаботаСДвоичнымиДанными. - ОбщегоНазначенияКлиент.ПодключитьКомпонентуИзМакета( - Новый ОписаниеОповещения("СоздатьОбъектКриптографииПослеПодключенияКомпоненты", - ЭтотОбъект, Контекст), Неопределено, - "Обработка.ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата.Макет.КомпонентаОбмена", - ПараметрыПодключения); - -КонецПроцедуры - -// Продолжение процедуры СоздатьОбъектКриптографии. -&НаКлиенте -Процедура СоздатьОбъектКриптографииПослеПодключенияКомпоненты(Результат, Контекст) Экспорт - - Если Результат.Подключено Тогда - РаботаСДвоичнымиДанными = Результат.ПодключаемыйМодуль.Получить("BinaryDataS"); - Криптография = Результат.ПодключаемыйМодуль.Получить("CryptS"); - Иначе - РаботаСДвоичнымиДанными = Неопределено; - Криптография = Неопределено; + Доступность = Истина; + Если Не ОтветСервиса.Выполнено Тогда - Если ПустаяСтрока(Результат.ОписаниеОшибки) Тогда - // Пользователь отказался от установки внешней компоненты. - ВыполнитьОбработкуОповещения(Контекст.ОбработкаПродолжения, Ложь); - Иначе - ПоказатьПредупреждение( - Новый ОписаниеОповещения("СоздатьОбъектКриптографииПослеПредупрежденияОбОшибке", ЭтотОбъект, Контекст), - Результат.ОписаниеОшибки); - КонецЕсли; + ИдентификаторЗаявленияВОблачныйСервис = Неопределено; + + ЗаголовокОшибки = НСтр("ru = 'Создание ключа электронной подписи и запроса на сертификат'"); + ПоказатьОшибкуВзаимодействияСОблачнымСервисом(ЗаголовокОшибки, ОтветСервиса.ОписаниеОшибки); Возврат; + КонецЕсли; - Криптография.НачатьУстановкуНеВыводитьСообщенияОбОшибках(Новый ОписаниеОповещения( - "СоздатьОбъектКриптографииПослеУстановкиНеВыводитьСообщенияОбОшибках", ЭтотОбъект, Контекст), - Истина); + Модифицированность = Истина; + АдресЗапросаНаСертификат = АдресЗапросаНаСертификат(ОтветСервиса.ЗапросСертификата, УникальныйИдентификатор); + ОткрытаяЧастьКлючаЭП = ПредставлениеДвоичныхДанных(Строка(ОтветСервиса.ОткрытыйКлюч)); + ИдентификаторКлючаСубъекта = ПредставлениеДвоичныхДанных(ИдентификаторКлючаСубъектаHexСтрокой(ОткрытаяЧастьКлючаЭП)); + ДокументыПоляСертификата = ЗапросНаСертификат; + ДатаЗаявления = Формат(ОбщегоНазначенияКлиент.ДатаСеанса(), "ДФ=dd.MM.yyyy"); // АПК:335 Не локализуется (формат веб-сервиса). + + Программы = СписокПрограмм.НайтиСтроки(Новый Структура("Ссылка", Объект.Программа)); + Программы[0].ИмяПрограммы = ОтветСервиса.ИмяПровайдера; + Программы[0].ТипПрограммы = ОтветСервиса.ТипПровайдера; + + ПечатьЗаявленияПослеСозданияКлючаИЗапросаНаСертификат(Истина, Неопределено); КонецПроцедуры -// Продолжение процедуры СоздатьОбъектКриптографии. &НаКлиенте -Процедура СоздатьОбъектКриптографииПослеУстановкиНеВыводитьСообщенияОбОшибках(Контекст) Экспорт +Процедура УстановитьСертификатОблачногоСервиса() - Если Не ВозможноПродолжениеПослеОперацииКомпоненты() Тогда - Возврат; - КонецЕсли; - - ПерсональныеНастройки = ЭлектроннаяПодписьКлиент.ПерсональныеНастройки(); - ПутиКПрограммам = ПерсональныеНастройки.ПутиКПрограммамЭлектроннойПодписиИШифрования; - - Строки = СписокПрограмм.НайтиСтроки(Новый Структура("Ссылка", Объект.Программа)); - ИмяПрограммы = Строки[0].ИмяПрограммы; - ТипПрограммы = Строки[0].ТипПрограммы; - ПутьКПрограмме = Строка(ПутиКПрограммам.Получить(Объект.Программа)); - - Криптография.НачатьВызовСоздатьМенеджераКриптографии(Новый ОписаниеОповещения( - "СоздатьОбъектКриптографииПослеВызоваСоздатьМенеджераКриптографии", ЭтотОбъект, Контекст, - "СоздатьОбъектКриптографииПослеОшибкиВызоваСоздатьМенеджераКриптографии", ЭтотОбъект), - ИмяПрограммы, ПутьКПрограмме, ТипПрограммы); + МодульМенеджерСервисаКриптографииКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("МенеджерСервисаКриптографииКлиент"); + МодульМенеджерСервисаКриптографииКлиент.УстановитьСертификатВКонтейнерИХранилище( + Новый ОписаниеОповещения("УстановитьСертификатОблачногоСервисаПослеУстановки", ЭтотОбъект), + ИдентификаторЗаявленияВОблачныйСервис, ПолучитьИзВременногоХранилища(АдресСертификата)); КонецПроцедуры -// Продолжение процедуры СоздатьОбъектКриптографии. &НаКлиенте -Процедура СоздатьОбъектКриптографииПослеОшибкиВызоваСоздатьМенеджераКриптографии(ИнформацияОбОшибке, СтандартнаяОбработка, Контекст) Экспорт +Процедура УстановитьСертификатОблачногоСервисаПослеУстановки(ОтветСервиса, ДополнительныеПараметры) Экспорт - СтандартнаяОбработка = Ложь; - Криптография = Неопределено; - - Если Не ВозможноПродолжениеПослеОперацииКомпоненты() Тогда + Если Не ОтветСервиса.Выполнено Тогда + + ЗаголовокОшибки = НСтр("ru = 'Установка сертификата в контейнер ключа и хранилище сертификатов'"); + ПоказатьОшибкуВзаимодействияСОблачнымСервисом(ЗаголовокОшибки, ОтветСервиса.ОписаниеОшибки); Возврат; + КонецЕсли; - ПоказатьПредупреждение(Новый ОписаниеОповещения( - "СоздатьОбъектКриптографииПослеПредупрежденияОбОшибке", ЭтотОбъект, Контекст), - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Программа электронной подписи не доступна через внешнюю компоненту по причине: - |%1'"), - ПредставлениеОшибкиДляПользователя(ИнформацияОбОшибке))); + ПослеУстановкиСертификата(ОтветСервиса.Выполнено, Неопределено); КонецПроцедуры -// Продолжение процедуры СоздатьОбъектКриптографии. &НаКлиенте -Процедура СоздатьОбъектКриптографииПослеВызоваСоздатьМенеджераКриптографии(Результат, ПараметрыВызова, Контекст) Экспорт +Процедура ПоказатьОшибкуВзаимодействияСОблачнымСервисом(ЗаголовокОшибки, ОписаниеОшибки) - Если Не ВозможноПродолжениеПослеОперацииКомпоненты() Тогда - Возврат; - КонецЕсли; - - Криптография.НачатьПолучениеСписокОшибок(Новый ОписаниеОповещения( - "СоздатьОбъектКриптографииПослеВызоваСоздатьМенеджераКриптографииПослеПолученияСписокОшибок", ЭтотОбъект, Контекст)); + Ошибка = Новый Структура; + Ошибка.Вставить("ПоказатьИнструкцию", Истина); + Ошибка.Вставить("ОписаниеОшибки", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось выполнить операцию в облачном сервисе по причине: + | + |%1'"), ОписаниеОшибки)); + ЭлектроннаяПодписьСлужебныйКлиент.ПоказатьОшибкуОбращенияКПрограмме( + ЗаголовокОшибки, "", Ошибка,Новый Структура, Новый Структура("ПоказатьИнструкцию", Истина)); + КонецПроцедуры -// Продолжение процедуры СоздатьОбъектКриптографии. +&НаСервереБезКонтекста +Функция АдресЗапросаНаСертификат(ЗапросСертификата, УникальныйИдентификатор) + + ФайлЗапросаНаСертификат = ПолучитьИмяВременногоФайла(".p10"); + + ТекстЗапросаНаСертификат = "-----BEGIN NEW CERTIFICATE REQUEST-----" + Символы.ПС + + СтрЗаменить(Base64Строка(ЗапросСертификата), Символы.ВК, "") + Символы.ПС + + "-----END NEW CERTIFICATE REQUEST-----" + Символы.ПС; + + ТекстовыйДокумент = Новый ТекстовыйДокумент; + ТекстовыйДокумент.УстановитьТекст(ТекстЗапросаНаСертификат); + ТекстовыйДокумент.Записать(ФайлЗапросаНаСертификат); + + ДанныеЗапросаНаСертификат = Новый ДвоичныеДанные(ФайлЗапросаНаСертификат); + УдалитьФайлы(ФайлЗапросаНаСертификат); + + Возврат ПоместитьВоВременноеХранилище(ДанныеЗапросаНаСертификат, УникальныйИдентификатор); + +КонецФункции + +#КонецОбласти + +#Область Прочее + &НаКлиенте -Процедура СоздатьОбъектКриптографииПослеВызоваСоздатьМенеджераКриптографииПослеПолученияСписокОшибок(СписокОшибок, Контекст) Экспорт +Процедура ВыгрузитьСертификатЗавершение(Результат, Контекст) Экспорт - Если Не ВозможноПродолжениеПослеОперацииКомпоненты() Тогда - Возврат; - КонецЕсли; - - Если ЗначениеЗаполнено(СписокОшибок) Тогда - СоздатьОбъектКриптографииПослеОшибкиВызоваСоздатьМенеджераКриптографии(СписокОшибок, Ложь, Контекст); - Возврат; - КонецЕсли; - - ВыполнитьОбработкуОповещения(Контекст.ОбработкаПродолжения, Истина); + ЭлектроннаяПодписьСлужебныйКлиент.СохранитьСертификат(Неопределено, + АдресКорневогоСертификата, НСтр("ru = 'Корневой сертификат ООО НПЦ 1С'")); КонецПроцедуры -// Продолжение процедуры СоздатьОбъектКриптографии. -&НаКлиенте -Процедура СоздатьОбъектКриптографииПослеПредупрежденияОбОшибке(Контекст) Экспорт - - ВыполнитьОбработкуОповещения(Контекст.ОбработкаПродолжения, Ложь); - -КонецПроцедуры - -// Создание каталога временных файлов компоненты ExtIntgr. - &НаКлиенте Процедура ПолучитьКаталогВременныхФайловКомпоненты(Оповещение) @@ -5595,7 +4853,6 @@ КонецПроцедуры -// Продолжение процедуры ПолучитьКаталогВременныхФайловКомпоненты. &НаКлиенте Процедура ПолучитьКаталогВременныхФайловКомпонентыПослеВызова(Каталог, ПараметрыВызова, Контекст) Экспорт @@ -5604,7 +4861,20 @@ КонецПроцедуры -// Прекращение операции компоненты, если форма закрыта. +&НаКлиенте +Функция ИмяФайлаБезРасширения() + + Если ЭтоИндивидуальныйПредприниматель Тогда + ИмяФайлаБезРасширения = СокрП(Фамилия + " " + Имя + " " + Отчество); + Иначе + ИмяФайлаБезРасширения = СокрП(Фамилия + " " + Имя + " " + Отчество) + ", " + НаименованиеСокращенное + + ?(ЗначениеЗаполнено(Подразделение), ", " + Подразделение, "") + ", " + Должность; + КонецЕсли; + + Возврат ИмяФайлаБезРасширения; + +КонецФункции + &НаКлиенте Функция ВозможноПродолжениеПослеОперацииКомпоненты() @@ -5621,4 +4891,99 @@ КонецФункции +&НаКлиенте +Функция СимволРазделенияЧастейИмениИлиЧастейФамилииИлиЧастейОтчестваВСертификате() + + Возврат "_"; + +КонецФункции + +&НаСервере +Процедура ЗаполнитьЗаголовкиРеквизитов() + + Реквизиты = ПолучитьРеквизиты(); + Для каждого Реквизит Из Реквизиты Цикл + ЗаголовкиРеквизитов.Добавить(Реквизит.Имя, Реквизит.Заголовок); + КонецЦикла; + +КонецПроцедуры + +&НаСервереБезКонтекста +Функция ИдентификаторКлючаСубъектаHexСтрокой(ОткрытаяЧастьКлючаHexСтрокой) + + ХешированиеДанных = Новый ХешированиеДанных(ХешФункция.SHA1); + ХешированиеДанных.Добавить(ПолучитьДвоичныеДанныеИзHexСтроки(ОткрытаяЧастьКлючаHexСтрокой)); + + Возврат ПолучитьHexСтрокуИзДвоичныхДанных(ХешированиеДанных.ХешСумма); + +КонецФункции + +&НаСервереБезКонтекста +Функция ПрограммаОблачногоСервиса() + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ПрограммыЭлектроннойПодписиИШифрования.Ссылка КАК Ссылка + |ИЗ + | Справочник.ПрограммыЭлектроннойПодписиИШифрования КАК ПрограммыЭлектроннойПодписиИШифрования + |ГДЕ + | ПрограммыЭлектроннойПодписиИШифрования.ЭтоПрограммаОблачногоСервиса"; + ПрограммыОблачногоСервиса = Запрос.Выполнить().Выбрать(); + + Если ПрограммыОблачногоСервиса.Следующий() Тогда + Возврат ПрограммыОблачногоСервиса.Ссылка; + КонецЕсли; + + Возврат Неопределено; + +КонецФункции + +&НаКлиентеНаСервереБезКонтекста +Функция НайтиБезУчетаРегистраИРазделителяПути(Строка, ПодстрокаПоиска) + + Возврат СтрНайти(НРег(СтрЗаменить(Строка, "/", "\")), НРег(СтрЗаменить(ПодстрокаПоиска, "/", "\"))); + +КонецФункции + +&НаКлиентеНаСервереБезКонтекста +Функция УстановитьГиперссылку(Строка, Подстрока, Гиперссылка) + + Позиция = СтрНайти(Строка, Подстрока); + Если Позиция = 0 Тогда + Возврат Новый ФорматированнаяСтрока(Строка); + КонецЕсли; + + СтрокаСоСсылкой = Новый ФорматированнаяСтрока( + Подстрока,,,, Гиперссылка); + + Возврат Новый ФорматированнаяСтрока(Лев(Строка, Позиция-1), + СтрокаСоСсылкой, Сред(Строка, Позиция + СтрДлина(Подстрока))); + +КонецФункции + +&НаКлиентеНаСервереБезКонтекста +Функция НовыйСжатыйУникальныйИдентификатор() + + Возврат НРег(СтрЗаменить(Строка(Новый УникальныйИдентификатор), "-", "")); + +КонецФункции + +&НаКлиентеНаСервереБезКонтекста +Процедура ДобавитьВызов(Вызовы, Метод, П1, П2, П3 = Неопределено, П4 = Неопределено, П5 = Неопределено) + + Вызов = Новый Массив; + Вызов.Добавить(Метод); + Вызов.Добавить(П1); + Вызов.Добавить(П2); + Вызов.Добавить(П3); + Вызов.Добавить(П4); + Вызов.Добавить(П5); + + Вызовы.Добавить(Вызов); + +КонецПроцедуры + #КонецОбласти + +#КонецОбласти \ 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..8688c2cbc --- /dev/null +++ b/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/ФормаСоглашения/Form.form @@ -0,0 +1,242 @@ + + + + <key>ru</key> + <value>Условия соглашения</value> + + + Соглашение + 1 + true + true + + true + + + Соглашение + + None + + СоглашениеРасширеннаяПодсказка + 3 + Label + true + true + + Left + + + + СоглашениеКонтекстноеМеню + 2 + + СоглашениеКонтекстноеМенюКопироватьВБуферОбмена + 4 + true + true + + true + + + СоглашениеКонтекстноеМенюКопироватьВБуферОбменаРасширеннаяПодсказка + 5 + Label + true + true + + Left + + + Form.Item.Соглашение.StandardCommand.CopyToClipboard + Normal + Auto + true + true + UserCmds + Auto + + + СоглашениеКонтекстноеМенюВыделитьВсе + 6 + true + true + + true + + + СоглашениеКонтекстноеМенюВыделитьВсеРасширеннаяПодсказка + 7 + Label + true + true + + Left + + + Form.Item.Соглашение.StandardCommand.SelectAll + Normal + Auto + true + true + UserCmds + Auto + + + СоглашениеКонтекстноеМенюСохранитьКак + 8 + true + true + + true + + + СоглашениеКонтекстноеМенюСохранитьКакРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + Form.Item.Соглашение.StandardCommand.SaveAs + Normal + Auto + true + true + UserCmds + Auto + + + СоглашениеКонтекстноеМенюПредварительныйПросмотр + 10 + true + true + + true + + + СоглашениеКонтекстноеМенюПредварительныйПросмотрРасширеннаяПодсказка + 11 + Label + true + true + + Left + + + Form.Item.Соглашение.StandardCommand.Preview + Normal + Auto + true + true + UserCmds + Auto + + + СоглашениеКонтекстноеМенюПечать + 12 + true + true + + true + + + СоглашениеКонтекстноеМенюПечатьРасширеннаяПодсказка + 13 + Label + true + true + + Left + + + Form.Item.Соглашение.StandardCommand.Print + Normal + Auto + true + true + UserCmds + Auto + + + FormattedDocumentField + true + Enter + true + Left + true + + 50 + true + 10 + true + true + + + + ФормаКоманднаяПанель + -1 + + ФормаПечать + 14 + true + true + + true + + + ФормаПечатьРасширеннаяПодсказка + 15 + Label + true + true + + Left + + + Form.Item.Соглашение.StandardCommand.Print + PictureAndText + true + true + true + UserCmds + Auto + + Left + + + OnCreateAtServer + ПриСозданииНаСервере + + LockOwner + true + true + Vertical + true + true + true + auto + true + + Соглашение + + <key>ru</key> + <value>Соглашение</value> + + 2 + + FormattedDocument + + + true + + + true + + + + + + + diff --git a/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/ФормаСоглашения/Module.bsl b/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/ФормаСоглашения/Module.bsl new file mode 100644 index 000000000..b233643f9 --- /dev/null +++ b/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/ФормаСоглашения/Module.bsl @@ -0,0 +1,26 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2019, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + ТекстHTML = Обработки.ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата.ПолучитьМакет( + "Соглашение").ПолучитьТекст(); + + ТекстHTML = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстHTML, + НСтр("ru = 'ООО «Научно-производственный центр ""1С""»'"), + НСтр("ru = 'http://ca.1c.ru/reglament.pdf'"), + НСтр("ru = 'уполномоченного федерального органа в области использования электронной подписи'")); + + Соглашение.УстановитьHTML(ТекстHTML, Новый Структура); + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/ManagerModule.bsl b/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/ManagerModule.bsl index 4d6fe1c54..3e13376c3 100644 --- a/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/ManagerModule.bsl +++ b/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/ManagerModule.bsl @@ -17,7 +17,7 @@ // 4. Подсистема Интернет поддержка пользователей - для подключения к сервисам 1С. // // Возвращаемое значение: -// Булево +// Булево - // Функция ЗаявлениеНаВыпускСертификатаДоступно() Экспорт Возврат ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") @@ -96,6 +96,419 @@ КонецПроцедуры +Функция ГражданствоСвойства(Гражданство) Экспорт + + Значения = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Гражданство, + "Наименование, НаименованиеПолное, КодАльфа3"); + + Свойства = Новый Структура; + Свойства.Вставить("ГражданствоОКСМКодАльфа3", Строка(Значения.КодАльфа3)); + Если ЗначениеЗаполнено(Значения.НаименованиеПолное) Тогда + Свойства.Вставить("ГражданствоПредставление", Строка(Значения.НаименованиеПолное)); + Иначе + Свойства.Вставить("ГражданствоПредставление", Строка(Значения.Наименование)); + КонецЕсли; + + Возврат Свойства; + +КонецФункции + +Функция ПроверитьАдрес(Адрес) Экспорт + + Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда + Возврат ""; + КонецЕсли; + + Сообщение = ""; + МодульРаботаСАдресами = ОбщегоНазначения.ОбщийМодуль("РаботаСАдресами"); + + Попытка + + ПодробныйИтог = МодульРаботаСАдресами.ПроверитьАдрес(Адрес); + Если ПодробныйИтог.Результат <> "Корректный" Тогда + + Для каждого ЭлементСписка Из ПодробныйИтог.СписокОшибок Цикл + Сообщение = Сообщение + Символы.ПС + ЭлементСписка.Представление; + КонецЦикла; + + Сообщение = СокрЛП(Сообщение); + Если Не ЗначениеЗаполнено(Сообщение) Тогда + Сообщение = НСтр("ru = 'Адрес не заполнен'"); + КонецЕсли; + + КонецЕсли; + + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + Сообщение = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); + КонецПопытки; + + Возврат Сообщение; + +КонецФункции + +Функция ПроверитьЗаполнениеРеквизитов(Реквизиты, ЭтоИП = Ложь) Экспорт + + Отказ = Ложь; + ВидДокумента = ""; + РасчетныйСчет = Неопределено; + + Для Каждого Реквизит Из Реквизиты Цикл + + Если Реквизит.Имя = "БИК" Тогда + БИК = Реквизит.Значение; + ИначеЕсли Реквизит.Имя = "КорреспондентскийСчет" Тогда + КорреспондентскийСчет = Реквизит.Значение; + ИначеЕсли Реквизит.Имя = "РасчетныйСчет" Тогда + РасчетныйСчет = Реквизит; + ИначеЕсли Реквизит.Имя = "ДокументВид" Тогда + ВидДокумента = Реквизит.Значение; + ИначеЕсли Реквизит.Имя = "ДокументНомер" Тогда + НомерДокумента = Реквизит; + ИначеЕсли Реквизит.Имя = "ДокументКодПодразделения" Тогда + КодПодразделения = Реквизит; + КонецЕсли; + + ПроверитьЗаполнениеРеквизита(Реквизит, Отказ, ЭтоИП); + + КонецЦикла; + + Если РасчетныйСчет <> Неопределено Тогда + + ТекстОшибки = ОшибкиПроверкиКонтрольногоЧислаРасчетногоСчета(РасчетныйСчет.Значение, БИК, КорреспондентскийСчет); + Если Не ПустаяСтрока(ТекстОшибки) Тогда + ОбщегоНазначения.СообщитьПользователю(ТекстОшибки, , РасчетныйСчет.ПолеСообщения, , Отказ); + КонецЕсли; + + КонецЕсли; + + Если ВидДокумента = "21" Тогда + + ТекстОшибки = ОшибкиПроверкиКодаПодразделения(КодПодразделения.Значение); + Если Не ПустаяСтрока(ТекстОшибки) Тогда + ОбщегоНазначения.СообщитьПользователю(ТекстОшибки, , КодПодразделения.ПолеСообщения, , Отказ); + КонецЕсли; + + ТекстОшибки = ОшибкиПроверкиНомераПаспорта(НомерДокумента.Значение); + Если Не ПустаяСтрока(ТекстОшибки) Тогда + ОбщегоНазначения.СообщитьПользователю(ТекстОшибки, , НомерДокумента.ПолеСообщения, , Отказ); + КонецЕсли; + + КонецЕсли; + + Возврат Отказ; + +КонецФункции + +Процедура ПроверитьЗаполнениеРеквизита(Реквизит, Отказ, ЭтоИП = Ложь) + + ИмяРеквизита = Реквизит.Имя; + ПолеСообщения = Реквизит.ПолеСообщения; + ЗначениеРеквизита = Реквизит.Значение; + ТекстНезаполненного = Реквизит.ТекстНезаполненного; + + Если Не ЗначениеЗаполнено(ЗначениеРеквизита) Тогда + + Если СтрНайти(ТекстНезаполненного, "%1") > 0 Тогда + ТекстНезаполненного = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ТекстНезаполненного, НСтр("ru = 'поле не заполнено.'")); + КонецЕсли; + + ОбщегоНазначения.СообщитьПользователю(ТекстНезаполненного, , ПолеСообщения, , Отказ); + + Иначе + + ТекстСообщения = ""; + Если ИмяРеквизита = "ИНН" + Или ИмяРеквизита = "ДокументыПартнерИНН" Тогда + + РегламентированныеДанныеКлиентСервер.ИННСоответствуетТребованиям(ЗначениеРеквизита, Не ЭтоИП, ТекстСообщения); + ИначеЕсли (ИмяРеквизита = "ДокументыПартнерКПП" + Или ИмяРеквизита = "КПП") + И Не ЭтоИП Тогда + + РегламентированныеДанныеКлиентСервер.КППСоответствуетТребованиям(ЗначениеРеквизита, ТекстСообщения); + ИначеЕсли ИмяРеквизита = "ОГРН" Тогда + РегламентированныеДанныеКлиентСервер.ОГРНСоответствуетТребованиям(ЗначениеРеквизита, Не ЭтоИП, ТекстСообщения); + ИначеЕсли ИмяРеквизита = "РасчетныйСчет" Тогда + ТекстСообщения = ОшибкиПроверкиРасчетногоСчета(ЗначениеРеквизита); + ИначеЕсли ИмяРеквизита = "БИК" Тогда + ТекстСообщения = ОшибкиПроверкиБИК(ЗначениеРеквизита); + ИначеЕсли ИмяРеквизита = "КорреспондентскийСчет" Тогда + ТекстСообщения = ОшибкиПроверкиКорреспондентскогоСчета(ЗначениеРеквизита); + ИначеЕсли ИмяРеквизита = "ЮридическийАдрес" + Или ИмяРеквизита = "ФактическийАдрес" Тогда + + ТекстОшибки = ОшибкиПроверкиАдреса(ЗначениеРеквизита); + Если ПустаяСтрока(ТекстОшибки) Тогда + + ТекстОшибки = ПроверитьАдрес(ЗначениеРеквизита); + Если Не ПустаяСтрока(ТекстОшибки) Тогда + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ТекстНезаполненного, ТекстОшибки); + КонецЕсли; + + Иначе + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ТекстНезаполненного, ТекстОшибки); + КонецЕсли; + + ИначеЕсли ИмяРеквизита = "Телефон" Тогда + + ТекстОшибки = ОшибкиПроверкиТелефона(ЗначениеРеквизита); + Если Не ПустаяСтрока(ТекстОшибки) Тогда + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ТекстНезаполненного, ТекстОшибки); + КонецЕсли; + + ИначеЕсли ИмяРеквизита = "СтраховойНомерПФР" Тогда + РегламентированныеДанныеКлиентСервер.СтраховойНомерПФРСоответствуетТребованиям( + ЗначениеРеквизита, ТекстСообщения); + ИначеЕсли ИмяРеквизита = "ЭлектроннаяПочта" Тогда + + Попытка + ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(ЗначениеРеквизита); + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + ТекстСообщения = КраткоеПредставлениеОшибки(ИнформацияОбОшибке); + КонецПопытки; + + КонецЕсли; + + Если ЗначениеЗаполнено(ТекстСообщения) Тогда + ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, , ПолеСообщения, , Отказ); + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +Функция ОшибкиПроверкиРасчетногоСчета(РасчетныйСчет) + + Значение = СокрЛП(РасчетныйСчет); + Если НЕ СтроковыеФункцииКлиентСервер.ТолькоЦифрыВСтроке(Значение) Тогда + Возврат НСтр("ru = 'Расчетный счет должен состоять только из цифр.'"); + КонецЕсли; + + Если СтрДлина(Значение) <> 20 Тогда + Возврат НСтр("ru = 'Расчетный счет должен состоять из 20 цифр.'"); + КонецЕсли; + + Возврат ""; + +КонецФункции + +Функция ОшибкиПроверкиКонтрольногоЧислаРасчетногоСчета(РасчетныйСчет, БИК, КорреспондентскийСчет) + + ЭтоБанк = ЗначениеЗаполнено(КорреспондентскийСчет); + Если Не РегламентированныеДанныеКлиентСервер.КонтрольныйКлючЛицевогоСчетаСоответствуетТребованиям(РасчетныйСчет, БИК, ЭтоБанк) Тогда + Возврат НСтр("ru = 'Контрольное число счета не совпадает с рассчитанным с учетом БИК'"); + КонецЕсли; + +КонецФункции + +Функция ОшибкиПроверкиБИК(БИК) + + Значение = СокрЛП(БИК); + Если НЕ СтроковыеФункцииКлиентСервер.ТолькоЦифрыВСтроке(Значение) Тогда + Возврат НСтр("ru = 'БИК должен состоять только из цифр.'"); + КонецЕсли; + + Если СтрДлина(Значение) <> 9 Тогда + Возврат НСтр("ru = 'БИК должен состоять из 9 цифр.'"); + КонецЕсли; + + Возврат ""; + +КонецФункции + +Функция ОшибкиПроверкиКорреспондентскогоСчета(КорреспондентскийСчет) + + Значение = СокрЛП(КорреспондентскийСчет); + Если НЕ СтроковыеФункцииКлиентСервер.ТолькоЦифрыВСтроке(Значение) Тогда + Возврат НСтр("ru = 'Корреспондентский счет должен состоять только из цифр.'"); + КонецЕсли; + + Если СтрДлина(Значение) <> 20 Тогда + Возврат НСтр("ru = 'Корреспондентский счет должен состоять из 20 цифр.'"); + КонецЕсли; + + Возврат ""; + +КонецФункции + +Функция ОшибкиПроверкиАдреса(Знач АдресXML) + + Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда + Возврат ""; + КонецЕсли; + + МодульРаботаСАдресами = ОбщегоНазначения.ОбщийМодуль("РаботаСАдресами"); + + ТекстСообщения = ""; + ДополнительныеПараметры = Новый Структура("НаименованиеВключаетСокращение", Истина); + АдресСтруктура = МодульРаботаСАдресами.СведенияОбАдресе(АдресXML, ДополнительныеПараметры); + + // Проверка, что адрес российский. + Если Не АдресСтруктура.Свойство("КодРегиона") Тогда + Возврат ТекстСообщения + НСтр("ru = 'Это не российский адрес'"); + КонецЕсли; + + // Проверка, что указан регион. + Если Не АдресСтруктура.Свойство("Регион") Или Не ЗначениеЗаполнено(АдресСтруктура.Регион) Тогда + Возврат ТекстСообщения + НСтр("ru = 'Не указан регион'"); + КонецЕсли; + + // Проверка, что регион указан правильно - код региона определен. + Если Не ЗначениеЗаполнено(АдресСтруктура.КодРегиона) Тогда + Возврат ТекстСообщения + НСтр("ru = 'Некорректный регион (код региона не определен)'"); + КонецЕсли; + + // Населенный пункт полностью. + НаселенныйПунктПолностью = НаселенныйПунктПолностью(АдресСтруктура); + Если Не ЗначениеЗаполнено(НаселенныйПунктПолностью) Тогда + Возврат ТекстСообщения + НСтр("ru = 'Не указан населенный пункт'"); + КонецЕсли; + + Возврат ""; + +КонецФункции + +Функция ОшибкиПроверкиТелефона(Знач ТелефонXML) + + Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда + Возврат ""; + КонецЕсли; + + МодульУправлениеКонтактнойИнформацией = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформацией"); + + ТекстСообщения = ""; + ТелефонСтруктура = МодульУправлениеКонтактнойИнформацией.СведенияОТелефоне(ТелефонXML); + + // Проверка, что телефон российский. + Если СтрЗаменить(ТелефонСтруктура.КодСтраны, "+", "") <> "7" Тогда + Возврат ТекстСообщения + НСтр("ru = 'Код страны не российский (должен быть ""7"")'"); + КонецЕсли; + + НомерТелефонаБезКодаСтраны = ТелефонСтруктура.КодГорода + ТелефонСтруктура.НомерТелефона; + + Если Не ЗначениеЗаполнено(НомерТелефонаБезКодаСтраны) Тогда + Возврат ТекстСообщения + НСтр("ru = 'Не заполнен номер телефона'"); + КонецЕсли; + + Если СтрДлина(ТолькоЦифры(НомерТелефонаБезКодаСтраны)) <> 10 Тогда + Возврат ТекстСообщения + НСтр("ru = 'Номер телефона с кодом города должен состоять из 10-и цифр'"); + КонецЕсли; + + Возврат ""; + +КонецФункции + +Функция ОшибкиПроверкиКодаПодразделения(КодПодразделения) + + Если ПустаяСтрока(КодПодразделения) Тогда + Возврат ""; + КонецЕсли; + + СтрокаЦифр = СокрЛП(КодПодразделения); + Если СтрДлина(СтрокаЦифр) < 6 Тогда + Возврат НСтр("ru = 'Код подразделения задан неполностью'"); + КонецЕсли; + + Если Не СтроковыеФункцииКлиентСервер.ТолькоЦифрыВСтроке(СтрокаЦифр) Тогда + Возврат НСтр("ru = 'Код подразделения должен состоять только из цифр.'"); + КонецЕсли; + + Если СтрокаЦифр = "000000" Тогда + Возврат НСтр("ru = 'Код подразделения не может быть нулевым.'"); + КонецЕсли; + + Возврат ""; + +КонецФункции + +Функция ОшибкиПроверкиНомераПаспорта(Знач НомерПаспортаРФ) + + Если ПустаяСтрока(НомерПаспортаРФ) Тогда + Возврат ""; + КонецЕсли; + + СтрокаЦифр = СтрЗаменить(НомерПаспортаРФ, ",", ""); + СтрокаЦифр = СтрЗаменить(СтрокаЦифр, " ", ""); + + Если ПустаяСтрока(СтрокаЦифр) Тогда + Возврат НСтр("ru = 'Номер паспорта не заполнен'"); + КонецЕсли; + + Если СтрДлина(СтрокаЦифр) < 10 Тогда + Возврат НСтр("ru = 'Номер паспорта задан неполностью'"); + КонецЕсли; + + Если НЕ СтроковыеФункцииКлиентСервер.ТолькоЦифрыВСтроке(СтрокаЦифр) Тогда + Возврат НСтр("ru = 'Номер паспорта должен состоять только из цифр.'"); + КонецЕсли; + + Возврат ""; + +КонецФункции + +Функция ТолькоЦифры(Строка) + + ДлинаСтроки = СтрДлина(Строка); + + ОбработаннаяСтрока = ""; + Для НомерСимвола = 1 По ДлинаСтроки Цикл + + Символ = Сред(Строка, НомерСимвола, 1); + Если Символ >= "0" И Символ <= "9" Тогда + ОбработаннаяСтрока = ОбработаннаяСтрока + Символ; + КонецЕсли; + + КонецЦикла; + + Возврат ОбработаннаяСтрока; + +КонецФункции + +Функция НаселенныйПунктПолностью(АдресСтруктура) + + // Округ ОкругСокращение, Район РайонСокращение, Город ГородСокращение, + // ВнутригородскойРайон ВнутригородскойРайонСокращение, НаселенныйПункт НаселенныйПунктСокращение. + СписокПолей = ""; + + Если АдресСтруктура.Свойство("Регион") + И АдресСтруктура.Свойство("КодРегиона") + И ( АдресСтруктура.КодРегиона = "77" + Или АдресСтруктура.КодРегиона = "78" + Или АдресСтруктура.КодРегиона = "92" + Или АдресСтруктура.КодРегиона = "99") Тогда + + СписокПолей = "Регион, КодРегиона, "; + КонецЕсли; + + Возврат ПредставлениеЧастиАдреса(АдресСтруктура, СписокПолей + + "Округ, + |Район, + |Город, + |ВнутригородскойРайон, + |НаселенныйПункт, + |Территория"); + +КонецФункции + +Функция ПредставлениеЧастиАдреса(АдресСтруктура, СписокПолей) + + Представление = ""; + СтруктураПолей = Новый Структура(СписокПолей); + ЗаполнитьЗначенияСвойств(СтруктураПолей, АдресСтруктура); + + МодульУправлениеКонтактнойИнформацией = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформацией"); + Представление = МодульУправлениеКонтактнойИнформацией.ПредставлениеКонтактнойИнформации(СтруктураПолей); + + Возврат Представление; + +КонецФункции + #КонецОбласти #КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Templates/ИндивидуальныйПредприниматель/Template.mxlx b/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Templates/ИндивидуальныйПредприниматель/Template.mxlx index 40a9c3aba..b464d4740 100644 --- a/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Templates/ИндивидуальныйПредприниматель/Template.mxlx +++ b/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Templates/ИндивидуальныйПредприниматель/Template.mxlx @@ -41,9 +41,44 @@ 5 - 1 + + 0 + + + 6 + + + ru + Удостоверяющий центр ООО «НПЦ «1С» +119285, г. Москва, ул. Мосфильмовская, д.42, стр.1 + + + + + + + + 1 + + 7 + + 1 + + 8 + + + + + + 2 + + 5 + + 1 + + 8 ru @@ -57,20 +92,20 @@ - 1 + 3 - 7 + 9 true - 2 + 4 5 1 - 8 + 10 ru @@ -85,13 +120,13 @@ - 3 + 5 - 9 + 11 10 - 10 + 12 @@ -101,154 +136,6 @@ - - 4 - - 5 - - 1 - - 11 - - - ru - Фамилия (SN) - - - - - - - 10 - - - - - 10 - - - - - 12 - - - - - 13 - - - ru - [SN] - - - - - - - 10 - - - - - 10 - - - - - 10 - - - - - 10 - - - - - 10 - - - - - 14 - - - - - - 5 - - 5 - - 1 - - 11 - - - ru - Имя Отчество (G) - - - - - - - 10 - - - - - 10 - - - - - 12 - - - - - 13 - - - ru - [G] - - - - - - - 10 - - - - - 10 - - - - - 10 - - - - - 10 - - - - - 10 - - - - - 14 - - - - 6 @@ -256,25 +143,15 @@ 1 - 11 + 13 ru - СНИЛС + Фамилия (SN) - - - 10 - - - - - 10 - - 12 @@ -282,43 +159,53 @@ - 13 + 12 + + + + + 14 + + + + + 15 ru - [SNILS] + [SN] - 10 + 12 - 10 + 12 - 10 + 12 - 10 + 12 - 10 + 12 - 14 + 16 @@ -330,25 +217,15 @@ 1 - 11 + 13 ru - ИНН + Имя Отчество (G) - - - 10 - - - - - 10 - - 12 @@ -356,43 +233,53 @@ - 13 + 12 + + + + + 14 + + + + + 15 ru - [INN] + [G] - 10 + 12 - 10 + 12 - 10 + 12 - 10 + 12 - 10 + 12 - 14 + 16 @@ -404,25 +291,15 @@ 1 - 11 + 13 ru - ОГРНИП + СНИЛС - - - 10 - - - - - 10 - - 12 @@ -430,43 +307,53 @@ - 13 + 12 + + + + + 14 + + + + + 15 ru - [OGRNIP] + [SNILS] - 10 + 12 - 10 + 12 - 10 + 12 - 10 + 12 - 10 + 12 - 14 + 16 @@ -478,25 +365,15 @@ 1 - 11 + 13 ru - E-Mail (E) + ИНН - - - 10 - - - - - 10 - - 12 @@ -504,43 +381,53 @@ - 13 + 12 + + + + + 14 + + + + + 15 ru - [E] + [INN] - 10 + 12 - 10 + 12 - 10 + 12 - 10 + 12 - 10 + 12 - 14 + 16 @@ -552,25 +439,15 @@ 1 - 11 + 13 ru - Страна (C) + ОГРНИП - - - 10 - - - - - 10 - - 12 @@ -578,43 +455,53 @@ - 13 + 12 + + + + + 14 + + + + + 15 ru - [C] + [OGRNIP] - 10 + 12 - 10 + 12 - 10 + 12 - 10 + 12 - 10 + 12 - 14 + 16 @@ -626,25 +513,15 @@ 1 - 11 + 13 ru - Регион (S) + E-Mail (E) - - - 10 - - - - - 10 - - 12 @@ -652,43 +529,53 @@ - 13 + 12 + + + + + 14 + + + + + 15 ru - [S] + [E] - 10 + 12 - 10 + 12 - 10 + 12 - 10 + 12 - 10 + 12 - 14 + 16 @@ -700,25 +587,15 @@ 1 - 11 + 13 ru - Населенный пункт (L) + Страна (C) - - - 10 - - - - - 10 - - 12 @@ -726,43 +603,53 @@ - 13 + 12 + + + + + 14 + + + + + 15 ru - [L] + [C] - 10 + 12 - 10 + 12 - 10 + 12 - 10 + 12 - 10 + 12 - 14 + 16 @@ -774,25 +661,15 @@ 1 - 11 + 13 ru - Адрес местонахождения (STREET) + Регион (S) - - - 10 - - - - - 10 - - 12 @@ -800,43 +677,53 @@ - 13 + 12 + + + + + 14 + + + + + 15 ru - [Street] + [S] - 10 + 12 - 10 + 12 - 10 + 12 - 10 + 12 - 10 + 12 - 14 + 16 @@ -848,69 +735,69 @@ 1 - 11 + 13 ru - ИКС запроса на сертификат + Населенный пункт (L) - - - 10 - - - - - 10 - - 12 + + + 12 + + + + + 14 + + 15 ru - [ИдентификаторКлючаСубъекта] + [L] - 10 + 12 - 10 + 12 - 10 + 12 - 10 + 12 - 10 + 12 - 14 + 16 @@ -922,69 +809,69 @@ 1 - 11 + 13 ru - Ключ проверки ЭП + Адрес местонахождения (STREET) - - - 10 - - - - - 10 - - 12 + + + 12 + + + + + 14 + + 15 ru - [ОткрытаяЧастьКлючаЭП] + [Street] - 10 + 12 - 10 + 12 - 10 + 12 - 10 + 12 - 10 + 12 - 14 + 16 @@ -996,23 +883,59 @@ 1 - 11 + 13 ru - Расширения сертификата + ИКС запроса на сертификат - 10 + 12 - 10 + 12 + + + + + 14 + + + + + 17 + + + ru + [ИдентификаторКлючаСубъекта] + + + + + + + 12 + + + + + 12 + + + + + 12 + + + + + 12 @@ -1023,6 +946,118 @@ 16 + + + + + + 17 + + 5 + + 1 + + 13 + + + ru + Ключ проверки ЭП + + + + + + + 12 + + + + + 12 + + + + + 14 + + + + + 17 + + + ru + [ОткрытаяЧастьКлючаЭП] + + + + + + + 12 + + + + + 12 + + + + + 12 + + + + + 12 + + + + + 12 + + + + + 16 + + + + + + 18 + + 5 + + 1 + + 13 + + + ru + Расширения сертификата + + + + + + + 12 + + + + + 12 + + + + + 14 + + + + + 18 ru @@ -1034,57 +1069,32 @@ - 10 + 12 - 10 + 12 - 10 + 12 - 10 + 12 - 10 + 12 - 14 - - - - - - 17 - - 17 - true - - - - 18 - - 5 - - 1 - - 18 - - - ru - В соответствии со статьей 428 ГК Российской Федерации полностью и безусловно присоединяюсь к Регламенту УЦ условия которого опубликованы на сайте УЦ по адресу http://ca.1c.ru. С Регламентом УЦ и приложениями к нему ознакомлен и обязуюсь соблюдать все положения указанного документа. - - + 16 @@ -1092,11 +1102,38 @@ 19 + 19 true 20 + + 5 + + 1 + + 20 + + + ru + В соответствии со статьёй 428 ГК Российской Федерации полностью и безусловно присоединяюсь к Регламенту Удостоверяющего центра ООО «НПЦ «1С» и принимаю Пользовательское соглашение, условия которых опубликованы на сайте Удостоверяющего центра по адресу http://ca.1c.ru и на Портале информационно-технологического сопровождения по адресу https://portal.1c.ru/applications/31/licenseAgreement. + С Регламентом УЦ, приложениями к нему и Пользовательским соглашением ознакомлен(а) и обязуюсь соблюдать все положения указанных документов. + Согласен(на) на обработку моих персональных данных в указанном объеме с целью исполнения Удостоверяющим центром требований Федерального закона от 06.04.2011 №63-ФЗ. + + + + + + + + 21 + + true + + + + 22 5 @@ -1114,13 +1151,13 @@ - 21 + 23 5 1 - 19 + 21 ru @@ -1132,27 +1169,27 @@ 7 - 20 + 22 - 20 + 22 - 20 + 22 - 20 + 22 - 21 + 23 ru @@ -1164,7 +1201,7 @@ - 22 + 24 5 @@ -1176,7 +1213,7 @@ 11 - 22 + 24 ru @@ -1188,9 +1225,9 @@ - 23 + 25 - 23 + 25 1 @@ -1199,31 +1236,6 @@ - - 24 - - 5 - - 1 - - 24 - - - ru - Контактный телефон: [Телефон] - - - - - - - - 25 - - 25 - true - - 26 @@ -1235,7 +1247,7 @@ ru - (заполняется оператором центра регистрации Удостоверяющего центра) + Контактный телефон: [Телефон] @@ -1244,12 +1256,37 @@ 27 + + 7 + true + + + + 28 5 1 27 + + + ru + (заполняется оператором центра регистрации Удостоверяющего центра) + + + + + + + + 29 + + 5 + + 1 + + 28 ru @@ -1261,7 +1298,7 @@ - 28 + 30 5 @@ -1279,13 +1316,13 @@ - 29 + 31 true - 30 + 32 5 @@ -1303,7 +1340,7 @@ 11 - 21 + 23 ru @@ -1315,9 +1352,9 @@ true - 10 - 31 - 31 + 12 + 33 + 33 0 1 @@ -1331,22 +1368,7 @@ 4 1 - 3 - - - 4 - 5 - 6 - - - 5 - 1 - 3 - - - 5 - 5 - 6 + 10 6 @@ -1458,24 +1480,44 @@ 5 6 + + 17 + 1 + 3 + + + 17 + 5 + 6 + 18 1 + 3 + + + 18 + 5 + 6 + + + 20 + 1 10 - 21 + 23 1 1 5 - 26 + 28 1 10 - 27 + 29 1 10 @@ -1529,6 +1571,13 @@ 0 + + Right + + + 0 + 30 + 1 Center @@ -1633,10 +1682,6 @@ 0 Template - - 0 - 30 - 3 1 diff --git a/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Templates/КомпонентаОбмена/Template.addin b/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Templates/КомпонентаОбмена/Template.addin index 1c60722e5..6e82bee04 100644 Binary files a/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Templates/КомпонентаОбмена/Template.addin and b/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Templates/КомпонентаОбмена/Template.addin differ diff --git a/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Templates/ЮридическоеЛицо/Template.mxlx b/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Templates/ЮридическоеЛицо/Template.mxlx index 9b491022c..18104cc2d 100644 --- a/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Templates/ЮридическоеЛицо/Template.mxlx +++ b/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Templates/ЮридическоеЛицо/Template.mxlx @@ -47,9 +47,8 @@ ru - Заявление -на присоединение к Регламенту -и регистрацию Пользователя в Удостоверяющем центре + Удостоверяющий центр ООО «НПЦ «1С» +119285, г. Москва, ул. Мосфильмовская, д.42, стр.1 @@ -60,7 +59,12 @@ 1 7 - true + + 1 + + 8 + + @@ -71,6 +75,33 @@ 1 8 + + + ru + Заявление +на присоединение к Регламенту +и регистрацию Пользователя в Удостоверяющем центре + + + + + + + + 3 + + 9 + true + + + + 4 + + 5 + + 1 + + 10 ru @@ -86,13 +117,13 @@ - 3 + 5 - 9 + 11 10 - 10 + 12 @@ -102,154 +133,6 @@ - - 4 - - 5 - - 1 - - 11 - - - ru - Фамилия (SN) - - - - - - - 10 - - - - - 10 - - - - - 12 - - - - - 13 - - - ru - [SN] - - - - - - - 10 - - - - - 10 - - - - - 10 - - - - - 10 - - - - - 10 - - - - - 14 - - - - - - 5 - - 5 - - 1 - - 11 - - - ru - Имя Отчество (G) - - - - - - - 10 - - - - - 10 - - - - - 12 - - - - - 13 - - - ru - [G] - - - - - - - 10 - - - - - 10 - - - - - 10 - - - - - 10 - - - - - 10 - - - - - 14 - - - - 6 @@ -257,25 +140,15 @@ 1 - 11 + 13 ru - СНИЛС + Фамилия (SN) - - - 10 - - - - - 10 - - 12 @@ -283,43 +156,53 @@ - 13 + 12 + + + + + 14 + + + + + 15 ru - [SNILS] + [SN] - 10 + 12 - 10 + 12 - 10 + 12 - 10 + 12 - 10 + 12 - 14 + 16 @@ -331,25 +214,15 @@ 1 - 11 + 13 ru - ИНН + Имя Отчество (G) - - - 10 - - - - - 10 - - 12 @@ -357,43 +230,53 @@ - 13 + 12 + + + + + 14 + + + + + 15 ru - [INN] + [G] - 10 + 12 - 10 + 12 - 10 + 12 - 10 + 12 - 10 + 12 - 14 + 16 @@ -405,25 +288,15 @@ 1 - 11 + 13 ru - ОГРН + СНИЛС - - - 10 - - - - - 10 - - 12 @@ -431,43 +304,53 @@ - 13 + 12 + + + + + 14 + + + + + 15 ru - [OGRN] + [SNILS] - 10 + 12 - 10 + 12 - 10 + 12 - 10 + 12 - 10 + 12 - 14 + 16 @@ -479,25 +362,15 @@ 1 - 11 + 13 ru - E-Mail (E) + ИНН - - - 10 - - - - - 10 - - 12 @@ -505,43 +378,53 @@ - 13 + 12 + + + + + 14 + + + + + 15 ru - [E] + [INN] - 10 + 12 - 10 + 12 - 10 + 12 - 10 + 12 - 10 + 12 - 14 + 16 @@ -553,25 +436,15 @@ 1 - 11 + 13 ru - Организация (O) + ОГРН - - - 10 - - - - - 10 - - 12 @@ -579,43 +452,53 @@ - 13 + 12 + + + + + 14 + + + + + 15 ru - [O] + [OGRN] - 10 + 12 - 10 + 12 - 10 + 12 - 10 + 12 - 10 + 12 - 14 + 16 @@ -627,25 +510,15 @@ 1 - 11 + 13 ru - Подразделение (OU) + E-Mail (E) - - - 10 - - - - - 10 - - 12 @@ -653,43 +526,53 @@ - 13 + 12 + + + + + 14 + + + + + 15 ru - [OU] + [E] - 10 + 12 - 10 + 12 - 10 + 12 - 10 + 12 - 10 + 12 - 14 + 16 @@ -701,25 +584,15 @@ 1 - 11 + 13 ru - Должность (T) + Организация (O) - - - 10 - - - - - 10 - - 12 @@ -727,43 +600,53 @@ - 13 + 12 + + + + + 14 + + + + + 15 ru - [T] + [O] - 10 + 12 - 10 + 12 - 10 + 12 - 10 + 12 - 10 + 12 - 14 + 16 @@ -775,25 +658,15 @@ 1 - 11 + 13 ru - Страна (C) + Подразделение (OU) - - - 10 - - - - - 10 - - 12 @@ -801,43 +674,53 @@ - 13 + 12 + + + + + 14 + + + + + 15 ru - [C] + [OU] - 10 + 12 - 10 + 12 - 10 + 12 - 10 + 12 - 10 + 12 - 14 + 16 @@ -849,25 +732,15 @@ 1 - 11 + 13 ru - Регион (S) + Должность (T) - - - 10 - - - - - 10 - - 12 @@ -875,43 +748,53 @@ - 13 + 12 + + + + + 14 + + + + + 15 ru - [S] + [T] - 10 + 12 - 10 + 12 - 10 + 12 - 10 + 12 - 10 + 12 - 14 + 16 @@ -923,25 +806,15 @@ 1 - 11 + 13 ru - Населенный пункт (L) + Страна (C) - - - 10 - - - - - 10 - - 12 @@ -949,43 +822,53 @@ - 13 + 12 + + + + + 14 + + + + + 15 ru - [L] + [C] - 10 + 12 - 10 + 12 - 10 + 12 - 10 + 12 - 10 + 12 - 14 + 16 @@ -997,25 +880,15 @@ 1 - 11 + 13 ru - Адрес местонахождения (STREET) + Регион (S) - - - 10 - - - - - 10 - - 12 @@ -1023,43 +896,53 @@ - 13 + 12 + + + + + 14 + + + + + 15 ru - [Street] + [S] - 10 + 12 - 10 + 12 - 10 + 12 - 10 + 12 - 10 + 12 - 14 + 16 @@ -1071,69 +954,69 @@ 1 - 11 + 13 ru - ИКС запроса на сертификат + Населенный пункт (L) - - - 10 - - - - - 10 - - 12 + + + 12 + + + + + 14 + + 15 ru - [ИдентификаторКлючаСубъекта] + [L] - 10 + 12 - 10 + 12 - 10 + 12 - 10 + 12 - 10 + 12 - 14 + 16 @@ -1145,69 +1028,69 @@ 1 - 11 + 13 ru - Ключ проверки ЭП + Адрес местонахождения (STREET) - - - 10 - - - - - 10 - - 12 + + + 12 + + + + + 14 + + 15 ru - [ОткрытаяЧастьКлючаЭП] + [Street] - 10 + 12 - 10 + 12 - 10 + 12 - 10 + 12 - 10 + 12 - 14 + 16 @@ -1219,23 +1102,59 @@ 1 - 11 + 13 ru - Расширения сертификата + ИКС запроса на сертификат - 10 + 12 - 10 + 12 + + + + + 14 + + + + + 17 + + + ru + [ИдентификаторКлючаСубъекта] + + + + + + + 12 + + + + + 12 + + + + + 12 + + + + + 12 @@ -1246,6 +1165,118 @@ 16 + + + + + + 20 + + 5 + + 1 + + 13 + + + ru + Ключ проверки ЭП + + + + + + + 12 + + + + + 12 + + + + + 14 + + + + + 17 + + + ru + [ОткрытаяЧастьКлючаЭП] + + + + + + + 12 + + + + + 12 + + + + + 12 + + + + + 12 + + + + + 12 + + + + + 16 + + + + + + 21 + + 5 + + 1 + + 13 + + + ru + Расширения сертификата + + + + + + + 12 + + + + + 12 + + + + + 14 + + + + + 18 ru @@ -1257,58 +1288,32 @@ - 10 + 12 - 10 + 12 - 10 + 12 - 10 + 12 - 10 + 12 - 14 - - - - - - 20 - - 17 - true - - - - 21 - - 5 - - 1 - - 8 - - - ru - [НаименованиеПолное] в соответствии со статьей 428 ГК Российской Федерации полностью и безусловно присоединяется к Регламенту Удостоверяющего центра, условия которого опубликованы на сайте Удостоверяющего центра по адресу http://ca.1c.ru. - С Регламентом УЦ и приложениями к нему ознакомлен и обязуюсь соблюдать все положения указанного документа. - - + 16 @@ -1316,6 +1321,7 @@ 22 + 19 true @@ -1326,11 +1332,13 @@ 1 - 18 + 10 ru - [ДокументыРуководительДолжность] + [НаименованиеПолное] в соответствии со статьей 428 ГК Российской Федерации полностью и безусловно присоединяется к Регламенту Удостоверяющего центраООО «НПЦ «1С» и принимает Пользовательское соглашение, условия которых опубликованы на сайте Удостоверяющего центра по адресу http://ca.1c.ru и на Портале информационно-технологического сопровождения по адресу https://portal.1c.ru/applications/31/licenseAgreement. + С Регламентом УЦ и приложениями к нему ознакомлен и обязуюсь соблюдать все положения указанного документа. + Согласен(на) на обработку моих персональных данных в указанном объеме с целью исполнения Удостоверяющим центром требований Федерального закона от 06.04.2011 №63-ФЗ. @@ -1339,16 +1347,22 @@ 24 + + true + + + + 25 5 1 - 19 + 20 ru - [НаименованиеПолное] + [Должность] @@ -1356,13 +1370,11 @@ 6 - 20 + 21 ru - ____________ / [ДокументыРуководитель] / -[ДатаЗаявления] -М.П. + ____________ /[Фамилия] [Имя] [Отчество] / @@ -1370,26 +1382,75 @@ - 25 + 26 + + true + + + + 27 + + 5 + + 1 + + 20 + + + ru + [ДокументыРуководительДолжность] + + + + + + 6 + + 21 + + + ru + ____________ / [ДокументыРуководитель] / +[ДатаЗаявления] + + + + + + + + 28 5 true - 26 + 29 - 21 + 19 1 22 + + 5 + + 0 + + + ru + М.П. + + + + - 27 + 30 5 @@ -1406,60 +1467,6 @@ - - 28 - - 5 - - 1 - - 18 - - - ru - Адрес: [ЮридическийАдрес] - - - - - - - - 29 - - 5 - - 1 - - 23 - - - ru - ОГРН: [ОГРН] - - - - - - - - 30 - - 5 - - 1 - - 23 - - - ru - ИНН/КПП: [ИНН] / [КПП] - - - - - - 31 @@ -1471,7 +1478,7 @@ ru - Р/с: [РасчетныйСчет] + ОГРН: [ОГРН], ИНН: [ИНН], КПП: [КПП] @@ -1489,7 +1496,7 @@ ru - в БИК: [БИК] + Р/с: [РасчетныйСчет] в БИК: [БИК], К/с: [КорреспондентскийСчет] @@ -1507,7 +1514,7 @@ ru - К/с: [КорреспондентскийСчет] + Тел./факс: [Телефон] @@ -1517,36 +1524,18 @@ 34 - 5 - - 1 - - 23 - - - ru - Тел./факс: [Телефон] - - - - + 24 + true 35 - - 21 - true - - - - 36 5 1 - 24 + 25 ru @@ -1558,13 +1547,13 @@ - 37 + 36 5 1 - 25 + 26 ru @@ -1576,7 +1565,7 @@ - 38 + 37 5 @@ -1594,13 +1583,13 @@ - 39 + 38 true - 40 + 39 5 @@ -1618,7 +1607,7 @@ 11 - 26 + 27 ru @@ -1630,7 +1619,7 @@ true - 10 + 12 41 41 @@ -1646,22 +1635,7 @@ 4 1 - 3 - - - 4 - 5 - 6 - - - 5 - 1 - 3 - - - 5 - 5 - 6 + 10 6 @@ -1803,33 +1777,103 @@ 5 6 + + 20 + 1 + 3 + + + 20 + 5 + 6 + 21 1 + 3 + + + 21 + 5 + 6 + + + 23 + 1 10 - 24 + 25 + 1 + 4 + + + 25 + 6 + 5 + + + 27 1 1 4 - 24 + 27 6 3 5 + + 31 + 1 + 10 + + + 32 + 1 + 10 + + + 35 + 1 + 10 + 36 1 10 - - 37 - 1 - 10 - + + Подвал + + Rows + 26 + 40 + -1 + -1 + + + + СогласиеНаОбработкуПД + + Rows + 24 + 25 + -1 + -1 + + + + Шапка + + Rows + 0 + 23 + -1 + -1 + + Portrait 100 @@ -1859,6 +1903,7 @@ Double + @@ -1882,6 +1927,14 @@ 1 + Right + + + 0 + 27 + + + 2 Center @@ -1928,7 +1981,7 @@ 51 - 2 + 3 0 72 Left @@ -1949,10 +2002,6 @@ 0 48 - - 0 - Template - 0 Left @@ -1969,11 +2018,7 @@ Template - 0 - 30 - - - 1 + 2 0 @@ -1981,7 +2026,11 @@ Template - 3 + 0 + 30 + + + 4 1 Center Top diff --git a/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата.mdo b/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата.mdo index 2ddf0b9a9..43841d13e 100644 --- a/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата.mdo +++ b/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата.mdo @@ -24,6 +24,33 @@ PersonalComputer MobileDevice + + ФормаСоглашения + + ru + Форма соглашения + + PersonalComputer + MobileDevice + + + СведенияОбОрганизации + + ru + Сведения об организации + + PersonalComputer + MobileDevice + + + СведенияОВладельцеСертификата + + ru + Сведения о владельце сертификата + + PersonalComputer + MobileDevice + ИндивидуальныйПредприниматель diff --git a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/РедактированиеСоставаНастроек/Module.bsl b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/РедактированиеСоставаНастроек/Module.bsl index e7d228f5b..f35857cda 100644 --- a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/РедактированиеСоставаНастроек/Module.bsl +++ b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/РедактированиеСоставаНастроек/Module.bsl @@ -59,8 +59,8 @@ ПредставлениеНастройки = Элемент.ТекущиеДанные.Представление; - ТекстЗаголовка = НСтр("ru='Подтверждение'"); - ТекстВопроса = НСтр("ru='Удалить настройку ""%1""?'"); + ТекстЗаголовка = НСтр("ru = 'Подтверждение'"); + ТекстВопроса = НСтр("ru = 'Удалить настройку ""%1""?'"); ТекстВопроса = СтрЗаменить(ТекстВопроса, "%1", ПредставлениеНастройки); @@ -81,13 +81,13 @@ Если ПустаяСтрока(ПредставлениеТекущейНастройки) Тогда ОбщегоНазначенияКлиент.СообщитьПользователю( - НСтр("ru='Не заполнено имя для текущей настройки.'"), , "ПредставлениеТекущейНастройки"); + НСтр("ru = 'Не заполнено имя для текущей настройки.'"), , "ПредставлениеТекущейНастройки"); Возврат; КонецЕсли; Если ВариантыНастроек.НайтиПоЗначению(ПредставлениеТекущейНастройки)<>Неопределено Тогда - ТекстЗаголовка = НСтр("ru='Подтверждение'"); - ТекстВопроса = НСтр("ru='Перезаписать существующую настройку ""%1""?'"); + ТекстЗаголовка = НСтр("ru = 'Подтверждение'"); + ТекстВопроса = НСтр("ru = 'Перезаписать существующую настройку ""%1""?'"); ТекстВопроса = СтрЗаменить(ТекстВопроса, "%1", ПредставлениеТекущейНастройки); ДополнительныеПараметры = Новый Структура("ПредставлениеНастройки", ПредставлениеТекущейНастройки); diff --git a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/СоставВыгрузки/Module.bsl b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/СоставВыгрузки/Module.bsl index d02915a78..e627df1b5 100644 --- a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/СоставВыгрузки/Module.bsl +++ b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/СоставВыгрузки/Module.bsl @@ -40,7 +40,7 @@ ЭтотОбъект(ОбъектИсточник); Если Не ЗначениеЗаполнено(Объект.УзелИнформационнойБазы) Тогда - Текст = НСтр("ru='Настройка обмена данными не найдена.'"); + Текст = НСтр("ru = 'Настройка обмена данными не найдена.'"); ОбменДаннымиСервер.СообщитьОбОшибке(Текст, Отказ); Возврат; КонецЕсли; @@ -185,7 +185,7 @@ ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор); ПараметрыВыполнения.НаименованиеФоновогоЗадания = - НСтр("ru='Формирование отчета по составу данных для отправки при синхронизации'"); + НСтр("ru = 'Формирование отчета по составу данных для отправки при синхронизации'"); РезультатЗапускаФоновогоЗадания = ДлительныеОперации.ВыполнитьВФоне( "ОбменДаннымиСервер.ИнтерактивноеИзменениеВыгрузки_СформироватьТабличныйДокументПользователя", diff --git a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/Форма/Form.form b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/Форма/Form.form index 8cf55ebac..e4abd0f0e 100644 --- a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/Форма/Form.form @@ -282,7 +282,7 @@ true true - Web.Blue + Style.ГиперссылкаЦвет
    diff --git a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/Форма/Module.bsl index e98910f25..ac5af550e 100644 --- a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/Форма/Module.bsl @@ -12,7 +12,7 @@ Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Если НЕ Параметры.Свойство("ОткрытаПоСценарию") Тогда - ВызватьИсключение НСтр("ru='Обработка не предназначена для непосредственного использования.'"); + ВызватьИсключение НСтр("ru = 'Обработка не предназначена для непосредственного использования.'"); КонецЕсли; ЭтаОбработка = ЭтотОбъект(); @@ -23,7 +23,7 @@ КонецЕсли; Если Не ЗначениеЗаполнено(Объект.УзелИнформационнойБазы) Тогда - Текст = НСтр("ru='Настройка обмена данными не найдена.'"); + Текст = НСтр("ru = 'Настройка обмена данными не найдена.'"); ОбменДаннымиСервер.СообщитьОбОшибке(Текст, Отказ); Возврат; КонецЕсли; @@ -90,7 +90,7 @@ Выделенные = Элементы.ДополнительнаяРегистрация.ВыделенныеСтроки; Количество = Выделенные.Количество(); Если Количество>1 Тогда - ТекстПредставления = НСтр("ru='выбранные строки'"); + ТекстПредставления = НСтр("ru = 'выбранные строки'"); ИначеЕсли Количество=1 Тогда ТекстПредставления = Элементы.ДополнительнаяРегистрация.ТекущиеДанные.Представление; Иначе @@ -100,10 +100,10 @@ // Действие будет произведено из подтверждения. Отказ = Истина; - ТекстВопроса = НСтр("ru='Удалить из дополнительных данных %1 ?'"); + ТекстВопроса = НСтр("ru = 'Удалить из дополнительных данных %1 ?'"); ТекстВопроса = СтрЗаменить(ТекстВопроса, "%1", ТекстПредставления); - ЗаголовокВопроса = НСтр("ru='Подтверждение'"); + ЗаголовокВопроса = НСтр("ru = 'Подтверждение'"); Оповещение = Новый ОписаниеОповещения("ДополнительнаяРегистрацияПередУдалениемЗавершение", ЭтотОбъект, Новый Структура); Оповещение.ДополнительныеПараметры.Вставить("ВыделенныеСтроки", Выделенные); @@ -125,9 +125,9 @@ // Восстановление настроек ПредставлениеНастройки = ВыбранноеЗначение.ПредставлениеНастройки; Если Не ПустаяСтрока(ПредставлениеТекущейНастройки) И ПредставлениеНастройки<>ПредставлениеТекущейНастройки Тогда - ТекстВопроса = НСтр("ru='Восстановить настройки ""%1""?'"); + ТекстВопроса = НСтр("ru = 'Восстановить настройки ""%1""?'"); ТекстВопроса = СтрЗаменить(ТекстВопроса, "%1", ПредставлениеНастройки); - ТекстЗаголовка = НСтр("ru='Подтверждение'"); + ТекстЗаголовка = НСтр("ru = 'Подтверждение'"); Оповещение = Новый ОписаниеОповещения("ДополнительнаяРегистрацияОбработкаВыбораЗавершение", ЭтотОбъект, Новый Структура); Оповещение.ДополнительныеПараметры.Вставить("ПредставлениеНастройки", ПредставлениеНастройки); @@ -198,7 +198,7 @@ // Выбор из меню - списка СписокВариантов = ПрочитатьСписокВариантовНастроекСервер(); - Текст = НСтр("ru='Сохранить текущую настройку...'"); + Текст = НСтр("ru = 'Сохранить текущую настройку...'"); СписокВариантов.Добавить(1, Текст, , БиблиотекаКартинок.СохранитьНастройкиОтчета); Оповещение = Новый ОписаниеОповещения("НастройкиОтборовВыборВариантаЗавершение", ЭтотОбъект); @@ -229,8 +229,8 @@ ПредставлениеНастройки = ВыбранныйЭлемент.Значение; Если ТипЗнч(ПредставлениеНастройки)=Тип("Строка") Тогда - ТекстЗаголовка = НСтр("ru='Подтверждение'"); - ТекстВопроса = НСтр("ru='Восстановить настройки ""%1""?'"); + ТекстЗаголовка = НСтр("ru = 'Подтверждение'"); + ТекстВопроса = НСтр("ru = 'Восстановить настройки ""%1""?'"); ТекстВопроса = СтрЗаменить(ТекстВопроса, "%1", ПредставлениеНастройки); Оповещение = Новый ОписаниеОповещения("НастройкиОтборовЗавершение", ЭтотОбъект, Новый Структура); @@ -364,7 +364,7 @@ ТекущиеДанные.Период = СтруктураВыбора.ПериодДанных; ТекущиеДанные.Отбор = СтруктураВыбора.КомпоновщикНастроек.Настройки.Отбор; ТекущиеДанные.ОтборСтрокой = ПредставлениеОтбора(ТекущиеДанные.Период, ТекущиеДанные.Отбор); - ТекущиеДанные.Количество = НСтр("ru='Не рассчитано'"); + ТекущиеДанные.Количество = НСтр("ru = 'Не рассчитано'"); ОбновитьНадписьОбщегоКоличества(); @@ -386,7 +386,7 @@ Строка.ОтборСтрокой = ПредставлениеОтбора(Строка.Период, Строка.Отбор); Объект.ДополнительнаяРегистрация.Сортировать("Представление"); - Строка.Количество = НСтр("ru='Не рассчитано'"); + Строка.Количество = НСтр("ru = 'Не рассчитано'"); ОбновитьНадписьОбщегоКоличества(); КонецЕсли; @@ -426,7 +426,7 @@ ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор); ПараметрыВыполнения.НаименованиеФоновогоЗадания = - НСтр("ru='Расчет количества объектов для отправки при синхронизации'"); + НСтр("ru = 'Расчет количества объектов для отправки при синхронизации'"); РезультатЗапускаФоновогоЗадания = ДлительныеОперации.ВыполнитьВФоне( "ОбменДаннымиСервер.ИнтерактивноеИзменениеВыгрузки_СформироватьДеревоЗначений", @@ -488,7 +488,7 @@ ОстановитьРасчетКоличества(); Если Количество = Неопределено Тогда - ТекстКоличества = НСтр("ru='<не рассчитано>'"); + ТекстКоличества = НСтр("ru = '<не рассчитано>'"); Иначе ТекстКоличества = НСтр("ru = 'Объектов: %1'"); ТекстКоличества = СтрЗаменить(ТекстКоличества, "%1", Формат(Количество, "ЧН=")); @@ -499,7 +499,7 @@ &НаСервере Процедура СброситьНадписьКоличествТаблицы() - ТекстКоличеств = НСтр("ru='Не рассчитано'"); + ТекстКоличеств = НСтр("ru = 'Не рассчитано'"); Для Каждого Строка Из Объект.ДополнительнаяРегистрация Цикл Строка.Количество = ТекстКоличеств; КонецЦикла; diff --git a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/ObjectModule.bsl b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/ObjectModule.bsl index f821dece3..c26c50691 100644 --- a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/ObjectModule.bsl @@ -264,14 +264,14 @@ // Строка - заголовок для формирования представления отбора по всем документам. // Функция ЗаголовокГруппыОтбораВсехДокументов() Экспорт - Возврат НСтр("ru='Все документы'"); + Возврат НСтр("ru = 'Все документы'"); КонецФункции // Возвращаемое значение: // Строка - заголовок для формирования представления отбора по всем справочникам. // Функция ЗаголовокГруппыОтбораВсехСправочников() Экспорт - Возврат НСтр("ru='Все справочники'"); + Возврат НСтр("ru = 'Все справочники'"); КонецФункции // Возвращает описание периода и отбора строкой. @@ -922,7 +922,7 @@ МетаданныеОбъекта = Метаданные.НайтиПоПолномуИмени(ИмяДобавляемойТаблицы); Если МетаданныеОбъекта = Неопределено Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='Некорректное имя метаданных ""%1"" для регистрации на узле ""%2""'"), + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Некорректное имя метаданных ""%1"" для регистрации на узле ""%2""'"), ИмяДобавляемойТаблицы, УзелИнформационнойБазы); КонецЕсли; @@ -1212,7 +1212,7 @@ Если ВариантВыгрузки = 0 Тогда // Все автоматические данные - Возврат НСтр("ru='Без дополнительных данных.'"); + Возврат НСтр("ru = 'Без дополнительных данных.'"); ИначеЕсли ВариантВыгрузки = 1 Тогда ТекстВсеДокументы = ЗаголовокГруппыОтбораВсехДокументов(); diff --git a/SSL/src/DataProcessors/ИнформацияПриЗапуске/Forms/Форма/Form.form b/SSL/src/DataProcessors/ИнформацияПриЗапуске/Forms/Форма/Form.form index 84355106b..e879263ea 100644 --- a/SSL/src/DataProcessors/ИнформацияПриЗапуске/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/ИнформацияПриЗапуске/Forms/Форма/Form.form @@ -93,10 +93,6 @@ true - - <key>ru</key> - <value>Без подменю</value> - БезПодменюExtendedTooltip 12 @@ -254,10 +250,6 @@ true - - <key>ru</key> - <value>Верхняя панель</value> - ВерхняяПанельExtendedTooltip 9 diff --git a/SSL/src/DataProcessors/КонвертацияОбъектовXDTO/ObjectModule.bsl b/SSL/src/DataProcessors/КонвертацияОбъектовXDTO/ObjectModule.bsl index e4dda3a8c..0be22a331 100644 --- a/SSL/src/DataProcessors/КонвертацияОбъектовXDTO/ObjectModule.bsl +++ b/SSL/src/DataProcessors/КонвертацияОбъектовXDTO/ObjectModule.bsl @@ -358,13 +358,28 @@ Если Не КомпонентыОбмена.ФлагОшибки Тогда // Проверка данных From / NewFrom. - ОбменДаннымиСервер.ПроверитьКодыУзлов(РезультатАнализаДанныхКЗагрузке, КомпонентыОбмена.УзелКорреспондента); + ПроверитьКодыУзлов(РезультатАнализаДанныхКЗагрузке, КомпонентыОбмена.УзелКорреспондента); // Запишем информацию о номере входящего сообщения. - ОбъектУзла = УзелОбменаЗагрузкаДанных.ПолучитьОбъект(); - ОбъектУзла.НомерПринятого = КомпонентыОбмена.НомерВходящегоСообщения; - ОбъектУзла.ДополнительныеСвойства.Вставить("ПолучениеСообщенияОбмена"); - ОбъектУзла.Записать(); + НачатьТранзакцию(); + Попытка + БлокировкаДанных = Новый БлокировкаДанных; + + ЭлементБлокировкиДанных = БлокировкаДанных.Добавить("ПланОбмена." + ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(КомпонентыОбмена.УзелКорреспондента)); + ЭлементБлокировкиДанных.УстановитьЗначение("Ссылка", КомпонентыОбмена.УзелКорреспондента); + + БлокировкаДанных.Заблокировать(); + + ОбъектУзла = КомпонентыОбмена.УзелКорреспондента.ПолучитьОбъект(); + ОбъектУзла.НомерПринятого = КомпонентыОбмена.НомерВходящегоСообщения; + ОбъектУзла.ДополнительныеСвойства.Вставить("ПолучениеСообщенияОбмена"); + ОбъектУзла.Записать(); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; КонецЕсли; @@ -669,71 +684,7 @@ Процедура ПослеОткрытияФайлаЗагрузки(Отказ = Ложь, ИнициализироватьТаблицыПравил = Истина) - Если КомпонентыОбмена.ФлагОшибки Тогда - ОбменДаннымиXDTOСервер.ЗавершитьВедениеПротоколаОбмена(КомпонентыОбмена); - Если КомпонентыОбмена.Свойство("ФайлОбмена") Тогда - КомпонентыОбмена.ФайлОбмена.Закрыть(); - КонецЕсли; - Отказ = Истина; - Возврат; - КонецЕсли; - - Если КомпонентыОбмена.ЭтоОбменЧерезПланОбмена Тогда - - Если КомпонентыОбмена.ОбменДаннымиСВнешнейСистемой Тогда - КодУзлаКорреспондента = СокрЛП(ОбщегоНазначения.ЗначениеРеквизитаОбъекта(КомпонентыОбмена.УзелКорреспондента, "Код")); - Если ЗначениеЗаполнено(КомпонентыОбмена.ИдентификаторКорреспондента) - И Не КодУзлаКорреспондента = КомпонентыОбмена.ИдентификаторКорреспондента Тогда - УзелКорреспондентаОбъект = КомпонентыОбмена.УзелКорреспондента.ПолучитьОбъект(); - УзелКорреспондентаОбъект.Код = КомпонентыОбмена.ИдентификаторКорреспондента; - УзелКорреспондентаОбъект.ОбменДанными.Загрузка = Истина; - УзелКорреспондентаОбъект.Записать(); - - ОбменДаннымиXDTOСервер.ЗаписатьВПротоколВыполнения(КомпонентыОбмена, - НСтр("ru = 'Изменен идентификатор узла корреспондента.'"), , Ложь, , , Истина); - КонецЕсли; - КонецЕсли; - - ОбменДаннымиXDTOСервер.ОбновитьНастройкиXDTOКорреспондента(КомпонентыОбмена); - ОбменДаннымиXDTOСервер.ОбновитьПрефиксКорреспондента(КомпонентыОбмена); - - Если Не КомпонентыОбмена.ТолькоНастройкиXDTO - И ИнициализироватьТаблицыПравил Тогда - ОбменДаннымиXDTOСервер.ИнициализироватьТаблицыПравилОбмена(КомпонентыОбмена); - ОбменДаннымиXDTOСервер.ЗаполнитьСтруктуруНастроекXDTO(КомпонентыОбмена); - ОбменДаннымиXDTOСервер.ЗаполнитьПоддерживаемыеОбъектыXDTO(КомпонентыОбмена); - КонецЕсли; - КонецЕсли; - - Если КомпонентыОбмена.ТолькоНастройкиXDTO Тогда - Если КомпонентыОбмена.Свойство("ФайлОбмена") Тогда - КомпонентыОбмена.ФайлОбмена.Закрыть(); - КонецЕсли; - Отказ = Истина; - Возврат; - КонецЕсли; - - Если КомпонентыОбмена.ЭтоОбменЧерезПланОбмена Тогда - ИмяПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(КомпонентыОбмена.УзелКорреспондента); - - Если ОбменДаннымиСервер.ЕстьАлгоритмМенеджераПланаОбмена("ОбработчикПроверкиЗначенийПоУмолчанию", ИмяПланаОбмена) Тогда - - СообщениеОбОшибке = ""; - - ПараметрыОбработчика = Новый Структура; - ПараметрыОбработчика.Вставить("Корреспондент", КомпонентыОбмена.УзелКорреспондента); - ПараметрыОбработчика.Вставить("ПоддерживаемыеОбъектыXDTO", КомпонентыОбмена.ПоддерживаемыеОбъектыXDTO); - - ПланыОбмена[ИмяПланаОбмена].ОбработчикПроверкиЗначенийПоУмолчанию(Отказ, ПараметрыОбработчика, СообщениеОбОшибке); - - Если Отказ Тогда - ОбменДаннымиXDTOСервер.ЗаписатьВПротоколВыполнения(КомпонентыОбмена, СообщениеОбОшибке); - ОбменДаннымиXDTOСервер.ЗавершитьВедениеПротоколаОбмена(КомпонентыОбмена); - Возврат; - КонецЕсли; - - КонецЕсли; - КонецЕсли; + ОбменДаннымиXDTOСервер.ПослеОткрытияФайлаЗагрузки(КомпонентыОбмена, Отказ, ИнициализироватьТаблицыПравил); КонецПроцедуры @@ -780,6 +731,63 @@ КонецПроцедуры +Процедура ПроверитьКодыУзлов(РезультатАнализаДанныхКЗагрузке, УзелИнформационнойБазы) + + Если Не ОбменДаннымиСервер.ЭтоПланОбменаXDTO(УзелИнформационнойБазы) Тогда + Возврат; + КонецЕсли; + + НачатьТранзакцию(); + Попытка + БлокировкаДанных = Новый БлокировкаДанных; + + ЭлементБлокировкиДанных = БлокировкаДанных.Добавить("ПланОбмена." + ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(УзелИнформационнойБазы)); + ЭлементБлокировкиДанных.УстановитьЗначение("Ссылка", УзелИнформационнойБазы); + + ЭлементБлокировкиДанных = БлокировкаДанных.Добавить("РегистрСведений.ПсевдонимыПредопределенныхУзлов"); + ЭлементБлокировкиДанных.УстановитьЗначение("Корреспондент", УзелИнформационнойБазы); + + БлокировкаДанных.Заблокировать(); + + КодУзлаИБ = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(УзелИнформационнойБазы, "Код"); + Если ЗначениеЗаполнено(РезультатАнализаДанныхКЗагрузке.NewFrom) Тогда + УзелКорреспондентаПерекодирован = (КодУзлаИБ = РезультатАнализаДанныхКЗагрузке.NewFrom); + Если Не УзелКорреспондентаПерекодирован + И ОбменДаннымиXDTOСервер.ПоддерживаетсяВерсияСИдентификаторомОбменаДанными(УзелИнформационнойБазы) Тогда + + УзелОбменаОбъект = УзелИнформационнойБазы.ПолучитьОбъект(); + УзелОбменаОбъект.Код = РезультатАнализаДанныхКЗагрузке.NewFrom; + УзелОбменаОбъект.ОбменДанными.Загрузка = Истина; + УзелОбменаОбъект.Записать(); + + УзелКорреспондентаПерекодирован = Истина; + КонецЕсли; + Иначе + УзелКорреспондентаПерекодирован = Истина; + КонецЕсли; + + Если УзелКорреспондентаПерекодирован Тогда + ПсевдонимПредопределенногоУзла = ОбменДаннымиСервер.ПсевдонимПредопределенногоУзла(УзелИнформационнойБазы); + Если ЗначениеЗаполнено(ПсевдонимПредопределенногоУзла) + И РезультатАнализаДанныхКЗагрузке.КорреспондентПоддерживаетИдентификаторОбменаДанными Тогда + // Возможно, пора удалить запись. Проверка секции To. + ИмяПланаОбмена = УзелИнформационнойБазы.Метаданные().Имя; + КодПредопределенногоУзла = ОбменДаннымиСервер.КодПредопределенногоУзлаПланаОбмена(ИмяПланаОбмена); + Если СокрЛП(КодПредопределенногоУзла) = РезультатАнализаДанныхКЗагрузке.To Тогда + ОбменДаннымиСлужебный.УдалитьНаборЗаписейВРегистреСведений( + Новый Структура("Корреспондент", УзелИнформационнойБазы), + "ПсевдонимыПредопределенныхУзлов"); + КонецЕсли; + КонецЕсли; + КонецЕсли; + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + #КонецОбласти #КонецОбласти diff --git a/SSL/src/DataProcessors/КонвертацияОбъектовИнформационныхБаз/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/КонвертацияОбъектовИнформационныхБаз/Forms/Форма/Module.bsl index 9cf4ad6cb..2141ca4b5 100644 --- a/SSL/src/DataProcessors/КонвертацияОбъектовИнформационныхБаз/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/КонвертацияОбъектовИнформационныхБаз/Forms/Форма/Module.bsl @@ -11,7 +11,7 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - ВызватьИсключение НСтр("ru='Обработка не предназначена для непосредственного использования.'"); + ВызватьИсключение НСтр("ru = 'Обработка не предназначена для непосредственного использования.'"); КонецПроцедуры diff --git a/SSL/src/DataProcessors/КонвертацияОбъектовИнформационныхБаз/ObjectModule.bsl b/SSL/src/DataProcessors/КонвертацияОбъектовИнформационныхБаз/ObjectModule.bsl index d2507d85d..01a30b40e 100644 --- a/SSL/src/DataProcessors/КонвертацияОбъектовИнформационныхБаз/ObjectModule.bsl +++ b/SSL/src/DataProcessors/КонвертацияОбъектовИнформационныхБаз/ObjectModule.bsl @@ -675,16 +675,20 @@ Если СтруктураСвойств.ИмяТипа = "Перечисление" И СтрНайти(ПКО.Приемник, "ПеречислениеСсылка.") > 0 Тогда - // Записываем ошибку в протокол выполнения. - ЗП = ЗаписьПротоколаОбмена(); - ЗП.ИмяПКО = ИмяПКО; - ЗП.Значение = Источник; - ЗП.ТипЗначения = СтруктураСвойств.ТипСсылкиСтрокой; - ЗП.КСообщенияОбОшибках = 71; - ЗП.Текст = НСтр("ru = 'В правиле конвертации значений (ПКЗ) необходимо сопоставить значение Источника значению Приемника. - |Если подходящего значения приемника нет, то указать пустое значение.'"); - // - ЗаписатьВПротоколВыполнения(71, ЗП); + // Это может быть ссылка из удаленного расширения, тогда ошибку конвертации не регистрируем. + Если ОбщегоНазначения.ЭтоСсылка(ТипЗнч(СсылкаНаИсточник)) + И ОбщегоНазначения.СсылкаСуществует(СсылкаНаИсточник) Тогда + // Записываем ошибку в протокол выполнения. + ЗП = ЗаписьПротоколаОбмена(); + ЗП.ИмяПКО = ИмяПКО; + ЗП.Значение = Источник; + ЗП.ТипЗначения = СтруктураСвойств.ТипСсылкиСтрокой; + ЗП.КСообщенияОбОшибках = 71; + ЗП.Текст = НСтр("ru = 'В правиле конвертации значений (ПКЗ) необходимо сопоставить значение Источника значению Приемника. + |Если подходящего значения приемника нет, то указать пустое значение.'"); + // + ЗаписатьВПротоколВыполнения(71, ЗП); + КонецЕсли; Если СтрокаВСтекеВыгрузки <> Неопределено Тогда СтекВызововВыгрузкиДанных.Удалить(СтрокаВСтекеВыгрузки); @@ -2802,14 +2806,29 @@ ВыполнитьОтложенноеПроведениеДокументов(); ВыполнитьОтложеннуюЗаписьОбъектов(); - // Запишем информацию о номере входящего сообщения. - ОбъектУзла = УзелОбменаЗагрузкаДанных.ПолучитьОбъект(); - ОбъектУзла.НомерПринятого = НомерСообщения(); - ОбъектУзла.ОбменДанными.Загрузка = Истина; + КонецЕсли; + + Если Не ФлагОшибки() Тогда + НачатьТранзакцию(); Попытка - ОбъектУзла.Заблокировать(); + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить(ОбщегоНазначения.ИмяТаблицыПоСсылке(УзелОбменаЗагрузкаДанных)); + ЭлементБлокировки.УстановитьЗначение("Ссылка", УзелОбменаЗагрузкаДанных); + Блокировка.Заблокировать(); + + // Запишем информацию о номере входящего сообщения. + ЗаблокироватьДанныеДляРедактирования(УзелОбменаЗагрузкаДанных); + ОбъектУзла = УзелОбменаЗагрузкаДанных.ПолучитьОбъект(); + + ОбъектУзла.НомерПринятого = НомерСообщения(); + ОбъектУзла.ОбменДанными.Загрузка = Истина; + + ОбъектУзла.Записать(); + + ЗафиксироватьТранзакцию(); Исключение + ОтменитьТранзакцию(); ЗаписатьИнформациюОбОшибкеВПротокол(173, КраткоеПредставлениеОшибки(ИнформацияОбОшибке()), ОбъектУзла); КонецПопытки; @@ -2817,8 +2836,6 @@ Если Не ФлагОшибки() Тогда - ОбъектУзла.Записать(); - Если ЕстьКорректировкаИнформацииОРегистрацииОбъекта = Истина Тогда РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз.ЗафиксироватьВыполнениеКорректировкиИнформацииСопоставленияБезусловно(УзелОбменаЗагрузкаДанных); @@ -3472,13 +3489,13 @@ // Дополняет строку указанным символом до указанной длины. // -// Параметры: +// Параметры: // Стр - дополняемая строка; // Длина - требуемая длина результирующей строки; // Чем - символ, которым дополняется строка. // // Возвращаемое значение: -// Строка, дополненная указанным символом до указанной длины. +// Строка - , дополненная указанным символом до указанной длины. // Функция одДополнитьСтроку(Стр, Длина, Чем = " ") @@ -3497,11 +3514,11 @@ // Определяет заполнено ли переданное значение. // -// Параметры: +// Параметры: // Значение - значение, заполнение которого надо проверить. // // Возвращаемое значение: -// Истина - значение не заполнено, ложь - иначе. +// Булево - Истина - значение не заполнено, ложь - иначе. // Функция одПустое(Значение, ЭтоNULL=Ложь) @@ -3542,10 +3559,10 @@ // Возвращает объект ОписаниеТипов, содержащий указанный тип. // // Параметры: -// ЗначениеТипа - строка с именем типа или значение типа Тип. -// +// ЗначениеТипа - строка с именем типа или значение Тип - типа Тип. +// // Возвращаемое значение: -// ОписаниеТипов +// ОписаниеТипов - // Функция одОписаниеТипа(ЗначениеТипа) @@ -3572,11 +3589,11 @@ // Возвращает пустое (дефолтное) значение указанного типа. // // Параметры: -// Тип - строка с именем типа или значение типа Тип. +// Тип - строка с именем типа или значение Тип - типа Тип. // // Возвращаемое значение: // Пустое значение указанного типа. -// +// Функция одПолучитьПустоеЗначение(Тип) ПустоеЗначениеТипа = СоответствиеПустыхЗначенийТипов[Тип]; @@ -3825,10 +3842,10 @@ // Осуществляет запись элемента и его значения в указанный объект. // // Параметры: -// Объект - объект типа XMLЗапись. +// Объект - объект типа ЗаписьXML. // Имя - Строка. Имя элемента. // Значение - Значение элемента. -// +// Процедура одЗаписатьЭлемент(Объект, Имя, Значение="") Объект.ЗаписатьНачалоЭлемента(Имя); @@ -3881,14 +3898,14 @@ // к указанному примитивному типу. // // Параметры: -// Объект - объект типа XMLЧтение, спозиционированный на начале элемента, +// Объект - объект типа ЧтениеXML, спозиционированный на начале элемента, // атрибут которого требуется получить. -// Тип - Значение типа Тип. Тип атрибута. +// Тип - Значение Тип - типа Тип. Тип атрибута. // Имя - Строка. Имя атрибута. // // Возвращаемое значение: // Значение атрибута полученное по имени и приведенное к указанному типу. -// +// Функция одАтрибут(Объект, Тип, Имя) СтрЗначение = СокрП(Объект.ПолучитьАтрибут(Имя)); @@ -3909,9 +3926,9 @@ // Пропускает узлы xml до конца указанного элемента (по умолчанию текущего). // // Параметры: -// Объект - объект типа XMLЧтение. +// Объект - объект типа ЧтениеXML. // Имя - имя узла, до конца которого пропускаем элементы. -// +// Процедура одПропустить(Объект, Имя="") КоличествоВложений = 0; // Количество одноименных вложений. @@ -3955,7 +3972,7 @@ // Читает текст элемента и приводит значение к указанному типу. // // Параметры: -// Объект - объект типа XMLЧтение, из которого осуществляется чтение. +// Объект - объект типа ЧтениеXML, из которого осуществляется чтение. // Тип - тип получаемого значения. // ИскатьПоСвойству - для ссылочных типов может быть указано свойство, по которому // следует искать объект: "Код", "Наименование", <ИмяРеквизита>, "Имя" (предопределенного значения). @@ -4129,25 +4146,51 @@ // Нет. // // Возвращаемое значение: -// Объект типа структура -// +// структура - Объект типа структура +// Функция ЗаписьПротоколаОбмена(КСообщенияОбОшибках = "", Знач СтрокаОшибки = "") - СтруктураОшибки = Новый Структура("ИмяПКО,ИмяПОД,Нпп,ГНпп,Источник,ТипОбъекта,Свойство,Значение,ТипЗначения,ПКО,ПКС,ПКГС,ПВД,ПОД,Объект,СвойствоПриемника,КонвертируемоеЗначение,Обработчик,ОписаниеОшибки,ПозицияМодуля,Текст,КСообщенияОбОшибках,УзелПланаОбмена"); + СтруктураОшибки = Новый Структура( + "ИмяПКО, + |ИмяПОД, + |Нпп, + |ГНпп, + |Источник, + |ТипОбъекта, + |Свойство, + |Значение, + |ТипЗначения, + |ПКО, + |ПКС, + |ПКГС, + |ПВД, + |ПОД, + |Объект, + |СвойствоПриемника, + |КонвертируемоеЗначение, + |Обработчик, + |ОписаниеОшибки, + |ПозицияМодуля, + |Текст, + |КСообщенияОбОшибках, + |УзелПланаОбмена"); - СтрокаМодуля = ОтделитьРазделителем(СтрокаОшибки, "{"); - ОписаниеОшибки = ОтделитьРазделителем(СтрокаМодуля, "}: "); + СтрокаМодуля = ОтделитьРазделителем(СтрокаОшибки, "{"); + Если ПустаяСтрока(СтрокаОшибки) Тогда + ОписаниеОшибки = СокрЛП(ОтделитьРазделителем(СтрокаМодуля, "}:")); + Иначе + ОписаниеОшибки = СтрокаОшибки; + СтрокаМодуля = "{" + СтрокаМодуля; + КонецЕсли; Если ОписаниеОшибки <> "" Тогда - - СтруктураОшибки.ОписаниеОшибки = ОписаниеОшибки; - СтруктураОшибки.ПозицияМодуля = СтрокаМодуля; - + СтруктураОшибки.ОписаниеОшибки = ОписаниеОшибки; + СтруктураОшибки.ПозицияМодуля = СтрокаМодуля; КонецЕсли; Если СтруктураОшибки.КСообщенияОбОшибках <> "" Тогда - СтруктураОшибки.КСообщенияОбОшибках = КСообщенияОбОшибках; + СтруктураОшибки.КСообщенияОбОшибках = КСообщенияОбОшибках; КонецЕсли; @@ -4482,9 +4525,9 @@ // Осуществляет загрузку правила конвертации группы свойств. // // Параметры: -// ПравилаОбмена - Объект типа XMLЧтение. +// ПравилаОбмена - ЧтениеXML - Объект типа ЧтениеXML. // ТаблицаСвойств - таблица значений, содержащая ПКС. -// +// Процедура ЗагрузитьПКГС(ПравилаОбмена, ТаблицаСвойств, СвойстваОтключенные, СинхронизироватьПоИдентификатору, ИмяПКО = "") ЭтоПолеОтключено = одАтрибут(ПравилаОбмена, ТипБулево, "Отключить"); @@ -4665,19 +4708,19 @@ // Осуществляет загрузку правила конвертации свойств. // // Параметры: -// ПравилаОбмена - Объект типа XMLЧтение. +// ПравилаОбмена - ЧтениеXML - Объект типа ЧтениеXML. // ТаблицаСвойств - таблица значений, содержащая ПКС. -// +// // Параметры: -// ПравилаОбмена - XMLЧтение - объект, содержащий текст правил обмена. -// ТаблицаСвойств - Таблица значений - таблица ПКС. -// СвойстваОтключенные - Таблица значений - таблица отключенных ПКС. +// ПравилаОбмена - ЧтениеXML - объект, содержащий текст правил обмена. +// ТаблицаСвойств - ТаблицаЗначений - таблица ПКС. +// СвойстваОтключенные - ТаблицаЗначений - таблица отключенных ПКС. // СвойстваПКО - Структура - уточняющие сведения об изменяемых данных: // * ИмяПКО - Строка - Имя ПКО. // * СинхронизироватьПоИдентификатору - Булево - признак использования алгоритма поиска по уникальному идентификатору. // * ИмяРодителя - Строка - имя родительского ПКО или ПКГС. // СтрокаПолейПоиска - Строка - свойства поиска ПКО. -// ТаблицаПоиска - Таблица значений - таблица ПКС (синхронизирующих). +// ТаблицаПоиска - ТаблицаЗначений - таблица ПКС (синхронизирующих). // Процедура ЗагрузитьПКС(ПравилаОбмена, ТаблицаСвойств, @@ -4842,10 +4885,10 @@ // Осуществляет загрузку правил конвертации свойств. // // Параметры: -// ПравилаОбмена - Объект типа XMLЧтение. +// ПравилаОбмена - ЧтениеXML - Объект типа ЧтениеXML. // ТаблицаСвойств - таблица значений, содержащая ПКС. // ТаблицаПоиска - таблица значений, содержащая ПКС (синхронизирующих). -// +// Процедура ЗагрузитьСвойства(ПравилаОбмена, ТаблицаСвойств, ТаблицаПоиска, @@ -4886,11 +4929,11 @@ // Осуществляет загрузку правила конвертации значений. // // Параметры: -// ПравилаОбмена - Объект типа XMLЧтение. +// ПравилаОбмена - ЧтениеXML - Объект типа ЧтениеXML. // Значения - соответствие значений объекта источника - строковым // представлениям объекта приемника. -// ТипИсточника - значение типа Тип - тип объекта источника. -// +// ТипИсточника - значение Тип - типа Тип - тип объекта источника. +// Процедура ЗагрузитьПКЗ(ПравилаОбмена, Значения, ТипИсточника) Источник = ""; @@ -4918,11 +4961,11 @@ // Осуществляет загрузку правил конвертации значений. // // Параметры: -// ПравилаОбмена - Объект типа XMLЧтение. +// ПравилаОбмена - ЧтениеXML - Объект типа ЧтениеXML. // Значения - соответствие значений объекта источника - строковым // представлениям объекта приемника. -// ТипИсточника - значение типа Тип - тип объекта источника. -// +// ТипИсточника - значение Тип - типа Тип - тип объекта источника. +// Процедура ЗагрузитьЗначения(ПравилаОбмена, Значения, ТипИсточника); Пока ПравилаОбмена.Прочитать() Цикл @@ -4942,10 +4985,10 @@ // Осуществляет загрузку правила конвертации объектов. // // Параметры: -// ПравилаОбмена - Объект типа XMLЧтение. -// ЗаписьXML - Объект типа XMLЗапись - правила, сохраняемые в файл обмена и +// ПравилаОбмена - ЧтениеXML - Объект типа ЧтениеXML. +// ЗаписьXML - ЗаписьXML - Объект типа ЗаписьXML - правила, сохраняемые в файл обмена и // используемые при загрузке данных. -// +// Процедура ЗагрузитьПравилоКонвертации(ПравилаОбмена, ЗаписьXML) ЗаписьXML.ЗаписатьНачалоЭлемента("Правило"); @@ -5419,10 +5462,10 @@ // Осуществляет загрузку правил конвертации объектов. // // Параметры: -// ПравилаОбмена - Объект типа XMLЧтение. -// ЗаписьXML - Объект типа XMLЗапись - правила, сохраняемые в файл обмена и +// ПравилаОбмена - ЧтениеXML - Объект типа ЧтениеXML. +// ЗаписьXML - ЗаписьXML - Объект типа ЗаписьXML - правила, сохраняемые в файл обмена и // используемые при загрузке данных. -// +// Процедура ЗагрузитьПравилаКонвертации(ПравилаОбмена, ЗаписьXML) ТаблицаПравилКонвертации.Очистить(); @@ -5577,10 +5620,10 @@ // Осуществляет загрузку правил очистки данных. // // Параметры: -// ПравилаОбмена - Объект типа XMLЧтение. -// ЗаписьXML - Объект типа XMLЗапись - правила, сохраняемые в файл обмена и +// ПравилаОбмена - ЧтениеXML - Объект типа ЧтениеXML. +// ЗаписьXML - ЗаписьXML - Объект типа ЗаписьXML - правила, сохраняемые в файл обмена и // используемые при загрузке данных. -// +// Процедура ЗагрузитьПравилаОчистки(ПравилаОбмена, ЗаписьXML) ТаблицаПравилОчистки.Строки.Очистить(); @@ -5633,10 +5676,10 @@ // Осуществляет загрузку алгоритма в соответствии с форматом правил обмена. // // Параметры: -// ПравилаОбмена - Объект типа XMLЧтение. -// ЗаписьXML - Объект типа XMLЗапись - правила, сохраняемые в файл обмена и +// ПравилаОбмена - ЧтениеXML - Объект типа ЧтениеXML. +// ЗаписьXML - ЗаписьXML - Объект типа ЗаписьXML - правила, сохраняемые в файл обмена и // используемые при загрузке данных. -// +// Процедура ЗагрузитьАлгоритм(ПравилаОбмена, ЗаписьXML) ИспользуетсяПриЗагрузке = одАтрибут(ПравилаОбмена, ТипБулево, "ИспользуетсяПриЗагрузке"); @@ -5679,10 +5722,10 @@ // Осуществляет загрузку алгоритмов в соответствии с форматом правил обмена. // // Параметры: -// ПравилаОбмена - Объект типа XMLЧтение. -// ЗаписьXML - Объект типа XMLЗапись - правила, сохраняемые в файл обмена и +// ПравилаОбмена - ЧтениеXML - Объект типа ЧтениеXML. +// ЗаписьXML - ЗаписьXML - Объект типа ЗаписьXML - правила, сохраняемые в файл обмена и // используемые при загрузке данных. -// +// Процедура ЗагрузитьАлгоритмы(ПравилаОбмена, ЗаписьXML) Алгоритмы.Очистить(); @@ -5706,10 +5749,10 @@ // Осуществляет загрузку запроса в соответствии с форматом правил обмена. // // Параметры: -// ПравилаОбмена - Объект типа XMLЧтение. -// ЗаписьXML - Объект типа XMLЗапись - правила, сохраняемые в файл обмена и +// ПравилаОбмена - ЧтениеXML - Объект типа ЧтениеXML. +// ЗаписьXML - ЗаписьXML - Объект типа ЗаписьXML - правила, сохраняемые в файл обмена и // используемые при загрузке данных. -// +// Процедура ЗагрузитьЗапрос(ПравилаОбмена, ЗаписьXML) ИспользуетсяПриЗагрузке = одАтрибут(ПравилаОбмена, ТипБулево, "ИспользуетсяПриЗагрузке"); @@ -5752,10 +5795,10 @@ // Осуществляет загрузку запросов в соответствии с форматом правил обмена. // // Параметры: -// ПравилаОбмена - Объект типа XMLЧтение. -// ЗаписьXML - Объект типа XMLЗапись - правила, сохраняемые в файл обмена и +// ПравилаОбмена - ЧтениеXML - Объект типа ЧтениеXML. +// ЗаписьXML - ЗаписьXML - Объект типа ЗаписьXML - правила, сохраняемые в файл обмена и // используемые при загрузке данных. -// +// Процедура ЗагрузитьЗапросы(ПравилаОбмена, ЗаписьXML) Запросы.Очистить(); @@ -5781,8 +5824,8 @@ // Осуществляет загрузку параметров в соответствии с форматом правил обмена. // // Параметры: -// ПравилаОбмена - Объект типа XMLЧтение. -// +// ПравилаОбмена - ЧтениеXML - Объект типа ЧтениеXML. +// Процедура ЗагрузитьПараметры(ПравилаОбмена, ЗаписьXML) Параметры.Очистить(); @@ -5884,10 +5927,10 @@ // Осуществляет загрузку обработки в соответствии с форматом правил обмена. // // Параметры: -// ПравилаОбмена - Объект типа XMLЧтение. -// ЗаписьXML - Объект типа XMLЗапись - правила, сохраняемые в файл обмена и +// ПравилаОбмена - ЧтениеXML - Объект типа ЧтениеXML. +// ЗаписьXML - ЗаписьXML - Объект типа ЗаписьXML - правила, сохраняемые в файл обмена и // используемые при загрузке данных. -// +// Процедура ЗагрузитьОбработку(ПравилаОбмена, ЗаписьXML) Имя = одАтрибут(ПравилаОбмена, ТипСтрока, "Имя"); @@ -5931,10 +5974,10 @@ // Осуществляет загрузку внешних обработок в соответствии с форматом правил обмена. // // Параметры: -// ПравилаОбмена - Объект типа XMLЧтение. -// ЗаписьXML - Объект типа XMLЗапись - правила, сохраняемые в файл обмена и +// ПравилаОбмена - ЧтениеXML - Объект типа ЧтениеXML. +// ЗаписьXML - ЗаписьXML - Объект типа ЗаписьXML - правила, сохраняемые в файл обмена и // используемые при загрузке данных. -// +// Процедура ЗагрузитьОбработки(ПравилаОбмена, ЗаписьXML) ДопОбработки.Очистить(); @@ -5964,9 +6007,9 @@ // Осуществляет загрузку правила выгрузки данных в соответствии с форматом правил обмена. // // Параметры: -// ПравилаОбмена - Объект типа XMLЧтение. +// ПравилаОбмена - ЧтениеXML - Объект типа ЧтениеXML. // НоваяСтрока - строка дерева значений, описывающая правило выгрузки данных. -// +// Процедура ЗагрузитьПВД(ПравилаОбмена) НоваяСтрока = ТаблицаПравилВыгрузки.Добавить(); @@ -6069,8 +6112,8 @@ // Осуществляет загрузку правил выгрузки данных в соответствии с форматом правил обмена. // // Параметры: -// ПравилаОбмена - Объект типа XMLЧтение. -// +// ПравилаОбмена - ЧтениеXML - Объект типа ЧтениеXML. +// Процедура ЗагрузитьПравилаВыгрузки(ПравилаОбмена) ТаблицаПравилВыгрузки.Очистить(); @@ -16185,16 +16228,18 @@ ВызватьИсключение СтрокаСообщения; КонецЕсли; - ЧтениеСообщения = Новый Структура("НомерСообщения, НомерПринятого, Отправитель, ОтправительОбъект, СообщениеБылоПринятоРанее, АнализДанных"); + ЧтениеСообщения = Новый Структура( + "НомерСообщения, НомерПринятого, Отправитель, ОтправительОбъект, СообщениеБылоПринятоРанее, АнализДанных, ВосстановленаРезервнаяКопия"); ЧтениеСообщения.Отправитель = УзелОбменаПолучатель; ЧтениеСообщения.ОтправительОбъект = УзелОбменаПолучатель.ПолучитьОбъект(); ЧтениеСообщения.НомерСообщения = ПолеНомерСообщения; ЧтениеСообщения.НомерПринятого = ПолеНомерПринятогоСообщения; ЧтениеСообщения.СообщениеБылоПринятоРанее = Ложь; ЧтениеСообщения.АнализДанных = АнализДанных; - ЧтениеСообщения = Новый ФиксированнаяСтруктура(ЧтениеСообщения); + ЧтениеСообщения.Вставить("ВосстановленаРезервнаяКопия", + ЧтениеСообщения.НомерПринятого > ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ЧтениеСообщения.Отправитель, "НомерОтправленного")); - ВосстановленаРезервнаяКопия = (ЧтениеСообщения.НомерПринятого > ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ЧтениеСообщения.Отправитель, "НомерОтправленного")); + ЧтениеСообщения = Новый ФиксированнаяСтруктура(ЧтениеСообщения); Если РежимЗагрузкиДанныхВИнформационнуюБазу() Тогда @@ -16215,7 +16260,7 @@ ВызватьИсключение НСтр("ru = 'Сообщение обмена было принято ранее'"); КонецЕсли; - УдалитьРегистрациюИзменений = УдалитьРегистрациюИзменений И Не ВосстановленаРезервнаяКопия; + УдалитьРегистрациюИзменений = УдалитьРегистрациюИзменений И Не ЧтениеСообщения.ВосстановленаРезервнаяКопия; Если УдалитьРегистрациюИзменений Тогда // Удаляем регистрацию изменений. @@ -16237,11 +16282,8 @@ КонецЕсли; - Если ВосстановленаРезервнаяКопия Тогда - - ЧтениеСообщения.ОтправительОбъект.НомерОтправленного = ЧтениеСообщения.НомерПринятого; - ЧтениеСообщения.ОтправительОбъект.ОбменДанными.Загрузка = Истина; - ЧтениеСообщения.ОтправительОбъект.Записать(); + Если ЧтениеСообщения.ВосстановленаРезервнаяКопия Тогда + ОбменДаннымиСервер.ПриВосстановленииРезервнойКопии(ЧтениеСообщения); ЧтениеСообщенияВременное = ОбщегоНазначения.СкопироватьРекурсивно(ЧтениеСообщения, Ложь); ЧтениеСообщенияВременное.ОтправительОбъект = ЧтениеСообщения.Отправитель.ПолучитьОбъект(); @@ -16356,173 +16398,15 @@ Процедура ВыполнитьОтложенноеПроведениеДокументов() - Если ДокументыДляОтложенногоПроведения().Количество() = 0 Тогда - Возврат // нет документов в очереди - КонецЕсли; - - // Сворачиваем таблицу по уникальным полям. - ДокументыДляОтложенногоПроведения().Свернуть("ДокументСсылка, ДатаДокумента"); - - // Сортируем документы по возрастанию даты документов. - ДокументыДляОтложенногоПроведения().Сортировать("ДатаДокумента"); - - Для Каждого СтрокаТаблицы Из ДокументыДляОтложенногоПроведения() Цикл + ОбменДаннымиСервер.ВыполнитьОтложенноеПроведениеДокументов( + ДокументыДляОтложенногоПроведения(), УзелОбменаЗагрузкаДанных); - ДокументСсылка = СтрокаТаблицы.ДокументСсылка; - - Если ДокументСсылка.Пустая() Тогда - Продолжить; - КонецЕсли; - - Объект = ДокументСсылка.ПолучитьОбъект(); - - Если Объект = Неопределено Тогда - Продолжить; - КонецЕсли; - - // Устанавливаем узел-отправитель для предотвращения регистрации объекта на узле, для которого производим загрузку - // проведение выполняем не в режиме загрузки. - УстановитьОбменДаннымиЗагрузка(Объект, Ложь); - - ОписаниеОшибки = ""; - ДокументПроведенУспешно = Ложь; - - Попытка - - ДополнительныеСвойства = ДополнительныеСвойстваДляОтложенногоПроведения().Получить(ДокументСсылка); - - Для Каждого Свойство Из ДополнительныеСвойства Цикл - - Объект.ДополнительныеСвойства.Вставить(Свойство.Ключ, Свойство.Значение); - - КонецЦикла; - - Объект.ДополнительныеСвойства.Вставить("ОтложенноеПроведение"); - - Если Объект.ПроверитьЗаполнение() Тогда - - // При проведении документа снимаем запрет на выполнение ПРО, - // т.к. ПРО были проигнорированы при обычной записи документа с целью оптимизации скорости загрузки данных. - Если Объект.ДополнительныеСвойства.Свойство("ОтключитьМеханизмРегистрацииОбъектов") Тогда - Объект.ДополнительныеСвойства.Удалить("ОтключитьМеханизмРегистрацииОбъектов"); - КонецЕсли; - - ОбменДаннымиСервер.ПропуститьПроверкуЗапретаИзменения(); - Объект.ДополнительныеСвойства.Вставить("ПропуститьПроверкуЗапретаИзменения"); - - // Выполняем попытку проведения документа. - Объект.Записать(РежимЗаписиДокумента.Проведение); - - ДокументПроведенУспешно = Объект.Проведен; - - Иначе - - ДокументПроведенУспешно = Ложь; - - КонецЕсли; - - Исключение - - ОписаниеОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); - - ДокументПроведенУспешно = Ложь; - - КонецПопытки; - - ОбменДаннымиСервер.ПропуститьПроверкуЗапретаИзменения(Ложь); - - Если Не ДокументПроведенУспешно Тогда - - ОбменДаннымиСервер.ЗарегистрироватьОшибкуПроведенияДокумента(Объект, УзелОбменаЗагрузкаДанных, ОписаниеОшибки, Истина); - - КонецЕсли; - - КонецЦикла; - КонецПроцедуры Процедура ВыполнитьОтложеннуюЗаписьОбъектов() - Если ОбъектыДляОтложеннойЗаписи().Количество() = 0 Тогда - Возврат // Нет объектов в очереди - КонецЕсли; - - Для Каждого ОбъектСоответствия Из ОбъектыДляОтложеннойЗаписи() Цикл - - Если ОбъектСоответствия.Ключ.Пустая() Тогда - Продолжить; - КонецЕсли; - - Объект = ОбъектСоответствия.Ключ.ПолучитьОбъект(); - - Если Объект = Неопределено Тогда - Продолжить; - КонецЕсли; - - // Устанавливаем узел-отправитель для предотвращения регистрации объекта на узле, для которого производим загрузку - // проведение выполняем не в режиме загрузки. - УстановитьОбменДаннымиЗагрузка(Объект, Ложь); - - ОписаниеОшибки = ""; - ОбъектЗаписанУспешно = Ложь; - - Попытка - - ДополнительныеСвойства = ОбъектСоответствия.Значение; - - Для Каждого Свойство Из ДополнительныеСвойства Цикл - - Объект.ДополнительныеСвойства.Вставить(Свойство.Ключ, Свойство.Значение); - - КонецЦикла; - - Объект.ДополнительныеСвойства.Вставить("ОтложеннаяЗапись"); - - Если Объект.ПроверитьЗаполнение() Тогда - - // При проведении документа снимаем запрет на выполнение ПРО, - // т.к. ПРО были проигнорированы при обычной записи с целью оптимизации скорости загрузки данных. - Если Объект.ДополнительныеСвойства.Свойство("ОтключитьМеханизмРегистрацииОбъектов") Тогда - Объект.ДополнительныеСвойства.Удалить("ОтключитьМеханизмРегистрацииОбъектов"); - КонецЕсли; - - ОбменДаннымиСервер.ПропуститьПроверкуЗапретаИзменения(); - Объект.ДополнительныеСвойства.Вставить("ПропуститьПроверкуЗапретаИзменения"); - - // Выполняем попытку записи объекта. - СведенияОВерсииОбъекта = Неопределено; - Если Объект.ДополнительныеСвойства.Свойство("СведенияОВерсииОбъекта", СведенияОВерсииОбъекта) Тогда - ОбменДаннымиСобытия.ПриСозданииВерсииОбъекта(Объект, СведенияОВерсииОбъекта, Истина, УзелОбменаЗагрузкаДанных); - КонецЕсли; - Объект.Записать(); - - ОбъектЗаписанУспешно = Истина; - - Иначе - - ОбъектЗаписанУспешно = Ложь; - - ОписаниеОшибки = НСтр("ru = 'Ошибка проверки заполнения реквизитов'"); - - КонецЕсли; - - Исключение - - ОписаниеОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); - - ОбъектЗаписанУспешно = Ложь; - - КонецПопытки; - - ОбменДаннымиСервер.ПропуститьПроверкуЗапретаИзменения(Ложь); - - Если Не ОбъектЗаписанУспешно Тогда - - ОбменДаннымиСервер.ЗарегистрироватьОшибкуЗаписиОбъекта(Объект, УзелОбменаЗагрузкаДанных, ОписаниеОшибки); - - КонецЕсли; - - КонецЦикла; + ОбменДаннымиСервер.ВыполнитьОтложеннуюЗаписьОбъектов( + ОбъектыДляОтложеннойЗаписи(), УзелОбменаЗагрузкаДанных); КонецПроцедуры diff --git a/SSL/src/DataProcessors/КонвертацияОбъектовРаспределенныхИнформационныхБаз/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/КонвертацияОбъектовРаспределенныхИнформационныхБаз/Forms/Форма/Module.bsl index 9cf4ad6cb..2141ca4b5 100644 --- a/SSL/src/DataProcessors/КонвертацияОбъектовРаспределенныхИнформационныхБаз/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/КонвертацияОбъектовРаспределенныхИнформационныхБаз/Forms/Форма/Module.bsl @@ -11,7 +11,7 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - ВызватьИсключение НСтр("ru='Обработка не предназначена для непосредственного использования.'"); + ВызватьИсключение НСтр("ru = 'Обработка не предназначена для непосредственного использования.'"); КонецПроцедуры diff --git a/SSL/src/DataProcessors/КонвертацияОбъектовРаспределенныхИнформационныхБаз/ObjectModule.bsl b/SSL/src/DataProcessors/КонвертацияОбъектовРаспределенныхИнформационныхБаз/ObjectModule.bsl index 790c45486..123911ac2 100644 --- a/SSL/src/DataProcessors/КонвертацияОбъектовРаспределенныхИнформационныхБаз/ObjectModule.bsl +++ b/SSL/src/DataProcessors/КонвертацияОбъектовРаспределенныхИнформационныхБаз/ObjectModule.bsl @@ -18,12 +18,12 @@ // Параметры: // Отказ - Булево - флаг отказа; поднимается в случае возникновения ошибок при обработке сообщения обмена. // -Процедура ВыполнитьЗагрузкуДанных(Отказ, Знач ЗагрузитьТолькоПараметры) Экспорт +Процедура ВыполнитьЗагрузкуДанных(Отказ, Знач ЗагрузитьТолькоПараметры, СообщениеОбОшибке = "") Экспорт Если Не ЭтоУзелРаспределеннойИнформационнойБазы() Тогда - // Обмен не по правилам конвертации не поддерживается. - ЗафиксироватьЗавершениеОбмена(Отказ,, ОшибкаВидаОбменаДанными()); + СообщениеОбОшибке = ОшибкаВидаОбменаДанными(); + ЗафиксироватьЗавершениеОбмена(Отказ, , ОшибкаВидаОбменаДанными()); Возврат; КонецЕсли; @@ -58,21 +58,19 @@ ПараметрыСеанса.ПараметрыСеансаСинхронизацииДанных = Новый ХранилищеЗначения(ПараметрыСеансаСинхронизацииДанных); УстановитьПривилегированныйРежим(Ложь); - ЧтениеXML = Новый ЧтениеXML; - Попытка ЧтениеXML.ОткрытьФайл(ИмяФайлаСообщенияОбмена()); Исключение - // Ошибка открытия файла сообщения обмена. - ЗафиксироватьЗавершениеОбмена(Отказ, ОписаниеОшибки(), ОшибкаОткрытияФайлаСообщенияОбмена()); + СообщениеОбОшибке = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗафиксироватьЗавершениеОбмена(Отказ, СообщениеОбОшибке, ОшибкаОткрытияФайлаСообщенияОбмена()); Возврат; КонецПопытки; ОбменДаннымиСлужебный.ОтключитьОбновлениеКлючейДоступа(Истина); Попытка - ПрочитатьФайлСообщенияОбмена(Отказ, ЧтениеXML, ЗагрузитьТолькоПараметры, ЗагрузитьМетаданные); + ПрочитатьФайлСообщенияОбмена(Отказ, ЧтениеXML, ЗагрузитьТолькоПараметры, ЗагрузитьМетаданные, СообщениеОбОшибке); ОбменДаннымиСлужебный.ОтключитьОбновлениеКлючейДоступа(Ложь); Исключение ОбменДаннымиСлужебный.ОтключитьОбновлениеКлючейДоступа(Ложь); @@ -130,7 +128,7 @@ // -Процедура ПрочитатьФайлСообщенияОбмена(Отказ, ЧтениеXML, Знач ЗагрузитьТолькоПараметры, Знач ЗагрузитьМетаданные) +Процедура ПрочитатьФайлСообщенияОбмена(Отказ, ЧтениеXML, Знач ЗагрузитьТолькоПараметры, Знач ЗагрузитьМетаданные, СообщениеОбОшибке = "") ЧтениеСообщения = ПланыОбмена.СоздатьЧтениеСообщения(); @@ -140,7 +138,8 @@ // Задан неизвестный план обмена; // указан узел, не входящий в план обмена; // номер сообщения не соответствует ожидаемому. - ЗафиксироватьЗавершениеОбмена(Отказ, ОписаниеОшибки(), ОшибкаНачалаЧтенияФайлаСообщенияОбмена()); + СообщениеОбОшибке = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗафиксироватьЗавершениеОбмена(Отказ, СообщениеОбОшибке, ОшибкаНачалаЧтенияФайлаСообщенияОбмена()); Возврат; КонецПопытки; @@ -179,7 +178,8 @@ УстановитьПривилегированныйРежим(Ложь); ЧтениеСообщения.ПрерватьЧтение(); - ЗафиксироватьЗавершениеОбмена(Отказ, ОписаниеОшибки(), ОшибкаЧтенияФайлаСообщенияОбмена()); + СообщениеОбОшибке = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗафиксироватьЗавершениеОбмена(Отказ, СообщениеОбОшибке, ОшибкаЧтенияФайлаСообщенияОбмена()); Возврат; КонецПопытки; @@ -199,7 +199,8 @@ ЧтениеСообщения.ПрерватьЧтение(); Исключение ЧтениеСообщения.ПрерватьЧтение(); - ЗафиксироватьЗавершениеОбмена(Отказ, ОписаниеОшибки(), ОшибкаЧтенияФайлаСообщенияОбмена()); + СообщениеОбОшибке = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗафиксироватьЗавершениеОбмена(Отказ, СообщениеОбОшибке, ОшибкаЧтенияФайлаСообщенияОбмена()); Возврат КонецПопытки; @@ -219,7 +220,8 @@ ЧтениеСообщения.ЗакончитьЧтение(); Исключение ЧтениеСообщения.ПрерватьЧтение(); - ЗафиксироватьЗавершениеОбмена(Отказ, ОписаниеОшибки(), ОшибкаЧтенияФайлаСообщенияОбмена()); + СообщениеОбОшибке = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗафиксироватьЗавершениеОбмена(Отказ, СообщениеОбОшибке, ОшибкаЧтенияФайлаСообщенияОбмена()); Возврат КонецПопытки; @@ -228,12 +230,29 @@ // Запись общих данных узлов выполняется после чтения сообщения. Если УзелОбщихДанных <> Неопределено Тогда - ОбщиеДанныеУзлов = ОбменДаннымиПовтИсп.ОбщиеДанныеУзлов(ПланыОбмена.ГлавныйУзел()); - ТекущийУзел = ПланыОбмена.ГлавныйУзел().ПолучитьОбъект(); - Если ОбменДаннымиСобытия.ДанныеРазличаются(ТекущийУзел, УзелОбщихДанных, ОбщиеДанныеУзлов) Тогда - ОбменДаннымиСобытия.ЗаполнитьЗначенияСвойствОбъекта(ТекущийУзел, УзелОбщихДанных, ОбщиеДанныеУзлов); - ТекущийУзел.Записать(); - КонецЕсли; + ГлавныйУзелСсылка = ПланыОбмена.ГлавныйУзел(); + + НачатьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных; + + ЭлементБлокировки = Блокировка.Добавить(ОбщегоНазначения.ИмяТаблицыПоСсылке(ГлавныйУзелСсылка)); + ЭлементБлокировки.УстановитьЗначение("Ссылка", ГлавныйУзелСсылка); + + Блокировка.Заблокировать(); + + ОбщиеДанныеУзлов = ОбменДаннымиПовтИсп.ОбщиеДанныеУзлов(ГлавныйУзелСсылка); + ТекущийУзел = ГлавныйУзелСсылка.ПолучитьОбъект(); + Если ОбменДаннымиСобытия.ДанныеРазличаются(ТекущийУзел, УзелОбщихДанных, ОбщиеДанныеУзлов) Тогда + ОбменДаннымиСобытия.ЗаполнитьЗначенияСвойствОбъекта(ТекущийУзел, УзелОбщихДанных, ОбщиеДанныеУзлов); + ТекущийУзел.Записать(); + КонецЕсли; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; КонецЕсли; diff --git a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Module.bsl b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Module.bsl index 012c86726..bdd68adfe 100644 --- a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Module.bsl +++ b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Module.bsl @@ -368,7 +368,7 @@ // ВидыОпераций - Структура, описывающая значения перечисления ОперацииАдминистрированияПрофилейБезопасности: // * Ключ - Строка - имя значения перечисления, // * Значение - ПеречислениеСсылка.ОперацииАдминистрированияПрофилейБезопасности, -// СценарийПримененияРазрешений - Массив(Структура) - сценарий применения изменений разрешений на +// СценарийПримененияРазрешений - Массив Из Структура - сценарий применения изменений разрешений на // использование профилей безопасности в кластере серверов. Значениями массива являются структуры // со следующими полями: // * Операция - ПеречислениеСсылка.ОперацииАдминистрированияПрофилейБезопасности - операция, которую diff --git a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/Форма/Module.bsl index 21def46f9..e1a560c6e 100644 --- a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/Форма/Module.bsl @@ -11,7 +11,7 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - ВызватьИсключение НСтр("ru='Обработка не предназначена для непосредственного использования.'"); + ВызватьИсключение НСтр("ru = 'Обработка не предназначена для непосредственного использования.'"); КонецПроцедуры diff --git a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/ManagerModule.bsl b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/ManagerModule.bsl index 220297336..ad9028a01 100644 --- a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/ManagerModule.bsl +++ b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/ManagerModule.bsl @@ -322,7 +322,8 @@ // Отбор - Структура, // ДобавитьПриОтсутствии - Булево. // -// Возвращаемое значение: СтрокаТаблицыЗначений или Неопределено. +// Возвращаемое значение: +// СтрокаТаблицыЗначений или Неопределено. // Функция СтрокаТаблицыРазрешений(Знач ТаблицаРазрешений, Знач Отбор, Знач ДобавитьПриОтсутствии = Истина) Экспорт diff --git a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/ObjectModule.bsl b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/ObjectModule.bsl index aeaf3400a..4460023ab 100644 --- a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/ObjectModule.bsl +++ b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/ObjectModule.bsl @@ -264,8 +264,8 @@ // ТипВладельца - СправочникСсылка.ИдентификаторыОбъектовМетаданных, // ИдентификаторВладельца - УникальныйИдентификатор, // РежимЗамещения - Булево, -// ДобавляемыеРазрешения - Массив(ОбъектXDTO) или Неопределено, -// УдаляемыеРазрешения - Массив(ОбъектXDTO) или Неопределено. +// ДобавляемыеРазрешения - Массив Из ОбъектXDTO или Неопределено, +// УдаляемыеРазрешения - Массив Из ОбъектXDTO или Неопределено. // Процедура ДобавитьЗапросРазрешенийНаИспользованиеВнешнихРесурсов( Знач ТипПрограммногоМодуля, Знач ИдентификаторПрограммногоМодуля, @@ -389,7 +389,11 @@ // Процедура РассчитатьПрименениеЗапросов() Экспорт - НачатьТранзакцию(); + ВнешняяТранзакция = ТранзакцияАктивна(); + Если Не ВнешняяТранзакция Тогда + НачатьТранзакцию(); // АПК:326 для НачатьТранзакцию отсутствует парный ЗафиксироватьТранзакцию, т.к. действие отменяется. + КонецЕсли; + Попытка Обработки.НастройкаРазрешенийНаИспользованиеВнешнихРесурсов.ЗаблокироватьРегистрыПредоставленныхРазрешений(); @@ -401,9 +405,13 @@ РассчитатьРезультатПримененияЗапросовБезУчетаВладельцев(); РассчитатьДельтуБезУчетаВладельцев(); - ОтменитьТранзакцию(); + Если Не ВнешняяТранзакция Тогда + ОтменитьТранзакцию(); + КонецЕсли; Исключение - ОтменитьТранзакцию(); + Если Не ВнешняяТранзакция Тогда + ОтменитьТранзакцию(); + КонецЕсли; ВызватьИсключение; КонецПопытки; @@ -423,7 +431,8 @@ // Проверяет необходимость применения разрешений в кластере серверов. // -// Возвращаемое значение: Булево. +// Возвращаемое значение: +// Булево - // Функция ТребуетсяПрименениеРазрешенийВКластереСерверов() Экспорт @@ -447,7 +456,8 @@ // Проверяет необходимости записи разрешений в регистры. // -// Возвращаемое значение: Булево. +// Возвращаемое значение: +// Булево - // Функция ТребуетсяЗаписьРазрешенийВРегистр() Экспорт @@ -475,7 +485,8 @@ // КакТребуемые - Булево - представление формируется как список разрешений, а не как список операций // при изменении разрешений. // -// Возвращаемое значение: ТабличныйДокумент. +// Возвращаемое значение: +// ТабличныйДокумент - . // Функция Представление(Знач КакТребуемые = Ложь) Экспорт @@ -489,7 +500,8 @@ // Возвращает сценарий применения запросов разрешений на использование внешних ресурсов. // -// Возвращаемое значение: Массив(Структура), поля структуры: +// Возвращаемое значение: +// Массив(Структура), поля структуры: // * Операция - ПеречислениеСсылка.ОперацииАдминистрированияПрофилейБезопасности, // * Профиль - Строка - имя профиля безопасности, // * Разрешения - Структура - см. @@ -1100,7 +1112,8 @@ // ТипПрограммногоМодуля - СправочникСсылка.ИдентификаторыОбъектовМетаданных, // ИдентификаторПрограммногоМодуля - УникальныйИдентификатор. // -// Возвращаемое значение: Структура - см. АдминистрированиеКластера.СвойстваПрофиляБезопасности(). +// Возвращаемое значение: +// Структура - см. АдминистрированиеКластера.СвойстваПрофиляБезопасности(). // Функция ПрофильВНотацииИнтерфейсаАдминистрированияКластера(Знач ИмяПрофиля, Знач ТипПрограммногоМодуля, Знач ИдентификаторПрограммногоМодуля) @@ -1276,7 +1289,8 @@ // Параметры: // ИсходнаяСтрока - Строка - исходный физический путь виртуального каталога. // -// Возвращаемое значение: Строка. +// Возвращаемое значение: +// Строка - . // Функция ЭкранироватьСимволПроцент(Знач ИсходнаяСтрока) diff --git a/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/НастройкаРезервногоКопирования/Form.form b/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/НастройкаРезервногоКопирования/Form.form index d491a2251..59790d603 100644 --- a/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/НастройкаРезервногоКопирования/Form.form +++ b/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/НастройкаРезервногоКопирования/Form.form @@ -1510,11 +1510,6 @@ Label true false - - 128 - 128 - 128 - Click @@ -1524,6 +1519,48 @@ Left
    + + НадписьОбновитьВерсиюКомпоненты + 455 + + <key>ru</key> + <value>При ошибках версии компоненты comcntr, "не найдена указанная процедура", "класс не зарегистрирован" и аналогичных, рекомендуется выполнить <link Перерегистрация>регистрацию компоненты comcntr</> (потребуется перезапуск сеанса).</value> + + true + true + + true + + + НадписьОбновитьВерсиюКомпонентыРасширеннаяПодсказка + 457 + Label + true + true + + Left + + + + НадписьОбновитьВерсиюКомпонентыКонтекстноеМеню + 456 + true + + true + Label + 60 + true + true + false + + + URLProcessing + НадписьОбновитьВерсиюКомпонентыОбработкаНавигационнойСсылки + + Left + 2 + + true true diff --git a/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/НастройкаРезервногоКопирования/Module.bsl b/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/НастройкаРезервногоКопирования/Module.bsl index 1685a5018..d5ba2cb1e 100644 --- a/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/НастройкаРезервногоКопирования/Module.bsl +++ b/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/НастройкаРезервногоКопирования/Module.bsl @@ -77,6 +77,11 @@ Настройки.МинимальнаяДатаСледующегоАвтоматическогоРезервногоКопирования = '29990101'; ЗаписатьНастройки = Ложь; + +#Если ВебКлиент Тогда + Элементы.НадписьОбновитьВерсиюКомпоненты.Видимость = Ложь; +#КонецЕсли + КонецПроцедуры &НаКлиенте @@ -153,6 +158,14 @@ КонецПроцедуры +&НаКлиенте +Процедура НадписьОбновитьВерсиюКомпонентыОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылка, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + ОбщегоНазначенияКлиент.ЗарегистрироватьCOMСоединитель(); + +КонецПроцедуры + #КонецОбласти #Область ОбработчикиКомандФормы diff --git a/SSL/src/DataProcessors/НастройкаСтандартногоИнтерфейсаOData/Forms/ЗависимостиОбъектаМетаданных/Form.form b/SSL/src/DataProcessors/НастройкаСтандартногоИнтерфейсаOData/Forms/ЗависимостиОбъектаМетаданных/Form.form index 5c81a3377..620302234 100644 --- a/SSL/src/DataProcessors/НастройкаСтандартногоИнтерфейсаOData/Forms/ЗависимостиОбъектаМетаданных/Form.form +++ b/SSL/src/DataProcessors/НастройкаСтандартногоИнтерфейсаOData/Forms/ЗависимостиОбъектаМетаданных/Form.form @@ -82,7 +82,6 @@ true Label - 3 true Left @@ -146,8 +145,6 @@ true Label - true - 3 true Left diff --git a/SSL/src/DataProcessors/НастройкаСтандартногоИнтерфейсаOData/Forms/НастройкаИспользованияСтандартногоИнтерфейсаOData/Form.form b/SSL/src/DataProcessors/НастройкаСтандартногоИнтерфейсаOData/Forms/НастройкаИспользованияСтандартногоИнтерфейсаOData/Form.form index 8d7c347ea..76d9a5bf1 100644 --- a/SSL/src/DataProcessors/НастройкаСтандартногоИнтерфейсаOData/Forms/НастройкаИспользованияСтандартногоИнтерфейсаOData/Form.form +++ b/SSL/src/DataProcessors/НастройкаСтандартногоИнтерфейсаOData/Forms/НастройкаИспользованияСтандартногоИнтерфейсаOData/Form.form @@ -718,7 +718,7 @@ <key>ru</key> <value>Ряд объектов могут быть выделены дополнительно в колонке "Примечание": -- Подчиненный объект - объект используется при работе пользователей с приложением не непосредстванно, а при работе с другими объектами. Предоставление доступа к таким объектам является штатной ситуацией. +- Подчиненный объект - объект используется при работе пользователей с приложением не непосредственно , а при работе с другими объектами. Предоставление доступа к таким объектам является штатной ситуацией. - Доступен только для чтения - данные объекта могут быть только прочитаны через автоматический REST-сервис. В списке отображаются только объекты, доступные при текущих настройках программы.</value> diff --git a/SSL/src/DataProcessors/НастройкаСтандартногоИнтерфейсаOData/ManagerModule.bsl b/SSL/src/DataProcessors/НастройкаСтандартногоИнтерфейсаOData/ManagerModule.bsl index 22d7ada52..e3c5db25e 100644 --- a/SSL/src/DataProcessors/НастройкаСтандартногоИнтерфейсаOData/ManagerModule.bsl +++ b/SSL/src/DataProcessors/НастройкаСтандартногоИнтерфейсаOData/ManagerModule.bsl @@ -29,7 +29,8 @@ // логин и пароль которого будет использоваться при подключении к стандартному интерфейсу // OData (в модели сервиса). // -// Возвращаемое значение: ОбъектМетаданных (роль). +// Возвращаемое значение: +// ОбъектМетаданных (роль). // Функция РольДляСтандартногоИнтерфейсаOData() Экспорт @@ -39,7 +40,8 @@ // Возвращает настройки авторизации для стандартного интерфейса OData (в модели сервиса). // -// Возвращаемое значение: ФиксированнаяСтруктура, поля: +// Возвращаемое значение: +// ФиксированнаяСтруктура - , поля: // * Используется - Булево - флаг включения авторизации для доступа // к стандартному интерфейсу OData, // * Логин - Строка - логин пользователя для авторизации при доступе @@ -108,10 +110,15 @@ ПользовательСтандартногоИнтерфейсаOData.Служебный = Истина; ПользовательСтандартногоИнтерфейсаOData.ДополнительныеСвойства.Вставить("ОписаниеПользователяИБ", ОписаниеПользователяИБ); - НачатьТранзакцию(); + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Справочник.Пользователи"); + ЭлементБлокировки.УстановитьЗначение("Ссылка", ПользовательСтандартногоИнтерфейсаOData); + НачатьТранзакцию(); Попытка + Блокировка.Заблокировать(); + ПользовательСтандартногоИнтерфейсаOData.Записать(); Константы.ПользовательСтандартногоИнтерфейсаOData.Установить( @@ -205,7 +212,8 @@ // Возвращает модель данных для объектов, которые могут быть включены в состава стандартного // интерфейса OData (в модели сервиса). // -// Возвращаемое значение: ТаблицаЗначений, колонки: +// Возвращаемое значение: +// ТаблицаЗначений - , колонки: // * ОбъектМетаданных - ОбъектМетаданных - объект метаданных, который может // включен в состав стандартного интерфейса OData, // * Чтение - Булево - через стандартный интерфейс OData может быть предоставлен @@ -262,7 +270,8 @@ // логин и пароль которого будет использоваться при подключении к стандартному интерфейсу // OData (в модели сервиса). // -// Возвращаемое значение: Соответствие: +// Возвращаемое значение: +// Соответствие: // * Ключ - ОбъектМетаданных - объект метаданных, // * Значение - Массив(Строка) - массив названий прав доступа, // которые должны быть разрешены для данного объекта @@ -995,7 +1004,8 @@ // Параметры: // ОбъектМетаданных - проверяемый объект метаданных. // -// Возвращаемое значение: Булево. +// Возвращаемое значение: +// Булево - // Функция ЭтоОбъектМетаданныхКонфигурация(Знач ОбъектМетаданных) @@ -1008,7 +1018,8 @@ // Параметры: // ОбъектМетаданных - проверяемый объект метаданных. // -// Возвращаемое значение: Булево. +// Возвращаемое значение: +// Булево - // Функция ЭтоПараметрСеанса(Знач ОбъектМетаданных) @@ -1022,7 +1033,8 @@ // Параметры: // ОбъектМетаданных - проверяемый объект метаданных. // -// Возвращаемое значение: Булево. +// Возвращаемое значение: +// Булево - // Функция ЭтоОбщийРеквизит(Знач ОбъектМетаданных) @@ -1036,7 +1048,8 @@ // Параметры: // ОбъектМетаданных - проверяемый объект метаданных. // -// Возвращаемое значение: Булево. +// Возвращаемое значение: +// Булево - // Функция ЭтоСсылочныеДанные(Знач ОбъектМетаданных) @@ -1057,7 +1070,8 @@ // Параметры: // ОбъектМетаданных - проверяемый объект метаданных. // -// Возвращаемое значение: Булево. +// Возвращаемое значение: +// Булево - // Функция ЭтоСсылочныеДанныеПоддерживающиеПредопределенныеЭлементы(Знач ОбъектМетаданных) @@ -1073,7 +1087,8 @@ // Параметры: // ОбъектМетаданных - проверяемый объект метаданных. // -// Возвращаемое значение: Булево. +// Возвращаемое значение: +// Булево - // Функция ЭтоНаборЗаписейПоддерживающийИтоги(Знач ОбъектМетаданных) diff --git a/SSL/src/DataProcessors/НастройкаСтандартногоИнтерфейсаOData/ObjectModule.bsl b/SSL/src/DataProcessors/НастройкаСтандартногоИнтерфейсаOData/ObjectModule.bsl index 3146ade8a..b0bb27f45 100644 --- a/SSL/src/DataProcessors/НастройкаСтандартногоИнтерфейсаOData/ObjectModule.bsl +++ b/SSL/src/DataProcessors/НастройкаСтандартногоИнтерфейсаOData/ObjectModule.bsl @@ -162,7 +162,8 @@ // Параметры: // ОбъектМетаданных. // -// Возвращаемое значение: Строка - представление объекта метаданных. +// Возвращаемое значение: +// Строка - представление объекта метаданных. // Функция ПредставлениеОбъектаМетаданных(Знач ОбъектМетаданных) Экспорт @@ -178,7 +179,8 @@ // Параметры: // ОбъектМетаданных - проверяемый объект метаданных. // -// Возвращаемое значение: Булево. +// Возвращаемое значение: +// Булево - // Функция ЭтоНезависимыйНаборЗаписей(Знач ОбъектМетаданных) Экспорт diff --git a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборНастроек/Form.form b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборНастроек/Form.form index 329458a08..40972d937 100644 --- a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборНастроек/Form.form +++ b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборНастроек/Form.form @@ -67,10 +67,6 @@ <userVisible> <common>true</common> </userVisible> - <title> - <key>ru</key> - <value>Быстрый поиск</value> - БыстрыйПоискExtendedTooltip 105 @@ -231,10 +227,6 @@ true - - <key>ru</key> - <value>Командная панель</value> - КоманднаяПанельExtendedTooltip 107 @@ -328,10 +320,6 @@ true - - <key>ru</key> - <value>Страница длительная операция</value> - СтраницаДлительнаяОперацияРасширеннаяПодсказка 173 @@ -360,10 +348,6 @@ ВнешнийВид 29 - - <key>ru</key> - <value>Внешний вид</value> - true true @@ -516,10 +500,6 @@ true - - <key>ru</key> - <value>Картинка и настройка</value> - ВнешнийВидКартинкаНастройкаПометкаExtendedTooltip 119 @@ -791,10 +771,6 @@ НастройкиОтчетовДерево 19 - - <key>ru</key> - <value>Настройки отчетов дерево</value> - true true @@ -946,10 +922,6 @@ true - - <key>ru</key> - <value>Картинка и настройка</value> - НастройкиОтчетовКартинкаНастройкаПометкаExtendedTooltip 129 @@ -1220,10 +1192,6 @@ ПрочиеНастройки 86 - - <key>ru</key> - <value>Прочие настройки</value> - true true @@ -1377,10 +1345,6 @@ true - - <key>ru</key> - <value>Прочие настройки картинка настройка пометка</value> - ПрочиеНастройкиКартинкаНастройкаПометкаExtendedTooltip 139 @@ -1648,10 +1612,6 @@ true - - <key>ru</key> - <value>Виды настроек</value> - ВидыНастроекExtendedTooltip 112 @@ -1677,10 +1637,6 @@ true - - <key>ru</key> - <value>Страница настройки</value> - СтраницаНастройкиРасширеннаяПодсказка 175 @@ -1702,10 +1658,6 @@ true - - <key>ru</key> - <value>Страницы длительная операция</value> - СтраницыДлительнаяОперацияРасширеннаяПодсказка 171 @@ -1726,10 +1678,6 @@ true - - <key>ru</key> - <value>Отображать отчет</value> - ОтображатьОтчетExtendedTooltip 104 diff --git a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборНастроек/Module.bsl b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборНастроек/Module.bsl index d29768af6..b9b1980a8 100644 --- a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборНастроек/Module.bsl +++ b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборНастроек/Module.bsl @@ -377,9 +377,9 @@ КоличествоНастроекОтчетов = КоличествоНастроекОтчетов + КоличествоНастроек; Если КоличествоНастроекОтчетов = 0 Тогда - ТекстЗаголовка = НСтр("ru='Настройки отчетов'"); + ТекстЗаголовка = НСтр("ru = 'Настройки отчетов'"); Иначе - ТекстЗаголовка = НСтр("ru='Настройки отчетов (%1)'"); + ТекстЗаголовка = НСтр("ru = 'Настройки отчетов (%1)'"); ТекстЗаголовка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстЗаголовка, КоличествоНастроекОтчетов); КонецЕсли; @@ -389,9 +389,9 @@ КоличествоНастроекВнешнегоВида = КоличествоНастроекВнешнегоВида + КоличествоНастроек; Если КоличествоНастроекВнешнегоВида = 0 Тогда - ТекстЗаголовка = НСтр("ru='Внешний вид'"); + ТекстЗаголовка = НСтр("ru = 'Внешний вид'"); Иначе - ТекстЗаголовка = НСтр("ru='Внешний вид (%1)'"); + ТекстЗаголовка = НСтр("ru = 'Внешний вид (%1)'"); ТекстЗаголовка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстЗаголовка, КоличествоНастроекВнешнегоВида); КонецЕсли; @@ -401,9 +401,9 @@ КоличествоПрочихНастроек = КоличествоПрочихНастроек + КоличествоНастроек; Если КоличествоПрочихНастроек = 0 Тогда - ТекстЗаголовка = НСтр("ru='Прочие настройки'"); + ТекстЗаголовка = НСтр("ru = 'Прочие настройки'"); Иначе - ТекстЗаголовка = НСтр("ru='Прочие настройки (%1)'"); + ТекстЗаголовка = НСтр("ru = 'Прочие настройки (%1)'"); ТекстЗаголовка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстЗаголовка, КоличествоПрочихНастроек); КонецЕсли; @@ -724,13 +724,13 @@ Если ВидНастроек = "НастройкиОтчетов" Тогда КоличествоНастроекОтчетов = КоличествоПомеченных; - Элементы.НастройкиОтчетовСтраница.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='Настройки отчетов (%1)'"), КоличествоПомеченных); + Элементы.НастройкиОтчетовСтраница.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Настройки отчетов (%1)'"), КоличествоПомеченных); ИначеЕсли ВидНастроек = "ВнешнийВид" Тогда КоличествоНастроекВнешнегоВида = КоличествоПомеченных; - Элементы.ВнешнийВидСтраница.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='Внешний вид (%1)'"), КоличествоПомеченных); + Элементы.ВнешнийВидСтраница.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Внешний вид (%1)'"), КоличествоПомеченных); ИначеЕсли ВидНастроек = "ПрочиеНастройки" Тогда КоличествоПрочихНастроек = КоличествоПомеченных; - Элементы.ПрочиеНастройкиСтраница.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='Прочие настройки (%1)'"), КоличествоПомеченных); + Элементы.ПрочиеНастройкиСтраница.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Прочие настройки (%1)'"), КоличествоПомеченных); КонецЕсли; КонецЕсли; diff --git a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборПользователей/Module.bsl b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборПользователей/Module.bsl index 9ecd7e86f..1a9d085cf 100644 --- a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборПользователей/Module.bsl +++ b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборПользователей/Module.bsl @@ -291,7 +291,7 @@ ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Больше; ОтборЭлемента.ПравоеЗначение = 0; - Элемент.Оформление.УстановитьЗначениеПараметра("Шрифт", Новый Шрифт("Arial", 10, Истина)); + Элемент.Оформление.УстановитьЗначениеПараметра("Шрифт", ШрифтыСтиля.ОсновнойЭлементСписка); Элемент.Оформление.УстановитьЗначениеПараметра("Текст", Новый ПолеКомпоновкиДанных("ГруппыПользователей.НаименованиеГруппыИПомеченоПользователей")); КонецПроцедуры @@ -398,7 +398,7 @@ ПомеченоПользователей = ГруппаПользователей.ПомеченоПользователей; ГруппаПользователей.ПомеченоПользователей = ?(ЗначениеПометки, ПомеченоПользователей + 1, ПомеченоПользователей - 1); ГруппаПользователей.НаименованиеГруппыИПомеченоПользователей = - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='%1 (%2)'"), Строка(ГруппаПользователей.Группа), ГруппаПользователей.ПомеченоПользователей); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1 (%2)'"), Строка(ГруппаПользователей.Группа), ГруппаПользователей.ПомеченоПользователей); КонецЕсли; // Обновить заголовки у всех подчиненных групп рекурсивно. diff --git a/SSL/src/DataProcessors/НастройкиПользователей/Forms/КопированиеНастроекПользователей/Form.form b/SSL/src/DataProcessors/НастройкиПользователей/Forms/КопированиеНастроекПользователей/Form.form index b8defca55..61b959249 100644 --- a/SSL/src/DataProcessors/НастройкиПользователей/Forms/КопированиеНастроекПользователей/Form.form +++ b/SSL/src/DataProcessors/НастройкиПользователей/Forms/КопированиеНастроекПользователей/Form.form @@ -175,10 +175,6 @@ true - - <key>ru</key> - <value>Выбрать пользователей</value> - ГруппаВыбратьПользователейExtendedTooltip 75 @@ -341,10 +337,6 @@ true - - <key>ru</key> - <value>Выбрать</value> - true ГруппаВыбратьExtendedTooltip diff --git a/SSL/src/DataProcessors/НастройкиПользователей/Forms/КопированиеНастроекПользователей/Module.bsl b/SSL/src/DataProcessors/НастройкиПользователей/Forms/КопированиеНастроекПользователей/Module.bsl index 526c1f562..7f6dc0f50 100644 --- a/SSL/src/DataProcessors/НастройкиПользователей/Forms/КопированиеНастроекПользователей/Module.bsl +++ b/SSL/src/DataProcessors/НастройкиПользователей/Forms/КопированиеНастроекПользователей/Module.bsl @@ -53,10 +53,6 @@ Элементы.ВыбратьПользователей.Заголовок = ЧислоИПредмет; КонецЕсли; Элементы.ВыбратьПользователей.Подсказка = ""; - - ИначеЕсли ВРег(ИмяСобытия) = ВРег("СкопироватьНастройкиАктивнымПользователям") Тогда - - СкопироватьНастройки(Параметр.Действие); КонецЕсли; КонецПроцедуры @@ -153,7 +149,7 @@ ВыбранныеНастройки = Неопределено; КоличествоНастроек = 0; - Элементы.ВыбратьНастройки.Заголовок = НСтр("ru='Выбрать'"); + Элементы.ВыбратьНастройки.Заголовок = НСтр("ru = 'Выбрать'"); КонецПроцедуры @@ -243,17 +239,19 @@ ОткрытыеКопируемыеФормы = ОткрытыеКопируемыеФормы(); ПроверитьАктивныхПользователей(); Если РезультатПроверки = "ЕстьАктивныеПользователиПолучатели" - Или ЗначениеЗаполнено(ОткрытыеКопируемыеФормы) Тогда + Или (ЗначениеЗаполнено(ОткрытыеКопируемыеФормы) И РезультатПроверки = "ТекущийПользовательПолучатель") Тогда Если ПереключательКопируемыеНастройки = "СкопироватьВсе" Или (ПереключательКопируемыеНастройки = "СкопироватьОтдельные" И ВыбранныеНастройки.ВнешнийВид.Количество() <> 0) Тогда + ОповещениеОЗакрытии = Новый ОписаниеОповещения("СкопироватьПродолжение", ЭтотОбъект); + ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("Действие", Команда.Имя); ПараметрыФормы.Вставить("ОткрытыеКопируемыеФормы", ОткрытыеКопируемыеФормы); ПараметрыФормы.Вставить("ЕстьАктивныеПользователиПолучатели", РезультатПроверки = "ЕстьАктивныеПользователиПолучатели"); - ОткрытьФорму("Обработка.НастройкиПользователей.Форма.ПредупреждениеОКопированииНастроек", ПараметрыФормы); + ОткрытьФорму("Обработка.НастройкиПользователей.Форма.ПредупреждениеОКопированииНастроек", ПараметрыФормы, , , , , ОповещениеОЗакрытии); Возврат; КонецЕсли; @@ -269,6 +267,7 @@ Если ВыбранныеНастройки = Неопределено Тогда Возврат ""; КонецЕсли; + Настройки = ВыбранныеНастройки.ВнешнийВид; СтрокаОткрытыеФормы = ""; @@ -309,6 +308,17 @@ #Область СлужебныеПроцедурыИФункции +&НаКлиенте +Процедура СкопироватьПродолжение(Результат, ДополнительныеПараметры) Экспорт + + Если ТипЗнч(Результат) = Тип("Структура") + И Результат.Свойство("Действие") + И Результат.Действие = "СкопироватьИЗакрыть" Тогда + СкопироватьНастройки(Результат.Действие); + КонецЕсли; + +КонецПроцедуры + &НаКлиенте Процедура ВыбратьНастройкиПослеВыбора(Параметр, Контекст) Экспорт @@ -330,7 +340,7 @@ КоличествоНастроек = Параметр.КоличествоНастроек; Если КоличествоНастроек = 0 Тогда - ТекстЗаголовка = НСтр("ru='Выбрать'"); + ТекстЗаголовка = НСтр("ru = 'Выбрать'"); ИначеЕсли КоличествоНастроек = 1 Тогда ПредставлениеНастройки = Параметр.ПредставленияНастроек[0]; ТекстЗаголовка = ПредставлениеНастройки; diff --git a/SSL/src/DataProcessors/НастройкиПользователей/Forms/НастройкиПользователей/Form.form b/SSL/src/DataProcessors/НастройкиПользователей/Forms/НастройкиПользователей/Form.form index 5b7c84a3e..9c4bd3377 100644 --- a/SSL/src/DataProcessors/НастройкиПользователей/Forms/НастройкиПользователей/Form.form +++ b/SSL/src/DataProcessors/НастройкиПользователей/Forms/НастройкиПользователей/Form.form @@ -134,10 +134,6 @@ true - - <key>ru</key> - <value>Быстрый поиск</value> - БыстрыйПоискExtendedTooltip 120 @@ -333,10 +329,6 @@ true - - <key>ru</key> - <value>Скопировать другим выделенные</value> - СкопироватьДругимВыделенныеExtendedTooltip 131 @@ -521,10 +513,6 @@ true - - <key>ru</key> - <value>Очистить выделенные</value> - ОчиститьВыделенныеExtendedTooltip 136 @@ -624,10 +612,6 @@ true - - <key>ru</key> - <value>Командная панель</value> - КоманднаяПанельExtendedTooltip 123 @@ -721,10 +705,6 @@ true - - <key>ru</key> - <value>Страница длительная операция</value> - СтраницаДлительнаяОперацияРасширеннаяПодсказка 214 @@ -753,10 +733,6 @@ ВнешнийВид 29 - - <key>ru</key> - <value>Внешний вид</value> - true true @@ -865,10 +841,6 @@ true - - <key>ru</key> - <value>Картинка и настройка</value> - ВнешнийВидКартинкаНастройкаПометкаExtendedTooltip 151 @@ -1159,10 +1131,6 @@ true - - <key>ru</key> - <value>Внешний вид контекстное меню прочее</value> - ВнешнийВидКонтекстноеМенюПрочееExtendedTooltip 146 @@ -1238,10 +1206,6 @@ НастройкиОтчетовДерево 19 - - <key>ru</key> - <value>Настройки отчетов дерево</value> - true true @@ -1349,10 +1313,6 @@ true - - <key>ru</key> - <value>Картинка и настройка</value> - НастройкиОтчетовКартинкаНастройкаПометкаExtendedTooltip 163 @@ -1643,10 +1603,6 @@ true - - <key>ru</key> - <value>Настройки отчетов дерево контекстное меню прочее</value> - НастройкиОтчетовДеревоКонтекстноеМенюПрочееExtendedTooltip 158 @@ -1721,10 +1677,6 @@ ПрочиеНастройки 78 - - <key>ru</key> - <value>Прочие настройки</value> - true true @@ -1831,10 +1783,6 @@ true - - <key>ru</key> - <value>Прочие настройки картинка настройка пометка</value> - ПрочиеНастройкиКартинкаНастройкаПометкаExtendedTooltip 175 @@ -2124,10 +2072,6 @@ true - - <key>ru</key> - <value>Прочие настройки контекстное меню прочее</value> - ПрочиеНастройкиКонтекстноеМенюПрочееExtendedTooltip 170 @@ -2199,10 +2143,6 @@ true - - <key>ru</key> - <value>Виды настроек</value> - ВидыНастроекExtendedTooltip 141 @@ -2228,10 +2168,6 @@ true - - <key>ru</key> - <value>Страница настройки</value> - СтраницаНастройкиРасширеннаяПодсказка 216 @@ -2253,10 +2189,6 @@ true - - <key>ru</key> - <value>Страницы длительная операция</value> - СтраницыДлительнаяОперацияРасширеннаяПодсказка 212 @@ -2380,10 +2312,6 @@ true - - <key>ru</key> - <value>Предупреждение и картинка</value> - ГруппаПредупреждениеИКартинкаExtendedTooltip 181 @@ -2511,10 +2439,6 @@ true - - <key>ru</key> - <value>Недостаточно прав</value> - ГруппаНедостаточноПравРасширеннаяПодсказка 226 @@ -2566,10 +2490,6 @@ true - - <key>ru</key> - <value>Отчет или предупреждение</value> - ОтчетИлиПредупреждениеExtendedTooltip 118 diff --git a/SSL/src/DataProcessors/НастройкиПользователей/Forms/НастройкиПользователей/Module.bsl b/SSL/src/DataProcessors/НастройкиПользователей/Forms/НастройкиПользователей/Module.bsl index 98e5d057a..034127790 100644 --- a/SSL/src/DataProcessors/НастройкиПользователей/Forms/НастройкиПользователей/Module.bsl +++ b/SSL/src/DataProcessors/НастройкиПользователей/Forms/НастройкиПользователей/Module.bsl @@ -533,7 +533,7 @@ Если КоличествоНастроек <> 0 Тогда Элементы.НастройкиОтчетовСтраница.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru='Настройки отчетов (%1)'"), КоличествоНастроек); + НСтр("ru = 'Настройки отчетов (%1)'"), КоличествоНастроек); Иначе Элементы.НастройкиОтчетовСтраница.Заголовок = НСтр("ru = 'Настройки отчетов'"); КонецЕсли; diff --git a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ОчисткаНастроекПользователей/Module.bsl b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ОчисткаНастроекПользователей/Module.bsl index e3807d559..3f55f5078 100644 --- a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ОчисткаНастроекПользователей/Module.bsl +++ b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ОчисткаНастроекПользователей/Module.bsl @@ -26,7 +26,7 @@ Если ВРег(ИмяСобытия) = ВРег("ВыборПользователя") Тогда Если ПользователиКоторымОчищаютсяНастройки <> Неопределено Тогда - Элементы.ВыбратьНастройки.Заголовок = НСтр("ru='Выбрать'"); + Элементы.ВыбратьНастройки.Заголовок = НСтр("ru = 'Выбрать'"); ВыбранныеНастройки = Неопределено; КоличествоНастроек = Неопределено; КонецЕсли; @@ -201,7 +201,7 @@ КоличествоНастроек = Параметр.КоличествоНастроек; Если КоличествоНастроек = 0 Тогда - ТекстЗаголовка = НСтр("ru='Выбрать'"); + ТекстЗаголовка = НСтр("ru = 'Выбрать'"); ИначеЕсли КоличествоНастроек = 1 Тогда ПредставлениеНастройки = Параметр.ПредставленияНастроек[0]; ТекстЗаголовка = ПредставлениеНастройки; @@ -280,7 +280,7 @@ КонецЕсли; КоличествоНастроек = 0; - Элементы.ВыбратьНастройки.Заголовок = НСтр("ru='Выбрать'"); + Элементы.ВыбратьНастройки.Заголовок = НСтр("ru = 'Выбрать'"); Возврат Истина; КонецФункции diff --git a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ПредупреждениеОКопированииНастроек/Form.form b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ПредупреждениеОКопированииНастроек/Form.form index 61839b7bb..b9b1255e6 100644 --- a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ПредупреждениеОКопированииНастроек/Form.form +++ b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ПредупреждениеОКопированииНастроек/Form.form @@ -52,10 +52,6 @@ true - - <key>ru</key> - <value>Открытые копируемые формы</value> - ГруппаОткрытыеКопируемыеФормыРасширеннаяПодсказка 24 @@ -156,10 +152,6 @@ true - - <key>ru</key> - <value>Активные пользователи</value> - ГруппаАктивныеПользователиExtendedTooltip 21 diff --git a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ПредупреждениеОКопированииНастроек/Module.bsl b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ПредупреждениеОКопированииНастроек/Module.bsl index 94bcd4f43..4fa4de66f 100644 --- a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ПредупреждениеОКопированииНастроек/Module.bsl +++ b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ПредупреждениеОКопированииНастроек/Module.bsl @@ -46,7 +46,7 @@ КонецЕсли; Результат = Новый Структура("Действие", Параметры.Действие); - Оповестить("СкопироватьНастройкиАктивнымПользователям", Результат); + Закрыть(Результат); КонецПроцедуры diff --git a/SSL/src/DataProcessors/НастройкиПользователей/ManagerModule.bsl b/SSL/src/DataProcessors/НастройкиПользователей/ManagerModule.bsl index b826c7207..4872c2696 100644 --- a/SSL/src/DataProcessors/НастройкиПользователей/ManagerModule.bsl +++ b/SSL/src/DataProcessors/НастройкиПользователей/ManagerModule.bsl @@ -1240,7 +1240,7 @@ // права доступа на отчет. // // Возвращаемое значение: -// Результат - Массив - ключи отчетов, доступных переданному пользователю. +// Массив - Результат - Массив - ключи отчетов, доступных переданному пользователю. // Функция ОтчетыДоступныеПользователю(ИмяПользователяИБ, ПользовательСсылка) Результат = Новый Массив; @@ -1298,7 +1298,7 @@ Или ТипОбъектаМетаданных = "ЖурналДокументов" Тогда Если Форма = Объект.ОсновнаяФорма Тогда - ИмяФормы = ПредставлениеФормыСписка(Объект); + ИмяФормы = ОбщегоНазначения.ПредставлениеСписка(Объект); ФормаОткрываемая = Истина; Иначе ИмяФормы = Форма.Синоним; @@ -1309,7 +1309,7 @@ Или ТипОбъектаМетаданных = "РегистрРасчета" Тогда Если Форма = Объект.ОсновнаяФормаСписка Тогда - ИмяФормы = ПредставлениеФормыСписка(Объект); + ИмяФормы = ОбщегоНазначения.ПредставлениеСписка(Объект); ФормаОткрываемая = Истина; Иначе ИмяФормы = Форма.Синоним; @@ -1328,7 +1328,7 @@ КонецЕсли; ИначеЕсли Форма = Объект.ОсновнаяФормаСписка Тогда - ИмяФормы = ПредставлениеФормыСписка(Объект); + ИмяФормы = ОбщегоНазначения.ПредставлениеСписка(Объект); ФормаОткрываемая = Истина; Иначе ИмяФормы = Форма.Синоним; @@ -1354,7 +1354,7 @@ Если Форма = Объект.ОсновнаяФормаСписка Или Форма = Объект.ОсновнаяФормаДляВыбора Тогда - ИмяФормы = ПредставлениеФормыСписка(Объект); + ИмяФормы = ОбщегоНазначения.ПредставлениеСписка(Объект); ФормаОткрываемая = ?(Форма = Объект.ОсновнаяФормаСписка, Истина, Ложь); Иначе ИмяФормы = Форма.Синоним; @@ -1368,12 +1368,12 @@ Или Форма = Объект.ОсновнаяФормаГруппы Или Форма = Объект.ОсновнаяФормаДляВыбораГруппы Тогда - ИмяФормы = ПредставлениеФормыСписка(Объект); + ИмяФормы = ОбщегоНазначения.ПредставлениеСписка(Объект); ДобавитьТипФормыВПредставление(Объект, Форма, ИмяФормы); ФормаОткрываемая = ?(Форма = Объект.ОсновнаяФормаСписка, Истина, Ложь); ИначеЕсли Форма = Объект.ОсновнаяФормаОбъекта Тогда - ИмяФормы = ПредставлениеФормыОбъекта(Объект); + ИмяФормы = ОбщегоНазначения.ПредставлениеОбъекта(Объект); Иначе ИмяФормы = Форма.Синоним; КонецЕсли; @@ -1381,7 +1381,7 @@ ИначеЕсли ТипОбъектаМетаданных = "ВнешнийИсточникДанных" Тогда Если Форма = Объект.ОсновнаяФормаСписка Тогда - ИмяФормы = ПредставлениеФормыСписка(Объект); + ИмяФормы = ОбщегоНазначения.ПредставлениеСписка(Объект); ФормаОткрываемая = Истина; ИначеЕсли Форма = Объект.ОсновнаяФормаЗаписи Тогда @@ -1394,7 +1394,7 @@ КонецЕсли; ИначеЕсли Форма = Объект.ОсновнаяФормаОбъекта Тогда - ПредставлениеФормыОбъекта(Объект); + ОбщегоНазначения.ПредставлениеОбъекта(Объект); Иначе ИмяФормы = Форма.Синоним; КонецЕсли; @@ -1403,10 +1403,10 @@ Если Форма = Объект.ОсновнаяФормаСписка Или Форма = Объект.ОсновнаяФормаДляВыбора Тогда - ИмяФормы = ПредставлениеФормыСписка(Объект); + ИмяФормы = ОбщегоНазначения.ПредставлениеСписка(Объект); ФормаОткрываемая = ?(Форма = Объект.ОсновнаяФормаСписка, Истина, Ложь); ИначеЕсли Форма = Объект.ОсновнаяФормаОбъекта Тогда - ИмяФормы = ПредставлениеФормыОбъекта(Объект); + ИмяФормы = ОбщегоНазначения.ПредставлениеОбъекта(Объект); Иначе ИмяФормы = Форма.Синоним; КонецЕсли; @@ -1424,14 +1424,14 @@ Если ТипОбъектаМетаданных = "КритерийОтбора" Или ТипОбъектаМетаданных = "ЖурналДокументов" Тогда - ИмяФормы = ПредставлениеФормыСписка(Объект); + ИмяФормы = ОбщегоНазначения.ПредставлениеСписка(Объект); ФормаОткрываемая = Истина; ИначеЕсли ТипОбъектаМетаданных = "РегистрНакопления" Или ТипОбъектаМетаданных = "РегистрБухгалтерии" Или ТипОбъектаМетаданных = "РегистрРасчета" Тогда - ИмяФормы = ПредставлениеФормыСписка(Объект); + ИмяФормы = ОбщегоНазначения.ПредставлениеСписка(Объект); ФормаОткрываемая = Истина; ИначеЕсли ТипОбъектаМетаданных = "РегистрСведений" Тогда @@ -1447,7 +1447,7 @@ КонецЕсли; ИначеЕсли Форма = "ФормаСписка" Тогда - ИмяФормы = ПредставлениеФормыСписка(Объект); + ИмяФормы = ОбщегоНазначения.ПредставлениеСписка(Объект); ФормаОткрываемая = Истина; КонецЕсли; @@ -1463,7 +1463,7 @@ ИначеЕсли ТипОбъектаМетаданных = "Перечисление" Тогда - ИмяФормы = ПредставлениеФормыСписка(Объект); + ИмяФормы = ОбщегоНазначения.ПредставлениеСписка(Объект); ФормаОткрываемая = ?(Форма = "ФормаСписка", Истина, Ложь); ИначеЕсли ТипОбъектаМетаданных = "Справочник" @@ -1473,17 +1473,17 @@ Или Форма = "ФормаДляВыбора" Или Форма = "ФормаГруппы" Или Форма = "ФормаДляВыбораГруппы" Тогда - ИмяФормы = ПредставлениеФормыСписка(Объект); + ИмяФормы = ОбщегоНазначения.ПредставлениеСписка(Объект); ДобавитьТипФормыВПредставлениеАвтогенерируемойФормы(Объект, Форма, ИмяФормы); ФормаОткрываемая = ?(Форма = "ФормаСписка", Истина, Ложь); ИначеЕсли Форма = "ФормаОбъекта" Тогда - ИмяФормы = ПредставлениеФормыОбъекта(Объект); + ИмяФормы = ОбщегоНазначения.ПредставлениеОбъекта(Объект); КонецЕсли; ИначеЕсли ТипОбъектаМетаданных = "ВнешнийИсточникДанных" Тогда Если Форма = "ФормаСписка" Тогда - ИмяФормы = ПредставлениеФормыСписка(Объект); + ИмяФормы = ОбщегоНазначения.ПредставлениеСписка(Объект); ФормаОткрываемая = Истина; ИначеЕсли Форма = "ФормаЗаписи" Тогда Если Не ПустаяСтрока(Объект.РасширенноеПредставлениеЗаписи) Тогда @@ -1494,17 +1494,17 @@ ИмяФормы = Объект.Представление(); КонецЕсли; ИначеЕсли Форма = "ФормаОбъекта" Тогда - ПредставлениеФормыОбъекта(Объект); + ОбщегоНазначения.ПредставлениеОбъекта(Объект); КонецЕсли; Иначе // Получение представления формы для Документа, Плана счетов, Плана видов расчета, Бизнес-процесса и Задачи. Если Форма = "ФормаСписка" Или Форма = "ФормаДляВыбора" Тогда - ИмяФормы = ПредставлениеФормыСписка(Объект); + ИмяФормы = ОбщегоНазначения.ПредставлениеСписка(Объект); ФормаОткрываемая = ?(Форма = "ФормаСписка", Истина, Ложь); ИначеЕсли Форма = "ФормаОбъекта" Тогда - ИмяФормы = ПредставлениеФормыОбъекта(Объект); + ИмяФормы = ОбщегоНазначения.ПредставлениеОбъекта(Объект); КонецЕсли; КонецЕсли; @@ -1513,32 +1513,6 @@ КонецФункции -Функция ПредставлениеФормыСписка(Объект) - - Если Не ПустаяСтрока(Объект.РасширенноеПредставлениеСписка) Тогда - ИмяФормы = Объект.РасширенноеПредставлениеСписка; - ИначеЕсли Не ПустаяСтрока(Объект.ПредставлениеСписка) Тогда - ИмяФормы = Объект.ПредставлениеСписка; - Иначе - ИмяФормы = Объект.Представление(); - КонецЕсли; - - Возврат ИмяФормы; -КонецФункции - -Функция ПредставлениеФормыОбъекта(Объект) - - Если Не ПустаяСтрока(Объект.РасширенноеПредставлениеОбъекта) Тогда - ИмяФормы = Объект.РасширенноеПредставлениеОбъекта; - ИначеЕсли Не ПустаяСтрока(Объект.ПредставлениеОбъекта) Тогда - ИмяФормы = Объект.ПредставлениеОбъекта; - Иначе - ИмяФормы = Объект.Представление(); - КонецЕсли;; - - Возврат ИмяФормы; -КонецФункции - Процедура ДобавитьТипФормыВПредставление(Объект, Форма, ИмяФормы) Если Форма = Объект.ОсновнаяФормаСписка Тогда @@ -2288,7 +2262,7 @@ Если КлючиНастроекРабочегоСтола.Количество() > 0 Тогда // Добавление строки настроек рабочего стола. НоваяПодстрокаИнтерфейса = НоваяСтрокаИнтерфейса.Строки.Добавить(); - НоваяПодстрокаИнтерфейса.Настройка = НСтр("ru = 'Начальная страница'"); + НоваяПодстрокаИнтерфейса.Настройка = СтандартныеПодсистемыСервер.ПредставлениеНачальнойСтраницы(); НоваяПодстрокаИнтерфейса.Картинка = БиблиотекаКартинок.Картинка; НоваяПодстрокаИнтерфейса.ТипСтроки = "НастройкиРабочегоСтола"; НоваяПодстрокаИнтерфейса.Тип = "НастройкаВнешнегоВида"; diff --git a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Forms/НерекомендуемаяВерсияПлатформы/Form.form b/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Forms/НерекомендуемаяВерсияПлатформы/Form.form index 352b2a720..c048a75d6 100644 --- a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Forms/НерекомендуемаяВерсияПлатформы/Form.form +++ b/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Forms/НерекомендуемаяВерсияПлатформы/Form.form @@ -53,8 +53,8 @@ 19 <key>ru</key> - <value>Для работы с программой %1 использовать версию платформы "1С:Предприятие 8" не ниже: -Используемая сейчас версия: %2</value> + <value>Для работы с программой %1 использовать версию платформы "1С:Предприятие 8" не ниже %2. +Используемая сейчас версия: %3.</value> true true @@ -84,48 +84,6 @@ Top
    - - РекомендуемаяВерсияПлатформы - 22 - - <key>ru</key> - <value>номер версии</value> - - true - true - - true - - - РекомендуемаяВерсияПлатформыExtendedTooltip - 33 - Label - true - true - - Left - - - - РекомендуемаяВерсияПлатформыКонтекстноеМеню - 23 - true - - Label - true - - System.DefaultGUIFont - 10.0 - true - false - false - false - - - Left - Top - - true true diff --git a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Forms/НерекомендуемаяВерсияПлатформы/Module.bsl b/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Forms/НерекомендуемаяВерсияПлатформы/Module.bsl index bdc20bcb9..1020eb7c5 100644 --- a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Forms/НерекомендуемаяВерсияПлатформы/Module.bsl +++ b/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Forms/НерекомендуемаяВерсияПлатформы/Module.bsl @@ -12,28 +12,33 @@ Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Если НЕ Параметры.Свойство("ОткрытаПоСценарию") Тогда - ВызватьИсключение НСтр("ru='Обработка не предназначена для непосредственного использования.'"); + ВызватьИсключение НСтр("ru = 'Обработка не предназначена для непосредственного использования.'"); КонецЕсли; ПропуститьЗавершениеРаботы = Параметры.ПропуститьЗавершениеРаботы; Элементы.ТекстСообщения.Заголовок = Параметры.ТекстСообщения; - Элементы.РекомендуемаяВерсияПлатформы.Заголовок = Параметры.РекомендуемаяВерсияПлатформы; СистемнаяИнформация = Новый СистемнаяИнформация; Текущая = СистемнаяИнформация.ВерсияПриложения; Минимальная = Параметры.МинимальнаяВерсияПлатформы; Рекомендуемая = Параметры.РекомендуемаяВерсияПлатформы; + Элементы.ТекстСообщения.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + Элементы.ТекстСообщения.Заголовок, Минимальная); + + НомерВерсии = Рекомендуемая; ПродолжениеРаботыНевозможно = Ложь; Если ОбщегоНазначенияКлиентСервер.СравнитьВерсии(Текущая, Минимальная) < 0 Тогда - ТекстУсловие = НСтр("ru = 'необходимо'"); - ПродолжениеРаботыНевозможно = Истина; - Элементы.РекомендуемаяВерсияПлатформы.Заголовок = Минимальная; + ТекстУсловие = НСтр("ru = 'необходимо'"); + ПродолжениеРаботыНевозможно = Истина; + НомерВерсии = Минимальная; Иначе - ТекстУсловие = НСтр("ru = 'рекомендуется'"); - Элементы.РекомендуемаяВерсияПлатформы.Заголовок = Рекомендуемая; + ТекстУсловие = НСтр("ru = 'рекомендуется'"); КонецЕсли; - Элементы.Версия.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Элементы.Версия.Заголовок, ТекстУсловие, СистемнаяИнформация.ВерсияПриложения); + Элементы.Версия.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + Элементы.Версия.Заголовок, + ТекстУсловие, НомерВерсии, + СистемнаяИнформация.ВерсияПриложения); Если ПродолжениеРаботыНевозможно Тогда Элементы.ТекстВопроса.Видимость = Ложь; @@ -41,10 +46,6 @@ Заголовок = НСтр("ru = 'Необходимо обновить версию платформы'"); КонецЕсли; - Если (КлиентскоеПриложение.ТекущийВариантИнтерфейса() <> ВариантИнтерфейсаКлиентскогоПриложения.Такси) Тогда - Элементы.РекомендуемаяВерсияПлатформы.Шрифт = Новый Шрифт(,, Истина); - КонецЕсли; - КонецПроцедуры &НаКлиенте diff --git a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Forms/ПорядокОбновленияПлатформы/Form.form b/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Forms/ПорядокОбновленияПлатформы/Form.form index 5067868fb..1b44b457a 100644 --- a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Forms/ПорядокОбновленияПлатформы/Form.form +++ b/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Forms/ПорядокОбновленияПлатформы/Form.form @@ -58,7 +58,7 @@
    - ПорядокОбновленияПрограммы + ПорядокОбновленияПлатформы 5 true true @@ -66,11 +66,11 @@ true - ПорядокОбновленияПрограммы + ПорядокОбновленияПлатформы None - ПорядокОбновленияПрограммыExtendedTooltip + ПорядокОбновленияПлатформыРасширеннаяПодсказка 10 Label true @@ -80,7 +80,7 @@ - ПорядокОбновленияПрограммыКонтекстноеМеню + ПорядокОбновленияПлатформыКонтекстноеМеню 6 true @@ -128,10 +128,10 @@ auto true - ПорядокОбновленияПрограммы + ПорядокОбновленияПлатформы <key>ru</key> - <value>Порядок обновления программы</value> + <value>Порядок обновления платформы</value> 1 diff --git a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Forms/ПорядокОбновленияПлатформы/Module.bsl b/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Forms/ПорядокОбновленияПлатформы/Module.bsl index 2636f8dee..dcc404c04 100644 --- a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Forms/ПорядокОбновленияПлатформы/Module.bsl +++ b/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Forms/ПорядокОбновленияПлатформы/Module.bsl @@ -13,7 +13,21 @@ БазаФайловая = ОбщегоНазначения.ИнформационнаяБазаФайловая(); Если БазаФайловая Тогда - МакетПорядокОбновления = Обработки.НерекомендуемаяВерсияПлатформы.ПолучитьМакет("ПорядокОбновленияДляФайловойБазы"); + ИмяМакета = "ПорядокОбновленияДляФайловойБазы"; + КоллекцияМакетов = Метаданные.Обработки.НерекомендуемаяВерсияПлатформы.Макеты; + + ЛокализованноеИмяМакета = ИмяМакета + "_" + ТекущийЯзык().КодЯзыка; + Макет = КоллекцияМакетов.Найти(ЛокализованноеИмяМакета); + Если Макет = Неопределено Тогда + ЛокализованноеИмяМакета = ИмяМакета + "_" + ОбщегоНазначения.КодОсновногоЯзыка(); + Макет = КоллекцияМакетов.Найти(ЛокализованноеИмяМакета); + КонецЕсли; + + Если Макет = Неопределено Тогда + ЛокализованноеИмяМакета = ИмяМакета; + КонецЕсли; + + МакетПорядокОбновления = Обработки.НерекомендуемаяВерсияПлатформы.ПолучитьМакет(ЛокализованноеИмяМакета); Иначе МакетПорядокОбновления = Обработки.НерекомендуемаяВерсияПлатформы.ПолучитьМакет("ПорядокОбновленияДляКлиентСервернойБазы"); КонецЕсли; @@ -36,7 +50,7 @@ &НаКлиенте Процедура ПечатьИнструкции(Команда) - Элементы.ПорядокОбновленияПрограммы.Документ.execCommand("Print"); + Элементы.ПорядокОбновленияПлатформы.Документ.execCommand("Print"); КонецПроцедуры #КонецОбласти diff --git a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/АвтоматическийЭкспортЗамеровПроизводительности/Module.bsl b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/АвтоматическийЭкспортЗамеровПроизводительности/Module.bsl index 08d9de370..a056988f0 100644 --- a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/АвтоматическийЭкспортЗамеровПроизводительности/Module.bsl +++ b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/АвтоматическийЭкспортЗамеровПроизводительности/Module.bsl @@ -173,7 +173,14 @@ ВыборФайла.Заголовок = НСтр("ru = 'Выбор каталога экспорта'"); ОписаниеОповещения = Новый ОписаниеОповещения("ДиалогВыбораКаталогаЗавершение", ЭтотОбъект, Неопределено); - ФайловаяСистемаКлиент.ПоказатьДиалогВыбора(ОписаниеОповещения, ВыборФайла); + Если ЕстьБСП Тогда + МодульФайловаяСистемаКлиент = Вычислить("ФайловаяСистемаКлиент"); + Если ТипЗнч(МодульФайловаяСистемаКлиент) = Тип("ОбщийМодуль") Тогда + МодульФайловаяСистемаКлиент.ПоказатьДиалогВыбора(ОписаниеОповещения, ВыборФайла); + КонецЕсли; + Иначе + ВыборФайла.Показать(ОписаниеОповещения); + КонецЕсли; КонецЕсли; diff --git a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ИмпортЗамеровПроизводительности/Module.bsl b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ИмпортЗамеровПроизводительности/Module.bsl index b7d3dd30d..f7cde4329 100644 --- a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ИмпортЗамеровПроизводительности/Module.bsl +++ b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ИмпортЗамеровПроизводительности/Module.bsl @@ -33,7 +33,14 @@ ВыборФайла.Фильтр = "Файлы импорта замеров (*.zip)|*.zip"; ОписаниеОповещения = Новый ОписаниеОповещения("ДиалогВыбораФайлаЗавершение", ЭтотОбъект, Неопределено); - ФайловаяСистемаКлиент.ПоказатьДиалогВыбора(ОписаниеОповещения, ВыборФайла); + Если ЕстьБСП Тогда + МодульФайловаяСистемаКлиент = Вычислить("ФайловаяСистемаКлиент"); + Если ТипЗнч(МодульФайловаяСистемаКлиент) = Тип("ОбщийМодуль") Тогда + МодульФайловаяСистемаКлиент.ПоказатьДиалогВыбора(ОписаниеОповещения, ВыборФайла); + КонецЕсли; + Иначе + ВыборФайла.Показать(ОписаниеОповещения); + КонецЕсли; КонецЕсли; diff --git a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ПодборЦелевогоВремениКлючевойОперации/Module.bsl b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ПодборЦелевогоВремениКлючевойОперации/Module.bsl index 6eea0995a..1d0cc93d6 100644 --- a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ПодборЦелевогоВремениКлючевойОперации/Module.bsl +++ b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ПодборЦелевогоВремениКлючевойОперации/Module.bsl @@ -148,7 +148,7 @@ Если РезультатПодбора.КоличествоЗамеров = 0 Тогда РезультатПодбора.Вставить("ОписаниеОшибки", - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ОценкаПроизводительностиКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Получено 0 замеров по ключевой операции %1. Измените период или выберите другую ключевую операцию.'"), ПараметрыПодбора.КлючеваяОперация)); Возврат РезультатПодбора; diff --git a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/Форма/Module.bsl index fbeabe9a0..33ee635ca 100644 --- a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/Форма/Module.bsl @@ -858,7 +858,7 @@ ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Выполнение операции'", Метаданные.ОсновнойЯзык.КодЯзыка), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Выполнение операции'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ВызватьИсключение; КонецПопытки; @@ -1045,7 +1045,7 @@ // Значение - Структура, параметры оценки. // // Возвращаемое значение: -// Соответствие +// Соответствие - // &НаСервереБезКонтекста Функция СоответствиеЦветовУровнюАпдекса() @@ -1089,7 +1089,7 @@ // Функция проверяет правильность настроек формы. // // Возвращаемое значение: -// Истина - настройки верны +// Булево - Истина - настройки верны // Ложь - Настройки не верны // &НаСервере @@ -1176,7 +1176,7 @@ ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Выполнение операции'", Метаданные.ОсновнойЯзык.КодЯзыка), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Выполнение операции'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ВызватьИсключение; КонецПопытки; diff --git a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ЭкспортЗамеровПроизводительности/Module.bsl b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ЭкспортЗамеровПроизводительности/Module.bsl index 886003ae0..b114a2bfc 100644 --- a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ЭкспортЗамеровПроизводительности/Module.bsl +++ b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ЭкспортЗамеровПроизводительности/Module.bsl @@ -32,7 +32,14 @@ ВыборФайла.Заголовок = НСтр("ru = 'Выбор каталога экспорта'"); ОписаниеОповещения = Новый ОписаниеОповещения("ДиалогВыбораКаталогаЗавершение", ЭтотОбъект, Неопределено); - ФайловаяСистемаКлиент.ПоказатьДиалогВыбора(ОписаниеОповещения, ВыборФайла); + Если ЕстьБСП Тогда + МодульФайловаяСистемаКлиент = Вычислить("ФайловаяСистемаКлиент"); + Если ТипЗнч(МодульФайловаяСистемаКлиент) = Тип("ОбщийМодуль") Тогда + МодульФайловаяСистемаКлиент.ПоказатьДиалогВыбора(ОписаниеОповещения, ВыборФайла); + КонецЕсли; + Иначе + ВыборФайла.Показать(ОписаниеОповещения); + КонецЕсли; КонецЕсли; diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ИнтернетПоддержкаИСервисы/Form.form b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ИнтернетПоддержкаИСервисы/Form.form index 1f3203f6b..c8bea6b42 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ИнтернетПоддержкаИСервисы/Form.form +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ИнтернетПоддержкаИСервисы/Form.form @@ -2657,7 +2657,7 @@ Hyperlink - CommonForm.НастройкаОнлайнПоддержки.StandardCommand.Open + Form.Command.НастройкаОнлайнПоддержки Normal Auto true @@ -4356,6 +4356,24 @@ Auto Auto + + НастройкаОнлайнПоддержки + + <key>ru</key> + <value>Настройка онлайн-поддержки</value> + + 11 + + true + + + + НастройкаОнлайнПоддержки + + + Auto + Auto + diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ИнтернетПоддержкаИСервисы/Module.bsl b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ИнтернетПоддержкаИСервисы/Module.bsl index 1169dcbc4..d022619b0 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ИнтернетПоддержкаИСервисы/Module.bsl +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ИнтернетПоддержкаИСервисы/Module.bsl @@ -584,6 +584,16 @@ КонецПроцедуры +&НаКлиенте +Процедура НастройкаОнлайнПоддержки(Команда) + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ВызовОнлайнПоддержки") Тогда + МодульВызовОнлайнПоддержкиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ВызовОнлайнПоддержкиКлиент"); + МодульВызовОнлайнПоддержкиКлиент.ОткрытьФормуНастройкаОнлайнПоддержки(); + КонецЕсли; + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиПользователейИПрав/Form.form b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиПользователейИПрав/Form.form index 7bc4727af..d0ada4c7b 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиПользователейИПрав/Form.form +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиПользователейИПрав/Form.form @@ -808,6 +808,87 @@ ShowBottom Auto + + ОграничиватьДоступНаУровнеЗаписейУниверсально + 2236 + + <key>ru</key> + <value>Вариант работы</value> + + true + true + + true + + + НаборКонстант.ОграничиватьДоступНаУровнеЗаписейУниверсально + + Button + + OnChange + ОграничиватьДоступНаУровнеЗаписейУниверсальноПриИзменении + + + ОграничиватьДоступНаУровнеЗаписейУниверсальноРасширеннаяПодсказка + 2238 + + <key>ru</key> + <value>Производительный вариант рекомендуется выбирать для клиент-серверной информационной базы, +где он значительно эффективнее стандартного варианта. + +Однако в многопользовательской файловой информационной базе он может ограничивать интенсивность +одновременной работы нескольких пользователей, поэтому может потребоваться стандартный вариант. + +При этом если в файловой базе работает один пользователь, либо данные вводятся несколькими пользователями +не интенсивно, то производительный вариант не накладывает каких-либо дополнительных ограничений и +ускорит просмотр списков и формирование отчетов по сравнению со стандартным вариантом.</value> + + Label + true + true + + Left + + + + ОграничиватьДоступНаУровнеЗаписейУниверсальноКонтекстноеМеню + 2237 + true + + InputField + Enter + true + Left + true + + 24 + true + true + false + true + true + true + true + true + + + ru + Стандартный + + + + + + ru + Производительный + + + true + + + Normal + + ОбновлениеДоступаНаУровнеЗаписей 2219 diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиПользователейИПрав/Help/ru.html b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиПользователейИПрав/Help/ru.html index 20c65fa42..6cb2180b0 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиПользователейИПрав/Help/ru.html +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиПользователейИПрав/Help/ru.html @@ -8,27 +8,43 @@ TD {

    В данной панели осуществляется администрирование пользователей и настройка прав доступа. Доступны команды:

    Пользователи

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

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

    Внешние пользователи

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

    Внешние пользователи

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

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

    Группы доступа

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

    Персональные настройки пользователей

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

    Персональные настройки пользователей

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

    Даты запрета изменения

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

    Даты запрета изменения

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

    Защита персональных данных 

    • Настройки регистрации событий доступа к персональным данным - настройки регистрации событий доступа в соответствии с требованиями Федерального закона от 27.07.2006 N152-ФЗ "О персональных данных"; -
    • Защита персональных данных - Просмотр обращений к персональным данным выбранных объектов программы. -
    • Скрывать персональные данные через - включите флажок, для того чтобы по истечении определенного срока скрывать личные данные, например, через 7 дней. Причиной скрытия данных может быть истечение срока действия согласия субъекта или его отсутствие.

    См. также:

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

    \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиПользователейИПрав/Module.bsl b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиПользователейИПрав/Module.bsl index c9da66ac5..7789b49a8 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиПользователейИПрав/Module.bsl +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиПользователейИПрав/Module.bsl @@ -112,6 +112,43 @@ Подключаемый_ПриИзмененииРеквизита(Элемент); КонецПроцедуры +&НаКлиенте +Процедура ОграничиватьДоступНаУровнеЗаписейУниверсальноПриИзменении(Элемент) + + Если НаборКонстант.ОграничиватьДоступНаУровнеЗаписейУниверсально Тогда + ТекстВопроса = + НСтр("ru = 'Включить производительный вариант ограничения доступа? + | + |Включение произойдет после окончания первого обновления + |(см. ход по ссылке ""Обновление доступа на уровне записей"").'"); + ИначеЕсли НаборКонстант.ОграничиватьДоступНаУровнеЗаписей Тогда + ТекстВопроса = + НСтр("ru = 'Выключить производительный вариант ограничения доступа? + | + |Потребуется заполнение данных, которое будет выполняться частями + |регламентным заданием ""Заполнение данных для ограничения доступа"" + |(ход выполнения в журнале регистрации).'"); + Иначе + ТекстВопроса = + НСтр("ru = 'Выключить производительный вариант ограничения доступа? + | + |Потребуется частичное заполнение данных, которое будет выполняться частями + |регламентным заданием ""Заполнение данных для ограничения доступа"" + |(ход выполнения в журнале регистрации).'"); + КонецЕсли; + + Если ЗначениеЗаполнено(ТекстВопроса) Тогда + ПоказатьВопрос( + Новый ОписаниеОповещения( + "ОграничиватьДоступНаУровнеЗаписейУниверсальноПриИзмененииЗавершение", + ЭтотОбъект, Элемент), + ТекстВопроса, РежимДиалогаВопрос.ДаНет); + Иначе + ОграничиватьДоступНаУровнеЗаписейУниверсальноПриИзмененииЗавершение(КодВозвратаДиалога.Да, Элемент); + КонецЕсли; + +КонецПроцедуры + &НаКлиенте Процедура ОграничиватьДоступНаУровнеЗаписейПриИзменении(Элемент) @@ -276,6 +313,22 @@ КонецПроцедуры +&НаКлиенте +Процедура ОграничиватьДоступНаУровнеЗаписейУниверсальноПриИзмененииЗавершение(Ответ, Элемент) Экспорт + + Если Ответ = КодВозвратаДиалога.Нет Тогда + НаборКонстант.ОграничиватьДоступНаУровнеЗаписейУниверсально + = Не НаборКонстант.ОграничиватьДоступНаУровнеЗаписейУниверсально; + Возврат; + КонецЕсли; + + Подключаемый_ПриИзмененииРеквизита(Элемент); + + Элементы.ОбновлениеДоступаНаУровнеЗаписей.Видимость = + НаборКонстант.ОграничиватьДоступНаУровнеЗаписейУниверсально; + +КонецПроцедуры + &НаКлиенте Процедура ОграничиватьДоступНаУровнеЗаписейПриИзмененииЗавершение(Ответ, Элемент) Экспорт diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиРаботыСФайлами/Form.form b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиРаботыСФайлами/Form.form index 160ebed56..721031264 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиРаботыСФайлами/Form.form +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиРаботыСФайлами/Form.form @@ -119,35 +119,33 @@
    - ГруппаУправлениеТомамиФайлов - 1403 + УправлениеХранениемФайлов + 2146 - ГруппаХранитьФайлыВТомахНаДиске - 1406 + ГруппаСпособХраненияФайлов + 2148 - ХранитьФайлыВТомахНаДиске - 719 + СпособХраненияФайлов + 2135 + + <key>ru</key> + <value>Хранить файлы</value> + true true true - НаборКонстант.ХранитьФайлыВТомахНаДиске + НаборКонстант.СпособХраненияФайлов - Right - ShowBottom OnChange - ХранитьФайлыВТомахНаДискеПриИзменении + СпособХраненияФайловПриИзменении - ХранитьФайлыВТомахНаДискеExtendedTooltip - 2051 - - <key>ru</key> - <value>Выбор между хранением файлов в информационной базе или в томах на диске.</value> - + СпособХраненияФайловРасширеннаяПодсказка + 2137 Label true true @@ -156,16 +154,54 @@ - ХранитьФайлыВТомахНаДискеКонтекстноеМеню - 720 + СпособХраненияФайловКонтекстноеМеню + 2136 true - CheckBoxField + InputField Enter true Left true - + + 30 + true + true + true + true + true + + + ru + в информационной базе + + + ВИнформационнойБазе + + + + + ru + в томах на диске + + + ВТомахНаДиске + + + + + ru + в информационной базе и томах на диске + + + ВИнформационнойБазеИТомахНаДиске + + + + Style.ФонУправляющегоПоля + + Normal + true true @@ -174,13 +210,13 @@ <key>ru</key> - <value>Хранить файлы в томах на диске</value> + <value>Способ хранения файлов</value> 43 false - ГруппаХранитьФайлыВТомахНаДискеExtendedTooltip - 2050 + ГруппаСпособХраненияФайловРасширеннаяПодсказка + 2149 Label true true @@ -198,6 +234,130 @@ Auto + + ГруппаПереносФайлов + 2153 + + ПереносФайлов + 2144 + true + true + + true + + + ПереносФайловРасширеннаяПодсказка + 2145 + Label + true + true + + Left + + + Hyperlink + Form.Command.ПереносФайлов + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Перенос файлов</value> + + + ГруппаПереносФайловРасширеннаяПодсказка + 2154 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Управление хранением файлов</value> + + + УправлениеХранениемФайловРасширеннаяПодсказка + 2147 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + NormalSeparation + true + true + Equal + Auto + Auto + + + + ГруппаУправлениеТомамиФайлов + 1403 + + ОтступУправлениеТомами + 2155 + true + true + + true + + + ОтступУправлениеТомамиРасширеннаяПодсказка + 2157 + Label + true + true + + Left + + + + ОтступУправлениеТомамиКонтекстноеМеню + 2156 + true + + Label + 2 + true + true + + Left + + ГруппаСправочникТомаХраненияФайлов 1274 @@ -242,6 +402,7 @@ ru Справочник тома хранения файлов + 40 ГруппаСправочникТомаХраненияФайловExtendedTooltip 2053 @@ -262,6 +423,82 @@ Auto + + ГруппаХранитьФайлыВТомахВРазрезеВладельца + 1406 + + СоздаватьПодкаталогиСИменамиВладельцев + 2158 + + <key>ru</key> + <value>Создавать подкаталоги с именами справочников-владельцев файлов</value> + + true + true + + true + + + НаборКонстант.СоздаватьПодкаталогиСИменамиВладельцев + + Right + ShowBottom + + OnChange + СоздаватьПодкаталогиСИменамиВладельцевПриИзменении + + + СоздаватьПодкаталогиСИменамиВладельцевРасширеннаяПодсказка + 2160 + Label + true + true + + Left + + + + СоздаватьПодкаталогиСИменамиВладельцевКонтекстноеМеню + 2159 + true + + CheckBoxField + Enter + true + Left + true + + + true + true + + true + + + <key>ru</key> + <value>Хранить файлы в томах в разрезе владельца</value> + + false + + ГруппаХранитьФайлыВТомахВРазрезеВладельцаРасширеннаяПодсказка + 2050 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + true true @@ -293,6 +530,351 @@ Auto + + ГруппаУправлениеРасширениямиФайловВИБ + 2161 + + ОтступРасширенияФайловВИБ + 2163 + VeryLow + true + true + + true + + + ОтступРасширенияФайловВИБРасширеннаяПодсказка + 2165 + Label + true + true + + Left + + + + ОтступРасширенияФайловВИБКонтекстноеМеню + 2164 + true + + Label + 2 + true + true + + Left + + + + ГруппаРасширенияФайловВИБ + 2178 + VeryHigh + + РасширенияФайловВИБ + 2175 + + <key>ru</key> + <value>Расширения файлов, хранящихся в информационной базе</value> + + true + true + + true + + + РасширенияФайловВИБ + + 2 + + OnChange + РасширенияФайловВИБПриИзменении + + + РасширенияФайловВИБРасширеннаяПодсказка + 2177 + Label + true + true + + Left + + + + РасширенияФайловВИБКонтекстноеМеню + 2176 + true + + InputField + Enter + true + Left + true + + + ChoiceProcessing + РасширенияФайловВИБОбработкаВыбора + + true + true + true + true + true + true + Normal + + ru + DOC DOCX XLS XLSX + + + + true + true + + true + + + <key>ru</key> + <value>Расширения файлов в ИБ</value> + + ShowBottom + + ГруппаРасширенияФайловВИБРасширеннаяПодсказка + 2179 + + <key>ru</key> + <value>Файлы с указанными расширениями хранятся в информационной базе, а не в томах. Расширения указываются через "пробел".</value> + + Label + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + true + Auto + + + true + true + + true + + + <key>ru</key> + <value>Управление расширениями файлов в ИБ</value> + + + ГруппаУправлениеРасширениямиФайловВИБРасширеннаяПодсказка + 2162 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + NormalSeparation + true + true + Equal + Auto + + + + ГруппаУправлениеРазмеромФайловВИБ + 2180 + + ОтступРазмерФайловВИБ + 2182 + VeryLow + true + true + + true + + + ОтступРазмерФайловВИБРасширеннаяПодсказка + 2184 + Label + true + true + + Left + + + + ОтступРазмерФайловВИБКонтекстноеМеню + 2183 + true + + Label + 2 + true + true + + Left + + + + ГруппаРазмерФайловВИБ + 2185 + VeryHigh + + МаксимальныйРазмерФайлаВИБ + 2187 + + <key>ru</key> + <value>Максимальный размер файла в информационной базе</value> + + true + true + + true + + + МаксимальныйРазмерФайлаВИБ + + 2 + + OnChange + МаксимальныйРазмерФайлаВИБПриИзменении + + + МаксимальныйРазмерФайлаВИБРасширеннаяПодсказка + 2189 + Label + true + true + + Left + + + + МаксимальныйРазмерФайлаВИБКонтекстноеМеню + 2188 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + true + Normal + + + + ДекорацияМб2 + 2190 + + <key>ru</key> + <value>Мбайт</value> + + true + true + + true + + + ДекорацияМб2РасширеннаяПодсказка + 2192 + Label + true + true + + Left + + + + ДекорацияМб2КонтекстноеМеню + 2191 + true + + Label + true + false + + Left + + + true + true + + true + + + <key>ru</key> + <value>Размер файлов в ИБ</value> + + ShowBottom + + ГруппаРазмерФайловВИБРасширеннаяПодсказка + 2186 + + <key>ru</key> + <value>Ограничение размера файлов, хранящихся в информационной базе. Файлы больше указанного размера помещаются в тома.</value> + + Label + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + true + true + Auto + + + true + true + + true + + + <key>ru</key> + <value>Управление размером файлов в ИБ</value> + + + ГруппаУправлениеРазмеромФайловВИБРасширеннаяПодсказка + 2181 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + NormalSeparation + true + true + Equal + Auto + + ГруппаУправлениеЗагрузкойФайлов 1409 @@ -408,8 +990,7 @@ ru Расширения файлов, для которых будет запрещена загрузка в программу, чтобы предотвратить возможность нанесения вреда компьютеру и данным в программе. Указываются через "пробел". -См. также: <link http://1c.ru/news/info.jsp?id=21537>Пример проблемы с вирусом во внешней обработке</>. - +См. также: <link http://1c.ru/news/info.jsp?id=21537>Пример проблемы с вирусом во внешней обработке.</> true Label @@ -590,7 +1171,7 @@ ru Максимальный размер файла области данных - 42 + 43 ГруппаМаксимальныйРазмерФайлаОбластиДанныхExtendedTooltip 2061 @@ -1637,7 +2218,7 @@ Vertical Auto - NormalSeparation + WeakSeparation true true auto @@ -1870,6 +2451,61 @@ true + + ЗначениеСпособаХраненияФайлов + 3 + + String + + 50 + + + + true + + + true + + + + РасширенияФайловВИБ + + <key>ru</key> + <value>Расширения файлов в ИБ</value> + + 4 + + String + + + + true + + + true + + + + МаксимальныйРазмерФайлаВИБ + + <key>ru</key> + <value>Максимальный размер файла в ИБ</value> + + 5 + + Number + + 4 + true + + + + true + + + true + + СправочникТомаХраненияФайлов @@ -1914,6 +2550,24 @@ <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> + <formCommands> + <name>ПереносФайлов</name> + <title> + <key>ru</key> + <value>Перенос файлов</value> + + 1 + + true + + + + ПереносФайлов + + + Auto + Auto + diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиРаботыСФайлами/Module.bsl b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиРаботыСФайлами/Module.bsl index 6b9773596..b80ff19af 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиРаботыСФайлами/Module.bsl +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиРаботыСФайлами/Module.bsl @@ -23,21 +23,37 @@ |Рекомендуется отключить видимость этой панели.'"); КонецЕсли; - ЭтоАдминистраторСистемы = Пользователи.ЭтоПолноправныйПользователь(, Истина); - РазделениеВключено = ОбщегоНазначения.РазделениеВключено(); - МодульРаботаСФайлами = ОбщегоНазначения.ОбщийМодуль("РаботаСФайлами"); - ЗапрещатьЗагрузкуФайловПоРасширению = НаборКонстант.ЗапрещатьЗагрузкуФайловПоРасширению; - МаксимальныйРазмерФайла = МодульРаботаСФайлами.МаксимальныйРазмерФайлаОбщий() / (1024*1024); + МаксимальныйРазмерФайла = МодульРаботаСФайлами.МаксимальныйРазмерФайлаОбщий() / (1024*1024); МаксимальныйРазмерФайлаОбластиДанных = МодульРаботаСФайлами.МаксимальныйРазмерФайла() / (1024*1024); + + РазделениеВключено = ОбщегоНазначения.РазделениеВключено(); Если РазделениеВключено Тогда Элементы.МаксимальныйРазмерФайла.МаксимальноеЗначение = МаксимальныйРазмерФайла; КонецЕсли; - - Элементы.ГруппаХранитьФайлыВТомахНаДиске.Видимость = ЭтоАдминистраторСистемы; - Элементы.ГруппаСправочникТомаХраненияФайлов.Видимость = ЭтоАдминистраторСистемы; - Элементы.ОбщиеПараметрыДляВсехОбластейДанных.Видимость = ЭтоАдминистраторСистемы И РазделениеВключено; + + ЗапрещатьЗагрузкуФайловПоРасширению = НаборКонстант.ЗапрещатьЗагрузкуФайловПоРасширению; + + ПараметрыХраненияФайловВИБ = РаботаСФайламиВТомахСлужебный.ПараметрыХраненияФайловВИнформационнойБазе(); + Если ПараметрыХраненияФайловВИБ <> Неопределено Тогда + РасширенияФайловВИБ = ПараметрыХраненияФайловВИБ.РасширенияФайлов; + МаксимальныйРазмерФайлаВИБ = ПараметрыХраненияФайловВИБ.МаксимальныйРазмер / (1024*1024); + КонецЕсли; + + РаботаСФайламиСлужебный.ЗаполнитьСписокТипамиФайлов(Элементы.РасширенияФайловВИБ.СписокВыбора); + + ЭтоАдминистраторСистемы = Пользователи.ЭтоПолноправныйПользователь(, Истина); + Элементы.УправлениеХранениемФайлов.Видимость = ЭтоАдминистраторСистемы; + Элементы.ГруппаУправлениеТомамиФайлов.Видимость = ЭтоАдминистраторСистемы; + Элементы.ГруппаУправлениеРазмеромФайловВИБ.Видимость = ЭтоАдминистраторСистемы; + Элементы.ОбщиеПараметрыДляВсехОбластейДанных.Видимость = ЭтоАдминистраторСистемы И РазделениеВключено; Элементы.ГруппаСписокРасширенийТекстовыхФайлов.Видимость = Не РазделениеВключено; + Элементы.ГруппаУправлениеРасширениямиФайловВИБ.Видимость = ЭтоАдминистраторСистемы; + + Если ЭтоАдминистраторСистемы Тогда + ЗначениеСпособаХраненияФайлов = НаборКонстант.СпособХраненияФайлов; + УстановитьДоступностьНастроекХраненияВТомах(); + КонецЕсли; // Обновление состояния элементов. УстановитьДоступность(); @@ -45,18 +61,25 @@ НастройкиПрограммыПереопределяемый.НастройкиРаботыСФайламиПриСозданииНаСервере(ЭтотОбъект); Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда + + Элементы.ОтступРазмерФайловВИБ.Видимость = Ложь; + Элементы.ОтступРасширенияФайловВИБ.Видимость = Ложь; + Элементы.МаксимальныйРазмерФайлаВИБ.КнопкаРегулирования = Ложь; + Элементы.РасширенияФайловВИБ.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Верх; Элементы.СписокРасширенийТекстовыхФайлов.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Верх; Элементы.СписокРасширенийФайловOpenDocumentОбластиДанных.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Верх; + КонецЕсли; КонецПроцедуры &НаКлиенте Процедура ПриЗакрытии(ЗавершениеРаботы) - Если ЗавершениеРаботы Тогда - Возврат; + + Если Не ЗавершениеРаботы Тогда + ОбновитьИнтерфейсПрограммы(); КонецЕсли; - ОбновитьИнтерфейсПрограммы(); + КонецПроцедуры #КонецОбласти @@ -64,16 +87,29 @@ #Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте -Процедура ХранитьФайлыВТомахНаДискеПриИзменении(Элемент) +Процедура СпособХраненияФайловПриИзменении(Элемент) - СтароеЗначение = Не НаборКонстант.ХранитьФайлыВТомахНаДиске; + Если НаборКонстант.СпособХраненияФайлов = ЗначениеСпособаХраненияФайлов Тогда + Возврат; + КонецЕсли; + + НаборКонстант.ХранитьФайлыВТомахНаДиске = НаборКонстант.СпособХраненияФайлов <> "ВИнформационнойБазе"; + + ОбработкаОповещения = Новый ОписаниеОповещения( + "СпособХраненияФайловПриИзмененииЗавершение", ЭтотОбъект, Элемент); + + Если ЗначениеСпособаХраненияФайлов <> "ВИнформационнойБазе" + И НаборКонстант.ХранитьФайлыВТомахНаДиске Тогда + + ВыполнитьОбработкуОповещения(ОбработкаОповещения, КодВозвратаДиалога.ОК); + Возврат; + КонецЕсли; Попытка - ЗапросыНаИспользованиеВнешнихРесурсов = - ЗапросыНаИспользованиеВнешнихРесурсовТомовХраненияФайлов( - НаборКонстант.ХранитьФайлыВТомахНаДиске); - ОбработкаОповещения = Новый ОписаниеОповещения("ХранитьФайлыВТомахНаДискеПриИзмененииЗавершение", ЭтотОбъект, Элемент); + ЗапросыНаИспользованиеВнешнихРесурсов = ЗапросыНаИспользованиеВнешнихРесурсовТомовХраненияФайлов( + НаборКонстант.ХранитьФайлыВТомахНаДиске); + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПрофилиБезопасности") Тогда МодульРаботаВБезопасномРежимеКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаВБезопасномРежимеКлиент"); МодульРаботаВБезопасномРежимеКлиент.ПрименитьЗапросыНаИспользованиеВнешнихРесурсов( @@ -82,60 +118,104 @@ ВыполнитьОбработкуОповещения(ОбработкаОповещения, КодВозвратаДиалога.ОК); КонецЕсли; - Если Не ЕстьТомаХраненияФайлов() И НаборКонстант.ХранитьФайлыВТомахНаДиске Тогда - ПоказатьПредупреждение(, НСтр("ru = 'Включено хранение файлов в томах на диске, но тома еще не настроены. - |Добавляемые файлы будут сохраняться в информационной базе до тех пор, пока не будет настроен хотя бы один том хранения файлов.'")); - КонецЕсли; Исключение - НаборКонстант.ХранитьФайлыВТомахНаДиске = СтароеЗначение; + + НаборКонстант.СпособХраненияФайлов = ЗначениеСпособаХраненияФайлов; + НаборКонстант.ХранитьФайлыВТомахНаДиске = ЗначениеСпособаХраненияФайлов <> "ВИнформационнойБазе"; ВызватьИсключение; + КонецПопытки; КонецПроцедуры +&НаКлиенте +Процедура СоздаватьПодкаталогиСИменамиВладельцевПриИзменении(Элемент) + + Подключаемый_ПриИзмененииРеквизита(Элемент); + +КонецПроцедуры + +&НаКлиенте +Процедура РасширенияФайловВИБПриИзменении(Элемент) + + ПриИзмененииНастроекХраненияФайловВИБ(); + +КонецПроцедуры + +&НаКлиенте +Процедура РасширенияФайловВИБОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + РасширенияФайловВИБ = РаботаСФайламиСлужебныйКлиент.РасширенияПоТипуФайла(ВыбранноеЗначение); + ПриИзмененииНастроекХраненияФайловВИБ(); + +КонецПроцедуры + +&НаКлиенте +Процедура МаксимальныйРазмерФайлаВИБПриИзменении(Элемент) + + ПриИзмененииНастроекХраненияФайловВИБ(); + +КонецПроцедуры + &НаКлиенте Процедура ЗапрещатьЗагрузкуФайловПоРасширениюПриИзменении(Элемент) Если Не ЗапрещатьЗагрузкуФайловПоРасширению Тогда - ДополнительныеПараметры = Новый Структура; - ДополнительныеПараметры.Вставить("Элемент", Элемент); - Оповещение = Новый ОписаниеОповещения("ЗапрещатьЗагрузкуФайловПоРасширениюПослеПодтверждения", ЭтотОбъект, ДополнительныеПараметры); - ПараметрыФормы = Новый Структура("Ключ", "ПриИзмененииСпискаЗапрещенныхРасширений"); - ОткрытьФорму("ОбщаяФорма.ПредупреждениеБезопасности", ПараметрыФормы, , , , , Оповещение); + + Оповещение = Новый ОписаниеОповещения( + "ЗапрещатьЗагрузкуФайловПоРасширениюПослеПодтверждения", ЭтотОбъект, Новый Структура("Элемент", Элемент)); + ОткрытьФорму("ОбщаяФорма.ПредупреждениеБезопасности", + Новый Структура("Ключ", "ПриИзмененииСпискаЗапрещенныхРасширений"), , , , , Оповещение); Возврат; + КонецЕсли; Подключаемый_ПриИзмененииРеквизита(Элемент); + КонецПроцедуры &НаКлиенте Процедура СинхронизироватьФайлыПриИзменении(Элемент) + Подключаемый_ПриИзмененииРеквизита(Элемент); + КонецПроцедуры &НаКлиенте Процедура СписокЗапрещенныхРасширенийОбластиДанныхПриИзменении(Элемент) + Подключаемый_ПриИзмененииРеквизита(Элемент); + КонецПроцедуры &НаКлиенте Процедура МаксимальныйРазмерФайлаОбластиДанныхПриИзменении(Элемент) + Если МаксимальныйРазмерФайлаОбластиДанных = 0 Тогда + ТекстСообщения = НСтр("ru = 'Поле ""Максимальный размер файла"" не заполнено.'"); ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстСообщения, ,"МаксимальныйРазмерФайлаОбластиДанных"); Возврат; + КонецЕсли; + Подключаемый_ПриИзмененииРеквизита(Элемент); + КонецПроцедуры &НаКлиенте Процедура СписокРасширенийФайловOpenDocumentОбластиДанныхПриИзменении(Элемент) + Подключаемый_ПриИзмененииРеквизита(Элемент); + КонецПроцедуры &НаКлиенте Процедура СписокРасширенийТекстовыхФайловПриИзменении(Элемент) + Подключаемый_ПриИзмененииРеквизита(Элемент); + КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// @@ -143,22 +223,31 @@ &НаКлиенте Процедура МаксимальныйРазмерФайлаПриИзменении(Элемент) + Если МаксимальныйРазмерФайла = 0 Тогда + ТекстСообщения = НСтр("ru = 'Поле ""Максимальный размер файла"" не заполнено.'"); ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстСообщения, ,"МаксимальныйРазмерФайла"); Возврат; + КонецЕсли; + Подключаемый_ПриИзмененииРеквизита(Элемент); + КонецПроцедуры &НаКлиенте Процедура СписокЗапрещенныхРасширенийПриИзменении(Элемент) + Подключаемый_ПриИзмененииРеквизита(Элемент); + КонецПроцедуры &НаКлиенте Процедура СписокРасширенийФайловOpenDocumentПриИзменении(Элемент) + Подключаемый_ПриИзмененииРеквизита(Элемент); + КонецПроцедуры #КонецОбласти @@ -167,38 +256,220 @@ &НаКлиенте Процедура СправочникТомаХраненияФайлов(Команда) - ИмяОткрываемойФормы = "Справочник.ТомаХраненияФайлов.ФормаСписка"; - ОткрытьФорму(ИмяОткрываемойФормы, , ЭтотОбъект); + + ОткрытьФорму("Справочник.ТомаХраненияФайлов.ФормаСписка", , ЭтотОбъект); + КонецПроцедуры &НаКлиенте Процедура НастройкаСинхронизацииФайлов(Команда) - ИмяОткрываемойФормы = "РегистрСведений.НастройкиСинхронизацииФайлов.ФормаСписка"; - ОткрытьФорму(ИмяОткрываемойФормы, , ЭтотОбъект); + + ОткрытьФорму("РегистрСведений.НастройкиСинхронизацииФайлов.ФормаСписка", , ЭтотОбъект); + +КонецПроцедуры + +&НаКлиенте +Процедура ПереносФайлов(Команда) + + РаботаСФайламиСлужебныйКлиент.ПеренестиФайлы(); + КонецПроцедуры #КонецОбласти #Область СлужебныеПроцедурыИФункции +&НаКлиенте +Процедура СпособХраненияФайловПриИзмененииЗавершение(Ответ, Элемент) Экспорт + + Если Ответ <> КодВозвратаДиалога.ОК Тогда + НаборКонстант.СпособХраненияФайлов = ЗначениеСпособаХраненияФайлов; + НаборКонстант.ХранитьФайлыВТомахНаДиске = ЗначениеСпособаХраненияФайлов <> "ВИнформационнойБазе"; + Иначе + + Если ЗначениеСпособаХраненияФайлов = "ВИнформационнойБазе" + И НаборКонстант.ХранитьФайлыВТомахНаДиске + И Не ЕстьТомаХраненияФайлов() Тогда + + ПоказатьПредупреждение(, НСтр("ru = 'Включено хранение файлов в томах на диске, но тома еще не настроены. + |Добавляемые файлы будут сохраняться в информационной базе до тех пор, пока не будет настроен хотя бы один том хранения файлов.'")); + КонецЕсли; + + ПриИзмененииСпособаХраненияФайловНаСервере(); + ОбновитьПовторноИспользуемыеЗначения(); + ПослеИзмененияРеквизита("СпособХраненияФайлов", Ложь); + ПослеИзмененияРеквизита("ХранитьФайлыВТомахНаДиске"); + + КонецЕсли; + +КонецПроцедуры + &НаКлиенте Процедура ЗапрещатьЗагрузкуФайловПоРасширениюПослеПодтверждения(Результат, ДополнительныеПараметры) Экспорт - Если Результат <> Неопределено И Результат = "Продолжить" Тогда + + Если Результат <> Неопределено + И Результат = "Продолжить" Тогда + Подключаемый_ПриИзмененииРеквизита(ДополнительныеПараметры.Элемент); Иначе ЗапрещатьЗагрузкуФайловПоРасширению = Истина; КонецЕсли; + КонецПроцедуры &НаКлиенте -Процедура ХранитьФайлыВТомахНаДискеПриИзмененииЗавершение(Ответ, Элемент) Экспорт +Процедура ПриИзмененииНастроекХраненияФайловВИБ() - Если Ответ <> КодВозвратаДиалога.ОК Тогда - НаборКонстант.ХранитьФайлыВТомахНаДиске = Не НаборКонстант.ХранитьФайлыВТомахНаДиске; - Иначе - Подключаемый_ПриИзмененииРеквизита(Элемент); + УстановитьПараметрыХраненияФайловВИБ( + Новый Структура("РасширенияФайлов, МаксимальныйРазмер", + РасширенияФайловВИБ, МаксимальныйРазмерФайлаВИБ*1024*1024)); + + ОбновитьПовторноИспользуемыеЗначения(); + ПослеИзмененияРеквизита("ПараметрыХраненияФайловВИБ", Ложь); + +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ПриИзмененииРеквизита(Элемент, ОбновлятьИнтерфейс = Истина) + + КонстантаИмя = ПриИзмененииРеквизитаСервер(Элемент.Имя); + ОбновитьПовторноИспользуемыеЗначения(); + ПослеИзмененияРеквизита(КонстантаИмя, ОбновлятьИнтерфейс); + +КонецПроцедуры + +&НаКлиенте +Процедура ПослеИзмененияРеквизита(КонстантаИмя, ОбновлятьИнтерфейс = Истина) + + Если ОбновлятьИнтерфейс Тогда + ОбновитьИнтерфейс = Истина; + ПодключитьОбработчикОжидания("ОбновитьИнтерфейсПрограммы", 2, Истина); КонецЕсли; + Если КонстантаИмя <> "" Тогда + Оповестить("Запись_НаборКонстант", Новый Структура, КонстантаИмя); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьИнтерфейсПрограммы() + + Если ОбновитьИнтерфейс = Истина Тогда + ОбновитьИнтерфейс = Ложь; + ОбщегоНазначенияКлиент.ОбновитьИнтерфейсПрограммы(); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Функция ПриИзмененииРеквизитаСервер(ИмяЭлемента) + + РеквизитПутьКДанным = Элементы[ИмяЭлемента].ПутьКДанным; + + КонстантаИмя = СохранитьЗначениеРеквизита(РеквизитПутьКДанным); + + УстановитьДоступность(РеквизитПутьКДанным); + ОбновитьПовторноИспользуемыеЗначения(); + + Возврат КонстантаИмя; + +КонецФункции + +&НаСервере +Процедура ПриИзмененииСпособаХраненияФайловНаСервере() + + ЗначениеСпособаХраненияФайлов = НаборКонстант.СпособХраненияФайлов; + Константы.СпособХраненияФайлов.Установить(НаборКонстант.СпособХраненияФайлов); + Константы.ХранитьФайлыВТомахНаДиске.Установить(НаборКонстант.ХранитьФайлыВТомахНаДиске); + УстановитьДоступность("НаборКонстант.СпособХраненияФайлов"); + + ОбновитьПовторноИспользуемыеЗначения(); + +КонецПроцедуры + +&НаСервере +Процедура УстановитьДоступность(РеквизитПутьКДанным = "") + + Если РеквизитПутьКДанным = "НаборКонстант.СпособХраненияФайлов" Тогда + УстановитьДоступностьНастроекХраненияВТомах(); + КонецЕсли; + + Если РеквизитПутьКДанным = "ЗапрещатьЗагрузкуФайловПоРасширению" + Или РеквизитПутьКДанным = "" Тогда + + Элементы.СписокЗапрещенныхРасширенийОбластиДанных.Доступность = ЗапрещатьЗагрузкуФайловПоРасширению; + КонецЕсли; + + Если РеквизитПутьКДанным = "НаборКонстант.СинхронизироватьФайлы" + Или РеквизитПутьКДанным = "" Тогда + + Элементы.НастройкиСинхронизацииФайлов.Доступность = НаборКонстант.СинхронизироватьФайлы; + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура УстановитьДоступностьНастроекХраненияВТомах() + + Элементы.ГруппаУправлениеТомамиФайлов.Доступность = НаборКонстант.ХранитьФайлыВТомахНаДиске; + Элементы.СправочникТомаХраненияФайлов.Доступность = НаборКонстант.ХранитьФайлыВТомахНаДиске; + Элементы.СоздаватьПодкаталогиСИменамиВладельцев.Доступность = НаборКонстант.ХранитьФайлыВТомахНаДиске; + Элементы.ГруппаУправлениеРазмеромФайловВИБ.Доступность = + НаборКонстант.СпособХраненияФайлов = "ВИнформационнойБазеИТомахНаДиске"; + Элементы.ГруппаУправлениеРасширениямиФайловВИБ.Доступность = + НаборКонстант.СпособХраненияФайлов = "ВИнформационнойБазеИТомахНаДиске"; + +КонецПроцедуры + +&НаСервере +Функция СохранитьЗначениеРеквизита(РеквизитПутьКДанным) + + ЧастиИмени = СтрРазделить(РеквизитПутьКДанным, "."); + Если ЧастиИмени.Количество() <> 2 Тогда + + Если РеквизитПутьКДанным = "МаксимальныйРазмерФайла" Тогда + НаборКонстант.МаксимальныйРазмерФайла = МаксимальныйРазмерФайла * (1024*1024); + КонстантаИмя = "МаксимальныйРазмерФайла"; + ИначеЕсли РеквизитПутьКДанным = "МаксимальныйРазмерФайлаОбластиДанных" Тогда + + Если Не ОбщегоНазначения.РазделениеВключено() Тогда + НаборКонстант.МаксимальныйРазмерФайла = МаксимальныйРазмерФайлаОбластиДанных * (1024*1024); + КонстантаИмя = "МаксимальныйРазмерФайла"; + Иначе + НаборКонстант.МаксимальныйРазмерФайлаОбластиДанных = МаксимальныйРазмерФайлаОбластиДанных * (1024*1024); + КонстантаИмя = "МаксимальныйРазмерФайлаОбластиДанных"; + КонецЕсли; + + ИначеЕсли РеквизитПутьКДанным = "ЗапрещатьЗагрузкуФайловПоРасширению" Тогда + НаборКонстант.ЗапрещатьЗагрузкуФайловПоРасширению = ЗапрещатьЗагрузкуФайловПоРасширению; + КонстантаИмя = "ЗапрещатьЗагрузкуФайловПоРасширению"; + КонецЕсли; + + Иначе + КонстантаИмя = ЧастиИмени[1]; + КонецЕсли; + + Если ПустаяСтрока(КонстантаИмя) Тогда + Возврат ""; + КонецЕсли; + + КонстантаМенеджер = Константы[КонстантаИмя]; + КонстантаЗначение = НаборКонстант[КонстантаИмя]; + + Если КонстантаМенеджер.Получить() <> КонстантаЗначение Тогда + КонстантаМенеджер.Установить(КонстантаЗначение); + КонецЕсли; + + Возврат КонстантаИмя; + +КонецФункции + +&НаСервереБезКонтекста +Процедура УстановитьПараметрыХраненияФайловВИБ(ПараметрыХранения) + + РаботаСФайламиВТомахСлужебный.УстановитьПараметрыХраненияФайловВИнформационнойБазе(ПараметрыХранения); + КонецПроцедуры &НаСервереБезКонтекста @@ -219,106 +490,11 @@ КонецФункции -&НаКлиенте -Процедура Подключаемый_ПриИзмененииРеквизита(Элемент, ОбновлятьИнтерфейс = Истина) - - ИмяКонстанты = ПриИзмененииРеквизитаСервер(Элемент.Имя); - ОбновитьПовторноИспользуемыеЗначения(); - - Если ОбновлятьИнтерфейс Тогда - ОбновитьИнтерфейс = Истина; - ПодключитьОбработчикОжидания("ОбновитьИнтерфейсПрограммы", 2, Истина); - КонецЕсли; - - Если ИмяКонстанты <> "" Тогда - Оповестить("Запись_НаборКонстант", Новый Структура, ИмяКонстанты); - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ОбновитьИнтерфейсПрограммы() - - Если ОбновитьИнтерфейс = Истина Тогда - ОбновитьИнтерфейс = Ложь; - ОбщегоНазначенияКлиент.ОбновитьИнтерфейсПрограммы(); - КонецЕсли; - -КонецПроцедуры - -&НаСервере -Функция ПриИзмененииРеквизитаСервер(ИмяЭлемента) - - РеквизитПутьКДанным = Элементы[ИмяЭлемента].ПутьКДанным; - ИмяКонстанты = СохранитьЗначениеРеквизита(РеквизитПутьКДанным); - УстановитьДоступность(РеквизитПутьКДанным); - ОбновитьПовторноИспользуемыеЗначения(); - Возврат ИмяКонстанты; - -КонецФункции - -&НаСервере -Функция СохранитьЗначениеРеквизита(РеквизитПутьКДанным) - - Если РеквизитПутьКДанным = "" Тогда - Возврат ""; - КонецЕсли; - - ЧастиИмени = СтрРазделить(РеквизитПутьКДанным, "."); - Если ЧастиИмени.Количество() = 2 Тогда - ИмяКонстанты = ЧастиИмени[1]; - Иначе - Если РеквизитПутьКДанным = "МаксимальныйРазмерФайла" Тогда - НаборКонстант.МаксимальныйРазмерФайла = МаксимальныйРазмерФайла * (1024*1024); - ИмяКонстанты = "МаксимальныйРазмерФайла"; - - ИначеЕсли РеквизитПутьКДанным = "МаксимальныйРазмерФайлаОбластиДанных" Тогда - - Если Не ОбщегоНазначения.РазделениеВключено() Тогда - НаборКонстант.МаксимальныйРазмерФайла = МаксимальныйРазмерФайлаОбластиДанных * (1024*1024); - ИмяКонстанты = "МаксимальныйРазмерФайла"; - Иначе - НаборКонстант.МаксимальныйРазмерФайлаОбластиДанных = МаксимальныйРазмерФайлаОбластиДанных * (1024*1024); - ИмяКонстанты = "МаксимальныйРазмерФайлаОбластиДанных"; - КонецЕсли; - ИначеЕсли РеквизитПутьКДанным = "ЗапрещатьЗагрузкуФайловПоРасширению" Тогда - НаборКонстант.ЗапрещатьЗагрузкуФайловПоРасширению = ЗапрещатьЗагрузкуФайловПоРасширению; - ИмяКонстанты = "ЗапрещатьЗагрузкуФайловПоРасширению"; - КонецЕсли; - КонецЕсли; - - КонстантаМенеджер = Константы[ИмяКонстанты]; - КонстантаЗначение = НаборКонстант[ИмяКонстанты]; - - Если КонстантаМенеджер.Получить() <> КонстантаЗначение Тогда - КонстантаМенеджер.Установить(КонстантаЗначение); - КонецЕсли; - - Возврат ИмяКонстанты; -КонецФункции - -&НаСервере -Процедура УстановитьДоступность(РеквизитПутьКДанным = "") - - Если РеквизитПутьКДанным = "НаборКонстант.ХранитьФайлыВТомахНаДиске" ИЛИ РеквизитПутьКДанным = "" Тогда - Элементы.СправочникТомаХраненияФайлов.Доступность = НаборКонстант.ХранитьФайлыВТомахНаДиске; - КонецЕсли; - - Если РеквизитПутьКДанным = "ЗапрещатьЗагрузкуФайловПоРасширению" ИЛИ РеквизитПутьКДанным = "" Тогда - Элементы.СписокЗапрещенныхРасширенийОбластиДанных.Доступность = ЗапрещатьЗагрузкуФайловПоРасширению; - КонецЕсли; - - Если РеквизитПутьКДанным = "НаборКонстант.СинхронизироватьФайлы" ИЛИ РеквизитПутьКДанным = "" Тогда - Элементы.НастройкиСинхронизацииФайлов.Доступность = НаборКонстант.СинхронизироватьФайлы; - КонецЕсли; - -КонецПроцедуры - &НаСервереБезКонтекста Функция ЕстьТомаХраненияФайлов() - МодульРаботаСФайлами = ОбщегоНазначения.ОбщийМодуль("РаботаСФайлами"); - Возврат МодульРаботаСФайлами.ЕстьТомаХраненияФайлов(); + МодульРаботаСФайламиВТомахСлужебный = ОбщегоНазначения.ОбщийМодуль("РаботаСФайламиВТомахСлужебный"); + Возврат МодульРаботаСФайламиВТомахСлужебный.ЕстьТомаХраненияФайлов(); КонецФункции diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Обслуживание/Form.form b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Обслуживание/Form.form index e399a6ba1..2d7b698cf 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Обслуживание/Form.form +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Обслуживание/Form.form @@ -2802,6 +2802,227 @@ ГруппаРезультатыОбновленияПрограммыТретьяСтрока 2223 + + ГруппаНастройкаПриоритетаОбновления + 2229 + + ПриоритетРаботаПользователей + 2242 + true + true + + true + + + ПриоритетОбработкиДанных + + Top + + OnChange + ПриоритетОтложеннойОбработкиДанныхПриИзменении + + + ПриоритетРаботаПользователейРасширеннаяПодсказка + 2244 + Label + true + true + + Left + + + + ПриоритетРаботаПользователейКонтекстноеМеню + 2243 + true + + RadioButtonField + Enter + true + Left + true + + + + ru + Работа пользователей + + + РаботаПользователей + + + Vertical + + + + ГруппаПриоритет + 2237 + + ПриоритетОбработкаДанных + 2239 + true + true + + true + + + ПриоритетОбработкиДанных + + None + + OnChange + ПриоритетОтложеннойОбработкиДанныхПриИзменении + + + ПриоритетОбработкаДанныхРасширеннаяПодсказка + 2241 + Label + true + true + + Left + + + + ПриоритетОбработкаДанныхКонтекстноеМеню + 2240 + true + + RadioButtonField + Center + Enter + true + Left + true + + + + ru + Обработка данных: + + + ОбработкаДанных + + + Vertical + + + + КоличествоПотоковОбновления + 2234 + + <key>ru</key> + <value>потоками</value> + + true + true + + true + + + КоличествоПотоковОбновления + + Right + + OnChange + КоличествоПотоковОбновленияИнформационнойБазыПриИзменении + + + КоличествоПотоковОбновленияРасширеннаяПодсказка + 2236 + Label + true + true + + Left + + + + КоличествоПотоковОбновленияКонтекстноеМеню + 2235 + true + + InputField + Bottom + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Приоритет</value> + + + ГруппаПриоритетРасширеннаяПодсказка + 2238 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Настройка приоритета обновления</value> + + ShowBottom + 43 + + ГруппаНастройкаПриоритетаОбновленияРасширеннаяПодсказка + 2230 + + <key>ru</key> + <value>Приоритет за обработкой данных значительно ускоряет обновление, но увеличивает нагрузку на сервер, что может привести к замедлению работы программы.</value> + + Label + 43 + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + ГруппаДетализироватьОбновлениеИБВЖурналеРегистрации 2061 @@ -3429,6 +3650,10 @@ КоличествоПотоковОбновления + + <key>ru</key> + <value>Количество потоков обновления</value> + 5 Number @@ -3445,6 +3670,10 @@ ПриоритетОбработкиДанных + + <key>ru</key> + <value>Приоритет обработки данных</value> + 3 String diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Обслуживание/Module.bsl b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Обслуживание/Module.bsl index 291671f22..7cb505f28 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Обслуживание/Module.bsl +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Обслуживание/Module.bsl @@ -107,6 +107,15 @@ КонецЕсли; КонецЕсли; + Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Или ОбщегоНазначения.РазделениеВключено() Тогда + Элементы.ГруппаНастройкаПриоритетаОбновления.Видимость = Ложь; + Иначе + КоличествоПотоковОбновления = ОбновлениеИнформационнойБазы.КоличествоПотоковОбновления(); + ПриоритетОбработкиДанных = ОбновлениеИнформационнойБазы.ПриоритетОтложеннойОбработки(); + Элементы.КоличествоПотоковОбновления.Видимость = ОбновлениеИнформационнойБазы.РазрешеноМногопоточноеОбновление(); + НастроитьИспользованиеКоличестваПотоковОбновления(ПриоритетОбработкиДанных); + КонецЕсли; + // Обновление состояния элементов. УстановитьДоступность(); @@ -163,6 +172,16 @@ Подключаемый_ПриИзмененииРеквизита(Элемент); КонецПроцедуры +&НаКлиенте +Процедура ПриоритетОтложеннойОбработкиДанныхПриИзменении(Элемент) + УстановитьПриоритетОтложеннойОбработки(Элемент.Имя); +КонецПроцедуры + +&НаКлиенте +Процедура КоличествоПотоковОбновленияИнформационнойБазыПриИзменении(Элемент) + УстановитьКоличествоПотоковОбновления(); +КонецПроцедуры + #Область ИнтернетПоддержкаПользователей_ОблачныйАрхив &НаКлиенте @@ -295,6 +314,22 @@ //////////////////////////////////////////////////////////////////////////////// // Сервер +&НаСервере +Процедура УстановитьПриоритетОтложеннойОбработки(ИмяЭлемента) + ОбновлениеИнформационнойБазы.УстановитьПриоритетОтложеннойОбработки(ПриоритетОбработкиДанных); + НастроитьИспользованиеКоличестваПотоковОбновления(ПриоритетОбработкиДанных); +КонецПроцедуры + +&НаСервере +Процедура НастроитьИспользованиеКоличестваПотоковОбновления(Приоритет) + Элементы.КоличествоПотоковОбновления.Доступность = (Приоритет = "ОбработкаДанных"); +КонецПроцедуры + +&НаСервере +Процедура УстановитьКоличествоПотоковОбновления() + ОбновлениеИнформационнойБазы.УстановитьКоличествоПотоковОбновления(КоличествоПотоковОбновления); +КонецПроцедуры + &НаСервере Функция СохранитьЗначениеРеквизита(РеквизитПутьКДанным) diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ОбщиеНастройки/Form.form b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ОбщиеНастройки/Form.form index abefff6a1..0e0833b80 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ОбщиеНастройки/Form.form +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ОбщиеНастройки/Form.form @@ -173,100 +173,17 @@ Normal - - ГруппаЧасовойПоясПрограммы - 1696 - - ЧасовойПоясПрограммы - 1693 - true - true - - true - - - ЧасовойПоясПрограммы - - - OnChange - ЧасовойПоясПрограммыПриИзменении - - - ЧасовойПоясПрограммыExtendedTooltip - 1837 - Label - true - true - - Left - - - - ЧасовойПоясПрограммыКонтекстноеМеню - 1694 - true - - InputField - Enter - true - Left - true - - true - true - false - true - true - true - true - OnValueChange - Normal - - - - ВремяТекущегоСеанса - 2061 - true - true - - true - - - ВремяТекущегоСеансаРасширеннаяПодсказка - 2062 - Label - true - true - - Left - - - Hyperlink - CommonCommand.ВремяТекущегоСеанса - Normal - Auto - true - true - UserCmds - Auto - + + РегиональныеНастройки + 2094 true true true - - <key>ru</key> - <value>Часовой пояс программы</value> - - ShowBottom - ГруппаЧасовойПоясПрограммыExtendedTooltip - 1836 - - <key>ru</key> - <value>Часовой пояс, в котором ведется учет в программе. Даты всех документов и других данных вводятся и хранятся в этом часовом поясе. </value> - + РегиональныеНастройкиРасширеннаяПодсказка + 2095 Label true true @@ -274,15 +191,14 @@ Left - UsualGroup - - HorizontalIfPossible - Auto - true - true - Auto - Auto - + Hyperlink + Form.Command.РегиональныеНастройки + Normal + Auto + true + true + UserCmds + Auto true true @@ -1007,7 +923,7 @@ Hyperlink - Catalog.НаборыДополнительныхРеквизитовИСведений.Command.ДополнительныеРеквизиты + Form.Command.ДополнительныеРеквизиты Normal Auto true @@ -1071,7 +987,7 @@ Hyperlink - Catalog.НаборыДополнительныхРеквизитовИСведений.Command.ДополнительныеСведения + Form.Command.ДополнительныеСведения Normal Auto true @@ -1774,24 +1690,6 @@
    true
    - - ЧасовойПоясПрограммы - - <key>ru</key> - <value>Часовой пояс</value> - - 2 - - String - - - - true - - - true - - ИспользоватьПолнотекстовыйПоиск @@ -1891,6 +1789,72 @@ <currentRowUse>Auto</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> + <formCommands> + <name>РегиональныеНастройки</name> + <title> + <key>ru</key> + <value>Региональные настройки</value> + + 2 + + ru + Региональные настройки + + + true + + + + РегиональныеНастройки + + + Auto + Auto + + + ДополнительныеРеквизиты + + <key>ru</key> + <value>Дополнительные реквизиты</value> + + 3 + + ru + Дополнительные реквизиты + + + true + + + + ДополнительныеРеквизиты + + + Auto + Auto + + + ДополнительныеСведения + + <key>ru</key> + <value>Дополнительные сведения</value> + + 4 + + ru + Дополнительные сведения + + + true + + + + ДополнительныеСведения + + + Auto + Auto + diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ОбщиеНастройки/Module.bsl b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ОбщиеНастройки/Module.bsl index 499769fc6..7d48f11c9 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ОбщиеНастройки/Module.bsl +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ОбщиеНастройки/Module.bsl @@ -18,12 +18,6 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - ЧасовойПоясПрограммы = ПолучитьЧасовойПоясИнформационнойБазы(); - Если ПустаяСтрока(ЧасовойПоясПрограммы) Тогда - ЧасовойПоясПрограммы = ЧасовойПояс(); - КонецЕсли; - Элементы.ЧасовойПоясПрограммы.СписокВыбора.ЗагрузитьЗначения(ПолучитьДопустимыеЧасовыеПояса()); - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПрофилиБезопасности") Тогда МодульРаботаВБезопасномРежимеСлужебный = ОбщегоНазначения.ОбщийМодуль("РаботаВБезопасномРежимеСлужебный"); @@ -57,10 +51,6 @@ Элементы.ГруппаПубликацияИнформационнойБазы.Видимость = Не (ОбщегоНазначения.РазделениеВключено() Или ОбщегоНазначения.ЭтоАвтономноеРабочееМесто()); - УстановитьДоступность(); - - НастройкиПрограммыПереопределяемый.ОбщиеНастройкиПриСозданииНаСервере(ЭтотОбъект); - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВерсионированиеОбъектов") Тогда МодульВерсионированиеОбъектов = ОбщегоНазначения.ОбщийМодуль("ВерсионированиеОбъектов"); ХранитьИсториюИзменений = МодульВерсионированиеОбъектов.ЗначениеФлажкаХранитьИсторию(); @@ -77,6 +67,10 @@ Элементы.ГруппаУправлениеПолнотекстовымПоиском.Видимость = Ложь; КонецЕсли; + УстановитьДоступность(); + + НастройкиПрограммыПереопределяемый.ОбщиеНастройкиПриСозданииНаСервере(ЭтотОбъект); + КонецПроцедуры &НаКлиенте @@ -116,11 +110,6 @@ СтандартныеПодсистемыКлиент.УстановитьРасширенныйЗаголовокПриложения(); КонецПроцедуры -&НаКлиенте -Процедура ЧасовойПоясПрограммыПриИзменении(Элемент) - Подключаемый_ПриИзмененииРеквизита(Элемент); -КонецПроцедуры - &НаКлиенте Процедура ИспользоватьДополнительныеРеквизитыИСведенияПриИзменении(Элемент) Подключаемый_ПриИзмененииРеквизита(Элемент); @@ -157,6 +146,8 @@ МодульВерсионированиеОбъектовКлиент.ПриИзмененииФлажкаХранитьИсторию(ХранитьИсториюИзменений); КонецЕсли; + УстановитьДоступность("ХранитьИсториюИзменений"); + КонецПроцедуры &НаКлиенте @@ -167,6 +158,8 @@ МодульПолнотекстовыйПоискКлиент.ПриИзмененииФлажкаИспользоватьПоиск(ИспользоватьПолнотекстовыйПоиск); КонецЕсли; + УстановитьДоступность("ИспользоватьПолнотекстовыйПоиск"); + КонецПроцедуры #КонецОбласти @@ -183,6 +176,26 @@ КонецПроцедуры +&НаКлиенте +Процедура ДополнительныеРеквизиты(Команда) + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда + МодульУправлениеСвойствамиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеСвойствамиКлиент"); + МодульУправлениеСвойствамиКлиент.ОткрытьСписокСвойств(Истина); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ДополнительныеСведения(Команда) + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда + МодульУправлениеСвойствамиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеСвойствамиКлиент"); + МодульУправлениеСвойствамиКлиент.ОткрытьСписокСвойств(); + КонецЕсли; + +КонецПроцедуры + &НаКлиенте Процедура НастроитьХранениеИсторииИзменений(Команда) @@ -203,6 +216,12 @@ КонецПроцедуры +&НаКлиенте +Процедура РегиональныеНастройки(Команда) + ПараметрыФормы = Новый Структура("Источник", "ПанельАдминистрированияБСП"); + ОткрытьФорму("ОбщаяФорма.РегиональныеНастройки", ПараметрыФормы); +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -294,22 +313,6 @@ Функция СохранитьЗначениеРеквизита(РеквизитПутьКДанным) // Сохранение значений реквизитов, не связанных с константами напрямую (в отношении один-к-одному). - Если РеквизитПутьКДанным = "ЧасовойПоясПрограммы" Тогда - Если ЧасовойПоясПрограммы <> ПолучитьЧасовойПоясИнформационнойБазы() Тогда - УстановитьПривилегированныйРежим(Истина); - Попытка - УстановитьМонопольныйРежим(Истина); - УстановитьЧасовойПоясИнформационнойБазы(ЧасовойПоясПрограммы); - УстановитьМонопольныйРежим(Ложь); - Исключение - УстановитьМонопольныйРежим(Ложь); - ВызватьИсключение; - КонецПопытки; - УстановитьПривилегированныйРежим(Ложь); - УстановитьЧасовойПоясСеанса(ЧасовойПоясПрограммы); - КонецЕсли; - Возврат ""; - КонецЕсли; ЧастиИмени = СтрРазделить(РеквизитПутьКДанным, "."); Если ЧастиИмени.Количество() <> 2 Тогда @@ -338,13 +341,20 @@ Если (РеквизитПутьКДанным = "НаборКонстант.ИспользоватьДополнительныеРеквизитыИСведения" Или РеквизитПутьКДанным = "") И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы( - Элементы, "ГруппаДополнительныеРеквизитыИСведенияПрочиеНастройки", - "Доступность", НаборКонстант.ИспользоватьДополнительныеРеквизитыИСведения); + Элементы.ГруппаДополнительныеРеквизитыИлиСведения.Доступность = + НаборКонстант.ИспользоватьДополнительныеРеквизитыИСведения; + КонецЕсли; + + Если (РеквизитПутьКДанным = "ХранитьИсториюИзменений" Или РеквизитПутьКДанным = "") + И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВерсионированиеОбъектов") Тогда - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы( - Элементы, "ГруппаДополнительныеРеквизитыИлиСведения", - "Доступность", НаборКонстант.ИспользоватьДополнительныеРеквизитыИСведения); + Элементы.НастроитьХранениеИсторииИзменений.Доступность = ХранитьИсториюИзменений; + КонецЕсли; + + Если (РеквизитПутьКДанным = "ИспользоватьПолнотекстовыйПоиск" Или РеквизитПутьКДанным = "") + И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПолнотекстовыйПоиск") Тогда + + Элементы.НастроитьПолнотекстовыйПоиск.Доступность = ИспользоватьПолнотекстовыйПоиск; КонецЕсли; Если (РеквизитПутьКДанным = "НаборКонстант.ИспользоватьЭлектронныеПодписи" diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Органайзер/Form.form b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Органайзер/Form.form index 25bd20ea8..02b7d94f5 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Органайзер/Form.form +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Органайзер/Form.form @@ -1251,7 +1251,7 @@ Hyperlink - Catalog.ШаблоныСообщений.StandardCommand.OpenList + Form.Command.ШаблоныСообщений Normal Auto true @@ -1464,7 +1464,7 @@ Hyperlink - InformationRegister.ИсполнителиЗадач.Command.РолиИИсполнителиЗадач + Form.Command.РолиИИсполнителиЗадач Normal Auto true @@ -2651,6 +2651,46 @@ DontUse Auto + + ШаблоныСообщений + + <key>ru</key> + <value>Шаблоны сообщений</value> + + 3 + + true + + + + ШаблоныСообщений + + + Auto + Auto + + + РолиИИсполнителиЗадач + + <key>ru</key> + <value>Роли и исполнители задач</value> + + 4 + + ru + Роли и исполнители задач + + + true + + + + РолиИИсполнителиЗадач + + + Auto + Auto + diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Органайзер/Module.bsl b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Органайзер/Module.bsl index 2815f285b..070586b05 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Органайзер/Module.bsl +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Органайзер/Module.bsl @@ -157,6 +157,26 @@ #Область ОбработчикиКомандФормы +&НаКлиенте +Процедура ШаблоныСообщений(Команда) + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ШаблоныСообщений") Тогда + МодульШаблоныСообщенийКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ШаблоныСообщенийКлиент"); + МодульШаблоныСообщенийКлиент.ОткрытьСписокШаблонов(); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура РолиИИсполнителиЗадач(Команда) + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.БизнесПроцессыИЗадачи") Тогда + МодульБизнесПроцессыИЗадачиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("БизнесПроцессыИЗадачиКлиент"); + МодульБизнесПроцессыИЗадачиКлиент.ОткрытьСписокРолейИИсполнителейЗадач(); + КонецЕсли; + +КонецПроцедуры + &НаКлиенте Процедура МониторингЗадачНастроитьРасписание(Команда) Диалог = Новый ДиалогРасписанияРегламентногоЗадания(МониторингЗадачРасписание); @@ -290,6 +310,12 @@ КонецЕсли; + Если (РеквизитПутьКДанным = "НаборКонстант.ИспользоватьШаблоныСообщений" ИЛИ РеквизитПутьКДанным = "") + И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ШаблоныСообщений") Тогда + + Элементы.ГруппаНастройкаШаблоныСообщений.Доступность = НаборКонстант.ИспользоватьШаблоныСообщений; + КонецЕсли; + Если (РеквизитПутьКДанным = "НаборКонстант.ИспользоватьБизнесПроцессыИЗадачи" ИЛИ РеквизитПутьКДанным = "") И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.БизнесПроцессыИЗадачи") Тогда diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПечатныеФормыОтчетыИОбработки/Form.form b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПечатныеФормыОтчетыИОбработки/Form.form index e32a55992..69230a930 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПечатныеФормыОтчетыИОбработки/Form.form +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПечатныеФормыОтчетыИОбработки/Form.form @@ -899,7 +899,7 @@ Hyperlink - Catalog.ДополнительныеОтчетыИОбработки.StandardCommand.OpenList + Form.Command.ОткрытьДополнительныеОтчетыИОбработки Normal Auto true @@ -1060,6 +1060,24 @@ true + + ОткрытьДополнительныеОтчетыИОбработки + + <key>ru</key> + <value>Дополнительные отчеты и обработки</value> + + 1 + + true + + + + ДополнительныеОтчетыИОбработки + + + Auto + Auto + diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПечатныеФормыОтчетыИОбработки/Module.bsl b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПечатныеФормыОтчетыИОбработки/Module.bsl index edbaf3da8..c9939f50b 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПечатныеФормыОтчетыИОбработки/Module.bsl +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПечатныеФормыОтчетыИОбработки/Module.bsl @@ -64,6 +64,21 @@ #КонецОбласти +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ДополнительныеОтчетыИОбработки(Команда) + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки") Тогда + МодульДополнительныеОтчетыИОбработкиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ДополнительныеОтчетыИОбработкиКлиент"); + МодульДополнительныеОтчетыИОбработкиКлиент.ОткрытьСписокДополнительныхОтчетовИОбработок(); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + + #Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/СинхронизацияДанных/Form.form b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/СинхронизацияДанных/Form.form index a2bfd580a..482833644 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/СинхронизацияДанных/Form.form +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/СинхронизацияДанных/Form.form @@ -228,7 +228,7 @@ Hyperlink - CommonCommand.НастройкиСинхронизацииДанных + Form.Command.НастройкиСинхронизацииДанных Normal Auto true @@ -1169,6 +1169,28 @@ Auto Auto + + НастройкиСинхронизацииДанных + + <key>ru</key> + <value>Настройки синхронизации данных</value> + + 2 + + ru + Настройки синхронизации данных + + + true + + + + НастройкиСинхронизацииДанных + + + Auto + Auto + diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/СинхронизацияДанных/Module.bsl b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/СинхронизацияДанных/Module.bsl index 4ec4bd8e1..afab307d2 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/СинхронизацияДанных/Module.bsl +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/СинхронизацияДанных/Module.bsl @@ -112,7 +112,7 @@ Элементы.ПрефиксУзлаРаспределеннойИнформационнойБазы.ОбновитьТекстРедактирования(); Если ФоновоеЗадание <> Неопределено Тогда - ТекстОшибки = НСтр("ru='Не удалось изменить префикс. + ТекстОшибки = НСтр("ru = 'Не удалось изменить префикс. |См. подробности в журнале регистрации.'"); ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстОшибки); КонецЕсли; @@ -146,6 +146,16 @@ #Область ОбработчикиКомандФормы +&НаКлиенте +Процедура НастройкиСинхронизацииДанных(Команда) + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда + МодульОбменДаннымиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ОбменДаннымиКлиент"); + МодульОбменДаннымиКлиент.ОткрытьНастройкиСинхронизацииДанных(); + КонецЕсли; + +КонецПроцедуры + &НаКлиенте Процедура НастроитьДатыЗапретаЗагрузки(Команда) diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Форма/Module.bsl index f16d97a79..0cffaf54a 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Форма/Module.bsl @@ -11,7 +11,7 @@ &НаКлиенте Процедура ПриОткрытии(Отказ) Отказ = Истина; - ПоказатьПредупреждение(, НСтр("ru='Обработка не предназначена для непосредственного использования.'")); + ПоказатьПредупреждение(, НСтр("ru = 'Обработка не предназначена для непосредственного использования.'")); КонецПроцедуры #КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСПВМоделиСервиса/Forms/СинхронизацияДанныхДляАдминистратораСервиса/Form.form b/SSL/src/DataProcessors/ПанельАдминистрированияБСПВМоделиСервиса/Forms/СинхронизацияДанныхДляАдминистратораСервиса/Form.form index a007ee04e..f7f122e06 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСПВМоделиСервиса/Forms/СинхронизацияДанныхДляАдминистратораСервиса/Form.form +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСПВМоделиСервиса/Forms/СинхронизацияДанныхДляАдминистратораСервиса/Form.form @@ -652,14 +652,6 @@ ru Общие параметры для всех областей данных - - System.DefaultGUIFont - 11.0 - true - false - false - false - 43 ОбщиеПараметрыДляВсехОбластейДанныхExtendedTooltip @@ -1123,9 +1115,6 @@ true true Normal - - true -
    diff --git a/SSL/src/DataProcessors/ПереносФайловВТома/Commands/ПереносФайловВТома/CommandModule.bsl b/SSL/src/DataProcessors/ПереносФайлов/Commands/ПереносФайлов/CommandModule.bsl similarity index 97% rename from SSL/src/DataProcessors/ПереносФайловВТома/Commands/ПереносФайловВТома/CommandModule.bsl rename to SSL/src/DataProcessors/ПереносФайлов/Commands/ПереносФайлов/CommandModule.bsl index 352f49d64..3606fb168 100644 --- a/SSL/src/DataProcessors/ПереносФайловВТома/Commands/ПереносФайловВТома/CommandModule.bsl +++ b/SSL/src/DataProcessors/ПереносФайлов/Commands/ПереносФайлов/CommandModule.bsl @@ -10,7 +10,7 @@ &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) - ОткрытьФорму("Обработка.ПереносФайловВТома.Форма", + ОткрытьФорму("Обработка.ПереносФайлов.Форма", Новый Структура, ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно); diff --git a/SSL/src/DataProcessors/ПереносФайлов/Forms/Форма/Form.form b/SSL/src/DataProcessors/ПереносФайлов/Forms/Форма/Form.form new file mode 100644 index 000000000..0eded1ed3 --- /dev/null +++ b/SSL/src/DataProcessors/ПереносФайлов/Forms/Форма/Form.form @@ -0,0 +1,1310 @@ + + + + Действие + 1 + + <key>ru</key> + <value>Перенести файлы</value> + + true + true + + true + + + Действие + + Top + + OnChange + ДействиеПриИзменении + + + ДействиеРасширеннаяПодсказка + 3 + Label + true + true + + Left + + + + ДействиеКонтекстноеМеню + 2 + true + + RadioButtonField + Enter + true + Left + true + + RadioButtons + 1 + + + ru + Между томами на диске + + + ПеренестиМеждуТомами + + + + + ru + Из информационной базы в тома на диске + + + ПеренестиВТома + + + + + ru + Из томов на диске в информационную базу + + + ПеренестиВБазу + + + Vertical + + + + Настройки + 4 + + НастройкиПриемника + 6 + + ПереноситьВТом + 8 + + <key>ru</key> + <value>В указанный том:</value> + + true + true + + true + + + ПереноситьВТом + + Right + + ПереноситьВТомРасширеннаяПодсказка + 10 + Label + true + true + + Left + + + + ПереноситьВТомКонтекстноеМеню + 9 + true + + CheckBoxField + Enter + true + Left + true + + + + ТомХраненияПриемник + 11 + true + true + + true + + + ТомХраненияПриемник + + None + + OnChange + ТомХраненияПриемникПриИзменении + + + ТомХраненияПриемникРасширеннаяПодсказка + 13 + Label + true + true + + Left + + + + ТомХраненияПриемникКонтекстноеМеню + 12 + true + + InputField + Enter + true + Left + true + + 35 + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Настройки приемника</value> + + + НастройкиПриемникаРасширеннаяПодсказка + 7 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + Auto + Auto + + + + НастройкиИсточника + 14 + + ПереноситьИзТома + 16 + + <key>ru</key> + <value>Из указанного тома:</value> + + true + true + + true + + + ПереноситьИзТома + + Right + + ПереноситьИзТомаРасширеннаяПодсказка + 18 + Label + true + true + + Left + + + + ПереноситьИзТомаКонтекстноеМеню + 17 + true + + CheckBoxField + Enter + true + Left + true + + + + ТомХраненияИсточник + 19 + true + true + + true + + + ТомХраненияИсточник + + None + + OnChange + ТомХраненияИсточникПриИзменении + + + ТомХраненияИсточникРасширеннаяПодсказка + 21 + Label + true + true + + Left + + + + ТомХраненияИсточникКонтекстноеМеню + 20 + true + + InputField + Enter + true + Left + true + + 35 + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Настройки источника</value> + + + НастройкиИсточникаРасширеннаяПодсказка + 15 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + Auto + Auto + + + + НастройкиВладельца + 22 + + ПереноситьФайлыВладельца + 24 + + <key>ru</key> + <value>Файлы указанного владельца:</value> + + true + true + + true + + + ПереноситьФайлыВладельца + + Right + + ПереноситьФайлыВладельцаРасширеннаяПодсказка + 26 + Label + true + true + + Left + + + + ПереноситьФайлыВладельцаКонтекстноеМеню + 25 + true + + CheckBoxField + Enter + true + Left + true + + + + ВладелецФайлов + 27 + true + true + + true + + + ВладелецФайлов + + None + + OnChange + ВладелецФайловПриИзменении + + + ВладелецФайловРасширеннаяПодсказка + 29 + Label + true + true + + Left + + + + ВладелецФайловКонтекстноеМеню + 28 + true + + InputField + Enter + true + Left + true + + 35 + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Настройки владельца</value> + + + НастройкиВладельцаРасширеннаяПодсказка + 23 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + Auto + Auto + + + + НастройкиДатыСоздания + 30 + + ПереноситьПоДатеСоздания + 32 + + <key>ru</key> + <value>Созданные:</value> + + true + true + + true + + + ПереноситьПоДатеСоздания + + Right + + ПереноситьПоДатеСозданияРасширеннаяПодсказка + 34 + Label + true + true + + Left + + + + ПереноситьПоДатеСозданияКонтекстноеМеню + 33 + true + + CheckBoxField + Enter + true + Left + true + + + + НастройкиУточненияДаты + 35 + + УточнениеДатыСоздания + 37 + true + true + + true + + + УточнениеДатыСоздания + + None + + УточнениеДатыСозданияРасширеннаяПодсказка + 39 + Label + true + true + + Left + + + + УточнениеДатыСозданияКонтекстноеМеню + 38 + true + + InputField + Enter + true + Left + true + + 5 + 5 + true + true + true + true + true + + + до + + + + + после + + + Normal + + + + ДатаСоздания + 40 + true + true + + true + + + ДатаСоздания + + None + + ДатаСозданияРасширеннаяПодсказка + 42 + Label + true + true + + Left + + + + ДатаСозданияКонтекстноеМеню + 41 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Настройки уточнения даты</value> + + + НастройкиУточненияДатыРасширеннаяПодсказка + 36 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Настройки даты создания</value> + + + НастройкиДатыСозданияРасширеннаяПодсказка + 31 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + Auto + Auto + + + + НастройкиРасширений + 43 + + ПереноситьПоРасширению + 45 + + <key>ru</key> + <value>С указанным расширением:</value> + + true + true + + true + + + ПереноситьПоРасширению + + Right + + ПереноситьПоРасширениюРасширеннаяПодсказка + 47 + Label + true + true + + Left + + + + ПереноситьПоРасширениюКонтекстноеМеню + 46 + true + + CheckBoxField + Enter + true + Left + true + + + + РасширенияФайлов + 48 + true + true + + true + + + РасширенияФайлов + + None + + OnChange + РасширенияФайловПриИзменении + + + РасширенияФайловРасширеннаяПодсказка + 50 + Label + true + true + + Left + + + + РасширенияФайловКонтекстноеМеню + 49 + true + + InputField + Enter + true + Left + true + + + ChoiceProcessing + РасширенияФайловОбработкаВыбора + + 35 + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Настройки расширений</value> + + + НастройкиРасширенийРасширеннаяПодсказка + 44 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + Auto + Auto + + + + НастройкиДополнительныхПравил + 51 + + ПереноситьПоУсловию + 53 + + <key>ru</key> + <value>По дополнительным условиям:</value> + + true + true + + true + + + ПереноситьПоУсловию + + Right + + ПереноситьПоУсловиюРасширеннаяПодсказка + 55 + Label + true + true + + Left + + + + ПереноситьПоУсловиюКонтекстноеМеню + 54 + true + + CheckBoxField + Enter + true + Left + true + + + + ДополнительныеУсловияНастройкиОтбор + 56 + true + true + + true + + + ДополнительныеУсловия.Settings.Filter + + None + + ДополнительныеУсловияНастройкиОтборРасширеннаяПодсказка + 58 + Label + true + true + + Left + + + + ДополнительныеУсловияНастройкиОтборКонтекстноеМеню + 57 + true + + InputField + Enter + true + Left + true + + 35 + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Настройки дополнительных правил</value> + + + НастройкиДополнительныхПравилРасширеннаяПодсказка + 52 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Настройки</value> + + + НастройкиРасширеннаяПодсказка + 5 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + auto + Auto + Auto + + + Bottom + true + + ФормаКоманднаяПанель + -1 + + ФормаВыполнитьПеренос + 59 + true + true + + true + + + ФормаВыполнитьПереносРасширеннаяПодсказка + 60 + Label + true + true + + Left + + + Form.Command.ВыполнитьПеренос + Auto + true + true + true + UserCmds + Auto + + + ФормаЗакрыть + 61 + + <key>ru</key> + <value>Отмена</value> + + true + true + + true + + + ФормаЗакрытьРасширеннаяПодсказка + 62 + Label + true + true + + Left + + + Form.StandardCommand.Close + Normal + Auto + true + true + UserCmds + Auto + + Right + + + OnOpen + ПриОткрытии + + + OnCreateAtServer + ПриСозданииНаСервере + + LockOwner + 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 + + Boolean + + + true + + + true + + + + ТомХраненияПриемник + + <key>ru</key> + <value>Том хранения приемник</value> + + 4 + + CatalogRef.ТомаХраненияФайлов + + + true + + + true + + + + ПереноситьИзТома + + <key>ru</key> + <value>Переносить из тома</value> + + 5 + + Boolean + + + true + + + true + + + + ТомХраненияИсточник + + <key>ru</key> + <value>Том хранения источник</value> + + 6 + + CatalogRef.ТомаХраненияФайлов + + + true + + + true + + + + ПереноситьФайлыВладельца + + <key>ru</key> + <value>Переносить файлы владельца</value> + + 7 + + Boolean + + + true + + + true + + + + ВладелецФайлов + + <key>ru</key> + <value>Владелец файлов</value> + + 8 + + String + + 250 + + + + true + + + true + + + + ПереноситьПоДатеСоздания + + <key>ru</key> + <value>Переносить по дате создания</value> + + 9 + + Boolean + + + true + + + true + + + + ДатаСоздания + + <key>ru</key> + <value>Дата создания</value> + + 10 + + Date + + Date + + + + true + + + true + + + + УточнениеДатыСоздания + + <key>ru</key> + <value>Уточнение даты создания</value> + + 11 + + String + + + + true + + + true + + + + ПереноситьПоРасширению + + <key>ru</key> + <value>Переносить по расширению</value> + + 12 + + Boolean + + + true + + + true + + + + РасширенияФайлов + + <key>ru</key> + <value>Расширения файлов</value> + + 13 + + String + + + + true + + + true + + + + ПереноситьПоУсловию + + <key>ru</key> + <value>Переносить по условию</value> + + 14 + + Boolean + + + true + + + true + + + + ДополнительныеУсловия + 15 + + DataCompositionSettingsComposer + + + true + + + true + + + + КоличествоТомовХранения + 16 + + Number + + 5 + true + + + + true + + + true + + + + ХранитьФайлыВТомахНаДиске + 17 + + Boolean + + + true + + + true + + + + ПеренесеноФайлов + 19 + + Number + + 10 + true + + + + true + + + true + + + + ФайловКПереносу + 20 + + Number + + 10 + true + + + + true + + + true + + + + ВыполнитьПеренос + + <key>ru</key> + <value>Перенести</value> + + 1 + + ru + Выполнить перенос файлов + + + true + + + + ВыполнитьПеренос + + + DontUse + Auto + + + + + + +
    diff --git a/SSL/src/DataProcessors/ПереносФайлов/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ПереносФайлов/Forms/Форма/Module.bsl new file mode 100644 index 000000000..97ddb47bb --- /dev/null +++ b/SSL/src/DataProcessors/ПереносФайлов/Forms/Форма/Module.bsl @@ -0,0 +1,647 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2019, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + УточнениеДатыСоздания = "до"; + ИнициализироватьДополнительныеУсловия(); + ЗаполнитьСписокВозможныхВладельцев(Элементы.ВладелецФайлов.СписокВыбора); + РаботаСФайламиСлужебный.ЗаполнитьСписокТипамиФайлов(Элементы.РасширенияФайлов.СписокВыбора); + + КоличествоТомовХранения = КоличествоТомовХранения(); + ХранитьФайлыВТомахНаДиске = РаботаСФайламиВТомахСлужебный.ХранитьФайлыВТомахНаДиске(); + + Если Не ХранитьФайлыВТомахНаДиске + И КоличествоТомовХранения > 0 Тогда + + Действие = "ПеренестиВБазу"; + Элементы.Действие.Доступность = Ложь; + Иначе + Действие = ?(КоличествоТомовХранения = 1, "ПеренестиВТома", "ПеренестиМеждуТомами"); + КонецЕсли; + + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда + ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Авто; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + Если КоличествоТомовХранения = 0 Тогда + ПоказатьПредупреждение(, НСтр("ru = 'Нет ни одного тома для размещения файлов.'")); + Отказ = Истина; + Возврат; + КонецЕсли; + + УправлениеЭлементамиФормы(); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы + +&НаКлиенте +Процедура ДействиеПриИзменении(Элемент) + + Если Действие = "ПеренестиМеждуТомами" + И КоличествоТомовХранения = 1 Тогда + + Действие = "ПеренестиВТома"; + ПоказатьПредупреждение(, НСтр("ru = 'Невозможно перенести файлы между томами: в настройках указан один том для размещения файлов.'")); + КонецЕсли; + + УправлениеЭлементамиФормы(); + +КонецПроцедуры + +&НаКлиенте +Процедура ТомХраненияПриемникПриИзменении(Элемент) + + ПереноситьВТом = ЗначениеЗаполнено(ТомХраненияПриемник); + +КонецПроцедуры + +&НаКлиенте +Процедура ТомХраненияИсточникПриИзменении(Элемент) + + ПереноситьИзТома = ЗначениеЗаполнено(ТомХраненияИсточник); + +КонецПроцедуры + +&НаКлиенте +Процедура ВладелецФайловПриИзменении(Элемент) + + ПереноситьФайлыВладельца = Не ПустаяСтрока(ВладелецФайлов); + +КонецПроцедуры + +&НаКлиенте +Процедура РасширенияФайловПриИзменении(Элемент) + + ПереноситьПоРасширению = Не ПустаяСтрока(РасширенияФайлов); + +КонецПроцедуры + +&НаКлиенте +Процедура РасширенияФайловОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + РасширенияФайлов = РаботаСФайламиСлужебныйКлиент.РасширенияПоТипуФайла(ВыбранноеЗначение); + ПереноситьПоРасширению = Истина; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ВыполнитьПеренос(Команда) + + Если Действие = "ПеренестиМеждуТомами" + И Не ЗначениеЗаполнено(ТомХраненияПриемник) Тогда + + ОбщегоНазначенияКлиент.СообщитьПользователю( + НСтр("ru = 'Не заполнен том, в который будут перенесены файлы.'"), , "ТомХраненияПриемник"); + Возврат; + + КонецЕсли; + + ОшибкиПереноса = ВыполнитьПереносНаСервере(); + + Если ОшибкиПереноса.Количество() = 0 Тогда + ПоказатьПредупреждение(, НСтр("ru = 'Завершен перенос файлов. Перенесено файлов" + + " " + Формат(ПеренесеноФайлов, "ЧН=0; ЧГ=") + ".'")); + Иначе + + Пояснение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Количество ошибок при переносе: %1'"), + ОшибкиПереноса.Количество()); + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("Пояснение", Пояснение); + ПараметрыФормы.Вставить("МассивФайловСОшибками", ОшибкиПереноса); + + ОткрытьФорму("Обработка.ПереносФайлов.Форма.ФормаОтчета", ПараметрыФормы); + + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаКлиенте +Процедура УправлениеЭлементамиФормы() + + ДоступностьИсточника = Истина; + ДоступностьПриемника = Истина; + + Если Действие = "ПеренестиМеждуТомами" Тогда + ПереноситьВТом = Истина; + ИначеЕсли Действие = "ПеренестиВТома" Тогда + ПереноситьИзТома = Ложь; + ТомХраненияИсточник = Неопределено; + ДоступностьИсточника = Ложь; + ИначеЕсли Действие = "ПеренестиВБазу" Тогда + ПереноситьВТом = Ложь; + ТомХраненияПриемник = Неопределено; + ДоступностьПриемника = Ложь; + КонецЕсли; + + Элементы.ПереноситьВТом.Доступность = Не Действие = "ПеренестиМеждуТомами"; + + Элементы.НастройкиИсточника.Доступность = ДоступностьИсточника; + Элементы.НастройкиПриемника.Доступность = ДоступностьПриемника; + +КонецПроцедуры + +&НаСервере +Функция ВыполнитьПереносНаСервере() + + УстановитьФлажкиКорректно(); + + ОшибкиПереноса = Новый Массив; + + Если Действие = "ПеренестиМеждуТомами" Тогда + ДействиеДляЖурнала = НСтр("ru = 'между томами на диске.'"); + ИначеЕсли Действие = "ПеренестиВТома" Тогда + ДействиеДляЖурнала = НСтр("ru = 'в тома на диске.'") + Иначе + ДействиеДляЖурнала = НСтр("ru = 'в информационную базу.'") + КонецЕсли; + + ЗаписьЖурналаРегистрации(НСтр("ru = 'Файлы.Начало переноса файлов.'", ОбщегоНазначения.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Информация,,, + НСтр("ru = 'Начат перенос файлов'") + " " + ДействиеДляЖурнала); + + ФайлыДляПереноса = ФайлыДляПереноса(); + ФайловКПереносу = ФайлыДляПереноса.Количество(); + + СвойстваТома = Новый Структура("ПутьКТому, МаксимальныйОбъемТома"); + СвойстваТома.Вставить("ТекущийОбъемТома", 0); + Если ПереноситьВТом Тогда + + СвойстваТома.ПутьКТому = РаботаСФайламиВТомахСлужебный.ПолныйПутьТома(ТомХраненияПриемник); + СвойстваТома.ТекущийОбъемТома = РаботаСФайламиВТомахСлужебный.ОбъемТома(ТомХраненияПриемник); + СвойстваТома.МаксимальныйОбъемТома = 1024*1024*ОбщегоНазначения.ЗначениеРеквизитаОбъекта( + ТомХраненияПриемник, "МаксимальныйРазмер"); + + КонецЕсли; + + ПеренесеноФайлов = 0; + Для Каждого Файл Из ФайлыДляПереноса Цикл + ПеренестиФайл(Файл, СвойстваТома, ОшибкиПереноса, ПеренесеноФайлов); + КонецЦикла; + + ТекстЗаписиОЗавершении = НСтр("ru = 'Завершен перенос файлов %1 + |Перенесено файлов: %2'"); + + ТекстЗаписиОЗавершении = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ТекстЗаписиОЗавершении, ДействиеДляЖурнала, Формат(ПеренесеноФайлов, "ЧН=0; ЧГ=")); + + Если ПеренесеноФайлов < ФайловКПереносу Тогда + + ТекстЗаписиОЗавершении = ТекстЗаписиОЗавершении + " + |" + НСтр("ru = 'Количество ошибок при переносе: %1'"); + + ТекстЗаписиОЗавершении = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ТекстЗаписиОЗавершении, Формат(ФайловКПереносу - ПеренесеноФайлов, "ЧН=0; ЧГ=")); + + КонецЕсли; + + ЗаписьЖурналаРегистрации(НСтр("ru = 'Файлы.Завершение переноса файлов.'", ОбщегоНазначения.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Информация,,, ТекстЗаписиОЗавершении); + + Возврат ОшибкиПереноса; + +КонецФункции + +&НаСервере +Процедура ИнициализироватьДополнительныеУсловия() + + СхемаКомпоновкиДанных = ПоместитьВоВременноеХранилище( + СхемаКомпоновки(), УникальныйИдентификатор); + ДополнительныеУсловия.Инициализировать( + Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных)); + + ДополнительныеУсловия.Восстановить(); + +КонецПроцедуры + +&НаСервере +Процедура УстановитьФлажкиКорректно() + + Если Не ЗначениеЗаполнено(ТомХраненияПриемник) Тогда + ПереноситьВТом = Ложь; + КонецЕсли; + + Если Не ЗначениеЗаполнено(ТомХраненияИсточник) Тогда + ПереноситьИзТома = Ложь; + КонецЕсли; + + Если Не ЗначениеЗаполнено(ДатаСоздания) Тогда + ПереноситьПоДатеСоздания = Ложь; + КонецЕсли; + + Если ПустаяСтрока(РасширенияФайлов) Тогда + ПереноситьПоРасширению = Ложь; + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ПеренестиФайл(Файл, СвойстваТома, ОшибкиПереноса, ПеренесеноФайлов) + + ФайлСсылка = Файл.Ссылка; + + НачатьТранзакцию(); + Попытка + + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировкиДанных = Блокировка.Добавить(ФайлСсылка.Метаданные().ПолноеИмя()); + ЭлементБлокировкиДанных.УстановитьЗначение("Ссылка", ФайлСсылка); + Блокировка.Заблокировать(); + + ФайлОбъект = ФайлСсылка.ПолучитьОбъект(); + ИмяДляЖурнала = ФайлОбъект.Наименование + "." + ФайлОбъект.Расширение; + Если ПереноситьВТом + И СвойстваТома.МаксимальныйОбъемТома > 0 + И СвойстваТома.ТекущийОбъемТома + ФайлОбъект.Размер > СвойстваТома.МаксимальныйОбъемТома Тогда + + ВызватьИсключение НСтр("ru = '""Превышен максимальный размер тома"".'"); + КонецЕсли; + + Если Действие = "ПеренестиМеждуТомами" Тогда + + СвойстваФайла = РаботаСФайламиВТомахСлужебный.СвойстваФайлаВТоме(); + ЗаполнитьЗначенияСвойств(СвойстваФайла, ФайлОбъект); + Если ТипЗнч(ФайлОбъект) = Тип("СправочникОбъект.ВерсииФайлов") Тогда + СвойстваФайла.ВладелецФайла = ОбщегоНазначения.ЗначениеРеквизитаОбъекта( + ФайлОбъект.Владелец, "ВладелецФайла"); + КонецЕсли; + + ТекущийПутьКФайлу = РаботаСФайламиВТомахСлужебный.ПолноеИмяФайлаВТоме(СвойстваФайла); + + ФайлНаДиске = Новый Файл(ТекущийПутьКФайлу); + Если Не ФайлНаДиске.Существует() Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Файл ""%1"" не найден.'"), ТекущийПутьКФайлу); + КонецЕсли; + + СвойстваФайла.Том = ТомХраненияПриемник; + СвойстваФайла.ПутьКФайлу = ""; + + НовыйПутьКФайлу = РаботаСФайламиВТомахСлужебный.ПолноеИмяФайлаВТоме(СвойстваФайла, ФайлОбъект.ДатаМодификацииУниверсальная); + КопироватьФайл(ТекущийПутьКФайлу, НовыйПутьКФайлу); + + РаботаСФайламиВТомахСлужебный.УдалитьФайл(ТекущийПутьКФайлу); + + ФайлОбъект.Том = ТомХраненияПриемник; + ФайлОбъект.ПутьКФайлу = Сред(НовыйПутьКФайлу, СтрДлина(СвойстваТома.ПутьКТому) + 1);; + + ИначеЕсли Действие = "ПеренестиВТома" Тогда + + ДанныеФайла = РаботаСФайлами.ДвоичныеДанныеФайла(ФайлСсылка); + РаботаСФайламиВТомахСлужебный.ДобавитьФайл(ФайлОбъект, ДанныеФайла, + ФайлОбъект.ДатаМодификацииУниверсальная, , ?(ПереноситьВТом, ТомХраненияПриемник, Неопределено)); + + РаботаСФайламиСлужебный.УдалитьЗаписьИзРегистраДвоичныеДанныеФайлов(ФайлСсылка); + + Иначе + + ДанныеФайла = РаботаСФайламиВТомахСлужебный.ДанныеФайла(ФайлСсылка); + РаботаСФайламиСлужебный.ЗаписатьФайлВИнформационнуюБазу(ФайлСсылка, ДанныеФайла); + + ПутьКФайлу = РаботаСФайламиВТомахСлужебный.ПолноеИмяФайлаВТоме( + Новый Структура("Том, ПутьКФайлу", ФайлОбъект.Том, ФайлОбъект.ПутьКФайлу)); + РаботаСФайламиВТомахСлужебный.УдалитьФайл(ПутьКФайлу); + + ФайлОбъект.Том = Неопределено; + ФайлОбъект.ПутьКФайлу = ""; + ФайлОбъект.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе; + + КонецЕсли; + + ПеренесеноФайлов = ПеренесеноФайлов + 1; + СвойстваТома.ТекущийОбъемТома = СвойстваТома.ТекущийОбъемТома + ФайлОбъект.Размер; + + ФайлОбъект.Записать(); + ЗафиксироватьТранзакцию(); + + Исключение + + ОтменитьТранзакцию(); + + ИнформацияОбОшибке = ИнформацияОбОшибке(); + + Ошибка = Новый Структура; + Ошибка.Вставить("ИмяФайла",ИмяДляЖурнала); + Ошибка.Вставить("Ошибка", КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); + Ошибка.Вставить("Версия", ФайлСсылка); + + ОшибкиПереноса.Добавить(Ошибка); + + ЗаписьЖурналаРегистрации(НСтр("ru = 'Файлы.Ошибка переноса файла.'", ОбщегоНазначения.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка,, ФайлСсылка, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'При переносе в том файла + |""%1"" + |возникла ошибка: + |""%2"".'"), + ИмяДляЖурнала, + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке))); + + КонецПопытки; + +КонецПроцедуры + +&НаСервере +Функция ФайлыДляПереноса() + + СхемаКомпоновкиДанных = СхемаКомпоновки(Ложь, + ?(ПереноситьФайлыВладельца И Не ПустаяСтрока(ВладелецФайлов), ВладелецФайлов, "")); + + КомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных; + КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию); + + ОтборПоДействию = ?(Действие = "ПеренестиВТома", + Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе, + Перечисления.ТипыХраненияФайлов.ВТомахНаДиске); + + ДобавитьНастройкуОтбора(КомпоновщикНастроек, "ТипХраненияФайла", + ВидСравненияКомпоновкиДанных.Равно, ОтборПоДействию); + + Если ПереноситьВТом Тогда + ДобавитьНастройкуОтбора(КомпоновщикНастроек, "Том", + ВидСравненияКомпоновкиДанных.НеРавно, ТомХраненияПриемник); + КонецЕсли; + + Если ПереноситьИзТома Тогда + ДобавитьНастройкуОтбора(КомпоновщикНастроек, "Том", + ВидСравненияКомпоновкиДанных.Равно, ТомХраненияИсточник); + КонецЕсли; + + Если ПереноситьПоДатеСоздания Тогда + + ДобавитьНастройкуОтбора(КомпоновщикНастроек, "ДатаСоздания", + ?(УточнениеДатыСоздания = "до", ВидСравненияКомпоновкиДанных.МеньшеИлиРавно, + ВидСравненияКомпоновкиДанных.БольшеИлиРавно), ДатаСоздания); + КонецЕсли; + + Если ПереноситьПоРасширению Тогда + + ОтборПоРасширению = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок( + РасширенияФайлов, " ", Истина, Истина); + + Для Каждого Расширение Из ОтборПоРасширению Цикл + Расширение = НРег(Расширение); + КонецЦикла; + + ДобавитьНастройкуОтбора(КомпоновщикНастроек, "Расширение", + ВидСравненияКомпоновкиДанных.ВСписке, ОтборПоРасширению); + + КонецЕсли; + + КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; + МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, + КомпоновщикНастроек.Настройки, , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений")); + + ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных; + ПроцессорКомпоновки.Инициализировать(МакетКомпоновкиДанных); + + ФайлыДляПереноса = Новый ТаблицаЗначений; + + ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений; + ПроцессорВывода.УстановитьОбъект(ФайлыДляПереноса); + ПроцессорВывода.Вывести(ПроцессорКомпоновки); + + Возврат ФайлыДляПереноса; + +КонецФункции + +&НаСервереБезКонтекста +Функция СхемаКомпоновки(ТолькоСправочникиФайлов = Истина, ВладелецФайлов = "") + + Если ТолькоСправочникиФайлов Тогда + ТекстЗапроса = ""; + Иначе + + Если Не ПустаяСтрока(ВладелецФайлов) Тогда + ПозицияРазделителя = СтрНайти(ВладелецФайлов, "."); + ТипВладельцаСтрокой = Лев(ВладелецФайлов, ПозицияРазделителя - 1) + + "Ссылка" + Сред(ВладелецФайлов, ПозицияРазделителя); + КонецЕсли; + + ТекстЗапроса = + "ВЫБРАТЬ + | ВерсииФайлов.Ссылка КАК Ссылка, + | ВерсииФайлов.Наименование КАК Наименование, + | ВерсииФайлов.ПометкаУдаления КАК ПометкаУдаления, + | ВерсииФайлов.Автор КАК Автор, + | ВерсииФайлов.Владелец.ВладелецФайла КАК ВладелецФайла, + | ВерсииФайлов.ДатаСоздания КАК ДатаСоздания, + | ВерсииФайлов.Владелец.Зашифрован КАК Зашифрован, + | ВерсииФайлов.Владелец.ПодписанЭП КАК ПодписанЭП, + | &Служебный КАК Служебный, + | ВерсииФайлов.Владелец.Изменил КАК Изменил, + | ВерсииФайлов.Размер КАК Размер, + | ВерсииФайлов.Расширение КАК Расширение, + | ВерсииФайлов.Том КАК Том, + | ВерсииФайлов.Владелец.ХранитьВерсии КАК ХранитьВерсии, + | ВерсииФайлов.ТипХраненияФайла КАК ТипХраненияФайла, + | ВерсииФайлов.СтатусИзвлеченияТекста КАК СтатусИзвлеченияТекста + |ИЗ + | Справочник.ВерсииФайлов КАК ВерсииФайлов"; + + ОтборПоВладельцуУстановлен = ПустаяСтрока(ВладелецФайлов); + ТипыМетаданныхВладельцевВерсий = Метаданные.Справочники.ВерсииФайлов.СтандартныеРеквизиты.Владелец.Тип; + Для Каждого ТипМетаданных Из ТипыМетаданныхВладельцевВерсий.Типы() Цикл + + МетаданныеВладельца = Метаданные.НайтиПоТипу(ТипМетаданных); + Если МетаданныеВладельца.Реквизиты.Найти("Служебный") <> Неопределено Тогда + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&Служебный", "ЕСТЬNULL(ВерсииФайлов.Владелец.Служебный, ЛОЖЬ)"); + Если ОтборПоВладельцуУстановлен Тогда + Прервать; + КонецЕсли; + + КонецЕсли; + + Если Не ОтборПоВладельцуУстановлен + И МетаданныеВладельца.Реквизиты.ВладелецФайла.Тип.СодержитТип(Тип(ТипВладельцаСтрокой)) Тогда + + ОтборПоВладельцуУстановлен = Истина; + ТекстЗапроса = ТекстЗапроса + " + |ГДЕ + | ВерсииФайлов.Владелец.ВладелецФайла ССЫЛКА " + ВладелецФайлов; + + КонецЕсли; + + КонецЦикла; + + Если Не ПустаяСтрока(ВладелецФайлов) + И Не ОтборПоВладельцуУстановлен Тогда + ТекстЗапроса = ""; + Иначе + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&Служебный", "ЛОЖЬ"); + КонецЕсли; + + КонецЕсли; + + ТекстПодзапроса = + "ВЫБРАТЬ + | СправочникФайлов.Ссылка, + | СправочникФайлов.Наименование, + | СправочникФайлов.ПометкаУдаления, + | СправочникФайлов.Автор, + | СправочникФайлов.ВладелецФайла, + | СправочникФайлов.ДатаСоздания, + | СправочникФайлов.Зашифрован, + | СправочникФайлов.ПодписанЭП, + | &Служебный, + | СправочникФайлов.Изменил, + | СправочникФайлов.Размер, + | СправочникФайлов.Расширение, + | СправочникФайлов.Том, + | СправочникФайлов.ХранитьВерсии, + | СправочникФайлов.ТипХраненияФайла, + | СправочникФайлов.СтатусИзвлеченияТекста + |ИЗ + | &ТаблицаФайлов КАК СправочникФайлов"; + + Если Не ПустаяСтрока(ВладелецФайлов) Тогда + + ТекстПодзапроса = ТекстПодзапроса + " + |ГДЕ + | СправочникФайлов.ВладелецФайла ССЫЛКА " + ВладелецФайлов; + + КонецЕсли; + + ТипыПрисоединенныхФайлов = Метаданные.ОпределяемыеТипы.ПрисоединенныйФайл.Тип.Типы(); + Для Каждого ТипФайла Из ТипыПрисоединенныхФайлов Цикл + + Если ТипФайла = Тип("СправочникСсылка.ВерсииФайлов") + Или ТипФайла = Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных") + Или (Не ТолькоСправочникиФайлов + И ТипыМетаданныхВладельцевВерсий.СодержитТип(ТипФайла)) Тогда + + Продолжить; + КонецЕсли; + + ОбъектМетаданных = Метаданные.НайтиПоТипу(ТипФайла); + Если Не ПустаяСтрока(ВладелецФайлов) Тогда + + ПозицияРазделителя = СтрНайти(ВладелецФайлов, "."); + ТипВладельцаСтрокой = Лев(ВладелецФайлов, ПозицияРазделителя - 1) + + "Ссылка" + Сред(ВладелецФайлов, ПозицияРазделителя); + + Если Не ОбъектМетаданных.Реквизиты.ВладелецФайла.Тип.СодержитТип(Тип(ТипВладельцаСтрокой)) Тогда + Продолжить; + КонецЕсли; + + КонецЕсли; + + ТекстЗапросаВладельца = СтрЗаменить(ТекстПодзапроса, "&ТаблицаФайлов", ОбъектМетаданных.ПолноеИмя()); + ТекстЗапросаВладельца = СтрЗаменить(ТекстЗапросаВладельца, "&Служебный", + ?(ОбъектМетаданных.Реквизиты.Найти("Служебный") <> Неопределено, "СправочникФайлов.Служебный", "ЛОЖЬ")); + + Если ОбъектМетаданных.Реквизиты.Найти("ВладелецФайла") = Неопределено Тогда + ВызватьИсключение ""; + КонецЕсли; + + ТекстЗапроса = ТекстЗапроса + + ?(ПустаяСтрока(ТекстЗапроса), "", " + | + |ОБЪЕДИНИТЬ ВСЕ + | + |") + ТекстЗапросаВладельца; + + КонецЦикла; + + СхемаКомпоновки = Новый СхемаКомпоновкиДанных; + + ИсточникДанных = СхемаКомпоновки.ИсточникиДанных.Добавить(); + ИсточникДанных.Имя = "ИсточникДанныхФайлы"; + ИсточникДанных.ТипИсточникаДанных = "Local"; + + НаборДанных = СхемаКомпоновки.НаборыДанных.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных")); + НаборДанных.Имя = "НаборДанныхФайлы"; + НаборДанных.Запрос = ТекстЗапроса; + НаборДанных.ИсточникДанных = ИсточникДанных.Имя; + + ГруппировкаКомпоновки = СхемаКомпоновки.НастройкиПоУмолчанию.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных")); + + ПолеГруппировки = ГруппировкаКомпоновки.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных")); + ПолеГруппировки.Поле = Новый ПолеКомпоновкиДанных("Ссылка"); + + ГруппировкаКомпоновки.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных")); + + СхемаКомпоновки.ПоляИтога.Очистить(); + + Возврат СхемаКомпоновки; + +КонецФункции + +&НаСервереБезКонтекста +Функция КоличествоТомовХранения() + + УстановитьПривилегированныйРежим(Истина); + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ИСТИНА КАК ЗначениеИстина + |ИЗ + | Справочник.ТомаХраненияФайлов КАК ТомаХраненияФайлов + |ГДЕ + | ТомаХраненияФайлов.ПометкаУдаления = ЛОЖЬ"; + + Возврат Запрос.Выполнить().Выгрузить().Количество(); + +КонецФункции + +&НаСервереБезКонтекста +Процедура ДобавитьНастройкуОтбора(КомпоновщикНастроек, ИмяПоля, ВидСравнения, Значение) + + Отбор = КомпоновщикНастроек.Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(ИмяПоля); + Отбор.ВидСравнения = ВидСравнения; + Отбор.ПравоеЗначение = Значение; + Отбор.Использование = Истина; + +КонецПроцедуры + +&НаСервереБезКонтекста +Процедура ЗаполнитьСписокВозможныхВладельцев(ВладельцыФайлов) + + ТипыВладельцев = Метаданные.ОпределяемыеТипы.ВладелецПрисоединенныхФайлов.Тип.Типы(); + Для Каждого ТипВладельца Из ТипыВладельцев Цикл + + Если ТипВладельца = Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных") Тогда + Продолжить; + КонецЕсли; + + ОбъектМетаданных = Метаданные.НайтиПоТипу(ТипВладельца); + ВладельцыФайлов.Добавить(ОбъектМетаданных.ПолноеИмя(), ОбъектМетаданных.Синоним); + + КонецЦикла; + + ВладельцыФайлов.СортироватьПоПредставлению(); + +КонецПроцедуры + +#КонецОбласти + diff --git a/SSL/src/DataProcessors/ПереносФайловВТома/Forms/ФормаОтчета/Form.form b/SSL/src/DataProcessors/ПереносФайлов/Forms/ФормаОтчета/Form.form similarity index 96% rename from SSL/src/DataProcessors/ПереносФайловВТома/Forms/ФормаОтчета/Form.form rename to SSL/src/DataProcessors/ПереносФайлов/Forms/ФормаОтчета/Form.form index 857440f90..e403e746f 100644 --- a/SSL/src/DataProcessors/ПереносФайловВТома/Forms/ФормаОтчета/Form.form +++ b/SSL/src/DataProcessors/ПереносФайлов/Forms/ФормаОтчета/Form.form @@ -41,11 +41,7 @@ true false - System.DefaultGUIFont - true - false - false - false + Style.ВажнаяНадписьШрифт
    diff --git a/SSL/src/DataProcessors/ПереносФайловВТома/Forms/ФормаОтчета/Module.bsl b/SSL/src/DataProcessors/ПереносФайлов/Forms/ФормаОтчета/Module.bsl similarity index 96% rename from SSL/src/DataProcessors/ПереносФайловВТома/Forms/ФормаОтчета/Module.bsl rename to SSL/src/DataProcessors/ПереносФайлов/Forms/ФормаОтчета/Module.bsl index bc1c96f5b..9c933b721 100644 --- a/SSL/src/DataProcessors/ПереносФайловВТома/Forms/ФормаОтчета/Module.bsl +++ b/SSL/src/DataProcessors/ПереносФайлов/Forms/ФормаОтчета/Module.bsl @@ -14,7 +14,7 @@ Пояснение = Параметры.Пояснение; ТабДок = Новый ТабличныйДокумент; - ТабМакет = Обработки.ПереносФайловВТома.ПолучитьМакет("МакетОтчета"); + ТабМакет = Обработки.ПереносФайлов.ПолучитьМакет("МакетОтчета"); ОбластьЗаголовок = ТабМакет.ПолучитьОбласть("Заголовок"); ОбластьЗаголовок.Параметры.Описание = НСтр("ru = 'Файлы с ошибками:'"); diff --git a/SSL/src/DataProcessors/ПереносФайловВТома/Help/ru.html b/SSL/src/DataProcessors/ПереносФайлов/Help/ru.html similarity index 100% rename from SSL/src/DataProcessors/ПереносФайловВТома/Help/ru.html rename to SSL/src/DataProcessors/ПереносФайлов/Help/ru.html diff --git a/SSL/src/DataProcessors/ПереносФайловВТома/Templates/МакетОтчета/Template.mxlx b/SSL/src/DataProcessors/ПереносФайлов/Templates/МакетОтчета/Template.mxlx similarity index 100% rename from SSL/src/DataProcessors/ПереносФайловВТома/Templates/МакетОтчета/Template.mxlx rename to SSL/src/DataProcessors/ПереносФайлов/Templates/МакетОтчета/Template.mxlx diff --git a/SSL/src/DataProcessors/ПереносФайловВТома/ПереносФайловВТома.mdo b/SSL/src/DataProcessors/ПереносФайлов/ПереносФайлов.mdo similarity index 84% rename from SSL/src/DataProcessors/ПереносФайловВТома/ПереносФайловВТома.mdo rename to SSL/src/DataProcessors/ПереносФайлов/ПереносФайлов.mdo index 5ed5cec11..45f7b1c80 100644 --- a/SSL/src/DataProcessors/ПереносФайловВТома/ПереносФайловВТома.mdo +++ b/SSL/src/DataProcessors/ПереносФайлов/ПереносФайлов.mdo @@ -4,12 +4,12 @@ - ПереносФайловВТома + ПереносФайлов ru - Перенос файлов в тома + Перенос файлов - DataProcessor.ПереносФайловВТома.Form.Форма + DataProcessor.ПереносФайлов.Form.Форма true @@ -46,10 +46,10 @@ - ПереносФайловВТома + ПереносФайлов ru - Перенос файлов в тома + Перенос файлов ActionsPanelTools Auto diff --git a/SSL/src/DataProcessors/ПереносФайловВТома/Forms/Форма/Form.form b/SSL/src/DataProcessors/ПереносФайловВТома/Forms/Форма/Form.form deleted file mode 100644 index a8df17230..000000000 --- a/SSL/src/DataProcessors/ПереносФайловВТома/Forms/Форма/Form.form +++ /dev/null @@ -1,447 +0,0 @@ - - - - ГруппаКомментарий - 5 - - ДекорацияИконка - 6 - - <key>ru</key> - <value>Декорация иконка</value> - - true - true - - true - - - ДекорацияИконкаExtendedTooltip - 22 - Label - true - true - - Left - - - - ДекорацияИконкаКонтекстноеМеню - 7 - true - - true - true - false - - - CommonPicture.Информация32 - - - - - ДекорацияИнфо - 8 - - <key>ru</key> - <value>Если в настройках программы указан тип хранения файлов "В томах на диске", -то рекомендуется перенести в тома все существующие файлы, хранящиеся в информационной базе. -Перенос файлов в тома может занять длительное время.</value> - - true - true - - true - - - ДекорацияИнфоExtendedTooltip - 23 - Label - true - true - - Left - - - - ДекорацияИнфоКонтекстноеМеню - 9 - true - - Label - true - 8 - false - false - - Style.ПоясняющийТекст - - - Left - - - true - true - - true - - - <key>ru</key> - <value>Комментарий</value> - - - ГруппаКомментарийExtendedTooltip - 21 - Label - true - true - - Left - - - UsualGroup - - HorizontalIfPossible - Auto - NormalSeparation - true - true - Auto - Auto - - - - ИнформацияКоличество - 1 - - <key>ru</key> - <value>Количество файлов к переносу</value> - - true - true - - true - - - ЧислоВерсийВБазе - - - ИнформацияКоличествоExtendedTooltip - 17 - Label - true - true - - Left - - - - ИнформацияКоличествоКонтекстноеМеню - 2 - true - - InputField - true - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - - - ГруппаРазмер - 12 - - РазмерВерсийВБазе - 10 - true - true - - true - - - РазмерВерсийВБазе - - - РазмерВерсийВБазеExtendedTooltip - 19 - Label - true - true - - Left - - - - РазмерВерсийВБазеКонтекстноеМеню - 11 - true - - InputField - true - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - - - ДекорацияМБ - 13 - - <key>ru</key> - <value>(Мб)</value> - - true - true - - true - - - ДекорацияМБExtendedTooltip - 20 - Label - true - true - - Left - - - - ДекорацияМБКонтекстноеМеню - 14 - true - - Label - true - - Left - - - true - true - - true - - - <key>ru</key> - <value>Размер</value> - - - ГруппаРазмерExtendedTooltip - 18 - Label - true - true - - Left - - - UsualGroup - - AlwaysHorizontal - Auto - true - true - Auto - Auto - - - Bottom - true - - ФормаКоманднаяПанель - -1 - - ФормаВыполнитьПереносФайловВТома - 3 - true - true - - true - - - ФормаВыполнитьПереносФайловВТомаExtendedTooltip - 15 - Label - true - true - - Left - - - Form.Command.ВыполнитьПереносВерсийВТома - Auto - true - true - true - UserCmds - Auto - - - ФормаОтмена - 4 - true - true - - true - - - ФормаОтменаExtendedTooltip - 16 - Label - true - true - - Left - - - Form.StandardCommand.Cancel - Normal - Auto - true - true - UserCmds - Auto - - Right - - - OnOpen - ПриОткрытии - - - OnCreateAtServer - ПриСозданииНаСервере - - LockOwner - true - true - true - Vertical - true - true - auto - true - - Объект - 1 - - DataProcessorObject.ПереносФайловВТома - - - true - - - true - -
    true
    -
    - - ЧислоВерсийВБазе - - <key>ru</key> - <value>Число версий в базе</value> - - 2 - - Number - - 10 - - - - true - - - true - - - - ТипХраненияВТомах - 3 - - EnumRef.ТипыХраненияФайлов - - - true - - - true - - - - РазмерВерсийВБазе - - <key>ru</key> - <value>Размер файлов в информационной базе</value> - - 4 - - Number - - 10 - - - - true - - - true - - - - ДополнительныеПараметры - 5 - - - true - - - true - - - - ВыполнитьПереносВерсийВТома - - <key>ru</key> - <value>Перенести файлы в тома</value> - - 1 - - ru - Выполнить перенос файлов в тома - - - true - - - - ВыполнитьПереносФайловВТома - - - DontUse - Auto - - - - - - -
    diff --git a/SSL/src/DataProcessors/ПереносФайловВТома/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ПереносФайловВТома/Forms/Форма/Module.bsl deleted file mode 100644 index d885ba622..000000000 --- a/SSL/src/DataProcessors/ПереносФайловВТома/Forms/Форма/Module.bsl +++ /dev/null @@ -1,461 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2019, ООО 1С-Софт -// Все права защищены. Эта программа и сопроводительные материалы предоставляются -// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) -// Текст лицензии доступен по ссылке: -// https://creativecommons.org/licenses/by/4.0/legalcode -/////////////////////////////////////////////////////////////////////////////////////////////////////// - -#Область ОбработчикиСобытийФормы - -&НаСервере -Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - - ЧислоВерсийВБазе = ЧислоВерсийВБазе(); - ТипХраненияВТомах = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске; - - РазмерВерсийВБазеВБайтах = РазмерВерсийВБазе(); - РазмерВерсийВБазе = РазмерВерсийВБазеВБайтах / 1048576; - - ДополнительныеПараметры = Новый Структура; - - ДополнительныеПараметры.Вставить( - "ПриОткрытииХранитьФайлыВТомахНаДиске", - РаботаСФайламиСлужебный.ХранениеФайловВТомахНаДиске()); - - ДополнительныеПараметры.Вставить( - "ПриОткрытииЕстьТомаХраненияФайлов", - РаботаСФайлами.ЕстьТомаХраненияФайлов()); - - Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда - Элементы.ДекорацияИконка.Видимость = Ложь; - ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Авто; - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ПриОткрытии(Отказ) - - Если НЕ ДополнительныеПараметры.ПриОткрытииХранитьФайлыВТомахНаДиске Тогда - ПоказатьПредупреждение(, НСтр("ru = 'Не установлен тип хранения файлов ""В томах на диске""'")); - Отказ = Истина; - Возврат; - КонецЕсли; - - Если НЕ ДополнительныеПараметры.ПриОткрытииЕстьТомаХраненияФайлов Тогда - ПоказатьПредупреждение(, НСтр("ru = 'Нет ни одного тома для размещения файлов'")); - Отказ = Истина; - Возврат; - КонецЕсли; - -КонецПроцедуры - -#КонецОбласти - -#Область ОбработчикиКомандФормы - -&НаКлиенте -Процедура ВыполнитьПереносФайловВТома(Команда) - - СвойстваХраненияФайлов = СвойстваХраненияФайлов(); - - Если СвойстваХраненияФайлов.ТипХраненияФайлов <> ТипХраненияВТомах Тогда - ПоказатьПредупреждение(, НСтр("ru = 'Не установлен тип хранения файлов ""В томах на диске""'")); - Возврат; - КонецЕсли; - - Если НЕ СвойстваХраненияФайлов.ЕстьТомаХраненияФайлов Тогда - ПоказатьПредупреждение(, НСтр("ru = 'Нет ни одного тома для размещения файлов'")); - Возврат; - КонецЕсли; - - Если ЧислоВерсийВБазе = 0 Тогда - ПоказатьПредупреждение(, НСтр("ru = 'Нет ни одного файла в информационной базе'")); - Возврат; - КонецЕсли; - - ТекстВопроса = НСтр("ru = 'Выполнить перенос файлов в информационной базе в тома хранения файлов? - | - |Эта операция может занять продолжительное время.'"); - Обработчик = Новый ОписаниеОповещения("ВыполнитьПереносФайловВТомаЗавершение", ЭтотОбъект); - ПоказатьВопрос(Обработчик, ТекстВопроса, РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Да); -КонецПроцедуры - -#КонецОбласти - -#Область СлужебныеПроцедурыИФункции - -&НаКлиенте -Процедура ВыполнитьПереносФайловВТомаЗавершение(Ответ, ПараметрыВыполнения) Экспорт - Если Ответ <> КодВозвратаДиалога.Да Тогда - Возврат; - КонецЕсли; - - МассивВерсий = ВерсииВБазе(); - НомерЦикла = 1; - ЧислоПеренесенных = 0; - - ЧислоВерсийВПакете = 10; - ПакетВерсий = Новый Массив; - - МассивФайловСОшибками = Новый Массив; - ОбработкаПрервана = Ложь; - - Для Каждого ВерсияСтруктура Из МассивВерсий Цикл - - ПакетВерсий.Добавить(ВерсияСтруктура); - - Если ПакетВерсий.Количество() >= ЧислоВерсийВПакете Тогда - ЧислоПеренесенныхВПакете = ПеренестиМассивВерсийВТом(ПакетВерсий, МассивФайловСОшибками); - - Если ЧислоПеренесенныхВПакете = 0 И ПакетВерсий.Количество() = ЧислоВерсийВПакете Тогда - ОбработкаПрервана = Истина; // Весь пакет не смогли перенести - прекращаем операцию. - Прервать; - КонецЕсли; - - ЧислоПеренесенных = ЧислоПеренесенных + ЧислоПеренесенныхВПакете; - ПакетВерсий.Очистить(); - - КонецЕсли; - - НомерЦикла = НомерЦикла + 1; - КонецЦикла; - - Если ПакетВерсий.Количество() <> 0 Тогда - ЧислоПеренесенныхВПакете = ПеренестиМассивВерсийВТом(ПакетВерсий, МассивФайловСОшибками); - - Если ЧислоПеренесенныхВПакете = 0 Тогда - ОбработкаПрервана = Истина; // Весь пакет не смогли перенести - прекращаем операцию. - КонецЕсли; - - ЧислоПеренесенных = ЧислоПеренесенных + ЧислоПеренесенныхВПакете; - ПакетВерсий.Очистить(); - КонецЕсли; - - ЧислоВерсийВБазе = ЧислоВерсийВБазе(); - РазмерВерсийВБазеВБайтах = РазмерВерсийВБазе(); - РазмерВерсийВБазе = РазмерВерсийВБазеВБайтах / 1048576; - - Если ЧислоПеренесенных <> 0 Тогда - ТекстПредупреждения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Завершен перенос файлов в тома. - |Перенесено файлов: %1'"), - ЧислоПеренесенных); - ПоказатьПредупреждение(, ТекстПредупреждения); - КонецЕсли; - - Если МассивФайловСОшибками.Количество() <> 0 Тогда - - Пояснение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Количество ошибок при переносе: %1'"), - МассивФайловСОшибками.Количество()); - - Если ОбработкаПрервана Тогда - Пояснение = НСтр("ru = 'Не удалось перенести ни одного файла из пакета. - |Перенос прерван.'"); - КонецЕсли; - - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("Пояснение", Пояснение); - ПараметрыФормы.Вставить("МассивФайловСОшибками", МассивФайловСОшибками); - - ОткрытьФорму("Обработка.ПереносФайловВТома.Форма.ФормаОтчета", ПараметрыФормы); - - КонецЕсли; - - Закрыть(); - -КонецПроцедуры - -&НаСервере -Функция РазмерВерсийВБазе() - - УстановитьПривилегированныйРежим(Истина); - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | ЕСТЬNULL(СУММА(ВерсииФайлов.Размер), 0) КАК Размер - |ИЗ - | Справочник.ВерсииФайлов КАК ВерсииФайлов - |ГДЕ - | ВерсииФайлов.ТипХраненияФайла = Значение(Перечисление.ТипыХраненияФайлов.ВИнформационнойБазе)"; - - Для Каждого ТипСправочника Из Метаданные.ОпределяемыеТипы.ПрисоединенныйФайл.Тип.Типы() Цикл - ПолноеИмяСправочника = Метаданные.НайтиПоТипу(ТипСправочника).ПолноеИмя(); - Если ПолноеИмяСправочника <> "Справочник.Файлы" И ПолноеИмяСправочника <> "Справочник.ВерсииФайлов" Тогда - Запрос.Текст = Запрос.Текст + - " - |ОБЪЕДИНИТЬ ВСЕ - | - |ВЫБРАТЬ - | ЕСТЬNULL(СУММА(ВерсииФайлов.Размер), 0) КАК Размер - |ИЗ - | " + ПолноеИмяСправочника + " КАК ВерсииФайлов - |ГДЕ - | ВерсииФайлов.ТипХраненияФайла = ЗНАЧЕНИЕ(Перечисление.ТипыХраненияФайлов.ВИнформационнойБазе)"; - КонецЕсли; - КонецЦикла; - - Результат = Запрос.Выполнить(); - Если Результат.Пустой() Тогда - Возврат 0; - КонецЕсли; - - Выборка = Результат.Выбрать(); - Выборка.Следующий(); - Возврат Выборка.Размер; - -КонецФункции - -&НаСервере -Функция ЧислоВерсийВБазе() - - УстановитьПривилегированныйРежим(Истина); - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | КОЛИЧЕСТВО(*) КАК Количество - |ИЗ - | РегистрСведений.ДвоичныеДанныеФайлов КАК ДвоичныеДанныеФайлов"; - Запрос.УстановитьПараметр("ТипХраненияФайла", Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе); - - Результат = Запрос.Выполнить(); - Если Результат.Пустой() Тогда - Возврат 0; - КонецЕсли; - - Выборка = Результат.Выбрать(); - Выборка.Следующий(); - Возврат Выборка.Количество; - -КонецФункции - -&НаСервере -Функция ВерсииВБазе() - - МассивВерсий = Новый Массив; - - УстановитьПривилегированныйРежим(Истина); - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | ВерсииФайлов.Ссылка КАК Ссылка, - | ВерсииФайлов.Наименование КАК ПолноеНаименование, - | ВерсииФайлов.Размер КАК Размер - |ИЗ - | Справочник.ВерсииФайлов КАК ВерсииФайлов - |ГДЕ - | ВерсииФайлов.ТипХраненияФайла = ЗНАЧЕНИЕ(Перечисление.ТипыХраненияФайлов.ВИнформационнойБазе) - |"; - - Для Каждого ТипСправочника Из Метаданные.ОпределяемыеТипы.ПрисоединенныйФайл.Тип.Типы() Цикл - ПолноеИмяСправочника = Метаданные.НайтиПоТипу(ТипСправочника).ПолноеИмя(); - Если ПолноеИмяСправочника <> "Справочник.Файлы" И ПолноеИмяСправочника <> "Справочник.ВерсииФайлов" Тогда - Запрос.Текст = Запрос.Текст + - " - |ОБЪЕДИНИТЬ ВСЕ - | - |ВЫБРАТЬ - | ВерсииФайлов.Ссылка КАК Ссылка, - | ВерсииФайлов.Наименование КАК ПолноеНаименование, - | ВерсииФайлов.Размер КАК Размер - |ИЗ - | " + ПолноеИмяСправочника + " КАК ВерсииФайлов - |ГДЕ - | ВерсииФайлов.ТипХраненияФайла = ЗНАЧЕНИЕ(Перечисление.ТипыХраненияФайлов.ВИнформационнойБазе)"; - КонецЕсли; - КонецЦикла; - - Результат = Запрос.Выполнить(); - ТаблицаВыгрузки = Результат.Выгрузить(); - - Для Каждого Строка Из ТаблицаВыгрузки Цикл - ВерсияСтруктура = Новый Структура("Ссылка, Текст, Размер", - Строка.Ссылка, Строка.ПолноеНаименование, Строка.Размер); - МассивВерсий.Добавить(ВерсияСтруктура); - КонецЦикла; - - Возврат МассивВерсий; - -КонецФункции - -&НаСервереБезКонтекста -Функция СвойстваХраненияФайлов() - - СвойстваХраненияФайлов = Новый Структура; - - СвойстваХраненияФайлов.Вставить( - "ТипХраненияФайлов", РаботаСФайламиСлужебный.ТипХраненияФайлов()); - - СвойстваХраненияФайлов.Вставить( - "ЕстьТомаХраненияФайлов", РаботаСФайлами.ЕстьТомаХраненияФайлов()); - - Возврат СвойстваХраненияФайлов; - -КонецФункции - -&НаСервере -Функция ПеренестиМассивВерсийВТом(ПакетВерсий, МассивФайловСОшибками) - - УстановитьПривилегированныйРежим(Истина); - - ЧислоОбработанных = 0; - МаксимальныйРазмерФайла = РаботаСФайлами.МаксимальныйРазмерФайла(); - - Для Каждого ВерсияСтруктура Из ПакетВерсий Цикл - - Если ПеренестиВерсиюВТом(ВерсияСтруктура, МаксимальныйРазмерФайла, МассивФайловСОшибками) Тогда - ЧислоОбработанных = ЧислоОбработанных + 1; - КонецЕсли; - - КонецЦикла; - - Возврат ЧислоОбработанных; - -КонецФункции - -&НаСервере -Функция ПеренестиВерсиюВТом(ВерсияСтруктура, МаксимальныйРазмерФайла, МассивФайловСОшибками) - - КодВозврата = Истина; - - ВерсияСсылка = ВерсияСтруктура.Ссылка; - Если ТипЗнч(ВерсияСсылка) = Тип("СправочникСсылка.ВерсииФайлов") Тогда - ФайлСсылка = ВерсияСсылка.Владелец; - Иначе - ФайлСсылка = ВерсияСсылка; - КонецЕсли; - Размер = ВерсияСтруктура.Размер; - ИмяДляЖурнала = ""; - - Если Размер > МаксимальныйРазмерФайла Тогда - - ИмяДляЖурнала = ВерсияСтруктура.Текст; - ЗаписьЖурналаРегистрации(НСтр("ru = 'Файлы.Ошибка переноса файла в том'", ОбщегоНазначения.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка,, ФайлСсылка, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'При переносе в том файла - |""%1"" - |возникла ошибка: - |""Размер превышает максимальный"".'"), - ИмяДляЖурнала)); - - Возврат Ложь; // ничего не сообщаем - КонецЕсли; - - ИмяДляЖурнала = ВерсияСтруктура.Текст; - ЗаписьЖурналаРегистрации(НСтр("ru = 'Файлы.Начат перенос файла в том'", ОбщегоНазначения.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Информация,, ФайлСсылка, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Начат перенос в том файла - |""%1"".'"), - ИмяДляЖурнала)); - - Попытка - ЗаблокироватьДанныеДляРедактирования(ФайлСсылка); - Исключение - Возврат Ложь; // ничего не сообщаем - КонецПопытки; - - Попытка - ЗаблокироватьДанныеДляРедактирования(ВерсияСсылка); - Исключение - РазблокироватьДанныеДляРедактирования(ФайлСсылка); - Возврат Ложь; // ничего не сообщаем - КонецПопытки; - - ТипХраненияФайла = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ВерсияСсылка, "ТипХраненияФайла"); - Если ТипХраненияФайла <> Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда // Файл уже в томе. - РазблокироватьДанныеДляРедактирования(ФайлСсылка); - РазблокироватьДанныеДляРедактирования(ВерсияСсылка); - Возврат Ложь; - КонецЕсли; - - НачатьТранзакцию(); - - Попытка - - БлокировкаВерсии = Новый БлокировкаДанных; - ЭлементБлокировкиДанных = БлокировкаВерсии.Добавить(Метаданные.НайтиПоТипу(ТипЗнч(ВерсияСсылка)).ПолноеИмя()); - ЭлементБлокировкиДанных.УстановитьЗначение("Ссылка", ВерсияСсылка); - БлокировкаВерсии.Заблокировать(); - - ВерсияОбъект = ВерсияСсылка.ПолучитьОбъект(); - ХранилищеФайла = РаботаСФайлами.ХранилищеФайлаИзИнформационнойБазы(ВерсияСсылка); - Если ТипЗнч(ВерсияОбъект) = Тип("СправочникОбъект.ВерсииФайлов") Тогда - СведенияОФайле = РаботаСФайламиСлужебный.ДобавитьФайлВТом(ХранилищеФайла.Получить(), ВерсияОбъект.ДатаМодификацииУниверсальная, - ВерсияОбъект.ПолноеНаименование, ВерсияОбъект.Расширение, ВерсияОбъект.НомерВерсии, ФайлСсылка.Зашифрован, - // Чтобы все файлы не попали в одну папку за сегодняшний день - подставляем дату создания файла. - ВерсияОбъект.ДатаМодификацииУниверсальная); - Иначе - СведенияОФайле = РаботаСФайламиСлужебный.ДобавитьФайлВТом(ХранилищеФайла.Получить(), ВерсияОбъект.ДатаМодификацииУниверсальная, - ВерсияОбъект.Наименование, ВерсияОбъект.Расширение, , ФайлСсылка.Зашифрован, - // Чтобы все файлы не попали в одну папку за сегодняшний день - подставляем дату создания файла. - ВерсияОбъект.ДатаМодификацииУниверсальная); - КонецЕсли; - - ВерсияОбъект.Том = СведенияОФайле.Том; - ВерсияОбъект.ПутьКФайлу = СведенияОФайле.ПутьКФайлу; - ВерсияОбъект.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске; - ВерсияОбъект.ФайлХранилище = Новый ХранилищеЗначения(""); - // Чтобы прошла запись ранее подписанного объекта. - ВерсияОбъект.ДополнительныеСвойства.Вставить("ЗаписьПодписанногоОбъекта", Истина); - ВерсияОбъект.Записать(); - - БлокировкаОбъекта = Новый БлокировкаДанных; - ЭлементБлокировкиДанных = БлокировкаОбъекта.Добавить(Метаданные.НайтиПоТипу(ТипЗнч(ФайлСсылка)).ПолноеИмя()); - ЭлементБлокировкиДанных.УстановитьЗначение("Ссылка", ФайлСсылка); - БлокировкаОбъекта.Заблокировать(); - - ФайлОбъект = ФайлСсылка.ПолучитьОбъект(); - // Чтобы прошла запись ранее подписанного объекта. - ФайлОбъект.ДополнительныеСвойства.Вставить("ЗаписьПодписанногоОбъекта", Истина); - ФайлОбъект.Записать(); // Для переноса полей версии в файл. - - РаботаСФайламиСлужебный.УдалитьЗаписьИзРегистраДвоичныеДанныеФайлов(ВерсияСсылка); - - ЗаписьЖурналаРегистрации( - НСтр("ru = 'Файлы.Завершен перенос файла в том'", ОбщегоНазначения.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Информация,, ФайлСсылка, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Завершен перенос в том файла - |""%1"".'"), ИмяДляЖурнала)); - - ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); - ИнформацияОбОшибке = ИнформацияОбОшибке(); - - СтруктураОшибки = Новый Структура; - СтруктураОшибки.Вставить("ИмяФайла", ИмяДляЖурнала); - СтруктураОшибки.Вставить("Ошибка", КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); - СтруктураОшибки.Вставить("Версия", ВерсияСсылка); - - МассивФайловСОшибками.Добавить(СтруктураОшибки); - - ЗаписьЖурналаРегистрации(НСтр("ru = 'Файлы.Ошибка переноса файла в том'", ОбщегоНазначения.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка,, ФайлСсылка, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'При переносе в том файла - |""%1"" - |возникла ошибка: - |""%2"".'"), - ИмяДляЖурнала, - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке))); - - КодВозврата = Ложь; - - КонецПопытки; - - РазблокироватьДанныеДляРедактирования(ФайлСсылка); - РазблокироватьДанныеДляРедактирования(ВерсияСсылка); - - Возврат КодВозврата; - -КонецФункции - -#КонецОбласти diff --git a/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПоискДублей/Form.form b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПоискДублей/Form.form index 24d55d3c6..ab1b30e9f 100644 --- a/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПоискДублей/Form.form +++ b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПоискДублей/Form.form @@ -48,6 +48,10 @@ StartChoice ОбластьПоискаДублейНачалоВыбора + + Opening + ОбластьПоискаДублейОткрытие + Clearing ОбластьПоискаДублейОчистка @@ -58,6 +62,7 @@ false true ShowInInputField + true false true true @@ -161,10 +166,6 @@ true - - <key>ru</key> - <value>Шапка</value> - ШапкаРасширеннаяПодсказка 407 @@ -344,7 +345,7 @@ ШагВыборОсновногоЭлемента 98 - КомандыРаботыСОсновнымЭлементов + КоманднаяПанель 96 ВыбратьОсновнойЭлемент @@ -372,6 +373,180 @@ UserCmds Auto + + ГруппаУстановитьСнятьФлажки + 461 + + УстановитьВсеФлажки + 463 + true + true + + true + + + УстановитьВсеФлажкиРасширеннаяПодсказка + 464 + Label + true + true + + Left + + + Form.Command.УстановитьВсеФлажки + Normal + Auto + true + true + UserCmds + Auto + + + СнятьВсеФлажки + 465 + true + true + + true + + + СнятьВсеФлажкиРасширеннаяПодсказка + 466 + Label + true + true + + Left + + + Form.Command.СнятьВсеФлажки + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + ГруппаУстановитьСнятьФлажкиРасширеннаяПодсказка + 462 + Label + true + true + + Left + + + + Compact + + + + ГруппаСвернутьРазвернуть + 459 + + РазвернутьГруппуДублей + 92 + true + true + + true + + + РазвернутьГруппуДублейРасширеннаяПодсказка + 93 + Label + true + true + + Left + + + Form.Command.РазвернутьГруппыДублей + Normal + Auto + true + true + UserCmds + Auto + + + СвернутьГруппуДублей + 94 + true + true + + true + + + СвернутьГруппуДублейРасширеннаяПодсказка + 95 + Label + true + true + + Left + + + Form.Command.СвернутьГруппыДублей + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + ГруппаСвернутьРазвернутьРасширеннаяПодсказка + 460 + Label + true + true + + Left + + + + Compact + + + + ПовторитьПоиск + 326 + true + true + + true + + + ПовторитьПоискРасширеннаяПодсказка + 327 + Label + true + true + + Left + + + Form.Command.ПовторитьПоиск + Normal + Auto + true + true + UserCmds + Auto + ОткрытьКандидатаВДубли 90 @@ -399,16 +574,16 @@ Auto - РазвернутьГруппуДублей - 92 + Подробнее + 469 true true true - РазвернутьГруппуДублейРасширеннаяПодсказка - 93 + ПодробнееРасширеннаяПодсказка + 470 Label true true @@ -416,59 +591,7 @@ Left - Form.Command.РазвернутьГруппыДублей - Normal - Auto - true - true - UserCmds - Auto - - - СвернутьГруппуДублей - 94 - true - true - - true - - - СвернутьГруппуДублейРасширеннаяПодсказка - 95 - Label - true - true - - Left - - - Form.Command.СвернутьГруппыДублей - Normal - Auto - true - true - UserCmds - Auto - - - ПовторитьПоиск - 326 - true - true - - true - - - ПовторитьПоискРасширеннаяПодсказка - 327 - Label - true - true - - Left - - - Form.Command.ПовторитьПоиск + Form.Command.Подробнее Normal Auto true @@ -481,12 +604,8 @@ true - - <key>ru</key> - <value>Команды работы с основным элементов</value> - - КомандыРаботыСОсновнымЭлементовРасширеннаяПодсказка + КоманднаяПанельРасширеннаяПодсказка 97 Label true @@ -501,369 +620,40 @@ - ГруппаВертикальнаяОсновногоЭлемента - 153 - - ГруппаГоризонтальнаяНайденныеДубли - 155 - - НайденныеДубли - 67 - - <key>ru</key> - <value>Найденные дубли</value> - + ГруппаНайденныеДубли + 155 + + НайденныеДубли + 67 + true + true + + true + + + НайденныеДубли + + None + Change + + НайденныеДублиОсновной + 114 true true true - НайденныеДубли + НайденныеДубли.Основной None - Change - - ИспользоватьНаименование - 109 - - НайденныеДублиНаименование - 100 - true - true - - true - - - НайденныеДубли.Наименование - - - НайденныеДублиНаименованиеРасширеннаяПодсказка - 102 - Label - true - true - - Left - - - - НайденныеДублиНаименованиеКонтекстноеМеню - 101 - true - - InputField - true - Auto - true - Left - true - - 5 - true - true - true - true - true - true - Normal - - - - НайденныеДублиОсновной - 114 - true - true - - true - - - НайденныеДубли.Основной - - None - - НайденныеДублиОсновнойРасширеннаяПодсказка - 116 - Label - true - true - - Left - - - - НайденныеДублиОсновнойКонтекстноеМеню - 115 - true - - PictureField - true - Auto - true - Left - true - - true - true - true - true - - StdPicture.MoveRight - - - - 1 - - - - - НайденныеДублиПометка - 103 - true - true - - true - - - НайденныеДубли.Пометка - - None - - OnChange - НайденныеДублиПометкаПриИзменении - - - НайденныеДублиПометкаРасширеннаяПодсказка - 105 - Label - true - true - - Left - - - - НайденныеДублиПометкаКонтекстноеМеню - 104 - true - - CheckBoxField - Auto - true - Left - true - - true - - - true - true - - true - - - <key>ru</key> - <value>Использовать наименование</value> - - - ИспользоватьНаименованиеРасширеннаяПодсказка - 110 - Label - true - true - - Left - - - ColumnGroup - - InCell - auto - true - - - - НайденныеДублиКод - 111 - true - true - - - НайденныеДубли.Код - - - НайденныеДублиКодРасширеннаяПодсказка - 113 - Label - true - true - - Left - - - - НайденныеДублиКодКонтекстноеМеню - 112 - true - - InputField - true - Auto - true - Left - true - - 10 - true - true - false - true - true - true - true - Normal - - - - НайденныеДублиКоличество - 119 - true - true - - true - - - НайденныеДубли.Количество - - None - - ru - Мест использования - - - НайденныеДублиКоличествоРасширеннаяПодсказка - 121 - Label - true - true - - Left - - - - НайденныеДублиКоличествоКонтекстноеМеню - 120 - true - - InputField - true - Left - Auto - true - - CommonPicture.Информация - - Left - true - - 4 - true - true - false - true - true - true - true - Normal - - - - НайденныеДублиКоманднаяПанель - 69 - Left - - - Selection - НайденныеДублиВыбор - - - OnActivateRow - НайденныеДублиПриАктивизацииСтроки - - - НайденныеДублиСтрокаПоиска - 364 - - НайденныеДублиСтрокаПоискаРасширеннаяПодсказка - 366 - Label - true - true - - Left - - - - НайденныеДублиСтрокаПоискаКонтекстноеМеню - 365 - true - - НайденныеДубли - - true - - - - НайденныеДублиСостояниеПросмотра - 367 - - НайденныеДублиСостояниеПросмотраРасширеннаяПодсказка - 369 - Label - true - true - - Left - - - - НайденныеДублиСостояниеПросмотраКонтекстноеМеню - 368 - true - - ViewStatusAddition - НайденныеДубли - - true - - - - НайденныеДублиУправлениеПоиском - 370 - - НайденныеДублиУправлениеПоискомРасширеннаяПодсказка - 372 - Label - true - true - - Left - - - - НайденныеДублиУправлениеПоискомКонтекстноеМеню - 371 - true - - SearchControlAddition - НайденныеДубли - - true - - + + ru + Это оригинальный элемент, который будет оставлен в программе + - НайденныеДублиРасширеннаяПодсказка - 70 + НайденныеДублиОсновнойРасширеннаяПодсказка + 116 Label true true @@ -872,211 +662,536 @@ - НайденныеДублиКонтекстноеМеню - 68 - - НайденныеДублиКонтекстноеМенюВыбратьОсновнойЭлемент - 117 - true - true - - true - - - НайденныеДублиКонтекстноеМенюВыбратьОсновнойЭлементРасширеннаяПодсказка - 118 - Label - true - true - - Left - - - Form.Command.ВыбратьОсновнойЭлемент - Normal - Auto - true - true - UserCmds - Auto - - - НайденныеДублиКонтекстноеМенюГруппаИзменить - 422 - - НайденныеДублиКонтекстноеМенюОткрытьКандидатаВДубли1 - 430 - true - true - - true - - - НайденныеДублиКонтекстноеМенюОткрытьКандидатаВДубли1РасширеннаяПодсказка - 431 - Label - true - true - - Left - - - Form.Command.ОткрытьКандидатаВДубли - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Найденные дубли контекстное меню группа изменить</value> - - - НайденныеДублиКонтекстноеМенюГруппаИзменитьРасширеннаяПодсказка - 423 - Label - true - true - - Left - - - - - - НайденныеДублиКонтекстноеМенюКопироватьВБуферОбмена - 418 - true - true - - true - - - НайденныеДублиКонтекстноеМенюКопироватьВБуферОбменаРасширеннаяПодсказка - 419 - Label - true - true - - Left - - - Form.Item.НайденныеДубли.StandardCommand.CopyToClipboard - Normal - Auto - true - true - UserCmds - Auto - - - НайденныеДублиКонтекстноеМенюВывестиСписок - 416 - true - true - - true - - - НайденныеДублиКонтекстноеМенюВывестиСписокРасширеннаяПодсказка - 417 - Label - true - true - - Left - - - Form.Item.НайденныеДубли.StandardCommand.OutputList - Normal - Auto - true - true - UserCmds - Auto - - - НайденныеДублиКонтекстноеМенюГруппаИзменитьФорму - 426 - - НайденныеДублиКонтекстноеМенюИзменитьФорму - 424 - true - true - - true - - - НайденныеДублиКонтекстноеМенюИзменитьФормуРасширеннаяПодсказка - 425 - Label - true - true - - Left - - - Form.StandardCommand.CustomizeForm - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Найденные дубли контекстное меню группа изменить форму</value> - - - НайденныеДублиКонтекстноеМенюГруппаИзменитьФормуРасширеннаяПодсказка - 427 - Label - true - true - - Left - - - - + НайденныеДублиОсновнойКонтекстноеМеню + 115 true - Tree - true - 5 - true - true - Row -
    true
    - 1 - 1 - AutoUse - AutoUse - true - true - true - Auto - Auto - ExpandAllLevels - true - true - true - true - true + PictureField + true + Auto + true + + StdPicture.MoveRight + + Left + true + + true + true + true + true + + StdPicture.MoveRight + + + + 1 + +
    + + ИспользоватьНаименование + 109 + + НайденныеДублиПометка + 103 + true + true + + true + + + НайденныеДубли.Пометка + + None + + OnChange + НайденныеДублиПометкаПриИзменении + + + НайденныеДублиПометкаРасширеннаяПодсказка + 105 + Label + true + true + + Left + + + + НайденныеДублиПометкаКонтекстноеМеню + 104 + true + + CheckBoxField + Auto + true + Left + true + + true + + + + НайденныеДублиНаименование + 100 + true + true + + true + + + НайденныеДубли.Наименование + + + НайденныеДублиНаименованиеРасширеннаяПодсказка + 102 + Label + true + true + + Left + + + + НайденныеДублиНаименованиеКонтекстноеМеню + 101 + true + + InputField + true + Auto + true + Left + true + + 5 + true + true + true + true + true + true + Normal + + + true + true + + true + + + ИспользоватьНаименованиеРасширеннаяПодсказка + 110 + Label + true + true + + Left + + + ColumnGroup + + InCell + auto + true + + + + НайденныеДублиКод + 111 + true + true + + + НайденныеДубли.Код + + + НайденныеДублиКодРасширеннаяПодсказка + 113 + Label + true + true + + Left + + + + НайденныеДублиКодКонтекстноеМеню + 112 + true + + InputField + true + Auto + true + Left + true + + 10 + true + true + false + true + true + true + true + Normal + + + + НайденныеДублиКоличество + 119 + true + true + + true + + + НайденныеДубли.Количество + + None + + ru + Мест использования + + + НайденныеДублиКоличествоРасширеннаяПодсказка + 121 + Label + true + true + + Left + + + + НайденныеДублиКоличествоКонтекстноеМеню + 120 + true + + InputField + true + Left + Auto + true + + CommonPicture.Информация + + Left + true + + 4 + true + true + false + true + true + true + true + Normal + + + + НайденныеДублиКоманднаяПанель + 69 + Left + + + Selection + НайденныеДублиВыбор + + + OnActivateRow + НайденныеДублиПриАктивизацииСтроки + + + НайденныеДублиСтрокаПоиска + 364 + + НайденныеДублиСтрокаПоискаРасширеннаяПодсказка + 366 + Label + true + true + + Left + + + + НайденныеДублиСтрокаПоискаКонтекстноеМеню + 365 + true + + НайденныеДубли + + true + + + + НайденныеДублиСостояниеПросмотра + 367 + + НайденныеДублиСостояниеПросмотраРасширеннаяПодсказка + 369 + Label + true + true + + Left + + + + НайденныеДублиСостояниеПросмотраКонтекстноеМеню + 368 + true + + ViewStatusAddition + НайденныеДубли + + true + + + + НайденныеДублиУправлениеПоиском + 370 + + НайденныеДублиУправлениеПоискомРасширеннаяПодсказка + 372 + Label + true + true + + Left + + + + НайденныеДублиУправлениеПоискомКонтекстноеМеню + 371 + true + + SearchControlAddition + НайденныеДубли + + true + + + + НайденныеДублиРасширеннаяПодсказка + 70 + Label + true + true + + Left + + + + НайденныеДублиКонтекстноеМеню + 68 + + НайденныеДублиКонтекстноеМенюВыбратьОсновнойЭлемент + 117 + true + true + + true + + + НайденныеДублиКонтекстноеМенюВыбратьОсновнойЭлементРасширеннаяПодсказка + 118 + Label + true + true + + Left + + + Form.Command.ВыбратьОсновнойЭлемент + Normal + Auto + true + true + UserCmds + Auto + + + НайденныеДублиКонтекстноеМенюГруппаИзменить + 422 + + НайденныеДублиКонтекстноеМенюОткрытьКандидатаВДубли1 + 430 + true + true + + true + + + НайденныеДублиКонтекстноеМенюОткрытьКандидатаВДубли1РасширеннаяПодсказка + 431 + Label + true + true + + Left + + + Form.Command.ОткрытьКандидатаВДубли + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + НайденныеДублиКонтекстноеМенюГруппаИзменитьРасширеннаяПодсказка + 423 + Label + true + true + + Left + + + + + + НайденныеДублиКонтекстноеМенюКопироватьВБуферОбмена + 418 + true + true + + true + + + НайденныеДублиКонтекстноеМенюКопироватьВБуферОбменаРасширеннаяПодсказка + 419 + Label + true + true + + Left + + + Form.Item.НайденныеДубли.StandardCommand.CopyToClipboard + Normal + Auto + true + true + UserCmds + Auto + + + НайденныеДублиКонтекстноеМенюВывестиСписок + 416 + true + true + + true + + + НайденныеДублиКонтекстноеМенюВывестиСписокРасширеннаяПодсказка + 417 + Label + true + true + + Left + + + Form.Item.НайденныеДубли.StandardCommand.OutputList + Normal + Auto + true + true + UserCmds + Auto + + + НайденныеДублиКонтекстноеМенюГруппаИзменитьФорму + 426 + + НайденныеДублиКонтекстноеМенюИзменитьФорму + 424 + true + true + + true + + + НайденныеДублиКонтекстноеМенюИзменитьФормуРасширеннаяПодсказка + 425 + Label + true + true + + Left + + + 0 + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + НайденныеДублиКонтекстноеМенюГруппаИзменитьФормуРасширеннаяПодсказка + 427 + Label + true + true + + Left + + + + + true + + Tree + true + 10 + true + true + Row +
    true
    + 1 + 1 + AutoUse + AutoUse + true + true + true + Auto + Auto + true + true + true + true + + НайденныеДубли.НомерКартинки + + + CommonPicture.ПиктограммыЭлементов + + true +
    + + ГруппаПодробно + 467 СтраницыМестаИспользования 147 @@ -1086,10 +1201,6 @@ МестаИспользованияКандидата 137 - - <key>ru</key> - <value>Места использования кандидата</value> - true true @@ -1098,7 +1209,7 @@ МестаИспользованияКандидата - Top + None МестаИспользованияКандидатаПредставлениеДанных 144 @@ -1323,10 +1434,6 @@ ОписаниеТекущейГруппыДублей 134 - - <key>ru</key> - <value>Описание текущей группы дублей</value> - true true @@ -1352,8 +1459,8 @@ true true - Center - Center + Left + Top 1 @@ -1391,10 +1498,6 @@ true - - <key>ru</key> - <value>Страницы места использования</value> - СтраницыМестаИспользованияРасширеннаяПодсказка 148 @@ -1417,11 +1520,11 @@ <key>ru</key> - <value>Горизонтальная найденные дубли</value> + <value>Сведения:</value> - ГруппаГоризонтальнаяНайденныеДублиРасширеннаяПодсказка - 156 + ГруппаПодробноРасширеннаяПодсказка + 468 Label true true @@ -1433,119 +1536,14 @@ HorizontalIfPossible Auto - true - true - Auto - Auto - - - - ГруппаГоризонтальнаяСостояниеНайденного - 157 - - ОписаниеСостоянияНайденныхДублей - 202 - true - true - - true - - - ОписаниеСостоянияНайденныхДублей - - None - - ОписаниеСостоянияНайденныхДублейРасширеннаяПодсказка - 204 - Label - true - true - - Left - - - - ОписаниеСостоянияНайденныхДублейКонтекстноеМеню - 203 - true - - LabelField - Enter - true - Left - true - - true - true - - Style.ПоясняющийТекст - - - - - ВсеМестаИспользования - 328 - + <collapsedRepresentationTitle> <key>ru</key> - <value>Все места использования</value> - - true - true - - true - - - ВсеМестаИспользованияРасширеннаяПодсказка - 330 - Label - true - true - - Left - - - - ВсеМестаИспользованияКонтекстноеМеню - 329 - true - - Label - true - - - Click - ВсеМестаИспользованияНажатие - - true - Right - - - true - true - - true - - - <key>ru</key> - <value>Горизонтальная состояние найденного</value> - - 2 - - ГруппаГоризонтальнаяСостояниеНайденногоРасширеннаяПодсказка - 158 - Label - true - true - - Left - - - UsualGroup - - HorizontalIfPossible - Auto - true + ... + + true + Button true + auto Auto Auto @@ -1555,13 +1553,9 @@ true - - <key>ru</key> - <value>Вертикальная основного элемента</value> - - ГруппаВертикальнаяОсновногоЭлементаРасширеннаяПодсказка - 154 + ГруппаНайденныеДублиРасширеннаяПодсказка + 156 Label true true @@ -1571,7 +1565,119 @@ UsualGroup - Vertical + AlwaysHorizontal + Auto + true + true + Auto + Auto + + + + ГруппаСостояние + 157 + + ОписаниеСостоянияНайденныхДублей + 202 + true + true + + true + + + ОписаниеСостоянияНайденныхДублей + + None + + ОписаниеСостоянияНайденныхДублейРасширеннаяПодсказка + 204 + Label + true + true + + Left + + + + ОписаниеСостоянияНайденныхДублейКонтекстноеМеню + 203 + true + + LabelField + Enter + true + Left + true + + + URLProcessing + ОписаниеСостоянияНайденныхДублейОбработкаНавигационнойСсылки + + 3 + 3 + false + + Style.ПоясняющийТекст + + + + + ВсеМестаИспользования + 328 + + <key>ru</key> + <value>Все места использования</value> + + true + true + + true + + + ВсеМестаИспользованияРасширеннаяПодсказка + 330 + Label + true + true + + Left + + + + ВсеМестаИспользованияКонтекстноеМеню + 329 + true + + Label + true + + + Click + ВсеМестаИспользованияНажатие + + true + Right + + + true + true + + true + + 2 + + ГруппаСостояниеРасширеннаяПодсказка + 158 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible Auto true true @@ -1752,7 +1858,6 @@ Left true - true 5 true false @@ -1836,10 +1941,6 @@ НеобработанныеДубли 242 - - <key>ru</key> - <value>Необработанные дубли</value> - true true @@ -1948,10 +2049,6 @@ true - - <key>ru</key> - <value>Основной наименование</value> - ru Использовать наименование @@ -2198,10 +2295,6 @@ true - - <key>ru</key> - <value>Необработанные дубли контекстное меню группа открыть</value> - НеобработанныеДублиКонтекстноеМенюГруппаОткрытьРасширеннаяПодсказка 443 @@ -2287,7 +2380,7 @@ Left
    - Form.StandardCommand.CustomizeForm + 0 Normal Auto true @@ -2300,10 +2393,6 @@ true - - <key>ru</key> - <value>Необработанные дубли контекстное меню группа изменить форму</value> - НеобработанныеДублиКонтекстноеМенюГруппаИзменитьФормуРасширеннаяПодсказка 441 @@ -2352,7 +2441,7 @@ 269 <key>ru</key> - <value>Места использования необработанных</value> + <value>Места использования элемента</value> true true @@ -2754,10 +2843,6 @@ true - - <key>ru</key> - <value>Страницы места использования необработанных</value> - 24 СтраницыМестаИспользованияНеобработанныхРасширеннаяПодсказка @@ -2779,10 +2864,6 @@ true - - <key>ru</key> - <value>Горизонтальная необработанные дубли</value> - ru Группа горизонтальная найденные дубли @@ -2891,10 +2972,6 @@ true - - <key>ru</key> - <value>Пояснение к необработанным</value> - Ctrl+S ГруппаПояснениеКНеобработаннымРасширеннаяПодсказка @@ -2921,10 +2998,6 @@ true - - <key>ru</key> - <value>Вертикальная необработанные дубли</value> - ru Группа вертикальная основного элемента @@ -3198,10 +3271,6 @@ true - - <key>ru</key> - <value>Шаги мастера</value> - true ШагиМастераРасширеннаяПодсказка @@ -3255,10 +3324,6 @@ true - - <key>ru</key> - <value>Назад</value> - ГруппаНазадРасширеннаяПодсказка 170 @@ -3367,10 +3432,6 @@ true - - <key>ru</key> - <value>Справка формы</value> - ГруппаСправкаФормыРасширеннаяПодсказка 185 @@ -3388,10 +3449,6 @@ true - - <key>ru</key> - <value>Вперед</value> - ГруппаВпередРасширеннаяПодсказка 174 @@ -3412,10 +3469,6 @@ true - - <key>ru</key> - <value>Панель действий мастера</value> - ПанельДействийМастераРасширеннаяПодсказка 168 @@ -3611,10 +3664,6 @@ true - - <key>ru</key> - <value>Картинок</value> - ГруппаКартинокРасширеннаяПодсказка 76 @@ -3655,6 +3704,7 @@ OnCreateAtServer ПриСозданииНаСервере
    + CustomizeForm LockOwner true true @@ -3967,6 +4017,22 @@ true + + НомерКартинки + 5 + + Number + + 10 + + + + true + + + true + + АдресМестИспользования @@ -4465,6 +4531,24 @@ true + + СпособУдаления + 3 + + String + + + + true + + + true + + + СпособУдаления + + true + ВыбратьОсновнойЭлемент @@ -4474,7 +4558,7 @@ <id>5</id> <toolTip> <key>ru</key> - <value>Указать текущий элемент как оригинал, на который будут замены все остальные элемент группы дублей</value> + <value>Оставить выбранный элемент как оригинал и заменить все остальные дубли из группы</value> </toolTip> <use> <common>true</common> @@ -4500,16 +4584,20 @@ <id>6</id> <toolTip> <key>ru</key> - <value>Открыть кандидата в дубли</value> + <value>Открыть выбранный элемент</value> </toolTip> <use> <common>true</common> </use> + <picture xsi:type="core:PictureRef"> + <picture>StdPicture.Change</picture> + </picture> <action xsi:type="form:FormCommandHandlerContainer"> <handler> <name>ОткрытьКандидатаВДубли</name> </handler> </action> + <representation>Text</representation> <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> @@ -4638,11 +4726,14 @@ <id>13</id> <toolTip> <key>ru</key> - <value>Повторить поиск</value> + <value>Повторить поиск дублей</value> </toolTip> <use> <common>true</common> </use> + <picture xsi:type="core:PictureRef"> + <picture>StdPicture.Reread</picture> + </picture> <action xsi:type="form:FormCommandHandlerContainer"> <handler> <name>ПовторитьПоиск</name> @@ -4665,6 +4756,9 @@ <use> <common>true</common> </use> + <picture xsi:type="core:PictureRef"> + <picture>StdPicture.Change</picture> + </picture> <action xsi:type="form:FormCommandHandlerContainer"> <handler> <name>ОткрытьНеобработанныйДубль</name> @@ -4673,6 +4767,78 @@ <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> + <formCommands> + <name>УстановитьВсеФлажки</name> + <title> + <key>ru</key> + <value>Установить все флажки</value> + + 2 + + ru + Установить все флажки + + + true + + + StdPicture.CheckAll + + + + УстановитьВсеФлажки + + + Auto + Auto + + + СнятьВсеФлажки + + <key>ru</key> + <value>Снять все флажки</value> + + 3 + + ru + Снять все флажки + + + true + + + StdPicture.UncheckAll + + + + СнятьВсеФлажки + + + Auto + Auto + + + Подробнее + + <key>ru</key> + <value>Подробнее >></value> + + 4 + + ru + Показать/скрыть подробности + + + true + + + + Подробно + + + Auto + Auto + diff --git a/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПоискДублей/Module.bsl b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПоискДублей/Module.bsl index 134ef1f2e..91cc09f5a 100644 --- a/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПоискДублей/Module.bsl +++ b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПоискДублей/Module.bsl @@ -10,21 +10,17 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - УстановитьЦветаИУсловноеОформление(); + УстановитьУсловноеОформление(); - FuzzySearch = ОбщегоНазначения.ПодключитьКомпонентуИзМакета("FuzzyStringMatchExtension", "ОбщийМакет.КомпонентаПоискаСтрок"); - Если FuzzySearch <> Неопределено Тогда + КомпонентаНечеткогоПоиска = ОбщегоНазначения.ПодключитьКомпонентуИзМакета("FuzzyStringMatchExtension", "ОбщийМакет.КомпонентаПоискаСтрок"); + Если КомпонентаНечеткогоПоиска <> Неопределено Тогда НечеткийПоиск = Истина; КонецЕсли; - НастройкиФормы = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить(ИмяФормы, ""); - Если НастройкиФормы = Неопределено Тогда - НастройкиФормы = Новый Структура; - НастройкиФормы.Вставить("УчитыватьПрикладныеПравила", Истина); - НастройкиФормы.Вставить("ОбластьПоискаДублей", ""); - НастройкиФормы.Вставить("НастройкиКД", Неопределено); - НастройкиФормы.Вставить("ПравилаПоиска", Неопределено); - КонецЕсли; + НастройкиФормыПоУмолчанию = НастройкиПоискаУдаленияДублей(); + НастройкиФормы = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить(ИмяФормы, "", НастройкиФормыПоУмолчанию); + ЗаполнитьЗначенияСвойств(НастройкиФормыПоУмолчанию, НастройкиФормы); + НастройкиФормы = НастройкиФормыПоУмолчанию; ЗаполнитьЗначенияСвойств(НастройкиФормы, Параметры); ПриСозданииНаСервереИнициализацияДанных(НастройкиФормы); @@ -121,6 +117,8 @@ НастройкиМастера.ТекущийШаг = ШагПоиск; УстановитьВидимостьДоступность(ЭтотОбъект); + Элементы.ГруппаПодробно.Видимость = Ложь; + КонецПроцедуры &НаКлиенте @@ -161,6 +159,12 @@ #Область ОбработчикиСобытийЭлементовШапкиФормы +&НаКлиенте +Процедура ОбластьПоискаДублейОткрытие(Элемент, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; + ОткрытьФорму(ОбластьПоискаДублей + ".ФормаСписка"); +КонецПроцедуры + &НаКлиенте Процедура ОбластьПоискаДублейНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; @@ -295,6 +299,17 @@ ПерейтиНаШагМастера(Элементы.ШагПоискНеВыполнялся); КонецПроцедуры +&НаКлиенте +Процедура ОписаниеСостоянияНайденныхДублейОбработкаНавигационнойСсылки(Элемент, Ссылка, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + Если Ссылка = "СпособУдаления" Тогда + СпособУдаления = ?(СпособУдаления = "Непосредственно", "Пометка", "Непосредственно"); + ОбновитьОписаниеСостоянияНайденныхДублей(); + КонецЕсли; + +КонецПроцедуры + &НаКлиенте Процедура СсылкаПодробнееНажатие(Элемент) СтандартныеПодсистемыКлиент.ПоказатьПодробнуюИнформацию(Неопределено, Элемент.Подсказка); @@ -324,46 +339,53 @@ &НаСервере Процедура ОбновитьМестаИспользованияКандидата(Знач ИдентификаторСтроки) - ДанныеСтроки = НайденныеДубли.НайтиПоИдентификатору(ИдентификаторСтроки); + ТекущаяСтрока = НайденныеДубли.НайтиПоИдентификатору(ИдентификаторСтроки); - Если ДанныеСтроки.ПолучитьРодителя() = Неопределено Тогда + Если ТекущаяСтрока.ПолучитьРодителя() = Неопределено Тогда // Описание группы МестаИспользованияКандидата.Очистить(); НаименованиеОригинала = Неопределено; - Для Каждого Кандидат Из ДанныеСтроки.ПолучитьЭлементы() Цикл + ПомеченыНаУдалениеИНеИспользуются = Истина; + Для Каждого Кандидат Из ТекущаяСтрока.ПолучитьЭлементы() Цикл Если Кандидат.Основной Тогда НаименованиеОригинала = Кандидат.Наименование; - Прервать; + ИначеЕсли Кандидат.НомерКартинки <> 4 Или Кандидат.Количество > 0 Тогда + ПомеченыНаУдалениеИНеИспользуются = Ложь; КонецЕсли; КонецЦикла; - Элементы.ОписаниеТекущейГруппыДублей.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + Описание = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Для элемента ""%1"" найдено дублей: %2'"), - НаименованиеОригинала, - ДанныеСтроки.Количество); - + НаименованиеОригинала, ТекущаяСтрока.Количество); + Если ПомеченыНаУдалениеИНеИспользуются Тогда + Описание = Описание + Символы.ПС + + НСтр("ru = 'Однако все они помечены на удаление и не используются, поэтому удаление дублей уже не требуется.'"); + КонецЕсли; + + Элементы.ГруппаПодробно.Заголовок = НСтр("ru = 'Сведения:'"); + Элементы.ОписаниеТекущейГруппыДублей.Заголовок = Описание; Элементы.СтраницыМестаИспользования.ТекущаяСтраница = Элементы.ОписаниеГруппы; Возврат; КонецЕсли; // Перечень мест использования. ТаблицаИспользования = ПолучитьИзВременногоХранилища(АдресМестИспользования); - Фильтр = Новый Структура("Ссылка", ДанныеСтроки.Ссылка); + Фильтр = Новый Структура("Ссылка", ТекущаяСтрока.Ссылка); МестаИспользованияКандидата.Загрузить(ТаблицаИспользования.Скопировать(ТаблицаИспользования.НайтиСтроки(Фильтр))); - Если ДанныеСтроки.Количество = 0 Тогда + Если ТекущаяСтрока.Количество = 0 Тогда Элементы.ОписаниеТекущейГруппыДублей.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Элемент ""%1"" не используется'"), - ДанныеСтроки.Наименование); - + ТекущаяСтрока.Наименование); + Элементы.ГруппаПодробно.Заголовок = НСтр("ru = 'Сведения:'"); Элементы.СтраницыМестаИспользования.ТекущаяСтраница = Элементы.ОписаниеГруппы; Иначе - Элементы.МестаИспользованияКандидата.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Места использования ""%1"" (%2)'"), - ДанныеСтроки.Наименование, - ДанныеСтроки.Количество); + Элементы.ГруппаПодробно.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Места использования ""%1"" (%2):'"), + ТекущаяСтрока.Наименование, + ТекущаяСтрока.Количество); Элементы.СтраницыМестаИспользования.ТекущаяСтраница = Элементы.МестаИспользования; КонецЕсли; @@ -394,7 +416,7 @@ КонецЦикла; КонецЦикла; - ОбновитьОписаниеСостоянияНайденныхДублей(ЭтотОбъект); + ОбновитьОписаниеСостоянияНайденныхДублей(); КонецПроцедуры @@ -424,35 +446,30 @@ Процедура ОбновитьМестаИспользованияНеобработанныхДубли(Знач СтрокаДанных) ДанныеСтроки = НеобработанныеДубли.НайтиПоИдентификатору(СтрокаДанных); - Если ДанныеСтроки.ПолучитьРодителя() = Неопределено Тогда - // Описание группы + Если ДанныеСтроки.ПолучитьРодителя() = Неопределено Или ДанныеСтроки.Основной Тогда МестаИспользованияНеобработанных.Очистить(); - Элементы.ОписаниеТекущейГруппыДублей1.Заголовок = НСтр("ru = 'Для просмотра причин выберите проблемный элемент-дубль.'"); Элементы.СтраницыМестаИспользованияНеобработанных.ТекущаяСтраница = Элементы.ОписаниеГруппыНеобработанных; Возврат; КонецЕсли; - // Перечень мест ошибок - ТаблицаОшибок = ПолучитьИзВременногоХранилища(АдресРезультатаЗамены); - Фильтр = Новый Структура("Ссылка", ДанныеСтроки.Ссылка); - - Данные = ТаблицаОшибок.Скопировать( ТаблицаОшибок.НайтиСтроки(Фильтр) ); - Данные.Колонки.Добавить("Пиктограмма"); - Данные.ЗаполнитьЗначения(Истина, "Пиктограмма"); - МестаИспользованияНеобработанных.Загрузить(Данные); - Если ДанныеСтроки.Количество = 0 Тогда - Элементы.ОписаниеТекущейГруппыДублей1.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Замена дубля ""%1"" возможна, но была отменена из-за невозможности замены в других местах.'"), - ДанныеСтроки.Наименование); - + МестаИспользованияНеобработанных.Очистить(); + Элементы.ОписаниеТекущейГруппыДублей1.Заголовок = + НСтр("ru = 'Выбранный дубль не заменен из-за невозможности замены других дублей.'"); Элементы.СтраницыМестаИспользованияНеобработанных.ТекущаяСтраница = Элементы.ОписаниеГруппыНеобработанных; Иначе + ТаблицаОшибок = ПолучитьИзВременногоХранилища(АдресРезультатаЗамены); + Фильтр = Новый Структура("Ссылка", ДанныеСтроки.Ссылка); + + Данные = ТаблицаОшибок.Скопировать( ТаблицаОшибок.НайтиСтроки(Фильтр) ); + Данные.Колонки.Добавить("Пиктограмма"); + Данные.ЗаполнитьЗначения(Истина, "Пиктограмма"); + МестаИспользованияНеобработанных.Загрузить(Данные); + Элементы.МестаИспользованияКандидата.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Не удалось заменить дубли в некоторых местах (%1)'"), ДанныеСтроки.Количество); - Элементы.СтраницыМестаИспользованияНеобработанных.ТекущаяСтраница = Элементы.ОписаниеМестИспользованияНеобработанных; КонецЕсли; @@ -575,6 +592,40 @@ КонецПроцедуры +&НаКлиенте +Процедура УстановитьВсеФлажки(Команда) + + ЭлементыСписка = НайденныеДубли.ПолучитьЭлементы(); + Для Каждого Элемент Из ЭлементыСписка Цикл + УстановитьПометкиВДереве(Элемент, Истина, Истина); + Родитель = Элемент.ПолучитьРодителя(); + Если Родитель = Неопределено Тогда + ПроверитьПометкуРодителя(Элемент) + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +&НаКлиенте +Процедура СнятьВсеФлажки(Команда) + + ЭлементыСписка = НайденныеДубли.ПолучитьЭлементы(); + Для Каждого Элемент Из ЭлементыСписка Цикл + УстановитьПометкиВДереве(Элемент, Ложь, Истина); + Родитель = Элемент.ПолучитьРодителя(); + Если Родитель = Неопределено Тогда + ПроверитьПометкуРодителя(Элемент) + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +&НаКлиенте +Процедура Подробно(Команда) + Элементы.ГруппаПодробно.Видимость = Не Элементы.ГруппаПодробно.Видимость; + Элементы.Подробнее.Заголовок = ?(Элементы.ГруппаПодробно.Видимость, НСтр("ru = '<< Скрыть'"), НСтр("ru = 'Подробнее >>'")); +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -650,7 +701,7 @@ ОписаниеШага = Новый Структура("Индекс, ИмяСтраницы, КнопкаНазад, КнопкаДалее, КнопкаОтмена"); ОписаниеШага.ИмяСтраницы = Страница.Имя; ОписаниеШага.КнопкаНазад = КнопкаМастера(); - ОписаниеШага.КнопкаНазад.Заголовок = НСтр("ru='< Назад'"); + ОписаниеШага.КнопкаНазад.Заголовок = НСтр("ru = '< Назад'"); ОписаниеШага.КнопкаДалее = КнопкаМастера(); ОписаниеШага.КнопкаДалее.КнопкаПоУмолчанию = Истина; ОписаниеШага.КнопкаДалее.Заголовок = НСтр("ru = 'Далее >'"); @@ -696,9 +747,9 @@ ИначеЕсли Тип = Тип("Число") Тогда ИндексШага = ШагИлиИндексИлиГруппаФормы; Если ИндексШага < 0 Тогда - ВызватьИсключение НСтр("ru='Попытка выхода назад из первого шага мастера'"); + ВызватьИсключение НСтр("ru = 'Попытка выхода назад из первого шага мастера'"); ИначеЕсли ИндексШага > НастройкиМастера.Шаги.ВГраница() Тогда - ВызватьИсключение НСтр("ru='Попытка выхода за последний шаг мастера'"); + ВызватьИсключение НСтр("ru = 'Попытка выхода за последний шаг мастера'"); КонецЕсли; ОписаниеШага = НастройкиМастера.Шаги[ИндексШага]; Иначе @@ -883,9 +934,7 @@ Если ТекущаяСтраница = Элементы.ШагВыполнениеПоиска Или ТекущаяСтраница = Элементы.ШагВыполнениеУдаления Тогда - НастройкиМастера.ПоказатьДиалогПередЗакрытием = Ложь; - КонецЕсли; Если Открыта() Тогда @@ -895,7 +944,20 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// Клиент +// Служебные. + +&НаСервере +Функция НастройкиПоискаУдаленияДублей() + + Результат = Новый Структура; + Результат.Вставить("УчитыватьПрикладныеПравила", Истина); + Результат.Вставить("ОбластьПоискаДублей", ""); + Результат.Вставить("НастройкиКД", Неопределено); + Результат.Вставить("ПравилаПоиска", Неопределено); + Результат.Вставить("СпособУдаления", "Пометка"); + Возврат Результат; + +КонецФункции &НаКлиенте Функция ПолноеИмяФормы(КраткоеИмяФормы) @@ -954,6 +1016,37 @@ КонецЦикла; КонецПроцедуры +&НаКлиенте +Процедура УстановитьПометкиВДереве(Дерево, Пометка, ПроверятьРодителя) + + ЭлементыСтроки = Дерево.ПолучитьЭлементы(); + Для Каждого Элемент Из ЭлементыСтроки Цикл + Элемент.Пометка = Пометка; + УстановитьПометкиВДереве(Элемент, Пометка, Ложь); + КонецЦикла; + + Родитель = Дерево.ПолучитьРодителя(); + Если ПроверятьРодителя И Родитель <> Неопределено Тогда + ПроверитьПометкуРодителя(Родитель); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПроверитьПометкуРодителя(Родитель) + + ПометкаРодителя = Истина; + ЭлементыСтроки = Родитель.ПолучитьЭлементы(); + Для Каждого Элемент Из ЭлементыСтроки Цикл + Если Не Элемент.Пометка Тогда + ПометкаРодителя = Ложь; + Прервать; + КонецЕсли; + КонецЦикла; + Родитель.Пометка = ПометкаРодителя; + +КонецПроцедуры + &НаКлиенте Процедура ИзменитьПометкиКандидатовИерархически(Знач ДанныеСтроки) ПроставитьПометкиВниз(ДанныеСтроки); @@ -1013,29 +1106,26 @@ Родитель.Наименование = ДанныеСтроки.Наименование + " (" + Родитель.Количество + ")"; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Клиент, Сервер - -&НаКлиентеНаСервереБезКонтекста -Процедура ОбновитьОписаниеСостоянияНайденныхДублей(Форма) +&НаКлиенте +Процедура ОбновитьОписаниеСостоянияНайденныхДублей() - Если ПустаяСтрока(Форма.ОписаниеОшибкиПоискаДублей) Тогда + Если ПустаяСтрока(ОписаниеОшибкиПоискаДублей) Тогда Описание = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Выбрано дублей: %1 из %2.'"), - Форма.ВсегоНайденоДублей, Форма.ВсегоЭлементов); + ВсегоНайденоДублей, ВсегоЭлементов); Иначе - Описание = Форма.ОписаниеОшибкиПоискаДублей; + Описание = ОписаниеОшибкиПоискаДублей; КонецЕсли; - Форма.ОписаниеСостоянияНайденныхДублей = Новый ФорматированнаяСтрока(Описание + Символы.ПС - + НСтр("ru = 'Выбранные элементы будут помечены на удаление и заменены на оригиналы (отмечены стрелкой).'"), - , Форма.ЦветПоясняющийТекст); - + Если СпособУдаления = "Пометка" Тогда + ТекстПодсказки = НСтр("ru = 'Выбранные элементы будут помечены на удаление и заменены на оригиналы (отмечены стрелкой).'"); + Иначе + ТекстПодсказки = НСтр("ru = 'Выбранные элементы будут безвозвратно удалены и заменены на оригиналы (отмечены стрелкой).'"); + КонецЕсли; + ОписаниеСостоянияНайденныхДублей = СтроковыеФункцииКлиент.ФорматированнаяСтрока(Описание + Символы.ПС + ТекстПодсказки); + КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Вызов сервера, Сервер - &НаСервере Функция АдресНастроекКомпоновщикаОтбора() Возврат ПоместитьВоВременноеХранилище(КомпоновщикПредварительногоОтбора.Настройки, УникальныйИдентификатор); @@ -1100,9 +1190,9 @@ ТаблицаПравил = РеквизитФормыВЗначение("ПравилаПоиска"); ТаблицаПравил.Очистить(); - ИгнорируемыеРеквизиты = Новый Структура("ПометкаУдаления, Ссылка, Предопределенный, ИмяПредопределенныхДанных, ЭтоГруппа"); - ДобавитьПравилаМетаРеквизитов(ТаблицаПравил, ИгнорируемыеРеквизиты, ВсеВариантыСравнения, ОбъектМетаданных.СтандартныеРеквизиты, НечеткийПоиск); - ДобавитьПравилаМетаРеквизитов(ТаблицаПравил, ИгнорируемыеРеквизиты, ВсеВариантыСравнения, ОбъектМетаданных.Реквизиты, НечеткийПоиск); + ИсключаемыеРеквизиты = Новый Структура("ПометкаУдаления, Ссылка, Предопределенный, ИмяПредопределенныхДанных, ЭтоГруппа"); + ДобавитьПравилаРеквизитов(ТаблицаПравил, ИсключаемыеРеквизиты, ВсеВариантыСравнения, ОбъектМетаданных.СтандартныеРеквизиты, НечеткийПоиск); + ДобавитьПравилаРеквизитов(ТаблицаПравил, ИсключаемыеРеквизиты, ВсеВариантыСравнения, ОбъектМетаданных.Реквизиты, НечеткийПоиск); // 4. Загрузка сохраненных значений. ОтборыЗагружены = Ложь; @@ -1150,17 +1240,13 @@ // 6. Механизмы расширения в части прикладных правил. ОписаниеПрикладныхПравил = Неопределено; Если СтрокаТаблицыНастроек.СобытиеПараметрыПоискаДублей Тогда - ПараметрыПоУмолчанию = Новый Структура; - ПараметрыПоУмолчанию.Вставить("ПравилаПоиска", ТаблицаПравил); - ПараметрыПоУмолчанию.Вставить("ОграниченияСравнения", Новый Массив); - ПараметрыПоУмолчанию.Вставить("КомпоновщикОтбора", КомпоновщикПредварительногоОтбора); - ПараметрыПоУмолчанию.Вставить("КоличествоЭлементовДляСравнения", 1000); + ПрикладныеПараметры = ПоискИУдалениеДублей.ПараметрыПоискаДублей(ТаблицаПравил, КомпоновщикПредварительногоОтбора); МенеджерОбъектаМетаданных = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ОбъектМетаданных.ПолноеИмя()); - МенеджерОбъектаМетаданных.ПараметрыПоискаДублей(ПараметрыПоУмолчанию); + МенеджерОбъектаМетаданных.ПараметрыПоискаДублей(ПрикладныеПараметры); // Представление прикладных правил. ОписаниеПрикладныхПравил = ""; - Для Каждого Описание Из ПараметрыПоУмолчанию.ОграниченияСравнения Цикл + Для Каждого Описание Из ПрикладныеПараметры.ОграниченияСравнения Цикл ОписаниеПрикладныхПравил = ОписаниеПрикладныхПравил + Символы.ПС + Описание.Представление; КонецЦикла; ОписаниеПрикладныхПравил = СокрЛП(ОписаниеПрикладныхПравил); @@ -1176,13 +1262,11 @@ КонецЕсли; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Сервер - &НаСервере Процедура ПриСозданииНаСервереИнициализацияДанных(НастройкиФормы) - УчитыватьПрикладныеПравила = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(НастройкиФормы, "УчитыватьПрикладныеПравила"); - ОбластьПоискаДублей = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(НастройкиФормы, "ОбластьПоискаДублей"); + УчитыватьПрикладныеПравила = НастройкиФормы.УчитыватьПрикладныеПравила; + ОбластьПоискаДублей = НастройкиФормы.ОбластьПоискаДублей; + СпособУдаления = НастройкиФормы.СпособУдаления; ТаблицаНастроек = ПоискИУдалениеДублей.НастройкиОбъектовМетаданных(); АдресНастроек = ПоместитьВоВременноеХранилище(ТаблицаНастроек, УникальныйИдентификатор); @@ -1207,10 +1291,10 @@ КонецПроцедуры &НаСервере -Процедура УстановитьЦветаИУсловноеОформление() - ЦветПоясняющийТекст = ЦветСтиляИлиАвто("ПоясняющийТекст", 69, 81, 133); - ЦветПоясняющийОшибкуТекст = ЦветСтиляИлиАвто("ПоясняющийОшибкуТекст", 255, 0, 0); - ЦветНедоступныеДанные = ЦветСтиляИлиАвто("ЦветНедоступныеДанные", 192, 192, 192); +Процедура УстановитьУсловноеОформление() + ЦветПоясняющийТекст = Метаданные.ЭлементыСтиля.ПоясняющийТекст.Значение; + ЦветПоясняющийОшибкуТекст = Метаданные.ЭлементыСтиля.ПоясняющийОшибкуТекст.Значение; + ЦветНедоступныеДанные = Метаданные.ЭлементыСтиля.ТекстЗапрещеннойЯчейкиЦвет.Значение; ЭлементыУсловногоОформления = УсловноеОформление.Элементы; ЭлементыУсловногоОформления.Очистить(); @@ -1231,18 +1315,18 @@ // 1. Строка с текущим основным элементом группы: // Картинка - ЭлементОформления = ЭлементыУсловногоОформления.Добавить(); - - ОтборОформления = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); - ОтборОформления.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("НайденныеДубли.Основной"); - ОтборОформления.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; - ОтборОформления.ПравоеЗначение = Истина; - - ЭлементОформления.Оформление.УстановитьЗначениеПараметра("Видимость", Истина); - ЭлементОформления.Оформление.УстановитьЗначениеПараметра("Отображать", Истина); - - ПолеОформления = ЭлементОформления.Поля.Элементы.Добавить(); - ПолеОформления.Поле = Новый ПолеКомпоновкиДанных("НайденныеДублиОсновной"); + //ЭлементОформления = ЭлементыУсловногоОформления.Добавить(); + // + //ОтборОформления = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + //ОтборОформления.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("НайденныеДубли.Основной"); + //ОтборОформления.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + //ОтборОформления.ПравоеЗначение = Истина; + // + //ЭлементОформления.Оформление.УстановитьЗначениеПараметра("Видимость", Истина); + //ЭлементОформления.Оформление.УстановитьЗначениеПараметра("Отображать", Истина); + // + //ПолеОформления = ЭлементОформления.Поля.Элементы.Добавить(); + //ПолеОформления.Поле = Новый ПолеКомпоновкиДанных("НайденныеДублиОсновной"); // Отсутствие пометки ЭлементОформления = ЭлементыУсловногоОформления.Добавить(); @@ -1261,18 +1345,18 @@ // 2. Строка с обычным элементом. // Картинка - ЭлементОформления = ЭлементыУсловногоОформления.Добавить(); - - ОтборОформления = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); - ОтборОформления.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("НайденныеДубли.Основной"); - ОтборОформления.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; - ОтборОформления.ПравоеЗначение = Ложь; - - ЭлементОформления.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь); - ЭлементОформления.Оформление.УстановитьЗначениеПараметра("Отображать", Ложь); - - ПолеОформления = ЭлементОформления.Поля.Элементы.Добавить(); - ПолеОформления.Поле = Новый ПолеКомпоновкиДанных("НайденныеДублиОсновной"); + //ЭлементОформления = ЭлементыУсловногоОформления.Добавить(); + // + //ОтборОформления = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + //ОтборОформления.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("НайденныеДубли.Основной"); + //ОтборОформления.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + //ОтборОформления.ПравоеЗначение = Ложь; + // + //ЭлементОформления.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь); + //ЭлементОформления.Оформление.УстановитьЗначениеПараметра("Отображать", Ложь); + // + //ПолеОформления = ЭлементОформления.Поля.Элементы.Добавить(); + //ПолеОформления.Поле = Новый ПолеКомпоновкиДанных("НайденныеДублиОсновной"); // Наличие пометки ЭлементОформления = ЭлементыУсловногоОформления.Добавить(); @@ -1321,16 +1405,6 @@ КонецПроцедуры -&НаСервере -Функция ЦветСтиляИлиАвто(Знач Имя, Знач Красный = Неопределено, Зеленый = Неопределено, Синий = Неопределено) - ЭлементСтиля = Метаданные.ЭлементыСтиля.Найти(Имя); - Если ЭлементСтиля <> Неопределено И ЭлементСтиля.Вид = Метаданные.СвойстваОбъектов.ВидЭлементаСтиля.Цвет Тогда - Возврат ЦветаСтиля[Имя]; - КонецЕсли; - - Возврат ?(Красный = Неопределено, Новый Цвет, Новый Цвет(Красный, Зеленый, Синий)); -КонецФункции - &НаСервере Функция ПарыЗаменДублей() ПарыЗамен = Новый Соответствие; @@ -1338,12 +1412,11 @@ ДеревоДублей = РеквизитФормыВЗначение("НайденныеДубли"); ФильтрПоиска = Новый Структура("Основной", Истина); - Для Каждого Родитель Из ДеревоДублей.Строки Цикл - ОсновнойВГруппе = Родитель.Строки.НайтиСтроки(ФильтрПоиска)[0].Ссылка; - - Для Каждого Потомок Из Родитель.Строки Цикл - Если Потомок.Пометка = 1 Тогда - ПарыЗамен.Вставить(Потомок.Ссылка, ОсновнойВГруппе); + Для Каждого ГруппыДублей Из ДеревоДублей.Строки Цикл + Оригинал = ГруппыДублей.Строки.НайтиСтроки(ФильтрПоиска)[0].Ссылка; + Для Каждого Дубль Из ГруппыДублей.Строки Цикл + Если Дубль.Пометка = 1 И Дубль.Ссылка <> Оригинал Тогда + ПарыЗамен[Дубль.Ссылка] = Оригинал; КонецЕсли; КонецЦикла; КонецЦикла; @@ -1368,20 +1441,21 @@ КонецФункции &НаСервереБезКонтекста -Процедура ДобавитьПравилаМетаРеквизитов(ТаблицаПравил, Знач Игнорировать, Знач ВсеВариантыСравнения, Знач МетаКоллекция, Знач ДоступенНечеткийПоиск) +Процедура ДобавитьПравилаРеквизитов(ТаблицаПравил, Знач ИсключаемыеРеквизиты, Знач ВсеВариантыСравнения, Знач КоллекцияРеквизитов, Знач ДоступенНечеткийПоиск) - Для Каждого МетаРеквизит Из МетаКоллекция Цикл - Если Не Игнорировать.Свойство(МетаРеквизит.Имя) Тогда - ВариантыСравнения = ВариантыСравненияДляТипа(МетаРеквизит.Тип, ВсеВариантыСравнения, ДоступенНечеткийПоиск); - Если ВариантыСравнения <> Неопределено Тогда - // Можно сравнивать - СтрокаПравил = ТаблицаПравил.Добавить(); - СтрокаПравил.Реквизит = МетаРеквизит.Имя; - СтрокаПравил.ВариантыСравнения = ВариантыСравнения; - - ПредставлениеРеквизита = МетаРеквизит.Синоним; - СтрокаПравил.ПредставлениеРеквизита = ?(ПустаяСтрока(ПредставлениеРеквизита), МетаРеквизит.Имя, ПредставлениеРеквизита); - КонецЕсли; + Для Каждого МетаданныеРеквизита Из КоллекцияРеквизитов Цикл + Если ИсключаемыеРеквизиты.Свойство(МетаданныеРеквизита.Имя) Тогда + Продолжить; + КонецЕсли; + ВариантыСравнения = ВариантыСравненияДляТипа(МетаданныеРеквизита.Тип, ВсеВариантыСравнения, ДоступенНечеткийПоиск); + Если ВариантыСравнения <> Неопределено Тогда + // Можно сравнивать + СтрокаПравил = ТаблицаПравил.Добавить(); + СтрокаПравил.Реквизит = МетаданныеРеквизита.Имя; + СтрокаПравил.ВариантыСравнения = ВариантыСравнения; + + ПредставлениеРеквизита = МетаданныеРеквизита.Синоним; + СтрокаПравил.ПредставлениеРеквизита = ?(ПустаяСтрока(ПредставлениеРеквизита), МетаданныеРеквизита.Имя, ПредставлениеРеквизита); КонецЕсли; КонецЦикла; @@ -1422,6 +1496,11 @@ Процедура НайтиИУдалитьДублиКлиент() Задание = НайтиИУдалитьДубли(); + Если Задание = Неопределено Тогда + НастройкиМастера.ПоказатьДиалогПередЗакрытием = Ложь; + ПерейтиНаШагМастера(Элементы.ШагВыборОсновногоЭлемента); + Возврат; + КонецЕсли; НастройкиОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект); НастройкиОжидания.ВыводитьОкноОжидания = Ложь; @@ -1457,14 +1536,21 @@ ИначеЕсли ТекущаяСтраница = Элементы.ШагВыполнениеУдаления Тогда + ПарыЗаменДублей = ПарыЗаменДублей(); + Если ПарыЗаменДублей.Количество() = 0 Тогда + ОбщегоНазначения.СообщитьПользователю(НСтр("ru = 'Необходимо выбрать хотя бы одну группу дублей.'"),, "НайденныеДубли"); + Возврат Неопределено; + КонецЕсли; + Элементы.ВыполнениеУдаления.ОтображениеСостояния.Текст = НСтр("ru = 'Удаление дублей...'"); ИмяПроцедуры = РеквизитФормыВЗначение("Объект").Метаданные().ПолноеИмя() + ".МодульОбъекта.ФоновоеУдалениеДублей"; НаименованиеМетода = НСтр("ru = 'Поиск и удаление дублей: Удаление дублей'"); - ПараметрыПроцедуры.Вставить("ПарыЗамен", ПарыЗаменДублей()); + ПараметрыПроцедуры.Вставить("ПарыЗамен", ПарыЗаменДублей); + ПараметрыПроцедуры.Вставить("СпособУдаления", СпособУдаления); Иначе - ВызватьИсключение НСтр("ru = 'Некорректное состояние в НайтиИУдалитьДубли.'"); + ВызватьИсключение НСтр("ru = 'Некорректная операция в НайтиИУдалитьДубли.'"); КонецЕсли; НастройкиЗапуска = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор); @@ -1521,9 +1607,9 @@ Если Задание.Статус <> "Выполнено" Тогда // Фоновое задание завершено с ошибкой. Если ТекущаяСтраница = Элементы.ШагВыполнениеПоиска Тогда - Кратко = НСтр("ru = 'При поиске дублей возникла ошибка:'"); + Кратко = НСтр("ru = 'Не удалость найти дубли по причине:'"); ИначеЕсли ТекущаяСтраница = Элементы.ШагВыполнениеУдаления Тогда - Кратко = НСтр("ru = 'При удалении дублей возникла ошибка:'"); + Кратко = НСтр("ru = 'Удаление дублей не выполнено по причине:'"); КонецЕсли; Кратко = Кратко + Символы.ПС + Задание.КраткоеПредставлениеОшибки; Подробно = Кратко + Символы.ПС + Символы.ПС + Задание.ПодробноеПредставлениеОшибки; @@ -1537,7 +1623,7 @@ ВсегоНайденоДублей = ЗаполнитьРезультатыПоискаДублей(Задание.АдресРезультата); ВсегоЭлементов = ВсегоНайденоДублей; Если ВсегоНайденоДублей > 0 Тогда - ОбновитьОписаниеСостоянияНайденныхДублей(ЭтотОбъект); + ОбновитьОписаниеСостоянияНайденныхДублей(); ПерейтиНаШагМастера(НастройкиМастера.ТекущийШаг.Индекс + 1); Иначе ПерейтиНаШагМастера(Элементы.ШагДублейНеНайдено); @@ -1573,42 +1659,56 @@ ВсегоНайденоДублей = 0; - ВсеГруппы = ТаблицаДублей.НайтиСтроки(ФильтрСтрок); - Для Каждого Группа Из ВсеГруппы Цикл - ФильтрСтрок.Родитель = Группа.Ссылка; + ГруппыДублей = ТаблицаДублей.НайтиСтроки(ФильтрСтрок); + Для Каждого ГруппаДубля Из ГруппыДублей Цикл + ФильтрСтрок.Родитель = ГруппаДубля.Ссылка; ЭлементыГруппы = ТаблицаДублей.НайтиСтроки(ФильтрСтрок); ГруппаДерева = ЭлементыДерева.Добавить(); ГруппаДерева.Количество = ЭлементыГруппы.Количество(); ГруппаДерева.Пометка = 1; + ГруппаДерева.НомерКартинки = -1; + + ОригинальныйЭлемент = Неопределено; // Элемент с наибольшим количеством мест использования. + МаксимальноМестИспользования = -1; - МаксСтрока = Неопределено; - МаксМест = -1; Для Каждого Элемент Из ЭлементыГруппы Цикл СтрокаДерева = ГруппаДерева.ПолучитьЭлементы().Добавить(); ЗаполнитьЗначенияСвойств(СтрокаДерева, Элемент, "Ссылка, Код, Наименование"); - СтрокаДерева.Пометка = 1; ФильтрМест.Ссылка = Элемент.Ссылка; - СтрокаДерева.Количество = МестаИспользования.НайтиСтроки(ФильтрМест).Количество(); + МестИспользования = МестаИспользования.НайтиСтроки(ФильтрМест).Количество(); - Если МаксМест < СтрокаДерева.Количество Тогда - Если МаксСтрока <> Неопределено Тогда - МаксСтрока.Основной = Ложь; + СтрокаДерева.Количество = МестИспользования; + СтрокаДерева.Пометка = ?(Элемент.ПометкаУдаления И МестИспользования = 0, 0, 1); + СтрокаДерева.НомерКартинки = ?(Элемент.ПометкаУдаления, 4, 3); + + Если МаксимальноМестИспользования < МестИспользования Тогда + Если ОригинальныйЭлемент <> Неопределено Тогда + ОригинальныйЭлемент.Основной = Ложь; КонецЕсли; - МаксСтрока = СтрокаДерева; - МаксМест = СтрокаДерева.Количество; - МаксСтрока.Основной = Истина; + ОригинальныйЭлемент = СтрокаДерева; + МаксимальноМестИспользования = МестИспользования; + ОригинальныйЭлемент.Основной = Истина; КонецЕсли; ВсегоНайденоДублей = ВсегоНайденоДублей + 1; КонецЦикла; - // Устанавливаем кандидата по максимальной ссылке. - ГруппаДерева.Наименование = МаксСтрока.Наименование + " (" + ГруппаДерева.Количество + ")"; + + // Если все дубли уже помечены на удаление и не используются, то эту группу дублей не требуется заменять повторно. + ПометкаГруппы = Ложь; + Для Каждого СтрокаДерева Из ГруппаДерева.ПолучитьЭлементы() Цикл + Если Не СтрокаДерева.Основной И СтрокаДерева.Пометка Тогда + ПометкаГруппы = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + + ГруппаДерева.Пометка = ПометкаГруппы; + ГруппаДерева.Наименование = ОригинальныйЭлемент.Наименование + " (" + ГруппаДерева.Количество + ")"; КонецЦикла; - // Места использования сохраняем для дальнейшего фильтра. МестаИспользованияКандидата.Очистить(); Элементы.ОписаниеТекущейГруппыДублей.Заголовок = НСтр("ru = 'Дублей не найдено'"); diff --git a/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПравилаПоиска/Module.bsl b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПравилаПоиска/Module.bsl index c056fab87..a70b72279 100644 --- a/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПравилаПоиска/Module.bsl +++ b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПравилаПоиска/Module.bsl @@ -195,7 +195,7 @@ КонецЕсли; КонецЦикла; - Возврат НСтр("ru ='Необходимо указать хотя бы одно правило поиска дублей.'"); + Возврат НСтр("ru = 'Необходимо указать хотя бы одно правило поиска дублей.'"); КонецФункции &НаКлиенте diff --git a/SSL/src/DataProcessors/ПоискИУдалениеДублей/ObjectModule.bsl b/SSL/src/DataProcessors/ПоискИУдалениеДублей/ObjectModule.bsl index 650d60ef1..3107c84b3 100644 --- a/SSL/src/DataProcessors/ПоискИУдалениеДублей/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ПоискИУдалениеДублей/ObjectModule.bsl @@ -16,55 +16,57 @@ // ИмяОбластиПоискаДанных - Строка - Имя области (полное имя метаданных). // // Возвращаемое значение: -// СправочникиМенеджер, ПланыВидовХарактеристикМенеджер, +// СправочникиМенеджер - , ПланыВидовХарактеристикМенеджер, // ПланыСчетовМенеджер, ПланыВидовРасчетаМенеджер - Менеджер объекта. // Функция МенеджерОбластиПоискаДублей(Знач ИмяОбластиПоискаДанных) Экспорт - Мета = Метаданные.НайтиПоПолномуИмени(ИмяОбластиПоискаДанных); + ОбластьПоискаДанных = Метаданные.НайтиПоПолномуИмени(ИмяОбластиПоискаДанных); - Если Метаданные.Справочники.Содержит(Мета) Тогда - Возврат Справочники[Мета.Имя]; + Если Метаданные.Справочники.Содержит(ОбластьПоискаДанных) Тогда + Возврат Справочники[ОбластьПоискаДанных.Имя]; - ИначеЕсли Метаданные.ПланыВидовХарактеристик.Содержит(Мета) Тогда - Возврат ПланыВидовХарактеристик[Мета.Имя]; + ИначеЕсли Метаданные.ПланыВидовХарактеристик.Содержит(ОбластьПоискаДанных) Тогда + Возврат ПланыВидовХарактеристик[ОбластьПоискаДанных.Имя]; - ИначеЕсли Метаданные.ПланыСчетов.Содержит(Мета) Тогда - Возврат ПланыСчетов[Мета.Имя]; + ИначеЕсли Метаданные.ПланыСчетов.Содержит(ОбластьПоискаДанных) Тогда + Возврат ПланыСчетов[ОбластьПоискаДанных.Имя]; - ИначеЕсли Метаданные.ПланыВидовРасчета.Содержит(Мета) Тогда - Возврат ПланыВидовРасчета[Мета.Имя]; + ИначеЕсли Метаданные.ПланыВидовРасчета.Содержит(ОбластьПоискаДанных) Тогда + Возврат ПланыВидовРасчета[ОбластьПоискаДанных.Имя]; КонецЕсли; - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Неизвестный тип объекта метаданных ""%1""'"), ИмяОбластиПоискаДанных); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Некорректный тип объекта метаданных ""%1""'"), ИмяОбластиПоискаДанных); КонецФункции -// Непосредственный поиск дублей. +// Поиск дублей во всех данных информационной базы. // // Параметры: -// ПараметрыПоиска - Структура - Описывает параметры поиска. +// ПараметрыПоиска - Структура - описывает параметры поиска. // ЭталонныйОбъект - Произвольный - объект, для которого производится поиск дублей. // // Возвращаемое значение: -// Структура - Результаты поиска дублей. -// * ТаблицаДублей - ТаблицаЗначений - Найденные дубли (в интерфейс выводятся в 2 уровня: Родители и Элементы). -// ** Ссылка - Произвольный - Ссылка элемента. -// ** Код - Произвольный - Код элемента. -// ** Наименование - Произвольный - Наименование элемента. -// ** Родитель - Произвольный - Родитель группы дублей. Если Родитель пустой, то элемент является +// Структура - результаты поиска дублей: +// * ТаблицаДублей - ТаблицаЗначений - найденные дубли (в интерфейс выводятся в 2 уровня: Родители и Элементы). +// ** Ссылка - Произвольный - ссылка элемента. +// ** Код - Произвольный - код элемента. +// ** Наименование - Произвольный - наименование элемента. +// ** Родитель - Произвольный - родитель группы дублей. Если Родитель пустой, то элемент является // родителем группы дублей. -// ** <Другие поля> - Произвольный - Значение соответствующего полей отборов и критериев сравнения дублей. -// * ОписаниеОшибки - Неопределено - Ошибки не возникло. -// - Строка - Описание ошибки, возникшей в процессе поиска дублей. -// * МестаИспользования - Неопределено, ТаблицаЗначений - Заполняется если +// ** <Другие поля> - Произвольный - значение соответствующего полей отборов и критериев сравнения дублей. +// * ОписаниеОшибки - Неопределено - ошибки не возникло. +// - Строка - описание ошибки, возникшей в процессе поиска дублей. +// * МестаИспользования - Неопределено, ТаблицаЗначений - заполняется, если // ПараметрыПоиска.РассчитыватьМестаИспользования = Истина. -// Описание колонок таблицы см. в ОбщегоНазначения.МестаИспользования(). +// Описание колонок таблицы см. в ОбщегоНазначения.МестаИспользования. // Функция ГруппыДублей(Знач ПараметрыПоиска, Знач ЭталонныйОбъект = Неопределено) Экспорт - ПолноеИмяОМ = ПараметрыПоиска.ОбластьПоискаДублей; - ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ПолноеИмяОМ); - // 1. Определяем параметры с учетом прикладного кода. + ПолноеИмяОбъектаМетаданных = ПараметрыПоиска.ОбластьПоискаДублей; + ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ПолноеИмяОбъектаМетаданных); + + // Уточняем входные параметры. РазмерВозвращаемойПорции = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыПоиска, "МаксимальноеЧислоДублей"); Если Не ЗначениеЗаполнено(РазмерВозвращаемойПорции) Тогда РазмерВозвращаемойПорции = 0; // Без ограничения. @@ -75,60 +77,60 @@ РассчитыватьМестаИспользования = Ложь; КонецЕсли; - // Для передачи в прикладной код. + // Вызываем обработчик ПараметрыПоискаДублей. + ЕстьПравилаПоиска = Ложь; + ИменаПолейДляСравненияНаРавенство = ""; // Имена реквизитов, по которым сравниваем по равенству. + ИменаПолейДляСравненияНаПодобие = ""; // Имена реквизитов, по которым будем нечетко сравнивать. + ИменаДополнительныхПолей = ""; // Имена реквизитов, дополнительно заказанные прикладными правилами. + КоличествоЭлементовДляСравнения = 0; // Сколько отдавать в прикладные правила для расчета. ДополнительныеПараметры = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыПоиска, "ДополнительныеПараметры"); + МенеджерОбластиПоиска = Неопределено; - // Вызываем прикладной код - ИспользоватьПрикладныеПравила = ПараметрыПоиска.УчитыватьПрикладныеПравила - И ЕстьПрикладныеПравилаОбластиПоискаДублей(ПолноеИмяОМ); - - ПоляСравненияНаРавенство = ""; // Имена реквизитов, по которым сравниваем по равенству. - ПоляСравненияНаПодобие = ""; // Имена реквизитов, по которым будем нечетко сравнивать. - ПоляДополнительныхДанных = ""; // Имена реквизитов, дополнительно заказанные прикладными правилами. - РазмерПрикладнойПорции = 0; // Сколько отдавать в прикладные правила для расчета. - - Если ИспользоватьПрикладныеПравила Тогда - ПрикладныеПараметры = Новый Структура; - ПрикладныеПараметры.Вставить("ПравилаПоиска", ПараметрыПоиска.ПравилаПоиска); - ПрикладныеПараметры.Вставить("ОграниченияСравнения", Новый Массив); - ПрикладныеПараметры.Вставить("КомпоновщикОтбора", ПараметрыПоиска.КомпоновщикПредварительногоОтбора); - ПрикладныеПараметры.Вставить("КоличествоЭлементовДляСравнения", 1000); + ПрикладныеПараметрыПоиска = ПоискИУдалениеДублей.ПараметрыПоискаДублей(ПараметрыПоиска.ПравилаПоиска, + ПараметрыПоиска.КомпоновщикПредварительногоОтбора); + Если ЕстьПрикладныеПравилаОбластиПоискаДублей(ПолноеИмяОбъектаМетаданных) Тогда + МенеджерОбластиПоиска = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПолноеИмяОбъектаМетаданных); + МенеджерОбластиПоиска.ПараметрыПоискаДублей(ПрикладныеПараметрыПоиска, ДополнительныеПараметры); + ЕстьПравилаПоиска = ПараметрыПоиска.УчитыватьПрикладныеПравила; + КонецЕсли; - МенеджерОбластиПоиска = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПолноеИмяОМ); - МенеджерОбластиПоиска.ПараметрыПоискаДублей(ПрикладныеПараметры, ДополнительныеПараметры); + СтандартнаяОбработка = Истина; + ПоискИУдалениеДублейПереопределяемый.ПриОпределенииПараметровПоискаДублей(ПолноеИмяОбъектаМетаданных, + ПрикладныеПараметрыПоиска, ДополнительныеПараметры, СтандартнаяОбработка); + Если Не СтандартнаяОбработка Тогда + ЕстьПравилаПоиска = ЕстьПравилаПоиска Или ПараметрыПоиска.УчитыватьПрикладныеПравила; + КонецЕсли; + Если ЕстьПравилаПоиска Тогда ВсеДополнительныеПоля = Новый Соответствие; - Для Каждого Ограничение Из ПрикладныеПараметры.ОграниченияСравнения Цикл - Для Каждого КлючЗначение Из Новый Структура(Ограничение.ДополнительныеПоля) Цикл - ИмяПоля = КлючЗначение.Ключ; + Для Каждого Ограничение Из ПрикладныеПараметрыПоиска.ОграниченияСравнения Цикл + Для Каждого ПолеТаблицы Из Новый Структура(Ограничение.ДополнительныеПоля) Цикл + ИмяПоля = ПолеТаблицы.Ключ; Если ВсеДополнительныеПоля[ИмяПоля] = Неопределено Тогда - ПоляДополнительныхДанных = ПоляДополнительныхДанных + ", " + ИмяПоля; + ИменаДополнительныхПолей = ИменаДополнительныхПолей + ", " + ИмяПоля; ВсеДополнительныеПоля[ИмяПоля] = Истина; КонецЕсли; КонецЦикла; КонецЦикла; - ПоляДополнительныхДанных = Сред(ПоляДополнительныхДанных, 2); - - // Сколько отдавать в прикладные правила для расчета. - РазмерПрикладнойПорции = ПрикладныеПараметры.КоличествоЭлементовДляСравнения; + ИменаДополнительныхПолей = Сред(ИменаДополнительныхПолей, 2); + КоличествоЭлементовДляСравнения = ПрикладныеПараметрыПоиска.КоличествоЭлементовДляСравнения; КонецЕсли; - // Списки полей, возможно измененные прикладным кодом. Для Каждого Строка Из ПараметрыПоиска.ПравилаПоиска Цикл Если Строка.Правило = "Равно" Тогда - ПоляСравненияНаРавенство = ПоляСравненияНаРавенство + ", " + Строка.Реквизит; + ИменаПолейДляСравненияНаРавенство = ИменаПолейДляСравненияНаРавенство + ", " + Строка.Реквизит; ИначеЕсли Строка.Правило = "Подобно" Тогда - ПоляСравненияНаПодобие = ПоляСравненияНаПодобие + ", " + Строка.Реквизит; + ИменаПолейДляСравненияНаПодобие = ИменаПолейДляСравненияНаПодобие + ", " + Строка.Реквизит; КонецЕсли КонецЦикла; - ПоляСравненияНаРавенство = Сред(ПоляСравненияНаРавенство, 2); - ПоляСравненияНаПодобие = Сред(ПоляСравненияНаПодобие, 2); + ИменаПолейДляСравненияНаРавенство = Сред(ИменаПолейДляСравненияНаРавенство, 2); + ИменаПолейДляСравненияНаПодобие = Сред(ИменаПолейДляСравненияНаПодобие, 2); - СтруктураПолейИдентичности = Новый Структура(ПоляСравненияНаРавенство); - СтруктураПолейПодобия = Новый Структура(ПоляСравненияНаПодобие); - СтруктураДополнительныхПолей = Новый Структура(ПоляДополнительныхДанных); + ПоляДляСравненияНаРавенство = Новый Структура(ИменаПолейДляСравненияНаРавенство); + ПоляДляСравненияНаПодобие = Новый Структура(ИменаПолейДляСравненияНаПодобие); + ДополнительныеПоля = Новый Структура(ИменаДополнительныхПолей); - // 2. Конструируем по возможно измененному компоновщику условия отбора. + // Формируем условия отбора. Характеристики = Новый Структура; Характеристики.Вставить("ДлинаКода", 0); Характеристики.Вставить("ДлинаНомера", 0); @@ -142,7 +144,7 @@ ЕстьКод = Характеристики.ДлинаКода > 0; ЕстьНомер = Характеристики.ДлинаНомера > 0; - // Дополнительные поля могут пересекаться с остальными, им надо дать псевдонимы. + // Задаем псевдонимы дополнительных полей, чтобы не пересекались с остальными полями. ТаблицаКандидатов = Новый ТаблицаЗначений; КолонкиКандидатов = ТаблицаКандидатов.Колонки; КолонкиКандидатов.Добавить("Ссылка1"); @@ -163,12 +165,12 @@ Если Не ЕстьНаименование Тогда ИменаПолейВЗапросе = ИменаПолейВЗапросе + ", Ссылка КАК Наименование"; КонецЕсли; - ИменаПолейВВыборе = СтрРазделить(ПоляСравненияНаРавенство + "," + ПоляСравненияНаПодобие, ",", Ложь); + ИменаПолейВВыборе = СтрРазделить(ИменаПолейДляСравненияНаРавенство + "," + ИменаПолейДляСравненияНаПодобие, ",", Ложь); РасшифровкаДополнительныхПолей = Новый Соответствие; ПорядковыйНомер = 0; - Для Каждого КлючЗначение Из СтруктураДополнительныхПолей Цикл - ИмяПоля = КлючЗначение.Ключ; + Для Каждого ПолеТаблицы Из ДополнительныеПоля Цикл + ИмяПоля = ПолеТаблицы.Ключ; Псевдоним = "Доп" + Формат(ПорядковыйНомер, "ЧН=; ЧГ=") + "_" + ИмяПоля; РасшифровкаДополнительныхПолей.Вставить(Псевдоним, ИмяПоля); @@ -177,6 +179,10 @@ ПорядковыйНомер = ПорядковыйНомер + 1; КонецЦикла; + ТекстЗапроса = "ВЫБРАТЬ РАЗРЕШЕННЫЕ * ИЗ #Таблица"; + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "*", ИменаПолейВЗапросе); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#Таблица", ПолноеИмяОбъектаМетаданных); + // Наполнение схемы. СхемаКД = Новый СхемаКомпоновкиДанных; @@ -187,7 +193,7 @@ НаборДанных = СхемаКД.НаборыДанных.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных")); НаборДанных.Имя = "НаборДанных1"; НаборДанных.ИсточникДанных = "ИсточникДанных1"; - НаборДанных.Запрос = "ВЫБРАТЬ РАЗРЕШЕННЫЕ " + ИменаПолейВЗапросе + " ИЗ " + ПолноеИмяОМ; + НаборДанных.Запрос = ТекстЗапроса; НаборДанных.АвтоЗаполнениеДоступныхПолей = Истина; // Инициализация компоновщика. @@ -216,6 +222,8 @@ ВыбранноеПолеКД.Поле = Новый ПолеКомпоновкиДанных("Код"); ВыбранноеПолеКД = НастройкиКД.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных")); ВыбранноеПолеКД.Поле = Новый ПолеКомпоновкиДанных("Наименование"); + ВыбранноеПолеКД = НастройкиКД.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных")); + ВыбранноеПолеКД.Поле = Новый ПолеКомпоновкиДанных("ПометкаУдаления"); // Сортировки. НастройкиКД.Порядок.Элементы.Очистить(); @@ -257,7 +265,7 @@ // Подготовка СКД к чтению данных дублей. ОтборыКандидатов = Новый Соответствие; - ИменаПолей = СтрРазделить(ПоляСравненияНаРавенство, ",", Ложь); + ИменаПолей = СтрРазделить(ИменаПолейДляСравненияНаРавенство, ",", Ложь); Для Каждого ИмяПоля Из ИменаПолей Цикл ИмяПоля = СокрЛП(ИмяПоля); ЭлементОтбораКД = НастройкиКД.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); @@ -272,27 +280,22 @@ // Результат и цикл поиска ТаблицаДублей = Новый ТаблицаЗначений; - КолонкиРезультата = ТаблицаДублей.Колонки; - КолонкиРезультата.Добавить("Ссылка"); - Для Каждого КлючЗначение Из СтруктураПолейИдентичности Цикл - Если КолонкиРезультата.Найти(КлючЗначение.Ключ) = Неопределено Тогда - КолонкиРезультата.Добавить(КлючЗначение.Ключ); + ТаблицаДублей.Колонки.Добавить("Ссылка"); + Для Каждого ПолеТаблицы Из ПоляДляСравненияНаРавенство Цикл + Если ТаблицаДублей.Колонки.Найти(ПолеТаблицы.Ключ) = Неопределено Тогда + ТаблицаДублей.Колонки.Добавить(ПолеТаблицы.Ключ); КонецЕсли; КонецЦикла; - Для Каждого КлючЗначение Из СтруктураПолейПодобия Цикл - Если КолонкиРезультата.Найти(КлючЗначение.Ключ) = Неопределено Тогда - КолонкиРезультата.Добавить(КлючЗначение.Ключ); + Для Каждого ПолеТаблицы Из ПоляДляСравненияНаПодобие Цикл + Если ТаблицаДублей.Колонки.Найти(ПолеТаблицы.Ключ) = Неопределено Тогда + ТаблицаДублей.Колонки.Добавить(ПолеТаблицы.Ключ); + КонецЕсли; + КонецЦикла; + Для Каждого ИмяПоляТаблицы Из СтрРазделить("Код,Наименование,Родитель,ПометкаУдаления", ",") Цикл + Если ТаблицаДублей.Колонки.Найти(ИмяПоляТаблицы) = Неопределено Тогда + ТаблицаДублей.Колонки.Добавить(ИмяПоляТаблицы); КонецЕсли; КонецЦикла; - Если КолонкиРезультата.Найти("Код") = Неопределено Тогда - КолонкиРезультата.Добавить("Код"); - КонецЕсли; - Если КолонкиРезультата.Найти("Наименование") = Неопределено Тогда - КолонкиРезультата.Добавить("Наименование"); - КонецЕсли; - Если КолонкиРезультата.Найти("Родитель") = Неопределено Тогда - КолонкиРезультата.Добавить("Родитель"); - КонецЕсли; ТаблицаДублей.Индексы.Добавить("Ссылка"); ТаблицаДублей.Индексы.Добавить("Родитель"); @@ -302,38 +305,40 @@ СтруктураПолей = Новый Структура; СтруктураПолей.Вставить("РасшифровкаДополнительныхПолей", РасшифровкаДополнительныхПолей); - СтруктураПолей.Вставить("СтруктураПолейИдентичности", СтруктураПолейИдентичности); - СтруктураПолей.Вставить("СтруктураПолейПодобия", СтруктураПолейПодобия); - СтруктураПолей.Вставить("СписокПолейИдентичности", ПоляСравненияНаРавенство); - СтруктураПолей.Вставить("СписокПолейПодобия", ПоляСравненияНаПодобие); + СтруктураПолей.Вставить("СтруктураПолейИдентичности", ПоляДляСравненияНаРавенство); + СтруктураПолей.Вставить("СтруктураПолейПодобия", ПоляДляСравненияНаПодобие); + СтруктураПолей.Вставить("СписокПолейИдентичности", ИменаПолейДляСравненияНаРавенство); + СтруктураПолей.Вставить("СписокПолейПодобия", ИменаПолейДляСравненияНаПодобие); Пока СледующийЭлементВыборки(ВыборкаЭталонныхОбъектов) Цикл ЭталонныйЭлемент = ВыборкаЭталонныхОбъектов.ТекущийЭлемент; // Установка отборов для выбора кандидатов. - Для Каждого КлючИЗначение Из ОтборыКандидатов Цикл - ЭлементОтбораКД = КлючИЗначение.Значение; - ЭлементОтбораКД.ПравоеЗначение = ЭталонныйЭлемент[КлючИЗначение.Ключ]; + Для Каждого ЭлементОтбора Из ОтборыКандидатов Цикл + ЭлементОтбора.Значение.ПравоеЗначение = ЭталонныйЭлемент[ЭлементОтбора.Ключ]; КонецЦикла; // Выборка кандидатов данных из СУБД. ВыборкаКандидатов = ИнициализироватьВыборкуКД(СхемаКД, НастройкиКД); КандидатыДублей = ВыборкаКандидатов.ПроцессорВыводаКД.Вывести(ВыборкаКандидатов.ПроцессорКД); - Если СтруктураПолейПодобия.Количество() > 0 Тогда + Если ПоляДляСравненияНаПодобие.Количество() > 0 Тогда - FuzzySearch = ОбщегоНазначения.ПодключитьКомпонентуИзМакета("FuzzyStringMatchExtension", "ОбщийМакет.КомпонентаПоискаСтрок"); - Если FuzzySearch = Неопределено Тогда + СравнениеСтрокНаПодобие = ПрикладныеПараметрыПоиска.СравнениеСтрокНаПодобие; + СловаИсключения = СтрСоединить(СравнениеСтрокНаПодобие.СловаИсключения, "~"); + НечеткийПоиск = ОбщегоНазначения.ПодключитьКомпонентуИзМакета("FuzzyStringMatchExtension", "ОбщийМакет.КомпонентаПоискаСтрок"); + Если НечеткийПоиск = Неопределено Тогда Результат.ОписаниеОшибки = - НСтр("ru = 'Не удалось подключить внешнюю компоненту FuzzyStringMatchExtension из макета ""ОбщийМакет.КомпонентаПоискаСтрок"" - |Подробнее см. в журнале регистрации.'"); + НСтр("ru = 'Не удалось подключить компоненту нечеткого поиска. Подробнее см. в журнале регистрации.'"); Возврат Результат; КонецЕсли; - Для Каждого КлючЗначение Из СтруктураПолейПодобия Цикл - ИмяПоля = КлючЗначение.Ключ; + Для Каждого ПолеТаблицы Из ПоляДляСравненияНаПодобие Цикл + ИмяПоля = ПолеТаблицы.Ключ; ИскомыеСтроки = СтрСоединить(КандидатыДублей.ВыгрузитьКолонку(ИмяПоля), "~"); СтрокаДляПоиска = ЭталонныйЭлемент[ИмяПоля]; - ИндексыСтрок = FuzzySearch.StringSearch(НРег(СтрокаДляПоиска), НРег(ИскомыеСтроки), "~", 10, 80, 90); + ИндексыСтрок = НечеткийПоиск.StringSearch(СтрокаДляПоиска, ИскомыеСтроки, "~", + СравнениеСтрокНаПодобие.ДлинаНебольшихСтрок, СравнениеСтрокНаПодобие.ПроцентСовпаденияНебольшихСтрок, + СравнениеСтрокНаПодобие.ПроцентСовпаденияСтрок, СловаИсключения); Если ПустаяСтрока(ИндексыСтрок) Тогда Продолжить; КонецЕсли; @@ -342,11 +347,11 @@ Продолжить; КонецЕсли; ЭлементДубль = КандидатыДублей.Получить(ИндексСтроки); - Если ИспользоватьПрикладныеПравила Тогда + Если ЕстьПравилаПоиска Тогда ДобавитьСтрокуКандидатов(ТаблицаКандидатов, ЭталонныйЭлемент, ЭлементДубль, СтруктураПолей); - Если ТаблицаКандидатов.Количество() = РазмерПрикладнойПорции Тогда - ЗарегистрироватьДублиПоПрикладнымПравилам(ТаблицаДублей, МенеджерОбластиПоиска, ЭталонныйЭлемент, ТаблицаКандидатов, - СтруктураПолей, ДополнительныеПараметры); + Если ТаблицаКандидатов.Количество() = КоличествоЭлементовДляСравнения Тогда + ЗарегистрироватьДублиПоПрикладнымПравилам(ТаблицаДублей, ПолноеИмяОбъектаМетаданных, МенеджерОбластиПоиска, + ЭталонныйЭлемент, ТаблицаКандидатов, СтруктураПолей, ДополнительныеПараметры); ТаблицаКандидатов.Очистить(); КонецЕсли; Иначе @@ -356,11 +361,11 @@ КонецЦикла; Иначе Для Каждого ЭлементДубль Из КандидатыДублей Цикл - Если ИспользоватьПрикладныеПравила Тогда + Если ЕстьПравилаПоиска Тогда ДобавитьСтрокуКандидатов(ТаблицаКандидатов, ЭталонныйЭлемент, ЭлементДубль, СтруктураПолей); - Если ТаблицаКандидатов.Количество() = РазмерПрикладнойПорции Тогда - ЗарегистрироватьДублиПоПрикладнымПравилам(ТаблицаДублей, МенеджерОбластиПоиска, ЭталонныйЭлемент, ТаблицаКандидатов, - СтруктураПолей, ДополнительныеПараметры); + Если ТаблицаКандидатов.Количество() = КоличествоЭлементовДляСравнения Тогда + ЗарегистрироватьДублиПоПрикладнымПравилам(ТаблицаДублей, ПолноеИмяОбъектаМетаданных, МенеджерОбластиПоиска, + ЭталонныйЭлемент, ТаблицаКандидатов, СтруктураПолей, ДополнительныеПараметры); ТаблицаКандидатов.Очистить(); КонецЕсли; Иначе @@ -370,9 +375,9 @@ КонецЕсли; // Обрабатываем остаток таблицы для прикладных правил. - Если ИспользоватьПрикладныеПравила Тогда - ЗарегистрироватьДублиПоПрикладнымПравилам(ТаблицаДублей, МенеджерОбластиПоиска, ЭталонныйЭлемент, ТаблицаКандидатов, - СтруктураПолей, ДополнительныеПараметры); + Если ЕстьПравилаПоиска Тогда + ЗарегистрироватьДублиПоПрикладнымПравилам(ТаблицаДублей, ПолноеИмяОбъектаМетаданных, МенеджерОбластиПоиска, + ЭталонныйЭлемент, ТаблицаКандидатов, СтруктураПолей, ДополнительныеПараметры); ТаблицаКандидатов.Очистить(); КонецЕсли; @@ -401,14 +406,14 @@ ДлительныеОперации.СообщитьПрогресс(0, "РассчитыватьМестаИспользования"); - НаборСсылок = Новый Массив; + СсылкиОбъектов = Новый Массив; Для Каждого СтрокаДублей Из ТаблицаДублей Цикл Если ЗначениеЗаполнено(СтрокаДублей.Ссылка) Тогда - НаборСсылок.Добавить(СтрокаДублей.Ссылка); + СсылкиОбъектов.Добавить(СтрокаДублей.Ссылка); КонецЕсли; КонецЦикла; - МестаИспользования = МестаИспользованияСсылок(НаборСсылок); + МестаИспользования = МестаИспользованияСсылок(СсылкиОбъектов); МестаИспользования = МестаИспользования.Скопировать( МестаИспользования.НайтиСтроки(Новый Структура("ВспомогательныеДанные", Ложь))); МестаИспользования.Индексы.Добавить("Ссылка"); @@ -429,10 +434,7 @@ // Функция ЕстьПрикладныеПравилаОбластиПоискаДублей(Знач ИмяОбъекта) Экспорт - СписокОбъектов = Новый Соответствие; - ПоискИУдалениеДублейПереопределяемый.ПриОпределенииОбъектовСПоискомДублей(СписокОбъектов); - - СведенияОбОбъекте = СписокОбъектов[ИмяОбъекта]; + СведенияОбОбъекте = ПоискИУдалениеДублей.ОбъектыСПоискомДублей()[ИмяОбъекта]; Возврат СведенияОбОбъекте <> Неопределено И (СведенияОбОбъекте = "" Или СтрНайти(СведенияОбОбъекте, "ПараметрыПоискаДублей") > 0); КонецФункции @@ -445,30 +447,22 @@ // Процедура ФоновыйПоискДублей(Знач Параметры, Знач АдресРезультата) Экспорт - // Собираем компоновщик повторно через схему и настройки. КомпоновщикПредварительногоОтбора = Новый КомпоновщикНастроекКомпоновкиДанных; - КомпоновщикПредварительногоОтбора.Инициализировать( Новый ИсточникДоступныхНастроекКомпоновкиДанных(Параметры.СхемаКомпоновки) ); КомпоновщикПредварительногоОтбора.ЗагрузитьНастройки(Параметры.НастройкиКомпоновщикаПредварительногоОтбора); - Параметры.Вставить("КомпоновщикПредварительногоОтбора", КомпоновщикПредварительногоОтбора); - // Преобразуем правила поиска в таблицу значений с индексом. ПравилаПоиска = Новый ТаблицаЗначений; ПравилаПоиска.Колонки.Добавить("Реквизит", Новый ОписаниеТипов("Строка") ); ПравилаПоиска.Колонки.Добавить("Правило", Новый ОписаниеТипов("Строка") ); ПравилаПоиска.Индексы.Добавить("Реквизит"); - Для Каждого Правило Из Параметры.ПравилаПоиска Цикл ЗаполнитьЗначенияСвойств(ПравилаПоиска.Добавить(), Правило); КонецЦикла; Параметры.Вставить("ПравилаПоиска", ПравилаПоиска); - Параметры.Вставить("РассчитыватьМестаИспользования", Истина); - // Запускаем поиск Результат = ГруппыДублей(Параметры); - ПоместитьВоВременноеХранилище(Результат, АдресРезультата); КонецПроцедуры @@ -486,10 +480,10 @@ Процедура ФоновоеУдалениеДублей(Знач Параметры, Знач АдресРезультата) Экспорт ПараметрыЗамены = Новый Структура; - ПараметрыЗамены.Вставить("ВключатьБизнесЛогику", Истина); + ПараметрыЗамены.Вставить("ВключатьБизнесЛогику", Ложь); ПараметрыЗамены.Вставить("УчитыватьПрикладныеПравила", Параметры.УчитыватьПрикладныеПравила); ПараметрыЗамены.Вставить("ЗаменаПарыВТранзакции", Ложь); - ПараметрыЗамены.Вставить("СпособУдаления", "Пометка"); + ПараметрыЗамены.Вставить("СпособУдаления", Параметры.СпособУдаления); ЗаменитьСсылки(Параметры.ПарыЗамен, ПараметрыЗамены, АдресРезультата); @@ -524,14 +518,19 @@ Возврат Результат; КонецФункции -// Дополнительный анализ кандидатов в дубли прикладном методом. +// Дополнительный анализ кандидатов в дубли с помощью обработчика ПриПоискеДублей. // -Процедура ЗарегистрироватьДублиПоПрикладнымПравилам(СтрокиДереваРезультата, Знач МенеджерОбластиПоиска, Знач ОсновныеДанные, Знач ТаблицаКандидатов, Знач СтруктураПолей, Знач ДополнительныеПараметры) +Процедура ЗарегистрироватьДублиПоПрикладнымПравилам(СтрокиДереваРезультата, Знач ПолноеИмяОбъектаМетаданных, Знач МенеджерОбластиПоиска, + Знач ОсновныеДанные, Знач ТаблицаКандидатов, Знач СтруктураПолей, Знач ДополнительныеПараметры) + Если ТаблицаКандидатов.Количество() = 0 Тогда Возврат; КонецЕсли; - МенеджерОбластиПоиска.ПриПоискеДублей(ТаблицаКандидатов, ДополнительныеПараметры); + Если МенеджерОбластиПоиска <> Неопределено Тогда + МенеджерОбластиПоиска.ПриПоискеДублей(ТаблицаКандидатов, ДополнительныеПараметры); + КонецЕсли; + ПоискИУдалениеДублейПереопределяемый.ПриПоискеДублей(ПолноеИмяОбъектаМетаданных, ТаблицаКандидатов, ДополнительныеПараметры); Данные1 = Новый Структура; Данные2 = Новый Структура; @@ -541,10 +540,12 @@ Данные1.Вставить("Ссылка", ПараКандидатов.Ссылка1); Данные1.Вставить("Код", ПараКандидатов.Поля1.Код); Данные1.Вставить("Наименование", ПараКандидатов.Поля1.Наименование); + Данные1.Вставить("ПометкаУдаления", ПараКандидатов.Поля1.ПометкаУдаления); Данные2.Вставить("Ссылка", ПараКандидатов.Ссылка2); Данные2.Вставить("Код", ПараКандидатов.Поля2.Код); Данные2.Вставить("Наименование", ПараКандидатов.Поля2.Наименование); + Данные2.Вставить("ПометкаУдаления", ПараКандидатов.Поля2.ПометкаУдаления); Для Каждого КлючЗначение Из СтруктураПолей.СтруктураПолейИдентичности Цикл ИмяПоля = КлючЗначение.Ключ; @@ -561,7 +562,7 @@ КонецЦикла; КонецПроцедуры -// Добавляем строку в таблицу кандидатов для прикладного метода. +// Добавить строку в таблицу кандидатов для прикладного метода. // Функция ДобавитьСтрокуКандидатов(ТаблицаКандидатов, Знач ДанныеОсновногоЭлемента, Знач ДанныеКандидата, Знач СтруктураПолей) @@ -570,8 +571,10 @@ Строка.Ссылка1 = ДанныеОсновногоЭлемента.Ссылка; Строка.Ссылка2 = ДанныеКандидата.Ссылка; - Строка.Поля1 = Новый Структура("Код, Наименование", ДанныеОсновногоЭлемента.Код, ДанныеОсновногоЭлемента.Наименование); - Строка.Поля2 = Новый Структура("Код, Наименование", ДанныеКандидата.Код, ДанныеКандидата.Наименование); + Строка.Поля1 = Новый Структура("Код, Наименование, ПометкаУдаления", + ДанныеОсновногоЭлемента.Код, ДанныеОсновногоЭлемента.Наименование, ДанныеОсновногоЭлемента.ПометкаУдаления); + Строка.Поля2 = Новый Структура("Код, Наименование, ПометкаУдаления", + ДанныеКандидата.Код, ДанныеКандидата.Наименование, ДанныеКандидата.ПометкаУдаления); Для Каждого КлючЗначение Из СтруктураПолей.СтруктураПолейИдентичности Цикл ИмяПоля = КлючЗначение.Ключ; @@ -596,7 +599,7 @@ Возврат Строка; КонецФункции -// Добавляем в дерево результатов найденный вариант. +// Добавить в дерево результатов найденный дубль. // Процедура ЗарегистрироватьДубль(ТаблицаДублей, Знач Элемент1, Знач Элемент2, Знач СтруктураПолей) // Определить какой элемент уже добавлен в дубли. @@ -610,7 +613,7 @@ Возврат; КонецЕсли; - // Перед регистрацией дубля надо определить ссылку группы дублей. + // Перед регистрацией дубля определить ссылку группы дублей. Если Дубль1Зарегистрирован Тогда СсылкаГруппыДублей = ?(ЗначениеЗаполнено(СтрокаДублей1.Родитель), СтрокаДублей1.Родитель, СтрокаДублей1.Ссылка); ИначеЕсли Дубль2Зарегистрирован Тогда @@ -621,7 +624,7 @@ СсылкаГруппыДублей = ГруппаДублей.Ссылка; КонецЕсли; - СписокСвойств = "Ссылка, Код, Наименование," + СтруктураПолей.СписокПолейИдентичности + "," + СтруктураПолей.СписокПолейПодобия; + СписокСвойств = "Ссылка,Код,Наименование,ПометкаУдаления," + СтруктураПолей.СписокПолейИдентичности + "," + СтруктураПолей.СписокПолейПодобия; Если Не Дубль1Зарегистрирован Тогда СведенияОДубле = ТаблицаДублей.Добавить(); diff --git a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/ВыборОбластиПоиска/Form.form b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/ВыборОбластиПоиска/Form.form index 18d927eb2..db39e3873 100644 --- a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/ВыборОбластиПоиска/Form.form +++ b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/ВыборОбластиПоиска/Form.form @@ -205,10 +205,6 @@ true - - <key>ru</key> - <value>Командная панель</value> - КоманднаяПанельРасширеннаяПодсказка 32 @@ -229,10 +225,6 @@ true - - <key>ru</key> - <value>Область поиска</value> - ГруппаОбластьПоискаРасширеннаяПодсказка 30 @@ -256,10 +248,6 @@ ДеревоРазделовПоиска 4 - - <key>ru</key> - <value>Дерево разделов поиска</value> - true true @@ -417,10 +405,6 @@ true - - <key>ru</key> - <value>Группа</value> - ГруппаРасширеннаяПодсказка 24 diff --git a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/ВыборОбластиПоиска/Module.bsl b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/ВыборОбластиПоиска/Module.bsl index 8d981a595..9ec5bb49d 100644 --- a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/ВыборОбластиПоиска/Module.bsl +++ b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/ВыборОбластиПоиска/Module.bsl @@ -329,7 +329,7 @@ &НаСервереБезКонтекста Функция НовыйЭлементДереваОбъектМетаданных(ТекущаяСтрокаДерева, ОбъектМетаданных) - ПредставлениеОбъекта = ПредставлениеФормыСписка(ОбъектМетаданных); + ПредставлениеОбъекта = ОбщегоНазначения.ПредставлениеСписка(ОбъектМетаданных); НоваяСтрока = ТекущаяСтрокаДерева.Строки.Добавить(); НоваяСтрока.Раздел = ПредставлениеОбъекта; @@ -426,29 +426,10 @@ ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; ОтборЭлемента.ПравоеЗначение = Истина; - Если КлиентскоеПриложение.ТекущийВариантИнтерфейса() = ВариантИнтерфейсаКлиентскогоПриложения.Версия8_2 Тогда - Элемент.Оформление.УстановитьЗначениеПараметра("Шрифт", Новый Шрифт(,, Истина)); // Жирный. - Иначе - Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЦветРазделаПанелиФункций); - КонецЕсли; + Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЦветРазделаПанелиФункций); КонецПроцедуры -&НаСервереБезКонтекста -Функция ПредставлениеФормыСписка(ОбъектМетаданных) - - Если Не ПустаяСтрока(ОбъектМетаданных.РасширенноеПредставлениеСписка) Тогда - Представление = ОбъектМетаданных.РасширенноеПредставлениеСписка; - ИначеЕсли Не ПустаяСтрока(ОбъектМетаданных.ПредставлениеСписка) Тогда - Представление = ОбъектМетаданных.ПредставлениеСписка; - Иначе - Представление = ОбъектМетаданных.Представление(); - КонецЕсли; - - Возврат Представление; - -КонецФункции - #КонецОбласти #Область ИнтерактивнаяЛогикаПредставления diff --git a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/УправлениеПолнотекстовымПоискомИИзвлечениемТекстов/Module.bsl b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/УправлениеПолнотекстовымПоискомИИзвлечениемТекстов/Module.bsl index ad20f79ca..7e114f0fc 100644 --- a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/УправлениеПолнотекстовымПоискомИИзвлечениемТекстов/Module.bsl +++ b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/УправлениеПолнотекстовымПоискомИИзвлечениемТекстов/Module.bsl @@ -58,9 +58,6 @@ // Обновление состояния элементов. УстановитьДоступность(); - СтандартныеПодсистемыСервер.УстановитьОтображениеЗаголовковГрупп( - ЭтотОбъект, "ГруппаАвтоматическоеИзвлечениеТекстов"); - КонецПроцедуры &НаКлиенте @@ -381,13 +378,6 @@ Элементы.МаксимальныйРазмерИндексируемыхДанных.Доступность = ОграничитьМаксимальныйРазмерИндексируемыхДанных; Элементы.ДекорацияМб.Доступность = ОграничитьМаксимальныйРазмерИндексируемыхДанных; - Если (ИндексПроверен И Не ИндексСодержитКорректныеДанные) - Или Не ИндексАктуален Тогда - Элементы.СтатусИндекса.Шрифт = Новый Шрифт(, , Истина); - Иначе - Элементы.СтатусИндекса.Шрифт = Новый Шрифт; - КонецЕсли; - Элементы.ОбновитьИндекс.Доступность = Не ИндексАктуален; КонецЕсли; diff --git a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/ВыгрузкаДанныхДляСопоставления/Module.bsl b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/ВыгрузкаДанныхДляСопоставления/Module.bsl index 2efc10bb6..536c6bdb3 100644 --- a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/ВыгрузкаДанныхДляСопоставления/Module.bsl +++ b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/ВыгрузкаДанныхДляСопоставления/Module.bsl @@ -45,10 +45,12 @@ &НаКлиенте Процедура ПриЗакрытии(ЗавершениеРаботы) - Если Не ЗавершениеРаботы Тогда - Оповестить("ВыполненОбменДанными"); + Если ЗавершениеРаботы Тогда + Возврат; КонецЕсли; + Оповестить("ВыполненОбменДанными"); + КонецПроцедуры #КонецОбласти @@ -368,7 +370,9 @@ &НаКлиенте Процедура ВыгрузкаДанныхДляСопоставленияЗавершение(Результат, ДополнительныеПараметры) Экспорт - ПриЗавершенииВыгрузкиДанныхДляСопоставления(); + Если Результат <> Неопределено Тогда + ПриЗавершенииВыгрузкиДанныхДляСопоставления(); + КонецЕсли; КонецПроцедуры diff --git a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/Форма/Module.bsl index 326e4b9ad..dec8e76c5 100644 --- a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/Форма/Module.bsl @@ -344,8 +344,8 @@ &НаКлиенте Процедура НастроитьПараметрыТранспортаСообщенийОбмена(Команда) - Отбор = Новый Структура("Узел", Объект.УзелИнформационнойБазы); - ЗначенияЗаполнения = Новый Структура("Узел", Объект.УзелИнформационнойБазы); + Отбор = Новый Структура("Корреспондент", Объект.УзелИнформационнойБазы); + ЗначенияЗаполнения = Новый Структура("Корреспондент", Объект.УзелИнформационнойБазы); Оповещение = Новый ОписаниеОповещения("НастроитьПараметрыТранспортаСообщенийОбменаЗавершение", ЭтотОбъект); ОбменДаннымиКлиент.ОткрытьФормуЗаписиРегистраСведенийПоОтбору(Отбор, @@ -510,8 +510,8 @@ &НаКлиенте Процедура ДополнениеВыгрузкиОчисткаОбщегоОтбора(Команда) - ТекстЗаголовка = НСтр("ru='Подтверждение'"); - ТекстВопроса = НСтр("ru='Очистить общий отбор?'"); + ТекстЗаголовка = НСтр("ru = 'Подтверждение'"); + ТекстВопроса = НСтр("ru = 'Очистить общий отбор?'"); ОписаниеОповещения = Новый ОписаниеОповещения("ДополнениеВыгрузкиОчисткаОбщегоОтбораЗавершение", ЭтотОбъект); ПоказатьВопрос(ОписаниеОповещения, ТекстВопроса, РежимДиалогаВопрос.ДаНет,,,ТекстЗаголовка); @@ -519,8 +519,8 @@ &НаКлиенте Процедура ДополнениеВыгрузкиОчисткаДетальногоОтбора(Команда) - ТекстЗаголовка = НСтр("ru='Подтверждение'"); - ТекстВопроса = НСтр("ru='Очистить детальный отбор?'"); + ТекстЗаголовка = НСтр("ru = 'Подтверждение'"); + ТекстВопроса = НСтр("ru = 'Очистить детальный отбор?'"); ОписаниеОповещения = Новый ОписаниеОповещения("ДополнениеВыгрузкиОчисткаДетальногоОтбораЗавершение", ЭтотОбъект); ПоказатьВопрос(ОписаниеОповещения, ТекстВопроса, РежимДиалогаВопрос.ДаНет,,,ТекстЗаголовка); КонецПроцедуры @@ -531,7 +531,7 @@ СписокВариантов = ДополнениеВыгрузкиИсторияНастроекСервер(); // Добавляем вариант сохранения текущих. - Текст = НСтр("ru='Сохранить текущую настройку...'"); + Текст = НСтр("ru = 'Сохранить текущую настройку...'"); СписокВариантов.Добавить(1, Текст, , БиблиотекаКартинок.СохранитьНастройкиОтчета); ОписаниеОповещения = Новый ОписаниеОповещения("ДополнениеВыгрузкиИсторияОтборовВыборИзМеню", ЭтотОбъект); @@ -930,9 +930,9 @@ Если ТипЗнч(ПредставлениеНастройки)=Тип("Строка") Тогда // Выбрали вариант - имя ранее сохраненной настройки. - ТекстЗаголовка = НСтр("ru='Подтверждение'"); + ТекстЗаголовка = НСтр("ru = 'Подтверждение'"); ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru='Восстановить настройки ""%1""?'"), ПредставлениеНастройки); + НСтр("ru = 'Восстановить настройки ""%1""?'"), ПредставлениеНастройки); ОписаниеОповещения = Новый ОписаниеОповещения("ДополнениеВыгрузкиИсторияОтборовЗавершение", ЭтотОбъект, ПредставлениеНастройки); ПоказатьВопрос(ОписаниеОповещения, ТекстВопроса, РежимДиалогаВопрос.ДаНет,,,ТекстЗаголовка); @@ -1163,24 +1163,37 @@ И (Объект.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.FILE Или Объект.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.FTP); - ПриИзмененииВидаТранспортаСообщенийОбмена(Истина); + ПриИзмененииВидаТранспортаСообщенийОбмена(Истина, НастроенныеВидыТранспорта); - Если Не ПропускатьСтраницуТранспорта Тогда - - Если ОбменДаннымиСервер.ЕстьПраваНаАдминистрированиеОбменов() Тогда - Элементы.НастроитьПараметрыТранспортаСообщенийОбмена.Видимость = Истина; - - ОбменДаннымиСервер.ЗаполнитьСписокВыбораДоступнымиВидамиТранспорта(Объект.УзелИнформационнойБазы, - Элементы.ВидТранспортаСообщенийОбмена); - Иначе - Элементы.НастроитьПараметрыТранспортаСообщенийОбмена.Видимость = Ложь; - - ОбменДаннымиСервер.ЗаполнитьСписокВыбораДоступнымиВидамиТранспорта(Объект.УзелИнформационнойБазы, - Элементы.ВидТранспортаСообщенийОбмена, НастроенныеВидыТранспорта); +КонецПроцедуры + +&НаСервере +Процедура ПриИзмененииВидаТранспортаСообщенийОбмена(Инициализация = Ложь, НастроенныеВидыТранспорта = Неопределено) + + ОбменЧерезВнешнееСоединение = (Объект.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.COM); + ОбменЧерезВебСервис = (Объект.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.WS); + + Если ОбменЧерезВебСервис Тогда + СтруктураНастроек = РегистрыСведений.НастройкиТранспортаОбменаДанными.НастройкиТранспортаWS(Объект.УзелИнформационнойБазы); + ЗаполнитьЗначенияСвойств(ЭтотОбъект, СтруктураНастроек, "WSЗапомнитьПароль"); + Если WSЗапомнитьПароль Тогда + WSПароль = Строка(ЭтотОбъект.УникальныйИдентификатор); КонецЕсли; + КонецЕсли; + + ИспользоватьПрогрессБар = Не ОбменЧерезВебСервис И Не ОбменМеждуПриложениямиВСервисе; + + Если Инициализация Тогда + ПропускатьСтраницуТранспорта = ПропускатьСтраницуТранспорта И (Не ОбменЧерезВебСервис Или WSЗапомнитьПароль); + ЗаполнитьТаблицуПереходов(); + Элементы.НастроитьПараметрыТранспортаСообщенийОбмена.Видимость = ОбменДаннымиСервер.ЕстьПраваНаАдминистрированиеОбменов(); + + ОбменДаннымиСервер.ЗаполнитьСписокВыбораДоступнымиВидамиТранспорта(Объект.УзелИнформационнойБазы, + Элементы.ВидТранспортаСообщенийОбмена, НастроенныеВидыТранспорта); + СписокВыбораТранспорта = Элементы.ВидТранспортаСообщенийОбмена.СписокВыбора; - + Если СписокВыбораТранспорта.Количество() = 0 Тогда СписокВыбораТранспорта.Добавить(Неопределено, НСтр("ru = 'подключение не настроено'")); @@ -1195,30 +1208,9 @@ Элементы.WSПароль.Видимость = ОбменЧерезВебСервис И Не WSЗапомнитьПароль; Элементы.НадписьWSПароль.Видимость = ОбменЧерезВебСервис И Не WSЗапомнитьПароль; - Элементы.WSЗапомнитьПароль.Видимость = ОбменЧерезВебСервис И Не WSЗапомнитьПароль; + Элементы.WSЗапомнитьПароль.Видимость = ОбменЧерезВебСервис И Не WSЗапомнитьПароль; УстановитьВидимостьКнопкиОткрытияКаталогаОбмена(); - - КонецЕсли; - -КонецПроцедуры - -&НаСервере -Процедура ПриИзмененииВидаТранспортаСообщенийОбмена(Инициализация = Ложь) - - ОбменЧерезВнешнееСоединение = (Объект.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.COM); - ОбменЧерезВебСервис = (Объект.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.WS); - - Если ОбменЧерезВебСервис Тогда - СтруктураНастроек = РегистрыСведений.НастройкиТранспортаОбменаДанными.НастройкиТранспортаWS(Объект.УзелИнформационнойБазы); - ЗаполнитьЗначенияСвойств(ЭтотОбъект, СтруктураНастроек, "WSЗапомнитьПароль"); - КонецЕсли; - - ИспользоватьПрогрессБар = Не ОбменЧерезВебСервис И Не ОбменМеждуПриложениямиВСервисе; - - Если Инициализация Тогда - ПропускатьСтраницуТранспорта = ПропускатьСтраницуТранспорта И (Не ОбменЧерезВебСервис Или WSЗапомнитьПароль); - ЗаполнитьТаблицуПереходов(); КонецЕсли; КонецПроцедуры @@ -1536,7 +1528,7 @@ Текст = ОбменДаннымиСервер.ИнтерактивноеИзменениеВыгрузкиОписаниеДополненияОбщегоОтбора(ДополнениеВыгрузки); НетОтбора = ПустаяСтрока(Текст); Если НетОтбора Тогда - Текст = НСтр("ru='Все документы'"); + Текст = НСтр("ru = 'Все документы'"); КонецЕсли; Элементы.ДополнениеВыгрузкиОбщийОтборДокументов.Заголовок = Текст; @@ -1549,7 +1541,7 @@ Текст = ОбменДаннымиСервер.ИнтерактивноеИзменениеВыгрузкиОписаниеДетальногоОтбора(ДополнениеВыгрузки); НетОтбора = ПустаяСтрока(Текст); Если НетОтбора Тогда - Текст = НСтр("ru='Дополнительные данные не выбраны'"); + Текст = НСтр("ru = 'Дополнительные данные не выбраны'"); КонецЕсли; Элементы.ДополнениеВыгрузкиДетальныйОтбор.Заголовок = Текст; @@ -1640,13 +1632,19 @@ КонецФункции &НаСервереБезКонтекста -Функция СостояниеДлительнойОперации(Знач ИдентификаторОперации, УзелОбмена) +Функция СостояниеДлительнойОперации(Знач ИдентификаторОперации, УзелОбмена, ПолучитьПарольИзСеансовыхДанных, СтрокаСообщенияОбОшибке = "") Попытка ПараметрыПодключения = ОбменДаннымиСервер.СтруктураПараметровWS(); - СохраненныеПараметры = РегистрыСведений.НастройкиТранспортаОбменаДанными.НастройкиТранспортаWS(УзелОбмена); + ПараметрыАутентификации = Неопределено; + Если ПолучитьПарольИзСеансовыхДанных Тогда + ПараметрыАутентификации = ОбменДаннымиСервер.ПарольСинхронизацииДанных(УзелОбмена); + КонецЕсли; + + СохраненныеПараметры = РегистрыСведений.НастройкиТранспортаОбменаДанными.НастройкиТранспортаWS( + УзелОбмена, ПараметрыАутентификации); ЗаполнитьЗначенияСвойств(ПараметрыПодключения, СохраненныеПараметры); ВерсииИнтерфейса = ОбменДаннымиПовтИсп.ВерсииКорреспондента(ПараметрыПодключения); @@ -1705,9 +1703,8 @@ ДлительнаяОперацияЗавершенаСОшибкой = Ложь; Если ОбменЧерезВебСервис Тогда - - СостояниеОперации = СостояниеДлительнойОперации(ИдентификаторОперации, Объект.УзелИнформационнойБазы); - + ПолучитьПарольИзСеансовыхДанных = (Не ПропускатьСтраницуТранспорта И Не WSЗапомнитьПароль); + СостояниеОперации = СостояниеДлительнойОперации(ИдентификаторОперации, Объект.УзелИнформационнойБазы, ПолучитьПарольИзСеансовыхДанных, СообщениеОбОшибке); Иначе // Обмен по COM соединению. СостояниеОперации = ОбменДаннымиВызовСервера.СостояниеЗадания(ИдентификаторЗадания); @@ -1786,7 +1783,7 @@ Элементы.СтраницыСтатусаЗагрузкиДанных.ТекущаяСтраница = Элементы[ОбменДаннымиКлиент.СтраницыСтатусаЗагрузкиДанных()[РезультатЗагрузкиДанных]]; Если Элементы.СтраницыСтатусаЗагрузкиДанных.ТекущаяСтраница=Элементы.СтатусЗагрузкиНеопределено Тогда - Элементы.ПерейтиВЖурналРегистрацииСобытийЗагрузкиДанных.Заголовок = НСтр("ru='Загрузка данных не произведена'"); + Элементы.ПерейтиВЖурналРегистрацииСобытийЗагрузкиДанных.Заголовок = НСтр("ru = 'Загрузка данных не произведена'"); Иначе Элементы.ПерейтиВЖурналРегистрацииСобытийЗагрузкиДанных.Заголовок = ОбменДаннымиКлиент.ЗаголовкиГиперссылокЗагрузкиДанных()[РезультатЗагрузкиДанных]; КонецЕсли; @@ -1795,7 +1792,7 @@ Элементы.СтраницыСтатусаВыгрузкиДанных.ТекущаяСтраница = Элементы[ОбменДаннымиКлиент.СтраницыСтатусаВыгрузкиДанных()[РезультатВыгрузкиДанных]]; Если Элементы.СтраницыСтатусаВыгрузкиДанных.ТекущаяСтраница=Элементы.СтатусВыгрузкиНеопределено Тогда - Элементы.ПерейтиВЖурналРегистрацииСобытийВыгрузкиДанных.Заголовок = НСтр("ru='Выгрузка данных не произведена'"); + Элементы.ПерейтиВЖурналРегистрацииСобытийВыгрузкиДанных.Заголовок = НСтр("ru = 'Выгрузка данных не произведена'"); Иначе Элементы.ПерейтиВЖурналРегистрацииСобытийВыгрузкиДанных.Заголовок = ОбменДаннымиКлиент.ЗаголовкиГиперссылокВыгрузкиДанных()[РезультатВыгрузкиДанных]; КонецЕсли; @@ -1844,9 +1841,9 @@ КонецФункции &НаКлиенте -Процедура ФоновоеЗаданиеЗапуститьНаКлиенте(ПараметрыЗадания, Отказ) +Процедура ФоновоеЗаданиеЗапуститьНаКлиенте(ПараметрыЗадания, Отказ, ПолучитьПарольИзСеансовыхДанных) - Результат = ФоновоеЗаданиеЗапуститьНаСервере(ПараметрыЗадания); + Результат = ФоновоеЗаданиеЗапуститьНаСервере(ПараметрыЗадания, ПолучитьПарольИзСеансовыхДанных); Если Результат = Неопределено Тогда Отказ = Истина; @@ -1914,12 +1911,17 @@ КонецПроцедуры &НаСервере -Функция ФоновоеЗаданиеЗапуститьНаСервере(ПараметрыЗадания) +Функция ФоновоеЗаданиеЗапуститьНаСервере(ПараметрыЗадания, ПолучитьПарольИзСеансовыхДанных) ДатаНачалаОперации = ТекущаяДатаСеанса(); ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор); ПараметрыВыполнения.НаименованиеФоновогоЗадания = ПараметрыЗадания.НаименованиеЗадания; + Если ПолучитьПарольИзСеансовыхДанных Тогда + ПарольСеансовыхДанных = Новый Структура("WSПароль", ОбменДаннымиСервер.ПарольСинхронизацииДанных(Объект.УзелИнформационнойБазы)); + ЗаполнитьЗначенияСвойств(ПараметрыЗадания.ПараметрыМетода, ПарольСеансовыхДанных); + КонецЕсли; + Результат = ДлительныеОперации.ВыполнитьВФоне( ПараметрыЗадания.ВыполняемыйМетод, ПараметрыЗадания.ПараметрыМетода, @@ -1941,12 +1943,26 @@ КонецПроцедуры &НаКлиенте -Процедура ОбработатьСтатусВыполненияФоновогоЗадания() +Процедура ОбработатьСтатусВыполненияФоновогоЗадания(ВыполняемоеДействие = Неопределено) + + ЗафиксироватьЗавершение = Ложь; Если РезультатВыполненияФоновогоЗадания.Статус = "Ошибка" Тогда СообщениеОбОшибке = РезультатВыполненияФоновогоЗадания.ПодробноеПредставлениеОшибки; + ЗафиксироватьЗавершение = Истина; ИначеЕсли РезультатВыполненияФоновогоЗадания.Статус = "Отменено" Тогда СообщениеОбОшибке = НСтр("ru = 'Действие отменено пользователем.'"); + ЗафиксироватьЗавершение = Истина; КонецЕсли; + + Если ЗначениеЗаполнено(ВыполняемоеДействие) + И ЗафиксироватьЗавершение Тогда + ОбменДаннымиВызовСервера.ЗафиксироватьЗавершениеОбменаСОшибкой( + Объект.УзелИнформационнойБазы, + ВыполняемоеДействие, + ДатаНачалаОперации, + СообщениеОбОшибке); + КонецЕсли; + КонецПроцедуры #КонецОбласти @@ -1956,9 +1972,21 @@ #Область ОбработчикиСобытийПереходов +&НаКлиенте +Функция Подключаемый_СтраницаНачала_ПриОткрытии(Отказ, ПропуститьСтраницу, ЭтоПереходДалее) + + ПропуститьСтраницу = ЭтоПереходДалее И ПропускатьСтраницуТранспорта; + Возврат Неопределено; + +КонецФункции + &НаКлиенте Функция Подключаемый_СтраницаНачала_ПриПереходеДалее(Отказ) + Если ПропускатьСтраницуТранспорта Тогда + Возврат Неопределено; + КонецЕсли; + // Выполняем проверки заполнения реквизитов формы. Если Объект.УзелИнформационнойБазы.Пустая() Тогда @@ -1994,6 +2022,7 @@ Если ОбменЧерезВебСервис Тогда ПроверитьПодключениеИСохранитьНастройки(Отказ); + Если Отказ Тогда ПоказатьПредупреждение(, НСтр("ru = 'Не удалось выполнить операцию.'")); КонецЕсли; @@ -2006,29 +2035,50 @@ &НаСервере Процедура ПроверитьПодключениеИСохранитьНастройки(Отказ) - ПараметрыПодключения = ОбменДаннымиСервер.СтруктураПараметровWS(); - СохраненныеПараметры = РегистрыСведений.НастройкиТранспортаОбменаДанными.НастройкиТранспортаWS(Объект.УзелИнформационнойБазы); - - ЗаполнитьЗначенияСвойств(ПараметрыПодключения, СохраненныеПараметры); - + ПараметрыАутентификации = Неопределено; Если Не ПропускатьСтраницуТранспорта Тогда - ПараметрыПодключения.WSПароль = WSПароль; + ПараметрыАутентификации = Новый Структура; + ПараметрыАутентификации.Вставить("ИспользоватьТекущегоПользователя", Ложь); + ПараметрыАутентификации.Вставить("Пароль", WSПароль); КонецЕсли; - СообщениеПользователю = ""; - WSПрокси = ОбменДаннымиСервер.ПолучитьWSПрокси(ПараметрыПодключения, , СообщениеПользователю); - - Если WSПрокси = Неопределено Тогда - ОбщегоНазначения.СообщитьПользователю(СообщениеПользователю, , "WSПароль", , Отказ); - Возврат; - КонецЕсли; - - Если Не ПропускатьСтраницуТранспорта Тогда + УстановитьПривилегированныйРежим(Истина); + ПараметрыПодключения = РегистрыСведений.НастройкиТранспортаОбменаДанными.НастройкиТранспортаWS( + Объект.УзелИнформационнойБазы, ПараметрыАутентификации); + СообщениеОбОшибке = ""; + СообщениеОбОшибкеПользователю = ""; + НастройкаЗавершена = Истина; + ПолученыДанныеДляСопоставления = Ложь; + + ЕстьПодключение = ОбменДаннымиСервер.ЕстьПодключениеККорреспонденту(Объект.УзелИнформационнойБазы, + ПараметрыПодключения, СообщениеОбОшибкеПользователю, НастройкаЗавершена, ПолученыДанныеДляСопоставления); + + Если Не ЕстьПодключение Тогда + СообщениеОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось подключиться к приложению в Интернете, по причине ""%1"". + |Убедитесь, что: + |- введен правильный пароль; + |- указан корректный адрес для подключения; + |- приложение доступно по указанному в настройках адресу; + |- настройка синхронизации не была удалена в приложении в Интернете. + |Повторите попытку синхронизации.'"), + СообщениеОбОшибкеПользователю); + Отказ = Истина; + ИначеЕсли Не НастройкаЗавершена Тогда + СообщениеОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Для продолжения необходимо перейти в программу ""%1"" и завершить в ней настройку синхронизации. Выполнение обмена данными отменено.'"), + НаименованиеКорреспондента); + Отказ = Истина; + ИначеЕсли ПолученыДанныеДляСопоставления Тогда + СообщениеОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Для продолжения необходимо перейти в программу ""%1"" и выполнить загрузку сообщения для сопоставления данных. Выполнение обмена данными отменено.'"), + НаименованиеКорреспондента); + Отказ = Истина; + КонецЕсли; + + Если ЕстьПодключение И Не ПропускатьСтраницуТранспорта И WSЗапомнитьПароль Тогда Попытка - - УстановитьПривилегированныйРежим(Истина); - // Обновляем запись в РС. СтруктураЗаписи = Новый Структура; СтруктураЗаписи.Вставить("Корреспондент", Объект.УзелИнформационнойБазы); @@ -2038,9 +2088,7 @@ РегистрыСведений.НастройкиТранспортаОбменаДанными.ОбновитьЗапись(СтруктураЗаписи); WSПароль = Строка(ЭтотОбъект.УникальныйИдентификатор); - Исключение - СообщениеОбОшибке = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииОбменДанными(), @@ -2048,9 +2096,11 @@ ОбщегоНазначения.СообщитьПользователю(СообщениеОбОшибке, , , , Отказ); Возврат; - КонецПопытки; - + КонецЕсли; + + Если Отказ Тогда + ОбщегоНазначения.СообщитьПользователю(СообщениеОбОшибке); КонецЕсли; КонецПроцедуры @@ -2073,6 +2123,8 @@ ПропуститьПолучениеДанных = Ложь; ПерейтиДалее = Ложь; + ПолучитьПарольИзСеансовыхДанных = (Не ПропускатьСтраницуТранспорта И Не WSЗапомнитьПароль); + ПараметрыМетода = Новый Структура; ПараметрыМетода.Вставить("Отказ", Ложь); ПараметрыМетода.Вставить("ДлительнаяОперация", ДлительнаяОперация); @@ -2093,7 +2145,7 @@ ПараметрыЗадания.НаименованиеЗадания = НСтр("ru = 'Получение сообщения обмена во временный каталог'"); ПараметрыЗадания.ОбработчикЗавершения = "ЗавершениеПолученияДанныхВоВременныйКаталог"; - ФоновоеЗаданиеЗапуститьНаКлиенте(ПараметрыЗадания, Отказ); + ФоновоеЗаданиеЗапуститьНаКлиенте(ПараметрыЗадания, Отказ, ПолучитьПарольИзСеансовыхДанных); Возврат Неопределено; @@ -2102,7 +2154,7 @@ &НаКлиенте Процедура ЗавершениеПолученияДанныхВоВременныйКаталог() - ОбработатьСтатусВыполненияФоновогоЗадания(); + ОбработатьСтатусВыполненияФоновогоЗадания("ЗагрузкаДанных"); Если ЗначениеЗаполнено(СообщениеОбОшибке) Тогда ПропуститьПолучениеДанных = Истина; @@ -2131,6 +2183,8 @@ // Необходимо получить во временный каталог файл, подготовленный на корреспонденте. Если Не ЗначениеЗаполнено(Объект.ИмяФайлаСообщенияОбмена) Тогда + ПолучитьПарольИзСеансовыхДанных = (Не ПропускатьСтраницуТранспорта И Не WSЗапомнитьПароль); + ПерейтиДалее = Ложь; ПараметрыМетода = Новый Структура; @@ -2148,7 +2202,7 @@ ПараметрыЗадания.НаименованиеЗадания = НСтр("ru = 'Получение файла с данными сообщения обмена во временный каталог'"); ПараметрыЗадания.ОбработчикЗавершения = "ЗавершениеПолученияФайлаСДаннымиОтКорреспондентаВоВременныйКаталог"; - ФоновоеЗаданиеЗапуститьНаКлиенте(ПараметрыЗадания, Отказ); + ФоновоеЗаданиеЗапуститьНаКлиенте(ПараметрыЗадания, Отказ, ПолучитьПарольИзСеансовыхДанных); КонецЕсли; @@ -2161,7 +2215,7 @@ &НаКлиенте Процедура ЗавершениеПолученияФайлаСДаннымиОтКорреспондентаВоВременныйКаталог() - ОбработатьСтатусВыполненияФоновогоЗадания(); + ОбработатьСтатусВыполненияФоновогоЗадания("ЗагрузкаДанных"); Если ЗначениеЗаполнено(СообщениеОбОшибке) Тогда ПропуститьПолучениеДанных = Истина; @@ -2191,7 +2245,7 @@ КонецЕсли; Иначе - ЗаполнитьЗначенияСвойств(ЭтотОбъект, РезультатВыполненияМетода); + ЗаполнитьЗначенияСвойств(ЭтотОбъект, РезультатВыполненияМетода, , "WSПароль"); Объект.ИмяФайлаСообщенияОбмена = РезультатВыполненияМетода.ИмяФайлаСообщенияОбмена; Объект.ИмяВременногоКаталогаСообщенийОбмена = РезультатВыполненияМетода.ИмяВременногоКаталогаСообщенийОбмена; @@ -2254,7 +2308,7 @@ ПараметрыЗадания.НаименованиеЗадания = НСтр("ru = 'Анализ данных сообщения обмена'"); ПараметрыЗадания.ОбработчикЗавершения = "ЗавершениеАнализаДанных"; - ФоновоеЗаданиеЗапуститьНаКлиенте(ПараметрыЗадания, Отказ); + ФоновоеЗаданиеЗапуститьНаКлиенте(ПараметрыЗадания, Отказ, Ложь); Возврат Неопределено; @@ -2267,11 +2321,6 @@ Если Не ПропуститьПолучениеДанных И ЗначениеЗаполнено(СообщениеОбОшибке) Тогда ПропуститьПолучениеДанных = Истина; - ОбменДаннымиВызовСервера.ЗафиксироватьЗавершениеОбменаСОшибкой( - Объект.УзелИнформационнойБазы, - "ЗагрузкаДанных", - ДатаНачалаОперации, - СообщениеОбОшибке); Иначе ЗавершениеАнализаДанныхНаСервере(); КонецЕсли; @@ -2469,7 +2518,7 @@ ПараметрыЗадания.НаименованиеЗадания = НСтр("ru = 'Загрузка данных из сообщения обмена'"); ПараметрыЗадания.ОбработчикЗавершения = "ЗавершениеЗагрузкиДанных"; - ФоновоеЗаданиеЗапуститьНаКлиенте(ПараметрыЗадания, Отказ); + ФоновоеЗаданиеЗапуститьНаКлиенте(ПараметрыЗадания, Отказ, Ложь); Возврат Неопределено; @@ -2492,13 +2541,16 @@ ДопИнформацияВыполнение = ""; КонецЕсли; - Если ПропуститьПолучениеДанных Тогда + Если ПолученоСообщениеДляСопоставленияДанных Тогда - ОбменДаннымиВызовСервера.ЗафиксироватьЗавершениеОбменаСОшибкой( - Объект.УзелИнформационнойБазы, - "ЗагрузкаДанных", - ДатаНачалаОперации, - СообщениеОбОшибке); + ТекущийРезультатЗагрузкиДанных = ""; + ТекущийРезультатВыгрузкиДанных = ""; + ПолучитьСостоянияОбменовДанными(ТекущийРезультатЗагрузкиДанных, ТекущийРезультатВыгрузкиДанных, Объект.УзелИнформационнойБазы); + + Если (ЗакончитьСопоставлениеДанных И Не ПропуститьПолучениеДанных) + Или (ТекущийРезультатЗагрузкиДанных = "Предупреждение_СообщениеОбменаБылоРанееПринято") Тогда + УдалитьСообщениеДляСопоставленияДанных(Объект.УзелИнформационнойБазы); + КонецЕсли; КонецЕсли; @@ -2675,10 +2727,17 @@ &НаКлиенте Функция Подключаемый_СтраницаОжиданияВыгрузкиДанныхДлительнаяОперацияОкончание_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) - Если ДлительнаяОперацияЗавершена - И Не ДлительнаяОперацияЗавершенаСОшибкой Тогда - ОбменДаннымиВызовСервера.ЗафиксироватьВыполнениеВыгрузкиДанныхВРежимеДлительнойОперации( - Объект.УзелИнформационнойБазы, ДатаНачалаОперации); + Если ДлительнаяОперацияЗавершена Тогда + Если ДлительнаяОперацияЗавершенаСОшибкой Тогда + ОбменДаннымиВызовСервера.ЗафиксироватьЗавершениеОбменаСОшибкой( + Объект.УзелИнформационнойБазы, + "ВыгрузкаДанных", + ДатаНачалаОперации, + СообщениеОбОшибке); + Иначе + ОбменДаннымиВызовСервера.ЗафиксироватьВыполнениеВыгрузкиДанныхВРежимеДлительнойОперации( + Объект.УзелИнформационнойБазы, ДатаНачалаОперации); + КонецЕсли; КонецЕсли; Возврат Неопределено; @@ -2702,6 +2761,8 @@ ПриЗавершенииВыгрузкиДанных(); КонецЕсли; Иначе + ПолучитьПарольИзСеансовыхДанных = (Не ПропускатьСтраницуТранспорта И Не WSЗапомнитьПароль); + ПараметрыМетода = Новый Структура; ПараметрыМетода.Вставить("УзелИнформационнойБазы", Объект.УзелИнформационнойБазы); ПараметрыМетода.Вставить("ВидТранспортаСообщенийОбмена", Объект.ВидТранспортаСообщенийОбмена); @@ -2718,7 +2779,7 @@ ПараметрыЗадания.НаименованиеЗадания = НСтр("ru = 'Выгрузка данных в сообщение обмена'"); ПараметрыЗадания.ОбработчикЗавершения = "ЗавершениеВыгрузкиДанных"; - ФоновоеЗаданиеЗапуститьНаКлиенте(ПараметрыЗадания, Отказ); + ФоновоеЗаданиеЗапуститьНаКлиенте(ПараметрыЗадания, Отказ, ПолучитьПарольИзСеансовыхДанных); КонецЕсли; КонецПроцедуры @@ -2921,9 +2982,7 @@ ТаблицаПереходов.Очистить(); - Если Не ПропускатьСтраницуТранспорта Тогда - ТаблицаПереходовНоваяСтрока("СтраницаНачала", "СтраницаНавигацииНачало", , "СтраницаНачала_ПриПереходеДалее"); - КонецЕсли; + ТаблицаПереходовНоваяСтрока("СтраницаНачала", "СтраницаНавигацииНачало", "СтраницаНачала_ПриОткрытии", "СтраницаНачала_ПриПереходеДалее"); Если ОбменМеждуПриложениямиВСервисе Тогда diff --git a/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Forms/НастройкаНаСторонеСервиса/Module.bsl b/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Forms/НастройкаНаСторонеСервиса/Module.bsl index 4ce0ae98a..b221b3462 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Forms/НастройкаНаСторонеСервиса/Module.bsl +++ b/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Forms/НастройкаНаСторонеСервиса/Module.bsl @@ -66,8 +66,6 @@ Элементы.ЗагрузитьНачальныйОбразНаКомпьютерПользователя.ОтображениеПодсказки = ОтображениеПодсказки.Нет; КонецЕсли; - СтандартныеПодсистемыСервер.УстановитьОтображениеЗаголовковГрупп(ЭтотОбъект); - КонецПроцедуры &НаКлиенте @@ -213,7 +211,14 @@ &НаКлиенте Процедура ЗагрузитьНачальныйОбразНаКомпьютерПользователя(Команда) - ПолучитьФайл(АдресВременногоХранилищаНачальногоОбраза, ИмяФайлаПакетаУстановки); + ПолучаемыйФайл = Новый Структура; + ПолучаемыйФайл.Вставить("Имя", ИмяФайлаПакетаУстановки); + ПолучаемыйФайл.Вставить("Хранение", АдресВременногоХранилищаНачальногоОбраза); + + ПараметрыДиалога = Новый Структура; + ПараметрыДиалога.Вставить("Фильтр", НСтр("ru = 'Архивы ZIP (*.zip)|*.zip'")); + + ОбменДаннымиКлиент.ВыбратьИСохранитьФайлНаКлиенте(ПолучаемыйФайл, ПараметрыДиалога); КонецПроцедуры diff --git a/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/ObjectModule.bsl b/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/ObjectModule.bsl index 18e58027f..7b8da547e 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/ObjectModule.bsl @@ -256,10 +256,19 @@ ЗаписатьXML(ЗаписьXML, ПараметрыПриложенияВСервисе.Наименование, "НаименованиеПриложенияВСервисе", НазначениеТипаXML.Явное); ЗаписатьXML(ЗаписьXML, ОбменДаннымиСервер.ПрефиксИнформационнойБазы(), "ПрефиксПриложенияВСервисе", НазначениеТипаXML.Явное); + Если ОбщегоНазначения.РазделениеВключено() + И ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда + МодульРаботаВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("РаботаВМоделиСервиса"); + ЗаписатьXML(ЗаписьXML, МодульРаботаВМоделиСервиса.ЗначениеРазделителяСеанса(), "ОбластьДанных", НазначениеТипаXML.Явное); + Иначе + ЗаписатьXML(ЗаписьXML, 0, "ОбластьДанных", НазначениеТипаXML.Явное); + КонецЕсли; + ЗаписьXML.ЗаписатьКонецЭлемента(); // ПараметрыАвтономногоРабочегоМеста ЗаписьXML.ЗаписатьКонецЭлемента(); // Параметры Возврат ЗаписьXML.Закрыть(); + КонецФункции Функция ВерсияФорматаФайлаНастроекОбменаДанными() diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/НастройкаПодключения/Form.form b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/НастройкаПодключения/Form.form index f0fac1e19..d27c40c2d 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/НастройкаПодключения/Form.form +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/НастройкаПодключения/Form.form @@ -3308,7 +3308,7 @@ <key>ru</key> - <value>Cинхронизация данных через каталог на FTP-сервере</value> + <value>Синхронизация данных через каталог на FTP-сервере</value> ГруппаСинхронизацияЧерезFTPРасширеннаяПодсказка @@ -3605,7 +3605,7 @@ <key>ru</key> - <value>Cинхронизация данных через электронную почту</value> + <value>Синхронизация данных через электронную почту</value> ГруппаСинхронизацияЧерезEMAILРасширеннаяПодсказка @@ -7275,7 +7275,7 @@ 5 ru - Cправка + Справка true diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/НастройкаСинхронизации/Form.form b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/НастройкаСинхронизации/Form.form index a0e5fd102..4cfcec69a 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/НастройкаСинхронизации/Form.form +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/НастройкаСинхронизации/Form.form @@ -432,7 +432,7 @@ true UserCmds - Style.NormalTextFont + Style.КомандаПомощникаНастройкиСинхронизацииОбычнаяШрифт ShowBottom Auto @@ -706,6 +706,9 @@ true true UserCmds + + Style.КомандаПомощникаНастройкиСинхронизацииОбычнаяШрифт + ShowBottom Auto @@ -977,6 +980,9 @@ Auto true UserCmds + + Style.КомандаПомощникаНастройкиСинхронизацииОбычнаяШрифт + ShowBottom Auto @@ -1249,6 +1255,9 @@ Auto true UserCmds + + Style.КомандаПомощникаНастройкиСинхронизацииОбычнаяШрифт + ShowBottom Auto @@ -1521,6 +1530,9 @@ true true UserCmds + + Style.КомандаПомощникаНастройкиСинхронизацииОбычнаяШрифт + ShowBottom Auto @@ -1793,6 +1805,9 @@ Auto true UserCmds + + Style.КомандаПомощникаНастройкиСинхронизацииОбычнаяШрифт + ShowBottom Auto @@ -2024,28 +2039,6 @@ true - - ШрифтОбычный - 2 - - - true - - - true - - - - ШрифтЖирный - 4 - - - true - - - true - - УзелОбмена diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/НастройкаСинхронизации/Module.bsl b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/НастройкаСинхронизации/Module.bsl index f18c7d50f..e688eb806 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/НастройкаСинхронизации/Module.bsl +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/НастройкаСинхронизации/Module.bsl @@ -480,7 +480,7 @@ // Все этапы завершены. Для Каждого ЭтапНастройки Из ЭтапыНастройки Цикл Элементы["Группа" + ЭтапНастройки.Название].Доступность = Истина; - Элементы[ЭтапНастройки.Кнопка].Шрифт = ЭтапНастройки.ШрифтОбычный; + Элементы[ЭтапНастройки.Кнопка].Шрифт = ОбщегоНазначенияКлиент.ШрифтСтиля("КомандаПомощникаНастройкиСинхронизацииОбычнаяШрифт"); // Зеленый флажок только для основных этапов настройки. Если ВсеЭтапыНастройки[ЭтапНастройки.Название] = "Основное" Тогда @@ -496,16 +496,16 @@ Если ЭтапНастройки.Название = ТекущийЭтапНастройки Тогда Элементы["Группа" + ЭтапНастройки.Название].Доступность = Истина; Элементы["Панель" + ЭтапНастройки.Название].ТекущаяСтраница = Элементы["Страница" + ЭтапНастройки.Название + "Текущий"]; - Элементы[ЭтапНастройки.Кнопка].Шрифт = ЭтапНастройки.ШрифтЖирный; + Элементы[ЭтапНастройки.Кнопка].Шрифт = ОбщегоНазначенияКлиент.ШрифтСтиля("КомандаПомощникаНастройкиСинхронизацииВажнаяШрифт"); ТекущийЭтапНайден = Истина; ИначеЕсли Не ТекущийЭтапНайден Тогда Элементы["Группа" + ЭтапНастройки.Название].Доступность = Истина; Элементы["Панель" + ЭтапНастройки.Название].ТекущаяСтраница = Элементы["Страница" + ЭтапНастройки.Название + "Успешно"]; - Элементы[ЭтапНастройки.Кнопка].Шрифт = ЭтапНастройки.ШрифтОбычный; + Элементы[ЭтапНастройки.Кнопка].Шрифт = ОбщегоНазначенияКлиент.ШрифтСтиля("КомандаПомощникаНастройкиСинхронизацииОбычнаяШрифт"); Иначе Элементы["Группа" + ЭтапНастройки.Название].Доступность = Ложь; Элементы["Панель" + ЭтапНастройки.Название].ТекущаяСтраница = Элементы["Страница" + ЭтапНастройки.Название + "Пустой"]; - Элементы[ЭтапНастройки.Кнопка].Шрифт = ЭтапНастройки.ШрифтОбычный; + Элементы[ЭтапНастройки.Кнопка].Шрифт = ОбщегоНазначенияКлиент.ШрифтСтиля("КомандаПомощникаНастройкиСинхронизацииОбычнаяШрифт"); КонецЕсли; КонецЦикла; @@ -781,8 +781,6 @@ СтрокаЭтап = ЭтапыНастройки.Добавить(); СтрокаЭтап.Название = Название; СтрокаЭтап.Кнопка = Кнопка; - СтрокаЭтап.ШрифтОбычный = Новый Шрифт(Элементы[Кнопка].Шрифт, , , Ложь); - СтрокаЭтап.ШрифтЖирный = Новый Шрифт(Элементы[Кнопка].Шрифт, , , Истина); Возврат СтрокаЭтап; diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/УдалениеНастройкиСинхронизации/Module.bsl b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/УдалениеНастройкиСинхронизации/Module.bsl index a52c848f9..4e0d25b37 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/УдалениеНастройкиСинхронизации/Module.bsl +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/УдалениеНастройкиСинхронизации/Module.bsl @@ -227,10 +227,11 @@ СообщениеОбОшибке = СтатусЗавершения.СообщениеОбОшибке; Возврат; Иначе - НастройкаУдалена = СтатусЗавершения.Результат.НастройкаУдалена; - НастройкаУдаленаВКорреспонденте = СтатусЗавершения.Результат.НастройкаУдаленаВКорреспонденте; + РезультатВыполнения = СтатусЗавершения.Результат; - СообщениеОбОшибке = СтатусЗавершения.СообщениеОбОшибке; + НастройкаУдалена = РезультатВыполнения.НастройкаУдалена; + НастройкаУдаленаВКорреспонденте = РезультатВыполнения.НастройкаУдаленаВКорреспонденте; + СообщениеОбОшибке = РезультатВыполнения.СообщениеОбОшибке; КонецЕсли; КонецПроцедуры diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ManagerModule.bsl b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ManagerModule.bsl index f523b959f..07f938e98 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ManagerModule.bsl +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ManagerModule.bsl @@ -484,7 +484,12 @@ Иначе ПараметрыОбработчика.СообщениеОбОшибке = ФоновоеЗадание.КраткоеПредставлениеОшибки; Если ЗначениеЗаполнено(ФоновоеЗадание.ПодробноеПредставлениеОшибки) Тогда - ПараметрыОбработчика.СообщениеОбОшибке = ФоновоеЗадание.ПодробноеПредставлениеОшибки; + ЗаписьЖурналаРегистрации( + ОбменДаннымиСервер.СобытиеЖурналаРегистрацииОбменДанными(), + УровеньЖурналаРегистрации.Ошибка, + Метаданные.Обработки.ПомощникСозданияОбменаДанными, + , + ФоновоеЗадание.ПодробноеПредставлениеОшибки); КонецЕсли; ПараметрыОбработчика.Отказ = Истина; @@ -1292,6 +1297,11 @@ Если ОбменДаннымиСервер.ЕстьАлгоритмМенеджераПланаОбмена("ПриСохраненииНастроекСинхронизацииДанных", ИмяПланаОбмена) Тогда НачатьТранзакцию(); Попытка + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить(ОбщегоНазначения.ИмяТаблицыПоСсылке(НастройкиСинхронизации.УзелОбмена)); + ЭлементБлокировки.УстановитьЗначение("Ссылка", НастройкиСинхронизации.УзелОбмена); + Блокировка.Заблокировать(); + УзелОбъект = НастройкиСинхронизации.УзелОбмена.ПолучитьОбъект(); ПланыОбмена[ИмяПланаОбмена].ПриСохраненииНастроекСинхронизацииДанных(УзелОбъект, НастройкиСинхронизации.ДанныеЗаполнения); @@ -1379,27 +1389,30 @@ // 1. Удаление настройки синхронизации в программе-корреспонденте (опционально). Если НастройкиУдаления.УдалитьНастройкуВКорреспонденте Тогда УдалитьНастройкуСинхронизацииВКорреспонденте(НастройкиУдаления, Результат); - Если Не Результат.НастройкаУдаленаВКорреспонденте Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + Результат.НастройкаУдалена = Ложь; + Результат.СообщениеОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'При удалении настройки синхронизации в программе ""%1"" возникла ошибка: %2. | |Попробуйте выполнить удаление позже, или снимите флажок ""Удалить настройку также в программе..."".'"), ОбщегоНазначения.ЗначениеРеквизитаОбъекта(НастройкиУдаления.УзелОбмена, "Наименование"), Результат.СообщениеОбОшибкеВКорреспонденте); + + ПоместитьВоВременноеХранилище(Результат, АдресРезультата); + Возврат; КонецЕсли; - КонецЕсли; // 2. Удаление настройки синхронизации в этой программе. Попытка ОбменДаннымиСервер.УдалитьНастройкуСинхронизации(НастройкиУдаления.УзелОбмена); Исключение + Информация = ИнформацияОбОшибке(); Результат.НастройкаУдалена = Ложь; - Результат.СообщениеОбОшибке = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + Результат.СообщениеОбОшибке = КраткоеПредставлениеОшибки(Информация); ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииУдалениеОбменаДанными(), - УровеньЖурналаРегистрации.Ошибка, , , Результат.СообщениеОбОшибке); + УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(Информация)); КонецПопытки; ПоместитьВоВременноеХранилище(Результат, АдресРезультата); @@ -1512,6 +1525,7 @@ КонецПопытки; КонецЕсли; + Иначе Результат.НастройкаУдаленаВКорреспонденте = Ложь; Результат.СообщениеОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( @@ -1586,26 +1600,51 @@ // Обновляем код предопределенного узла этой базы, если он не заполнен. ЭтотУзел = МенеджерПланаОбмена.ЭтотУзел(); - КодЭтогоУзлаВБазе = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ЭтотУзел, "Код"); - ЭтоПланОбменаРИБ = ОбменДаннымиПовтИсп.ЭтоПланОбменаРаспределеннойИнформационнойБазы( - НастройкиПодключения.ИмяПланаОбмена); - - Если ПустаяСтрока(КодЭтогоУзлаВБазе) Тогда + НачатьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("ПланОбмена." + НастройкиПодключения.ИмяПланаОбмена); + ЭлементБлокировки.УстановитьЗначение("Ссылка", ЭтотУзел); + Блокировка.Заблокировать(); - ЭтотУзелОбъект = ЭтотУзел.ПолучитьОбъект(); - ЭтотУзелОбъект.Код = КодЭтогоУзла; - ЭтотУзелОбъект.Наименование = НастройкиПодключения.НаименованиеЭтойБазы; - ЭтотУзелОбъект.ДополнительныеСвойства.Вставить("ПолучениеСообщенияОбмена"); - ЭтотУзелОбъект.Записать(); - - КодЭтогоУзлаВБазе = КодЭтогоУзла; - - КонецЕсли; + КодЭтогоУзлаВБазе = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ЭтотУзел, "Код"); + Если ПустаяСтрока(КодЭтогоУзлаВБазе) Тогда + + ЭтотУзелОбъект = ЭтотУзел.ПолучитьОбъект(); + ЭтотУзелОбъект.Код = КодЭтогоУзла; + ЭтотУзелОбъект.Наименование = НастройкиПодключения.НаименованиеЭтойБазы; + ЭтотУзелОбъект.ДополнительныеСвойства.Вставить("ПолучениеСообщенияОбмена"); + ЭтотУзелОбъект.Записать(); + + КодЭтогоУзлаВБазе = КодЭтогоУзла; + + ИначеЕсли КодЭтогоУзлаВБазе <> КодЭтогоУзла Тогда + Если Не ОбщегоНазначения.РазделениеВключено() + И Не ОбменДаннымиСервер.ЭтоПланОбменаXDTO(НастройкиПодключения.ИмяПланаОбмена) + И (НастройкиПодключения.ИспользоватьПрефиксыДляНастройкиОбмена + Или НастройкиПодключения.ИспользоватьПрефиксыДляНастройкиОбменаКорреспондента) + И ОбменДаннымиСервер.УзлыПланаОбмена(НастройкиПодключения.ИмяПланаОбмена).Количество() = 0 Тогда + + ЭтотУзелОбъект = ЭтотУзел.ПолучитьОбъект(); + ЭтотУзелОбъект.Код = КодЭтогоУзла; + ЭтотУзелОбъект.ДополнительныеСвойства.Вставить("ПолучениеСообщенияОбмена"); + ЭтотУзелОбъект.Записать(); + + КодЭтогоУзлаВБазе = КодЭтогоУзла; + + КонецЕсли; + КонецЕсли; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; СоздаватьНовыйУзел = Ложь; // Получаем узел корреспондента. - Если ЭтоПланОбменаРИБ + Если ОбменДаннымиПовтИсп.ЭтоПланОбменаРаспределеннойИнформационнойБазы(НастройкиПодключения.ИмяПланаОбмена) И НастройкиПодключения.ВариантРаботыМастера = "ПродолжитьНастройкуОбменаДанными" Тогда ГлавныйУзел = ОбменДаннымиСервер.ГлавныйУзел(); @@ -1978,17 +2017,7 @@ ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.НаименованиеЭтойБазы, "НаименованиеВторойБазы"); ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.НаименованиеВторойБазы, "НаименованиеЭтойБазы"); - Если НастройкиПодключения.ИспользоватьПрефиксыДляНастройкиОбмена - Или НастройкиПодключения.ИспользоватьПрефиксыДляНастройкиОбменаКорреспондента Тогда - - ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.ПрефиксИнформационнойБазыИсточника, "КодНовогоУзлаВторойБазы"); - - Иначе - - ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.ИдентификаторИнформационнойБазыИсточника, "КодНовогоУзлаВторойБазы"); - - КонецЕсли; - + ДобавитьЗаписьXML(ЗаписьXML, КодУзла(НастройкиПодключения), "КодНовогоУзлаВторойБазы"); ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.ПрефиксИнформационнойБазыПриемника, "ПрефиксИнформационнойБазыИсточника"); // Настройки транспорта сообщений обмена. @@ -2056,12 +2085,7 @@ // Поддержка файла настроек обмена формата версии 1.0. ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.НаименованиеЭтойБазы, "НаименованиеНастройкиВыполненияОбмена"); - Если НастройкиПодключения.ИспользоватьПрефиксыДляНастройкиОбмена - Или НастройкиПодключения.ИспользоватьПрефиксыДляНастройкиОбменаКорреспондента Тогда - ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.ПрефиксИнформационнойБазыИсточника, "КодНовогоУзла"); - Иначе - ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.ИдентификаторИнформационнойБазыИсточника, "КодНовогоУзла"); - КонецЕсли; + ДобавитьЗаписьXML(ЗаписьXML, КодУзла(НастройкиПодключения), "КодНовогоУзла"); КодУзлаИБ = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(НастройкиПодключения.УзелИнформационнойБазы, "Код"); diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ObjectModule.bsl b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ObjectModule.bsl index 630103208..9010954d7 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ObjectModule.bsl @@ -244,8 +244,13 @@ НачатьТранзакцию(); Попытка + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить(ОбщегоНазначения.ИмяТаблицыПоСсылке(УзелИнформационнойБазы)); + ЭлементБлокировки.УстановитьЗначение("Ссылка", УзелИнформационнойБазы); + Блокировка.Заблокировать(); // Обновляем настройки для узла. + ЗаблокироватьДанныеДляРедактирования(УзелИнформационнойБазы); УзелИнформационнойБазыОбъект = УзелИнформационнойБазы.ПолучитьОбъект(); // Установка значений по умолчанию. @@ -298,14 +303,14 @@ Процедура УдалитьНастройкуОбменаДанными() - УстановитьПривилегированныйРежим(Истина); МенеджерПланаОбмена = ПланыОбмена[ИмяПланаОбмена]; УдаляемыйУзел = МенеджерПланаОбмена.НайтиПоКоду(КодНовогоУзлаВторойБазы); + Если Не УдаляемыйУзел.Пустая() Тогда - УдаляемыйУзелОбъект = УдаляемыйУзел.ПолучитьОбъект(); - УдаляемыйУзелОбъект.Удалить(); + ОбменДаннымиСервер.УдалитьНастройкуСинхронизации(УдаляемыйУзел); КонецЕсли; + КонецПроцедуры // Выполняет выгрузку параметров помощника во временное хранилище для продолжения настройки обмена во второй базе. @@ -443,11 +448,25 @@ Если ПустаяСтрока(ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ЭтотУзел, "Код")) Или (ЭтоПланОбменаРИБ И КодЭтогоУзлаВБазе <> КодЭтогоУзла) Или (ИспользоватьПрефиксыДляНастройкиОбмена И КодЭтогоУзлаВБазе <> КодЭтогоУзла) Тогда - ЭтотУзелОбъект = ЭтотУзел.ПолучитьОбъект(); - ЭтотУзелОбъект.Код = КодЭтогоУзла; - ЭтотУзелОбъект.Наименование = НаименованиеЭтойБазы; - ЭтотУзелОбъект.ДополнительныеСвойства.Вставить("ПолучениеСообщенияОбмена"); - ЭтотУзелОбъект.Записать(); + + НачатьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить(ОбщегоНазначения.ИмяТаблицыПоСсылке(ЭтотУзел)); + ЭлементБлокировки.УстановитьЗначение("Ссылка", ЭтотУзел); + Блокировка.Заблокировать(); + + ЭтотУзелОбъект = ЭтотУзел.ПолучитьОбъект(); + ЭтотУзелОбъект.Код = КодЭтогоУзла; + ЭтотУзелОбъект.Наименование = НаименованиеЭтойБазы; + ЭтотУзелОбъект.ДополнительныеСвойства.Вставить("ПолучениеСообщенияОбмена"); + ЭтотУзелОбъект.Записать(); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; КонецЕсли; diff --git a/SSL/src/DataProcessors/ПрограммыЭлектроннойПодписиИШифрования/ManagerModule.bsl b/SSL/src/DataProcessors/ПрограммыЭлектроннойПодписиИШифрования/ManagerModule.bsl index 5bb2aa78e..ac4e6ac1e 100644 --- a/SSL/src/DataProcessors/ПрограммыЭлектроннойПодписиИШифрования/ManagerModule.bsl +++ b/SSL/src/DataProcessors/ПрограммыЭлектроннойПодписиИШифрования/ManagerModule.bsl @@ -7,6 +7,7 @@ /////////////////////////////////////////////////////////////////////////////////////////////////////// #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + #Область СлужебныеПроцедурыИФункции Процедура ДобавитьПоставляемыеНастройкиПрограмм(Настройки) Экспорт @@ -152,10 +153,18 @@ Настройка.АлгоритмыХеширования.Добавить("RUS-HASH"); Настройка.АлгоритмыШифрования.Добавить("GOST28147"); + Настройка = Настройки.Добавить(); + Настройка.Представление = НСтр("ru = 'КриптоПро eToken CSP'"); + Настройка.ИмяПрограммы = "eToken Base Cryptographic Provider"; + Настройка.ТипПрограммы = 1; + Настройка.АлгоритмПодписи = "RSA_SIGN"; + Настройка.АлгоритмХеширования = "SHA-1"; + Настройка.АлгоритмШифрования = "DES"; + Настройка.Идентификатор = "eToken"; + КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обновление информационной базы. +#Область ОбновлениеИнформационнойБазы Процедура ДобавитьПрограммыНачальногоЗаполнения(Программы) Экспорт @@ -238,4 +247,35 @@ КонецПроцедуры #КонецОбласти + +#Область Локализация + +Функция ПредставленияСвойствСубъектаСертификата() Экспорт + + ПредставленияСвойств = Новый Соответствие; + ПредставленияСвойств["Должность"] = НСтр("ru = 'Должность'"); + ПредставленияСвойств["ОГРН"] = НСтр("ru = 'ОГРН'"); + ПредставленияСвойств["ОГРНИП"] = НСтр("ru = 'ОГРНИП'"); + ПредставленияСвойств["СНИЛС"] = НСтр("ru = 'СНИЛС'"); + ПредставленияСвойств["ИНН"] = НСтр("ru = 'ИНН'"); + ПредставленияСвойств["Фамилия"] = НСтр("ru = 'Фамилия'"); + ПредставленияСвойств["Имя"] = НСтр("ru = 'Имя'"); + ПредставленияСвойств["Отчество"] = НСтр("ru = 'Отчество'"); + Возврат ПредставленияСвойств; + +КонецФункции + +Функция ПредставленияСвойствИздателяСертификата() Экспорт + + ПредставленияСвойств = Новый Соответствие; + ПредставленияСвойств["ОГРН"] = НСтр("ru = 'ОГРН'"); + ПредставленияСвойств["ИНН"] = НСтр("ru = 'ИНН'"); + Возврат ПредставленияСвойств; + +КонецФункции + +#КонецОбласти + +#КонецОбласти + #КонецЕсли diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВерсияПрисоединенногоФайла/Module.bsl b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВерсияПрисоединенногоФайла/Module.bsl index 7a04ab885..e8bff5968 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВерсияПрисоединенногоФайла/Module.bsl +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВерсияПрисоединенногоФайла/Module.bsl @@ -30,7 +30,7 @@ Элементы.ГруппаХранение.Видимость = Ложь; КонецЕсли; - ТомПолныйПуть = РаботаСФайламиСлужебный.ПолныйПутьТома(ЭтотОбъект.Объект.Том); + ТомПолныйПуть = РаботаСФайламиВТомахСлужебный.ПолныйПутьТома(ЭтотОбъект.Объект.Том); ОбщиеНастройки = РаботаСФайламиСлужебныйПовтИсп.НастройкиРаботыСФайлами().ОбщиеНастройки; @@ -53,7 +53,7 @@ КонецЕсли; Если Не ЗначениеЗаполнено(Кодировка) Тогда - Кодировка = НСтр("ru='По умолчанию'"); + Кодировка = НСтр("ru = 'По умолчанию'"); КонецЕсли; Иначе Элементы.Кодировка.Видимость = Ложь; diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВсеФайлы/Form.form b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВсеФайлы/Form.form index a31b09dc2..236da48f9 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВсеФайлы/Form.form +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВсеФайлы/Form.form @@ -1099,36 +1099,6 @@ ФормаГруппаКомандДополнительные 132 - - ФормаИзменить82 - 126 - - <key>ru</key> - <value>Открыть карточку</value> - - true - true - - true - - - ФормаИзменить82РасширеннаяПодсказка - 127 - Label - true - true - - Left - - - Form.Command.ОткрытьСвойстваФайла - Normal - Auto - true - true - UserCmds - Auto - ФормаУстановитьПометкуУдаления 128 diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВсеФайлы/Module.bsl b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВсеФайлы/Module.bsl index bd5884d42..284fe9eac 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВсеФайлы/Module.bsl +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВсеФайлы/Module.bsl @@ -26,11 +26,6 @@ ПриИзмененииИспользованияПодписанияИлиШифрованияНаСервере(); - Если КлиентскоеПриложение.ТекущийВариантИнтерфейса() = ВариантИнтерфейсаКлиентскогоПриложения.Версия8_2 Тогда - Элементы.ФормаИзменить.Видимость = Ложь; - Элементы.ФормаИзменить82.Видимость = Истина; - КонецЕсли; - НавигационнаяСсылка = "e1cib/app/" + ЭтотОбъект.ИмяФормы; КонецПроцедуры diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВыборГруппы/Module.bsl b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВыборГруппы/Module.bsl index 85015a429..cfeaeca5e 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВыборГруппы/Module.bsl +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВыборГруппы/Module.bsl @@ -96,26 +96,51 @@ &НаКлиенте Процедура СписокВыборЗначения(Элемент, Значение, СтандартнаяОбработка) + ПереместитьФайлыВГруппу(Параметры.ПеремещаемыеФайлы, Значение); ОповеститьОбИзменении(ТипЗнч(Параметры.ПеремещаемыеФайлы[0])); Оповестить("Запись_Файл", Новый Структура, Параметры.ПеремещаемыеФайлы); Закрыть(); + КонецПроцедуры &НаСервереБезКонтекста Процедура ПереместитьФайлыВГруппу(Знач Файлы, Знач Группа) + + Если Файлы.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + ИмяТаблицы = Файлы[0].Метаданные().ПолноеИмя(); + + Блокировка = Новый БлокировкаДанных; + Для Каждого ФайлСсылка Из Файлы Цикл + ЭлементБлокировки = Блокировка.Добавить(ИмяТаблицы); + ЭлементБлокировки.УстановитьЗначение("Ссылка", ФайлСсылка); + КонецЦикла; + НачатьТранзакцию(); Попытка + + Блокировка.Заблокировать(); + Для Каждого ФайлСсылка Из Файлы Цикл + + ЗаблокироватьДанныеДляРедактирования(ФайлСсылка); + ФайлОбъект = ФайлСсылка.ПолучитьОбъект(); ФайлОбъект.Родитель = Группа; ФайлОбъект.Записать(); + КонецЦикла; + ЗафиксироватьТранзакцию(); + Исключение ОтменитьТранзакцию(); ВызватьИсключение; КонецПопытки; + КонецПроцедуры &НаКлиенте diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВыборКодировки/Module.bsl b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВыборКодировки/Module.bsl index c782a70b6..410ebef9a 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВыборКодировки/Module.bsl +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВыборКодировки/Module.bsl @@ -107,7 +107,7 @@ // Возвращает таблицу имен кодировок. // // Возвращаемое значение: -// Таблица значений +// ТаблицаЗначений - // &НаСервереБезКонтекста Функция ПолучитьПолныйСписокКодировок() diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныеФайлы/Form.form b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныеФайлы/Form.form index 0350cb76d..959e5c906 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныеФайлы/Form.form +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныеФайлы/Form.form @@ -8,11 +8,7 @@ ВладелецФайла 280 - Style.LargeTextFont - false - false - false - false + Style.ВладелецФайловШрифт true true @@ -47,11 +43,7 @@ true true - Style.LargeTextFont - false - false - false - false + Style.ВладелецФайловШрифт @@ -2858,31 +2850,6 @@ ФормаГруппаДополнительно 216 - - ФормаИзменить82 - 238 - true - - true - - - ФормаИзменить82РасширеннаяПодсказка - 239 - Label - true - true - - Left - - - Form.Command.ОткрытьСвойстваФайла - Normal - Auto - true - true - UserCmds - Auto - ФормаСкопировать 19 diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныеФайлы/Module.bsl b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныеФайлы/Module.bsl index e5fadcede..40059fab9 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныеФайлы/Module.bsl +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныеФайлы/Module.bsl @@ -145,13 +145,6 @@ ПриИзмененииИспользованияПодписанияИлиШифрованияНаСервере(); - Если КлиентскоеПриложение.ТекущийВариантИнтерфейса() = ВариантИнтерфейсаКлиентскогоПриложения.Версия8_2 Тогда - Элементы.ФормаИзменить.Видимость = Ложь; - Элементы.ФормаИзменить82.Видимость = Истина; - Элементы.ФормаСкопировать.ТолькоВоВсехДействиях = Ложь; - Элементы.УстановитьПометкуУдаления.ТолькоВоВсехДействиях = Ложь; - КонецЕсли; - ИспользоватьПредпросмотр = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( ТипСправочникаСФайлами, "Предпросмотр"); @@ -362,11 +355,14 @@ &НаКлиенте Процедура СписокПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле) + ВладелецСправочникФайлы = Ложь; + МассивИменФайлов = Новый Массив; Если ТипЗнч(ПараметрыПеретаскивания.Значение) = Тип("Массив") И ПараметрыПеретаскивания.Значение.Количество() > 0 Тогда ПеретаскиваемыйФайл = ПараметрыПеретаскивания.Значение[0]; + ВладелецФайловСовпадает = ВладелецФайловСовпадает(Параметры.ВладелецФайла, ПеретаскиваемыйФайл); Если ВозможностьСоздаватьГруппыФайлов И ТипЗнч(ПеретаскиваемыйФайл) = ТипСправочникаСФайлами @@ -380,7 +376,14 @@ Если ТипЗнч(ПеретаскиваемыйФайл) = Тип("Файл") И ПеретаскиваемыйФайл.ЭтоФайл() Тогда + МассивИменФайлов.Добавить(ПеретаскиваемыйФайл.ПолноеИмя); + ВладелецСправочникФайлы = Истина; + + Иначе + + МассивИменФайлов.Добавить(ПеретаскиваемыйФайл); + КонецЕсли; КонецЦикла; @@ -390,12 +393,27 @@ СтандартнаяОбработка = Ложь; МассивИменФайлов.Добавить(ПараметрыПеретаскивания.Значение.ПолноеИмя); + ВладелецСправочникФайлы = Истина; КонецЕсли; Если МассивИменФайлов.Количество() > 0 Тогда - РаботаСФайламиСлужебныйКлиент.ДобавитьФайлыПеретаскиванием( + Если ВладелецСправочникФайлы = Истина Тогда + + РаботаСФайламиСлужебныйКлиент.ДобавитьФайлыПеретаскиванием( Параметры.ВладелецФайла, УникальныйИдентификатор, МассивИменФайлов); + + Иначе + + Действие = ?(ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Копирование, + "Копирование", "Перемещение"); + ПереместитьИлиСкопироватьПрисоединенныеФайлы(МассивИменФайлов, Параметры.ВладелецФайла, Действие); + + ОповеститьОбИзменении(Параметры.ВладелецФайла); + Оповестить("Запись_Файл", Новый Структура("ЭтоНовый, ВладелецФайла", Истина, Параметры.ВладелецФайла), + МассивИменФайлов); + + КонецЕсли; КонецЕсли; КонецПроцедуры @@ -540,8 +558,8 @@ ТекущиеДанные = Элементы.Список.ТекущиеДанные; Если ТекущиеДанные <> Неопределено Тогда ШаблонВопроса = ?(ТекущиеДанные.ПометкаУдаления, - НСтр("ru='Снять с ""%1"" пометку на удаление?'"), - НСтр("ru='Пометить ""%1"" на удаление?'")); + НСтр("ru = 'Снять с ""%1"" пометку на удаление?'"), + НСтр("ru = 'Пометить ""%1"" на удаление?'")); ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонВопроса, ТекущиеДанные.Наименование); ДополнительныеПараметры = Новый Структура("ФайлСсылка", ТекущиеДанные.Ссылка); Оповещение = Новый ОписаниеОповещения("ПослеВопросОПометкиНаУдаление", ЭтотОбъект, ДополнительныеПараметры); @@ -701,7 +719,7 @@ ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.ВыборКаталога); ДиалогОткрытияФайла.ПолноеИмяФайла = ""; - ДиалогОткрытияФайла.Фильтр = НСтр("ru = 'Все файлы(*.*)|*.*'"); + ДиалогОткрытияФайла.Фильтр = НСтр("ru = 'Все файлы (*.*)|*.*'"); ДиалогОткрытияФайла.МножественныйВыбор = Ложь; ДиалогОткрытияФайла.Заголовок = НСтр("ru = 'Выберите каталог'"); Если Не ДиалогОткрытияФайла.Выбрать() Тогда @@ -1771,21 +1789,16 @@ АдресПапкиВОблачномСервисе = РаботаСФайламиСлужебныйКлиентСервер.АдресВОблачномСервисе( СведенияОСинхронизации.Сервис, СведенияОСинхронизации.Href); - ЧастиСтроки = Новый Массив; - ЧастиСтроки.Добавить(НСтр("ru = 'Работа с файлами ведется в облачном сервисе'")); - ЧастиСтроки.Добавить(" "); - ЧастиСтроки.Добавить(Новый ФорматированнаяСтрока(СведенияОСинхронизации.УчетнаяЗаписьНаименование,,,, АдресПапкиВОблачномСервисе)); - ЧастиСтроки.Добавить(". "); - Элементы.ДекорацияПояснение.Заголовок = Новый ФорматированнаяСтрока(ЧастиСтроки); + Элементы.ДекорацияПояснение.Заголовок = СтроковыеФункции.ФорматированнаяСтрока( + НСтр("ru = 'Работа с файлами ведется в облачном сервисе %2.'"), + Строка(АдресПапкиВОблачномСервисе), Строка(СведенияОСинхронизации.УчетнаяЗаписьНаименование)); Элементы.ДекорацияКартинкаСтатусСинхронизации.Видимость = НЕ СведенияОСинхронизации.Синхронизирован; Элементы.ДекорацияДатаСинхронизации.ОтображениеПодсказки =?(СведенияОСинхронизации.Синхронизирован, ОтображениеПодсказки.Нет, ОтображениеПодсказки.Кнопка); - ЧастиСтроки.Очистить(); - ЧастиСтроки.Добавить(НСтр("ru = 'Синхронизировано'")); - ЧастиСтроки.Добавить(": "); - ЧастиСтроки.Добавить(Новый ФорматированнаяСтрока(Формат(СведенияОСинхронизации.ДатаСинхронизации, "ДЛФ=DD"),,,, "OpenJournal")); - Элементы.ДекорацияДатаСинхронизации.Заголовок = Новый ФорматированнаяСтрока(ЧастиСтроки); + Элементы.ДекорацияДатаСинхронизации.Заголовок = СтроковыеФункции.ФорматированнаяСтрока( + НСтр("ru = 'Синхронизировано: %1'"), + Формат(СведенияОСинхронизации.ДатаСинхронизации, "ДЛФ=DD")); КонецЕсли; @@ -1854,4 +1867,20 @@ КонецФункции +&НаСервереБезКонтекста +Процедура ПереместитьИлиСкопироватьПрисоединенныеФайлы(Знач МассивИменФайлов, Знач ВладелецФайла, Знач Действие) + + ВладелецПеретаскиваемогоФайла = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(МассивИменФайлов[0], "ВладелецФайла"); + Если ТипЗнч(ВладелецПеретаскиваемогоФайла) <> ТипЗнч(ВладелецФайла) Тогда + Возврат; + КонецЕсли; + + Если Действие = "Перемещение" Тогда + РаботаСФайламиСлужебныйВызовСервера.ПеренестиФайлы(МассивИменФайлов, ВладелецФайла); + ИначеЕсли Действие = "Копирование" Тогда + РаботаСФайламиСлужебныйВызовСервера.СкопироватьФайлы(МассивИменФайлов, ВладелецФайла); + КонецЕсли; + +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныйФайл/Module.bsl b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныйФайл/Module.bsl index 8bf74269c..38cc1714d 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныйФайл/Module.bsl +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныйФайл/Module.bsl @@ -927,10 +927,10 @@ Если Не ДоступнаПечатьСоШтампом Тогда Элементы.ПодменюПечать.Вид = ВидГруппыФормы.ГруппаКнопок; - Элементы.Печать.Заголовок = НСтр("ru='Печать'"); + Элементы.Печать.Заголовок = НСтр("ru = 'Печать'"); Иначе Элементы.ПодменюПечать.Вид = ВидГруппыФормы.Подменю; - Элементы.Печать.Заголовок = НСтр("ru='Сразу на принтер'"); + Элементы.Печать.Заголовок = НСтр("ru = 'Сразу на принтер'"); КонецЕсли; КонецПроцедуры @@ -1239,11 +1239,13 @@ РаботаСФайламиСлужебный.ЗаписатьФайлВИнформационнуюБазу(СсылкаНового, ДвоичныеДанные); ЗаписываемыйОбъект.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе; Иначе - СведенияОФайле = РаботаСФайламиСлужебный.ДобавитьФайлВТом(ДвоичныеДанные, ЗаписываемыйОбъект.ДатаМодификацииУниверсальная, - ЗаписываемыйОбъект.Наименование, ЗаписываемыйОбъект.Расширение); - ЗаписываемыйОбъект.Том = СведенияОФайле.Том; - ЗаписываемыйОбъект.ПутьКФайлу = СведенияОФайле.ПутьКФайлу; - ЗаписываемыйОбъект.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске; + + ЗаписываемыйОбъект.Том = Неопределено; + ЗаписываемыйОбъект.ПутьКФайлу = Неопределено; + ЗаписываемыйОбъект.ТипХраненияФайла = Неопределено; + + РаботаСФайламиВТомахСлужебный.ДобавитьФайл(ЗаписываемыйОбъект, ДвоичныеДанные); + КонецЕсли; Если ДоступнаЭлектроннаяПодпись Тогда @@ -1570,21 +1572,16 @@ АдресПапкиВОблачномСервисе = РаботаСФайламиСлужебныйКлиентСервер.АдресВОблачномСервисе( СведенияОСинхронизации.Сервис, СведенияОСинхронизации.Href); - ЧастиСтроки = Новый Массив; - ЧастиСтроки.Добавить(НСтр("ru = 'Файл доступен только для просмотра, работа с ним ведется в облачном сервисе'")); - ЧастиСтроки.Добавить(" "); - ЧастиСтроки.Добавить(Новый ФорматированнаяСтрока(СведенияОСинхронизации.УчетнаяЗаписьНаименование,,,, АдресПапкиВОблачномСервисе)); - ЧастиСтроки.Добавить(". "); - Элементы.ДекорацияПояснение.Заголовок = Новый ФорматированнаяСтрока(ЧастиСтроки); + Элементы.ДекорацияПояснение.Заголовок = СтроковыеФункции.ФорматированнаяСтрока( + НСтр("ru = 'Файл доступен только для просмотра, работа с ним ведется в облачном сервисе %2.'"), + АдресПапкиВОблачномСервисе, СведенияОСинхронизации.УчетнаяЗаписьНаименование); Элементы.ДекорацияКартинкаСтатусСинхронизации.Видимость = НЕ СведенияОСинхронизации.Синхронизирован; Элементы.ДекорацияДатаСинхронизации.ОтображениеПодсказки =?(СведенияОСинхронизации.Синхронизирован, ОтображениеПодсказки.Нет, ОтображениеПодсказки.Кнопка); - ЧастиСтроки.Очистить(); - ЧастиСтроки.Добавить(НСтр("ru = 'Синхронизирован'")); - ЧастиСтроки.Добавить(": "); - ЧастиСтроки.Добавить(Новый ФорматированнаяСтрока(Формат(СведенияОСинхронизации.ДатаСинхронизации, "ДЛФ=DD"),,,, "OpenJournal")); - Элементы.ДекорацияДатаСинхронизации.Заголовок = Новый ФорматированнаяСтрока(ЧастиСтроки); + Элементы.ДекорацияДатаСинхронизации.Заголовок = СтроковыеФункции.ФорматированнаяСтрока( + НСтр("ru = 'Синхронизирован: %1'"), + Формат(СведенияОСинхронизации.ДатаСинхронизации, "ДЛФ=DD")); КонецЕсли; diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/РедактированиеТекстовогоФайла/Module.bsl b/SSL/src/DataProcessors/РаботаСФайлами/Forms/РедактированиеТекстовогоФайла/Module.bsl index 5ad3feb84..cad9e6f2a 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/РедактированиеТекстовогоФайла/Module.bsl +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/РедактированиеТекстовогоФайла/Module.bsl @@ -45,7 +45,7 @@ ДанныеФайла.ПолноеНаименованиеВерсии, ДанныеФайла.Расширение); Если Не РежимРедактирования Тогда - ЗаголовокСтрока = ЗаголовокСтрока + " " + НСтр("ru='(только просмотр)'"); + ЗаголовокСтрока = ЗаголовокСтрока + " " + НСтр("ru = '(только просмотр)'"); КонецЕсли; Заголовок = ЗаголовокСтрока; @@ -62,7 +62,7 @@ КодировкаПредставление = ЭлементСписка.Представление; КонецЕсли; Иначе - КодировкаПредставление = НСтр("ru='По умолчанию'"); + КодировкаПредставление = НСтр("ru = 'По умолчанию'"); КонецЕсли; КонецПроцедуры @@ -124,13 +124,13 @@ Если ЗавершениеРаботы Тогда ТекстПредупреждения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru ='Изменения в файле ""%1"" будут потеряны.'"), ИмяИРасширение); + НСтр("ru = 'Изменения в файле ""%1"" будут потеряны.'"), ИмяИРасширение); Возврат; КонецЕсли; ОбработчикРезультата = Новый ОписаниеОповещения("ПередЗакрытиемПослеОтветаНаВопросПриВыходеИзТекстовогоРедактора", ЭтотОбъект); ТекстНапоминания = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru ='Файл ""%1"" был изменен. + НСтр("ru = 'Файл ""%1"" был изменен. |Сохранить изменения?'"), ИмяИРасширение); Кнопки = Новый СписокЗначений; @@ -381,7 +381,7 @@ ДанныеФайла.ПолноеНаименованиеВерсии, ДанныеФайла.Расширение); Если Не РежимРедактирования Тогда - ЗаголовокСтрока = ЗаголовокСтрока + " " + НСтр("ru='(только просмотр)'"); + ЗаголовокСтрока = ЗаголовокСтрока + " " + НСтр("ru = '(только просмотр)'"); КонецЕсли; Заголовок = ЗаголовокСтрока; diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаИмпортаПапки/Module.bsl b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаИмпортаПапки/Module.bsl index 9f5d417b6..7d1444e3f 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаИмпортаПапки/Module.bsl +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаИмпортаПапки/Module.bsl @@ -12,7 +12,7 @@ Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Если Не ЗначениеЗаполнено(Параметры.КаталогНаДиске) Тогда - ВызватьИсключение НСтр("ru='Обработка не предназначена для непосредственного использования.'"); + ВызватьИсключение НСтр("ru = 'Обработка не предназначена для непосредственного использования.'"); КонецЕсли; ГруппаФайлов = Параметры.ГруппаФайлов; @@ -50,7 +50,7 @@ ДиалогОткрытияФайла.Каталог = Каталог; ДиалогОткрытияФайла.ПолноеИмяФайла = ""; - Фильтр = НСтр("ru = 'Все файлы(*.*)|*.*'"); + Фильтр = НСтр("ru = 'Все файлы (*.*)|*.*'"); ДиалогОткрытияФайла.Фильтр = Фильтр; ДиалогОткрытияФайла.МножественныйВыбор = Ложь; ДиалогОткрытияФайла.Заголовок = НСтр("ru = 'Выберите каталог'"); diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаИмпортаФайлов/Module.bsl b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаИмпортаФайлов/Module.bsl index eb8d24f95..0d35fd930 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаИмпортаФайлов/Module.bsl +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаИмпортаФайлов/Module.bsl @@ -12,7 +12,7 @@ Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Если Параметры.ПапкаДляДобавления = Неопределено Тогда - ВызватьИсключение НСтр("ru='Обработка не предназначена для непосредственного использования.'"); + ВызватьИсключение НСтр("ru = 'Обработка не предназначена для непосредственного использования.'"); КонецЕсли; ГруппаФайлов = Параметры.ГруппаФайлов; @@ -176,7 +176,7 @@ ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим); ДиалогОткрытияФайла.ПолноеИмяФайла = ""; - Фильтр = НСтр("ru = 'Все файлы(*.*)|*.*'"); + Фильтр = НСтр("ru = 'Все файлы (*.*)|*.*'"); ДиалогОткрытияФайла.Фильтр = Фильтр; ДиалогОткрытияФайла.МножественныйВыбор = Истина; ДиалогОткрытияФайла.Заголовок = НСтр("ru = 'Выберите файлы'"); diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаЭкспортаПапки/Module.bsl b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаЭкспортаПапки/Module.bsl index 4c9cf0061..306179b01 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаЭкспортаПапки/Module.bsl +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаЭкспортаПапки/Module.bsl @@ -95,7 +95,7 @@ ПапкаДляЭкспортаПолная = ПапкаДляЭкспорта + Строка(ЧтоСохраняем) + ПолучитьРазделительПути(); Если ТранслитерироватьИменаПапокИФайлов Тогда - ПапкаДляЭкспортаПолная = СтроковыеФункцииКлиентСервер.СтрокаЛатиницей(ПапкаДляЭкспортаПолная); + ПапкаДляЭкспортаПолная = СтроковыеФункцииКлиент.СтрокаЛатиницей(ПапкаДляЭкспортаПолная); КонецЕсли; // Если выгружаемая папка не существует, ее следует создать. @@ -199,9 +199,9 @@ ТаблицаВыгрузки = Результат.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией); Если ТранслитерироватьИменаПапокИФайлов И ТаблицаВыгрузки.Строки.Количество() > 0 Тогда КорневаяПапкаДляВыгрузки = ТаблицаВыгрузки.Строки[0]; - КорневаяПапкаДляВыгрузки.НаименованиеПапки = СтроковыеФункцииКлиентСервер.СтрокаЛатиницей(КорневаяПапкаДляВыгрузки.НаименованиеПапки); - КорневаяПапкаДляВыгрузки.ПолноеНаименование = СтроковыеФункцииКлиентСервер.СтрокаЛатиницей(КорневаяПапкаДляВыгрузки.ПолноеНаименование); - КорневаяПапкаДляВыгрузки.Расширение = СтроковыеФункцииКлиентСервер.СтрокаЛатиницей(КорневаяПапкаДляВыгрузки.Расширение); + КорневаяПапкаДляВыгрузки.НаименованиеПапки = СтроковыеФункции.СтрокаЛатиницей(КорневаяПапкаДляВыгрузки.НаименованиеПапки); + КорневаяПапкаДляВыгрузки.ПолноеНаименование = СтроковыеФункции.СтрокаЛатиницей(КорневаяПапкаДляВыгрузки.ПолноеНаименование); + КорневаяПапкаДляВыгрузки.Расширение = СтроковыеФункции.СтрокаЛатиницей(КорневаяПапкаДляВыгрузки.Расширение); ИзменитьИменаФайловИПапок(КорневаяПапкаДляВыгрузки); КонецЕсли; @@ -733,9 +733,9 @@ Процедура ИзменитьИменаФайловИПапок(ЭлементДерева) Для Каждого ФайлИлиПапка Из ЭлементДерева.Строки Цикл - ФайлИлиПапка.НаименованиеПапки = СтроковыеФункцииКлиентСервер.СтрокаЛатиницей(ФайлИлиПапка.НаименованиеПапки); - ФайлИлиПапка.ПолноеНаименование = СтроковыеФункцииКлиентСервер.СтрокаЛатиницей(ФайлИлиПапка.ПолноеНаименование); - ФайлИлиПапка.Расширение = СтроковыеФункцииКлиентСервер.СтрокаЛатиницей(ФайлИлиПапка.Расширение); + ФайлИлиПапка.НаименованиеПапки = СтроковыеФункции.СтрокаЛатиницей(ФайлИлиПапка.НаименованиеПапки); + ФайлИлиПапка.ПолноеНаименование = СтроковыеФункции.СтрокаЛатиницей(ФайлИлиПапка.ПолноеНаименование); + ФайлИлиПапка.Расширение = СтроковыеФункции.СтрокаЛатиницей(ФайлИлиПапка.Расширение); ИзменитьИменаФайловИПапок(ФайлИлиПапка); КонецЦикла; diff --git a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВводАдреса/Form.form b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВводАдреса/Form.form index cb0d4e893..966795cf0 100644 --- a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВводАдреса/Form.form +++ b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВводАдреса/Form.form @@ -1876,7 +1876,7 @@ None ru - Cервис выбора и проверки адресных сведений недоступен + Сервис выбора и проверки адресных сведений недоступен ТекстСообщенияСервисаРасширеннаяПодсказка @@ -3920,7 +3920,7 @@ - ПредставлениеАдресаИзменено + ИспользуетсяАдресныйКлассификатор 34 Boolean diff --git a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВводАдреса/Help/ru.html b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВводАдреса/Help/ru.html index 528d59781..bf7b32441 100644 --- a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВводАдреса/Help/ru.html +++ b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВводАдреса/Help/ru.html @@ -81,9 +81,9 @@
    • Если известен индекс адреса и адресный классификатор по соответствующему региону загружен, то с помощью команды Еще - Заполнить по почтовому индексу имеется возможность по индексу найти адрес. Для выбора выводятся только те адреса, которые соответствуют введенному индексу. Выберите нужную часть адреса, дозаполните оставшиеся поля.
    • Если указан почтовый индекс, сведения о котором отсутствует в программе, то в сообщении будет предложено загрузить адресные сведения для соответствующего региона с сайта фирмы "1С".

    Очистка адреса

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

    Загрузка классификатора

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

    Загрузка классификатора (команда недоступна для приложения в Интернете)

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

    См. также:

    +
  • Внимание! Команда недоступна для приложения в интернете.
  • См. также:

    • Виды контактной информации;
    • Ввод контактной информации; diff --git a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВводАдреса/Module.bsl b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВводАдреса/Module.bsl index 2c1f5d173..9a94cd02d 100644 --- a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВводАдреса/Module.bsl +++ b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВводАдреса/Module.bsl @@ -38,10 +38,15 @@ // Настройки формы СведенияОАдресномКлассификаторе = УправлениеКонтактнойИнформациейСлужебныйПовтИсп.СведенияОДоступностиАдресногоКлассификатора(); - ЕстьЗагруженныйКлассификатор = СведенияОАдресномКлассификаторе["ИспользоватьЗагруженные"]; - ВебКлассификаторДоступен = СведенияОАдресномКлассификаторе["КлассификаторДоступен"]; + ЕстьЗагруженныйКлассификатор = СведенияОАдресномКлассификаторе.Получить("ИспользоватьЗагруженные"); + ВебКлассификаторДоступен = СведенияОАдресномКлассификаторе.Получить("КлассификаторДоступен"); + ИспользуетсяАдресныйКлассификатор = СведенияОАдресномКлассификаторе.Получить("ИспользуетсяАдресныйКлассификатор"); ВебСервисИспользуется = ВебКлассификаторДоступен; + Если Не ИспользуетсяАдресныйКлассификатор Тогда + ОтключитьВозможностьВыбораАдресныхСведенийИзКлассификатора(); + КонецЕсли; + ЕстьПравоЗагружатьКлассификатор = Обработки.РасширенныйВводКонтактнойИнформации.ЕстьВозможностьИзмененияАдресногоКлассификатора(); Параметры.Свойство("ВозвращатьСписокЗначений", ВозвращатьСписокЗначений); @@ -98,19 +103,20 @@ Если Страна <> ОсновнаяСтрана Тогда // Считаем адрес российским - ПредставлениеАдресаИзменено = Истина; ТекстПредупрежденияПриОткрытии = НСтр("ru = 'Адрес введен некорректно: допускается ввод только национальных адресов. |Значение поля ""Страна"" было изменено на %1, необходимо проверить остальные поля.'"); ТекстПредупрежденияПриОткрытии = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстПредупрежденияПриОткрытии, ОсновнаяСтрана.Наименование); - ПолеПредупрежденияПриОткрытии = "СтранаВСвободнойФорме"; - Модифицированность = Истина; - Элементы.Страна.Доступность = Ложь; - Элементы.Страна.Видимость = Истина; - Элементы.СтранаВСвободнойФорме.Доступность = Ложь; + ПолеПредупрежденияПриОткрытии = "СтранаВСвободнойФорме"; + Модифицированность = Истина; + Элементы.Страна.Доступность = Ложь; + Элементы.Страна.Видимость = Истина; + Элементы.СтранаВСвободнойФорме.Видимость = Истина; + Элементы.СтранаВСвободнойФорме.КнопкаВыбора = Ложь; + Элементы.СтранаВСвободнойФорме.Доступность = Ложь; КонецЕсли; - Если СтрНачинаетсяС(ВРег(НаселенныйПунктДетально.value), ВРег(Страна) + ",") Тогда + Если СтрНачинаетсяС(ВРег(НаселенныйПунктДетально.value), ВРег(НаселенныйПунктДетально.country) + ",") Тогда ЧастиАдреса = СтрРазделить(НаселенныйПунктДетально.value, ","); ЧастиАдреса.Удалить(0); НаселенныйПунктДетально.value = СокрЛП(СтрСоединить(ЧастиАдреса, ",")); @@ -146,7 +152,7 @@ ОпределитьОтображениеЭлементовНаФорме(); Если Не ЕстьПравоЗагружатьКлассификатор Тогда - Элементы.ИнформацияОЗагрузкеАдресныеСведений.Заголовок = НСтр("ru='Для автоподбора и проверки адресов обратитесь к администратору для загрузки адресных сведений.'"); + Элементы.ИнформацияОЗагрузкеАдресныеСведений.Заголовок = НСтр("ru = 'Для автоподбора и проверки адресов обратитесь к администратору для загрузки адресных сведений.'"); Элементы.ЗагрузитьКлассификатор.Видимость = Ложь; КонецЕсли; @@ -183,16 +189,7 @@ Если ИмяСобытия = "АдресныйКлассификаторАктуализирован" ИЛИ ИмяСобытия = "ЗагруженАдресныйКлассификатор" Тогда - АдресныеСведенияЗагружены = АдресныеСведенияКлассификатораЗагружены(НаименованиеРегиона(НаселенныйПунктДетально)); - Если ВебКлассификаторДоступен Или АдресныеСведенияЗагружены.РегионЗагружен Тогда - Элементы.ГруппаИнформация.Видимость = Ложь; - Элементы.Дом.КнопкаВыбора = Истина; - Элементы.Улица.КнопкаВыбора = Истина; - АвтоподборДоступен = Истина; - Элементы.ПроверитьЗаполнениеАдреса.Доступность = Истина; - Иначе - Элементы.ГруппаИнформация.Видимость = Истина; - КонецЕсли; + СообщениеОНеобходимостиЗагрузкиКлассификатора(); КонецЕсли; @@ -207,6 +204,19 @@ КонецЕсли; КонецПроцедуры +&НаСервере +Процедура ОтключитьВозможностьВыбораАдресныхСведенийИзКлассификатора() + + Элементы.ГруппаИнформация.Видимость = Ложь; + Элементы.ПроверитьЗаполнениеАдреса.Видимость = Ложь; + Элементы.ЗаполнитьПоПочтовомуИндексу.Видимость = Ложь; + Элементы.ЗагрузитьКлассификатор.Видимость = Ложь; + Элементы.Улица.КнопкаВыбора = Ложь; + Элементы.Дом.КнопкаВыбора = Ложь; + Элементы.Строение.КнопкаВыбора = Ложь; + +КонецПроцедуры + #КонецОбласти #Область ОбработчикиСобытийЭлементовШапкиФормы @@ -528,6 +538,7 @@ КонецЕсли; ОбновитьМенюДобавленияСтроенийИПомещений(); + ОбработкаИзмененияАдреса(); КонецПроцедуры @@ -593,11 +604,11 @@ НаселенныйПункт = Элемент.ТекстРедактирования; ИзменитьСведенияОНаселенномПункте(); ИдентификаторНаселенногоПункта = Неопределено; - КонецЕсли; ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("НаселенныйПунктДетально", НаселенныйПунктДетально); + ПараметрыФормы.Вставить("ОтображатьКнопкиВыбора", ИспользуетсяАдресныйКлассификатор); Оповещение = Новый ОписаниеОповещения("ПослеВводаСведенийНаселенногоПункта", ЭтотОбъект); ОткрытьФорму("Обработка.РасширенныйВводКонтактнойИнформации.Форма.НаселенныйПунктАдреса", ПараметрыФормы, Элемент,,,, Оповещение, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); @@ -632,7 +643,7 @@ Если ЕстьПравоЗагружатьКлассификатор И ВыбранноеЗначение.ПредлагатьЗагрузкуКлассификатора = Истина Тогда // Предлагаем загрузить классификатор. - ПредложениеЗагрузкиКлассификатора(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='Данные для ""%1"" не загружены.'"), + ПредложениеЗагрузкиКлассификатора(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Данные для ""%1"" не загружены.'"), ВыбранноеЗначение.Представление), ВыбранноеЗначение); Иначе УстановитьНаселенныйПунктПослеВыбора(ВыбранноеЗначение); @@ -643,6 +654,10 @@ &НаКлиенте Процедура НаселенныйПунктАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка) + Если МеждународныйФорматАдреса Тогда + Возврат; + КонецЕсли; + ДанныеВыбора = Новый СписокЗначений; ТекстДляАвтоПодбора = СокрЛП(Текст); @@ -836,7 +851,7 @@ &НаКлиенте Процедура АдресНаДатуАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка) - Если СтрСравнить(Текст, НСтр("ru='начало учета'")) = 0 Или ПустаяСтрока(Текст) Тогда + Если СтрСравнить(Текст, НСтр("ru = 'начало учета'")) = 0 Или ПустаяСтрока(Текст) Тогда Элементы.АдресНаДату.ФорматРедактирования = ""; КонецЕсли; КонецПроцедуры @@ -886,13 +901,33 @@ &НаКлиенте Процедура ИнформацияОЗагрузкеАдресныеСведенийОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; - Если НавигационнаяСсылкаФорматированнойСтроки = "load" Тогда - ОткрытьФормуЗагрузкиКлассификатора(); + Если НавигационнаяСсылкаФорматированнойСтроки = "load" + И ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда + + Оповещение = Новый ОписаниеОповещения("ПослеАвторизоватьНаСайтеПоддержкиПользователей", ЭтотОбъект); + МодульАдресныйКлассификаторКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("АдресныйКлассификаторКлиент"); + МодульАдресныйКлассификаторКлиент.АвторизоватьНаСайтеПоддержкиПользователей(Оповещение, ЭтотОбъект); + КонецЕсли; КонецПроцедуры +&НаКлиенте +Процедура ПослеАвторизоватьНаСайтеПоддержкиПользователей(Результат, ДополнительныеПараметры) Экспорт + + Если Результат = Неопределено Тогда + ОткрытьФормуЗагрузкиКлассификатора(); + Возврат; + КонецЕсли; + + ОбновитьПовторноИспользуемыеЗначения(); + ВебКлассификаторДоступен = Истина; + СообщениеОНеобходимостиЗагрузкиКлассификатора(); + +КонецПроцедуры + &НаКлиенте Процедура ДекорацияНужнаПомощьОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка) @@ -902,6 +937,7 @@ ПараметрыОткрытия = Новый Структура(); ПараметрыОткрытия.Вставить("Адрес", ПредставлениеАдреса); + ПараметрыОткрытия.Вставить("СведенияОбАдресе", СведенияОбАдресе(НаселенныйПунктДетально)); МодульАдресныйКлассификаторКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("АдресныйКлассификаторКлиент"); МодульАдресныйКлассификаторКлиент .ОткрытьСведенияОбАдресномКлассификаторе(ПараметрыОткрытия); @@ -928,7 +964,7 @@ Процедура ПроверитьЗаполнениеАдреса(Команда) Если РазрешитьВводАдресаВСвободнойФорме Тогда - ПоказатьПредупреждение(, НСтр("ru='Адрес не может быть проверен, так как он введен в свободной форме.'")); + ПоказатьПредупреждение(, НСтр("ru = 'Адрес не может быть проверен, так как он введен в свободной форме.'")); Возврат; КонецЕсли; @@ -973,10 +1009,10 @@ Если РазрешитьВводАдресаВСвободнойФорме Тогда ПереключитьНаСтруктурированныйВвод(); ИначеЕсли ЭтоНациональныйАдрес Тогда - ТекстВопроса = НСтр("ru='Ввести адрес в свободной форме? + ТекстВопроса = НСтр("ru = 'Ввести адрес в свободной форме? |Адреса, введенные в свободной форме, могут не пройти проверку по адресному классификатору.'"); Оповещение = Новый ОписаниеОповещения("ВвестиАдресВСвободнойФормеЗавершение", ЭтотОбъект); - ПоказатьВопрос(Оповещение, ТекстВопроса, РежимДиалогаВопрос.ДаНет, , , НСтр("ru='Подтверждение'")); + ПоказатьВопрос(Оповещение, ТекстВопроса, РежимДиалогаВопрос.ДаНет, , , НСтр("ru = 'Подтверждение'")); Иначе ПереключитьАдресВСвободнойФорму(); КонецЕсли; @@ -1003,7 +1039,9 @@ НаселенныйПунктДетально.Comment = Комментарий; НаселенныйПунктДетально.Country = Строка(Страна); - Элементы.СтранаВСвободнойФорме.Видимость = Не ВидКонтактнойИнформации.ТолькоНациональныйАдрес; + Если Элементы.СтранаВСвободнойФорме.Доступность Тогда + Элементы.СтранаВСвободнойФорме.Видимость = Не ВидКонтактнойИнформации.ТолькоНациональныйАдрес; + КонецЕсли; Элементы.АдресПредставлениеКомментарий.ТекущаяСтраница = Элементы.ВСвободнойФорме; Элементы.АдресВСвободнойФорме.Пометка = Истина; @@ -1069,7 +1107,7 @@ Процедура АдресныйКлассификаторУстарел(Команда) - СообщениеОПроверкеАдреса = НСтр("ru='Адресные сведения ФИАС, загруженные в программу, устарели. + СообщениеОПроверкеАдреса = НСтр("ru = 'Адресные сведения ФИАС, загруженные в программу, устарели. |Рекомендуется выполнить обновление, чтобы проверка адреса выполнялась корректно.'"); Если ЕстьПравоЗагружатьКлассификатор Тогда ВопросОбОбновлениеАдресногоКлассификатора(СообщениеОПроверкеАдреса); @@ -1122,7 +1160,7 @@ КонецЕсли; Если НайденныеСтроки[0].Тип = "Помещение" Тогда - Значение = ?(НайденныеСтроки[0].Значение <> НСтр("ru='Другое'"), НайденныеСтроки[0].Значение, ""); + Значение = ?(НайденныеСтроки[0].Значение <> НСтр("ru = 'Другое'"), НайденныеСтроки[0].Значение, ""); НаселенныйПунктДетально.Apartments.Добавить(ЗначениеСтроенияИлиПомещения(Значение, ЭтотОбъект[ИмяТекущего])); Иначе НаселенныйПунктДетально.Buildings.Добавить(ЗначениеСтроенияИлиПомещения(НайденныеСтроки[0].Значение, ЭтотОбъект[ИмяТекущего])); @@ -1762,7 +1800,7 @@ Значение, Контекст.ВидКонтактнойИнформации); КонецЕсли; - Результат.ДанныеВыбора.Вставить("АдресВВидеГиперссылки", Контекст.ВидКонтактнойИнформации.РедактированиеТолькоВДиалоге); + Результат.ДанныеВыбора.Вставить("АдресВВидеГиперссылки", Контекст.ВидКонтактнойИнформации.ВидРедактирования = "Диалог"); // Подавляем перенос строк в возвращаемом отдельно представлении. Результат.ДанныеВыбора.Представление = СокрЛП(СтрЗаменить(Результат.ДанныеВыбора.Представление, Символы.ПС, " ")); @@ -1870,9 +1908,9 @@ ПоказатьАдресВСвободнойФорме(); КонецЕсли; - ЭтоНациональныйАдрес = (Страна = ОсновнаяСтрана И Не МеждународныйФорматАдреса); - СведенияОСтране = СведенияОСтране(Страна); - ЭтоСтранаУчастникЕАЭС = ЭтоСтранаУчастникЕАЭС(Страна); + ЭтоНациональныйАдрес = (Страна = ОсновнаяСтрана И Не МеждународныйФорматАдреса); + СведенияОСтране = СведенияОСтране(Страна); + ЭтоСтранаУчастникЕАЭС = СведенияОСтране.УчастникЕАЭС; ОпределитьДоступностьАвтоПодборАдреса(); @@ -1891,10 +1929,10 @@ ЭтоЗемельныйУчасток = ?(ЭтоЗемельныйУчасток(ТипДома), Истина, Ложь); - Элементы.Улица.Заголовок = НСтр("ru='Улица'"); + Элементы.Улица.Заголовок = НСтр("ru = 'Улица'"); Элементы.ОКТМО.Видимость = ВидКонтактнойИнформации.УказыватьОКТМО; ВебСервисИспользуется = ВебКлассификаторДоступен; - АвтоподборДоступен = ВебКлассификаторДоступен Или ЕстьЗагруженныйКлассификатор; + АвтоподборДоступен = ИспользуетсяАдресныйКлассификатор И (ВебКлассификаторДоступен Или ЕстьЗагруженныйКлассификатор); ВидимостьСтроений = Истина; Элементы.ГруппаДобавлениеСтроения.Видимость = Истина; Элементы.ГруппаДобавлениеПомещения.Видимость = Истина; @@ -1904,22 +1942,22 @@ Элементы.Строение.КнопкаВыбора = Ложь; Элементы.Строение.Доступность = Не ЭтоЗемельныйУчасток; Элементы.ТипСтроения.Доступность = Не ЭтоЗемельныйУчасток; - Элементы.НаселенныйПункт.ПодсказкаВвода = НСтр("ru='Введите первые буквы названия населенного пункта'"); - Элементы.Улица.ПодсказкаВвода = НСтр("ru='Введите первые буквы названия улицы'"); + Элементы.НаселенныйПункт.ПодсказкаВвода = НСтр("ru = 'Введите первые буквы названия населенного пункта'"); + Элементы.Улица.ПодсказкаВвода = НСтр("ru = 'Введите первые буквы названия улицы'"); Иначе Элементы.ГруппаДобавлениеСтроения.Видимость = Ложь; Элементы.ГруппаДобавлениеПомещения.Видимость = Ложь; Если ЭтоСтранаУчастникЕАЭС И Не МеждународныйФорматАдреса Тогда - Элементы.Улица.Заголовок = НСтр("ru='Улица'"); + Элементы.Улица.Заголовок = НСтр("ru = 'Улица'"); Элементы.НаселенныйПункт.КнопкаВыбора = Истина; ВидимостьСтроений = Истина; Элементы.Дом.КнопкаВыбора = Ложь; Элементы.Строение.КнопкаВыбора = Ложь; Иначе - Элементы.Улица.Заголовок = НСтр("ru='Адрес'"); + Элементы.Улица.Заголовок = НСтр("ru = 'Адрес'"); Элементы.НаселенныйПункт.КнопкаВыбора = Ложь; Элементы.Улица.КнопкаВыбора = Ложь; ВидимостьСтроений = Ложь; @@ -1972,8 +2010,8 @@ Элементы.Улица.КнопкаВыбора = Ложь; Элементы.Дом.КнопкаВыбора = Ложь; Элементы.Строение.КнопкаВыбора = Ложь; - Элементы.НаселенныйПункт.ПодсказкаВвода = НСтр("ru='Введите название населенного пункта'"); - Элементы.Улица.ПодсказкаВвода = НСтр("ru='Введите название улицы'"); + Элементы.НаселенныйПункт.ПодсказкаВвода = НСтр("ru = 'Введите название населенного пункта'"); + Элементы.Улица.ПодсказкаВвода = НСтр("ru = 'Введите название улицы'"); КонецЕсли; Если ВебКлассификаторДоступен Или МеждународныйФорматАдреса Тогда @@ -2389,7 +2427,7 @@ КонецЕсли; Элементы.ТекстПроДатуДействия.Заголовок = ТекстИсторическийАдрес; - Элементы.АдресНаДату.ФорматРедактирования = ?(ЗначениеЗаполнено(АдресНаДату), "", "ДФ='""" + НСтр("ru='начало учета'") + """'"); + Элементы.АдресНаДату.ФорматРедактирования = ?(ЗначениеЗаполнено(АдресНаДату), "", "ДФ='""" + НСтр("ru = 'начало учета'") + """'"); КонецПроцедуры @@ -2399,12 +2437,12 @@ Отбор = Новый Структура("Вид", ВидКонтактнойИнформации.Ссылка); НайденныеСтроки = КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.НайтиСтроки(Отбор); Если НайденныеСтроки.Количество() > 1 Тогда - Элементы.ИсторияИзмененийГиперссылка.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='История изменений (%1)'"), НайденныеСтроки.Количество()); + Элементы.ИсторияИзмененийГиперссылка.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'История изменений (%1)'"), НайденныеСтроки.Количество()); Элементы.ИсторияИзмененийГиперссылка.Видимость = Истина; ИначеЕсли НайденныеСтроки.Количество() = 1 И ПустаяСтрока(НайденныеСтроки[0].ЗначенияПолей) Тогда Элементы.ИсторияИзмененийГиперссылка.Видимость = Ложь; Иначе - Элементы.ИсторияИзмененийГиперссылка.Заголовок = НСтр("ru='История изменений'"); + Элементы.ИсторияИзмененийГиперссылка.Заголовок = НСтр("ru = 'История изменений'"); Элементы.ИсторияИзмененийГиперссылка.Видимость = Истина; КонецЕсли; @@ -2667,17 +2705,17 @@ // Нет ошибок Если НЕ ВебСервисИспользуется И ТребуетсяОбновление Тогда Если ЕстьПравоЗагружатьКлассификатор Тогда - СообщениеОПроверкеАдреса = НСтр("ru='Адрес введен корректно, но адресные сведения, загруженные в программу, давно не обновлялись. + СообщениеОПроверкеАдреса = НСтр("ru = 'Адрес введен корректно, но адресные сведения, загруженные в программу, давно не обновлялись. |Рекомендуется выполнить обновление и повторить проверку адреса заново.'"); ВопросОбОбновлениеАдресногоКлассификатора(СообщениеОПроверкеАдреса); Иначе - СообщениеОПроверкеАдреса = НСтр("ru='Адрес введен корректно, но адресные сведения, загруженные в программу, + СообщениеОПроверкеАдреса = НСтр("ru = 'Адрес введен корректно, но адресные сведения, загруженные в программу, |давно не обновлялись. Рекомендуется выполнить обновление и повторить проверку адреса заново. |Для обновления адресного классификатора необходимо обратиться к администратору.'"); ПоказатьПредупреждение(, СообщениеОПроверкеАдреса); КонецЕсли; Иначе - ПоказатьПредупреждение(, НСтр("ru='Адрес введен корректно'")); + ПоказатьПредупреждение(, НСтр("ru = 'Адрес введен корректно'")); КонецЕсли; Элементы.ГруппаОписаниеНедоступностиСервера.ТекущаяСтраница = Элементы.СервисДоступен; @@ -3206,14 +3244,39 @@ ПараметрыФормы.Вставить("НазваниеРегиона", Регион); КонецЕсли; - Оповещение = Новый ОписаниеОповещения("ПредложениеЗагрузкиКлассификатораЗавершение", ЭтотОбъект, ПараметрыЗагрузки); - ОткрытьФорму("Обработка.РасширенныйВводКонтактнойИнформации.Форма.ЗагрузкаАдресногоКлассификатора", ПараметрыФормы, ЭтотОбъект,,,, Оповещение, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("ПараметрыЗагрузки", ПараметрыЗагрузки); + ДополнительныеПараметры.Вставить("ПараметрыФормы", ПараметрыФормы); + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда + Оповещение = Новый ОписаниеОповещения("ПослеВводаЛогинИПароля", ЭтотОбъект, ДополнительныеПараметры); + + МодульАдресныйКлассификаторКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("АдресныйКлассификаторКлиент"); + МодульАдресныйКлассификаторКлиент.АвторизоватьНаСайтеПоддержкиПользователей(Оповещение, ЭтотОбъект); + КонецЕсли; + Иначе УстановитьНаселенныйПунктПослеВыбора(ДанныеОбАдресе); КонецЕсли; КонецПроцедуры +&НаКлиенте +Процедура ПослеВводаЛогинИПароля(Знач РезультатВопроса, Знач ДополнительныеПараметры) Экспорт + + Если РезультатВопроса = Неопределено Тогда + Оповещение = Новый ОписаниеОповещения("ПредложениеЗагрузкиКлассификатораЗавершение", ЭтотОбъект, ДополнительныеПараметры.ПараметрыЗагрузки); + ОткрытьФорму("Обработка.РасширенныйВводКонтактнойИнформации.Форма.ЗагрузкаАдресногоКлассификатора", ДополнительныеПараметры.ПараметрыФормы, ЭтотОбъект,,,, Оповещение, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + Возврат; + КонецЕсли; + + УстановитьНаселенныйПунктПослеВыбора(ДополнительныеПараметры.ПараметрыЗагрузки.ДанныеОбАдресе); + ОбновитьПовторноИспользуемыеЗначения(); + ВебКлассификаторДоступен = Истина; + СообщениеОНеобходимостиЗагрузкиКлассификатора(); + +КонецПроцедуры + &НаКлиенте Процедура ПредложениеЗагрузкиКлассификатораЗавершение(Знач РезультатВопроса, Знач ДополнительныеПараметры) Экспорт @@ -3226,6 +3289,22 @@ КонецПроцедуры +&НаКлиенте +Процедура СообщениеОНеобходимостиЗагрузкиКлассификатора() + + АдресныеСведенияЗагружены = АдресныеСведенияКлассификатораЗагружены(НаименованиеРегиона(НаселенныйПунктДетально)); + Если ВебКлассификаторДоступен Или АдресныеСведенияЗагружены.РегионЗагружен Тогда + Элементы.ГруппаИнформация.Видимость = Ложь; + Элементы.Дом.КнопкаВыбора = Истина; + Элементы.Улица.КнопкаВыбора = Истина; + АвтоподборДоступен = Истина; + Элементы.ПроверитьЗаполнениеАдреса.Доступность = Истина; + Иначе + Элементы.ГруппаИнформация.Видимость = Истина; + КонецЕсли; + +КонецПроцедуры + &НаКлиенте Процедура УстановитьНаселенныйПунктПослеВыбора(Знач ДанныеОбАдресе) @@ -3261,7 +3340,7 @@ &НаКлиентеНаСервереБезКонтекста Функция НаименованиеПриДобавлениеПроизвольногоПомещения() - Возврат НСтр("ru='Другое'"); + Возврат НСтр("ru = 'Другое'"); КонецФункции &НаСервере @@ -3391,40 +3470,69 @@ Возврат; КонецЕсли; - Если РаботаСАдресамиКлиентСервер.ЭтоОсновнаяСтрана(Страна) Тогда + АдресВосстановлен = Ложь; + ОчиститьИдентификаторыАдреса(); + Если РаботаСАдресамиКлиентСервер.ЭтоОсновнаяСтрана(Страна) И Не МеждународныйФорматАдреса Тогда + ИменаУровнейАдреса = РаботаСАдресамиКлиентСервер.ИменаУровнейАдреса(НаселенныйПунктДетально.AddressType, Ложь); - ИначеЕсли ЭтоСтранаУчастникЕАЭС Тогда - ИменаУровнейАдреса = РаботаСАдресамиКлиентСервер.ИменаУровнейАдреса(УправлениеКонтактнойИнформациейКлиентСервер.АдресЕАЭС(), Ложь); - Иначе - ИменаУровнейАдреса = РаботаСАдресамиКлиентСервер.ИменаУровнейАдреса(УправлениеКонтактнойИнформациейКлиентСервер.ИностранныйАдрес(), Ложь); + АдресВосстановлен = ВосстановитьАдрес(НаселенныйПункт, НаселенныйПунктДетально, ИменаУровнейАдреса); + КонецЕсли; - ЭлементыАдреса = СтрРазделить(НаселенныйПункт, ",", Истина); - - Для ИндексАдреса = 0 По ИменаУровнейАдреса.Количество() - 1 Цикл - Если ЭлементыАдреса.Количество() > 0 Тогда - ЗначениеПоля = СокрЛП(ЭлементыАдреса[0]); - Позиция = СтрНайти(ЗначениеПоля, " ", НаправлениеПоиска.СКонца); - Если Позиция > 0 И НЕ РаботаСАдресамиКлиентСервер.ПредставлениеУровняБезСокращения(ИменаУровнейАдреса[ИндексАдреса]) Тогда - НаселенныйПунктДетально[ИменаУровнейАдреса[ИндексАдреса]] = СокрЛП(Лев(ЗначениеПоля, Позиция)); - НаселенныйПунктДетально[ИменаУровнейАдреса[ИндексАдреса] + "Type"] = СокрЛП(Сред(ЗначениеПоля, Позиция +1)); + Если Не АдресВосстановлен Тогда + + ТипАдреса = ?(ЭтоСтранаУчастникЕАЭС, УправлениеКонтактнойИнформациейКлиентСервер.АдресЕАЭС(), + УправлениеКонтактнойИнформациейКлиентСервер.ИностранныйАдрес()); + ИменаУровнейАдреса = РаботаСАдресамиКлиентСервер.ИменаУровнейАдреса(ТипАдреса, Ложь); + + ЭлементыАдреса = СтрРазделить(НаселенныйПункт, ",", Истина); + + Для ИндексАдреса = 0 По ИменаУровнейАдреса.Количество() - 1 Цикл + Если ЭлементыАдреса.Количество() > 0 Тогда + ЗначениеПоля = СокрЛП(ЭлементыАдреса[0]); + Позиция = СтрНайти(ЗначениеПоля, " ", НаправлениеПоиска.СКонца); + Если Позиция > 0 И НЕ РаботаСАдресамиКлиентСервер.ПредставлениеУровняБезСокращения(ИменаУровнейАдреса[ИндексАдреса]) Тогда + НаселенныйПунктДетально[ИменаУровнейАдреса[ИндексАдреса]] = СокрЛП(Лев(ЗначениеПоля, Позиция)); + НаселенныйПунктДетально[ИменаУровнейАдреса[ИндексАдреса] + "Type"] = СокрЛП(Сред(ЗначениеПоля, Позиция +1)); + Иначе + НаселенныйПунктДетально[ИменаУровнейАдреса[ИндексАдреса]] = ЗначениеПоля; + КонецЕсли; + ЭлементыАдреса.Удалить(0); Иначе - НаселенныйПунктДетально[ИменаУровнейАдреса[ИндексАдреса]] = ЗначениеПоля; + НаселенныйПунктДетально[ИменаУровнейАдреса[ИндексАдреса]] = ""; КонецЕсли; - ЭлементыАдреса.Удалить(0); - Иначе - НаселенныйПунктДетально[ИменаУровнейАдреса[ИндексАдреса]] = ""; + КонецЦикла; + + Если ЭлементыАдреса.Количество() > 0 Тогда + НаселенныйПунктДетально[ИменаУровнейАдреса[ИменаУровнейАдреса.Количество() - 1]] = СокрЛП(СтрСоединить(ЭлементыАдреса, ",")); КонецЕсли; + + КонецЕсли; + + ОбновитьПредставлениеАдреса(); + +КонецПроцедуры + +&НаСервереБезКонтекста +Функция ВосстановитьАдрес(НаселенныйПункт, НаселенныйПунктДетально, ИменаУровнейАдреса) + + Результат = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияПоПредставлению(НаселенныйПункт, Перечисления.ТипыКонтактнойИнформации.Адрес); + + Адрес = УправлениеКонтактнойИнформациейСлужебный.JSONВКонтактнуюИнформациюПоПолям(Результат, Перечисления.ТипыКонтактнойИнформации.Адрес); + Если УправлениеКонтактнойИнформацией.АдресВведенВСвободнойФорме(Адрес) Тогда + Возврат Ложь; + КонецЕсли; + + Для каждого ИмяУровняАдреса Из ИменаУровнейАдреса Цикл + НаселенныйПунктДетально[ИмяУровняАдреса] = Адрес[ИмяУровняАдреса]; + НаселенныйПунктДетально[ИмяУровняАдреса + "Type"] = Адрес[ИмяУровняАдреса + "Type"]; КонецЦикла; - Если ЭлементыАдреса.Количество() > 0 Тогда - НаселенныйПунктДетально[ИменаУровнейАдреса[ИменаУровнейАдреса.Количество() - 1]] = СокрЛП(СтрСоединить(ЭлементыАдреса, ",")); - КонецЕсли; + УстановитьИдентификаторыАдреса(НаселенныйПунктДетально); - ОчиститьИдентификаторыАдреса(); - ОбновитьПредставлениеАдреса(); - -КонецПроцедуры + Возврат Истина; + +КонецФункции &НаКлиенте Процедура ПоказатьПодсказкуПоТипАдреса() @@ -3519,11 +3627,11 @@ И РаботаСАдресамиКлиентСервер.ЭтоМуниципальныйАдрес(Адрес.AddressType) И ЗначениеЗаполнено(Адрес.city) И ПустаяСтрока(Адрес.locality) Тогда - СписокЗаполненныхУровней.Добавить(Адрес["city"] + " " + Адрес["cityType"]); + СписокЗаполненныхУровней.Добавить(СокрЛП(Адрес["city"] + " " + Адрес["cityType"])); ИначеЕсли ЗначениеЗаполнено(Адрес[ИмяУровня]) Тогда Если НЕ РаботаСАдресамиКлиентСервер.ПредставлениеУровняБезСокращения(ИмяУровня) Тогда - СписокЗаполненныхУровней.Добавить(Адрес[ИмяУровня] + " " + Адрес[ИмяУровня + "Type"]); + СписокЗаполненныхУровней.Добавить(СокрЛП(Адрес[ИмяУровня] + " " + Адрес[ИмяУровня + "Type"])); Иначе СписокЗаполненныхУровней.Добавить(Адрес[ИмяУровня]); КонецЕсли; @@ -3564,14 +3672,14 @@ Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоАдресВСвободнойФорме(НаселенныйПунктДетально.AddressType) Тогда РазрешитьВводАдресаВСвободнойФорме = Ложь; - ТекстВопроса = НСтр("ru='Изменения, введенные вручную, будут потеряны. + ТекстВопроса = НСтр("ru = 'Изменения, введенные вручную, будут потеряны. |Исходный адрес будет перемещен в комментарий. |Продолжить?'"); ДополнительныеПараметры = Новый Структура("ТипАдреса", ТипАдреса); Оповещение = Новый ОписаниеОповещения("ПереключитьНаСтруктурированныйВводЗавершение", ЭтотОбъект, ДополнительныеПараметры ); - ПоказатьВопрос(Оповещение, ТекстВопроса, РежимДиалогаВопрос.ДаНет,,, НСтр("ru='Подтверждение'")); + ПоказатьВопрос(Оповещение, ТекстВопроса, РежимДиалогаВопрос.ДаНет,,, НСтр("ru = 'Подтверждение'")); Иначе ОтобразитьВыданныйТипАдреса(ТипАдреса); КонецЕсли; @@ -3680,8 +3788,6 @@ &НаКлиенте Процедура ОткрытьФормуЗагрузкиКлассификатора() - Перем ДополнительныеПараметры, СведенияОРегионе; - ДополнительныеПараметры = Новый Структура(); Если ТипЗнч(НаселенныйПунктДетально) = Тип("Структура") И НаселенныйПунктДетально.Свойство("Area") Тогда @@ -3716,11 +3822,11 @@ Возврат; КонецЕсли; - ДополнительныйТекст = Символы.ПС + Символы.ПС + НСтр("ru='Также адрес можно ввести в свободной форме (см. Еще - Адрес в свободной форме).'"); + ДополнительныйТекст = Символы.ПС + Символы.ПС + НСтр("ru = 'Также адрес можно ввести в свободной форме (см. Еще - Адрес в свободной форме).'"); Если ВидКонтактнойИнформации.МожноИзменятьСпособРедактирования И ВидКонтактнойИнформации.ПроверятьКорректность Тогда ДополнительныйТекст = ДополнительныйТекст + " "+ СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru='Для этого предварительно снять флажок ""Запрещать ввод некорректных адресов"" в виде контактной информации ""%1"".'"), + НСтр("ru = 'Для этого предварительно снять флажок ""Запрещать ввод некорректных адресов"" в виде контактной информации ""%1"".'"), ВидКонтактнойИнформации.Ссылка); КонецЕсли; @@ -3729,4 +3835,13 @@ КонецПроцедуры +&НаСервереБезКонтекста +Функция СведенияОбАдресе(НаселенныйПунктДетально) + + АдресВJSON = УправлениеКонтактнойИнформациейСлужебный.СтруктураВСтрокуJSON(НаселенныйПунктДетально); + ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("КодыАдреса", Истина); + Возврат РаботаСАдресами.СведенияОбАдресе(АдресВJSON, ДополнительныеПараметры); + +КонецФункции #КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВыборАдресаПоУровню/Module.bsl b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВыборАдресаПоУровню/Module.bsl index bb5fe4bd0..ec7b1e841 100644 --- a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВыборАдресаПоУровню/Module.bsl +++ b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВыборАдресаПоУровню/Module.bsl @@ -39,7 +39,7 @@ Параметры.Свойство("СкрыватьНеактуальные", СкрыватьНеактуальные); ПараметрыПоиска = Новый Структура; - ПараметрыПоиска.Вставить("КоличествоЗаписей", 7000); + ПараметрыПоиска.Вставить("КоличествоЗаписей", 3000); Если НЕ ЗначениеЗаполнено(Родитель) И Уровень > 1 Тогда // поиск адреса без родителя diff --git a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВыборДома/Module.bsl b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВыборДома/Module.bsl index a03537cf7..a1977c487 100644 --- a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВыборДома/Module.bsl +++ b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВыборДома/Module.bsl @@ -17,9 +17,9 @@ ТипВыбора = "СписокДомов"; Иначе ТипВыбора = "ЗемельныеУчастки"; - Заголовок = НСтр("ru='Выбрать земельный участок'"); - Элементы.Найти.Подсказка = НСтр("ru='Поиск по номеру земельного участка'"); - Элементы.Найти.ПодсказкаВвода = НСтр("ru='Номер земельного участка'"); + Заголовок = НСтр("ru = 'Выбрать земельный участок'"); + Элементы.Найти.Подсказка = НСтр("ru = 'Поиск по номеру земельного участка'"); + Элементы.Найти.ПодсказкаВвода = НСтр("ru = 'Номер земельного участка'"); КонецЕсли; ЗаполнитьСписок(?(Параметры.Отбор, Параметры.Номер, Неопределено)); diff --git a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/НаселенныйПунктАдреса/Form.form b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/НаселенныйПунктАдреса/Form.form index 72a16b92f..9db506983 100644 --- a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/НаселенныйПунктАдреса/Form.form +++ b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/НаселенныйПунктАдреса/Form.form @@ -114,6 +114,7 @@ ChoiceProcessing СубъектРФОбработкаВыбора + 30 true true true @@ -173,6 +174,7 @@ ChoiceProcessing РайонОбработкаВыбора + 30 true true true @@ -233,6 +235,7 @@ ChoiceProcessing МуниципальныйРайонОбработкаВыбора + 30 true true true @@ -292,6 +295,7 @@ ChoiceProcessing ГородОбработкаВыбора + 30 true true true @@ -351,6 +355,7 @@ ChoiceProcessing ПоселениеОбработкаВыбора + 30 true true true @@ -410,6 +415,7 @@ ChoiceProcessing ВнутригородскойРайонОбработкаВыбора + 30 true true true @@ -469,6 +475,7 @@ ChoiceProcessing НаселенныйПунктОбработкаВыбора + 30 true true true @@ -528,6 +535,7 @@ ChoiceProcessing ТерриторияОбработкаВыбора + 30 true true true @@ -969,6 +977,12 @@ Boolean + + ОтображатьКнопкиВыбора + + Boolean + + diff --git a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/НаселенныйПунктАдреса/Module.bsl b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/НаселенныйПунктАдреса/Module.bsl index 1518ed43d..fabdde356 100644 --- a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/НаселенныйПунктАдреса/Module.bsl +++ b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/НаселенныйПунктАдреса/Module.bsl @@ -59,7 +59,11 @@ ЕстьПравоЗагружатьКлассификатор = Обработки.РасширенныйВводКонтактнойИнформации.ЕстьВозможностьИзмененияАдресногоКлассификатора(); СведенияОАдресномКлассификаторе = УправлениеКонтактнойИнформациейСлужебныйПовтИсп.СведенияОДоступностиАдресногоКлассификатора(); - КлассификаторДоступен = СведенияОАдресномКлассификаторе["КлассификаторДоступен"]; + КлассификаторДоступен = СведенияОАдресномКлассификаторе.Получить("КлассификаторДоступен"); + + Если Не Параметры.ОтображатьКнопкиВыбора Тогда + ОтключитьКнопкиВыбораУЧастейАдреса(); + КонецЕсли; Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда @@ -77,6 +81,20 @@ ОтобразитьПоляПоТипуАдреса(); КонецПроцедуры +&НаСервере +Процедура ОтключитьКнопкиВыбораУЧастейАдреса() + + Элементы.СубъектРФ.КнопкаВыбора = Ложь; + Элементы.Район.КнопкаВыбора = Ложь; + Элементы.МуниципальныйРайон.КнопкаВыбора = Ложь; + Элементы.Город.КнопкаВыбора = Ложь; + Элементы.Поселение.КнопкаВыбора = Ложь; + Элементы.ВнутригородскойРайон.КнопкаВыбора = Ложь; + Элементы.НаселенныйПункт.КнопкаВыбора = Ложь; + Элементы.Территория.КнопкаВыбора = Ложь; + +КонецПроцедуры + #КонецОбласти #Область ОбработчикиСобытийЭлементовШапкиФормы @@ -321,7 +339,7 @@ &НаКлиентеНаСервереБезКонтекста Функция ПредставлениеУровняАдреса(Адрес, ИмяУровня, ДобавлятьСокращение = Истина) - Если СтрСравнить(ИмяУровня, "Locality") = 0 + Если СтрСравнить(ИмяУровня, "locality") = 0 И ПустаяСтрока(Адрес.locality) И ЗначениеЗаполнено(Адрес.city) И РаботаСАдресамиКлиентСервер.ЭтоМуниципальныйАдрес(Адрес.AddressType) Тогда @@ -351,14 +369,14 @@ Элементы.МуниципальныйРайон.Видимость = ЭтоМуниципальныйАдрес; Элементы.Поселение.Видимость = ЭтоМуниципальныйАдрес; - Если ЭтоМуниципальныйАдрес + Если ЭтоМуниципальныйАдрес И ПустаяСтрока(НаселенныйПунктДетально.locality) И ЗначениеЗаполнено(НаселенныйПунктДетально.city) Тогда - НаселенныйПункт = НаселенныйПунктДетально.city + " " + НаселенныйПунктДетально.cityType; - Иначе - НаселенныйПункт = НаселенныйПунктДетально.locality + " " + НаселенныйПунктДетально.localityType; + НаселенныйПункт = СокрЛП(НаселенныйПунктДетально.city + " " + НаселенныйПунктДетально.cityType); + Иначе + НаселенныйПункт = СокрЛП(НаселенныйПунктДетально.locality + " " + НаселенныйПунктДетально.localityType); КонецЕсли; - + Иначе Элементы.ТипАдреса.Видимость = Ложь; @@ -366,7 +384,7 @@ Элементы.Поселение.Видимость = Ложь; Элементы.ВнутригородскойРайон.Видимость = Ложь; Элементы.Территория.Видимость = Ложь; - Элементы.СубъектРФ.Заголовок = НСтр("ru='Регион'"); + Элементы.СубъектРФ.Заголовок = НСтр("ru = 'Регион'"); Элементы.СубъектРФ.КнопкаВыбора = Ложь; Элементы.Район.КнопкаВыбора = Ложь; Элементы.Город.КнопкаВыбора = Ложь; @@ -415,6 +433,20 @@ ДанныеВыбора = Результат.Данные; КонецЕсли; + Если ДанныеВыбора.Количество() = 0 Тогда + ИменаУровней = РаботаСАдресамиКлиентСервер.ИменаУровнейАдреса(ТипАдреса, Истина, Истина); + ОчищатьИдентификатор = Ложь; + Для каждого Уровень Из ИменаУровней Цикл + Если СтрСравнить(ИмяУровня, Уровень) = 0 Тогда + ОчищатьИдентификатор = Истина; + КонецЕсли; + Если ОчищатьИдентификатор Тогда + НаселенныйПунктДетально[Уровень + "Id"] = ""; + КонецЕсли; + КонецЦикла; + НаселенныйПунктДетально["Id"] = ИдентификаторРодителяУровняАдреса(ИмяУровня, НаселенныйПунктДетально, ТипАдреса); + КонецЕсли; + КонецЕсли; Возврат ДанныеВыбора; @@ -475,9 +507,9 @@ ОпределитьПоляАдреса(); Элемент.ОбновитьТекстРедактирования(); -Если ЕстьПравоЗагружатьКлассификатор И Не КлассификаторДоступен И ВыбранноеЗначение.ПредлагатьЗагрузкуКлассификатора Тогда + Если ЕстьПравоЗагружатьКлассификатор И Не КлассификаторДоступен И ВыбранноеЗначение.ПредлагатьЗагрузкуКлассификатора Тогда // Предлагаем загрузить классификатор. - ПредложениеЗагрузкиКлассификатора(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='Данные для ""%1"" не загружены.'"), ВыбранноеЗначение.Представление), + ПредложениеЗагрузкиКлассификатора(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Данные для ""%1"" не загружены.'"), ВыбранноеЗначение.Представление), ВыбранноеЗначение.Представление); КонецЕсли; diff --git a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/ManagerModule.bsl b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/ManagerModule.bsl index 0ccea878f..b1c80a9c2 100644 --- a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/ManagerModule.bsl +++ b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/ManagerModule.bsl @@ -347,7 +347,7 @@ СтруктураОшибкиПоставщикаАдресногоКлассификатора(Результат); Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда Результат.Отказ = Истина; - Результат.КраткоеПредставлениеОшибки = НСтр("ru='Адресные сведения отсутствуют.'"); + Результат.КраткоеПредставлениеОшибки = НСтр("ru = 'Адресные сведения отсутствуют.'"); Возврат Результат; КонецЕсли; @@ -1353,7 +1353,7 @@ // - не длинней 50 символов. // - только кириллица. - ДопустимоКромеКириллицы = "/,-. 0123456789_N"; + ДопустимоКромеКириллицы = "/,-. 0123456789_NIV"; // Регион Если Не ПустаяСтрока(Регион) Тогда @@ -1663,7 +1663,7 @@ // с обменом БСП 2.1.2. // // Возвращаемое значение: -// СписокЗначений +// СписокЗначений - // Функция АдресВСтарыйСписокПолей(XDTOАдрес, РасширенныйСоставПолей = Истина) Список = Новый СписокЗначений; diff --git a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Module.bsl index fd513db6c..27b8b286a 100644 --- a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Module.bsl @@ -1357,7 +1357,7 @@ Результат = ФоновоеЗаданиеЗапуститьНаСервере(ПараметрыФоновогоЗадания); Если Результат = Неопределено Тогда ДлительнаяОперацияЗапущена = Ложь; - ТекстПредупреждения = НСтр("ru='При запуске фонового задания с целью изменения регистрации произошла ошибка.'"); + ТекстПредупреждения = НСтр("ru = 'При запуске фонового задания с целью изменения регистрации произошла ошибка.'"); ПоказатьПредупреждение(, ТекстПредупреждения); Возврат; КонецЕсли; @@ -1381,9 +1381,9 @@ Возврат; КонецЕсли; Если ВидДлительнойОперации Тогда - СтатусОперации = НСтр("ru='Выполняется регистрация изменений. Пожалуйста, подождите.'"); + СтатусОперации = НСтр("ru = 'Выполняется регистрация изменений. Пожалуйста, подождите.'"); Иначе - СтатусОперации = НСтр("ru='Выполняется отмена регистрации изменений. Пожалуйста, подождите.'"); + СтатусОперации = НСтр("ru = 'Выполняется отмена регистрации изменений. Пожалуйста, подождите.'"); КонецЕсли; Элементы.СтатусДлительнойОперации.Заголовок = СтатусОперации; Элементы.ГруппаСтраницы.ТекущаяСтраница = Элементы.Ожидание; diff --git a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/ObjectModule.bsl b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/ObjectModule.bsl index b7b6d1fff..3223933da 100644 --- a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/ObjectModule.bsl +++ b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/ObjectModule.bsl @@ -686,20 +686,38 @@ Возврат; КонецЕсли; - Изменен = Ложь; - Для Каждого Элемент Из Данные Цикл - Если ОбъектУзла[Элемент.Ключ] = Элемент.Значение Тогда - Продолжить; - КонецЕсли; - - ОбъектУзла[Элемент.Ключ] = Элемент.Значение; - Изменен = Истина; - КонецЦикла; + МетаданныеУзла = ОбъектУзла.Метаданные(); - Если Изменен Тогда - ОбъектУзла.ОбменДанными.Загрузка = Истина; - ОбъектУзла.Записать(); - КонецЕсли; + НачатьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить(МетаданныеУзла.ПолноеИмя()); + ЭлементБлокировки.УстановитьЗначение("Ссылка", Ссылка); + Блокировка.Заблокировать(); + + ЗаблокироватьДанныеДляРедактирования(Ссылка); + ОбъектУзла = Ссылка.ПолучитьОбъект(); + + Изменен = Ложь; + Для Каждого Элемент Из Данные Цикл + Если ОбъектУзла[Элемент.Ключ] = Элемент.Значение Тогда + Продолжить; + КонецЕсли; + + ОбъектУзла[Элемент.Ключ] = Элемент.Значение; + Изменен = Истина; + КонецЦикла; + + Если Изменен Тогда + ОбъектУзла.ОбменДанными.Загрузка = Истина; + ОбъектУзла.Записать(); + КонецЕсли; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; КонецПроцедуры diff --git a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентноеЗадание/Form.form b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентноеЗадание/Form.form index 3517d82f2..9d7997c66 100644 --- a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентноеЗадание/Form.form +++ b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентноеЗадание/Form.form @@ -80,10 +80,6 @@ true - - <key>ru</key> - <value>Включение и расписание</value> - ГруппаВключениеИРасписаниеРасширеннаяПодсказка 72 @@ -157,10 +153,6 @@ true - - <key>ru</key> - <value>1. Основное</value> - ОсновноеExtendedTooltip 50 @@ -311,10 +303,6 @@ true - - <key>ru</key> - <value>2. Действия при ошибках</value> - ДействияПриОшибкахExtendedTooltip 53 @@ -522,10 +510,6 @@ true - - <key>ru</key> - <value>3. Дополнительно</value> - ДополнительноExtendedTooltip 60 @@ -678,10 +662,6 @@ true - - <key>ru</key> - <value>4. Метаданные</value> - МетаданныеExtendedTooltip 65 @@ -765,10 +745,6 @@ true - - <key>ru</key> - <value>Сообщения пользователю и описание информации об ошибке</value> - СообщенияПользователюИОписаниеИнформацииОбОшибкеExtendedTooltip 69 diff --git a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентноеЗадание/Module.bsl b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентноеЗадание/Module.bsl index bc0447dac..b294c9232 100644 --- a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентноеЗадание/Module.bsl +++ b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентноеЗадание/Module.bsl @@ -101,7 +101,6 @@ Элементы.ИмяПользователя.СписокВыбора.Добавить(Пользователь.Имя); КонецЦикла; - СтандартныеПодсистемыСервер.УстановитьОтображениеЗаголовковГрупп(ЭтотОбъект); КонецПроцедуры &НаКлиенте diff --git a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентныеИФоновыеЗадания/Form.form b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентныеИФоновыеЗадания/Form.form index 3859827b1..310b5945e 100644 --- a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентныеИФоновыеЗадания/Form.form +++ b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентныеИФоновыеЗадания/Form.form @@ -494,6 +494,45 @@ Normal + + РасписаниеЗадания + 316 + true + true + + + ТаблицаРегламентныеЗадания.Расписание + + + РасписаниеЗаданияРасширеннаяПодсказка + 318 + Label + true + true + + Left + + + + РасписаниеЗаданияКонтекстноеМеню + 317 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + Предопределенное 34 diff --git a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентныеИФоновыеЗадания/Module.bsl b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентныеИФоновыеЗадания/Module.bsl index 5e0f6b02e..d7fa92550 100644 --- a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентныеИФоновыеЗадания/Module.bsl +++ b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентныеИФоновыеЗадания/Module.bsl @@ -1142,9 +1142,6 @@ // Установка наименования регламентного задания из коллекции ТаблицаРегламентныеЗадания. Если ЗначениеЗаполнено(Обновляемое.ИдентификаторРегламентногоЗадания) Тогда - Обновляемое.ИдентификаторРегламентногоЗадания - = Обновляемое.ИдентификаторРегламентногоЗадания; - Строки = ТаблицаРегламентныеЗадания.НайтиСтроки( Новый Структура("Идентификатор", Обновляемое.ИдентификаторРегламентногоЗадания)); diff --git a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/ФоновоеЗадание/Form.form b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/ФоновоеЗадание/Form.form index f47357c45..ba9d65ef0 100644 --- a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/ФоновоеЗадание/Form.form +++ b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/ФоновоеЗадание/Form.form @@ -212,10 +212,6 @@ true - - <key>ru</key> - <value>Основное</value> - true ОсновноеExtendedTooltip @@ -365,10 +361,6 @@ true - - <key>ru</key> - <value>Дополнительно</value> - true ДополнительноExtendedTooltip @@ -482,10 +474,6 @@ true - - <key>ru</key> - <value>Регламентное задание</value> - true РегламентноеЗаданиеExtendedTooltip diff --git a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/ФоновоеЗадание/Module.bsl b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/ФоновоеЗадание/Module.bsl index c1dbcbe48..3e7a2b95e 100644 --- a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/ФоновоеЗадание/Module.bsl +++ b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/ФоновоеЗадание/Module.bsl @@ -56,8 +56,6 @@ |Расположение, |Состояние, |ИмяМетода"); - - СтандартныеПодсистемыСервер.УстановитьОтображениеЗаголовковГрупп(ЭтотОбъект); КонецПроцедуры diff --git a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/ВосстановлениеДанныхИзРезервнойКопии/Module.bsl b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/ВосстановлениеДанныхИзРезервнойКопии/Module.bsl index cf6c450af..f0ee5c4ee 100644 --- a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/ВосстановлениеДанныхИзРезервнойКопии/Module.bsl +++ b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/ВосстановлениеДанныхИзРезервнойКопии/Module.bsl @@ -61,7 +61,7 @@ Если ТекущаяСтраница <> Элементы.СтраницыЗагрузкиДанных.ПодчиненныеЭлементы.СтраницаИнформацииИВыполненияРезервногоКопирования Тогда Возврат; КонецЕсли; - + ТекстПредупреждения = НСтр("ru = 'Прервать подготовку к восстановлению данных?'"); ОбщегоНазначенияКлиент.ПоказатьПодтверждениеЗакрытияПроизвольнойФормы(ЭтотОбъект, Отказ, ЗавершениеРаботы, ТекстПредупреждения, "ЗакрытьФормуБезусловно"); @@ -369,7 +369,7 @@ &НаКлиенте Процедура ПослеЗапускаСкрипта(Результат, Контекст) Экспорт - Если Результат.ПриложениеЗапущено Тогда + Если Результат.ПриложениеЗапущено Тогда ПрекратитьРаботуСистемы(); Иначе ПоказатьПредупреждение(, Результат.ОписаниеОшибки); diff --git a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/РезервноеКопированиеДанных/Form.form b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/РезервноеКопированиеДанных/Form.form index b73dc3413..956178941 100644 --- a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/РезервноеКопированиеДанных/Form.form +++ b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/РезервноеКопированиеДанных/Form.form @@ -607,24 +607,19 @@ НадписьОбновитьВерсиюКомпоненты - 226 + 437 <key>ru</key> - <value>При ошибке версии компоненты "comcntr", рекомендуется выполнить -ее <link Перерегистрация>перерегистрацию</> (потребуется перезапуск сеанса).</value> + <value>При ошибках версии компоненты comcntr, "не найдена указанная процедура", "класс не зарегистрирован" и аналогичных, рекомендуется выполнить <link Перерегистрация>регистрацию компоненты comcntr</> (потребуется перезапуск сеанса).</value> true true true - - ru - Возможно необходимо обновить версию компоненты "comcntr". При этом потребуется перезапустить сеанс 1С. Для этого нажмите здесь - НадписьОбновитьВерсиюКомпонентыРасширеннаяПодсказка - 369 + 439 Label true true @@ -634,11 +629,13 @@ НадписьОбновитьВерсиюКомпонентыКонтекстноеМеню - 227 + 438 true true Label + 60 + true true false diff --git a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ИндикацияХодаОбновленияИБ/Form.form b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ИндикацияХодаОбновленияИБ/Form.form index e1a54520f..82ee33736 100644 --- a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ИндикацияХодаОбновленияИБ/Form.form +++ b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ИндикацияХодаОбновленияИБ/Form.form @@ -82,10 +82,6 @@ true - - <key>ru</key> - <value>Обновление версии программы</value> - None ОбновлениеВерсииПрограммыРасширеннаяПодсказка @@ -177,10 +173,6 @@ true - - <key>ru</key> - <value>Начальное заполнение</value> - НачальноеЗаполнениеExtendedTooltip 16 @@ -368,10 +360,6 @@ true - - <key>ru</key> - <value>Обновление параметров работы программы</value> - ОбновлениеПараметровРаботыПрограммыРасширеннаяПодсказка 39 @@ -393,10 +381,6 @@ true - - <key>ru</key> - <value>Режим запуска</value> - РежимЗапускаExtendedTooltip 12 diff --git a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ИндикацияХодаОтложенногоОбновленияИБ/Form.form b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ИндикацияХодаОтложенногоОбновленияИБ/Form.form index da3640d1c..8339aa6ee 100644 --- a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ИндикацияХодаОтложенногоОбновленияИБ/Form.form +++ b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ИндикацияХодаОтложенногоОбновленияИБ/Form.form @@ -223,10 +223,6 @@ true - - <key>ru</key> - <value>Информация об ошибке</value> - ИнформацияОбОшибкеРасширеннаяПодсказка 241 @@ -278,10 +274,6 @@ true - - <key>ru</key> - <value>Результаты обновления</value> - ГруппаРезультатыОбновленияРасширеннаяПодсказка 185 @@ -381,10 +373,6 @@ true - - <key>ru</key> - <value>Исправления установлены компоновка</value> - ГруппаИсправленияУстановленыКомпоновкаРасширеннаяПодсказка 210 @@ -512,10 +500,6 @@ true - - <key>ru</key> - <value>Ошибка установки исправлений компоновка</value> - ГруппаОшибкаУстановкиИсправленийКомпоновкаРасширеннаяПодсказка 223 @@ -567,10 +551,6 @@ true - - <key>ru</key> - <value>Установленные исправления</value> - ГруппаУстановленныеИсправленияРасширеннаяПодсказка 203 @@ -696,10 +676,6 @@ true - - <key>ru</key> - <value>Шапка файловая база</value> - ГруппаШапкаФайловаяБазаРасширеннаяПодсказка 248 @@ -796,10 +772,6 @@ true - - <key>ru</key> - <value>Запустить отложенное обновление</value> - ГруппаЗапуститьОтложенноеОбновлениеРасширеннаяПодсказка 138 @@ -825,10 +797,6 @@ true - - <key>ru</key> - <value>Группа информация о прогрессе</value> - ГруппаИнформацияФайловаяБазаExtendedTooltip 137 @@ -957,10 +925,6 @@ true - - <key>ru</key> - <value>Шапка модель сервиса</value> - ГруппаШапкаМодельСервисаРасширеннаяПодсказка 250 @@ -1017,10 +981,6 @@ true - - <key>ru</key> - <value>Статус обновления для пользователя</value> - СтатусОбновленияДляПользователяExtendedTooltip 145 @@ -1120,10 +1080,6 @@ true - - <key>ru</key> - <value>Шапка клиент сервер</value> - ГруппаШапкаКлиентСерверРасширеннаяПодсказка 252 @@ -1318,10 +1274,6 @@ true - - <key>ru</key> - <value>Приоритет</value> - ГруппаПриоритетРасширеннаяПодсказка 243 @@ -1488,10 +1440,6 @@ true - - <key>ru</key> - <value>Настройка расписания</value> - ГруппаНастройкаРасписанияExtendedTooltip 174 @@ -1517,10 +1465,6 @@ true - - <key>ru</key> - <value>Подсказка про период наименьшей активности пользователей</value> - ГруппаПодсказкаПроПериодНаименьшейАктивностиПользователейExtendedTooltip 157 @@ -1546,10 +1490,6 @@ true - - <key>ru</key> - <value>Информация о прогрессе</value> - ГруппаИнформацияОПрогрессеExtendedTooltip 153 @@ -1575,10 +1515,6 @@ true - - <key>ru</key> - <value>Ход обновления</value> - ГруппаХодОбновленияExtendedTooltip 151 @@ -1605,10 +1541,6 @@ true - - <key>ru</key> - <value>Обновление выполняется</value> - ОбновлениеВыполняетсяExtendedTooltip 150 @@ -1740,10 +1672,6 @@ true - - <key>ru</key> - <value>Шапка завершено</value> - ГруппаШапкаЗавершеноРасширеннаяПодсказка 254 @@ -1775,10 +1703,6 @@ true - - <key>ru</key> - <value>Переход к списку отложенных обработчиков</value> - 3 ГруппаПереходКСпискуОтложенныхОбработчиковExtendedTooltip @@ -1879,10 +1803,6 @@ true - - <key>ru</key> - <value>Группа информация об обновлении</value> - ГруппаИнформацияОбОбновлении1ExtendedTooltip 166 @@ -1908,10 +1828,6 @@ true - - <key>ru</key> - <value>Отложенное обновление завершено</value> - ГруппаОтложенноеОбновлениеЗавершеноExtendedTooltip 164 @@ -1938,10 +1854,6 @@ true - - <key>ru</key> - <value>Обновление завершено</value> - ОбновлениеЗавершеноExtendedTooltip 163 @@ -1963,10 +1875,6 @@ true - - <key>ru</key> - <value>Статус обновления</value> - true СтатусОбновленияExtendedTooltip diff --git a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ОбновлениеДляНеполноправногоПользователя/Form.form b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ОбновлениеДляНеполноправногоПользователя/Form.form new file mode 100644 index 000000000..7d0e13f3a --- /dev/null +++ b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ОбновлениеДляНеполноправногоПользователя/Form.form @@ -0,0 +1,363 @@ + + + + <key>ru</key> + <value>Подготовка к запуску</value> + + + ГруппаСтраницы + 1 + + ПодготовкаОбласти + 3 + + ДекорацияДлительнаяОперация + 5 + + <key>ru</key> + <value>Декорация длительная операция</value> + + true + true + + true + + + ДекорацияДлительнаяОперацияРасширеннаяПодсказка + 7 + Label + true + true + + Left + + + + ДекорацияДлительнаяОперацияКонтекстноеМеню + 6 + true + + true + true + + + CommonPicture.ДлительнаяОперация48 + + AsFileRef + + + + ПояснениеДлительнойОперации + 8 + + <key>ru</key> + <value>Выполняется обновление приложения, пожалуйста, подождите.</value> + + true + true + + true + + + ПояснениеДлительнойОперацииРасширеннаяПодсказка + 10 + Label + true + true + + Left + + + + ПояснениеДлительнойОперацииКонтекстноеМеню + 9 + true + + Label + true + true + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Подготовка области</value> + + false + + ПодготовкаОбластиРасширеннаяПодсказка + 4 + Label + true + true + + Left + + + Page + + AlwaysHorizontal + false + + + + ГруппаОшибкаПодготовки + 11 + + ДекорацияОшибка + 13 + + <key>ru</key> + <value>Декорация ошибка</value> + + true + true + + true + + + ДекорацияОшибкаРасширеннаяПодсказка + 15 + Label + true + true + + Left + + + + ДекорацияОшибкаКонтекстноеМеню + 14 + true + + true + true + + + CommonPicture.Ошибка32 + + AsFileRef + + + + ПояснениеОшибки + 16 + + <key>ru</key> + <value>При обновлении возникла ошибка. Обратитесь к администратору сервиса.</value> + + true + true + + true + + + ПояснениеОшибкиРасширеннаяПодсказка + 18 + Label + true + true + + Left + + + + ПояснениеОшибкиКонтекстноеМеню + 17 + true + + Label + true + true + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Ошибка подготовки</value> + + false + + ГруппаОшибкаПодготовкиРасширеннаяПодсказка + 12 + Label + true + true + + Left + + + Page + + AlwaysHorizontal + auto + false + + + true + true + + true + + + <key>ru</key> + <value>Страницы</value> + + + ГруппаСтраницыРасширеннаяПодсказка + 2 + Label + true + true + + Left + + + Pages + + Auto + + + Bottom + true + + ФормаКоманднаяПанель + -1 + + ФормаЗавершитьРаботу + 19 + + <key>ru</key> + <value>Завершить работу</value> + + true + true + + true + + + ФормаЗавершитьРаботуРасширеннаяПодсказка + 20 + Label + true + true + + Left + + + Form.Command.ЗавершитьРаботу + Auto + true + true + true + UserCmds + Auto + + Right + + + OnOpen + ПриОткрытии + + + BeforeClose + ПередЗакрытием + + + OnCreateAtServer + ПриСозданииНаСервере + + LockWholeInterface + true + true + Vertical + true + true + true + auto + true + + Объект + 1 + + DataProcessorObject.РезультатыОбновленияПрограммы + + + true + + + true + +
      true
      +
      + + ОжиданиеСчетчик + 2 + + Number + + 10 + + + + true + + + true + + + + ЗавершениеРаботы + 3 + + Boolean + + + true + + + true + + + + ЗавершитьРаботу + + <key>ru</key> + <value>Завершить работу</value> + + 1 + + ru + Завершить работу + + + true + + + + ЗавершитьРаботу + + + Auto + Auto + + + + + + +
      diff --git a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ОбновлениеДляНеполноправногоПользователя/Module.bsl b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ОбновлениеДляНеполноправногоПользователя/Module.bsl new file mode 100644 index 000000000..4221deed9 --- /dev/null +++ b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ОбновлениеДляНеполноправногоПользователя/Module.bsl @@ -0,0 +1,123 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2019, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + Элементы.ФормаЗавершитьРаботу.Видимость = Ложь; + + СтандартныеПодсистемыСервер.УстановитьКлючНазначенияФормы(ЭтотОбъект, "Обновление"); +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + ПодключитьОбработчикОжидания("ЗапуститьОбновление", 0.1, Истина); +КонецПроцедуры + +&НаКлиенте +Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка) + Если Не ЗавершениеРаботы Тогда + Отказ = Истина; + КонецЕсли; +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ЗавершитьРаботу(Команда) + ЗавершениеРаботы = Истина; + ПрекратитьРаботуСистемы(Ложь); +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаКлиенте +Процедура ЗапуститьОбновление() + Результат = ЗапускОбновленияНаСервере(); + + Если Результат.Статус = "Выполнено" Тогда + ЗапуститьОбновлениеЗавершение(Результат, Неопределено); + Возврат; + КонецЕсли; + + ОповещениеОЗавершении = Новый ОписаниеОповещения("ЗапуститьОбновлениеЗавершение", ЭтотОбъект); + ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект); + ПараметрыОжидания.ВыводитьОкноОжидания = Ложь; + ПараметрыОжидания.ВыводитьПрогрессВыполнения = Ложь; + ПараметрыОжидания.ВыводитьСообщения = Ложь; + ДлительныеОперацииКлиент.ОжидатьЗавершение(Результат, ОповещениеОЗавершении, ПараметрыОжидания); + +КонецПроцедуры + +&НаСервере +Функция ЗапускОбновленияНаСервере() + + ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор); + ПараметрыВыполнения.ОжидатьЗавершение = 0; + ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Фоновое обновление информационной базы под ограниченными правами'"); + + Результат = ДлительныеОперации.ВыполнитьФункцию(ПараметрыВыполнения, + "ОбновлениеИнформационнойБазыСлужебный.ОбновлениеПодОграниченнымиПравами"); + + Возврат Результат; + +КонецФункции + +&НаКлиенте +Процедура ЗапуститьОбновлениеЗавершение(Результат, ДополнительныеПараметры) Экспорт + + РезультатОбновления = Неопределено; + Если Результат.Статус = "Выполнено" Тогда + РезультатОбновления = ПолучитьИзВременногоХранилища(Результат.АдресРезультата); + КонецЕсли; + + Если РезультатОбновления = Истина Тогда + ЗавершениеРаботы = Истина; + ПрекратитьРаботуСистемы(Истина); + Иначе + НастроитьФорму(); + ОжиданиеСчетчик = 60; + ПродолжитьОбратныйОтсчет(); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПродолжитьОбратныйОтсчет() + ОжиданиеСчетчик = ОжиданиеСчетчик - 1; + + Если ОжиданиеСчетчик <= 0 Тогда + ЗавершениеРаботы = Истина; + ПрекратитьРаботуСистемы(Ложь); + Иначе + НовыйЗаголовок = ( + НСтр("ru = 'Завершить работу'") + + " (" + + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'осталось %1 сек.'"), Строка(ОжиданиеСчетчик)) + + ")"); + + Элементы.ФормаЗавершитьРаботу.Заголовок = НовыйЗаголовок; + + ПодключитьОбработчикОжидания("ПродолжитьОбратныйОтсчет", 1, Истина); + КонецЕсли; +КонецПроцедуры + +&НаСервере +Процедура НастроитьФорму() + Элементы.ГруппаСтраницы.ТекущаяСтраница = Элементы.ГруппаОшибкаПодготовки; + Элементы.ФормаЗавершитьРаботу.Видимость = Истина; + + СтандартныеПодсистемыСервер.УстановитьКлючНазначенияФормы(ЭтотОбъект, "ОшибкаОбновления"); +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ОтложенноеОбновлениеНеЗавершено/Form.form b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ОтложенноеОбновлениеНеЗавершено/Form.form index b26c786fd..5ecdaf501 100644 --- a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ОтложенноеОбновлениеНеЗавершено/Form.form +++ b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ОтложенноеОбновлениеНеЗавершено/Form.form @@ -79,10 +79,6 @@ true - - <key>ru</key> - <value>Картинка и текст</value> - 5 ГруппаКартинкаИТекстРасширеннаяПодсказка @@ -201,10 +197,6 @@ true - - <key>ru</key> - <value>Командная панель</value> - Bottom КоманднаяПанельРасширеннаяПодсказка @@ -227,10 +219,6 @@ true - - <key>ru</key> - <value>Пояснение</value> - ГруппаПояснениеРасширеннаяПодсказка 17 diff --git a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ОтложенныеОбработчики/Module.bsl b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ОтложенныеОбработчики/Module.bsl index f936c30c7..42347e425 100644 --- a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ОтложенныеОбработчики/Module.bsl +++ b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ОтложенныеОбработчики/Module.bsl @@ -527,7 +527,7 @@ НСтр("ru = '%1 - |%2'"); - ШаблонИнформацияОПроцедуреОбновления = НСтр("ru = '%1%2Процедура ""%3"" обработки данных %4.'"); + ШаблонИнформацияОПроцедуреОбновления = НСтр("ru = 'Процедура ""%1"" обработки данных %2.'"); СтрокаСписка.Статус = ?(СтрокаОбработчика.Статус = "НеВыполнено", "НеЗапускалась", СтрокаОбработчика.Статус); Если СтрокаОбработчика.Статус = "Выполнено" Тогда @@ -590,12 +590,12 @@ КонецЕсли; Если СтрокаОбработчика.Статус <> "Ошибка" Тогда - СтрокаСписка.ИнформацияОПроцедуреОбновления = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ШаблонИнформацияОПроцедуреОбновления, - СтрокаОбработчика.Комментарий, - Отступ, - СтрокаОбработчика.ИмяОбработчика, - ПредставлениеСтатусаВыполнения); + СтрокаСписка.ИнформацияОПроцедуреОбновления = СтрокаОбработчика.Комментарий + + Отступ + + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ШаблонИнформацияОПроцедуреОбновления, + СтрокаОбработчика.ИмяОбработчика, + ПредставлениеСтатусаВыполнения); КонецЕсли; СтрокаСписка.ИнтервалВыполнения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( diff --git a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/РезультатыОбновленияПрограммы.mdo b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/РезультатыОбновленияПрограммы.mdo index 666405a23..389ca8765 100644 --- a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/РезультатыОбновленияПрограммы.mdo +++ b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/РезультатыОбновленияПрограммы.mdo @@ -90,4 +90,13 @@ PersonalComputer MobileDevice + + ОбновлениеДляНеполноправногоПользователя + + ru + Обновление для неполноправного пользователя + + PersonalComputer + MobileDevice + diff --git a/SSL/src/DataProcessors/СдвигГраницыИтогов/Forms/ОсновнаяФорма/Form.form b/SSL/src/DataProcessors/СдвигГраницыИтогов/Forms/ОсновнаяФорма/Form.form index 615f559b2..4cf72324e 100644 --- a/SSL/src/DataProcessors/СдвигГраницыИтогов/Forms/ОсновнаяФорма/Form.form +++ b/SSL/src/DataProcessors/СдвигГраницыИтогов/Forms/ОсновнаяФорма/Form.form @@ -85,10 +85,6 @@ true - - <key>ru</key> - <value>Длительная операция</value> - 5 ГруппаДлительнаяОперацияРасширеннаяПодсказка diff --git a/SSL/src/DataProcessors/Сканирование/Forms/НастройкаСканирования/Module.bsl b/SSL/src/DataProcessors/Сканирование/Forms/НастройкаСканирования/Module.bsl index 77e763fb3..804e14151 100644 --- a/SSL/src/DataProcessors/Сканирование/Forms/НастройкаСканирования/Module.bsl +++ b/SSL/src/DataProcessors/Сканирование/Forms/НастройкаСканирования/Module.bsl @@ -116,9 +116,6 @@ Элементы.ФорматСканированногоИзображения.Заголовок = НСтр("ru = 'Тип'"); КонецЕсли; - СтандартныеПодсистемыСервер.УстановитьОтображениеЗаголовковГрупп(ЭтотОбъект, - "ГруппаФорматХраненияОдиночный,ГруппаФорматХраненияМногостраничный,ГруппаПараметрыСканирования"); - КонецПроцедуры &НаКлиенте diff --git a/SSL/src/DataProcessors/Сканирование/Forms/НастройкаСканированияНаСеанс/Module.bsl b/SSL/src/DataProcessors/Сканирование/Forms/НастройкаСканированияНаСеанс/Module.bsl index 52e74f659..3e71375f9 100644 --- a/SSL/src/DataProcessors/Сканирование/Forms/НастройкаСканированияНаСеанс/Module.bsl +++ b/SSL/src/DataProcessors/Сканирование/Forms/НастройкаСканированияНаСеанс/Module.bsl @@ -72,9 +72,6 @@ Элементы.ФорматСканированногоИзображения.Заголовок = НСтр("ru = 'Тип'"); КонецЕсли; - СтандартныеПодсистемыСервер.УстановитьОтображениеЗаголовковГрупп(ЭтотОбъект, - "ГруппаФорматХраненияОдиночный,ГруппаФорматХраненияМногостраничный,ГруппаОсновное"); - КонецПроцедуры #КонецОбласти diff --git a/SSL/src/DataProcessors/Сканирование/Forms/РезультатСканирования/Module.bsl b/SSL/src/DataProcessors/Сканирование/Forms/РезультатСканирования/Module.bsl index 49ad2a627..39b756ae1 100644 --- a/SSL/src/DataProcessors/Сканирование/Forms/РезультатСканирования/Module.bsl +++ b/SSL/src/DataProcessors/Сканирование/Forms/РезультатСканирования/Module.bsl @@ -325,7 +325,7 @@ Возврат; КонецЕсли; - Результат.ТекстОшибки = НСтр("ru='Не удалось сохранить отсканированный файл.'"); + Результат.ТекстОшибки = НСтр("ru = 'Не удалось сохранить отсканированный файл.'"); ПринятьЗавершение(Результат, ПараметрыВыполнения); КонецПроцедуры diff --git a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/Форма/Form.form b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/Форма/Form.form index 99fc2ab19..4f049ef14 100644 --- a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/Форма/Form.form @@ -1,25 +1,65 @@ - - СтраницаСопоставления - 80 - - Пояснение - 302 - - <key>ru</key> - <value>Для сопоставления данных <НаименованиеЭтойПрограммы> + <items xsi:type="form:Decoration"> + <name>Пояснение</name> + <id>302</id> + <title> + <key>ru</key> + <value>Для сопоставления данных <НаименованиеЭтойПрограммы> с данными <НаименованиеВторойПрограммы> воспользуйтесь командой "Сопоставить автоматически...". Оставшиеся несопоставленные данные можно связать друг с другом вручную.</value> - + + true + true + + true + + + ПояснениеExtendedTooltip + 339 + Label + true + true + + Left + + + + ПояснениеКонтекстноеМеню + 303 + true + + Label + true + + Style.ПоясняющийТекст + + + Left + + + + ГруппаЗаголовкаТаблицы + 210 + + ОтборПоСтатусуСопоставления + 30 true true true + + ОтборПоСтатусуСопоставления + + true + + OnChange + ОтборПоСтатусуСопоставленияПриИзменении + - ПояснениеExtendedTooltip - 339 + ОтборПоСтатусуСопоставленияExtendedTooltip + 341 Label true true @@ -28,41 +68,74 @@
      - ПояснениеКонтекстноеМеню - 303 + ОтборПоСтатусуСопоставленияКонтекстноеМеню + 31 true + InputField + Enter + true + Left + true + + 50 + true + true + false + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Заголовка таблицы</value> + + + ГруппаЗаголовкаТаблицыExtendedTooltip + 340 Label + true true - - Style.ПоясняющийТекст - Left - + + UsualGroup + + HorizontalIfPossible + Auto + true + true + Auto + Auto + + + + КнопкиТаблицы + 77 - ГруппаЗаголовкаТаблицы - 210 - - ОтборПоСтатусуСопоставления - 30 + КоманднаяПанель + 267 + + ЗаписатьИЗакрыть + 271 true true true - - ОтборПоСтатусуСопоставления - true - - OnChange - ОтборПоСтатусуСопоставленияПриИзменении - - ОтборПоСтатусуСопоставленияExtendedTooltip - 341 + ЗаписатьИЗакрытьExtendedTooltip + 344 Label true true @@ -70,93 +143,47 @@ Left - - ОтборПоСтатусуСопоставленияКонтекстноеМеню - 31 - true - - InputField - Enter - true - Left - true - - 50 - true - true - false - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Заголовка таблицы</value> - - - ГруппаЗаголовкаТаблицыExtendedTooltip - 340 - Label + Form.Command.ЗаписатьИЗакрыть + PictureAndText + true true true - - Left - - - UsualGroup - - HorizontalIfPossible - Auto - true - true - Auto - Auto - - - - КнопкиТаблицы - 77 - - КоманднаяПанель - 267 - - ЗаписатьИЗакрыть - 271 - true - true - - true - - true - - ЗаписатьИЗакрытьExtendedTooltip - 344 - Label - true - true - - Left - - - Form.Command.ЗаписатьИЗакрыть - PictureAndText - true + UserCmds + Auto + + + ЗаписатьОбновить + 270 + true + true + + true + + true + + ЗаписатьОбновитьExtendedTooltip + 345 + Label true true - UserCmds - Auto - + + Left + +
      + Form.Command.ЗаписатьОбновить + Normal + Auto + true + true + UserCmds + Auto + + + ГруппаСвязи + 294 - ЗаписатьОбновить - 270 + ВыполнитьАвтоматическоеСопоставление + 71 true true @@ -164,8 +191,8 @@ true - ЗаписатьОбновитьExtendedTooltip - 345 + ВыполнитьАвтоматическоеСопоставлениеExtendedTooltip + 347 Label true true @@ -173,7 +200,7 @@ Left - Form.Command.ЗаписатьОбновить + Form.Command.ВыполнитьАвтоматическоеСопоставление Normal Auto true @@ -181,114 +208,9 @@ UserCmds Auto - - ГруппаСвязи - 294 - - ВыполнитьАвтоматическоеСопоставление - 71 - true - true - - true - - true - - ВыполнитьАвтоматическоеСопоставлениеExtendedTooltip - 347 - Label - true - true - - Left - - - Form.Command.ВыполнитьАвтоматическоеСопоставление - Normal - Auto - true - true - UserCmds - Auto - - - ДобавитьСопоставление - 163 - true - true - - true - - true - - ДобавитьСопоставлениеExtendedTooltip - 348 - Label - true - true - - Left - - - Form.Command.ДобавитьСопоставление - Normal - Auto - true - true - UserCmds - Auto - - - ОтменитьСопоставление - 33 - true - true - - true - - true - - ОтменитьСопоставлениеExtendedTooltip - 349 - Label - true - true - - Left - - - Form.Command.ОтменитьСопоставление - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Связи</value> - - - ГруппаСвязиExtendedTooltip - 346 - Label - true - true - - Left - - - - - Обновить - 39 + ДобавитьСопоставление + 163 true true @@ -296,8 +218,8 @@ true - ОбновитьExtendedTooltip - 350 + ДобавитьСопоставлениеExtendedTooltip + 348 Label true true @@ -305,7 +227,112 @@ Left - Form.Command.Обновить + Form.Command.ДобавитьСопоставление + Normal + Auto + true + true + UserCmds + Auto + + + ОтменитьСопоставление + 33 + true + true + + true + + true + + ОтменитьСопоставлениеExtendedTooltip + 349 + Label + true + true + + Left + + + Form.Command.ОтменитьСопоставление + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Связи</value> + + + ГруппаСвязиExtendedTooltip + 346 + Label + true + true + + Left + + + + + + Обновить + 39 + true + true + + true + + true + + ОбновитьExtendedTooltip + 350 + Label + true + true + + Left + + + Form.Command.Обновить + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ГруппаНайти + 295 + + Найти + 287 + true + true + + true + + + НайтиExtendedTooltip + 352 + Label + true + true + + Left + + + Form.Item.ТаблицаСопоставления.StandardCommand.Find Normal Auto true @@ -314,20 +341,603 @@ Auto InAdditionalSubmenu + + ОтменитьПоиск + 288 + true + true + + true + + + ОтменитьПоискExtendedTooltip + 353 + Label + true + true + + Left + + + Form.Item.ТаблицаСопоставления.StandardCommand.CancelSearch + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + Сортировка + 167 + true + true + + true + + true + + СортировкаExtendedTooltip + 354 + Label + true + true + + Left + + + Form.Command.Сортировка + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Найти</value> + + + ГруппаНайтиExtendedTooltip + 351 + Label + true + true + + Left + + + + + + ВыполнитьЗагрузкуДанных + 282 + true + true + + true + + true + + ВыполнитьЗагрузкуДанныхExtendedTooltip + 355 + Label + true + true + + Left + + + Form.Command.ВыполнитьЗагрузкуДанных + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ПодменюНастройки + 268 + + ИзменитьСписокПолейТаблицы + 266 + true + true + + true + + true + + ИзменитьСписокПолейТаблицыExtendedTooltip + 357 + Label + true + true + + Left + + + Form.Command.НастройкаСпискаПолейТаблицы + Normal + Auto + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Настройка</value> + + + ПодменюНастройкиExtendedTooltip + 356 + Label + true + true + + Left + + + + + + ФормаГруппаВывестиСписок + 308 + + ФормаВывестиСписок + 309 + true + true + + true + + + ФормаВывестиСписокExtendedTooltip + 359 + Label + true + true + + Left + + + Form.Item.ТаблицаСопоставления.StandardCommand.OutputList + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ФормаКопироватьВБуферОбмена + 310 + true + true + + true + + + ФормаКопироватьВБуферОбменаExtendedTooltip + 360 + Label + true + true + + Left + + + Form.Item.ТаблицаСопоставления.StandardCommand.CopyToClipboard + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Форма группа вывести список</value> + + + ФормаГруппаВывестиСписокExtendedTooltip + 358 + Label + true + true + + Left + + + + + true + true + + true + + + <key>ru</key> + <value>Командная панель</value> + + + КоманднаяПанельExtendedTooltip + 343 + Label + true + true + + Left + + + CommandBar + + Left + Form + + + true + true + + true + + + <key>ru</key> + <value>Кнопки таблицы</value> + + + КнопкиТаблицыExtendedTooltip + 342 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + true + Auto + Auto + + + + ПанельОсновная + 318 + + СопоставлениеОбъектов + 321 + + ТаблицаСопоставления + 22 + + <key>ru</key> + <value>Таблица сопоставления</value> + + + Style.ПоясняющийТекст + + true + true + + true + + + ТаблицаСопоставления + + false + None + Add + Change + Copy + Delete + EndEdit + MoveDown + MoveUp + SelectAll + SortListAsc + SortListDesc - ГруппаНайти - 295 - - Найти - 287 + ДанныеЭтойПрограммы + 306 + + ПоляПриемника + 69 + + ТаблицаСопоставленияПриемникИндексКартинки + 285 + true + true + + true + + + ТаблицаСопоставления.ПриемникИндексКартинки + + true + None + + ТаблицаСопоставленияПриемникИндексКартинкиExtendedTooltip + 376 + Label + true + true + + Left + + + + ТаблицаСопоставленияПриемникИндексКартинкиКонтекстноеМеню + 286 + true + + PictureField + DontShow + Auto + Left + + 2 + true + true + true + + CommonPicture.КоллекцияКартинокСопоставлениеОбъектов + + + + 1 + + + + + ТаблицаСопоставленияПриемникПоле1 + 48 + true + true + + true + + + ТаблицаСопоставления.ПриемникПоле1 + + + ТаблицаСопоставленияПриемникПоле1ExtendedTooltip + 377 + Label + true + true + + Left + + + + ТаблицаСопоставленияПриемникПоле1КонтекстноеМеню + 49 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ТаблицаСопоставленияПриемникПоле2 + 50 + true + true + + true + + + ТаблицаСопоставления.ПриемникПоле2 + + + ТаблицаСопоставленияПриемникПоле2ExtendedTooltip + 378 + Label + true + true + + Left + + + + ТаблицаСопоставленияПриемникПоле2КонтекстноеМеню + 51 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ТаблицаСопоставленияПриемникПоле3 + 52 + true + true + + true + + + ТаблицаСопоставления.ПриемникПоле3 + + + ТаблицаСопоставленияПриемникПоле3ExtendedTooltip + 379 + Label + true + true + + Left + + + + ТаблицаСопоставленияПриемникПоле3КонтекстноеМеню + 53 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ТаблицаСопоставленияПриемникПоле4 + 54 + true + true + + true + + + ТаблицаСопоставления.ПриемникПоле4 + + + ТаблицаСопоставленияПриемникПоле4ExtendedTooltip + 380 + Label + true + true + + Left + + + + ТаблицаСопоставленияПриемникПоле4КонтекстноеМеню + 55 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ТаблицаСопоставленияПриемникПоле5 + 56 + true + true + + true + + + ТаблицаСопоставления.ПриемникПоле5 + + + ТаблицаСопоставленияПриемникПоле5ExtendedTooltip + 381 + Label + true + true + + Left + + + + ТаблицаСопоставленияПриемникПоле5КонтекстноеМеню + 57 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + true true true + + <key>ru</key> + <value>Поля приемника</value> + + + ru + Поля источника + - НайтиExtendedTooltip - 352 + ПоляПриемникаExtendedTooltip + 375 Label true true @@ -335,26 +945,307 @@ Left - Form.Item.ТаблицаСопоставления.StandardCommand.Find - Normal - Auto + ColumnGroup + + InCell + auto + true + + + true + true + + true + + + <key>ru</key> + <value><Эта программа></value> + + + ДанныеЭтойПрограммыExtendedTooltip + 374 + Label true true - UserCmds - Auto - InAdditionalSubmenu - - - ОтменитьПоиск - 288 + + Left + +
      + ColumnGroup + + Vertical + auto + true + true + + + + ДанныеВторойПрограммы + 307 + + ПоляИсточника + 68 + + ТаблицаСопоставленияИсточникИндексКартинки + 283 + true + true + + true + + + ТаблицаСопоставления.ИсточникИндексКартинки + + + ТаблицаСопоставленияИсточникИндексКартинкиExtendedTooltip + 384 + Label + true + true + + Left + + + + ТаблицаСопоставленияИсточникИндексКартинкиКонтекстноеМеню + 284 + true + + PictureField + true + Auto + Left + + 2 + true + true + true + + CommonPicture.КоллекцияКартинокСопоставлениеОбъектов + + + + 1 + + + + + ТаблицаСопоставленияИсточникПоле1 + 58 + true + true + + true + + + ТаблицаСопоставления.ИсточникПоле1 + + + ТаблицаСопоставленияИсточникПоле1ExtendedTooltip + 385 + Label + true + true + + Left + + + + ТаблицаСопоставленияИсточникПоле1КонтекстноеМеню + 59 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ТаблицаСопоставленияИсточникПоле2 + 60 + true + true + + true + + + ТаблицаСопоставления.ИсточникПоле2 + + + ТаблицаСопоставленияИсточникПоле2ExtendedTooltip + 386 + Label + true + true + + Left + + + + ТаблицаСопоставленияИсточникПоле2КонтекстноеМеню + 61 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ТаблицаСопоставленияИсточникПоле3 + 62 + true + true + + true + + + ТаблицаСопоставления.ИсточникПоле3 + + + ТаблицаСопоставленияИсточникПоле3ExtendedTooltip + 387 + Label + true + true + + Left + + + + ТаблицаСопоставленияИсточникПоле3КонтекстноеМеню + 63 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ТаблицаСопоставленияИсточникПоле4 + 64 + true + true + + true + + + ТаблицаСопоставления.ИсточникПоле4 + + + ТаблицаСопоставленияИсточникПоле4ExtendedTooltip + 388 + Label + true + true + + Left + + + + ТаблицаСопоставленияИсточникПоле4КонтекстноеМеню + 65 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ТаблицаСопоставленияИсточникПоле5 + 66 + true + true + + true + + + ТаблицаСопоставления.ИсточникПоле5 + + + ТаблицаСопоставленияИсточникПоле5ExtendedTooltip + 389 + Label + true + true + + Left + + + + ТаблицаСопоставленияИсточникПоле5КонтекстноеМеню + 67 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + true true true + + <key>ru</key> + <value>Поля источника</value> + - ОтменитьПоискExtendedTooltip - 353 + ПоляИсточникаExtendedTooltip + 383 Label true true @@ -362,27 +1253,304 @@ Left - Form.Item.ТаблицаСопоставления.StandardCommand.CancelSearch - Normal - Auto + ColumnGroup + + InCell + auto + true + + + true + true + + true + + + <key>ru</key> + <value><Вторая программа></value> + + + ДанныеВторойПрограммыExtendedTooltip + 382 + Label true true - UserCmds - Auto - InAdditionalSubmenu - - - Сортировка - 167 + + Left + +
      + ColumnGroup + + Vertical + auto + true + true + + + None + + ТаблицаСопоставленияКоманднаяПанель + 24 + Left + true + + + Selection + ТаблицаСопоставленияВыбор + + + BeforeRowChange + ТаблицаСопоставленияПередНачаломИзменения + + + ТаблицаСопоставленияСтрокаПоиска + 410 + + ТаблицаСопоставленияСтрокаПоискаРасширеннаяПодсказка + 412 + Label + true + true + + Left + + + + ТаблицаСопоставленияСтрокаПоискаКонтекстноеМеню + 411 + true + + ТаблицаСопоставления + + true + + + + ТаблицаСопоставленияСостояниеПросмотра + 413 + + ТаблицаСопоставленияСостояниеПросмотраРасширеннаяПодсказка + 415 + Label + true + true + + Left + + + + ТаблицаСопоставленияСостояниеПросмотраКонтекстноеМеню + 414 + true + + ViewStatusAddition + ТаблицаСопоставления + + true + + + + ТаблицаСопоставленияУправлениеПоиском + 416 + + ТаблицаСопоставленияУправлениеПоискомРасширеннаяПодсказка + 418 + Label + true + true + + Left + + + + ТаблицаСопоставленияУправлениеПоискомКонтекстноеМеню + 417 + true + + SearchControlAddition + ТаблицаСопоставления + + true + + + + ТаблицаСопоставленияExtendedTooltip + 373 + Label + true + true + + Left + + + + ТаблицаСопоставленияКонтекстноеМеню + 23 + + ТаблицаСопоставленияКонтекстноеМенюГруппаСвязи + 296 + + КонтекстноеМенюТаблицаСопоставленияДобавитьСопоставление + 279 + true + true + + true + + false + + КонтекстноеМенюТаблицаСопоставленияДобавитьСопоставлениеExtendedTooltip + 364 + Label + true + true + + Left + + + Form.Command.ДобавитьСопоставление + Normal + Auto + true + true + UserCmds + Auto + + + КонтекстноеМенюТаблицаСопоставленияОтменитьСопоставление + 280 + true + true + + true + + false + + КонтекстноеМенюТаблицаСопоставленияОтменитьСопоставлениеExtendedTooltip + 365 + Label + true + true + + Left + + + Form.Command.ОтменитьСопоставление + Normal + Auto + true + true + UserCmds + Auto + true true true - true + + <key>ru</key> + <value>Таблица сопоставления контекстное меню группа связи</value> + - СортировкаExtendedTooltip - 354 + ТаблицаСопоставленияКонтекстноеМенюГруппаСвязиExtendedTooltip + 363 + Label + true + true + + Left + + + + + + ТаблицаСопоставленияКонтекстноеМенюГруппаНайти + 297 + + ТаблицаСопоставленияКонтекстноеМенюНайти + 289 + true + true + + true + + + ТаблицаСопоставленияКонтекстноеМенюНайтиExtendedTooltip + 367 + Label + true + true + + Left + + + Form.Item.ТаблицаСопоставления.StandardCommand.Find + Normal + Auto + true + true + UserCmds + Auto + + + ТаблицаСопоставленияКонтекстноеМенюОтменитьПоиск + 290 + true + true + + true + + + ТаблицаСопоставленияКонтекстноеМенюОтменитьПоискExtendedTooltip + 368 + Label + true + true + + Left + + + Form.Item.ТаблицаСопоставления.StandardCommand.CancelSearch + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Таблица сопоставления контекстное меню группа найти</value> + + + ТаблицаСопоставленияКонтекстноеМенюГруппаНайтиExtendedTooltip + 366 + Label + true + true + + Left + + + + + + ТаблицаСопоставленияКонтекстноеМенюСортировка + 291 + true + true + + true + + + ТаблицаСопоставленияКонтекстноеМенюСортировкаExtendedTooltip + 369 Label true true @@ -397,1177 +1565,21 @@ true UserCmds Auto - InAdditionalSubmenu - - true - true - - true - - - <key>ru</key> - <value>Найти</value> - - - ГруппаНайтиExtendedTooltip - 351 - Label - true - true - - Left - - - - - - ВыполнитьЗагрузкуДанных - 282 - true - true - - true - - true - - ВыполнитьЗагрузкуДанныхExtendedTooltip - 355 - Label - true - true - - Left - - - Form.Command.ВыполнитьЗагрузкуДанных - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - ПодменюНастройки - 268 - - ИзменитьСписокПолейТаблицы - 266 - true - true - - true - - true - - ИзменитьСписокПолейТаблицыExtendedTooltip - 357 - Label - true - true - - Left - - - Form.Command.НастройкаСпискаПолейТаблицы - Normal - Auto - true - true - UserCmds - Auto - InCommandBarAndInAdditionalSubmenu - - true - true - - true - - - <key>ru</key> - <value>Настройка</value> - - - ПодменюНастройкиExtendedTooltip - 356 - Label - true - true - - Left - - - - - - ФормаГруппаВывестиСписок - 308 - - ФормаВывестиСписок - 309 - true - true - - true - - - ФормаВывестиСписокExtendedTooltip - 359 - Label - true - true - - Left - - - Form.Item.ТаблицаСопоставления.StandardCommand.OutputList - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - ФормаКопироватьВБуферОбмена - 310 - true - true - - true - - - ФормаКопироватьВБуферОбменаExtendedTooltip - 360 - Label - true - true - - Left - - - Form.Item.ТаблицаСопоставления.StandardCommand.CopyToClipboard - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - true - true - - true - - - <key>ru</key> - <value>Форма группа вывести список</value> - - - ФормаГруппаВывестиСписокExtendedTooltip - 358 - Label - true - true - - Left - - - - - true - true - - true - - - <key>ru</key> - <value>Командная панель</value> - - - КоманднаяПанельExtendedTooltip - 343 - Label - true - true - - Left - - - CommandBar - - Left - Form - - - true - true - - true - - - <key>ru</key> - <value>Кнопки таблицы</value> - - - КнопкиТаблицыExtendedTooltip - 342 - Label - true - true - - Left - - - UsualGroup - - HorizontalIfPossible - Auto - true - true - Auto - Auto - - - - ПанельОсновная - 318 - - СопоставлениеОбъектов - 321 - - ТаблицаСопоставления - 22 - - <key>ru</key> - <value>Таблица сопоставления</value> - - - Style.ПоясняющийТекст - - true - true - - true - - - ТаблицаСопоставления - - false - None - Add - Change - Copy - Delete - EndEdit - MoveDown - MoveUp - SelectAll - SortListAsc - SortListDesc - - ДанныеЭтойПрограммы - 306 - - ПоляПриемника - 69 - - ТаблицаСопоставленияПриемникИндексКартинки - 285 - true - true - - true - - - ТаблицаСопоставления.ПриемникИндексКартинки - - true - None - - ТаблицаСопоставленияПриемникИндексКартинкиExtendedTooltip - 376 - Label - true - true - - Left - - - - ТаблицаСопоставленияПриемникИндексКартинкиКонтекстноеМеню - 286 - true - - PictureField - DontShow - Auto - Left - - 2 - true - true - true - - CommonPicture.КоллекцияКартинокСопоставлениеОбъектов - - - - 1 - - - - - ТаблицаСопоставленияПриемникПоле1 - 48 - true - true - - true - - - ТаблицаСопоставления.ПриемникПоле1 - - - ТаблицаСопоставленияПриемникПоле1ExtendedTooltip - 377 - Label - true - true - - Left - - - - ТаблицаСопоставленияПриемникПоле1КонтекстноеМеню - 49 - true - - InputField - Auto - true - Left - true - - true - true - true - true - true - true - Normal - - - - ТаблицаСопоставленияПриемникПоле2 - 50 - true - true - - true - - - ТаблицаСопоставления.ПриемникПоле2 - - - ТаблицаСопоставленияПриемникПоле2ExtendedTooltip - 378 - Label - true - true - - Left - - - - ТаблицаСопоставленияПриемникПоле2КонтекстноеМеню - 51 - true - - InputField - Auto - true - Left - true - - true - true - true - true - true - true - Normal - - - - ТаблицаСопоставленияПриемникПоле3 - 52 - true - true - - true - - - ТаблицаСопоставления.ПриемникПоле3 - - - ТаблицаСопоставленияПриемникПоле3ExtendedTooltip - 379 - Label - true - true - - Left - - - - ТаблицаСопоставленияПриемникПоле3КонтекстноеМеню - 53 - true - - InputField - Auto - true - Left - true - - true - true - true - true - true - true - Normal - - - - ТаблицаСопоставленияПриемникПоле4 - 54 - true - true - - true - - - ТаблицаСопоставления.ПриемникПоле4 - - - ТаблицаСопоставленияПриемникПоле4ExtendedTooltip - 380 - Label - true - true - - Left - - - - ТаблицаСопоставленияПриемникПоле4КонтекстноеМеню - 55 - true - - InputField - Auto - true - Left - true - - true - true - true - true - true - true - Normal - - - - ТаблицаСопоставленияПриемникПоле5 - 56 - true - true - - true - - - ТаблицаСопоставления.ПриемникПоле5 - - - ТаблицаСопоставленияПриемникПоле5ExtendedTooltip - 381 - Label - true - true - - Left - - - - ТаблицаСопоставленияПриемникПоле5КонтекстноеМеню - 57 - true - - InputField - Auto - true - Left - true - - true - true - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Поля приемника</value> - - - ru - Поля источника - - - ПоляПриемникаExtendedTooltip - 375 - Label - true - true - - Left - - - ColumnGroup - - InCell - auto - true - - - true - true - - true - - - <key>ru</key> - <value><Эта программа></value> - - - System.DefaultGUIFont - true - false - false - false - - - ДанныеЭтойПрограммыExtendedTooltip - 374 - Label - true - true - - Left - - - ColumnGroup - - Vertical - auto - true - true - - ДанныеВторойПрограммы - 307 - - ПоляИсточника - 68 - - ТаблицаСопоставленияИсточникИндексКартинки - 283 - true - true - - true - - - ТаблицаСопоставления.ИсточникИндексКартинки - - - ТаблицаСопоставленияИсточникИндексКартинкиExtendedTooltip - 384 - Label - true - true - - Left - - - - ТаблицаСопоставленияИсточникИндексКартинкиКонтекстноеМеню - 284 - true - - PictureField - true - Auto - Left - - 2 - true - true - true - - CommonPicture.КоллекцияКартинокСопоставлениеОбъектов - - - - 1 - - - - - ТаблицаСопоставленияИсточникПоле1 - 58 - true - true - - true - - - ТаблицаСопоставления.ИсточникПоле1 - - - ТаблицаСопоставленияИсточникПоле1ExtendedTooltip - 385 - Label - true - true - - Left - - - - ТаблицаСопоставленияИсточникПоле1КонтекстноеМеню - 59 - true - - InputField - Auto - true - Left - true - - true - true - true - true - true - true - Normal - - - - ТаблицаСопоставленияИсточникПоле2 - 60 - true - true - - true - - - ТаблицаСопоставления.ИсточникПоле2 - - - ТаблицаСопоставленияИсточникПоле2ExtendedTooltip - 386 - Label - true - true - - Left - - - - ТаблицаСопоставленияИсточникПоле2КонтекстноеМеню - 61 - true - - InputField - Auto - true - Left - true - - true - true - true - true - true - true - Normal - - - - ТаблицаСопоставленияИсточникПоле3 - 62 - true - true - - true - - - ТаблицаСопоставления.ИсточникПоле3 - - - ТаблицаСопоставленияИсточникПоле3ExtendedTooltip - 387 - Label - true - true - - Left - - - - ТаблицаСопоставленияИсточникПоле3КонтекстноеМеню - 63 - true - - InputField - Auto - true - Left - true - - true - true - true - true - true - true - Normal - - - - ТаблицаСопоставленияИсточникПоле4 - 64 - true - true - - true - - - ТаблицаСопоставления.ИсточникПоле4 - - - ТаблицаСопоставленияИсточникПоле4ExtendedTooltip - 388 - Label - true - true - - Left - - - - ТаблицаСопоставленияИсточникПоле4КонтекстноеМеню - 65 - true - - InputField - Auto - true - Left - true - - true - true - true - true - true - true - Normal - - - - ТаблицаСопоставленияИсточникПоле5 - 66 - true - true - - true - - - ТаблицаСопоставления.ИсточникПоле5 - - - ТаблицаСопоставленияИсточникПоле5ExtendedTooltip - 389 - Label - true - true - - Left - - - - ТаблицаСопоставленияИсточникПоле5КонтекстноеМеню - 67 - true - - InputField - Auto - true - Left - true - - true - true - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Поля источника</value> - - - ПоляИсточникаExtendedTooltip - 383 - Label - true - true - - Left - - - ColumnGroup - - InCell - auto - true - - - true - true - - true - - - <key>ru</key> - <value><Вторая программа></value> - - - System.DefaultGUIFont - true - false - false - false - - - ДанныеВторойПрограммыExtendedTooltip - 382 - Label - true - true - - Left - - - ColumnGroup - - Vertical - auto - true - true - - - None - - ТаблицаСопоставленияКоманднаяПанель - 24 - Left - true - - - Selection - ТаблицаСопоставленияВыбор - - - BeforeRowChange - ТаблицаСопоставленияПередНачаломИзменения - - - ТаблицаСопоставленияСтрокаПоиска - 410 - - ТаблицаСопоставленияСтрокаПоискаРасширеннаяПодсказка - 412 - Label - true - true - - Left - - - - ТаблицаСопоставленияСтрокаПоискаКонтекстноеМеню - 411 - true - - ТаблицаСопоставления - - true - - - - ТаблицаСопоставленияСостояниеПросмотра - 413 - - ТаблицаСопоставленияСостояниеПросмотраРасширеннаяПодсказка - 415 - Label - true - true - - Left - - - - ТаблицаСопоставленияСостояниеПросмотраКонтекстноеМеню - 414 - true - - ViewStatusAddition - ТаблицаСопоставления - - true - - - - ТаблицаСопоставленияУправлениеПоиском - 416 - - ТаблицаСопоставленияУправлениеПоискомРасширеннаяПодсказка - 418 - Label - true - true - - Left - - - - ТаблицаСопоставленияУправлениеПоискомКонтекстноеМеню - 417 - true - - SearchControlAddition - ТаблицаСопоставления - - true - - - - ТаблицаСопоставленияExtendedTooltip - 373 - Label - true - true - - Left - - - - ТаблицаСопоставленияКонтекстноеМеню - 23 - - ТаблицаСопоставленияКонтекстноеМенюГруппаСвязи - 296 - - КонтекстноеМенюТаблицаСопоставленияДобавитьСопоставление - 279 - true - true - - true - - false - - КонтекстноеМенюТаблицаСопоставленияДобавитьСопоставлениеExtendedTooltip - 364 - Label - true - true - - Left - - - Form.Command.ДобавитьСопоставление - Normal - Auto - true - true - UserCmds - Auto - - - КонтекстноеМенюТаблицаСопоставленияОтменитьСопоставление - 280 - true - true - - true - - false - - КонтекстноеМенюТаблицаСопоставленияОтменитьСопоставлениеExtendedTooltip - 365 - Label - true - true - - Left - - - Form.Command.ОтменитьСопоставление - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Таблица сопоставления контекстное меню группа связи</value> - - - ТаблицаСопоставленияКонтекстноеМенюГруппаСвязиExtendedTooltip - 363 - Label - true - true - - Left - - - - - - ТаблицаСопоставленияКонтекстноеМенюГруппаНайти - 297 - - ТаблицаСопоставленияКонтекстноеМенюНайти - 289 - true - true - - true - - - ТаблицаСопоставленияКонтекстноеМенюНайтиExtendedTooltip - 367 - Label - true - true - - Left - - - Form.Item.ТаблицаСопоставления.StandardCommand.Find - Normal - Auto - true - true - UserCmds - Auto - - - ТаблицаСопоставленияКонтекстноеМенюОтменитьПоиск - 290 - true - true - - true - - - ТаблицаСопоставленияКонтекстноеМенюОтменитьПоискExtendedTooltip - 368 - Label - true - true - - Left - - - Form.Item.ТаблицаСопоставления.StandardCommand.CancelSearch - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Таблица сопоставления контекстное меню группа найти</value> - - - ТаблицаСопоставленияКонтекстноеМенюГруппаНайтиExtendedTooltip - 366 - Label - true - true - - Left - - - - + ТаблицаСопоставленияКонтекстноеМенюГруппаВывестиСписок + 311 - ТаблицаСопоставленияКонтекстноеМенюСортировка - 291 + ТаблицаСопоставленияКонтекстноеМенюВывестиСписок + 312 true true true - ТаблицаСопоставленияКонтекстноеМенюСортировкаExtendedTooltip - 369 + ТаблицаСопоставленияКонтекстноеМенюВывестиСписокExtendedTooltip + 371 Label true true @@ -1575,7 +1587,7 @@ Left
      - Form.Command.Сортировка + Form.Item.ТаблицаСопоставления.StandardCommand.OutputList Normal Auto true @@ -1583,73 +1595,17 @@ UserCmds Auto - - ТаблицаСопоставленияКонтекстноеМенюГруппаВывестиСписок - 311 - - ТаблицаСопоставленияКонтекстноеМенюВывестиСписок - 312 - true - true - - true - - - ТаблицаСопоставленияКонтекстноеМенюВывестиСписокExtendedTooltip - 371 - Label - true - true - - Left - - - Form.Item.ТаблицаСопоставления.StandardCommand.OutputList - Normal - Auto - true - true - UserCmds - Auto - - - ТаблицаСопоставленияКонтекстноеМенюКопироватьВБуферОбмена - 313 - true - true - - true - - - ТаблицаСопоставленияКонтекстноеМенюКопироватьВБуферОбменаExtendedTooltip - 372 - Label - true - true - - Left - - - Form.Item.ТаблицаСопоставления.StandardCommand.CopyToClipboard - Normal - Auto - true - true - UserCmds - Auto - + + ТаблицаСопоставленияКонтекстноеМенюКопироватьВБуферОбмена + 313 true true true - - <key>ru</key> - <value>Таблица сопоставления контекстное меню группа вывести список</value> - - ТаблицаСопоставленияКонтекстноеМенюГруппаВывестиСписокExtendedTooltip - 370 + ТаблицаСопоставленияКонтекстноеМенюКопироватьВБуферОбменаExtendedTooltip + 372 Label true true @@ -1657,201 +1613,13 @@ Left - - - - true - true - true - true - true - true - MultiRow - Row -
      true
      - 1 - 1 - AutoUse - AutoUse - true - true - true - Auto - Auto - true - true - true - true - true - -
      - true - true - - true - - - <key>ru</key> - <value>Сопоставление объектов</value> - - true - - СопоставлениеОбъектовExtendedTooltip - 362 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - - - ОжиданиеСопоставленияОбъектов - 320 - - Рамка - 336 - - ГруппировкаСообщения - 329 - - ГруппаКартинки - 330 - - Декорация14 - 331 - true - true - - true - - - Декорация14ExtendedTooltip - 394 - Label - true - true - - Left - - - - Декорация14КонтекстноеМеню - 332 - true - - true - true - false - - - CommonPicture.СинхронизацияДанныхАнализДанных48 - - - - true - true - - true - - - <key>ru</key> - <value>Картинки</value> - - - ГруппаКартинкиExtendedTooltip - 393 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - - ГруппаСообщения - 333 - - Декорация15 - 334 - - <key>ru</key> - <value>Выполняется анализ данных...</value> - - true - true - - true - - - Декорация15ExtendedTooltip - 396 - Label - true - true - - Left - - - - Декорация15КонтекстноеМеню - 335 - true - - Label - 3 - true - false - - Left - Center - - - true - true - - true - - - <key>ru</key> - <value>Сообщения</value> - - - ГруппаСообщенияExtendedTooltip - 395 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - + Form.Item.ТаблицаСопоставления.StandardCommand.CopyToClipboard + Normal + Auto + true + true + UserCmds + Auto true true @@ -1860,11 +1628,11 @@ <key>ru</key> - <value>Группировка сообщения</value> + <value>Таблица сопоставления контекстное меню группа вывести список</value> - ГруппировкаСообщенияExtendedTooltip - 392 + ТаблицаСопоставленияКонтекстноеМенюГруппаВывестиСписокExtendedTooltip + 370 Label true true @@ -1872,311 +1640,33 @@ Left - UsualGroup - - HorizontalIfPossible - Auto - NormalSeparation - true - true - Auto - Auto - + - true - true - - true - - - <key>ru</key> - <value>Рамка</value> - - true - true - true - - РамкаExtendedTooltip - 391 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - NormalSeparation - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Ожидание сопоставления объектов</value> - - true - - ОжиданиеСопоставленияОбъектовExtendedTooltip - 390 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - - - ОшибкаСопоставленияОбъектов - 319 - - Рамка1 - 337 - - ГруппировкаСообщения1 - 322 - - ГруппаКартинки1 - 323 - - Декорация3 - 324 - true - true - - true - - - Декорация3ExtendedTooltip - 401 - Label - true - true - - Left - - - - Декорация3КонтекстноеМеню - 325 - true - - true - true - false - - - CommonPicture.Предупреждение32 - - - - true - true - - true - - - <key>ru</key> - <value>Группа картинки</value> - - - ГруппаКартинки1ExtendedTooltip - 400 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - - ГруппаСообщения1 - 326 - - Декорация4 - 327 - - <key>ru</key> - <value>Не удалось выполнить анализ данных.</value> - - true - true - - true - - - Декорация4ExtendedTooltip - 403 - Label - true - true - - Left - - - - Декорация4КонтекстноеМеню - 328 - true - - Label - 3 - true - false - - Left - Center - - - true - true - - true - - - <key>ru</key> - <value>Группа сообщения</value> - - - ГруппаСообщения1ExtendedTooltip - 402 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Группировка сообщения 1</value> - - - ru - Группировка сообщения - - - ГруппировкаСообщения1ExtendedTooltip - 399 - Label - true - true - - Left - - - UsualGroup - - HorizontalIfPossible - Auto - NormalSeparation - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Рамка</value> - - true - true - true - - Рамка1ExtendedTooltip - 398 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - NormalSeparation - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Ошибка сопоставления объектов</value> - - true - - ОшибкаСопоставленияОбъектовExtendedTooltip - 397 - Label - true - true - - Left - - - Page - - Vertical - auto - false - + + true + true + true + true + true + true + MultiRow + Row +
      true
      + 1 + 1 + AutoUse + AutoUse + true + true + true + Auto + Auto + true + true + true + true + true +
      true true @@ -2185,12 +1675,12 @@ <key>ru</key> - <value>Панель основная</value> + <value>Сопоставление объектов</value> true - ПанельОсновнаяExtendedTooltip - 361 + СопоставлениеОбъектовExtendedTooltip + 362 Label true true @@ -2198,114 +1688,199 @@ Left - Pages - - Auto + Page + + Vertical + auto + false - ИнформацияДайджестаСопоставления - 272 - - КартинкаИнформацияОНаличииНесопоставленныхОбъектов - 304 - - <key>ru</key> - <value>Картинка информация о наличии несопоставленных объектов</value> - - true - true - - true - - - КартинкаИнформацияОНаличииНесопоставленныхОбъектовExtendedTooltip - 405 - Label - true - true - - Left - - - - КартинкаИнформацияОНаличииНесопоставленныхОбъектовКонтекстноеМеню - 305 - true - - true - true - false - - - CommonPicture.Информация - - - - - КоличествоОбъектовСопоставленных - 316 - true - true - - true - - - КоличествоОбъектовСопоставленных - - - КоличествоОбъектовСопоставленныхExtendedTooltip - 406 - Label - true - true - - Left - - - - КоличествоОбъектовСопоставленныхКонтекстноеМеню - 317 - true - - LabelField - true - Enter - true - Left - true - - 6 - true - true - + ОжиданиеСопоставленияОбъектов + 320 + + Рамка + 336 + + ГруппировкаСообщения + 329 + + ГруппаКартинки + 330 + + Декорация14 + 331 + true + true + + true + + + Декорация14ExtendedTooltip + 394 + Label + true + true + + Left + + + + Декорация14КонтекстноеМеню + 332 + true + + true + true + false + + + CommonPicture.СинхронизацияДанныхАнализДанных48 + + + + true + true + + true + + + <key>ru</key> + <value>Картинки</value> + + + ГруппаКартинкиExtendedTooltip + 393 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ГруппаСообщения + 333 + + Декорация15 + 334 + + <key>ru</key> + <value>Выполняется анализ данных...</value> + + true + true + + true + + + Декорация15ExtendedTooltip + 396 + Label + true + true + + Left + + + + Декорация15КонтекстноеМеню + 335 + true + + Label + 3 + true + false + + Left + Center + + + true + true + + true + + + <key>ru</key> + <value>Сообщения</value> + + + ГруппаСообщенияExtendedTooltip + 395 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + <key>ru</key> - <value>ЧН=0</value> - </format> - <font xsi:type="core:FontRef"> - <font>System.DefaultGUIFont</font> - <bold>true</bold> - <italic>false</italic> - <underline>false</underline> - <strikeout>false</strikeout> - </font> - </extInfo> - </items> - <items xsi:type="form:Decoration"> - <name>НадписьШт</name> - <id>300</id> + <value>Группировка сообщения</value> + + + ГруппировкаСообщенияExtendedTooltip + 392 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + NormalSeparation + true + true + Auto + Auto + + + true + true + + true + <key>ru</key> - <value>шт.</value> + <value>Рамка</value> - true - true - - true - + true + true + true - НадписьШтExtendedTooltip - 407 + РамкаExtendedTooltip + 391 Label true true @@ -2313,97 +1888,15 @@ Left
      - - НадписьШтКонтекстноеМеню - 301 - true - - Label - true - - Left - - - - КоличествоОбъектовНесопоставленных - 277 - true - true - - true - - - КоличествоОбъектовНесопоставленных - - - КоличествоОбъектовНесопоставленныхExtendedTooltip - 408 - Label - true - true - - Left - - - - КоличествоОбъектовНесопоставленныхКонтекстноеМеню - 278 - true - - LabelField - true - Enter - true - Left - true - - 6 - true - true - - ru - ЧН=0 - - - System.DefaultGUIFont - true - false - false - false - - - - - НадписьШт1 - 314 - - <key>ru</key> - <value>шт.</value> - - true - true - - true - - - НадписьШт1ExtendedTooltip - 409 - Label - true - true - - Left - - - - НадписьШт1КонтекстноеМеню - 315 - true - - Label - true - - Left + UsualGroup + + Vertical + Auto + NormalSeparation + true + true + Auto + Auto true @@ -2413,11 +1906,12 @@ <key>ru</key> - <value>Дайджест сопоставления</value> + <value>Ожидание сопоставления объектов</value> + true - ИнформацияДайджестаСопоставленияExtendedTooltip - 404 + ОжиданиеСопоставленияОбъектовExtendedTooltip + 390 Label true true @@ -2425,14 +1919,246 @@ Left - UsualGroup - - HorizontalIfPossible - Auto - true - true - Auto - Auto + Page + + Vertical + auto + false + + + + ОшибкаСопоставленияОбъектов + 319 + + Рамка1 + 337 + + ГруппировкаСообщения1 + 322 + + ГруппаКартинки1 + 323 + + Декорация3 + 324 + true + true + + true + + + Декорация3ExtendedTooltip + 401 + Label + true + true + + Left + + + + Декорация3КонтекстноеМеню + 325 + true + + true + true + false + + + CommonPicture.Предупреждение32 + + + + true + true + + true + + + <key>ru</key> + <value>Группа картинки</value> + + + ГруппаКартинки1ExtendedTooltip + 400 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ГруппаСообщения1 + 326 + + Декорация4 + 327 + + <key>ru</key> + <value>Не удалось выполнить анализ данных.</value> + + true + true + + true + + + Декорация4ExtendedTooltip + 403 + Label + true + true + + Left + + + + Декорация4КонтекстноеМеню + 328 + true + + Label + 3 + true + false + + Left + Center + + + true + true + + true + + + <key>ru</key> + <value>Группа сообщения</value> + + + ГруппаСообщения1ExtendedTooltip + 402 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Группировка сообщения 1</value> + + + ru + Группировка сообщения + + + ГруппировкаСообщения1ExtendedTooltip + 399 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + NormalSeparation + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Рамка</value> + + true + true + true + + Рамка1ExtendedTooltip + 398 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + NormalSeparation + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Ошибка сопоставления объектов</value> + + true + + ОшибкаСопоставленияОбъектовExtendedTooltip + 397 + Label + true + true + + Left + + + Page + + Vertical + auto + false true @@ -2442,11 +2168,225 @@ <key>ru</key> - <value>Страница сопоставления</value> + <value>Панель основная</value> + + true + + ПанельОсновнаяExtendedTooltip + 361 + Label + true + true + + Left + + + Pages + + Auto + + + + ИнформацияДайджестаСопоставления + 272 + + КартинкаИнформацияОНаличииНесопоставленныхОбъектов + 304 + + <key>ru</key> + <value>Картинка информация о наличии несопоставленных объектов</value> + + true + true + + true + + + КартинкаИнформацияОНаличииНесопоставленныхОбъектовExtendedTooltip + 405 + Label + true + true + + Left + + + + КартинкаИнформацияОНаличииНесопоставленныхОбъектовКонтекстноеМеню + 305 + true + + true + true + false + + + CommonPicture.Информация + + + + + КоличествоОбъектовСопоставленных + 316 + true + true + + true + + + КоличествоОбъектовСопоставленных + + + КоличествоОбъектовСопоставленныхExtendedTooltip + 406 + Label + true + true + + Left + + + + КоличествоОбъектовСопоставленныхКонтекстноеМеню + 317 + true + + LabelField + true + Enter + true + Left + true + + 6 + true + true + + ru + ЧН=0 + + + + + НадписьШт + 300 + + <key>ru</key> + <value>шт.</value> + + true + true + + true + + + НадписьШтExtendedTooltip + 407 + Label + true + true + + Left + + + + НадписьШтКонтекстноеМеню + 301 + true + + Label + true + + Left + + + + КоличествоОбъектовНесопоставленных + 277 + true + true + + true + + + КоличествоОбъектовНесопоставленных + + + КоличествоОбъектовНесопоставленныхExtendedTooltip + 408 + Label + true + true + + Left + + + + КоличествоОбъектовНесопоставленныхКонтекстноеМеню + 278 + true + + LabelField + true + Enter + true + Left + true + + 6 + true + true + + ru + ЧН=0 + + + + + НадписьШт1 + 314 + + <key>ru</key> + <value>шт.</value> + + true + true + + true + + + НадписьШт1ExtendedTooltip + 409 + Label + true + true + + Left + + + + НадписьШт1КонтекстноеМеню + 315 + true + + Label + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Дайджест сопоставления</value> - СтраницаСопоставленияExtendedTooltip - 338 + ИнформацияДайджестаСопоставленияExtendedTooltip + 404 Label true true @@ -2456,7 +2396,7 @@ UsualGroup - Vertical + HorizontalIfPossible Auto true true diff --git a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/Форма/Module.bsl index 677813819..a6d1b9de6 100644 --- a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/Форма/Module.bsl @@ -76,26 +76,26 @@ // Заполняем список отборов СписокВыбора = Элементы.ОтборПоСтатусуСопоставления.СписокВыбора;; - НовыйЭлементСписка = СписокВыбора.Добавить("ВсеОбъекты", НСтр("ru='Все данные'")); + НовыйЭлементСписка = СписокВыбора.Добавить("ВсеОбъекты", НСтр("ru = 'Все данные'")); ВариантыОтбораСтатусаСопоставления.Вставить(НовыйЭлементСписка.Значение, Новый ФиксированнаяСтруктура); - НовыйЭлементСписка = СписокВыбора.Добавить("СопоставленныеОбъектыНеутвержденные", НСтр("ru='Изменения'")); + НовыйЭлементСписка = СписокВыбора.Добавить("СопоставленныеОбъектыНеутвержденные", НСтр("ru = 'Изменения'")); ВариантыОтбораСтатусаСопоставления.Вставить(НовыйЭлементСписка.Значение, Новый ФиксированнаяСтруктура("СтатусСопоставления", 3)); - НовыйЭлементСписка = СписокВыбора.Добавить("СопоставленныеОбъекты", НСтр("ru='Сопоставленные данные'")); + НовыйЭлементСписка = СписокВыбора.Добавить("СопоставленныеОбъекты", НСтр("ru = 'Сопоставленные данные'")); ВариантыОтбораСтатусаСопоставления.Вставить(НовыйЭлементСписка.Значение, Новый ФиксированнаяСтруктура("СтатусСопоставленияДополнительный", 0)); - НовыйЭлементСписка = СписокВыбора.Добавить("НесопоставленныеОбъекты", НСтр("ru='Несопоставленные данные'")); + НовыйЭлементСписка = СписокВыбора.Добавить("НесопоставленныеОбъекты", НСтр("ru = 'Несопоставленные данные'")); ВариантыОтбораСтатусаСопоставления.Вставить(НовыйЭлементСписка.Значение, Новый ФиксированнаяСтруктура("СтатусСопоставленияДополнительный", 1)); - НовыйЭлементСписка = СписокВыбора.Добавить("НесопоставленныеОбъектыПриемника", НСтр("ru='Несопоставленные данные этой базы'")); + НовыйЭлементСписка = СписокВыбора.Добавить("НесопоставленныеОбъектыПриемника", НСтр("ru = 'Несопоставленные данные этой базы'")); ВариантыОтбораСтатусаСопоставления.Вставить(НовыйЭлементСписка.Значение, Новый ФиксированнаяСтруктура("СтатусСопоставления", 1)); - НовыйЭлементСписка = СписокВыбора.Добавить("НесопоставленныеОбъектыИсточника", НСтр("ru='Несопоставленные данные второй базы'")); + НовыйЭлементСписка = СписокВыбора.Добавить("НесопоставленныеОбъектыИсточника", НСтр("ru = 'Несопоставленные данные второй базы'")); ВариантыОтбораСтатусаСопоставления.Вставить(НовыйЭлементСписка.Значение, Новый ФиксированнаяСтруктура("СтатусСопоставления", -1)); @@ -1082,14 +1082,14 @@ // Предлагаем установить быстро. Кнопки = Новый СписокЗначений; - Кнопки.Добавить(КодВозвратаДиалога.Да, НСтр("ru='Установить'")); - Кнопки.Добавить(КодВозвратаДиалога.Отмена, НСтр("ru='Отмена'")); + Кнопки.Добавить(КодВозвратаДиалога.Да, НСтр("ru = 'Установить'")); + Кнопки.Добавить(КодВозвратаДиалога.Отмена, НСтр("ru = 'Отмена'")); Оповещение = Новый ОписаниеОповещения("УстановитьСвязьИнтерактивноЗавершение", ЭтотОбъект, Новый Структура); Оповещение.ДополнительныеПараметры.Вставить("Идентификатор1", Идентификатор1); Оповещение.ДополнительныеПараметры.Вставить("Идентификатор2", Идентификатор2); - ТекстВопроса = НСтр("ru='Установить соответствие между выбранными объектами?'"); + ТекстВопроса = НСтр("ru = 'Установить соответствие между выбранными объектами?'"); ПоказатьВопрос(Оповещение, ТекстВопроса, Кнопки,, КодВозвратаДиалога.Да); КонецПроцедуры diff --git a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/ФормаВыбораСвязиСопоставления/Form.form b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/ФормаВыбораСвязиСопоставления/Form.form index b9a3e9e49..227e09e57 100644 --- a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/ФормаВыбораСвязиСопоставления/Form.form +++ b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/ФормаВыбораСвязиСопоставления/Form.form @@ -11,13 +11,6 @@ ru Объект в <Программа 1> - - System.DefaultGUIFont - true - false - false - false - true true @@ -404,13 +397,6 @@ ru Объект в <Программа 2> - - System.DefaultGUIFont - true - false - false - false - ШапкаExtendedTooltip 57 diff --git a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/ФормаВыбораСвязиСопоставления/Module.bsl b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/ФормаВыбораСвязиСопоставления/Module.bsl index 396a0c9d5..2680ccdbb 100644 --- a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/ФормаВыбораСвязиСопоставления/Module.bsl +++ b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/ФормаВыбораСвязиСопоставления/Module.bsl @@ -39,10 +39,10 @@ ОбъектДляСопоставления = Параметры.ОбъектДляСопоставления; Элементы.ОбъектДляСопоставления.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru='Объект в ""%1""'"), Параметры.Программа1); + НСтр("ru = 'Объект в ""%1""'"), Параметры.Программа1); Элементы.Шапка.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru='Объект в ""%1""'"), Параметры.Программа2); + НСтр("ru = 'Объект в ""%1""'"), Параметры.Программа2); // Построим и подготовим на форме таблицу выбора. ПостроитьТаблицуВыбора(Параметры.МаксимальноеКоличествоПользовательскихПолей, Параметры.СписокИспользуемыхПолей, diff --git a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/СопоставлениеОбъектовИнформационныхБаз.mdo b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/СопоставлениеОбъектовИнформационныхБаз.mdo index ca24c93ba..3b4dd83c3 100644 --- a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/СопоставлениеОбъектовИнформационныхБаз.mdo +++ b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/СопоставлениеОбъектовИнформационныхБаз.mdo @@ -209,7 +209,13 @@ Уникальный идентификатор источника - AnyRef + BusinessProcessRef + DocumentRef + ChartOfCalculationTypesRef + TaskRef + ChartOfCharacteristicTypesRef + ChartOfAccountsRef + CatalogRef @@ -303,7 +309,13 @@ Уникальный идентификатор источника - AnyRef + BusinessProcessRef + DocumentRef + ChartOfCalculationTypesRef + TaskRef + ChartOfCharacteristicTypesRef + ChartOfAccountsRef + CatalogRef diff --git a/SSL/src/DataProcessors/ТекущиеДела/Forms/Форма/Form.form b/SSL/src/DataProcessors/ТекущиеДела/Forms/Форма/Form.form index c132fed0f..d54b2f79a 100644 --- a/SSL/src/DataProcessors/ТекущиеДела/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/ТекущиеДела/Forms/Форма/Form.form @@ -484,19 +484,6 @@ true - - ИнтерфейсТакси - 4 - - Boolean - - - true - - - true - - ТолькоОбновлениеДел 6 diff --git a/SSL/src/DataProcessors/ТекущиеДела/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ТекущиеДела/Forms/Форма/Module.bsl index 04739f3ca..bcddbc751 100644 --- a/SSL/src/DataProcessors/ТекущиеДела/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ТекущиеДела/Forms/Форма/Module.bsl @@ -18,8 +18,6 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - ИнтерфейсТакси = (КлиентскоеПриложение.ТекущийВариантИнтерфейса() = ВариантИнтерфейсаКлиентскогоПриложения.Такси); - ДлительнаяОперация = СформироватьСписокТекущихДелВФоне(); ЗагрузитьНастройкиАвтообновления(); @@ -311,14 +309,12 @@ Если ТекущаяГруппа <> ИмяГруппы Тогда ТекущаяГруппа = ИмяГруппы; Группа = Группа(ИмяГруппы, ОбщаяГруппа); - Если ИнтерфейсТакси Тогда - Если ЭтоМобильныйКлиент Тогда - ВариантОтображения = ОтображениеОбычнойГруппы.Нет; - Иначе - ВариантОтображения = ОтображениеОбычнойГруппы.СильноеВыделение; - КонецЕсли; - Группа.Отображение = ВариантОтображения; + Если ЭтоМобильныйКлиент Тогда + ВариантОтображения = ОтображениеОбычнойГруппы.Нет; + Иначе + ВариантОтображения = ОтображениеОбычнойГруппы.СильноеВыделение; КонецЕсли; + Группа.Отображение = ВариантОтображения; Если РазделСвернут = Истина Тогда Группа.Видимость = Ложь; @@ -598,11 +594,7 @@ Элемент.Вид = ВидДекорацииФормы.Надпись; Элемент.ГоризонтальноеПоложение = ГоризонтальноеПоложениеЭлемента.Лево; Элемент.Заголовок = Дело.ПредставлениеРаздела; - Если ИнтерфейсТакси Тогда - Элемент.Шрифт = Новый Шрифт(WindowsШрифты.ШрифтДиалоговИМеню,, 12); - Иначе - Элемент.Шрифт = Новый Шрифт(,, Истина); - КонецЕсли; + Элемент.Шрифт = ШрифтыСтиля.ТекущиеДелаЗаголовокРазделаШрифт; КонецПроцедуры @@ -618,7 +610,7 @@ Возврат; КонецЕсли; ЭлементДелоВладелец.ОтображениеПодсказки = ОтображениеПодсказки.ОтображатьСнизу; - ЭлементДелоВладелец.РасширеннаяПодсказка.Шрифт = Новый Шрифт(, 8); + ЭлементДелоВладелец.РасширеннаяПодсказка.Шрифт = ШрифтыСтиля.ТекущиеДелаЗаголовокДочернегоДела; ЭлементДелоВладелец.РасширеннаяПодсказка.РастягиватьПоГоризонтали = Истина; ЗаголовокПодчиненногоДела = ЗаголовокПодчиненногоДела(ЭлементДелоВладелец.РасширеннаяПодсказка.Заголовок, Дело); diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаEMAIL/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ТранспортСообщенийОбменаEMAIL/Forms/Форма/Module.bsl index 9cf4ad6cb..2141ca4b5 100644 --- a/SSL/src/DataProcessors/ТранспортСообщенийОбменаEMAIL/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаEMAIL/Forms/Форма/Module.bsl @@ -11,7 +11,7 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - ВызватьИсключение НСтр("ru='Обработка не предназначена для непосредственного использования.'"); + ВызватьИсключение НСтр("ru = 'Обработка не предназначена для непосредственного использования.'"); КонецПроцедуры diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаEMAIL/ObjectModule.bsl b/SSL/src/DataProcessors/ТранспортСообщенийОбменаEMAIL/ObjectModule.bsl index e27a8d60a..e1b06423e 100644 --- a/SSL/src/DataProcessors/ТранспортСообщенийОбменаEMAIL/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаEMAIL/ObjectModule.bsl @@ -590,9 +590,9 @@ Функция ОтправитьСообщениеПоЭлектроннойПочте(Тело, ИмяФайлаИсходящегоСообщения, ПутьКФайлу) - Вложения = Новый Соответствие; - Вложения.Вставить(ИмяФайлаИсходящегоСообщения, - Новый ДвоичныеДанные(ПутьКФайлу)); + ОписаниеВложения = Новый Структура; + ОписаниеВложения.Вставить("Представление", ИмяФайлаИсходящегоСообщения); + ОписаниеВложения.Вставить("АдресВоВременномХранилище", ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ПутьКФайлу))); АдресЭлектроннойПочты = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(EMAILУчетнаяЗапись, "АдресЭлектроннойПочты"); @@ -600,10 +600,13 @@ ПараметрыСообщения.Вставить("Кому", АдресЭлектроннойПочты); ПараметрыСообщения.Вставить("Тема", ТемаСообщения); ПараметрыСообщения.Вставить("Тело", Тело); - ПараметрыСообщения.Вставить("Вложения", Вложения); + ПараметрыСообщения.Вставить("Вложения", Новый Массив); + + ПараметрыСообщения.Вложения.Добавить(ОписаниеВложения); Попытка - ОбщийМодульРаботаСПочтовымиСообщениями.ОтправитьПочтовоеСообщение(EMAILУчетнаяЗапись, ПараметрыСообщения); + НовоеПисьмо = ОбщийМодульРаботаСПочтовымиСообщениями.ПодготовитьПисьмо(EMAILУчетнаяЗапись, ПараметрыСообщения); + ОбщийМодульРаботаСПочтовымиСообщениями.ОтправитьПисьмо(EMAILУчетнаяЗапись, НовоеПисьмо); Исключение ТекстОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); ПолучитьСообщениеОбОшибке(102); diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаFILE/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ТранспортСообщенийОбменаFILE/Forms/Форма/Module.bsl index 9cf4ad6cb..2141ca4b5 100644 --- a/SSL/src/DataProcessors/ТранспортСообщенийОбменаFILE/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаFILE/Forms/Форма/Module.bsl @@ -11,7 +11,7 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - ВызватьИсключение НСтр("ru='Обработка не предназначена для непосредственного использования.'"); + ВызватьИсключение НСтр("ru = 'Обработка не предназначена для непосредственного использования.'"); КонецПроцедуры diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаFTP/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ТранспортСообщенийОбменаFTP/Forms/Форма/Module.bsl index 9cf4ad6cb..2141ca4b5 100644 --- a/SSL/src/DataProcessors/ТранспортСообщенийОбменаFTP/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаFTP/Forms/Форма/Module.bsl @@ -11,7 +11,7 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - ВызватьИсключение НСтр("ru='Обработка не предназначена для непосредственного использования.'"); + ВызватьИсключение НСтр("ru = 'Обработка не предназначена для непосредственного использования.'"); КонецПроцедуры diff --git a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ОсновнаяФорма/Form.form b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ОсновнаяФорма/Form.form index 3c6f820e1..f32a3150e 100644 --- a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ОсновнаяФорма/Form.form +++ b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ОсновнаяФорма/Form.form @@ -55,7 +55,7 @@ ru - Автоматическое удаление всех помеченных объектов + Удалить все помеченные объекты Полный @@ -64,7 +64,7 @@ ru - Выборочное удаление объектов + Выбрать объекты для удаления Выборочный @@ -695,7 +695,9 @@ Left - + + Compact + ДеревоПомеченныхНаУдалениеИзменить @@ -1701,15 +1703,6 @@ Style.FieldTextColor - - System.DefaultGUIFont - Arial - 10.0 - false - false - false - false - diff --git a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ОсновнаяФорма/Module.bsl b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ОсновнаяФорма/Module.bsl index d6a7c4d57..bea256854 100644 --- a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ОсновнаяФорма/Module.bsl +++ b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ОсновнаяФорма/Module.bsl @@ -649,7 +649,7 @@ КонецПроцедуры &НаКлиентеНаСервереБезКонтекста -Функция НомерКартинки(СсылкаИлиДанные, СсылочногоТипа, Вид, ПометкаУдаления) +Функция НомерКартинки(СсылкаИлиДанные, СсылочногоТипа, Вид, Статус) Если СсылочногоТипа Тогда Если Вид = "СПРАВОЧНИК" Или Вид = "ПЛАНВИДОВХАРАКТЕРИСТИК" Тогда @@ -669,8 +669,10 @@ Иначе НомерКартинки = -2; КонецЕсли; - Если ПометкаУдаления Тогда + Если Статус = "Удален" Тогда НомерКартинки = НомерКартинки + 1; + ИначеЕсли Статус = "Проведен" Тогда + НомерКартинки = НомерКартинки + 2; КонецЕсли; Иначе Если Вид = "КОНСТАНТА" Тогда @@ -1045,13 +1047,8 @@ СтрокаНеУдаленного.УдаляемыйСсылка = Причина.УдаляемыйСсылка; СтрокаНеУдаленного.Представление = Строка(Причина.УдаляемыйСсылка); СтрокаНеУдаленного.ПометкаУдаления = Истина; - - СтрокаНеУдаленного.НомерКартинки = НомерКартинки( - СтрокаНеУдаленного.УдаляемыйСсылка, - Истина, - УдаляемыйИнформация.Вид, - СтрокаНеУдаленного.ПометкаУдаления); - + СтрокаНеУдаленного.НомерКартинки = НомерКартинки(СтрокаНеУдаленного.УдаляемыйСсылка, + Истина, УдаляемыйИнформация.Вид, "Удален"); СтрокиНеУдаленных.Вставить(Причина.УдаляемыйСсылка, СтрокаНеУдаленного); КонецЕсли; @@ -1060,7 +1057,7 @@ СтрокаПрепятствующегоУдалению = ТаблицаСвязиНеУдаленных.Добавить(); СтрокаПрепятствующегоУдалению.УдаляемыйСсылка = Причина.УдаляемыйСсылка; СтрокаПрепятствующегоУдалению.ОбнаруженныйСсылка = Причина.ОбнаруженныйСсылка; - СтрокаПрепятствующегоУдалению.ПометкаУдаления = Причина.ОбнаруженныйПометкаУдаления; + СтрокаПрепятствующегоУдалению.ПометкаУдаления = (Причина.ОбнаруженныйСтатус = "Удален"); СтрокаПрепятствующегоУдалению.ЭтоОшибка = (Причина.ОбнаруженныйТип = Тип("Строка")); Если СтрокаПрепятствующегоУдалению.ЭтоОшибка Тогда @@ -1092,11 +1089,8 @@ БыстрыйПоиск.ПолныеИменаОбъектовМетаданных.Вставить(Причина.ОбнаруженныйТип, ОбнаруженныйИнформация.ПолноеИмя); КонецЕсли; - СтрокаПрепятствующегоУдалению.НомерКартинки = НомерКартинки( - СтрокаПрепятствующегоУдалению.ОбнаруженныйСсылка, - СтрокаПрепятствующегоУдалению.СсылочногоТипа, - ОбнаруженныйИнформация.Вид, - СтрокаПрепятствующегоУдалению.ПометкаУдаления); + СтрокаПрепятствующегоУдалению.НомерКартинки = НомерКартинки(СтрокаПрепятствующегоУдалению.ОбнаруженныйСсылка, + СтрокаПрепятствующегоУдалению.СсылочногоТипа, ОбнаруженныйИнформация.Вид, Причина.ОбнаруженныйСтатус); КонецЕсли; КонецЦикла; diff --git a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Help/ru.html b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Help/ru.html index 46aa9bfbe..307c5c0b9 100644 --- a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Help/ru.html +++ b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Help/ru.html @@ -4,34 +4,53 @@

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

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

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

      -

      Автоматическое удаление всех помеченных объектов 

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

      Выборочное удаление объектов

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

        Удаление всех помеченных объектов 

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

        Выборочное удаление объектов

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

        Действия при невозможности удаления объектов

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

    Действия при невозможности удаления объектов

    Список неудаленных объектов состоит из двух частей: слева перечень объектов, справа список Места использования. 

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

    Ускорение удаления помеченных объектов

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

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

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

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

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

    Автоматическое удаление помеченных объектов в приложении в Интернете (в модели сервиса)

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

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

    См. также:

    \ No newline at end of file diff --git a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/ManagerModule.bsl b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/ManagerModule.bsl index 0d79e51d1..179e07a2f 100644 --- a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/ManagerModule.bsl +++ b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/ManagerModule.bsl @@ -196,12 +196,15 @@ Если Не ПодчиненныйОбъект.ПометкаУдаления Тогда ДочерниеИПодчиненныеОбъектыПомечены = Ложь; Прервать; - КонецЕсли; - КонецЦикла; + КонецЕсли; + КонецЦикла; Если ДочерниеИПодчиненныеОбъектыПомечены Тогда Объект.Удалить(); - КонецЕсли; + КонецЕсли; + + ПрепятствующиеУдалению = НайтиПрепятствующиеУдалению(Ссылка, ПараметрыВыполнения); + ИсключениеОбъектовДопускающихУдаление(ПрепятствующиеУдалению, ОбъектыДопускающиеУдаление()); Результат.ПрепятствующиеУдалению = НайтиПрепятствующиеУдалению(Ссылка, ПараметрыВыполнения); Результат.Количество = Результат.Количество + Результат.ПрепятствующиеУдалению.Количество(); @@ -292,11 +295,7 @@ Процедура УдалитьОставшиесяОбъектыВОднойТранзакции(ПараметрыВыполнения) // 0. Расчет объектов, допускающих удаления. - ДопускающиеУдаление = Новый Массив; - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда - МодульУправлениеДоступомСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступомСлужебный"); - МодульУправлениеДоступомСлужебный.ПриДобавленииИсключенийПоискаСсылокДопускающихУдаление(ДопускающиеУдаление); - КонецЕсли; + ДопускающиеУдаление = ОбъектыДопускающиеУдаление(); // 1. Объекты, которые невозможно удалить, получаются путем определения неразрешимых связей. ОбъектыКоторыеНевозможноУдалить = Новый Массив; @@ -389,15 +388,7 @@ Если УдаляемыеОбъекты.Количество() > 0 Тогда ПрепятствующиеУдалению = НайтиПоСсылкам(УдаляемыеОбъекты); - - // Исключение объектов допускающих удаление. - Индекс = ПрепятствующиеУдалению.Количество() - 1; - Пока Индекс >= 0 Цикл - Если ДопускающиеУдаление.Найти(ПрепятствующиеУдалению[Индекс].Метаданные) <> Неопределено Тогда - ПрепятствующиеУдалению.Удалить(Индекс); - КонецЕсли; - Индекс = Индекс - 1; - КонецЦикла; + ИсключениеОбъектовДопускающихУдаление(ПрепятствующиеУдалению, ДопускающиеУдаление); // Исключение объектов, ранее удаленных в этой же транзакции. ИмяКолонки = ПрепятствующиеУдалению.Колонки[1].Имя; @@ -836,7 +827,7 @@ ПрепятствующиеУдалению.Колонки.Добавить("УдаляемыйТип", Новый ОписаниеТипов("Тип")); ПрепятствующиеУдалению.Колонки.Добавить("ОбнаруженныйСсылка"); ПрепятствующиеУдалению.Колонки.Добавить("ОбнаруженныйТип", Новый ОписаниеТипов("Тип")); - ПрепятствующиеУдалению.Колонки.Добавить("ОбнаруженныйПометкаУдаления", Новый ОписаниеТипов("Булево")); + ПрепятствующиеУдалению.Колонки.Добавить("ОбнаруженныйСтатус", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(10))); ПрепятствующиеУдалению.Колонки.Добавить("Подробно", Новый ОписаниеТипов("Строка")); ПрепятствующиеУдалению.Индексы.Добавить("УдаляемыйСсылка"); @@ -913,22 +904,8 @@ Информация.ПолноеИмя = ВРег(ОбъектМетаданных.ПолноеИмя()); // Представления: элемента и списка. - СтандартныеСвойства = Новый Структура("ПредставлениеОбъекта, РасширенноеПредставлениеОбъекта, ПредставлениеСписка, РасширенноеПредставлениеСписка"); - ЗаполнитьЗначенияСвойств(СтандартныеСвойства, ОбъектМетаданных); - Если ЗначениеЗаполнено(СтандартныеСвойства.ПредставлениеОбъекта) Тогда - Информация.ПредставлениеЭлемента = СтандартныеСвойства.ПредставлениеОбъекта; - ИначеЕсли ЗначениеЗаполнено(СтандартныеСвойства.РасширенноеПредставлениеОбъекта) Тогда - Информация.ПредставлениеЭлемента = СтандартныеСвойства.РасширенноеПредставлениеОбъекта; - Иначе - Информация.ПредставлениеЭлемента = ОбъектМетаданных.Представление(); - КонецЕсли; - Если ЗначениеЗаполнено(СтандартныеСвойства.ПредставлениеСписка) Тогда - Информация.ПредставлениеСписка = СтандартныеСвойства.ПредставлениеСписка; - ИначеЕсли ЗначениеЗаполнено(СтандартныеСвойства.РасширенноеПредставлениеСписка) Тогда - Информация.ПредставлениеСписка = СтандартныеСвойства.РасширенноеПредставлениеСписка; - Иначе - Информация.ПредставлениеСписка = ОбъектМетаданных.Представление(); - КонецЕсли; + Информация.ПредставлениеЭлемента = ОбщегоНазначения.ПредставлениеОбъекта(ОбъектМетаданных); + Информация.ПредставлениеСписка = ОбщегоНазначения.ПредставлениеСписка(ОбъектМетаданных); // Вид и его свойства. Информация.Вид = Лев(Информация.ПолноеИмя, СтрНайти(Информация.ПолноеИмя, ".")-1); @@ -1088,12 +1065,36 @@ // Регистрация информации об объектах метаданных (если требуется). ОбнаруженныйИнформация = СформироватьИнформациюОТипах(ПараметрыВыполнения, Причина.ОбнаруженныйТип); - // Заполнение подчиненных полей. - Если ОбнаруженныйИнформация.Ссылочный Тогда - Причина.ОбнаруженныйПометкаУдаления = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Причина.ОбнаруженныйСсылка, "ПометкаУдаления"); - Иначе - Причина.ОбнаруженныйПометкаУдаления = Ложь; + Если ОбнаруженныйИнформация.Вид = "ДОКУМЕНТ" Тогда + Значения = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Причина.ОбнаруженныйСсылка, "ПометкаУдаления, Проведен"); + Причина.ОбнаруженныйСтатус = ?(Значения.ПометкаУдаления, "Удален", ?(Значения.Проведен, "Проведен", "")); + ИначеЕсли ОбнаруженныйИнформация.Ссылочный Тогда + Причина.ОбнаруженныйСтатус = ?(ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Причина.ОбнаруженныйСсылка, "ПометкаУдаления"), "Удален", ""); + КонецЕсли; +КонецПроцедуры + +Функция ОбъектыДопускающиеУдаление() + + Результат = Новый Массив; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступомСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступомСлужебный"); + МодульУправлениеДоступомСлужебный.ПриДобавленииИсключенийПоискаСсылокДопускающихУдаление(Результат); КонецЕсли; + + Возврат Результат; + +КонецФункции + +Процедура ИсключениеОбъектовДопускающихУдаление(ПрепятствующиеУдалению, ДопускающиеУдаление) + + Индекс = ПрепятствующиеУдалению.Количество() - 1; + Пока Индекс >= 0 Цикл + Если ДопускающиеУдаление.Найти(ПрепятствующиеУдалению[Индекс].Метаданные) <> Неопределено Тогда + ПрепятствующиеУдалению.Удалить(Индекс); + КонецЕсли; + Индекс = Индекс - 1; + КонецЦикла; + КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// diff --git a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФорма/Module.bsl b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФорма/Module.bsl index faec068c8..516a73e7a 100644 --- a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФорма/Module.bsl +++ b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФорма/Module.bsl @@ -485,7 +485,7 @@ Если ЭтоКлиент Тогда ОписаниеОповещения = Новый ОписаниеОповещения("ПолучитьИнформациюОФайлеОбменаЗавершение", ЭтотОбъект); - НачатьПомещениеФайла(ОписаниеОповещения, АдресФайла,НСтр("ru = 'Файл обмена'"),, УникальныйИдентификатор); + НачатьПомещениеФайла(ОписаниеОповещения, АдресФайла, , , УникальныйИдентификатор); Иначе @@ -653,7 +653,7 @@ Если ЭтоКлиент Тогда ОписаниеОповещения = Новый ОписаниеОповещения("НастройкаОтладкиЗагрузкиЗавершение", ЭтотОбъект); - НачатьПомещениеФайла(ОписаниеОповещения, АдресФайлаОбменаВХранилище,НСтр("ru = 'Файл обмена'"),, УникальныйИдентификатор); + НачатьПомещениеФайла(ОписаниеОповещения, АдресФайлаОбменаВХранилище, , , УникальныйИдентификатор); Иначе @@ -707,7 +707,7 @@ Если ЭтоКлиент Тогда ОписаниеОповещения = Новый ОписаниеОповещения("ПрочитатьПравилаОбменаЗавершение", ЭтотОбъект); - НачатьПомещениеФайла(ОписаниеОповещения, АдресФайлаПравилВХранилище,НСтр("ru = 'Файл правил обмена'"),, УникальныйИдентификатор); + НачатьПомещениеФайла(ОписаниеОповещения, АдресФайлаПравилВХранилище, , , УникальныйИдентификатор); Иначе @@ -763,16 +763,11 @@ ДополнительныеПараметры.Вставить("ИмяФайла", ИмяФайла); ДополнительныеПараметры.Вставить("ОписаниеОповещения", Новый ОписаниеОповещения); - Файл = Новый Файл(); - Файл.НачатьИнициализацию(Новый ОписаниеОповещения("ПроверитьСуществованиеФайла", ЭтотОбъект, ДополнительныеПараметры), ИмяФайла); + Файл = Новый Файл(ИмяФайла); -КонецПроцедуры - -// Продолжение процедуры (см. выше). -&НаКлиенте -Процедура ПроверитьСуществованиеФайла(Файл, ДополнительныеПараметры) Экспорт ОписаниеОповещения = Новый ОписаниеОповещения("ПослеОпределенияСуществованияФайла", ЭтотОбъект, ДополнительныеПараметры); Файл.НачатьПроверкуСуществования(ОписаниеОповещения); + КонецПроцедуры // Продолжение процедуры (см. выше). @@ -1348,7 +1343,7 @@ Если ЭтоКлиент Тогда ОписаниеОповещения = Новый ОписаниеОповещения("ВыполнитьЗагрузкуИзФормыЗавершение", ЭтотОбъект); - НачатьПомещениеФайла(ОписаниеОповещения, АдресФайла,НСтр("ru = 'Файл обмена'"),, УникальныйИдентификатор); + НачатьПомещениеФайла(ОписаниеОповещения, АдресФайла, , , УникальныйИдентификатор); Иначе @@ -1890,7 +1885,7 @@ // Возвращает Истина, если клиентское приложение запущено под управлением ОС Windows. // // Возвращаемое значение: -// Булево. Если нет клиентского приложения, возвращается Ложь. +// Булево - Если нет клиентского приложения, возвращается Ложь. // &НаКлиенте Функция ЭтоWindowsКлиент() @@ -1949,8 +1944,12 @@ АдресФайла = ""; ОписаниеОповещения = Новый ОписаниеОповещения("ПоместитьФайлПравилЗагрузкиВХранилищеЗавершить", ЭтотОбъект); - НачатьПомещениеФайла(ОписаниеОповещения, АдресФайла, - ?(ЧерезХранилище, НСтр("ru = 'Файл обмена'"), ИмяФайлаПравилЗагрузки), ЧерезХранилище, УникальныйИдентификатор); + + Если ЧерезХранилище Тогда + НачатьПомещениеФайла(ОписаниеОповещения, АдресФайла, , , УникальныйИдентификатор); + Иначе + НачатьПомещениеФайла(ОписаниеОповещения, АдресФайла, ИмяФайлаПравилЗагрузки, Ложь, УникальныйИдентификатор); + КонецЕсли; КонецПроцедуры diff --git a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/ObjectModule.bsl b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/ObjectModule.bsl index 489c41a00..266cdd897 100644 --- a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/ObjectModule.bsl +++ b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/ObjectModule.bsl @@ -491,13 +491,13 @@ // Определяет заполнено ли переданное значение. // -// Параметры: -// Значение - Произвольный - СправочникСсылка, ДокументСсылка, Строка или любой другой тип. +// Параметры: +// Значение - Произвольный - СправочникСсылка, ДокументСсылка, Строка или любой другой тип. // Значение, заполнение которого надо проверить. // ЭтоNULL - Булево - в эту переменную возвращается Истина, если переданное значение NULL. // // Возвращаемое значение: -// Истина - значение не заполнено, ложь - иначе. +// Булево - Истина - значение не заполнено, ложь - иначе. // Функция одПустое(Значение, ЭтоNULL=Ложь) Экспорт @@ -783,7 +783,7 @@ Менеджер = Менеджеры[ТипЗначения]; Если Менеджер = Неопределено Тогда - Текст= НСтр("ru='Неизвестный тип:'") + Строка(ТипЗнч(ТипЗначения)); + Текст= НСтр("ru = 'Неизвестный тип:'") + Строка(ТипЗнч(ТипЗначения)); СообщитьПользователю(Текст); Иначе @@ -944,10 +944,10 @@ // Осуществляет запись элемента и его значения в указанный объект. // // Параметры: -// Объект - XMLЗапись - объект типа XMLЗапись. +// Объект - ЗаписьXML - объект типа XMLЗапись. // Имя - Строка - Имя элемента. // Значение - Произвольный - Значение элемента. -// +// Процедура одЗаписатьЭлемент(Объект, Имя, Значение="") Экспорт Объект.ЗаписатьНачалоЭлемента(Имя); @@ -1012,14 +1012,14 @@ // к указанному примитивному типу. // // Параметры: -// Объект - XMLЧтение - объект типа XMLЧтение, спозиционированный на начале элемента, +// Объект - ЧтениеXML - объект типа XMLЧтение, спозиционированный на начале элемента, // атрибут которого требуется получить. // Тип - Тип - Тип атрибута. // Имя - Строка - Имя атрибута. // // Возвращаемое значение: // Произвольный - Значение атрибута полученное по имени и приведенное к указанному типу. -// +// Функция одАтрибут(Объект, Тип, Имя) Экспорт СтрЗначение = Объект.ПолучитьАтрибут(Имя); @@ -1040,9 +1040,9 @@ // Пропускает узлы xml до конца указанного элемента (по умолчанию текущего). // // Параметры: -// Объект - XMLЧтение - объект типа XMLЧтение. +// Объект - ЧтениеXML - объект типа XMLЧтение. // Имя - Строка - имя узла, до конца которого пропускаем элементы. -// +// Процедура одПропустить(Объект, Имя = "") Экспорт КоличествоВложений = 0; // Количество одноименных вложений. @@ -1086,7 +1086,7 @@ // Читает текст элемента и приводит значение к указанному типу. // // Параметры: -// Объект - XMLЧтение - объект типа XMLЧтение, из которого осуществляется чтение. +// Объект - ЧтениеXML - объект типа XMLЧтение, из которого осуществляется чтение. // Тип - Тип - тип получаемого значения. // ИскатьПоСвойству - Строка - для ссылочных типов может быть указано свойство, по которому. // следует искать объект: "Код", "Наименование", <ИмяРеквизита>, "Имя" (предопределенного значения). @@ -1197,21 +1197,47 @@ // Функция ПолучитьСтруктуруЗаписиПротокола(КодСообщения = "", СтрокаОшибки = "") Экспорт - СтруктураОшибки = Новый Структура("ИмяПКО,ИмяПОД,Нпп,Гнпп,Источник,ТипОбъекта,Свойство,Значение,ТипЗначения,ПКО,ПКС,ПКГС,ПВД,ПОД,Объект,СвойствоПриемника,КонвертируемоеЗначение,Обработчик,ОписаниеОшибки,ПозицияМодуля,Текст,КодСообщения,УзелПланаОбмена"); + СтруктураОшибки = Новый Структура( + "ИмяПКО, + |ИмяПОД, + |Нпп, + |Гнпп, + |Источник, + |ТипОбъекта, + |Свойство, + |Значение, + |ТипЗначения, + |ПКО, + |ПКС, + |ПКГС, + |ПВД, + |ПОД, + |Объект, + |СвойствоПриемника, + |КонвертируемоеЗначение, + |Обработчик, + |ОписаниеОшибки, + |ПозицияМодуля, + |Текст, + |КодСообщения, + |УзелПланаОбмена"); - СтрокаМодуля = ОтделитьРазделителем(СтрокаОшибки, "{"); - ОписаниеОшибки = ОтделитьРазделителем(СтрокаМодуля, "}: "); + СтрокаМодуля = ОтделитьРазделителем(СтрокаОшибки, "{"); + Если ПустаяСтрока(СтрокаОшибки) Тогда + ОписаниеОшибки = СокрЛП(ОтделитьРазделителем(СтрокаМодуля, "}:")); + Иначе + ОписаниеОшибки = СтрокаОшибки; + СтрокаМодуля = "{" + СтрокаМодуля; + КонецЕсли; Если ОписаниеОшибки <> "" Тогда - - СтруктураОшибки.ОписаниеОшибки = ОписаниеОшибки; - СтруктураОшибки.ПозицияМодуля = СтрокаМодуля; - + СтруктураОшибки.ОписаниеОшибки = ОписаниеОшибки; + СтруктураОшибки.ПозицияМодуля = СтрокаМодуля; КонецЕсли; Если СтруктураОшибки.КодСообщения <> "" Тогда - СтруктураОшибки.КодСообщения = КодСообщения; + СтруктураОшибки.КодСообщения = КодСообщения; КонецЕсли; @@ -3216,9 +3242,9 @@ // Осуществляет загрузку правила конвертации группы свойств. // // Параметры: -// ПравилаОбмена - Объект типа XMLЧтение. +// ПравилаОбмена - ЧтениеXML - Объект типа ЧтениеXML. // ТаблицаСвойств - таблица значений, содержащая ПКС. -// +// Процедура ЗагрузитьПКГС(ПравилаОбмена, ТаблицаСвойств) Если одАтрибут(ПравилаОбмена, одТипБулево, "Отключить") Тогда @@ -3331,10 +3357,10 @@ // Осуществляет загрузку правила конвертации свойств. // // Параметры: -// ПравилаОбмена - Объект типа XMLЧтение. +// ПравилаОбмена - ЧтениеXML - Объект типа ЧтениеXML. // ТаблицаСвойств - таблица значений, содержащая ПКС. // ТаблицаПоиска - таблица значений, содержащая ПКС (синхронизирующих). -// +// Процедура ЗагрузитьПКС(ПравилаОбмена, ТаблицаСвойств, ТаблицаПоиска = Неопределено, СтрокаПолейПоиска = "") Если одАтрибут(ПравилаОбмена, одТипБулево, "Отключить") Тогда @@ -3444,10 +3470,10 @@ // Осуществляет загрузку правил конвертации свойств. // // Параметры: -// ПравилаОбмена - Объект типа XMLЧтение. +// ПравилаОбмена - ЧтениеXML - Объект типа ЧтениеXML. // ТаблицаСвойств - таблица значений, содержащая ПКС. // ТаблицаПоиска - таблица значений, содержащая ПКС (синхронизирующих). -// +// Процедура ЗагрузитьСвойства(ПравилаОбмена, ТаблицаСвойств, ТаблицаПоиска) Пока ПравилаОбмена.Прочитать() Цикл @@ -3472,11 +3498,11 @@ // Осуществляет загрузку правила конвертации значений. // // Параметры: -// ПравилаОбмена - Объект типа XMLЧтение. +// ПравилаОбмена - ЧтениеXML - Объект типа ЧтениеXML. // Значения - соответствие значений объекта источника - строковым // представлениям объекта приемника. -// ТипИсточника - значение типа Тип - тип объекта источника. -// +// ТипИсточника - значение Тип - типа Тип - тип объекта источника. +// Процедура ЗагрузитьПКЗ(ПравилаОбмена, Значения, ТипИсточника) Источник = ""; @@ -3504,11 +3530,11 @@ // Осуществляет загрузку правил конвертации значений. // // Параметры: -// ПравилаОбмена - Объект типа XMLЧтение. +// ПравилаОбмена - ЧтениеXML - Объект типа ЧтениеXML. // Значения - соответствие значений объекта источника - строковым // представлениям объекта приемника. -// ТипИсточника - значение типа Тип - тип объекта источника. -// +// ТипИсточника - значение Тип - типа Тип - тип объекта источника. +// Процедура ЗагрузитьЗначения(ПравилаОбмена, Значения, ТипИсточника); Пока ПравилаОбмена.Прочитать() Цикл @@ -3541,10 +3567,10 @@ // Осуществляет загрузку правила конвертации объектов. // // Параметры: -// ПравилаОбмена - Объект типа XMLЧтение. -// ЗаписьXML - Объект типа XMLЗапись - правила, сохраняемые в файл обмена и +// ПравилаОбмена - ЧтениеXML - Объект типа ЧтениеXML. +// ЗаписьXML - ЗаписьXML - Объект типа ЗаписьXML - правила, сохраняемые в файл обмена и // используемые при загрузке данных. -// +// Процедура ЗагрузитьПравилоКонвертации(ПравилаОбмена, ЗаписьXML) ЗаписьXML.ЗаписатьНачалоЭлемента("Правило"); @@ -3844,10 +3870,10 @@ // Осуществляет загрузку правил конвертации объектов. // // Параметры: -// ПравилаОбмена - Объект типа XMLЧтение. -// ЗаписьXML - Объект типа XMLЗапись - правила, сохраняемые в файл обмена и +// ПравилаОбмена - ЧтениеXML - Объект типа ЧтениеXML. +// ЗаписьXML - ЗаписьXML - Объект типа ЗаписьXML - правила, сохраняемые в файл обмена и // используемые при загрузке данных. -// +// Процедура ЗагрузитьПравилаКонвертации(ПравилаОбмена, ЗаписьXML) ТаблицаПравилКонвертации.Очистить(); @@ -3990,10 +4016,10 @@ // Осуществляет загрузку правил очистки данных. // // Параметры: -// ПравилаОбмена - Объект типа XMLЧтение. -// ЗаписьXML - Объект типа XMLЗапись - правила, сохраняемые в файл обмена и +// ПравилаОбмена - ЧтениеXML - Объект типа ЧтениеXML. +// ЗаписьXML - ЗаписьXML - Объект типа ЗаписьXML - правила, сохраняемые в файл обмена и // используемые при загрузке данных. -// +// Процедура ЗагрузитьПравилаОчистки(ПравилаОбмена, ЗаписьXML) ТаблицаПравилОчистки.Строки.Очистить(); @@ -4046,10 +4072,10 @@ // Осуществляет загрузку алгоритма в соответствии с форматом правил обмена. // // Параметры: -// ПравилаОбмена - Объект типа XMLЧтение. -// ЗаписьXML - Объект типа XMLЗапись - правила, сохраняемые в файл обмена и +// ПравилаОбмена - ЧтениеXML - Объект типа ЧтениеXML. +// ЗаписьXML - ЗаписьXML - Объект типа ЗаписьXML - правила, сохраняемые в файл обмена и // используемые при загрузке данных. -// +// Процедура ЗагрузитьАлгоритм(ПравилаОбмена, ЗаписьXML) ИспользуетсяПриЗагрузке = одАтрибут(ПравилаОбмена, одТипБулево, "ИспользуетсяПриЗагрузке"); @@ -4092,10 +4118,10 @@ // Осуществляет загрузку алгоритмов в соответствии с форматом правил обмена. // // Параметры: -// ПравилаОбмена - Объект типа XMLЧтение. -// ЗаписьXML - Объект типа XMLЗапись - правила, сохраняемые в файл обмена и +// ПравилаОбмена - ЧтениеXML - Объект типа ЧтениеXML. +// ЗаписьXML - ЗаписьXML - Объект типа ЗаписьXML - правила, сохраняемые в файл обмена и // используемые при загрузке данных. -// +// Процедура ЗагрузитьАлгоритмы(ПравилаОбмена, ЗаписьXML) Алгоритмы.Очистить(); @@ -4119,10 +4145,10 @@ // Осуществляет загрузку запроса в соответствии с форматом правил обмена. // // Параметры: -// ПравилаОбмена - Объект типа XMLЧтение. -// ЗаписьXML - Объект типа XMLЗапись - правила, сохраняемые в файл обмена и +// ПравилаОбмена - ЧтениеXML - Объект типа ЧтениеXML. +// ЗаписьXML - ЗаписьXML - Объект типа ЗаписьXML - правила, сохраняемые в файл обмена и // используемые при загрузке данных. -// +// Процедура ЗагрузитьЗапрос(ПравилаОбмена, ЗаписьXML) ИспользуетсяПриЗагрузке = одАтрибут(ПравилаОбмена, одТипБулево, "ИспользуетсяПриЗагрузке"); @@ -4165,10 +4191,10 @@ // Осуществляет загрузку запросов в соответствии с форматом правил обмена. // // Параметры: -// ПравилаОбмена - Объект типа XMLЧтение. -// ЗаписьXML - Объект типа XMLЗапись - правила, сохраняемые в файл обмена и +// ПравилаОбмена - ЧтениеXML - Объект типа ЧтениеXML. +// ЗаписьXML - ЗаписьXML - Объект типа ЗаписьXML - правила, сохраняемые в файл обмена и // используемые при загрузке данных. -// +// Процедура ЗагрузитьЗапросы(ПравилаОбмена, ЗаписьXML) Запросы.Очистить(); @@ -4194,8 +4220,8 @@ // Осуществляет загрузку параметров в соответствии с форматом правил обмена. // // Параметры: -// ПравилаОбмена - Объект типа XMLЧтение. -// +// ПравилаОбмена - ЧтениеXML - Объект типа ЧтениеXML. +// Процедура ЗагрузитьПараметры(ПравилаОбмена, ЗаписьXML) Параметры.Очистить(); @@ -4301,10 +4327,10 @@ // Осуществляет загрузку обработки в соответствии с форматом правил обмена. // // Параметры: -// ПравилаОбмена - Объект типа XMLЧтение. -// ЗаписьXML - Объект типа XMLЗапись - правила, сохраняемые в файл обмена и +// ПравилаОбмена - ЧтениеXML - Объект типа ЧтениеXML. +// ЗаписьXML - ЗаписьXML - Объект типа ЗаписьXML - правила, сохраняемые в файл обмена и // используемые при загрузке данных. -// +// Процедура ЗагрузитьОбработку(ПравилаОбмена, ЗаписьXML) Имя = одАтрибут(ПравилаОбмена, одТипСтрока, "Имя"); @@ -4350,10 +4376,10 @@ // Осуществляет загрузку внешних обработок в соответствии с форматом правил обмена. // // Параметры: -// ПравилаОбмена - Объект типа XMLЧтение. -// ЗаписьXML - Объект типа XMLЗапись - правила, сохраняемые в файл обмена и +// ПравилаОбмена - ЧтениеXML - Объект типа ЧтениеXML. +// ЗаписьXML - ЗаписьXML - Объект типа ЗаписьXML - правила, сохраняемые в файл обмена и // используемые при загрузке данных. -// +// Процедура ЗагрузитьОбработки(ПравилаОбмена, ЗаписьXML) ДопОбработки.Очистить(); @@ -4383,9 +4409,9 @@ // Осуществляет загрузку группы правил выгрузки данных в соответствии с форматом правил обмена. // // Параметры: -// ПравилаОбмена - Объект типа XMLЧтение. +// ПравилаОбмена - ЧтениеXML - Объект типа ЧтениеXML. // НоваяСтрока - строка дерева значений, описывающая группу правил выгрузки данных. -// +// Процедура ЗагрузитьГруппуПВД(ПравилаОбмена, НоваяСтрока) НоваяСтрока.ЭтоГруппа = Истина; @@ -4427,9 +4453,9 @@ // Осуществляет загрузку правила выгрузки данных в соответствии с форматом правил обмена. // // Параметры: -// ПравилаОбмена - Объект типа XMLЧтение. +// ПравилаОбмена - ЧтениеXML - Объект типа ЧтениеXML. // НоваяСтрока - строка дерева значений, описывающая правило выгрузки данных. -// +// Процедура ЗагрузитьПВД(ПравилаОбмена, НоваяСтрока) НоваяСтрока.Включить = Число(Не одАтрибут(ПравилаОбмена, одТипБулево, "Отключить")); @@ -4500,8 +4526,8 @@ // Осуществляет загрузку правил выгрузки данных в соответствии с форматом правил обмена. // // Параметры: -// ПравилаОбмена - Объект типа XMLЧтение. -// +// ПравилаОбмена - ЧтениеXML - Объект типа ЧтениеXML. +// Процедура ЗагрузитьПравилаВыгрузки(ПравилаОбмена) ТаблицаПравилВыгрузки.Строки.Очистить(); @@ -4697,13 +4723,13 @@ КонецПроцедуры // Выгружает глобальные обработчики конвертации в текстовый файл. -// При выгрузке обработчиков из файла с данными содержимое обработчика "Конвертация_ПослеЗагрузкиПараметров" +// При выгрузке обработчиков из файла с данными содержимое обработчика "Конвертация_ПослеЗагрузкиПараметров" // не выгружается, т.к. код обработчика находится не в узле правил обмена, а в отдельном узле. // При выгрузке обработчиков из файла правил этот алгоритм выгружается как и другие. // // Параметры: -// Результат - Объект типа ЗаписьТекста - для вывода обработчиков в текстовый файл. -// +// Результат - ЗаписьТекста - Объект типа ЗаписьТекста - для вывода обработчиков в текстовый файл. +// Процедура ВыгрузитьОбработчикиКонвертации(Результат) ДобавитьВПотокКомментарий(Результат, "Конвертация"); @@ -4719,9 +4745,10 @@ // Выгружает обработчики правил выгрузки данных в текстовый файл. // // Параметры: -// Результат - Объект типа ЗаписьТекста - для вывода обработчиков в текстовый файл. -// СтрокиДерева - Объект типа КоллекцияСтрокДереваЗначений - содержит ПВД данного уровня дерева значений. -// +// Результат - ЗаписьТекста - Объект типа ЗаписьТекста - для вывода обработчиков в текстовый файл. +// СтрокиДерева - КоллекцияСтрокДереваЗначений - Объект типа КоллекцияСтрокДереваЗначений - содержит ПВД данного уровня +// дерева значений. +// Процедура ВыгрузитьОбработчикиПравилВыгрузкиДанных(Результат, СтрокиДерева) Для Каждого Правило Из СтрокиДерева Цикл @@ -4747,9 +4774,10 @@ // Выгружает обработчики правил очистки данных в текстовый файл. // // Параметры: -// Результат - Объект типа ЗаписьТекста - для вывода обработчиков в текстовый файл. -// СтрокиДерева - Объект типа КоллекцияСтрокДереваЗначений - содержит ПОД данного уровня дерева значений. -// +// Результат - ЗаписьТекста - Объект типа ЗаписьТекста - для вывода обработчиков в текстовый файл. +// СтрокиДерева - КоллекцияСтрокДереваЗначений - Объект типа КоллекцияСтрокДереваЗначений - содержит ПОД данного уровня +// дерева значений. +// Процедура ВыгрузитьОбработчикиПравилОчисткиДанных(Результат, СтрокиДерева) Для Каждого Правило Из СтрокиДерева Цикл @@ -4775,8 +4803,8 @@ // Выгружает обработчики правил конвертации: ПКО, ПКС, ПКГС в текстовый файл. // // Параметры: -// Результат - Объект типа ЗаписьТекста - для вывода обработчиков в текстовый файл. -// +// Результат - ЗаписьТекста - Объект типа ЗаписьТекста - для вывода обработчиков в текстовый файл. +// Процедура ВыгрузитьОбработчикиПравилКонвертации(Результат) ВывестиКомментарий = ТаблицаПравилКонвертации.Количество() <> 0; @@ -4809,9 +4837,9 @@ // Выгружает обработчики правил конвертации свойств в текстовый файл. // // Параметры: -// Результат - Объект типа ЗаписьТекста - для вывода обработчиков в текстовый файл. +// Результат - ЗаписьТекста - Объект типа ЗаписьТекста - для вывода обработчиков в текстовый файл. // ПКС - ТаблицаЗначений - содержит правила конвертации свойств или групп свойств объекта. -// +// Процедура ВыгрузитьОбработчикиПравилКонвертацииСвойств(Результат, ПКС) Для Каждого Правило Из ПКС Цикл @@ -4843,8 +4871,8 @@ // Выгружает алгоритмы в текстовый файл. // // Параметры: -// Результат - Объект типа ЗаписьТекста - для вывода алгоритмов в текстовый файл. -// +// Результат - ЗаписьТекста - Объект типа ЗаписьТекста - для вывода алгоритмов в текстовый файл. +// Процедура ВыгрузитьАлгоритмы(Результат) // Комментарий к блоку "Алгоритмы". @@ -4864,8 +4892,8 @@ // Ключ элемента структуры - имя алгоритма, значение - интерфейс вызова процедуры, содержащей код алгоритма. // // Параметры: -// Результат - Объект типа ЗаписьТекста - для вывода обработчиков в текстовый файл. -// +// Результат - ЗаписьТекста - Объект типа ЗаписьТекста - для вывода обработчиков в текстовый файл. +// Процедура ВыгрузитьКонструкторВнешнейОбработки(Результат) // Выводим комментарий @@ -4911,10 +4939,10 @@ // Добавляет в объект "Результат" обработчик ПКО, ПКС или ПКГС. // // Параметры: -// Результат - Объект типа ЗаписьТекста - для вывода обработчика в текстовый файл. +// Результат - ЗаписьТекста - Объект типа ЗаписьТекста - для вывода обработчика в текстовый файл. // Правило - строка таблицы значений с правилами конвертации объекта. // ИмяОбработчика - строка - имя обработчика. -// +// Процедура ДобавитьВПотокОбработчикПКО(Результат, Правило, ИмяОбработчика) Если Не Правило["ЕстьОбработчик" + ИмяОбработчика] Тогда @@ -4930,9 +4958,9 @@ // Добавляет в объект "Результат" код алгоритма. // // Параметры: -// Результат - Объект типа ЗаписьТекста - для вывода обработчика в текстовый файл. +// Результат - ЗаписьТекста - Объект типа ЗаписьТекста - для вывода обработчика в текстовый файл. // Алгоритм - элемент структуры - алгоритм для выгрузки. -// +// Процедура ДобавитьВПотокАлгоритм(Результат, Алгоритм) ИнтерфейсАлгоритма = "Процедура " + ПолучитьИнтерфейсАлгоритма(Алгоритм.Ключ); @@ -4944,11 +4972,11 @@ // Добавляет в объект "Результат" обработчик ПВД или ПОД. // // Параметры: -// Результат - Объект типа ЗаписьТекста - для вывода обработчика в текстовый файл. +// Результат - ЗаписьТекста - Объект типа ЗаписьТекста - для вывода обработчика в текстовый файл. // Правило - строка дерева значений с правилами. // ПрефиксОбработчика - строка - префикс обработчика: "ПВД" или "ПОД". // ИмяОбработчика - строка - имя обработчика. -// +// Процедура ДобавитьВПотокОбработчик(Результат, Правило, ПрефиксОбработчика, ИмяОбработчика) Если ПустаяСтрока(Правило[ИмяОбработчика]) Тогда @@ -4964,9 +4992,9 @@ // Добавляет в объект "Результат" глобальный обработчик конвертации. // // Параметры: -// Результат - Объект типа ЗаписьТекста - для вывода обработчика в текстовый файл. +// Результат - ЗаписьТекста - Объект типа ЗаписьТекста - для вывода обработчика в текстовый файл. // ИмяОбработчика - строка - имя обработчика. -// +// Процедура ДобавитьВПотокОбработчикКонвертации(Результат, ИмяОбработчика) АлгоритмОбработчика = ""; @@ -4984,7 +5012,7 @@ // Добавляет в объект "Результат" процедуру с кодом обработчика или кодом алгоритма. // // Параметры: -// Результат - Объект типа ЗаписьТекста - для вывода процедуры в текстовый файл. +// Результат - ЗаписьТекста - Объект типа ЗаписьТекста - для вывода процедуры в текстовый файл. // ИнтерфейсОбработчика - Строка - полное описание интерфейса обработчика: // имя процедуры, параметры процедуры, ключевое слово "Экспорт". // Обработчик - Строка - тело обработчика или алгоритма. @@ -5042,8 +5070,8 @@ // Добавляет в объект "Результат" комментарий. // // Параметры: -// Результат - Объект типа ЗаписьТекста - для вывода комментария в текстовый файл. -// ИмяОбласти - Строка - имя области текстового макета "мМакетОбщиеПроцедурыФункции" +// Результат - ЗаписьТекста - Объект типа ЗаписьТекста - для вывода комментария в текстовый файл. +// ИмяОбласти - Строка - имя области текстового макета "мМакетОбщиеПроцедурыФункции" // в которой содержится требуемый комментарий. // ВывестиКомментарий - Булево - признак необходимости вывода комментария. // @@ -5068,8 +5096,8 @@ // Добавляет в объект "Результат" служебный код: параметры, общие процедуры и функции, деструктор внешней обработки. // // Параметры: -// Результат - Объект типа ЗаписьТекста - для вывода служебного кода в текстовый файл. -// ИмяОбласти - Строка - имя области текстового макета "мМакетОбщиеПроцедурыФункции" +// Результат - ЗаписьТекста - Объект типа ЗаписьТекста - для вывода служебного кода в текстовый файл. +// ИмяОбласти - Строка - имя области текстового макета "мМакетОбщиеПроцедурыФункции" // в которой содержится требуемый служебный код. // Процедура ДобавитьВПотокСлужебныйКод(Результат, ИмяОбласти) @@ -5343,14 +5371,14 @@ // Формирует интерфейс обработчика ПКС, ПКГС (уникальное имя процедуры с параметрами соответствующего обработчика). // // Параметры: -// ПКО - Строка таблицы значений - содержит правило конвертации объекта. -// ПКГС - Строка таблицы значений - содержит правило конвертации группы свойств. -// Правило - Строка таблицы значений - содержит правило конвертации свойств объекта. +// ПКО - СтрокаТаблицыЗначений - содержит правило конвертации объекта. +// ПКГС - СтрокаТаблицыЗначений - содержит правило конвертации группы свойств. +// Правило - СтрокаТаблицыЗначений - содержит правило конвертации свойств объекта. // ИмяОбработчика - Строка - имя обработчика события. // // Возвращаемое значение: // Строка - интерфейс обработчика. -// +// Функция ПолучитьИнтерфейсОбработчикаПКС(ПКО, ПКГС, Правило, ИмяОбработчика) ПрефиксИмени = ?(Правило.ЭтоГруппа, "ПКГС", "ПКС"); @@ -5527,8 +5555,9 @@ // // Параметры: // ТаблицаПОД - ДеревоЗначений - содержит правила очистки данных. -// СтрокиДерева - Объект типа КоллекцияСтрокДереваЗначений - содержит ПОД данного уровня дерева значений. -// +// СтрокиДерева - КоллекцияСтрокДереваЗначений - Объект типа КоллекцияСтрокДереваЗначений - содержит ПОД данного уровня +// дерева значений. +// Процедура ДополнитьИнтерфейсамиОбработчиковПравилаОчисткиДанных(ТаблицаПОД, СтрокиДерева) Для Каждого Правило Из СтрокиДерева Цикл @@ -5555,8 +5584,9 @@ // // Параметры: // ТаблицаПВД - ДеревоЗначений - содержит правила выгрузки данных. -// СтрокиДерева - Объект типа КоллекцияСтрокДереваЗначений - содержит ПВД данного уровня дерева значений. -// +// СтрокиДерева - КоллекцияСтрокДереваЗначений - Объект типа КоллекцияСтрокДереваЗначений - содержит ПВД данного уровня +// дерева значений. +// Процедура ДополнитьИнтерфейсамиОбработчиковПравилаВыгрузкиДанных(ТаблицаПВД, СтрокиДерева) Для Каждого Правило Из СтрокиДерева Цикл @@ -5620,11 +5650,11 @@ // Дополняет коллекцию значений правил конвертации свойств объектов интерфейсами обработчиков. // // Параметры: -// ПКО - Строка таблицы значений - содержит правило конвертации объекта. +// ПКО - СтрокаТаблицыЗначений - содержит правило конвертации объекта. // ПравилаКонвертацииСвойствОбъекта - ТаблицаЗначений - содержит правила конвертации свойств или группы свойств // объекта из правила ПКО. -// ПКГС - Строка таблицы значений - содержит правило конвертации группы свойств. -// +// ПКГС - СтрокаТаблицыЗначений - содержит правило конвертации группы свойств. +// Процедура ДополнитьИнтерфейсамиОбработчиковПКС(ПКО, ПравилаКонвертацииСвойствОбъекта, ПКГС = Неопределено) Для Каждого ПКС Из ПравилаКонвертацииСвойствОбъекта Цикл @@ -6446,8 +6476,6 @@ Если РежимПоискаОсновногоОбъекта Или ПустаяСтрока(СтрокаПоиска) Тогда СтрокаЗапросаПоискаПоУникальномуИдентификатору = ""; - Иначе - СтрокаЗапросаПоискаПоУникальномуИдентификатору = СтрокаЗапросаПоискаПоУникальномуИдентификатору; КонецЕсли; Объект = НайтиОбъектПоСвойству(СтруктураСвойств.Менеджер, СвойствоПоиска, ЗначениеСвойстваПоиска, @@ -12596,9 +12624,9 @@ // // Параметры: // СтрокаДанных - имя файла для загрузки данных или строка-XML, содержащая данные для загрузки. -// +// // Возвращаемое значение: -// Истина - загрузка данных из файла возможна; Ложь - нет. +// Булево - Истина - загрузка данных из файла возможна; Ложь - нет. // Функция ВыполнитьДействияПередЧтениемДанных(СтрокаДанных = "") Экспорт @@ -12827,7 +12855,7 @@ Функция РаспаковатьZipФайл(ИмяФайлаДляРаспаковки) - КаталогДляРаспаковки = ПолучитьИмяВременногоФайла(); + КаталогДляРаспаковки = ВременныйКаталогРаботыСФайлами; СоздатьКаталог(КаталогДляРаспаковки); ИмяРаспакованногоФайла = ""; @@ -13827,6 +13855,9 @@ КонецЦикла; РазделителиКонфигурации = Новый ФиксированныйМассив(РазделителиКонфигурации); + ВременныйКаталогРаботыСФайлами = ПолучитьИмяВременногоФайла(); + УдалитьФайлы(ВременныйКаталогРаботыСФайлами); + КонецПроцедуры Функция ОпределитьДостаточностьПараметровДляПодключенияКИнформационнойБазе(СтруктураПодключения, СтрокаПодключения = "", СтрокаСообщенияОбОшибке = "") @@ -13837,7 +13868,7 @@ Если ПустаяСтрока(СтруктураПодключения.КаталогИБ) Тогда - СтрокаСообщенияОбОшибке = НСтр("ru='Не задан каталог информационной базы-приемника'"); + СтрокаСообщенияОбОшибке = НСтр("ru = 'Не задан каталог информационной базы-приемника'"); СообщитьПользователю(СтрокаСообщенияОбОшибке); @@ -13850,7 +13881,7 @@ Если ПустаяСтрока(СтруктураПодключения.ИмяСервера) Тогда - СтрокаСообщенияОбОшибке = НСтр("ru='Не задано имя сервера 1С:Предприятия информационной базы-приемника'"); + СтрокаСообщенияОбОшибке = НСтр("ru = 'Не задано имя сервера 1С:Предприятия информационной базы-приемника'"); СообщитьПользователю(СтрокаСообщенияОбОшибке); @@ -13860,7 +13891,7 @@ Если ПустаяСтрока(СтруктураПодключения.ИмяИБНаСервере) Тогда - СтрокаСообщенияОбОшибке = НСтр("ru='Не задано имя информационной базы-приемника на сервере 1С:Предприятия'"); + СтрокаСообщенияОбОшибке = НСтр("ru = 'Не задано имя информационной базы-приемника на сервере 1С:Предприятия'"); СообщитьПользователю(СтрокаСообщенияОбОшибке); @@ -14022,7 +14053,7 @@ РезультатПодключения = ОбъектПодключения.Обработки.УниверсальныйОбменДаннымиXML.Создать(); Исключение - Текст = НСтр("ru='При попытке создания обработки УниверсальныйОбменДаннымиXML произошла ошибка: %1'"); + Текст = НСтр("ru = 'При попытке создания обработки УниверсальныйОбменДаннымиXML произошла ошибка: %1'"); Текст = ПодставитьПараметрыВСтроку(Текст, КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); СообщитьПользователю(Текст); РезультатПодключения = Неопределено; @@ -14030,17 +14061,17 @@ Если РезультатПодключения <> Неопределено Тогда - СвойстваЗаполнения = Новый Структура; - СвойстваЗаполнения.Вставить("ИспользоватьТранзакции", ИспользоватьТранзакции); - СвойстваЗаполнения.Вставить("КоличествоОбъектовНаТранзакцию", КоличествоОбъектовНаТранзакцию); - СвойстваЗаполнения.Вставить("ФлагРежимОтладки", ФлагРежимОтладки); - СвойстваЗаполнения.Вставить("ИмяФайлаПротоколаОбмена", ПолучитьИмяПротоколаДляВторойИнформационнойБазыComСоединения()); - СвойстваЗаполнения.Вставить("ДописыватьДанныеВПротоколОбмена", ДописыватьДанныеВПротоколОбмена); - СвойстваЗаполнения.Вставить("ВыводВПротоколИнформационныхСообщений", ВыводВПротоколИнформационныхСообщений); - СвойстваЗаполнения.Вставить("РежимОбмена", "Загрузка"); - СвойстваЗаполнения.Вставить("КодировкаФайлаПротоколаОбмена", КодировкаФайлаПротоколаОбмена); + РезультатПодключения.ИспользоватьТранзакции = ИспользоватьТранзакции; + РезультатПодключения.КоличествоОбъектовНаТранзакцию = КоличествоОбъектовНаТранзакцию; - ЗаполнитьЗначенияСвойств(РезультатПодключения, СвойстваЗаполнения); + РезультатПодключения.ФлагРежимОтладки = ФлагРежимОтладки; + + РезультатПодключения.ИмяФайлаПротоколаОбмена = ПолучитьИмяПротоколаДляВторойИнформационнойБазыComСоединения(); + + РезультатПодключения.ДописыватьДанныеВПротоколОбмена = ДописыватьДанныеВПротоколОбмена; + РезультатПодключения.ВыводВПротоколИнформационныхСообщений = ВыводВПротоколИнформационныхСообщений; + + РезультатПодключения.РежимОбмена = "Загрузка"; КонецЕсли; @@ -14176,11 +14207,77 @@ КонецПроцедуры -// Выводит сообщение пользователю. -// -// Параметры: -// ТекстСообщенияПользователю - Строка - Текст выводимого сообщения. -// +Функция СтруктураПараметровМенеджера(Имя, ИмяТипа, ТипСсылкиСтрокой, Менеджер, ОбъектМД) + Структура = Новый Структура(); + Структура.Вставить("Имя", Имя); + Структура.Вставить("ИмяТипа", ИмяТипа); + Структура.Вставить("ТипСсылкиСтрокой", ТипСсылкиСтрокой); + Структура.Вставить("Менеджер", Менеджер); + Структура.Вставить("ОбъектМД", ОбъектМД); + Структура.Вставить("ВозможенПоискПоПредопределенным", Ложь); + Структура.Вставить("ПКО"); + Возврат Структура; +КонецФункции + +Функция СтруктураПараметровПланаОбмена(Имя, ТипСсылки, ЭтоСсылочныйТип, ЭтоРегистр) + Структура = Новый Структура(); + Структура.Вставить("Имя",Имя); + Структура.Вставить("ТипСсылки",ТипСсылки); + Структура.Вставить("ЭтоСсылочныйТип",ЭтоСсылочныйТип); + Структура.Вставить("ЭтоРегистр",ЭтоРегистр); + Возврат Структура; +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Процедуры и функции из базовой функциональности для обеспечения автономности. + +Функция ПодсистемаСуществует(ПолноеИмяПодсистемы) Экспорт + + ИменаПодсистем = ИменаПодсистем(); + Возврат ИменаПодсистем.Получить(ПолноеИмяПодсистемы) <> Неопределено; + +КонецФункции + +Функция ИменаПодсистем() Экспорт + + Возврат Новый ФиксированноеСоответствие(ИменаПодчиненныхПодсистем(Метаданные)); + +КонецФункции + +Функция ИменаПодчиненныхПодсистем(РодительскаяПодсистема) + + Имена = Новый Соответствие; + + Для Каждого ТекущаяПодсистема Из РодительскаяПодсистема.Подсистемы Цикл + + Имена.Вставить(ТекущаяПодсистема.Имя, Истина); + ИменаПодчиненных = ИменаПодчиненныхПодсистем(ТекущаяПодсистема); + + Для каждого ИмяПодчиненной Из ИменаПодчиненных Цикл + Имена.Вставить(ТекущаяПодсистема.Имя + "." + ИмяПодчиненной.Ключ, Истина); + КонецЦикла; + КонецЦикла; + + Возврат Имена; + +КонецФункции + +Функция ОбщийМодуль(Имя) Экспорт + + Если Метаданные.ОбщиеМодули.Найти(Имя) <> Неопределено Тогда + Модуль = Вычислить(Имя); + Иначе + Модуль = Неопределено; + КонецЕсли; + + Если ТипЗнч(Модуль) <> Тип("ОбщийМодуль") Тогда + ВызватьИсключение ПодставитьПараметрыВСтроку(НСтр("ru = 'Общий модуль ""%1"" не найден.'"), Имя); + КонецЕсли; + + Возврат Модуль; + +КонецФункции + Процедура СообщитьПользователю(ТекстСообщенияПользователю) Экспорт Сообщение = Новый СообщениеПользователю; @@ -14189,19 +14286,6 @@ КонецПроцедуры -// Подставляет параметры в строку. Максимально возможное число параметров - 9. -// Параметры в строке задаются как %<номер параметра>. Нумерация параметров начинается с единицы. -// -// Параметры: -// СтрокаПодстановки - Строка - шаблон строки с параметрами (вхождениями вида "%ИмяПараметра"); -// Параметр - Строка - подставляемый параметр. -// -// Возвращаемое значение: -// Строка - текстовая строка с подставленными параметрами. -// -// Пример: -// ПодставитьПараметрыВСтроку(НСтр("ru='%1 пошел в %2'"), "Вася", "Зоопарк") = "Вася пошел в Зоопарк". -// Функция ПодставитьПараметрыВСтроку(Знач СтрокаПодстановки, Знач Параметр1, Знач Параметр2 = Неопределено, Знач Параметр3 = Неопределено) @@ -14238,14 +14322,6 @@ КонецФункции -// Проверить, что значение имеет ссылочный тип данных. -// -// Параметры: -// Значение - Произвольный - проверяемое значение. -// -// Возвращаемое значение: -// Булево - Истина, если тип значения ссылочный. -// Функция ЗначениеСсылочногоТипа(Значение) Тип = ТипЗнч(Значение); @@ -14264,32 +14340,14 @@ КонецФункции -// Возвращает код основного языка конфигурации, например "ru". -Функция КодОсновногоЯзыка() Экспорт +Функция КодОсновногоЯзыка() + Если ПодсистемаСуществует("СтандартныеПодсистемы.БазоваяФункциональность") Тогда + МодульОбщегоНазначения = ОбщийМодуль("ОбщегоНазначения"); + Возврат МодульОбщегоНазначения.КодОсновногоЯзыка(); + КонецЕсли; Возврат Метаданные.ОсновнойЯзык.КодЯзыка; КонецФункции -Функция СтруктураПараметровМенеджера(Имя, ИмяТипа, ТипСсылкиСтрокой, Менеджер, ОбъектМД) - Структура = Новый Структура(); - Структура.Вставить("Имя", Имя); - Структура.Вставить("ИмяТипа", ИмяТипа); - Структура.Вставить("ТипСсылкиСтрокой", ТипСсылкиСтрокой); - Структура.Вставить("Менеджер", Менеджер); - Структура.Вставить("ОбъектМД", ОбъектМД); - Структура.Вставить("ВозможенПоискПоПредопределенным", Ложь); - Структура.Вставить("ПКО"); - Возврат Структура; -КонецФункции - -Функция СтруктураПараметровПланаОбмена(Имя, ТипСсылки, ЭтоСсылочныйТип, ЭтоРегистр) - Структура = Новый Структура(); - Структура.Вставить("Имя",Имя); - Структура.Вставить("ТипСсылки",ТипСсылки); - Структура.Вставить("ЭтоСсылочныйТип",ЭтоСсылочныйТип); - Структура.Вставить("ЭтоРегистр",ЭтоРегистр); - Возврат Структура; -КонецФункции - #КонецОбласти #КонецОбласти diff --git a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/УниверсальныйОбменДаннымиXML.mdo b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/УниверсальныйОбменДаннымиXML.mdo index fc7a08053..a63a2803b 100644 --- a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/УниверсальныйОбменДаннымиXML.mdo +++ b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/УниверсальныйОбменДаннымиXML.mdo @@ -1223,6 +1223,19 @@
    + + ВременныйКаталогРаботыСФайлами + + ru + Временный каталог работы с файлами + + + String + + + + + УправляемаяФорма diff --git a/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ОсновнаяФорма/Form.form b/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ОсновнаяФорма/Form.form index a0b786194..a58f38068 100644 --- a/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ОсновнаяФорма/Form.form +++ b/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ОсновнаяФорма/Form.form @@ -670,14 +670,10 @@ true true true + + Style.ПоясняющийТекст + Normal - - System.DefaultGUIFont - false - true - false - false - true @@ -1775,14 +1771,10 @@ true true true + + Style.ПоясняющийТекст + Normal - - System.DefaultGUIFont - false - true - false - false - true diff --git a/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ОсновнаяФорма/Module.bsl b/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ОсновнаяФорма/Module.bsl index 260a15cdf..01dc15ccf 100644 --- a/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ОсновнаяФорма/Module.bsl +++ b/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ОсновнаяФорма/Module.bsl @@ -82,14 +82,14 @@ КонецЕсли; ПараметрыИтогов = Новый Структура; - ПараметрыИтогов.Вставить("ОбрабатыватьЗаголовок", НСтр("ru='Установка периода рассчитанных итогов ...'")); - ПараметрыИтогов.Вставить("ПослеПроцесса", НСтр("ru='Установка периода рассчитанных итогов завершена'")); + ПараметрыИтогов.Вставить("ОбрабатыватьЗаголовок", НСтр("ru = 'Установка периода рассчитанных итогов ...'")); + ПараметрыИтогов.Вставить("ПослеПроцесса", НСтр("ru = 'Установка периода рассчитанных итогов завершена'")); ПараметрыИтогов.Вставить("Действие", "УстановитьПериодИтогов"); ПараметрыИтогов.Вставить("МассивСтрок", Элементы.СписокИтогов.ВыделенныеСтроки); ПараметрыИтогов.Вставить("Поле", "ПериодИтогов"); ПараметрыИтогов.Вставить("Значение1", ВыбранноеЗначение.ПериодДляРегистровНакопления); ПараметрыИтогов.Вставить("Значение2", ВыбранноеЗначение.ПериодДляРегистровБухгалтерии); - ПараметрыИтогов.Вставить("ТекстСообщенияОбОшибке", НСтр("ru='Не удалось установить период рассчитанных итогов.'")); + ПараметрыИтогов.Вставить("ТекстСообщенияОбОшибке", НСтр("ru = 'Не удалось установить период рассчитанных итогов.'")); УправлениеИтогами(ПараметрыИтогов); @@ -105,14 +105,14 @@ МинимальныйЭффект = ВыбранноеЗначение.МинимальныйЭффект; ПараметрыИтогов = Новый Структура; - ПараметрыИтогов.Вставить("ОбрабатыватьЗаголовок", НСтр("ru='Перестроение агрегатов ...'")); - ПараметрыИтогов.Вставить("ПослеПроцесса", НСтр("ru='Перестроение агрегатов завершено'")); + ПараметрыИтогов.Вставить("ОбрабатыватьЗаголовок", НСтр("ru = 'Перестроение агрегатов ...'")); + ПараметрыИтогов.Вставить("ПослеПроцесса", НСтр("ru = 'Перестроение агрегатов завершено'")); ПараметрыИтогов.Вставить("Действие", "ПерестроитьАгрегаты"); ПараметрыИтогов.Вставить("МассивСтрок", Элементы.АгрегатыПоРегистрам.ВыделенныеСтроки); ПараметрыИтогов.Вставить("Поле", "Наименование"); ПараметрыИтогов.Вставить("Значение1", ВыбранноеЗначение.ОтносительныйРазмер); ПараметрыИтогов.Вставить("Значение2", ВыбранноеЗначение.МинимальныйЭффект); - ПараметрыИтогов.Вставить("ТекстСообщенияОбОшибке", НСтр("ru='Не удалось перестроить агрегаты.'")); + ПараметрыИтогов.Вставить("ТекстСообщенияОбОшибке", НСтр("ru = 'Не удалось перестроить агрегаты.'")); ИзменитьАгрегатыКлиент(ПараметрыИтогов); @@ -221,14 +221,14 @@ Процедура ВключитьИспользованиеИтогов(Команда) ПараметрыИтогов = Новый Структура; - ПараметрыИтогов.Вставить("ОбрабатыватьЗаголовок", НСтр("ru='Включение использования итогов ...'")); - ПараметрыИтогов.Вставить("ПослеПроцесса", НСтр("ru='Включение использования итогов завершено'")); + ПараметрыИтогов.Вставить("ОбрабатыватьЗаголовок", НСтр("ru = 'Включение использования итогов ...'")); + ПараметрыИтогов.Вставить("ПослеПроцесса", НСтр("ru = 'Включение использования итогов завершено'")); ПараметрыИтогов.Вставить("Действие", "УстановитьИспользованиеИтогов"); ПараметрыИтогов.Вставить("МассивСтрок", Элементы.СписокИтогов.ВыделенныеСтроки); ПараметрыИтогов.Вставить("Поле", "ИспользоватьИтоги"); ПараметрыИтогов.Вставить("Значение1", Истина); ПараметрыИтогов.Вставить("Значение2", Неопределено); - ПараметрыИтогов.Вставить("ТекстСообщенияОбОшибке", НСтр("ru='Не удалось включить использование итогов.'")); + ПараметрыИтогов.Вставить("ТекстСообщенияОбОшибке", НСтр("ru = 'Не удалось включить использование итогов.'")); УправлениеИтогами(ПараметрыИтогов); @@ -238,14 +238,14 @@ Процедура ВключитьИспользованиеТекущихИтогов(Команда) ПараметрыИтогов = Новый Структура; - ПараметрыИтогов.Вставить("ОбрабатыватьЗаголовок", НСтр("ru='Включение использования текущих итогов ...'")); - ПараметрыИтогов.Вставить("ПослеПроцесса", НСтр("ru='Включение использования текущих итогов завершено'")); + ПараметрыИтогов.Вставить("ОбрабатыватьЗаголовок", НСтр("ru = 'Включение использования текущих итогов ...'")); + ПараметрыИтогов.Вставить("ПослеПроцесса", НСтр("ru = 'Включение использования текущих итогов завершено'")); ПараметрыИтогов.Вставить("Действие", "ИспользоватьТекущиеИтоги"); ПараметрыИтогов.Вставить("МассивСтрок", Элементы.СписокИтогов.ВыделенныеСтроки); ПараметрыИтогов.Вставить("Поле", "ИспользоватьТекущиеИтоги"); ПараметрыИтогов.Вставить("Значение1", Истина); ПараметрыИтогов.Вставить("Значение2", Неопределено); - ПараметрыИтогов.Вставить("ТекстСообщенияОбОшибке", НСтр("ru='Не удалось включить использование текущих итогов.'")); + ПараметрыИтогов.Вставить("ТекстСообщенияОбОшибке", НСтр("ru = 'Не удалось включить использование текущих итогов.'")); УправлениеИтогами(ПараметрыИтогов); @@ -255,14 +255,14 @@ Процедура ВыключитьИспользованиеИтогов(Команда) ПараметрыИтогов = Новый Структура; - ПараметрыИтогов.Вставить("ОбрабатыватьЗаголовок", НСтр("ru='Выключение использования итогов ...'")); - ПараметрыИтогов.Вставить("ПослеПроцесса", НСтр("ru='Выключение использования итогов завершено'")); + ПараметрыИтогов.Вставить("ОбрабатыватьЗаголовок", НСтр("ru = 'Выключение использования итогов ...'")); + ПараметрыИтогов.Вставить("ПослеПроцесса", НСтр("ru = 'Выключение использования итогов завершено'")); ПараметрыИтогов.Вставить("Действие", "УстановитьИспользованиеИтогов"); ПараметрыИтогов.Вставить("МассивСтрок", Элементы.СписокИтогов.ВыделенныеСтроки); ПараметрыИтогов.Вставить("Поле", "ИспользоватьИтоги"); ПараметрыИтогов.Вставить("Значение1", Ложь); ПараметрыИтогов.Вставить("Значение2", Неопределено); - ПараметрыИтогов.Вставить("ТекстСообщенияОбОшибке", НСтр("ru='Не удалось выключить использование итогов.'")); + ПараметрыИтогов.Вставить("ТекстСообщенияОбОшибке", НСтр("ru = 'Не удалось выключить использование итогов.'")); УправлениеИтогами(ПараметрыИтогов); @@ -272,14 +272,14 @@ Процедура ВыключитьИспользованиеТекущихИтогов(Команда) ПараметрыИтогов = Новый Структура; - ПараметрыИтогов.Вставить("ОбрабатыватьЗаголовок", НСтр("ru='Выключение использования текущих итогов ...'")); - ПараметрыИтогов.Вставить("ПослеПроцесса", НСтр("ru='Выключение использования текущих итогов завершено'")); + ПараметрыИтогов.Вставить("ОбрабатыватьЗаголовок", НСтр("ru = 'Выключение использования текущих итогов ...'")); + ПараметрыИтогов.Вставить("ПослеПроцесса", НСтр("ru = 'Выключение использования текущих итогов завершено'")); ПараметрыИтогов.Вставить("Действие", "ИспользоватьТекущиеИтоги"); ПараметрыИтогов.Вставить("МассивСтрок", Элементы.СписокИтогов.ВыделенныеСтроки); ПараметрыИтогов.Вставить("Поле", "ИспользоватьТекущиеИтоги"); ПараметрыИтогов.Вставить("Значение1", Ложь); ПараметрыИтогов.Вставить("Значение2", Неопределено); - ПараметрыИтогов.Вставить("ТекстСообщенияОбОшибке", НСтр("ru='Не удалось выключить использование текущих итогов.'")); + ПараметрыИтогов.Вставить("ТекстСообщенияОбОшибке", НСтр("ru = 'Не удалось выключить использование текущих итогов.'")); УправлениеИтогами(ПараметрыИтогов); @@ -313,14 +313,14 @@ Процедура ВключитьРазделениеИтогов(Команда) ПараметрыИтогов = Новый Структура; - ПараметрыИтогов.Вставить("ОбрабатыватьЗаголовок", НСтр("ru='Включение разделения итогов ...'")); - ПараметрыИтогов.Вставить("ПослеПроцесса", НСтр("ru='Включение разделения итогов завершено'")); + ПараметрыИтогов.Вставить("ОбрабатыватьЗаголовок", НСтр("ru = 'Включение разделения итогов ...'")); + ПараметрыИтогов.Вставить("ПослеПроцесса", НСтр("ru = 'Включение разделения итогов завершено'")); ПараметрыИтогов.Вставить("Действие", "УстановитьРазделениеИтогов"); ПараметрыИтогов.Вставить("МассивСтрок", Элементы.СписокИтогов.ВыделенныеСтроки); ПараметрыИтогов.Вставить("Поле", "РазделениеИтогов"); ПараметрыИтогов.Вставить("Значение1", Истина); ПараметрыИтогов.Вставить("Значение2", Неопределено); - ПараметрыИтогов.Вставить("ТекстСообщенияОбОшибке", НСтр("ru='Не удалось включить разделение итогов.'")); + ПараметрыИтогов.Вставить("ТекстСообщенияОбОшибке", НСтр("ru = 'Не удалось включить разделение итогов.'")); УправлениеИтогами(ПараметрыИтогов); @@ -330,14 +330,14 @@ Процедура ВыключитьРазделениеИтогов(Команда) ПараметрыИтогов = Новый Структура; - ПараметрыИтогов.Вставить("ОбрабатыватьЗаголовок", НСтр("ru='Выключение разделения итогов ...'")); - ПараметрыИтогов.Вставить("ПослеПроцесса", НСтр("ru='Выключение разделения итогов завершено'")); + ПараметрыИтогов.Вставить("ОбрабатыватьЗаголовок", НСтр("ru = 'Выключение разделения итогов ...'")); + ПараметрыИтогов.Вставить("ПослеПроцесса", НСтр("ru = 'Выключение разделения итогов завершено'")); ПараметрыИтогов.Вставить("Действие", "УстановитьРазделениеИтогов"); ПараметрыИтогов.Вставить("МассивСтрок", Элементы.СписокИтогов.ВыделенныеСтроки); ПараметрыИтогов.Вставить("Поле", "РазделениеИтогов"); ПараметрыИтогов.Вставить("Значение1", Ложь); ПараметрыИтогов.Вставить("Значение2", Неопределено); - ПараметрыИтогов.Вставить("ТекстСообщенияОбОшибке", НСтр("ru='Не удалось выключить разделение итогов.'")); + ПараметрыИтогов.Вставить("ТекстСообщенияОбОшибке", НСтр("ru = 'Не удалось выключить разделение итогов.'")); УправлениеИтогами(ПараметрыИтогов); @@ -378,14 +378,14 @@ Процедура ВключитьРежимАгрегатов(Команда) ПараметрыИтогов = Новый Структура; - ПараметрыИтогов.Вставить("ОбрабатыватьЗаголовок", НСтр("ru='Включение режима агрегатов ...'")); - ПараметрыИтогов.Вставить("ПослеПроцесса", НСтр("ru='Включение режима агрегатов завершено'")); + ПараметрыИтогов.Вставить("ОбрабатыватьЗаголовок", НСтр("ru = 'Включение режима агрегатов ...'")); + ПараметрыИтогов.Вставить("ПослеПроцесса", НСтр("ru = 'Включение режима агрегатов завершено'")); ПараметрыИтогов.Вставить("Действие", "УстановитьРежимАгрегатов"); ПараметрыИтогов.Вставить("МассивСтрок", Элементы.АгрегатыПоРегистрам.ВыделенныеСтроки); ПараметрыИтогов.Вставить("Поле", "РежимАгрегатов"); ПараметрыИтогов.Вставить("Значение1", Истина); ПараметрыИтогов.Вставить("Значение2", Неопределено); - ПараметрыИтогов.Вставить("ТекстСообщенияОбОшибке", НСтр("ru='Не удалось включить режим агрегатов.'")); + ПараметрыИтогов.Вставить("ТекстСообщенияОбОшибке", НСтр("ru = 'Не удалось включить режим агрегатов.'")); ИзменитьАгрегатыКлиент(ПараметрыИтогов); @@ -395,14 +395,14 @@ Процедура ВключитьРежимИтогов(Команда) ПараметрыИтогов = Новый Структура; - ПараметрыИтогов.Вставить("ОбрабатыватьЗаголовок", НСтр("ru='Включение режима итогов ...'")); - ПараметрыИтогов.Вставить("ПослеПроцесса", НСтр("ru='Включение режима итогов завершено'")); + ПараметрыИтогов.Вставить("ОбрабатыватьЗаголовок", НСтр("ru = 'Включение режима итогов ...'")); + ПараметрыИтогов.Вставить("ПослеПроцесса", НСтр("ru = 'Включение режима итогов завершено'")); ПараметрыИтогов.Вставить("Действие", "УстановитьРежимАгрегатов"); ПараметрыИтогов.Вставить("МассивСтрок", Элементы.АгрегатыПоРегистрам.ВыделенныеСтроки); ПараметрыИтогов.Вставить("Поле", "РежимАгрегатов"); ПараметрыИтогов.Вставить("Значение1", Ложь); ПараметрыИтогов.Вставить("Значение2", Неопределено); - ПараметрыИтогов.Вставить("ТекстСообщенияОбОшибке", НСтр("ru='Не удалось включить режим итогов.'")); + ПараметрыИтогов.Вставить("ТекстСообщенияОбОшибке", НСтр("ru = 'Не удалось включить режим итогов.'")); ИзменитьАгрегатыКлиент(ПараметрыИтогов); @@ -412,14 +412,14 @@ Процедура ВключитьИспользованиеАгрегатов(Команда) ПараметрыИтогов = Новый Структура; - ПараметрыИтогов.Вставить("ОбрабатыватьЗаголовок", НСтр("ru='Включение использования агрегатов ...'")); - ПараметрыИтогов.Вставить("ПослеПроцесса", НСтр("ru='Включение использования агрегатов завершено'")); + ПараметрыИтогов.Вставить("ОбрабатыватьЗаголовок", НСтр("ru = 'Включение использования агрегатов ...'")); + ПараметрыИтогов.Вставить("ПослеПроцесса", НСтр("ru = 'Включение использования агрегатов завершено'")); ПараметрыИтогов.Вставить("Действие", "УстановитьИспользованиеАгрегатов"); ПараметрыИтогов.Вставить("МассивСтрок", Элементы.АгрегатыПоРегистрам.ВыделенныеСтроки); ПараметрыИтогов.Вставить("Поле", "ИспользованиеАгрегатов"); ПараметрыИтогов.Вставить("Значение1", Истина); ПараметрыИтогов.Вставить("Значение2", Неопределено); - ПараметрыИтогов.Вставить("ТекстСообщенияОбОшибке", НСтр("ru='Не удалось включить использование агрегатов.'")); + ПараметрыИтогов.Вставить("ТекстСообщенияОбОшибке", НСтр("ru = 'Не удалось включить использование агрегатов.'")); ИзменитьАгрегатыКлиент(ПараметрыИтогов); @@ -429,14 +429,14 @@ Процедура ВыключитьИспользованиеАгрегатов(Команда) ПараметрыИтогов = Новый Структура; - ПараметрыИтогов.Вставить("ОбрабатыватьЗаголовок", НСтр("ru='Выключение использования агрегатов ...'")); - ПараметрыИтогов.Вставить("ПослеПроцесса", НСтр("ru='Выключение использования агрегатов завершено'")); + ПараметрыИтогов.Вставить("ОбрабатыватьЗаголовок", НСтр("ru = 'Выключение использования агрегатов ...'")); + ПараметрыИтогов.Вставить("ПослеПроцесса", НСтр("ru = 'Выключение использования агрегатов завершено'")); ПараметрыИтогов.Вставить("Действие", "УстановитьИспользованиеАгрегатов"); ПараметрыИтогов.Вставить("МассивСтрок", Элементы.АгрегатыПоРегистрам.ВыделенныеСтроки); ПараметрыИтогов.Вставить("Поле", "ИспользованиеАгрегатов"); ПараметрыИтогов.Вставить("Значение1", Ложь); ПараметрыИтогов.Вставить("Значение2", Неопределено); - ПараметрыИтогов.Вставить("ТекстСообщенияОбОшибке", НСтр("ru='Не удалось выключить использование агрегатов.'")); + ПараметрыИтогов.Вставить("ТекстСообщенияОбОшибке", НСтр("ru = 'Не удалось выключить использование агрегатов.'")); ИзменитьАгрегатыКлиент(ПараметрыИтогов); @@ -459,7 +459,7 @@ &НаКлиенте Процедура ОчиститьАгрегатыПоРегистрам(Команда) - ТекстВопроса = НСтр("ru='Очистка агрегатов может привести к существенному замедлению отчетов.'"); + ТекстВопроса = НСтр("ru = 'Очистка агрегатов может привести к существенному замедлению отчетов.'"); Кнопки = Новый СписокЗначений; Кнопки.Добавить(КодВозвратаДиалога.Да, НСтр("ru = 'Очистить агрегаты'")); @@ -474,14 +474,14 @@ Процедура ЗаполнитьАгрегатыПоРегистрам(Команда) ПараметрыИтогов = Новый Структура; - ПараметрыИтогов.Вставить("ОбрабатыватьЗаголовок", НСтр("ru='Заполнение агрегатов ...'")); - ПараметрыИтогов.Вставить("ПослеПроцесса", НСтр("ru='Заполнение агрегатов завершено'")); + ПараметрыИтогов.Вставить("ОбрабатыватьЗаголовок", НСтр("ru = 'Заполнение агрегатов ...'")); + ПараметрыИтогов.Вставить("ПослеПроцесса", НСтр("ru = 'Заполнение агрегатов завершено'")); ПараметрыИтогов.Вставить("Действие", "ЗаполнитьАгрегаты"); ПараметрыИтогов.Вставить("МассивСтрок", Элементы.АгрегатыПоРегистрам.ВыделенныеСтроки); ПараметрыИтогов.Вставить("Поле", "Наименование"); ПараметрыИтогов.Вставить("Значение1", Неопределено); ПараметрыИтогов.Вставить("Значение2", Неопределено); - ПараметрыИтогов.Вставить("ТекстСообщенияОбОшибке", НСтр("ru='Не удалось заполнить агрегаты.'")); + ПараметрыИтогов.Вставить("ТекстСообщенияОбОшибке", НСтр("ru = 'Не удалось заполнить агрегаты.'")); ИзменитьАгрегатыКлиент(ПараметрыИтогов); @@ -507,19 +507,19 @@ МассивДействий = СписокИтогов.НайтиСтроки(Новый Структура("ОстаткиИОбороты", Истина)); Если МассивДействий.Количество() = 0 Тогда - ПоказатьПредупреждение(, НСтр("ru='Отсутствуют регистры, для которых можно выполнить данную операцию.'")); + ПоказатьПредупреждение(, НСтр("ru = 'Отсутствуют регистры, для которых можно выполнить данную операцию.'")); Возврат; КонецЕсли; ПараметрыИтогов = Новый Структура; - ПараметрыИтогов.Вставить("ОбрабатыватьЗаголовок", НСтр("ru='Установка периода рассчитанных итогов ...'")); - ПараметрыИтогов.Вставить("ПослеПроцесса", НСтр("ru='Установка периода рассчитанных итогов завершена'")); + ПараметрыИтогов.Вставить("ОбрабатыватьЗаголовок", НСтр("ru = 'Установка периода рассчитанных итогов ...'")); + ПараметрыИтогов.Вставить("ПослеПроцесса", НСтр("ru = 'Установка периода рассчитанных итогов завершена'")); ПараметрыИтогов.Вставить("Действие", "УстановитьПериодИтогов"); ПараметрыИтогов.Вставить("МассивСтрок", МассивДействий); ПараметрыИтогов.Вставить("Поле", "ПериодИтогов"); ПараметрыИтогов.Вставить("Значение1", ОкончаниеПериода(ДобавитьМесяц(РассчитатьИтогиНа, -1)) ); ПараметрыИтогов.Вставить("Значение2", ОкончаниеПериода(РассчитатьИтогиНа) ); - ПараметрыИтогов.Вставить("ТекстСообщенияОбОшибке", НСтр("ru='Не удалось установить период рассчитанных итогов.'")); + ПараметрыИтогов.Вставить("ТекстСообщенияОбОшибке", НСтр("ru = 'Не удалось установить период рассчитанных итогов.'")); ПараметрыИтогов.Вставить("ГрупповаяОбработка", Истина); УправлениеИтогами(ПараметрыИтогов); @@ -534,19 +534,19 @@ МассивДействий = СписокИтогов.НайтиСтроки(Новый Структура("ИспользоватьИтоги", Ложь)); Если МассивДействий.Количество() = 0 Тогда - ПоказатьПредупреждение(, НСтр("ru='Отсутствуют регистры, для которых можно выполнить данную операцию.'")); + ПоказатьПредупреждение(, НСтр("ru = 'Отсутствуют регистры, для которых можно выполнить данную операцию.'")); Возврат; КонецЕсли; ПараметрыИтогов = Новый Структура; - ПараметрыИтогов.Вставить("ОбрабатыватьЗаголовок", НСтр("ru='Включение использования итогов ...'")); - ПараметрыИтогов.Вставить("ПослеПроцесса", НСтр("ru='Включение использования итогов завершено'")); + ПараметрыИтогов.Вставить("ОбрабатыватьЗаголовок", НСтр("ru = 'Включение использования итогов ...'")); + ПараметрыИтогов.Вставить("ПослеПроцесса", НСтр("ru = 'Включение использования итогов завершено'")); ПараметрыИтогов.Вставить("Действие", "УстановитьИспользованиеИтогов"); ПараметрыИтогов.Вставить("МассивСтрок", МассивДействий); ПараметрыИтогов.Вставить("Поле", ""); ПараметрыИтогов.Вставить("Значение1", Истина); ПараметрыИтогов.Вставить("Значение2", Неопределено); - ПараметрыИтогов.Вставить("ТекстСообщенияОбОшибке", НСтр("ru='Не удалось включить использование итогов.'")); + ПараметрыИтогов.Вставить("ТекстСообщенияОбОшибке", НСтр("ru = 'Не удалось включить использование итогов.'")); ПараметрыИтогов.Вставить("ГрупповаяОбработка", Истина); УправлениеИтогами(ПараметрыИтогов); @@ -561,32 +561,32 @@ МассивДействий = АгрегатыПоРегистрам.НайтиСтроки(Новый Структура("РежимАгрегатов,ИспользованиеАгрегатов", Истина, Истина)); Если МассивДействий.Количество() = 0 Тогда - ПоказатьПредупреждение(, НСтр("ru='Отсутствуют регистры, для которых можно выполнить выбранное действие.'")); + ПоказатьПредупреждение(, НСтр("ru = 'Отсутствуют регистры, для которых можно выполнить выбранное действие.'")); Возврат; КонецЕсли; ПараметрыИтогов = Новый Структура; - ПараметрыИтогов.Вставить("ОбрабатыватьЗаголовок", НСтр("ru='Перестроение агрегатов ...'")); - ПараметрыИтогов.Вставить("ПослеПроцесса", НСтр("ru='Перестроение агрегатов завершено'")); + ПараметрыИтогов.Вставить("ОбрабатыватьЗаголовок", НСтр("ru = 'Перестроение агрегатов ...'")); + ПараметрыИтогов.Вставить("ПослеПроцесса", НСтр("ru = 'Перестроение агрегатов завершено'")); ПараметрыИтогов.Вставить("Действие", "ПерестроитьАгрегаты"); ПараметрыИтогов.Вставить("МассивСтрок", МассивДействий); ПараметрыИтогов.Вставить("Поле", ""); ПараметрыИтогов.Вставить("Значение1", 0); ПараметрыИтогов.Вставить("Значение2", 0); - ПараметрыИтогов.Вставить("ТекстСообщенияОбОшибке", НСтр("ru='Не удалось перестроить агрегаты.'")); + ПараметрыИтогов.Вставить("ТекстСообщенияОбОшибке", НСтр("ru = 'Не удалось перестроить агрегаты.'")); ПараметрыИтогов.Вставить("ГрупповаяОбработка", Истина); ИзменитьАгрегатыКлиент(ПараметрыИтогов, Истина); ПараметрыИтогов = Новый Структура; - ПараметрыИтогов.Вставить("ОбрабатыватьЗаголовок", НСтр("ru='Заполнение агрегатов ...'")); - ПараметрыИтогов.Вставить("ПослеПроцесса", НСтр("ru='Заполнение агрегатов завершено'")); + ПараметрыИтогов.Вставить("ОбрабатыватьЗаголовок", НСтр("ru = 'Заполнение агрегатов ...'")); + ПараметрыИтогов.Вставить("ПослеПроцесса", НСтр("ru = 'Заполнение агрегатов завершено'")); ПараметрыИтогов.Вставить("Действие", "ЗаполнитьАгрегаты"); ПараметрыИтогов.Вставить("МассивСтрок", МассивДействий); ПараметрыИтогов.Вставить("Поле", ""); ПараметрыИтогов.Вставить("Значение1", Неопределено); ПараметрыИтогов.Вставить("Значение2", Неопределено); - ПараметрыИтогов.Вставить("ТекстСообщенияОбОшибке", НСтр("ru='Не удалось заполнить агрегаты.'")); + ПараметрыИтогов.Вставить("ТекстСообщенияОбОшибке", НСтр("ru = 'Не удалось заполнить агрегаты.'")); ИзменитьАгрегатыКлиент(ПараметрыИтогов, Ложь); @@ -601,14 +601,14 @@ Процедура ПересчитатьИтоги(Команда) ПараметрыИтогов = Новый Структура; - ПараметрыИтогов.Вставить("ОбрабатыватьЗаголовок", НСтр("ru='Пересчет итогов ...'")); - ПараметрыИтогов.Вставить("ПослеПроцесса", НСтр("ru='Пересчет итогов завершен.'")); + ПараметрыИтогов.Вставить("ОбрабатыватьЗаголовок", НСтр("ru = 'Пересчет итогов ...'")); + ПараметрыИтогов.Вставить("ПослеПроцесса", НСтр("ru = 'Пересчет итогов завершен.'")); ПараметрыИтогов.Вставить("Действие", "ПересчитатьИтоги"); ПараметрыИтогов.Вставить("МассивСтрок", Элементы.СписокИтогов.ВыделенныеСтроки); ПараметрыИтогов.Вставить("Поле", "Наименование"); ПараметрыИтогов.Вставить("Значение1", Ложь); ПараметрыИтогов.Вставить("Значение2", Неопределено); - ПараметрыИтогов.Вставить("ТекстСообщенияОбОшибке", НСтр("ru='Не удалось пересчитать итоги.'")); + ПараметрыИтогов.Вставить("ТекстСообщенияОбОшибке", НСтр("ru = 'Не удалось пересчитать итоги.'")); УправлениеИтогами(ПараметрыИтогов); @@ -618,14 +618,14 @@ Процедура ПересчитатьТекущиеИтоги(Команда) ПараметрыИтогов = Новый Структура; - ПараметрыИтогов.Вставить("ОбрабатыватьЗаголовок", НСтр("ru='Пересчет текущих итогов ...'")); - ПараметрыИтогов.Вставить("ПослеПроцесса", НСтр("ru='Пересчет текущих итогов завершен.'")); + ПараметрыИтогов.Вставить("ОбрабатыватьЗаголовок", НСтр("ru = 'Пересчет текущих итогов ...'")); + ПараметрыИтогов.Вставить("ПослеПроцесса", НСтр("ru = 'Пересчет текущих итогов завершен.'")); ПараметрыИтогов.Вставить("Действие", "ПересчитатьТекущиеИтоги"); ПараметрыИтогов.Вставить("МассивСтрок", Элементы.СписокИтогов.ВыделенныеСтроки); ПараметрыИтогов.Вставить("Поле", "Наименование"); ПараметрыИтогов.Вставить("Значение1", Ложь); ПараметрыИтогов.Вставить("Значение2", Неопределено); - ПараметрыИтогов.Вставить("ТекстСообщенияОбОшибке", НСтр("ru='Не удалось пересчитать текущие итоги.'")); + ПараметрыИтогов.Вставить("ТекстСообщенияОбОшибке", НСтр("ru = 'Не удалось пересчитать текущие итоги.'")); УправлениеИтогами(ПараметрыИтогов); @@ -738,20 +738,6 @@ Элемент.Оформление.УстановитьЗначениеПараметра("ЦветФона", WebЦвета.СеребристоСерый); - // - - Элемент = УсловноеОформление.Элементы.Добавить(); - - ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); - ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.АгрегатыПоРегистрам.Имя); - - ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); - ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("АгрегатыПоРегистрам.ПостроениеОптимально"); - ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; - ОтборЭлемента.ПравоеЗначение = Ложь; - - Элемент.Оформление.УстановитьЗначениеПараметра("Шрифт", Новый Шрифт(WindowsШрифты.ШрифтДиалоговИМеню, , , Истина, Ложь, Ложь, Ложь, )); - КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// @@ -763,14 +749,14 @@ Если Ответ = КодВозвратаДиалога.Да Тогда ПараметрыИтогов = Новый Структура; - ПараметрыИтогов.Вставить("ОбрабатыватьЗаголовок", НСтр("ru='Очистка агрегатов ...'")); - ПараметрыИтогов.Вставить("ПослеПроцесса", НСтр("ru='Очистка агрегатов завершена'")); + ПараметрыИтогов.Вставить("ОбрабатыватьЗаголовок", НСтр("ru = 'Очистка агрегатов ...'")); + ПараметрыИтогов.Вставить("ПослеПроцесса", НСтр("ru = 'Очистка агрегатов завершена'")); ПараметрыИтогов.Вставить("Действие", "ОчиститьАгрегаты"); ПараметрыИтогов.Вставить("МассивСтрок", Элементы.АгрегатыПоРегистрам.ВыделенныеСтроки); ПараметрыИтогов.Вставить("Поле", "Наименование"); ПараметрыИтогов.Вставить("Значение1", Неопределено); ПараметрыИтогов.Вставить("Значение2", Неопределено); - ПараметрыИтогов.Вставить("ТекстСообщенияОбОшибке", НСтр("ru='Не удалось очистить агрегаты.'")); + ПараметрыИтогов.Вставить("ТекстСообщенияОбОшибке", НСтр("ru = 'Не удалось очистить агрегаты.'")); ИзменитьАгрегатыКлиент(ПараметрыИтогов); @@ -788,14 +774,14 @@ ПериодПерерасчетаРегистров = ВыбранноеЗначение; ПараметрыИтогов = Новый Структура; - ПараметрыИтогов.Вставить("ОбрабатыватьЗаголовок", НСтр("ru='Пересчет итогов за период...'")); - ПараметрыИтогов.Вставить("ПослеПроцесса", НСтр("ru='Пересчет итогов за период завершен.'")); + ПараметрыИтогов.Вставить("ОбрабатыватьЗаголовок", НСтр("ru = 'Пересчет итогов за период...'")); + ПараметрыИтогов.Вставить("ПослеПроцесса", НСтр("ru = 'Пересчет итогов за период завершен.'")); ПараметрыИтогов.Вставить("Действие", "ПересчитатьИтогиЗаПериод"); ПараметрыИтогов.Вставить("МассивСтрок", Элементы.СписокИтогов.ВыделенныеСтроки); ПараметрыИтогов.Вставить("Поле", "Наименование"); ПараметрыИтогов.Вставить("Значение1", ПериодПерерасчетаРегистров.ДатаНачала); ПараметрыИтогов.Вставить("Значение2", ПериодПерерасчетаРегистров.ДатаОкончания); - ПараметрыИтогов.Вставить("ТекстСообщенияОбОшибке", НСтр("ru='Не удалось пересчитать итоги за период.'")); + ПараметрыИтогов.Вставить("ТекстСообщенияОбОшибке", НСтр("ru = 'Не удалось пересчитать итоги за период.'")); УправлениеИтогами(ПараметрыИтогов); @@ -1007,18 +993,18 @@ КонецЦикла; Если Не ЕстьРегистрыДляОбработки Тогда - ПоказатьПредупреждение(, НСтр("ru='Отсутствуют регистры, для которых можно выполнить данную операцию.'")); + ПоказатьПредупреждение(, НСтр("ru = 'Отсутствуют регистры, для которых можно выполнить данную операцию.'")); Возврат; КонецЕсли; ОбновитьСписокИтоговНаСервере(); ТекстСостояния = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru='Пересчитаны (%1 из %2)'"), + НСтр("ru = 'Пересчитаны (%1 из %2)'"), КоличествоОбработанныхСтрок, Выбранные.Количество()); - Состояние(ПараметрыИтогов.ПослеПроцесса + ТекстСостояния); + Состояние(ПараметрыИтогов.ПослеПроцесса + Символы.ПС + ТекстСостояния); КонецПроцедуры @@ -1031,7 +1017,7 @@ КонецЕсли; Иначе Если АгрегатыПоРегистрам.Количество() = 0 Тогда - ПоказатьПредупреждение(, НСтр("ru='Отсутствуют регистры, для которых можно выполнить данную операцию.'")); + ПоказатьПредупреждение(, НСтр("ru = 'Отсутствуют регистры, для которых можно выполнить данную операцию.'")); Возврат; КонецЕсли; КонецЕсли; diff --git a/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ФормаПараметровПерестроения/Module.bsl b/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ФормаПараметровПерестроения/Module.bsl index 6a3131b90..983cfb550 100644 --- a/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ФормаПараметровПерестроения/Module.bsl +++ b/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ФормаПараметровПерестроения/Module.bsl @@ -15,8 +15,8 @@ МинимальныйЭффект = Параметры.МинимальныйЭффект; Элементы.МинимальныйЭффект.Видимость = Параметры.РежимПерестроения; Заголовок = ?(Параметры.РежимПерестроения, - НСтр("ru='Параметры перестроения'"), - НСтр("ru='Параметр расчета оптимальных агрегатов'")); + НСтр("ru = 'Параметры перестроения'"), + НСтр("ru = 'Параметр расчета оптимальных агрегатов'")); КонецПроцедуры diff --git a/SSL/src/DataProcessors/УстановкаОбновлений/Forms/НастройкаРезервнойКопии/Form.form b/SSL/src/DataProcessors/УстановкаОбновлений/Forms/НастройкаРезервнойКопии/Form.form index e72e02c45..1a191eced 100644 --- a/SSL/src/DataProcessors/УстановкаОбновлений/Forms/НастройкаРезервнойКопии/Form.form +++ b/SSL/src/DataProcessors/УстановкаОбновлений/Forms/НастройкаРезервнойКопии/Form.form @@ -129,10 +129,6 @@ true - - <key>ru</key> - <value>Отступ</value> - ОтступExtendedTooltip 43 @@ -411,10 +407,6 @@ true - - <key>ru</key> - <value>Страницы надписи ручного отката</value> - СтраницыНадписиРучногоОткатаExtendedTooltip 51 @@ -435,10 +427,6 @@ true - - <key>ru</key> - <value>Вертикальная группа 1</value> - ВертикальнаяГруппа1ExtendedTooltip 49 @@ -559,10 +547,6 @@ true - - <key>ru</key> - <value>Панель информация</value> - ПанельИнформацияExtendedTooltip 45 diff --git a/SSL/src/DataProcessors/УстановкаОбновлений/Forms/ОбновлениеНеПодходит/Form.form b/SSL/src/DataProcessors/УстановкаОбновлений/Forms/ОбновлениеНеПодходит/Form.form index 22f0db99a..d4441ea27 100644 --- a/SSL/src/DataProcessors/УстановкаОбновлений/Forms/ОбновлениеНеПодходит/Form.form +++ b/SSL/src/DataProcessors/УстановкаОбновлений/Forms/ОбновлениеНеПодходит/Form.form @@ -79,10 +79,6 @@ true - - <key>ru</key> - <value>Предупреждение</value> - ГруппаПредупреждениеРасширеннаяПодсказка 23 diff --git a/SSL/src/DataProcessors/УстановкаОбновлений/Forms/Форма/Form.form b/SSL/src/DataProcessors/УстановкаОбновлений/Forms/Форма/Form.form index ad0280d42..205451c58 100644 --- a/SSL/src/DataProcessors/УстановкаОбновлений/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/УстановкаОбновлений/Forms/Форма/Form.form @@ -1,18 +1,22 @@ - ПанельИнформацииОбОшибках - 1166 + ПанельПредупреждений + 1235 - КартинкаЕстьОшибки + КартинкаПредупреждения 1168 + + <key>ru</key> + <value>Картинка предупреждения</value> + true true true - КартинкаЕстьОшибкиРасширеннаяПодсказка + КартинкаПредупрежденияРасширеннаяПодсказка 1170 Label true @@ -22,7 +26,7 @@ - КартинкаЕстьОшибкиКонтекстноеМеню + КартинкаПредупрежденияКонтекстноеМеню 1169 true @@ -35,27 +39,100 @@ - - НадписьЕстьОшибки - 1175 - - <key>ru</key> - <value>В программе выявлены проблемы ведения учета, которые рекомендуется устранить до обновления. + <items xsi:type="form:FormGroup"> + <name>КолонкаПредупреждения</name> + <id>1166</id> + <items xsi:type="form:Decoration"> + <name>НадписьВыявленныеПроблемы</name> + <id>1175</id> + <title> + <key>ru</key> + <value>В программе выявлены проблемы ведения учета, которые рекомендуется устранить до обновления. <link Перейти к отчету по проблемам>Перейти к отчету по проблемам</></value> - + + true + true + + true + + Button + + НадписьВыявленныеПроблемыРасширеннаяПодсказка + 1177 + + <key>ru</key> + <value>Одна из частых причин различных блокирующих ошибок при обновлении на новую версию программы - это проблемы ведения учета, такие как, битые ссылки на несуществующие объекты, незаполненные обязательные реквизиты документов и другие. В таком случае, рекомендуется устранять их перед началом обновления, для этого перейти к отчету и следовать приведенным в нем рекомендациям.</value> + + Label + true + true + + Left + + + + НадписьВыявленныеПроблемыКонтекстноеМеню + 1176 + true + + true + Label + true + false + + + URLProcessing + НадписьВыявленныеПроблемыОбработкаНавигационнойСсылки + + Left + + + + НадписьЕстьРасширения + 1218 + + <key>ru</key> + <value>Перед выполнением обновления убедитесь, что установленные расширения совместимы с новой версией конфигурации. +Рекомендуем предварительно выполнить обновление на резервной копии. +<link e1cib/app/ОбщаяФорма.Расширения>Перейти к списку расширений</></value> + + true + true + + true + + + НадписьЕстьРасширенияРасширеннаяПодсказка + 1220 + Label + true + true + + Left + + + + НадписьЕстьРасширенияКонтекстноеМеню + 1219 + true + + true + Label + true + false + + Left + + true true true - Button + true - НадписьЕстьОшибкиРасширеннаяПодсказка - 1177 - - <key>ru</key> - <value>Одна из частых причин различных блокирующих ошибок при обновлении на новую версию программы - это проблемы ведения учета, такие как, битые ссылки на несуществующие объекты, незаполненные обязательные реквизиты документов и другие. В таком случае, рекомендуется устранять их перед началом обновления, для этого перейти к отчету и следовать приведенным в нем рекомендациям.</value> - + КолонкаПредупрежденияРасширеннаяПодсказка + 1167 Label true true @@ -63,21 +140,14 @@ Left - - НадписьЕстьОшибкиКонтекстноеМеню - 1176 - true - - true - Label - true - false - - - URLProcessing - НадписьВыявленныеПроблемыОбработкаНавигационнойСсылки - - Left + UsualGroup + + Vertical + Auto + true + true + Auto + Auto true @@ -85,14 +155,9 @@ true - - <key>ru</key> - <value>Панель информации об ошибках</value> - - true - ПанельИнформацииОбОшибкахРасширеннаяПодсказка - 1167 + ПанельПредупрежденийРасширеннаяПодсказка + 1236 Label true true @@ -104,7 +169,6 @@ HorizontalIfPossible Auto - NormalSeparation true true Auto @@ -112,23 +176,19 @@ - ПанельИнформацииОРасширениях - 1213 + ПанельИнформации + 1227 - КартинкаЕстьРасширения - 1215 - - <key>ru</key> - <value>Картинка есть расширения</value> - + КартинкаИнформация + 1229 true true true - КартинкаЕстьРасширенияРасширеннаяПодсказка - 1217 + КартинкаИнформацияРасширеннаяПодсказка + 1231 Label true true @@ -137,36 +197,40 @@ - КартинкаЕстьРасширенияКонтекстноеМеню - 1216 + КартинкаИнформацияКонтекстноеМеню + 1230 true true true - false - CommonPicture.Предупреждение32 + CommonPicture.Информация32 + AsFileRef - НадписьЕстьРасширения - 1218 + НадписьИнформация + 1232 <key>ru</key> - <value>Перед выполнением обновления убедитесь, что установленные расширения совместимы с новой версией конфигурации. -Рекомендуем предварительно выполнить обновление на резервной копии. -<link e1cib/app/ОбщаяФорма.Расширения>Перейти к списку расширений</></value> + <value>Проверка ведения учета в программе давно не выполнялась. +<link ПерейтиКСпискуПроверок>Рекомендуется провести проверку до обновления</></value> true true true + Button - НадписьЕстьРасширенияРасширеннаяПодсказка - 1220 + НадписьИнформацияРасширеннаяПодсказка + 1234 + + <key>ru</key> + <value>1</value> + Label true true @@ -175,15 +239,19 @@ - НадписьЕстьРасширенияКонтекстноеМеню - 1219 + НадписьИнформацияКонтекстноеМеню + 1233 true true Label + true true - false + + URLProcessing + НадписьИнформацияОбработкаНавигационнойСсылки + Left @@ -192,14 +260,9 @@ true - - <key>ru</key> - <value>Панель информации о расширениях</value> - - true - ПанельИнформацииОРасширенияхРасширеннаяПодсказка - 1214 + ПанельИнформацииРасширеннаяПодсказка + 1228 Label true true @@ -209,8 +272,8 @@ UsualGroup + HorizontalIfPossible Auto - NormalSeparation true true Auto @@ -339,10 +402,6 @@ true - - <key>ru</key> - <value>Отступ</value> - ОтступExtendedTooltip 748 @@ -536,10 +595,6 @@ true - - <key>ru</key> - <value>Страницы надписи измененной конфигурации</value> - СтраницыНадписиИзмененнойКонфигурацииExtendedTooltip 752 @@ -560,10 +615,6 @@ true - - <key>ru</key> - <value>Панель обновление из основной конфигурации</value> - ПанельОбновлениеИзОсновнойКонфигурацииExtendedTooltip 750 @@ -652,10 +703,6 @@ true - - <key>ru</key> - <value>Поиск и установка обновлений</value> - true ГруппаПоискИУстановкаОбновленийРасширеннаяПодсказка @@ -940,10 +987,6 @@ true - - <key>ru</key> - <value>Страницы способ обновления файл</value> - СтраницыСпособОбновленияФайлРасширеннаяПодсказка 1043 @@ -1310,10 +1353,6 @@ true - - <key>ru</key> - <value>Панель активные пользователи</value> - ПанельАктивныеПользователиExtendedTooltip 856 @@ -1334,10 +1373,6 @@ true - - <key>ru</key> - <value>Соединений</value> - ГруппаСоединенийExtendedTooltip 854 @@ -1441,10 +1476,6 @@ true - - <key>ru</key> - <value>Резервная копия</value> - true ГруппаРезервнаяКопияExtendedTooltip @@ -1657,10 +1688,6 @@ true - - <key>ru</key> - <value>Отступ четыре</value> - ОтступЧетыреExtendedTooltip 890 @@ -1816,10 +1843,6 @@ true - - <key>ru</key> - <value>Панель почта</value> - ПанельПочтаExtendedTooltip 896 @@ -2154,10 +2177,6 @@ true - - <key>ru</key> - <value>Панель активные пользователи 1</value> - ПанельАктивныеПользователи1ExtendedTooltip 903 @@ -2178,10 +2197,6 @@ true - - <key>ru</key> - <value>Соединений 1</value> - ГруппаСоединений1ExtendedTooltip 901 @@ -2233,10 +2248,6 @@ true - - <key>ru</key> - <value>Страницы информации перезагрузки</value> - СтраницыИнформацииПерезагрузкиРасширеннаяПодсказка 892 @@ -2370,10 +2381,6 @@ true - - <key>ru</key> - <value>Дополнительная информация</value> - ГруппаДополнительнаяИнформацияРасширеннаяПодсказка 1091 @@ -2399,10 +2406,6 @@ true - - <key>ru</key> - <value>Резервная копия сервер</value> - ГруппаРезервнаяКопияСерверExtendedTooltip 911 @@ -2566,10 +2569,6 @@ true - - <key>ru</key> - <value>Сообщение</value> - ГруппаСообщениеРасширеннаяПодсказка 1209 @@ -2628,10 +2627,6 @@ true - - <key>ru</key> - <value>Ошибка установки исправлений</value> - ОшибкаУстановкиИсправленийРасширеннаяПодсказка 1201 @@ -2765,10 +2760,6 @@ true - - <key>ru</key> - <value>Перезапустить отступ</value> - ГруппаПерезапуститьОтступРасширеннаяПодсказка 1186 @@ -2837,10 +2828,6 @@ true - - <key>ru</key> - <value>Активные пользователи</value> - ГруппаАктивныеПользователиРасширеннаяПодсказка 1194 @@ -2867,10 +2854,6 @@ true - - <key>ru</key> - <value>Исправления установлены</value> - ИсправленияУстановленыРасширеннаяПодсказка 1181 @@ -3003,10 +2986,6 @@ true - - <key>ru</key> - <value>Обновление производится в главном узле</value> - ОбновлениеПроизводитсяВГлавномУзлеExtendedTooltip 1131 @@ -3027,121 +3006,20 @@ Auto - - ГруппаТекущаяВерсия - 1138 - - Декорация30 - 1140 - - <key>ru</key> - <value>Текущая версия программы:</value> - - true - true - - true - - - Декорация30ExtendedTooltip - 1142 - Label - true - true - - Left - - - - Декорация30КонтекстноеМеню - 1141 - true - - Label - true - false - - Left - - - - НадписьВерсияТекущейКонфигурации - 1143 - - <key>ru</key> - <value><Версия текущей конфигурации></value> - - true - true - - true - - - НадписьВерсияТекущейКонфигурацииExtendedTooltip - 1145 - Label - true - true - - Left - - - - НадписьВерсияТекущейКонфигурацииКонтекстноеМеню - 1144 - true - - Label - true - false - - Left - - + + ВерсияТекущейКонфигурации + 1224 true true true - - <key>ru</key> - <value>Текущая версия</value> - + + ВерсияТекущейКонфигурации + - ГруппаТекущаяВерсияExtendedTooltip - 1139 - Label - true - true - - Left - - - UsualGroup - - HorizontalIfPossible - Auto - true - true - Auto - Auto - - - - НадписьОписаниеТекущейКонфигурации - 1149 - - <key>ru</key> - <value><Описание текущей конфигурации></value> - - true - true - - true - - - НадписьОписаниеТекущейКонфигурацииExtendedTooltip - 1151 + ВерсияТекущейКонфигурацииРасширеннаяПодсказка + 1226 Label true true @@ -3150,15 +3028,55 @@ - НадписьОписаниеТекущейКонфигурацииКонтекстноеМеню - 1150 + ВерсияТекущейКонфигурацииКонтекстноеМеню + 1225 true - Label - true - false - - Left + LabelField + Enter + true + Left + true + + true + true + + + + ОписаниеТекущейКонфигурации + 1221 + true + true + + true + + + ОписаниеТекущейКонфигурации + + None + + ОписаниеТекущейКонфигурацииРасширеннаяПодсказка + 1223 + Label + true + true + + Left + + + + ОписаниеТекущейКонфигурацииКонтекстноеМеню + 1222 + true + + LabelField + Enter + true + Left + true + + true + true true @@ -3166,10 +3084,6 @@ true - - <key>ru</key> - <value>Результат поиска обновления</value> - ГруппаРезультатПоискаОбновленияExtendedTooltip 1103 @@ -3252,10 +3166,6 @@ true - - <key>ru</key> - <value>Страницы помощника</value> - СтраницыПомощникаExtendedTooltip 657 @@ -3309,10 +3219,6 @@ true - - <key>ru</key> - <value>Командная панель слева</value> - КоманднаяПанельСлеваРасширеннаяПодсказка 1006 @@ -3399,10 +3305,6 @@ true - - <key>ru</key> - <value>Командная панель справа</value> - КоманднаяПанельСправаРасширеннаяПодсказка 1011 @@ -3424,10 +3326,6 @@ true - - <key>ru</key> - <value>Командная панель</value> - true КоманднаяПанельРасширеннаяПодсказка @@ -3711,6 +3609,38 @@ true + + ВерсияТекущейКонфигурации + + <key>ru</key> + <value>Текущая версия программы</value> + + 3 + + String + + + + true + + + true + + + + ОписаниеТекущейКонфигурации + 4 + + String + + + + true + + + true + + Назад diff --git a/SSL/src/DataProcessors/УстановкаОбновлений/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/УстановкаОбновлений/Forms/Форма/Module.bsl index 6e30907d7..def94322f 100644 --- a/SSL/src/DataProcessors/УстановкаОбновлений/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/УстановкаОбновлений/Forms/Форма/Module.bsl @@ -28,8 +28,6 @@ Возврат; // Отказ устанавливается в ПриОткрытии(). КонецЕсли; - СтандартныеПодсистемыСервер.УстановитьОтображениеЗаголовковГрупп(ЭтотОбъект); - ЭтоФайловаяБаза = ОбщегоНазначения.ИнформационнаяБазаФайловая(); ЭтоПодчиненныйУзелРИБ = ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ(); @@ -43,8 +41,11 @@ Элементы.ПанельПочта.Видимость = Ложь; КонецЕсли; - Элементы.ПанельИнформацииОбОшибках.Видимость = ЕстьПроблемыСистемныхПроверок(); - Элементы.ПанельИнформацииОРасширениях.Видимость = ОбновлениеКонфигурации.ПредупреждатьОНаличииРасширений(); + Элементы.НадписьВыявленныеПроблемы.Видимость = ЕстьПроблемыСистемныхПроверок(); + Элементы.НадписьЕстьРасширения.Видимость = ОбновлениеКонфигурации.ПредупреждатьОНаличииРасширений(); + + Элементы.ПанельПредупреждений.Видимость = Элементы.НадписьВыявленныеПроблемы.Видимость + Или Элементы.НадписьЕстьРасширения.Видимость; // Проверяем каждый раз при открытии помощника. КонфигурацияИзменена = КонфигурацияИзменена(); @@ -80,10 +81,33 @@ ЭтоБазоваяВерсия = СтандартныеПодсистемыСервер.ЭтоБазоваяВерсияКонфигурации(); Если ЭтоБазоваяВерсия Тогда - ЗаголовокВариантаВыбора = "&" + НСтр("ru = 'Укажите файл обновления'"); + ЗаголовокВариантаВыбора = НСтр("ru = 'Укажите файл обновления'"); Элементы.ПереключательНуженФайлОбновления.СписокВыбора[1].Представление = ЗаголовокВариантаВыбора; КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтрольВеденияУчета") Тогда + ЗаполнитьПанельИнформации(); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ЗаполнитьПанельИнформации() + + МодульКонтрольВеденияУчетаСлужебный = ОбщегоНазначения.ОбщийМодуль("КонтрольВеденияУчетаСлужебный"); + Информация = МодульКонтрольВеденияУчетаСлужебный.ИнформацияОПоследнейПроверкеВеденияУчета(); + Если Информация.ПредупреждатьОНеобходимостиПовторнойПроверки Тогда + Подсказка = НСтр("ru = 'Последняя проверка выполнялась %1'"); + Если ЗначениеЗаполнено(Информация.ДатаПоследнейПроверки) Тогда + Подсказка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Подсказка, Информация.ДатаПоследнейПроверки); + Иначе + Подсказка = ""; + КонецЕсли; + Элементы.НадписьИнформация.РасширеннаяПодсказка.Заголовок = Подсказка; + Иначе + Элементы.ПанельИнформации.Видимость = Ложь; + КонецЕсли; + КонецПроцедуры &НаКлиенте @@ -136,9 +160,9 @@ Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) Если ИмяСобытия = "ЛегальностьПолученияОбновлений" И Не Параметр Тогда - ОтработатьНажатиеКнопкиНазад(); - + ИначеЕсли ИмяСобытия = "КонтрольВеденияУчета_УспешнаяПроверка" Тогда + ЗаполнитьПанельИнформации(); КонецЕсли; КонецПроцедуры @@ -263,6 +287,18 @@ КонецПроцедуры +&НаКлиенте +Процедура НадписьИнформацияОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.КонтрольВеденияУчета") Тогда + МодульКонтрольВеденияУчетаСлужебныйКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("КонтрольВеденияУчетаСлужебныйКлиент"); + МодульКонтрольВеденияУчетаСлужебныйКлиент.ОткрытьСписокПроверокВеденияУчета(); + КонецЕсли; + +КонецПроцедуры + &НаСервере Функция ЕстьПроблемыСистемныхПроверок() @@ -329,8 +365,8 @@ ФункцияКнопкиДалее = Ложь; ФункцияКнопкиЗакрыть = Ложь; ДоступностьКнопкиДалее = Ложь; - Элементы.НадписьОписаниеТекущейКонфигурации.Заголовок = СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиента().СинонимКонфигурации; - Элементы.НадписьВерсияТекущейКонфигурации.Заголовок = СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиента().ВерсияКонфигурации; + ОписаниеТекущейКонфигурации = СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиента().СинонимКонфигурации; + ВерсияТекущейКонфигурации = СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиента().ВерсияКонфигурации; Если Не СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиента().ЭтоГлавныйУзел Тогда ДоступностьКнопкиНазад = Ложь; diff --git a/SSL/src/DataProcessors/УстановкаОбновлений/Templates/МакетФайлаОбновленияКонфигурации/Template.txt b/SSL/src/DataProcessors/УстановкаОбновлений/Templates/МакетФайлаОбновленияКонфигурации/Template.txt index 8b99f50f6..1a622affc 100644 --- a/SSL/src/DataProcessors/УстановкаОбновлений/Templates/МакетФайлаОбновленияКонфигурации/Template.txt +++ b/SSL/src/DataProcessors/УстановкаОбновлений/Templates/МакетФайлаОбновленияКонфигурации/Template.txt @@ -248,9 +248,9 @@ function doSetResult (success) { } } if (success) { - log('Обновление выполнено', false) + log('ОбновлениеВыполненоУспешно (обновление выполнено)', false) } else { - log('Обновление не выполнено', true) + log('ОбновлениеНеВыполнено (обновление не выполнено)', true) } return res } diff --git a/SSL/src/DefinedTypes/ВладелецГрафикаРаботы/ВладелецГрафикаРаботы.mdo b/SSL/src/DefinedTypes/ВладелецГрафикаРаботы/ВладелецГрафикаРаботы.mdo new file mode 100644 index 000000000..a77b2dca6 --- /dev/null +++ b/SSL/src/DefinedTypes/ВладелецГрафикаРаботы/ВладелецГрафикаРаботы.mdo @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:DefinedType xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="195ea1f8-3e38-4254-a33d-c87424b8f7dc"> + <producedTypes> + <containerType typeId="8e203f23-ec2f-4bd8-bd93-977d44280971" valueTypeId="6869da4b-5fec-4dda-ac73-9ad55aefbf75"/> + </producedTypes> + <name>ВладелецГрафикаРаботы</name> + <synonym> + <key>ru</key> + <value>Владелец графика работы</value> + </synonym> + <type> + <types>String</types> + <stringQualifiers> + <length>10</length> + </stringQualifiers> + </type> +</mdclass:DefinedType> diff --git a/SSL/src/DefinedTypes/ВладелецДополнительныхСведений/ВладелецДополнительныхСведений.mdo b/SSL/src/DefinedTypes/ВладелецДополнительныхСведений/ВладелецДополнительныхСведений.mdo index f812cd21f..d7d55ce4e 100644 --- a/SSL/src/DefinedTypes/ВладелецДополнительныхСведений/ВладелецДополнительныхСведений.mdo +++ b/SSL/src/DefinedTypes/ВладелецДополнительныхСведений/ВладелецДополнительныхСведений.mdo @@ -15,8 +15,10 @@ <types>CatalogRef.ВнешниеПользователи</types> <types>DocumentRef.ЭлектронноеПисьмоВходящее</types> <types>DocumentRef.ТелефонныйЗвонок</types> + <types>DocumentRef.СогласиеНаОбработкуПерсональныхДанных</types> <types>DocumentRef.Встреча</types> <types>CatalogRef.Файлы</types> + <types>DocumentRef.ОтзывСогласияНаОбработкуПерсональныхДанных</types> <types>DocumentRef.СообщениеSMS</types> <types>CatalogRef.Пользователи</types> </type> diff --git a/SSL/src/DefinedTypes/ВладелецЗначенийКлючейДоступаНаборЗаписей/ВладелецЗначенийКлючейДоступаНаборЗаписей.mdo b/SSL/src/DefinedTypes/ВладелецЗначенийКлючейДоступаНаборЗаписей/ВладелецЗначенийКлючейДоступаНаборЗаписей.mdo index 1ca200cf8..be60bae90 100644 --- a/SSL/src/DefinedTypes/ВладелецЗначенийКлючейДоступаНаборЗаписей/ВладелецЗначенийКлючейДоступаНаборЗаписей.mdo +++ b/SSL/src/DefinedTypes/ВладелецЗначенийКлючейДоступаНаборЗаписей/ВладелецЗначенийКлючейДоступаНаборЗаписей.mdo @@ -13,9 +13,11 @@ <types>InformationRegisterRecordSet.ДанныеБизнесПроцессов</types> <types>InformationRegisterRecordSet.НастройкиВариантовОтчетов</types> <types>InformationRegisterRecordSet.ПредметыПапкиВзаимодействий</types> + <types>InformationRegisterRecordSet.ДатыЗапретаИзменения</types> <types>InformationRegisterRecordSet.НастройкиУчетныхЗаписейЭлектроннойПочты</types> <types>InformationRegisterRecordSet.ДополнительныеСведения</types> <types>InformationRegisterRecordSet.ИсполнителиЗадач</types> <types>InformationRegisterRecordSet.РезультатыПроверкиУчета</types> + <types>InformationRegisterRecordSet.СоставыГруппПользователей</types> </type> </mdclass:DefinedType> diff --git a/SSL/src/DefinedTypes/МестоХраненияФункциональныхОпций/МестоХраненияФункциональныхОпций.mdo b/SSL/src/DefinedTypes/МестоХраненияФункциональныхОпций/МестоХраненияФункциональныхОпций.mdo index fcd4beacc..1ae71c49c 100644 --- a/SSL/src/DefinedTypes/МестоХраненияФункциональныхОпций/МестоХраненияФункциональныхОпций.mdo +++ b/SSL/src/DefinedTypes/МестоХраненияФункциональныхОпций/МестоХраненияФункциональныхОпций.mdo @@ -19,7 +19,6 @@ <types>ConstantValueManager.ИспользоватьДатуНачалаЗадач</types> <types>ConstantValueManager.ИзменятьЗаданияЗаднимЧислом</types> <types>ConstantValueManager.ИспользоватьПолнотекстовыйПоиск</types> - <types>ConstantValueManager.ИспользоватьОбщиеДополнительныеРеквизитыИСведения</types> <types>ConstantValueManager.ИспользоватьПочтовыйКлиент</types> <types>ConstantValueManager.ИспользоватьСинхронизациюДанныхВЛокальномРежиме</types> <types>ConstantValueManager.ОграничиватьДоступНаУровнеЗаписей</types> @@ -44,7 +43,6 @@ <types>ConstantValueManager.ИспользоватьСинхронизациюДанныхВМоделиСервисаСЛокальнойПрограммой</types> <types>ConstantValueManager.ИспользоватьГруппыПользователей</types> <types>ConstantValueManager.ИспользоватьПрочиеВзаимодействия</types> - <types>ConstantValueManager.ИспользоватьОбщиеДополнительныеЗначения</types> <types>ConstantValueManager.ИспользоватьПризнакРассмотрено</types> <types>ConstantValueManager.ПрефиксУзлаРаспределеннойИнформационнойБазы</types> <types>ConstantValueManager.ЗарегистрированыИзмененияДанных</types> diff --git a/SSL/src/DefinedTypes/ОбъектСДополнительнымиКомандами/ОбъектСДополнительнымиКомандами.mdo b/SSL/src/DefinedTypes/ОбъектСДополнительнымиКомандами/ОбъектСДополнительнымиКомандами.mdo index 4b404dacd..fd6769270 100644 --- a/SSL/src/DefinedTypes/ОбъектСДополнительнымиКомандами/ОбъектСДополнительнымиКомандами.mdo +++ b/SSL/src/DefinedTypes/ОбъектСДополнительнымиКомандами/ОбъектСДополнительнымиКомандами.mdo @@ -9,6 +9,7 @@ <value>Объект с дополнительными командами</value> </synonym> <type> + <types>DocumentRef.Анкета</types> <types>CatalogRef.ИдентификаторыОбъектовМетаданных</types> </type> </mdclass:DefinedType> diff --git a/SSL/src/DefinedTypes/ПолеРегистраКлючейДоступаКРегистрам/ПолеРегистраКлючейДоступаКРегистрам.mdo b/SSL/src/DefinedTypes/ПолеРегистраКлючейДоступаКРегистрам/ПолеРегистраКлючейДоступаКРегистрам.mdo index 9bd736dde..334d0e835 100644 --- a/SSL/src/DefinedTypes/ПолеРегистраКлючейДоступаКРегистрам/ПолеРегистраКлючейДоступаКРегистрам.mdo +++ b/SSL/src/DefinedTypes/ПолеРегистраКлючейДоступаКРегистрам/ПолеРегистраКлючейДоступаКРегистрам.mdo @@ -11,10 +11,13 @@ <type> <types>CatalogRef.ВнешниеПользователи</types> <types>CatalogRef.ИдентификаторыОбъектовРасширений</types> + <types>CatalogRef.ГруппыВнешнихПользователей</types> + <types>CatalogRef.ГруппыПользователей</types> <types>EnumRef.ДополнительныеЗначенияДоступа</types> <types>ChartOfCharacteristicTypesRef.ДополнительныеРеквизитыИСведения</types> <types>CatalogRef.ВариантыОтчетов</types> <types>CatalogRef.Пользователи</types> + <types>EnumRef.ВидыНазначенияДатЗапрета</types> <types>CatalogRef.УчетныеЗаписиЭлектроннойПочты</types> <types>CatalogRef.ИдентификаторыОбъектовМетаданных</types> </type> diff --git a/SSL/src/DefinedTypes/ПредметЗадачи/ПредметЗадачи.mdo b/SSL/src/DefinedTypes/ПредметЗадачи/ПредметЗадачи.mdo index d8f83581c..bbb9fe4bc 100644 --- a/SSL/src/DefinedTypes/ПредметЗадачи/ПредметЗадачи.mdo +++ b/SSL/src/DefinedTypes/ПредметЗадачи/ПредметЗадачи.mdo @@ -9,6 +9,7 @@ <value>Предмет задачи</value> </synonym> <type> + <types>TaskRef.ЗадачаИсполнителя</types> <types>CatalogRef.Файлы</types> <types>CatalogRef.Пользователи</types> </type> diff --git a/SSL/src/DocumentJournals/Взаимодействия/Forms/ПараметрыЭлектронногоПисьма/Form.form b/SSL/src/DocumentJournals/Взаимодействия/Forms/ПараметрыЭлектронногоПисьма/Form.form index 8fb4f2570..c134656ff 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Forms/ПараметрыЭлектронногоПисьма/Form.form +++ b/SSL/src/DocumentJournals/Взаимодействия/Forms/ПараметрыЭлектронногоПисьма/Form.form @@ -748,6 +748,13 @@ <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> + <parameters> + <name>ЗаголовкиИнтернета</name> + <valueType> + <types>String</types> + <stringQualifiers/> + </valueType> + </parameters> <commandInterface> <navigationPanel/> <commandBar/> diff --git a/SSL/src/DocumentJournals/Взаимодействия/Forms/ПараметрыЭлектронногоПисьма/Module.bsl b/SSL/src/DocumentJournals/Взаимодействия/Forms/ПараметрыЭлектронногоПисьма/Module.bsl index 03162192e..feea6aff1 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Forms/ПараметрыЭлектронногоПисьма/Module.bsl +++ b/SSL/src/DocumentJournals/Взаимодействия/Forms/ПараметрыЭлектронногоПисьма/Module.bsl @@ -43,7 +43,7 @@ Процедура ВыбратьИЗакрыть(Результат = Неопределено, ДополнительныеПараметры = Неопределено) Экспорт Если Папка <> ТекущаяПапка Тогда - ВзаимодействияВызовСервера.УстановитьПапкуЭлектронногоПисьма(Письмо,Папка); + УстановитьПапкуЭлектронногоПисьма(); КонецЕсли; Если ТипПисьма = "ЭлектронноеПисьмоИсходящее" И ОтправленоПолучено = Дата(1,1,1) И Модифицированность Тогда @@ -61,11 +61,17 @@ КонецЕсли; Модифицированность = Ложь; - ОповеститьОВыборе(РезультатВыбора); КонецПроцедуры +&НаСервере +Процедура УстановитьПапкуЭлектронногоПисьма() + + Взаимодействия.УстановитьПапкуЭлектронногоПисьма(Письмо, Папка); + +КонецПроцедуры + &НаСервере Процедура ЗаполнитьРеквизитФормыИзПараметра(ПереданныеПараметры,ИмяПараметра,ИмяРеквизита = "") @@ -81,7 +87,6 @@ Процедура ЗаполнитьРеквизитыФормыИзПараметров(ПереданныеПараметры) ЗаполнитьРеквизитФормыИзПараметра(ПереданныеПараметры,"ВнутреннийНомер"); - ЗаполнитьРеквизитФормыИзПараметра(ПереданныеПараметры,"ЗаголовкиИнтернета"); ЗаполнитьРеквизитФормыИзПараметра(ПереданныеПараметры,"Создано"); ЗаполнитьРеквизитФормыИзПараметра(ПереданныеПараметры,"Получено","ОтправленоПолучено"); ЗаполнитьРеквизитФормыИзПараметра(ПереданныеПараметры,"Отправлено","ОтправленоПолучено"); @@ -92,6 +97,8 @@ ЗаполнитьРеквизитФормыИзПараметра(ПереданныеПараметры,"ВключатьТелоИсходногоПисьма"); ЗаполнитьРеквизитФормыИзПараметра(ПереданныеПараметры,"УчетнаяЗапись"); + ЗаголовкиИнтернета.ДобавитьСтроку(ПереданныеПараметры.ЗаголовкиИнтернета); + Папка = Взаимодействия.ПолучитьПапкуЭлектронногоПисьма(Письмо); ТекущаяПапка = Папка; @@ -101,14 +108,14 @@ Процедура УправлениеДоступностью() Если ТипПисьма = "ЭлектронноеПисьмоИсходящее" Тогда - Элементы.Заголовки.Заголовок = НСтр("ru='Идентификаторы'"); + Элементы.Заголовки.Заголовок = НСтр("ru = 'Идентификаторы'"); Если ОтправленоПолучено = Дата(1,1,1) Тогда Элементы.УведомитьОДоставке.ТолькоПросмотр = Ложь; Элементы.УведомитьОПрочтении.ТолькоПросмотр = Ложь; Элементы.ВключатьТелоИсходногоПисьма.ТолькоПросмотр = Ложь; КонецЕсли; Иначе - Элементы.ОтправленоПолучено.Заголовок = НСтр("ru='Получено'"); + Элементы.ОтправленоПолучено.Заголовок = НСтр("ru = 'Получено'"); Элементы.ВключатьТелоИсходногоПисьма.Видимость =Ложь; КонецЕсли; diff --git a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Form.form b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Form.form index 13342cf2d..fae1ebb48 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Form.form +++ b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Form.form @@ -806,17 +806,101 @@ </picture> <representationInContextMenu>Auto</representationInContextMenu> </items> - <items xsi:type="form:Button"> - <name>СписокОтветить</name> - <id>342</id> + <items xsi:type="form:FormGroup"> + <name>ГруппаОтветитьПереслать</name> + <id>919</id> + <items xsi:type="form:Button"> + <name>СписокОтветить</name> + <id>342</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <extendedTooltip> + <name>СписокОтветитьРасширеннаяПодсказка</name> + <id>606</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <commandName>Form.Command.Ответить</commandName> + <buttonImportance>Normal</buttonImportance> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <placementArea>UserCmds</placementArea> + <picture xsi:type="core:PictureRef"> + <picture>CommonPicture.ОтветитьНаЭлектронноеПисьмо</picture> + </picture> + <representationInContextMenu>Auto</representationInContextMenu> + </items> + <items xsi:type="form:Button"> + <name>СписокОтветитьВсем</name> + <id>343</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <extendedTooltip> + <name>СписокОтветитьВсемРасширеннаяПодсказка</name> + <id>607</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <commandName>Form.Command.ОтветитьВсем</commandName> + <buttonImportance>Normal</buttonImportance> + <representation>Picture</representation> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <placementArea>UserCmds</placementArea> + <representationInContextMenu>Auto</representationInContextMenu> + </items> + <items xsi:type="form:Button"> + <name>СписокПереслать</name> + <id>344</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <extendedTooltip> + <name>СписокПереслатьРасширеннаяПодсказка</name> + <id>608</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <commandName>Form.Command.Переслать</commandName> + <buttonImportance>Normal</buttonImportance> + <representation>Picture</representation> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <placementArea>UserCmds</placementArea> + <representationInContextMenu>Auto</representationInContextMenu> + </items> <visible>true</visible> <enabled>true</enabled> <userVisible> <common>true</common> </userVisible> + <title> + <key>ru</key> + <value>Ответить переслать</value> + - СписокОтветитьРасширеннаяПодсказка - 606 + ГруппаОтветитьПереслатьРасширеннаяПодсказка + 920 Label true true @@ -824,67 +908,9 @@ Left - Form.Command.Ответить - Normal - true - true - UserCmds - - CommonPicture.ОтветитьНаЭлектронноеПисьмо - - Auto - - - СписокОтветитьВсем - 343 - true - true - - true - - - СписокОтветитьВсемРасширеннаяПодсказка - 607 - Label - true - true - - Left - - - Form.Command.ОтветитьВсем - Normal - Picture - true - true - UserCmds - Auto - - - СписокПереслать - 344 - true - true - - true - - - СписокПереслатьРасширеннаяПодсказка - 608 - Label - true - true - - Left - - - Form.Command.Переслать - Normal - Picture - true - true - UserCmds - Auto + + Compact + СписокОтправитьПолучитьПочту @@ -912,6 +938,37 @@ UserCmds Auto + + ПодменюСоздатьНаОсновании + 917 + true + true + + true + + + <key>ru</key> + <value>Создать на основании</value> + + + ПодменюСоздатьНаОснованииРасширеннаяПодсказка + 918 + Label + true + true + + Left + + + Popup + + + StdPicture.InputOnBasis + + Picture + Normal + + ГруппаРассмотрено 410 @@ -1065,7 +1122,9 @@ Left - + + Compact + СписокТипВзаимодействия @@ -1077,7 +1136,7 @@ <key>ru</key> - <value>Список тип взаимодействия</value> + <value>Показывать</value> СписокТипВзаимодействияРасширеннаяПодсказка @@ -1727,7 +1786,7 @@ true 3 - true + 3 true false @@ -1776,6 +1835,7 @@ true true + true true @@ -2521,6 +2581,7 @@ true true + true true @@ -5680,7 +5741,7 @@ None ru - Наличие вложений + Есть вложения ЕстьВложенияExtendedTooltip @@ -8334,12 +8395,12 @@ Рассмотрено <key>ru</key> - <value>Раcсмотрено</value> + <value>Рассмотрено</value> 4 ru - Установить признак рассмотрено + Установить признак "Рассмотрено" true diff --git a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Module.bsl b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Module.bsl index b64a34dea..261d4c7f9 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Module.bsl @@ -1320,7 +1320,7 @@ ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; ОтборЭлемента.ПравоеЗначение = Истина; - Элемент.Оформление.УстановитьЗначениеПараметра("Шрифт", Новый Шрифт(WindowsШрифты.ШрифтДиалоговИМеню, , , Истина, Ложь, Ложь, Ложь, )); + Элемент.Оформление.УстановитьЗначениеПараметра("Шрифт", Метаданные.ЭлементыСтиля.ОсновнойЭлементСписка.Значение); // @@ -1339,7 +1339,7 @@ ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; ОтборЭлемента.ПравоеЗначение = Истина; - Элемент.Оформление.УстановитьЗначениеПараметра("Шрифт", Новый Шрифт(WindowsШрифты.ШрифтДиалоговИМеню, , , Истина, Ложь, Ложь, Ложь, )); + Элемент.Оформление.УстановитьЗначениеПараметра("Шрифт", Метаданные.ЭлементыСтиля.ОсновнойЭлементСписка.Значение); // @@ -1358,7 +1358,7 @@ ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; ОтборЭлемента.ПравоеЗначение = Истина; - Элемент.Оформление.УстановитьЗначениеПараметра("Шрифт", Новый Шрифт(WindowsШрифты.ШрифтДиалоговИМеню, , , Истина, Ложь, Ложь, Ложь, )); + Элемент.Оформление.УстановитьЗначениеПараметра("Шрифт", Метаданные.ЭлементыСтиля.ОсновнойЭлементСписка.Значение); // @@ -1377,7 +1377,7 @@ ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; ОтборЭлемента.ПравоеЗначение = Истина; - Элемент.Оформление.УстановитьЗначениеПараметра("Шрифт", Новый Шрифт(WindowsШрифты.ШрифтДиалоговИМеню, , , Истина, Ложь, Ложь, Ложь, )); + Элемент.Оформление.УстановитьЗначениеПараметра("Шрифт", Метаданные.ЭлементыСтиля.ОсновнойЭлементСписка.Значение); // @@ -1415,7 +1415,7 @@ ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Больше; ОтборЭлемента.ПравоеЗначение = 0; - Элемент.Оформление.УстановитьЗначениеПараметра("Шрифт", Новый Шрифт(WindowsШрифты.ШрифтДиалоговИМеню, , , Истина, Ложь, Ложь, Ложь, )); + Элемент.Оформление.УстановитьЗначениеПараметра("Шрифт", Метаданные.ЭлементыСтиля.ОсновнойЭлементСписка.Значение); #КонецОбласти @@ -1434,7 +1434,7 @@ ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Больше; ОтборЭлемента.ПравоеЗначение = 0; - Элемент.Оформление.УстановитьЗначениеПараметра("Шрифт", Новый Шрифт(WindowsШрифты.ШрифтДиалоговИМеню, , , Истина, Ложь, Ложь, Ложь, )); + Элемент.Оформление.УстановитьЗначениеПараметра("Шрифт", Метаданные.ЭлементыСтиля.ОсновнойЭлементСписка.Значение); #КонецОбласти @@ -1743,8 +1743,8 @@ ИначеЕсли ИмяТаблицы = "Свойства" Тогда - ИмяПоля = "Ссылка.[" + ТекущееСвойствоПанелиНавигации.Наименование + "]"; - ИмяОтбора = ТекущееСвойствоПанелиНавигации.Наименование; + ИмяПоля = "Ссылка.[" + Строка(ТекущееСвойствоПанелиНавигации) + "]"; + ИмяОтбора = Строка(ТекущееСвойствоПанелиНавигации); Если ТипЗнч(ДанныеДляОбработки.Значение) = Тип("Строка") И ДанныеДляОбработки.Значение = НСтр("ru = 'Не указан'") Тогда @@ -1895,10 +1895,16 @@ Элементы.СписокКонтекстноеМенюСкопировать.Видимость = Не ЭтоПапки И Не ТолькоПочта; Элементы.Скопировать.Видимость = Не ЭтоПапки И Не ТолькоПочта; - Элементы.СтраницыПредпросмотр.Видимость = ОтображатьОбластьЧтения; - Элементы.СписокОтображатьОбластьЧтения.Пометка = ОтображатьОбластьЧтения; + Элементы.СтраницыПредпросмотр.Видимость = ОтображатьОбластьЧтения; + Элементы.СписокОтображатьОбластьЧтения.Пометка = ОтображатьОбластьЧтения; - Элементы.ГруппаПанельНавигации.Видимость = НЕ ПанельНавигацииСкрыта; + Элементы.СписокТипВзаимодействия.Видимость = Не ЭтоПапки; + Если ЭтоПапки Тогда + ТипВзаимодействия = "Все"; + ПриИзмененииТипаСервер(Ложь); + КонецЕсли; + + Элементы.ГруппаПанельНавигации.Видимость = НЕ ПанельНавигацииСкрыта; КомандаИзменитьОтображениеПанелиНавигации = Команды.Найти("ИзменитьОтображениеПанелиНавигации"); Если ПанельНавигацииСкрыта Тогда @@ -2747,7 +2753,7 @@ Если ВзаимодействияКлиентСервер.ЯвляетсяВзаимодействием(Строка.Значение) Тогда СтрокаДетали = Строка.Строки[0]; НоваяСтрока.Представление = ?(ПустаяСтрока(СтрокаДетали.Тема), - НСтр("ru = 'Тема не указана'"), СтрокаДетали.Тема) + " " + НСтр("ru ='от'") + " " + НСтр("ru = 'Тема не указана'"), СтрокаДетали.Тема) + " " + НСтр("ru = 'от'") + " " + Формат(СтрокаДетали.Дата, "ДЛФ=DT") + ?(Строка.НеРассмотрено = 0 Или Не ИспользоватьПризнакРассмотрено, "", " (" + Строка(Строка.НеРассмотрено) + ")"); @@ -4011,18 +4017,24 @@ // СтандартныеПодсистемы.ПодключаемыеКоманды &НаКлиенте Процедура Подключаемый_ВыполнитьКоманду(Команда) - ПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Элементы.Список); + ПодключаемыеКомандыКлиент.НачатьВыполнениеКоманды(ЭтотОбъект, Команда, Элементы.Список); +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ПродолжитьВыполнениеКомандыНаСервере(ПараметрыВыполнения, ДополнительныеПараметры) Экспорт + ВыполнитьКомандуНаСервере(ПараметрыВыполнения); КонецПроцедуры &НаСервере -Процедура Подключаемый_ВыполнитьКомандуНаСервере(Контекст, Результат) Экспорт - ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, Контекст, Элементы.Список, Результат); +Процедура ВыполнитьКомандуНаСервере(ПараметрыВыполнения) + ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, ПараметрыВыполнения, Элементы.Список); КонецПроцедуры &НаКлиенте Процедура Подключаемый_ОбновитьКоманды() ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Элементы.Список); КонецПроцедуры +// Конец СтандартныеПодсистемы.ПодключаемыеКоманды &НаКлиенте Процедура ПредупреждениеОНебезопасномСодержимомОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка) @@ -4033,8 +4045,6 @@ КонецЕсли; КонецПроцедуры -// Конец СтандартныеПодсистемы.ПодключаемыеКоманды - &НаКлиентеНаСервереБезКонтекста Процедура УстановитьВидимостьПредупрежденияБезопасности(Форма) Форма.Элементы.ПредупреждениеБезопасности.Видимость = Не Форма.ЗапрещеноОтображениеНебезопасногоСодержимогоВПисьмах diff --git a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/Form.form b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/Form.form index 6161ce85a..ff6f591dd 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/Form.form +++ b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/Form.form @@ -392,7 +392,7 @@ UsualGroup - HorizontalIfPossible + AlwaysHorizontal Auto true true @@ -517,7 +517,6 @@ 20 true true - false true true true @@ -569,6 +568,59 @@ Normal + + ЕстьВложения + 254 + true + true + + true + + + Список.ЕстьВложения + + None + + ru + Есть вложения + + + ЕстьВложенияРасширеннаяПодсказка + 256 + Label + true + true + + Left + + + + ЕстьВложенияКонтекстноеМеню + 255 + true + + PictureField + Enter + true + + CommonPicture.Скрепка + + Left + + 2 + true + true + true + + CommonPicture.Скрепка + + + + 1 + + AsFileRef + + true true @@ -1049,7 +1101,9 @@ Left - + + Compact + СписокТипВзаимодействия @@ -1061,7 +1115,7 @@ <key>ru</key> - <value>Список тип взаимодействия</value> + <value>Показывать</value> СписокТипВзаимодействияРасширеннаяПодсказка @@ -2463,7 +2517,7 @@ 143 <key>ru</key> - <value>Пометить на удаление / Cнять пометку</value> + <value>Пометить на удаление / Снять пометку</value> true true @@ -2903,7 +2957,8 @@ ТИПЗНАЧЕНИЯ(ПредметыВзаимодействий.Предмет) КАК ТипПредмета, ПредметыВзаимодействий.ПапкаЭлектронногоПисьма, ЖурналДокументовВзаимодействия.Размер, - ЖурналДокументовВзаимодействия.СтатусИсходящегоПисьма + ЖурналДокументовВзаимодействия.СтатусИсходящегоПисьма, + ЖурналДокументовВзаимодействия.ЕстьВложения ИЗ ЖурналДокументов.Взаимодействия КАК ЖурналДокументовВзаимодействия ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ПредметыПапкиВзаимодействий КАК ПредметыВзаимодействий @@ -3263,7 +3318,7 @@ 1 ru - Установить признак рассмотрено + Установить признак "Рассмотрено" true @@ -3525,7 +3580,7 @@ НеРассмотрено <key>ru</key> - <value>Снять признак рассмотрено</value> + <value>Снять признак "Рассмотрено"</value> 12 diff --git a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/Module.bsl b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/Module.bsl index 0e51b2854..4674da5e5 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/Module.bsl +++ b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/Module.bsl @@ -517,7 +517,7 @@ ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; ОтборЭлемента.ПравоеЗначение = Истина; - Элемент.Оформление.УстановитьЗначениеПараметра("Шрифт", Новый Шрифт(WindowsШрифты.ШрифтДиалоговИМеню, , , Истина, Ложь, Ложь, Ложь, )); + Элемент.Оформление.УстановитьЗначениеПараметра("Шрифт", Метаданные.ЭлементыСтиля.ОсновнойЭлементСписка.Значение); // @@ -536,7 +536,7 @@ ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; ОтборЭлемента.ПравоеЗначение = Истина; - Элемент.Оформление.УстановитьЗначениеПараметра("Шрифт", Новый Шрифт(WindowsШрифты.ШрифтДиалоговИМеню, , , Истина, Ложь, Ложь, Ложь, )); + Элемент.Оформление.УстановитьЗначениеПараметра("Шрифт", Метаданные.ЭлементыСтиля.ОсновнойЭлементСписка.Значение); КонецПроцедуры @@ -1013,10 +1013,10 @@ // Получает массив, который передается в качестве параметра запроса при получении взаимодействий по контакту. // // Параметры: -// Контакт - Ссылка - контакт, для которого необходимо выполнить поиск связанных контактов. +// Контакт - Ссылка - контакт, для которого необходимо выполнить поиск связанных контактов. // // Возвращаемое значение: -// Массив +// Массив - // &НаСервере Функция ПараметрКонтактВЗависимостиОтТипа(Контакт) diff --git a/SSL/src/DocumentJournals/Взаимодействия/Templates/ИерархияВзаимодействийПредмет/Template.dcs b/SSL/src/DocumentJournals/Взаимодействия/Templates/ИерархияВзаимодействийПредмет/Template.dcs index 6b484d3fc..bd1e289ca 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Templates/ИерархияВзаимодействийПредмет/Template.dcs +++ b/SSL/src/DocumentJournals/Взаимодействия/Templates/ИерархияВзаимодействийПредмет/Template.dcs @@ -5,7 +5,7 @@ Local - ИерархияВзаимодейстий + ИерархияВзаимодействий ВзаимодействиеОснование ВзаимодействиеОснование @@ -189,8 +189,8 @@ (Взаимодействия.Дата МЕЖДУ &НачалоПериода И &КонецПериода)} - ИерархияВзаимодейстий - ИерархияВзаимодейстий + ИерархияВзаимодействий + ИерархияВзаимодействий Ссылка ВзаимодействиеОснование Неопределено diff --git a/SSL/src/DocumentJournals/СогласияНаОбработкуПерсональныхДанных/Forms/ФормаСписка/Module.bsl b/SSL/src/DocumentJournals/СогласияНаОбработкуПерсональныхДанных/Forms/ФормаСписка/Module.bsl index fad8b1747..396458a25 100644 --- a/SSL/src/DocumentJournals/СогласияНаОбработкуПерсональныхДанных/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/DocumentJournals/СогласияНаОбработкуПерсональныхДанных/Forms/ФормаСписка/Module.bsl @@ -43,12 +43,17 @@ // СтандартныеПодсистемы.ПодключаемыеКоманды &НаКлиенте Процедура Подключаемый_ВыполнитьКоманду(Команда) - ПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Элементы.Список); + ПодключаемыеКомандыКлиент.НачатьВыполнениеКоманды(ЭтотОбъект, Команда, Элементы.Список); +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ПродолжитьВыполнениеКомандыНаСервере(ПараметрыВыполнения, ДополнительныеПараметры) Экспорт + ВыполнитьКомандуНаСервере(ПараметрыВыполнения); КонецПроцедуры &НаСервере -Процедура Подключаемый_ВыполнитьКомандуНаСервере(Контекст, Результат) Экспорт - ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, Контекст, Элементы.Список, Результат); +Процедура ВыполнитьКомандуНаСервере(ПараметрыВыполнения) + ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, ПараметрыВыполнения, Элементы.Список); КонецПроцедуры &НаКлиенте diff --git a/SSL/src/Documents/Анкета/Forms/ФормаДокумента/Form.form b/SSL/src/Documents/Анкета/Forms/ФормаДокумента/Form.form index 9355e5bc7..e7329995c 100644 --- a/SSL/src/Documents/Анкета/Forms/ФормаДокумента/Form.form +++ b/SSL/src/Documents/Анкета/Forms/ФормаДокумента/Form.form @@ -11,10 +11,6 @@ true - - <key>ru</key> - <value>Команды формы</value> - ФормаГруппаКомандыФормыРасширеннаяПодсказка 191 @@ -263,10 +259,6 @@ true - - <key>ru</key> - <value>Форма глобальные команды</value> - ФормаГлобальныеКомандыРасширеннаяПодсказка 187 @@ -324,10 +316,6 @@ true - - <key>ru</key> - <value>Подменю анкетирование</value> - ru Подменю для размещения подключаемых команд @@ -404,10 +392,6 @@ true - - <key>ru</key> - <value>Командная панель шапка</value> - КоманднаяПанельШапкаРасширеннаяПодсказка 183 @@ -523,10 +507,6 @@ true - - <key>ru</key> - <value>Номер дата</value> - ГруппаНомерДатаExtendedTooltip 120 @@ -681,10 +661,6 @@ true - - <key>ru</key> - <value>Шапка лево</value> - ГруппаШапкаЛевоРасширеннаяПодсказка 185 @@ -845,10 +821,6 @@ true - - <key>ru</key> - <value>Шапка право</value> - ГруппаШапкаПравоРасширеннаяПодсказка 124 @@ -874,10 +846,6 @@ true - - <key>ru</key> - <value>Реквизиты Документа</value> - ГруппаОсновныеРеквизитыExtendedTooltip 119 @@ -939,10 +907,6 @@ true - - <key>ru</key> - <value>Командная панель документ анкета лево</value> - КоманднаяПанельДокументАнкетаЛевоРасширеннаяПодсказка 179 @@ -1017,18 +981,6 @@ true true UserCmds - - 255 - 226 - 9 - - - Style.NormalTextFont - true - false - false - false - Auto true @@ -1036,10 +988,6 @@ true - - <key>ru</key> - <value>Командная панель документа анкета право</value> - КоманднаяПанельДокументаАнкетаПравоРасширеннаяПодсказка 181 @@ -1060,10 +1008,6 @@ true - - <key>ru</key> - <value>Заполнение</value> - ГруппаЗаполнениеРасширеннаяПодсказка 159 @@ -1093,10 +1037,6 @@ ДеревоРазделов 69 - - <key>ru</key> - <value>Дерево разделов</value> - true true @@ -1351,10 +1291,6 @@ true - - <key>ru</key> - <value>Дерево разделов</value> - 30 false true @@ -1405,7 +1341,6 @@ true Label - true true true true @@ -1419,10 +1354,6 @@ true - - <key>ru</key> - <value>Тело анкеты</value> - true false @@ -1566,10 +1497,6 @@ true - - <key>ru</key> - <value>Ожидание элементы</value> - true ГруппаОжиданиеЭлементыExtendedTooltip @@ -1596,10 +1523,6 @@ true - - <key>ru</key> - <value>Ожидание</value> - true ГруппаОжиданиеРасширеннаяПодсказка @@ -1629,10 +1552,6 @@ true - - <key>ru</key> - <value>Дерево разделов форма заполнения</value> - ГруппаДеревоРазделовФормаЗаполненияExtendedTooltip 132 @@ -1719,18 +1638,6 @@ true true UserCmds - - 255 - 227 - 24 - - - Style.NormalTextFont - true - false - false - false - Auto true @@ -1738,10 +1645,6 @@ true - - <key>ru</key> - <value>Командная панель подвал</value> - КоманднаяПанельПодвалРасширеннаяПодсказка 177 diff --git a/SSL/src/Documents/Анкета/Forms/ФормаДокумента/Module.bsl b/SSL/src/Documents/Анкета/Forms/ФормаДокумента/Module.bsl index c020a5ee0..9b9b3a42e 100644 --- a/SSL/src/Documents/Анкета/Forms/ФормаДокумента/Module.bsl +++ b/SSL/src/Documents/Анкета/Forms/ФормаДокумента/Module.bsl @@ -12,14 +12,11 @@ Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) // Для предотвращения открытия документа "Анкета" другими внешними пользователями. - Если Пользователи.ЭтоСеансВнешнегоПользователя() Тогда - Если НЕ Объект.Ссылка.Пустая() Тогда - Если Объект.Респондент <> ВнешниеПользователи.ПолучитьОбъектАвторизацииВнешнегоПользователя() Тогда - Отказ = Истина; - КонецЕсли; - КонецЕсли; - Иначе - ЭтоСеансОбычногоПользователя = Истина; + ЭтоСеансОбычногоПользователя = Не Пользователи.ЭтоСеансВнешнегоПользователя(); + Если Не ЭтоСеансОбычногоПользователя И НЕ Объект.Ссылка.Пустая() + И Объект.Респондент <> ВнешниеПользователи.ПолучитьОбъектАвторизацииВнешнегоПользователя() Тогда + Отказ = Истина; + Возврат; КонецЕсли; ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(Объект, ЭтотОбъект); @@ -43,53 +40,40 @@ Объект.ШаблонАнкеты = ШаблонАнкеты; КонецЕсли; - Если НЕ ШаблонАнкеты.Пустая() Тогда - - Если Параметры.Свойство("ТолькоФормаЗаполнения") Тогда - АвтоЗаголовок = Ложь; - УстановитьЗаголовкиНадписей(РеквизитыОпрос); - КонецЕсли; - - Анкетирование.УстановитьЭлементДереваРазделовАнкетыВступлениеЗаключение(ДеревоРазделов,"Вступление"); - Анкетирование.ЗаполнитьДеревоРазделов(ЭтотОбъект,ДеревоРазделов); - Анкетирование.УстановитьЭлементДереваРазделовАнкетыВступлениеЗаключение(ДеревоРазделов,"Заключение"); - АнкетированиеКлиентСервер.СформироватьНумерациюДерева(ДеревоРазделов,Истина); - - Если (НЕ Объект.Проведен) И ЗначениеЗаполнено(Объект.РедактируемыйРаздел) Тогда - - Если ТипЗнч(Объект.РедактируемыйРаздел) = Тип("СправочникСсылка.ВопросыШаблонаАнкеты") Тогда - - НомерТекущегоРаздела = АнкетированиеКлиентСервер.НайтиСтрокуВДанныхФормыДерево(ДеревоРазделов,Объект.РедактируемыйРаздел,"Ссылка",Истина); - - Иначе - - НомерТекущегоРаздела = АнкетированиеКлиентСервер.НайтиСтрокуВДанныхФормыДерево(ДеревоРазделов,Объект.РедактируемыйРаздел,"ТипСтроки",Истина); - - КонецЕсли; - - КонецЕсли; - - Если НомерТекущегоРаздела >= 0 Тогда - - Элементы.ДеревоРазделов.ТекущаяСтрока = НомерТекущегоРаздела; - ПостроениеФормыСогласноРаздела(); - - КонецЕсли; - - Иначе - + Если ШаблонАнкеты.Пустая() Тогда Отказ = Истина; Возврат; - КонецЕсли; + Если Параметры.Свойство("ТолькоФормаЗаполнения") Тогда + АвтоЗаголовок = Ложь; + УстановитьЗаголовкиНадписей(РеквизитыОпрос); + КонецЕсли; + + Анкетирование.УстановитьЭлементДереваРазделовАнкетыВступлениеЗаключение(ДеревоРазделов, НСтр("ru = 'Вступление'"), "Вступление"); + Анкетирование.ЗаполнитьДеревоРазделов(ЭтотОбъект,ДеревоРазделов); + Анкетирование.УстановитьЭлементДереваРазделовАнкетыВступлениеЗаключение(ДеревоРазделов, НСтр("ru = 'Заключение'"), "Заключение"); + АнкетированиеКлиентСервер.СформироватьНумерациюДерева(ДеревоРазделов,Истина); + + Если (НЕ Объект.Проведен) И ЗначениеЗаполнено(Объект.РедактируемыйРаздел) Тогда + Если ТипЗнч(Объект.РедактируемыйРаздел) = Тип("СправочникСсылка.ВопросыШаблонаАнкеты") Тогда + НомерТекущегоРаздела = АнкетированиеКлиентСервер.НайтиСтрокуВДанныхФормыДерево(ДеревоРазделов, Объект.РедактируемыйРаздел, "Ссылка", Истина); + Иначе + НомерТекущегоРаздела = АнкетированиеКлиентСервер.НайтиСтрокуВДанныхФормыДерево(ДеревоРазделов, Объект.РедактируемыйРаздел, "ТипСтроки", Истина); + КонецЕсли; + Если НомерТекущегоРаздела = -1 Тогда + НомерТекущегоРаздела = 0; + КонецЕсли; + КонецЕсли; + Элементы.ДеревоРазделов.ТекущаяСтрока = НомерТекущегоРаздела; + ПостроениеФормыСогласноРаздела(); Элементы.ПредыдущийРазделПодвал.Видимость = Ложь; Элементы.СледующийРазделПодвал.Видимость = Ложь; ДействияВЗависимостиОтВидаФормы(); - Элементы.ГруппаДеревоРазделов.Видимость = Ложь; + Элементы.ГруппаДеревоРазделов.Видимость = Ложь; ЗаголовокКомандаРазделы = НСтр("ru = 'Показать разделы'"); Элементы.СкрытьПоказатьДеревоРазделовДокумент.Заголовок = ЗаголовокКомандаРазделы; @@ -229,7 +213,7 @@ ОбработчикОповещенияОЗакрытии = Новый ОписаниеОповещения("ВопросОПринятииАнкетыПослеЗавершения", ЭтотОбъект); ПоказатьВопрос(ОбработчикОповещенияОЗакрытии, - НСтр("ru='Ваша анкета будет принята. + НСтр("ru = 'Ваша анкета будет принята. |Дальнейшее заполнение анкеты будет невозможно |Продолжить?'") ,РежимДиалогаВопрос.ДаНет); @@ -1217,7 +1201,7 @@ Выборка = Результат.Выбрать(); Пока Выборка.Следующий() Цикл - ОбщегоНазначения.СообщитьПользователю(НСтр("ru='Не указан ответ на вопрос'") + "- "+ СтрЗаменить(Выборка.Ссылка.ПолныйКод(),"/",".") + " " + Выборка.Формулировка); + ОбщегоНазначения.СообщитьПользователю(НСтр("ru = 'Не указан ответ на вопрос'") + "- "+ СтрЗаменить(Выборка.Ссылка.ПолныйКод(),"/",".") + " " + Выборка.Формулировка); КонецЦикла; Возврат Истина; @@ -1620,12 +1604,17 @@ // СтандартныеПодсистемы.ПодключаемыеКоманды &НаКлиенте Процедура Подключаемый_ВыполнитьКоманду(Команда) - ПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Объект); + ПодключаемыеКомандыКлиент.НачатьВыполнениеКоманды(ЭтотОбъект, Команда, Объект); +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ПродолжитьВыполнениеКомандыНаСервере(ПараметрыВыполнения, ДополнительныеПараметры) Экспорт + ВыполнитьКомандуНаСервере(ПараметрыВыполнения); КонецПроцедуры &НаСервере -Процедура Подключаемый_ВыполнитьКомандуНаСервере(Контекст, Результат) Экспорт - ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, Контекст, Объект, Результат); +Процедура ВыполнитьКомандуНаСервере(ПараметрыВыполнения) + ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, ПараметрыВыполнения, Объект); КонецПроцедуры &НаКлиенте diff --git a/SSL/src/Documents/Анкета/Forms/ФормаСписка/Form.form b/SSL/src/Documents/Анкета/Forms/ФормаСписка/Form.form index 20d869e1a..aa63b08d9 100644 --- a/SSL/src/Documents/Анкета/Forms/ФормаСписка/Form.form +++ b/SSL/src/Documents/Анкета/Forms/ФормаСписка/Form.form @@ -365,6 +365,10 @@ BeforeAddRow СписокПередНачаломДобавления + + OnActivateRow + СписокПриАктивизацииСтроки + СписокSearchString 25 diff --git a/SSL/src/Documents/Анкета/Forms/ФормаСписка/Module.bsl b/SSL/src/Documents/Анкета/Forms/ФормаСписка/Module.bsl index 7648da43a..604131010 100644 --- a/SSL/src/Documents/Анкета/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Documents/Анкета/Forms/ФормаСписка/Module.bsl @@ -17,8 +17,16 @@ Отказ = Истина; КонецЕсли; + // СтандартныеПодсистемы.ПодключаемыеКоманды + ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект); + // Конец СтандартныеПодсистемы.ПодключаемыеКоманды + КонецПроцедуры +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыСписок + &НаКлиенте Процедура СписокПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа) @@ -26,6 +34,15 @@ КонецПроцедуры +&НаКлиенте +Процедура СписокПриАктивизацииСтроки(Элемент) + + // СтандартныеПодсистемы.ПодключаемыеКоманды + ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект); + // Конец СтандартныеПодсистемы.ПодключаемыеКоманды + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -37,5 +54,27 @@ КонецПроцедуры +// СтандартныеПодсистемы.ПодключаемыеКоманды +&НаКлиенте +Процедура Подключаемый_ВыполнитьКоманду(Команда) + ПодключаемыеКомандыКлиент.НачатьВыполнениеКоманды(ЭтотОбъект, Команда, Элементы.Список); +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ПродолжитьВыполнениеКомандыНаСервере(ПараметрыВыполнения, ДополнительныеПараметры) Экспорт + ВыполнитьКомандуНаСервере(ПараметрыВыполнения); +КонецПроцедуры + +&НаСервере +Процедура ВыполнитьКомандуНаСервере(ПараметрыВыполнения) + ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, ПараметрыВыполнения, Элементы.Список); +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ОбновитьКоманды() + ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Элементы.Список); +КонецПроцедуры +// Конец СтандартныеПодсистемы.ПодключаемыеКоманды + #КонецОбласти diff --git a/SSL/src/Documents/Встреча/Forms/ФормаДокумента/Module.bsl b/SSL/src/Documents/Встреча/Forms/ФормаДокумента/Module.bsl index ca2e31fd2..c3504a262 100644 --- a/SSL/src/Documents/Встреча/Forms/ФормаДокумента/Module.bsl +++ b/SSL/src/Documents/Встреча/Forms/ФормаДокумента/Module.bsl @@ -234,7 +234,7 @@ Если НачалоДня(Объект.ДатаОкончания) + ВыделитьВремя(ВремяОкончания) < Объект.ДатаНачала Тогда ОчиститьСообщения(); - ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru='Время окончания не может быть меньше времени начала.'"),,"ВремяОкончания"); + ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Время окончания не может быть меньше времени начала.'"),,"ВремяОкончания"); ВремяОкончания = ВремяНачала + 1800; Объект.ДатаОкончания = НачалоДня(Объект.ДатаОкончания) + ВыделитьВремя(ВремяОкончания); Возврат; @@ -260,9 +260,9 @@ Если НачалоДня(ДатаОкончания) + ВыделитьВремя(ВремяОкончания) < Объект.ДатаНачала Тогда ОчиститьСообщения(); Если НачалоДня(ДатаОкончания) < НачалоДня(ДатаНачала) Тогда - ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru='Дата окончания не может быть меньше даты начала.'"),,"ДатаОкончания"); + ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Дата окончания не может быть меньше даты начала.'"),,"ДатаОкончания"); Иначе - ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru='Время окончания не может быть меньше времени начала.'"),,"ВремяОкончания"); + ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Время окончания не может быть меньше времени начала.'"),,"ВремяОкончания"); КонецЕсли; ДатаОкончания = Объект.ДатаНачала; Объект.ДатаОкончания = НачалоДня(ДатаОкончания) + ВыделитьВремя(ВремяОкончания); diff --git a/SSL/src/Documents/Встреча/Forms/ФормаСписка/Module.bsl b/SSL/src/Documents/Встреча/Forms/ФормаСписка/Module.bsl index 642b7066f..8b33054c8 100644 --- a/SSL/src/Documents/Встреча/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Documents/Встреча/Forms/ФормаСписка/Module.bsl @@ -13,6 +13,11 @@ УстановитьУсловноеОформление(); + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВерсионированиеОбъектов") Тогда + МодульВерсионированиеОбъектов = ОбщегоНазначения.ОбщийМодуль("ВерсионированиеОбъектов"); + МодульВерсионированиеОбъектов.ПриСозданииНаСервере(ЭтотОбъект); + КонецЕсли; + КонецПроцедуры #КонецОбласти diff --git a/SSL/src/Documents/Встреча/ManagerModule.bsl b/SSL/src/Documents/Встреча/ManagerModule.bsl index e4723cff6..b8403467f 100644 --- a/SSL/src/Documents/Встреча/ManagerModule.bsl +++ b/SSL/src/Documents/Встреча/ManagerModule.bsl @@ -71,6 +71,46 @@ // Конец СтандартныеПодсистемы.УправлениеДоступом +// СтандартныеПодсистемы.ПодключаемыеКоманды + +// Определяет список команд создания на основании. +// +// Параметры: +// КомандыСозданияНаОсновании - ТаблицаЗначений - см. СозданиеНаОснованииПереопределяемый.ПередДобавлениемКомандСозданияНаОсновании. +// Параметры - Структура - см. СозданиеНаОснованииПереопределяемый.ПередДобавлениемКомандСозданияНаОсновании. +// +Процедура ДобавитьКомандыСозданияНаОсновании(КомандыСозданияНаОсновании, Параметры) Экспорт + + ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании); + Документы.ЗапланированноеВзаимодействие.ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании); + Документы.СообщениеSMS.ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании); + Документы.ТелефонныйЗвонок.ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании); + Документы.ЭлектронноеПисьмоИсходящее.ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании); + +КонецПроцедуры + +// Для использования в процедуре ДобавитьКомандыСозданияНаОсновании других модулей менеджеров объектов. +// Добавляет в список команд создания на основании этот объект. +// +// Параметры: +// КомандыСозданияНаОсновании - ТаблицаЗначений - см. СозданиеНаОснованииПереопределяемый.ПередДобавлениемКомандСозданияНаОсновании. +// +// Возвращаемое значение: +// СтрокаТаблицыЗначений, Неопределено - описание добавленной команды. +// +Функция ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании) Экспорт + + Команда = СозданиеНаОсновании.ДобавитьКомандуСозданияНаОсновании(КомандыСозданияНаОсновании, Метаданные.Документы.Встреча); + Если Команда <> Неопределено Тогда + Команда.ФункциональныеОпции = "ИспользоватьПрочиеВзаимодействия"; + КонецЕсли; + + Возврат Команда; + +КонецФункции + +// Конец СтандартныеПодсистемы.ПодключаемыеКоманды + #КонецОбласти #КонецОбласти diff --git a/SSL/src/Documents/Встреча/ObjectModule.bsl b/SSL/src/Documents/Встреча/ObjectModule.bsl index a6b08ed6a..b863427e1 100644 --- a/SSL/src/Documents/Встреча/ObjectModule.bsl +++ b/SSL/src/Documents/Встреча/ObjectModule.bsl @@ -74,7 +74,7 @@ Если ДатаОкончания < ДатаНачала Тогда ОбщегоНазначения.СообщитьПользователю( - НСтр("ru='Дата окончания не может быть меньше даты начала.'"), + НСтр("ru = 'Дата окончания не может быть меньше даты начала.'"), , "ДатаОкончания", , diff --git a/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаДокумента/Form.form b/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаДокумента/Form.form index be493e772..cae869ec5 100644 --- a/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаДокумента/Form.form +++ b/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаДокумента/Form.form @@ -1741,7 +1741,7 @@ - CommonCommand.СтруктураПодчиненности + CommonCommand.СвязанныеДокументы diff --git a/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаСписка/Module.bsl b/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаСписка/Module.bsl index 642b7066f..8b33054c8 100644 --- a/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаСписка/Module.bsl @@ -13,6 +13,11 @@ УстановитьУсловноеОформление(); + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВерсионированиеОбъектов") Тогда + МодульВерсионированиеОбъектов = ОбщегоНазначения.ОбщийМодуль("ВерсионированиеОбъектов"); + МодульВерсионированиеОбъектов.ПриСозданииНаСервере(ЭтотОбъект); + КонецЕсли; + КонецПроцедуры #КонецОбласти diff --git a/SSL/src/Documents/ЗапланированноеВзаимодействие/ManagerModule.bsl b/SSL/src/Documents/ЗапланированноеВзаимодействие/ManagerModule.bsl index a8fdab5de..5aaa7609f 100644 --- a/SSL/src/Documents/ЗапланированноеВзаимодействие/ManagerModule.bsl +++ b/SSL/src/Documents/ЗапланированноеВзаимодействие/ManagerModule.bsl @@ -69,6 +69,45 @@ // Конец СтандартныеПодсистемы.УправлениеДоступом +// СтандартныеПодсистемы.ПодключаемыеКоманды + +// Определяет список команд создания на основании. +// +// Параметры: +// КомандыСозданияНаОсновании - ТаблицаЗначений - см. СозданиеНаОснованииПереопределяемый.ПередДобавлениемКомандСозданияНаОсновании. +// Параметры - Структура - см. СозданиеНаОснованииПереопределяемый.ПередДобавлениемКомандСозданияНаОсновании. +// +Процедура ДобавитьКомандыСозданияНаОсновании(КомандыСозданияНаОсновании, Параметры) Экспорт + + Документы.Встреча.ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании); + Документы.СообщениеSMS.ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании); + Документы.ТелефонныйЗвонок.ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании); + Документы.ЭлектронноеПисьмоИсходящее.ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании); + +КонецПроцедуры + +// Для использования в процедуре ДобавитьКомандыСозданияНаОсновании других модулей менеджеров объектов. +// Добавляет в список команд создания на основании этот объект. +// +// Параметры: +// КомандыСозданияНаОсновании - ТаблицаЗначений - см. СозданиеНаОснованииПереопределяемый.ПередДобавлениемКомандСозданияНаОсновании. +// +// Возвращаемое значение: +// СтрокаТаблицыЗначений, Неопределено - описание добавленной команды. +// +Функция ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании) Экспорт + + Команда = СозданиеНаОсновании.ДобавитьКомандуСозданияНаОсновании(КомандыСозданияНаОсновании, Метаданные.Документы.ЗапланированноеВзаимодействие); + Если Команда <> Неопределено Тогда + Команда.ФункциональныеОпции = "ИспользоватьПрочиеВзаимодействия"; + КонецЕсли; + + Возврат Команда; + +КонецФункции + +// Конец СтандартныеПодсистемы.ПодключаемыеКоманды + #КонецОбласти #КонецОбласти diff --git a/SSL/src/Documents/ЗапланированноеВзаимодействие/ObjectModule.bsl b/SSL/src/Documents/ЗапланированноеВзаимодействие/ObjectModule.bsl index 2d8ddbbf5..5c7243ae3 100644 --- a/SSL/src/Documents/ЗапланированноеВзаимодействие/ObjectModule.bsl +++ b/SSL/src/Documents/ЗапланированноеВзаимодействие/ObjectModule.bsl @@ -30,6 +30,10 @@ // СтандартныеПодсистемы.УправлениеДоступом // См. УправлениеДоступом.ЗаполнитьНаборыЗначенийДоступа. +// +// Параметры: +// Таблица - ТаблицаЗначений - см. УправлениеДоступом.ТаблицаНаборыЗначенийДоступа. +// Процедура ЗаполнитьНаборыЗначенийДоступа(Таблица) Экспорт ВзаимодействияСобытия.ЗаполнитьНаборыЗначенийДоступа(ЭтотОбъект, Таблица); diff --git a/SSL/src/Documents/НазначениеОпросов/Forms/ФормаДокумента/Module.bsl b/SSL/src/Documents/НазначениеОпросов/Forms/ФормаДокумента/Module.bsl index c644d50c2..2f110ba9c 100644 --- a/SSL/src/Documents/НазначениеОпросов/Forms/ФормаДокумента/Module.bsl +++ b/SSL/src/Documents/НазначениеОпросов/Forms/ФормаДокумента/Module.bsl @@ -231,13 +231,18 @@ &НаКлиенте Процедура Подключаемый_ВыполнитьКоманду(Команда) МодульПодключаемыеКомандыКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ПодключаемыеКомандыКлиент"); - МодульПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Объект); + МодульПодключаемыеКомандыКлиент.НачатьВыполнениеКоманды(ЭтотОбъект, Команда, Объект); +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ПродолжитьВыполнениеКомандыНаСервере(ПараметрыВыполнения, ДополнительныеПараметры) Экспорт + ВыполнитьКомандуНаСервере(ПараметрыВыполнения); КонецПроцедуры &НаСервере -Процедура Подключаемый_ВыполнитьКомандуНаСервере(Контекст, Результат) Экспорт +Процедура ВыполнитьКомандуНаСервере(ПараметрыВыполнения) МодульПодключаемыеКоманды = ОбщегоНазначения.ОбщийМодуль("ПодключаемыеКоманды"); - МодульПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, Контекст, Объект, Результат); + МодульПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, ПараметрыВыполнения, Объект); КонецПроцедуры &НаКлиенте diff --git a/SSL/src/Documents/НазначениеОпросов/Forms/ФормаСписка/Module.bsl b/SSL/src/Documents/НазначениеОпросов/Forms/ФормаСписка/Module.bsl index 170333f78..fb6f255eb 100644 --- a/SSL/src/Documents/НазначениеОпросов/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Documents/НазначениеОпросов/Forms/ФормаСписка/Module.bsl @@ -52,13 +52,18 @@ &НаКлиенте Процедура Подключаемый_ВыполнитьКоманду(Команда) МодульПодключаемыеКомандыКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ПодключаемыеКомандыКлиент"); - МодульПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Элементы.Список); + МодульПодключаемыеКомандыКлиент.НачатьВыполнениеКоманды(ЭтотОбъект, Команда, Элементы.Список); +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ПродолжитьВыполнениеКомандыНаСервере(ПараметрыВыполнения, ДополнительныеПараметры) Экспорт + ВыполнитьКомандуНаСервере(ПараметрыВыполнения); КонецПроцедуры &НаСервере -Процедура Подключаемый_ВыполнитьКомандуНаСервере(Контекст, Результат) Экспорт +Процедура ВыполнитьКомандуНаСервере(ПараметрыВыполнения) МодульПодключаемыеКоманды = ОбщегоНазначения.ОбщийМодуль("ПодключаемыеКоманды"); - МодульПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, Контекст, Элементы.Список, Результат); + МодульПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, ПараметрыВыполнения, Элементы.Список); КонецПроцедуры &НаКлиенте diff --git a/SSL/src/Documents/ОтзывСогласияНаОбработкуПерсональныхДанных/Forms/ФормаДокумента/Form.form b/SSL/src/Documents/ОтзывСогласияНаОбработкуПерсональныхДанных/Forms/ФормаДокумента/Form.form index 4d44253a4..ef275d093 100644 --- a/SSL/src/Documents/ОтзывСогласияНаОбработкуПерсональныхДанных/Forms/ФормаДокумента/Form.form +++ b/SSL/src/Documents/ОтзывСогласияНаОбработкуПерсональныхДанных/Forms/ФормаДокумента/Form.form @@ -696,6 +696,40 @@ Auto + + ГруппаДополнительныеРеквизиты + 96 + true + true + + true + + + <key>ru</key> + <value>Дополнительно</value> + + + ГруппаДополнительныеРеквизитыРасширеннаяПодсказка + 97 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + WeakSeparation + true + true + auto + Auto + Auto + + ОтветственныйКомментарийГруппа 69 @@ -731,9 +765,14 @@ Left true + + StartChoice + КомментарийНачалоВыбора + true true true + true true true true @@ -817,10 +856,22 @@ Left true + + NotificationProcessing + ОбработкаОповещения + + + OnOpen + ПриОткрытии + OnCreateAtServer ПриСозданииНаСервере + + FillCheckProcessingAtServer + ОбработкаПроверкиЗаполненияНаСервере + DontBlock true true @@ -866,6 +917,10 @@ OnReadAtServer ПриЧтенииНаСервере + + BeforeWriteAtServer + ПередЗаписьюНаСервере + true diff --git a/SSL/src/Documents/ОтзывСогласияНаОбработкуПерсональныхДанных/Forms/ФормаДокумента/Module.bsl b/SSL/src/Documents/ОтзывСогласияНаОбработкуПерсональныхДанных/Forms/ФормаДокумента/Module.bsl index a6d5c9f46..f50c47d17 100644 --- a/SSL/src/Documents/ОтзывСогласияНаОбработкуПерсональныхДанных/Forms/ФормаДокумента/Module.bsl +++ b/SSL/src/Documents/ОтзывСогласияНаОбработкуПерсональныхДанных/Forms/ФормаДокумента/Module.bsl @@ -36,6 +36,15 @@ УстановитьСведенияДействующегоСогласия(); КонецЕсли; + // СтандартныеПодсистемы.Свойства + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда + ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("ИмяЭлементаДляРазмещения", "ГруппаДополнительныеРеквизиты"); + МодульУправлениеСвойствами = ОбщегоНазначения.ОбщийМодуль("УправлениеСвойствами"); + МодульУправлениеСвойствами.ПриСозданииНаСервере(ЭтотОбъект, ДополнительныеПараметры); + КонецЕсли; + // Конец СтандартныеПодсистемы.Свойства + КонецПроцедуры &НаСервере @@ -57,6 +66,64 @@ КонецЕсли; // Конец СтандартныеПодсистемы.УправлениеДоступом + // СтандартныеПодсистемы.Свойства + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда + МодульУправлениеСвойствами = ОбщегоНазначения.ОбщийМодуль("УправлениеСвойствами"); + МодульУправлениеСвойствами.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); + КонецЕсли; + // Конец СтандартныеПодсистемы.Свойства + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + // СтандартныеПодсистемы.Свойства + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда + МодульУправлениеСвойствамиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеСвойствамиКлиент"); + МодульУправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект); + КонецЕсли; + // Конец СтандартныеПодсистемы.Свойства + +КонецПроцедуры + +&НаКлиенте +Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) + + // СтандартныеПодсистемы.Свойства + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда + МодульУправлениеСвойствамиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеСвойствамиКлиент"); + Если МодульУправлениеСвойствамиКлиент.ОбрабатыватьОповещения(ЭтотОбъект, ИмяСобытия, Параметр) Тогда + ОбновитьЭлементыДополнительныхРеквизитов(); + МодульУправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект); + КонецЕсли; + КонецЕсли; + // Конец СтандартныеПодсистемы.Свойства + +КонецПроцедуры + +&НаСервере +Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты) + + // СтандартныеПодсистемы.Свойства + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда + МодульУправлениеСвойствами = ОбщегоНазначения.ОбщийМодуль("УправлениеСвойствами"); + МодульУправлениеСвойствами.ОбработкаПроверкиЗаполнения(ЭтотОбъект, Отказ, ПроверяемыеРеквизиты); + КонецЕсли; + // Конец СтандартныеПодсистемы.Свойства + +КонецПроцедуры + +&НаСервере +Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) + + // СтандартныеПодсистемы.Свойства + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда + МодульУправлениеСвойствами = ОбщегоНазначения.ОбщийМодуль("УправлениеСвойствами"); + МодульУправлениеСвойствами.ПередЗаписьюНаСервере(ЭтотОбъект, ТекущийОбъект); + КонецЕсли; + // Конец СтандартныеПодсистемы.Свойства + КонецПроцедуры &НаКлиенте @@ -110,6 +177,27 @@ КонецПроцедуры +&НаКлиенте +Процедура КомментарийНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + ОбщегоНазначенияКлиент.ПоказатьФормуРедактированияКомментария(Элемент.ТекстРедактирования, ЭтотОбъект); +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +// СтандартныеПодсистемы.Свойства +&НаКлиенте +Процедура Подключаемый_СвойстваВыполнитьКоманду(ЭлементИлиКоманда, НавигационнаяСсылка = Неопределено, СтандартнаяОбработка = Неопределено) + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда + МодульУправлениеСвойствамиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеСвойствамиКлиент"); + МодульУправлениеСвойствамиКлиент.ВыполнитьКоманду(ЭтотОбъект, ЭлементИлиКоманда, СтандартнаяОбработка); + КонецЕсли; + +КонецПроцедуры +// Конец СтандартныеПодсистемы.Свойства + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -186,17 +274,51 @@ // Обнаружено действующее согласие - готовим форматированную строку. // Пример сообщения: "У субъекта 20.03.2014 было получено согласие, которое действует до 20.03.2017". - ЧастиСообщения = Новый Массив; - ЧастиСообщения.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'У субъекта %1 было получено'"), Формат(Согласие.ДатаПолучения, "ДЛФ=D")) + " "); - ЧастиСообщения.Добавить(Новый ФорматированнаяСтрока(НСтр("ru = 'согласие'"), , , , ПолучитьНавигационнуюСсылку(Согласие.ДокументОснование))); Если ЗначениеЗаполнено(Согласие.СрокДействия) Тогда - ЧастиСообщения.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = ', которое действует до %1.'"), Формат(Согласие.СрокДействия, "ДЛФ=D"))); + СведенияТекст = СтроковыеФункции.ФорматированнаяСтрока( + НСтр("ru = 'У субъекта %1 было получено согласие, которое действует до %3.'"), + Формат(Согласие.ДатаПолучения, "ДЛФ=D"), ПолучитьНавигационнуюСсылку(Согласие.ДокументОснование), Формат(Согласие.СрокДействия, "ДЛФ=D")); Иначе - ЧастиСообщения.Добавить(НСтр("ru = ', которое действует бессрочно.'")); + СведенияТекст = СтроковыеФункции.ФорматированнаяСтрока( + НСтр("ru = 'У субъекта %1 было получено согласие, которое действует бессрочно.'"), + Формат(Согласие.ДатаПолучения, "ДЛФ=D"), ПолучитьНавигационнуюСсылку(Согласие.ДокументОснование)); КонецЕсли; - - Элементы.СведенияТекст.Заголовок = Новый ФорматированнаяСтрока(ЧастиСообщения); + Элементы.СведенияТекст.Заголовок = СведенияТекст; КонецПроцедуры +// СтандартныеПодсистемы.Свойства + +&НаСервере +Процедура ОбновитьЭлементыДополнительныхРеквизитов() + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда + МодульУправлениеСвойствами = ОбщегоНазначения.ОбщийМодуль("УправлениеСвойствами"); + МодульУправлениеСвойствами.ОбновитьЭлементыДополнительныхРеквизитов(ЭтотОбъект); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьЗависимостиДополнительныхРеквизитов() + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда + МодульУправлениеСвойствамиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеСвойствамиКлиент"); + МодульУправлениеСвойствамиКлиент.ОбновитьЗависимостиДополнительныхРеквизитов(ЭтотОбъект); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ПриИзмененииДополнительногоРеквизита(Элемент) + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда + МодульУправлениеСвойствамиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеСвойствамиКлиент"); + МодульУправлениеСвойствамиКлиент.ОбновитьЗависимостиДополнительныхРеквизитов(ЭтотОбъект); + КонецЕсли; + +КонецПроцедуры + +// Конец СтандартныеПодсистемы.Свойства + #КонецОбласти diff --git a/SSL/src/Documents/ОтзывСогласияНаОбработкуПерсональныхДанных/ManagerModule.bsl b/SSL/src/Documents/ОтзывСогласияНаОбработкуПерсональныхДанных/ManagerModule.bsl new file mode 100644 index 000000000..c6467c07e --- /dev/null +++ b/SSL/src/Documents/ОтзывСогласияНаОбработкуПерсональныхДанных/ManagerModule.bsl @@ -0,0 +1,48 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2019, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ПрограммныйИнтерфейс + +#Область ДляВызоваИзДругихПодсистем + +// СтандартныеПодсистемы.ПодключаемыеКоманды + +// Определяет список команд создания на основании. +// +// Параметры: +// КомандыСозданияНаОсновании - ТаблицаЗначений - см. СозданиеНаОснованииПереопределяемый.ПередДобавлениемКомандСозданияНаОсновании. +// Параметры - Структура - см. СозданиеНаОснованииПереопределяемый.ПередДобавлениемКомандСозданияНаОсновании. +// +Процедура ДобавитьКомандыСозданияНаОсновании(КомандыСозданияНаОсновании, Параметры) Экспорт + +КонецПроцедуры + +// Для использования в процедуре ДобавитьКомандыСозданияНаОсновании других модулей менеджеров объектов. +// Добавляет в список команд создания на основании этот объект. +// +// Параметры: +// КомандыСозданияНаОсновании - ТаблицаЗначений - см. СозданиеНаОснованииПереопределяемый.ПередДобавлениемКомандСозданияНаОсновании. +// +// Возвращаемое значение: +// СтрокаТаблицыЗначений, Неопределено - описание добавленной команды. +// +Функция ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании) Экспорт + + Возврат СозданиеНаОсновании.ДобавитьКомандуСозданияНаОсновании(КомандыСозданияНаОсновании, Метаданные.Документы.ОтзывСогласияНаОбработкуПерсональныхДанных); + +КонецФункции + +// Конец СтандартныеПодсистемы.ПодключаемыеКоманды + +#КонецОбласти + +#КонецОбласти + +#КонецЕсли diff --git a/SSL/src/Documents/ОтзывСогласияНаОбработкуПерсональныхДанных/ОтзывСогласияНаОбработкуПерсональныхДанных.mdo b/SSL/src/Documents/ОтзывСогласияНаОбработкуПерсональныхДанных/ОтзывСогласияНаОбработкуПерсональныхДанных.mdo index 42ce13a7b..8c7dd87c7 100644 --- a/SSL/src/Documents/ОтзывСогласияНаОбработкуПерсональныхДанных/ОтзывСогласияНаОбработкуПерсональныхДанных.mdo +++ b/SSL/src/Documents/ОтзывСогласияНаОбработкуПерсональныхДанных/ОтзывСогласияНаОбработкуПерсональныхДанных.mdo @@ -56,6 +56,38 @@ + + Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты + Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты.Attribute.Свойство + Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты.Attribute.ИмяПредопределенногоНабора + + Документ_ОтзывСогласияНаОбработкуПерсональныхДанных + + -1 + -1 + Document.ОтзывСогласияНаОбработкуПерсональныхДанных.TabularSection.ДополнительныеРеквизиты + Document.ОтзывСогласияНаОбработкуПерсональныхДанных.TabularSection.ДополнительныеРеквизиты.StandardAttribute.Ref + Document.ОтзывСогласияНаОбработкуПерсональныхДанных.TabularSection.ДополнительныеРеквизиты.Attribute.Свойство + Document.ОтзывСогласияНаОбработкуПерсональныхДанных.TabularSection.ДополнительныеРеквизиты.Attribute.Значение + -1 + -1 + + + Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеСведения + Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеСведения.Attribute.Свойство + Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеСведения.Attribute.ИмяПредопределенногоНабора + + Документ_ОтзывСогласияНаОбработкуПерсональныхДанных + + -1 + -1 + InformationRegister.ДополнительныеСведения + InformationRegister.ДополнительныеСведения.Dimension.Объект + InformationRegister.ДополнительныеСведения.Dimension.Свойство + InformationRegister.ДополнительныеСведения.Resource.Значение + -1 + -1 + Document.СогласиеНаОбработкуПерсональныхДанных Use @@ -271,4 +303,82 @@ PersonalComputer MobileDevice + + + + + + ДополнительныеРеквизиты + + ru + Дополнительные реквизиты + + + Use + LineNumber + + Use + + + + + Свойство + + ru + Свойство + + + ChartOfCharacteristicTypesRef.ДополнительныеРеквизитыИСведения + + + ru + Дополнительный реквизит + + + + Use + Use + + + Значение + + ru + Значение + + + Characteristic.ДополнительныеРеквизитыИСведения + + + ru + Значение дополнительного реквизита + + + + + Отбор.Владелец + Document.ОтзывСогласияНаОбработкуПерсональныхДанных.TabularSection.ДополнительныеРеквизиты.Attribute.Свойство + + Use + Use + + + ТекстоваяСтрока + + ru + Текстовая строка + + + String + + + + ru + Полный текст строкового дополнительного реквизита + + + + Use + Use + + diff --git a/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Forms/ФормаДокумента/Form.form b/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Forms/ФормаДокумента/Form.form index 8d9ff2552..83e48fb10 100644 --- a/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Forms/ФормаДокумента/Form.form +++ b/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Forms/ФормаДокумента/Form.form @@ -945,6 +945,40 @@ Auto + + ГруппаДополнительныеРеквизиты + 103 + true + true + + true + + + <key>ru</key> + <value>Дополнительно</value> + + + ГруппаДополнительныеРеквизитыРасширеннаяПодсказка + 104 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + WeakSeparation + true + true + auto + Auto + Auto + + ОтветственныйКомментарийГруппа 69 @@ -980,9 +1014,14 @@ Left true + + StartChoice + КомментарийНачалоВыбора + true true true + true true true true @@ -1169,6 +1208,10 @@ Left true + + NotificationProcessing + ОбработкаОповещения + OnOpen ПриОткрытии @@ -1177,6 +1220,10 @@ OnCreateAtServer ПриСозданииНаСервере + + FillCheckProcessingAtServer + ОбработкаПроверкиЗаполненияНаСервере + DontBlock true true @@ -1233,6 +1280,10 @@ OnReadAtServer ПриЧтенииНаСервере + + BeforeWriteAtServer + ПередЗаписьюНаСервере + true diff --git a/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Forms/ФормаДокумента/Module.bsl b/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Forms/ФормаДокумента/Module.bsl index 8c43e3462..ac6d32c30 100644 --- a/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Forms/ФормаДокумента/Module.bsl +++ b/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Forms/ФормаДокумента/Module.bsl @@ -37,14 +37,14 @@ ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект); // Конец СтандартныеПодсистемы.ПодключаемыеКоманды -КонецПроцедуры - -&НаКлиенте -Процедура ПриОткрытии(Отказ) - - // СтандартныеПодсистемы.ПодключаемыеКоманды - ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект); - // Конец СтандартныеПодсистемы.ПодключаемыеКоманды + // СтандартныеПодсистемы.Свойства + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда + ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("ИмяЭлементаДляРазмещения", "ГруппаДополнительныеРеквизиты"); + МодульУправлениеСвойствами = ОбщегоНазначения.ОбщийМодуль("УправлениеСвойствами"); + МодульУправлениеСвойствами.ПриСозданииНаСервере(ЭтотОбъект, ДополнительныеПараметры); + КонецЕсли; + // Конец СтандартныеПодсистемы.Свойства КонецПроцедуры @@ -71,6 +71,68 @@ КонецЕсли; // Конец СтандартныеПодсистемы.УправлениеДоступом + // СтандартныеПодсистемы.Свойства + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда + МодульУправлениеСвойствами = ОбщегоНазначения.ОбщийМодуль("УправлениеСвойствами"); + МодульУправлениеСвойствами.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); + КонецЕсли; + // Конец СтандартныеПодсистемы.Свойства + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + // СтандартныеПодсистемы.ПодключаемыеКоманды + ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект); + // Конец СтандартныеПодсистемы.ПодключаемыеКоманды + + // СтандартныеПодсистемы.Свойства + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда + МодульУправлениеСвойствамиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеСвойствамиКлиент"); + МодульУправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект); + КонецЕсли; + // Конец СтандартныеПодсистемы.Свойства + +КонецПроцедуры + +&НаКлиенте +Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) + + // СтандартныеПодсистемы.Свойства + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда + МодульУправлениеСвойствамиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеСвойствамиКлиент"); + Если МодульУправлениеСвойствамиКлиент.ОбрабатыватьОповещения(ЭтотОбъект, ИмяСобытия, Параметр) Тогда + ОбновитьЭлементыДополнительныхРеквизитов(); + МодульУправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект); + КонецЕсли; + КонецЕсли; + // Конец СтандартныеПодсистемы.Свойства + +КонецПроцедуры + +&НаСервере +Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты) + + // СтандартныеПодсистемы.Свойства + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда + МодульУправлениеСвойствами = ОбщегоНазначения.ОбщийМодуль("УправлениеСвойствами"); + МодульУправлениеСвойствами.ОбработкаПроверкиЗаполнения(ЭтотОбъект, Отказ, ПроверяемыеРеквизиты); + КонецЕсли; + // Конец СтандартныеПодсистемы.Свойства + +КонецПроцедуры + +&НаСервере +Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) + + // СтандартныеПодсистемы.Свойства + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда + МодульУправлениеСвойствами = ОбщегоНазначения.ОбщийМодуль("УправлениеСвойствами"); + МодульУправлениеСвойствами.ПередЗаписьюНаСервере(ЭтотОбъект, ТекущийОбъект); + КонецЕсли; + // Конец СтандартныеПодсистемы.Свойства + КонецПроцедуры &НаКлиенте @@ -124,6 +186,13 @@ КонецПроцедуры +&НаКлиенте +Процедура КомментарийНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + + ОбщегоНазначенияКлиент.ПоказатьФормуРедактированияКомментария(Элемент.ТекстРедактирования, ЭтотОбъект); + +КонецПроцедуры + #КонецОбласти #Область ОбработчикиКомандФормы @@ -131,12 +200,17 @@ // СтандартныеПодсистемы.ПодключаемыеКоманды &НаКлиенте Процедура Подключаемый_ВыполнитьКоманду(Команда) - ПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Объект); + ПодключаемыеКомандыКлиент.НачатьВыполнениеКоманды(ЭтотОбъект, Команда, Объект); +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ПродолжитьВыполнениеКомандыНаСервере(ПараметрыВыполнения, ДополнительныеПараметры) Экспорт + ВыполнитьКомандуНаСервере(ПараметрыВыполнения); КонецПроцедуры &НаСервере -Процедура Подключаемый_ВыполнитьКомандуНаСервере(Контекст, Результат) Экспорт - ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, Контекст, Объект, Результат); +Процедура ВыполнитьКомандуНаСервере(ПараметрыВыполнения) + ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, ПараметрыВыполнения, Объект); КонецПроцедуры &НаКлиенте @@ -145,6 +219,18 @@ КонецПроцедуры // Конец СтандартныеПодсистемы.ПодключаемыеКоманды +// СтандартныеПодсистемы.Свойства +&НаКлиенте +Процедура Подключаемый_СвойстваВыполнитьКоманду(ЭлементИлиКоманда, НавигационнаяСсылка = Неопределено, СтандартнаяОбработка = Неопределено) + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда + МодульУправлениеСвойствамиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеСвойствамиКлиент"); + МодульУправлениеСвойствамиКлиент.ВыполнитьКоманду(ЭтотОбъект, ЭлементИлиКоманда, СтандартнаяОбработка); + КонецЕсли; + +КонецПроцедуры +// Конец СтандартныеПодсистемы.Свойства + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -232,17 +318,51 @@ Элементы.СведенияОСогласииГруппа.Видимость = Истина; // Пример сообщения: "У субъекта 20.03.2014 уже было получено согласие, которое действует до 20.03.2017". - ЧастиСообщения = Новый Массив; - ЧастиСообщения.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'У субъекта %1 уже было получено'"), Формат(Согласие.ДатаПолучения, "ДЛФ=D")) + " "); - ЧастиСообщения.Добавить(Новый ФорматированнаяСтрока(НСтр("ru = 'согласие'"), , , , ПолучитьНавигационнуюСсылку(Согласие.ДокументОснование))); Если ЗначениеЗаполнено(Согласие.СрокДействия) Тогда - ЧастиСообщения.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = ', которое действует до %1.'"), Формат(Согласие.СрокДействия, "ДЛФ=D"))); + ПредупреждениеТекст = СтроковыеФункции.ФорматированнаяСтрока( + НСтр("ru = 'У субъекта %1 уже было получено согласие, которое действует до %3.'"), + Формат(Согласие.ДатаПолучения, "ДЛФ=D"), ПолучитьНавигационнуюСсылку(Согласие.ДокументОснование), Формат(Согласие.СрокДействия, "ДЛФ=D")); Иначе - ЧастиСообщения.Добавить(НСтр("ru = ', которое действует бессрочно.'")); + ПредупреждениеТекст = СтроковыеФункции.ФорматированнаяСтрока( + НСтр("ru = 'У субъекта %1 уже было получено согласие, которое действует бессрочно.'"), + Формат(Согласие.ДатаПолучения, "ДЛФ=D"), ПолучитьНавигационнуюСсылку(Согласие.ДокументОснование)); КонецЕсли; - - Элементы.ПредупреждениеТекст.Заголовок = Новый ФорматированнаяСтрока(ЧастиСообщения); + Элементы.ПредупреждениеТекст.Заголовок = ПредупреждениеТекст; КонецПроцедуры +// СтандартныеПодсистемы.Свойства + +&НаСервере +Процедура ОбновитьЭлементыДополнительныхРеквизитов() + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда + МодульУправлениеСвойствами = ОбщегоНазначения.ОбщийМодуль("УправлениеСвойствами"); + МодульУправлениеСвойствами.ОбновитьЭлементыДополнительныхРеквизитов(ЭтотОбъект); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьЗависимостиДополнительныхРеквизитов() + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда + МодульУправлениеСвойствамиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеСвойствамиКлиент"); + МодульУправлениеСвойствамиКлиент.ОбновитьЗависимостиДополнительныхРеквизитов(ЭтотОбъект); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ПриИзмененииДополнительногоРеквизита(Элемент) + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда + МодульУправлениеСвойствамиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеСвойствамиКлиент"); + МодульУправлениеСвойствамиКлиент.ОбновитьЗависимостиДополнительныхРеквизитов(ЭтотОбъект); + КонецЕсли; + +КонецПроцедуры + +// Конец СтандартныеПодсистемы.Свойства + #КонецОбласти diff --git a/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Forms/ФормаСписка/Module.bsl b/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Forms/ФормаСписка/Module.bsl index 8272684fd..9f25e6d32 100644 --- a/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Forms/ФормаСписка/Module.bsl @@ -53,12 +53,17 @@ // СтандартныеПодсистемы.ПодключаемыеКоманды &НаКлиенте Процедура Подключаемый_ВыполнитьКоманду(Команда) - ПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Элементы.Список); + ПодключаемыеКомандыКлиент.НачатьВыполнениеКоманды(ЭтотОбъект, Команда, Элементы.Список); +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ПродолжитьВыполнениеКомандыНаСервере(ПараметрыВыполнения, ДополнительныеПараметры) Экспорт + ВыполнитьКомандуНаСервере(ПараметрыВыполнения); КонецПроцедуры &НаСервере -Процедура Подключаемый_ВыполнитьКомандуНаСервере(Контекст, Результат) Экспорт - ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, Контекст, Элементы.Список, Результат); +Процедура ВыполнитьКомандуНаСервере(ПараметрыВыполнения) + ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, ПараметрыВыполнения, Элементы.Список); КонецПроцедуры &НаКлиенте diff --git a/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/ManagerModule.bsl b/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/ManagerModule.bsl index 1cb1dc2bb..25b1dba2e 100644 --- a/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/ManagerModule.bsl +++ b/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/ManagerModule.bsl @@ -58,7 +58,6 @@ Для Каждого Ссылка Из МассивОбъектов Цикл ЗначенияРеквизитовДокумента = ЗначенияРеквизитовДокументов[Ссылка]; ЗначенияРеквизитовДокумента.ДатаПолучения = Формат(ЗначенияРеквизитовДокумента.ДатаПолучения, "ДЛФ=D"); - ЗначенияРеквизитовДокумента.Номер = ЗначенияРеквизитовДокумента.Номер; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПрефиксацияОбъектов") Тогда МодульПрефиксацияОбъектовКлиентСервер = ОбщегоНазначения.ОбщийМодуль("ПрефиксацияОбъектовКлиентСервер"); ЗначенияРеквизитовДокумента.Номер = МодульПрефиксацияОбъектовКлиентСервер.НомерНаПечать(ЗначенияРеквизитовДокумента.Номер); @@ -158,6 +157,37 @@ // Конец СтандартныеПодсистемы.Печать +// СтандартныеПодсистемы.ПодключаемыеКоманды + +// Определяет список команд создания на основании. +// +// Параметры: +// КомандыСозданияНаОсновании - ТаблицаЗначений - см. СозданиеНаОснованииПереопределяемый.ПередДобавлениемКомандСозданияНаОсновании. +// Параметры - Структура - см. СозданиеНаОснованииПереопределяемый.ПередДобавлениемКомандСозданияНаОсновании. +// +Процедура ДобавитьКомандыСозданияНаОсновании(КомандыСозданияНаОсновании, Параметры) Экспорт + + Документы.ОтзывСогласияНаОбработкуПерсональныхДанных.ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании); + +КонецПроцедуры + +// Для использования в процедуре ДобавитьКомандыСозданияНаОсновании других модулей менеджеров объектов. +// Добавляет в список команд создания на основании этот объект. +// +// Параметры: +// КомандыСозданияНаОсновании - ТаблицаЗначений - см. СозданиеНаОснованииПереопределяемый.ПередДобавлениемКомандСозданияНаОсновании. +// +// Возвращаемое значение: +// СтрокаТаблицыЗначений, Неопределено - описание добавленной команды. +// +Функция ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании) Экспорт + + Возврат СозданиеНаОсновании.ДобавитьКомандуСозданияНаОсновании(КомандыСозданияНаОсновании, Метаданные.Документы.СогласиеНаОбработкуПерсональныхДанных); + +КонецФункции + +// Конец СтандартныеПодсистемы.ПодключаемыеКоманды + #КонецОбласти #КонецОбласти diff --git a/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/СогласиеНаОбработкуПерсональныхДанных.mdo b/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/СогласиеНаОбработкуПерсональныхДанных.mdo index 2b6c9e9d0..63c00290d 100644 --- a/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/СогласиеНаОбработкуПерсональныхДанных.mdo +++ b/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/СогласиеНаОбработкуПерсональныхДанных.mdo @@ -56,6 +56,38 @@ + + Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты + Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты.Attribute.Свойство + Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты.Attribute.ИмяПредопределенногоНабора + + Документ_СогласиеНаОбработкуПерсональныхДанных + + -1 + -1 + Document.СогласиеНаОбработкуПерсональныхДанных.TabularSection.ДополнительныеРеквизиты + Document.СогласиеНаОбработкуПерсональныхДанных.TabularSection.ДополнительныеРеквизиты.StandardAttribute.Ref + Document.СогласиеНаОбработкуПерсональныхДанных.TabularSection.ДополнительныеРеквизиты.Attribute.Свойство + Document.СогласиеНаОбработкуПерсональныхДанных.TabularSection.ДополнительныеРеквизиты.Attribute.Значение + -1 + -1 + + + Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеСведения + Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеСведения.Attribute.Свойство + Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеСведения.Attribute.ИмяПредопределенногоНабора + + Документ_СогласиеНаОбработкуПерсональныхДанных + + -1 + -1 + InformationRegister.ДополнительныеСведения + InformationRegister.ДополнительныеСведения.Dimension.Объект + InformationRegister.ДополнительныеСведения.Dimension.Свойство + InformationRegister.ДополнительныеСведения.Resource.Значение + -1 + -1 + Use @@ -386,6 +418,84 @@ PersonalComputer MobileDevice + + + + + + ДополнительныеРеквизиты + + ru + Дополнительные реквизиты + + + Use + LineNumber + + Use + + + + + Свойство + + ru + Свойство + + + ChartOfCharacteristicTypesRef.ДополнительныеРеквизитыИСведения + + + ru + Дополнительный реквизит + + + + Use + Use + + + Значение + + ru + Значение + + + Characteristic.ДополнительныеРеквизитыИСведения + + + ru + Значение дополнительного реквизита + + + + + Отбор.Владелец + Document.СогласиеНаОбработкуПерсональныхДанных.TabularSection.ДополнительныеРеквизиты.Attribute.Свойство + + Use + Use + + + ТекстоваяСтрока + + ru + Текстовая строка + + + String + + + + ru + Полный текст строкового дополнительного реквизита + + + + Use + Use + + ПФ_MXL_СогласиеНаОбработкуПерсональныхДанных diff --git a/SSL/src/Documents/СообщениеSMS/Forms/ФормаДокумента/Module.bsl b/SSL/src/Documents/СообщениеSMS/Forms/ФормаДокумента/Module.bsl index bf3e55eaa..746d979f5 100644 --- a/SSL/src/Documents/СообщениеSMS/Forms/ФормаДокумента/Module.bsl +++ b/SSL/src/Documents/СообщениеSMS/Forms/ФормаДокумента/Module.bsl @@ -630,8 +630,33 @@ Возврат; КонецЕсли; + Адресат.НомерДляОтправки = ФорматироватьНомер(Адресат.КакСвязаться); + КонецПроцедуры +&НаСервере +Функция ФорматироватьНомер(Номер) + Результат = ""; + ДопустимыеСимволы = "+1234567890"; + Для Позиция = 1 По СтрДлина(Номер) Цикл + Символ = Сред(Номер,Позиция,1); + Если СтрНайти(ДопустимыеСимволы, Символ) > 0 Тогда + Результат = Результат + Символ; + КонецЕсли; + КонецЦикла; + + Если СтрДлина(Результат) > 10 Тогда + ПервыйСимвол = Лев(Результат, 1); + Если ПервыйСимвол = "8" Тогда + Результат = "+7" + Сред(Результат, 2); + ИначеЕсли ПервыйСимвол <> "+" Тогда + Результат = "+" + Результат; + КонецЕсли; + КонецЕсли; + + Возврат Результат; +КонецФункции + &НаСервере Функция ВыполнитьОтправкуНаСервере() @@ -767,13 +792,18 @@ &НаКлиенте Процедура Подключаемый_ВыполнитьКоманду(Команда) МодульПодключаемыеКомандыКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ПодключаемыеКомандыКлиент"); - МодульПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Объект); + МодульПодключаемыеКомандыКлиент.НачатьВыполнениеКоманды(ЭтотОбъект, Команда, Объект); +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ПродолжитьВыполнениеКомандыНаСервере(ПараметрыВыполнения, ДополнительныеПараметры) Экспорт + ВыполнитьКомандуНаСервере(ПараметрыВыполнения); КонецПроцедуры &НаСервере -Процедура Подключаемый_ВыполнитьКомандуНаСервере(Контекст, Результат) Экспорт +Процедура ВыполнитьКомандуНаСервере(ПараметрыВыполнения) МодульПодключаемыеКоманды = ОбщегоНазначения.ОбщийМодуль("ПодключаемыеКоманды"); - МодульПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, Контекст, Объект, Результат); + МодульПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, ПараметрыВыполнения, Объект); КонецПроцедуры &НаКлиенте @@ -781,7 +811,6 @@ МодульПодключаемыеКомандыКлиентСервер = ОбщегоНазначенияКлиент.ОбщийМодуль("ПодключаемыеКомандыКлиентСервер"); МодульПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект); КонецПроцедуры - // Конец СтандартныеПодсистемы.ПодключаемыеКоманды // СтандартныеПодсистемы.ШаблоныСообщений diff --git a/SSL/src/Documents/СообщениеSMS/Forms/ФормаСписка/Module.bsl b/SSL/src/Documents/СообщениеSMS/Forms/ФормаСписка/Module.bsl index 170333f78..fb6f255eb 100644 --- a/SSL/src/Documents/СообщениеSMS/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Documents/СообщениеSMS/Forms/ФормаСписка/Module.bsl @@ -52,13 +52,18 @@ &НаКлиенте Процедура Подключаемый_ВыполнитьКоманду(Команда) МодульПодключаемыеКомандыКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ПодключаемыеКомандыКлиент"); - МодульПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Элементы.Список); + МодульПодключаемыеКомандыКлиент.НачатьВыполнениеКоманды(ЭтотОбъект, Команда, Элементы.Список); +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ПродолжитьВыполнениеКомандыНаСервере(ПараметрыВыполнения, ДополнительныеПараметры) Экспорт + ВыполнитьКомандуНаСервере(ПараметрыВыполнения); КонецПроцедуры &НаСервере -Процедура Подключаемый_ВыполнитьКомандуНаСервере(Контекст, Результат) Экспорт +Процедура ВыполнитьКомандуНаСервере(ПараметрыВыполнения) МодульПодключаемыеКоманды = ОбщегоНазначения.ОбщийМодуль("ПодключаемыеКоманды"); - МодульПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, Контекст, Элементы.Список, Результат); + МодульПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, ПараметрыВыполнения, Элементы.Список); КонецПроцедуры &НаКлиенте diff --git a/SSL/src/Documents/СообщениеSMS/ManagerModule.bsl b/SSL/src/Documents/СообщениеSMS/ManagerModule.bsl index f25273525..3c1a1d562 100644 --- a/SSL/src/Documents/СообщениеSMS/ManagerModule.bsl +++ b/SSL/src/Documents/СообщениеSMS/ManagerModule.bsl @@ -69,6 +69,46 @@ // Конец СтандартныеПодсистемы.УправлениеДоступом +// СтандартныеПодсистемы.ПодключаемыеКоманды + +// Определяет список команд создания на основании. +// +// Параметры: +// КомандыСозданияНаОсновании - ТаблицаЗначений - см. СозданиеНаОснованииПереопределяемый.ПередДобавлениемКомандСозданияНаОсновании. +// Параметры - Структура - см. СозданиеНаОснованииПереопределяемый.ПередДобавлениемКомандСозданияНаОсновании. +// +Процедура ДобавитьКомандыСозданияНаОсновании(КомандыСозданияНаОсновании, Параметры) Экспорт + + Документы.Встреча.ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании); + Документы.ЗапланированноеВзаимодействие.ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании); + ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании); + Документы.ТелефонныйЗвонок.ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании); + Документы.ЭлектронноеПисьмоИсходящее.ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании); + +КонецПроцедуры + +// Для использования в процедуре ДобавитьКомандыСозданияНаОсновании других модулей менеджеров объектов. +// Добавляет в список команд создания на основании этот объект. +// +// Параметры: +// КомандыСозданияНаОсновании - ТаблицаЗначений - см. СозданиеНаОснованииПереопределяемый.ПередДобавлениемКомандСозданияНаОсновании. +// +// Возвращаемое значение: +// СтрокаТаблицыЗначений, Неопределено - описание добавленной команды. +// +Функция ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании) Экспорт + + Команда = СозданиеНаОсновании.ДобавитьКомандуСозданияНаОсновании(КомандыСозданияНаОсновании, Метаданные.Документы.СообщениеSMS); + Если Команда <> Неопределено Тогда + Команда.ФункциональныеОпции = "ИспользоватьПрочиеВзаимодействия"; + КонецЕсли; + + Возврат Команда; + +КонецФункции + +// Конец СтандартныеПодсистемы.ПодключаемыеКоманды + #КонецОбласти #КонецОбласти diff --git a/SSL/src/Documents/СообщениеSMS/ObjectModule.bsl b/SSL/src/Documents/СообщениеSMS/ObjectModule.bsl index 268c98c87..cdf7de358 100644 --- a/SSL/src/Documents/СообщениеSMS/ObjectModule.bsl +++ b/SSL/src/Documents/СообщениеSMS/ObjectModule.bsl @@ -21,7 +21,7 @@ // Процедура ЗаполнитьКонтакты(Контакты) Экспорт - Взаимодействия.ЗаполнитьКонтактыДляВстречи(Контакты, Адресаты, Перечисления.ТипыКонтактнойИнформации.Телефон); + Взаимодействия.ЗаполнитьКонтактыДляВстречи(Контакты, Адресаты, Перечисления.ТипыКонтактнойИнформации.Телефон, Истина); КонецПроцедуры @@ -67,11 +67,15 @@ Тема = Взаимодействия.ТемаПоТекстуСообщения(ТекстСообщения); Взаимодействия.СформироватьСписокУчастников(ЭтотОбъект); - Для Каждого СтрокаАдресаты Из Адресаты Цикл + Если Метаданные.ОбщиеМодули.Найти("ВзаимодействияЛокализация") <> Неопределено Тогда - СтрокаАдресаты.НомерДляОтправки = Взаимодействия.РезультатФорматированияНомераДляОтправки(СтрокаАдресаты.КакСвязаться); + МодульВзаимодействияЛокализация = ОбщегоНазначения.ОбщийМодуль("ВзаимодействияЛокализация"); - КонецЦикла; + Для Каждого СтрокаАдресаты Из Адресаты Цикл + МодульВзаимодействияЛокализация.ОтформатироватьТелефонныйНомерДляОтправки(СтрокаАдресаты.КакСвязаться, СтрокаАдресаты.НомерДляОтправки); + КонецЦикла; + + КонецЕсли; КонецПроцедуры diff --git a/SSL/src/Documents/ТелефонныйЗвонок/Forms/ФормаСписка/Module.bsl b/SSL/src/Documents/ТелефонныйЗвонок/Forms/ФормаСписка/Module.bsl index e49cb0051..fabb3ff9c 100644 --- a/SSL/src/Documents/ТелефонныйЗвонок/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Documents/ТелефонныйЗвонок/Forms/ФормаСписка/Module.bsl @@ -13,6 +13,11 @@ УстановитьУсловноеОформление(); + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВерсионированиеОбъектов") Тогда + МодульВерсионированиеОбъектов = ОбщегоНазначения.ОбщийМодуль("ВерсионированиеОбъектов"); + МодульВерсионированиеОбъектов.ПриСозданииНаСервере(ЭтотОбъект); + КонецЕсли; + КонецПроцедуры #КонецОбласти diff --git a/SSL/src/Documents/ТелефонныйЗвонок/ManagerModule.bsl b/SSL/src/Documents/ТелефонныйЗвонок/ManagerModule.bsl index 8761a66f0..18e754859 100644 --- a/SSL/src/Documents/ТелефонныйЗвонок/ManagerModule.bsl +++ b/SSL/src/Documents/ТелефонныйЗвонок/ManagerModule.bsl @@ -88,6 +88,46 @@ // Конец СтандартныеПодсистемы.УправлениеДоступом +// СтандартныеПодсистемы.ПодключаемыеКоманды + +// Определяет список команд создания на основании. +// +// Параметры: +// КомандыСозданияНаОсновании - ТаблицаЗначений - см. СозданиеНаОснованииПереопределяемый.ПередДобавлениемКомандСозданияНаОсновании. +// Параметры - Структура - см. СозданиеНаОснованииПереопределяемый.ПередДобавлениемКомандСозданияНаОсновании. +// +Процедура ДобавитьКомандыСозданияНаОсновании(КомандыСозданияНаОсновании, Параметры) Экспорт + + Документы.Встреча.ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании); + Документы.ЗапланированноеВзаимодействие.ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании); + Документы.СообщениеSMS.ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании); + ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании); + Документы.ЭлектронноеПисьмоИсходящее.ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании); + +КонецПроцедуры + +// Для использования в процедуре ДобавитьКомандыСозданияНаОсновании других модулей менеджеров объектов. +// Добавляет в список команд создания на основании этот объект. +// +// Параметры: +// КомандыСозданияНаОсновании - ТаблицаЗначений - см. СозданиеНаОснованииПереопределяемый.ПередДобавлениемКомандСозданияНаОсновании. +// +// Возвращаемое значение: +// СтрокаТаблицыЗначений, Неопределено - описание добавленной команды. +// +Функция ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании) Экспорт + + Команда = СозданиеНаОсновании.ДобавитьКомандуСозданияНаОсновании(КомандыСозданияНаОсновании, Метаданные.Документы.ТелефонныйЗвонок); + Если Команда <> Неопределено Тогда + Команда.ФункциональныеОпции = "ИспользоватьПрочиеВзаимодействия"; + КонецЕсли; + + Возврат Команда; + +КонецФункции + +// Конец СтандартныеПодсистемы.ПодключаемыеКоманды + #КонецОбласти #КонецОбласти diff --git a/SSL/src/Documents/ТелефонныйЗвонок/ObjectModule.bsl b/SSL/src/Documents/ТелефонныйЗвонок/ObjectModule.bsl index 047b83374..3fcb4b1ab 100644 --- a/SSL/src/Documents/ТелефонныйЗвонок/ObjectModule.bsl +++ b/SSL/src/Documents/ТелефонныйЗвонок/ObjectModule.bsl @@ -45,6 +45,10 @@ // СтандартныеПодсистемы.УправлениеДоступом // См. УправлениеДоступом.ЗаполнитьНаборыЗначенийДоступа. +// +// Параметры: +// Таблица - ТаблицаЗначений - см. УправлениеДоступом.ТаблицаНаборыЗначенийДоступа. +// Процедура ЗаполнитьНаборыЗначенийДоступа(Таблица) Экспорт ВзаимодействияСобытия.ЗаполнитьНаборыЗначенийДоступа(ЭтотОбъект, Таблица); diff --git a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаДокумента/Module.bsl b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаДокумента/Module.bsl index 53ee25375..4dd236b6c 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаДокумента/Module.bsl +++ b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаДокумента/Module.bsl @@ -270,11 +270,11 @@ ОбработчикОповещенияОЗакрытии = Новый ОписаниеОповещения("ВопросОНеобходимостиОтправкиУведомленияОПрочтенииПослеЗавершения", ЭтотОбъект); ПоказатьВопрос(ОбработчикОповещенияОЗакрытии, - НСтр("ru='Отправитель запросил уведомление о прочтении. Отправить?'"), + НСтр("ru = 'Отправитель запросил уведомление о прочтении. Отправить?'"), РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Да, - НСтр("ru='Запрос уведомления'")); + НСтр("ru = 'Запрос уведомления'")); КонецЕсли; @@ -456,20 +456,17 @@ &НаКлиенте Процедура ПараметрыПисьма(Команда) - ТекстЗаголовкиИнтернета = Новый ТекстовыйДокумент; - ТекстЗаголовкиИнтернета.ДобавитьСтроку(Объект.ВнутреннийЗаголовок); - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("Создано", Объект.Дата); - ПараметрыФормы.Вставить("Получено", Объект.ДатаПолучения); - ПараметрыФормы.Вставить("УведомитьОДоставке", Объект.УведомитьОДоставке); + ПараметрыФормы.Вставить("Создано", Объект.Дата); + ПараметрыФормы.Вставить("Получено", Объект.ДатаПолучения); + ПараметрыФормы.Вставить("УведомитьОДоставке", Объект.УведомитьОДоставке); ПараметрыФормы.Вставить("УведомитьОПрочтении", Объект.УведомитьОПрочтении); - ПараметрыФормы.Вставить("ЗаголовкиИнтернета", ТекстЗаголовкиИнтернета); - ПараметрыФормы.Вставить("Письмо", Объект.Ссылка); - ПараметрыФормы.Вставить("ТипПисьма", "ЭлектронноеПисьмоВходящее"); - ПараметрыФормы.Вставить("Кодировка", Объект.Кодировка); - ПараметрыФормы.Вставить("ВнутреннийНомер", Объект.Номер); - ПараметрыФормы.Вставить("УчетнаяЗапись", Объект.УчетнаяЗапись); + ПараметрыФормы.Вставить("ЗаголовкиИнтернета", Объект.ВнутреннийЗаголовок); + ПараметрыФормы.Вставить("Письмо", Объект.Ссылка); + ПараметрыФормы.Вставить("ТипПисьма", "ЭлектронноеПисьмоВходящее"); + ПараметрыФормы.Вставить("Кодировка", Объект.Кодировка); + ПараметрыФормы.Вставить("ВнутреннийНомер", Объект.Номер); + ПараметрыФормы.Вставить("УчетнаяЗапись", Объект.УчетнаяЗапись); ОткрытьФорму("ЖурналДокументов.Взаимодействия.Форма.ПараметрыЭлектронногоПисьма", ПараметрыФормы, ЭтотОбъект); diff --git a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/ManagerModule.bsl b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/ManagerModule.bsl index 2db2df0e5..2756abc45 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/ManagerModule.bsl +++ b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/ManagerModule.bsl @@ -150,6 +150,40 @@ // Конец СтандартныеПодсистемы.УправлениеДоступом +// СтандартныеПодсистемы.ПодключаемыеКоманды + +// Определяет список команд создания на основании. +// +// Параметры: +// КомандыСозданияНаОсновании - ТаблицаЗначений - см. СозданиеНаОснованииПереопределяемый.ПередДобавлениемКомандСозданияНаОсновании. +// Параметры - Структура - см. СозданиеНаОснованииПереопределяемый.ПередДобавлениемКомандСозданияНаОсновании. +// +Процедура ДобавитьКомандыСозданияНаОсновании(КомандыСозданияНаОсновании, Параметры) Экспорт + + Документы.Встреча.ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании); + Документы.ЗапланированноеВзаимодействие.ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании); + Документы.СообщениеSMS.ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании); + Документы.ТелефонныйЗвонок.ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании); + +КонецПроцедуры + +// Для использования в процедуре ДобавитьКомандыСозданияНаОсновании других модулей менеджеров объектов. +// Добавляет в список команд создания на основании этот объект. +// +// Параметры: +// КомандыСозданияНаОсновании - ТаблицаЗначений - см. СозданиеНаОснованииПереопределяемый.ПередДобавлениемКомандСозданияНаОсновании. +// +// Возвращаемое значение: +// СтрокаТаблицыЗначений, Неопределено - описание добавленной команды. +// +Функция ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании) Экспорт + + Возврат СозданиеНаОсновании.ДобавитьКомандуСозданияНаОсновании(КомандыСозданияНаОсновании, Метаданные.Документы.ЭлектронноеПисьмоВходящее); + +КонецФункции + +// Конец СтандартныеПодсистемы.ПодключаемыеКоманды + #КонецОбласти #КонецОбласти diff --git a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/ObjectModule.bsl b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/ObjectModule.bsl index 4868e184c..24e508cec 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/ObjectModule.bsl +++ b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/ObjectModule.bsl @@ -37,17 +37,16 @@ ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(ЭтотОбъект); - Если ЭтоНовый() Тогда - ДополнительныеСвойства.Вставить("ПометкаУдаления", Ложь); - Иначе - ДополнительныеСвойства.Вставить("ПометкаУдаления", - ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Ссылка, "ПометкаУдаления")); - КонецЕсли; - - Если ПометкаУдаления Тогда - ЕстьВложения = Ложь; + ПредыдущаяПометкаУдаления = Ложь; + Если Не ЭтоНовый() Тогда + ПредыдущаяПометкаУдаления = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Ссылка, "ПометкаУдаления"); КонецЕсли; + ДополнительныеСвойства.Вставить("ПометкаУдаления", ПредыдущаяПометкаУдаления); + Если ПометкаУдаления <> ПредыдущаяПометкаУдаления Тогда + ЕстьВложения = ?(ПометкаУдаления, Ложь, РаботаСФайламиСлужебныйВызовСервера.КоличествоПрисоединенныхФайлов(Ссылка) > 0); + КонецЕсли; + КонецПроцедуры Процедура ПриЗаписи(Отказ) @@ -57,7 +56,6 @@ КонецЕсли; Взаимодействия.ПриЗаписиДокумента(ЭтотОбъект); - УправлениеЭлектроннойПочтой.УстановитьПометкуУдаленияУВложенийПисьма(Ссылка, ПометкаУдаления); Взаимодействия.ОтработатьПризнакИзмененияПометкиУдаленияПриЗаписиПисьма(ЭтотОбъект); КонецПроцедуры diff --git a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Module.bsl b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Module.bsl index 7ac178ba1..fea769735 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Module.bsl +++ b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Module.bsl @@ -97,6 +97,12 @@ КонецЕсли; КонецЕсли; + // СтандартныеПодсистемы.ШаблоныСообщений + Если ИмяСобытия = "Запись_ШаблоныСообщений" Тогда + ОпределитьВозможностьЗаполненияПисьмаПоШаблону(); + КонецЕсли; + // Конец СтандартныеПодсистемы.ШаблоныСообщений + КонецПроцедуры &НаКлиенте @@ -109,12 +115,9 @@ Если ФорматСообщения = ПредопределенноеЗначение("Перечисление.СпособыРедактированияЭлектронныхПисем.ОбычныйТекст") Тогда Элементы.ТекстПисьма.ПолучитьГраницыВыделения(СтрокаНачало, КолонкаНачало, СтрокаКонец, КолонкаКонец); - ТекстовыйДокумент = Новый ТекстовыйДокумент; - ТекстовыйДокумент.УстановитьТекст(ТекстПисьма); - СтрокаВставки = ТекстовыйДокумент.ПолучитьСтроку(СтрокаНачало); - СтрокаВставки = Лев(СтрокаВставки, КолонкаНачало - 1) + ВыбранноеЗначение + Прав(СтрокаВставки,СтрДлина(СтрокаВставки) - КолонкаКонец + 1); - ТекстовыйДокумент.ЗаменитьСтроку(СтрокаНачало, СтрокаВставки); - ТекстПисьма = ТекстовыйДокумент.ПолучитьТекст(); + + ТекстПисьма = РезультатВставкиТекстаВПисьмо(ТекстПисьма, СтрокаНачало, КолонкаНачало, КолонкаКонец, ВыбранноеЗначение); + Иначе Элементы.ТекстПисьмаФорматированныйДокумент.ПолучитьГраницыВыделения(НачалоВыделения, КонецВыделения); @@ -389,8 +392,15 @@ КонецЕсли; УстановитьПривилегированныйРежим(Истина); + Письмо = ТекущийОбъект.Ссылка; + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировкиДанных = Блокировка.Добавить("Справочник.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы"); + ЭлементБлокировкиДанных.УстановитьЗначение("ВладелецФайла", Письмо); + РегистрыСведений.ПредметыПапкиВзаимодействий.ЗаблокироватьПредметыПапокВзаимодействий(Блокировка, Письмо); + Блокировка.Заблокировать(); + // Добавим в список удаленных вложений ранее сохраненные картинки, отображаемые в теле форматированного документа. ТаблицаВложенийКартинокФорматированногоДокумента = Взаимодействия.ПолучитьВложенияПисьмаСНеПустымИД(Письмо); Для каждого Вложение Из ТаблицаВложенийКартинокФорматированногоДокумента Цикл @@ -402,7 +412,6 @@ ОбъектВложение = УдаленноеВложение.Значение.ПолучитьОбъект(); ОбъектВложение.Удалить(); КонецЦикла; - УдаленныеВложения.Очистить(); Если ФорматСообщения = Перечисления.СпособыРедактированияЭлектронныхПисем.HTML Тогда @@ -411,17 +420,14 @@ ДвоичныеДанныеКартинки = Вложение.Картинка.ПолучитьДвоичныеДанные(); АдресКартинкиВоВременномХранилище = ПоместитьВоВременноеХранилище(ДвоичныеДанныеКартинки, УникальныйИдентификатор); - ПрисоединенныйФайл = УправлениеЭлектроннойПочтой.ЗаписатьВложениеЭлектронногоПисьмаИзВременногоХранилища( - Письмо, - АдресКартинкиВоВременномХранилище, - "_" + СтрЗаменить(Вложение.ИдентификаторФайлаДляHTML, "-", "_"), - ДвоичныеДанныеКартинки.Размер()); - Если ПрисоединенныйФайл <> Неопределено Тогда - ПрисоединенныйФайлОбъект = ПрисоединенныйФайл.ПолучитьОбъект(); - ПрисоединенныйФайлОбъект.ИДФайлаЭлектронногоПисьма = Вложение.ИдентификаторФайлаДляHTML; - ПрисоединенныйФайлОбъект.Записать(); - КонецЕсли; + ПараметрыВложения = Новый Структура; + ПараметрыВложения.Вставить("ИмяФайла", "_" + СтрЗаменить(Вложение.ИдентификаторФайлаДляHTML, "-", "_")); + ПараметрыВложения.Вставить("Размер", ДвоичныеДанныеКартинки.Размер()); + ПараметрыВложения.Вставить("ИДФайлаЭлектронногоПисьма", Вложение.ИдентификаторФайлаДляHTML); + + ПрисоединенныйФайл = УправлениеЭлектроннойПочтой.ЗаписатьВложениеЭлектронногоПисьмаИзВременногоХранилища( + Письмо, АдресКартинкиВоВременномХранилище, ПараметрыВложения); КонецЦикла; @@ -435,13 +441,14 @@ ДвоичныеДанныеКартинки = РаботаСФайлами.ДвоичныеДанныеФайла(Вложение.Ссылка); АдресКартинкиВоВременномХранилище = ПоместитьВоВременноеХранилище(ДвоичныеДанныеКартинки, УникальныйИдентификатор); + + ПараметрыВложения = Новый Структура; + ПараметрыВложения.Вставить("ИмяФайла", Вложение.Наименование); + ПараметрыВложения.Вставить("Размер", Вложение.Размер); + ПараметрыВложения.Вставить("ИДФайлаЭлектронногоПисьма", Вложение.ИДФайлаЭлектронногоПисьма); + ПрисоединенныйФайл = УправлениеЭлектроннойПочтой.ЗаписатьВложениеЭлектронногоПисьмаИзВременногоХранилища( - Письмо,АдресКартинкиВоВременномХранилище,Вложение.Наименование, Вложение.Размер); - Если ПрисоединенныйФайл <> Неопределено Тогда - ПрисоединенныйФайлОбъект = ПрисоединенныйФайл.ПолучитьОбъект(); - ПрисоединенныйФайлОбъект.ИДФайлаЭлектронногоПисьма = Вложение.ИДФайлаЭлектронногоПисьма; - ПрисоединенныйФайлОбъект.Записать(); - КонецЕсли; + Письмо, АдресКартинкиВоВременномХранилище, ПараметрыВложения); КонецЦикла; @@ -454,8 +461,13 @@ Если СтрокаТаблицыВложений.Расположение = 4 Тогда // из временного хранилища + + ПараметрыВложения = Новый Структура; + ПараметрыВложения.Вставить("ИмяФайла", ИмяФайла); + ПараметрыВложения.Вставить("Размер", Размер); + УправлениеЭлектроннойПочтой.ЗаписатьВложениеЭлектронногоПисьмаИзВременногоХранилища( - Письмо, СтрокаТаблицыВложений.ИмяФайлаНаКомпьютере, ИмяФайла, Размер); + Письмо, СтрокаТаблицыВложений.ИмяФайлаНаКомпьютере, ПараметрыВложения); ИначеЕсли СтрокаТаблицыВложений.Расположение = 3 Тогда // из файла на сервере @@ -476,6 +488,9 @@ Если Объект.СтатусПисьма <> ТекущийСтатусПисьма Тогда ПрикрепитьВходящееПисьмоОснованиеКакВложениеЕслиНеобходимо(ТекущийОбъект); + Взаимодействия.УстановитьПапкуЭлектронногоПисьма(Письмо, + Взаимодействия.ОпределитьПапкуДляПисьмаПоУмолчанию(Письмо, Истина)); + ТекущийСтатусПисьма = Объект.СтатусПисьма; КонецЕсли; КонецПроцедуры @@ -494,14 +509,6 @@ Взаимодействия.УстановитьЗаголовокФормыЭлектронногоПисьма(ЭтотОбъект); УстановитьЗаголовокКнопкиПоУмолчанию(); - Если Объект.СтатусПисьма <> ТекущийСтатусПисьма Тогда - - ВзаимодействияВызовСервера.УстановитьПапкуЭлектронногоПисьма(Объект.Ссылка, - Взаимодействия.ОпределитьПапкуДляПисьмаПоУмолчанию(Объект.Ссылка, Истина)); - ТекущийСтатусПисьма = Объект.СтатусПисьма; - - КонецЕсли; - Элементы.СтраницаКомментарий.Картинка = ОбщегоНазначенияКлиентСервер.КартинкаКомментария(Объект.Комментарий); КонецПроцедуры @@ -812,30 +819,29 @@ Если Объект.СтатусПисьма = ПредопределенноеЗначение("Перечисление.СтатусыИсходящегоЭлектронногоПисьма.Отправлено") Тогда ПереслатьВыполнить(); - Иначе + Возврат; + КонецЕсли; - Если ПроверитьЗаполнениеСписковАдресатов() Тогда - Возврат; - КонецЕсли; + Если ПроверитьЗаполнениеСписковАдресатов() Тогда + Возврат; + КонецЕсли; + + Если СписокПолучателей.Количество() = 0 Тогда - Если СписокПолучателей.Количество() = 0 Тогда - - ОбщегоНазначенияКлиент.СообщитьПользователю( - НСтр("ru='Необходимо указать хотя бы одного получателя письма.'"),, "СписокПолучателей"); - Возврат; - - ИначеЕсли (СписокПолучателей.Количество() = 1 И ПустаяСтрока(СписокПолучателей[0].Адрес)) Тогда - - ОбщегоНазначенияКлиент.СообщитьПользователю( - НСтр("ru='Необходимо указать хотя бы одного получателя письма.'"),, "СписокПолучателей[0].Представление"); - Возврат; - - КонецЕсли; + ОбщегоНазначенияКлиент.СообщитьПользователю( + НСтр("ru = 'Необходимо указать хотя бы одного получателя письма.'"),, "СписокПолучателей"); + Возврат; - ОтправитьВыполнить(); + ИначеЕсли (СписокПолучателей.Количество() = 1 И ПустаяСтрока(СписокПолучателей[0].Адрес)) Тогда + + ОбщегоНазначенияКлиент.СообщитьПользователю( + НСтр("ru = 'Необходимо указать хотя бы одного получателя письма.'"),, "СписокПолучателей[0].Представление"); + Возврат; КонецЕсли; + ОтправитьВыполнить(); + КонецПроцедуры &НаКлиенте @@ -889,10 +895,10 @@ &НаКлиенте Процедура ПараметрыПисьма(Команда) - ТекстИдентификаторы = Новый ТекстовыйДокумент; - ТекстИдентификаторы.ДобавитьСтроку("Идентификатор сообщения: " + Объект.ИдентификаторСообщения); - ТекстИдентификаторы.ДобавитьСтроку("Идентификатор основания: " + Объект.ИдентификаторОснования); - ТекстИдентификаторы.ДобавитьСтроку("Идентификаторы оснований: " + ТекстИдентификаторы = Новый Массив; + ТекстИдентификаторы.Добавить("Идентификатор сообщения: " + Объект.ИдентификаторСообщения); + ТекстИдентификаторы.Добавить("Идентификатор основания: " + Объект.ИдентификаторОснования); + ТекстИдентификаторы.Добавить("Идентификаторы оснований: " + ПолучитьПредставлениеИдентификаторовОснований(Объект.ИдентификаторыОснований)); СтруктураПараметры = Новый Структура; @@ -900,7 +906,7 @@ СтруктураПараметры.Вставить("Отправлено", Объект.ДатаОтправления); СтруктураПараметры.Вставить("УведомитьОДоставке", Объект.УведомитьОДоставке); СтруктураПараметры.Вставить("УведомитьОПрочтении", Объект.УведомитьОПрочтении); - СтруктураПараметры.Вставить("ЗаголовкиИнтернета", ТекстИдентификаторы); + СтруктураПараметры.Вставить("ЗаголовкиИнтернета", СтрСоединить(ТекстИдентификаторы, Символы.ПС)); СтруктураПараметры.Вставить("Письмо", Объект.Ссылка); СтруктураПараметры.Вставить("ТипПисьма", "ЭлектронноеПисьмоИсходящее"); СтруктураПараметры.Вставить("Кодировка", Объект.Кодировка); @@ -985,6 +991,9 @@ ОтборЭлемента.ПравоеЗначение = Перечисления.СтатусыИсходящегоЭлектронногоПисьма.Черновик; Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина); + + // Список вариантов отправки + Взаимодействия.УстановитьУсловноеОформлениеСпискаВыбора(ЭтотОбъект, "СписокПолучателейВариантОтправки", "СписокПолучателей.ВариантОтправки"); КонецПроцедуры @@ -1087,11 +1096,11 @@ ИЛИ (Объект.ДатаКогдаОтправить <> Дата(1,1,1) И Объект.ДатаКогдаОтправить > ОбщегоНазначенияКлиент.ДатаСеанса()) ИЛИ (Объект.ДатаАктуальностиОтправки <> Дата(1,1,1) И Объект.ДатаАктуальностиОтправки < ОбщегоНазначенияКлиент.ДатаСеанса())) Тогда - Элементы.Отправить.Доступность = Ложь; + Элементы.Отправить.Видимость = Ложь; Иначе - Элементы.Отправить.Доступность = Истина; + Элементы.Отправить.Видимость = Истина; КонецЕсли; @@ -1505,13 +1514,12 @@ УдалитьФайлы(ИмяФайла); КонецЕсли; - ПараметрыФайла = Новый Структура; - ПараметрыФайла.Вставить("ВладелецФайлов", ТекущийОбъект.Ссылка); - ПараметрыФайла.Вставить("Автор", Неопределено); - ПараметрыФайла.Вставить("ИмяБезРасширения", НСтр("ru = 'Пересылаемое сообщение'")); - ПараметрыФайла.Вставить("РасширениеБезТочки", "html"); - ПараметрыФайла.Вставить("ВремяИзменения", Неопределено); - ПараметрыФайла.Вставить("ВремяИзмененияУниверсальное", Неопределено); + ПараметрыФайла = РаботаСФайлами.ПараметрыДобавленияФайла(); + ПараметрыФайла.ВладелецФайлов = ТекущийОбъект.Ссылка; + ПараметрыФайла.ИмяБезРасширения = НСтр("ru = 'Пересылаемое сообщение'"); + ПараметрыФайла.РасширениеБезТочки = "html"; + ПараметрыФайла.ВремяИзмененияУниверсальное = Неопределено; + РаботаСФайлами.ДобавитьФайл(ПараметрыФайла, АдресФайлаВХранилище); КонецЕсли; @@ -1574,15 +1582,7 @@ КонецПроцедуры &НаКлиенте -Процедура НовыйФайлПослеИнициализации(Файл, ДополнительныеПараметры) Экспорт - - ОписаниеОповещение = Новый ОписаниеОповещения("ПолучениеРазмераПослеОкончания", ЭтотОбъект, ДополнительныеПараметры); - Файл.НачатьПолучениеРазмера(ОписаниеОповещение); - -КонецПроцедуры - -&НаКлиенте -Процедура ПолучениеРазмераПослеОкончания(Размер, ДополнительныеПараметры) Экспорт +Процедура ПолучениеРазмераЗавершение(Размер, ДополнительныеПараметры) Экспорт СтрокаТаблицыВложений = ДополнительныеПараметры.СтрокаТаблицыВложений; СтрокаТаблицыВложений.Размер = Размер; @@ -1608,10 +1608,8 @@ Расширение = ОбщегоНазначенияКлиентСервер.ПолучитьРасширениеИмениФайла(ИмяФайла); НоваяСтрока.ИндексКартинки = РаботаСФайламиСлужебныйКлиентСервер.ПолучитьИндексПиктограммыФайла(Расширение); ДополнительныеПараметры = Новый Структура("СтрокаТаблицыВложений", НоваяСтрока); - ОписаниеОповещение = Новый ОписаниеОповещения("НовыйФайлПослеИнициализации", ЭтотОбъект, ДополнительныеПараметры); - Файл = Новый Файл(); - Файл.НачатьИнициализацию(ОписаниеОповещение, ВыбранныйФайл); - + Файл = Новый Файл(ВыбранныйФайл); + Файл.НачатьПолучениеРазмера(Новый ОписаниеОповещения("ПолучениеРазмераЗавершение", ЭтотОбъект, ДополнительныеПараметры)); КонецЦикла; Если ВыбранныеФайлы.Количество() > 0 Тогда @@ -1639,9 +1637,8 @@ Расширение = ОбщегоНазначенияКлиентСервер.ПолучитьРасширениеИмениФайла(ИмяФайла); НоваяСтрока.ИндексКартинки = РаботаСФайламиСлужебныйКлиентСервер.ПолучитьИндексПиктограммыФайла(Расширение); ДополнительныеПараметры = Новый Структура("СтрокаТаблицыВложений", НоваяСтрока); - ОписаниеОповещение = Новый ОписаниеОповещения("НовыйФайлПослеИнициализации", ЭтотОбъект, ДополнительныеПараметры); - Файл = Новый Файл(); - Файл.НачатьИнициализацию(ОписаниеОповещение, ПолноеИмя); + Файл = Новый Файл(ПолноеИмя); + Файл.НачатьПолучениеРазмера(Новый ОписаниеОповещения("ПолучениеРазмераЗавершение", ЭтотОбъект, ДополнительныеПараметры)); КонецПроцедуры @@ -2112,6 +2109,18 @@ КонецПроцедуры +&НаСервере +Функция РезультатВставкиТекстаВПисьмо(ТекстПисьма, СтрокаНачало, КолонкаНачало, КолонкаКонец, ВыбранноеЗначение) + + ТекстовыйДокумент = Новый ТекстовыйДокумент; + ТекстовыйДокумент.УстановитьТекст(ТекстПисьма); + СтрокаВставки = ТекстовыйДокумент.ПолучитьСтроку(СтрокаНачало); + СтрокаВставки = Лев(СтрокаВставки, КолонкаНачало - 1) + ВыбранноеЗначение + Прав(СтрокаВставки,СтрДлина(СтрокаВставки) - КолонкаКонец + 1); + ТекстовыйДокумент.ЗаменитьСтроку(СтрокаНачало, СтрокаВставки); + Возврат ТекстовыйДокумент.ПолучитьТекст(); + +КонецФункции + #КонецОбласти &НаКлиенте @@ -2122,27 +2131,24 @@ НайденныеСтроки = ДоступныеДляОтправкиУчетныеЗаписи.НайтиСтроки(Новый Структура("УчетнаяЗапись", Объект.УчетнаяЗапись)); Если НайденныеСтроки.Количество() = 0 Тогда ОбщегоНазначенияКлиент.СообщитьПользователю( - НСтр("ru ='Выбранная учетная запись не доступна для отправки писем'"),, "ОтправительПредставление", "Объект"); + НСтр("ru = 'Выбранная учетная запись не доступна для отправки писем'"),, "ОтправительПредставление", "Объект"); Возврат; КонецЕсли; Если НайденныеСтроки[0].УдалятьПослеОтправки Тогда - СписокКнопок = Новый СписокЗначений; - СписокКнопок.Добавить(КодВозвратаДиалога.Да, НСтр("ru = 'Отправить'")); - СписокКнопок.Добавить(КодВозвратаДиалога.Нет, НСтр("ru = 'Отправить и сохранить'")); - СписокКнопок.Добавить(КодВозвратаДиалога.Отмена, НСтр("ru = 'Отмена'")); - - ТекстВопроса = НСтр("ru = 'Для данной учетной записи не предусмотрено сохранение отправленных писем в системе. - |Продолжить?'"); - - ОбработчикОповещенияЗакрытия = Новый ОписаниеОповещения("ВопросОНеСохраненииОтправленногоПисьма", ЭтотОбъект); - ПоказатьВопрос(ОбработчикОповещенияЗакрытия,ТекстВопроса, СписокКнопок,, КодВозвратаДиалога.Да, НСтр("ru = 'Отправка письма'")); - + СписокКнопок = Новый СписокЗначений; + СписокКнопок.Добавить(КодВозвратаДиалога.Да, НСтр("ru = 'Отправить'")); + СписокКнопок.Добавить(КодВозвратаДиалога.Нет, НСтр("ru = 'Отправить и сохранить'")); + СписокКнопок.Добавить(КодВозвратаДиалога.Отмена, НСтр("ru = 'Отмена'")); + + ТекстВопроса = НСтр("ru = 'Для данной учетной записи не предусмотрено сохранение отправленных писем в системе. + |Продолжить?'"); + + ОбработчикОповещенияЗакрытия = Новый ОписаниеОповещения("ВопросОНеСохраненииОтправленногоПисьма", ЭтотОбъект); + ПоказатьВопрос(ОбработчикОповещенияЗакрытия,ТекстВопроса, СписокКнопок,, КодВозвратаДиалога.Да, НСтр("ru = 'Отправка письма'")); Иначе - ОтправитьПисьмоКлиент(); - КонецЕсли; КонецПроцедуры @@ -2537,59 +2543,57 @@ Попытка ПараметрыПисьма = Неопределено; - ИмяСервераИсходящейПочты = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.УчетнаяЗапись, "СерверИсходящейПочты", Истина); - - Взаимодействия.ВыполнитьОтправкуПисьма(ПисьмоОбъект,,ПараметрыПисьма); + Взаимодействия.ВыполнитьОтправкуПисьма(ПисьмоОбъект,, ПараметрыПисьма); Исключение ДанныеАнализаОшибочныхПолучателей = УправлениеЭлектроннойПочтой.РезультатАнализаОшибочныхПолучателей(ПисьмоОбъект, ПараметрыПисьма.ОшибочныеПолучатели); - ЭтоПроблемаОтвергнутыхСерверомПочтовыхАдресов = ДанныеАнализаОшибочныхПолучателей.ЭтоПроблемаОтвергнутыхСерверомПочтовыхАдресов; ВсеАдресатыПисьмаОтвергнутыСервером = ДанныеАнализаОшибочныхПолучателей.ВсеАдресатыПисьмаОтвергнутыСервером; ПредставлениеОшибочныхАдресатов = ДанныеАнализаОшибочныхПолучателей.ПредставлениеОшибочныхАдресатов; - Если ЭтоПроблемаОтвергнутыхСерверомПочтовыхАдресов - И Не ВсеАдресатыПисьмаОтвергнутыСервером Тогда - + Если ЭтоПроблемаОтвергнутыхСерверомПочтовыхАдресов И Не ВсеАдресатыПисьмаОтвергнутыСервером Тогда Результат.ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Следующие адресаты электронного письма не приняты почтовым сервером: |%1. Письмо отправлено остальным адресатам.'", ОбщегоНазначения.КодОсновногоЯзыка()), ПредставлениеОшибочныхАдресатов); - Иначе - ЗначениеВРеквизитФормы(ПисьмоОбъект, "Объект"); Результат.ТекстСообщения = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); Возврат Результат; - КонецЕсли; КонецПопытки; ИдентификаторПисьма = ПараметрыПисьма.ИдентификаторСообщения; - Результат.ПисьмоОтправлено = Истина; - Если НЕ ПисьмоОбъект.УдалятьПослеОтправки Тогда + НачатьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Документ.ЭлектронноеПисьмоИсходящее"); + ЭлементБлокировки.УстановитьЗначение("Ссылка", Объект.Ссылка); + РегистрыСведений.ПредметыПапкиВзаимодействий.ЗаблокироватьПредметыПапокВзаимодействий(Блокировка, Объект.Ссылка); + Блокировка.Заблокировать(); - ПисьмоОбъект.СтатусПисьма = Перечисления.СтатусыИсходящегоЭлектронногоПисьма.Отправлено; - ПисьмоОбъект.ДатаОтправления = ТекущаяДатаСеанса(); - ПисьмоОбъект.Записать(РежимЗаписиДокумента.Запись); - ЗначениеВРеквизитФормы(ПисьмоОбъект, "Объект"); - - ВзаимодействияВызовСервера.УстановитьПапкуЭлектронногоПисьма( - Объект.Ссылка, Взаимодействия.ОпределитьПапкуДляПисьма(Объект.Ссылка)); - ТекущийСтатусПисьма = Объект.СтатусПисьма; - - Иначе - - ПисьмоОбъект.Прочитать(); - ПисьмоОбъект.Удалить(); - - КонецЕсли; - + Если НЕ ПисьмоОбъект.УдалятьПослеОтправки Тогда + ПисьмоОбъект.СтатусПисьма = Перечисления.СтатусыИсходящегоЭлектронногоПисьма.Отправлено; + ПисьмоОбъект.ДатаОтправления = ТекущаяДатаСеанса(); + ПисьмоОбъект.Записать(РежимЗаписиДокумента.Запись); + ЗначениеВРеквизитФормы(ПисьмоОбъект, "Объект"); + + Взаимодействия.УстановитьПапкуЭлектронногоПисьма(Объект.Ссылка, Взаимодействия.ОпределитьПапкуДляПисьма(Объект.Ссылка)); + ТекущийСтатусПисьма = Объект.СтатусПисьма; + Иначе + ПисьмоОбъект.Прочитать(); + ПисьмоОбъект.Удалить(); + КонецЕсли; + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; Возврат Результат; КонецФункции @@ -2632,7 +2636,7 @@ Если Не ОтправлятьСообщенияСразу Тогда ОтправлятьСообщенияСразу = ( - Объект.СтатусПисьма = ПредопределенноеЗначение("Перечисление.СтатусыИсходящегоЭлектронногоПисьма.Исходящее")); + Объект.СтатусПисьма = ПредопределенноеЗначение("Перечисление.СтатусыИсходящегоЭлектронногоПисьма.Исходящее")); КонецЕсли; ВыполняетсяОтправка = Истина; @@ -2795,7 +2799,7 @@ ТекстHTMLСтараяПодпись = ""; ВложенияСтараяПодпись = Новый Структура; - ТекстПисьмаФорматированныйДокумент.ПолучитьHTML(ТекстHTMLСтараяПодпись, ВложенияСтараяПодпись); + СтараяПодпись.ПолучитьHTML(ТекстHTMLСтараяПодпись, ВложенияСтараяПодпись); ТекстHTMLСтараяПодпись = Взаимодействия.СодержимоеТегаHTML(ТекстHTMLСтараяПодпись,"body"); ТекстHTMLФорматированныйДокумент = СтрЗаменить(ТекстHTMLФорматированныйДокумент, ТекстHTMLСтараяПодпись, ""); @@ -3021,7 +3025,7 @@ И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ШаблоныСообщений") Тогда МодульШаблоныСообщенийСлужебный = ОбщегоНазначения.ОбщийМодуль("ШаблоныСообщенийСлужебный"); Если МодульШаблоныСообщенийСлужебный.ИспользуютсяШаблоныСообщений() Тогда - ИспользуютсяШаблоныСообщений = МодульШаблоныСообщенийСлужебный.ЕстьДоступныеШаблоны("Письмо"); + ИспользуютсяШаблоныСообщений = МодульШаблоныСообщенийСлужебный.ЕстьДоступныеШаблоны("Письмо", Предмет); КонецЕсли; КонецЕсли; Элементы.ФормаСформироватьПоШаблону.Видимость = ИспользуютсяШаблоныСообщений; diff --git a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормированиеВнешнейСсылкиНаОбъект/Form.form b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормированиеВнешнейСсылкиНаОбъект/Form.form index a27cdf8b1..6a977ccaa 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормированиеВнешнейСсылкиНаОбъект/Form.form +++ b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормированиеВнешнейСсылкиНаОбъект/Form.form @@ -88,6 +88,7 @@ true Label + true 3 true @@ -321,9 +322,6 @@ true true Normal - - System.DefaultGUIFont - @@ -410,7 +408,7 @@
    UsualGroup - HorizontalIfPossible + AlwaysHorizontal Right Auto true @@ -432,7 +430,7 @@ OnCreateAtServer ПриСозданииНаСервере - 80 + 40 LockOwner true true diff --git a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ManagerModule.bsl b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ManagerModule.bsl index 2ff69762a..8779a44f9 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ManagerModule.bsl +++ b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ManagerModule.bsl @@ -122,6 +122,40 @@ // Конец СтандартныеПодсистемы.УправлениеДоступом +// СтандартныеПодсистемы.ПодключаемыеКоманды + +// Определяет список команд создания на основании. +// +// Параметры: +// КомандыСозданияНаОсновании - ТаблицаЗначений - см. СозданиеНаОснованииПереопределяемый.ПередДобавлениемКомандСозданияНаОсновании. +// Параметры - Структура - см. СозданиеНаОснованииПереопределяемый.ПередДобавлениемКомандСозданияНаОсновании. +// +Процедура ДобавитьКомандыСозданияНаОсновании(КомандыСозданияНаОсновании, Параметры) Экспорт + + Документы.Встреча.ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании); + Документы.ЗапланированноеВзаимодействие.ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании); + Документы.СообщениеSMS.ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании); + Документы.ТелефонныйЗвонок.ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании); + +КонецПроцедуры + +// Для использования в процедуре ДобавитьКомандыСозданияНаОсновании других модулей менеджеров объектов. +// Добавляет в список команд создания на основании этот объект. +// +// Параметры: +// КомандыСозданияНаОсновании - ТаблицаЗначений - см. СозданиеНаОснованииПереопределяемый.ПередДобавлениемКомандСозданияНаОсновании. +// +// Возвращаемое значение: +// СтрокаТаблицыЗначений, Неопределено - описание добавленной команды. +// +Функция ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании) Экспорт + + Возврат СозданиеНаОсновании.ДобавитьКомандуСозданияНаОсновании(КомандыСозданияНаОсновании, Метаданные.Документы.ЭлектронноеПисьмоИсходящее); + +КонецФункции + +// Конец СтандартныеПодсистемы.ПодключаемыеКоманды + #КонецОбласти #КонецОбласти diff --git a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ObjectModule.bsl b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ObjectModule.bsl index 410cd9ac2..ed2607732 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ObjectModule.bsl +++ b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ObjectModule.bsl @@ -98,19 +98,6 @@ #Область ОбработчикиСобытий -Процедура ПриЗаписи(Отказ) - - Если ОбменДанными.Загрузка Тогда - Возврат; - КонецЕсли; - - Взаимодействия.ПриЗаписиДокумента(ЭтотОбъект); - УправлениеЭлектроннойПочтой.УстановитьПометкуУдаленияУВложенийПисьма(Ссылка, ПометкаУдаления); - УстановитьПривилегированныйРежим(Истина); - Взаимодействия.ОтработатьПризнакИзмененияПометкиУдаленияПриЗаписиПисьма(ЭтотОбъект); - -КонецПроцедуры - Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения) Если ОбменДанными.Загрузка Тогда @@ -119,19 +106,29 @@ ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(ЭтотОбъект); - Если ЭтоНовый() Тогда - ДополнительныеСвойства.Вставить("ПометкаУдаления", Ложь); - Иначе - ДополнительныеСвойства.Вставить("ПометкаУдаления", - ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Ссылка, "ПометкаУдаления")); + ПредыдущаяПометкаУдаления = Ложь; + Если Не ЭтоНовый() Тогда + ПредыдущаяПометкаУдаления = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Ссылка, "ПометкаУдаления"); КонецЕсли; - - Если ПометкаУдаления Тогда - ЕстьВложения = Ложь; + ДополнительныеСвойства.Вставить("ПометкаУдаления", ПредыдущаяПометкаУдаления); + + Если ПометкаУдаления <> ПредыдущаяПометкаУдаления Тогда + ЕстьВложения = ?(ПометкаУдаления, Ложь, РаботаСФайламиСлужебныйВызовСервера.КоличествоПрисоединенныхФайлов(Ссылка) > 0); КонецЕсли; КонецПроцедуры +Процедура ПриЗаписи(Отказ) + + Если ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + + Взаимодействия.ПриЗаписиДокумента(ЭтотОбъект); + Взаимодействия.ОтработатьПризнакИзмененияПометкиУдаленияПриЗаписиПисьма(ЭтотОбъект); + +КонецПроцедуры + Процедура ПередУдалением(Отказ) Если ОбменДанными.Загрузка Тогда diff --git a/SSL/src/Enums/ВажностьПроблемыУчета/ВажностьПроблемыУчета.mdo b/SSL/src/Enums/ВажностьПроблемыУчета/ВажностьПроблемыУчета.mdo index 447674f3f..c055a36b8 100644 --- a/SSL/src/Enums/ВажностьПроблемыУчета/ВажностьПроблемыУчета.mdo +++ b/SSL/src/Enums/ВажностьПроблемыУчета/ВажностьПроблемыУчета.mdo @@ -29,11 +29,11 @@ true BothWays - - Информация + + Ошибка ru - Информация + Ошибка @@ -43,11 +43,18 @@ Предупреждение - - Ошибка + + ВажнаяИнформация ru - Ошибка + Важная информация + + + + Информация + + ru + Информация @@ -57,11 +64,4 @@ Полезный совет - - ВажнаяИнформация - - ru - Важная информация - - diff --git a/SSL/src/EventSubscriptions/ДополнительныеРеквизитыОбработкаПроверкиЗаполнения/ДополнительныеРеквизитыОбработкаПроверкиЗаполнения.mdo b/SSL/src/EventSubscriptions/ДополнительныеРеквизитыОбработкаПроверкиЗаполнения/ДополнительныеРеквизитыОбработкаПроверкиЗаполнения.mdo new file mode 100644 index 000000000..fdb079ead --- /dev/null +++ b/SSL/src/EventSubscriptions/ДополнительныеРеквизитыОбработкаПроверкиЗаполнения/ДополнительныеРеквизитыОбработкаПроверкиЗаполнения.mdo @@ -0,0 +1,15 @@ + + + ДополнительныеРеквизитыОбработкаПроверкиЗаполнения + + ru + Дополнительные реквизиты обработка проверки заполнения + + + ChartOfCharacteristicTypesObject + CatalogObject + DocumentObject + + FillCheckProcessing + CommonModule.УправлениеСвойствамиСлужебный.ДополнительныеРеквизитыОбработкаПроверкиЗаполнения + diff --git a/SSL/src/EventSubscriptions/КонтактнаяИнформацияОбработкаПроверкиЗаполнения/КонтактнаяИнформацияОбработкаПроверкиЗаполнения.mdo b/SSL/src/EventSubscriptions/КонтактнаяИнформацияОбработкаПроверкиЗаполнения/КонтактнаяИнформацияОбработкаПроверкиЗаполнения.mdo new file mode 100644 index 000000000..8b5c39e23 --- /dev/null +++ b/SSL/src/EventSubscriptions/КонтактнаяИнформацияОбработкаПроверкиЗаполнения/КонтактнаяИнформацияОбработкаПроверкиЗаполнения.mdo @@ -0,0 +1,13 @@ + + + КонтактнаяИнформацияОбработкаПроверкиЗаполнения + + ru + Контактная информация обработка проверки заполнения + + + DefinedType.ВладелецКонтактнойИнформации + + FillCheckProcessing + CommonModule.УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияОбработкаПроверкиЗаполнения + diff --git a/SSL/src/EventSubscriptions/КонтрольНеразделенныхОбъектовПриЗаписи/КонтрольНеразделенныхОбъектовПриЗаписи.mdo b/SSL/src/EventSubscriptions/КонтрольНеразделенныхОбъектовПриЗаписи/КонтрольНеразделенныхОбъектовПриЗаписи.mdo index b6561c647..b766601f2 100644 --- a/SSL/src/EventSubscriptions/КонтрольНеразделенныхОбъектовПриЗаписи/КонтрольНеразделенныхОбъектовПриЗаписи.mdo +++ b/SSL/src/EventSubscriptions/КонтрольНеразделенныхОбъектовПриЗаписи/КонтрольНеразделенныхОбъектовПриЗаписи.mdo @@ -19,21 +19,24 @@ ConstantValueManager.ИспользоватьСинхронизациюДанных ConstantValueManager.ПараметрыЦентраМониторинга ConstantValueManager.КаталогСообщенийОбменаДаннымиДляLinux + ConstantValueManager.СоздаватьПодкаталогиСИменамиВладельцев + ConstantValueManager.ОсновнойЯзык ConstantValueManager.ИспользоватьПолнотекстовыйПоиск ConstantValueManager.КоличествоПотоковОбновленияИнформационнойБазы ConstantValueManager.КаталогСообщенийОбменаДаннымиДляWindows ConstantValueManager.ИспользоватьСинхронизациюДанныхВЛокальномРежиме ConstantValueManager.ДетализироватьОбновлениеИБВЖурналеРегистрации ConstantValueManager.ДатаПоследнейВыгрузкиЗамеровПроизводительностиUTC + ConstantValueManager.ДополнительныйЯзык2 CatalogObject.ПоставляемыеДополнительныеОтчетыИОбработки ConstantValueManager.ИзвлекатьТекстыФайловНаСервере ConstantValueManager.ПрофильБезопасностиИнформационнойБазы ConstantValueManager.ПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском ConstantValueManager.УдалитьЛогинДоступаКСервисуMorpher CatalogObject.СценарииОбменовДанными - ConstantValueManager.РазрешитьВыполнениеДОИОРегламентнымиЗаданиямиВМоделиСервиса + ConstantValueManager.РазрешитьВыполнениеДООРегламентнымиЗаданиямиВМоделиСервиса ConstantValueManager.ИсточникДанныхАдресногоКлассификатора - ConstantValueManager.ИспользоватьПрофилиБезопасностиДляДОиО + ConstantValueManager.ИспользоватьПрофилиБезопасностиДляДОО ConstantValueManager.ХранитьФайлыВТомахНаДиске ConstantValueManager.СообщениеОбменаДаннымиИзГлавногоУзла ConstantValueManager.АдресДляВосстановленияПароляУчетнойЗаписи @@ -44,10 +47,12 @@ ConstantValueManager.ИспользоватьАвтономнуюРаботуВМоделиСервиса ConstantValueManager.ИспользуютсяПрофилиБезопасности ConstantValueManager.ЭтоАвтономноеРабочееМесто + ConstantValueManager.ПараметрыХраненияФайловВИБ ConstantValueManager.ИспользоватьДополнительныеОтчетыИОбработки ConstantValueManager.ИспользоватьСервисСклоненияMorpher ChartOfCharacteristicTypesObject.РазделыДатЗапретаИзменения ConstantValueManager.ВерсияКлассификатораБанков + ConstantValueManager.СпособХраненияФайлов ConstantValueManager.ГлавныйУзел ConstantValueManager.ОценкаПроизводительностиПериодЗаписи ConstantValueManager.СписокРасширенийФайловOpenDocument @@ -56,12 +61,15 @@ ConstantValueManager.ИспользоватьСинхронизациюДанныхВМоделиСервисаСЛокальнойПрограммой ConstantValueManager.НастройкаПодчиненногоУзлаРИБЗавершена CatalogObject.ПредопределенныеВариантыОтчетов + ConstantValueManager.ИспользоватьДополнительныйЯзык1 CatalogObject.ПроизводственныеКалендари + ConstantValueManager.ИспользоватьДополнительныйЯзык2 ConstantValueManager.СписокРасширенийТекстовыхФайлов ConstantValueManager.ПриоритетОбновленияВОбластяхДанных CatalogObject.ТомаХраненияФайлов CatalogObject.ОбщиеВнешниеКомпоненты CatalogObject.ИдентификаторыОбъектовМетаданных + ConstantValueManager.ДополнительныйЯзык1 ConstantValueManager.КоличествоЭлементовВТранзакцииЗагрузкиДанных ConstantValueManager.ВыполнятьЗамерыПроизводительности ConstantValueManager.ЗагрузитьСообщениеОбменаДанными diff --git a/SSL/src/EventSubscriptions/ОбновитьЗначенияГруппДоступа/ОбновитьЗначенияГруппДоступа.mdo b/SSL/src/EventSubscriptions/ОбновитьЗначенияГруппДоступа/ОбновитьЗначенияГруппДоступа.mdo new file mode 100644 index 000000000..333042209 --- /dev/null +++ b/SSL/src/EventSubscriptions/ОбновитьЗначенияГруппДоступа/ОбновитьЗначенияГруппДоступа.mdo @@ -0,0 +1,13 @@ + + + ОбновитьЗначенияГруппДоступа + + ru + Обновить значения групп доступа + + + DefinedType.ЗначениеДоступаОбъект + + OnWrite + CommonModule.УправлениеДоступомСлужебный.ОбновитьЗначенияГруппДоступа + diff --git a/SSL/src/EventSubscriptions/ОтключитьРассылкиПередУдалениемТипаПолучателейРассылки/ОтключитьРассылкиПередУдалениемТипаПолучателейРассылки.mdo b/SSL/src/EventSubscriptions/ОтключитьРассылкиПередУдалениемТипаПолучателейРассылки/ОтключитьРассылкиПередУдалениемТипаПолучателейРассылки.mdo new file mode 100644 index 000000000..9dadd6d06 --- /dev/null +++ b/SSL/src/EventSubscriptions/ОтключитьРассылкиПередУдалениемТипаПолучателейРассылки/ОтключитьРассылкиПередУдалениемТипаПолучателейРассылки.mdo @@ -0,0 +1,14 @@ + + + ОтключитьРассылкиПередУдалениемТипаПолучателейРассылки + + ru + Отключить рассылки перед удалением типа получателей рассылки + + + CatalogObject.ИдентификаторыОбъектовРасширений + CatalogObject.ИдентификаторыОбъектовМетаданных + + BeforeDelete + CommonModule.РассылкаОтчетов.ОтключитьРассылкиПередУдалениемТипаПолучателейРассылки + diff --git a/SSL/src/EventSubscriptions/ПереопределитьПолучаемуюФормуПрисоединенногоФайлаВзаимодействия/ПереопределитьПолучаемуюФормуПрисоединенногоФайлаВзаимодействия.mdo b/SSL/src/EventSubscriptions/ПереопределитьПолучаемуюФормуПрисоединенногоФайлаВзаимодействия/ПереопределитьПолучаемуюФормуПрисоединенногоФайлаВзаимодействия.mdo index cf6ade9f2..5dea31400 100644 --- a/SSL/src/EventSubscriptions/ПереопределитьПолучаемуюФормуПрисоединенногоФайлаВзаимодействия/ПереопределитьПолучаемуюФормуПрисоединенногоФайлаВзаимодействия.mdo +++ b/SSL/src/EventSubscriptions/ПереопределитьПолучаемуюФормуПрисоединенногоФайлаВзаимодействия/ПереопределитьПолучаемуюФормуПрисоединенногоФайлаВзаимодействия.mdo @@ -15,5 +15,5 @@ CatalogManager.ТелефонныйЗвонокПрисоединенныеФайлы FormGetProcessing - CommonModule.РаботаСФайлами.ОпределитьФормуПрисоединенногоФайла + CommonModule.РаботаСФайламиКлиентСервер.ОпределитьФормуПрисоединенногоФайла diff --git a/SSL/src/EventSubscriptions/ПереопределитьПолучаемуюФормуПрисоединенногоФайлаШаблоныСообщений/ПереопределитьПолучаемуюФормуПрисоединенногоФайлаШаблоныСообщений.mdo b/SSL/src/EventSubscriptions/ПереопределитьПолучаемуюФормуПрисоединенногоФайлаШаблоныСообщений/ПереопределитьПолучаемуюФормуПрисоединенногоФайлаШаблоныСообщений.mdo index 2254b3286..cca29e7eb 100644 --- a/SSL/src/EventSubscriptions/ПереопределитьПолучаемуюФормуПрисоединенногоФайлаШаблоныСообщений/ПереопределитьПолучаемуюФормуПрисоединенногоФайлаШаблоныСообщений.mdo +++ b/SSL/src/EventSubscriptions/ПереопределитьПолучаемуюФормуПрисоединенногоФайлаШаблоныСообщений/ПереопределитьПолучаемуюФормуПрисоединенногоФайлаШаблоныСообщений.mdo @@ -10,5 +10,5 @@ CatalogManager.ШаблоныСообщенийПрисоединенныеФайлы FormGetProcessing - CommonModule.ШаблоныСообщений.ОпределитьФормуПрисоединенногоФайла + CommonModule.ШаблоныСообщенийКлиентСервер.ОпределитьФормуПрисоединенногоФайла diff --git a/SSL/src/ExchangePlans/ОбновлениеИнформационнойБазы/ОбновлениеИнформационнойБазы.mdo b/SSL/src/ExchangePlans/ОбновлениеИнформационнойБазы/ОбновлениеИнформационнойБазы.mdo index ad7f818cb..662c29e24 100644 --- a/SSL/src/ExchangePlans/ОбновлениеИнформационнойБазы/ОбновлениеИнформационнойБазы.mdo +++ b/SSL/src/ExchangePlans/ОбновлениеИнформационнойБазы/ОбновлениеИнформационнойБазы.mdo @@ -347,9 +347,6 @@ Catalog.ИдентификаторыОбъектовМетаданных - - Constant.ИспользоватьОбщиеДополнительныеЗначения - InformationRegister.ФайлыВРабочемКаталоге @@ -486,7 +483,7 @@ Constant.ИзвлекатьТекстыФайловНаСервере - Constant.ИспользоватьПрофилиБезопасностиДляДОиО + Constant.ИспользоватьПрофилиБезопасностиДляДОО Constant.КоличествоЗамеровВПакетеЭкспорта @@ -498,7 +495,7 @@ InformationRegister.КлючиДоступаВнешнихПользователей - Constant.РазрешитьВыполнениеДОИОРегламентнымиЗаданиямиВМоделиСервиса + Constant.РазрешитьВыполнениеДООРегламентнымиЗаданиямиВМоделиСервиса Document.СообщениеSMS @@ -707,9 +704,6 @@ Constant.КаталогСообщенийОбменаДаннымиДляLinux - - Constant.ПервоеОбновлениеДоступаЗавершилось - Constant.СведенияОБлокируемыхОбъектах @@ -845,9 +839,6 @@ Constant.СписокЗапрещенныхРасширений - - InformationRegister.СвязиАдресныхОбъектов - InformationRegister.СообщенияОбменаДаннымиОбластейДанных @@ -1043,9 +1034,6 @@ InformationRegister.КомментарииОперацииСтатистики - - Constant.ИспользоватьОбщиеДополнительныеРеквизитыИСведения - InformationRegister.КонтактыВзаимодействий diff --git a/SSL/src/FunctionalOptions/ИспользоватьДополнительныйЯзык1/ИспользоватьДополнительныйЯзык1.mdo b/SSL/src/FunctionalOptions/ИспользоватьДополнительныйЯзык1/ИспользоватьДополнительныйЯзык1.mdo new file mode 100644 index 000000000..f4c2d4b24 --- /dev/null +++ b/SSL/src/FunctionalOptions/ИспользоватьДополнительныйЯзык1/ИспользоватьДополнительныйЯзык1.mdo @@ -0,0 +1,12 @@ + + + ИспользоватьДополнительныйЯзык1 + + ru + Использовать дополнительный язык1 + + Constant.ИспользоватьДополнительныйЯзык1 + true + CommonAttribute.НаименованиеЯзык1 + CommonAttribute.КомментарийЯзык1 + diff --git a/SSL/src/FunctionalOptions/ИспользоватьДополнительныйЯзык2/ИспользоватьДополнительныйЯзык2.mdo b/SSL/src/FunctionalOptions/ИспользоватьДополнительныйЯзык2/ИспользоватьДополнительныйЯзык2.mdo new file mode 100644 index 000000000..b8f7af283 --- /dev/null +++ b/SSL/src/FunctionalOptions/ИспользоватьДополнительныйЯзык2/ИспользоватьДополнительныйЯзык2.mdo @@ -0,0 +1,12 @@ + + + ИспользоватьДополнительныйЯзык2 + + ru + Использовать дополнительный язык2 + + Constant.ИспользоватьДополнительныйЯзык2 + true + CommonAttribute.НаименованиеЯзык2 + CommonAttribute.КомментарийЯзык2 + diff --git a/SSL/src/FunctionalOptions/ИспользоватьОбщиеДополнительныеЗначения/ИспользоватьОбщиеДополнительныеЗначения.mdo b/SSL/src/FunctionalOptions/ИспользоватьОбщиеДополнительныеЗначения/ИспользоватьОбщиеДополнительныеЗначения.mdo deleted file mode 100644 index c38ca54a2..000000000 --- a/SSL/src/FunctionalOptions/ИспользоватьОбщиеДополнительныеЗначения/ИспользоватьОбщиеДополнительныеЗначения.mdo +++ /dev/null @@ -1,10 +0,0 @@ - - - ИспользоватьОбщиеДополнительныеЗначения - - ru - Использовать общие дополнительные значения - - Constant.ИспользоватьОбщиеДополнительныеЗначения - true - diff --git a/SSL/src/FunctionalOptions/ИспользоватьОбщиеДополнительныеРеквизитыИСведения/ИспользоватьОбщиеДополнительныеРеквизитыИСведения.mdo b/SSL/src/FunctionalOptions/ИспользоватьОбщиеДополнительныеРеквизитыИСведения/ИспользоватьОбщиеДополнительныеРеквизитыИСведения.mdo deleted file mode 100644 index 2be5d9665..000000000 --- a/SSL/src/FunctionalOptions/ИспользоватьОбщиеДополнительныеРеквизитыИСведения/ИспользоватьОбщиеДополнительныеРеквизитыИСведения.mdo +++ /dev/null @@ -1,10 +0,0 @@ - - - ИспользоватьОбщиеДополнительныеРеквизитыИСведения - - ru - Использовать общие дополнительные реквизиты и сведения - - Constant.ИспользоватьОбщиеДополнительныеРеквизитыИСведения - true - diff --git a/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ЗагрузкаАдресногоКлассификатора/Form.form b/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ЗагрузкаАдресногоКлассификатора/Form.form index e9453fa10..2b83d9d53 100644 --- a/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ЗагрузкаАдресногоКлассификатора/Form.form +++ b/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ЗагрузкаАдресногоКлассификатора/Form.form @@ -133,6 +133,10 @@ Clearing ПоискОчистка + + TextEditEnd + ПоискОкончаниеВводаТекста + true true true @@ -376,6 +380,7 @@ true InputField + true Left Auto true @@ -428,6 +433,7 @@ true InputField + true Auto true Left @@ -675,13 +681,6 @@ ru ЧН=- - - System.DefaultGUIFont - true - false - false - false - true diff --git a/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ЗагрузкаАдресногоКлассификатора/Help/ru.html b/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ЗагрузкаАдресногоКлассификатора/Help/ru.html index e5e697d40..0f7cf329a 100644 --- a/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ЗагрузкаАдресногоКлассификатора/Help/ru.html +++ b/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ЗагрузкаАдресногоКлассификатора/Help/ru.html @@ -2,25 +2,16 @@

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

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

    Для всех регионов РФ имеется возможность загрузки адресных сведений с сайта поддержки пользователей программы 1С:Предприятие фирмы "1С", а также из файлов, распространяемых ФНС РФ.

    -

    Окно для работы с адресным классификатором открывается по команде Загрузить классификатор раздела Администрирование - Интернет-поддержка и сервисы - Классификаторы, курсы валют.

    +

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

    Загрузка адресного классификатора

    • При загрузке классификатора можно выбрать один, несколько или все регионы России, по которым необходимо загрузить адресные сведения. Это удобно, т.к. можно не загружать адреса тех регионов, которые заведомо не будут использоваться в работе. Включите флажки рядом с наименованиями нужных регионов. Для того чтобы выбрать все регионы для загрузки, нажмите , для того чтобы отменить выбор, нажмите кнопку . Для поиска регионов в списке используйте кнопку Найти. В нижней части списка идет подсчет количества выбранных регионов. -
    • -
    • Включите флажок, для того чтобы Загружать историю изменения адресных объектов. По умолчанию флажок отключен и история изменения адресных сведений не загружается в программу. Загрузка истории адресных сведений может потребоваться, если, например, в программу вводятся паспортные данные сотрудников, в них могут быть и устаревшие адреса.
    • -
    • С помощью переключателя выберите Вариант загрузки: -
      • С портала 1С:ИТС (рекомендуется); -
        • Для загрузки необходимо заполнить данные авторизации для подключения к Интернет-поддержке пользователей. 
      • -
      • Из папки на диске.
      • -
        •  укажите путь к папке с адресными сведениями (также можно нажать клавишу F4). Скачать адресные сведения для загрузки можно на сайте 1С:ИТС - по ссылке;
  • После указания всех параметров нажмите Загрузить адресные сведения. -
  • -
  • Во время загрузки программой выводится сообщение о состоянии загрузки: +
  • С помощью переключателя выберите Вариант загрузки: +
    • С веб-сайта 1С; +
      • Для загрузки необходимо заполнить данные авторизации для подключения к Интернет-поддержке пользователей. Из папки на диске.
    • +
      •  укажите путь к папке (также можно нажать клавишу F4). Скачать адресные сведения для загрузки можно на сайте 1С:ИТС - по ссылке;
  • После указания всех параметров нажмите Загрузить адресные сведения. +
  • Во время загрузки программой выводится сообщение о состоянии загрузки:
    • количество загружаемых регионов; -
    • -
    • источник загрузки; -
    • -
    • загружаемый в текущий момент регион.
  • -
  • После успешной загрузки выводится сообщение. Нажмите Закрыть для возврата в программу. -
  • -
  • При повторной загрузке адресных сведений, ранее загруженных в классификатор, они перезаписываются. -
  • -
  • В веб-клиенте загрузка адресного классификатора не поддерживается.
  • \ No newline at end of file +
  • источник загрузки; +
  • загружаемый в текущий момент регион.
  • После успешной загрузки выводится сообщение. Нажмите Закрыть для возврата в программу. +
  • При повторной загрузке адресных сведений, ранее загруженных в классификатор, они перезаписываются. +
  • В веб-клиенте загрузка адресного классификатора не поддерживается.
  • \ No newline at end of file diff --git a/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ЗагрузкаАдресногоКлассификатора/Module.bsl b/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ЗагрузкаАдресногоКлассификатора/Module.bsl index 7011b7476..a02b35e63 100644 --- a/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ЗагрузкаАдресногоКлассификатора/Module.bsl +++ b/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ЗагрузкаАдресногоКлассификатора/Module.bsl @@ -159,11 +159,6 @@ КонецЕсли; КонецЕсли; - // Зависимости от интерфейса - Если КлиентскоеПриложение.ТекущийВариантИнтерфейса() = ВариантИнтерфейсаКлиентскогоПриложения.Версия8_2 Тогда - Элементы.АдресЗагрузки.КартинкаКнопкиВыбора = Новый Картинка; - КонецЕсли; - АутентификацияВыполнена = ДанныеАутентификацииСайтаСохранены(); Элементы.ИнформацияОбОбновление.Видимость = АутентификацияВыполнена; Элементы.АвторизацияНаСайтеПоддержкиПользователей.Видимость = НЕ Элементы.ИнформацияОбОбновление.Видимость; @@ -257,15 +252,17 @@ &НаКлиенте Процедура ПоискАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка) - Если ЗначениеЗаполнено(Текст) Тогда - Отбор = Новый ФиксированнаяСтруктура(Новый Структура("Представление", Текст)); - Элементы.СубъектыРФ.ОтборСтрок = Отбор; - Иначе - Элементы.СубъектыРФ.ОтборСтрок = Неопределено; + Если Ожидание > 0 Тогда + УстановитьОтборВСпискеРегионов(Текст); КонецЕсли; КонецПроцедуры +&НаКлиенте +Процедура ПоискОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, СтандартнаяОбработка) + УстановитьОтборВСпискеРегионов(Текст); +КонецПроцедуры + &НаКлиенте Процедура ПоискОчистка(Элемент, СтандартнаяОбработка) Элементы.СубъектыРФ.ОтборСтрок = Неопределено; @@ -312,7 +309,7 @@ Если КодИсточникаЗагрузки = "КАТАЛОГ" Тогда Текст = НСтр("ru = 'Для загрузки адресного классификатора из папки - |необходимо установить расширение для работы с файлами.'"); + |необходимо установить расширение для работы с 1С:Предприятием.'"); КонтрольРасширенияРаботыСФайлами(Текст, КодИсточникаЗагрузки, АдресЗагрузки); ИначеЕсли КодИсточникаЗагрузки = "САЙТ" Тогда @@ -525,7 +522,7 @@ ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; ОтборЭлемента.ПравоеЗначение = Истина; - Элемент.Оформление.УстановитьЗначениеПараметра("Шрифт", Новый Шрифт(,, Истина)); + Элемент.Оформление.УстановитьЗначениеПараметра("Шрифт", ШрифтыСтиля.ВажнаяНадписьШрифт); КонецПроцедуры &НаКлиенте @@ -759,16 +756,13 @@ // Сохраняем время изменения - версию. Описание = ПомещенныеФайлы[Позиция]; - ДанныеФайла = Новый Структура("Имя, Хранение"); ЗаполнитьЗначенияСвойств(ДанныеФайла, Описание); - ДополнительныеПараметры.Вставить("ДанныеФайла", ДанныеФайла); ДополнительныеПараметры.Вставить("ПомещенныеФайлы", ПомещенныеФайлы); - ОписаниеОповещения = Новый ОписаниеОповещения("ЗапуститьФоновуюЗагрузкуИзКаталогаКлиентаПослеИнициализации", ЭтотОбъект, ДополнительныеПараметры); - - Файл = Новый Файл(); - Файл.НачатьИнициализацию(ОписаниеОповещения, Описание.ПолноеИмя); + Файл = Новый Файл(Описание.ПолноеИмя); + Файл.НачатьПолучениеУниверсальногоВремениИзменения(Новый ОписаниеОповещения("ЗапуститьФоновуюЗагрузкуИзКаталогаКлиентаПослеПолученияВремениИзменения", + ЭтотОбъект, ДополнительныеПараметры)); Иначе // выход из цикла @@ -776,7 +770,6 @@ ДополнительныеПараметры.ПараметрыЗагрузки.Свойство("Режим", Режим); ОповещениеОПрогрессеВыполнения = Новый ОписаниеОповещения("ПрогрессВыполнения", ЭтотОбъект); - Задание = ЗапуститьФоновуюЗагрузкуНаСервере(ДополнительныеПараметры.ПараметрыЗагрузки.КодыРегионов, ПомещенныеФайлы, Режим, ЗагружатьИсториюИзмененийАдресныхОбъектов, УникальныйИдентификатор); НастройкиОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект); @@ -820,15 +813,6 @@ Элементы.ШагиЗагрузки.ТекущаяСтраница = Элементы.ВыборРегионовЗагрузки; КонецПроцедуры -&НаКлиенте -Процедура ЗапуститьФоновуюЗагрузкуИзКаталогаКлиентаПослеИнициализации(Файл, ДополнительныеПараметры) Экспорт - - ОписаниеОповещения = Новый ОписаниеОповещения("ЗапуститьФоновуюЗагрузкуИзКаталогаКлиентаПослеПолученияВремениИзменения", - ЭтотОбъект, ДополнительныеПараметры); - Файл.НачатьПолучениеУниверсальногоВремениИзменения(ОписаниеОповещения); - -КонецПроцедуры - &НаКлиенте Процедура ЗапуститьФоновуюЗагрузкуИзКаталогаКлиентаПослеПолученияВремениИзменения(ВремяИзменения, ДополнительныеПараметры) Экспорт @@ -918,4 +902,16 @@ КонецПроцедуры +&НаКлиенте +Процедура УстановитьОтборВСпискеРегионов(Знач Текст) + + Если ЗначениеЗаполнено(Текст) Тогда + Отбор = Новый ФиксированнаяСтруктура(Новый Структура("Представление", Текст)); + Элементы.СубъектыРФ.ОтборСтрок = Отбор; + Иначе + Элементы.СубъектыРФ.ОтборСтрок = Неопределено; + КонецЕсли; + +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ОчисткаАдресногоКлассификатора/Form.form b/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ОчисткаАдресногоКлассификатора/Form.form index 348ca311e..075b2db73 100644 --- a/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ОчисткаАдресногоКлассификатора/Form.form +++ b/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ОчисткаАдресногоКлассификатора/Form.form @@ -501,13 +501,6 @@ ru ЧН=- - - System.DefaultGUIFont - true - false - false - false - true diff --git a/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/СведенияОбАдресномКлассификаторе/Form.form b/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/СведенияОбАдресномКлассификаторе/Form.form index d009175c5..bc9753085 100644 --- a/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/СведенияОбАдресномКлассификаторе/Form.form +++ b/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/СведенияОбАдресномКлассификаторе/Form.form @@ -131,6 +131,10 @@ + + СведенияОбАдресе + + diff --git a/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/СведенияОбАдресномКлассификаторе/Module.bsl b/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/СведенияОбАдресномКлассификаторе/Module.bsl index 073cf4142..f207459f0 100644 --- a/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/СведенияОбАдресномКлассификаторе/Module.bsl +++ b/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/СведенияОбАдресномКлассификаторе/Module.bsl @@ -28,14 +28,50 @@ Сведения = Новый Массив; Если ЗначениеЗаполнено(Параметры.Адрес) Тогда - Сведения.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='Адрес: %1'"), Параметры.Адрес)); + Сведения.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Адрес: %1'"), Параметры.Адрес)); Сведения.Добавить(""); КонецЕсли; + Если ТипЗнч(Параметры.СведенияОбАдресе) = Тип("Структура") Тогда + + Поля = Новый Соответствие; + Поля.Вставить("ИдентификаторАдресногоОбъекта", Истина); + Поля.Вставить("ИдентификаторДома", Истина); + Поля.Вставить("ИдентификаторЗемельногоУчастка", Истина); + Поля.Вставить("Идентификаторы", Истина); + Поля.Вставить("ДополнительныеКоды", Истина); + Поля.Вставить("КодРегиона", Истина); + + Сведения.Добавить(НСтр("ru = 'Коды и идентификаторы адреса:'")); + + Для Каждого Элемент Из Параметры.СведенияОбАдресе Цикл + Если Поля[Элемент.Ключ] <> Истина Тогда + Продолжить; + КонецЕсли; + + Если ТипЗнч(Элемент.Значение)=Тип("Структура") Тогда + Сведения.Добавить(""); + Сведения.Добавить(Элемент.Ключ + ": "); + Для Каждого ЭлементВложенный Из Элемент.Значение Цикл + Если СтрЗаканчиваетсяНа(ЭлементВложенный.Ключ, "Идентификатор") + Или ПустаяСтрока(ЭлементВложенный.Значение) Тогда + Продолжить; + КонецЕсли; + Сведения.Добавить(ЭлементВложенный.Ключ + ": " + ЭлементВложенный.Значение); + КонецЦикла; + Иначе + Сведения.Добавить(Элемент.Ключ + ": " + Элемент.Значение); + КонецЕсли; + КонецЦикла; + + Сведения.Добавить(""); + + КонецЕсли; + Если Не ИспользоватьЗагруженные Тогда - Сведения.Добавить(НСтр("ru='В адресном классификаторе отсутствуют загруженные адресные сведения.'")); + Сведения.Добавить(НСтр("ru = 'В адресном классификаторе отсутствуют загруженные адресные сведения.'")); Иначе - Сведения.Добавить(НСтр("ru='Автоподбор адреса выполняется по загруженным данным для регионов:'")); + Сведения.Добавить(НСтр("ru = 'Автоподбор адреса выполняется по загруженным данным для регионов:'")); КонецЕсли; СведенияОРегионах = Новый СписокЗначений; @@ -44,7 +80,7 @@ Значение = СведенияОЗагрузкеСубъектаРФ.Значение; Если ТипЗнч(Значение) = Тип("Структура") И Значение.ИспользоватьЗагруженные Тогда - СведенияОРегионах.Добавить(Формат(СведенияОЗагрузкеСубъектаРФ.Ключ,"ЧЦ=2; ЧВН="), НСтр("ru='Загружен'") + " - " + Строка(Значение.ДатаЗагрузки)); + СведенияОРегионах.Добавить(Формат(СведенияОЗагрузкеСубъектаРФ.Ключ,"ЧЦ=2; ЧВН="), НСтр("ru = 'Загружен'") + " - " + Строка(Значение.ДатаЗагрузки)); КонецЕсли; КонецЦикла; @@ -64,9 +100,9 @@ МодульИнтернетПоддержкаПользователей = ОбщегоНазначения.ОбщийМодуль("ИнтернетПоддержкаПользователей"); ИПППодключена = МодульИнтернетПоддержкаПользователей.ЗаполненыДанныеАутентификацииПользователяИнтернетПоддержки(); Если ИПППодключена Тогда - Сведения.Добавить(НСтр("ru='Подключен к Интернет-поддержке пользователей: Да.'")); + Сведения.Добавить(НСтр("ru = 'Подключен к Интернет-поддержке пользователей: Да.'")); Иначе - Сведения.Добавить(НСтр("ru='Подключен к Интернет-поддержке пользователей: Нет.'")); + Сведения.Добавить(НСтр("ru = 'Подключен к Интернет-поддержке пользователей: Нет.'")); КонецЕсли; Сведения.Добавить(""); КонецЕсли; @@ -77,13 +113,13 @@ URL = ИнформацияОСервисе.Сервер + ":" + ИнформацияОСервисе.Порт + "/"+ АдресныйКлассификаторСлужебный.ПрефиксВерсииЗапроса(); Если КлассификаторДоступен Тогда - Шаблон = НСтр("ru='Веб-сервис доступен. + Шаблон = НСтр("ru = 'Веб-сервис доступен. |URL подключения: %1'"); Сведения.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, URL)); Иначе - Сведения.Добавить(НСтр("ru='Веб-сервис недоступен.'")); + Сведения.Добавить(НСтр("ru = 'Веб-сервис недоступен.'")); Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПолучениеФайловИзИнтернета") Тогда @@ -99,23 +135,22 @@ Сведения.Добавить(""); - Сведения.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='Конфигурация: %1'"), Метаданные.Представление())); - Сведения.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='Версия конфигурации: %1'"), Метаданные.Версия)); - Сведения.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='Версия Библиотеки стандартных подсистем: %1'"), СтандартныеПодсистемыСервер.ВерсияБиблиотеки())); - Сведения.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='Версия приложения: %1 (%2)'"), СистемнаяИнформация.ВерсияПриложения, СистемнаяИнформация.ТипПлатформы)); + Сведения.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Конфигурация: %1'"), Метаданные.Представление())); + Сведения.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Версия конфигурации: %1'"), Метаданные.Версия)); + Сведения.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Версия Библиотеки стандартных подсистем: %1'"), СтандартныеПодсистемыСервер.ВерсияБиблиотеки())); + Сведения.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Версия приложения: %1 (%2)'"), СистемнаяИнформация.ВерсияПриложения, СистемнаяИнформация.ТипПлатформы)); Сведения.Добавить(""); - Сведения.Добавить(НСтр("ru='Системная информация'")); - Сведения.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='Версия ОС: %1'"), СистемнаяИнформация.ВерсияОС)); - Сведения.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='Оперативная память: %1'"), СистемнаяИнформация.ОперативнаяПамять)); + Сведения.Добавить(НСтр("ru = 'Системная информация'")); + Сведения.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Версия ОС: %1'"), СистемнаяИнформация.ВерсияОС)); + Сведения.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Оперативная память: %1'"), СистемнаяИнформация.ОперативнаяПамять)); Сведения.Добавить(""); - Сведения.Добавить(НСтр("ru='Отчет создан'") + ": " + ТекущаяДатаСеанса()); + Сведения.Добавить(НСтр("ru = 'Отчет создан'") + ": " + ТекущаяДатаСеанса()); Отчет = СтрСоединить(Сведения, Символы.ПС); КонецПроцедуры -#КонецОбласти - +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/InformationRegisters/АдресныеОбъекты/Templates/КлассификаторСубъектовРФ/Template.txt b/SSL/src/InformationRegisters/АдресныеОбъекты/Templates/КлассификаторСубъектовРФ/Template.txt index c5d897efb..06b780ccc 100644 --- a/SSL/src/InformationRegisters/АдресныеОбъекты/Templates/КлассификаторСубъектовРФ/Template.txt +++ b/SSL/src/InformationRegisters/АдресныеОбъекты/Templates/КлассификаторСубъектовРФ/Template.txt @@ -139,14 +139,9 @@ 78Санкт-Петербург г 190000190-199c2deb16a-0330-4f05-821f-1d09c93331e6 79Еврейская Аобл 0000006791b507b09-48c9-434f-bf6f-65066211c73e 80Забайкальский край Агинский Бурятский округ 000000053ec9705-ec3e-4cbf-921f-229968e10aeb - 81Коми-Пермяцкий АО 0000000e3d95b95-cc2d-440d-95c6-65577fae076e - 82Корякский АО 00000001e97910c-34fb-428a-a113-13a0024684ae 83Ненецкий АО 16600016689db3198-6803-4106-9463-cbf781eff0b8 - 84Таймырский (Долгано-Ненецкий) АО 000000029a47e2d-7606-481d-98d5-444e755dec34 - 85Иркутская обл Усть-Ордынский Бурятский округ 6690000c2f0810a-d71e-4af6-85f1-e0bbd81b3e4d 86Ханты-Мансийский Автономный округ - ЮграАО 000000628d66e5325-3a25-4d29-ba86-4ca351d9704b 87Чукотский АО 000000689f136159b-404a-4f1f-8d8d-d169e1374d5c - 88Эвенкийский АО 00000002d7468f0-bec1-4571-85f3-bdefd62b3d50 89Ямало-Ненецкий АО 629000629826fa834-3ee8-404f-bdbc-13a5221cfb6e 91Крым Респ 000000295-298bd8e6511-e4b9-4841-90de-6bbc231a789e 92Севастополь г 0000002996fdecb78-893a-4e3f-a5ba-aa062459463b diff --git a/SSL/src/InformationRegisters/БезопасноеХранилищеДанных/БезопасноеХранилищеДанных.mdo b/SSL/src/InformationRegisters/БезопасноеХранилищеДанных/БезопасноеХранилищеДанных.mdo index b708543f4..2e27865a1 100644 --- a/SSL/src/InformationRegisters/БезопасноеХранилищеДанных/БезопасноеХранилищеДанных.mdo +++ b/SSL/src/InformationRegisters/БезопасноеХранилищеДанных/БезопасноеХранилищеДанных.mdo @@ -80,7 +80,7 @@ - Use + Index Use true diff --git a/SSL/src/InformationRegisters/БезопасноеХранилищеДанныхОбластейДанных/БезопасноеХранилищеДанныхОбластейДанных.mdo b/SSL/src/InformationRegisters/БезопасноеХранилищеДанныхОбластейДанных/БезопасноеХранилищеДанныхОбластейДанных.mdo index f7ded347a..1df402051 100644 --- a/SSL/src/InformationRegisters/БезопасноеХранилищеДанныхОбластейДанных/БезопасноеХранилищеДанныхОбластейДанных.mdo +++ b/SSL/src/InformationRegisters/БезопасноеХранилищеДанныхОбластейДанных/БезопасноеХранилищеДанныхОбластейДанных.mdo @@ -80,7 +80,7 @@ - Use + Index Use true diff --git a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ВыборРеквизитовОбъекта/Form.form b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ВыборРеквизитовОбъекта/Form.form index 98acace6a..fd2d7d874 100644 --- a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ВыборРеквизитовОбъекта/Form.form +++ b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ВыборРеквизитовОбъекта/Form.form @@ -3,10 +3,6 @@ РеквизитыОбъекта 13 - - <key>ru</key> - <value>Реквизиты объекта</value> - true true @@ -119,10 +115,6 @@ true - - <key>ru</key> - <value>Пометка и представление</value> - ПометкаИПредставлениеРасширеннаяПодсказка 24 diff --git a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ВыборРеквизитовОбъекта/Module.bsl b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ВыборРеквизитовОбъекта/Module.bsl index f0831f16e..ccb7d150f 100644 --- a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ВыборРеквизитовОбъекта/Module.bsl +++ b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ВыборРеквизитовОбъекта/Module.bsl @@ -143,7 +143,7 @@ ВыбранныеРеквизиты = КоллекцияРеквизитов.Строки.НайтиСтроки(Новый Структура("Пометка", 1)); Если ВыбранныеРеквизиты.Количество() = КоллекцияРеквизитов.Строки.Количество() Тогда - Результат.Добавить(НСтр("ru = 'Все'")); + Результат.Добавить("*"); Возврат Результат; КонецЕсли; diff --git a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ВыборХранимыхВерсий/Form.form b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ВыборХранимыхВерсий/Form.form index e6f2f33fb..018e146ac 100644 --- a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ВыборХранимыхВерсий/Form.form +++ b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ВыборХранимыхВерсий/Form.form @@ -60,6 +60,10 @@ true true Normal + + ru + Без отбора + diff --git a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ВыборХранимыхВерсий/Module.bsl b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ВыборХранимыхВерсий/Module.bsl index 231b94a17..aad4c72c0 100644 --- a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ВыборХранимыхВерсий/Module.bsl +++ b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ВыборХранимыхВерсий/Module.bsl @@ -23,7 +23,8 @@ Элементы.ДеревоВерсийКонтекстноеМенюПерейтиНаВерсию.Видимость = ПереходНаВерсиюРазрешен; Элементы.ТехническиеСведенияОбИзмененииОбъекта.Видимость = ПереходНаВерсиюРазрешен; - Реквизиты = НСтр("ru = 'Все'") + Реквизиты = НСтр("ru = 'Все'"); + Заголовок = НСтр("ru = 'История изменений:'") + " " + Ссылка; КонецПроцедуры @@ -382,7 +383,7 @@ &НаКлиенте Процедура РеквизитыОчистка(Элемент, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; - Реквизиты = НСтр("ru = 'Все'"); + Реквизиты = ""; Отбор.Очистить(); ОбновитьСписокВерсий(); КонецПроцедуры diff --git a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ОтчетПоВерсиямОбъекта/Module.bsl b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ОтчетПоВерсиямОбъекта/Module.bsl index 21f850e04..eae776d8f 100644 --- a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ОтчетПоВерсиямОбъекта/Module.bsl +++ b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ОтчетПоВерсиямОбъекта/Module.bsl @@ -134,7 +134,7 @@ &НаКлиенте Процедура ОткрытьФормуСравненияТабличныхДокументов(ИмяТабличногоДокумента, Версия0, Версия1) - ЗаголовокШаблон = НСтр("ru='Версия №%1'"); + ЗаголовокШаблон = НСтр("ru = 'Версия №%1'"); НомерВерсии0 = Формат(СравниваемыеВерсии[Версия0], "ЧГ=0"); НомерВерсии1 = Формат(СравниваемыеВерсии[Версия1], "ЧГ=0"); ЗаголовокЛевый = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ЗаголовокШаблон, НомерВерсии1); diff --git a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ФормаЗаписи/Form.form b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ФормаЗаписи/Form.form index 97ace39c6..80d73e5a7 100644 --- a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ФормаЗаписи/Form.form +++ b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ФормаЗаписи/Form.form @@ -205,6 +205,14 @@ + + AfterWriteAtServer + ПослеЗаписиНаСервере + + + OnReadAtServer + ПриЧтенииНаСервере + BeforeWrite ПередЗаписью diff --git a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ФормаЗаписи/Module.bsl index 42be4ad73..74f88418b 100644 --- a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ФормаЗаписи/Module.bsl +++ b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ФормаЗаписи/Module.bsl @@ -13,4 +13,28 @@ Отказ = Истина; КонецПроцедуры +&НаСервере +Процедура ПриЧтенииНаСервере(ТекущийОбъект) + + // СтандартныеПодсистемы.УправлениеДоступом + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); + МодульУправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); + КонецЕсли; + // Конец СтандартныеПодсистемы.УправлениеДоступом + +КонецПроцедуры + +&НаСервере +Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи) + + // СтандартныеПодсистемы.УправлениеДоступом + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); + МодульУправлениеДоступом.ПослеЗаписиНаСервере(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи); + КонецЕсли; + // Конец СтандартныеПодсистемы.УправлениеДоступом + +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/InformationRegisters/ВерсииОбъектов/ManagerModule.bsl b/SSL/src/InformationRegisters/ВерсииОбъектов/ManagerModule.bsl index a26aaa30d..eac0b61d5 100644 --- a/SSL/src/InformationRegisters/ВерсииОбъектов/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ВерсииОбъектов/ManagerModule.bsl @@ -589,18 +589,18 @@ Область = ТЧОтчета.Присоединить(ШаблонЯчейкаИзменилась); НомерВерсии0 = Формат(НомерВерсии, "ЧГ=0"); НомерВерсии1 = Формат(МассивНомеровВерсий[ИндексНомераВерсии-1], "ЧГ=0"); - ШаблонТекста = НСтр("ru='сравнить версию №%1 с версией №%2'"); + ШаблонТекста = НСтр("ru = 'сравнить версию №%1 с версией №%2'"); Область.Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонТекста, НомерВерсии0, НомерВерсии1); Область.Расшифровка = Новый Структура("Сравнить, Версия0, Версия1", текСтрока.Наименование, ИндексНомераВерсии, ИндексНомераВерсии-1); ИначеЕсли текСтрока[ИмяКолонки] = "У" Тогда Область = ТЧОтчета.Присоединить(ШаблонЯчейкаУдалена); - Область.Текст = НСтр("ru='Сохранение изменений табличного документа отключено'"); + Область.Текст = НСтр("ru = 'Сохранение изменений табличного документа отключено'"); ИначеЕсли текСтрока[ИмяКолонки] = "Д" Тогда Область = ТЧОтчета.Присоединить(ШаблонЯчейкаДобавлена); - Область.Текст = НСтр("ru='открыть'"); + Область.Текст = НСтр("ru = 'открыть'"); Область.Расшифровка = Новый Структура("Открыть, Версия", текСтрока.Наименование, ИндексНомераВерсии); Иначе @@ -1316,11 +1316,14 @@ МаксимумРазличий = МаксимальноеКоличествоРазличийМеждуСтрокамиТаблиц(Таблица1, Таблица2); КонецЕсли; + ОбщиеКолонки = НайтиОбщиеКолонки(Таблица1, Таблица2); + ОстальныеКолонки = НайтиНесовпадающиеКолонки(Таблица1, Таблица2); + // Сравниваем строки каждую с каждой. Для Каждого СтрокаТаблицы1 Из Таблица1 Цикл Для Каждого СтрокаТаблицы2 Из Таблица2.НайтиСтроки(Новый Структура(Пропустить, Ложь)) Цикл // Считаем различия без учета служебной колонки. - КоличествоРазличий = КоличествоРазличийВСтрокахТаблиц(СтрокаТаблицы1, СтрокаТаблицы2) - 1; + КоличествоРазличий = КоличествоРазличийВСтрокахТаблиц(СтрокаТаблицы1, СтрокаТаблицы2, ОбщиеКолонки, ОстальныеКолонки) - 1; // Анализируем результат сравнения строк. Если КоличествоРазличий = ТребуемоеКоличествоРазличий Тогда @@ -1395,18 +1398,10 @@ КонецФункции -Функция КоличествоРазличийВСтрокахТаблиц(СтрокаТаблицы1, СтрокаТаблицы2) +Функция КоличествоРазличийВСтрокахТаблиц(СтрокаТаблицы1, СтрокаТаблицы2, ОбщиеКолонки, ОстальныеКолонки) - Результат = 0; - - Таблица1 = СтрокаТаблицы1.Владелец(); - Таблица2 = СтрокаТаблицы2.Владелец(); - - ОбщиеКолонки = НайтиОбщиеКолонки(Таблица1, Таблица2); - ОстальныеКолонки = НайтиНесовпадающиеКолонки(Таблица1, Таблица2); - - // Каждую колонку, не являющуюся общей считаем как одно различие. - Результат = Результат + ОстальныеКолонки.Количество(); + // Каждую колонку, не являющуюся общей, считаем как одно различие. + Результат = ОстальныеКолонки.Количество(); // Различия считаем по несовпадающим значениям. Для Каждого ИмяКолонки Из ОбщиеКолонки Цикл @@ -1469,14 +1464,12 @@ КонецФункции -Функция СкопироватьМассив(Массив) +Функция СкопироватьМассив(Источник) - Результат = Новый Массив; - - Для Каждого Элемент Из Массив Цикл - Результат.Добавить(Элемент); + Результат = Новый Массив(Источник.Количество()); + Для Индекс = 0 По Источник.ВГраница() Цикл + Результат[Индекс] = Источник[Индекс]; КонецЦикла; - Возврат Результат; КонецФункции diff --git a/SSL/src/InformationRegisters/ГруппыЗначенийДоступа/ManagerModule.bsl b/SSL/src/InformationRegisters/ГруппыЗначенийДоступа/ManagerModule.bsl index a32d49583..bd6101899 100644 --- a/SSL/src/InformationRegisters/ГруппыЗначенийДоступа/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ГруппыЗначенийДоступа/ManagerModule.bsl @@ -12,7 +12,7 @@ // Обновляет группировки пользователей для проверки разрешенных значений // по видам доступа Пользователи и ВнешниеПользователи. -// +// // Требуется вызывать: // 1) При добавлении нового пользователя (или внешнего пользователя), // При добавлении новой группы пользователей (или группы внешних пользователей), @@ -39,7 +39,7 @@ // // Исполнитель - СправочникСсылка.Пользователи, // СправочникСсылка.ВнешниеПользователи. -// +// // Группа исполнителей - например, СправочникСсылка.ГруппыИсполнителейЗадач. // // Объект авторизации - например, СправочникСсылка.ФизическиеЛица. @@ -48,7 +48,7 @@ // Параметры - Неопределено - обновить все без отбора. // Структура - см. варианты выше. // -// ЕстьИзменения - Булево (возвращаемое значение) - если производилась запись, +// ЕстьИзменения - Булево - (возвращаемое значение) - если производилась запись, // устанавливается Истина, иначе не изменяется. // Процедура ОбновитьГруппировкиПользователей(Параметры = Неопределено, ЕстьИзменения = Неопределено) Экспорт @@ -157,9 +157,9 @@ #Область СлужебныеПроцедурыИФункции // Процедура обновляет данные регистра при изменении значений доступа. -// +// // Параметры: -// ЕстьИзменения - Булево (возвращаемое значение) - если производилась запись, +// ЕстьИзменения - Булево - (возвращаемое значение) - если производилась запись, // устанавливается Истина, иначе не изменяется. // Процедура ОбновитьДанныеРегистра(ЕстьИзменения = Неопределено) Экспорт @@ -185,7 +185,7 @@ // регистра сведений ГруппыЗначенийДоступа. // Если передан Объект, то обновление будет только при его изменении. // -// ЕстьИзменения - Булево (возвращаемое значение) - если производилась запись, +// ЕстьИзменения - Булево - (возвращаемое значение) - если производилась запись, // устанавливается Истина, иначе не изменяется. // Процедура ОбновитьГруппыЗначенийДоступа(ЗначенияДоступа = Неопределено, @@ -521,7 +521,7 @@ // СправочникОбъект. // Если передан Объект, то обновление будет только при его изменении. // -// ЕстьИзменения - Булево (возвращаемое значение) - если производилась запись, +// ЕстьИзменения - Булево - (возвращаемое значение) - если производилась запись, // устанавливается Истина, иначе не изменяется. // Процедура ОбновитьГруппыЗначенияДоступа(ЗначениеДоступа, ЕстьИзменения, ЗначенияСИзменениямиПоТипам) @@ -1076,7 +1076,8 @@ Если ГруппыИсполнителей = Неопределено И Исполнители <> Неопределено Тогда - // АПК:96-выкл: допустимо, так как строки не должны повторятся и объем данных небольшой (от единиц до сотен). + // АПК:96-выкл - №434 Использование ОБЪЕДИНИТЬ допустимо, так как + // строки не должны повторятся и объем данных небольшой (от единиц до сотен). ТекстЗапроса = "ВЫБРАТЬ | ПользователиГруппИсполнителей.ГруппаИсполнителей @@ -1089,7 +1090,7 @@ | ВнешниеПользователиГруппИсполнителей.ГруппаИсполнителей |ИЗ | ВнешниеПользователиГруппИсполнителей КАК ВнешниеПользователиГруппИсполнителей"; - // АПК:96-вкл: допустимо, так как строки не должны повторятся и объем данных небольшой (от единиц до сотен). + // АПК:96-вкл. Запрос.Текст = ТекстЗапросовВременныхТаблиц + " |; diff --git a/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/Forms/МоиБизнесПроцессы/Form.form b/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/Forms/МоиБизнесПроцессы/Form.form index e0689b641..05c2f3c81 100644 --- a/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/Forms/МоиБизнесПроцессы/Form.form +++ b/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/Forms/МоиБизнесПроцессы/Form.form @@ -170,6 +170,32 @@
    + + ФормаЗадачиБизнесПроцесса + 88 + true + true + + true + + + ФормаЗадачиБизнесПроцессаРасширеннаяПодсказка + 89 + Label + true + true + + Left + + + Form.Command.ЗадачиБизнесПроцесса + Normal + PictureAndText + true + true + UserCmds + Auto + ФормаКартаМаршрута 35 @@ -190,7 +216,7 @@ Form.Command.КартаМаршрута Normal - PictureAndText + Auto true true UserCmds @@ -411,6 +437,10 @@ БизнесПроцесс 69 + + <key>ru</key> + <value>Бизнес-процесс</value> + true true @@ -884,7 +914,7 @@
    true
    ВЫБРАТЬ - РегистрСведенийДанныеБизнесПроцессов.БизнесПроцесс, + РегистрСведенийДанныеБизнесПроцессов.Владелец КАК БизнесПроцесс, РегистрСведенийДанныеБизнесПроцессов.Номер, РегистрСведенийДанныеБизнесПроцессов.Дата, РегистрСведенийДанныеБизнесПроцессов.Завершен, @@ -898,7 +928,7 @@ ТОГДА 6 КОГДА РегистрСведенийДанныеБизнесПроцессов.Завершен = ИСТИНА ТОГДА 5 - КОГДА РегистрСведенийДанныеБизнесПроцессов.БизнесПроцесс.Состояние = ЗНАЧЕНИЕ(Перечисление.СостоянияБизнесПроцессов.Остановлен) + КОГДА РегистрСведенийДанныеБизнесПроцессов.Владелец.Состояние = ЗНАЧЕНИЕ(Перечисление.СостоянияБизнесПроцессов.Остановлен) ТОГДА 0 КОГДА РегистрСведенийДанныеБизнесПроцессов.Стартован = ИСТИНА ТОГДА 3 @@ -919,7 +949,7 @@ ИЗ РегистрСведений.ДанныеБизнесПроцессов КАК РегистрСведенийДанныеБизнесПроцессов ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПроцессыДляЗапуска КАК ПроцессыДляЗапуска - ПО РегистрСведенийДанныеБизнесПроцессов.БизнесПроцесс = ПроцессыДляЗапуска.БизнесПроцесс + ПО РегистрСведенийДанныеБизнесПроцессов.Владелец = ПроцессыДляЗапуска.Владелец InformationRegister.ДанныеБизнесПроцессов true true @@ -998,6 +1028,31 @@ DontUse Auto + + ЗадачиБизнесПроцесса + + <key>ru</key> + <value>Задачи</value> + + 3 + + ru + Открыть задачи бизнес-процесса + + + true + + + StdPicture.Task + + + + ЗадачиБизнесПроцесса + + + Auto + Auto + diff --git a/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/Forms/МоиБизнесПроцессы/Module.bsl b/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/Forms/МоиБизнесПроцессы/Module.bsl index 3fc63b73a..49fe88930 100644 --- a/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/Forms/МоиБизнесПроцессы/Module.bsl +++ b/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/Forms/МоиБизнесПроцессы/Module.bsl @@ -77,6 +77,16 @@ БизнесПроцессыИЗадачиКлиент.СписокБизнесПроцессовПометкаУдаления(Элементы.Список); КонецПроцедуры +&НаКлиенте +Процедура ЗадачиБизнесПроцесса(Команда) + Если Элементы.Список.ТекущиеДанные = Неопределено Тогда + Возврат; + КонецЕсли; + + ОткрытьФорму("Задача.ЗадачаИсполнителя.Форма.ЗадачиПоБизнесПроцессу", + Новый Структура("ЗначениеОтбора", Элементы.Список.ТекущиеДанные.БизнесПроцесс)); +КонецПроцедуры + &НаКлиенте Процедура КартаМаршрута(Команда) Если Элементы.Список.ТекущиеДанные = Неопределено Тогда @@ -99,7 +109,6 @@ КонецПроцедуры - &НаСервере Процедура УстановитьУсловноеОформление() @@ -115,5 +124,4 @@ КонецПроцедуры - #КонецОбласти diff --git a/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/Forms/ФормаСписка/Form.form b/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/Forms/ФормаСписка/Form.form index 4bc340506..d38f3d5d8 100644 --- a/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/Forms/ФормаСписка/Form.form +++ b/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/Forms/ФормаСписка/Form.form @@ -166,6 +166,32 @@
    + + ФормаЗадачиБизнесПроцесса + 76 + true + true + + true + + + ФормаЗадачиБизнесПроцессаРасширеннаяПодсказка + 77 + Label + true + true + + Left + + + Form.Command.ЗадачиБизнесПроцесса + Normal + PictureAndText + true + true + UserCmds + Auto + ФормаКартаМаршрута 33 @@ -186,7 +212,7 @@ Form.Command.КартаМаршрута Normal - PictureAndText + Auto true true UserCmds @@ -459,6 +485,10 @@ БизнесПроцесс 60 + + <key>ru</key> + <value>Бизнес-процесс</value> + true true @@ -852,7 +882,7 @@
    true
    ВЫБРАТЬ - РегистрСведенийДанныеБизнесПроцессов.БизнесПроцесс, + РегистрСведенийДанныеБизнесПроцессов.Владелец КАК БизнесПроцесс, РегистрСведенийДанныеБизнесПроцессов.Номер, РегистрСведенийДанныеБизнесПроцессов.Дата, РегистрСведенийДанныеБизнесПроцессов.Завершен, @@ -885,7 +915,7 @@ ИЗ РегистрСведений.ДанныеБизнесПроцессов КАК РегистрСведенийДанныеБизнесПроцессов ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПроцессыДляЗапуска КАК ПроцессыДляЗапуска - ПО РегистрСведенийДанныеБизнесПроцессов.БизнесПроцесс = ПроцессыДляЗапуска.БизнесПроцесс + ПО РегистрСведенийДанныеБизнесПроцессов.Владелец = ПроцессыДляЗапуска.Владелец InformationRegister.ДанныеБизнесПроцессов true true @@ -944,6 +974,31 @@ DontUse Auto + + ЗадачиБизнесПроцесса + + <key>ru</key> + <value>Задачи</value> + + 3 + + ru + Открыть задачи бизнес-процесса + + + true + + + StdPicture.Task + + + + ЗадачиБизнесПроцесса + + + Auto + Auto + diff --git a/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/Forms/ФормаСписка/Module.bsl b/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/Forms/ФормаСписка/Module.bsl index fe211129e..ae70f527d 100644 --- a/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/Forms/ФормаСписка/Module.bsl @@ -69,6 +69,20 @@ КонецПроцедуры +&НаКлиенте +Процедура ЗадачиБизнесПроцесса(Команда) + Если Элементы.Список.ТекущиеДанные = Неопределено Тогда + Возврат; + КонецЕсли; + + ОткрытьФорму("Задача.ЗадачаИсполнителя.Форма.ЗадачиПоБизнесПроцессу", + Новый Структура("ЗначениеОтбора", Элементы.Список.ТекущиеДанные.БизнесПроцесс)); +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + &НаСервере Процедура УстановитьУсловноеОформление() @@ -84,5 +98,4 @@ КонецПроцедуры - -#КонецОбласти +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/ManagerModule.bsl b/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/ManagerModule.bsl index b38a6220e..9f752fc61 100644 --- a/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/ManagerModule.bsl @@ -20,7 +20,7 @@ Ограничение.Текст = "РазрешитьЧтениеИзменение |ГДЕ - | ЧтениеОбъектаРазрешено(БизнесПроцесс)"; + | ЧтениеОбъектаРазрешено(Владелец)"; КонецПроцедуры diff --git a/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/ДанныеБизнесПроцессов.mdo b/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/ДанныеБизнесПроцессов.mdo index 883efb56e..3fa87578e 100644 --- a/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/ДанныеБизнесПроцессов.mdo +++ b/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/ДанныеБизнесПроцессов.mdo @@ -231,13 +231,13 @@ - БизнесПроцесс + Владелец ru - Бизнес-процесс + Владелец - BusinessProcessRef + DefinedType.БизнесПроцесс ru diff --git a/SSL/src/InformationRegisters/ДанныеОбработанныеВЦентральномУзлеРИБ/ManagerModule.bsl b/SSL/src/InformationRegisters/ДанныеОбработанныеВЦентральномУзлеРИБ/ManagerModule.bsl index 1092c1104..e9904dffb 100644 --- a/SSL/src/InformationRegisters/ДанныеОбработанныеВЦентральномУзлеРИБ/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ДанныеОбработанныеВЦентральномУзлеРИБ/ManagerModule.bsl @@ -70,15 +70,15 @@ ДобавитьДанныеВНабор(УзлыРИБ, НаборДанных, Данные); ИначеЕсли ДополнительныеПараметры.ЭтоНезависимыйРегистрСведений Тогда - Для Каждого СтрТабл Из Данные Цикл + Для Каждого ЭлементДанных Из Данные Цикл СтруктураЗначенийИзмерений = Новый Структура; - ГУИД = Новый УникальныйИдентификатор; + Идентификатор = Новый УникальныйИдентификатор; - НаборДанных.Отбор.КлючУникальности.Установить(ГУИД); + НаборДанных.Отбор.КлючУникальности.Установить(Идентификатор); Для Каждого ЭлементОтбора Из Данные.Колонки Цикл - СтруктураЗначенийИзмерений.Вставить(ЭлементОтбора.Имя, СтрТабл[ЭлементОтбора.Имя]); + СтруктураЗначенийИзмерений.Вставить(ЭлементОтбора.Имя, ЭлементДанных[ЭлементОтбора.Имя]); КонецЦикла; Для Каждого УзелРИБ Из УзлыРИБ Цикл @@ -87,7 +87,7 @@ НоваяСтрока.УзелПланаОбмена = УзелРИБ.Значение; НоваяСтрока.ОбъектМетаданных = ИдентификаторОбъектаМетаданных; - НоваяСтрока.КлючУникальности = ГУИД; + НоваяСтрока.КлючУникальности = Идентификатор; НоваяСтрока.Очередь = Очередь; НоваяСтрока.ЗначенияОтборовНезависимогоРегистра = Новый ХранилищеЗначения(СтруктураЗначенийИзмерений, Новый СжатиеДанных(9)); @@ -115,9 +115,9 @@ И ОбъектМетаданных.РежимЗаписи = Метаданные.СвойстваОбъектов.РежимЗаписиРегистра.Независимый Тогда СтруктураЗначенийИзмерений = Новый Структура; - ГУИД = Новый УникальныйИдентификатор; + Идентификатор = Новый УникальныйИдентификатор; - НаборДанных.Отбор.КлючУникальности.Установить(ГУИД); + НаборДанных.Отбор.КлючУникальности.Установить(Идентификатор); Для Каждого ЭлементОтбора Из Данные.Отбор Цикл СтруктураЗначенийИзмерений.Вставить(ЭлементОтбора.Имя, ЭлементОтбора.Значение); @@ -129,7 +129,7 @@ НоваяСтрока.УзелПланаОбмена = УзелРИБ.Значение; НоваяСтрока.ОбъектМетаданных = ИдентификаторОбъектаМетаданных; - НоваяСтрока.КлючУникальности = ГУИД; + НоваяСтрока.КлючУникальности = Идентификатор; НоваяСтрока.Очередь = Очередь; НоваяСтрока.ЗначенияОтборовНезависимогоРегистра = Новый ХранилищеЗначения(СтруктураЗначенийИзмерений, Новый СжатиеДанных(9)); @@ -160,19 +160,19 @@ Если ТипЗнч(Данные) = Тип("Массив") Тогда - Для Каждого СтрокаМассива Из Данные Цикл + Для Каждого ЭлементДанных Из Данные Цикл НаборДанных = СоздатьНаборЗаписей(); - НаборДанных.Отбор.Данные.Установить(СтрокаМассива); + НаборДанных.Отбор.Данные.Установить(ЭлементДанных); НаборДанных.Отбор.Очередь.Установить(Очередь); - НаборДанных.Отбор.ОбъектМетаданных.Установить(ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ТипЗнч(СтрокаМассива))); + НаборДанных.Отбор.ОбъектМетаданных.Установить(ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ТипЗнч(ЭлементДанных))); Для Каждого УзелРИБ Из УзлыРИБ Цикл НоваяСтрока = НаборДанных.Добавить(); НоваяСтрока.УзелПланаОбмена = УзелРИБ.Значение; НоваяСтрока.ОбъектМетаданных = НаборДанных.Отбор.ОбъектМетаданных.Значение; - НоваяСтрока.Данные = СтрокаМассива; + НоваяСтрока.Данные = ЭлементДанных; НоваяСтрока.Очередь = НаборДанных.Отбор.Очередь.Значение; КонецЦикла; diff --git a/SSL/src/InformationRegisters/ДанныеОбработанныеВЦентральномУзлеРИБ/RecordSetModule.bsl b/SSL/src/InformationRegisters/ДанныеОбработанныеВЦентральномУзлеРИБ/RecordSetModule.bsl index 3d2fd11fc..0f2309483 100644 --- a/SSL/src/InformationRegisters/ДанныеОбработанныеВЦентральномУзлеРИБ/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/ДанныеОбработанныеВЦентральномУзлеРИБ/RecordSetModule.bsl @@ -46,55 +46,20 @@ Процедура ОтметитьДанныеОбновленыВГлавномУзле() - Для Каждого СтрТабл Из ЭтотОбъект Цикл + Для Каждого Запись Из ЭтотОбъект Цикл - ДополнительныеПараметры = ОбновлениеИнформационнойБазы.ДополнительныеПараметрыОтметкиОбработки(); - ПолноеИмяОбъектаМетаданных = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СтрТабл.ОбъектМетаданных, "ПолноеИмя"); - - Если СтрНайти(ПолноеИмяОбъектаМетаданных, "РегистрНакопления") > 0 - Или СтрНайти(ПолноеИмяОбъектаМетаданных, "РегистрБухгалтерии") > 0 - Или СтрНайти(ПолноеИмяОбъектаМетаданных, "РегистрРасчета") > 0 Тогда - - ДополнительныеПараметры.ЭтоДвижения = Истина; - ДополнительныеПараметры.ПолноеИмяРегистра = ПолноеИмяОбъектаМетаданных; - ДанныеДляОтметки = СтрТабл.Данные; - - ИначеЕсли СтрНайти(ПолноеИмяОбъектаМетаданных, "РегистрСведений") > 0 Тогда - - МетаданныеРегистра = Метаданные.НайтиПоПолномуИмени(ПолноеИмяОбъектаМетаданных); - - Если МетаданныеРегистра.РежимЗаписи = Метаданные.СвойстваОбъектов.РежимЗаписиРегистра.Независимый Тогда - - МенеджерРегистра = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПолноеИмяОбъектаМетаданных); - - ДанныеДляОтметки = МенеджерРегистра.СоздатьНаборЗаписей(); - ЗначенияОтбора = СтрТабл.ЗначенияОтборовНезависимогоРегистра.Получить(); - - Для Каждого КлючЗначение Из ЗначенияОтбора Цикл - ДанныеДляОтметки.Отбор[КлючЗначение.Ключ].Установить(КлючЗначение.Значение); - КонецЦикла; - - Иначе - - ДополнительныеПараметры.ЭтоДвижения = Истина; - ДополнительныеПараметры.ПолноеИмяРегистра = ПолноеИмяОбъектаМетаданных; - ДанныеДляОтметки = СтрТабл.Данные; - - КонецЕсли; - - Иначе - ДанныеДляОтметки = СтрТабл.Данные; - КонецЕсли; - - ОбновлениеИнформационнойБазы.ОтметитьВыполнениеОбработки(ДанныеДляОтметки, ДополнительныеПараметры, СтрТабл.Очередь); + Объект = ОбщегоНазначения.ОбъектМетаданныхПоИдентификатору(Запись.ОбъектМетаданных, Ложь); + Если ТипЗнч(Объект) = Тип("ОбъектМетаданных") Тогда // Объект метаданных был удален в конфигурации главного узла. + ОтметитьВыполнениеОбработки(Запись, Объект); + КонецЕсли; Если ОбменДанными.Отправитель <> Неопределено Тогда // не создание начального образа НаборДляРегистрацииОтветаВГлавныйУзел = РегистрыСведений.ДанныеОбработанныеВЦентральномУзлеРИБ.СоздатьНаборЗаписей(); - НаборДляРегистрацииОтветаВГлавныйУзел.Отбор.УзелПланаОбмена.Установить(СтрТабл.УзелПланаОбмена); - НаборДляРегистрацииОтветаВГлавныйУзел.Отбор.ОбъектМетаданных.Установить(СтрТабл.ОбъектМетаданных); - НаборДляРегистрацииОтветаВГлавныйУзел.Отбор.Данные.Установить(СтрТабл.Данные); - НаборДляРегистрацииОтветаВГлавныйУзел.Отбор.Очередь.Установить(СтрТабл.Очередь); - НаборДляРегистрацииОтветаВГлавныйУзел.Отбор.КлючУникальности.Установить(СтрТабл.КлючУникальности); + НаборДляРегистрацииОтветаВГлавныйУзел.Отбор.УзелПланаОбмена.Установить(Запись.УзелПланаОбмена); + НаборДляРегистрацииОтветаВГлавныйУзел.Отбор.ОбъектМетаданных.Установить(Запись.ОбъектМетаданных); + НаборДляРегистрацииОтветаВГлавныйУзел.Отбор.Данные.Установить(Запись.Данные); + НаборДляРегистрацииОтветаВГлавныйУзел.Отбор.Очередь.Установить(Запись.Очередь); + НаборДляРегистрацииОтветаВГлавныйУзел.Отбор.КлючУникальности.Установить(Запись.КлючУникальности); ПланыОбмена.ЗарегистрироватьИзменения(ОбменДанными.Отправитель, НаборДляРегистрацииОтветаВГлавныйУзел); КонецЕсли; @@ -103,6 +68,46 @@ КонецПроцедуры +Процедура ОтметитьВыполнениеОбработки(Знач Запись, Знач Объект) + + ДополнительныеПараметры = ОбновлениеИнформационнойБазы.ДополнительныеПараметрыОтметкиОбработки(); + + ПолноеИмяОбъектаМетаданных = Объект.ПолноеИмя(); + Если СтрНайти(ПолноеИмяОбъектаМетаданных, "РегистрНакопления") > 0 + Или СтрНайти(ПолноеИмяОбъектаМетаданных, "РегистрБухгалтерии") > 0 + Или СтрНайти(ПолноеИмяОбъектаМетаданных, "РегистрРасчета") > 0 Тогда + + ДополнительныеПараметры.ЭтоДвижения = Истина; + ДополнительныеПараметры.ПолноеИмяРегистра = ПолноеИмяОбъектаМетаданных; + ДанныеДляОтметки = Запись.Данные; + + ИначеЕсли СтрНайти(ПолноеИмяОбъектаМетаданных, "РегистрСведений") > 0 Тогда + + Если Объект.РежимЗаписи = Метаданные.СвойстваОбъектов.РежимЗаписиРегистра.Независимый Тогда + + МенеджерРегистра = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПолноеИмяОбъектаМетаданных); + + ДанныеДляОтметки = МенеджерРегистра.СоздатьНаборЗаписей(); + ЗначенияОтбора = Запись.ЗначенияОтборовНезависимогоРегистра.Получить(); + + Для Каждого КлючЗначение Из ЗначенияОтбора Цикл + ДанныеДляОтметки.Отбор[КлючЗначение.Ключ].Установить(КлючЗначение.Значение); + КонецЦикла; + + Иначе + ДополнительныеПараметры.ЭтоДвижения = Истина; + ДополнительныеПараметры.ПолноеИмяРегистра = ПолноеИмяОбъектаМетаданных; + ДанныеДляОтметки = Запись.Данные; + КонецЕсли; + + Иначе + ДанныеДляОтметки = Запись.Данные; + КонецЕсли; + + ОбновлениеИнформационнойБазы.ОтметитьВыполнениеОбработки(ДанныеДляОтметки, ДополнительныеПараметры, Запись.Очередь); + +КонецПроцедуры + #КонецОбласти #Иначе diff --git a/SSL/src/InformationRegisters/ДанныеОбработанныеВЦентральномУзлеРИБ/ДанныеОбработанныеВЦентральномУзлеРИБ.mdo b/SSL/src/InformationRegisters/ДанныеОбработанныеВЦентральномУзлеРИБ/ДанныеОбработанныеВЦентральномУзлеРИБ.mdo index 630b2f30b..5a7b7abe3 100644 --- a/SSL/src/InformationRegisters/ДанныеОбработанныеВЦентральномУзлеРИБ/ДанныеОбработанныеВЦентральномУзлеРИБ.mdo +++ b/SSL/src/InformationRegisters/ДанныеОбработанныеВЦентральномУзлеРИБ/ДанныеОбработанныеВЦентральномУзлеРИБ.mdo @@ -109,7 +109,13 @@ Данные - AnyRef + BusinessProcessRef + DocumentRef + ChartOfCalculationTypesRef + TaskRef + ChartOfCharacteristicTypesRef + ChartOfAccountsRef + CatalogRef diff --git a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ДатыЗапретаИзменения/Form.form b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ДатыЗапретаИзменения/Form.form index c3c7be4c6..0429e588f 100644 --- a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ДатыЗапретаИзменения/Form.form +++ b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ДатыЗапретаИзменения/Form.form @@ -128,10 +128,6 @@ true - - <key>ru</key> - <value>Командная панель</value> - КоманднаяПанельРасширеннаяПодсказка 445 @@ -153,10 +149,6 @@ true - - <key>ru</key> - <value>Шапка</value> - ГруппаШапкаРасширеннаяПодсказка 447 @@ -352,10 +344,6 @@ true - - <key>ru</key> - <value>Использование дат запрета</value> - ИспользованиеДатЗапретаРасширеннаяПодсказка 452 @@ -380,10 +368,6 @@ Пользователи 124 - - <key>ru</key> - <value>Пользователи</value> - true true @@ -595,10 +579,6 @@ true - - <key>ru</key> - <value>Пользователи стандартные команды</value> - ПользователиСтандартныеКомандыExtendedTooltip 326 @@ -766,10 +746,6 @@ true - - <key>ru</key> - <value>Установка по пользователям</value> - УстановкаПоПользователямExtendedTooltip 324 @@ -1013,10 +989,6 @@ true - - <key>ru</key> - <value>Произвольная дата</value> - ГруппаПроизвольнаяДатаРасширеннаяПодсказка 471 @@ -1087,10 +1059,6 @@ true - - <key>ru</key> - <value>Больше возможностей</value> - ГруппаБольшеВозможностейРасширеннаяПодсказка 479 @@ -1410,10 +1378,6 @@ true - - <key>ru</key> - <value>Произвольная дата</value> - ПроизвольнаяДатаExtendedTooltip 341 @@ -1434,10 +1398,6 @@ true - - <key>ru</key> - <value>Дата запрета с описанием</value> - ДатаЗапретаСОписаниемExtendedTooltip 339 @@ -1564,10 +1524,6 @@ true - - <key>ru</key> - <value>Количество дней разрешения</value> - ГруппаКоличествоДнейРазрешенияРасширеннаяПодсказка 486 @@ -1630,10 +1586,6 @@ true - - <key>ru</key> - <value>Относительная дата</value> - ОтносительнаяДатаРасширеннаяПодсказка 484 @@ -1722,10 +1674,6 @@ true - - <key>ru</key> - <value>Свойства даты запрета</value> - СвойстваДатыЗапретаРасширеннаяПодсказка 346 @@ -1771,10 +1719,6 @@ true - - <key>ru</key> - <value>Режимы работы</value> - ГруппаРежимыРаботыРасширеннаяПодсказка 460 @@ -1822,10 +1766,6 @@ ДатыЗапрета 132 - - <key>ru</key> - <value>Даты запрета</value> - true true @@ -2121,10 +2061,6 @@ true - - <key>ru</key> - <value>Даты запрета стандартные команды</value> - ДатыЗапретаСтандартныеКомандыРасширеннаяПодсказка 404 @@ -2347,10 +2283,6 @@ true - - <key>ru</key> - <value>Даты запрета контекстное меню стандартные команды</value> - ДатыЗапретаКонтекстноеМенюСтандартныеКомандыExtendedTooltip 392 @@ -2421,10 +2353,6 @@ true - - <key>ru</key> - <value>Способы указания</value> - СпособыУказанияExtendedTooltip 336 @@ -2600,10 +2528,6 @@ true - - <key>ru</key> - <value>Данные пользователя</value> - ДанныеПользователяExtendedTooltip 331 @@ -2624,10 +2548,6 @@ true - - <key>ru</key> - <value>Текущий пользователь представление</value> - 60 ТекущийПользовательПредставлениеРасширеннаяПодсказка @@ -2655,10 +2575,6 @@ true - - <key>ru</key> - <value>Настройка даты запрета</value> - НастройкаДатыЗапретаExtendedTooltip 323 @@ -3364,19 +3280,6 @@ true - - ИнтерфейсВерсия82 - 28 - - Boolean - - - true - - - true - - ЗаписьСуществует 29 diff --git a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ДатыЗапретаИзменения/Module.bsl b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ДатыЗапретаИзменения/Module.bsl index 71088d544..b372f23f2 100644 --- a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ДатыЗапретаИзменения/Module.bsl +++ b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ДатыЗапретаИзменения/Module.bsl @@ -22,12 +22,6 @@ ДатыЗапретаИзмененияСлужебный.ОбновитьРазделыДатЗапретаИзменения(); - Если КлиентскоеПриложение.ТекущийВариантИнтерфейса() = ВариантИнтерфейсаКлиентскогоПриложения.Версия8_2 Тогда - ИнтерфейсВерсия82 = Истина; - Элементы.ПользователиДобавить.ТолькоВоВсехДействиях = Ложь; - Элементы.ДатыЗапретаДобавить.ТолькоВоВсехДействиях = Ложь; - КонецЕсли; - // Кэширование текущей даты на сервере. НачалоДня = НачалоДня(ТекущаяДатаСеанса()); @@ -155,9 +149,6 @@ ОбновитьНаСервере(); - СтандартныеПодсистемыСервер.УстановитьОтображениеЗаголовковГрупп( - ЭтотОбъект, "ТекущийПользовательПредставление"); - КонецПроцедуры &НаКлиенте @@ -2125,7 +2116,8 @@ Запрос.УстановитьПараметр("Пользователь", Пользователь); Запрос.УстановитьПараметр("ЕдинственныйРаздел", ЕдинственныйРаздел); Запрос.УстановитьПараметр("ОбщаяДатаПредставление", ТекстПредставленияОбщейДаты()); - // АПК:494-выкл: допустимо, так как объем данных небольшой (от единиц до сотен). + // АПК:494-выкл - №656 Соединение с вложенным запросом допустимо, + // так как объем данных небольшой (от единиц до сотен). Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ | ЗНАЧЕНИЕ(ПланВидовХарактеристик.РазделыДатЗапретаИзменения.ПустаяСсылка) КАК Раздел, @@ -2169,7 +2161,7 @@ | ДатыЗапретаИзменения.Пользователь = &Пользователь | И ДатыЗапретаИзменения.Раздел = &ЕдинственныйРаздел | И ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Объект) <> ТИП(ПланВидовХарактеристик.РазделыДатЗапретаИзменения)"; - // АПК:494-вкл: допустимо, так как объем данных небольшой (от единиц до сотен). + // АПК:494-вкл. ПрочитанныеДатыЗапрета = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам); @@ -2317,40 +2309,51 @@ КонецЕсли; ЗаблокироватьНаборЗаписейПользователяНаСервере(НовыйПользователь, АдресУстановленныхБлокировок); - НаборЗаписей = РегистрыСведений.ДатыЗапретаИзменения.СоздатьНаборЗаписей(); - НаборЗаписей.Отбор.Пользователь.Установить(НовыйПользователь, Истина); - НаборЗаписей.Прочитать(); - Если НаборЗаписей.Количество() > 0 Тогда - Возврат Ложь; - КонецЕсли; - - Если СтарыйПользователь <> Неопределено Тогда - НачатьТранзакцию(); - Попытка - НаборЗаписей.Отбор.Пользователь.Установить(СтарыйПользователь, Истина); - НаборЗаписей.Прочитать(); - ДанныеПользователя = НаборЗаписей.Выгрузить(); - НаборЗаписей.Очистить(); - НаборЗаписей.Записать(); - - ДанныеПользователя.ЗаполнитьЗначения(НовыйПользователь, "Пользователь"); - НаборЗаписей.Отбор.Пользователь.Установить(НовыйПользователь, Истина); - НаборЗаписей.Загрузить(ДанныеПользователя); - НаборЗаписей.Записать(); - - ЗафиксироватьТранзакцию(); - Исключение + НачатьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ДатыЗапретаИзменения"); + ЭлементБлокировки.УстановитьЗначение("Пользователь", НовыйПользователь); + Если СтарыйПользователь <> Неопределено Тогда + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ДатыЗапретаИзменения"); + ЭлементБлокировки.УстановитьЗначение("Пользователь", СтарыйПользователь); + КонецЕсли; + Блокировка.Заблокировать(); + + НаборЗаписей = РегистрыСведений.ДатыЗапретаИзменения.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.Пользователь.Установить(НовыйПользователь, Истина); + НаборЗаписей.Прочитать(); + Если НаборЗаписей.Количество() > 0 Тогда ОтменитьТранзакцию(); - РазблокироватьВсеЗаписиНаСервере(АдресУстановленныхБлокировок); - ВызватьИсключение; - КонецПопытки; - Иначе - ЗаблокироватьИЗаписатьПустыеДаты(АдресУстановленныхБлокировок, - Блокировки.РазделПустаяСсылка, Блокировки.РазделПустаяСсылка, НовыйПользователь, ""); - КонецЕсли; + Возврат Ложь; + КонецЕсли; + + Если СтарыйПользователь = Неопределено Тогда + ЗаблокироватьИЗаписатьПустыеДаты(АдресУстановленныхБлокировок, + Блокировки.РазделПустаяСсылка, Блокировки.РазделПустаяСсылка, НовыйПользователь, ""); + ОтменитьТранзакцию(); + Возврат Истина; + КонецЕсли; + + НаборЗаписей.Отбор.Пользователь.Установить(СтарыйПользователь, Истина); + НаборЗаписей.Прочитать(); + ДанныеПользователя = НаборЗаписей.Выгрузить(); + НаборЗаписей.Очистить(); + НаборЗаписей.Записать(); + + ДанныеПользователя.ЗаполнитьЗначения(НовыйПользователь, "Пользователь"); + НаборЗаписей.Отбор.Пользователь.Установить(НовыйПользователь, Истина); + НаборЗаписей.Загрузить(ДанныеПользователя); + НаборЗаписей.Записать(); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + РазблокироватьВсеЗаписиНаСервере(АдресУстановленныхБлокировок); + ВызватьИсключение; + КонецПопытки; РазблокироватьВсеЗаписиНаСервере(АдресУстановленныхБлокировок); - Возврат Истина; КонецФункции @@ -2371,13 +2374,25 @@ &НаСервереБезКонтекста Процедура ЗаписатьКомментарий(Пользователь, Комментарий); - НаборЗаписей = РегистрыСведений.ДатыЗапретаИзменения.СоздатьНаборЗаписей(); - НаборЗаписей.Отбор.Пользователь.Установить(Пользователь, Истина); - НаборЗаписей.Прочитать(); - ДанныеПользователя = НаборЗаписей.Выгрузить(); - ДанныеПользователя.ЗаполнитьЗначения(Комментарий, "Комментарий"); - НаборЗаписей.Загрузить(ДанныеПользователя); - НаборЗаписей.Записать(); + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ДатыЗапретаИзменения"); + ЭлементБлокировки.УстановитьЗначение("Пользователь", Пользователь); + + НачатьТранзакцию(); + Попытка + Блокировка.Заблокировать(); + НаборЗаписей = РегистрыСведений.ДатыЗапретаИзменения.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.Пользователь.Установить(Пользователь, Истина); + НаборЗаписей.Прочитать(); + ДанныеПользователя = НаборЗаписей.Выгрузить(); + ДанныеПользователя.ЗаполнитьЗначения(Комментарий, "Комментарий"); + НаборЗаписей.Загрузить(ДанныеПользователя); + НаборЗаписей.Записать(); + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; КонецПроцедуры @@ -3352,34 +3367,48 @@ &НаСервере Процедура УдалитьЛишнееПриИзмененииСпособаУказанияДатыЗапрета(Знач ВыбранноеЗначение, Знач ТекущийПользователь, Знач УстановкаДатыЗапрета) - НаборЗаписей = РегистрыСведений.ДатыЗапретаИзменения.СоздатьНаборЗаписей(); - НаборЗаписей.Отбор.Пользователь.Установить(ТекущийПользователь); - НаборЗаписей.Прочитать(); - Индекс = НаборЗаписей.Количество()-1; - Пока Индекс >= 0 Цикл - Запись = НаборЗаписей[Индекс]; - Если ВыбранноеЗначение = "ОбщаяДата" Тогда - Если Не ( Запись.Раздел = РазделПустаяСсылка - И Запись.Объект = РазделПустаяСсылка ) Тогда - НаборЗаписей.Удалить(Запись); + НачатьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ДатыЗапретаИзменения"); + ЭлементБлокировки.УстановитьЗначение("Пользователь", ТекущийПользователь); + Блокировка.Заблокировать(); + + НаборЗаписей = РегистрыСведений.ДатыЗапретаИзменения.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.Пользователь.Установить(ТекущийПользователь); + НаборЗаписей.Прочитать(); + + Индекс = НаборЗаписей.Количество()-1; + Пока Индекс >= 0 Цикл + Запись = НаборЗаписей[Индекс]; + Если ВыбранноеЗначение = "ОбщаяДата" Тогда + Если Не ( Запись.Раздел = РазделПустаяСсылка + И Запись.Объект = РазделПустаяСсылка ) Тогда + НаборЗаписей.Удалить(Запись); + КонецЕсли; + ИначеЕсли ВыбранноеЗначение = "ПоРазделам" Тогда + Если Запись.Раздел <> Запись.Объект + Или Запись.Раздел = РазделПустаяСсылка + И Запись.Объект = РазделПустаяСсылка Тогда + НаборЗаписей.Удалить(Запись); + КонецЕсли; + ИначеЕсли ВыбранноеЗначение = "ПоОбъектам" Тогда + Если Запись.Раздел = Запись.Объект + И Запись.Раздел <> РазделПустаяСсылка + И Запись.Объект <> РазделПустаяСсылка Тогда + НаборЗаписей.Удалить(Запись); + КонецЕсли; КонецЕсли; - ИначеЕсли ВыбранноеЗначение = "ПоРазделам" Тогда - Если Запись.Раздел <> Запись.Объект - Или Запись.Раздел = РазделПустаяСсылка - И Запись.Объект = РазделПустаяСсылка Тогда - НаборЗаписей.Удалить(Запись); - КонецЕсли; - ИначеЕсли ВыбранноеЗначение = "ПоОбъектам" Тогда - Если Запись.Раздел = Запись.Объект - И Запись.Раздел <> РазделПустаяСсылка - И Запись.Объект <> РазделПустаяСсылка Тогда - НаборЗаписей.Удалить(Запись); - КонецЕсли; - КонецЕсли; - Индекс = Индекс-1; - КонецЦикла; - НаборЗаписей.Записать(); - + Индекс = Индекс-1; + КонецЦикла; + НаборЗаписей.Записать(); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + ТекстОшибки = ""; ПрочитатьДанныеПользователя(ЭтотОбъект, ТекстОшибки); Если ЗначениеЗаполнено(ТекстОшибки) Тогда @@ -3405,7 +3434,7 @@ КонецЦикла; Если ВыделенныеСтроки.Количество() = 0 Тогда - ПоказатьПредупреждение(, НСтр("ru ='Выделенные строки не заполнены.'")); + ПоказатьПредупреждение(, НСтр("ru = 'Выделенные строки не заполнены.'")); Возврат; КонецЕсли; diff --git a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/РедактированиеДатыЗапрета/Form.form b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/РедактированиеДатыЗапрета/Form.form index 083271e67..994e4030f 100644 --- a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/РедактированиеДатыЗапрета/Form.form +++ b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/РедактированиеДатыЗапрета/Form.form @@ -148,10 +148,6 @@ true - - <key>ru</key> - <value>Произвольная дата</value> - ГруппаПроизвольнаяДатаРасширеннаяПодсказка 89 @@ -222,10 +218,6 @@ true - - <key>ru</key> - <value>Больше возможностей</value> - ГруппаБольшеВозможностейРасширеннаяПодсказка 100 @@ -545,10 +537,6 @@ true - - <key>ru</key> - <value>Произвольная дата</value> - ПроизвольнаяДатаExtendedTooltip 52 @@ -569,10 +557,6 @@ true - - <key>ru</key> - <value>Дата запрета с описанием</value> - ДатаЗапретаСОписаниемExtendedTooltip 50 @@ -699,10 +683,6 @@ true - - <key>ru</key> - <value>Количество дней разрешения</value> - ГруппаКоличествоДнейРазрешенияРасширеннаяПодсказка 107 @@ -769,10 +749,6 @@ true - - <key>ru</key> - <value>Относительная дата</value> - ОтносительнаяДатаРасширеннаяПодсказка 58 @@ -861,10 +837,6 @@ true - - <key>ru</key> - <value>Свойства даты запрета</value> - СвойстваДатыЗапретаРасширеннаяПодсказка 57 @@ -911,10 +883,6 @@ true - - <key>ru</key> - <value>Режимы работы</value> - ГруппаРежимыРаботыРасширеннаяПодсказка 80 @@ -1069,10 +1037,6 @@ true - - <key>ru</key> - <value>Пояснение</value> - ГруппаПояснениеРасширеннаяПодсказка 70 diff --git a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ФормаЗаписи/Form.form b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ФормаЗаписи/Form.form index d00c98597..74252b5ab 100644 --- a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ФормаЗаписи/Form.form +++ b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ФормаЗаписи/Form.form @@ -372,5 +372,14 @@ - + + + AfterWriteAtServer + ПослеЗаписиНаСервере + + + OnReadAtServer + ПриЧтенииНаСервере + + diff --git a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ФормаЗаписи/Module.bsl index 136052163..207ffc72b 100644 --- a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ФормаЗаписи/Module.bsl +++ b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ФормаЗаписи/Module.bsl @@ -17,6 +17,30 @@ КонецПроцедуры +&НаСервере +Процедура ПриЧтенииНаСервере(ТекущийОбъект) + + // СтандартныеПодсистемы.УправлениеДоступом + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); + МодульУправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); + КонецЕсли; + // Конец СтандартныеПодсистемы.УправлениеДоступом + +КонецПроцедуры + +&НаСервере +Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи) + + // СтандартныеПодсистемы.УправлениеДоступом + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); + МодульУправлениеДоступом.ПослеЗаписиНаСервере(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи); + КонецЕсли; + // Конец СтандартныеПодсистемы.УправлениеДоступом + +КонецПроцедуры + #КонецОбласти #Область ОбработчикиКомандФормы diff --git a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/ManagerModule.bsl b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/ManagerModule.bsl index feb4e8a68..ff259ef4b 100644 --- a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/ManagerModule.bsl @@ -20,11 +20,11 @@ Ограничение.Текст = "РазрешитьЧтениеИзменение |ГДЕ - | ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) = ТИП(Справочник.Пользователи) - | ИЛИ ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) = ТИП(Справочник.ГруппыПользователей) - | ИЛИ ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) = ТИП(Справочник.ВнешниеПользователи) - | ИЛИ ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) = ТИП(Справочник.ГруппыВнешнихПользователей) - | ИЛИ ДатыЗапретаИзменения.Пользователь = ЗНАЧЕНИЕ(Перечисление.ВидыНазначенияДатЗапрета.ДляВсехПользователей)"; + | ТИПЗНАЧЕНИЯ(Пользователь) = ТИП(Справочник.Пользователи) + | ИЛИ ТИПЗНАЧЕНИЯ(Пользователь) = ТИП(Справочник.ГруппыПользователей) + | ИЛИ ТИПЗНАЧЕНИЯ(Пользователь) = ТИП(Справочник.ВнешниеПользователи) + | ИЛИ ТИПЗНАЧЕНИЯ(Пользователь) = ТИП(Справочник.ГруппыВнешнихПользователей) + | ИЛИ Пользователь = ЗНАЧЕНИЕ(Перечисление.ВидыНазначенияДатЗапрета.ДляВсехПользователей)"; КонецПроцедуры diff --git a/SSL/src/InformationRegisters/ЗависимостиПравДоступа/ManagerModule.bsl b/SSL/src/InformationRegisters/ЗависимостиПравДоступа/ManagerModule.bsl index 0e35e1663..a7ea250b2 100644 --- a/SSL/src/InformationRegisters/ЗависимостиПравДоступа/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ЗависимостиПравДоступа/ManagerModule.bsl @@ -12,9 +12,9 @@ // Процедура обновляет данные регистра, если прикладной разработчик // изменил зависимости в переопределяемом модуле. -// +// // Параметры: -// ЕстьИзменения - Булево (возвращаемое значение) - если производилась запись, +// ЕстьИзменения - Булево - (возвращаемое значение) - если производилась запись, // устанавливается Истина, иначе не изменяется. // Процедура ОбновитьДанныеРегистра(ЕстьИзменения = Неопределено) Экспорт diff --git a/SSL/src/InformationRegisters/ЗависимостиПравДоступа/ЗависимостиПравДоступа.mdo b/SSL/src/InformationRegisters/ЗависимостиПравДоступа/ЗависимостиПравДоступа.mdo index b8be8ef1b..bd7119270 100644 --- a/SSL/src/InformationRegisters/ЗависимостиПравДоступа/ЗависимостиПравДоступа.mdo +++ b/SSL/src/InformationRegisters/ЗависимостиПравДоступа/ЗависимостиПравДоступа.mdo @@ -80,7 +80,7 @@ ru Тип ведущей таблицы - Тип ведущей таблицы, заданный пустой ссылкой + АПК:1330 - №728.2.1 Допустимо использование универсального ссылочного типа, так как это универсальный механизм и только для RLS в формате БСП 2.х (устарел) ExchangePlanRef BusinessProcessRef diff --git a/SSL/src/InformationRegisters/ЗагруженныеВерсииАдресныхСведений/ЗагруженныеВерсииАдресныхСведений.mdo b/SSL/src/InformationRegisters/ЗагруженныеВерсииАдресныхСведений/ЗагруженныеВерсииАдресныхСведений.mdo index a4f53d3d3..96a9e8cc9 100644 --- a/SSL/src/InformationRegisters/ЗагруженныеВерсииАдресныхСведений/ЗагруженныеВерсииАдресныхСведений.mdo +++ b/SSL/src/InformationRegisters/ЗагруженныеВерсииАдресныхСведений/ЗагруженныеВерсииАдресныхСведений.mdo @@ -89,7 +89,7 @@ ru Дата загрузки - Дата записи в базу в UTC + Дата в UTC Date diff --git a/SSL/src/InformationRegisters/ЗамерыВремени/ManagerModule.bsl b/SSL/src/InformationRegisters/ЗамерыВремени/ManagerModule.bsl index d760bbb26..36209babf 100644 --- a/SSL/src/InformationRegisters/ЗамерыВремени/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ЗамерыВремени/ManagerModule.bsl @@ -310,7 +310,7 @@ ТекстВерхнейГраницы = ИмяТаблицыИсточника + "." + ИмяКолонкиИсточника + " <= " + Формат(СтрокаИнтервала.ВерхняяГраница,"ЧРД=.; ЧН=0; ЧГ="); КонецЕсли; - ТекстЗапросаДляИнтервала = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСтроки, ТекстНижнейГраницы, ТекстВерхнейГраницы, Формат(СтрокаИнтервала.ВерхняяГраница,"ЧРД=.; ЧН=0; ЧГ=")); + ТекстЗапросаДляИнтервала = ОценкаПроизводительностиКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСтроки, ТекстНижнейГраницы, ТекстВерхнейГраницы, Формат(СтрокаИнтервала.ВерхняяГраница,"ЧРД=.; ЧН=0; ЧГ=")); ТекстЗапроса = ТекстЗапроса + ?(ПустаяСтрока(ТекстЗапроса), "", Символы.ПС) + ТекстЗапросаДляИнтервала; КонецЦикла; diff --git a/SSL/src/InformationRegisters/ЗамерыВремениТехнологические/ManagerModule.bsl b/SSL/src/InformationRegisters/ЗамерыВремениТехнологические/ManagerModule.bsl index cdac4eade..8a2a63bb7 100644 --- a/SSL/src/InformationRegisters/ЗамерыВремениТехнологические/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ЗамерыВремениТехнологические/ManagerModule.bsl @@ -269,7 +269,7 @@ ТекстВерхнейГраницы = ИмяТаблицыИсточника + "." + ИмяКолонкиИсточника + " <= " + Формат(СтрокаИнтервала.ВерхняяГраница,"ЧРД=.; ЧН=0; ЧГ="); КонецЕсли; - ТекстЗапросаДляИнтервала = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСтроки, ТекстНижнейГраницы, ТекстВерхнейГраницы, Формат(СтрокаИнтервала.ВерхняяГраница,"ЧРД=.; ЧН=0; ЧГ=")); + ТекстЗапросаДляИнтервала = ОценкаПроизводительностиКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСтроки, ТекстНижнейГраницы, ТекстВерхнейГраницы, Формат(СтрокаИнтервала.ВерхняяГраница,"ЧРД=.; ЧН=0; ЧГ=")); ТекстЗапроса = ТекстЗапроса + ?(ПустаяСтрока(ТекстЗапроса), "", Символы.ПС) + ТекстЗапросаДляИнтервала; КонецЦикла; diff --git a/SSL/src/InformationRegisters/ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов/ManagerModule.bsl b/SSL/src/InformationRegisters/ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов/ManagerModule.bsl index cb76b75df..4ecef77a3 100644 --- a/SSL/src/InformationRegisters/ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов/ManagerModule.bsl @@ -72,10 +72,10 @@ // РежимЗамещения - Булево - определяет режим замещения ранее выданных разрешений для данного владельца. При // значении параметра равным Истина, помимо предоставления запрошенных разрешений в запрос будет добавлена // очистка всех разрешений, ранее запрошенных для этого же владельца. -// ДобавляемыеРазрешения - Массив(ОбъектXDTO) - массив ОбъектовXDTO, соответствующих внутренним описаниям +// ДобавляемыеРазрешения - Массив Из ОбъектXDTO - массив ОбъектовXDTO, соответствующих внутренним описаниям // запрашиваемых разрешений на доступ к внешним ресурсам. Предполагается, что все ОбъектыXDTO, передаваемые // в качестве параметра, сформированы с помощью вызова функций РаботаВБезопасномРежиме.Разрешение*(). -// УдаляемыеРазрешения - Массив(ОбъектXDTO) - массив ОбъектовXDTO, соответствующих внутренним описаниям +// УдаляемыеРазрешения - Массив Из ОбъектXDTO - массив ОбъектовXDTO, соответствующих внутренним описаниям // отменяемых разрешений на доступ к внешним ресурсам. Предполагается, что все ОбъектыXDTO, передаваемые // в качестве параметра, сформированы с помощью вызова функций РаботаВБезопасномРежиме.Разрешение*(). // @@ -154,10 +154,11 @@ // Создает и инициализирует менеджер применения запросов на использование внешних ресурсов. // // Параметры: -// ИдентификаторыЗапросов - Массив(УникальныйИдентификатор) - идентификаторы запросов, для +// ИдентификаторыЗапросов - Массив Из УникальныйИдентификатор - идентификаторы запросов, для // применения которых создается менеджер. // -// Возвращаемое значение: ОбработкаОбъект.НастройкаРазрешенийНаИспользованиеВнешнихРесурсов. +// Возвращаемое значение: +// ОбработкаОбъект.НастройкаРазрешенийНаИспользованиеВнешнихРесурсов. // Функция МенеджерПримененияРазрешений(Знач ИдентификаторыЗапросов) Экспорт @@ -248,7 +249,8 @@ // Проверяет необходимость интерактивного запроса разрешений на использование внешних ресурсов. // -// Возвращаемое значение: Булево. +// Возвращаемое значение: +// Булево - // Функция ТребуетсяЗапросРазрешенийНаИспользованиеВнешнихРесурсов() @@ -262,7 +264,8 @@ // Проверяет возможность интерактивного запроса разрешений на использование внешних ресурсов. // -// Возвращаемое значение: Булево. +// Возвращаемое значение: +// Булево - // Функция ВозможенЗапросРазрешенийНаИспользованиеВнешнихРесурсов() @@ -382,7 +385,8 @@ // Создает "пустые" запросы замещения для всех ранее предоставленных разрешений. // -// Возвращаемое значение: Массив(УникальныйИдентификатор) - идентификаторы запросов для замещения всех ранее +// Возвращаемое значение: +// Массив Из УникальныйИдентификатор - идентификаторы запросов для замещения всех ранее // предоставленных разрешений. // Функция ЗапросыЗамещенияДляВсехПредоставленныхРазрешений() Экспорт @@ -425,7 +429,7 @@ // Сериализует запросы на использование внешних ресурсов. // // Параметры: -// Идентификаторы - Массив(УникальныйИдентификатор) - идентификаторы сериализуемых +// Идентификаторы - Массив Из УникальныйИдентификатор - идентификаторы сериализуемых // запросов. // // Возвращаемое значение - Строка. @@ -479,7 +483,7 @@ // Удаляет запросы на использование внешних ресурсов. // // Параметры: -// ИдентификаторыЗапросов - Массив(УникальныйИдентификатор) - идентификаторы удаляемых запросов. +// ИдентификаторыЗапросов - Массив Из УникальныйИдентификатор - идентификаторы удаляемых запросов. // Процедура УдалитьЗапросы(Знач ИдентификаторыЗапросов) Экспорт diff --git a/SSL/src/InformationRegisters/ЗначенияГруппДоступа/ManagerModule.bsl b/SSL/src/InformationRegisters/ЗначенияГруппДоступа/ManagerModule.bsl index cfd66a232..f656e969e 100644 --- a/SSL/src/InformationRegisters/ЗначенияГруппДоступа/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ЗначенияГруппДоступа/ManagerModule.bsl @@ -14,13 +14,13 @@ // - разрешенных значений групп доступа, // - разрешенных значений профилей групп доступа, // - использования видов доступа. -// +// // Параметры: // ГруппыДоступа - СправочникСсылка.ГруппыДоступа. // - Массив значений указанных выше типов. // - Неопределено - без отбора. // -// ЕстьИзменения - Булево (возвращаемое значение) - если производилась запись, +// ЕстьИзменения - Булево - (возвращаемое значение) - если производилась запись, // устанавливается Истина, иначе не изменяется. // Процедура ОбновитьДанныеРегистра(ГруппыДоступа = Неопределено, ЕстьИзменения = Неопределено) Экспорт @@ -74,9 +74,20 @@ Запрос.УстановитьПараметр("ТипыГруппИЗначенийВидовДоступа", УправлениеДоступомСлужебныйПовтИсп.ТипыГруппИЗначенийВидовДоступа()); + + Запрос.УстановитьПараметр("ВыбранныеЗначенияДоступа", ВыбранныеЗначенияДоступа(ГруппыДоступа)); ТекстЗапросовВременныхТаблиц = "ВЫБРАТЬ + | ВыбранныеЗначенияДоступа.Значение КАК Значение, + | ВыбранныеЗначенияДоступа.ЗначениеВИерархии КАК ЗначениеВИерархии + |ПОМЕСТИТЬ ВыбранныеЗначенияДоступа + |ИЗ + | &ВыбранныеЗначенияДоступа КАК ВыбранныеЗначенияДоступа + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ | ИспользуемыеВидыДоступа.ВидДоступа КАК ВидДоступа, | ИспользуемыеВидыДоступа.ВидДоступаПользователи КАК ВидДоступаПользователи, | ИспользуемыеВидыДоступа.ВидДоступаВнешниеПользователи КАК ВидДоступаВнешниеПользователи @@ -164,6 +175,7 @@ | ГруппыДоступа.Ссылка КАК ГруппаДоступа, | ЗначенияДоступаПрофиля.ВидДоступа КАК ВидДоступа, | ЗначенияДоступаПрофиля.ЗначениеДоступа КАК ЗначениеДоступа, + | ЗначенияДоступаПрофиля.ВключаяНижестоящие КАК ВключаяНижестоящие, | ВЫБОР | КОГДА ВидыДоступаПрофиля.ВсеРазрешены | ТОГДА ЛОЖЬ @@ -186,6 +198,7 @@ | ГруппыДоступа.Ссылка, | ЗначенияДоступа.ВидДоступа, | ЗначенияДоступа.ЗначениеДоступа, + | ЗначенияДоступа.ВключаяНижестоящие, | ВЫБОР | КОГДА ВидыДоступа.ВсеРазрешены | ТОГДА ЛОЖЬ @@ -207,7 +220,11 @@ |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | НастройкиЗначений.ГруппаДоступа КАК ГруппаДоступа, - | НастройкиЗначений.ЗначениеДоступа КАК ЗначениеДоступа, + | ВЫБОР + | КОГДА НастройкиЗначений.ВключаяНижестоящие + | ТОГДА ВыбранныеЗначенияДоступа.ЗначениеВИерархии + | ИНАЧЕ НастройкиЗначений.ЗначениеДоступа + | КОНЕЦ КАК ЗначениеДоступа, | МАКСИМУМ(НастройкиЗначений.ЗначениеРазрешено) КАК ЗначениеРазрешено |ПОМЕСТИТЬ НовыеДанные |ИЗ @@ -223,14 +240,20 @@ | ВидыДоступаПрофилейВсеЗапрещены.ВидДоступа | ИЗ | ВидыДоступаПрофилейВсеЗапрещены КАК ВидыДоступаПрофилейВсеЗапрещены)) + | ЛЕВОЕ СОЕДИНЕНИЕ ВыбранныеЗначенияДоступа КАК ВыбранныеЗначенияДоступа + | ПО НастройкиЗначений.ЗначениеДоступа = ВыбранныеЗначенияДоступа.Значение | |СГРУППИРОВАТЬ ПО | НастройкиЗначений.ГруппаДоступа, - | НастройкиЗначений.ЗначениеДоступа + | ВЫБОР + | КОГДА НастройкиЗначений.ВключаяНижестоящие + | ТОГДА ВыбранныеЗначенияДоступа.ЗначениеВИерархии + | ИНАЧЕ НастройкиЗначений.ЗначениеДоступа + | КОНЕЦ | |ИНДЕКСИРОВАТЬ ПО | НастройкиЗначений.ГруппаДоступа, - | НастройкиЗначений.ЗначениеДоступа, + | ЗначениеДоступа, | ЗначениеРазрешено |; | @@ -556,6 +579,114 @@ КонецПроцедуры +Функция ВыбранныеЗначенияДоступа(ГруппыДоступа) + + ТекстЗапроса = + "ВЫБРАТЬ + | ГруппыДоступа.Ссылка КАК Ссылка, + | ГруппыДоступа.Профиль КАК Профиль + |ПОМЕСТИТЬ ГруппыДоступа + |ИЗ + | Справочник.ГруппыДоступа КАК ГруппыДоступа + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПрофилиГруппДоступа КАК ПрофилиГруппДоступа + | ПО ГруппыДоступа.Профиль = ПрофилиГруппДоступа.Ссылка + | И (ГруппыДоступа.Профиль <> ЗНАЧЕНИЕ(Справочник.ПрофилиГруппДоступа.Администратор)) + | И (НЕ ГруппыДоступа.ПометкаУдаления) + | И (НЕ ПрофилиГруппДоступа.ПометкаУдаления) + | И (&УсловиеОтбораГруппДоступа1) + | И (ИСТИНА В + | (ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА КАК ЗначениеИстина + | ИЗ + | Справочник.ГруппыДоступа.Пользователи КАК УчастникиГруппДоступа + | ГДЕ + | УчастникиГруппДоступа.Ссылка = ГруппыДоступа.Ссылка)) + | + |ИНДЕКСИРОВАТЬ ПО + | Ссылка, + | ГруппыДоступа.Профиль + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ТИПЗНАЧЕНИЯ(ГруппыДоступаЗначенияДоступа.ЗначениеДоступа) КАК ТипЗначения, + | ГруппыДоступаЗначенияДоступа.ЗначениеДоступа КАК ЗначениеДоступа + |ИЗ + | Справочник.ГруппыДоступа.ЗначенияДоступа КАК ГруппыДоступаЗначенияДоступа + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ГруппыДоступа КАК ГруппыДоступа + | ПО ГруппыДоступаЗначенияДоступа.Ссылка = ГруппыДоступа.Ссылка + |ГДЕ + | ГруппыДоступаЗначенияДоступа.ВключаяНижестоящие + | + |СГРУППИРОВАТЬ ПО + | ТИПЗНАЧЕНИЯ(ГруппыДоступаЗначенияДоступа.ЗначениеДоступа), + | ГруппыДоступаЗначенияДоступа.ЗначениеДоступа + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | ТИПЗНАЧЕНИЯ(ПрофилиГруппДоступаЗначенияДоступа.ЗначениеДоступа), + | ПрофилиГруппДоступаЗначенияДоступа.ЗначениеДоступа + |ИЗ + | Справочник.ПрофилиГруппДоступа.ЗначенияДоступа КАК ПрофилиГруппДоступаЗначенияДоступа + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ГруппыДоступа КАК ГруппыДоступа + | ПО ПрофилиГруппДоступаЗначенияДоступа.Ссылка = ГруппыДоступа.Профиль + |ГДЕ + | ПрофилиГруппДоступаЗначенияДоступа.ВключаяНижестоящие + | + |СГРУППИРОВАТЬ ПО + | ТИПЗНАЧЕНИЯ(ПрофилиГруппДоступаЗначенияДоступа.ЗначениеДоступа), + | ПрофилиГруппДоступаЗначенияДоступа.ЗначениеДоступа"; + + Запрос = Новый Запрос(ТекстЗапроса); + + УправлениеДоступомСлужебный.УстановитьУсловиеОтбораВЗапросе(Запрос, ГруппыДоступа, "ГруппыДоступа", + "&УсловиеОтбораГруппДоступа1:ГруппыДоступа.Ссылка"); + + НастройкиЗначенийДоступа = Запрос.Выполнить().Выгрузить(); + + Запрос = Новый Запрос; + + ТекстыЗапросов = Новый Массив; + Для Индекс = 0 По НастройкиЗначенийДоступа.Количество() - 1 Цикл + Настройка = НастройкиЗначенийДоступа[Индекс]; + + ОбъектМетаданных = Метаданные.НайтиПоТипу(Настройка.ТипЗначения); + Если ОбъектМетаданных = Неопределено Тогда + Продолжить; + КонецЕсли; + + ТекстЗапроса = + "ВЫБРАТЬ + | &ЗначениеДоступа КАК Значение, + | Таблица.Ссылка КАК ЗначениеВИерархии + |ИЗ + | &Таблица КАК Таблица + |ГДЕ + | Таблица.Ссылка В ИЕРАРХИИ(&ЗначениеДоступа)"; + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&Таблица", ОбъектМетаданных.ПолноеИмя()); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ЗначениеДоступа", "&ЗначениеДоступа" + XMLСтрока(Индекс)); + Запрос.УстановитьПараметр("ЗначениеДоступа" + XMLСтрока(Индекс), Настройка.ЗначениеДоступа); + ТекстыЗапросов.Добавить(ТекстЗапроса); + КонецЦикла; + + ТекстЗапроса = СтрСоединить(ТекстыЗапросов, Символы.ПС + "ОБЪЕДИНИТЬ ВСЕ" + Символы.ПС); + Запрос.Текст = ТекстЗапроса; + + Если ЗначениеЗаполнено(ТекстЗапроса) Тогда + Результат = Запрос.Выполнить().Выгрузить(); + Иначе + Результат = Новый ТаблицаЗначений; + Результат.Колонки.Добавить("Значение", Метаданные.ОпределяемыеТипы.ЗначениеДоступа.Тип); + Результат.Колонки.Добавить("ЗначениеВИерархии", Метаданные.ОпределяемыеТипы.ЗначениеДоступа.Тип); + КонецЕсли; + + Возврат Результат; + +КонецФункции + + #КонецОбласти #КонецЕсли diff --git a/SSL/src/InformationRegisters/ИдентификаторыОбъектовВерсийРасширений/ИдентификаторыОбъектовВерсийРасширений.mdo b/SSL/src/InformationRegisters/ИдентификаторыОбъектовВерсийРасширений/ИдентификаторыОбъектовВерсийРасширений.mdo index f044c687b..38282e4bc 100644 --- a/SSL/src/InformationRegisters/ИдентификаторыОбъектовВерсийРасширений/ИдентификаторыОбъектовВерсийРасширений.mdo +++ b/SSL/src/InformationRegisters/ИдентификаторыОбъектовВерсийРасширений/ИдентификаторыОбъектовВерсийРасширений.mdo @@ -109,7 +109,7 @@ ru - Ссылка на объект метаданных в базе данных + Ссылка на объект метаданных в информационной базе diff --git a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРоли/Module.bsl b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРоли/Module.bsl index d8dac0218..47a7d8df5 100644 --- a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРоли/Module.bsl +++ b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРоли/Module.bsl @@ -13,7 +13,7 @@ УстановитьУсловноеОформление(); - Исполнители.Параметры.УстановитьЗначениеПараметра("БезОбъектаАдресации", НСтр("ru='<Без объекта адресации>'")); + Исполнители.Параметры.УстановитьЗначениеПараметра("БезОбъектаАдресации", НСтр("ru = '<Без объекта адресации>'")); НастроитьОтображениеСпискаРолей(); diff --git a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРолиСОбъектомАдресации/Module.bsl b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРолиСОбъектомАдресации/Module.bsl index 3e932b83a..34741ff22 100644 --- a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРолиСОбъектомАдресации/Module.bsl +++ b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРолиСОбъектомАдресации/Module.bsl @@ -117,7 +117,7 @@ Процедура ПередЗаписью(Отказ, ПараметрыЗаписи) Для каждого СтрокаИсполнитель Из НаборЗаписей Цикл Если НЕ ЗначениеЗаполнено(СтрокаИсполнитель.Исполнитель) Тогда - ПоказатьПредупреждение(, НСтр("ru='Необходимо указать исполнителей.'")); + ПоказатьПредупреждение(, НСтр("ru = 'Необходимо указать исполнителей.'")); Отказ = Истина; КонецЕсли; КонецЦикла; diff --git a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/РолиИИсполнителиЗадач/Module.bsl b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/РолиИИсполнителиЗадач/Module.bsl index 3cfb809f4..9ace43687 100644 --- a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/РолиИИсполнителиЗадач/Module.bsl +++ b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/РолиИИсполнителиЗадач/Module.bsl @@ -115,7 +115,7 @@ СписокОбъект.Сортировать("Роль"); Для каждого СтрокаСписка Из СписокОбъект Цикл Если СтрокаСписка.Исполнители = 0 Тогда - СтрокаСписка.ИсполнителиСтрока = ?(СтрокаСписка.ВнешняяРоль, НСтр("ru = 'заданы в другой базе'"), НСтр("ru = 'не заданы'")); + СтрокаСписка.ИсполнителиСтрока = ?(СтрокаСписка.ВнешняяРоль, НСтр("ru = 'заданы в другой программе'"), НСтр("ru = 'не заданы'")); СтрокаСписка.Картинка = ?(СтрокаСписка.ВнешняяРоль, -1, 1); ИначеЕсли СтрокаСписка.Исполнители = 1 Тогда СтрокаСписка.ИсполнителиСтрока = Строка(БизнесПроцессыИЗадачиСервер.ВыбратьИсполнителя(ОсновнойОбъектАдресации, СтрокаСписка.РольСсылка)); diff --git a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ФормаЗаписи/Form.form b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ФормаЗаписи/Form.form index 4bbc77559..bd4315943 100644 --- a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ФормаЗаписи/Form.form +++ b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ФормаЗаписи/Form.form @@ -377,6 +377,14 @@ AfterWrite ПослеЗаписи + + AfterWriteAtServer + ПослеЗаписиНаСервере + + + OnReadAtServer + ПриЧтенииНаСервере + BeforeWriteAtServer ПередЗаписьюНаСервере diff --git a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ФормаЗаписи/Module.bsl index 306297de8..fe7716d8f 100644 --- a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ФормаЗаписи/Module.bsl +++ b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ФормаЗаписи/Module.bsl @@ -30,6 +30,30 @@ Оповестить("Запись_РолеваяАдресация", ПараметрыЗаписи, Запись.РольИсполнителя); КонецПроцедуры +&НаСервере +Процедура ПриЧтенииНаСервере(ТекущийОбъект) + + // СтандартныеПодсистемы.УправлениеДоступом + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); + МодульУправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); + КонецЕсли; + // Конец СтандартныеПодсистемы.УправлениеДоступом + +КонецПроцедуры + +&НаСервере +Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи) + + // СтандартныеПодсистемы.УправлениеДоступом + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); + МодульУправлениеДоступом.ПослеЗаписиНаСервере(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи); + КонецЕсли; + // Конец СтандартныеПодсистемы.УправлениеДоступом + +КонецПроцедуры + #КонецОбласти #Область ОбработчикиСобытийЭлементовШапкиФормы diff --git a/SSL/src/InformationRegisters/КалендарныеГрафики/ManagerModule.bsl b/SSL/src/InformationRegisters/КалендарныеГрафики/ManagerModule.bsl index 22e696620..4da788e19 100644 --- a/SSL/src/InformationRegisters/КалендарныеГрафики/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/КалендарныеГрафики/ManagerModule.bsl @@ -12,6 +12,7 @@ Процедура ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию(Параметры) Экспорт + // Исправить включение в график рабочих и предпраздничных дней, выпадающих на субботу и воскресенье. Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ @@ -120,7 +121,7 @@ ОбработкаЗавершена = Ложь; КонецЕсли; - ИмяПроцедуры = "РегистрыСведений.КалендарныеГрафики.ОбработатьДанныеДляПереходаНаНовуюВерсию"; + ИмяПроцедуры = "РегистрСведений.КалендарныеГрафики.ОбработатьДанныеДляПереходаНаНовуюВерсию"; Если Обработано = 0 И Проблемных <> 0 Тогда ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( diff --git a/SSL/src/InformationRegisters/КлючиДоступаКРегиструРезультатыПроверкиУчета/КлючиДоступаКРегиструРезультатыПроверкиУчета.mdo b/SSL/src/InformationRegisters/КлючиДоступаКРегиструРезультатыПроверкиУчета/КлючиДоступаКРегиструРезультатыПроверкиУчета.mdo index c2525c632..9b41de225 100644 --- a/SSL/src/InformationRegisters/КлючиДоступаКРегиструРезультатыПроверкиУчета/КлючиДоступаКРегиструРезультатыПроверкиУчета.mdo +++ b/SSL/src/InformationRegisters/КлючиДоступаКРегиструРезультатыПроверкиУчета/КлючиДоступаКРегиструРезультатыПроверкиУчета.mdo @@ -99,7 +99,14 @@ Поле 1 - AnyRef + ExchangePlanRef + BusinessProcessRef + DocumentRef + ChartOfCalculationTypesRef + TaskRef + ChartOfCharacteristicTypesRef + ChartOfAccountsRef + CatalogRef ru diff --git a/SSL/src/InformationRegisters/КомментарииСтатистики/ManagerModule.bsl b/SSL/src/InformationRegisters/КомментарииСтатистики/ManagerModule.bsl index 71cd2b0ba..741a1f192 100644 --- a/SSL/src/InformationRegisters/КомментарииСтатистики/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/КомментарииСтатистики/ManagerModule.bsl @@ -50,7 +50,7 @@ НачатьТранзакцию(); Попытка ХешированиеДанных = Новый ХешированиеДанных(ХешФункция.SHA1); - СлишкомМногоКомментариев = НСтр("ru='Слишком много комментариев'"); + СлишкомМногоКомментариев = НСтр("ru = 'Слишком много комментариев'"); ХешированиеДанных.Добавить(СлишкомМногоКомментариев); ХешНаименования = СтрЗаменить(Строка(ХешированиеДанных.ХешСумма), " ", ""); diff --git a/SSL/src/InformationRegisters/КэшПрограммныхИнтерфейсов/ManagerModule.bsl b/SSL/src/InformationRegisters/КэшПрограммныхИнтерфейсов/ManagerModule.bsl index b3c5c7582..41b980c30 100644 --- a/SSL/src/InformationRegisters/КэшПрограммныхИнтерфейсов/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/КэшПрограммныхИнтерфейсов/ManagerModule.bsl @@ -22,7 +22,7 @@ // обновления данных кэша, в случае обнаружения факта устаревания данных. // // Возвращаемое значение: -// Произвольный. +// Произвольный - . // Функция ДанныеКэшаВерсий(Знач Идентификатор, Знач ТипДанных, Знач ПараметрыПолучения, Знач ИспользоватьУстаревшиеДанные = Истина) Экспорт @@ -171,7 +171,6 @@ |ГДЕ | ТаблицаКэша.Идентификатор = &Идентификатор | И ТаблицаКэша.ТипДанных = &ТипДанных"; - Идентификатор = Идентификатор; Запрос.УстановитьПараметр("Идентификатор", Идентификатор); Запрос.УстановитьПараметр("ТипДанных", ТипДанных); diff --git a/SSL/src/InformationRegisters/НаборыЗначенийДоступа/ManagerModule.bsl b/SSL/src/InformationRegisters/НаборыЗначенийДоступа/ManagerModule.bsl index e18b75306..615608ec5 100644 --- a/SSL/src/InformationRegisters/НаборыЗначенийДоступа/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/НаборыЗначенийДоступа/ManagerModule.bsl @@ -34,9 +34,9 @@ #Область СлужебныеПроцедурыИФункции // Процедура обновляет данные регистра при полном обновлении вспомогательных данных. -// +// // Параметры: -// ЕстьИзменения - Булево (возвращаемое значение) - если производилась запись, +// ЕстьИзменения - Булево - (возвращаемое значение) - если производилась запись, // устанавливается Истина, иначе не изменяется. // Процедура ОбновитьДанныеРегистра(ЕстьИзменения = Неопределено) Экспорт diff --git a/SSL/src/InformationRegisters/НаборыЗначенийДоступа/НаборыЗначенийДоступа.mdo b/SSL/src/InformationRegisters/НаборыЗначенийДоступа/НаборыЗначенийДоступа.mdo index c07bb1daa..6188e630d 100644 --- a/SSL/src/InformationRegisters/НаборыЗначенийДоступа/НаборыЗначенийДоступа.mdo +++ b/SSL/src/InformationRegisters/НаборыЗначенийДоступа/НаборыЗначенийДоступа.mdo @@ -136,6 +136,7 @@ ru Объект + АПК:1330 - №728.2.1 Допустимо использование универсального ссылочного типа, так как это универсальный механизм и только для RLS в формате БСП 2.х (устарел) ExchangePlanRef BusinessProcessRef @@ -194,7 +195,7 @@ ru Значение доступа - Незаполненные значения нужно допустить, чтобы избежать ошибок при записи проверяемых объектов + АПК:1330 - №728.2.1 Допустимо использование универсального ссылочного типа, так как это универсальный механизм и только для RLS в формате БСП 2.х (устарел) ExchangePlanRef EnumRef diff --git a/SSL/src/InformationRegisters/НаличиеФайлов/ManagerModule.bsl b/SSL/src/InformationRegisters/НаличиеФайлов/ManagerModule.bsl index 6cb7017ca..1bcfd4c1a 100644 --- a/SSL/src/InformationRegisters/НаличиеФайлов/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/НаличиеФайлов/ManagerModule.bsl @@ -112,7 +112,7 @@ Если ОбъектовОбработано = 0 И ПроблемныхОбъектов <> 0 Тогда ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Процедуре РегистрыСведений.НаличиеФайлов.ОбработатьДанныеДляПереходаНаНовуюВерсию.ОбработатьДанныеДляПереходаНаНовуюВерсию не удалось обработать программы электронной подписи (пропущены): %1'"), + НСтр("ru = 'Процедуре РегистрыСведений.НаличиеФайлов.ОбработатьДанныеДляПереходаНаНовуюВерсию не удалось обработать программы электронной подписи (пропущены): %1'"), ПроблемныхОбъектов); ВызватьИсключение ТекстСообщения; Иначе diff --git a/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/Напоминание/Form.form b/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/Напоминание/Form.form index 2156e851f..a207146d0 100644 --- a/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/Напоминание/Form.form +++ b/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/Напоминание/Form.form @@ -80,10 +80,6 @@ true - - <key>ru</key> - <value>Предмет</value> - ПредметРасширеннаяПодсказка 135 @@ -155,38 +151,6 @@ НастройкаВремени 102 - - ПанельПереключателей - 82 - true - true - - true - - - <key>ru</key> - <value>Панель переключателей</value> - - - ПанельПереключателейExtendedTooltip - 113 - Label - true - true - - Left - - - UsualGroup - - HorizontalIfPossible - Auto - true - true - Auto - Auto - - СпособУстановкиВремениНапоминания 39 @@ -252,6 +216,10 @@ РасчетноеВремяНапоминания 97 + + <key>ru</key> + <value>00:00</value> + true true @@ -280,9 +248,10 @@ true true true - false + true Left + 1 true @@ -290,11 +259,6 @@ true - - <key>ru</key> - <value>Без детализации</value> - - true БезДетализацииExtendedTooltip 116 @@ -438,10 +402,6 @@ true - - <key>ru</key> - <value>Дата время</value> - ДатаВремяExtendedTooltip 118 @@ -672,10 +632,6 @@ true - - <key>ru</key> - <value>Интервал времени относительно источника</value> - ГруппаИнтервалВремениОтносительноИсточникаРасширеннаяПодсказка 137 @@ -787,10 +743,6 @@ true - - <key>ru</key> - <value>Имя реквизита источника</value> - ГруппаИмяРеквизитаИсточникаРасширеннаяПодсказка 139 @@ -816,10 +768,6 @@ true - - <key>ru</key> - <value>Настройка источника</value> - НастройкаИсточникаExtendedTooltip 121 @@ -929,10 +877,6 @@ true - - <key>ru</key> - <value>Настройка периодичности</value> - НастройкаПериодичностиExtendedTooltip 126 @@ -954,10 +898,7 @@ true - - <key>ru</key> - <value>Панель детальных настроек</value> - + false ПанельДетальныхНастроекExtendedTooltip 115 @@ -978,10 +919,6 @@ true - - <key>ru</key> - <value>Напомнить</value> - НастройкаВремениExtendedTooltip 112 @@ -1137,9 +1074,7 @@ 3 String - - 30 - + true @@ -1217,6 +1152,10 @@ AfterWrite ПослеЗаписи + + AfterWriteAtServer + ПослеЗаписиНаСервере + OnReadAtServer ПриЧтенииНаСервере diff --git a/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/Напоминание/Help/ru.html b/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/Напоминание/Help/ru.html index ae4bd6e8a..242d0b973 100644 --- a/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/Напоминание/Help/ru.html +++ b/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/Напоминание/Help/ru.html @@ -2,17 +2,23 @@

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

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

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

    -

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

    +

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

    Ввод напоминания

    • Откорректируйте или напишите текст напоминания. -
    • Если напоминание связано с документом, справочником или другим объектом программы, то в поле Предмет проставляется ссылка на объект программы, в тексте напоминания по умолчанию будет подставлено его наименование. -
      • По ссылке в поле Предмет можно просмотреть объект программы, по которому создано напоминание.
    • В поле Напомнить выберите один из вариантов: +
    • +
    • Если напоминание связано с документом, справочником или другим объектом программы, то в поле Предмет проставляется ссылка на объект программы, в тексте напоминания по умолчанию будет подставлено его наименование. +
      • По ссылке в поле Предмет можно просмотреть объект программы, по которому создано напоминание.
    • +
    • В поле Напомнить выберите один из вариантов:
      • В указанное время - для указания точной даты и времени напоминания. Введите дату вручную или выберите из календаря с помощью кнопки . -
      • Через определенный интервал. Для этого выберите значение из списка для задания интервала, через который напоминание сработает. Также можно с помощью клавиатуры указать произвольное количество часов, например, через 10 часов. Программа автоматически высчитывает дату и время срабатывания напоминания и выводит ее в скобках рядом с полем Напомнить. -
      • Относительно предмета - для указания времени напоминания относительно даты в предмете напоминания, например, относительно срока исполнения в задаче. Это значение поля Напомнить отображается и предлагается программой по умолчанию, когда у предмета существует по меньшей мере одно поле с датой в будущем времени. Выберите из списка, за сколько времени до Срока необходимо вывести напоминание. Если такая дата в предмете меняется, автоматически меняется и срок напоминания. Если дата в предмете по какой-то причине будет сброшена, то срок напоминания будет считаться подошедшим и напоминание будет выведено досрочно. -
      • Периодически - для периодических напоминаний, например, можно выбрать из списка значение по понедельникам в 9-00, или ввести другое расписание. Для ввода своего расписания выберите из списка значение по заданному расписанию и произведите необходимые настройки.

    Отмена напоминания

    + +
  • Через определенный интервал. Для этого выберите значение из списка для задания интервала, через который напоминание сработает. Также можно с помощью клавиатуры указать произвольное количество часов, например, через 10 часов. Программа автоматически высчитывает дату и время срабатывания напоминания и выводит ее в скобках рядом с полем Напомнить. +
  • +
  • Относительно предмета - для указания времени напоминания относительно даты в предмете напоминания, например, относительно срока исполнения в задаче. Это значение поля Напомнить отображается и предлагается программой по умолчанию, когда у предмета существует по меньшей мере одно поле с датой в будущем времени. Выберите из списка, за сколько времени до Срока необходимо вывести напоминание. Если такая дата в предмете меняется, автоматически меняется и срок напоминания. Если дата в предмете по какой-то причине будет сброшена, то срок напоминания будет считаться подошедшим и напоминание будет выведено досрочно. +
  • +
  • Периодически - для периодических напоминаний, например, можно выбрать из списка значение по понедельникам в 9-00, или ввести другое расписание. Для ввода своего расписания выберите из списка значение по заданному расписанию и произведите необходимые настройки.
  • Отмена напоминания

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

    См. также:

    \ No newline at end of file diff --git a/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/Напоминание/Module.bsl b/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/Напоминание/Module.bsl index 9388127a9..c5d324188 100644 --- a/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/Напоминание/Module.bsl +++ b/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/Напоминание/Module.bsl @@ -46,6 +46,14 @@ &НаСервере Процедура ПриЧтенииНаСервере(ТекущийОбъект) + + // СтандартныеПодсистемы.УправлениеДоступом + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); + МодульУправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); + КонецЕсли; + // Конец СтандартныеПодсистемы.УправлениеДоступом + Расписание = ТекущийОбъект.Расписание.Получить(); КонецПроцедуры @@ -115,14 +123,14 @@ КонецЕсли; Если Объект.ИнтервалВремениНапоминания > 0 Тогда - ИнтервалВремениСтрокой = НапоминанияПользователяКлиентСервер.ПредставлениеВремени(Объект.ИнтервалВремениНапоминания); + ИнтервалВремениСтрокой = НапоминанияПользователяКлиент.ПредставлениеВремени(Объект.ИнтервалВремениНапоминания); КонецЕсли; ПредопределенныеСпособыОповещения = ПолучитьПредопределенныеСпособыОповещения(); ВыбранныйСпособ = ПолучитьКлючПоЗначениюВСоответствии(ПредопределенныеСпособыОповещения, Объект.СпособУстановкиВремениНапоминания); Если Объект.СпособУстановкиВремениНапоминания = ПредопределенноеЗначение("Перечисление.СпособыУстановкиВремениНапоминания.ОтносительноТекущегоВремени") Тогда - СпособУстановкиВремениНапоминания = НСтр("ru = 'через'") + " " + НапоминанияПользователяКлиентСервер.ПредставлениеВремени(Объект.ИнтервалВремениНапоминания); + СпособУстановкиВремениНапоминания = НСтр("ru = 'через'") + " " + НапоминанияПользователяКлиент.ПредставлениеВремени(Объект.ИнтервалВремениНапоминания); Иначе СпособУстановкиВремениНапоминания = ВыбранныйСпособ; КонецЕсли; @@ -158,6 +166,18 @@ КонецЕсли; КонецПроцедуры +&НаСервере +Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи) + + // СтандартныеПодсистемы.УправлениеДоступом + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); + МодульУправлениеДоступом.ПослеЗаписиНаСервере(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи); + КонецЕсли; + // Конец СтандартныеПодсистемы.УправлениеДоступом + +КонецПроцедуры + #КонецОбласти #Область ОбработчикиСобытийЭлементовШапкиФормы @@ -166,9 +186,9 @@ Процедура СпособУстановкиВремениНапоминанияПриИзменении(Элемент) ОчиститьСообщения(); - ИнтервалВремени = НапоминанияПользователяКлиентСервер.ПолучитьИнтервалВремениИзСтроки(СпособУстановкиВремениНапоминания); + ИнтервалВремени = НапоминанияПользователяКлиент.ПолучитьИнтервалВремениИзСтроки(СпособУстановкиВремениНапоминания); Если ИнтервалВремени > 0 Тогда - ИнтервалВремениСтрокой = НапоминанияПользователяКлиентСервер.ПредставлениеВремени(ИнтервалВремени); + ИнтервалВремениСтрокой = НапоминанияПользователяКлиент.ПредставлениеВремени(ИнтервалВремени); СпособУстановкиВремениНапоминания = НСтр("ru = 'через'") + " " + ИнтервалВремениСтрокой; Иначе Если Элементы.СпособУстановкиВремениНапоминания.СписокВыбора.НайтиПоЗначению(СпособУстановкиВремениНапоминания) = Неопределено Тогда @@ -192,9 +212,9 @@ &НаКлиенте Процедура ПриИзмененииИнтервалаВремени(Элемент) - Объект.ИнтервалВремениНапоминания = НапоминанияПользователяКлиентСервер.ПолучитьИнтервалВремениИзСтроки(ИнтервалВремениСтрокой); + Объект.ИнтервалВремениНапоминания = НапоминанияПользователяКлиент.ПолучитьИнтервалВремениИзСтроки(ИнтервалВремениСтрокой); Если Объект.ИнтервалВремениНапоминания > 0 Тогда - ИнтервалВремениСтрокой = НапоминанияПользователяКлиентСервер.ПредставлениеВремени(Объект.ИнтервалВремениНапоминания); + ИнтервалВремениСтрокой = НапоминанияПользователяКлиент.ПредставлениеВремени(Объект.ИнтервалВремениНапоминания); Иначе ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Интервал времени не определен'"), , "ИнтервалВремениСтрокой"); КонецЕсли; @@ -512,8 +532,8 @@ ВыводитьДату = День(РасчетноеВремяНапоминания) <> День(ТекущаяДата); - ДатаСтрокой = Формат(РасчетноеВремяНапоминания,"ДЛФ=DD"); - ВремяСтрокой = Формат(РасчетноеВремяНапоминания,"ДФ=H:mm"); + ДатаСтрокой = Формат(РасчетноеВремяНапоминания, "ДЛФ=DD"); + ВремяСтрокой = Формат(РасчетноеВремяНапоминания, НСтр("ru = 'ДФ=H:mm'")); Возврат "(" + ?(ВыводитьДату, ДатаСтрокой + " ", "") + ВремяСтрокой + ")"; diff --git a/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/ФормаОповещения/Form.form b/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/ФормаОповещения/Form.form index 9fee9c42f..a5497bf68 100644 --- a/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/ФормаОповещения/Form.form +++ b/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/ФормаОповещения/Form.form @@ -219,10 +219,6 @@ true - - <key>ru</key> - <value>Панель кнопок</value> - ПанельКнопокExtendedTooltip 30 @@ -246,10 +242,6 @@ Напоминания 1 - - <key>ru</key> - <value>Напоминания</value> - true true @@ -523,10 +515,6 @@ true - - <key>ru</key> - <value>Действия с напоминаниями</value> - true ДействияСНапоминаниямиExtendedTooltip @@ -626,10 +614,6 @@ true - - <key>ru</key> - <value>Действия со списком</value> - true ДействияСоСпискомExtendedTooltip diff --git a/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/ФормаОповещения/Module.bsl b/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/ФормаОповещения/Module.bsl index 3a68d27af..a896d7ea6 100644 --- a/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/ФормаОповещения/Module.bsl +++ b/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/ФормаОповещения/Module.bsl @@ -28,7 +28,7 @@ Процедура ПриОткрытии(Отказ) ЗаполнитьСрокиПовторногоНапоминания(); СрокПовторногоОповещения = "15м"; - СрокПовторногоОповещения = НапоминанияПользователяКлиентСервер.ОформитьВремя(СрокПовторногоОповещения); + СрокПовторногоОповещения = НапоминанияПользователяКлиент.ОформитьВремя(СрокПовторногоОповещения); ОбновитьТаблицуНапоминаний(); ОбновитьВремяВТаблицеНапоминаний(); Активизировать(); @@ -63,7 +63,7 @@ &НаКлиенте Процедура СрокПовторногоОповещенияПриИзменении(Элемент) - СрокПовторногоОповещения = НапоминанияПользователяКлиентСервер.ОформитьВремя(СрокПовторногоОповещения); + СрокПовторногоОповещения = НапоминанияПользователяКлиент.ОформитьВремя(СрокПовторногоОповещения); КонецПроцедуры #КонецОбласти @@ -244,7 +244,7 @@ &НаКлиенте Процедура ОтложитьАктивныеНапоминания() - ИнтервалВремени = НапоминанияПользователяКлиентСервер.ПолучитьИнтервалВремениИзСтроки(СрокПовторногоОповещения); + ИнтервалВремени = НапоминанияПользователяКлиент.ПолучитьИнтервалВремениИзСтроки(СрокПовторногоОповещения); Если ИнтервалВремени = 0 Тогда ИнтервалВремени = 5*60; // 5 минут. КонецЕсли; @@ -299,7 +299,7 @@ &НаКлиенте Процедура ЗаполнитьСрокиПовторногоНапоминания() Для Каждого Элемент Из Элементы.СрокПовторногоОповещения.СписокВыбора Цикл - Элемент.Представление = НапоминанияПользователяКлиентСервер.ОформитьВремя(Элемент.Значение); + Элемент.Представление = НапоминанияПользователяКлиент.ОформитьВремя(Элемент.Значение); КонецЦикла; КонецПроцедуры diff --git a/SSL/src/InformationRegisters/НапоминанияПользователя/НапоминанияПользователя.mdo b/SSL/src/InformationRegisters/НапоминанияПользователя/НапоминанияПользователя.mdo index 03ff33d85..0f6881c69 100644 --- a/SSL/src/InformationRegisters/НапоминанияПользователя/НапоминанияПользователя.mdo +++ b/SSL/src/InformationRegisters/НапоминанияПользователя/НапоминанияПользователя.mdo @@ -286,14 +286,7 @@ Источник - ExchangePlanRef - BusinessProcessRef - DocumentRef - ChartOfCalculationTypesRef - TaskRef - ChartOfCharacteristicTypesRef - ChartOfAccountsRef - CatalogRef + DefinedType.ПредметНапоминания ru diff --git a/SSL/src/InformationRegisters/НаследованиеНастроекПравОбъектов/ManagerModule.bsl b/SSL/src/InformationRegisters/НаследованиеНастроекПравОбъектов/ManagerModule.bsl index 0d52078d0..6be46120e 100644 --- a/SSL/src/InformationRegisters/НаследованиеНастроекПравОбъектов/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/НаследованиеНастроекПравОбъектов/ManagerModule.bsl @@ -23,7 +23,7 @@ // объекта обновление будет только, если объект перед записью и // он изменился (родитель изменен). // -// ЕстьИзменения - Булево (возвращаемое значение) - если производилась запись, +// ЕстьИзменения - Булево - (возвращаемое значение) - если производилась запись, // устанавливается Истина, иначе не изменяется. // Процедура ОбновитьДанныеРегистра(Знач ВладельцыНастроекПрав = Неопределено, ЕстьИзменения = Неопределено) Экспорт diff --git a/SSL/src/InformationRegisters/НастройкиВариантовОтчетов/ManagerModule.bsl b/SSL/src/InformationRegisters/НастройкиВариантовОтчетов/ManagerModule.bsl index 76191ea03..b67e5212c 100644 --- a/SSL/src/InformationRegisters/НастройкиВариантовОтчетов/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/НастройкиВариантовОтчетов/ManagerModule.bsl @@ -18,9 +18,17 @@ Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт Ограничение.Текст = - "РазрешитьЧтениеИзменение + "ПрисоединитьДополнительныеТаблицы + |ЭтотСписок КАК НастройкиВариантовОтчетов + | + |ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + |ПО + | СоставыГруппПользователей.ГруппаПользователей = НастройкиВариантовОтчетов.Пользователь + |; + |РазрешитьЧтениеИзменение |ГДЕ - | ЭтоАвторизованныйПользователь(Пользователь) + | ЭтоАвторизованныйПользователь(Пользователь, НЕОПРЕДЕЛЕНО КАК ИСТИНА) + | ИЛИ ЭтоАвторизованныйПользователь(СоставыГруппПользователей.Пользователь) | ИЛИ ЭтоАвторизованныйПользователь(Вариант.Автор)"; Ограничение.ТекстДляВнешнихПользователей = Ограничение.Текст; @@ -100,6 +108,696 @@ КонецЦикла; КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// Обработчики чтения / записи настроек доступности варианта отчета. + +Процедура ПрочитатьНастройкиДоступностиВариантаОтчета(ВариантОтчета, ПользователиВарианта, + ИспользоватьГруппыПользователей = Неопределено, ИспользоватьВнешнихПользователей = Неопределено) Экспорт + + Если Не ПравоДоступа("Чтение", Метаданные.Справочники.Пользователи) Тогда + Возврат; + КонецЕсли; + + ПользователиВарианта.Очистить(); + + ИспользоватьГруппыПользователей = ПолучитьФункциональнуюОпцию("ИспользоватьГруппыПользователей"); + ИспользоватьВнешнихПользователей = ПолучитьФункциональнуюОпцию("ИспользоватьВнешнихПользователей"); + + #Область ЗапросПользователейВарианта + + // АПК:96-вкл При получении результата объединения второго и третьего запросов, в результат могут попасть неуникальные записи. + + Запрос = Новый Запрос( + "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | ИСТИНА КАК Пометка, + | Настройки.Пользователь КАК Значение, + | ПРЕДСТАВЛЕНИЕ(Настройки.Пользователь) КАК Представление, + | ВЫБОР + | КОГДА ТИПЗНАЧЕНИЯ(Настройки.Пользователь) = ТИП(Справочник.Пользователи) + | ТОГДА ""СостояниеПользователя02"" + | КОГДА ТИПЗНАЧЕНИЯ(Настройки.Пользователь) = ТИП(Справочник.ГруппыВнешнихПользователей) + | ТОГДА ""СостояниеПользователя10"" + | ИНАЧЕ ""СостояниеПользователя04"" + | КОНЕЦ КАК Картинка, + | ИСТИНА В ( + | ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА + | ИЗ + | РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + | ГДЕ + | СоставыГруппПользователей.Пользователь = &ТекущийПользователь + | И СоставыГруппПользователей.ГруппаПользователей = Настройки.Пользователь + | И НЕ СоставыГруппПользователей.ГруппаПользователей В ( + | ЗНАЧЕНИЕ(Справочник.ГруппыПользователей.ВсеПользователи), + | ЗНАЧЕНИЕ(Справочник.ГруппыВнешнихПользователей.ВсеВнешниеПользователи)) + | ) КАК ЭтоТекущийПользователь + |ИЗ + | РегистрСведений.НастройкиВариантовОтчетов КАК Настройки + |ГДЕ + | (&ИспользоватьГруппыПользователей + | ИЛИ &ИспользоватьВнешнихПользователей) + | И Настройки.Вариант = &ВариантОтчета + | И ТИПЗНАЧЕНИЯ(Настройки.Пользователь) <> ТИП(Справочник.ВнешниеПользователи) + | И Настройки.Подсистема = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + | И Настройки.Видимость + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | ВЫБОР + | КОГДА &ВариантОтчета В (НЕОПРЕДЕЛЕНО, ЗНАЧЕНИЕ(Справочник.ВариантыОтчетов.ПустаяСсылка)) + | ТОГДА Пользователи.Ссылка = &ТекущийПользователь + | ИНАЧЕ НЕ Настройки.Вариант ЕСТЬ NULL + | КОНЕЦ КАК Пометка, + | Пользователи.Ссылка КАК Значение, + | ПРЕДСТАВЛЕНИЕ(Пользователи.Ссылка) КАК Представление, + | ""СостояниеПользователя02"" КАК Картинка, + | Пользователи.Ссылка = &ТекущийПользователь КАК ЭтоТекущийПользователь + |ИЗ + | Справочник.Пользователи КАК Пользователи + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиВариантовОтчетов КАК Настройки + | ПО Настройки.Вариант = &ВариантОтчета + | И Настройки.Пользователь В (Пользователи.Ссылка, НЕОПРЕДЕЛЕНО) + | И Настройки.Подсистема = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + | И Настройки.Видимость + |ГДЕ + | НЕ &ИспользоватьГруппыПользователей + | И НЕ &ИспользоватьВнешнихПользователей + | И НЕ Пользователи.ПометкаУдаления + | И НЕ Пользователи.Недействителен + | И НЕ Пользователи.Служебный + | + |ОБЪЕДИНИТЬ + | + |ВЫБРАТЬ + | ИСТИНА КАК Пометка, + | Пользователи.Ссылка КАК Значение, + | ПРЕДСТАВЛЕНИЕ(Пользователи.Ссылка) КАК Представление, + | ""СостояниеПользователя02"" КАК Картинка, + | Пользователи.Ссылка = &ТекущийПользователь КАК ЭтоТекущийПользователь + |ИЗ + | РегистрСведений.НастройкиВариантовОтчетов КАК Настройки + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ГруппыПользователей КАК ГруппыПользователей + | ПО ГруппыПользователей.Ссылка = Настройки.Пользователь + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ГруппыПользователей.Состав КАК СоставыГруппПользователей + | ПО СоставыГруппПользователей.Ссылка = ГруппыПользователей.Ссылка + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Пользователи КАК Пользователи + | ПО Пользователи.Ссылка = СоставыГруппПользователей.Пользователь + |ГДЕ + | НЕ &ИспользоватьГруппыПользователей + | И НЕ &ИспользоватьВнешнихПользователей + | И Настройки.Вариант = &ВариантОтчета + | И Настройки.Подсистема = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + | И Настройки.Видимость + | И НЕ ГруппыПользователей.ПометкаУдаления + | И НЕ Пользователи.ПометкаУдаления + | И НЕ Пользователи.Недействителен + | И НЕ Пользователи.Служебный + | + |ОБЪЕДИНИТЬ + | + |ВЫБРАТЬ + | ИСТИНА КАК Пометка, + | &ТекущийПользователь КАК Значение, + | ПРЕДСТАВЛЕНИЕ(&ТекущийПользователь) КАК Представление, + | ""СостояниеПользователя02"" КАК Картинка, + | ИСТИНА КАК ЭтоТекущийПользователь + |ГДЕ + | &ВариантОтчета В (НЕОПРЕДЕЛЕНО, ЗНАЧЕНИЕ(Справочник.ВариантыОтчетов.ПустаяСсылка))"); + + Запрос.УстановитьПараметр("ВариантОтчета", ВариантОтчета); + Запрос.УстановитьПараметр("ИспользоватьГруппыПользователей", ИспользоватьГруппыПользователей); + Запрос.УстановитьПараметр("ИспользоватьВнешнихПользователей", ИспользоватьВнешнихПользователей); + Запрос.УстановитьПараметр("ТекущийПользователь", Пользователи.АвторизованныйПользователь()); + + // АПК:96-выкл При получении результата объединения второго и третьего запросов, в результат могут попасть неуникальные записи. + + #КонецОбласти + + Выборка = Запрос.Выполнить().Выбрать(); + + Если Выборка.НайтиСледующий(Неопределено, "Значение") Тогда + + ПользователиВарианта.Добавить(,, Истина, БиблиотекаКартинок.СостояниеПользователя04); + Возврат; + + КонецЕсли; + + Выборка.Сбросить(); + + Пока Выборка.Следующий() Цикл + + ЭлементСписка = ПользователиВарианта.Добавить(); + ЗаполнитьЗначенияСвойств(ЭлементСписка, Выборка,, "Картинка"); + ЭлементСписка.Картинка = БиблиотекаКартинок[Выборка.Картинка]; + + Если Выборка.ЭтоТекущийПользователь Тогда + ЭлементСписка.Представление = ЭлементСписка.Представление + " [ЭтоТекущийПользователь]"; + КонецЕсли; + + КонецЦикла; + + ПользователиВарианта.СортироватьПоЗначению(); + +КонецПроцедуры + +Процедура ЗаписатьНастройкиДоступностиВариантаОтчета(ВариантОтчета, ЭтоНовыйВариантОтчета, ПользователиВарианта = Неопределено, + ИспользоватьГруппыПользователей = Неопределено, ИспользоватьВнешнихПользователей = Неопределено) Экспорт + + Если ПользователиВарианта = Неопределено Тогда + ПользователиВарианта = ПользователиВариантаОтчетаПоУмолчанию(ВариантОтчета); + КонецЕсли; + + Если ТипЗнч(ПользователиВарианта) <> Тип("СписокЗначений") Тогда + Возврат; + КонецЕсли; + + НачатьТранзакцию(); + + Попытка + + Блокировка = Новый БлокировкаДанных; + + Если Не ЭтоНовыйВариантОтчета Тогда + + ЭлементБлокировки = Блокировка.Добавить(Метаданные.РегистрыСведений.НастройкиВариантовОтчетов.ПолноеИмя()); + ЭлементБлокировки.УстановитьЗначение("Вариант", ВариантОтчета); + + КонецЕсли; + + Блокировка.Заблокировать(); + + ДобавитьПользователейВариантаОтчета( + ВариантОтчета, ПользователиВарианта, ИспользоватьГруппыПользователей, ИспользоватьВнешнихПользователей); + + ЗафиксироватьТранзакцию(); + + Исключение + + ОтменитьТранзакцию(); + ВызватьИсключение; + + КонецПопытки; + +КонецПроцедуры + +Функция ПользователиВариантаОтчетаПоУмолчанию(ВариантОтчета) + + Если НастройкиДоступностиВариантаОтчетаУстановлены(ВариантОтчета) Тогда + Возврат Неопределено; + КонецЕсли; + + Запрос = Новый Запрос( + "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1 + | НЕОПРЕДЕЛЕНО КАК Пользователь + |ИЗ + | Справочник.ВариантыОтчетов КАК Отчеты + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВариантыОтчетов.Размещение КАК РазмещениеОтчетов + | ПО РазмещениеОтчетов.Ссылка = Отчеты.Ссылка + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетов КАК ОтчетыКонфигурации + | ПО ОтчетыКонфигурации.Ссылка = Отчеты.ПредопределенныйВариант + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетов.Размещение КАК РазмещениеОтчетовКонфигурации + | ПО РазмещениеОтчетовКонфигурации.Ссылка = Отчеты.ПредопределенныйВариант + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетовРасширений КАК ОтчетыРасширений + | ПО ОтчетыРасширений.Ссылка = Отчеты.ПредопределенныйВариант + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетовРасширений.Размещение КАК РазмещениеОтчетовРасширений + | ПО РазмещениеОтчетовРасширений.Ссылка = Отчеты.ПредопределенныйВариант + |ГДЕ + | Отчеты.Ссылка = &ВариантОтчета + | И ЕСТЬNULL(РазмещениеОтчетов.Использование, ИСТИНА) + | И НЕ ЕСТЬNULL(РазмещениеОтчетов.Подсистема, + | ЕСТЬNULL(РазмещениеОтчетовКонфигурации.Подсистема, РазмещениеОтчетовРасширений.Подсистема)) ЕСТЬ NULL + | И ЕСТЬNULL(ОтчетыКонфигурации.ВидимостьПоУмолчанию, ОтчетыРасширений.ВидимостьПоУмолчанию) = ИСТИНА"); + + Запрос.УстановитьПараметр("ВариантОтчета", ВариантОтчета); + + Если Запрос.Выполнить().Пустой() Тогда + Возврат Неопределено; + КонецЕсли; + + ПользователиВарианта = Новый СписокЗначений; + ПользователиВарианта.ТипЗначения = Новый ОписаниеТипов( + "СправочникСсылка.ГруппыВнешнихПользователей, СправочникСсылка.ГруппыПользователей, СправочникСсылка.Пользователи"); + + ПользователиВарианта.Добавить(,, Истина); + + Возврат ПользователиВарианта; + +КонецФункции + +Функция НастройкиДоступностиВариантаОтчетаУстановлены(ВариантОтчета) + + Запрос = Новый Запрос( + "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1 + | ИСТИНА + |ИЗ + | РегистрСведений.НастройкиВариантовОтчетов + |ГДЕ + | Вариант = &ВариантОтчета + | И Подсистема = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка)"); + + Запрос.УстановитьПараметр("ВариантОтчета", ВариантОтчета); + + Возврат Не Запрос.Выполнить().Пустой(); + +КонецФункции + +Процедура ДобавитьПользователейВариантаОтчета(ВариантОтчета, ПользователиВарианта, ИспользоватьГруппыПользователей, ИспользоватьВнешнихПользователей) + + Записи = РегистрыСведений.НастройкиВариантовОтчетов.СоздатьНаборЗаписей(); + + Подсистема = Справочники.ИдентификаторыОбъектовМетаданных.ПустаяСсылка(); + + ВключитьБизнесЛогику = Не ОбновлениеИнформационнойБазы.ВыполняетсяОбновлениеИнформационнойБазы(); + + Записи.Отбор.Вариант.Установить(ВариантОтчета); + Записи.Отбор.Подсистема.Установить(Подсистема); + + ОбщиеГруппыПользователей = Новый Массив; + ОбщиеГруппыПользователей.Добавить(Справочники.ГруппыПользователей.ВсеПользователи); + ОбщиеГруппыПользователей.Добавить(Справочники.ГруппыВнешнихПользователей.ВсеВнешниеПользователи); + + Если ПользователиВарианта.НайтиПоЗначению(Неопределено) <> Неопределено + Или ПользователиВарианта.Количество() = 1 + И ОбщиеГруппыПользователей.Найти(ПользователиВарианта[0].Значение) <> Неопределено Тогда + + Запись = Записи.Добавить(); + Запись.Вариант = ВариантОтчета; + Запись.Подсистема = Подсистема; + Запись.Видимость = Истина; + + ОбновлениеИнформационнойБазы.ЗаписатьНаборЗаписей(Записи,,, ВключитьБизнесЛогику); + Возврат; + + КонецЕсли; + + ВыбранныеПользователи = ВыбранныеПользователиВариантаОтчета( + ПользователиВарианта, ИспользоватьГруппыПользователей, ИспользоватьВнешнихПользователей); + + Для Каждого Пользователь Из ВыбранныеПользователи Цикл + + Запись = Записи.Добавить(); + Запись.Вариант = ВариантОтчета; + Запись.Пользователь = Пользователь; + Запись.Подсистема = Подсистема; + Запись.Видимость = Истина; + + КонецЦикла; + + ОбновлениеИнформационнойБазы.ЗаписатьНаборЗаписей(Записи,,, ВключитьБизнесЛогику); + +КонецПроцедуры + +Функция ВыбранныеПользователиВариантаОтчета(ПользователиВарианта, ИспользоватьГруппыПользователей, ИспользоватьВнешнихПользователей) + + Если ИспользоватьГруппыПользователей = Неопределено Тогда + ИспользоватьГруппыПользователей = ПолучитьФункциональнуюОпцию("ИспользоватьГруппыПользователей"); + КонецЕсли; + + Если ИспользоватьВнешнихПользователей = Неопределено Тогда + ИспользоватьВнешнихПользователей = ПолучитьФункциональнуюОпцию("ИспользоватьВнешнихПользователей"); + КонецЕсли; + + Если ИспользоватьГруппыПользователей + Или ИспользоватьВнешнихПользователей Тогда + + Возврат ПользователиВарианта.ВыгрузитьЗначения(); + + КонецЕсли; + + ВыбранныеПользователи = Новый Массив; + + Для Каждого ЭлементСписка Из ПользователиВарианта Цикл + + Если ЭлементСписка.Пометка Тогда + ВыбранныеПользователи.Добавить(ЭлементСписка.Значение); + КонецЕсли; + + КонецЦикла; + + Возврат ВыбранныеПользователи; + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Обработчики оповещения пользователей варианта отчета. + +Процедура ЗаписатьПользователиВариантаОтчетаДоИзменения(Записи) Экспорт + + // Проверка возможности записи (кэширования) состояния настроек доступности варианта отчета до записи в регистр. + Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Обсуждения") Тогда + Возврат; + КонецЕсли; + + МодульОбсужденияСлужебный = ОбщегоНазначения.ОбщийМодуль("ОбсужденияСлужебный"); + + Если Не МодульОбсужденияСлужебный.Подключены() + Или Записи.Количество() = 0 Тогда + + Возврат; + КонецЕсли; + + ЭлементОтбора = Записи.Отбор.Найти("Подсистема"); + Если ЭлементОтбора = Неопределено + Или ЭлементОтбора.Значение <> Справочники.ИдентификаторыОбъектовМетаданных.ПустаяСсылка() Тогда + + Возврат; + КонецЕсли; + + ЭлементОтбора = Записи.Отбор.Найти("Вариант"); + Если ЭлементОтбора = Неопределено Тогда + Возврат; + КонецЕсли; + + // Запись (кэширование) состояния настроек доступности варианта отчета до записи в регистр. + УстановитьПривилегированныйРежим(Истина); + + ПользователиВариантаОтчета = ПользователиВариантаОтчета(ЭлементОтбора.Значение); + ПользователиВариантаОтчетаПроиндексированные = Новый Соответствие; + + Пока ПользователиВариантаОтчета.Следующий() Цикл + + ПользователиВариантаОтчетаПроиндексированные.Вставить( + ПользователиВариантаОтчета.Идентификатор, ПользователиВариантаОтчета.Ссылка); + + КонецЦикла; + + Записи.ДополнительныеСвойства.Вставить( + "ПользователиВариантаОтчетаДоИзменения", ПользователиВариантаОтчетаПроиндексированные); + +КонецПроцедуры + +Процедура ОповеститьПользователейВариантаОтчета(Записи) Экспорт + + #Область Проверка + + Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Обсуждения") Тогда + Возврат; + КонецЕсли; + + МодульОбсужденияСлужебный = ОбщегоНазначения.ОбщийМодуль("ОбсужденияСлужебный"); + + УстановитьПривилегированныйРежим(Истина); + + ПользователиВариантаОтчетаДоИзменения = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры( + Записи.ДополнительныеСвойства, "ПользователиВариантаОтчетаДоИзменения"); + + Если ТипЗнч(ПользователиВариантаОтчетаДоИзменения) <> Тип("Соответствие") Тогда + Возврат; + КонецЕсли; + + #КонецОбласти + + #Область АнализСостоянияНастроекДоступностиВариантаОтчета + + Получатели = Новый Массив; + + ЭлементОтбора = Записи.Отбор.Найти("Вариант"); + ПользователиВарианта = ПользователиВариантаОтчета(ЭлементОтбора.Значение); + + Пока ПользователиВарианта.Следующий() Цикл + + Если ПользователиВариантаОтчетаДоИзменения[ПользователиВарианта.Идентификатор] <> Неопределено Тогда + Продолжить; + КонецЕсли; + + Попытка + ИдентификаторПользователя = СистемаВзаимодействия.ПолучитьИдентификаторПользователя( + ПользователиВарианта.Идентификатор); + Исключение + Продолжить; + КонецПопытки; + + Получатели.Добавить(ИдентификаторПользователя); + + КонецЦикла; + + Если Получатели.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + #КонецОбласти + + #Область ГенерацияОповещенияНовыхПользователейВариантаОтчета + + ВариантОтчета = Записи[0].Вариант; + ПредставлениеВариантаОтчета = Строка(ВариантОтчета); + + ЗаголовокОбсуждения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Доступ к отчету ""%1""'"), ПредставлениеВариантаОтчета); + + Обсуждение = МодульОбсужденияСлужебный.ОбсуждениеКонтекстное(ВариантОтчета, ЗаголовокОбсуждения); + + Если СистемаВзаимодействия.ПолучитьРежимНаблюдения(Обсуждение.Идентификатор) Тогда + СистемаВзаимодействия.УстановитьРежимНаблюдения(Обсуждение.Идентификатор, Ложь); + КонецЕсли; + + Сообщение = СистемаВзаимодействия.СоздатьСообщение(Обсуждение.Идентификатор); + + Для Каждого Получатель Из Получатели Цикл + Сообщение.Получатели.Добавить(Получатель); + КонецЦикла; + + Сообщение.Автор = СистемаВзаимодействия.ИдентификаторТекущегоПользователя(); + Сообщение.Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Предоставлен отчет %1'"), ПолучитьНавигационнуюСсылку(ВариантОтчета)); + + Попытка + Сообщение.Записать(); + Исключение + + КодОсновногоЯзыка = ОбщегоНазначения.КодОсновногоЯзыка(); + + ЗаписьЖурналаРегистрации( + НСтр("ru = 'Варианты отчетов.Оповещение о предоставлении доступа к варианту отчета'", КодОсновногоЯзыка), + УровеньЖурналаРегистрации.Ошибка,, + ПредставлениеВариантаОтчета, + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + + КонецПопытки; + + #КонецОбласти + +КонецПроцедуры + +Функция ПользователиВариантаОтчета(ВариантОтчета, ВыбранныеПользователи = Неопределено) Экспорт + + Запрос = Новый Запрос( + "ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ + | Составы.Пользователь КАК Ссылка, + | Пользователи.ИдентификаторПользователяИБ КАК Идентификатор + |ИЗ + | РегистрСведений.НастройкиВариантовОтчетов КАК Настройки + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК Составы + | ПО Составы.ГруппаПользователей = Настройки.Пользователь + | ИЛИ Настройки.Пользователь = НЕОПРЕДЕЛЕНО + | И Составы.ГруппаПользователей = ЗНАЧЕНИЕ(Справочник.ГруппыПользователей.ВсеПользователи) + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Пользователи КАК Пользователи + | ПО Пользователи.Ссылка = Составы.Пользователь + |ГДЕ + | Настройки.Вариант = &ВариантОтчета + | И Настройки.Подсистема = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + | И НЕ ТИПЗНАЧЕНИЯ(Настройки.Пользователь) В ( + | ТИП(Справочник.ВнешниеПользователи), + | ТИП(Справочник.ГруппыВнешнихПользователей)) + | И Настройки.Видимость + | И Составы.Используется + | И Пользователи.Ссылка <> &ТекущийПользователь + | И (НЕ &ПользователиВыбраны + | ИЛИ Пользователи.Ссылка В (&ВыбранныеПользователи)) + | И НЕ Пользователи.Служебный"); + + Запрос.УстановитьПараметр("ВариантОтчета", ВариантОтчета); + Запрос.УстановитьПараметр("ТекущийПользователь", Пользователи.АвторизованныйПользователь()); + Запрос.УстановитьПараметр("ПользователиВыбраны", ВыбранныеПользователи <> Неопределено); + Запрос.УстановитьПараметр("ВыбранныеПользователи", ВыбранныеПользователи); + + Возврат Запрос.Выполнить().Выбрать(); + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Обработчики обновления. + +// Регистрирует данные к обновлению в плане обмена ОбновлениеИнформационнойБазы +// см. Стандарты и методики разработки прикладных решений: Параллельный режим отложенного обновления. +// +// Параметры: +// Параметры - Структура - см. ОбновлениеИнформационнойБазы.ОсновныеПараметрыОтметкиКОбработке. +// +Процедура ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию(Параметры) Экспорт + + Запрос = Новый Запрос( + "ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ + | Отчеты.Ссылка КАК Вариант, + | ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КАК Подсистема, + | НЕОПРЕДЕЛЕНО КАК Пользователь, + | ВЫБОР + | КОГДА Отчеты.ВидимостьПоУмолчаниюПереопределена + | ИЛИ ЕСТЬNULL(ОтчетыКонфигурации.ВидимостьПоУмолчанию, ОтчетыРасширений.ВидимостьПоУмолчанию) ЕСТЬ NULL + | ТОГДА Отчеты.ВидимостьПоУмолчанию + | ИНАЧЕ ЕСТЬNULL(ОтчетыКонфигурации.ВидимостьПоУмолчанию, ОтчетыРасширений.ВидимостьПоУмолчанию) + | КОНЕЦ КАК Видимость + |ПОМЕСТИТЬ Настройки + |ИЗ + | Справочник.ВариантыОтчетов КАК Отчеты + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВариантыОтчетов.Размещение КАК РазмещениеОтчетов + | ПО РазмещениеОтчетов.Ссылка = Отчеты.Ссылка + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетов КАК ОтчетыКонфигурации + | ПО ОтчетыКонфигурации.Ссылка = Отчеты.ПредопределенныйВариант + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетов.Размещение КАК РазмещениеОтчетовКонфигурации + | ПО РазмещениеОтчетовКонфигурации.Ссылка = Отчеты.ПредопределенныйВариант + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетовРасширений КАК ОтчетыРасширений + | ПО ОтчетыРасширений.Ссылка = Отчеты.ПредопределенныйВариант + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетовРасширений.Размещение КАК РазмещениеОтчетовРасширений + | ПО РазмещениеОтчетовРасширений.Ссылка = Отчеты.ПредопределенныйВариант + |ГДЕ + | ЕСТЬNULL(РазмещениеОтчетов.Использование, ИСТИНА) + | И НЕ ЕСТЬNULL(РазмещениеОтчетов.Подсистема, + | ЕСТЬNULL(РазмещениеОтчетовКонфигурации.Подсистема, РазмещениеОтчетовРасширений.Подсистема)) ЕСТЬ NULL + |; + | + |ВЫБРАТЬ + | Настройки.Вариант + |ИЗ + | Настройки КАК Настройки + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиВариантовОтчетов КАК НастройкиСуществующие + | ПО НастройкиСуществующие.Вариант = Настройки.Вариант + | И НастройкиСуществующие.Подсистема = Настройки.Подсистема + |ГДЕ + | Настройки.Видимость + | И НастройкиСуществующие.Вариант ЕСТЬ NULL"); + + Ссылки = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Вариант"); + + ОбновлениеИнформационнойБазы.ОтметитьКОбработке(Параметры, Ссылки); + +КонецПроцедуры + +// Обрабатывает данные, зарегистрированные в плане обмена ОбновлениеИнформационнойБазы +// см. Стандарты и методики разработки прикладных решений: Параллельный режим отложенного обновления. +// +// Параметры: +// Параметры - Структура - см. ОбновлениеИнформационнойБазы.ОсновныеПараметрыОтметкиКОбработке. +// +Процедура ОбработатьДанныеДляПереходаНаНовуюВерсию(Параметры) Экспорт + + Вариант = ОбновлениеИнформационнойБазы.ВыбратьСсылкиДляОбработки(Параметры.Очередь, "Справочник.ВариантыОтчетов"); + + Данные = Новый Структура("Вариант, Пользователь, Подсистема, Видимость, БыстрыйДоступ"); + Данные.Подсистема = Справочники.ИдентификаторыОбъектовМетаданных.ПустаяСсылка(); + Данные.Видимость = Истина; + Данные.БыстрыйДоступ = Ложь; + + МетаданныеРегистра = Метаданные.РегистрыСведений.НастройкиВариантовОтчетов; + ПредставлениеРегистра = МетаданныеРегистра.Представление(); + + Обработано = 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..ac813ed2b --- /dev/null +++ b/SSL/src/InformationRegisters/НастройкиВариантовОтчетов/RecordSetModule.bsl @@ -0,0 +1,37 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2019, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ОбработчикиСобытий + +Процедура ПередЗаписью(Отказ, Замещение) + + Если ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + + РегистрыСведений.НастройкиВариантовОтчетов.ЗаписатьПользователиВариантаОтчетаДоИзменения(ЭтотОбъект); + +КонецПроцедуры + +Процедура ПриЗаписи(Отказ, Замещение) + + Если ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + + РегистрыСведений.НастройкиВариантовОтчетов.ОповеститьПользователейВариантаОтчета(ЭтотОбъект); + +КонецПроцедуры + +#КонецОбласти + +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/НастройкиВариантовОтчетов/НастройкиВариантовОтчетов.mdo b/SSL/src/InformationRegisters/НастройкиВариантовОтчетов/НастройкиВариантовОтчетов.mdo index f670d4c0b..76ebe4ae5 100644 --- a/SSL/src/InformationRegisters/НастройкиВариантовОтчетов/НастройкиВариантовОтчетов.mdo +++ b/SSL/src/InformationRegisters/НастройкиВариантовОтчетов/НастройкиВариантовОтчетов.mdo @@ -87,6 +87,29 @@ Use + + Вариант + + ru + Вариант + + + CatalogRef.ВариантыОтчетов + + + ru + Отчет или вариант отчета, для которого установлена настройка + + + + true + Use + Use + true + + true + true + Пользователь @@ -95,6 +118,8 @@ CatalogRef.ВнешниеПользователи + CatalogRef.ГруппыВнешнихПользователей + CatalogRef.ГруппыПользователей CatalogRef.Пользователи @@ -117,6 +142,7 @@ Подсистема + CatalogRef.ИдентификаторыОбъектовРасширений CatalogRef.ИдентификаторыОбъектовМетаданных @@ -132,26 +158,4 @@ true true - - Вариант - - ru - Вариант - - - CatalogRef.ВариантыОтчетов - - - ru - Отчет или вариант отчета, для которого установлена настройка - - - - Use - Use - true - - true - true - diff --git a/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/Forms/НастройкиХраненияИстории/Module.bsl b/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/Forms/НастройкиХраненияИстории/Module.bsl index bd1960992..58b4fb46c 100644 --- a/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/Forms/НастройкиХраненияИстории/Module.bsl +++ b/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/Forms/НастройкиХраненияИстории/Module.bsl @@ -507,7 +507,7 @@ Иначе ПараметрыЗадания = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор); ПараметрыЗадания.НаименованиеФоновогоЗадания = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Запуск вручную: %1'"), РегламентноеЗаданиеМетаданные.Синоним); - РезультатЗадания = ДлительныеОперации.ВыполнитьВФоне(РегламентноеЗаданиеМетаданные.ИмяМетода, Новый Структура, ПараметрыЗадания); + РезультатЗадания = ДлительныеОперации.ВыполнитьПроцедуру(ПараметрыЗадания, РегламентноеЗаданиеМетаданные.ИмяМетода); Если ЗначениеЗаполнено(РезультатЗадания.ИдентификаторЗадания) Тогда ИдентификаторФоновогоЗадания = РезультатЗадания.ИдентификаторЗадания; КонецЕсли; @@ -592,12 +592,15 @@ ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор); ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Поиск устаревших версий объектов'"); - ДлительнаяОперация = ДлительныеОперации.ВыполнитьВФоне("ВерсионированиеОбъектов.ИнформацияОбУстаревшихВерсияхВФоне", Новый Структура, ПараметрыВыполнения); + ДлительнаяОперация = ДлительныеОперации.ВыполнитьФункцию(ПараметрыВыполнения, + "ВерсионированиеОбъектов.ИнформацияОбУстаревшихВерсиях"); + ТекущееФоновоеЗадание = "Подсчет"; ИдентификаторФоновогоЗадания = ДлительнаяОперация.ИдентификаторЗадания; АдресРезультата = ДлительнаяОперация.АдресРезультата; Возврат ДлительнаяОперация; + КонецФункции &НаКлиенте diff --git a/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/НастройкиВерсионированияОбъектов.mdo b/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/НастройкиВерсионированияОбъектов.mdo index ae099d564..5d1cc8272 100644 --- a/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/НастройкиВерсионированияОбъектов.mdo +++ b/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/НастройкиВерсионированияОбъектов.mdo @@ -128,6 +128,7 @@ Тип объекта + CatalogRef.ИдентификаторыОбъектовРасширений CatalogRef.ИдентификаторыОбъектовМетаданных diff --git a/SSL/src/InformationRegisters/НастройкиКомандПечати/НастройкиКомандПечати.mdo b/SSL/src/InformationRegisters/НастройкиКомандПечати/НастройкиКомандПечати.mdo index 22f594529..f56104472 100644 --- a/SSL/src/InformationRegisters/НастройкиКомандПечати/НастройкиКомандПечати.mdo +++ b/SSL/src/InformationRegisters/НастройкиКомандПечати/НастройкиКомандПечати.mdo @@ -75,6 +75,7 @@ Владелец + CatalogRef.ИдентификаторыОбъектовРасширений CatalogRef.ИдентификаторыОбъектовМетаданных @@ -83,9 +84,10 @@ - Index Use + true + true true diff --git a/SSL/src/InformationRegisters/НастройкиОбменаДаннымиXDTO/НастройкиОбменаДаннымиXDTO.mdo b/SSL/src/InformationRegisters/НастройкиОбменаДаннымиXDTO/НастройкиОбменаДаннымиXDTO.mdo index 514165c11..cb9c6ccde 100644 --- a/SSL/src/InformationRegisters/НастройкиОбменаДаннымиXDTO/НастройкиОбменаДаннымиXDTO.mdo +++ b/SSL/src/InformationRegisters/НастройкиОбменаДаннымиXDTO/НастройкиОбменаДаннымиXDTO.mdo @@ -56,7 +56,7 @@ ru Настройки - Структура настроек отправки и получения данных в этой базе + Структура настроек отправки и получения данных в этой информационной базе ValueStorage diff --git a/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаДобавленияУсловияПоДате/Form.form b/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаДобавленияУсловияПоДате/Form.form index 7c686a30c..55a260c89 100644 --- a/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаДобавленияУсловияПоДате/Form.form +++ b/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаДобавленияУсловияПоДате/Form.form @@ -98,10 +98,6 @@ true - - <key>ru</key> - <value>Настройка интервала-исключения</value> - ГруппаУсловиеПоДатеРасширеннаяПодсказка 8 @@ -183,10 +179,6 @@ true - - <key>ru</key> - <value>Командная панель</value> - КоманднаяПанельРасширеннаяПодсказка 10 diff --git a/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаЗаписи/Module.bsl index e13d2a44b..af1051249 100644 --- a/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаЗаписи/Module.bsl +++ b/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаЗаписи/Module.bsl @@ -11,7 +11,7 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - Заголовок = НСтр("ru='Настройка очистки файлов:'") + Заголовок = НСтр("ru = 'Настройка очистки файлов:'") + " " + Запись.ВладелецФайла; Если МассивРеквизитовСТипомДата.Количество() = 0 Тогда diff --git a/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаСписка/Module.bsl b/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаСписка/Module.bsl index 2a69db297..3081cb9d2 100644 --- a/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаСписка/Module.bsl @@ -322,30 +322,35 @@ ТаблицаТипов.Колонки.Добавить("ВозможностьДетализации" , Новый ОписаниеТипов("Булево")); МассивИсключений = РаботаСФайламиСлужебный.ОбъектыИсключенияПриОчисткеФайлов(); Для Каждого Справочник Из МетаданныеСправочники Цикл - Если Справочник.Реквизиты.Найти("ВладелецФайла") <> Неопределено Тогда - ТипыВладельцевФайлов = Справочник.Реквизиты.ВладелецФайла.Тип.Типы(); - Для Каждого ТипВладельца Из ТипыВладельцевФайлов Цикл - - Если МассивИсключений.Найти(Справочник) <> Неопределено Тогда - Продолжить; - КонецЕсли; - - НоваяСтрока = ТаблицаТипов.Добавить(); - НоваяСтрока.ВладелецФайла = ТипВладельца; - НоваяСтрока.ТипВладельцаФайла = Справочник; - МетаданныеВладельца = Метаданные.НайтиПоТипу(ТипВладельца); - НоваяСтрока.ИмяВладельцаФайла = МетаданныеВладельца.ПолноеИмя(); - Если Метаданные.Справочники.Содержит(МетаданныеВладельца) - И МетаданныеВладельца.Иерархический Тогда - - НоваяСтрока.ВозможностьДетализации = Истина; - - КонецЕсли; - Если Не СтрЗаканчиваетсяНа(Справочник.Имя, "ПрисоединенныеФайлы") Тогда - НоваяСтрока.ЭтоФайл = Истина; - КонецЕсли; - КонецЦикла; + + Если Справочник.Реквизиты.Найти("ВладелецФайла") = Неопределено Тогда + Продолжить; КонецЕсли; + + ТипыВладельцевФайлов = Справочник.Реквизиты.ВладелецФайла.Тип.Типы(); + Для Каждого ТипВладельца Из ТипыВладельцевФайлов Цикл + + МетаданныеВладельца = Метаданные.НайтиПоТипу(ТипВладельца); + Если МассивИсключений.Найти(МетаданныеВладельца) <> Неопределено Тогда + Продолжить; + КонецЕсли; + + НоваяСтрока = ТаблицаТипов.Добавить(); + НоваяСтрока.ВладелецФайла = ТипВладельца; + НоваяСтрока.ТипВладельцаФайла = Справочник; + НоваяСтрока.ИмяВладельцаФайла = МетаданныеВладельца.ПолноеИмя(); + Если Метаданные.Справочники.Содержит(МетаданныеВладельца) + И МетаданныеВладельца.Иерархический Тогда + + НоваяСтрока.ВозможностьДетализации = Истина; + КонецЕсли; + + Если Не СтрЗаканчиваетсяНа(Справочник.Имя, "ПрисоединенныеФайлы") Тогда + НоваяСтрока.ЭтоФайл = Истина; + КонецЕсли; + + КонецЦикла; + КонецЦикла; ВсеСправочники = Справочники.ТипВсеСсылки(); @@ -809,8 +814,8 @@ ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДеревоОбъектовМетаданных.Действие"); ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено; - - Элемент.Оформление.УстановитьЗначениеПараметра("Шрифт", Новый Шрифт(WindowsШрифты.ШрифтДиалоговИМеню, , , Истина, Ложь, Ложь, Ложь)); + + Элемент.Оформление.УстановитьЗначениеПараметра("Шрифт", ШрифтыСтиля.ВажнаяНадписьШрифт); КонецПроцедуры diff --git a/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/ManagerModule.bsl b/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/ManagerModule.bsl index 23da8acb5..8792060f8 100644 --- a/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/ManagerModule.bsl @@ -50,23 +50,29 @@ ТаблицаВладельцевФайлов.Колонки.Добавить("ЭтоФайл", Новый ОписаниеТипов("Булево")); МассивИсключений = РаботаСФайламиСлужебный.ОбъектыИсключенияПриОчисткеФайлов(); - Для Каждого Справочник Из МетаданныеСправочники Цикл - Если Справочник.Реквизиты.Найти("ВладелецФайла") <> Неопределено Тогда - Если МассивИсключений.Найти(Справочник) <> Неопределено Тогда + + Если Справочник.Реквизиты.Найти("ВладелецФайла") = Неопределено Тогда + Продолжить; + КонецЕсли; + + ТипыВладельцевФайлов = Справочник.Реквизиты.ВладелецФайла.Тип.Типы(); + Для Каждого ТипВладельца Из ТипыВладельцевФайлов Цикл + + МетаданныеВладельца = Метаданные.НайтиПоТипу(ТипВладельца); + Если МассивИсключений.Найти(МетаданныеВладельца) <> Неопределено Тогда Продолжить; КонецЕсли; - ТипыВладельцевФайлов = Справочник.Реквизиты.ВладелецФайла.Тип.Типы(); - Для Каждого ТипВладельца Из ТипыВладельцевФайлов Цикл - НоваяСтрока = ТаблицаВладельцевФайлов.Добавить(); - НоваяСтрока.ВладелецФайла = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ТипВладельца); - НоваяСтрока.ТипВладельцаФайла = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Справочник); - Если Не СтрЗаканчиваетсяНа(Справочник.Имя, "ПрисоединенныеФайлы") Тогда - НоваяСтрока.ЭтоФайл = Истина; - КонецЕсли; - КонецЦикла; - КонецЕсли; + НоваяСтрока = ТаблицаВладельцевФайлов.Добавить(); + НоваяСтрока.ВладелецФайла = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ТипВладельца); + НоваяСтрока.ТипВладельцаФайла = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Справочник); + Если Не СтрЗаканчиваетсяНа(Справочник.Имя, "ПрисоединенныеФайлы") Тогда + НоваяСтрока.ЭтоФайл = Истина; + КонецЕсли; + + КонецЦикла; + КонецЦикла; Запрос = Новый Запрос; diff --git a/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/НастройкиОчисткиФайлов.mdo b/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/НастройкиОчисткиФайлов.mdo index d95db8616..f58af8801 100644 --- a/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/НастройкиОчисткиФайлов.mdo +++ b/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/НастройкиОчисткиФайлов.mdo @@ -139,6 +139,7 @@ ru Владелец + АПК:1330 невозможно объединить 2 составных типа ExchangePlanRef BusinessProcessRef diff --git a/SSL/src/InformationRegisters/НастройкиПравОбъектов/ManagerModule.bsl b/SSL/src/InformationRegisters/НастройкиПравОбъектов/ManagerModule.bsl index f162ffee3..d71e071d7 100644 --- a/SSL/src/InformationRegisters/НастройкиПравОбъектов/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/НастройкиПравОбъектов/ManagerModule.bsl @@ -11,9 +11,9 @@ #Область СлужебныйПрограммныйИнтерфейс // Обновляет возможные права для настройки прав объектов и сохраняет состав последних изменений. -// +// // Параметры: -// ЕстьИзменения - Булево (возвращаемое значение) - если изменения найдены, +// ЕстьИзменения - Булево - (возвращаемое значение) - если изменения найдены, // устанавливается Истина, иначе не изменяется. // Процедура ОбновитьВозможныеПраваДляНастройкиПравОбъектов(ЕстьИзменения = Неопределено) Экспорт @@ -93,7 +93,7 @@ // СсылкаНаОбъект - ссылка на объект для которого нужно прочитать настройки прав. // // Возвращаемое значение: -// Структура +// Структура - // Наследовать - Булево - флажок наследования настроек прав родителей. // Настройки - ТаблицаЗначений // - ВладелецНастройки - ссылка на объект или родителя объекта @@ -258,95 +258,101 @@ СсылкаНаОбъект.Метаданные().ПолноеИмя()); КонецЕсли; - // Установка значения настройки наследования. - НаборЗаписей = РегистрыСведений.НаследованиеНастроекПравОбъектов.СоздатьНаборЗаписей(); - НаборЗаписей.Отбор.Объект.Установить(СсылкаНаОбъект); - НаборЗаписей.Отбор.Родитель.Установить(СсылкаНаОбъект); - НаборЗаписей.Прочитать(); - - Если НаборЗаписей.Количество() = 0 Тогда - НаследованиеИзменено = Истина; - НоваяЗапись = НаборЗаписей.Добавить(); - НоваяЗапись.Объект = СсылкаНаОбъект; - НоваяЗапись.Родитель = СсылкаНаОбъект; - НоваяЗапись.Наследовать = Наследовать; - Иначе - НаследованиеИзменено = НаборЗаписей[0].Наследовать <> Наследовать; - НаборЗаписей[0].Наследовать = Наследовать; - КонецЕсли; - - // Подготовка новых настроек - НовыеНастройкиПрав = УправлениеДоступомСлужебныйПовтИсп.ТаблицаПустогоНабораЗаписей( - Метаданные.РегистрыСведений.НастройкиПравОбъектов.ПолноеИмя()).Получить(); - - ТаблицаОбщихПрав = Справочники.ИдентификаторыОбъектовМетаданных.ПустаяСсылка(); - - Отбор = Новый Структура("ВладелецНастройки", СсылкаНаОбъект); - ПорядокНастройки = 0; - Для каждого Настройка Из Настройки.НайтиСтроки(Отбор) Цикл - Для каждого ОписаниеПрава Из ОписаниеПрав Цикл - Если ТипЗнч(Настройка[ОписаниеПрава.Имя]) <> Тип("Булево") Тогда - Продолжить; - КонецЕсли; - ПорядокНастройки = ПорядокНастройки + 1; - - НастройкаПрав = НовыеНастройкиПрав.Добавить(); - НастройкаПрав.ПорядокНастройки = ПорядокНастройки; - НастройкаПрав.Объект = СсылкаНаОбъект; - НастройкаПрав.Пользователь = Настройка.Пользователь; - НастройкаПрав.Право = ОписаниеПрава.Имя; - НастройкаПрав.Таблица = ТаблицаОбщихПрав; - НастройкаПрав.ПравоЗапрещено = НЕ Настройка[ОписаниеПрава.Имя]; - НастройкаПрав.НаследованиеРазрешено = Настройка.НаследованиеРазрешено; - // Кэш-реквизиты - НастройкаПрав.УровеньРазрешенияПрава = - ?(НастройкаПрав.ПравоЗапрещено, 0, ?(НастройкаПрав.НаследованиеРазрешено, 2, 1)); - НастройкаПрав.УровеньЗапрещенияПрава = - ?(НастройкаПрав.ПравоЗапрещено, ?(НастройкаПрав.НаследованиеРазрешено, 2, 1), 0); - - ДобавленыНастройкиОтдельныхТаблиц = Ложь; - Для каждого КлючИЗначение Из ВозможныеПрава.ОтдельныеТаблицы Цикл - ОтдельнаяТаблица = КлючИЗначение.Ключ; - ЧтениеТаблицы = ОписаниеПрава.ЧтениеВТаблицах.Найти( ОтдельнаяТаблица) <> Неопределено; - ИзменениеТаблицы = ОписаниеПрава.ИзменениеВТаблицах.Найти(ОтдельнаяТаблица) <> Неопределено; - Если НЕ ЧтениеТаблицы И НЕ ИзменениеТаблицы Тогда - Продолжить; - КонецЕсли; - ДобавленыНастройкиОтдельныхТаблиц = Истина; - НастройкаПравТаблицы = НовыеНастройкиПрав.Добавить(); - ЗаполнитьЗначенияСвойств(НастройкаПравТаблицы, НастройкаПрав); - НастройкаПравТаблицы.Таблица = ОтдельнаяТаблица; - Если ЧтениеТаблицы Тогда - НастройкаПравТаблицы.УровеньРазрешенияЧтения = НастройкаПрав.УровеньРазрешенияПрава; - НастройкаПравТаблицы.УровеньЗапрещенияЧтения = НастройкаПрав.УровеньЗапрещенияПрава; - КонецЕсли; - Если ИзменениеТаблицы Тогда - НастройкаПравТаблицы.УровеньРазрешенияИзменения = НастройкаПрав.УровеньРазрешенияПрава; - НастройкаПравТаблицы.УровеньЗапрещенияИзменения = НастройкаПрав.УровеньЗапрещенияПрава; - КонецЕсли; - КонецЦикла; - - ОбщееЧтение = ОписаниеПрава.ЧтениеВТаблицах.Найти( ТаблицаОбщихПрав) <> Неопределено; - ОбщееИзменение = ОписаниеПрава.ИзменениеВТаблицах.Найти(ТаблицаОбщихПрав) <> Неопределено; - - Если НЕ ОбщееЧтение И НЕ ОбщееИзменение И ДобавленыНастройкиОтдельныхТаблиц Тогда - НовыеНастройкиПрав.Удалить(НастройкаПрав); - Иначе - Если ОбщееЧтение Тогда - НастройкаПрав.УровеньРазрешенияЧтения = НастройкаПрав.УровеньРазрешенияПрава; - НастройкаПрав.УровеньЗапрещенияЧтения = НастройкаПрав.УровеньЗапрещенияПрава; - КонецЕсли; - Если ОбщееИзменение Тогда - НастройкаПрав.УровеньРазрешенияИзменения = НастройкаПрав.УровеньРазрешенияПрава; - НастройкаПрав.УровеньЗапрещенияИзменения = НастройкаПрав.УровеньЗапрещенияПрава; - КонецЕсли; - КонецЕсли; - КонецЦикла; - КонецЦикла; - - // Запись настроек прав объекта и значения наследования настроек прав. НачатьТранзакцию(); Попытка + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.НаследованиеНастроекПравОбъектов"); + ЭлементБлокировки.УстановитьЗначение("Объект", СсылкаНаОбъект); + ЭлементБлокировки.УстановитьЗначение("Родитель", СсылкаНаОбъект); + Блокировка.Заблокировать(); + + // Установка значения настройки наследования. + НаборЗаписей = РегистрыСведений.НаследованиеНастроекПравОбъектов.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.Объект.Установить(СсылкаНаОбъект); + НаборЗаписей.Отбор.Родитель.Установить(СсылкаНаОбъект); + НаборЗаписей.Прочитать(); + + Если НаборЗаписей.Количество() = 0 Тогда + НаследованиеИзменено = Истина; + НоваяЗапись = НаборЗаписей.Добавить(); + НоваяЗапись.Объект = СсылкаНаОбъект; + НоваяЗапись.Родитель = СсылкаНаОбъект; + НоваяЗапись.Наследовать = Наследовать; + Иначе + НаследованиеИзменено = НаборЗаписей[0].Наследовать <> Наследовать; + НаборЗаписей[0].Наследовать = Наследовать; + КонецЕсли; + + // Подготовка новых настроек + НовыеНастройкиПрав = УправлениеДоступомСлужебныйПовтИсп.ТаблицаПустогоНабораЗаписей( + Метаданные.РегистрыСведений.НастройкиПравОбъектов.ПолноеИмя()).Получить(); + + ТаблицаОбщихПрав = Справочники.ИдентификаторыОбъектовМетаданных.ПустаяСсылка(); + + Отбор = Новый Структура("ВладелецНастройки", СсылкаНаОбъект); + ПорядокНастройки = 0; + Для каждого Настройка Из Настройки.НайтиСтроки(Отбор) Цикл + Для каждого ОписаниеПрава Из ОписаниеПрав Цикл + Если ТипЗнч(Настройка[ОписаниеПрава.Имя]) <> Тип("Булево") Тогда + Продолжить; + КонецЕсли; + ПорядокНастройки = ПорядокНастройки + 1; + + НастройкаПрав = НовыеНастройкиПрав.Добавить(); + НастройкаПрав.ПорядокНастройки = ПорядокНастройки; + НастройкаПрав.Объект = СсылкаНаОбъект; + НастройкаПрав.Пользователь = Настройка.Пользователь; + НастройкаПрав.Право = ОписаниеПрава.Имя; + НастройкаПрав.Таблица = ТаблицаОбщихПрав; + НастройкаПрав.ПравоЗапрещено = НЕ Настройка[ОписаниеПрава.Имя]; + НастройкаПрав.НаследованиеРазрешено = Настройка.НаследованиеРазрешено; + // Кэш-реквизиты + НастройкаПрав.УровеньРазрешенияПрава = + ?(НастройкаПрав.ПравоЗапрещено, 0, ?(НастройкаПрав.НаследованиеРазрешено, 2, 1)); + НастройкаПрав.УровеньЗапрещенияПрава = + ?(НастройкаПрав.ПравоЗапрещено, ?(НастройкаПрав.НаследованиеРазрешено, 2, 1), 0); + + ДобавленыНастройкиОтдельныхТаблиц = Ложь; + Для каждого КлючИЗначение Из ВозможныеПрава.ОтдельныеТаблицы Цикл + ОтдельнаяТаблица = КлючИЗначение.Ключ; + ЧтениеТаблицы = ОписаниеПрава.ЧтениеВТаблицах.Найти( ОтдельнаяТаблица) <> Неопределено; + ИзменениеТаблицы = ОписаниеПрава.ИзменениеВТаблицах.Найти(ОтдельнаяТаблица) <> Неопределено; + Если НЕ ЧтениеТаблицы И НЕ ИзменениеТаблицы Тогда + Продолжить; + КонецЕсли; + ДобавленыНастройкиОтдельныхТаблиц = Истина; + НастройкаПравТаблицы = НовыеНастройкиПрав.Добавить(); + ЗаполнитьЗначенияСвойств(НастройкаПравТаблицы, НастройкаПрав); + НастройкаПравТаблицы.Таблица = ОтдельнаяТаблица; + Если ЧтениеТаблицы Тогда + НастройкаПравТаблицы.УровеньРазрешенияЧтения = НастройкаПрав.УровеньРазрешенияПрава; + НастройкаПравТаблицы.УровеньЗапрещенияЧтения = НастройкаПрав.УровеньЗапрещенияПрава; + КонецЕсли; + Если ИзменениеТаблицы Тогда + НастройкаПравТаблицы.УровеньРазрешенияИзменения = НастройкаПрав.УровеньРазрешенияПрава; + НастройкаПравТаблицы.УровеньЗапрещенияИзменения = НастройкаПрав.УровеньЗапрещенияПрава; + КонецЕсли; + КонецЦикла; + + ОбщееЧтение = ОписаниеПрава.ЧтениеВТаблицах.Найти( ТаблицаОбщихПрав) <> Неопределено; + ОбщееИзменение = ОписаниеПрава.ИзменениеВТаблицах.Найти(ТаблицаОбщихПрав) <> Неопределено; + + Если НЕ ОбщееЧтение И НЕ ОбщееИзменение И ДобавленыНастройкиОтдельныхТаблиц Тогда + НовыеНастройкиПрав.Удалить(НастройкаПрав); + Иначе + Если ОбщееЧтение Тогда + НастройкаПрав.УровеньРазрешенияЧтения = НастройкаПрав.УровеньРазрешенияПрава; + НастройкаПрав.УровеньЗапрещенияЧтения = НастройкаПрав.УровеньЗапрещенияПрава; + КонецЕсли; + Если ОбщееИзменение Тогда + НастройкаПрав.УровеньРазрешенияИзменения = НастройкаПрав.УровеньРазрешенияПрава; + НастройкаПрав.УровеньЗапрещенияИзменения = НастройкаПрав.УровеньЗапрещенияПрава; + КонецЕсли; + КонецЕсли; + КонецЦикла; + КонецЦикла; + + // Запись настроек прав объекта и значения наследования настроек прав. Данные = Новый Структура; Данные.Вставить("НаборЗаписей", РегистрыСведений.НастройкиПравОбъектов); Данные.Вставить("НовыеЗаписи", НовыеНастройкиПрав); @@ -373,6 +379,17 @@ ДобавитьОбъектыИерархии(СсылкаНаОбъект, ОбъектыСИзменениями); КонецЕсли; + Если (ЕстьИзменения Или НаследованиеИзменено) + И УправлениеДоступомСлужебный.ОграничиватьДоступНаУровнеЗаписейУниверсально() Тогда + + ПараметрыПланирования = УправлениеДоступомСлужебный.ПараметрыПланированияОбновленияДоступа(); + ПараметрыПланирования.КлючиДоступаКДанным = Ложь; + ПараметрыПланирования.Описание = "НастройкиПравОбъектовЗаписать"; + + ПолноеИмя = СсылкаНаОбъект.Метаданные().ПолноеИмя(); + УправлениеДоступомСлужебный.ЗапланироватьОбновлениеДоступа(ПолноеИмя, ПараметрыПланирования); + КонецЕсли; + ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); @@ -382,9 +399,9 @@ КонецПроцедуры // Процедура обновляет вспомогательные данные регистра при изменении конфигурации. -// +// // Параметры: -// ЕстьИзменения - Булево (возвращаемое значение) - если производилась запись, +// ЕстьИзменения - Булево - (возвращаемое значение) - если производилась запись, // устанавливается Истина, иначе не изменяется. // Процедура ОбновитьВспомогательныеДанныеРегистра(ЕстьИзменения = Неопределено) Экспорт @@ -673,7 +690,7 @@ КонецПроцедуры // См. УправлениеДоступомПереопределяемый.ПриЗаполненииВозможныхПравДляНастройкиПравОбъектов. -Функция ВозможныеПрава() +Функция ЗаполненныеВозможныеПрава() ВозможныеПрава = Новый ТаблицаЗначений(); ВозможныеПрава.Колонки.Добавить("ВладелецПрав", Новый ОписаниеТипов("Строка")); @@ -688,6 +705,15 @@ ИнтеграцияПодсистемБСП.ПриЗаполненииВозможныхПравДляНастройкиПравОбъектов(ВозможныеПрава); УправлениеДоступомПереопределяемый.ПриЗаполненииВозможныхПравДляНастройкиПравОбъектов(ВозможныеПрава); + Возврат ВозможныеПрава; + +КонецФункции + +// См. УправлениеДоступомПереопределяемый.ПриЗаполненииВозможныхПравДляНастройкиПравОбъектов. +Функция ВозможныеПрава() + + ВозможныеПрава = ЗаполненныеВозможныеПрава(); + ЗаголовокОшибки = НСтр("ru = 'Ошибка в процедуре ПриЗаполненииВозможныхПравДляНастройкиПравОбъектов |общего модуля УправлениеДоступомПереопределяемый.'") @@ -830,8 +856,6 @@ СвойстваВозможногоПрава = Новый Структура( "ВладелецПрав, |Имя, - |Заголовок, - |Подсказка, |НачальноеЗначение, |ТребуемыеПрава, |ЧтениеВТаблицах, @@ -877,6 +901,38 @@ КонецФункции +Функция ПредставлениеВозможныхПрав() Экспорт + + ВозможныеПрава = ЗаполненныеВозможныеПрава(); + + ПредставлениеВозможныхПрав = Новый Соответствие; + + Для Каждого ВозможноеПраво Из ВозможныеПрава Цикл + ПолноеИмяПрава = ВозможноеПраво.ВладелецПрав + "_" + ВозможноеПраво.Имя; + ПредставлениеВозможныхПрав.Вставить(ПолноеИмяПрава, Новый ФиксированнаяСтруктура( + Новый Структура("Заголовок, Подсказка", ВозможноеПраво.Заголовок, ВозможноеПраво.Подсказка))); + КонецЦикла; + + Возврат Новый ФиксированноеСоответствие(ПредставлениеВозможныхПрав); + +КонецФункции + +Функция ПредставлениеВозможногоПрава(ОписаниеВозможногоПрава) Экспорт + + ПредставлениеВозможныхПрав = УправлениеДоступомСлужебныйПовтИсп.ПредставлениеВозможныхПрав(); + + ПолноеИмяПрава = ОписаниеВозможногоПрава.ВладелецПрав + "_" + ОписаниеВозможногоПрава.Имя; + Представление = ПредставлениеВозможныхПрав.Получить(ПолноеИмяПрава); + + Если Не ЗначениеЗаполнено(Представление) Тогда + Представление = Новый ФиксированнаяСтруктура( + Новый Структура("Заголовок, Подсказка", ОписаниеВозможногоПрава.Имя, "")); + КонецЕсли; + + Возврат Представление; + +КонецФункции + Процедура ЗаполнитьИдентификаторы(Свойство, ВозможноеПраво, ЗаголовокОшибки, ОтдельныеТаблицы, ДополнительныеПараметры) Если ДополнительныеПараметры.ОбщиеПраваВладельцев.Получить(ДополнительныеПараметры.ВладелецПрав) = Неопределено Тогда diff --git a/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/ДобавленияУсловияПоДате/Form.form b/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/ДобавленияУсловияПоДате/Form.form index 7c686a30c..55a260c89 100644 --- a/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/ДобавленияУсловияПоДате/Form.form +++ b/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/ДобавленияУсловияПоДате/Form.form @@ -98,10 +98,6 @@ true - - <key>ru</key> - <value>Настройка интервала-исключения</value> - ГруппаУсловиеПоДатеРасширеннаяПодсказка 8 @@ -183,10 +179,6 @@ true - - <key>ru</key> - <value>Командная панель</value> - КоманднаяПанельРасширеннаяПодсказка 10 diff --git a/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/ДобавленияУсловияПоДате/Module.bsl b/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/ДобавленияУсловияПоДате/Module.bsl index 6836dd9f0..a9b37de28 100644 --- a/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/ДобавленияУсловияПоДате/Module.bsl +++ b/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/ДобавленияУсловияПоДате/Module.bsl @@ -39,12 +39,12 @@ Процедура ОК(Команда) Если ИнтервалИсключение = 0 Тогда - ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru='Количество дней не может быть равно 0.'"),,, "ИнтервалИсключение"); + ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Количество дней не может быть равно 0.'"),,, "ИнтервалИсключение"); Возврат; КонецЕсли; Если Не ЗначениеЗаполнено(РеквизитСТипомДата) Тогда - ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru='Необходимо заполнить условия очистки файлов.'"),,, "РеквизитСТипомДата"); + ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Необходимо заполнить условия очистки файлов.'"),,, "РеквизитСТипомДата"); Возврат; КонецЕсли; diff --git a/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/НастройкиСинхронизацииФайлов/Module.bsl b/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/НастройкиСинхронизацииФайлов/Module.bsl index 5e38bf4aa..686c12e83 100644 --- a/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/НастройкиСинхронизацииФайлов/Module.bsl +++ b/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/НастройкиСинхронизацииФайлов/Module.bsl @@ -511,7 +511,7 @@ ПараметрыВызоваСервера = Новый Структура(); ПараметрыВыполненияВФоне = ДлительныеОперации.ПараметрыВыполненияВФоне(ЭтотОбъект.УникальныйИдентификатор); - ПараметрыВыполненияВФоне.НаименованиеФоновогоЗадания = НСтр("ru = 'Подсистема Работа с файлам: Отключение синхронизации файлов с облачным сервисом'"); + ПараметрыВыполненияВФоне.НаименованиеФоновогоЗадания = НСтр("ru = 'Подсистема ""Работа с файлами"": Отключение синхронизации файлов с облачным сервисом'"); ФоновоеЗадание = ДлительныеОперации.ВыполнитьВФоне("РаботаСФайламиСлужебный.ОсвободитьЗахваченныеФайлыФон", ПараметрыВызоваСервера, ПараметрыВыполненияВФоне); @@ -701,8 +701,8 @@ ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДеревоОбъектовМетаданных.Синхронизировать"); ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; ОтборЭлемента.ПравоеЗначение = Истина; - - Элемент.Оформление.УстановитьЗначениеПараметра("Шрифт", Новый Шрифт(WindowsШрифты.ШрифтДиалоговИМеню, , , Истина, Ложь, Ложь, Ложь)); + + Элемент.Оформление.УстановитьЗначениеПараметра("Шрифт", ШрифтыСтиля.ВажнаяНадписьШрифт); // Элемент = УсловноеОформление.Элементы.Добавить(); diff --git a/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/ПростаяФормаЗаписиНастройки/Module.bsl b/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/ПростаяФормаЗаписиНастройки/Module.bsl index 2a31cc905..ae76fd80a 100644 --- a/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/ПростаяФормаЗаписиНастройки/Module.bsl +++ b/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/ПростаяФормаЗаписиНастройки/Module.bsl @@ -25,7 +25,7 @@ ПредставлениеВладельца = ОбщегоНазначения.ПредметСтрокой(Запись.ВладелецФайла); - Заголовок = НСтр("ru='Настройка синхронизации файлов:'") + Заголовок = НСтр("ru = 'Настройка синхронизации файлов:'") + " " + ПредставлениеВладельца; КонецПроцедуры diff --git a/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/ФормаЗаписиНастройки/Module.bsl b/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/ФормаЗаписиНастройки/Module.bsl index 632bd1c25..c0c30da10 100644 --- a/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/ФормаЗаписиНастройки/Module.bsl +++ b/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/ФормаЗаписиНастройки/Module.bsl @@ -76,7 +76,7 @@ ОбъектСинхронизации = "ТолькоФайлыЭлемента"; КонецЕсли; - Заголовок = НСтр("ru='Настройка синхронизации файлов:'") + " " + ПредставлениеВладельцаДляЗаголовка; + Заголовок = НСтр("ru = 'Настройка синхронизации файлов:'") + " " + ПредставлениеВладельцаДляЗаголовка; Элементы.ПравилоНастройкиОтбор.РасширеннаяПодсказка.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Элементы.ПравилоНастройкиОтбор.РасширеннаяПодсказка.Заголовок, ПредставлениеТипВФ); diff --git a/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/НастройкиСинхронизацииФайлов.mdo b/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/НастройкиСинхронизацииФайлов.mdo index 67f40dd8a..5379ed1bb 100644 --- a/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/НастройкиСинхронизацииФайлов.mdo +++ b/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/НастройкиСинхронизацииФайлов.mdo @@ -133,6 +133,7 @@ ru Владелец + АПК:1330 невозможно объединить 2 составных типа BusinessProcessRef DocumentRef diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/Forms/ПовторнаяСинхронизацияДанныхПередЗапуском/Module.bsl b/SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/Forms/ПовторнаяСинхронизацияДанныхПередЗапуском/Module.bsl index 7bb101a9f..686b933c9 100644 --- a/SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/Forms/ПовторнаяСинхронизацияДанныхПередЗапуском/Module.bsl +++ b/SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/Forms/ПовторнаяСинхронизацияДанныхПередЗапуском/Module.bsl @@ -29,8 +29,7 @@ НадписьИмяУзла = НСтр("ru = 'Не удалось установить обновление программы, полученное из |""%1"". |Техническую информацию см. в Журнале регистрации.'"); - НадписьИмяУзла = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НадписьИмяУзла, УзелИнформационнойБазы.Наименование); - Элементы.ИнформационнаяНадписьИмяУзла.Заголовок = СтроковыеФункцииКлиентСервер.ФорматированнаяСтрока(НадписьИмяУзла); + Элементы.ИнформационнаяНадписьИмяУзла.Заголовок = СтроковыеФункции.ФорматированнаяСтрока(НадписьИмяУзла, УзелИнформационнойБазы.Наименование); УстановитьОтображениеЭлементовФормы(); @@ -421,6 +420,19 @@ ВидТранспорта = РегистрыСведений.НастройкиТранспортаОбменаДанными.ВидТранспортаСообщенийОбменаПоУмолчанию(УзелИнформационнойБазы); + ИмяПараметра = "СтандартныеПодсистемы.ОбменДанными.ПравилаРегистрации." + + ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(УзелИнформационнойБазы); + ПравилаРегистрацииОбновлены = СтандартныеПодсистемыСервер.ПараметрРаботыПрограммы(ИмяПараметра); + Если ПравилаРегистрацииОбновлены = Неопределено Тогда + ОбменДаннымиСервер.ВыполнитьОбновлениеПравилДляОбменаДанными(); + КонецЕсли; + ПравилаРегистрацииОбновлены = СтандартныеПодсистемыСервер.ПараметрРаботыПрограммы(ИмяПараметра); + Если ПравилаРегистрацииОбновлены = Неопределено Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не выполнено обновление кэша правил регистрации данных для плана обмена ""%1""'"), + ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(УзелИнформационнойБазы)); + КонецЕсли; + ДатаНачалаОперации = ТекущаяДатаСеанса(); ПараметрыАутентификации = ?(ЭтоАвтономноеРабочееМесто, Новый Структура("ИспользоватьТекущегоПользователя, Пароль", Истина, Пароль), Неопределено); diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/Forms/ФормаЗаписи/Module.bsl index 37a04fe8a..d51579df0 100644 --- a/SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/Forms/ФормаЗаписи/Module.bsl +++ b/SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/Forms/ФормаЗаписи/Module.bsl @@ -333,7 +333,7 @@ УстановитьПривилегированныйРежим(Истина); ПараметрыСоединения.Вставить("COMПарольПользователя", - ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(Запись.Корреспондент, "COMПарольПользователя", Истина)); + ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(Запись.Корреспондент, "COMПарольПользователя")); УстановитьПривилегированныйРежим(Ложь); Иначе @@ -360,7 +360,7 @@ Если Не WSПарольИзменен Тогда УстановитьПривилегированныйРежим(Истина); - ПараметрыПодключения.WSПароль = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(Запись.Корреспондент, "WSПароль", Истина); + ПараметрыПодключения.WSПароль = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(Запись.Корреспондент, "WSПароль"); УстановитьПривилегированныйРежим(Ложь); Иначе diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/ManagerModule.bsl b/SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/ManagerModule.bsl index d3f1f0ad5..fea07d7ec 100644 --- a/SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/ManagerModule.bsl @@ -19,9 +19,14 @@ ЗаписатьПароль("COMПарольПользователя", "COMПарольПользователя", СтруктураЗаписи); ЗаписатьПароль("FTPСоединениеПароль", "FTPСоединениеПароль", СтруктураЗаписи); - ЗаписатьПароль("WSПароль", "WSПароль", СтруктураЗаписи); ЗаписатьПароль("ПарольАрхиваСообщенияОбмена", "ПарольАрхиваСообщенияОбмена", СтруктураЗаписи); + WSЗапомнитьПароль = Неопределено; + Если СтруктураЗаписи.Свойство("WSЗапомнитьПароль", WSЗапомнитьПароль) + И WSЗапомнитьПароль = Истина Тогда + ЗаписатьПароль("WSПароль", "WSПароль", СтруктураЗаписи); + КонецЕсли; + ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); @@ -67,7 +72,7 @@ Результат.Вставить("WSПароль", WSПароль); Иначе - ВызватьИсключение НСтр("ru='Ошибка при извлечении пароля из безопасного хранилища.'"); + ВызватьИсключение НСтр("ru = 'Ошибка при извлечении пароля из безопасного хранилища.'"); КонецЕсли; Если ТипЗнч(ПараметрыАутентификации) = Тип("Структура") Тогда // Инициация обмена пользователем с клиента. diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбменаОбластейДанных/ManagerModule.bsl b/SSL/src/InformationRegisters/НастройкиТранспортаОбменаОбластейДанных/ManagerModule.bsl index 060b1c3d4..90c231d91 100644 --- a/SSL/src/InformationRegisters/НастройкиТранспортаОбменаОбластейДанных/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/НастройкиТранспортаОбменаОбластейДанных/ManagerModule.bsl @@ -47,7 +47,7 @@ Строка(КонечнаяТочкаКорреспондента)); КонецЕсли; - Результат = ОбменДаннымиСервер.РезультатЗапросаВСтруктуру(РезультатЗапроса); + Результат = ОбменДаннымиСлужебный.РезультатЗапросаВСтруктуру(РезультатЗапроса); УстановитьПривилегированныйРежим(Истина); Пароли = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(КонечнаяТочкаКорреспондента, "FTPСоединениеПарольОбластейДанных,ПарольАрхиваСообщенияОбменаОбластейДанных"); УстановитьПривилегированныйРежим(Ложь); diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбменаОбластиДанных/ManagerModule.bsl b/SSL/src/InformationRegisters/НастройкиТранспортаОбменаОбластиДанных/ManagerModule.bsl index 18db1ee3d..648308cbb 100644 --- a/SSL/src/InformationRegisters/НастройкиТранспортаОбменаОбластиДанных/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/НастройкиТранспортаОбменаОбластиДанных/ManagerModule.bsl @@ -55,7 +55,7 @@ Возврат Неопределено; КонецЕсли; - Результат = ОбменДаннымиСервер.РезультатЗапросаВСтруктуру(РезультатЗапроса); + Результат = ОбменДаннымиСлужебный.РезультатЗапросаВСтруктуру(РезультатЗапроса); УстановитьПривилегированныйРежим(Истина); Пароли = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(Корреспондент, "FTPСоединениеПарольОбластейДанных,WSПароль, ПарольАрхиваСообщенияОбменаОбластейДанных"); @@ -87,7 +87,7 @@ Результат.Вставить("FTPПуть", ""); КонецЕсли; - ОбменДаннымиСервер.ДополнитьНастройкиТранспортаКоличествомЭлементовВТранзакции(Результат); + ОбменДаннымиСлужебный.ДополнитьНастройкиТранспортаКоличествомЭлементовВТранзакции(Результат); Возврат Результат; КонецФункции diff --git a/SSL/src/InformationRegisters/НастройкиУчетныхЗаписейЭлектроннойПочты/Forms/ФормаЗаписи/Form.form b/SSL/src/InformationRegisters/НастройкиУчетныхЗаписейЭлектроннойПочты/Forms/ФормаЗаписи/Form.form index 6d2cc8ee1..5127b98c9 100644 --- a/SSL/src/InformationRegisters/НастройкиУчетныхЗаписейЭлектроннойПочты/Forms/ФормаЗаписи/Form.form +++ b/SSL/src/InformationRegisters/НастройкиУчетныхЗаписейЭлектроннойПочты/Forms/ФормаЗаписи/Form.form @@ -84,8 +84,7 @@ Использование для встроенного почтового клиента: - Style.NormalTextFont - 9.0 + 0 5 @@ -596,8 +595,7 @@ Где идет обработка писем? - Style.NormalTextFont - 9.0 + 0 6 diff --git a/SSL/src/InformationRegisters/НастройкиУчетныхЗаписейЭлектроннойПочты/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/НастройкиУчетныхЗаписейЭлектроннойПочты/Forms/ФормаЗаписи/Module.bsl index 5c9ea91f8..bdaf861df 100644 --- a/SSL/src/InformationRegisters/НастройкиУчетныхЗаписейЭлектроннойПочты/Forms/ФормаЗаписи/Module.bsl +++ b/SSL/src/InformationRegisters/НастройкиУчетныхЗаписейЭлектроннойПочты/Forms/ФормаЗаписи/Module.bsl @@ -70,6 +70,14 @@ &НаСервере Процедура ПриЧтенииНаСервере(ТекущийОбъект) + + // СтандартныеПодсистемы.УправлениеДоступом + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); + МодульУправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); + КонецЕсли; + // Конец СтандартныеПодсистемы.УправлениеДоступом + Если ТекущийОбъект.ВключатьПодписьДляНовыхСообщений И ТекущийОбъект.ФорматПодписиДляНовыхСообщений = Перечисления.СпособыРедактированияЭлектронныхПисем.HTML Тогда @@ -114,6 +122,13 @@ &НаСервере Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи) + + // СтандартныеПодсистемы.УправлениеДоступом + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); + МодульУправлениеДоступом.ПослеЗаписиНаСервере(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи); + КонецЕсли; + // Конец СтандартныеПодсистемы.УправлениеДоступом УстановитьКартинкиСтраниц(); diff --git a/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаКДанным/Forms/ОбновлениеДоступаНаУровнеЗаписей/Form.form b/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаКДанным/Forms/ОбновлениеДоступаНаУровнеЗаписей/Form.form index 6ff79961e..991ca5db2 100644 --- a/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаКДанным/Forms/ОбновлениеДоступаНаУровнеЗаписей/Form.form +++ b/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаКДанным/Forms/ОбновлениеДоступаНаУровнеЗаписей/Form.form @@ -39,8 +39,8 @@ 204 <key>ru</key> - <value>Универсальное ограничение отключено - используется стандартное ограничение -(см. константу Ограничивать доступ на уровне записей универсально)</value> + <value>Производительный вариант работы отключен - используется стандартный вариант +(см. вариант работы ограничения доступа в панели "Настройки пользователей и прав")</value> true true @@ -74,7 +74,7 @@ <key>ru</key> - <value>Группа предупреждение (универсальное ограничение отключено)</value> + <value>Группа предупреждение (производительный вариант отключен)</value> ГруппаПредупреждениеУниверсальноеОграничениеОтключеноРасширеннаяПодсказка @@ -136,8 +136,9 @@ 212 <key>ru</key> - <value>До первого завершения обновления работает стандартное ограничение доступа -(см. константу Первое обновление доступа завершилось)</value> + <value>До первого завершения обновления используется стандартный вариант работы +(см. константу Первое обновление доступа завершилось) +</value> true true diff --git a/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаКДанным/Forms/ОбновлениеДоступаНаУровнеЗаписей/Help/ru.html b/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаКДанным/Forms/ОбновлениеДоступаНаУровнеЗаписей/Help/ru.html new file mode 100644 index 000000000..260555e81 --- /dev/null +++ b/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаКДанным/Forms/ОбновлениеДоступаНаУровнеЗаписей/Help/ru.html @@ -0,0 +1,31 @@ +Предназначена для наблюдения за обновлением доступа на уровне записей. +
    Наблюдение за ходом обновления выполняется по ссылке Обновление доступа на уровне записей в разделе Администрирование - Настройки пользователей и прав - Группы доступа. 
    +

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

    Запуск обновления доступом на уровне записей

    +
    Если регламентные задания заблокированы, тогда нужно нажать Запустить сейчас и дождаться завершения. Перед этим рекомендуется указать количество потоков обновление доступа, равное количеству ядер процессора, чтобы обновление прошло быстрее. После изменения количества потоков нужно остановить обновление (нажать Отменить) и продолжить (нажать Запустить сейчас).
    Регламентное задание выполняется по две минуты с паузой 15 сек до завершения обновления. При нажатии Запустить сейчас, обновление выполняется непрерывно до конца. Когда обновление доступа завершено, регламентное задание автоматически выключается, а при планировании обновления автоматически включается.
    +

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

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

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

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

    +

    Ручное управление

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

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

    Остановка обновления доступа

    +
    +
    • При необходимости можно Остановить и запретить обновление доступа с помощью команды меню Еще.
    • +
    • Если обновление доступа запрещено, то в окне появляется предупреждение и ссылка Разрешить. 
    • +
    • При попытке запустить регламентное задание, когда обновление запрещено. возникнет ошибка его запуска. Для того чтобы обновление с помощью регламентного задания выполнялось,  нужно нажать ссылку Разрешить. При нажатии на ссылку Запустить сейчас запрещенное обновление разрешается.
    • +
    • Если обновление разрешено, состав заданий для обновления доступа не пустой, а регламентное задание отключено (например, через управление списком регламентных заданий), тогда в окне появляется предупреждение Задание отключено и ссылка Включить. При нажатии на кнопку Запустить сейчас регламентное задание не включается.
    + + + \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаКДанным/Forms/ОбновлениеДоступаНаУровнеЗаписей/Module.bsl b/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаКДанным/Forms/ОбновлениеДоступаНаУровнеЗаписей/Module.bsl index 6fe83421a..4bf6000ec 100644 --- a/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаКДанным/Forms/ОбновлениеДоступаНаУровнеЗаписей/Module.bsl +++ b/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаКДанным/Forms/ОбновлениеДоступаНаУровнеЗаписей/Module.bsl @@ -38,7 +38,9 @@ Элементы.КраткоПодробно.Показать(); КонецЕсли; + УстановитьПривилегированныйРежим(Истина); КоличествоПотоковОбновленияДоступа = Константы.КоличествоПотоковОбновленияДоступа.Получить(); + УстановитьПривилегированныйРежим(Ложь); Если КоличествоПотоковОбновленияДоступа = 0 Тогда КоличествоПотоковОбновленияДоступа = 1; КонецЕсли; diff --git a/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаКДанным/Forms/ОбновлениеДоступаРучноеУправление/Help/ru.html b/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаКДанным/Forms/ОбновлениеДоступаРучноеУправление/Help/ru.html new file mode 100644 index 000000000..337bd4dd7 --- /dev/null +++ b/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаКДанным/Forms/ОбновлениеДоступаРучноеУправление/Help/ru.html @@ -0,0 +1,26 @@ + +
    +

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

    Обновление доступа к объекту

    +
    Если проблема возникла с конкретным объектов (документом, элементом справочника и др.), тогда можно выбрать его и нажать Обновить доступ. При этом будет выполнено обновление и выведено сообщение о результате: был ли доступ обновлен или же обновление не требуется (рассчитанные права актуальны).
    +

    Обновление доступа ко всем элементам списков

    +
    Если проблема возникла с множеством объектов или записей регистров, тогда следует запланировать обновление для списка в целом.
    +

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

    +
    См. также:
    + + + + \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаКДанным/ОбновлениеКлючейДоступаКДанным.mdo b/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаКДанным/ОбновлениеКлючейДоступаКДанным.mdo index 850c154ab..e0fc5d641 100644 --- a/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаКДанным/ОбновлениеКлючейДоступаКДанным.mdo +++ b/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаКДанным/ОбновлениеКлючейДоступаКДанным.mdo @@ -251,6 +251,11 @@ ru Обновление доступа на уровне записей + + + ru + + PersonalComputer MobileDevice @@ -260,6 +265,11 @@ ru Обновление доступа ручное управление + + + ru + + PersonalComputer MobileDevice diff --git a/SSL/src/InformationRegisters/ОчередьИзвлеченияТекста/ОчередьИзвлеченияТекста.mdo b/SSL/src/InformationRegisters/ОчередьИзвлеченияТекста/ОчередьИзвлеченияТекста.mdo index b8da40829..fe1507324 100644 --- a/SSL/src/InformationRegisters/ОчередьИзвлеченияТекста/ОчередьИзвлеченияТекста.mdo +++ b/SSL/src/InformationRegisters/ОчередьИзвлеченияТекста/ОчередьИзвлеченияТекста.mdo @@ -60,7 +60,7 @@
    ru - Ссылка на объект в базе данных, из которого нужно извлечь текст. + Объект, из которого нужно извлечь текст. diff --git a/SSL/src/InformationRegisters/ПакетыДляОтправки/ManagerModule.bsl b/SSL/src/InformationRegisters/ПакетыДляОтправки/ManagerModule.bsl index 00840229d..578623fda 100644 --- a/SSL/src/InformationRegisters/ПакетыДляОтправки/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ПакетыДляОтправки/ManagerModule.bsl @@ -94,7 +94,7 @@ Исключение ОтменитьТранзакцию(); Ошибка = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - ЗаписьЖурналаРегистрации(НСтр("ru='УдалитьСтарыеПакеты'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, Метаданные.ОбщиеМодули.ЦентрМониторингаСлужебный,,Ошибка); + ЗаписьЖурналаРегистрации(НСтр("ru = 'УдалитьСтарыеПакеты'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, Метаданные.ОбщиеМодули.ЦентрМониторингаСлужебный,,Ошибка); ВызватьИсключение Ошибка; КонецПопытки; @@ -129,7 +129,7 @@ Исключение ОтменитьТранзакцию(); Ошибка = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - ЗаписьЖурналаРегистрации(НСтр("ru='УдалитьПакеты'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, Метаданные.ОбщиеМодули.ЦентрМониторингаСлужебный,,Ошибка); + ЗаписьЖурналаРегистрации(НСтр("ru = 'УдалитьПакеты'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, Метаданные.ОбщиеМодули.ЦентрМониторингаСлужебный,,Ошибка); ВызватьИсключение Ошибка; КонецПопытки; КонецПроцедуры diff --git a/SSL/src/InformationRegisters/ПараметрыОграниченияДоступа/ManagerModule.bsl b/SSL/src/InformationRegisters/ПараметрыОграниченияДоступа/ManagerModule.bsl index a9035e6dd..adce4bc8f 100644 --- a/SSL/src/InformationRegisters/ПараметрыОграниченияДоступа/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ПараметрыОграниченияДоступа/ManagerModule.bsl @@ -8,12 +8,12 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -#Область СлужебныеПроцедурыИФункции +#Область СлужебныйПрограммныйИнтерфейс // Процедура обновляет данные регистра при полном обновлении вспомогательных данных. -// +// // Параметры: -// ЕстьИзменения - Булево (возвращаемое значение) - если производилась запись, +// ЕстьИзменения - Булево - (возвращаемое значение) - если производилась запись, // устанавливается Истина, иначе не изменяется. // Процедура ОбновитьДанныеРегистра(ЕстьИзменения = Неопределено) Экспорт @@ -27,16 +27,131 @@ КонецПроцедуры +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + //////////////////////////////////////////////////////////////////////////////// // Обновление информационной базы. -Процедура ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию2(Параметры) Экспорт +// Обновляет версию текстов ограничений доступа. +// +// Параметры: +// ЕстьИзменения - Булево - (возвращаемое значение) - если изменения найдены, +// устанавливается Истина, иначе не изменяется. +// +Процедура ОбновитьВерсиюТекстовОграниченияДоступа(ЕстьИзменения = Неопределено) Экспорт - // Регистрация данных не требуется. + Если ОбщегоНазначения.РазделениеВключено() + И Не ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда + + ВерсияИБ = ОбновлениеИнформационнойБазыСлужебный.ВерсияИБ("СтандартныеПодсистемы", Истина); + Иначе + ВерсияИБ = ОбновлениеИнформационнойБазыСлужебный.ВерсияИБ("СтандартныеПодсистемы"); + КонецЕсли; + + ВерсияТекстов = ВерсияТекстовОграниченияДоступа(); + + НачатьТранзакцию(); + Попытка + ЕстьТекущиеИзменения = Ложь; + + СтандартныеПодсистемыСервер.ОбновитьПараметрРаботыПрограммы( + "СтандартныеПодсистемы.УправлениеДоступом.ВерсияТекстовОграниченияДоступа", + ВерсияТекстов, ЕстьТекущиеИзменения); + + Если ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ВерсияИБ, "3.0.3.92") < 0 + Или ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ВерсияИБ, "3.1.1.1") > 0 + И ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ВерсияИБ, "3.1.1.109") < 0 + Или ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ВерсияИБ, "3.1.2.1") > 0 + И ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ВерсияИБ, "3.1.2.150") < 0 Тогда + + ЕстьТекущиеИзменения = Истина; + КонецЕсли; + + СтандартныеПодсистемыСервер.ДобавитьИзмененияПараметраРаботыПрограммы( + "СтандартныеПодсистемы.УправлениеДоступом.ВерсияТекстовОграниченияДоступа", + ?(ЕстьТекущиеИзменения, + Новый ФиксированнаяСтруктура("ЕстьИзменения", Истина), + Новый ФиксированнаяСтруктура()) ); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + + Если ЕстьТекущиеИзменения Тогда + ЕстьИзменения = Истина; + КонецЕсли; КонецПроцедуры -Процедура ОбработатьДанныеДляПереходаНаНовуюВерсию2(Параметры) Экспорт +// Процедура обновляет вспомогательные данные регистра по результату изменения +// возможных прав по значениям доступа, сохраненных в параметрах ограничения доступа. +// +Процедура ЗапланироватьОбновлениеДоступаПоИзменениямКонфигурации() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + ПоследниеИзменения = СтандартныеПодсистемыСервер.ИзмененияПараметраРаботыПрограммы( + "СтандартныеПодсистемы.УправлениеДоступом.ВерсияТекстовОграниченияДоступа"); + + Если ПоследниеИзменения = Неопределено Тогда + ТребуетсяОбновление = Истина; + Иначе + ТребуетсяОбновление = Ложь; + Для Каждого ЧастьИзменений Из ПоследниеИзменения Цикл + + Если ТипЗнч(ЧастьИзменений) = Тип("ФиксированнаяСтруктура") + И ЧастьИзменений.Свойство("ЕстьИзменения") + И ТипЗнч(ЧастьИзменений.ЕстьИзменения) = Тип("Булево") Тогда + + Если ЧастьИзменений.ЕстьИзменения Тогда + ТребуетсяОбновление = Истина; + Прервать; + КонецЕсли; + Иначе + ТребуетсяОбновление = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + Если Не ТребуетсяОбновление Тогда + Возврат; + КонецЕсли; + + УправлениеДоступомСлужебный.ЗапланироватьОбновлениеПараметровОграниченияДоступа( + "ЗапланироватьОбновлениеДоступаПоИзменениямКонфигурации"); + + ВерсияИБ = ОбновлениеИнформационнойБазыСлужебный.ВерсияИБ("СтандартныеПодсистемы"); + + Если ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ВерсияИБ, "3.0.3.3") < 0 + Или ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ВерсияИБ, "3.1.1.1") > 0 + И ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ВерсияИБ, "3.1.1.109") < 0 Тогда + + ЗапланироватьОбновление(Ложь, Истина, "ПереходНаВерсиюБСП_3.0.3.3"); + КонецЕсли; + + Если ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ВерсияИБ, "3.0.3.76") < 0 + Или ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ВерсияИБ, "3.1.2.1") > 0 + И ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ВерсияИБ, "3.1.2.134") < 0 Тогда + + ЗапланироватьОбновление(Истина, Ложь, "ПереходНаВерсиюБСП_3.0.3.76"); + КонецЕсли; + + Если ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ВерсияИБ, "3.0.3.92") < 0 + Или ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ВерсияИБ, "3.1.2.1") > 0 + И ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ВерсияИБ, "3.1.2.150") < 0 Тогда + + ЗапланироватьОбновление(Ложь, Истина, "ПереходНаВерсиюБСП_3.0.3.92"); + КонецЕсли; + +КонецПроцедуры + +// Для процедуры ОбновитьДанныеРегистраПоИзменениямКонфигурации. +Процедура ЗапланироватьОбновление(КлючиДоступаКДанным, РазрешенныеКлючиДоступа, Описание) ОписаниеОграниченийДанных = УправлениеДоступомСлужебный.ОписаниеОграниченийДанных(); ВнешниеПользователиВключены = Константы.ИспользоватьВнешнихПользователей.Получить(); @@ -52,18 +167,60 @@ ПараметрыПланирования = УправлениеДоступомСлужебный.ПараметрыПланированияОбновленияДоступа(); - ПараметрыПланирования.КлючиДоступаКДанным = Ложь; + ПараметрыПланирования.КлючиДоступаКДанным = КлючиДоступаКДанным; + ПараметрыПланирования.РазрешенныеКлючиДоступа = РазрешенныеКлючиДоступа; ПараметрыПланирования.ДляВнешнихПользователей = Ложь; ПараметрыПланирования.ЭтоПродолжениеОбновления = Истина; - ПараметрыПланирования.Описание = "ОбработатьДанныеДляПереходаНаНовуюВерсию2"; + ПараметрыПланирования.Описание = Описание; УправлениеДоступомСлужебный.ЗапланироватьОбновлениеДоступа(Списки, ПараметрыПланирования); ПараметрыПланирования.ДляПользователей = Ложь; ПараметрыПланирования.ДляВнешнихПользователей = Истина; - ПараметрыПланирования.Описание = "ОбработатьДанныеДляПереходаНаНовуюВерсию2"; + ПараметрыПланирования.Описание = Описание; УправлениеДоступомСлужебный.ЗапланироватьОбновлениеДоступа(СпискиДляВнешнихПользователей, ПараметрыПланирования); - Параметры.ОбработкаЗавершена = Истина; +КонецПроцедуры + +// Для процедуры ОбновитьВерсиюТекстовОграниченияДоступа. +Функция ВерсияТекстовОграниченияДоступа() + + ОписаниеОграничений = УправлениеДоступомСлужебный.ОписаниеОграниченийДанных(); + + ВсеТексты = Новый СписокЗначений; + Разделители = " " + Символы.ПС + Символы.ВК + Символы.НПП + Символы.ПФ; + Для Каждого ОписаниеОграничения Из ОписаниеОграничений Цикл + Ограничение = ОписаниеОграничения.Значение; + Тексты = Новый Массив; + Тексты.Добавить(ОписаниеОграничения.Ключ); + ДобавитьСвойство(Тексты, Ограничение, Разделители, "Текст"); + ДобавитьСвойство(Тексты, Ограничение, Разделители, "ТекстДляВнешнихПользователей"); + ДобавитьСвойство(Тексты, Ограничение, Разделители, "ПоВладельцуБезЗаписиКлючейДоступа"); + ДобавитьСвойство(Тексты, Ограничение, Разделители, "ПоВладельцуБезЗаписиКлючейДоступаДляВнешнихПользователей"); + ДобавитьСвойство(Тексты, Ограничение, Разделители, "ТекстВМодулеМенеджера"); + ВсеТексты.Добавить(СтрСоединить(Тексты, Символы.ПС), ОписаниеОграничения.Ключ); + КонецЦикла; + ВсеТексты.СортироватьПоПредставлению(); + + ПолныйТекст = СтрСоединить(ВсеТексты.ВыгрузитьЗначения(), Символы.ПС); + + Хеширование = Новый ХешированиеДанных(ХешФункция.SHA256); + Хеширование.Добавить(ПолныйТекст); + + Возврат Base64Строка(Хеширование.ХешСумма); + +КонецФункции + +// Для функции ВерсияТекстовОграниченияДоступа. +Процедура ДобавитьСвойство(Тексты, Ограничение, Разделители, ИмяСвойства) + + Значение = Ограничение[ИмяСвойства]; + Если ТипЗнч(Значение) = Тип("Строка") Тогда + Текст = СтрСоединить(СтрРазделить(НРег(Значение), Разделители, Ложь), " "); + Иначе + Текст = Строка(Значение); + КонецЕсли; + + Тексты.Добавить(" " + ИмяСвойства + ": " + Текст); КонецПроцедуры @@ -75,12 +232,18 @@ Процедура ОбработатьДанныеДляПереходаНаНовуюВерсию3(Параметры) Экспорт - Константы.ОграничиватьДоступНаУровнеЗаписейУниверсально.Установить(Истина); + ВключитьОграничениеДоступаНаУровнеЗаписейУниверсально(); Параметры.ОбработкаЗавершена = Истина; КонецПроцедуры +Процедура ВключитьОграничениеДоступаНаУровнеЗаписейУниверсально() Экспорт + + Константы.ОграничиватьДоступНаУровнеЗаписейУниверсально.Установить(Истина); + +КонецПроцедуры + #КонецОбласти #КонецЕсли diff --git a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/МакетыПечатныхФорм/Form.form b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/МакетыПечатныхФорм/Form.form index 2a5cdf5f0..c323520c1 100644 --- a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/МакетыПечатныхФорм/Form.form +++ b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/МакетыПечатныхФорм/Form.form @@ -226,6 +226,10 @@ МакетыПечатныхФорм.КартинкаИспользования None + + ru + Отредактирован + МакетыПечатныхФормИспользованиеExtendedTooltip 96 diff --git a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/РедактированиеМакета/Form.form b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/РедактированиеМакета/Form.form index b35b3cb16..f3687a6ba 100644 --- a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/РедактированиеМакета/Form.form +++ b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/РедактированиеМакета/Form.form @@ -121,10 +121,6 @@ true - - <key>ru</key> - <value>Страница загрузка на компьютер веб клиент</value> - СтраницаЗагрузкаНаКомпьютерВебКлиентExtendedTooltip 64 @@ -253,10 +249,6 @@ true - - <key>ru</key> - <value>Страница загрузка на компьютер</value> - СтраницаЗагрузкаНаКомпьютерНеВебКлиентExtendedTooltip 68 @@ -356,10 +348,6 @@ true - - <key>ru</key> - <value>Страница загрузка в информационную базу веб клиент</value> - СтраницаЗагрузкаВИнформационнуюБазуВебКлиентExtendedTooltip 72 @@ -459,10 +447,6 @@ true - - <key>ru</key> - <value>Страница загрузка в информационную базу</value> - СтраницаЗагрузкаВИнформационнуюБазуНеВебКлиентExtendedTooltip 75 @@ -484,10 +468,6 @@ true - - <key>ru</key> - <value>Диалог</value> - ДиалогExtendedTooltip 63 @@ -598,10 +578,6 @@ true - - <key>ru</key> - <value>Кнопок загрузка</value> - ГруппаКнопокЗагрузкаExtendedTooltip 80 @@ -622,10 +598,6 @@ true - - <key>ru</key> - <value>Панель загрузка</value> - ПанельЗагрузкаExtendedTooltip 79 @@ -731,10 +703,6 @@ true - - <key>ru</key> - <value>Кнопок завершение изменения</value> - ГруппаКнопокЗавершениеИзмененияExtendedTooltip 85 @@ -755,10 +723,6 @@ true - - <key>ru</key> - <value>Панель завершение изменения</value> - ПанельЗавершениеИзмененияExtendedTooltip 84 @@ -780,10 +744,6 @@ true - - <key>ru</key> - <value>Командная панель</value> - КоманднаяПанельExtendedTooltip 78 @@ -804,10 +764,6 @@ true - - <key>ru</key> - <value>Командная панель</value> - true ГруппаКоманднаяПанельРасширеннаяПодсказка diff --git a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/ПользовательскиеМакетыПечати.mdo b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/ПользовательскиеМакетыПечати.mdo index 34f309287..e2ef4e9c0 100644 --- a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/ПользовательскиеМакетыПечати.mdo +++ b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/ПользовательскиеМакетыПечати.mdo @@ -131,7 +131,7 @@ String - 100 + 255 diff --git a/SSL/src/InformationRegisters/ПраваРолей/ManagerModule.bsl b/SSL/src/InformationRegisters/ПраваРолей/ManagerModule.bsl index e977bb758..0bb2ef8c3 100644 --- a/SSL/src/InformationRegisters/ПраваРолей/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ПраваРолей/ManagerModule.bsl @@ -27,9 +27,9 @@ КонецПроцедуры // Процедура обновляет данные регистра при изменении конфигурации. -// +// // Параметры: -// ЕстьИзменения - Булево (возвращаемое значение) - если производилась запись, +// ЕстьИзменения - Булево - (возвращаемое значение) - если производилась запись, // устанавливается Истина, иначе не изменяется. // Процедура ОбновитьДанныеРегистра(ЕстьИзменения = Неопределено) Экспорт diff --git a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ЗагрузитьПравилаСинхронизацииДанных/Module.bsl b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ЗагрузитьПравилаСинхронизацииДанных/Module.bsl index 945728843..a379e2fe4 100644 --- a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ЗагрузитьПравилаСинхронизацииДанных/Module.bsl +++ b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ЗагрузитьПравилаСинхронизацииДанных/Module.bsl @@ -65,7 +65,7 @@ ДополнительныеПараметры.Вставить("ПользовательскиеНастройкиШаблонов", КаталогAppData() + "1C\1CEStart\1CEStart.cfg"); ДополнительныеПараметры.Вставить("РасположениеФайла", ""); - ТекстПредложения = НСтр("ru = 'Для открытия каталога необходимо необходимо установить расширение работы с файлами.'"); + ТекстПредложения = НСтр("ru = 'Для открытия каталога необходимо необходимо установить расширение для работы с 1С:Предприятием.'"); Оповещение = Новый ОписаниеОповещения("ПослеПроверкиРасширенияРаботыСФайлами", ЭтотОбъект, ДополнительныеПараметры); ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботыСФайлами(Оповещение, ТекстПредложения); Иначе @@ -79,29 +79,24 @@ Процедура ПослеПроверкиРасширенияРаботыСФайлами(Результат, ДополнительныеПараметры) Экспорт Если Результат Тогда - Файл = Новый Файл(); - ДополнительныеПараметры.Вставить("СледующееОповещение", Новый ОписаниеОповещения("ОпределениеСуществованияФайла", ЭтотОбъект, ДополнительныеПараметры)); - Оповещение = Новый ОписаниеОповещения("ИнициализироватьФайл", ЭтотОбъект, ДополнительныеПараметры); - Файл.НачатьИнициализацию(Оповещение, ДополнительныеПараметры.ПользовательскиеНастройкиШаблонов); + Файл = Новый Файл(ДополнительныеПараметры.ПользовательскиеНастройкиШаблонов); + + Оповещение = Новый ОписаниеОповещения("ОпределениеСуществованияФайла", ЭтотОбъект, ДополнительныеПараметры); + Файл.НачатьПроверкуСуществования(Оповещение); + Иначе УстановитьЗаголовокИнформацииОПолучении(ДополнительныеПараметры); КонецЕсли; КонецПроцедуры -// Продолжение процедуры (см. выше). -&НаКлиенте -Процедура ИнициализироватьФайл(Файл, ДополнительныеПараметры) Экспорт - Файл.НачатьПроверкуСуществования(ДополнительныеПараметры.СледующееОповещение); -КонецПроцедуры - // Продолжение процедуры (см. выше). &НаКлиенте Процедура ОпределениеСуществованияФайла(Существует, ДополнительныеПараметры) Экспорт #Если ВебКлиент Тогда - ВызватьИсключение НСтр("ru='Операция в веб-клиенте не предусмотрена'"); + ВызватьИсключение НСтр("ru = 'Операция в веб-клиенте не предусмотрена'"); #Иначе @@ -136,10 +131,10 @@ ДополнительныеПараметры.РасположениеФайла = ДополнительныеПараметры.КаталогПоУмолчанию + РасположениеКомплектаПравил.ПутьКФайлуКомплектаПравилВКаталогеШаблонов КонецЕсли; - Файл = Новый Файл(); - ДополнительныеПараметры.СледующееОповещение = Новый ОписаниеОповещения("ОпределениеСуществованияКаталога", ЭтотОбъект, ДополнительныеПараметры); - Оповещение = Новый ОписаниеОповещения("ИнициализироватьФайл", ЭтотОбъект, ДополнительныеПараметры); - Файл.НачатьИнициализацию(Оповещение, ДополнительныеПараметры.РасположениеФайла); + Файл = Новый Файл(ДополнительныеПараметры.РасположениеФайла); + + Оповещение = Новый ОписаниеОповещения("ОпределениеСуществованияКаталога", ЭтотОбъект, ДополнительныеПараметры); + Файл.НачатьПроверкуСуществования(Оповещение); #КонецЕсли @@ -253,7 +248,7 @@ ИзмененыНастройкиРежимаОтладки = Истина; НастройкиДиалога = Новый Структура; - НастройкиДиалога.Вставить("Фильтр", НСтр("ru = 'Внешняя обработка(*.epf)'") + "|*.epf" ); + НастройкиДиалога.Вставить("Фильтр", НСтр("ru = 'Внешняя обработка (*.epf)'") + "|*.epf" ); ОбменДаннымиКлиент.ОбработчикВыбораФайла(ЭтотОбъект, "ИмяФайлаОбработкиДляОтладкиВыгрузки", СтандартнаяОбработка, НастройкиДиалога); @@ -264,7 +259,7 @@ ИзмененыНастройкиРежимаОтладки = Истина; НастройкиДиалога = Новый Структура; - НастройкиДиалога.Вставить("Фильтр", НСтр("ru = 'Внешняя обработка(*.epf)'") + "|*.epf" ); + НастройкиДиалога.Вставить("Фильтр", НСтр("ru = 'Внешняя обработка (*.epf)'") + "|*.epf" ); СтандартнаяОбработка = Ложь; ОбменДаннымиКлиент.ОбработчикВыбораФайла(ЭтотОбъект, "ИмяФайлаОбработкиДляОтладкиЗагрузки", СтандартнаяОбработка, НастройкиДиалога); @@ -292,7 +287,7 @@ ИзмененыНастройкиРежимаОтладки = Истина; НастройкиДиалога = Новый Структура; - НастройкиДиалога.Вставить("Фильтр", НСтр("ru = 'Текстовый документ(*.txt)'")+ "|*.txt" ); + НастройкиДиалога.Вставить("Фильтр", НСтр("ru = 'Текстовый документ (*.txt)'")+ "|*.txt" ); НастройкиДиалога.Вставить("ПроверятьСуществованиеФайла", Ложь); ОбменДаннымиКлиент.ОбработчикВыбораФайла(ЭтотОбъект, "ИмяФайлаПротоколаОбмена", СтандартнаяОбработка, НастройкиДиалога); @@ -888,23 +883,40 @@ &НаСервере Процедура ЗагрузитьНастройкиРежимаОтладкиНаСервере() - ЗаписиПравилКонвертации = РегистрыСведений.ПравилаДляОбменаДанными.СоздатьНаборЗаписей(); - ЗаписиПравилКонвертации.Отбор.ВидПравил.Установить(Перечисления.ВидыПравилДляОбменаДанными.ПравилаКонвертацииОбъектов); - ЗаписиПравилКонвертации.Отбор.ИмяПланаОбмена.Установить(ИмяПланаОбмена); - ЗаписиПравилКонвертации.Прочитать(); - Если ЗаписиПравилКонвертации.Количество() = 0 Тогда - Возврат; - КонецЕсли; - ЗаписьПравил = ЗаписиПравилКонвертации[0]; - ЗаписьПравил.ИмяФайлаОбработкиДляОтладкиВыгрузки = ИмяФайлаОбработкиДляОтладкиВыгрузки; - ЗаписьПравил.ИмяФайлаОбработкиДляОтладкиЗагрузки = ИмяФайлаОбработкиДляОтладкиЗагрузки; - ЗаписьПравил.ИмяФайлаПротоколаОбмена = ИмяФайлаПротоколаОбмена; - ЗаписьПравил.НеОстанавливатьПоОшибке = НеОстанавливатьПоОшибке; - ЗаписьПравил.РежимОтладки = РежимОтладки; - ЗаписьПравил.РежимОтладкиВыгрузки = РежимОтладкиВыгрузки; - ЗаписьПравил.РежимОтладкиЗагрузки = РежимОтладкиЗагрузки; - ЗаписьПравил.РежимПротоколированияОбменаДанными = РежимПротоколированияОбменаДанными; - ЗаписиПравилКонвертации.Записать(Истина); + + НачатьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ПравилаДляОбменаДанными"); + ЭлементБлокировки.УстановитьЗначение("ИмяПланаОбмена", ИмяПланаОбмена); + ЭлементБлокировки.УстановитьЗначение("ВидПравил", Перечисления.ВидыПравилДляОбменаДанными.ПравилаКонвертацииОбъектов); + Блокировка.Заблокировать(); + + ЗаписиПравилКонвертации = РегистрыСведений.ПравилаДляОбменаДанными.СоздатьНаборЗаписей(); + ЗаписиПравилКонвертации.Отбор.ВидПравил.Установить(Перечисления.ВидыПравилДляОбменаДанными.ПравилаКонвертацииОбъектов); + ЗаписиПравилКонвертации.Отбор.ИмяПланаОбмена.Установить(ИмяПланаОбмена); + + ЗаписиПравилКонвертации.Прочитать(); + Если ЗаписиПравилКонвертации.Количество() > 0 Тогда + ЗаписьПравил = ЗаписиПравилКонвертации[0]; + ЗаписьПравил.ИмяФайлаОбработкиДляОтладкиВыгрузки = ИмяФайлаОбработкиДляОтладкиВыгрузки; + ЗаписьПравил.ИмяФайлаОбработкиДляОтладкиЗагрузки = ИмяФайлаОбработкиДляОтладкиЗагрузки; + ЗаписьПравил.ИмяФайлаПротоколаОбмена = ИмяФайлаПротоколаОбмена; + ЗаписьПравил.НеОстанавливатьПоОшибке = НеОстанавливатьПоОшибке; + ЗаписьПравил.РежимОтладки = РежимОтладки; + ЗаписьПравил.РежимОтладкиВыгрузки = РежимОтладкиВыгрузки; + ЗаписьПравил.РежимОтладкиЗагрузки = РежимОтладкиЗагрузки; + ЗаписьПравил.РежимПротоколированияОбменаДанными = РежимПротоколированияОбменаДанными; + + ЗаписиПравилКонвертации.Записать(Истина); + КонецЕсли; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + КонецПроцедуры #КонецОбласти diff --git a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаКонвертацииОбъектов/Module.bsl b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаКонвертацииОбъектов/Module.bsl index 35855fd3e..4010c00df 100644 --- a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаКонвертацииОбъектов/Module.bsl +++ b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаКонвертацииОбъектов/Module.bsl @@ -178,7 +178,7 @@ Процедура ВнешняяОбработкаДляОтладкиВыгрузкиНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) НастройкиДиалога = Новый Структура; - НастройкиДиалога.Вставить("Фильтр", НСтр("ru = 'Внешняя обработка(*.epf)'") + "|*.epf" ); + НастройкиДиалога.Вставить("Фильтр", НСтр("ru = 'Внешняя обработка (*.epf)'") + "|*.epf" ); ОбменДаннымиКлиент.ОбработчикВыбораФайла(Запись, "ИмяФайлаОбработкиДляОтладкиВыгрузки", СтандартнаяОбработка, НастройкиДиалога); @@ -188,7 +188,7 @@ Процедура ВнешняяОбработкаДляОтладкиЗагрузкиНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) НастройкиДиалога = Новый Структура; - НастройкиДиалога.Вставить("Фильтр", НСтр("ru = 'Внешняя обработка(*.epf)'") + "|*.epf" ); + НастройкиДиалога.Вставить("Фильтр", НСтр("ru = 'Внешняя обработка (*.epf)'") + "|*.epf" ); СтандартнаяОбработка = Ложь; ОбменДаннымиКлиент.ОбработчикВыбораФайла(Запись, "ИмяФайлаОбработкиДляОтладкиЗагрузки", СтандартнаяОбработка, НастройкиДиалога); @@ -213,7 +213,7 @@ Процедура ФайлПротоколаОбменаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) НастройкиДиалога = Новый Структура; - НастройкиДиалога.Вставить("Фильтр", НСтр("ru = 'Текстовый документ(*.txt)'")+ "|*.txt" ); + НастройкиДиалога.Вставить("Фильтр", НСтр("ru = 'Текстовый документ (*.txt)'")+ "|*.txt" ); НастройкиДиалога.Вставить("ПроверятьСуществованиеФайла", Ложь); СтандартнаяОбработка = Ложь; diff --git a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/СообщениеОНеудачномОбновлении/Form.form b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/СообщениеОНеудачномОбновлении/Form.form index d77a5559b..ada3900fe 100644 --- a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/СообщениеОНеудачномОбновлении/Form.form +++ b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/СообщениеОНеудачномОбновлении/Form.form @@ -51,7 +51,7 @@ <key>ru</key> <value>При выполнении правил регистрации для программы -"%1" +<b>%1</b> возникла ошибка: %2</value> diff --git a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/СообщениеОНеудачномОбновлении/Module.bsl b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/СообщениеОНеудачномОбновлении/Module.bsl index defb6394f..03e969ee3 100644 --- a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/СообщениеОНеудачномОбновлении/Module.bsl +++ b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/СообщениеОНеудачномОбновлении/Module.bsl @@ -11,7 +11,7 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - ИмяПланаОбмена = Параметры.ИмяПланаОбмена; + ИмяПланаОбмена = Параметры.ИмяПланаОбмена; СинонимПланаОбмена = Метаданные.ПланыОбмена[ИмяПланаОбмена].Синоним; ПравилаКонвертацииОбъектов = Перечисления.ВидыПравилДляОбменаДанными.ПравилаКонвертацииОбъектов; @@ -20,10 +20,10 @@ ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка,,, Параметры.ПодробноеПредставлениеОшибки); - СообщениеОбОшибке = Элементы.ТекстСообщенияОбОшибке.Заголовок; - СообщениеОбОшибке = СтрЗаменить(СообщениеОбОшибке, "%2", Параметры.КраткоеПредставлениеОшибки); - СообщениеОбОшибке = СтрЗаменитьСВыделением(СообщениеОбОшибке, "%1", СинонимПланаОбмена); - Элементы.ТекстСообщенияОбОшибке.Заголовок = СообщениеОбОшибке; + Элементы.ТекстСообщенияОбОшибке.Заголовок = СтроковыеФункции.ФорматированнаяСтрока( + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Элементы.ТекстСообщенияОбОшибке.Заголовок, + СинонимПланаОбмена, + Параметры.КраткоеПредставлениеОшибки)); ПравилаИзФайла = РегистрыСведений.ПравилаДляОбменаДанными.ИспользуютсяПравилаИзФайла(ИмяПланаОбмена, Истина); @@ -79,23 +79,4 @@ КонецПроцедуры -#КонецОбласти - -#Область СлужебныеПроцедурыИФункции - -&НаСервере -Функция СтрЗаменитьСВыделением(Строка, ПодстрокаПоиска, ПодстрокаЗамены) - - ПозицияНачала = СтрНайти(Строка, ПодстрокаПоиска); - - МассивСтроки = Новый Массив; - - МассивСтроки.Добавить(Лев(Строка, ПозицияНачала - 1)); - МассивСтроки.Добавить(Новый ФорматированнаяСтрока(ПодстрокаЗамены, Новый Шрифт(,,Истина))); - МассивСтроки.Добавить(Сред(Строка, ПозицияНачала + СтрДлина(ПодстрокаПоиска))); - - Возврат Новый ФорматированнаяСтрока(МассивСтроки); - -КонецФункции - #КонецОбласти \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ПредметыПапкиВзаимодействий/ManagerModule.bsl b/SSL/src/InformationRegisters/ПредметыПапкиВзаимодействий/ManagerModule.bsl index 05f6707d5..47166ca0c 100644 --- a/SSL/src/InformationRegisters/ПредметыПапкиВзаимодействий/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ПредметыПапкиВзаимодействий/ManagerModule.bsl @@ -96,7 +96,7 @@ |ГДЕ | ПредметыПапкиВзаимодействий.Взаимодействие = &Взаимодействие"; - Запрос.УстановитьПараметр("Взаимодействие",Взаимодействие); + Запрос.УстановитьПараметр("Взаимодействие", Взаимодействие); Результат = Запрос.Выполнить(); Если НЕ Результат.Пустой() Тогда @@ -141,6 +141,27 @@ КонецПроцедуры +Процедура ЗаблокироватьПредметыПапокВзаимодействий(Блокировка, Взаимодействия) Экспорт + + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ПредметыПапкиВзаимодействий"); + Если ТипЗнч(Взаимодействия) = Тип("Массив") Тогда + Для каждого ВзаимодействиеСсылка Из Взаимодействия Цикл + ЭлементБлокировки.УстановитьЗначение("Взаимодействие", ВзаимодействиеСсылка); + КонецЦикла + Иначе + ЭлементБлокировки.УстановитьЗначение("Взаимодействие", Взаимодействия); + КонецЕсли; + +КонецПроцедуры + +Процедура ЗаблокироватьПредметыПапок(Блокировка, ИсточникДанных, ИмяПолеИсточника) Экспорт + + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ПредметыПапкиВзаимодействий"); + ЭлементБлокировки.ИсточникДанных = ИсточникДанных; + ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Взаимодействие", ИмяПолеИсточника); + +КонецПроцедуры + #КонецОбласти #КонецЕсли diff --git a/SSL/src/InformationRegisters/ПредметыПапкиВзаимодействий/ПредметыПапкиВзаимодействий.mdo b/SSL/src/InformationRegisters/ПредметыПапкиВзаимодействий/ПредметыПапкиВзаимодействий.mdo index 0fbf2d060..c0c1d94ac 100644 --- a/SSL/src/InformationRegisters/ПредметыПапкиВзаимодействий/ПредметыПапкиВзаимодействий.mdo +++ b/SSL/src/InformationRegisters/ПредметыПапкиВзаимодействий/ПредметыПапкиВзаимодействий.mdo @@ -49,7 +49,6 @@ Managed - Use Предмет diff --git a/SSL/src/InformationRegisters/ПроцессыДляЗапуска/Forms/НастройкаОтложенногоСтартаПроцесса/Module.bsl b/SSL/src/InformationRegisters/ПроцессыДляЗапуска/Forms/НастройкаОтложенногоСтартаПроцесса/Module.bsl index 7d210aadc..ee6c1cc89 100644 --- a/SSL/src/InformationRegisters/ПроцессыДляЗапуска/Forms/НастройкаОтложенногоСтартаПроцесса/Module.bsl +++ b/SSL/src/InformationRegisters/ПроцессыДляЗапуска/Forms/НастройкаОтложенногоСтартаПроцесса/Module.bsl @@ -185,7 +185,7 @@ ПустаяДата = НачалоДня(ДатаОтложенногоСтарта); Для Инд = 1 По 48 Цикл - Элементы.ДатаОтложенногоСтартаВремя.СписокВыбора.Добавить(ПустаяДата, Формат(ПустаяДата, "ДФ=ЧЧ:мм")); + Элементы.ДатаОтложенногоСтартаВремя.СписокВыбора.Добавить(ПустаяДата, Формат(ПустаяДата, НСтр("ru = 'ДФ=ЧЧ:мм'"))); ПустаяДата = ПустаяДата + 1800; КонецЦикла; diff --git a/SSL/src/InformationRegisters/ПроцессыДляЗапуска/ManagerModule.bsl b/SSL/src/InformationRegisters/ПроцессыДляЗапуска/ManagerModule.bsl index 94a729e03..575699375 100644 --- a/SSL/src/InformationRegisters/ПроцессыДляЗапуска/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ПроцессыДляЗапуска/ManagerModule.bsl @@ -18,7 +18,7 @@ Процедура ЗарегистрироватьСтартПроцесса(Процесс) Экспорт Запись = СоздатьМенеджерЗаписи(); - Запись.БизнесПроцесс = Процесс; + Запись.Владелец = Процесс; Запись.Прочитать(); Если Не Запись.Выбран() Тогда @@ -37,7 +37,7 @@ Процедура ЗарегистрироватьОтменуСтарта(Процесс, ПричинаОтмены) Экспорт Запись = СоздатьМенеджерЗаписи(); - Запись.БизнесПроцесс = Процесс; + Запись.Владелец = Процесс; Запись.Прочитать(); Если Не Запись.Выбран() Тогда diff --git a/SSL/src/InformationRegisters/ПроцессыДляЗапуска/ПроцессыДляЗапуска.mdo b/SSL/src/InformationRegisters/ПроцессыДляЗапуска/ПроцессыДляЗапуска.mdo index 758ec2649..e50da56c2 100644 --- a/SSL/src/InformationRegisters/ПроцессыДляЗапуска/ПроцессыДляЗапуска.mdo +++ b/SSL/src/InformationRegisters/ПроцессыДляЗапуска/ПроцессыДляЗапуска.mdo @@ -99,10 +99,10 @@ - БизнесПроцесс + Владелец ru - Бизнес процесс + Владелец DefinedType.ОтложенныйБизнесПроцесс diff --git a/SSL/src/InformationRegisters/РазрешенияНаИспользованиеВнешнихРесурсов/ManagerModule.bsl b/SSL/src/InformationRegisters/РазрешенияНаИспользованиеВнешнихРесурсов/ManagerModule.bsl index 7a5dd8fe3..869ab7d6a 100644 --- a/SSL/src/InformationRegisters/РазрешенияНаИспользованиеВнешнихРесурсов/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/РазрешенияНаИспользованиеВнешнихРесурсов/ManagerModule.bsl @@ -16,7 +16,8 @@ // Параметры: // Разрешение - ОбъектXDTO. // -// Возвращаемое значение: Строка. +// Возвращаемое значение: +// Строка - . // Функция КлючРазрешения(Знач Разрешение) Экспорт diff --git a/SSL/src/InformationRegisters/РежимыПодключенияВнешнихМодулей/ManagerModule.bsl b/SSL/src/InformationRegisters/РежимыПодключенияВнешнихМодулей/ManagerModule.bsl index 5d66f930e..2a1c87157 100644 --- a/SSL/src/InformationRegisters/РежимыПодключенияВнешнихМодулей/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/РежимыПодключенияВнешнихМодулей/ManagerModule.bsl @@ -16,7 +16,8 @@ // ПрограммныйМодуль - ЛюбаяСсылка, ссылка, соответствующая программному модулю, для которого запрашиваются // режим подключения. // -// Возвращаемое значение: Строка - имя профиля безопасности, который должен использоваться для подключения +// Возвращаемое значение: +// Строка - имя профиля безопасности, который должен использоваться для подключения // внешнего модуля. Если для внешнего модуля не зарегистрирован режим подключения - возвращается Неопределено. // Функция РежимПодключенияВнешнегоМодуля(Знач ПрограммныйМодуль) Экспорт diff --git a/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Form.form b/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Form.form index 17ee18fc9..abd714a19 100644 --- a/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Form.form +++ b/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Form.form @@ -42,7 +42,6 @@ Left true - 30 true true false @@ -101,7 +100,6 @@ ChoiceProcessing УзелИнформационнойБазыОбработкаВыбора - 30 true true false @@ -154,7 +152,6 @@ Left true - 30 true true false @@ -1161,53 +1158,6 @@ true
    - - ОшибкиОбъектаXDTOПричинаПодробно - 758 - - <key>ru</key> - <value>Данные не удалось отправить по причине</value> - - true - true - - true - - - Items.ОшибкиОбъектаXDTO.CurrentData.Причина - - - ОшибкиОбъектаXDTOПричинаПодробноРасширеннаяПодсказка - 760 - Label - true - true - - Left - - - - ОшибкиОбъектаXDTOПричинаПодробноКонтекстноеМеню - 759 - true - - InputField - true - Enter - true - Left - true - - 4 - true - true - true - true - true - true - Normal - - true true @@ -2362,53 +2312,6 @@ true
    - - НепроведенныеДокументыПричинаПодробно - 170 - - <key>ru</key> - <value>Документ не удалось провести автоматически по причине</value> - - true - true - - true - - - Items.НепроведенныеДокументы.CurrentData.Причина - - - НепроведенныеДокументыПричинаПодробноExtendedTooltip - 402 - Label - true - true - - Left - - - - НепроведенныеДокументыПричинаПодробноКонтекстноеМеню - 171 - true - - InputField - true - Enter - true - Left - true - - 4 - true - true - true - true - true - true - Normal - - true true @@ -3416,53 +3319,6 @@ true - - НезаполненныеРеквизитыПричинаПодробно - 174 - - <key>ru</key> - <value>Данные не удалось записать по причине</value> - - true - true - - true - - - Items.НезаполненныеРеквизиты.CurrentData.Причина - - - НезаполненныеРеквизитыПричинаПодробноExtendedTooltip - 432 - Label - true - true - - Left - - - - НезаполненныеРеквизитыПричинаПодробноКонтекстноеМеню - 175 - true - - InputField - true - Enter - true - Left - true - - 4 - true - true - true - true - true - true - Normal - - true true @@ -4541,50 +4397,6 @@ true - - ПричинаКонфликта - 353 - true - true - - true - - - ПричинаКонфликта - - Top - - ПричинаКонфликтаExtendedTooltip - 465 - Label - true - true - - Left - - - - ПричинаКонфликтаКонтекстноеМеню - 354 - true - - InputField - true - Enter - true - Left - true - - 4 - true - true - true - true - true - true - Normal - - true true @@ -5625,53 +5437,6 @@ true - - НепринятыеПоДатеПричинаЗапретаПодробно - 225 - - <key>ru</key> - <value>Данные были отклонены из-за запрета</value> - - true - true - - true - - - Items.НепринятыеПоДате.CurrentData.ПричинаЗапрета - - - НепринятыеПоДатеПричинаЗапретаПодробноExtendedTooltip - 498 - Label - true - true - - Left - - - - НепринятыеПоДатеПричинаЗапретаПодробноКонтекстноеМеню - 226 - true - - InputField - true - Enter - true - Left - true - - 4 - true - true - true - true - true - true - Normal - - true true @@ -5709,7 +5474,7 @@ 761 <key>ru</key> - <value>При отправке данных в другую программу, обнаружены ошибки в код правил конвертации объектов. Необходимо либо обновится на актуальную версию программы, либо связаться с обслуживающей организацией.</value> + <value>При отправке данных в другую программу обнаружены ошибки в коде правил конвертации объектов. Необходимо обновится на актуальную версию программы, либо связаться с обслуживающей организацией.</value> true true @@ -6135,65 +5900,14 @@ true - - ОшибкиКодаОтправкаПричинаПодробно - 767 - - <key>ru</key> - <value>Данные не удалось отправить по причине</value> - - true - true - - true - - - Items.ОшибкиПриВыполненииКодаОбработчиковОтправки.CurrentData.Причина - - - ОшибкиКодаОтправкаПричинаПодробноРасширеннаяПодсказка - 769 - Label - true - true - - Left - - - - ОшибкиКодаОтправкаПричинаПодробноКонтекстноеМеню - 768 - true - - InputField - true - Enter - true - Left - true - - 4 - true - true - true - true - true - true - Normal - - true true <key>ru</key> - <value>Ошибки кода обработчиков при отправки</value> + <value>Ошибки кода обработчиков при отправке</value> - - ru - Ошибки при выполнении кода обработчиков отправки - СтраницаОшибкиПриВыполненииКодаОбработчиковОтправкиРасширеннаяПодсказка 536 @@ -6222,7 +5936,7 @@ 764 <key>ru</key> - <value>При получении данных из другой программы, обнаружены ошибки в код правил конвертации объектов. Необходимо либо обновится на актуальную версию программы, либо связаться с обслуживающей организацией.</value> + <value>При получении данных из другой программы обнаружены ошибки в коде правил конвертации объектов. Необходимо обновится на актуальную версию программы, или связаться с обслуживающей организацией.</value> true true @@ -6648,65 +6362,14 @@ true - - ОшибкиКодаПолучениеПричинаПодробно - 770 - - <key>ru</key> - <value>Данные не удалось получить по причине</value> - - true - true - - true - - - Items.ОшибкиПриВыполненииКодаОбработчиковПолучения.CurrentData.Причина - - - ОшибкиКодаПолучениеПричинаПодробноРасширеннаяПодсказка - 772 - Label - true - true - - Left - - - - ОшибкиКодаПолучениеПричинаПодробноКонтекстноеМеню - 771 - true - - InputField - true - Enter - true - Left - true - - 4 - true - true - true - true - true - true - Normal - - true true <key>ru</key> - <value>Ошибки кода обработчиков при получения</value> + <value>Ошибки кода обработчиков при получении</value> - - ru - Ошибки при выполнении кода обработчиков получения - СтраницаОшибкиПриВыполненииКодаОбработчиковПолученияРасширеннаяПодсказка 540 @@ -6756,6 +6419,555 @@ Auto + + ПанельПодробноеОписание + 823 + + СтраницаОшибкиXDTOПодробноеОписание + 825 + + ОшибкиОбъектаXDTOПричинаПодробно + 758 + + <key>ru</key> + <value>Данные не удалось отправить по причине</value> + + true + true + + true + + + Items.ОшибкиОбъектаXDTO.CurrentData.Причина + + + ОшибкиОбъектаXDTOПричинаПодробноРасширеннаяПодсказка + 760 + Label + true + true + + Left + + + + ОшибкиОбъектаXDTOПричинаПодробноКонтекстноеМеню + 759 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Страница ошибки XDTO подробное описание</value> + + + СтраницаОшибкиXDTOПодробноеОписаниеРасширеннаяПодсказка + 826 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + СтраницаНепроведенныеДокументыПодробноеОписание + 827 + + НепроведенныеДокументыПричинаПодробно + 170 + + <key>ru</key> + <value>Документ не удалось провести автоматически по причине</value> + + true + true + + true + + + Items.НепроведенныеДокументы.CurrentData.Причина + + + НепроведенныеДокументыПричинаПодробноExtendedTooltip + 402 + Label + true + true + + Left + + + + НепроведенныеДокументыПричинаПодробноКонтекстноеМеню + 171 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Страница непроведенные документы подробное описание</value> + + + СтраницаНепроведенныеДокументыПодробноеОписаниеРасширеннаяПодсказка + 828 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + СтраницаНезаполненныеРеквизитыПодробноеОписание + 829 + + НезаполненныеРеквизитыПричинаПодробно + 174 + + <key>ru</key> + <value>Данные не удалось записать по причине</value> + + true + true + + true + + + Items.НезаполненныеРеквизиты.CurrentData.Причина + + + НезаполненныеРеквизитыПричинаПодробноExtendedTooltip + 432 + Label + true + true + + Left + + + + НезаполненныеРеквизитыПричинаПодробноКонтекстноеМеню + 175 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Страница незаполненные реквизиты подробное описание</value> + + + СтраницаНезаполненныеРеквизитыПодробноеОписаниеРасширеннаяПодсказка + 830 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + СтраницаКоллизииПодробноеОписание + 831 + + ПричинаКонфликта + 353 + true + true + + true + + + ПричинаКонфликта + + Top + + ПричинаКонфликтаExtendedTooltip + 465 + Label + true + true + + Left + + + + ПричинаКонфликтаКонтекстноеМеню + 354 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Страница коллизии подробное описание</value> + + + СтраницаКоллизииПодробноеОписаниеРасширеннаяПодсказка + 832 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + СтраницаНепринятыеПоДатеЗапретаПодробноеОписание + 833 + + НепринятыеПоДатеПричинаЗапретаПодробно + 225 + + <key>ru</key> + <value>Данные были отклонены из-за запрета</value> + + true + true + + true + + + Items.НепринятыеПоДате.CurrentData.ПричинаЗапрета + + + НепринятыеПоДатеПричинаЗапретаПодробноExtendedTooltip + 498 + Label + true + true + + Left + + + + НепринятыеПоДатеПричинаЗапретаПодробноКонтекстноеМеню + 226 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Страница непринятые по дате запрета подробное описание</value> + + + СтраницаНепринятыеПоДатеЗапретаПодробноеОписаниеРасширеннаяПодсказка + 834 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + СтраницаОшибкиПриВыполненииКодаОбработчиковОтправкиПодробноеОписание + 835 + + ОшибкиКодаОтправкаПричинаПодробно + 767 + + <key>ru</key> + <value>Данные не удалось отправить по причине</value> + + true + true + + true + + + Items.ОшибкиПриВыполненииКодаОбработчиковОтправки.CurrentData.Причина + + + ОшибкиКодаОтправкаПричинаПодробноРасширеннаяПодсказка + 769 + Label + true + true + + Left + + + + ОшибкиКодаОтправкаПричинаПодробноКонтекстноеМеню + 768 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Страница ошибки при выполнении кода обработчиков отправки подробное описание</value> + + + СтраницаОшибкиПриВыполненииКодаОбработчиковОтправкиПодробноеОписаниеРасширеннаяПодсказка + 836 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + СтраницаОшибкиПриВыполненииКодаОбработчиковПолученияПодробноеОписание + 837 + + ОшибкиКодаПолучениеПричинаПодробно + 770 + + <key>ru</key> + <value>Данные не удалось получить по причине</value> + + true + true + + true + + + Items.ОшибкиПриВыполненииКодаОбработчиковПолучения.CurrentData.Причина + + + ОшибкиКодаПолучениеПричинаПодробноРасширеннаяПодсказка + 772 + Label + true + true + + Left + + + + ОшибкиКодаПолучениеПричинаПодробноКонтекстноеМеню + 771 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Страница ошибки при выполнении кода обработчиков получения подробное описание</value> + + + СтраницаОшибкиПриВыполненииКодаОбработчиковПолученияПодробноеОписаниеРасширеннаяПодсказка + 838 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + true + true + + true + + + <key>ru</key> + <value>Панель подробное описание</value> + + + ПанельПодробноеОписаниеРасширеннаяПодсказка + 824 + Label + true + true + + Left + + + Pages + + Auto + + ФормаКоманднаяПанель -1 @@ -6765,6 +6977,10 @@ NotificationProcessing ОбработкаОповещения + + OnOpen + ПриОткрытии + OnLoadDataFromSettingsAtServer ПриЗагрузкеДанныхИзНастроекНаСервере diff --git a/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Module.bsl b/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Module.bsl index 727deedfe..4289e96c2 100644 --- a/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Module.bsl +++ b/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Module.bsl @@ -53,6 +53,13 @@ КонецПроцедуры +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + ОбновитьОтображениеПодробногоОписанияПроблемы(); + +КонецПроцедуры + &НаКлиенте Процедура ПриЗакрытии(ЗавершениеРаботы) @@ -144,12 +151,14 @@ &НаКлиенте Процедура РезультатыОбменаДаннымиПриСменеСтраницы(Элемент, ТекущаяСтраница) - Если Элемент.ПодчиненныеЭлементы.СтраницаКоллизии = ТекущаяСтраница Тогда + Если ТекущаяСтраница = Элементы.СтраницаКоллизии Тогда Элементы.СтрокаПоиска.Доступность = Ложь; Иначе Элементы.СтрокаПоиска.Доступность = Истина; КонецЕсли; + ОбновитьОтображениеПодробногоОписанияПроблемы(); + КонецПроцедуры #КонецОбласти @@ -559,6 +568,13 @@ #Область СлужебныеПроцедурыИФункции +&НаКлиенте +Процедура ОбновитьОтображениеПодробногоОписанияПроблемы() + + Элементы.ПанельПодробноеОписание.ТекущаяСтраница = Элементы[Элементы.РезультатыОбменаДанными.ТекущаяСтраница.Имя + "ПодробноеОписание"]; + +КонецПроцедуры + &НаСервере Функция ПодготовитьОтборыЖурналаРегистрации(); @@ -1209,13 +1225,13 @@ &НаСервере Процедура ОбновитьЗаголовкиСтраниц() - УстановитьЗаголовокСтраницы(Элементы.СтраницаНепроведенныеДокументы, НСтр("ru= 'Непроведенные документы'"), КоличествоНепроведенныхДокументов()); - УстановитьЗаголовокСтраницы(Элементы.СтраницаНезаполненныеРеквизиты, НСтр("ru= 'Незаполненные реквизиты'"), КоличествоНезаполненныхРеквизитов()); - УстановитьЗаголовокСтраницы(Элементы.ОшибкиОбъектаXDTO, НСтр("ru= 'Ошибки проверки конвертируемых объектов'"), КоличествоОшибокXDTO()); + УстановитьЗаголовокСтраницы(Элементы.СтраницаНепроведенныеДокументы, НСтр("ru = 'Непроведенные документы'"), КоличествоНепроведенныхДокументов()); + УстановитьЗаголовокСтраницы(Элементы.СтраницаНезаполненныеРеквизиты, НСтр("ru = 'Незаполненные реквизиты'"), КоличествоНезаполненныхРеквизитов()); + УстановитьЗаголовокСтраницы(Элементы.СтраницаОшибкиXDTO, НСтр("ru = 'Ошибки проверки конвертируемых объектов'"), КоличествоОшибокXDTO()); Если ИспользуетсяВерсионирование Тогда - УстановитьЗаголовокСтраницы(Элементы.СтраницаКоллизии, НСтр("ru= 'Конфликты'"), КоличествоКоллизий()); - УстановитьЗаголовокСтраницы(Элементы.СтраницаНепринятыеПоДатеЗапрета, НСтр("ru= 'Непринятые по дате запрета'"), КоличествоНепринятых()); + УстановитьЗаголовокСтраницы(Элементы.СтраницаКоллизии, НСтр("ru = 'Конфликты'"), КоличествоКоллизий()); + УстановитьЗаголовокСтраницы(Элементы.СтраницаНепринятыеПоДатеЗапрета, НСтр("ru = 'Непринятые по дате запрета'"), КоличествоНепринятых()); КонецЕсли; КонецПроцедуры diff --git a/SSL/src/InformationRegisters/РезультатыОбменаДанными/ManagerModule.bsl b/SSL/src/InformationRegisters/РезультатыОбменаДанными/ManagerModule.bsl index 26b32b1e6..d6c4f6e16 100644 --- a/SSL/src/InformationRegisters/РезультатыОбменаДанными/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/РезультатыОбменаДанными/ManagerModule.bsl @@ -30,11 +30,15 @@ Возврат; КонецЕсли; + Если МетаданныеОбъекта.РасширениеКонфигурации() <> Неопределено Тогда + Возврат; + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + Если ОбменДаннымиПовтИсп.ИспользуемыеПланыОбмена().Количество() > 0 И (БезопасныйРежим() = Ложь Или Пользователи.ЭтоПолноправныйПользователь()) Тогда - УстановитьПривилегированныйРежим(Истина); - СсылкаНаИсточник = Источник.Ссылка; НачатьТранзакцию(); @@ -91,6 +95,10 @@ Ссылка = Неопределено; ЗначенияОтборовНезависимогоРегистра = Неопределено; + Если МетаданныеОбъекта.РасширениеКонфигурации() <> Неопределено Тогда + Возврат; + КонецЕсли; + Если ОбщегоНазначения.ЭтоОбъектСсылочногоТипа(МетаданныеОбъекта) Тогда Ссылка = ПроблемныйОбъект; ИначеЕсли ОбщегоНазначения.ЭтоРегистр(МетаданныеОбъекта) Тогда diff --git a/SSL/src/InformationRegisters/РезультатыПроверкиУчета/РезультатыПроверкиУчета.mdo b/SSL/src/InformationRegisters/РезультатыПроверкиУчета/РезультатыПроверкиУчета.mdo index 5e9e0f23e..bd7f25942 100644 --- a/SSL/src/InformationRegisters/РезультатыПроверкиУчета/РезультатыПроверкиУчета.mdo +++ b/SSL/src/InformationRegisters/РезультатыПроверкиУчета/РезультатыПроверкиУчета.mdo @@ -193,7 +193,14 @@ Проблемный объект - AnyRef + ExchangePlanRef + BusinessProcessRef + DocumentRef + ChartOfCalculationTypesRef + TaskRef + ChartOfCharacteristicTypesRef + ChartOfAccountsRef + CatalogRef ru diff --git a/SSL/src/InformationRegisters/СоставыГруппПользователей/Forms/ФормаЗаписи/Form.form b/SSL/src/InformationRegisters/СоставыГруппПользователей/Forms/ФормаЗаписи/Form.form index cce5b1549..8542f7809 100644 --- a/SSL/src/InformationRegisters/СоставыГруппПользователей/Forms/ФормаЗаписи/Form.form +++ b/SSL/src/InformationRegisters/СоставыГруппПользователей/Forms/ФормаЗаписи/Form.form @@ -205,5 +205,14 @@
    - + + + AfterWriteAtServer + ПослеЗаписиНаСервере + + + OnReadAtServer + ПриЧтенииНаСервере + + diff --git a/SSL/src/InformationRegisters/СоставыГруппПользователей/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/СоставыГруппПользователей/Forms/ФормаЗаписи/Module.bsl index 21e1a9dc6..1808e2168 100644 --- a/SSL/src/InformationRegisters/СоставыГруппПользователей/Forms/ФормаЗаписи/Module.bsl +++ b/SSL/src/InformationRegisters/СоставыГруппПользователей/Forms/ФормаЗаписи/Module.bsl @@ -15,6 +15,30 @@ КонецПроцедуры +&НаСервере +Процедура ПриЧтенииНаСервере(ТекущийОбъект) + + // СтандартныеПодсистемы.УправлениеДоступом + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); + МодульУправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); + КонецЕсли; + // Конец СтандартныеПодсистемы.УправлениеДоступом + +КонецПроцедуры + +&НаСервере +Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи) + + // СтандартныеПодсистемы.УправлениеДоступом + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); + МодульУправлениеДоступом.ПослеЗаписиНаСервере(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи); + КонецЕсли; + // Конец СтандартныеПодсистемы.УправлениеДоступом + +КонецПроцедуры + #КонецОбласти #Область ОбработчикиКомандФормы diff --git a/SSL/src/InformationRegisters/СоставыГруппПользователей/ManagerModule.bsl b/SSL/src/InformationRegisters/СоставыГруппПользователей/ManagerModule.bsl index 218cdb603..4eb91ba29 100644 --- a/SSL/src/InformationRegisters/СоставыГруппПользователей/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/СоставыГруппПользователей/ManagerModule.bsl @@ -35,9 +35,9 @@ #Область СлужебныеПроцедурыИФункции // Процедура обновляет все данные регистра. -// +// // Параметры: -// ЕстьИзменения - Булево (возвращаемое значение) - если производилась запись, +// ЕстьИзменения - Булево - (возвращаемое значение) - если производилась запись, // устанавливается Истина, иначе не изменяется. // Процедура ОбновитьДанныеРегистра(ЕстьИзменения = Неопределено) Экспорт diff --git a/SSL/src/InformationRegisters/СостоянияКонтактовВзаимодействий/ManagerModule.bsl b/SSL/src/InformationRegisters/СостоянияКонтактовВзаимодействий/ManagerModule.bsl index 04d4e8efa..8bfaee5c2 100644 --- a/SSL/src/InformationRegisters/СостоянияКонтактовВзаимодействий/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/СостоянияКонтактовВзаимодействий/ManagerModule.bsl @@ -36,9 +36,8 @@ // КоличествоНеРассмотрено - Число - количество не рассмотренных взаимодействий для контакта. // ДатаПоследнегоВзаимодействия - ДатаВремя - дата последнего взаимодействия по контакту. // -Процедура ВыполнитьЗаписьВРегистр(Контакт, - КоличествоНеРассмотрено = Неопределено, - ДатаПоследнегоВзаимодействия = Неопределено) Экспорт +Процедура ВыполнитьЗаписьВРегистр(Контакт, КоличествоНеРассмотрено = Неопределено, + ДатаПоследнегоВзаимодействия = Неопределено) Экспорт УстановитьПривилегированныйРежим(Истина); @@ -59,7 +58,7 @@ |ГДЕ | СостоянияКонтактовВзаимодействий.Контакт = &Контакт"; - Запрос.УстановитьПараметр("Контакт",Контакт); + Запрос.УстановитьПараметр("Контакт", Контакт); Результат = Запрос.Выполнить(); Если НЕ Результат.Пустой() Тогда @@ -89,6 +88,14 @@ КонецПроцедуры +Процедура ЗаблокироватьСостоянияКонтактовВзаимодействий(Блокировка, ИсточникДанных, ИмяПолеИсточника) Экспорт + + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.СостоянияКонтактовВзаимодействий"); + ЭлементБлокировки.ИсточникДанных = ИсточникДанных; + ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Контакт", ИмяПолеИсточника); + +КонецПроцедуры + #КонецОбласти #КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/СостоянияПапокПисем/ManagerModule.bsl b/SSL/src/InformationRegisters/СостоянияПапокПисем/ManagerModule.bsl index 46383fd9e..2cfbb4fca 100644 --- a/SSL/src/InformationRegisters/СостоянияПапокПисем/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/СостоянияПапокПисем/ManagerModule.bsl @@ -46,6 +46,14 @@ КонецПроцедуры +Процедура ЗаблокироватьСостоянияПапокПисем(Блокировка, ИсточникДанных, ИмяПолеИсточника) Экспорт + + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.СостоянияПапокПисем"); + ЭлементБлокировки.ИсточникДанных = ИсточникДанных; + ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Папка", ИмяПолеИсточника); + +КонецПроцедуры + #КонецОбласти #КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/СостоянияПредметовВзаимодействий/ManagerModule.bsl b/SSL/src/InformationRegisters/СостоянияПредметовВзаимодействий/ManagerModule.bsl index 3c6325ce9..0ebbe68da 100644 --- a/SSL/src/InformationRegisters/СостоянияПредметовВзаимодействий/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/СостоянияПредметовВзаимодействий/ManagerModule.bsl @@ -98,6 +98,14 @@ КонецПроцедуры +Процедура ЗаблокироватьСостоянияПредметовВзаимодействий(Блокировка, ИсточникДанных, ИмяПолеИсточника) Экспорт + + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.СостоянияПредметовВзаимодействий"); + ЭлементБлокировки.ИсточникДанных = ИсточникДанных; + ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Предмет", ИмяПолеИсточника); + +КонецПроцедуры + #КонецОбласти #КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/СостоянияПроверокВеденияУчета/СостоянияПроверокВеденияУчета.mdo b/SSL/src/InformationRegisters/СостоянияПроверокВеденияУчета/СостоянияПроверокВеденияУчета.mdo new file mode 100644 index 000000000..eeeabb252 --- /dev/null +++ b/SSL/src/InformationRegisters/СостоянияПроверокВеденияУчета/СостоянияПроверокВеденияУчета.mdo @@ -0,0 +1,86 @@ + + + + + + + + + + + + СостоянияПроверокВеденияУчета + + ru + Состояния проверок ведения учета + + InDialog + + Use + Active + + Use + + + + + Use + LineNumber + + Use + + + + + Use + Recorder + + Use + + + + + Use + Period + + ShowError + Use + + + + Managed + + ПоследнийЗапуск + + ru + Последний запуск + + + Date + + + + + Use + Use + + + + Проверка + + ru + Проверка + + + CatalogRef.ПравилаПроверкиУчета + + + + Use + Use + true + + true + true + + diff --git a/SSL/src/InformationRegisters/СтатистикаКонфигурации/Forms/ФормаСписка/Module.bsl b/SSL/src/InformationRegisters/СтатистикаКонфигурации/Forms/ФормаСписка/Module.bsl index 9fbc7e97e..8c9246ae6 100644 --- a/SSL/src/InformationRegisters/СтатистикаКонфигурации/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/InformationRegisters/СтатистикаКонфигурации/Forms/ФормаСписка/Module.bsl @@ -10,8 +10,8 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - Список.Параметры.УстановитьЗначениеПараметра("Метаданные", НСтр("ru='Метаданные'")); - Список.Параметры.УстановитьЗначениеПараметра("ФункциональнаяОпция", НСтр("ru='Функциональная опция'")); + Список.Параметры.УстановитьЗначениеПараметра("Метаданные", НСтр("ru = 'Метаданные'")); + Список.Параметры.УстановитьЗначениеПараметра("ФункциональнаяОпция", НСтр("ru = 'Функциональная опция'")); КонецПроцедуры #КонецОбласти diff --git a/SSL/src/InformationRegisters/СтатистикаКонфигурации/ManagerModule.bsl b/SSL/src/InformationRegisters/СтатистикаКонфигурации/ManagerModule.bsl index 171b74706..ec118c601 100644 --- a/SSL/src/InformationRegisters/СтатистикаКонфигурации/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/СтатистикаКонфигурации/ManagerModule.bsl @@ -384,10 +384,10 @@ Исключение Инфо = ИнформацияОбОшибке(); - ЗаписьЖурналаРегистрации(НСтр("ru='СтатистикаКонфигурации'", ОбщегоНазначения.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(НСтр("ru = 'СтатистикаКонфигурации'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, ,, - НСтр("ru='Не удалось установить разделение сеанса. Область данных'") + " = " + Формат(Выборка.ОбластьДанных, "ЧГ=0") + НСтр("ru = 'Не удалось установить разделение сеанса. Область данных'") + " = " + Формат(Выборка.ОбластьДанных, "ЧГ=0") +Символы.ПС + ПодробноеПредставлениеОшибки(Инфо)); Если БазоваяФункциональностьВМоделиСервисаСуществует Тогда diff --git a/SSL/src/InformationRegisters/СтатусыСинхронизацииФайловСОблачнымСервисом/СтатусыСинхронизацииФайловСОблачнымСервисом.mdo b/SSL/src/InformationRegisters/СтатусыСинхронизацииФайловСОблачнымСервисом/СтатусыСинхронизацииФайловСОблачнымСервисом.mdo index 06b8b8dd1..dbe622629 100644 --- a/SSL/src/InformationRegisters/СтатусыСинхронизацииФайловСОблачнымСервисом/СтатусыСинхронизацииФайловСОблачнымСервисом.mdo +++ b/SSL/src/InformationRegisters/СтатусыСинхронизацииФайловСОблачнымСервисом/СтатусыСинхронизацииФайловСОблачнымСервисом.mdo @@ -131,6 +131,7 @@ ru Владелец файла + АПК:1330 невозможно объединить 2 определяемых типа BusinessProcessRef DocumentRef diff --git a/SSL/src/InformationRegisters/ТаблицыГруппДоступа/ManagerModule.bsl b/SSL/src/InformationRegisters/ТаблицыГруппДоступа/ManagerModule.bsl index 1c77752a1..444a5d20f 100644 --- a/SSL/src/InformationRegisters/ТаблицыГруппДоступа/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ТаблицыГруппДоступа/ManagerModule.bsl @@ -48,7 +48,7 @@ // Процедура обновляет данные регистра при изменении состава ролей профилей и // изменении профилей у групп доступа. -// +// // Параметры: // ГруппыДоступа - СправочникСсылка.ГруппыДоступа. // - Массив значений указанного выше типа. @@ -58,7 +58,7 @@ // - Массив значений указанного выше типа. // - Неопределено - без отбора. // -// ЕстьИзменения - Булево (возвращаемое значение) - если производилась запись, +// ЕстьИзменения - Булево - (возвращаемое значение) - если производилась запись, // устанавливается Истина, иначе не изменяется. // Процедура ОбновитьДанныеРегистра(ГруппыДоступа = Неопределено, diff --git a/SSL/src/InformationRegisters/ТаблицыГруппДоступа/ТаблицыГруппДоступа.mdo b/SSL/src/InformationRegisters/ТаблицыГруппДоступа/ТаблицыГруппДоступа.mdo index 221ae55d8..5b073f168 100644 --- a/SSL/src/InformationRegisters/ТаблицыГруппДоступа/ТаблицыГруппДоступа.mdo +++ b/SSL/src/InformationRegisters/ТаблицыГруппДоступа/ТаблицыГруппДоступа.mdo @@ -148,6 +148,7 @@ ru Тип таблицы + АПК:1330 - №728.2.1 Допустимо использование универсального ссылочного типа, так как это универсальный механизм и только для RLS в формате БСП 2.х (устарел) ExchangePlanRef BusinessProcessRef diff --git a/SSL/src/Reports/АнализЖурналаРегистрации/ManagerModule.bsl b/SSL/src/Reports/АнализЖурналаРегистрации/ManagerModule.bsl index 37acf3f9d..165ca796b 100644 --- a/SSL/src/Reports/АнализЖурналаРегистрации/ManagerModule.bsl +++ b/SSL/src/Reports/АнализЖурналаРегистрации/ManagerModule.bsl @@ -603,7 +603,7 @@ КонецФункции Функция СтрокаНеделяГода(ДатаГода) - Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='Неделя %1'"), НеделяГода(ДатаГода)); + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Неделя %1'"), НеделяГода(ДатаГода)); КонецФункции Процедура СформироватьСтрокуОдновременноСессий(ОдновременноСессий, МаксМассивПользователей, @@ -692,9 +692,9 @@ Или Не ВыводитьОтбор.Использование Тогда Область = Макет.ПолучитьОбласть("Отбор"); Если МинимальнаяПродолжительностьСеансовРегламентныхЗаданий > 0 Тогда - РежимОтображенияИнтервалов = НСтр("ru = 'Отключено отображение сеансов задания с нулевой продолжительностью'"); + РежимОтображенияИнтервалов = НСтр("ru = 'Отключено отображение интервалов с нулевой продолжительностью'"); Иначе - РежимОтображенияИнтервалов = НСтр("ru = 'Включено отображение сеансов задания с нулевой продолжительностью'"); + РежимОтображенияИнтервалов = НСтр("ru = 'Включено отображение интервалов с нулевой продолжительностью'"); КонецЕсли; Область.Параметры.ДатаНачала = ДатаНачала; Область.Параметры.ДатаОкончания = ДатаОкончания; @@ -1264,9 +1264,9 @@ Область.Параметры.ДатаНачала = ДатаНачала; Область.Параметры.ДатаОкончания = ДатаОкончания; Если Расшифровка.Получить(8) = 0 Тогда - РежимОтображенияИнтервалов = НСтр("ru = 'Включено отображение сеансов задания с нулевой продолжительностью'"); + РежимОтображенияИнтервалов = НСтр("ru = 'Включено отображение интервалов с нулевой продолжительностью'"); Иначе - РежимОтображенияИнтервалов = НСтр("ru = 'Отключено отображение сеансов задания с нулевой продолжительностью'"); + РежимОтображенияИнтервалов = НСтр("ru = 'Отключено отображение интервалов с нулевой продолжительностью'"); КонецЕсли; Область.Параметры.РежимОтображенияСеансов = РежимОтображенияИнтервалов; Отчет.Вывести(Область); @@ -1339,27 +1339,6 @@ // ЦветаФона - массив цветов для интервалов фона. // Процедура ЦветаДиаграммыГанта(ДатаНачала, ДиаграммаГанта, ОдновременноСессий, ЦветаФона) - // Цвета интервалов диаграммы - ЦветаИнтервалов = Новый Массив; - ЦветНачало = 153; - ЦветКонец = 253; - Пока ЦветНачало <= ЦветКонец Цикл - ЦветаИнтервалов.Добавить(ЦветНачало); - ЦветНачало = ЦветНачало + 10; - КонецЦикла; - - Индекс = 0; - Для Каждого ТочкаДиаграммыГанта Из ДиаграммаГанта.Точки Цикл - ТочкаДиаграммыГанта.ПриоритетЦвета = Истина; - СинийЦвет = ЦветаИнтервалов.Получить(Индекс); - ЦветСерии = Новый Цвет(204,204,СинийЦвет); - ТочкаДиаграммыГанта.Цвет = ЦветСерии; - Индекс = Индекс + 1; - Если Индекс = 11 Тогда - Индекс = 0; - КонецЕсли; - КонецЦикла; - // Добавляем цвета интервалов фона. ТекущееКоличествоСессий = 0; ИндексЦвета = 3; diff --git a/SSL/src/Reports/АнализЖурналаРегистрации/Templates/ПродолжительностьРаботыРегламентныхЗаданий/Template.mxlx b/SSL/src/Reports/АнализЖурналаРегистрации/Templates/ПродолжительностьРаботыРегламентныхЗаданий/Template.mxlx index 612caee68..bf728979e 100644 --- a/SSL/src/Reports/АнализЖурналаРегистрации/Templates/ПродолжительностьРаботыРегламентныхЗаданий/Template.mxlx +++ b/SSL/src/Reports/АнализЖурналаРегистрации/Templates/ПродолжительностьРаботыРегламентныхЗаданий/Template.mxlx @@ -2826,9 +2826,9 @@ style:FormTextColor style:FormTextColor style:FormTextColor - - - + + + true true true @@ -3000,7 +3000,7 @@ 1 true 2016-07-01T00:00:00 - 2016-07-10T20:59:59 + 2016-07-10T19:59:59 2016-07-01T00:00:00 Gradient 3 @@ -3081,8 +3081,8 @@ Rows 13 21 - -1 - -1 + 0 + 0 @@ -3095,8 +3095,8 @@ Rows 4 6 - -1 - -1 + 0 + 0 @@ -3105,8 +3105,8 @@ Rows 11 12 - -1 - -1 + 0 + 0 @@ -3115,8 +3115,8 @@ Rows 10 10 - -1 - -1 + 0 + 0 @@ -3145,8 +3145,8 @@ Rows 0 1 - -1 - -1 + 0 + 0 @@ -3155,8 +3155,8 @@ Rows 8 8 - -1 - -1 + 0 + 0 diff --git a/SSL/src/Reports/АнализОпроса/Forms/РасшифровкаТабличныхВопросов/Module.bsl b/SSL/src/Reports/АнализОпроса/Forms/РасшифровкаТабличныхВопросов/Module.bsl index 53deccb7f..ec53cff0b 100644 --- a/SSL/src/Reports/АнализОпроса/Forms/РасшифровкаТабличныхВопросов/Module.bsl +++ b/SSL/src/Reports/АнализОпроса/Forms/РасшифровкаТабличныхВопросов/Module.bsl @@ -347,7 +347,7 @@ ПредопределенныеОтветы.Загрузить(РеквизитыВопросШаблона.ПредопределенныеОтветы.Выгрузить()); ПолучитьФормулировкиЭлементарныхВопросов(ФормулировкиЭлементарныхВопросов); - Заголовок = НСтр("ru='Ответы на вопрос №'") + " " + ПолныйКод + " " + НСтр("ru='опроса'") + " " + НаименованиеОпроса + " " + НСтр("ru='от'") + " " + Формат(ДатаОпроса,"ДЛФ=D"); + Заголовок = НСтр("ru = 'Ответы на вопрос №'") + " " + ПолныйКод + " " + НСтр("ru = 'опроса'") + " " + НаименованиеОпроса + " " + НСтр("ru = 'от'") + " " + Формат(ДатаОпроса,"ДЛФ=D"); Возврат Ложь; diff --git a/SSL/src/Reports/АнализОпроса/ObjectModule.bsl b/SSL/src/Reports/АнализОпроса/ObjectModule.bsl index 2fbdd8131..87935f739 100644 --- a/SSL/src/Reports/АнализОпроса/ObjectModule.bsl +++ b/SSL/src/Reports/АнализОпроса/ObjectModule.bsl @@ -54,7 +54,7 @@ Область = Макет.ПолучитьОбласть("Заголовок"); Область.Параметры.Заголовок = ШаблонАнкеты.Заголовок; - Область.Параметры.Опрос = ПолучитьПредставлениеОпросаДляЗаголовка(РеквизитыОпрос); + Область.Параметры.Опрос = ПредставлениеОпросаДляЗаголовка(РеквизитыОпрос); ТаблицаОтчета.Вывести(Область,1); Область = Макет.ПолучитьОбласть("ПустаяСтрока"); @@ -508,7 +508,7 @@ Если СтрокаДерева.Строки[0].ТипОтвета = Перечисления.ТипыОтветовНаВопрос.Булево Тогда Область = Макет.ПолучитьОбласть("ВариантыОтветов"); - Область.Параметры.ВариантОтвета = НСтр("ru='Да'"); + Область.Параметры.ВариантОтвета = НСтр("ru = 'Да'"); НайденнаяСтрока = СтрокаДерева.Строки.Найти(Истина,"ВариантОтвета"); Если НайденнаяСтрока <> Неопределено Тогда Область.Параметры.Значение = НайденнаяСтрока.Количество; @@ -517,7 +517,7 @@ ТаблицаОтчета.Вывести(Область); Область = Макет.ПолучитьОбласть("ВариантыОтветов"); - Область.Параметры.ВариантОтвета = НСтр("ru='Нет'"); + Область.Параметры.ВариантОтвета = НСтр("ru = 'Нет'"); НайденнаяСтрока = СтрокаДерева.Строки.Найти(ЛОЖЬ,"ВариантОтвета"); Если НайденнаяСтрока <> Неопределено Тогда Область.Параметры.Значение = НайденнаяСтрока.Количество; @@ -949,7 +949,7 @@ Область = Макет.ПолучитьОбласть("Заголовок"); Область.Параметры.Заголовок = РеквизитыОпрос.ШаблонАнкеты.Заголовок; - Область.Параметры.Опрос = ПолучитьПредставлениеОпросаДляЗаголовка(РеквизитыОпрос); + Область.Параметры.Опрос = ПредставлениеОпросаДляЗаголовка(РеквизитыОпрос); ТаблицаОтчета.Вывести(Область,1); ВыборкаОбщиеИтоги = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); @@ -1133,24 +1133,29 @@ #Область Прочее // Формирует представление опроса для заголовка отчета. -Функция ПолучитьПредставлениеОпросаДляЗаголовка(РеквизитыОпрос) +Функция ПредставлениеОпросаДляЗаголовка(РеквизитыОпрос) - ПредставлениеОпросаДляЗаголовка = НСтр("ru='Опрос'") + " "; - Если РеквизитыОпрос.ДатаНачала <> Дата(1,1,1) ИЛИ РеквизитыОпрос.ДатаОкончания <> Дата(1,1,1) Тогда - ПредставлениеОпросаДляЗаголовка = ПредставлениеОпросаДляЗаголовка + НСтр("ru='проводился в период'") + " "; - КонецЕсли; - - Если РеквизитыОпрос.ДатаНачала <> Дата(1,1,1) Тогда - ПредставлениеОпросаДляЗаголовка = ПредставлениеОпросаДляЗаголовка + НСтр("ru='с'") + " " + Формат(РеквизитыОпрос.ДатаНачала,"ДФ=dd.MM.yy") + " "; - КонецЕсли; - - Если РеквизитыОпрос.ДатаОкончания <> Дата(1,1,1) Тогда - ПредставлениеОпросаДляЗаголовка = ПредставлениеОпросаДляЗаголовка + НСтр("ru = 'по'") + " " + Формат(РеквизитыОпрос.ДатаОкончания,"ДФ=dd.MM.yy")+ " "; + Если РеквизитыОпрос.ДатаНачала <> Дата(1, 1, 1) И РеквизитыОпрос.ДатаОкончания <> Дата(1, 1, 1) Тогда + Результат = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Опрос проводился в период с %1 по %2 на основании документа %3.'"), + Формат(РеквизитыОпрос.ДатаНачала, "ДЛФ=ДД"), Формат(РеквизитыОпрос.ДатаОкончания, "ДЛФ=ДД"), + РеквизитыОпрос.Представление); + ИначеЕсли РеквизитыОпрос.ДатаНачала <> Дата(1, 1, 1) Тогда + Результат = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Опрос проводился в период с %1 на основании документа %2.'"), + Формат(РеквизитыОпрос.ДатаНачала, "ДЛФ=ДД"), + РеквизитыОпрос.Представление); + ИначеЕсли РеквизитыОпрос.ДатаОкончания <> Дата(1, 1, 1) Тогда + Результат = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Опрос проводился в период по %1 на основании документа %2.'"), + Формат(РеквизитыОпрос.ДатаОкончания, "ДЛФ=ДД"), + РеквизитыОпрос.Представление); + Иначе + Результат = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Опрос на основании документа %1.'"), + РеквизитыОпрос.Представление); КонецЕсли; - - ПредставлениеОпросаДляЗаголовка = ПредставлениеОпросаДляЗаголовка + НСтр("ru = 'на основании документа'") + " " + РеквизитыОпрос.Представление + "."; - - Возврат ПредставлениеОпросаДляЗаголовка; + Возврат Результат; КонецФункции diff --git a/SSL/src/Reports/АналитическийОтчетПоАнкетированию/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs b/SSL/src/Reports/АналитическийОтчетПоАнкетированию/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs index 501c708cd..1d1d752d9 100644 --- a/SSL/src/Reports/АналитическийОтчетПоАнкетированию/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs +++ b/SSL/src/Reports/АналитическийОтчетПоАнкетированию/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs @@ -76,14 +76,14 @@ ИсточникДанных1 ВЫБРАТЬ - ОтветыНаВопросыАнкет.Анкета, - ОтветыНаВопросыАнкет.Вопрос, - ОтветыНаВопросыАнкет.НомерЯчейки, - ОтветыНаВопросыАнкет.Ответ, + ОтветыНаВопросыАнкет.Анкета КАК Анкета, + ОтветыНаВопросыАнкет.Вопрос КАК Вопрос, + ОтветыНаВопросыАнкет.НомерЯчейки КАК НомерЯчейки, + ОтветыНаВопросыАнкет.Ответ КАК Ответ, ОтветыНаВопросыАнкет.ЭлементарныйВопрос КАК ЭлементарныйВопросДанныеРегистра, - ОтветыНаВопросыАнкет.ОткрытыйОтвет, - ВопросыШаблонаАнкеты.ТипВопроса, - ВопросыШаблонаАнкеты.ТипТабличногоВопроса + ОтветыНаВопросыАнкет.ОткрытыйОтвет КАК ОткрытыйОтвет, + ВопросыШаблонаАнкеты.ТипВопроса КАК ТипВопроса, + ВопросыШаблонаАнкеты.ТипТабличногоВопроса КАК ТипТабличногоВопроса ПОМЕСТИТЬ ДанныеРегистра ИЗ РегистрСведений.ОтветыНаВопросыАнкет КАК ОтветыНаВопросыАнкет @@ -95,9 +95,9 @@ ВЫБРАТЬ ДанныеРегистра.Анкета КАК Анкета, ДанныеРегистра.Вопрос КАК Вопрос, - ДанныеРегистра.Ответ, - ДанныеРегистра.ОткрытыйОтвет, - ДанныеРегистра.ЭлементарныйВопросДанныеРегистра + ДанныеРегистра.Ответ КАК Ответ, + ДанныеРегистра.ОткрытыйОтвет КАК ОткрытыйОтвет, + ДанныеРегистра.ЭлементарныйВопросДанныеРегистра КАК ЭлементарныйВопросДанныеРегистра ПОМЕСТИТЬ ПростыеВопросы ИЗ ДанныеРегистра КАК ДанныеРегистра @@ -110,7 +110,7 @@ ДанныеРегистра.Анкета КАК Анкета, ДанныеРегистра.Вопрос КАК Вопрос, ДанныеРегистра.НомерЯчейки КАК Аналитика1, - ДанныеРегистра.Ответ, + ДанныеРегистра.Ответ КАК Ответ, ДанныеРегистра.ЭлементарныйВопросДанныеРегистра КАК Аналитика2, ДанныеРегистра.ЭлементарныйВопросДанныеРегистра КАК ЭлементарныйВопросДанныеРегистра ПОМЕСТИТЬ Составной @@ -125,9 +125,9 @@ ДанныеРегистра.Анкета КАК Анкета, ДанныеРегистра.Вопрос КАК Вопрос, ДанныеРегистра.НомерЯчейки КАК НомерЯчейки, - ДанныеРегистра.Ответ, - ВопросыШаблонаАнкетыСоставТабличногоВопроса.НомерСтроки, - ДанныеРегистра.ЭлементарныйВопросДанныеРегистра + ДанныеРегистра.Ответ КАК Ответ, + ВопросыШаблонаАнкетыСоставТабличногоВопроса.НомерСтроки КАК НомерСтроки, + ДанныеРегистра.ЭлементарныйВопросДанныеРегистра КАК ЭлементарныйВопросДанныеРегистра ПОМЕСТИТЬ ДанныеТабличныеВопросыОдинНаборПредопределенныхОтветов ИЗ ДанныеРегистра КАК ДанныеРегистра @@ -145,7 +145,7 @@ ДанныеТабличныеВопросыОдинНаборПредопределенныхОтветов.Вопрос КАК Вопрос, ДанныеТабличныеВопросыОдинНаборПредопределенныхОтветов.Ответ КАК Аналитика1, ДанныеТабличныеВопросыОдинНаборПредопределенныхОтветов.НомерЯчейки КАК НомерЯчейки -ПОМЕСТИТЬ АналитикаОдниНаборПредопределенныхОтветов +ПОМЕСТИТЬ АналитикаОдинНаборПредопределенныхОтветов ИЗ ДанныеТабличныеВопросыОдинНаборПредопределенныхОтветов КАК ДанныеТабличныеВопросыОдинНаборПредопределенныхОтветов ГДЕ @@ -157,8 +157,8 @@ ДанныеТабличныеВопросыОдинНаборПредопределенныхОтветов.Анкета КАК Анкета, ДанныеТабличныеВопросыОдинНаборПредопределенныхОтветов.Вопрос КАК Вопрос, ДанныеТабличныеВопросыОдинНаборПредопределенныхОтветов.НомерЯчейки КАК НомерЯчейки, - ДанныеТабличныеВопросыОдинНаборПредопределенныхОтветов.Ответ, - ДанныеТабличныеВопросыОдинНаборПредопределенныхОтветов.ЭлементарныйВопросДанныеРегистра, + ДанныеТабличныеВопросыОдинНаборПредопределенныхОтветов.Ответ КАК Ответ, + ДанныеТабличныеВопросыОдинНаборПредопределенныхОтветов.ЭлементарныйВопросДанныеРегистра КАК ЭлементарныйВопросДанныеРегистра, ДанныеТабличныеВопросыОдинНаборПредопределенныхОтветов.ЭлементарныйВопросДанныеРегистра КАК Аналитика2 ПОМЕСТИТЬ ОтветыОдинНаборПредопределенныхОтветов ИЗ @@ -169,19 +169,19 @@ //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ - АналитикаОдниНоборПредопределенныхОтветов.Анкета КАК Анкета, - АналитикаОдниНоборПредопределенныхОтветов.Вопрос КАК Вопрос, - АналитикаОдниНоборПредопределенныхОтветов.Аналитика1 КАК Аналитика1, - ОтветыОдинНаборПредопределенныхОтветов.Ответ, - ОтветыОдинНаборПредопределенныхОтветов.ЭлементарныйВопросДанныеРегистра, - ОтветыОдинНаборПредопределенныхОтветов.Аналитика2 + АналитикаОдинНаборПредопределенныхОтветов.Анкета КАК Анкета, + АналитикаОдинНаборПредопределенныхОтветов.Вопрос КАК Вопрос, + АналитикаОдинНаборПредопределенныхОтветов.Аналитика1 КАК Аналитика1, + ОтветыОдинНаборПредопределенныхОтветов.Ответ КАК Ответ, + ОтветыОдинНаборПредопределенныхОтветов.ЭлементарныйВопросДанныеРегистра КАК ЭлементарныйВопросДанныеРегистра, + ОтветыОдинНаборПредопределенныхОтветов.Аналитика2 КАК Аналитика2 ПОМЕСТИТЬ ОдинНаборОтветов ИЗ - АналитикаОдниНаборПредопределенныхОтветов КАК АналитикаОдниНоборПредопределенныхОтветов + АналитикаОдинНаборПредопределенныхОтветов КАК АналитикаОдинНаборПредопределенныхОтветов ВНУТРЕННЕЕ СОЕДИНЕНИЕ ОтветыОдинНаборПредопределенныхОтветов КАК ОтветыОдинНаборПредопределенныхОтветов - ПО АналитикаОдниНоборПредопределенныхОтветов.Анкета = ОтветыОдинНаборПредопределенныхОтветов.Анкета - И АналитикаОдниНоборПредопределенныхОтветов.Вопрос = ОтветыОдинНаборПредопределенныхОтветов.Вопрос - И АналитикаОдниНоборПредопределенныхОтветов.НомерЯчейки = ОтветыОдинНаборПредопределенныхОтветов.НомерЯчейки + ПО АналитикаОдинНаборПредопределенныхОтветов.Анкета = ОтветыОдинНаборПредопределенныхОтветов.Анкета + И АналитикаОдинНаборПредопределенныхОтветов.Вопрос = ОтветыОдинНаборПредопределенныхОтветов.Вопрос + И АналитикаОдинНаборПредопределенныхОтветов.НомерЯчейки = ОтветыОдинНаборПредопределенныхОтветов.НомерЯчейки ; //////////////////////////////////////////////////////////////////////////////// @@ -189,9 +189,9 @@ ДанныеРегистра.Анкета КАК Анкета, ДанныеРегистра.Вопрос КАК Вопрос, ДанныеРегистра.НомерЯчейки КАК НомерЯчейки, - ДанныеРегистра.Ответ, - ВопросыШаблонаАнкетыСоставТабличногоВопроса.НомерСтроки, - ДанныеРегистра.ЭлементарныйВопросДанныеРегистра + ДанныеРегистра.Ответ КАК Ответ, + ВопросыШаблонаАнкетыСоставТабличногоВопроса.НомерСтроки КАК НомерСтроки, + ДанныеРегистра.ЭлементарныйВопросДанныеРегистра КАК ЭлементарныйВопросДанныеРегистра ПОМЕСТИТЬ ДанныеТабличныеВопросыДваНабораПредопределенныхОтветов ИЗ ДанныеРегистра КАК ДанныеРегистра @@ -205,7 +205,7 @@ //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ Данные.Анкета КАК Анкета, - Данные.Вопрос, + Данные.Вопрос КАК Вопрос, Данные.НомерЯчейки КАК НомерЯчейки, Данные.Ответ КАК Аналитика1 ПОМЕСТИТЬ Аналитика1ДваНабораПредопределенныхОтветов @@ -218,8 +218,8 @@ //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ Данные.Анкета КАК Анкета, - Данные.Вопрос, - Данные.НомерЯчейки, + Данные.Вопрос КАК Вопрос, + Данные.НомерЯчейки КАК НомерЯчейки, Данные.Ответ КАК Аналитика2 ПОМЕСТИТЬ Аналитика2ДваНабораПредопределенныхОтветов ИЗ @@ -231,10 +231,10 @@ //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ Данные.Анкета КАК Анкета, - Данные.Вопрос, - Данные.НомерЯчейки, - Данные.Ответ, - Данные.ЭлементарныйВопросДанныеРегистра + Данные.Вопрос КАК Вопрос, + Данные.НомерЯчейки КАК НомерЯчейки, + Данные.Ответ КАК Ответ, + Данные.ЭлементарныйВопросДанныеРегистра КАК ЭлементарныйВопросДанныеРегистра ПОМЕСТИТЬ ОтветыДваНабораПредопределенныхОтветов ИЗ ДанныеТабличныеВопросыДваНабораПредопределенныхОтветов КАК Данные @@ -245,11 +245,11 @@ //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ДанныеАналитика1.Анкета КАК Анкета, - ДанныеАналитика1.Вопрос, + ДанныеАналитика1.Вопрос КАК Вопрос, ДанныеАналитика1.Аналитика1 КАК Аналитика1, ДанныеАналитика2.Аналитика2 КАК Аналитика2, - ДанныеОтветы.Ответ, - ДанныеОтветы.ЭлементарныйВопросДанныеРегистра + ДанныеОтветы.Ответ КАК Ответ, + ДанныеОтветы.ЭлементарныйВопросДанныеРегистра КАК ЭлементарныйВопросДанныеРегистра ПОМЕСТИТЬ ДваНабораОтветов ИЗ Аналитика1ДваНабораПредопределенныхОтветов КАК ДанныеАналитика1 @@ -269,8 +269,8 @@ ПростыеВопросы.Вопрос КАК Вопрос, NULL КАК Аналитика1, NULL КАК Аналитика2, - ПростыеВопросы.Ответ, - ПростыеВопросы.ОткрытыйОтвет, + ПростыеВопросы.Ответ КАК Ответ, + ПростыеВопросы.ОткрытыйОтвет КАК ОткрытыйОтвет, ПростыеВопросы.ЭлементарныйВопросДанныеРегистра КАК ЭлементарныйВопрос ПОМЕСТИТЬ ДанныеПоВсемТипамВопросов ИЗ @@ -322,12 +322,12 @@ ДанныеПоВсемТипамВопросов.Вопрос КАК Вопрос, ДанныеПоВсемТипамВопросов.Аналитика1 КАК Аналитика1, ДанныеПоВсемТипамВопросов.Аналитика2 КАК Аналитика2, - ДанныеПоВсемТипамВопросов.Ответ, - ДанныеПоВсемТипамВопросов.ОткрытыйОтвет, - ДокументАнкета.Опрос, - НазначениеОпросов.ШаблонАнкеты, - ДанныеПоВсемТипамВопросов.ЭлементарныйВопрос, - ДокументАнкета.Респондент, + ДанныеПоВсемТипамВопросов.Ответ КАК Ответ, + ДанныеПоВсемТипамВопросов.ОткрытыйОтвет КАК ОткрытыйОтвет, + ДокументАнкета.Опрос КАК Опрос, + НазначениеОпросов.ШаблонАнкеты КАК ШаблонАнкеты, + ДанныеПоВсемТипамВопросов.ЭлементарныйВопрос КАК ЭлементарныйВопрос, + ДокументАнкета.Респондент КАК Респондент, НазначениеОпросов.Наименование КАК НаименованиеОпроса ИЗ ДанныеПоВсемТипамВопросов КАК ДанныеПоВсемТипамВопросов diff --git a/SSL/src/Reports/БизнесПроцессы/Templates/Макет/Template.dcs b/SSL/src/Reports/БизнесПроцессы/Templates/Макет/Template.dcs index 12f74d3d1..13c557cb9 100644 --- a/SSL/src/Reports/БизнесПроцессы/Templates/Макет/Template.dcs +++ b/SSL/src/Reports/БизнесПроцессы/Templates/Макет/Template.dcs @@ -10,11 +10,6 @@ Автор Автор - - БизнесПроцесс - БизнесПроцесс - Наименование - Дата Дата @@ -57,16 +52,29 @@ + + БизнесПроцесс + БизнесПроцесс + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Бизнес процесс</v8:content> + </v8:item> + + + true + + ИсточникДанных1 ВЫБРАТЬ РАЗРЕШЕННЫЕ - ДанныеБизнесПроцессов.БизнесПроцесс, + ДанныеБизнесПроцессов.Владелец КАК БизнесПроцесс, ДанныеБизнесПроцессов.Дата, ДанныеБизнесПроцессов.Завершен, ДанныеБизнесПроцессов.Стартован, ДанныеБизнесПроцессов.Автор, ДанныеБизнесПроцессов.ДатаЗавершения, ДанныеБизнесПроцессов.Наименование, - ТИПЗНАЧЕНИЯ(ДанныеБизнесПроцессов.БизнесПроцесс) КАК ВидБизнесПроцесса + ТИПЗНАЧЕНИЯ(ДанныеБизнесПроцессов.Владелец) КАК ВидБизнесПроцесса ИЗ РегистрСведений.ДанныеБизнесПроцессов КАК ДанныеБизнесПроцессов {ГДЕ diff --git a/SSL/src/Reports/ДатыЗапретаЗагрузки/ObjectModule.bsl b/SSL/src/Reports/ДатыЗапретаЗагрузки/ObjectModule.bsl index 7d2958792..43fb2848d 100644 --- a/SSL/src/Reports/ДатыЗапретаЗагрузки/ObjectModule.bsl +++ b/SSL/src/Reports/ДатыЗапретаЗагрузки/ObjectModule.bsl @@ -198,8 +198,10 @@ Функция ТекстЗапроса() - // АПК:494-выкл: допустимо, так как объем данных небольшой (от единиц до сотен). - // АПК:96-выкл: допустимо, так как строки не должны повторятся и объем данных небольшой (от единиц до сотен). + // АПК:494-выкл - №656 Соединение с вложенным запросом допустимо, + // так как объем данных небольшой (от единиц до сотен). + // АПК:96-выкл - №434 Использование ОБЪЕДИНИТЬ допустимо, так как + // строки не должны повторятся и объем данных небольшой (от единиц до сотен). Возврат "ВЫБРАТЬ | ДатыЗапретаИзменения.Раздел КАК Раздел, @@ -396,8 +398,8 @@ | И (ЛОЖЬ В (&ЗаданныеОбъекты) | ИЛИ ДатыЗапрета.Объект = ДатыЗапрета.Раздел | ИЛИ ДатыЗапрета.Объект В (&ЗаданныеОбъекты))"; - // АПК:96-вкл: допустимо, так как строки не должны повторятся и объем данных небольшой (от единиц до сотен). - // АПК:494-вкл: допустимо, так как объем данных небольшой (от единиц до сотен). + // АПК:96-вкл. + // АПК:494-вкл. КонецФункции diff --git a/SSL/src/Reports/ДатыЗапретаИзменения/ObjectModule.bsl b/SSL/src/Reports/ДатыЗапретаИзменения/ObjectModule.bsl index d24310679..6623d5907 100644 --- a/SSL/src/Reports/ДатыЗапретаИзменения/ObjectModule.bsl +++ b/SSL/src/Reports/ДатыЗапретаИзменения/ObjectModule.bsl @@ -192,8 +192,10 @@ Функция ТекстЗапроса() - // АПК:494-выкл: допустимо, так как объем данных небольшой (от единиц до сотен). - // АПК:96-выкл: допустимо, так как строки не должны повторятся и объем данных небольшой (от единиц до сотен). + // АПК:494-выкл - №656 Соединение с вложенным запросом допустимо, + // так как объем данных небольшой (от единиц до сотен). + // АПК:96-выкл - №434 Использование ОБЪЕДИНИТЬ допустимо, так как + // строки не должны повторятся и объем данных небольшой (от единиц до сотен). Возврат "ВЫБРАТЬ | ДатыЗапретаИзменения.Раздел КАК Раздел, @@ -403,8 +405,8 @@ | И (ЛОЖЬ В (&ЗаданныеОбъекты) | ИЛИ ДатыЗапрета.Объект = ДатыЗапрета.Раздел | ИЛИ ДатыЗапрета.Объект В (&ЗаданныеОбъекты))"; - // АПК:96-вкл: допустимо, так как строки не должны повторятся и объем данных небольшой (от единиц до сотен). - // АПК:494-вкл: допустимо, так как объем данных небольшой (от единиц до сотен). + // АПК:96-вкл. + // АПК:494-вкл. КонецФункции diff --git a/SSL/src/Reports/ДвиженияДокумента/ManagerModule.bsl b/SSL/src/Reports/ДвиженияДокумента/ManagerModule.bsl index 5529eca0a..66fd87a8e 100644 --- a/SSL/src/Reports/ДвиженияДокумента/ManagerModule.bsl +++ b/SSL/src/Reports/ДвиженияДокумента/ManagerModule.bsl @@ -66,6 +66,7 @@ Команда.ТипПараметра = ОписаниеТипаПараметраКоманды; Команда.Менеджер = "Отчет.ДвиженияДокумента"; Команда.СочетаниеКлавиш = Новый СочетаниеКлавиш(Клавиша.L, Ложь, Истина, Истина); + Команда.ТолькоВоВсехДействиях = Истина; Возврат Команда; diff --git a/SSL/src/Reports/ДвиженияДокумента/ObjectModule.bsl b/SSL/src/Reports/ДвиженияДокумента/ObjectModule.bsl index a6429fa85..3ef9e747b 100644 --- a/SSL/src/Reports/ДвиженияДокумента/ObjectModule.bsl +++ b/SSL/src/Reports/ДвиженияДокумента/ObjectModule.bsl @@ -278,16 +278,16 @@ НаборДанных = Неопределено; МетаданныеРегистра = Метаданные.НайтиПоПолномуИмени(СвойстваРегистра.ПолноеИмяРегистра); - Если СвойстваРегистра.ВидРегистра = "Накопления" - Или СвойстваРегистра.ВидРегистра = "Сведений" Тогда + Если СвойстваРегистра.ВидРегистра = "РегистрНакопления" + Или СвойстваРегистра.ВидРегистра = "РегистрСведений" Тогда НаборДанных = НаборДанныхДляРегистраНакопленияСведений(СвойстваРегистра, МетаданныеРегистра, ДополнительнаяНумерация); - ИначеЕсли СвойстваРегистра.ВидРегистра = "Бухгалтерии" Тогда + ИначеЕсли СвойстваРегистра.ВидРегистра = "РегистрБухгалтерии" Тогда НаборДанных = НаборДанныхДляРегистраБухгалтерии(СвойстваРегистра, МетаданныеРегистра); - ИначеЕсли СвойстваРегистра.ВидРегистра = "Расчета" Тогда + ИначеЕсли СвойстваРегистра.ВидРегистра = "РегистрРасчета" Тогда НаборДанных = НаборДанныхДляРегистраРасчета(СвойстваРегистра, МетаданныеРегистра, ДополнительнаяНумерация); @@ -352,15 +352,15 @@ |ИЗ | &ТекущаяТаблица КАК ТекущаяТаблица |ГДЕ - | &УсловиеЗапроса + | &ИмяПоляРегистратора = &ДокументВладелец |{ГДЕ - | (&УсловиеКомпоновки)}"; + | ""&ИмяГруппировки"" В (&СписокРегистров)}"; ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ИмяРегистра", СвойстваРегистра.ИмяГруппировки); ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&Поля", ПоляВыбора); ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекущаяТаблица", СвойстваРегистра.ПолноеИмяРегистра); - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&УсловиеЗапроса", СвойстваРегистра.ИмяПоляРегистратора + " = &ДокументВладелец"); - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&УсловиеКомпоновки", """" + СвойстваРегистра.ИмяГруппировки + """ В (&СписокРегистров)"); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ИмяПоляРегистратора", СвойстваРегистра.ИмяПоляРегистратора); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ИмяГруппировки", СвойстваРегистра.ИмяГруппировки); НаборДанных.Вставить("ТекстЗапроса", ТекстЗапроса); @@ -429,44 +429,33 @@ Если КорреспонденцияОбъекта Тогда ИндексСтрокой = Формат(ИндексСубконто, "ЧГ=0"); - НаборДанных.СубконтоДт.Вставить("СубконтоДт" + ИндексСтрокой, ЛокализацияСубконто + " " + ЛокализацияДебет + " " + ИндексСтрокой); НаборДанных.СубконтоКт.Вставить("СубконтоКт" + ИндексСтрокой, ЛокализацияСубконто + " " + ЛокализацияКредит + " " + ИндексСтрокой); Иначе - НаборДанных.Субконто.Вставить("Субконто" + ИндексСтрокой, ЛокализацияСубконто + " " + ИндексСтрокой); - КонецЕсли; КонецЦикла; Если КорреспонденцияОбъекта Тогда - НаборДанных.ИзмеренияДт.Вставить("СчетДт", ЛокализацияСчет + " " +ЛокализацияДебет); НаборДанных.ИзмеренияКт.Вставить("СчетКт", ЛокализацияСчет + " " + ЛокализацияКредит); - Иначе - ТекстИзмерения = ТекстИзмерения + ?(ЗначениеЗаполнено(ТекстИзмерения), ", ", "") + "Счет"; НаборДанных.Измерения.Вставить("Счет", ЛокализацияСчет); - КонецЕсли; Измерения = МетаданныеРегистра.Измерения; Для Каждого Измерение Из Измерения Цикл Если Измерение.Балансовый Или Не КорреспонденцияОбъекта Тогда - НаборДанных.Измерения.Вставить(Измерение.Имя, Измерение.Представление()); - Иначе - НаборДанных.ИзмеренияДт.Вставить(Измерение.Имя + "Дт", Измерение.Представление() + " " + ЛокализацияДебет); НаборДанных.ИзмеренияКт.Вставить(Измерение.Имя + "Кт", Измерение.Представление() + " " + ЛокализацияКредит); - КонецЕсли; КонецЦикла; @@ -496,16 +485,17 @@ |ИЗ | &ТекущаяТаблица КАК ТекущаяТаблица |ГДЕ - | &УсловиеЗапроса + | &ИмяПоляРегистратора = &ДокументВладелец |{ГДЕ - | (&УсловиеКомпоновки)}"; + | (""&ИмяГруппировки"" В (&СписокРегистров))}"; ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ИмяРегистра", СвойстваРегистра.ИмяГруппировки); ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&Поля", ПоляВыбора); - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекущаяТаблица", "РегистрБухгалтерии." + СвойстваРегистра.ИмяРегистра - + ".ДвиженияССубконто(, , " + СвойстваРегистра.ИмяПоляРегистратора + " = &ДокументВладелец)"); - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&УсловиеЗапроса", СвойстваРегистра.ИмяПоляРегистратора + " = &ДокументВладелец"); - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&УсловиеКомпоновки", """" + СвойстваРегистра.ИмяГруппировки + """ В (&СписокРегистров)"); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекущаяТаблица", + СтрШаблон("РегистрБухгалтерии.%1.ДвиженияССубконто(, , %2 = &ДокументВладелец)", + СвойстваРегистра.ИмяРегистра, СвойстваРегистра.ИмяПоляРегистратора)); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ИмяПоляРегистратора", СвойстваРегистра.ИмяПоляРегистратора); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ИмяГруппировки", СвойстваРегистра.ИмяГруппировки); НаборДанных.Вставить("ТекстЗапроса", ТекстЗапроса); @@ -563,15 +553,15 @@ |ИЗ | &ТекущаяТаблица КАК ТекущаяТаблица |ГДЕ - | &УсловиеЗапроса + | &ИмяПоляРегистратора = &ДокументВладелец |{ГДЕ - | (&УсловиеКомпоновки)}"; + | ""&ИмяГруппировки"" В (&СписокРегистров)}"; ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ИмяРегистра", СвойстваРегистра.ИмяГруппировки); ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&Поля", ПоляВыбора); ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекущаяТаблица", СвойстваРегистра.ПолноеИмяРегистра); - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&УсловиеЗапроса", СвойстваРегистра.ИмяПоляРегистратора + " = &ДокументВладелец"); - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&УсловиеКомпоновки", """" + СвойстваРегистра.ИмяГруппировки + """ В (&СписокРегистров)"); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ИмяПоляРегистратора", СвойстваРегистра.ИмяПоляРегистратора); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ИмяГруппировки", СвойстваРегистра.ИмяГруппировки); НаборДанных.Вставить("ТекстЗапроса", ТекстЗапроса); @@ -632,15 +622,15 @@ Процедура ПодготовитьГоризонтальныйВариантНабораДанных(НастройкиКД, ЭлементДанных, НаборДанныхКД) - Если ЭлементДанных.ВидРегистра = "Накопления" Или ЭлементДанных.ВидРегистра = "Сведений" Тогда + Если ЭлементДанных.ВидРегистра = "РегистрНакопления" Или ЭлементДанных.ВидРегистра = "РегистрСведений" Тогда ПодготовитьГоризонтальныйВариантРегистровНакопленияИСведений_Горизонталь(НастройкиКД, НаборДанныхКД, ЭлементДанных); - ИначеЕсли ЭлементДанных.ВидРегистра = "Бухгалтерии" Тогда + ИначеЕсли ЭлементДанных.ВидРегистра = "РегистрБухгалтерии" Тогда ПодготовитьГоризонтальныйВариантРегистровБухгалтерии(НастройкиКД, НаборДанныхКД, ЭлементДанных); - ИначеЕсли ЭлементДанных.ВидРегистра = "Расчета" Тогда + ИначеЕсли ЭлементДанных.ВидРегистра = "РегистрРасчета" Тогда ПодготовитьГоризонтальныйВариантРегистровРасчета(НастройкиКД, НаборДанныхКД, ЭлементДанных); @@ -660,11 +650,8 @@ СтруктураРесурсов = ЭлементДанных.Ресурсы; СтруктураРеквизитов = ЭлементДанных.Реквизиты; - ПользовательскийЗаголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Регистр %1 %2'"), - НРег(ПредставлениеВидаРегистра), ПредставлениеРегистра); - - ГруппировкаДетальныеЗаписи = - ДобавитьЭлементСтруктуры(НастройкиКД, "Регистр" + ВидРегистра + "_" + ИмяРегистра, ПользовательскийЗаголовок); + ПользовательскийЗаголовок = ПредставлениеВидаРегистра + " " + ПредставлениеРегистра; + ГруппировкаДетальныеЗаписи = ДобавитьЭлементСтруктуры(НастройкиКД, ВидРегистра + "_" + ИмяРегистра, ПользовательскийЗаголовок); Если СтруктураСтандартныхРеквизитов.Количество() > 0 Тогда @@ -718,8 +705,7 @@ Процедура ПодготовитьГоризонтальныйВариантРегистровРасчета(НастройкиКД, НаборДанныхКД, ЭлементДанных) - ВидРегистра = "Расчета"; - ПредставлениеВидаРегистра = НСтр("ru = 'Расчета'"); + ВидРегистра = "РегистрРасчета"; ИмяРегистра = ЭлементДанных.ИмяРегистра; ПредставлениеРегистра = ЭлементДанных.ПредставлениеРегистра; @@ -728,11 +714,10 @@ СтруктураРесурсов = ЭлементДанных.Ресурсы; СтруктураРеквизитов = ЭлементДанных.Реквизиты; - ПользовательскийЗаголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Регистр %1 %2'"), - НРег(ПредставлениеВидаРегистра), ПредставлениеРегистра); + ПользовательскийЗаголовок = НСтр("ru = 'Регистр расчета'") + " " + ПредставлениеРегистра; ГруппировкаДетальныеЗаписи = ДобавитьЭлементСтруктуры(НастройкиКД, - "Регистр" + ВидРегистра + "_" + ИмяРегистра, ПользовательскийЗаголовок); + ВидРегистра + "_" + ИмяРегистра, ПользовательскийЗаголовок); Если СтруктураСтандартныхРеквизитов.Количество() > 0 Тогда @@ -829,15 +814,15 @@ Процедура ПодготовитьВертикальныйВариантНабораДанных(НастройкиКД, НаборДанных, НаборДанныхКД) - Если НаборДанных.ВидРегистра = "Накопления" Или НаборДанных.ВидРегистра = "Сведений" Тогда + Если НаборДанных.ВидРегистра = "РегистрНакопления" Или НаборДанных.ВидРегистра = "РегистрСведений" Тогда ПодготовитьВертикальныйВариантРегистровНакопленияИСведений(НастройкиКД, НаборДанныхКД, НаборДанных); - ИначеЕсли НаборДанных.ВидРегистра = "Бухгалтерии" Тогда + ИначеЕсли НаборДанных.ВидРегистра = "РегистрБухгалтерии" Тогда ПодготовитьГоризонтальныйВариантРегистровБухгалтерии(НастройкиКД, НаборДанныхКД, НаборДанных); - ИначеЕсли НаборДанных.ВидРегистра = "Расчета" Тогда + ИначеЕсли НаборДанных.ВидРегистра = "РегистрРасчета" Тогда ПодготовитьВертикальныйВариантРегистровРасчета(НастройкиКД, НаборДанныхКД, НаборДанных); @@ -858,9 +843,8 @@ СтруктураРеквизитов = ЭлементДанных.Реквизиты; СтруктураНумератора = ЭлементДанных.Нумератор; - Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Регистр %1 %2'"), - НРег(ПредставлениеВидаРегистра), ПредставлениеРегистра); - ГруппировкаДетальныеЗаписи = ДобавитьЭлементСтруктуры(НастройкиКД, "Регистр" + ВидРегистра + "_" + ИмяРегистра, Заголовок); + Заголовок = ПредставлениеВидаРегистра + " " + ПредставлениеРегистра; + ГруппировкаДетальныеЗаписи = ДобавитьЭлементСтруктуры(НастройкиКД, ВидРегистра + "_" + ИмяРегистра, Заголовок); Если СтруктураНумератора.Количество() > 0 Тогда @@ -926,8 +910,7 @@ Процедура ПодготовитьВертикальныйВариантРегистровРасчета(НастройкиКД, НаборДанныхКД, ЭлементДанных) - ВидРегистра = "Расчета"; - ПредставлениеВидаРегистра = НСтр("ru = 'Расчета'"); + ВидРегистра = "РегистрРасчета"; ИмяРегистра = ЭлементДанных.ИмяРегистра; ПредставлениеРегистра = ЭлементДанных.ПредставлениеРегистра; @@ -937,10 +920,10 @@ СтруктураРеквизитов = ЭлементДанных.Реквизиты; СтруктураНумератора = ЭлементДанных.Нумератор; - ПользовательскийЗаголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Регистр %1 %2'"), - НРег(ПредставлениеВидаРегистра), ПредставлениеРегистра); + ПользовательскийЗаголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Регистр расчета %1'"), + ПредставлениеРегистра); - ГруппировкаДетальныеЗаписи = ДобавитьЭлементСтруктуры(НастройкиКД, "Регистр" + ВидРегистра + "_" + ИмяРегистра, + ГруппировкаДетальныеЗаписи = ДобавитьЭлементСтруктуры(НастройкиКД, ВидРегистра + "_" + ИмяРегистра, ПользовательскийЗаголовок); Если СтруктураНумератора.Количество() > 0 Тогда @@ -1011,8 +994,7 @@ Процедура ПодготовитьГоризонтальныйВариантРегистровБухгалтерии(НастройкиКД, НаборДанныхКД, ЭлементДанных) - ВидРегистра = "Бухгалтерии"; - ПредставлениеВидаРегистра = НСтр("ru = 'Бухгалтерии'"); + ВидРегистра = "РегистрБухгалтерии"; ИмяРегистра = ЭлементДанных.ИмяРегистра; ПредставлениеРегистра = ЭлементДанных.ПредставлениеРегистра; @@ -1028,11 +1010,11 @@ СтруктураСубконтоКт = ЭлементДанных.СубконтоКт; СтруктураРеквизитов = ЭлементДанных.Реквизиты; - ПользовательскийЗаголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Регистр %1 %2'"), - НРег(ПредставлениеВидаРегистра), ПредставлениеРегистра); + ПользовательскийЗаголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Регистр бухгалтерии %1'"), + ПредставлениеРегистра); ГруппировкаДетальныеЗаписи = ДобавитьЭлементСтруктуры(НастройкиКД, - "Регистр" + ВидРегистра + "_" + ИмяРегистра, ПользовательскийЗаголовок); + ВидРегистра + "_" + ИмяРегистра, ПользовательскийЗаголовок); Если СтруктураСтандартныхРеквизитов.Количество() > 0 Тогда @@ -1322,13 +1304,13 @@ И ИмяГруппы <> "ИзмеренияКт" И ИмяГруппы <> "РесурсыДт" И ИмяГруппы <> "РесурсыКт" И ИмяГруппы <> "СубконтоДт" И ИмяГруппы <> "СубконтоКт" И ИмяГруппы <> "Субконто" Тогда - Если ВидРегистра = "Накопления" Тогда + Если ВидРегистра = "РегистрНакопления" Тогда ОбъектМетаданных = Метаданные.РегистрыНакопления[ИмяРегистра][ИмяГруппы][Имя]; - ИначеЕсли ВидРегистра = "Сведений" Тогда + ИначеЕсли ВидРегистра = "РегистрСведений" Тогда ОбъектМетаданных = Метаданные.РегистрыСведений[ИмяРегистра][ИмяГруппы][Имя]; - ИначеЕсли ВидРегистра = "Расчета" Тогда + ИначеЕсли ВидРегистра = "РегистрРасчета" Тогда ОбъектМетаданных = Метаданные.РегистрыРасчета[ИмяРегистра][ИмяГруппы][Имя]; - ИначеЕсли ВидРегистра = "Бухгалтерии" Тогда + ИначеЕсли ВидРегистра = "РегистрБухгалтерии" Тогда ОбъектМетаданных = Метаданные.РегистрыБухгалтерии[ИмяРегистра][ИмяГруппы][Имя]; КонецЕсли; @@ -1367,10 +1349,14 @@ ИсключаемыеПоля = Новый Массив; КонецЕсли; + ИсключаемыйТип = Тип("ХранилищеЗначения"); + Результат = Новый Структура; Для Каждого ПолеРегистра Из ПоляРегистра Цикл - Если ИсключаемыеПоля.Найти(ПолеРегистра.Имя) = Неопределено Тогда + Если ИсключаемыеПоля.Найти(ПолеРегистра.Имя) = Неопределено + И Не ПолеРегистра.Тип.СодержитТип(ИсключаемыйТип) Тогда + Результат.Вставить(ПолеРегистра.Имя, ПолеРегистра.Представление()); КонецЕсли; @@ -1425,7 +1411,7 @@ ПолноеИмяРегистра = СвойстваРегистра.ПолноеИмяРегистра; РасшифровкаЗаголовка = Новый Структура; - РасшифровкаЗаголовка.Вставить("ВидРегистра", СвойстваРегистра.ПредставлениеВидаРегистра); + РасшифровкаЗаголовка.Вставить("ВидРегистра", СвойстваРегистра.ВидРегистра); РасшифровкаЗаголовка.Вставить("ИмяРегистра", СвойстваРегистра.ИмяРегистра); РасшифровкаЗаголовка.Вставить("Регистратор", ДокументРегистратор); РасшифровкаЗаголовка.Вставить("ИмяПоляРегистратора", СвойстваРегистра.ИмяПоляРегистратора); @@ -1557,7 +1543,7 @@ Элемент.ИспользоватьВЗаголовкеПолей = ИспользованиеУсловногоОформленияКомпоновкиДанных.НеИспользовать; Если ВидДвижения = ВидДвиженияНакопления.Приход Тогда - ЦветВидаДвижения = ЦветаСтиля.РезультатУспехЦвет; + ЦветВидаДвижения = Метаданные.ЭлементыСтиля.РезультатУспехЦвет.Значение; Иначе ЦветВидаДвижения = ЦветаСтиля.ЦветОтрицательногоЧисла; КонецЕсли; @@ -1599,43 +1585,40 @@ Если ОбщегоНазначения.ЭтоРегистрНакопления(МетаданныеРегистра) Тогда - СвойстваРегистра.ВидРегистра = "Накопления"; - СвойстваРегистра.ПредставлениеВидаРегистра = НСтр("ru = 'Накопления'"); + СвойстваРегистра.ВидРегистра = "РегистрНакопления"; + СвойстваРегистра.ПредставлениеВидаРегистра = НСтр("ru = 'Регистр накопления'"); СвойстваРегистра.ВидРегистраНакопления = МетаданныеРегистра.ВидРегистра; СвойстваРегистра.Приоритет = 1; ИначеЕсли ОбщегоНазначения.ЭтоРегистрСведений(МетаданныеРегистра) Тогда - СвойстваРегистра.ВидРегистра = "Сведений"; - СвойстваРегистра.ПредставлениеВидаРегистра = НСтр("ru = 'Сведений'"); + СвойстваРегистра.ВидРегистра = "РегистрСведений"; + СвойстваРегистра.ПредставлениеВидаРегистра = НСтр("ru = 'Регистр сведений'"); СвойстваРегистра.ПериодичностьРегистраСведений = МетаданныеРегистра.ПериодичностьРегистраСведений; СвойстваРегистра.РежимЗаписиРегистраСведений = МетаданныеРегистра.РежимЗаписи; СвойстваРегистра.Приоритет = 2; ИначеЕсли ОбщегоНазначения.ЭтоРегистрБухгалтерии(МетаданныеРегистра) Тогда - СвойстваРегистра.ВидРегистра = "Бухгалтерии"; - СвойстваРегистра.ПредставлениеВидаРегистра = НСтр("ru = 'Бухгалтерии'"); + СвойстваРегистра.ВидРегистра = "РегистрБухгалтерии"; + СвойстваРегистра.ПредставлениеВидаРегистра = НСтр("ru = 'Регистр бухгалтерии'"); СвойстваРегистра.Приоритет = 3; ИначеЕсли ОбщегоНазначения.ЭтоРегистрРасчета(МетаданныеРегистра) Тогда - СвойстваРегистра.ВидРегистра = "Расчета"; - СвойстваРегистра.ПредставлениеВидаРегистра = НСтр("ru = 'Расчета'"); + СвойстваРегистра.ВидРегистра = "РегистрРасчета"; + СвойстваРегистра.ПредставлениеВидаРегистра = НСтр("ru = 'Регистр расчета'"); СвойстваРегистра.ПериодичностьРегистраРасчета = МетаданныеРегистра.Периодичность; СвойстваРегистра.Приоритет = 4; КонецЕсли; - ЗаголовокТаблицы = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Регистр %1 ""%2""'"), СокрЛП(СвойстваРегистра.ПредставлениеВидаРегистра), СвойстваРегистра.ПредставлениеРегистра); - + ЗаголовокТаблицы = СвойстваРегистра.ПредставлениеВидаРегистра + " """ + СвойстваРегистра.ПредставлениеРегистра + """"; СвойстваРегистра.ЗаголовокТаблицы = ВРег(ЗаголовокТаблицы); КонецЦикла; СвойстваРегистров.Сортировать("Приоритет, ПредставлениеРегистра"); - КэшироватьСвойстваРегистров(СвойстваРегистров, Контекст); КонецПроцедуры @@ -1671,15 +1654,10 @@ Процедура КэшироватьСвойстваРегистров(СвойстваРегистров, Контекст) АдресСвойствРегистров = ПоместитьВоВременноеХранилище(СвойстваРегистров); - Если ТипЗнч(Контекст) = Тип("ФормаКлиентскогоПриложения") Тогда - Контекст.НастройкиОтчета.Вставить("АдресСвойствРегистров", АдресСвойствРегистров); - ИначеЕсли ТипЗнч(Контекст) = Тип("НастройкиКомпоновкиДанных") Тогда - Контекст.ДополнительныеСвойства.Вставить("АдресСвойствРегистров", АдресСвойствРегистров); - КонецЕсли; КонецПроцедуры @@ -1901,8 +1879,8 @@ КонецЕсли; ПредставлениеРегистра = НастройкиРегистра[0].ПредставлениеРегистра; - ЗаголовокГруппировки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Регистр %1 ""%2""'"), - НРег(ПредставлениеВидаРегистра),ПредставлениеРегистра); + ЗаголовокГруппировки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("%1 ""%2""", + ПредставлениеВидаРегистра, ПредставлениеРегистра); Макет = СхемаКД.Макеты.Добавить(); Макет.Имя = "Макет" + Формат(ИндексНабора + 1, "ЧГ=0"); @@ -1913,7 +1891,7 @@ Параметр.Выражение = "КоличествоЗаписейРегистра"; МакетГруппировки = СхемаКД.МакетыГруппировок.Добавить(); - МакетГруппировки.ИмяГруппировки = "Регистр" + ВидРегистра + "_" + ИмяРегистра; + МакетГруппировки.ИмяГруппировки = ВидРегистра + "_" + ИмяРегистра; МакетГруппировки.ТипМакета = ТипМакетаОбластиКомпоновкиДанных.Заголовок; МакетГруппировки.Макет = "Макет" + Формат(ИндексНабора + 1, "ЧГ=0"); @@ -1926,7 +1904,8 @@ Шрифт = ОформлениеЯчейки.Найти("Шрифт"); Если Шрифт <> Неопределено Тогда - Шрифт.Значение = Новый Шрифт("Arial", 14); + ШрифтЗаголовкаГруппировки = Метаданные.ЭлементыСтиля.ЗаголовокГруппировкиОтчетаОДвиженияхДокументаШрифт; + Шрифт.Значение = ШрифтЗаголовкаГруппировки.Значение; Шрифт.Использование = Истина; КонецЕсли; @@ -1945,23 +1924,16 @@ ОбластьКД = Ячейка.Элементы.Добавить(Тип("ПолеОбластиКомпоновкиДанных")); ОбластьКД.Значение = ")"; - + КонецПроцедуры Функция СписокРегистров() СписокРегистров = Новый СписокЗначений; - Для Каждого СвойстваРегистра Из СвойстваРегистров Цикл - - ПредставлениеЭлемента = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Регистр %1 %2'"), - НРег(СвойстваРегистра.ПредставлениеВидаРегистра), СвойстваРегистра.ПредставлениеРегистра); - + ПредставлениеЭлемента = СвойстваРегистра.ПредставлениеВидаРегистра + " " + СвойстваРегистра.ПредставлениеРегистра; СписокРегистров.Добавить(СвойстваРегистра.ИмяГруппировки, ПредставлениеЭлемента); - КонецЦикла; - Возврат СписокРегистров; КонецФункции @@ -2146,7 +2118,6 @@ КонецЕсли; ЗаголовокТаблицы = Лев(ТекстОбласти, ПозицияКоличества - 2); - Возврат СвойстваРегистров.Найти(ЗаголовокТаблицы, "ЗаголовокТаблицы"); КонецФункции diff --git a/SSL/src/Reports/ИспользуемыеВнешниеРесурсы/ManagerModule.bsl b/SSL/src/Reports/ИспользуемыеВнешниеРесурсы/ManagerModule.bsl index 78de57a7e..6b6697796 100644 --- a/SSL/src/Reports/ИспользуемыеВнешниеРесурсы/ManagerModule.bsl +++ b/SSL/src/Reports/ИспользуемыеВнешниеРесурсы/ManagerModule.bsl @@ -414,7 +414,8 @@ // Возвращает словарь свойств конфигурации. // -// Возвращаемое значение: Структура: +// Возвращаемое значение: +// Структура: // * Именительный - синоним вида модуля в именительном падеже, // * Родительный - синоним вида модуля в родительном падеже. // diff --git a/SSL/src/Reports/ИспользуемыеВнешниеРесурсы/Templates/ПредставленияРазрешений/Template.mxlx b/SSL/src/Reports/ИспользуемыеВнешниеРесурсы/Templates/ПредставленияРазрешений/Template.mxlx index c03706e0a..33c8ee365 100644 --- a/SSL/src/Reports/ИспользуемыеВнешниеРесурсы/Templates/ПредставленияРазрешений/Template.mxlx +++ b/SSL/src/Reports/ИспользуемыеВнешниеРесурсы/Templates/ПредставленияРазрешений/Template.mxlx @@ -1213,8 +1213,8 @@ Rows 12 12 - -1 - -1 + 0 + 0 @@ -1223,8 +1223,8 @@ Rows 8 8 - -1 - -1 + 0 + 0 @@ -1233,8 +1233,8 @@ Rows 25 25 - -1 - -1 + 0 + 0 @@ -1243,8 +1243,8 @@ Rows 29 29 - -1 - -1 + 0 + 0 @@ -1253,8 +1253,8 @@ Rows 4 4 - -1 - -1 + 0 + 0 @@ -1263,8 +1263,8 @@ Rows 21 21 - -1 - -1 + 0 + 0 @@ -1273,8 +1273,8 @@ Rows 17 17 - -1 - -1 + 0 + 0 @@ -1283,8 +1283,8 @@ Rows 33 33 - -1 - -1 + 0 + 0 @@ -1293,8 +1293,8 @@ Rows 14 14 - -1 - -1 + 0 + 0 @@ -1303,8 +1303,8 @@ Rows 15 15 - -1 - -1 + 0 + 0 @@ -1313,8 +1313,8 @@ Rows 10 10 - -1 - -1 + 0 + 0 @@ -1323,8 +1323,8 @@ Rows 27 27 - -1 - -1 + 0 + 0 @@ -1333,8 +1333,8 @@ Rows 31 31 - -1 - -1 + 0 + 0 @@ -1343,8 +1343,8 @@ Rows 6 6 - -1 - -1 + 0 + 0 @@ -1353,8 +1353,8 @@ Rows 23 23 - -1 - -1 + 0 + 0 @@ -1363,8 +1363,8 @@ Rows 19 19 - -1 - -1 + 0 + 0 @@ -1373,8 +1373,8 @@ Rows 1 1 - -1 - -1 + 0 + 0 @@ -1383,8 +1383,8 @@ Rows 13 13 - -1 - -1 + 0 + 0 @@ -1393,8 +1393,8 @@ Rows 9 9 - -1 - -1 + 0 + 0 @@ -1403,8 +1403,8 @@ Rows 26 26 - -1 - -1 + 0 + 0 @@ -1413,8 +1413,8 @@ Rows 30 30 - -1 - -1 + 0 + 0 @@ -1423,8 +1423,8 @@ Rows 5 5 - -1 - -1 + 0 + 0 @@ -1433,8 +1433,8 @@ Rows 22 22 - -1 - -1 + 0 + 0 @@ -1443,8 +1443,8 @@ Rows 18 18 - -1 - -1 + 0 + 0 @@ -1705,7 +1705,7 @@ 1 - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAA + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAA AARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAJdSURBVDhPpVNN b9NAFJyNnQ+nSdykTZ2PJoVKEBCVEFLVG6JI3Dlz5szf4TdwQXDl1gsgVb2UkChK 01ZEaps0IYnTxo7t2ObtOqiBnhAjPXv9dmd29r018wn4D9wS8H0Pvmth0Gtjoo8h diff --git a/SSL/src/Reports/МестаИспользованияСсылок/ManagerModule.bsl b/SSL/src/Reports/МестаИспользованияСсылок/ManagerModule.bsl index 1073c950b..4f22c58af 100644 --- a/SSL/src/Reports/МестаИспользованияСсылок/ManagerModule.bsl +++ b/SSL/src/Reports/МестаИспользованияСсылок/ManagerModule.bsl @@ -47,6 +47,8 @@ Команда.ИмяПараметраФормы = "Отбор.НаборСсылок"; Команда.КлючВарианта = "Основной"; Команда.Менеджер = "Отчет.МестаИспользованияСсылок"; + Команда.СочетаниеКлавиш = Новый СочетаниеКлавиш(Клавиша.V, Ложь, Истина, Истина); + Команда.ТолькоВоВсехДействиях = Истина; Возврат Команда; КонецФункции diff --git a/SSL/src/Reports/ОценкаПроизводительности/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs b/SSL/src/Reports/ОценкаПроизводительности/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs index add9261b6..e60fff221 100644 --- a/SSL/src/Reports/ОценкаПроизводительности/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs +++ b/SSL/src/Reports/ОценкаПроизводительности/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs @@ -305,7 +305,7 @@ ИсточникДанных1 ВЫБРАТЬ - ВЫБОР &ПереодичностьЗамеров + ВЫБОР &ПериодичностьЗамеров КОГДА 1 ТОГДА НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015, 1, 1), СЕКУНДА, Замеры.ДатаНачалаЗамера / 1000 - 63555667200 + &ПоправкаЧасовогоПояса), ЧАС) КОГДА 2 @@ -361,7 +361,7 @@ Замеры.ВыполненСОшибкой} СГРУППИРОВАТЬ ПО - ВЫБОР &ПереодичностьЗамеров + ВЫБОР &ПериодичностьЗамеров КОГДА 1 ТОГДА НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015, 1, 1), СЕКУНДА, Замеры.ДатаНачалаЗамера / 1000 - 63555667200 + &ПоправкаЧасовогоПояса), ЧАС) КОГДА 2 @@ -388,7 +388,7 @@ //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ - ВЫБОР &ПереодичностьЗамеров + ВЫБОР &ПериодичностьЗамеров КОГДА 1 ТОГДА НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015, 1, 1), СЕКУНДА, (Замеры.ДатаНачалаЗамера + (&НачалоПериодаЧисло - &НачалоПериодаСравненияЧисло)) / 1000 - 63555667200 + &ПоправкаЧасовогоПояса), ЧАС) КОГДА 2 @@ -442,7 +442,7 @@ Замеры.ВыполненСОшибкой} СГРУППИРОВАТЬ ПО - ВЫБОР &ПереодичностьЗамеров + ВЫБОР &ПериодичностьЗамеров КОГДА 1 ТОГДА НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015, 1, 1), СЕКУНДА, (Замеры.ДатаНачалаЗамера + (&НачалоПериодаЧисло - &НачалоПериодаСравненияЧисло)) / 1000 - 63555667200 + &ПоправкаЧасовогоПояса), ЧАС) КОГДА 2 @@ -716,63 +716,6 @@ true Always - - ПереодичностьЗамеров - - <v8:item> - <v8:lang>ru</v8:lang> - <v8:content>Периодичность замеров</v8:content> - </v8:item> - - - xs:decimal - - 1 - 0 - Any - - - 0 - false - - 1 - - - ru - Час - - - - - 2 - - - ru - День - - - - - 3 - - - ru - Неделя - - - - - 4 - - - ru - Весь период - - - - true - Always - ВидСравнения @@ -1037,6 +980,63 @@ <expression>РАЗНОСТЬДАТ(УниверсальноеВремя(&Период.ДатаНачала), &Период.ДатаНачала, "Секунда")</expression> <use>Always</use> </parameter> + <parameter> + <name>ПериодичностьЗамеров</name> + <title xsi:type="v8:LocalStringType"> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Периодичность замеров</v8:content> + </v8:item> + + + xs:decimal + + 0 + 0 + Any + + + 0 + false + + 1 + + + ru + Час + + + + + 2 + + + ru + День + + + + + 3 + + + ru + Неделя + + + + + 4 + + + ru + Весь период + + + + true + Always +